From 269cc9e4177200c888d18992ee99c1515174b078 Mon Sep 17 00:00:00 2001 From: jonasgaudian <43753916+jonasgaudian@users.noreply.github.com> Date: Fri, 13 Feb 2026 00:15:36 +0100 Subject: [PATCH] migrate to gitea --- .gitignore | 15 + .idea/.gitignore | 3 + .idea/AndroidProjectSystem.xml | 6 + .idea/androidTestResultsUserPreferences.xml | 35 + .idea/appInsightsSettings.xml | 41 + .idea/compiler.xml | 6 + .idea/deploymentTargetSelector.xml | 24 + .idea/deviceManager.xml | 13 + .idea/gradle.xml | 20 + .idea/inspectionProfiles/Project_Default.xml | 93 ++ .idea/kotlinc.xml | 6 + .idea/markdown.xml | 8 + .idea/migrations.xml | 10 + .idea/misc.xml | 16 + .idea/runConfigurations.xml | 17 + .idea/valkyrie_settings.xml | 7 + .idea/vcs.xml | 6 + README.md | 19 + app/.gitignore | 1 + app/build.gradle.kts | 177 ++ app/proguard-rules.pro | 21 + .../translator/ApiRequestIntegrationTest.kt | 177 ++ .../translator/ExampleInstrumentedTest.kt | 21 + .../java/eu/gaudian/translator/TestConfig.kt | 17 + app/src/main/AndroidManifest.xml | 49 + app/src/main/assets/language_configs/de.json | 159 ++ app/src/main/assets/language_configs/en.json | 73 + app/src/main/assets/language_configs/es.json | 76 + app/src/main/assets/language_configs/fr.json | 130 ++ app/src/main/assets/language_configs/hr.json | 111 ++ app/src/main/assets/language_configs/it.json | 69 + app/src/main/assets/language_configs/nl.json | 69 + app/src/main/assets/language_configs/pt.json | 98 ++ app/src/main/assets/providers_config.json | 249 +++ app/src/main/ic_launcher-playstore.png | Bin 0 -> 155885 bytes .../eu/gaudian/translator/CorrectActivity.kt | 45 + .../eu/gaudian/translator/MyApplication.kt | 36 + .../gaudian/translator/di/RepositoryModule.kt | 90 + .../translator/model/DicitonaryEntry.kt | 28 + .../eu/gaudian/translator/model/Etymology.kt | 23 + .../eu/gaudian/translator/model/Exercise.kt | 122 ++ .../eu/gaudian/translator/model/Language.kt | 188 +++ .../gaudian/translator/model/LanguageModel.kt | 12 + .../translator/model/MyAppLanguageLevel.kt | 248 +++ .../model/TranslationHistoryItem.kt | 22 + .../eu/gaudian/translator/model/Vocabulary.kt | 147 ++ .../eu/gaudian/translator/model/WidgetType.kt | 39 + .../gaudian/translator/model/YouTubeData.kt | 18 + .../translator/model/communication/ApiLog.kt | 25 + .../model/communication/ApiManager.kt | 620 +++++++ .../model/communication/ApiProvider.kt | 142 ++ .../communication/FileDownloadManager.kt | 193 +++ .../model/communication/GeminiModels.kt | 17 + .../model/communication/LlmApiService.kt | 28 + .../model/communication/ManifestApiService.kt | 17 + .../model/communication/ManifestModels.kt | 41 + .../model/communication/ModelType.kt | 24 + .../model/communication/ModelsListResponse.kt | 82 + .../translator/model/communication/Request.kt | 54 + .../model/communication/RetrofitClient.kt | 183 ++ .../communication/WiktionaryApiService.kt | 18 + .../model/communication/WiktionaryModels.kt | 45 + .../translator/model/db/AppDatabase.kt | 90 + .../gaudian/translator/model/db/Converters.kt | 54 + .../eu/gaudian/translator/model/db/Daos.kt | 216 +++ .../translator/model/db/DatabaseEntities.kt | 51 + .../grammar/AdjectiveVariationsParser.kt | 195 +++ .../model/grammar/DictionaryJsonParser.kt | 439 +++++ .../model/grammar/GrammarConstants.kt | 53 + .../model/grammar/GrammaticalFeature.kt | 31 + .../translator/model/grammar/HowItWorks.txt | 50 + .../model/grammar/LanguageConfigModels.kt | 60 + .../LocalDictionaryMorphologyMapper.kt | 111 ++ .../model/grammar/MorphologyModels.kt | 65 + .../model/grammar/MorphologyRegistry.kt | 90 + .../model/grammar/MorphologyRules.kt | 36 + .../model/grammar/MorphologyStrategies.kt | 269 +++ .../model/grammar/SharedMorphologyUtils.kt | 80 + .../model/grammar/UnifiedGrammarModels.kt | 0 .../model/grammar/UnifiedMorphology.kt | 43 + .../model/grammar/UnifiedMorphologyParser.kt | 210 +++ .../model/grammar/formatGrammarDetails.kt | 38 + .../model/repository/ApiLogRepository.kt | 40 + .../model/repository/ApiRepository.kt | 356 ++++ .../translator/model/repository/DataStore.kt | 162 ++ .../DictionaryDatabaseRepository.kt | 137 ++ .../repository/DictionaryFileRepository.kt | 270 +++ .../model/repository/DictionaryJsonService.kt | 188 +++ .../repository/DictionaryLookupRepository.kt | 334 ++++ .../model/repository/DictionaryRepository.kt | 89 + .../model/repository/ExerciseRepository.kt | 96 ++ .../model/repository/LanguageRepository.kt | 367 ++++ .../translator/model/repository/Setting.kt | 41 + .../model/repository/SettingsRepository.kt | 163 ++ .../model/repository/VocabularyFileSaver.kt | 100 ++ .../model/repository/VocabularyRepository.kt | 792 +++++++++ .../translator/ui/theme/SemanticColors.kt | 154 ++ .../eu/gaudian/translator/ui/theme/Theme.kt | 206 +++ .../translator/ui/theme/ThemePreview.kt | 23 + .../gaudian/translator/ui/theme/Typography.kt | 20 + .../ui/theme/themes/AutumnSpiceTheme.kt | 85 + .../ui/theme/themes/CitrusSplashTheme.kt | 85 + .../translator/ui/theme/themes/CoffeeTheme.kt | 85 + .../ui/theme/themes/CrimsonTheme.kt | 85 + .../ui/theme/themes/CyberPunkTheme.kt | 87 + .../ui/theme/themes/DefaultTheme.kt | 85 + .../translator/ui/theme/themes/ForestTheme.kt | 85 + .../translator/ui/theme/themes/NordTheme.kt | 105 ++ .../translator/ui/theme/themes/OceanTheme.kt | 85 + .../translator/ui/theme/themes/Pixel.kt | 85 + .../translator/ui/theme/themes/SakuraTheme.kt | 85 + .../ui/theme/themes/SlatStoneTheme.kt | 85 + .../translator/ui/theme/themes/SpaceOpera.kt | 85 + .../translator/ui/theme/themes/Synthwave.kt | 85 + .../translator/ui/theme/themes/TealTheme.kt | 84 + .../ui/theme/themes/ThemeTwilight.kt | 85 + .../translator/utils/ApiRequestHandler.kt | 269 +++ .../translator/utils/ApiRequestTemplates.kt | 477 ++++++ .../translator/utils/ContextExtensions.kt | 14 + .../translator/utils/CorrectionService.kt | 36 + .../translator/utils/ExerciseHelpers.kt | 249 +++ .../translator/utils/ExerciseService.kt | 420 +++++ .../eu/gaudian/translator/utils/HtmlParser.kt | 119 ++ .../eu/gaudian/translator/utils/JsonHelper.kt | 292 ++++ .../java/eu/gaudian/translator/utils/Log.kt | 151 ++ .../translator/utils/MarkDownParser.kt | 49 + .../gaudian/translator/utils/PromptBuilder.kt | 40 + .../translator/utils/ProviderConfigParser.kt | 80 + .../translator/utils/PunctuationPreserver.kt | 92 + .../translator/utils/ResourceUsageDummy.kt | 132 ++ .../translator/utils/StatusMessageService.kt | 56 + .../gaudian/translator/utils/StringHelper.kt | 51 + .../translator/utils/TextToSpeechHelper.kt | 170 ++ .../translator/utils/TranslationService.kt | 297 ++++ .../translator/utils/VocabularyService.kt | 560 +++++++ .../translator/utils/YouTubeApiService.kt | 49 + .../utils/YouTubeExerciseService.kt | 99 ++ .../utils/dictionary/AbstractVerbParser.kt | 0 .../utils/dictionary/DictionaryService.kt | 252 +++ .../utils/dictionary/InflectionParser.kt | 11 + .../utils/dictionary/LocalDictionaryAccess.kt | 165 ++ .../utils/dictionary/LocalDictionaryParser.kt | 23 + .../dictionary/PartOfSpeechTranslator.kt | 86 + .../eu/gaudian/translator/view/IntroFlow.kt | 269 +++ .../gaudian/translator/view/MainActivity.kt | 404 +++++ .../eu/gaudian/translator/view/Navigation.kt | 426 +++++ .../translator/view/NoConncectionScreen.kt | 47 + .../translator/view/StatusMessageSystem.kt | 311 ++++ .../translator/view/composable/AppBox.kt | 125 ++ .../translator/view/composable/AppDialogs.kt | 513 ++++++ .../view/composable/AppDropdownMenu.kt | 478 ++++++ .../translator/view/composable/AppFabMenu.kt | 189 +++ .../translator/view/composable/AppIcons.kt | 291 ++++ .../translator/view/composable/AppSlider.kt | 87 + .../view/composable/AppTabLayout.kt | 166 ++ .../view/composable/AppTopAppBar.kt | 229 +++ .../view/composable/BottomNavigationBar.kt | 188 +++ .../view/composable/ComponentLibrary.kt | 892 ++++++++++ .../view/composable/LanguageDropDown.kt | 483 ++++++ .../view/composable/ModelIconResolver.kt | 136 ++ .../view/composable/OptionItemSwitch.kt | 91 + .../translator/view/composable/TestIcons.kt | 694 ++++++++ .../view/composable/TextComponents.kt | 80 + .../view/dialogs/AddCategoryDialog.kt | 415 +++++ .../view/dialogs/AddCostumLanguageDialog.kt | 122 ++ .../view/dialogs/AddVocabularyDialog.kt | 371 +++++ .../view/dialogs/CategoryDropdown.kt | 235 +++ .../view/dialogs/CategorySelectionDialog.kt | 69 + .../view/dialogs/CreateCategoryListDialog.kt | 91 + .../view/dialogs/DeleteCategoryDialog.kt | 44 + .../view/dialogs/DeleteItemsDialog.kt | 50 + .../dialogs/DeleteMultipleCategoriesDialog.kt | 51 + .../view/dialogs/EditCategoryDialog.kt | 149 ++ .../view/dialogs/EditLanguageDialog.kt | 100 ++ .../view/dialogs/ImportVocabularyDialog.kt | 208 +++ .../view/dialogs/MissingLanguageDialog.kt | 228 +++ .../view/dialogs/StageSelectionDialog.kt | 76 + .../view/dialogs/StartExerciseDialog.kt | 128 ++ .../translator/view/dialogs/VocabularyMenu.kt | 82 + .../view/dialogs/VocabularyReviewScreen.kt | 156 ++ .../view/dialogs/VocabularyStageDropdown.kt | 169 ++ .../translator/view/dialogs/WhatsNewDialog.kt | 94 ++ .../view/dictionary/CorrectionScreen.kt | 555 ++++++ .../dictionary/DictionaryManagerContent.kt | 181 ++ .../dictionary/DictionaryResultComponents.kt | 478 ++++++ .../view/dictionary/DictionaryResultScreen.kt | 442 +++++ .../view/dictionary/DictionaryScreen.kt | 45 + .../dictionary/DictionaryScreenContent.kt | 2 + .../dictionary/DictionaryTableComponents.kt | 257 +++ .../view/dictionary/EtymologyResultScreen.kt | 268 +++ .../view/dictionary/EtymologyScreen.kt | 108 ++ .../dictionary/LocalWordEntryComponents.kt | 1318 +++++++++++++++ .../view/dictionary/LocalWordEntryDisplay.kt | 103 ++ .../view/dictionary/MainDictionaryScreen.kt | 108 ++ .../MainDictionaryScreenComponents.kt | 746 +++++++++ .../translator/view/dictionary/VerbTable.kt | 189 +++ .../view/exercises/AiGenerationScreen.kt | 144 ++ .../view/exercises/ExerciseListScreen.kt | 113 ++ .../translator/view/exercises/ExerciseMenu.kt | 38 + .../view/exercises/ExerciseSessionScreen.kt | 569 +++++++ .../exercises/ExerciseVocabularyScreen.kt | 55 + .../view/exercises/GenerateExerciseDialog.kt | 214 +++ .../view/exercises/MainExerciseScreen.kt | 206 +++ .../translator/view/exercises/QuestionUIs.kt | 515 ++++++ .../view/exercises/YouTubeBrowserScreen.kt | 275 +++ .../view/exercises/YouTubeExerciseDialog.kt | 108 ++ .../view/exercises/YouTubeExerciseScreen.kt | 319 ++++ .../translator/view/hints/AddModelScanHint.kt | 154 ++ .../translator/view/hints/ApiKeyHints.kt | 125 ++ .../translator/view/hints/CategoryHint.kt | 116 ++ .../view/hints/CategoryHintScreen.kt | 131 ++ .../view/hints/DictionaryOptionsHint.kt | 79 + .../view/hints/ExampleModernHint.kt | 162 ++ .../eu/gaudian/translator/view/hints/Hint.kt | 324 ++++ .../translator/view/hints/HintBottomSheet.kt | 73 + .../translator/view/hints/HintComposable.kt | 95 ++ .../translator/view/hints/HintElement.kt | 261 +++ .../translator/view/hints/HintScreen.kt | 51 + .../translator/view/hints/HintScreens.kt | 121 ++ .../view/hints/HintsOverviewScreen.kt | 188 +++ .../view/hints/ImportVocabularyHints.kt | 173 ++ .../view/hints/LearningStagesHint.kt | 200 +++ .../view/hints/SortingScreenHint.kt | 239 +++ .../view/hints/TranslationScreenHint.kt | 104 ++ .../view/hints/VocabularyProgressHint.kt | 122 ++ .../translator/view/settings/AboutScreen.kt | 508 ++++++ .../view/settings/AddModelScreen.kt | 709 ++++++++ .../translator/view/settings/ApiKeyScreen.kt | 1482 +++++++++++++++++ .../view/settings/BasePromptSettingsScreen.kt | 391 +++++ .../view/settings/CustomPromptScreens.kt | 89 + .../view/settings/DictionaryOptionsScreen.kt | 203 +++ .../view/settings/ExerciseSettingsScreen.kt | 155 ++ .../view/settings/GeneralSettingsScreen.kt | 88 + .../view/settings/LanguageOptionsScreen.kt | 189 +++ .../view/settings/LayoutOptionsScreen.kt | 410 +++++ .../translator/view/settings/LogsScreen.kt | 509 ++++++ .../view/settings/MainSettingsScreen.kt | 179 ++ .../view/settings/SettingsNavGraph.kt | 144 ++ .../settings/TextToSpeechSettingsScreen.kt | 227 +++ .../view/settings/ThemePreviewScreen.kt | 213 +++ .../view/settings/TranslationSettings.kt | 115 ++ .../VocabularyProgressOptionsScreen.kt | 450 +++++ .../VocabularyRepositoryOptionsScreen.kt | 433 +++++ .../translator/view/translation/InputCard.kt | 201 +++ .../view/translation/LanguageSelectorBar.kt | 178 ++ .../view/translation/MainTranslationScreen.kt | 401 +++++ .../translator/view/translation/OutputCard.kt | 389 +++++ .../view/translation/TranlsationScreen.kt | 98 ++ .../view/translation/TranslationHistory.kt | 382 +++++ .../view/vocabulary/CategoryDetailScreen.kt | 270 +++ .../view/vocabulary/CategoryListScreen.kt | 336 ++++ .../view/vocabulary/DashboardContent.kt | 678 ++++++++ .../view/vocabulary/ExerciseControls.kt | 119 ++ .../vocabulary/ExerciseProgressIndicator.kt | 179 ++ .../view/vocabulary/LanguageProgressScreen.kt | 372 +++++ .../view/vocabulary/MainVocabularyScreen.kt | 452 +++++ .../view/vocabulary/NoGrammarItemsScreen.kt | 213 +++ .../view/vocabulary/NoVocabularyScreen.kt | 107 ++ .../view/vocabulary/ResultScreen.kt | 267 +++ .../view/vocabulary/StageDetailScreen.kt | 76 + .../translator/view/vocabulary/StartScreen.kt | 470 ++++++ .../view/vocabulary/StartScreenContent.kt | 148 ++ .../view/vocabulary/VocabularyCardHost.kt | 370 ++++ .../view/vocabulary/VocabularyExercise.kt | 516 ++++++ .../VocabularyExerciseHostScreen.kt | 288 ++++ .../vocabulary/VocabularyHeatMapScreen.kt | 554 ++++++ .../view/vocabulary/VocabularyListScreen.kt | 973 +++++++++++ .../vocabulary/VocabularySortingScreen.kt | 861 ++++++++++ .../card/AdditionalContentBottomSheet.kt | 556 +++++++ .../vocabulary/card/DraggableActionPanel.kt | 244 +++ .../view/vocabulary/card/GrammarComponents.kt | 515 ++++++ .../view/vocabulary/card/VocabularyCard.kt | 782 +++++++++ .../vocabulary/widgets/AllVocabularyWidget.kt | 79 + .../view/vocabulary/widgets/CategoryWidget.kt | 364 ++++ .../view/vocabulary/widgets/DueTodayWidget.kt | 72 + .../vocabulary/widgets/LanguageLevelWidget.kt | 123 ++ .../view/vocabulary/widgets/LevelWidget.kt | 133 ++ .../vocabulary/widgets/ModernStartButton.kt | 200 +++ .../vocabulary/widgets/StageProgressBar.kt | 173 ++ .../view/vocabulary/widgets/StatusWidget.kt | 145 ++ .../view/vocabulary/widgets/StreakWidget.kt | 259 +++ .../widgets/WeeklyActivityChartWidget.kt | 214 +++ .../vocabulary/widgets/WidgetButtonOutline.kt | 79 + .../translator/viewmodel/ApiViewModel.kt | 373 +++++ .../translator/viewmodel/CategoryViewModel.kt | 150 ++ .../viewmodel/CorrectionViewModel.kt | 153 ++ .../viewmodel/DictionaryViewModel.kt | 1016 +++++++++++ .../translator/viewmodel/ExerciseViewModel.kt | 619 +++++++ .../viewmodel/LanguageConfigViewModel.kt | 108 ++ .../translator/viewmodel/LanguageViewModel.kt | 196 +++ .../translator/viewmodel/ProgressViewModel.kt | 317 ++++ .../translator/viewmodel/SettingsViewModel.kt | 282 ++++ .../translator/viewmodel/StatusViewModel.kt | 301 ++++ .../viewmodel/TranslationViewModel.kt | 344 ++++ .../viewmodel/VocabularyExerciseViewModel.kt | 489 ++++++ .../viewmodel/VocabularyViewModel.kt | 1327 +++++++++++++++ app/src/main/res/drawable/ic_empty.png | Bin 0 -> 39146 bytes .../res/drawable/ic_icon_construction.png | Bin 0 -> 71028 bytes .../main/res/drawable/ic_inro_practice.png | Bin 0 -> 59982 bytes .../main/res/drawable/ic_intro_ai_agents.png | Bin 0 -> 74153 bytes .../main/res/drawable/ic_intro_categories.png | Bin 0 -> 74881 bytes .../main/res/drawable/ic_intro_flashcards.png | Bin 0 -> 71699 bytes app/src/main/res/drawable/ic_intro_help.png | Bin 0 -> 60544 bytes .../drawable/ic_intro_learning_journey.png | Bin 0 -> 45826 bytes app/src/main/res/drawable/ic_intro_lookup.png | Bin 0 -> 72297 bytes app/src/main/res/drawable/ic_intro_robot.png | Bin 0 -> 70738 bytes .../res/drawable/ic_intro_track_progress.png | Bin 0 -> 62293 bytes .../main/res/drawable/ic_intro_welcome.png | Bin 0 -> 55961 bytes .../res/drawable/ic_launcher_background.xml | 74 + .../main/res/drawable/ic_level_auctioneer.png | Bin 0 -> 194438 bytes .../res/drawable/ic_level_avid_debater.png | Bin 0 -> 270091 bytes app/src/main/res/drawable/ic_level_bee.png | Bin 0 -> 209421 bytes app/src/main/res/drawable/ic_level_bonobo.png | Bin 0 -> 154112 bytes .../main/res/drawable/ic_level_bookworm.png | Bin 0 -> 193969 bytes app/src/main/res/drawable/ic_level_chaser.png | Bin 0 -> 86680 bytes app/src/main/res/drawable/ic_level_crow.png | Bin 0 -> 178165 bytes app/src/main/res/drawable/ic_level_echo.png | Bin 0 -> 103941 bytes .../main/res/drawable/ic_level_elephant.png | Bin 0 -> 118534 bytes .../res/drawable/ic_level_first_grader.png | Bin 0 -> 76279 bytes .../main/res/drawable/ic_level_goldfish.png | Bin 0 -> 108666 bytes .../main/res/drawable/ic_level_gorilla.png | Bin 0 -> 210639 bytes .../drawable/ic_level_high_school_grad.png | Bin 0 -> 254768 bytes .../main/res/drawable/ic_level_journalist.png | Bin 0 -> 203005 bytes .../res/drawable/ic_level_master_linguist.png | Bin 0 -> 74770 bytes .../res/drawable/ic_level_middle_schooler.png | Bin 0 -> 223314 bytes .../main/res/drawable/ic_level_newborn.png | Bin 0 -> 149580 bytes .../main/res/drawable/ic_level_novelist.png | Bin 0 -> 250862 bytes app/src/main/res/drawable/ic_level_oracle.png | Bin 0 -> 239076 bytes app/src/main/res/drawable/ic_level_parrot.png | Bin 0 -> 211640 bytes .../main/res/drawable/ic_level_parrotlet.png | Bin 0 -> 91563 bytes app/src/main/res/drawable/ic_level_pigeon.png | Bin 0 -> 197519 bytes .../main/res/drawable/ic_level_professor.png | Bin 0 -> 261516 bytes app/src/main/res/drawable/ic_level_puppy.png | Bin 0 -> 258060 bytes app/src/main/res/drawable/ic_level_rico.png | Bin 0 -> 149908 bytes .../main/res/drawable/ic_level_sea_lion.png | Bin 0 -> 143893 bytes .../res/drawable/ic_level_shakespeare.png | Bin 0 -> 67080 bytes .../main/res/drawable/ic_level_toddler.png | Bin 0 -> 77633 bytes .../main/res/drawable/ic_nothing_found.png | Bin 0 -> 60815 bytes app/src/main/res/drawable/no_connection.png | Bin 0 -> 67463 bytes app/src/main/res/font/lato_regular.ttf | Bin 0 -> 75152 bytes app/src/main/res/font/lora_regular.ttf | Bin 0 -> 133888 bytes .../main/res/font/merriweather_regular.ttf | Bin 0 -> 1066524 bytes app/src/main/res/font/opensans_regular.ttf | Bin 0 -> 130832 bytes .../main/res/font/playfairdisplay_regular.ttf | Bin 0 -> 193380 bytes app/src/main/res/font/roboto_regular.ttf | Bin 0 -> 146004 bytes .../main/res/mipmap-anydpi/ic_launcher.xml | 5 + .../res/mipmap-anydpi/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 3084 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 6808 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 5218 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 1962 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 3690 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 3086 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 4582 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 10662 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 7564 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 8114 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 20522 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 13046 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 12580 bytes .../ic_launcher_foreground.webp | Bin 0 -> 34232 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 19918 bytes app/src/main/res/values-de-rDE/app_values.xml | 3 + app/src/main/res/values-de-rDE/arrays.xml | 39 + .../main/res/values-de-rDE/hint_strings.xml | 129 ++ .../main/res/values-de-rDE/intro_strings.xml | 27 + .../res/values-de-rDE/language_levels.xml | 85 + app/src/main/res/values-de-rDE/languages.xml | 110 ++ app/src/main/res/values-de-rDE/strings.xml | 877 ++++++++++ app/src/main/res/values-night/themes.xml | 4 + app/src/main/res/values-pt-rBR/app_values.xml | 3 + app/src/main/res/values-pt-rBR/arrays.xml | 40 + .../main/res/values-pt-rBR/hint_strings.xml | 129 ++ .../main/res/values-pt-rBR/intro_strings.xml | 27 + .../res/values-pt-rBR/language_levels.xml | 85 + app/src/main/res/values-pt-rBR/languages.xml | 110 ++ app/src/main/res/values-pt-rBR/strings.xml | 876 ++++++++++ app/src/main/res/values/app_values.xml | 8 + app/src/main/res/values/arrays.xml | 52 + app/src/main/res/values/hint_strings.xml | 153 ++ app/src/main/res/values/intro_strings.xml | 37 + app/src/main/res/values/language_levels.xml | 113 ++ app/src/main/res/values/languages.xml | 110 ++ app/src/main/res/values/native_languages.xml | 55 + app/src/main/res/values/strings.xml | 1052 ++++++++++++ app/src/main/res/values/themes.xml | 12 + app/src/main/res/xml/backup_rules.xml | 13 + .../main/res/xml/data_extraction_rules.xml | 19 + .../main/res/xml/network_security_config.xml | 17 + .../gaudian/translator/HiltTestApplication.kt | 5 + .../grammar/AdjectiveVariationsParserTest.kt | 253 +++ .../model/grammar/DictionaryJsonParserTest.kt | 512 ++++++ .../LocalDictionaryMorphologyMapperTest.kt | 110 ++ .../translator/utils/ApiArchitectureTest.kt | 511 ++++++ .../eu/gaudian/translator/utils/BaseTest.kt | 36 + .../translator/utils/JsonHelperTest.kt | 323 ++++ .../translator/utils/ServiceFixesTest.kt | 203 +++ .../viewmodel/SettingsViewModelTest.kt | 89 + build.gradle.kts | 9 + docs/API_REQUEST_ARCHITECTURE.md | 368 ++++ gradle.properties | 33 + gradle/libs.versions.toml | 108 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 185 ++ gradlew.bat | 89 + settings.gradle.kts | 28 + 407 files changed, 66841 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/AndroidProjectSystem.xml create mode 100644 .idea/androidTestResultsUserPreferences.xml create mode 100644 .idea/appInsightsSettings.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/deploymentTargetSelector.xml create mode 100644 .idea/deviceManager.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/kotlinc.xml create mode 100644 .idea/markdown.xml create mode 100644 .idea/migrations.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/valkyrie_settings.xml create mode 100644 .idea/vcs.xml create mode 100644 README.md create mode 100644 app/.gitignore create mode 100644 app/build.gradle.kts create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/eu/gaudian/translator/ApiRequestIntegrationTest.kt create mode 100644 app/src/androidTest/java/eu/gaudian/translator/ExampleInstrumentedTest.kt create mode 100644 app/src/androidTest/java/eu/gaudian/translator/TestConfig.kt create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/assets/language_configs/de.json create mode 100644 app/src/main/assets/language_configs/en.json create mode 100644 app/src/main/assets/language_configs/es.json create mode 100644 app/src/main/assets/language_configs/fr.json create mode 100644 app/src/main/assets/language_configs/hr.json create mode 100644 app/src/main/assets/language_configs/it.json create mode 100644 app/src/main/assets/language_configs/nl.json create mode 100644 app/src/main/assets/language_configs/pt.json create mode 100644 app/src/main/assets/providers_config.json create mode 100644 app/src/main/ic_launcher-playstore.png create mode 100644 app/src/main/java/eu/gaudian/translator/CorrectActivity.kt create mode 100644 app/src/main/java/eu/gaudian/translator/MyApplication.kt create mode 100644 app/src/main/java/eu/gaudian/translator/di/RepositoryModule.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/DicitonaryEntry.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/Etymology.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/Exercise.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/Language.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/LanguageModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/MyAppLanguageLevel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/TranslationHistoryItem.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/Vocabulary.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/WidgetType.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/YouTubeData.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/ApiLog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/ApiManager.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/ApiProvider.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/FileDownloadManager.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/GeminiModels.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/LlmApiService.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/ManifestApiService.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/ManifestModels.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/ModelType.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/ModelsListResponse.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/Request.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/RetrofitClient.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/WiktionaryApiService.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/communication/WiktionaryModels.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/db/AppDatabase.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/db/Converters.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/db/Daos.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/db/DatabaseEntities.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/AdjectiveVariationsParser.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/DictionaryJsonParser.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/GrammarConstants.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/GrammaticalFeature.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/HowItWorks.txt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/LanguageConfigModels.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/LocalDictionaryMorphologyMapper.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyModels.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyRegistry.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyRules.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyStrategies.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/SharedMorphologyUtils.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/UnifiedGrammarModels.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/UnifiedMorphology.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/UnifiedMorphologyParser.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/grammar/formatGrammarDetails.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/ApiLogRepository.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/ApiRepository.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/DataStore.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/DictionaryDatabaseRepository.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/DictionaryFileRepository.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/DictionaryJsonService.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/DictionaryLookupRepository.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/DictionaryRepository.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/ExerciseRepository.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/LanguageRepository.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/Setting.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/SettingsRepository.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/VocabularyFileSaver.kt create mode 100644 app/src/main/java/eu/gaudian/translator/model/repository/VocabularyRepository.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/SemanticColors.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/Theme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/ThemePreview.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/Typography.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/AutumnSpiceTheme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/CitrusSplashTheme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/CoffeeTheme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/CrimsonTheme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/CyberPunkTheme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/DefaultTheme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/ForestTheme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/NordTheme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/OceanTheme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/Pixel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/SakuraTheme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/SlatStoneTheme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/SpaceOpera.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/Synthwave.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/TealTheme.kt create mode 100644 app/src/main/java/eu/gaudian/translator/ui/theme/themes/ThemeTwilight.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/ApiRequestHandler.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/ApiRequestTemplates.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/ContextExtensions.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/CorrectionService.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/ExerciseHelpers.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/ExerciseService.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/HtmlParser.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/JsonHelper.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/Log.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/MarkDownParser.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/PromptBuilder.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/ProviderConfigParser.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/PunctuationPreserver.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/ResourceUsageDummy.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/StatusMessageService.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/StringHelper.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/TextToSpeechHelper.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/TranslationService.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/VocabularyService.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/YouTubeApiService.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/YouTubeExerciseService.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/dictionary/AbstractVerbParser.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/dictionary/DictionaryService.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/dictionary/InflectionParser.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/dictionary/LocalDictionaryAccess.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/dictionary/LocalDictionaryParser.kt create mode 100644 app/src/main/java/eu/gaudian/translator/utils/dictionary/PartOfSpeechTranslator.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/IntroFlow.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/MainActivity.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/Navigation.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/NoConncectionScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/StatusMessageSystem.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/AppBox.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/AppDialogs.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/AppDropdownMenu.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/AppFabMenu.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/AppIcons.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/AppSlider.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/AppTabLayout.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/AppTopAppBar.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/BottomNavigationBar.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/ComponentLibrary.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/LanguageDropDown.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/ModelIconResolver.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/OptionItemSwitch.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/TestIcons.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/composable/TextComponents.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/AddCategoryDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/AddCostumLanguageDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/AddVocabularyDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/CategoryDropdown.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/CategorySelectionDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/CreateCategoryListDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/DeleteCategoryDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/DeleteItemsDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/DeleteMultipleCategoriesDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/EditCategoryDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/EditLanguageDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/ImportVocabularyDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/MissingLanguageDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/StageSelectionDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/StartExerciseDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyMenu.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyReviewScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyStageDropdown.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dialogs/WhatsNewDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/CorrectionScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryManagerContent.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryResultComponents.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryResultScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryScreenContent.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryTableComponents.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/EtymologyResultScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/EtymologyScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/LocalWordEntryComponents.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/LocalWordEntryDisplay.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/MainDictionaryScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/MainDictionaryScreenComponents.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/dictionary/VerbTable.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/exercises/AiGenerationScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseListScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseMenu.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseSessionScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseVocabularyScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/exercises/GenerateExerciseDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/exercises/MainExerciseScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/exercises/QuestionUIs.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/exercises/YouTubeBrowserScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/exercises/YouTubeExerciseDialog.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/exercises/YouTubeExerciseScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/AddModelScanHint.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/ApiKeyHints.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/CategoryHint.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/CategoryHintScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/DictionaryOptionsHint.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/ExampleModernHint.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/Hint.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/HintBottomSheet.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/HintComposable.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/HintElement.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/HintScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/HintScreens.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/HintsOverviewScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/ImportVocabularyHints.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/LearningStagesHint.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/SortingScreenHint.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/TranslationScreenHint.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/hints/VocabularyProgressHint.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/AboutScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/AddModelScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/ApiKeyScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/BasePromptSettingsScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/CustomPromptScreens.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/DictionaryOptionsScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/ExerciseSettingsScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/GeneralSettingsScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/LanguageOptionsScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/LayoutOptionsScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/LogsScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/MainSettingsScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/SettingsNavGraph.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/TextToSpeechSettingsScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/ThemePreviewScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/TranslationSettings.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/VocabularyProgressOptionsScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/settings/VocabularyRepositoryOptionsScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/translation/InputCard.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/translation/LanguageSelectorBar.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/translation/MainTranslationScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/translation/OutputCard.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/translation/TranlsationScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/translation/TranslationHistory.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/CategoryDetailScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/CategoryListScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/DashboardContent.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/ExerciseControls.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/ExerciseProgressIndicator.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/LanguageProgressScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/MainVocabularyScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/NoGrammarItemsScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/NoVocabularyScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/ResultScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/StageDetailScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/StartScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/StartScreenContent.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyCardHost.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyExercise.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyExerciseHostScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyHeatMapScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyListScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularySortingScreen.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/card/AdditionalContentBottomSheet.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/card/DraggableActionPanel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/card/GrammarComponents.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/card/VocabularyCard.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/AllVocabularyWidget.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/CategoryWidget.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/DueTodayWidget.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/LanguageLevelWidget.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/LevelWidget.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/ModernStartButton.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/StageProgressBar.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/StatusWidget.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/StreakWidget.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/WeeklyActivityChartWidget.kt create mode 100644 app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/WidgetButtonOutline.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/ApiViewModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/CategoryViewModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/CorrectionViewModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/DictionaryViewModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/ExerciseViewModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/LanguageConfigViewModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/LanguageViewModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/ProgressViewModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/SettingsViewModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/StatusViewModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/TranslationViewModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/VocabularyExerciseViewModel.kt create mode 100644 app/src/main/java/eu/gaudian/translator/viewmodel/VocabularyViewModel.kt create mode 100644 app/src/main/res/drawable/ic_empty.png create mode 100644 app/src/main/res/drawable/ic_icon_construction.png create mode 100644 app/src/main/res/drawable/ic_inro_practice.png create mode 100644 app/src/main/res/drawable/ic_intro_ai_agents.png create mode 100644 app/src/main/res/drawable/ic_intro_categories.png create mode 100644 app/src/main/res/drawable/ic_intro_flashcards.png create mode 100644 app/src/main/res/drawable/ic_intro_help.png create mode 100644 app/src/main/res/drawable/ic_intro_learning_journey.png create mode 100644 app/src/main/res/drawable/ic_intro_lookup.png create mode 100644 app/src/main/res/drawable/ic_intro_robot.png create mode 100644 app/src/main/res/drawable/ic_intro_track_progress.png create mode 100644 app/src/main/res/drawable/ic_intro_welcome.png create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/ic_level_auctioneer.png create mode 100644 app/src/main/res/drawable/ic_level_avid_debater.png create mode 100644 app/src/main/res/drawable/ic_level_bee.png create mode 100644 app/src/main/res/drawable/ic_level_bonobo.png create mode 100644 app/src/main/res/drawable/ic_level_bookworm.png create mode 100644 app/src/main/res/drawable/ic_level_chaser.png create mode 100644 app/src/main/res/drawable/ic_level_crow.png create mode 100644 app/src/main/res/drawable/ic_level_echo.png create mode 100644 app/src/main/res/drawable/ic_level_elephant.png create mode 100644 app/src/main/res/drawable/ic_level_first_grader.png create mode 100644 app/src/main/res/drawable/ic_level_goldfish.png create mode 100644 app/src/main/res/drawable/ic_level_gorilla.png create mode 100644 app/src/main/res/drawable/ic_level_high_school_grad.png create mode 100644 app/src/main/res/drawable/ic_level_journalist.png create mode 100644 app/src/main/res/drawable/ic_level_master_linguist.png create mode 100644 app/src/main/res/drawable/ic_level_middle_schooler.png create mode 100644 app/src/main/res/drawable/ic_level_newborn.png create mode 100644 app/src/main/res/drawable/ic_level_novelist.png create mode 100644 app/src/main/res/drawable/ic_level_oracle.png create mode 100644 app/src/main/res/drawable/ic_level_parrot.png create mode 100644 app/src/main/res/drawable/ic_level_parrotlet.png create mode 100644 app/src/main/res/drawable/ic_level_pigeon.png create mode 100644 app/src/main/res/drawable/ic_level_professor.png create mode 100644 app/src/main/res/drawable/ic_level_puppy.png create mode 100644 app/src/main/res/drawable/ic_level_rico.png create mode 100644 app/src/main/res/drawable/ic_level_sea_lion.png create mode 100644 app/src/main/res/drawable/ic_level_shakespeare.png create mode 100644 app/src/main/res/drawable/ic_level_toddler.png create mode 100644 app/src/main/res/drawable/ic_nothing_found.png create mode 100644 app/src/main/res/drawable/no_connection.png create mode 100644 app/src/main/res/font/lato_regular.ttf create mode 100644 app/src/main/res/font/lora_regular.ttf create mode 100644 app/src/main/res/font/merriweather_regular.ttf create mode 100644 app/src/main/res/font/opensans_regular.ttf create mode 100644 app/src/main/res/font/playfairdisplay_regular.ttf create mode 100644 app/src/main/res/font/roboto_regular.ttf create mode 100644 app/src/main/res/mipmap-anydpi/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/values-de-rDE/app_values.xml create mode 100644 app/src/main/res/values-de-rDE/arrays.xml create mode 100644 app/src/main/res/values-de-rDE/hint_strings.xml create mode 100644 app/src/main/res/values-de-rDE/intro_strings.xml create mode 100644 app/src/main/res/values-de-rDE/language_levels.xml create mode 100644 app/src/main/res/values-de-rDE/languages.xml create mode 100644 app/src/main/res/values-de-rDE/strings.xml create mode 100644 app/src/main/res/values-night/themes.xml create mode 100644 app/src/main/res/values-pt-rBR/app_values.xml create mode 100644 app/src/main/res/values-pt-rBR/arrays.xml create mode 100644 app/src/main/res/values-pt-rBR/hint_strings.xml create mode 100644 app/src/main/res/values-pt-rBR/intro_strings.xml create mode 100644 app/src/main/res/values-pt-rBR/language_levels.xml create mode 100644 app/src/main/res/values-pt-rBR/languages.xml create mode 100644 app/src/main/res/values-pt-rBR/strings.xml create mode 100644 app/src/main/res/values/app_values.xml create mode 100644 app/src/main/res/values/arrays.xml create mode 100644 app/src/main/res/values/hint_strings.xml create mode 100644 app/src/main/res/values/intro_strings.xml create mode 100644 app/src/main/res/values/language_levels.xml create mode 100644 app/src/main/res/values/languages.xml create mode 100644 app/src/main/res/values/native_languages.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/main/res/xml/backup_rules.xml create mode 100644 app/src/main/res/xml/data_extraction_rules.xml create mode 100644 app/src/main/res/xml/network_security_config.xml create mode 100644 app/src/test/java/eu/gaudian/translator/HiltTestApplication.kt create mode 100644 app/src/test/java/eu/gaudian/translator/model/grammar/AdjectiveVariationsParserTest.kt create mode 100644 app/src/test/java/eu/gaudian/translator/model/grammar/DictionaryJsonParserTest.kt create mode 100644 app/src/test/java/eu/gaudian/translator/model/grammar/LocalDictionaryMorphologyMapperTest.kt create mode 100644 app/src/test/java/eu/gaudian/translator/utils/ApiArchitectureTest.kt create mode 100644 app/src/test/java/eu/gaudian/translator/utils/BaseTest.kt create mode 100644 app/src/test/java/eu/gaudian/translator/utils/JsonHelperTest.kt create mode 100644 app/src/test/java/eu/gaudian/translator/utils/ServiceFixesTest.kt create mode 100644 app/src/test/java/eu/gaudian/translator/viewmodel/SettingsViewModelTest.kt create mode 100644 build.gradle.kts create mode 100644 docs/API_REQUEST_ARCHITECTURE.md create mode 100644 gradle.properties create mode 100644 gradle/libs.versions.toml create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle.kts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml new file mode 100644 index 0000000..4a53bee --- /dev/null +++ b/.idea/AndroidProjectSystem.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/androidTestResultsUserPreferences.xml b/.idea/androidTestResultsUserPreferences.xml new file mode 100644 index 0000000..e6a8cc5 --- /dev/null +++ b/.idea/androidTestResultsUserPreferences.xml @@ -0,0 +1,35 @@ + + + + + + \ No newline at end of file diff --git a/.idea/appInsightsSettings.xml b/.idea/appInsightsSettings.xml new file mode 100644 index 0000000..baa829c --- /dev/null +++ b/.idea/appInsightsSettings.xml @@ -0,0 +1,41 @@ + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b86273d --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000..bb3a40c --- /dev/null +++ b/.idea/deploymentTargetSelector.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml new file mode 100644 index 0000000..91f9558 --- /dev/null +++ b/.idea/deviceManager.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..7b3006b --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..911a4a5 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,93 @@ + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..6d0ee1c --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/markdown.xml b/.idea/markdown.xml new file mode 100644 index 0000000..c61ea33 --- /dev/null +++ b/.idea/markdown.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..11b06af --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..16660f1 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/.idea/valkyrie_settings.xml b/.idea/valkyrie_settings.xml new file mode 100644 index 0000000..c5f8696 --- /dev/null +++ b/.idea/valkyrie_settings.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..317b16d --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# Translator/Vocabulary App + +A Translator/Vocabulary App which uses the Mistral API OpenAI chat completion to perform translations, look up words in a dictionary, and generate vocabulary items. + +## Features +| Feature | Description | + |-----------------------|---------------------------------------------------------------------------------------------------------------------------------------| + | Language Selection | Selection of 50 pre-defined languages, with the ability to add custom languages and dialects | + | Translation | Translate between given and customizable languages, including a translation history and pronunciation (only some languages supported) | + | Dictionary Lookup | Look up terms in a dictionary | + | Vocabulary Generation | Generate vocabulary items with the help of AI or add them manually | + | Learning Exercises | Learn vocabulary cards by customizable exercises (e.g., spelling mode) | + | Vocabulary Management | Manage vocabulary cards by sorting them into stages (progress), languages, custom categories, etc. | + | Overview | Overview of learned vocabulary and vocabulary in different stages (new, ..., learned) | + +## UI/UX + | Aspect | Description | + |--------------|-------------------------------------------------------------------------| + | UI Framework | Uses the classic Android Fragment UI and Composable for certain dialogs | diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..1a47b46 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,177 @@ +@file:Suppress("HardCodedStringLiteral") + +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.hilt.android) + id("kotlin-parcelize") + id("org.jetbrains.kotlin.plugin.serialization") + id("com.google.devtools.ksp") +} + +android { + namespace = "eu.gaudian.translator" + compileSdk = 36 + + defaultConfig { + applicationId = "eu.gaudian.translator" + minSdk = 28 + targetSdk = 36 + versionCode = 21 + versionName = "0.4.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + testOptions { + execution = "ANDROIDX_TEST_ORCHESTRATOR" + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + val buildTime = SimpleDateFormat("dd.MM.yyyy HH:mm", Locale.getDefault()).format(Date()) + buildConfigField("String", "BUILD_TIME", "\"$buildTime\"") + signingConfig = signingConfigs.getByName("debug") + } + debug { + val buildTime = SimpleDateFormat("dd.MM.yyyy HH:mm", Locale.getDefault()).format(Date()) + buildConfigField("String", "BUILD_TIME", "\"$buildTime\"") + } + } + + tasks.withType().configureEach { + compilerOptions.freeCompilerArgs.addAll( + "-opt-in=kotlin.time.ExperimentalTime", + + "-opt-in=androidx.compose.material3.ExperimentalMaterial3Api", + "-opt-in=androidx.compose.ui.ExperimentalComposeUiApi" + ) + } + kotlin { + compilerOptions { + jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11) + } + } + buildFeatures { + compose = true + viewBinding = false + dataBinding = false + buildConfig = true + } + + packaging { + // This keeps your original resource exclusions + resources { + excludes += "/META-INF/{AL2.0,LGPL2.1}" + excludes += "**/dump_syms.bin" + } + jniLibs { + useLegacyPackaging = true + } + } + configurations.all { + exclude(group = "com.intellij", module = "annotations") + } + buildToolsVersion = "36.0.0" +} + +dependencies { + implementation(platform(libs.androidx.compose.bom)) + + // Core & UI + implementation(libs.androidx.core.ktx) + implementation(libs.material) + implementation(libs.androidx.activity.compose) + implementation(libs.androidx.core.splashscreen) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.lifecycle.viewmodel.compose) + implementation(libs.androidx.lifecycle.viewmodel.ktx) + implementation(libs.timber) + + // Compose + implementation(libs.androidx.ui) + implementation(libs.androidx.ui.graphics) + implementation(libs.androidx.ui.tooling.preview) + implementation(libs.androidx.foundation) + implementation(libs.androidx.foundation.layout) + implementation(libs.androidx.animation) + implementation(libs.androidx.animation.core) + implementation(libs.androidx.material3) + implementation(libs.androidx.material.icons.extended) + implementation(libs.reorderable) + + // Navigation + implementation(libs.androidx.navigation.compose) + + // Data + implementation(libs.androidx.datastore.preferences) + implementation(libs.androidx.paging.runtime.ktx) + implementation(libs.kotlinx.coroutines.core) + implementation(libs.kotlinx.coroutines.android) + implementation(libs.kotlinx.datetime) + implementation(libs.kotlinx.serialization.json) + + // Room Database + implementation(libs.androidx.room.runtime) // ADDED: Explicitly add runtime + implementation(libs.androidx.room.ktx) + implementation(libs.core.ktx) + ksp(libs.room.compiler) // CHANGED: Use ksp instead of implementation + + // Networking + implementation(libs.retrofit) + implementation(libs.converter.gson) + implementation(libs.logging.interceptor) + + implementation(libs.androidx.annotation) + implementation(libs.kotlin.stdlib) + + implementation(libs.jsoup) + implementation(libs.core) + + // Hilt + implementation(libs.hilt.android) + implementation(libs.hilt.navigation.compose) + ksp(libs.hilt.android.compiler) + + // Debug and Test + debugImplementation(libs.ui.tooling) + debugImplementation(libs.ui.test.manifest) + testImplementation(libs.junit) + testImplementation(libs.kotlinx.coroutines.test) + testImplementation(libs.androidx.core.testing) + testImplementation(libs.hilt.android.testing) + testAnnotationProcessor(libs.hilt.android.compiler) + testImplementation(libs.mockito.core) + testImplementation(libs.mockito.kotlin) + testImplementation(libs.mockk) + testImplementation(libs.truth) + testImplementation(libs.androidx.runner) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(platform(libs.androidx.compose.bom)) + androidTestImplementation(libs.androidx.ui.test.junit4) + androidTestImplementation(libs.androidx.navigation.testing) + + //noinspection UseTomlInstead + implementation("com.pierfrancescosoffritti.androidyoutubeplayer:core:13.0.0") + + // Compression + testImplementation (libs.zstd.jni) + implementation(libs.zstd.jni.get().toString() + "@aar") + +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/eu/gaudian/translator/ApiRequestIntegrationTest.kt b/app/src/androidTest/java/eu/gaudian/translator/ApiRequestIntegrationTest.kt new file mode 100644 index 0000000..8471d22 --- /dev/null +++ b/app/src/androidTest/java/eu/gaudian/translator/ApiRequestIntegrationTest.kt @@ -0,0 +1,177 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator + +import android.content.Context +import android.util.Log +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import eu.gaudian.translator.model.communication.ApiManager +import eu.gaudian.translator.utils.ApiRequestHandler +import eu.gaudian.translator.utils.DictionaryDefinitionRequest +import eu.gaudian.translator.utils.TextCorrectionRequest +import eu.gaudian.translator.utils.TextTranslationRequest +import eu.gaudian.translator.utils.VocabularyGenerationRequest +import kotlinx.coroutines.runBlocking +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotEquals +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertTrue +import org.junit.Assert.fail +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TestWatcher +import org.junit.runner.Description +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class ApiRequestIntegrationTest { + + private lateinit var context: Context + private lateinit var apiRequestHandler: ApiRequestHandler + private lateinit var apiManager: ApiManager + + // TAG for filtering in Logcat + @Suppress("PrivatePropertyName") + private val TAG = "ApiTest" + + @get:Rule + val watcher = object : TestWatcher() { + override fun starting(description: Description) { + Log.i(TAG, "🟢 STARTING TEST: ${description.methodName}") + } + + override fun finished(description: Description) { + Log.i(TAG, "🏁 FINISHED TEST: ${description.methodName}") + } + + override fun failed(e: Throwable?, description: Description) { + Log.e(TAG, "❌ FAILED TEST: ${description.methodName}", e) + } + } + + @Before + fun setup() { + try { + Log.d(TAG, "SETUP: Initializing Context...") + // Use targetContext to access the app's resources/files + context = InstrumentationRegistry.getInstrumentation().targetContext + + Log.d(TAG, "SETUP: Injecting Test Config into SharedPreferences...") + // Ensure we use the exact preference file name used by your SettingsRepository + // Default is usually "package_name_preferences" + val prefsName = "${context.packageName}_preferences" + val prefs = context.getSharedPreferences(prefsName, Context.MODE_PRIVATE) + + prefs.edit().apply { + putString("api_key", TestConfig.API_KEY) + // If your ApiManager uses a specific settings key for provider, set it here: + putString("selected_ai_provider", TestConfig.PROVIDER_NAME) + putString("custom_server_url", TestConfig.BASE_URL) + commit() + } + Log.d(TAG, "SETUP: Config injected. Key present: ${prefs.contains("api_key")}") + + Log.d(TAG, "SETUP: Initializing ApiManager...") + apiManager = ApiManager(context) + + Log.d(TAG, "SETUP: Initializing ApiRequestHandler...") + apiRequestHandler = ApiRequestHandler(apiManager, context) + + Log.d(TAG, "SETUP: Complete.") + + } catch (e: Exception) { + // THIS is what you are missing in the current output + Log.e(TAG, "🔥 CRITICAL SETUP FAILURE: ${e.message}", e) + throw e // Re-throw to fail the test, but now it's logged + } + } + + @Test + fun testDictionaryDefinitionRequest() = runBlocking { + Log.d(TAG, "Testing Dictionary Definition...") + val template = DictionaryDefinitionRequest( + word = "Serendipity", + language = "English", + requestedParts = "Definition" + ) + + val result = apiRequestHandler.executeRequest(template) + + handleResult(result) { data -> + assertNotNull("Word should not be null", data.word) + assertTrue("Parts should not be empty", data.parts.isNotEmpty()) + Log.i(TAG, "✅ Dictionary Success: Defined '${data.word}'") + } + } + + @Test + fun testTextTranslationRequest() = runBlocking { + Log.d(TAG, "Testing Text Translation...") + val template = TextTranslationRequest( + text = "Hello, world!", + sourceLanguage = "English", + targetLanguage = "German" + ) + + val result = apiRequestHandler.executeRequest(template) + + handleResult(result) { data -> + assertNotNull("Translation should not be null", data.translatedText) + assertTrue("Translation should not be empty", data.translatedText.isNotBlank()) + Log.i(TAG, "✅ Translation Success: '${data.translatedText}'") + } + } + + @Test + fun testCorrectionRequest() = runBlocking { + Log.d(TAG, "Testing Text Correction...") + val template = TextCorrectionRequest( + textToCorrect = "I has went home.", + language = "English", + grammarOnly = true, + tone = null + ) + + val result = apiRequestHandler.executeRequest(template) + + handleResult(result) { data -> + assertNotEquals("Corrected text should be different", "I has went home.", data.correctedText) + Log.i(TAG, "✅ Correction Success: -> '${data.correctedText}'") + } + } + + @Test + fun testVocabularyGenerationRequest() = runBlocking { + Log.d(TAG, "Testing Vocab Generation...") + val template = VocabularyGenerationRequest( + category = "Technology", + languageFirst = "English", + languageSecond = "Spanish", + amount = 2 + ) + + val result = apiRequestHandler.executeRequest(template) + + handleResult(result) { data -> + assertEquals("Should receive exactly 2 cards", 2, data.flashcards.size) + Log.i(TAG, "✅ Vocab Gen Success: Got ${data.flashcards.size} cards") + } + } + + /** + * Helper to log results consistently and fail with clear messages + */ + private fun handleResult(result: Result, assertions: (T) -> Unit) { + if (result.isFailure) { + val error = result.exceptionOrNull() + Log.e(TAG, "❌ API REQUEST FAILED", error) + fail("API Request failed with exception: ${error?.message}") + } else { + val data = result.getOrNull()!! + Log.d(TAG, "Received Data: $data") + assertions(data) + } + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/eu/gaudian/translator/ExampleInstrumentedTest.kt b/app/src/androidTest/java/eu/gaudian/translator/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..16a0f3c --- /dev/null +++ b/app/src/androidTest/java/eu/gaudian/translator/ExampleInstrumentedTest.kt @@ -0,0 +1,21 @@ +package eu.gaudian.translator + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.assertEquals +import org.junit.Test +import org.junit.runner.RunWith + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("eu.gaudian.translator", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/eu/gaudian/translator/TestConfig.kt b/app/src/androidTest/java/eu/gaudian/translator/TestConfig.kt new file mode 100644 index 0000000..6dba602 --- /dev/null +++ b/app/src/androidTest/java/eu/gaudian/translator/TestConfig.kt @@ -0,0 +1,17 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator + +object TestConfig { + // REPLACE with your actual API Key for the test + const val API_KEY = "YOUR_REAL_API_KEY_HERE" + + // Set to true if you want to see full log output in Logcat + const val ENABLE_LOGGING = true + + // Optional: If your ApiManager requires a specific provider (e.g., "Mistral", "OpenAI") + const val PROVIDER_NAME = "Mistral" + + // Optional: If you need to override the Base URL + const val BASE_URL = "https://api.mistral.ai/" +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..1254ca1 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/language_configs/de.json b/app/src/main/assets/language_configs/de.json new file mode 100644 index 0000000..40fd4f5 --- /dev/null +++ b/app/src/main/assets/language_configs/de.json @@ -0,0 +1,159 @@ +{ + "language_code": "de", + "articles": ["der", "die", "das"], + "categories": { + "noun": { + "display_key": "category_noun", + "formatter": "({gender})", + "fields": [ + { + "key": "gender", + "display_key": "prop_gender", + "type": "enum", + "options": ["masculine", "feminine", "neuter", "plural"] + }, + { + "key": "plural", + "display_key": "prop_plural", + "type": "text" + }, + { + "key": "genitive_singular", + "display_key": "prop_genitive_singular", + "type": "text" + } + ], + "mappings": { + "gender": { + "masculine": "der", + "feminine": "die, singular", + "neuter": "das", + "plural": "die, plural" + } + }, + "declension_display": { + "cases_order": ["nominative", "genitive", "dative", "accusative"], + "case_labels": { + "nominative": "Nom.", + "genitive": "Gen.", + "dative": "Dat.", + "accusative": "Akk." + }, + "numbers_order": ["singular", "plural"], + "number_labels": { + "singular": "Sing.", + "plural": "Plur." + } + } + }, + "verb": { + "display_key": "category_verb", + "formatter": "({verb_type})", + "fields": [ + { + "key": "auxiliary_verb", + "display_key": "prop_auxiliary_verb", + "type": "enum", + "options": ["haben", "sein"] + }, + { + "key": "participle_past", + "display_key": "prop_participle_past", + "type": "text" + }, + { + "key": "verb_type", + "display_key": "prop_verb_type", + "type": "enum", + "options": ["strong", "weak", "mixed"] + } + ], + "mappings": { + "verb_type": { + "strong": "stark", + "weak": "schwach", + "mixed": "gemischt" + } + }, + "conjugation_display": { + "pronouns": ["ich", "du", "er/sie/es", "wir", "ihr", "sie"], + "tense_labels": { + "present": "Präsens", + "past": "Präteritum", + "subjunctive_i": "Konjunktiv I", + "subjunctive_ii": "Konjunktiv II" + } + } + }, + "adjective": { + "display_key": "category_adjective", + "formatter": "({comparative}, {superlative})", + "fields": [ + { + "key": "comparative", + "display_key": "prop_comparative", + "type": "text" + }, + { + "key": "superlative", + "display_key": "prop_superlative", + "type": "text" + } + ] + }, + "preposition": { + "display_key": "category_preposition", + "formatter": "(+{governs_case})", + "fields": [ + { + "key": "governs_case", + "display_key": "prop_governs_case", + "type": "enum", + "options": ["accusative", "dative", "genitive", "dative_or_accusative"] + } + ], + "mappings": { + "governs_case": { + "accusative": "Akk", + "dative": "Dat", + "genitive": "Gen", + "dative_or_accusative": "Akk/Dat" + } + } + }, + "article": { + "display_key": "category_article", + "formatter": "({article_type})", + "fields": [ + { + "key": "article_type", + "display_key": "prop_article_type", + "type": "enum", + "options": ["definite", "indefinite"] + } + ], + "mappings": { + "article_type": { + "definite": "best.", + "indefinite": "unbest." + } + } + }, + "adverb": { + "display_key": "category_adverb", + "fields": [] + }, + "pronoun": { + "display_key": "category_pronoun", + "fields": [] + }, + "conjunction": { + "display_key": "category_conjunction", + "fields": [] + }, + "sentence": { + "display_key": "category_sentence", + "fields": [] + } + } +} diff --git a/app/src/main/assets/language_configs/en.json b/app/src/main/assets/language_configs/en.json new file mode 100644 index 0000000..9c19eb6 --- /dev/null +++ b/app/src/main/assets/language_configs/en.json @@ -0,0 +1,73 @@ +{ + "language_code": "en", + "articles": ["the"], + "categories": { + "noun": { + "display_key": "category_noun", + "formatter": "(pl: {plural})", + "fields": [ + { + "key": "plural", + "display_key": "prop_plural", + "type": "text" + } + ] + }, + "verb": { + "display_key": "category_verb", + "formatter": "({past_tense}, {past_participle})", + "fields": [ + { + "key": "past_tense", + "display_key": "prop_past_tense", + "type": "text" + }, + { + "key": "past_participle", + "display_key": "prop_past_participle", + "type": "text" + } + ] + }, + "adjective": { + "display_key": "category_adjective", + "formatter": "({comparative}, {superlative})", + "fields": [ + { + "key": "comparative", + "display_key": "prop_comparative", + "type": "text" + }, + { + "key": "superlative", + "display_key": "prop_superlative", + "type": "text" + } + ] + }, + "article": { + "display_key": "category_article", + "fields": [] + }, + "preposition": { + "display_key": "category_preposition", + "fields": [] + }, + "adverb": { + "display_key": "category_adverb", + "fields": [] + }, + "pronoun": { + "display_key": "category_pronoun", + "fields": [] + }, + "conjunction": { + "display_key": "category_conjunction", + "fields": [] + }, + "sentence": { + "display_key": "category_sentence", + "fields": [] + } + } +} diff --git a/app/src/main/assets/language_configs/es.json b/app/src/main/assets/language_configs/es.json new file mode 100644 index 0000000..497f752 --- /dev/null +++ b/app/src/main/assets/language_configs/es.json @@ -0,0 +1,76 @@ +{ + "language_code": "es", + "articles": ["el", "la", "los", "las"], + "categories": { + "noun": { + "display_key": "category_noun", + "formatter": "({gender})", + "fields": [ + { + "key": "gender", + "display_key": "prop_gender", + "type": "enum", + "options": ["masculine", "feminine"] + }, + { + "key": "plural", + "display_key": "prop_plural", + "type": "text" + } + ], + "mappings": { + "gender": { + "masculine": "el", + "feminine": "la" + } + } + }, + "verb": { + "display_key": "category_verb", + "formatter": "(-{conjugation_group})", + "fields": [ + { + "key": "conjugation_group", + "display_key": "prop_conjugation_group", + "type": "enum", + "options": ["ar", "er", "ir"] + } + ] + }, + "adjective": { + "display_key": "category_adjective", + "formatter": "(f: {feminine_form})", + "fields": [ + { + "key": "feminine_form", + "display_key": "prop_feminine_form", + "type": "text" + } + ] + }, + "article": { + "display_key": "category_article", + "fields": [] + }, + "preposition": { + "display_key": "category_preposition", + "fields": [] + }, + "adverb": { + "display_key": "category_adverb", + "fields": [] + }, + "pronoun": { + "display_key": "category_pronoun", + "fields": [] + }, + "conjunction": { + "display_key": "category_conjunction", + "fields": [] + }, + "sentence": { + "display_key": "category_sentence", + "fields": [] + } + } +} diff --git a/app/src/main/assets/language_configs/fr.json b/app/src/main/assets/language_configs/fr.json new file mode 100644 index 0000000..dcedade --- /dev/null +++ b/app/src/main/assets/language_configs/fr.json @@ -0,0 +1,130 @@ +{ + "language_code": "fr", + "articles": ["le", "la", "les"], + "categories": { + "noun": { + "display_key": "category_noun", + "formatter": "({gender})", + "fields": [ + { + "key": "gender", + "display_key": "prop_gender", + "type": "enum", + "options": ["masculine", "feminine"] + }, + { + "key": "plural", + "display_key": "prop_plural", + "type": "text" + }, + { + "key": "starts_with_vowel_h", + "display_key": "prop_starts_with_vowel_h", + "type": "boolean" + } + ], + "mappings": { + "gender": { + "masculine": "m.", + "feminine": "f." + } + } + }, + "verb": { + "display_key": "category_verb", + "formatter": "(reg. -{verb_group})", + "fields": [ + { + "key": "auxiliary_verb", + "display_key": "prop_auxiliary_verb", + "type": "enum", + "options": ["avoir", "être"] + }, + { + "key": "participle_past", + "display_key": "prop_participle_past", + "type": "text" + }, + { + "key": "verb_group", + "display_key": "prop_verb_group", + "type": "enum", + "options": ["1st_group (er)", "2nd_group (ir)", "3rd_group (re)"] + } + ], + "mappings": { + "verb_group": { + "1st_group (er)": "er", + "2nd_group (ir)": "ir", + "3rd_group (re)": "re" + } + } + }, + "adjective": { + "display_key": "category_adjective", + "formatter": "(f: {feminine_form})", + "declension_display": { + "cases_order": ["masculine", "feminine"], + "numbers_order": ["singular", "plural"] + }, + "fields": [ + { + "key": "feminine_form", + "display_key": "prop_feminine_form", + "type": "text" + }, + { + "key": "position", + "display_key": "prop_position", + "type": "enum", + "options": ["before_noun", "after_noun"] + } + ] + }, + "preposition": { + "display_key": "category_preposition", + "fields": [ + { + "key": "contractions", + "display_key": "prop_contractions", + "type": "text" + } + ] + }, + "article": { + "display_key": "category_article", + "formatter": "({article_type})", + "fields": [ + { + "key": "article_type", + "display_key": "prop_article_type", + "type": "enum", + "options": ["definite", "indefinite", "partitive"] + } + ], + "mappings": { + "article_type": { + "definite": "déf.", + "indefinite": "indéf.", + "partitive": "part." + } + } + }, + "adverb": { + "display_key": "category_adverb", + "fields": [] + }, + "pronoun": { + "display_key": "category_pronoun", + "fields": [] + }, + "conjunction": { + "display_key": "category_conjunction", + "fields": [] + }, + "sentence": { + "display_key": "category_sentence", + "fields": [] + } + } +} diff --git a/app/src/main/assets/language_configs/hr.json b/app/src/main/assets/language_configs/hr.json new file mode 100644 index 0000000..c36319e --- /dev/null +++ b/app/src/main/assets/language_configs/hr.json @@ -0,0 +1,111 @@ +{ + "language_code": "hr", + "articles": [], + "categories": { + "noun": { + "display_key": "category_noun", + "formatter": "({gender})", + "fields": [ + { + "key": "gender", + "display_key": "prop_gender", + "type": "enum", + "options": ["masculine", "feminine", "neuter"] + }, + { + "key": "plural", + "display_key": "prop_plural", + "type": "text" + }, + { + "key": "genitive_singular", + "display_key": "prop_genitive_singular", + "type": "text" + } + ], + "mappings": { + "gender": { + "masculine": "m.", + "feminine": "f.", + "neuter": "n." + } + } + }, + "verb": { + "display_key": "category_verb", + "formatter": "({aspect})", + "fields": [ + { + "key": "aspect", + "display_key": "prop_aspect", + "type": "enum", + "options": ["perfective", "imperfective"] + } + ], + "mappings": { + "aspect": { + "perfective": "svršeni", + "imperfective": "nesvršeni" + } + } + }, + "adjective": { + "display_key": "category_adjective", + "formatter": "({comparative}, {superlative})", + "fields": [ + { + "key": "comparative", + "display_key": "prop_comparative", + "type": "text" + }, + { + "key": "superlative", + "display_key": "prop_superlative", + "type": "text" + } + ] + }, + "preposition": { + "display_key": "category_preposition", + "formatter": "(+{governs_case})", + "fields": [ + { + "key": "governs_case", + "display_key": "prop_governs_case", + "type": "enum", + "options": ["genitive", "dative", "accusative", "locative", "instrumental", "dative_locative_instrumental"] + } + ], + "mappings": { + "governs_case": { + "genitive": "Gen", + "dative": "Dat", + "accusative": "Akk", + "locative": "Lok", + "instrumental": "Inst", + "dative_locative_instrumental": "Dat/Lok/Inst" + } + } + }, + "article": { + "display_key": "category_article", + "fields": [] + }, + "adverb": { + "display_key": "category_adverb", + "fields": [] + }, + "pronoun": { + "display_key": "category_pronoun", + "fields": [] + }, + "conjunction": { + "display_key": "category_conjunction", + "fields": [] + }, + "sentence": { + "display_key": "category_sentence", + "fields": [] + } + } +} \ No newline at end of file diff --git a/app/src/main/assets/language_configs/it.json b/app/src/main/assets/language_configs/it.json new file mode 100644 index 0000000..16f47f6 --- /dev/null +++ b/app/src/main/assets/language_configs/it.json @@ -0,0 +1,69 @@ +{ + "language_code": "it", + "articles": ["il", "lo", "la", "i", "gli", "le"], + "categories": { + "noun": { + "display_key": "category_noun", + "formatter": "({gender})", + "fields": [ + { + "key": "gender", + "display_key": "prop_gender", + "type": "enum", + "options": ["masculine", "feminine"] + }, + { + "key": "plural", + "display_key": "prop_plural", + "type": "text" + } + ], + "mappings": { + "gender": { + "masculine": "il/lo", + "feminine": "la" + } + } + }, + "verb": { + "display_key": "category_verb", + "formatter": "(-{conjugation_group})", + "fields": [ + { + "key": "conjugation_group", + "display_key": "prop_conjugation_group", + "type": "enum", + "options": ["are", "ere", "ire"] + } + ] + }, + "adjective": { + "display_key": "category_adjective", + "fields": [] + }, + "article": { + "display_key": "category_article", + "fields": [] + }, + "preposition": { + "display_key": "category_preposition", + "fields": [] + }, + "adverb": { + "display_key": "category_adverb", + "fields": [] + }, + "pronoun": { + "display_key": "category_pronoun", + "fields": [] + }, + "conjunction": { + "display_key": "category_conjunction", + "fields": [] + }, + "sentence": { + "display_key": "category_sentence", + "fields": [] + } + } +} diff --git a/app/src/main/assets/language_configs/nl.json b/app/src/main/assets/language_configs/nl.json new file mode 100644 index 0000000..4fed2b2 --- /dev/null +++ b/app/src/main/assets/language_configs/nl.json @@ -0,0 +1,69 @@ +{ + "language_code": "nl", + "articles": ["de", "het", "een"], + "categories": { + "noun": { + "display_key": "category_noun", + "formatter": "({gender})", + "fields": [ + { + "key": "gender", + "display_key": "prop_gender", + "type": "enum", + "options": ["masculine_feminine", "neuter"] + }, + { + "key": "plural", + "display_key": "prop_plural", + "type": "text" + } + ], + "mappings": { + "gender": { + "masculine_feminine": "de", + "neuter": "het" + } + } + }, + "verb": { + "display_key": "category_verb", + "formatter": "({verb_type})", + "fields": [ + { + "key": "verb_type", + "display_key": "prop_verb_type", + "type": "enum", + "options": ["strong", "weak"] + } + ] + }, + "adjective": { + "display_key": "category_adjective", + "fields": [] + }, + "article": { + "display_key": "category_article", + "fields": [] + }, + "preposition": { + "display_key": "category_preposition", + "fields": [] + }, + "adverb": { + "display_key": "category_adverb", + "fields": [] + }, + "pronoun": { + "display_key": "category_pronoun", + "fields": [] + }, + "conjunction": { + "display_key": "category_conjunction", + "fields": [] + }, + "sentence": { + "display_key": "category_sentence", + "fields": [] + } + } +} diff --git a/app/src/main/assets/language_configs/pt.json b/app/src/main/assets/language_configs/pt.json new file mode 100644 index 0000000..4ebdb56 --- /dev/null +++ b/app/src/main/assets/language_configs/pt.json @@ -0,0 +1,98 @@ +{ + "language_code": "pt", + "articles": ["o", "a", "os", "as"], + "categories": { + "noun": { + "display_key": "category_noun", + "formatter": "({gender})", + "fields": [ + { + "key": "gender", + "display_key": "prop_gender", + "type": "enum", + "options": ["masculine", "feminine", "plural masculine", "plural feminine"] + }, + { + "key": "plural", + "display_key": "prop_plural", + "type": "text" + } + ], + "mappings": { + "gender": { + "masculine": "o", + "feminine": "a", + "plural masculine": "os", + "plural feminine": "as" + } + } + }, + "verb": { + "display_key": "category_verb", + "formatter": "(-{conjugation_group})", + "fields": [ + { + "key": "conjugation_group", + "display_key": "prop_conjugation_group", + "type": "enum", + "options": ["ar", "er", "ir", "irregular"] + } + ], + "mappings": { + "conjugation_group": { + "ar": "ar", + "er": "er", + "ir": "ir", + "irregular": "irregular" + } + } + }, + "adjective": { + "display_key": "category_adjective", + "formatter": "(f: {feminine_form})", + "declension_display": { + "cases_order": ["masculine", "feminine"], + "numbers_order": ["singular", "plural"] + }, + "fields": [ + { + "key": "feminine_form", + "display_key": "prop_feminine_form", + "type": "text" + } + ] + }, + "article": { + "display_key": "category_article", + "formatter": "({article_type})", + "fields": [ + { + "key": "article_type", + "display_key": "prop_article_type", + "type": "enum", + "options": ["definite", "indefinite"] + } + ] + }, + "preposition": { + "display_key": "category_preposition", + "fields": [] + }, + "adverb": { + "display_key": "category_adverb", + "fields": [] + }, + "pronoun": { + "display_key": "category_pronoun", + "fields": [] + }, + "conjunction": { + "display_key": "category_conjunction", + "fields": [] + }, + "sentence": { + "display_key": "category_sentence", + "fields": [] + } + } +} diff --git a/app/src/main/assets/providers_config.json b/app/src/main/assets/providers_config.json new file mode 100644 index 0000000..a6ecb37 --- /dev/null +++ b/app/src/main/assets/providers_config.json @@ -0,0 +1,249 @@ +{ + "providers": [ + { + "key": "together", + "displayName": "Together AI", + "baseUrl": "https://api.together.xyz/v1/", + "endpoint": "chat/completions", + "websiteUrl": "https://www.together.ai/", + "isCustom": false, + "models": [ + { + "modelId": "meta-llama/Llama-3.3-70B-Instruct-Turbo", + "displayName": "Llama 3.3 70B Turbo", + "provider": "together", + "description": "Fast, accurate, and cost-effective open-source model." + }, + { + "modelId": "meta-llama/Llama-4-Maverick-17B-Instruct", + "displayName": "Llama 4 Maverick 17B", + "provider": "together", + "description": "Next-gen efficient architecture; outperforms older 70B models." + }, + { + "modelId": "deepseek-ai/DeepSeek-V3", + "displayName": "DeepSeek V3", + "provider": "together", + "description": "Top-tier open-source model specializing in code and logic." + } + ] + }, + { + "key": "mistral", + "displayName": "Mistral AI", + "baseUrl": "https://api.mistral.ai/", + "endpoint": "v1/chat/completions", + "websiteUrl": "https://mistral.ai", + "isCustom": false, + "models": [ + { + "modelId": "ministral-8b-latest", + "displayName": "Ministral 8B", + "provider": "mistral", + "description": "Extremely efficient edge model for low-latency tasks." + }, + { + "modelId": "mistral-large-latest", + "displayName": "Mistral Large 3", + "provider": "mistral", + "description": "Flagship model with top-tier reasoning and multilingual capabilities." + } + ] + }, + { + "key": "openai", + "displayName": "OpenAI", + "baseUrl": "https://api.openai.com/", + "endpoint": "v1/chat/completions", + "websiteUrl": "https://platform.openai.com/", + "isCustom": false, + "models": [ + { + "modelId": "gpt-5.1-instant", + "displayName": "GPT-5.1 Instant", + "provider": "openai", + "description": "The standard high-speed efficiency model replacing older 'Nano' tiers." + }, + { + "modelId": "gpt-5-nano", + "displayName": "GPT-5 Nano", + "provider": "openai", + "description": "Fast and cheap model sufficient for most tasks." + } + ] + }, + { + "key": "anthropic", + "displayName": "Anthropic", + "baseUrl": "https://api.anthropic.com/", + "endpoint": "v1/messages", + "websiteUrl": "https://www.anthropic.com/", + "isCustom": false, + "models": [ + { + "modelId": "claude-sonnet-5-20260203", + "displayName": "Claude Sonnet 5", + "provider": "anthropic", + "description": "Latest stable workhorse (Feb 2026), balancing speed and top-tier reasoning." + }, + { + "modelId": "claude-4.5-haiku", + "displayName": "Claude 4.5 Haiku", + "provider": "anthropic", + "description": "Fastest Claude model for pure speed and simple tasks." + } + ] + }, + { + "key": "deepseek", + "displayName": "DeepSeek", + "baseUrl": "https://api.deepseek.com/", + "endpoint": "chat/completions", + "websiteUrl": "https://www.deepseek.com/", + "isCustom": false, + "models": [ + { + "modelId": "deepseek-reasoner", + "displayName": "DeepSeek R1", + "provider": "deepseek", + "description": "Reasoning-focused model (Chain of Thought) for complex math/code." + }, + { + "modelId": "deepseek-chat", + "displayName": "DeepSeek V3", + "provider": "deepseek", + "description": "General purpose chat model, specialized in code and reasoning." + } + ] + }, + { + "key": "gemini", + "displayName": "Google Gemini", + "baseUrl": "https://generativelanguage.googleapis.com/", + "endpoint": "v1beta/models/gemini-3-flash-preview:generateContent", + "websiteUrl": "https://ai.google/", + "isCustom": false, + "models": [ + { + "modelId": "gemini-3-flash-preview", + "displayName": "Gemini 3 Flash", + "provider": "gemini", + "description": "Current default: Massive context, grounded, and extremely fast." + }, + { + "modelId": "gemini-3-pro-preview", + "displayName": "Gemini 3 Pro", + "provider": "gemini", + "description": "Top-tier reasoning model for complex agentic workflows." + } + ] + }, + { + "key": "openrouter", + "displayName": "OpenRouter", + "baseUrl": "https://openrouter.ai/api/", + "endpoint": "v1/chat/completions", + "websiteUrl": "https://openrouter.ai", + "isCustom": false, + "models": [] + }, + { + "key": "groq", + "displayName": "Groq", + "baseUrl": "https://api.groq.com/openai/", + "endpoint": "v1/chat/completions", + "websiteUrl": "https://groq.com/", + "isCustom": false, + "models": [ + { + "modelId": "llama-4-scout-17b", + "displayName": "Llama 4 Scout", + "provider": "groq", + "description": "Powerful Llama 4 model running at extreme speed." + }, + { + "modelId": "llama-3.3-70b-versatile", + "displayName": "Llama 3.3 70B", + "provider": "groq", + "description": "Previous gen flagship, highly reliable and fast on Groq chips." + } + ] + }, + { + "key": "xai", + "displayName": "xAI Grok", + "baseUrl": "https://api.x.ai/", + "endpoint": "v1/chat/completions", + "websiteUrl": "https://x.ai", + "isCustom": false, + "models": [ + { + "modelId": "grok-4-1-fast-reasoning", + "displayName": "Grok 4.1 Fast", + "provider": "xai", + "description": "Fast, flexible, and capable of reasoning." + } + ] + }, + { + "key": "nvidia", + "displayName": "NVIDIA NIM", + "baseUrl": "https://integrate.api.nvidia.com/", + "endpoint": "v1/chat/completions", + "websiteUrl": "https://build.nvidia.com/explore", + "isCustom": false, + "models": [ + { + "modelId": "meta/llama-3.3-70b-instruct", + "displayName": "Llama 3.3 70B", + "provider": "nvidia", + "description": "Standard high-performance open model accelerated by NVIDIA." + } + ] + }, + { + "key": "cerebras", + "displayName": "Cerebras", + "baseUrl": "https://api.cerebras.ai/", + "endpoint": "v1/chat/completions", + "websiteUrl": "https://inference.cerebras.ai/", + "isCustom": false, + "models": [ + { + "modelId": "llama-3.3-70b", + "displayName": "Llama 3.3 70B (Instant)", + "provider": "cerebras", + "description": "World's fastest inference (2000+ tokens/sec) on Wafer-Scale Engines." + }, + { + "modelId": "llama3.1-8b", + "displayName": "Llama 3.1 8B", + "provider": "cerebras", + "description": "Instant speed for simple tasks." + } + ] + }, + { + "key": "huggingface", + "displayName": "Hugging Face", + "baseUrl": "https://router.huggingface.co/", + "endpoint": "v1/chat/completions", + "websiteUrl": "https://huggingface.co/settings/tokens", + "isCustom": false, + "models": [ + { + "modelId": "meta-llama/Llama-3.3-70B-Instruct", + "displayName": "Llama 3.3 70B", + "provider": "huggingface", + "description": "Hosted via the Hugging Face serverless router (Free tier limits apply)." + }, + { + "modelId": "microsoft/Phi-3.5-mini-instruct", + "displayName": "Phi 3.5 Mini", + "provider": "huggingface", + "description": "Highly capable small model from Microsoft." + } + ] + } + ] +} \ No newline at end of file diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..a79ba645c2607c851d3c87ce5b24417d9b039eec GIT binary patch literal 155885 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%0Ad{~(&gOA0Fp`JrQaBAg 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, //list of Word class, declination, origin, etc. + var languageCode: Int, + var languageName: String, + @Contextual val createdAt: kotlin.time.Instant? = Clock.System.now()) : + Parcelable + +@Serializable +@Parcelize +data class EntryPart( + val title: String, //e.g. Word class + val content: @RawValue JsonElement, //e.g. Noun, Verb, etc. +) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/Etymology.kt b/app/src/main/java/eu/gaudian/translator/model/Etymology.kt new file mode 100644 index 0000000..1b92332 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/Etymology.kt @@ -0,0 +1,23 @@ +package eu.gaudian.translator.model + +import kotlinx.serialization.Serializable + +@Serializable +data class EtymologyStep( + val year: String, + val language: String, + val description: String +) + +@Serializable +data class RelatedWord( + val language: String, + val word: String +) + +@Serializable +data class EtymologyData( + val word: String, + val timeline: List, + val relatedWords: List +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/Exercise.kt b/app/src/main/java/eu/gaudian/translator/model/Exercise.kt new file mode 100644 index 0000000..9df441f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/Exercise.kt @@ -0,0 +1,122 @@ +package eu.gaudian.translator.model + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlin.reflect.KClass + +@Serializable +@Parcelize +data class Exercise( + val id: String, + val title: String, + val questions: List, + val associatedVocabularyIds: List = emptyList(), + val sourceLanguage: String? = null, + val targetLanguage: String? = null, + val contextTitle: String? = null, + val contextText: String? = null, + val youtubeUrl: String? = null +) : Parcelable + + +@Serializable +sealed class Question : Parcelable { + abstract val id: Int + abstract val name: String + + companion object { + + val allTypes: List> = listOf( + TrueFalseQuestion::class, + MultipleChoiceQuestion::class, + FillInTheBlankQuestion::class, + WordOrderQuestion::class, + MatchingPairsQuestion::class, + ListeningComprehensionQuestion::class, + CategorizationQuestion::class, + VocabularyTestQuestion::class + ) + } +} + +@Parcelize +@Serializable +@SerialName("TrueFalseQuestion") +data class TrueFalseQuestion( + override val id: Int, + override val name: String, + val correctAnswer: Boolean, + val explanation: String = "" +) : Question() + +@Parcelize +@Serializable +@SerialName("MultipleChoiceQuestion") +data class MultipleChoiceQuestion( + override val id: Int, + override val name: String, + val options: List, + val correctAnswerIndex: Int +) : Question() + +@Parcelize +@Serializable +@SerialName("FillInTheBlankQuestion") +data class FillInTheBlankQuestion( + override val id: Int, + override val name: String, // The sentence with a placeholder like "___" + val correctAnswer: String, + val hintBaseForm: String = "", + val hintOptions: List = emptyList() +) : Question() + +@Parcelize +@Serializable +@SerialName("WordOrderQuestion") +data class WordOrderQuestion( + override val id: Int, + override val name: String, // The instruction, e.g., "Form the sentence." + val words: List, // The scrambled words + val correctOrder: List +) : Question() + +@Parcelize +@Serializable +@SerialName("MatchingPairsQuestion") +data class MatchingPairsQuestion( + override val id: Int, + override val name: String, // e.g., "Match the English words to their German translation." + val pairs: Map // Key-value pairs to be matched +) : Question() + +@Parcelize +@Serializable +@SerialName("ListeningComprehensionQuestion") +data class ListeningComprehensionQuestion( + override val id: Int, + override val name: String, // The text to be spoken and transcribed + val languageCode: String // e.g., "en-US" for TTS +) : Question() + +@Parcelize +@Serializable +@SerialName("CategorizationQuestion") +data class CategorizationQuestion( + override val id: Int, + override val name: String, // e.g., "Sort these into 'Fruit' and 'Vegetable' categories." + val items: List, + val categories: List, + val correctMapping: Map // Maps each item to its correct category +) : Question() + +@Parcelize +@Serializable +@SerialName("VocabularyTestQuestion") +data class VocabularyTestQuestion( + override val id: Int, + override val name: String, + val correctAnswer: String, + val languageDirection: String +) : Question() \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/Language.kt b/app/src/main/java/eu/gaudian/translator/model/Language.kt new file mode 100644 index 0000000..dd85f82 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/Language.kt @@ -0,0 +1,188 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model + +import android.annotation.SuppressLint +import android.content.Context +import eu.gaudian.translator.R +import eu.gaudian.translator.utils.Log +import kotlinx.serialization.Serializable +import java.util.Locale +import kotlin.random.Random + +@Serializable +data class Language( + val code: String, //ISO 639-1 code + val region: String, + val nameResId: Int, + val name: String, //the name is context specific and can differ in various languages -> gets loaded when App starts + val englishName: String, //to be used internally for requests etc. + val nativeName: String = englishName, //the native name of the language (e.g., "Deutsch" for German), defaults to englishName for backward compatibility + val isCustom: Boolean? = false, // there is also an option to add custom languages + var isSelected: Boolean? = false +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as Language + + if (code != other.code) return false + if (region != other.region) return false + if (nameResId != other.nameResId) return false + if (name != other.name) return false + if (englishName != other.englishName) return false + if (nativeName != other.nativeName) return false + if (isCustom != other.isCustom) return false + if (isSelected != other.isSelected) return false + + return true + } + @Suppress("unused") + fun isSameAs(other: Language?): Boolean { + if (other == null) return false + + if (this.isCustom == true && other.isCustom == true) { + return this.name.equals(other.name, ignoreCase = true) && + this.code.equals(other.code, ignoreCase = true) + } + if (this.isCustom != other.isCustom) { + return false + } + return this.nameResId == other.nameResId + } + + override fun hashCode(): Int { + var result = code.hashCode() + result = 31 * result + region.hashCode() + result = 31 * result + nameResId + result = 31 * result + name.hashCode() + result = 31 * result + englishName.hashCode() + result = 31 * result + nativeName.hashCode() + result = 31 * result + (isCustom?.hashCode() ?: 0) + result = 31 * result + (isSelected?.hashCode() ?: 0) + return result + } + +} + +fun parseLanguagesFromResources(context: Context): List { + val languages = mutableListOf() + val languageCodes = context.resources.getStringArray(R.array.language_codes) + + Log.d("LanguageParser", "Starting to parse languages from resources") + + languageCodes.forEach { item -> + val parts = item.split(",") + if (parts.size == 3) { + val code = parts[0].lowercase(Locale.getDefault()) + val region = parts[1] + val nameResId = parts[2].toIntOrNull() ?: 0 + if (nameResId != 0) { + val localizedName = getCapitalizedName(context, nameResId) + val englishName = getEnglishName(context, nameResId) + Log.d("LanguageParser", "Parsed language: $code, $region, $nameResId") + val nativeName = getNativeName(context, nameResId) + languages.add( + Language( + code = code, + region = region, + nameResId = nameResId, + name = localizedName, + englishName = englishName, + nativeName = nativeName, + isCustom = false, + isSelected = true + ) + ) + } else { + Log.w("LanguageParser", "Invalid nameResId for language: $code, $region") + } + } else { + Log.e("LanguageParser", "Invalid language code format: $item") + } + } + + Log.d("LanguageParser", "Finished parsing languages. Total languages: ${languages.size}") + return languages +} + +@SuppressLint("DiscouragedApi") +private fun getCapitalizedName(context: Context, nameResId: Int): String { + return try { + val name = context.getString( + context.resources.getIdentifier("language_$nameResId", "string", context.packageName) + ) + name.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } + } catch (e: Exception) { + Log.e("Language", "Resource not found for nameResId: $nameResId", e) + context.getString(R.string.text_unknown_language) + } +} + +@SuppressLint("AppBundleLocaleChanges", "DiscouragedApi") +private fun getEnglishName(context: Context, nameResId: Int): String { + return try { + val resName = "language_$nameResId" + val id = context.resources.getIdentifier(resName, "string", context.packageName) + if (id == 0) return context.getString(R.string.text_unknown_language) + + // Use the application context with English locale for resource lookup + val resources = context.applicationContext.resources + val configuration = android.content.res.Configuration(resources.configuration) + configuration.setLocale(Locale.ENGLISH) + val localizedContext = context.applicationContext.createConfigurationContext(configuration) + localizedContext.resources.getString(id) + } catch (e: Exception) { + Log.e("Language", "Failed to get English name for nameResId: $nameResId", e) + context.getString(R.string.text_unknown_language) + } +} + +@SuppressLint("DiscouragedApi") +fun getNativeName(context: Context, nameResId: Int): String { + + return try { + val resName = "native_language_$nameResId" + val id = context.resources.getIdentifier(resName, "string", context.packageName) + Log.d("Language", "Native name resource ID for nameResId $nameResId: $id") + if (id == 0) { + Log.w("Language", "Native name resource not found for nameResId: $nameResId") + getEnglishName(context, nameResId) + } else { + + context.getString(id) + } + } catch (e: Exception) { + Log.e("Language", "Failed to get native name for nameResId: $nameResId", e) + getEnglishName(context, nameResId) + } +} + +//meant for creating dummies, testing, etc +fun generateRandomLanguage(): Language { + return Language( + code = "random", + region = "", + nameResId = 0, + name = "Language "+ Random.nextInt(1000, 9999).toString(), + englishName = "German", + nativeName = "Deutsch", + isCustom = false, + isSelected = true + ) +} + +fun generateSimpleLanguage(name: String): Language { + return Language( + code = "random", + region = "", + nameResId = 0, + name = name, + englishName = "German", + nativeName = "Deutsch", + isCustom = false, + isSelected = true + ) +} + diff --git a/app/src/main/java/eu/gaudian/translator/model/LanguageModel.kt b/app/src/main/java/eu/gaudian/translator/model/LanguageModel.kt new file mode 100644 index 0000000..bcf6e9c --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/LanguageModel.kt @@ -0,0 +1,12 @@ +package eu.gaudian.translator.model + +import kotlinx.serialization.Serializable + +@Serializable +data class LanguageModel( + val modelId: String, + val displayName: String, + val providerKey: String, + val description: String, + val isCustom: Boolean = false +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/MyAppLanguageLevel.kt b/app/src/main/java/eu/gaudian/translator/model/MyAppLanguageLevel.kt new file mode 100644 index 0000000..59838f9 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/MyAppLanguageLevel.kt @@ -0,0 +1,248 @@ +package eu.gaudian.translator.model + +import eu.gaudian.translator.R + + +object LanguageLevels { + val all: List = listOf( + MyAppLanguageLevel.Newborn, + MyAppLanguageLevel.EchoingEcho, + MyAppLanguageLevel.GoldfishMemory, + MyAppLanguageLevel.CleverPigeon, + MyAppLanguageLevel.KoshikTheElephant, + MyAppLanguageLevel.GossipLovingCrow, + MyAppLanguageLevel.HoneybeeCartographer, + MyAppLanguageLevel.ChattyParrotlet, + MyAppLanguageLevel.CuriousToddler, + MyAppLanguageLevel.RicoTheDog, + MyAppLanguageLevel.AuctioneerInTraining, + MyAppLanguageLevel.AlexTheParrot, + MyAppLanguageLevel.PilitaTheSeaLion, + MyAppLanguageLevel.KanziTheBonobo, + MyAppLanguageLevel.KokoTheGorilla, + MyAppLanguageLevel.ShakespeareanInsultGenerator, + MyAppLanguageLevel.FirstGrader, + MyAppLanguageLevel.PuppyInTraining, + MyAppLanguageLevel.ChaserTheSuperdog, + MyAppLanguageLevel.Bookworm, + MyAppLanguageLevel.MiddleSchooler, + MyAppLanguageLevel.AvidDebater, + MyAppLanguageLevel.HighSchoolGrad, + MyAppLanguageLevel.TheJournalist, + MyAppLanguageLevel.TheProfessor, + MyAppLanguageLevel.TheNovelist, + MyAppLanguageLevel.MasterLinguist, + MyAppLanguageLevel.ThePolyglotOracle + ) + + fun getLevelForWords(wordsLearned: Int): MyAppLanguageLevel { + return all.lastOrNull { wordsLearned >= it.wordsKnown } ?: MyAppLanguageLevel.Newborn + } + fun getNextLevel(wordsLearned: Int): MyAppLanguageLevel? { + return all.firstOrNull { wordsLearned < it.wordsKnown } + + } +} + +sealed class MyAppLanguageLevel( + val nameResId: Int, + val descriptionResId: Int, + val wordsKnown: Int, + val iconResId: Int +) { + object Newborn : MyAppLanguageLevel( + nameResId = R.string.level_newborn_name, + descriptionResId = R.string.level_newborn_description, + wordsKnown = 0, + iconResId = R.drawable.ic_level_newborn + ) + + object EchoingEcho : MyAppLanguageLevel( // New + nameResId = R.string.level_echo_name, + descriptionResId = R.string.level_echo_description, + wordsKnown = 3, + iconResId = R.drawable.ic_level_echo + ) + + object GoldfishMemory : MyAppLanguageLevel( + nameResId = R.string.level_goldfish_name, + descriptionResId = R.string.level_goldfish_description, + wordsKnown = 5, + iconResId = R.drawable.ic_level_goldfish + ) + + object CleverPigeon : MyAppLanguageLevel( + nameResId = R.string.level_pigeon_name, + descriptionResId = R.string.level_pigeon_description, + wordsKnown = 10, + iconResId = R.drawable.ic_level_pigeon + ) + + object KoshikTheElephant : MyAppLanguageLevel( + nameResId = R.string.level_elephant_name, + descriptionResId = R.string.level_elephant_description, + wordsKnown = 20, + iconResId = R.drawable.ic_level_elephant + ) + + object GossipLovingCrow : MyAppLanguageLevel( + nameResId = R.string.level_crow_name, + descriptionResId = R.string.level_crow_description, + wordsKnown = 25, + iconResId = R.drawable.ic_level_crow + ) + + object HoneybeeCartographer : MyAppLanguageLevel( + nameResId = R.string.level_honeybee_name, + descriptionResId = R.string.level_honeybee_description, + wordsKnown = 35, + iconResId = R.drawable.ic_level_bee + ) + + object ChattyParrotlet : MyAppLanguageLevel( + nameResId = R.string.level_parrotlet_name, + descriptionResId = R.string.level_parrotlet_description, + wordsKnown = 50, + iconResId = R.drawable.ic_level_parrotlet + ) + + object CuriousToddler : MyAppLanguageLevel( + nameResId = R.string.level_toddler_name, + descriptionResId = R.string.level_toddler_description, + wordsKnown = 75, + iconResId = R.drawable.ic_level_toddler + ) + + object RicoTheDog : MyAppLanguageLevel( + nameResId = R.string.level_rico_name, + descriptionResId = R.string.level_rico_description, + wordsKnown = 100, + iconResId = R.drawable.ic_level_rico + ) + + object AuctioneerInTraining : MyAppLanguageLevel( // New + nameResId = R.string.level_auctioneer_name, + descriptionResId = R.string.level_auctioneer_description, + wordsKnown = 125, + iconResId = R.drawable.ic_level_auctioneer + ) + + object AlexTheParrot : MyAppLanguageLevel( + nameResId = R.string.level_alex_name, + descriptionResId = R.string.level_alex_description, + wordsKnown = 150, + iconResId = R.drawable.ic_level_parrot + ) + + object PilitaTheSeaLion : MyAppLanguageLevel( + nameResId = R.string.level_pilita_name, + descriptionResId = R.string.level_pilita_description, + wordsKnown = 225, + iconResId = R.drawable.ic_level_sea_lion + ) + + object KanziTheBonobo : MyAppLanguageLevel( + nameResId = R.string.level_kanzi_name, + descriptionResId = R.string.level_kanzi_description, + wordsKnown = 350, + iconResId = R.drawable.ic_level_bonobo + ) + + object KokoTheGorilla : MyAppLanguageLevel( + nameResId = R.string.level_koko_name, + descriptionResId = R.string.level_koko_description, + wordsKnown = 500, + iconResId = R.drawable.ic_level_gorilla + ) + + object ShakespeareanInsultGenerator : MyAppLanguageLevel( + nameResId = R.string.level_shakespeare_name, + descriptionResId = R.string.level_shakespeare_description, + wordsKnown = 600, + iconResId = R.drawable.ic_level_shakespeare + ) + + object FirstGrader : MyAppLanguageLevel( + nameResId = R.string.level_first_grader_name, + descriptionResId = R.string.level_first_grader_description, + wordsKnown = 750, + iconResId = R.drawable.ic_level_first_grader + ) + + object PuppyInTraining : MyAppLanguageLevel( + nameResId = R.string.level_puppy_in_training_name, + descriptionResId = R.string.level_puppy_in_training_description, + wordsKnown = 900, + iconResId = R.drawable.ic_level_puppy + ) + + object ChaserTheSuperdog : MyAppLanguageLevel( + nameResId = R.string.level_chaser_name, + descriptionResId = R.string.level_chaser_description, + wordsKnown = 1100, + iconResId = R.drawable.ic_level_chaser + ) + + object Bookworm : MyAppLanguageLevel( + nameResId = R.string.level_bookworm_name, + descriptionResId = R.string.level_bookworm_description, + wordsKnown = 1600, + iconResId = R.drawable.ic_level_bookworm + ) + + object MiddleSchooler : MyAppLanguageLevel( + nameResId = R.string.level_middle_schooler_name, + descriptionResId = R.string.level_middle_schooler_description, + wordsKnown = 2300, + iconResId = R.drawable.ic_level_middle_schooler + ) + + object AvidDebater : MyAppLanguageLevel( + nameResId = R.string.level_avid_debater_name, + descriptionResId = R.string.level_avid_debater_description, + wordsKnown = 3500, + iconResId = R.drawable.ic_level_avid_debater + ) + + object HighSchoolGrad : MyAppLanguageLevel( + nameResId = R.string.level_high_school_grad_name, + descriptionResId = R.string.level_high_school_grad_description, + wordsKnown = 5000, + iconResId = R.drawable.ic_level_high_school_grad + ) + + object TheJournalist : MyAppLanguageLevel( + nameResId = R.string.level_journalist_name, + descriptionResId = R.string.level_journalist_description, + wordsKnown = 7500, + iconResId = R.drawable.ic_level_journalist + ) + + object TheProfessor : MyAppLanguageLevel( + nameResId = R.string.level_professor_name, + descriptionResId = R.string.level_professor_description, + wordsKnown = 12000, + iconResId = R.drawable.ic_level_professor + ) + + object TheNovelist : MyAppLanguageLevel( + nameResId = R.string.level_novelist_name, + descriptionResId = R.string.level_novelist_description, + wordsKnown = 18000, + iconResId = R.drawable.ic_level_novelist + ) + + object MasterLinguist : MyAppLanguageLevel( + nameResId = R.string.level_linguist_name, + descriptionResId = R.string.level_linguist_description, + wordsKnown = 25000, + iconResId = R.drawable.ic_level_master_linguist + ) + + object ThePolyglotOracle : MyAppLanguageLevel( + nameResId = R.string.level_oracle_name, + descriptionResId = R.string.level_oracle_description, + wordsKnown = 50000, + iconResId = R.drawable.ic_level_oracle + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/TranslationHistoryItem.kt b/app/src/main/java/eu/gaudian/translator/model/TranslationHistoryItem.kt new file mode 100644 index 0000000..41055d4 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/TranslationHistoryItem.kt @@ -0,0 +1,22 @@ +package eu.gaudian.translator.model + +import android.text.format.DateUtils +import kotlinx.serialization.Serializable + +@Serializable +data class TranslationHistoryItem( + val id: Long = System.currentTimeMillis(), // Unique ID for animations/deletion + val text: String, // The result text + val sourceText: String, // The original input + val sourceLanguageCode: Int?, // nameResID + val targetLanguageCode: Int?, // nameResID + val playable: Boolean? = null, + val timestamp: Long = System.currentTimeMillis(), + val translationSource: String? = null, + val translationModel: String? = null +) { + fun getRelativeTimeSpan(): String { + val now = System.currentTimeMillis() + return DateUtils.getRelativeTimeSpanString(timestamp, now, DateUtils.MINUTE_IN_MILLIS).toString() + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/Vocabulary.kt b/app/src/main/java/eu/gaudian/translator/model/Vocabulary.kt new file mode 100644 index 0000000..2a985e4 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/Vocabulary.kt @@ -0,0 +1,147 @@ +@file:OptIn(ExperimentalTime::class) +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model + +import android.content.Context +import android.os.Parcelable +import androidx.room.Entity +import androidx.room.PrimaryKey +import eu.gaudian.translator.R +import eu.gaudian.translator.model.grammar.VocabularyFeatures +import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Contextual +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import kotlin.time.Clock +import kotlin.time.ExperimentalTime +import kotlin.time.Instant + +val jsonParser = Json { ignoreUnknownKeys = true } + +@Serializable +@Parcelize +@Entity(tableName = "vocabulary_items") +data class VocabularyItem( + @PrimaryKey val id: Int, + val languageFirstId: Int?, + val languageSecondId: Int?, + val wordFirst: String, + val wordSecond: String, + @Contextual val createdAt: Instant? = Clock.System.now(), + val features: String? = null, + val zipfFrequencyFirst: Float? = null, + val zipfFrequencySecond: Float? = null +) : Parcelable { + + fun isDuplicate(other: VocabularyItem): Boolean { + val normalizedWords = setOf(wordFirst.lowercase(), wordSecond.lowercase()) + val otherNormalizedWords = setOf(other.wordFirst.lowercase(), other.wordSecond.lowercase()) + val normalizedIds = setOf(languageFirstId, languageSecondId) + val otherNormalizedIds = setOf(other.languageFirstId, other.languageSecondId) + return normalizedWords == otherNormalizedWords && normalizedIds == otherNormalizedIds + } + + @Suppress("unused") + fun switchOrder(): VocabularyItem { + val currentFeatures = features?.let { jsonParser.decodeFromString(it) } + val switchedFeatures = currentFeatures?.copy(first = currentFeatures.second, second = currentFeatures.first) + val switchedFeaturesJson = switchedFeatures?.let { jsonParser.encodeToString(it) } + + return this.copy( + languageFirstId = this.languageSecondId, + languageSecondId = this.languageFirstId, + wordFirst = this.wordSecond, + wordSecond = this.wordFirst, + features = switchedFeaturesJson + ) + } +} + +@Serializable +@Parcelize +data class WordDetails( + @SerialName("category") + val wordClass: String, + val properties: Map +) : Parcelable + +/** + * A container holding the grammatical details for both words in a VocabularyItem. + */ +@Serializable +@Parcelize +data class VocabularyGrammarDetails( + val first: WordDetails? = null, + val second: WordDetails? = null +) : Parcelable + + +@Serializable +sealed class VocabularyCategory { + abstract val id: Int + abstract val name: String +} + + +@Serializable +@SerialName("FilterCategory") +data class VocabularyFilter( + override val id: Int, + override val name: String, + val languages: List? = null, + @Contextual val languagePairs: Pair ? = null, + val stages: List? = null, +) : VocabularyCategory() + +@Serializable +@SerialName("TagCategory") +data class TagCategory( + override val id: Int, + override val name: String, +) : VocabularyCategory() + + +@Serializable +@Entity(tableName = "vocabulary_states") +data class VocabularyItemState( + @PrimaryKey val vocabularyItemId: Int, + @Contextual var lastCorrectAnswer: Instant? = null, + @Contextual var lastIncorrectAnswer: Instant? = null, + var correctAnswerCount: Int = 0, + var incorrectAnswerCount: Int = 0 +) + +@Serializable +enum class VocabularyStage { + NEW, + STAGE_1, + STAGE_2, + STAGE_3, + STAGE_4, + STAGE_5, + LEARNED; + + fun toString(context: Context): String { + val res = context.resources + return when (this) { + NEW -> res.getString(R.string.stage_new) + STAGE_1 -> res.getString(R.string.stage_1) + STAGE_2 -> res.getString(R.string.stage_2) + STAGE_3 -> res.getString(R.string.stage_3) + STAGE_4 -> res.getString(R.string.stage_4) + STAGE_5 -> res.getString(R.string.stage_5) + LEARNED -> res.getString(R.string.stage_learned) + } + } +} + +@Serializable +@Parcelize +data class CardSet( + val id: Int?=null, + val languageFirst: Int?=null, + val languageSecond: Int?=null, + val cards: List, +): Parcelable \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/WidgetType.kt b/app/src/main/java/eu/gaudian/translator/model/WidgetType.kt new file mode 100644 index 0000000..154fc01 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/WidgetType.kt @@ -0,0 +1,39 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model + +import androidx.annotation.StringRes +import eu.gaudian.translator.R + + +sealed class WidgetType(val id: String, @param:StringRes val titleRes: Int) { + data object Status : WidgetType("status", R.string.label_status) + data object Streak : WidgetType("streak", R.string.title_widget_streak) + data object StartButtons : WidgetType("start_buttons", R.string.label_start_exercise) + data object AllVocabulary : WidgetType("all_vocabulary", R.string.label_all_vocabulary) + data object DueToday : WidgetType("due_today", R.string.title_widget_due_today) + data object CategoryProgress : WidgetType("category_progress", R.string.title_widget_category_progress) + data object WeeklyActivityChart : WidgetType("weekly_activity_chart", R.string.text_widget_title_weekly_activity) + data object Levels : WidgetType("category_stats", R.string.levels) + + companion object { + /** + * The default order of widgets when the app is first launched or if no order is saved. + */ + val DEFAULT_ORDER = listOf( + Status, + Streak, + StartButtons, + AllVocabulary, + DueToday, + CategoryProgress , + WeeklyActivityChart, + Levels, + ) + + + fun fromId(id: String?): WidgetType? { + return DEFAULT_ORDER.find { it.id == id } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/YouTubeData.kt b/app/src/main/java/eu/gaudian/translator/model/YouTubeData.kt new file mode 100644 index 0000000..abfb9ba --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/YouTubeData.kt @@ -0,0 +1,18 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class SubtitleLine( + @SerialName("start") val start: Float, + @SerialName("duration") val duration: Float, + @SerialName("text") val text: String, + // Optional translated text to be displayed alongside the original subtitle. + // Not provided by the backend; filled by the app after fetching. + @SerialName("translatedText") val translatedText: String? = null +) { + val end: Float get() = start + duration +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/ApiLog.kt b/app/src/main/java/eu/gaudian/translator/model/communication/ApiLog.kt new file mode 100644 index 0000000..85ef419 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/ApiLog.kt @@ -0,0 +1,25 @@ + +package eu.gaudian.translator.model.communication + +import kotlinx.serialization.Serializable + + +@Serializable +data class ApiLogEntry( + val id: String, + val timestamp: Long, + val providerKey: String, + val endpoint: String, + val method: String = "POST", + val model: String? = null, + val requestJson: String? = null, + val responseCode: Int? = null, + val responseMessage: String? = null, + val responseJson: String? = null, + val errorMessage: String? = null, + val durationMs: Long? = null, + val exceptionType: String? = null, + val isTimeout: Boolean? = null, + val parseErrorMessage: String? = null, + val url: String? = null +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/ApiManager.kt b/app/src/main/java/eu/gaudian/translator/model/communication/ApiManager.kt new file mode 100644 index 0000000..581d3fc --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/ApiManager.kt @@ -0,0 +1,620 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.communication + +import android.content.Context +import eu.gaudian.translator.R +import eu.gaudian.translator.model.LanguageModel +import eu.gaudian.translator.model.repository.ApiRepository +import eu.gaudian.translator.model.repository.SettingsRepository +import eu.gaudian.translator.utils.ApiCallback +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.StatusAction +import eu.gaudian.translator.utils.StatusMessageService +import eu.gaudian.translator.viewmodel.MessageAction +import eu.gaudian.translator.viewmodel.MessageDisplayType +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Dispatchers.Main +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import kotlinx.coroutines.withTimeoutOrNull +import retrofit2.Call +import retrofit2.Callback +import retrofit2.HttpException +import retrofit2.Response + +class ApiManager(private val context: Context) { + + /** + * Checks whether a base URL is reachable and the (optional) port is open. + * - If no scheme is provided, http is assumed. + * - If no port is provided, defaults to 80 for http and 443 for https. + * Tries a TCP socket connect first, then a lightweight HTTP GET to the root. + * Returns Pair. + */ + suspend fun checkProviderAvailability(baseUrl: String): Pair = withContext(Dispatchers.IO) { + try { + val normalized = try { + + var url = baseUrl.trim() + if (url.isEmpty()) url = "http://localhost/" + if (!url.startsWith("http://") && !url.startsWith("https://")) url = "http://$url" + if (!url.endsWith('/')) url += "/" + url + } catch (_: Exception) { + var url = baseUrl.trim() + if (url.isEmpty()) url = "http://localhost/" + if (!url.startsWith("http://") && !url.startsWith("https://")) url = "http://$url" + if (!url.endsWith('/')) url += "/" + url + } + + val uri = java.net.URI(normalized) + val host = uri.host ?: return@withContext Pair(false, "Invalid host") + val scheme = (uri.scheme ?: "http").lowercase() + val port = if (uri.port != -1) uri.port else if (scheme == "https") 443 else 80 + + // 1) TCP connect test + try { + java.net.Socket().use { socket -> + socket.connect(java.net.InetSocketAddress(host, port), 1500) + } + } catch (e: Exception) { + return@withContext Pair(false, "Cannot connect to $host:$port (${e.message})") + } + + // 2) HTTP GET test (non-fatal if it fails; we already know port is open) + return@withContext try { + val client = okhttp3.OkHttpClient.Builder() + .connectTimeout(2, java.util.concurrent.TimeUnit.SECONDS) + .readTimeout(3, java.util.concurrent.TimeUnit.SECONDS) + .build() + val request = okhttp3.Request.Builder().url(normalized).get().build() + client.newCall(request).execute().use { resp -> + val code = resp.code + if (code in 200..499) { + Pair(true, "Reachable ($code)") + } else { + Pair(true, "Port open; HTTP $code") + } + } + } catch (e: Exception) { + Pair(true, "Port open; HTTP check failed: ${e.message}") + } + } catch (e: Exception) { + Log.e("ApiManager", "Availability check error: ${e.message}", e) + Pair(false, e.message ?: "Unknown error") + } + } + + private val apiLogRepository = eu.gaudian.translator.model.repository.ApiLogRepository(context) + private val gson = com.google.gson.Gson() + + private val apiRepository = ApiRepository(context) + private val settingsRepository = SettingsRepository(context) + + /** + * Validates a given API key against a specific provider's endpoint. + */ + suspend fun validateApiKey(apiKey: String, provider: ApiProvider): Pair { + val validationMessage = "Validating API key for ${provider.displayName}..." + Log.d("ApiManager", validationMessage) + + val cleanApiKey = apiKey.trim() + if (cleanApiKey.isEmpty()) { + return Pair(false, "API key cannot be empty.") + } + + val tempApiService = RetrofitClient.getApiClient(cleanApiKey, provider.baseUrl, provider) + .create(LlmApiService::class.java) + + val endpointUrl = provider.endpoint + val validationPrompt = "Just respond with the word \"success\" if you received this message." + + // For custom providers or local hosts, allow saving the key without requiring a model. + val base = provider.baseUrl.trim() + val lower = base.lowercase() + val isLocalHost = ( + lower.contains("localhost") || + lower.contains("127.0.0.1") || + lower.startsWith("192.168.") || + lower.startsWith("http://192.168.") || + lower.startsWith("10.") || + lower.startsWith("http://10.") || + Regex("^172\\.(1[6-9]|2[0-9]|3[0-1])\\.").containsMatchIn(lower) || + Regex("^http://172\\.(1[6-9]|2[0-9]|3[0-1])\\.").containsMatchIn(lower) + ) + if (provider.isCustom || isLocalHost) { + // We cannot reliably validate without a model; accept non-empty key for setup. + return Pair(true, "Key accepted for ${provider.displayName}.") + } + + val defaultModel = provider.defaultModel ?: return Pair(true, "No default model found; key saved. Configure a model to fully validate.") + + val result = withTimeoutOrNull(10000) { // 10-second timeout + try { + when (provider.key) { + "gemini" -> { + val testRequest = GeminiRequest( + contents = listOf(GeminiContent("user", listOf(GeminiPart(validationPrompt)))) + ) + val response: Response = tempApiService.sendGeminiRequest(endpointUrl, testRequest).execute() + Pair(response.isSuccessful, response.body()?.toString() ?: response.errorBody()?.string()) + } + else -> { + val testRequest = Request( + model = defaultModel, + messages = listOf(Request.Message("user", validationPrompt)) + ) + val response: Response = tempApiService.sendRequest(endpointUrl, testRequest).execute() + Pair(response.isSuccessful, response.body()?.toString() ?: response.errorBody()?.string()) + } + } + } catch (e: Exception) { + Log.e("ApiManager", "Error validating API key: ${e.message}", e) + Pair(false, e.message) + } + } ?: Pair(false, "Timeout validating API key.") + + return result + } + + /** + * Fetch available models from provider if supported (e.g., OpenAI/OpenRouter/Mistral-compatible GET v1/models). + * Returns Pair, String?> where second is an error message if any. + */ + suspend fun fetchAvailableModels(apiKey: String?, provider: ApiProvider): Pair, String?> { + val base = provider.baseUrl.trim() + val lower = base.lowercase() + val isLocalHost = ( + lower.contains("localhost") || + lower.contains("127.0.0.1") || + lower.startsWith("192.168.") || + lower.startsWith("http://192.168.") || + lower.startsWith("10.") || + lower.startsWith("http://10.") || + Regex("^172\\.(1[6-9]|2[0-9]|3[0-1])\\.").containsMatchIn(lower) || + Regex("^http://172\\.(1[6-9]|2[0-9]|3[0-1])\\.").containsMatchIn(lower) + ) + + if (provider.key == "gemini") { + // Gemini uses a different endpoint and response shape for model listing. + val key = apiKey?.trim().orEmpty() + if (key.isEmpty() && !provider.isCustom) { + return Pair(emptyList(), "API key required to list models for this provider.") + } + return withContext(Dispatchers.IO) { + try { + val service = RetrofitClient.getApiClient(key, provider.baseUrl, provider).create(LlmApiService::class.java) + // Gemini model list endpoint (v1beta). We keep it relative to baseUrl like other calls. + val url = "v1beta/models" + val response = service.listGeminiModels(url).execute() + if (!response.isSuccessful) { + val err = response.errorBody()?.string() ?: "HTTP ${response.code()}" + Pair(emptyList(), err) + } else { + val body = response.body() + val items = body?.models ?: emptyList() + val mapped = items.map { item -> + val niceName = item.displayName ?: item.name ?: "unknown" + val parts = mutableListOf() + item.description?.let { if (it.isNotBlank()) parts.add(it) } + item.inputTokenLimit?.let { if (it > 0) parts.add("in $it ctx") } + item.outputTokenLimit?.let { if (it > 0) parts.add("out $it ctx") } + item.supportedGenerationMethods?.takeIf { it.isNotEmpty() }?.let { parts.add(it.joinToString("/")) } + val desc = parts.joinToString(" • ") + val modelIdClean = (item.name ?: niceName).substringAfterLast('/') + LanguageModel( + modelId = modelIdClean, + displayName = niceName, + providerKey = provider.key, + description = desc, + isCustom = provider.isCustom + ) + } + Pair(mapped, null) + } + } catch (e: Exception) { + Log.e("ApiManager", "Error fetching Gemini models: ${e.message}", e) + Pair(emptyList(), e.message) + } + } + } + + val key = apiKey?.trim().orEmpty() + // For custom providers (and local endpoints), allow scanning without key by attempting unauthenticated GET v1/models. + val allowNoKey = provider.isCustom || isLocalHost + val effectiveKey = if (key.isNotEmpty()) key else if (allowNoKey) "" else key + + // Perplexity does not support listing models via /v1/models; fail fast with a clear message + if (provider.key.equals("perplexity", ignoreCase = true)) { + return Pair(emptyList(), "Perplexity does not support fetching modeles.") //TODO this must be transalted! + } + + return withContext(Dispatchers.IO) { + try { + val service = RetrofitClient.getApiClient(effectiveKey, provider.baseUrl, provider).create(LlmApiService::class.java) + val url = "v1/models" + val response = service.listModels(url).execute() + Log.d("ApiManager", "Listing models response success=${response}") + if (!response.isSuccessful) { + val err = response.errorBody()?.string() ?: "HTTP ${response.code()}" + Pair(emptyList(), err) + } else { + val body = response.body() + val items = body?.data ?: emptyList() + val mapped = items.map { item -> + val niceName = item.displayName ?: item.title ?: item.name ?: item.id + // Build a compact description with the most useful info + val parts = mutableListOf() + (item.description ?: item.ownedBy ?: item.organization)?.let { if (it.isNotBlank()) parts.add(it) } + val ctx = item.contextLength ?: item.maxContext ?: item.tokenLimit + if (ctx != null && ctx > 0) parts.add("$ctx ctx") + item.capabilities?.let { cap -> + val caps = mutableListOf() + if (cap.vision == true) caps.add("vision") + if (cap.audio == true) caps.add("audio") + if (cap.tools == true) caps.add("tools") + if (cap.json == true) caps.add("json") + if (cap.reasoning == true) caps.add("reasoning") + if (caps.isNotEmpty()) parts.add(caps.joinToString("/")) + } + item.pricing?.let { p -> + val inPrice = p.input ?: p.inputAlt + val outPrice = p.output ?: p.outputAlt + val currency = p.currency ?: "$" + val unit = p.unit ?: "1K tok" + if (inPrice != null || outPrice != null) { + val priceStr = listOfNotNull( + inPrice?.let { "in ${currency}${it}/${unit}" }, + outPrice?.let { "out ${currency}${it}/${unit}" } + ).joinToString(" · ") + if (priceStr.isNotBlank()) parts.add(priceStr) + } + } + if (item.deprecated == true) parts.add("deprecated") + val desc = parts.joinToString(" • ") + LanguageModel( + modelId = item.id, + displayName = niceName, + providerKey = provider.key, + description = desc, + isCustom = provider.isCustom + ) + } + Pair(mapped, null) + } + } catch (e: Exception) { + Log.e("ApiManager", "Error fetching models: ${e.message}", e) + Pair(emptyList(), e.message) + } + } + } + + /** + * Validates a specific model for a given provider and API key. + */ + suspend fun validateModel(apiKey: String, provider: ApiProvider, model: LanguageModel): Pair { + val validationMessage = "Validating model '${model.displayName}' for provider '${provider.displayName}'..." + Log.d("ApiManager", validationMessage) + + val cleanApiKey = apiKey.trim() + if (cleanApiKey.isEmpty()) { + return Pair(false, "API key is missing for this provider.") + } + + val tempApiService = RetrofitClient.getApiClient(cleanApiKey, provider.baseUrl, provider) + .create(LlmApiService::class.java) + + val validationPrompt = "This is a test message to validate the model." + + val result = withTimeoutOrNull(10_000) { // 10-second timeout + try { + Log.d("ApiManager", "Starting validation for provider=${provider.key}, model=${model.modelId}") + + when (provider.key) { + "gemini" -> { + val modelSpecificEndpoint = "v1beta/models/${model.modelId}:generateContent" + val testRequest = GeminiRequest( + contents = listOf(GeminiContent("user", listOf(GeminiPart(validationPrompt)))) + ) + + Log.d("ApiManager", "Sending Gemini request to $modelSpecificEndpoint with prompt=$validationPrompt") + + val response: Response = withContext(Dispatchers.IO) { + tempApiService.sendGeminiRequest(modelSpecificEndpoint, testRequest).execute() + } + + Log.d("ApiManager", "Gemini response success=${response.isSuccessful}") + + val bodyOrError = try { + response.body()?.toString() + ?: response.errorBody()?.string() + ?: "Unknown error" + } catch (ioe: Exception) { + Log.e("ApiManager", "Error extracting Gemini response body: ${ioe.message}", ioe) + "Failed to parse error body: ${ioe.message}" + } + + Pair(response.isSuccessful, bodyOrError) + } + + else -> { + val testRequest = Request( + model = model.modelId, + messages = listOf(Request.Message("user", validationPrompt)) + ) + + Log.d("ApiManager", "Sending generic request to ${provider.endpoint} with model=${model.modelId}") + + val response: Response = withContext(Dispatchers.IO) { + tempApiService.sendRequest(provider.endpoint, testRequest).execute() + } + + Log.d("ApiManager", "Generic response success=${response.isSuccessful}") + + val bodyOrError = try { + response.body()?.toString() + ?: response.errorBody()?.string() + ?: "Unknown error" + } catch (ioe: Exception) { + Log.e("ApiManager", "Error extracting generic response body: ${ioe.message}", ioe) + "Failed to parse error body: ${ioe.message}" + } + + Pair(response.isSuccessful, bodyOrError) + } + } + } catch (e: Exception) { + val errorMessage = buildString { + append("Exception type=${e::class.java.simpleName}") + e.message?.let { append(", message=$it") } + if (e is HttpException) { + append(", httpCode=${e.code()}") + try { + append(", errorBody=${e.response()?.errorBody()?.string()} ") + } catch (ioe: Exception) { + append(", failed to read errorBody: ${ioe.message}") + } + } + } + Log.e("ApiManager", "Exception while validating model=${model.modelId}: $errorMessage", e) + Pair(false, errorMessage) + } + } ?: Pair(false, "Timeout validating model.") + + return result + } + + /** + * The primary method for making API requests for various tasks within the app. + */ + fun getCompletion( + prompt: String, + modelType: ModelType, + callback: ApiCallback + ) { + CoroutineScope(Dispatchers.IO).launch { + val languageModel: LanguageModel? = when (modelType) { + ModelType.TRANSLATION -> apiRepository.getTranslationModel().first() + ModelType.EXERCISE -> apiRepository.getExerciseModel().first() + ModelType.VOCABULARY -> apiRepository.getVocabularyModel().first() + ModelType.DICTIONARY -> apiRepository.getDictionaryModel().first() + } + + if (languageModel == null) { + val errorMsg = context.getString(R.string.no_model_selected_for_the_task, modelType.getLocalizedName(context)) + StatusMessageService.trigger(StatusAction.ShowActionableMessage( + text = errorMsg, + type = MessageDisplayType.ACTIONABLE_ERROR, + action = MessageAction.NAVIGATE_TO_API_KEYS + )) + callback.onFailure(errorMsg) + return@launch + } + + val allProviders = apiRepository.getProviders().first() + val provider = allProviders.find { it.key == languageModel.providerKey } + + if (provider == null) { + val errorMsg = "Provider '${languageModel.providerKey}' not found for the selected model." + StatusMessageService.trigger(StatusAction.ShowMessage(errorMsg, MessageDisplayType.ERROR, 5)) + callback.onFailure(errorMsg) + return@launch + } + + val allApiKeys = settingsRepository.getAllApiKeys().first() + val apiKey = allApiKeys[provider.key] ?: "" + + if (apiKey.isBlank() && !provider.isCustom) { + val errorMsg = "API key for ${provider.displayName} is missing." + StatusMessageService.trigger(StatusAction.ShowActionableMessage( + text = errorMsg, + type = MessageDisplayType.ACTIONABLE_ERROR, + action = MessageAction.NAVIGATE_TO_API_KEYS + )) + callback.onFailure(errorMsg) + return@launch + } + + val apiService = RetrofitClient.getApiClient(apiKey, provider.baseUrl, provider) + .create(LlmApiService::class.java) + + val endpointUrl = provider.endpoint + Log.d("ApiManager", "Sending request to ${provider.displayName} with model ${languageModel.modelId} for task $modelType and URL ${provider.baseUrl}$endpointUrl") + + when(provider.key) { + "gemini" -> { + val request = GeminiRequest(contents = listOf(GeminiContent("user", listOf(GeminiPart(prompt))))) + val requestJson = try { gson.toJson(request) } catch (_: Exception) { null } + val logId = java.util.UUID.randomUUID().toString() + val logTimestamp = System.currentTimeMillis() + val startTime = System.nanoTime() + apiService.sendGeminiRequest(endpointUrl, request).enqueue(object: Callback { + override fun onResponse(call: Call, response: Response) { + val durationMs = ((System.nanoTime() - startTime) / 1_000_000).coerceAtLeast(0) + var parseError: String? = null + val responseJson = try { + gson.toJson(response.body()) + } catch (e: Exception) { + parseError = "JSON parse error: ${e.message}" + try { response.errorBody()?.string() } catch (_: Exception) { null } + } + val entry = ApiLogEntry( + id = logId, + timestamp = logTimestamp, + providerKey = provider.key, + endpoint = endpointUrl, + method = "POST", + model = languageModel.modelId, + requestJson = requestJson, + responseCode = response.code(), + responseMessage = response.message(), + responseJson = responseJson, + errorMessage = if (response.isSuccessful) null else (parseError ?: response.message()), + durationMs = durationMs, + exceptionType = null, + isTimeout = null, + parseErrorMessage = parseError, + url = endpointUrl + ) + CoroutineScope(Dispatchers.IO).launch { apiLogRepository.addLog(entry) } + + if (response.isSuccessful && parseError == null) { + try { + callback.onSuccess(response.body()?.getResponse()) + } catch (e: Exception) { + val err = "Response processing failed: ${e.message}" + CoroutineScope(Main).launch { + StatusMessageService.trigger(StatusAction.ShowMessage(err, MessageDisplayType.ERROR, 5)) + } + callback.onFailure(err) + } + } else { + val errorMsg = parseError ?: "Response error: ${response.code()} ${response.message()}" + CoroutineScope(Main).launch { + StatusMessageService.trigger(StatusAction.ShowMessage(errorMsg, MessageDisplayType.ERROR, 5)) + } + callback.onFailure(errorMsg) + } + } + + override fun onFailure(call: Call, t: Throwable) { + val durationMs = ((System.nanoTime() - startTime) / 1_000_000).coerceAtLeast(0) + val isTimeout = t is java.net.SocketTimeoutException || t is java.io.InterruptedIOException + val entry = ApiLogEntry( + id = logId, + timestamp = logTimestamp, + providerKey = provider.key, + endpoint = endpointUrl, + method = "POST", + model = languageModel.modelId, + requestJson = requestJson, + responseCode = null, + responseMessage = null, + responseJson = null, + errorMessage = t.message, + durationMs = durationMs, + exceptionType = t::class.java.simpleName, + isTimeout = isTimeout, + parseErrorMessage = null, + url = endpointUrl + ) + CoroutineScope(Dispatchers.IO).launch { apiLogRepository.addLog(entry) } + + val errorPrefix = if (isTimeout) "Request timeout" else "Request failed" + val errorMsg = "$errorPrefix: ${t.message}" + CoroutineScope(Main).launch { StatusMessageService.trigger(StatusAction.ShowMessage(errorMsg, MessageDisplayType.ERROR, 5)) } + callback.onFailure(errorMsg) + } + }) + } + else -> { + val request = Request(languageModel.modelId, listOf(Request.Message("user", prompt))) + val requestJson = try { gson.toJson(request) } catch (_: Exception) { null } + val logId = java.util.UUID.randomUUID().toString() + val logTimestamp = System.currentTimeMillis() + val startTime = System.nanoTime() + apiService.sendRequest(endpointUrl, request).enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + val durationMs = ((System.nanoTime() - startTime) / 1_000_000).coerceAtLeast(0) + var parseError: String? = null + val responseJson = try { + gson.toJson(response.body()) + } catch (e: Exception) { + parseError = "JSON parse error: ${e.message}" + try { response.errorBody()?.string() } catch (_: Exception) { null } + } + val entry = ApiLogEntry( + id = logId, + timestamp = logTimestamp, + providerKey = provider.key, + endpoint = endpointUrl, + method = "POST", + model = languageModel.modelId, + requestJson = requestJson, + responseCode = response.code(), + responseMessage = response.message(), + responseJson = responseJson, + errorMessage = if (response.isSuccessful) null else (parseError ?: response.message()), + durationMs = durationMs, + exceptionType = null, + isTimeout = null, + parseErrorMessage = parseError, + url = endpointUrl + ) + CoroutineScope(Dispatchers.IO).launch { apiLogRepository.addLog(entry) } + + if (response.isSuccessful && parseError == null) { + try { + callback.onSuccess(response.body()?.getResponse()) + } catch (e: Exception) { + val err = "Response processing failed: ${e.message}" + CoroutineScope(Main).launch { StatusMessageService.trigger(StatusAction.ShowMessage(err, MessageDisplayType.ERROR, 5)) } + callback.onFailure(err) + } + } else { + val errorMsg = parseError ?: "Response error: ${response.code()} ${response.message()}" + CoroutineScope(Main).launch { StatusMessageService.trigger(StatusAction.ShowMessage( + errorMsg, MessageDisplayType.ERROR, 5)) } + callback.onFailure(errorMsg) + } + } + + override fun onFailure(call: Call, t: Throwable) { + val durationMs = ((System.nanoTime() - startTime) / 1_000_000).coerceAtLeast(0) + val isTimeout = t is java.net.SocketTimeoutException || t is java.io.InterruptedIOException + val entry = ApiLogEntry( + id = logId, + timestamp = logTimestamp, + providerKey = provider.key, + endpoint = endpointUrl, + method = "POST", + model = languageModel.modelId, + requestJson = requestJson, + responseCode = null, + responseMessage = null, + responseJson = null, + errorMessage = t.message, + durationMs = durationMs, + exceptionType = t::class.java.simpleName, + isTimeout = isTimeout, + parseErrorMessage = null, + url = endpointUrl + ) + CoroutineScope(Dispatchers.IO).launch { apiLogRepository.addLog(entry) } + + val errorPrefix = if (isTimeout) "Request timeout" else "Request failed" + val errorMsg = "$errorPrefix: ${t.message}" + CoroutineScope(Main).launch { StatusMessageService.trigger(StatusAction.ShowMessage(errorMsg, MessageDisplayType.ERROR, 5)) } + callback.onFailure(errorMsg) + } + }) + } + } + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/ApiProvider.kt b/app/src/main/java/eu/gaudian/translator/model/communication/ApiProvider.kt new file mode 100644 index 0000000..217d5cc --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/ApiProvider.kt @@ -0,0 +1,142 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.communication + +import android.content.Context +import eu.gaudian.translator.model.LanguageModel +import eu.gaudian.translator.utils.ProviderConfigParser +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient +import java.nio.file.NoSuchFileException + +@Serializable +data class ApiProvider( + val key: String, + val displayName: String, + val baseUrl: String, + val endpoint: String, + val websiteUrl: String, + val models: List, + val isCustom: Boolean = false +) { + @Transient + var hasValidKey: Boolean = false + val defaultModel: String? get() = models.firstOrNull()?.modelId + + companion object { + + /** + * Loads providers from the JSON configuration file with fallback to hardcoded providers + * @param context Android context for accessing assets + * @return List of ApiProvider instances + */ + fun loadProviders(context: Context): List { + val providersFromJson = ProviderConfigParser.loadProvidersFromAssets(context) + return providersFromJson.ifEmpty { + // Fallback to hardcoded providers if JSON loading fails + getHardcodedProviders() + throw NoSuchFileException("providers.json not found in assets") + } + } + + /** + * Returns the hardcoded default providers list + * @return List of ApiProvider instances + */ + private fun getHardcodedProviders(): List { + return listOf( + ApiProvider( + key = "mistral", + displayName = "Mistral AI", + baseUrl = "https://api.mistral.ai/", + endpoint = "v1/chat/completions", + websiteUrl = "https://mistral.ai", + models = listOf( + LanguageModel("mistral-small-latest", "Mistral Small Latest", "mistral", "Fast and efficient for simple tasks."), + LanguageModel("open-mistral-nemo", "Mistral Nemo", "mistral", "Advanced model with native function calling."), + ) + ), + ApiProvider( + key = "openai", + displayName = "OpenAI", + baseUrl = "https://api.openai.com/", + endpoint = "v1/chat/completions", + websiteUrl = "https://platform.openai.com/", + models = listOf( + LanguageModel("gpt-5-nano", "GPT 5 Nano", "openai", "Fast and cheap model sufficient for most tasks."), + ) + ), + ApiProvider( + key = "anthropic", + displayName = "Anthropic", + baseUrl = "https://api.anthropic.com/", + endpoint = "v1/messages", + websiteUrl = "https://www.anthropic.com/", + models = listOf( + ) + ), + ApiProvider( + key = "deepseek", + displayName = "DeepSeek", + baseUrl = "https://api.deepseek.com/", + endpoint = "chat/completions", + websiteUrl = "https://www.deepseek.com/", + models = listOf( + LanguageModel("deepseek-chat", "DeepSeek Chat", "deepseek", "Specialized in code and reasoning.") + ) + ), + ApiProvider( + key = "gemini", + displayName = "Google Gemini", + baseUrl = "https://generativelanguage.googleapis.com/", + endpoint = "v1beta/models/gemini-2.5-flash:generateContent", + websiteUrl = "https://ai.google/", + models = listOf( + LanguageModel("gemini-2.5-flash", "Gemini 2.5 Flash", "gemini", "Current default: Fast, grounded, strong at conversational and search tasks."), + LanguageModel("gemini-2.5-flash-lite", "Gemini 2.5 Flash Lite", "gemini", "Fastest and most cost-efficient Gemini model for high throughput and low-latency needs.") + ) + ), + ApiProvider( + key = "openrouter", + displayName = "OpenRouter", + baseUrl = "https://openrouter.ai/api/", + endpoint = "v1/chat/completions", + websiteUrl = "https://openrouter.ai", + models = listOf( + ) + ), + ApiProvider( + key = "groq", + displayName = "Groq", + baseUrl = "https://api.groq.com/openai/", + endpoint = "v1/chat/completions", + websiteUrl = "https://groq.com/", + models = listOf( + LanguageModel("llama-3.1-8b-instant", "Llama 3.1 8B", "groq", "Powerful Llama 3 model running at extreme speed."), + ) + ), + ApiProvider( + key = "perplexity", + displayName = "Perplexity", + baseUrl = "https://api.perplexity.ai/", + endpoint = "chat/completions", + websiteUrl = "https://www.perplexity.ai/", + models = listOf( + LanguageModel("sonar", "Sonar Small Online", "perplexity", "A faster online model for quick, up-to-date answers."), // default + LanguageModel("sonar-pro", "Sonar Pro", "perplexity", "Advanced search-focused model for richer context and longer answers."), + ) + ), + ApiProvider( + key = "xai", + displayName = "xAI Grok", + baseUrl = "https://api.x.ai/", + endpoint = "v1/chat/completions", + websiteUrl = "https://x.ai", + models = listOf( + LanguageModel("grok-4-fast", "Grok 4 Fast", "xai", "Fast and flexible model from xAI.") + ) + ) + ) + } + } +} diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/FileDownloadManager.kt b/app/src/main/java/eu/gaudian/translator/model/communication/FileDownloadManager.kt new file mode 100644 index 0000000..b0c1c35 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/FileDownloadManager.kt @@ -0,0 +1,193 @@ +package eu.gaudian.translator.model.communication + +import android.content.Context +import androidx.core.content.edit +import eu.gaudian.translator.R +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import okhttp3.OkHttpClient +import okhttp3.Request +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import retrofit2.create +import java.io.File +import java.io.FileOutputStream +import java.security.MessageDigest + +/** + * Manages downloading files from the server, verifying checksums, and checking versions. + */ +class FileDownloadManager(private val context: Context) { + + private val baseUrl = "http://23.88.48.47/" + + private val retrofit = Retrofit.Builder() + .baseUrl(baseUrl) + .addConverterFactory(GsonConverterFactory.create()) + .client(OkHttpClient.Builder().build()) + .build() + + private val manifestApiService = retrofit.create() + + @Suppress("HardCodedStringLiteral") + private val sharedPreferences = context.getSharedPreferences("file_versions", Context.MODE_PRIVATE) + + /** + * Fetches the manifest from the server. + */ + suspend fun fetchManifest(): ManifestResponse? = withContext(Dispatchers.IO) { + try { + val response = manifestApiService.getManifest().execute() + if (response.isSuccessful) { + response.body() + } else { + @Suppress("HardCodedStringLiteral") val errorMessage = response.errorBody()?.string() ?: "HTTP ${response.code()}" + + @Suppress("HardCodedStringLiteral") + Log.e("FileDownloadManager", "Failed to fetch manifest: $errorMessage") + throw Exception(context.getString(R.string.failed_to_fetch_manifest, errorMessage)) + } + } catch (e: Exception) { + @Suppress("HardCodedStringLiteral") + Log.e("FileDownloadManager", "Error fetching manifest", e) + throw e + } + } + + /** + * Downloads all assets for a file and verifies their checksums. + */ + suspend fun downloadFile(fileInfo: FileInfo, onProgress: (Float) -> Unit = {}): Boolean = withContext(Dispatchers.IO) { + val totalAssets = fileInfo.assets.size + + for ((completedAssets, asset) in fileInfo.assets.withIndex()) { + val success = downloadAsset(asset) { assetProgress -> + // Calculate overall progress + val assetContribution = assetProgress / totalAssets + val previousAssetsProgress = completedAssets.toFloat() / totalAssets + onProgress(previousAssetsProgress + assetContribution) + } + if (!success) { + return@withContext false + } + } + + // Save version after all assets are downloaded successfully + sharedPreferences.edit { putString(fileInfo.id, fileInfo.version) } + @Suppress("HardCodedStringLiteral") + Log.d("FileDownloadManager", "Download successful for all assets of ${fileInfo.name}") + true + } + + /** + * Downloads a specific asset and verifies its checksum. + */ + private suspend fun downloadAsset(asset: Asset, onProgress: (Float) -> Unit = {}): Boolean = withContext(Dispatchers.IO) { + val fileUrl = "${baseUrl}${asset.filename}" + val localFile = File(context.filesDir, asset.filename) + + try { + val client = OkHttpClient() + val request = Request.Builder().url(fileUrl).build() + val response = client.newCall(request).execute() + + if (!response.isSuccessful) { + val errorMessage = context.getString( + R.string.text_download_failed_http, + response.code, + response.message + ) + Log.e("FileDownloadManager", errorMessage) + throw Exception(errorMessage) + } + + val body = response.body + + val contentLength = body.contentLength() + if (contentLength <= 0) { + throw Exception("Invalid file size: $contentLength") + } + + FileOutputStream(localFile).use { output -> + body.byteStream().use { input -> + val buffer = ByteArray(8192) + var bytesRead: Int + var totalBytesRead: Long = 0 + @Suppress("HardCodedStringLiteral") val digest = MessageDigest.getInstance("SHA-256") + + while (input.read(buffer).also { bytesRead = it } != -1) { + output.write(buffer, 0, bytesRead) + digest.update(buffer, 0, bytesRead) + totalBytesRead += bytesRead + onProgress((totalBytesRead.toFloat() / contentLength)) + } + + output.flush() + + // Compute checksum + val computedChecksum = digest.digest().joinToString("") { + @Suppress("HardCodedStringLiteral") + "%02X".format(it) + } + + if (computedChecksum.equals(asset.checksumSha256, ignoreCase = true)) { + @Suppress("HardCodedStringLiteral") + Log.d("FileDownloadManager", "Download successful for ${asset.filename}") + true + } else { + Log.e("FileDownloadManager", + context.getString( + R.string.text_checksum_mismatch_for_expected_got, + asset.filename, + asset.checksumSha256, + computedChecksum + )) + localFile.delete() // Delete corrupted file + throw Exception("Checksum verification failed for ${asset.filename}") + } + } + } + } catch (e: Exception) { + @Suppress("HardCodedStringLiteral") + Log.e("FileDownloadManager", "Error downloading asset", e) + // Clean up partial download + if (localFile.exists()) { + localFile.delete() + } + throw e + } + } + + /** + * Checks if a newer version is available for a file. + */ + fun isNewerVersionAvailable(fileInfo: FileInfo): Boolean { + val localVersion = sharedPreferences.getString(fileInfo.id, "0.0.0") ?: "0.0.0" + return compareVersions(fileInfo.version, localVersion) > 0 + } + + /** + * Compares two version strings (assuming semantic versioning). + */ + private fun compareVersions(version1: String, version2: String): Int { + val parts1 = version1.split(".").map { it.toIntOrNull() ?: 0 } + val parts2 = version2.split(".").map { it.toIntOrNull() ?: 0 } + + for (i in 0 until maxOf(parts1.size, parts2.size)) { + val part1 = parts1.getOrElse(i) { 0 } + val part2 = parts2.getOrElse(i) { 0 } + if (part1 != part2) { + return part1.compareTo(part2) + } + } + return 0 + } + + /** + * Gets the local version of a file. + */ + fun getLocalVersion(fileId: String): String { + return sharedPreferences.getString(fileId, "0.0.0") ?: "0.0.0" + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/GeminiModels.kt b/app/src/main/java/eu/gaudian/translator/model/communication/GeminiModels.kt new file mode 100644 index 0000000..a9c8c30 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/GeminiModels.kt @@ -0,0 +1,17 @@ + +package eu.gaudian.translator.model.communication + + + +data class GeminiModelsListResponse( + val models: List? +) + +data class GeminiModelItem( + val name: String?, + val displayName: String?, + val description: String?, + val inputTokenLimit: Int?, + val outputTokenLimit: Int?, + val supportedGenerationMethods: List? // e.g., ["generateContent"] +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/LlmApiService.kt b/app/src/main/java/eu/gaudian/translator/model/communication/LlmApiService.kt new file mode 100644 index 0000000..e3d297b --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/LlmApiService.kt @@ -0,0 +1,28 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.communication + +import retrofit2.Call +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.Headers +import retrofit2.http.POST +import retrofit2.http.Url + +interface LlmApiService { + @Headers("Content-Type: application/json") + @POST + fun sendRequest(@Url url: String, @Body request: Request): Call + + @Headers("Content-Type: application/json") + @POST + fun sendGeminiRequest(@Url url: String, @Body request: GeminiRequest): Call + + // Generic models listing (e.g., OpenAI-compatible: GET v1/models) + @GET + fun listModels(@Url url: String): Call + + // Gemini models listing (GET v1beta/models) + @GET + fun listGeminiModels(@Url url: String): Call +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/ManifestApiService.kt b/app/src/main/java/eu/gaudian/translator/model/communication/ManifestApiService.kt new file mode 100644 index 0000000..e1b4a49 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/ManifestApiService.kt @@ -0,0 +1,17 @@ +package eu.gaudian.translator.model.communication + +import retrofit2.Call +import retrofit2.http.GET + +/** + * API service for fetching the manifest and downloading files. + */ +interface ManifestApiService { + + /** + * Fetches the manifest from the server. + */ + @GET("manifest.json") + fun getManifest(): Call + +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/ManifestModels.kt b/app/src/main/java/eu/gaudian/translator/model/communication/ManifestModels.kt new file mode 100644 index 0000000..5915d29 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/ManifestModels.kt @@ -0,0 +1,41 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.communication + +import com.google.gson.annotations.SerializedName + +/** + * Data class representing the manifest response from the server. + */ +data class ManifestResponse( + @SerializedName("files") + val files: List +) + +/** + * Data class representing information about a downloadable file. + */ +data class FileInfo( + @SerializedName("id") + val id: String, + @SerializedName("name") + val name: String, + @SerializedName("description") + val description: String, + @SerializedName("version") + val version: String, + @SerializedName("assets") + val assets: List +) + +/** + * Data class representing an asset file within a downloadable file. + */ +data class Asset( + @SerializedName("filename") + val filename: String, + @SerializedName("size_bytes") + val sizeBytes: Long, + @SerializedName("checksum_sha256") + val checksumSha256: String +) diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/ModelType.kt b/app/src/main/java/eu/gaudian/translator/model/communication/ModelType.kt new file mode 100644 index 0000000..2b2ad73 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/ModelType.kt @@ -0,0 +1,24 @@ +package eu.gaudian.translator.model.communication + +import android.content.Context +import eu.gaudian.translator.R + +enum class ModelType(private val stringResId: Int) { + TRANSLATION(R.string.label_translation), + EXERCISE(R.string.label_exercise), + VOCABULARY(R.string.label_vocabulary), + DICTIONARY(R.string.label_dictionary); + + /** + * Returns the localized name of the model type. + * + * This function should be used instead of the default `name` property + * when displaying the model type to the user, as it provides a + * localized string. + * + * @param context The context to use for string localization. + * @return The localized name of the model type. + */ + fun getLocalizedName(context: Context): String = + context.getString(stringResId) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/ModelsListResponse.kt b/app/src/main/java/eu/gaudian/translator/model/communication/ModelsListResponse.kt new file mode 100644 index 0000000..1b3fbd0 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/ModelsListResponse.kt @@ -0,0 +1,82 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.communication + +import com.google.gson.annotations.SerializedName + +/** + * Schema for OpenAI-compatible list models response, extended with optional fields + * that some providers (OpenRouter, Mistral, etc.) may include. All extra fields are + * nullable so unknown providers won't break deserialization. + */ +data class ModelsListResponse( + val data: List = emptyList() +) + +/** + * A conservative union of known fields from various providers. + */ +data class ModelItem( + val id: String, + // Owner / organization + @SerializedName("owned_by") val ownedBy: String? = null, + @SerializedName("organization") val organization: String? = null, + + // Object type (OpenAI: "model") + @SerializedName("object") val objectType: String? = null, + + // Human-friendly name + @SerializedName("display_name") val displayName: String? = null, + @SerializedName("title") val title: String? = null, + @SerializedName("name") val name: String? = null, + + // Description and tags + @SerializedName("description") val description: String? = null, + @SerializedName("tags") val tags: List? = null, + + // Capabilities / features + @SerializedName("capabilities") val capabilities: Capabilities? = null, + + // Context window (various naming across providers) + @SerializedName("context_length") val contextLength: Int? = null, + @SerializedName("max_context") val maxContext: Int? = null, + @SerializedName("token_limit") val tokenLimit: Int? = null, + + // Pricing information (if provided) + @SerializedName("pricing") val pricing: Pricing? = null, + + // Lifecycle + @SerializedName("created") val created: Long? = null, + @SerializedName("deprecated") val deprecated: Boolean? = null, + @SerializedName("deprecation_date") val deprecationDate: String? = null, + + // Family / type + @SerializedName("family") val family: String? = null, + @SerializedName("type") val type: String? = null, + + // Aliases that may point to canonical models + @SerializedName("aliases") val aliases: List? = null +) + +// Nested shapes that some providers use + +data class Capabilities( + val vision: Boolean? = null, + val audio: Boolean? = null, + val tools: Boolean? = null, + val json: Boolean? = null, + val reasoning: Boolean? = null +) + +data class Pricing( + // Prices may come in different units; commonly per 1K or 1M tokens. We store raw doubles. + @SerializedName("prompt") val input: Double? = null, + @SerializedName("completion") val output: Double? = null, + @SerializedName("image") val image: Double? = null, + @SerializedName("request") val request: Double? = null, + // Alternative naming sometimes used + @SerializedName("input") val inputAlt: Double? = null, + @SerializedName("output") val outputAlt: Double? = null, + @SerializedName("unit") val unit: String? = null, + @SerializedName("currency") val currency: String? = null +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/Request.kt b/app/src/main/java/eu/gaudian/translator/model/communication/Request.kt new file mode 100644 index 0000000..73778c2 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/Request.kt @@ -0,0 +1,54 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.communication + +data class Request( + val model: String, + val messages: List +) { + data class Message( + val role: String, + val content: String + ) +} + +data class ApiResponse( + val choices: List +) { + data class Choice( + val message: Message + ) { + data class Message( + val content: String + ) + } + + fun getResponse(): String { + return choices.firstOrNull()?.message?.content ?: "No response available" + } +} + +data class GeminiRequest( + val contents: List +) + +data class GeminiResponse( + val candidates: List? +) { + fun getResponse(): String { + return candidates?.firstOrNull()?.content?.parts?.firstOrNull()?.text ?: "No response available" + } +} + +data class GeminiCandidate( + val content: GeminiContent +) + +data class GeminiContent( + val role: String?, + val parts: List +) + +data class GeminiPart( + val text: String +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/RetrofitClient.kt b/app/src/main/java/eu/gaudian/translator/model/communication/RetrofitClient.kt new file mode 100644 index 0000000..6527f33 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/RetrofitClient.kt @@ -0,0 +1,183 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.communication + +import eu.gaudian.translator.utils.Log +import okhttp3.Interceptor +import okhttp3.OkHttpClient +import okhttp3.Response +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import java.util.concurrent.TimeUnit + +object RetrofitClient { + + private const val W_BASE_URL = "https://en.wiktionary.org/" + + private val okHttpClient = OkHttpClient.Builder() + .addInterceptor { chain -> + val pkg = try { eu.gaudian.translator.BuildConfig.APPLICATION_ID } catch (_: Exception) { "eu.gaudian.translator" } + val ver = try { eu.gaudian.translator.BuildConfig.VERSION_NAME } catch (_: Exception) { "unknown" } + val ua = "GaudianTranslator/$ver ($pkg; contact: jonas@gaudian.eu)" + val request = chain.request().newBuilder() + .header("User-Agent", ua) + .build() + chain.proceed(request) + } + .build() + + val api: WiktionaryApiService by lazy { + Log.d("RetrofitClient", "Creating Wiktionary API with baseUrl=$W_BASE_URL") + // TODO: Ensure User-Agent complies with Wiktionary API policy; consider including app version. + val gson = com.google.gson.GsonBuilder() + .registerTypeAdapter(TextField::class.java, TextFieldDeserializer()) + .create() + Retrofit.Builder() + .baseUrl(W_BASE_URL) + .client(okHttpClient) + .addConverterFactory(GsonConverterFactory.create(gson)) + .build() + .create(WiktionaryApiService::class.java) + } + + private fun normalizeBaseUrl(input: String): String { + var url = input.trim() + if (url.isEmpty()) return "http://localhost/" + // If scheme missing, prepend http:// + if (!url.startsWith("http://") && !url.startsWith("https://")) { + url = "http://$url" + } + // If it's just host:port or IP without trailing slash, ensure trailing slash + if (!url.endsWith('/')) { + url += "/" + } + return url + } + + private val logCollector = InMemoryLogCollector() + + /** + * Creates a Retrofit instance for a specific API provider. + * @param apiKey The API key for authorization. + * @param baseUrl The base URL of the API provider (e.g., "https://api.openai.com/"). + * @param provider The ApiProvider object, used to determine which headers to add. + * @return A configured Retrofit instance. + */ + fun getApiClient(apiKey: String, baseUrl: String, provider: ApiProvider): Retrofit { + Log.d("RetrofitClient", "Creating API client with baseUrl=$baseUrl") + + val loggingInterceptor = UserVisibleLoggingInterceptor(logCollector) + + val client = OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(120, TimeUnit.SECONDS) + .writeTimeout(60, TimeUnit.SECONDS) + .addInterceptor(loggingInterceptor) + .addInterceptor { chain -> + val requestBuilder = chain.request().newBuilder() + Log.d("RetrofitClient", "Adding headers to request: $requestBuilder") + + val trimmedKey = apiKey.trim() + when (provider.key) { + "gemini" -> { + if (trimmedKey.isNotEmpty()) { + // Google Generative Language API typically accepts API key as query param `key`. + // We also send the x-goog-api-key header for compatibility. + requestBuilder.addHeader("x-goog-api-key", trimmedKey) + + try { + val originalUrl = chain.request().url + val hasKeyParam = (0 until originalUrl.querySize).any { i -> + originalUrl.queryParameterName(i).equals("key", ignoreCase = true) + } + val newUrl = if (!hasKeyParam) { + originalUrl.newBuilder().addQueryParameter("key", trimmedKey).build() + } else { + originalUrl + } + requestBuilder.url(newUrl) + } catch (_: Exception) { + // Fail-safe: if URL manipulation fails, rely on header only. + } + } + } + "openrouter" -> { + if (trimmedKey.isNotEmpty()) { + // Use Bearer token for OpenRouter and add custom headers. + requestBuilder.addHeader("Authorization", "Bearer $trimmedKey") + requestBuilder.addHeader("HTTP-Referer", "https://gaudian.eu/translator") + requestBuilder.addHeader("X-Title", "Gaudian Translator") + } + } + else -> { + // Default to the standard Bearer token for most other APIs, but only if key is present. + if (trimmedKey.isNotEmpty()) { + requestBuilder.addHeader("Authorization", "Bearer $trimmedKey") + } + } + } + chain.proceed(requestBuilder.build()) + } + .build() + + val normalizedBaseUrl = normalizeBaseUrl(baseUrl) + Log.d("RetrofitClient", "Normalized baseUrl: $normalizedBaseUrl") + + return Retrofit.Builder() + .baseUrl(normalizedBaseUrl) + .addConverterFactory(GsonConverterFactory.create()) + .client(client) + .build() + } +} + +class UserVisibleLoggingInterceptor(private val logCollector: LogCollector) : Interceptor { + override fun intercept(chain: Interceptor.Chain): Response { + val request = chain.request() + + val requestLog = StringBuilder().apply { + append("Request: ${request.method} ${request.url}\n") + request.headers.forEach { header -> + append("${header.first}: ${header.second}\n") + } + }.toString() + logCollector.addLog(requestLog) + + val response = chain.proceed(request) + + val responseLog = StringBuilder().apply { + append("Response: ${response.code} ${response.message}\n") + response.headers.forEach { header -> + append("${header.first}: ${header.second}\n") + } + }.toString() + logCollector.addLog(responseLog) + + return response + } +} + +interface LogCollector { + fun addLog(message: String) + fun getLogs(): List +} + +class InMemoryLogCollector : LogCollector { + private val logs = mutableListOf() + private val maxLogs = 100 // Keep last 100 messages + + override fun addLog(message: String) { + synchronized(logs) { + logs.add(message) + if (logs.size > maxLogs) { + logs.removeAt(0) + } + } + } + + override fun getLogs(): List { + return synchronized(logs) { + logs.toList() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/WiktionaryApiService.kt b/app/src/main/java/eu/gaudian/translator/model/communication/WiktionaryApiService.kt new file mode 100644 index 0000000..fe58b40 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/WiktionaryApiService.kt @@ -0,0 +1,18 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.communication + +import retrofit2.http.GET +import retrofit2.http.Query + +interface WiktionaryApiService { + @GET("w/api.php") + suspend fun getPageHtml( + @Query("action") action: String = "parse", + @Query("page") page: String, + @Query("prop") prop: String = "text", + @Query("format") format: String = "json", + @Query("redirects") redirects: Int = 1, + @Query("formatversion") formatVersion: Int = 2 + ): WiktionaryResponse +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/communication/WiktionaryModels.kt b/app/src/main/java/eu/gaudian/translator/model/communication/WiktionaryModels.kt new file mode 100644 index 0000000..c969348 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/communication/WiktionaryModels.kt @@ -0,0 +1,45 @@ +package eu.gaudian.translator.model.communication + +import com.google.gson.JsonDeserializationContext +import com.google.gson.JsonDeserializer +import com.google.gson.JsonElement +import java.lang.reflect.Type + +/** + * Robust models for Wiktionary parse API that accept either an object {"*": ""} + * or a raw string for the `text` field. + */ + data class WiktionaryResponse( + val parse: ParseData? + ) + + data class ParseData( + val title: String?, + val text: TextField? + ) + + /** Wrapper for the flexible `text` payload. */ + data class TextField( + val html: String? + ) + + /** Gson deserializer that accepts either object-with-star or raw string. */ + class TextFieldDeserializer : JsonDeserializer { + override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): TextField { + if (json == null || json.isJsonNull) return TextField(null) + return try { + when { + json.isJsonPrimitive && json.asJsonPrimitive.isString -> TextField(json.asString) + json.isJsonObject -> { + val obj = json.asJsonObject + val star = obj.get("*") + val html = if (star != null && !star.isJsonNull) star.asString else null + TextField(html) + } + else -> TextField(null) + } + } catch (_: Exception) { + TextField(null) + } + } + } \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/db/AppDatabase.kt b/app/src/main/java/eu/gaudian/translator/model/db/AppDatabase.kt new file mode 100644 index 0000000..a6a43bd --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/db/AppDatabase.kt @@ -0,0 +1,90 @@ +@file:OptIn(ExperimentalTime::class) +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.db + +import android.content.Context +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase +import androidx.room.TypeConverters +import androidx.sqlite.db.SupportSQLiteDatabase +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.model.VocabularyItemState +import kotlin.time.ExperimentalTime + +@OptIn(ExperimentalTime::class) +@Database( + entities = [ + VocabularyItem::class, + VocabularyItemState::class, + VocabularyCategoryEntity::class, + CategoryMappingEntity::class, + StageMappingEntity::class, + DailyStatEntity::class + ], + version = 3 +) + +@TypeConverters(Converters::class) +abstract class AppDatabase : RoomDatabase() { + + abstract fun vocabularyItemDao(): VocabularyItemDao + abstract fun vocabularyStateDao(): VocabularyStateDao + abstract fun categoryDao(): CategoryDao + abstract fun mappingDao(): MappingDao + abstract fun dailyStatDao(): DailyStatDao + + companion object { + @Volatile + private var INSTANCE: AppDatabase? = null + + private val MIGRATION_1_2 = object : androidx.room.migration.Migration(1, 2) { + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL("ALTER TABLE vocabulary_items ADD COLUMN zipfFrequency REAL") + } + } + + private val MIGRATION_2_3 = object : androidx.room.migration.Migration(2, 3) { + override fun migrate(db: SupportSQLiteDatabase) { + // Create new table with the updated schema + db.execSQL( + "CREATE TABLE IF NOT EXISTS `vocabulary_items_new` (" + + "`id` INTEGER NOT NULL, " + + "`languageFirstId` INTEGER, " + + "`languageSecondId` INTEGER, " + + "`wordFirst` TEXT NOT NULL, " + + "`wordSecond` TEXT NOT NULL, " + + "`createdAt` INTEGER, " + + "`features` TEXT, " + + "`zipfFrequencyFirst` REAL, " + + "`zipfFrequencySecond` REAL, " + + "PRIMARY KEY(`id`)" + + ")" + ) + // Copy data from old table mapping zipfFrequency to zipfFrequencyFirst + db.execSQL( + "INSERT INTO `vocabulary_items_new` (" + + "id, languageFirstId, languageSecondId, wordFirst, wordSecond, createdAt, features, zipfFrequencyFirst, zipfFrequencySecond" + + ") SELECT id, languageFirstId, languageSecondId, wordFirst, wordSecond, createdAt, features, zipfFrequency, NULL FROM `vocabulary_items`" + ) + // Drop old table + db.execSQL("DROP TABLE `vocabulary_items`") + // Rename new table to old name + db.execSQL("ALTER TABLE `vocabulary_items_new` RENAME TO `vocabulary_items`") + } + } + + fun getDatabase(context: Context): AppDatabase { + return INSTANCE ?: synchronized(this) { + val instance = Room.databaseBuilder( + context.applicationContext, + AppDatabase::class.java, + "vocabulary_database" + ).addMigrations(MIGRATION_1_2, MIGRATION_2_3).build() + INSTANCE = instance + instance + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/db/Converters.kt b/app/src/main/java/eu/gaudian/translator/model/db/Converters.kt new file mode 100644 index 0000000..b1d3679 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/db/Converters.kt @@ -0,0 +1,54 @@ +@file:OptIn(ExperimentalTime::class) + +package eu.gaudian.translator.model.db + +import androidx.room.TypeConverter +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.VocabularyStage +import kotlinx.datetime.LocalDate +import kotlinx.serialization.json.Json +import kotlin.time.ExperimentalTime +import kotlin.time.Instant + +@Suppress("HardCodedStringLiteral", "unused") +class Converters { + @TypeConverter + fun fromTimestamp(value: Long?): Instant? { + return value?.let { Instant.fromEpochMilliseconds(it) } + } + + @TypeConverter + fun dateToTimestamp(date: Instant?): Long? { + return date?.toEpochMilliseconds() + } + + @TypeConverter + fun fromLocalDate(value: String?): LocalDate? { + return value?.let { LocalDate.parse(it) } + } + + @TypeConverter + fun toLocalDate(date: LocalDate?): String? { + return date?.toString() + } + + @TypeConverter + fun fromLanguageList(languages: List?): String? { + return languages?.let { Json.encodeToString(it) } + } + + @TypeConverter + fun toLanguageList(json: String?): List? { + return json?.let { Json.decodeFromString>(it) } + } + + @TypeConverter + fun fromStageList(stages: List?): String? { + return stages?.let { Json.encodeToString(it) } + } + + @TypeConverter + fun toStageList(json: String?): List? { + return json?.let { Json.decodeFromString>(it) } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/db/Daos.kt b/app/src/main/java/eu/gaudian/translator/model/db/Daos.kt new file mode 100644 index 0000000..18a10e7 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/db/Daos.kt @@ -0,0 +1,216 @@ +@file:OptIn(ExperimentalTime::class) +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.db + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import androidx.room.Transaction +import androidx.room.Upsert +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.model.VocabularyItemState +import kotlinx.coroutines.flow.Flow +import kotlinx.datetime.LocalDate +import kotlin.time.ExperimentalTime + +@OptIn(ExperimentalTime::class) + +@Dao +interface VocabularyItemDao { + @Query("DELETE FROM vocabulary_items") + suspend fun clearAllItems() + @Query("SELECT * FROM vocabulary_items") + fun getAllItemsFlow(): Flow> + + @Query("SELECT * FROM vocabulary_items") + suspend fun getAllItems(): List + + @Query("SELECT * FROM vocabulary_items WHERE id = :id") + suspend fun getItemById(id: Int): VocabularyItem? + + @Query("SELECT EXISTS(SELECT 1 FROM vocabulary_items WHERE (LOWER(wordFirst) = LOWER(:word) AND languageFirstId IS :languageId) OR (LOWER(wordSecond) = LOWER(:word) AND languageSecondId IS :languageId))") + suspend fun itemExists(word: String, languageId: Int?): Boolean + + @Upsert + suspend fun upsertItem(item: VocabularyItem) + + @Insert(onConflict = OnConflictStrategy.IGNORE) + suspend fun insertAll(items: List) + + @Query("DELETE FROM vocabulary_items WHERE id = :itemId") + suspend fun deleteItemById(itemId: Int) + + @Query("DELETE FROM vocabulary_items WHERE id IN (:itemIds)") + suspend fun deleteItemsByIds(itemIds: List) + + @Query("SELECT * FROM vocabulary_items WHERE id IN (:ids)") + suspend fun getItemsByIds(ids: List): List + + @Query("SELECT MAX(id) FROM vocabulary_items") + suspend fun getMaxItemId(): Int? + + @Query(""" + SELECT i.* FROM vocabulary_items i + INNER JOIN category_mappings cm ON i.id = cm.vocabularyItemId + WHERE cm.categoryId = :categoryId +""" + ) + suspend fun getItemsByCategoryId(categoryId: Int): List + + @Query(""" + SELECT i.* FROM vocabulary_items AS i + LEFT JOIN stage_mappings AS sm ON i.id = sm.vocabularyItemId + LEFT JOIN vocabulary_states AS vs ON i.id = vs.vocabularyItemId + WHERE + -- Condition 1: Item is NEW + sm.stage IS NULL OR sm.stage = 'NEW' OR + -- Condition 2: Item has a due date that is in the past + ( + -- Use last correct or incorrect answer as the base time + (COALESCE(vs.lastCorrectAnswer, vs.lastIncorrectAnswer) / 1000) + + ( + CASE IFNULL(sm.stage, 'NEW') + WHEN 'STAGE_1' THEN :intervalStage1 * 86400 + WHEN 'STAGE_2' THEN :intervalStage2 * 86400 + WHEN 'STAGE_3' THEN :intervalStage3 * 86400 + WHEN 'STAGE_4' THEN :intervalStage4 * 86400 + WHEN 'STAGE_5' THEN :intervalStage5 * 86400 + WHEN 'LEARNED' THEN :intervalLearned * 86400 + ELSE 0 + END + ) <= :now + ) +""" + ) + fun getDueTodayItemsFlow( + now: Long, + intervalStage1: Int, + intervalStage2: Int, + intervalStage3: Int, + intervalStage4: Int, + intervalStage5: Int, + intervalLearned: Int + ): Flow> + + @Query(""" + SELECT * FROM vocabulary_items + WHERE id != :excludeId AND ( + ((languageFirstId = :lang1 AND languageSecondId = :lang2) OR (languageFirstId = :lang2 AND languageSecondId = :lang1)) + AND (wordFirst = :wordFirst OR wordSecond = :wordSecond) + ) + """) + suspend fun getSynonyms(excludeId: Int, lang1: Int, lang2: Int, wordFirst: String, wordSecond: String): List +} + +data class DailyCount(val date: LocalDate, val count: Int) + +@Dao +interface VocabularyStateDao { + + @Query("DELETE FROM vocabulary_states") + suspend fun clearAllStates() + + @Query(""" + SELECT DATE(lastCorrectAnswer / 1000, 'unixepoch') as date, COUNT(vocabularyItemId) as count + FROM vocabulary_states + WHERE lastCorrectAnswer IS NOT NULL AND date BETWEEN :startDate AND :endDate + GROUP BY date +""") + suspend fun getCorrectAnswerCountsByDate(startDate: LocalDate, endDate: LocalDate): List + @Query("SELECT * FROM vocabulary_states") + fun getAllStatesFlow(): Flow> + + @Query("SELECT * FROM vocabulary_states") + suspend fun getAllStates(): List + + @Query("SELECT * FROM vocabulary_states WHERE vocabularyItemId = :itemId") + suspend fun getStateById(itemId: Int): VocabularyItemState? + + @Insert(onConflict = OnConflictStrategy.IGNORE) + suspend fun insertAll(states: List) + + @Upsert + suspend fun upsertState(state: VocabularyItemState) +} + +@Dao +interface CategoryDao { + @Query("DELETE FROM categories") + suspend fun clearAllCategories() + @Query("SELECT * FROM categories") + fun getAllCategoriesFlow(): Flow> + + @Query("SELECT * FROM categories") + suspend fun getAllCategories(): List + + @Query("SELECT * FROM categories WHERE id = :id") + suspend fun getCategoryById(id: Int): VocabularyCategoryEntity? + + @Insert(onConflict = OnConflictStrategy.IGNORE) + suspend fun insertAll(categories: List) + + @Upsert + suspend fun upsertCategory(category: VocabularyCategoryEntity) + + @Query("DELETE FROM categories WHERE id = :categoryId") + suspend fun deleteCategoryById(categoryId: Int) +} + +@Dao +interface MappingDao { + @Query("DELETE FROM stage_mappings") + suspend fun clearStageMappings() + @Query("DELETE FROM stage_mappings WHERE vocabularyItemId NOT IN (:itemIds)") + suspend fun deleteStageMappingsNotIn(itemIds: List) + @Query("SELECT * FROM category_mappings") + fun getCategoryMappingsFlow(): Flow> + + @Query("SELECT * FROM category_mappings") + suspend fun getCategoryMappings(): List + + + @Query("DELETE FROM category_mappings") + suspend fun clearCategoryMappings() + + @Insert(onConflict = OnConflictStrategy.IGNORE) + suspend fun insertCategoryMappings(mappings: List) + + @Transaction + suspend fun setAllCategoryMappings(mappings: List) { + clearCategoryMappings() + if (mappings.isNotEmpty()) { + insertCategoryMappings(mappings) + } + } + + @Insert(onConflict = OnConflictStrategy.IGNORE) + suspend fun addCategoryMapping(mapping: CategoryMappingEntity) + + @Query("DELETE FROM category_mappings WHERE vocabularyItemId = :itemId AND categoryId = :listId") + suspend fun removeCategoryMapping(itemId: Int, listId: Int) + + @Query("SELECT * FROM stage_mappings") + fun getStageMappingsFlow(): Flow> + + @Query("SELECT * FROM stage_mappings") + suspend fun getStageMappings(): List + + @Upsert + suspend fun upsertStageMapping(mapping: StageMappingEntity) + + @Upsert + suspend fun upsertStageMappings(mappings: List) +} + +@Dao +interface DailyStatDao { + @Query("DELETE FROM daily_stats") + suspend fun clearAll() + @Query("SELECT * FROM daily_stats WHERE date = :date") + suspend fun getStatForDate(date: LocalDate): DailyStatEntity? + + @Upsert + suspend fun upsertStat(stat: DailyStatEntity) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/db/DatabaseEntities.kt b/app/src/main/java/eu/gaudian/translator/model/db/DatabaseEntities.kt new file mode 100644 index 0000000..c54d1ee --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/db/DatabaseEntities.kt @@ -0,0 +1,51 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.db + +import androidx.room.Entity +import androidx.room.PrimaryKey +import eu.gaudian.translator.model.VocabularyStage +import kotlinx.datetime.LocalDate + +/** + * An entity to store the different types of VocabularyCategory in a single table. + */ +@Entity(tableName = "categories") +data class VocabularyCategoryEntity( + @PrimaryKey val id: Int, + val name: String, + val type: String, + + val filterLanguages: String?, + val filterStages: String?, + + val dictLangFirst: Int?, + val dictLangSecond: Int? +) + +/** + * Entity to store the mapping between vocabulary items and categories. + */ +@Entity(tableName = "category_mappings", primaryKeys = ["vocabularyItemId", "categoryId"]) +data class CategoryMappingEntity( + val vocabularyItemId: Int, + val categoryId: Int +) + +/** + * Entity to store the learning stage for each vocabulary item. + */ +@Entity(tableName = "stage_mappings") +data class StageMappingEntity( + @PrimaryKey val vocabularyItemId: Int, + val stage: VocabularyStage +) + +/** + * Entity to store daily learning statistics, replacing dynamic DataStore keys. + */ +@Entity(tableName = "daily_stats") +data class DailyStatEntity( + @PrimaryKey val date: LocalDate, + val correctCount: Int +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/AdjectiveVariationsParser.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/AdjectiveVariationsParser.kt new file mode 100644 index 0000000..3e1ef3d --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/AdjectiveVariationsParser.kt @@ -0,0 +1,195 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.grammar + +/** + * Parser for extracting adjective variations from raw forms data. + * + * This class is responsible for parsing FormData into structured AdjectiveVariation + * objects that can be easily displayed in the UI. It separates the parsing logic + * from the UI components for better testability and maintainability. + */ +object AdjectiveVariationsParser { + + /** + * Supported languages for adjective variations. + */ + private val SUPPORTED_LANGUAGES = setOf("fr", "pt", "de") + + /** + * Gender tags that we recognize. + */ + private val GENDER_TAGS = setOf("masculine", "feminine", "neuter") + + /** + * Number tags that we recognize. + */ + private val NUMBER_TAGS = setOf("singular", "plural") + + /** + * Standard gender-number combinations to display in the table. + */ + private val STANDARD_COMBINATIONS = listOf( + GenderNumberCombination("masculine", "singular"), + GenderNumberCombination("masculine", "plural"), + GenderNumberCombination("feminine", "singular"), + GenderNumberCombination("feminine", "plural") + ) + + /** + * Data class representing a gender-number combination. + */ + data class GenderNumberCombination( + val gender: String, + val number: String + ) + + /** + * Parsed adjective variation ready for UI display. + */ + data class ParsedAdjectiveVariation( + val form: String, + val gender: String, + val number: String, + val tags: List, + val ipas: List + ) + + /** + * Result of parsing adjective variations. + */ + data class AdjectiveVariationsResult( + val variations: List, + val hasCompleteData: Boolean // Whether all 4 standard combinations are present + ) + + /** + * Check if the given language and forms data represents an adjective with variations. + * + * @param langCode Language code (e.g., "fr", "pt", "de") + * @param pos Part of speech (optional) + * @param forms List of FormData from the dictionary entry + * @return true if this appears to be an adjective with variations + */ + fun isAdjectiveWithVariations( + langCode: String, + pos: String?, + forms: List + ): Boolean { + if (langCode !in SUPPORTED_LANGUAGES || forms.isEmpty()) { + return false + } + + // Check if POS explicitly indicates adjective + val isAdjectiveByPos = pos?.equals("adjective", ignoreCase = true) == true + if (isAdjectiveByPos) { + return true + } + + // Check if forms contain gender and number tags (indicating adjective variations) + return hasGenderNumberTags(forms) + } + + /** + * Parse adjective variations from forms data. + * + * @param forms List of FormData from the dictionary entry + * @param lemma The base form of the adjective (used as fallback for missing combinations) + * @return AdjectiveVariationsResult containing parsed variations + */ + fun parseVariations( + forms: List, + lemma: String? = null + ): AdjectiveVariationsResult { + val variations = mutableListOf() + + // Parse each standard combination + STANDARD_COMBINATIONS.forEach { combination -> + val form = findFormForCombination(forms, combination) + if (form != null) { + variations.add(ParsedAdjectiveVariation( + form = form.form, + gender = combination.gender, + number = combination.number, + tags = form.tags, + ipas = form.ipas + )) + } else if (lemma != null && combination.gender == "masculine" && combination.number == "singular") { + // Use lemma as fallback for masculine singular + variations.add(ParsedAdjectiveVariation( + form = lemma, + gender = combination.gender, + number = combination.number, + tags = listOf("masculine", "singular"), + ipas = emptyList() + )) + } + } + + val hasCompleteData = variations.size == STANDARD_COMBINATIONS.size + + return AdjectiveVariationsResult( + variations = variations, + hasCompleteData = hasCompleteData + ) + } + + /** + * Get display labels for the supported languages. + */ + fun getLanguageDisplayLabels(langCode: String): Map { + return when (langCode) { + "fr" -> mapOf( + "masculine" to "Masculin", + "feminine" to "Féminin", + "singular" to "Singulier", + "plural" to "Pluriel" + ) + "pt" -> mapOf( + "masculine" to "Masculino", + "feminine" to "Feminino", + "singular" to "Singular", + "plural" to "Plural" + ) + "de" -> mapOf( + "masculine" to "Maskulin", + "feminine" to "Feminin", + "neuter" to "Neutrum", + "singular" to "Singular", + "plural" to "Plural" + ) + else -> mapOf( + "masculine" to "Masculine", + "feminine" to "Feminine", + "neuter" to "Neuter", + "singular" to "Singular", + "plural" to "Plural" + ) + } + } + + /** + * Check if forms contain gender and number tags. + */ + private fun hasGenderNumberTags(forms: List): Boolean { + return forms.any { formData -> + val tags = formData.tags.map { it.lowercase() } + val hasGender = tags.any { it in GENDER_TAGS } + val hasNumber = tags.any { it in NUMBER_TAGS } + hasGender && hasNumber + } + } + + /** + * Find the form that matches a specific gender-number combination. + */ + private fun findFormForCombination( + forms: List, + combination: GenderNumberCombination + ): FormData? { + return forms.find { formData -> + val tags = formData.tags.map { it.lowercase() } + tags.contains(combination.gender) && tags.contains(combination.number) + } + } +} diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/DictionaryJsonParser.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/DictionaryJsonParser.kt new file mode 100644 index 0000000..b0ddf96 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/DictionaryJsonParser.kt @@ -0,0 +1,439 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.grammar + +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.contentOrNull +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive + +/** + * Comprehensive JSON parser for local dictionary entries. + * * Enhanced to support detailed phonetics, homophones, form variations, + * and raw tags for granular linguistic data. + * * NOW SUPPORTS: Structured Verb Objects (e.g. German "forms": { "present": [...] }) + */ +object DictionaryJsonParser { + + private val json = Json { ignoreUnknownKeys = true } + + /** + * Parse raw JSON string into a structured DictionaryEntryData object. + */ + fun parseJson(jsonString: String): DictionaryEntryData? { + val root: JsonElement = try { + json.parseToJsonElement(jsonString) + } catch (_: Exception) { + return null + } + + val obj = root as? JsonObject ?: return null + + return DictionaryEntryData( + translations = parseTranslations(obj), + relations = parseRelations(obj), + phonetics = parsePhonetics(obj), + hyphenation = parseHyphenation(obj), + etymology = parseEtymology(obj), + senses = parseSenses(obj), + grammaticalFeatures = parseGrammaticalFeatures(obj), + grammaticalProperties = parseGrammaticalProperties(obj), + pronunciation = parsePronunciation(obj), + inflections = parseInflections(obj), + forms = parseForms(obj) // Updated to handle Object structures + ) + } + + private fun parseTranslations(obj: JsonObject): List { + val translationsElement = obj["translations"] + val array = translationsElement as? JsonArray ?: return emptyList() + + return array.mapNotNull { element -> + val o = element.jsonObject + val langCode = o["lang_code"]?.jsonPrimitive?.contentOrNull + ?: o["language_code"]?.jsonPrimitive?.contentOrNull + val word = o["word"]?.jsonPrimitive?.contentOrNull + + if (langCode.isNullOrBlank() || word.isNullOrBlank()) { + return@mapNotNull null + } + + val sense = o["sense"]?.jsonPrimitive?.contentOrNull + ?: o["sense_index"]?.jsonPrimitive?.contentOrNull + val tags = (o["tags"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + ?: emptyList() + + TranslationData( + languageCode = langCode, + word = word, + sense = sense, + tags = tags + ) + } + } + + private fun parseRelations(obj: JsonObject): Map> { + val relationsElement = obj["relations"] as? JsonObject ?: return emptyMap() + + val result = mutableMapOf>() + for ((relationType, value) in relationsElement) { + val array = value as? JsonArray ?: continue + val relations = array.mapNotNull { element -> + val o = element.jsonObject + val word = o["word"]?.jsonPrimitive?.contentOrNull + if (word.isNullOrBlank()) return@mapNotNull null + + val senseIndex = o["sense_index"]?.jsonPrimitive?.contentOrNull + + // Parse raw_tags + val rawTags = (o["raw_tags"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + ?: emptyList() + + RelationData( + word = word, + senseIndex = senseIndex, + rawTags = rawTags + ) + } + result[relationType] = relations + } + return result + } + + private fun parsePhonetics(obj: JsonObject): PhoneticsData? { + val phoneticsElement = obj["phonetics"] as? JsonObject ?: return null + + // standard IPA list + val ipaList = (phoneticsElement["ipa"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull?.replace(Regex("[\\[\\]]"), "") } + ?: emptyList() + + // homophones + val homophones = (phoneticsElement["homophones"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + ?: emptyList() + + // IPA variations (e.g. regional pronunciations) + val variationsArray = phoneticsElement["ipa_variations"] as? JsonArray + val variations = variationsArray?.mapNotNull { element -> + val vObj = element.jsonObject + val ipa = vObj["ipa"]?.jsonPrimitive?.contentOrNull ?: return@mapNotNull null + val rawTags = (vObj["raw_tags"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + ?: emptyList() + + IpaVariationData(ipa = ipa, rawTags = rawTags) + } ?: emptyList() + + return PhoneticsData( + ipa = ipaList, + homophones = homophones, + variations = variations + ) + } + + private fun parseHyphenation(obj: JsonObject): List { + val hyphenationElement = obj["hyphenation"] as? JsonArray ?: return emptyList() + return hyphenationElement.mapNotNull { it.jsonPrimitive.contentOrNull } + } + + private fun parseEtymology(obj: JsonObject): EtymologyData { + val element = obj["etymology"] ?: return EtymologyData(texts = emptyList()) + val texts = when (element) { + is JsonArray -> element.mapNotNull { it.jsonPrimitive.contentOrNull } + is JsonObject -> { + val array = element["texts"] as? JsonArray + if (array != null) { + array.mapNotNull { it.jsonPrimitive.contentOrNull } + } else { + val singleText = element["text"]?.jsonPrimitive?.contentOrNull + if (singleText != null) listOf(singleText) else emptyList() + } + } + else -> emptyList() + } + return EtymologyData(texts = texts) + } + + private fun parseSenses(obj: JsonObject): List { + val sensesElement = obj["senses"] as? JsonArray ?: return emptyList() + + return sensesElement.mapNotNull { element -> + val senseObj = element.jsonObject + + // Handle both "gloss" (string) and "glosses" (array) formats + val glosses = when { + senseObj["glosses"] is JsonArray -> { + (senseObj["glosses"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + ?: emptyList() + } + !senseObj["gloss"]?.jsonPrimitive?.contentOrNull.isNullOrBlank() -> { + listOf(senseObj["gloss"]!!.jsonPrimitive.content) + } + else -> emptyList() + } + + if (glosses.isEmpty()) return@mapNotNull null + + val topics = (senseObj["topics"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + ?: emptyList() + + val examples = (senseObj["examples"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + ?: emptyList() + + val tags = (senseObj["tags"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + ?: emptyList() + + // Capture raw_tags + val rawTags = (senseObj["raw_tags"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + ?: emptyList() + + val categories = (senseObj["categories"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + ?: emptyList() + + SenseData( + glosses = glosses, + topics = topics, + examples = examples, + tags = tags, + rawTags = rawTags, + categories = categories + ) + } + } + + private fun parseGrammaticalFeatures(obj: JsonObject): GrammaticalFeaturesData? { + val featuresElement = obj["grammatical_features"] as? JsonObject ?: return null + val tags = (featuresElement["tags"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } ?: emptyList() + val gender = featuresElement["gender"]?.jsonPrimitive?.contentOrNull + val number = featuresElement["number"]?.jsonPrimitive?.contentOrNull + return GrammaticalFeaturesData(tags = tags, gender = gender, number = number) + } + + private fun parseGrammaticalProperties(obj: JsonObject): GrammaticalPropertiesData? { + val propsElement = obj["grammatical_properties"] as? JsonObject ?: return null + val otherTags = (propsElement["other_tags"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } ?: emptyList() + return GrammaticalPropertiesData(otherTags = otherTags) + } + + private fun parsePronunciation(obj: JsonObject): List { + val pronunciationElement = obj["pronunciation"] as? JsonArray ?: return emptyList() + return pronunciationElement.mapNotNull { element -> + val pronObj = element.jsonObject + val ipa = pronObj["ipa"]?.jsonPrimitive?.contentOrNull + val rhymes = pronObj["rhymes"]?.jsonPrimitive?.contentOrNull + if (ipa.isNullOrBlank()) return@mapNotNull null + PronunciationData(ipa = ipa, rhymes = rhymes) + } + } + + private fun parseInflections(obj: JsonObject): List { + val inflectionElement = obj["inflections"] as? JsonArray ?: return emptyList() + return inflectionElement.mapNotNull { element -> + val infObj = element.jsonObject + val form = infObj["form"]?.jsonPrimitive?.contentOrNull ?: return@mapNotNull null + val grammaticalFeatures = (infObj["grammatical_features"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } ?: emptyList() + InflectionData(form = form, grammaticalFeatures = grammaticalFeatures) + } + } + + /** + * Parse forms array from JSON. + * Handles BOTH standard Arrays and structured Objects (common in German verbs). + */ + private fun parseForms(obj: JsonObject): List { + val formsElement = obj["forms"] ?: return emptyList() + + return when (formsElement) { + is JsonArray -> parseFormsArray(formsElement) + is JsonObject -> parseFormsObject(formsElement) + else -> emptyList() + } + } + + /** + * Case 1: Standard Array of Form Objects + */ + private fun parseFormsArray(array: JsonArray): List { + return array.mapNotNull { element -> + val formObj = element.jsonObject + val form = formObj["form"]?.jsonPrimitive?.contentOrNull ?: return@mapNotNull null + + val tags = (formObj["tags"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + ?: emptyList() + + // Capture IPAs specific to this form (often escaped like "\\ʃo\\") + val ipas = (formObj["ipas"] as? JsonArray) + ?.mapNotNull { + it.jsonPrimitive.contentOrNull?.replace("\\", "") // cleanup escapes + } + ?: emptyList() + + FormData( + form = form, + tags = tags, + ipas = ipas + ) + } + } + + /** + * Case 2: Structured Object (German Verbs in "laufen" style) + * Flattens the object keys (present, past, etc.) into FormData objects tagged with that key. + */ + private fun parseFormsObject(obj: JsonObject): List { + val result = mutableListOf() + + // 1. Handle Array Tenses (e.g. "present": ["laufe", "läufst"...]) + val tenseKeys = listOf( + "present", "past", "future", + "subjunctive_i", "subjunctive_ii", + "imperative", "conditional" + ) + + tenseKeys.forEach { key -> + val array = obj[key] as? JsonArray + array?.forEach { formElement -> + val form = formElement.jsonPrimitive.contentOrNull + if (!form.isNullOrBlank()) { + // We tag it with the key (e.g., "present") so the Parser can find it. + // The UnifiedMorphologyParser relies on list order for persons (1st->3rd), + // so we simply add them in order. + result.add(FormData( + form = form, + tags = listOf(key), + ipas = emptyList() + )) + } + } + } + + // 2. Handle Single String Properties (e.g. "auxiliary": "sein") + val singleKeys = listOf("auxiliary", "infinitive", "participle_perfect", "participle_present") + + singleKeys.forEach { key -> + val value = obj[key]?.jsonPrimitive?.contentOrNull + if (!value.isNullOrBlank()) { + result.add(FormData( + form = value, + tags = listOf(key), + ipas = emptyList() + )) + } + } + + return result + } +} + +// --------------------------------------------------------------------------- +// Data Classes +// --------------------------------------------------------------------------- + +data class DictionaryEntryData( + val translations: List, + val relations: Map>, + val phonetics: PhoneticsData?, + val hyphenation: List, + val etymology: EtymologyData, + val senses: List, + val grammaticalFeatures: GrammaticalFeaturesData?, + val grammaticalProperties: GrammaticalPropertiesData?, + val pronunciation: List, + val inflections: List, + val forms: List +) { + val synonyms: List + get() = relations["synonyms"] ?: emptyList() + + val hyponyms: List + get() = relations["hyponyms"] ?: emptyList() + + val allRelatedWords: List + get() = relations.values.flatten() + + val allTags: List + get() = (grammaticalFeatures?.tags.orEmpty() + grammaticalProperties?.otherTags.orEmpty()).distinct() + +} + +data class TranslationData( + val languageCode: String, + val word: String, + val sense: String?, + val tags: List +) + +data class RelationData( + val word: String, + val senseIndex: String?, + val rawTags: List = emptyList() +) + +data class EtymologyData( + val texts: List +) + +data class SenseData( + val glosses: List, + val topics: List = emptyList(), + val examples: List = emptyList(), + val tags: List = emptyList(), + val rawTags: List = emptyList(), + val categories: List = emptyList() +) { + val gloss: String + get() = glosses.firstOrNull() ?: "" +} + +data class GrammaticalPropertiesData( + val otherTags: List +) + +data class GrammaticalFeaturesData( + val tags: List, + val gender: String? = null, + val number: String? = null +) + +data class PronunciationData( + val ipa: String, + val rhymes: String? +) + +data class PhoneticsData( + val ipa: List, + val homophones: List, + val variations: List +) + +data class IpaVariationData( + val ipa: String, + val rawTags: List +) + +data class InflectionData( + val form: String, + val grammaticalFeatures: List +) + +data class FormData( + val form: String, + val tags: List, + val ipas: List +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/GrammarConstants.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/GrammarConstants.kt new file mode 100644 index 0000000..33743fc --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/GrammarConstants.kt @@ -0,0 +1,53 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.grammar + +object GrammarConstants { + // POS Types + const val POS_NOUN = "noun" + const val POS_VERB = "verb" + const val POS_ADJ = "adjective" + + // German Specific Types + const val TYPE_DE_VERB = "de_verb" + const val TYPE_DE_ADJ = "de_adj" + + // Tense/Mood Keys + const val PRESENT = "present" + const val PAST = "past" + const val IMPERFECT = "imperfect" + const val FUTURE = "future" + const val SUBJUNCTIVE_I = "subjunctive_i" + const val SUBJUNCTIVE_II = "subjunctive_ii" + const val IMPERATIVE = "imperative" + const val CONDITIONAL = "conditional" + const val INFINITIVE = "infinitive" + const val PARTICIPLE_PAST = "participle_past" + const val PARTICIPLE_PRESENT = "participle_present" + + // French Specific Keys + const val INDICATIVE_PRESENT = "indicative_present" + const val INDICATIVE_IMPERFECT = "indicative_imperfect" + const val INDICATIVE_SIMPLE_PAST = "indicative_simple_past" + const val INDICATIVE_FUTURE = "indicative_future" + const val SUBJUNCTIVE_PRESENT = "subjunctive_present" + const val CONDITIONAL_PRESENT = "conditional_present" + + // Cases + const val NOMINATIVE = "nominative" + const val GENITIVE = "genitive" + const val DATIVE = "dative" + const val ACCUSATIVE = "accusative" + + // Numbers + const val SINGULAR = "singular" + const val PLURAL = "plural" + + // JSON Keys + const val KEY_FORMS = "forms" + const val KEY_INFLECTIONS = "inflections" + const val KEY_TYPE = "type" + const val KEY_DATA = "data" + const val KEY_TAGS = "tags" + const val KEY_FORM = "form" +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/GrammaticalFeature.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/GrammaticalFeature.kt new file mode 100644 index 0000000..f78ae9e --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/GrammaticalFeature.kt @@ -0,0 +1,31 @@ +package eu.gaudian.translator.model.grammar + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable + +/** + * A container holding the grammatical features for BOTH words in a VocabularyItem. + * This entire object is serialized into the single `features` string. + */ +@Serializable +@Parcelize +data class VocabularyFeatures( + val first: GrammaticalFeature? = null, + val second: GrammaticalFeature? = null +) : Parcelable + +/** + * A generic, serializable container for the grammatical information of a SINGLE word. + * + * @param category The type of word, e.g., "noun", "verb". This key corresponds + * to a category in the language configuration JSON. + * @param properties A flexible map to hold any language-specific properties, + * e.g., "gender" -> "masculine", "plural" -> "die Männer". + */ +@Serializable +@Parcelize +data class GrammaticalFeature( + val category: String, + val properties: Map +) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/HowItWorks.txt b/app/src/main/java/eu/gaudian/translator/model/grammar/HowItWorks.txt new file mode 100644 index 0000000..7fac2c8 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/HowItWorks.txt @@ -0,0 +1,50 @@ +Unified Morphology Architecture & Data Standard1. System OverviewThe app uses a Declarative, Config-Driven Architecture to parse and display grammatical forms (morphology). Instead of writing language-specific code (e.g., GermanNounParser, FrenchVerbParser), the system uses a single generic engine driven by JSON configuration.The Engine (Kotlin): UnifiedMorphologyParser knows how to build data structures (Grids, Lists, Verb Paradigms) but not what to build.The Blueprint (JSON Config): Language files (e.g., fr.json, de.json) define the dimensions (Rows/Columns for grids, Tenses for verbs).The Data (Dictionary JSON): The raw word forms tagged with grammatical features.2. Configuration Standard (LanguageConfig)The configuration file defines the "rules" for the parser. It tells the engine which strategy to use for a given Part of Speech (POS).A. The Grid Strategy (Nouns & Adjectives)Used for any 2D data structure (Case × Number, Gender × Number).Requirement: The category object MUST contain declension_display.Example (fr.json - Adjectives):"adjective": { +"declension_display": { +"cases_order": ["masculine", "feminine"], // <--- Defined ROWS +"numbers_order": ["singular", "plural"] // <--- Defined COLUMNS +} +} +Note: The keys cases_order and numbers_order are generic. For adjectives, they conceptually represent "Genders" and "Numbers".B. The Verb Strategy (Conjugations)Used for verb paradigms.Requirement: The category object MUST contain conjugation_display.Example (de.json - Verbs):"verb": { +"conjugation_display": { +"pronouns": ["ich", "du", "er/sie/es", "wir", "ihr", "sie"], // Required for mapping ordered forms +"tense_labels": { +"present": "Präsens", // Internal Tag -> Display Label +"past": "Präteritum", +"subjunctive_i": "Konjunktiv I" +} +} +} +3. Data Input Standard (DictionaryEntryData)The dictionary entry provides the raw forms. The parser supports two input formats.Format A: The Standard List (Recommended)A flat list of objects. Each object contains the form string and a list of tags.Constraint: The tags values MUST match the keys defined in the Configuration (e.g., "masculine", "present")."forms": [ + { "form": "beau", "tags": ["masculine", "singular"] }, + { "form": "belle", "tags": ["feminine", "singular"] }, + { "form": "beaux", "tags": ["masculine", "plural"] }, + { "form": "belles", "tags": ["feminine", "plural"] } + ] + Format B: The Structured Object (Legacy/German Verbs)Some entries group forms by tense keys instead of tags.Parser Behavior: The DictionaryJsonParser detects this object and flattens it into Format A automatically.Mapping: Keys like present become tags. Arrays are preserved in order.// Input (Dictionary JSON) + "forms": { + "present": ["laufe", "läufst", "läuft", "laufen", "lauft", "laufen"], + "auxiliary": "sein" + } + +// Internal Representation after Flattening: +// [ +// { "form": "laufe", "tags": ["present"] }, +// { "form": "läufst", "tags": ["present"] }, +// ... +// { "form": "sein", "tags": ["auxiliary"] } +// ] +4. The Parsing AlgorithmThe UnifiedMorphologyParser follows this specific decision tree:Step 1: NormalizationInputs: Lemma (e.g., "beau"), POS (e.g., "adj"), Config.Normalize POS: Maps short tags to standard keys:adj, adjectif -> adjectivenom, substantive -> nounverbe -> verbAbort: If forms list is empty.Step 2: Rule SelectionCheck JSON Config: Does config.categories[pos] exist?Yes: Does it have declension_display? -> Build Grid Rule.Yes: Does it have conjugation_display? -> Build Verb Rule.Fallback: If JSON config is missing, check MorphologyRegistry.kt for a hardcoded default rule (e.g., generic fallback).Step 3: Execution (Grid Strategy)Applies to Nouns and Adjectives.Index Forms: Creates a fast lookup map: Set -> Form.Iterate: Loops through row_tags (from Config) × col_tags (from Config).Match: For cell [row, col], looks for a form containing BOTH tags.Example: Looking for form with tags ["masculine", "plural"].Fallback (The Lemma Rule): If a match is not found:Adjective Special Case: If the cell being built is masculine + singular, the parser defaults to using the Lemma (Headword). This handles dictionary data that omits the base form.Output: Returns UnifiedMorphology.Grid (Rendered as a table).Step 4: Execution (Verb Strategy)Applies to Verbs.Iterate: Loops through tense_labels keys (from Config).Filter: Finds all forms tagged with that tense key (e.g., "present").Truncate: Takes the first $N$ forms, where $N$ is the length of the pronouns list in Config.Auxiliary: Scans for a form tagged auxiliary.Output: Returns UnifiedMorphology.Verb (Rendered as conjugation lists).5. Validating Your JSONTo ensure your JSON renders correctly in the UI, check these constraints:ComponentConstraintWhy?Configcases_order must be non-null for Nouns/Adjectives.Without row definitions, the grid cannot be built.Configtense_labels keys must match Dictionary tags."present" in config must match "present" tag in data.DataTags must be lowercase in forms.The parser normalizes tags to lowercase, but consistency prevents bugs.DataVerb arrays must be ordered by person (1st->3rd).The parser maps forms to pronouns by index position (0=I, 1=You, etc.).Example: A Valid Adjective Setuppt.json (Config):"adjective": { + "declension_display": { + "cases_order": ["masculine", "feminine"], + "numbers_order": ["singular", "plural"] + } + } + Dictionary Entry (Data):"word": "lindo", + "forms": [ + // Note: "lindo" (masc/sing) is MISSING here. + // The Parser will automatically insert the word "lindo" into the [masculine, singular] cell. + { "form": "linda", "tags": ["feminine", "singular"] }, + { "form": "lindos", "tags": ["masculine", "plural"] }, + { "form": "lindas", "tags": ["feminine", "plural"] } + ] + Resulting UI:| | Singular | Plural || :--- | :--- | :--- || Masculine | lindo (Lemma) | lindos || Feminine | linda | lindas | \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/LanguageConfigModels.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/LanguageConfigModels.kt new file mode 100644 index 0000000..3811de7 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/LanguageConfigModels.kt @@ -0,0 +1,60 @@ +@file:Suppress("PropertyName") + +package eu.gaudian.translator.model.grammar + +import kotlinx.serialization.Serializable + +/** + * Represents the entire language configuration file (e.g., de.json). + * + * @param language_code The ISO code for the language (e.g., "de"). + * @param articles A list of articles for the language (e.g., "der", "die"). This is optional. + * @param categories A map where the key is the category name (e.g., "noun") + * and the value contains the details for that category. + */ +@Serializable +data class LanguageConfig( + val language_code: String, + val articles: List? = null, + val categories: Map +) + +@Serializable +data class CategoryConfig( + @Suppress("PropertyName") val display_key: String, + val fields: List, + val formatter: String? = null, + val mappings: Map>? = null, + /** Optional configuration for how verb conjugations should be displayed. */ + val conjugation_display: VerbConjugationDisplayConfig? = null, + /** Optional configuration for how noun declension tables should be displayed. */ + val declension_display: NounDeclensionDisplayConfig? = null +) + +@Serializable +data class VerbConjugationDisplayConfig( + /** Default pronoun order for this language's verb tables. */ + val pronouns: List? = null, + /** Mapping from internal tense keys (e.g., "present") to display labels (e.g., "Präsens"). */ + val tense_labels: Map? = null +) + +@Serializable +data class NounDeclensionDisplayConfig( + /** Ordered list of case keys to display as rows. */ + val cases_order: List? = null, + /** Mapping from case keys to display labels (e.g., "nominative" -> "Nom."). */ + val case_labels: Map? = null, + /** Ordered list of number keys to display as columns (e.g., ["singular", "plural"]). */ + val numbers_order: List? = null, + /** Mapping from number keys to display labels (e.g., "singular" -> "Sing."). */ + val number_labels: Map? = null +) + +@Serializable +data class FieldConfig( + val key: String, + val display_key: String, + val type: String, + val options: List? = null +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/LocalDictionaryMorphologyMapper.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/LocalDictionaryMorphologyMapper.kt new file mode 100644 index 0000000..67ef23e --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/LocalDictionaryMorphologyMapper.kt @@ -0,0 +1,111 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.grammar + +import eu.gaudian.translator.utils.Log +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.JsonPrimitive + +/** + * Maps raw local dictionary JSON into grammar models used by the UI. + * + * This implementation uses the Strategy Pattern to delegate parsing logic + * based on the language code. + */ +object LocalDictionaryMorphologyMapper { + + private val strategies = mapOf( + "de" to GermanMorphologyStrategy(), + "fr" to FrenchMorphologyStrategy() + ) + + private val genericStrategy = GenericMorphologyStrategy() + + /** + * Parse morphology information (conjugation/declension/inflections) from a + * local dictionary entry. + * + * @param langCode ISO language code, e.g. "de". + * @param pos Part of speech as stored with the entry, if available. + * @param lemma The base form / headword, used as infinitive for verbs. + * @param data Root JSON object of the dictionary entry. + * @param languageConfig Optional language configuration, used for display + * metadata like pronoun order and tense/case labels when available. + */ + fun parseMorphology( + langCode: String, + pos: String?, + lemma: String, + data: JsonObject, + languageConfig: LanguageConfig? = null + ): WordMorphology? { + Log.d("LocalDictionaryMorphologyMapper", "Parsing morphology for $langCode, word: $lemma") + + // 1. Try specific language strategy + val specificStrategy = strategies[langCode] + if (specificStrategy != null) { + val result = specificStrategy.parse(lemma, pos, data, languageConfig) + if (result != null) return result + } + + // 2. Fallback to generic strategy (valid for any language with 'inflections' array) + return genericStrategy.parse(lemma, pos, data, languageConfig) + } + + /** + * Overload that uses parsed [DictionaryEntryData] instead of raw JSON. + */ + fun parseMorphology( + langCode: String, + pos: String?, + lemma: String, + entryData: DictionaryEntryData, + languageConfig: LanguageConfig? = null + ): WordMorphology? { + Log.d("LocalDictionaryMorphologyMapper", "Parsing morphology (structured) for $langCode, word: $lemma") + + // 1. Handle adjective forms for applicable languages (check this first) + Log.d("LocalDictionaryMorphologyMapper", "Checking adjective: langCode=$langCode, pos=$pos, formsCount=${entryData.forms.size}") + + if (AdjectiveVariationsParser.isAdjectiveWithVariations(langCode, pos, entryData.forms)) { + Log.d("LocalDictionaryMorphologyMapper", "Creating adjective morphology for $lemma") + val comparison = AdjectiveComparison() // Empty comparison, forms will be accessed directly from entryData + return WordMorphology.Adjective(comparison) + } + + // 2. Try specific language strategy if 'forms' data is available + val specificStrategy = strategies[langCode] + // Check isNotEmpty() because forms is now a List, not nullable JsonElement + if (specificStrategy != null && entryData.forms.isNotEmpty()) { + + // Reconstruct the JsonArray for forms because the strategy expects raw JSON structures + val formsArray = JsonArray(entryData.forms.map { formData -> + JsonObject( + mapOf( + "form" to JsonPrimitive(formData.form), + "tags" to JsonArray(formData.tags.map { JsonPrimitive(it) }), + "ipas" to JsonArray(formData.ipas.map { JsonPrimitive(it) }) + ) + ) + }) + + // Construct a minimal JsonObject for the strategy which expects "forms" key + val syntheticData = JsonObject(mapOf("forms" to formsArray)) + + val result = specificStrategy.parse(lemma, pos, syntheticData, languageConfig) + if (result != null) return result + } + + // 3. Fallback to generic strategy using parsed inflections + if (entryData.inflections.isNotEmpty()) { + val inflections = entryData.inflections.map { + Inflection(it.form, it.grammaticalFeatures) + } + return WordMorphology.GenericInflections(inflections) + } + + return null + } +} + diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyModels.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyModels.kt new file mode 100644 index 0000000..5a1d485 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyModels.kt @@ -0,0 +1,65 @@ +package eu.gaudian.translator.model.grammar + +import kotlinx.serialization.Serializable + +/** + * Generic morphology models derived from local dictionary data. + * + * These models are UI-agnostic and can be rendered by different screens + * (dictionary results, vocabulary cards, etc.). + */ + +/** + * Conjugation data for a single verb. + * + * @param infinitive The base form of the verb. + * @param conjugations Map from an internal or display tense key to the list of + * forms for each person (same order as [pronouns]). + * @param pronouns List of pronouns corresponding to the persons in [conjugations] values. + * @param auxiliary Optional auxiliary verb used by this verb (e.g., "haben/sein"). + */ +@Serializable +data class VerbConjugation( + val infinitive: String, + val conjugations: Map>, // tense -> list of forms + val pronouns: List = emptyList(), + val auxiliary: String? = null +) + +/** + * Declension table for noun-like words. + * + * @param cases Ordered list of case keys (e.g., "nominative", "genitive", ...). + * @param numbers Ordered list of number keys (e.g., "singular", "plural"). + * @param forms Mapping from (case, number) pair to the inflected form. + */ +@Serializable +data class NounDeclensionTable( + val cases: List, + val numbers: List, + val forms: Map, String> +) + +/** + * Comparison degrees for adjectives. + */ +@Serializable +data class AdjectiveComparison( + val positive: String? = null, + val comparative: String? = null, + val superlative: String? = null +) + +/** + * High-level morphology classification for a word. + */ +sealed class WordMorphology { + data class Verb(val conjugations: List) : WordMorphology() + data class Noun(val declension: NounDeclensionTable) : WordMorphology() + data class Adjective(val comparison: AdjectiveComparison) : WordMorphology() + + /** + * Generic inflections as provided by some dictionaries (e.g. Portuguese). + */ + data class GenericInflections(val inflections: List) : WordMorphology() +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyRegistry.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyRegistry.kt new file mode 100644 index 0000000..49be4c2 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyRegistry.kt @@ -0,0 +1,90 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.grammar + +import eu.gaudian.translator.model.grammar.GrammarConstants.POS_ADJ +import eu.gaudian.translator.model.grammar.GrammarConstants.POS_NOUN +import eu.gaudian.translator.model.grammar.GrammarConstants.POS_VERB +import eu.gaudian.translator.model.grammar.MorphologyRule.GenericRule +import eu.gaudian.translator.model.grammar.MorphologyRule.GridRule +import eu.gaudian.translator.model.grammar.MorphologyRule.VerbRule + +object MorphologyRegistry { + + /** + * Retrieves the specific rule for a Language and POS. + * Defaults to GenericRule if no specific rule is defined. + */ + fun getRule(langCode: String, pos: String?): MorphologyRule { + val normalizedPos = pos?.lowercase()?.trim() ?: return GenericRule + + // 1. Look for specific match (e.g., "de" + "noun") + return rules["$langCode|$normalizedPos"] + // 2. Look for language default (if we had one) or fallback + ?: GenericRule + } + + // ========================================================================= + // CONFIGURATION AREA - DEFINE YOUR RULES HERE + // ========================================================================= + + private val rules = mapOf( + // --- GERMAN (DE) ----------------------------------------------------- + "de|$POS_NOUN" to GridRule( + title = "Deklination", + rowTags = listOf("nominative", "genitive", "dative", "accusative"), + colTags = listOf("singular", "plural") + ), + "de|$POS_ADJ" to GridRule( + title = "Adjektivendungen", + rowTags = listOf("masculine", "feminine", "neuter"), + colTags = listOf("singular", "plural"), + fallbackStrategy = { row, col, lemma -> + // Fallback: Use lemma for Masc+Sing if missing (common in some dicts) + if (row == "masculine" && col == "singular") lemma else null + } + ), + "de|$POS_VERB" to VerbRule( + pronouns = listOf("ich", "du", "er/sie/es", "wir", "ihr", "sie"), + tenses = mapOf( + "present" to "Präsens", + "past" to "Präteritum", + "subjunctive_i" to "Konjunktiv I", + "subjunctive_ii" to "Konjunktiv II", + "imperative" to "Imperativ" + ) + ), + + // --- FRENCH (FR) ----------------------------------------------------- + "fr|$POS_NOUN" to GridRule( + title = "Nombre", + rowTags = listOf("singular", "plural"), + colTags = listOf("") // Single column (just list rows) + ), + "fr|$POS_ADJ" to GridRule( + title = "Accord", + rowTags = listOf("masculine", "feminine"), + colTags = listOf("singular", "plural") + ), + "fr|$POS_VERB" to VerbRule( + pronouns = listOf("je", "tu", "il/elle", "nous", "vous", "ils/elles"), + tenses = mapOf( + "indicative_present" to "Présent", + "indicative_imperfect" to "Imparfait", + "indicative_future" to "Futur", + "subjunctive_present" to "Subjonctif", + "conditional_present" to "Conditionnel" + ) + ), + + // --- PORTUGUESE (PT) Example ----------------------------------------- + "pt|$POS_VERB" to VerbRule( + pronouns = listOf("eu", "tu", "ele/ela", "nós", "vós", "eles/elas"), + tenses = mapOf( + "present" to "Presente", + "imperfect" to "Imperfeito", + "perfect" to "Perfeito" + ) + ) + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyRules.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyRules.kt new file mode 100644 index 0000000..910221f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyRules.kt @@ -0,0 +1,36 @@ +package eu.gaudian.translator.model.grammar + +/** + * Base class for all morphology rules. + */ +sealed class MorphologyRule { + + /** + * RULE: Extract a 2D Grid (e.g., German Nouns). + * @param rowTags The tags defining the rows (e.g., Nominative, Genitive). + * @param colTags The tags defining the columns (e.g., Singular, Plural). + * @param title Display title for the table. + * @param fallbackStrategy Optional: If cell is missing, how to generate it (e.g., use Lemma). + */ + data class GridRule( + val title: String, + val rowTags: List, + val colTags: List, + val fallbackStrategy: ((row: String, col: String, lemma: String) -> String?)? = null + ) : MorphologyRule() + + /** + * RULE: Extract a Verb Paradigm. + * @param tenses Map of "Internal Tag" -> "Display Label". + * @param pronouns List of pronouns to display. + */ + data class VerbRule( + val tenses: Map, + val pronouns: List + ) : MorphologyRule() + + /** + * RULE: Just show everything generic. + */ + object GenericRule : MorphologyRule() +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyStrategies.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyStrategies.kt new file mode 100644 index 0000000..fb43b08 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/MorphologyStrategies.kt @@ -0,0 +1,269 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.grammar + +import eu.gaudian.translator.model.grammar.GrammarConstants.CONDITIONAL_PRESENT +import eu.gaudian.translator.model.grammar.GrammarConstants.IMPERATIVE +import eu.gaudian.translator.model.grammar.GrammarConstants.INDICATIVE_FUTURE +import eu.gaudian.translator.model.grammar.GrammarConstants.INDICATIVE_IMPERFECT +import eu.gaudian.translator.model.grammar.GrammarConstants.INDICATIVE_PRESENT +import eu.gaudian.translator.model.grammar.GrammarConstants.INDICATIVE_SIMPLE_PAST +import eu.gaudian.translator.model.grammar.GrammarConstants.INFINITIVE +import eu.gaudian.translator.model.grammar.GrammarConstants.KEY_DATA +import eu.gaudian.translator.model.grammar.GrammarConstants.KEY_FORMS +import eu.gaudian.translator.model.grammar.GrammarConstants.KEY_INFLECTIONS +import eu.gaudian.translator.model.grammar.GrammarConstants.KEY_TYPE +import eu.gaudian.translator.model.grammar.GrammarConstants.PARTICIPLE_PAST +import eu.gaudian.translator.model.grammar.GrammarConstants.PARTICIPLE_PRESENT +import eu.gaudian.translator.model.grammar.GrammarConstants.PAST +import eu.gaudian.translator.model.grammar.GrammarConstants.POS_NOUN +import eu.gaudian.translator.model.grammar.GrammarConstants.POS_VERB +import eu.gaudian.translator.model.grammar.GrammarConstants.PRESENT +import eu.gaudian.translator.model.grammar.GrammarConstants.SUBJUNCTIVE_I +import eu.gaudian.translator.model.grammar.GrammarConstants.SUBJUNCTIVE_II +import eu.gaudian.translator.model.grammar.GrammarConstants.SUBJUNCTIVE_PRESENT +import eu.gaudian.translator.model.grammar.GrammarConstants.TYPE_DE_ADJ +import eu.gaudian.translator.model.grammar.GrammarConstants.TYPE_DE_VERB +import eu.gaudian.translator.model.grammar.WordMorphology.Adjective +import eu.gaudian.translator.model.grammar.WordMorphology.GenericInflections +import eu.gaudian.translator.model.grammar.WordMorphology.Noun +import eu.gaudian.translator.model.grammar.WordMorphology.Verb +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.JsonPrimitive +import kotlinx.serialization.json.contentOrNull +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive + +/** + * Interface for language-specific morphology parsing. + */ +interface MorphologyStrategy { + fun parse( + lemma: String, + pos: String?, + rootData: JsonObject, + config: LanguageConfig? + ): WordMorphology? +} + +/** + * Strategy for German (de). + */ +class GermanMorphologyStrategy : MorphologyStrategy { + override fun parse( + lemma: String, + pos: String?, + rootData: JsonObject, + config: LanguageConfig? + ): WordMorphology? { + val formsElement = rootData[KEY_FORMS] ?: return null + val categories = config?.categories + val normalizedPos = pos?.lowercase()?.trim() + + return when (formsElement) { + is JsonObject -> { + val type = formsElement[KEY_TYPE]?.jsonPrimitive?.contentOrNull + val innerData = formsElement[KEY_DATA]?.jsonObject + + when (type) { + TYPE_DE_VERB if innerData != null -> { + val verbConfig = categories?.get(POS_VERB) + val conjugation = mapJsonToVerbConjugation(lemma, innerData, verbConfig) + Verb(listOf(conjugation)) + } + TYPE_DE_ADJ if innerData != null -> { + val comparison = parseAdjectiveComparison(innerData) + Adjective(comparison) + } + else -> { + null + } + } + } + is JsonArray -> { + if (formsElement.isEmpty()) return null + + if (SharedMorphologyUtils.isNounLikeStructure(formsElement, normalizedPos)) { + val nounConfig = categories?.get(POS_NOUN) + val declension = SharedMorphologyUtils.parseNounDeclension(formsElement, nounConfig) + return Noun(declension) + } + + // Handle array of verb blocks + val verbBlocks = formsElement.mapNotNull { element -> + val obj = element.jsonObject + val type = obj[KEY_TYPE]?.jsonPrimitive?.contentOrNull + val innerData = obj[KEY_DATA]?.jsonObject + if (innerData != null && (type == TYPE_DE_VERB || obj.containsKey(KEY_DATA))) innerData else null + } + + if (verbBlocks.isNotEmpty()) { + val verbConfig = categories?.get(POS_VERB) + val conjugations = verbBlocks.map { innerData -> + mapJsonToVerbConjugation(lemma, innerData, verbConfig) + } + return Verb(conjugations) + } + null + } + else -> null + } + } + + private fun mapJsonToVerbConjugation( + infinitive: String, + data: JsonObject, + categoryConfig: CategoryConfig? + ): VerbConjugation { + fun getForms(key: String): List = + data[key]?.jsonArray?.mapNotNull { (it as? JsonPrimitive)?.contentOrNull } ?: emptyList() + + val conjugationMap = mutableMapOf>() + val tenseLabels = categoryConfig?.conjugation_display?.tense_labels + + fun addTense(key: String) { + val forms = getForms(key) + if (forms.isNotEmpty()) { + val label = tenseLabels?.get(key) ?: key.replaceFirstChar { it.titlecase() } + conjugationMap[label] = forms + } + } + + addTense(PRESENT) + addTense(PAST) + addTense(SUBJUNCTIVE_I) + addTense(SUBJUNCTIVE_II) + + val pronouns = categoryConfig?.conjugation_display?.pronouns + ?: listOf("ich", "du", "er/sie/es", "wir", "ihr", "sie") + + val aux = data["aux"]?.jsonPrimitive?.contentOrNull + + return VerbConjugation(infinitive, conjugationMap, pronouns, aux) + } + + private fun parseAdjectiveComparison(data: JsonObject): AdjectiveComparison { + return AdjectiveComparison( + positive = data["positive_masculine"]?.jsonPrimitive?.contentOrNull + ?: data["positive_feminine"]?.jsonPrimitive?.contentOrNull, + comparative = data["comparative"]?.jsonPrimitive?.contentOrNull, + superlative = data["superlative"]?.jsonPrimitive?.contentOrNull + ) + } +} + +/** + * Strategy for French (fr). + */ +class FrenchMorphologyStrategy : MorphologyStrategy { + override fun parse( + lemma: String, + pos: String?, + rootData: JsonObject, + config: LanguageConfig? + ): WordMorphology? { + val formsElement = rootData[KEY_FORMS] ?: return null + val categories = config?.categories + val normalizedPos = pos?.lowercase()?.trim() + + return when (formsElement) { + is JsonObject -> { + // Heuristic: Check for French verb keys + val hasVerbForms = formsElement.keys.any { key -> + key.startsWith("indicative_") || key.startsWith("subjunctive_") || + key.startsWith(IMPERATIVE) || key.startsWith("conditional_") || + key == INFINITIVE || key == PARTICIPLE_PRESENT || key == PARTICIPLE_PAST + } + + if (hasVerbForms) { + val verbConfig = categories?.get(POS_VERB) + val conjugation = mapFrenchJsonToVerbConjugation(lemma, formsElement, verbConfig) + Verb(listOf(conjugation)) + } else null + } + is JsonArray -> { + if (SharedMorphologyUtils.isNounLikeStructure(formsElement, normalizedPos)) { + val nounConfig = categories?.get(POS_NOUN) + val declension = SharedMorphologyUtils.parseNounDeclension(formsElement, nounConfig) + return Noun(declension) + } + null + } + else -> null + } + } + + private fun mapFrenchJsonToVerbConjugation( + infinitive: String, + data: JsonObject, + categoryConfig: CategoryConfig? + ): VerbConjugation { + fun getForms(key: String): List = + data[key]?.jsonArray?.mapNotNull { (it as? JsonPrimitive)?.contentOrNull } ?: emptyList() + + val conjugationMap = mutableMapOf>() + val tenseLabels = categoryConfig?.conjugation_display?.tense_labels + + fun addFrenchTense(frenchKey: String, displayKey: String) { + val forms = getForms(frenchKey) + if (forms.isNotEmpty()) { + val label = tenseLabels?.get(frenchKey) ?: displayKey + conjugationMap[label] = forms + } + } + + addFrenchTense(INDICATIVE_PRESENT, "Indicative Present") + addFrenchTense(INDICATIVE_IMPERFECT, "Indicative Imperfect") + addFrenchTense(INDICATIVE_SIMPLE_PAST, "Indicative Simple Past") + addFrenchTense(INDICATIVE_FUTURE, "Indicative Future") + addFrenchTense(SUBJUNCTIVE_PRESENT, "Subjunctive Present") + addFrenchTense(CONDITIONAL_PRESENT, "Conditional Present") + addFrenchTense(IMPERATIVE, "Imperative") + + val pronouns = categoryConfig?.conjugation_display?.pronouns + ?: listOf("je", "tu", "il/elle", "nous", "vous", "ils/elles") + + // French data sometimes puts aux in an array + val aux = data["auxiliary"]?.jsonArray?.firstOrNull()?.jsonPrimitive?.contentOrNull + ?: data["aux"]?.jsonPrimitive?.contentOrNull + + return VerbConjugation(infinitive, conjugationMap, pronouns, aux) + } +} + +/** + * Fallback Strategy (Portuguese, Generic, etc.). + * Handles flat list of inflections. + */ +class GenericMorphologyStrategy : MorphologyStrategy { + override fun parse( + lemma: String, + pos: String?, + rootData: JsonObject, + config: LanguageConfig? + ): WordMorphology? { + val inflectionsElement = rootData[KEY_INFLECTIONS] as? JsonArray + + if (!inflectionsElement.isNullOrEmpty()) { + val inflections = inflectionsElement.mapNotNull { element -> + val obj = element.jsonObject + val form = obj["form"]?.jsonPrimitive?.contentOrNull ?: return@mapNotNull null + + val features = (obj["grammatical_features"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + + // FIX: Use 'tags' instead of 'grammatical_features' + // FIX: Handle nullability with '?: emptyList()' + Inflection(form = form, tags = features ?: emptyList()) + } + + // Note: Ensure GenericInflections accepts List if you haven't updated it yet + if (inflections.isNotEmpty()) { + return GenericInflections(inflections) + } + } + return null + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/SharedMorphologyUtils.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/SharedMorphologyUtils.kt new file mode 100644 index 0000000..2cb9fc4 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/SharedMorphologyUtils.kt @@ -0,0 +1,80 @@ +package eu.gaudian.translator.model.grammar + +import eu.gaudian.translator.model.grammar.GrammarConstants.ACCUSATIVE +import eu.gaudian.translator.model.grammar.GrammarConstants.DATIVE +import eu.gaudian.translator.model.grammar.GrammarConstants.GENITIVE +import eu.gaudian.translator.model.grammar.GrammarConstants.KEY_FORM +import eu.gaudian.translator.model.grammar.GrammarConstants.KEY_TAGS +import eu.gaudian.translator.model.grammar.GrammarConstants.NOMINATIVE +import eu.gaudian.translator.model.grammar.GrammarConstants.PLURAL +import eu.gaudian.translator.model.grammar.GrammarConstants.SINGULAR +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.contentOrNull +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive + +object SharedMorphologyUtils { + + /** + * Parses a standard noun declension table from a list of forms. + * Used by both German and French strategies. + */ + fun parseNounDeclension( + forms: JsonArray, + categoryConfig: CategoryConfig? + ): NounDeclensionTable { + val nestedMap = mutableMapOf>() + + forms.forEach { item -> + val obj = item.jsonObject + val form = obj[KEY_FORM]?.jsonPrimitive?.contentOrNull ?: return@forEach + val tags = obj[KEY_TAGS]?.jsonArray?.mapNotNull { it.jsonPrimitive.contentOrNull } ?: emptyList() + + val case = tags.firstOrNull { it in listOf(NOMINATIVE, GENITIVE, DATIVE, ACCUSATIVE) } + val number = tags.firstOrNull { it in listOf(SINGULAR, PLURAL) } + + if (case != null && number != null) { + nestedMap.getOrPut(case) { mutableMapOf() }[number] = form + } + } + + val displayConfig = categoryConfig?.declension_display + + val cases = displayConfig?.cases_order ?: listOf(NOMINATIVE, GENITIVE, DATIVE, ACCUSATIVE) + val numbers = displayConfig?.numbers_order ?: listOf(SINGULAR, PLURAL) + + val flatMap = mutableMapOf, String>() + cases.forEach { caseKey -> + numbers.forEach { numberKey -> + val form = nestedMap[caseKey]?.get(numberKey) + if (form != null) { + flatMap[caseKey to numberKey] = form + } + } + } + + return NounDeclensionTable( + cases = cases, + numbers = numbers, + forms = flatMap + ) + } + + /** + * Checks if a JSON array contains noun-like structures (Case + Number). + */ + fun isNounLikeStructure(forms: JsonArray, normalizedPos: String?): Boolean { + if (forms.isEmpty()) return false + + val hasCaseAndNumber = forms.any { formElement -> + val formObj = formElement.jsonObject + val tags = formObj[KEY_TAGS]?.jsonArray?.mapNotNull { it.jsonPrimitive.contentOrNull } ?: emptyList() + val hasCase = tags.any { it in listOf(NOMINATIVE, GENITIVE, DATIVE, ACCUSATIVE) } + val hasNumber = tags.any { it in listOf(SINGULAR, PLURAL) } + hasCase && hasNumber + } + + return hasCaseAndNumber && (normalizedPos == null || normalizedPos.startsWith(GrammarConstants.POS_NOUN)) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/UnifiedGrammarModels.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/UnifiedGrammarModels.kt new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/UnifiedMorphology.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/UnifiedMorphology.kt new file mode 100644 index 0000000..ab6ac1f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/UnifiedMorphology.kt @@ -0,0 +1,43 @@ +package eu.gaudian.translator.model.grammar + +import kotlinx.serialization.Serializable + +@Serializable +sealed class UnifiedMorphology { + + /** + * 2D Grid for Nouns (Case x Number) and Adjectives (Gender x Number). + */ + data class Grid( + val title: String, + val rowLabels: List, + val colLabels: List, + val cells: Map + ) : UnifiedMorphology() + + /** + * Verb Paradigm (Flattened - no intermediate 'paradigm' object). + */ + data class Verb( + val infinitive: String, + val auxiliary: String?, + val tenses: Map>, + val pronouns: List + ) : UnifiedMorphology() + + /** + * Generic List. Now holds 'Inflection' objects to keep tags visible. + */ + data class ListForms( + val forms: List + ) : UnifiedMorphology() +} + +/** + * Moved here to be shared. Represents a single form with its tags. + */ +@Serializable +data class Inflection( + val form: String, + val tags: List +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/UnifiedMorphologyParser.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/UnifiedMorphologyParser.kt new file mode 100644 index 0000000..c3372e2 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/UnifiedMorphologyParser.kt @@ -0,0 +1,210 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.grammar + +import android.content.Context +import eu.gaudian.translator.R +import eu.gaudian.translator.model.grammar.GrammarConstants.POS_ADJ +import eu.gaudian.translator.model.grammar.GrammarConstants.POS_NOUN +import eu.gaudian.translator.model.grammar.GrammarConstants.POS_VERB +import eu.gaudian.translator.utils.Log + +object UnifiedMorphologyParser { + + private const val TAG = "UnifiedMorphologyParser" + + fun parse( + entry: DictionaryEntryData, + lemma: String, + pos: String?, + langCode: String, + config: LanguageConfig, + context: Context + ): UnifiedMorphology? { + // 1. Log Input + Log.d(TAG, "Request: lemma='$lemma', lang='$langCode', pos='$pos'") + + if (entry.forms.isEmpty()) { + Log.d(TAG, "Aborting: No forms data available for '$lemma'") + return null + } + + // FIX 1: Normalize POS tags (map "adj" -> "adjective", etc.) + val normalizedPos = normalizePos(pos) + + if (normalizedPos == null) { + Log.w(TAG, "Aborting: POS could not be normalized for '$lemma' (raw: $pos)") + return null + } + + // 2. Determine Rule Source + // First, check JSON Config + var rule = buildRuleFromConfig(normalizedPos, config, context) + val ruleSource = if (rule != null) "JSON Config" else "Registry Fallback" + + // If not in JSON, check Registry + if (rule == null) { + rule = MorphologyRegistry.getRule(langCode, normalizedPos) + } + + Log.d(TAG, "Strategy: Using $ruleSource for $langCode|$normalizedPos") + + // 3. Execute Extraction + val result = try { + when (rule) { + is MorphologyRule.GridRule -> { + Log.d(TAG, "Extracting Grid: ${rule.title}") + parseGrid(entry.forms, rule, lemma) + } + is MorphologyRule.VerbRule -> { + Log.d(TAG, "Extracting Verb Paradigm") + parseVerb(entry.forms, rule, lemma) + } + is MorphologyRule.GenericRule -> { + Log.d(TAG, "Extracting Generic List") + parseGeneric(entry.forms) + } + } + } catch (e: Exception) { + Log.e(TAG, "Error extracting morphology for '$lemma': ${e.message}") + return null + } + + // 4. Log Outcome + if (result != null) { + Log.d(TAG, "Success: Generated ${result::class.java.simpleName} for '$lemma'") + } else { + Log.w(TAG, "Result was null for '$lemma'") + } + + return result + } + + /** + * Maps short/raw POS tags to the standard GrammarConstants keys. + */ + private fun normalizePos(pos: String?): String? { + val raw = pos?.lowercase()?.trim() ?: return null + return when (raw) { + "adj", "adjective", "adjectif" -> POS_ADJ // "adjective" + "noun", "substantive", "nom" -> POS_NOUN // "noun" + "verb", "verbe" -> POS_VERB // "verb" + else -> raw // Return as-is if no map found (e.g. "adverb") + } + } + + private fun buildRuleFromConfig(pos: String, config: LanguageConfig, context: Context): MorphologyRule? { + val category = config.categories[pos] ?: return null + return when (pos) { + // MERGED: Nouns AND Adjectives both use Grid Logic + POS_NOUN, POS_ADJ -> { + val display = category.declension_display ?: return null + if (display.cases_order != null && display.numbers_order != null) { + + // FIX 2: Define a fallback strategy for Adjectives. + // If a cell is missing (e.g. Masc/Sing), use the lemma. + val fallback: ((String, String, String) -> String?)? = if (pos == POS_ADJ) { + { row, col, lemma -> + // If looking for Masculine Singular, assume it's the Lemma + if (row.startsWith("masc") && col.startsWith("sing")) lemma else null + } + } else null + + MorphologyRule.GridRule( + title = if (pos == POS_ADJ) context.getString(R.string.label_variations) else context.getString(R.string.label_declension), + rowTags = display.cases_order, + colTags = display.numbers_order, + fallbackStrategy = fallback + ) + } else null + } + POS_VERB -> { + val display = category.conjugation_display ?: return null + if (display.tense_labels != null && display.pronouns != null) { + MorphologyRule.VerbRule( + tenses = display.tense_labels, + pronouns = display.pronouns + ) + } else null + } + else -> null + } + } + + // --- EXECUTION LOGIC --- + + private fun parseGrid( + forms: List, + rule: MorphologyRule.GridRule, + lemma: String + ): UnifiedMorphology.Grid { + val cells = mutableMapOf() + + // Optimization: Lookup map + val formLookup = forms.associate { formData -> + formData.tags.map { it.lowercase() }.toSet() to formData.form + } + + rule.rowTags.forEach { rowTag -> + rule.colTags.forEach { colTag -> + val requiredTags = listOf(rowTag, colTag) + .filter { it.isNotEmpty() } + .map { it.lowercase() } + + val matchEntry = formLookup.entries.find { (tags, _) -> + tags.containsAll(requiredTags) + } + + // Try to get value from match, OR use fallback (Lemma) + val cellValue = matchEntry?.value + ?: rule.fallbackStrategy?.invoke(rowTag, colTag, lemma) + + if (cellValue != null) { + val key = if (colTag.isEmpty()) rowTag else "$rowTag|$colTag" + cells[key] = cellValue + } + } + } + + return UnifiedMorphology.Grid( + title = rule.title, + rowLabels = rule.rowTags, + colLabels = rule.colTags.filter { it.isNotEmpty() }, + cells = cells + ) + } + + private fun parseVerb( + forms: List, + rule: MorphologyRule.VerbRule, + lemma: String + ): UnifiedMorphology.Verb { + val tenseResults = mutableMapOf>() + + rule.tenses.forEach { (tenseKey, displayLabel) -> + val relevantForms = forms.filter { form -> + form.tags.any { tag -> tag.equals(tenseKey, ignoreCase = true) } + } + + if (relevantForms.isNotEmpty()) { + val truncated = relevantForms.take(rule.pronouns.size).map { it.form } + tenseResults[displayLabel] = truncated + } + } + + val aux = forms.find { it.tags.contains("auxiliary") }?.form + + return UnifiedMorphology.Verb( + infinitive = lemma, + auxiliary = aux, + tenses = tenseResults, + pronouns = rule.pronouns + ) + } + + private fun parseGeneric(forms: List): UnifiedMorphology.ListForms { + return UnifiedMorphology.ListForms( + forms.map { Inflection(it.form, it.tags) } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/grammar/formatGrammarDetails.kt b/app/src/main/java/eu/gaudian/translator/model/grammar/formatGrammarDetails.kt new file mode 100644 index 0000000..48ac3ed --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/grammar/formatGrammarDetails.kt @@ -0,0 +1,38 @@ +package eu.gaudian.translator.model.grammar + +/** + * Formats the grammatical details of a word into a concise, user-friendly string + * based on the rules defined in a CategoryConfig. + * + * @param details The grammatical feature object containing the raw data. + * @param config The configuration for the specific category (e.g., "noun" in German). + * @return A formatted string like "(der)" or "(reg. -er)". + */ +fun formatGrammarDetails( + details: GrammaticalFeature, + config: CategoryConfig? +): String { + val formatter = config?.formatter ?: return details.category.replaceFirstChar { it.uppercase() } + + @Suppress("HardCodedStringLiteral") val placeholderRegex = Regex("\\{(\\w+)\\}") + + val hasDataForFormatter = placeholderRegex.findAll(formatter).any { matchResult -> + val key = matchResult.groupValues[1] + details.properties.containsKey(key) + } + + if (!hasDataForFormatter) { + return details.category.replaceFirstChar { it.uppercase() } + } + + + var result = formatter + result = placeholderRegex.replace(result) { matchResult -> + val key = matchResult.groupValues[1] + val rawValue = details.properties[key] ?: "" + val mappedValue = config.mappings?.get(key)?.get(rawValue) + mappedValue ?: rawValue + } + + return result +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/ApiLogRepository.kt b/app/src/main/java/eu/gaudian/translator/model/repository/ApiLogRepository.kt new file mode 100644 index 0000000..8996dab --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/ApiLogRepository.kt @@ -0,0 +1,40 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.repository + +import android.content.Context +import eu.gaudian.translator.model.communication.ApiLogEntry +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.withContext + +class ApiLogRepository(context: Context) { + private val dataStore = context.dataStore + + fun getLogs(): Flow> = dataStore.loadObjectList(ApiStoreKeys.API_LOGS_KEY) + + suspend fun addLog(entry: ApiLogEntry, maxKeep: Int = 200) { + withContext(Dispatchers.IO) { + try { + val current = getLogs().first() + val updated = (current + entry).takeLast(maxKeep) + dataStore.saveObjectList(ApiStoreKeys.API_LOGS_KEY, updated) + } catch (e: Exception) { + Log.e("ApiLogRepository", "Failed to add log", e) + } + } + } + + suspend fun clear() { + withContext(Dispatchers.IO) { + dataStore.clear(ApiStoreKeys.API_LOGS_KEY) + } + } +} + +// Separate object to avoid cluttering the global DataStoreKeys if needed +object ApiStoreKeys { + val API_LOGS_KEY = DataStoreKeys.API_LOGS_KEY +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/ApiRepository.kt b/app/src/main/java/eu/gaudian/translator/model/repository/ApiRepository.kt new file mode 100644 index 0000000..52db647 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/ApiRepository.kt @@ -0,0 +1,356 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.repository + +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.edit +import eu.gaudian.translator.model.LanguageModel +import eu.gaudian.translator.model.communication.ApiProvider +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map + +class ApiRepository(private val context: Context) { + + private val settingsRepository = SettingsRepository(context) + private val dataStore: DataStore = context.dataStore + + @Suppress("PrivatePropertyName") + private val TAG = "ApiRepository" + + /** + * Checks and sets fallback models. + * Enforces consistency: If no key is present, default models are removed. + */ + suspend fun initialInit() { + Log.i(TAG, "Starting initial model check...") + + val jsonProviders = ApiProvider.loadProviders(context.applicationContext) + val jsonProvidersByKey = jsonProviders.associateBy { it.key } + + // Load currently saved providers + var storedProviders = dataStore.loadObjectList(DataStoreKeys.PROVIDERS_KEY).first() + + // 1. First Run Handling + if (storedProviders.isEmpty()) { + Log.i(TAG, "DataStore empty. Initializing with JSON defaults.") + val initial = jsonProviders.map { + if (!it.isCustom) it.copy(models = emptyList()) else it + } + saveProviders(initial) + storedProviders = initial + } + + val apiKeys = getAllApiKeys().first() + var needsSync = false + + // --- NEW STEP: CLEANUP --- + // Filter out providers that are NOT custom AND are NO LONGER in the JSON + val validStoredProviders = storedProviders.filter { stored -> + val stillExistsInJson = jsonProvidersByKey.containsKey(stored.key) + val isCustom = stored.isCustom + + // Keep it if it's custom OR if it still exists in the JSON source + if (isCustom || stillExistsInJson) { + true + } else { + Log.i(TAG, "Removing obsolete provider: ${stored.displayName} (Key: ${stored.key})") + needsSync = true + false // Drop this provider + } + } + + // 2. Sync Existing Providers (Run logic on the CLEANED list) + val syncedStoredProviders = validStoredProviders.map { stored -> + if (!stored.isCustom) { + val latestDefault = jsonProvidersByKey[stored.key] + if (latestDefault != null) { + val hasKey = apiKeys[stored.key]?.isNotBlank() ?: false + val customModels = stored.models.filter { it.isCustom } + + val targetModels = if (hasKey) { + val newDefaultModels = latestDefault.models.filter { !it.isCustom } + (customModels + newDefaultModels).distinctBy { it.modelId } + } else { + customModels + } + + val needsUpdate = stored.displayName != latestDefault.displayName || + stored.baseUrl != latestDefault.baseUrl || + stored.endpoint != latestDefault.endpoint || + stored.websiteUrl != latestDefault.websiteUrl || + stored.models.size != targetModels.size || + stored.models.map { it.modelId }.toSet() != targetModels.map { it.modelId }.toSet() + + if (needsUpdate) { + needsSync = true + stored.copy( + displayName = latestDefault.displayName, + baseUrl = latestDefault.baseUrl, + endpoint = latestDefault.endpoint, + websiteUrl = latestDefault.websiteUrl, + models = targetModels, + isCustom = false + ) + } else { + stored + } + } else { + stored + } + } else { + stored + } + } + + // 3. Detect & Add NEW Providers + val existingKeys = syncedStoredProviders.map { it.key }.toSet() + val newProvidersFromJson = jsonProviders.filter { it.key !in existingKeys } + + val newProvidersInitialized = newProvidersFromJson.map { + if (!it.isCustom) it.copy(models = emptyList()) else it + } + + if (newProvidersInitialized.isNotEmpty()) { + Log.i(TAG, "Found ${newProvidersInitialized.size} new providers in JSON. Adding them.") + needsSync = true + } + + // 4. Save and Apply + val finalProviderList = syncedStoredProviders + newProvidersInitialized + + if (needsSync) { + Log.i(TAG, "Syncing providers...") + saveProviders(finalProviderList) + storedProviders = finalProviderList + } + + // 5. Fallback Selection Logic + val currentTrans = getTranslationModel().first() + val currentExer = getExerciseModel().first() + val currentVocab = getVocabularyModel().first() + val currentDict = getDictionaryModel().first() + + val validProviders = storedProviders.filter { provider -> + val hasKey = apiKeys[provider.key]?.isNotBlank() ?: false + val isLocalHost = provider.baseUrl.contains("localhost") || provider.baseUrl.contains("127.0.0.1") + hasKey || isLocalHost || provider.isCustom + } + val availableModels = validProviders.flatMap { it.models } + + var configurationValid = true + + // (Helper function to reduce repetition) + fun checkAndFallback(current: LanguageModel?, setter: suspend (LanguageModel) -> Unit) { + val isValid = current != null && availableModels.any { it.modelId == current.modelId && it.providerKey == current.providerKey } + if (!isValid) { + val fallback = findFallbackModel(availableModels) + if (fallback != null) { + // We must use a blocking call or scope here because we can't easily pass a suspend function to a lambda + // But since we are inside a suspend function, we can just call the setter directly if we unroll the loop. + // For simplicity, I'll keep the unrolled logic below. + } + } + } + + // Fallback checks + if (currentTrans == null || !availableModels.any { it.modelId == currentTrans.modelId && it.providerKey == currentTrans.providerKey }) { + findFallbackModel(availableModels)?.let { setTranslationModel(it) } ?: run { configurationValid = false } + } + + if (currentExer == null || !availableModels.any { it.modelId == currentExer.modelId && it.providerKey == currentExer.providerKey }) { + findFallbackModel(availableModels)?.let { setExerciseModel(it) } ?: run { configurationValid = false } + } + + if (currentVocab == null || !availableModels.any { it.modelId == currentVocab.modelId && it.providerKey == currentVocab.providerKey }) { + findFallbackModel(availableModels)?.let { setVocabularyModel(it) } ?: run { configurationValid = false } + } + + if (currentDict == null || !availableModels.any { it.modelId == currentDict.modelId && it.providerKey == currentDict.providerKey }) { + findFallbackModel(availableModels)?.let { setDictionaryModel(it) } ?: run { configurationValid = false } + } + + settingsRepository.connectionConfigured.set(configurationValid) + } + + /** + * Manually adds default models for a provider (Triggered on Key Activation). + */ + suspend fun addDefaultModels(providerKey: String) { + val currentProviders = dataStore.loadObjectList(DataStoreKeys.PROVIDERS_KEY).first().toMutableList() + val index = currentProviders.indexOfFirst { it.key == providerKey } + if (index == -1) return + + val stored = currentProviders[index] + if (stored.isCustom) return // Don't touch custom providers + + val jsonProviders = ApiProvider.loadProviders(context.applicationContext) + val default = jsonProviders.find { it.key == providerKey } ?: return + + // Merge default models into existing (preserving customs) + val customModels = stored.models.filter { it.isCustom } + val defaultModels = default.models.filter { !it.isCustom } + val merged = (customModels + defaultModels).distinctBy { it.modelId } + + currentProviders[index] = stored.copy(models = merged) + saveProviders(currentProviders) + Log.i(TAG, "Added default models for $providerKey. Count: ${defaultModels.size}") + } + + /** + * Manually removes default models for a provider (Triggered on Key Deactivation). + */ + suspend fun removeDefaultModels(providerKey: String) { + val currentProviders = dataStore.loadObjectList(DataStoreKeys.PROVIDERS_KEY).first().toMutableList() + val index = currentProviders.indexOfFirst { it.key == providerKey } + if (index == -1) return + + val stored = currentProviders[index] + if (stored.isCustom) return + + // Remove all non-custom models + val customOnly = stored.models.filter { it.isCustom } + + currentProviders[index] = stored.copy(models = customOnly) + saveProviders(currentProviders) + Log.i(TAG, "Removed default models for $providerKey.") + } + + fun getProviders(): Flow> { + val providersFlow = dataStore.loadObjectList(DataStoreKeys.PROVIDERS_KEY).map { list -> + list.ifEmpty { + ApiProvider.loadProviders(context.applicationContext).map { + // Initial state: No key = No models + if (!it.isCustom) it.copy(models = emptyList()) else it + } + } + } + val apiKeysFlow = getAllApiKeys() + + return combine(providersFlow, apiKeysFlow) { providers, apiKeys -> + providers.map { provider -> + val hasKey = apiKeys[provider.key]?.isNotBlank() ?: false + val base = provider.baseUrl.trim().lowercase() + val isLocalHost = (base.contains("localhost") || base.contains("127.0.0.1") || base.startsWith("10.")) + + provider.copy().apply { + hasValidKey = hasKey || isLocalHost || isCustom + } + } + } + } + + fun getAllApiKeys(): Flow> { + val apiKeySuffix = "_api_key" + return dataStore.data.map { preferences -> + preferences.asMap().mapNotNull { (key, value) -> + if (key.name.endsWith(apiKeySuffix) && value is String) { + val providerKey = key.name.removeSuffix(apiKeySuffix) + providerKey to value + } else { + null + } + }.toMap() + } + } + + private fun findFallbackModel(allModels: List): LanguageModel? { + val preferredProviderOrder = listOf("mistral", "openai", "gemini", "deepseek", "openrouter") + for (providerKey in preferredProviderOrder) { + val model = allModels.firstOrNull { it.providerKey == providerKey } + if (model != null) return model + } + return allModels.firstOrNull() + } + + suspend fun saveProviders(providers: List) { + try { + dataStore.saveObjectList(DataStoreKeys.PROVIDERS_KEY, providers) + } catch (e: Exception) { + Log.e(TAG, "Error saving providers: ${e.message}", e) + } + } + + suspend fun addProvider(provider: ApiProvider) { + val currentProviders = dataStore.loadObjectList(DataStoreKeys.PROVIDERS_KEY).first().toMutableList() + if (currentProviders.none { it.key == provider.key }) { + currentProviders.add(provider) + saveProviders(currentProviders) + initialInit() + } + } + + suspend fun updateProvider(updatedProvider: ApiProvider) { + val currentProviders = dataStore.loadObjectList(DataStoreKeys.PROVIDERS_KEY).first().toMutableList() + val index = currentProviders.indexOfFirst { it.key == updatedProvider.key } + if (index != -1) { + currentProviders[index] = updatedProvider + saveProviders(currentProviders) + initialInit() + } + } + + suspend fun deleteProvider(providerKey: String) { + val currentProviders = dataStore.loadObjectList(DataStoreKeys.PROVIDERS_KEY).first().toMutableList() + val removed = currentProviders.removeAll { it.key == providerKey && it.isCustom } + if (removed) { + saveProviders(currentProviders) + initialInit() + } + } + + /* --- Model Selection Setters --- */ + + suspend fun setTranslationModel(model: LanguageModel) { + dataStore.saveObject(DataStoreKeys.SELECTED_TRANSLATION_MODEL_KEY, model) + settingsRepository.connectionConfigured.set(true) + } + fun getTranslationModel(): Flow = dataStore.loadObject(DataStoreKeys.SELECTED_TRANSLATION_MODEL_KEY) + + suspend fun setExerciseModel(model: LanguageModel) { + dataStore.saveObject(DataStoreKeys.SELECTED_EXERCISE_MODEL_KEY, model) + settingsRepository.connectionConfigured.set(true) + } + fun getExerciseModel(): Flow = dataStore.loadObject(DataStoreKeys.SELECTED_EXERCISE_MODEL_KEY) + + suspend fun setVocabularyModel(model: LanguageModel) { + dataStore.saveObject(DataStoreKeys.SELECTED_VOCABULARY_MODEL_KEY, model) + settingsRepository.connectionConfigured.set(true) + } + fun getVocabularyModel(): Flow = dataStore.loadObject(DataStoreKeys.SELECTED_VOCABULARY_MODEL_KEY) + + suspend fun setDictionaryModel(model: LanguageModel) { + dataStore.saveObject(DataStoreKeys.SELECTED_DICTIONARY_MODEL_KEY, model) + settingsRepository.connectionConfigured.set(true) + } + fun getDictionaryModel(): Flow = dataStore.loadObject(DataStoreKeys.SELECTED_DICTIONARY_MODEL_KEY) + + suspend fun wipeAll() { + Log.w(TAG, "Executing wipeAll()") + settingsRepository.connectionConfigured.set(false) + try { + dataStore.edit { prefs -> + prefs.remove(DataStoreKeys.PROVIDERS_KEY) + prefs.remove(DataStoreKeys.SELECTED_TRANSLATION_MODEL_KEY) + prefs.remove(DataStoreKeys.SELECTED_EXERCISE_MODEL_KEY) + prefs.remove(DataStoreKeys.SELECTED_VOCABULARY_MODEL_KEY) + prefs.remove(DataStoreKeys.SELECTED_DICTIONARY_MODEL_KEY) + + val apiKeySuffix = "_api_key" + val keysToRemove = prefs.asMap().keys.filter { it.name.endsWith(apiKeySuffix) } + for (k in keysToRemove) { + @Suppress("UNCHECKED_CAST") + val anyKey = k as Preferences.Key + prefs.remove(anyKey) + } + } + // initialInit will be called, see empty DataStore, and reload default providers (with EMPTY models) + initialInit() + } catch (e: Exception) { + Log.e(TAG, "Error during wipeAll: ${e.message}", e) + } + }} diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/DataStore.kt b/app/src/main/java/eu/gaudian/translator/model/repository/DataStore.kt new file mode 100644 index 0000000..2446232 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/DataStore.kt @@ -0,0 +1,162 @@ +@file:Suppress("HardCodedStringLiteral", "unused") + +package eu.gaudian.translator.model.repository + +import android.annotation.SuppressLint +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.stringPreferencesKey +import androidx.datastore.preferences.preferencesDataStore +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.map +import kotlinx.serialization.KSerializer +import kotlinx.serialization.SerializationException +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.json.Json +import kotlin.time.ExperimentalTime +import kotlin.time.Instant + +object DataStoreKeys { + val PROVIDERS_KEY = stringPreferencesKey("providers") + + val EXERCISES_KEY = stringPreferencesKey("exercises") + + + + val QUESTIONS_KEY = stringPreferencesKey("questions") + + // Language initialization metadata key + val LANGUAGE_INIT_METADATA_KEY = stringPreferencesKey("language_init_metadata") + + // Language-related keys + val SELECTED_SOURCE_LANGUAGE_KEY = stringPreferencesKey("selected_source_language") + val SELECTED_TARGET_LANGUAGE_KEY = stringPreferencesKey("selected_target_language") + + val DEFAULT_LANGUAGES_KEY = stringPreferencesKey("default_languages") + val CUSTOM_LANGUAGES_KEY = stringPreferencesKey("custom_language") + val ALL_LANGUAGES_KEY = stringPreferencesKey("all_languages") + val LANGUAGE_HISTORY_KEY = stringPreferencesKey("language_history") + val FAVORITE_LANGUAGES_KEY = stringPreferencesKey("favorite_languages") + val SELECTED_DICTIONARY_LANGUAGE_KEY = stringPreferencesKey("selected_dictionary_language") + + val SELECTED_TRANSLATION_MODEL_KEY = stringPreferencesKey("selected_translation_model") + val SELECTED_EXERCISE_MODEL_KEY = stringPreferencesKey("selected_exercise_model") + val SELECTED_VOCABULARY_MODEL_KEY = stringPreferencesKey("selected_vocabulary_model") + val SELECTED_DICTIONARY_MODEL_KEY = stringPreferencesKey("selected_dictionary_model") + + val TRANSLATION_HISTORY_KEY = stringPreferencesKey("translation_history") + val API_LOGS_KEY = stringPreferencesKey("api_logs") +} + +val Context.dataStore: DataStore by preferencesDataStore(name = "app_data") + +suspend inline fun DataStore.saveObject(key: Preferences.Key, obj: T) { + edit { preferences -> + val jsonString = Json.encodeToString(obj) + preferences[key] = jsonString + } +} + +suspend fun DataStore.saveStringSet(key: Preferences.Key>, set: Set) { + edit { preferences -> + preferences[key] = set + } +} + +fun DataStore.loadStringSet(key: Preferences.Key>): Flow> { + return data.map { preferences -> + preferences[key] ?: emptySet() + } +} + +inline fun DataStore.loadObject(key: Preferences.Key): Flow { + return data.map { preferences -> + val jsonString = preferences[key] + if (jsonString != null) { + Json.decodeFromString(jsonString) + } else { + null + } + }.catch { exception -> + if (exception is SerializationException) { + Log.w("DataStore: Failed to decode object for key '$key', clearing it.", exception) + this@loadObject.edit { it.remove(key) } + emit(null) + } else { + throw exception + } + } +} + +@SuppressLint("SuspiciousIndentation") +suspend inline fun DataStore.saveObjectList(key: Preferences.Key, list: List) { + try { + edit { preferences -> + try { + val jsonString = Json.encodeToString(list) + jsonString.also { preferences[key] = it } + } catch (e: Exception) { + Log.e("DataStore", "Failed to encode list to JSON", e) + throw e + } + } + } catch (e: Exception) { + Log.e("DataStore", "Failed to save list to DataStore", e) + throw e + } +} + + +inline fun DataStore.loadObjectList(key: Preferences.Key): Flow> { + return data.map { preferences -> + val jsonString = preferences[key] + if (jsonString != null) { + Json.decodeFromString>(jsonString) + } else { + emptyList() + } + }.catch { exception -> + if (exception is SerializationException) { + Log.w("DataStore", "Failed to decode list for key '$key', clearing it.", exception) + this@loadObjectList.edit { it.remove(key) } // Clears the bad data + emit(emptyList()) // Provides a default value to continue + } else { + throw exception + } + } +} + +suspend fun DataStore.clear(key: Preferences.Key) { + edit { preferences -> + preferences.remove(key) + } +} + +@kotlinx.serialization.Serializable +data class LanguageInitializationMetadata( + val appVersion: String?, + val systemLocale: String, + val timestamp: Long +) + +@OptIn(ExperimentalTime::class) +object InstantSerializer : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("Instant", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: Instant) { + encoder.encodeString(value.toString()) + } + + override fun deserialize(decoder: Decoder): Instant { + return Instant.parse(decoder.decodeString()) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryDatabaseRepository.kt b/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryDatabaseRepository.kt new file mode 100644 index 0000000..0056de5 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryDatabaseRepository.kt @@ -0,0 +1,137 @@ +@file:Suppress("HardCodedStringLiteral", "unused") + +package eu.gaudian.translator.model.repository + +import android.content.Context +import android.database.Cursor +import android.database.sqlite.SQLiteDatabase +import eu.gaudian.translator.model.communication.FileInfo +import eu.gaudian.translator.utils.Log + +/** + * Repository for generic access and reading of downloaded dictionary .db files. + * All operations are read-only. The .db files are assumed to be SQLite databases. + */ +class DictionaryDatabaseRepository(private val context: Context) { + + @Suppress("PrivatePropertyName") + private val TAG = "DictionaryDatabaseRepository" + + /** + * Opens a read-only SQLite database for the given file info. + * Returns null if the file does not exist. + */ + internal fun getDatabase(fileInfo: FileInfo): SQLiteDatabase? { + val dbAsset = fileInfo.assets.firstOrNull { it.filename.endsWith(".db") } + if (dbAsset == null) { + Log.e(TAG, "No database asset found for ${fileInfo.id}") + return null + } + + val file = java.io.File(context.filesDir, dbAsset.filename) + return if (file.exists()) { + try { + // Use URI mode with immutable=1 to reduce locking noise + val path = "file:${file.absolutePath}?mode=ro&immutable=1" + SQLiteDatabase.openDatabase( + path, + null, + SQLiteDatabase.OPEN_READONLY + ) + } catch (e: Exception) { + Log.e(TAG, "Error opening database for ${dbAsset.filename}", e) + null + } + } else { + Log.w(TAG, "Database file does not exist: ${dbAsset.filename}") + null + } + } + + /** + * Retrieves the list of table names in the database. + */ + fun getTables(fileInfo: FileInfo): List { + val db = getDatabase(fileInfo) ?: return emptyList() + val tables = mutableListOf() + db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null).use { cursor -> + while (cursor.moveToNext()) { + tables.add(cursor.getString(0)) + } + } + db.close() + return tables + } + + /** + * Retrieves the list of column names for a specific table. + */ + fun getColumns(fileInfo: FileInfo, table: String): List { + val db = getDatabase(fileInfo) ?: return emptyList() + val columns = mutableListOf() + db.rawQuery("PRAGMA table_info($table)", null).use { cursor -> + while (cursor.moveToNext()) { + columns.add(cursor.getString(1)) // name column index is 1 + } + } + db.close() + return columns + } + + /** + * Retrieves up to [limit] rows from a table as a list of maps (column name to value). + * Defaults to first 1000 rows if limit is not specified. + */ + fun getTableData(fileInfo: FileInfo, table: String, limit: Int = 1000): List> { + val db = getDatabase(fileInfo) ?: return emptyList() + val data = mutableListOf>() + db.rawQuery("SELECT * FROM $table LIMIT $limit", null).use { cursor -> + val columnCount = cursor.columnCount + val columnNames = Array(columnCount) { i -> cursor.getColumnName(i) } + while (cursor.moveToNext()) { + val row = mutableMapOf() + for (i in 0 until columnCount) { + val name = columnNames[i] + val value = when (cursor.getType(i)) { + Cursor.FIELD_TYPE_INTEGER -> cursor.getLong(i) + Cursor.FIELD_TYPE_FLOAT -> cursor.getDouble(i) + Cursor.FIELD_TYPE_STRING -> cursor.getString(i) + Cursor.FIELD_TYPE_BLOB -> "BLOB (${cursor.getBlob(i)?.size ?: 0} bytes)" + else -> null + } + value?.let { row[name] = it } + } + data.add(row) + } + } + db.close() + return data + } + + /** + * Checks if a table exists in the database. + */ + fun tableExists(fileInfo: FileInfo, table: String): Boolean { + val db = getDatabase(fileInfo) ?: return false + val exists = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table' AND name='$table'", null).use { cursor -> + cursor.moveToFirst() + } + db.close() + return exists + } + + /** + * Gets the row count for a specific table. + */ + fun getRowCount(fileInfo: FileInfo, table: String): Int { + val db = getDatabase(fileInfo) ?: return 0 + var count = 0 + db.rawQuery("SELECT COUNT(*) FROM $table", null).use { cursor -> + if (cursor.moveToFirst()) { + count = cursor.getInt(0) + } + } + db.close() + return count + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryFileRepository.kt b/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryFileRepository.kt new file mode 100644 index 0000000..2e8cd88 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryFileRepository.kt @@ -0,0 +1,270 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.repository + +import android.content.Context +import androidx.core.content.edit +import eu.gaudian.translator.R +import eu.gaudian.translator.model.communication.Asset +import eu.gaudian.translator.model.communication.FileDownloadManager +import eu.gaudian.translator.model.communication.FileInfo +import eu.gaudian.translator.model.communication.ManifestResponse +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import java.io.File + +/** + * Repository for managing downloaded dictionary files. + */ +class DictionaryFileRepository(private val context: Context) { + + private val fileDownloadManager = FileDownloadManager(context) + private val _downloadedDictionaries = MutableStateFlow>(emptyList()) + val downloadedDictionaries: Flow> = _downloadedDictionaries.asStateFlow() + + private val _orphanedFiles = MutableStateFlow>(emptyList()) + val orphanedFiles: Flow> = _orphanedFiles.asStateFlow() + + private val _manifest = MutableStateFlow(null) + val manifest: Flow = _manifest.asStateFlow() + + init { + loadDownloadedDictionaries() + } + + /** + * Fetches the manifest and updates the state. + */ + suspend fun fetchManifest() { + try { + val manifestResponse = fileDownloadManager.fetchManifest() + if (manifestResponse != null) { + _manifest.value = manifestResponse + loadDownloadedDictionaries() // Refresh both downloaded and orphaned lists + } else { + throw Exception("Manifest response is null") + } + } catch (e: Exception) { + Log.e("DictionaryFileRepository", "Error fetching manifest", e) + throw e + } + } + + /** + * Downloads a dictionary file. + */ + suspend fun downloadDictionary(fileInfo: FileInfo, onProgress: (Float) -> Unit = {}): Boolean { + try { + val success = fileDownloadManager.downloadFile(fileInfo, onProgress) + if (success) { + loadDownloadedDictionaries() + } + return success + } catch (e: Exception) { + Log.e("DictionaryFileRepository", "Error downloading dictionary", e) + throw e + } + } + + /** + * Checks if a newer version is available for a dictionary. + */ + fun isNewerVersionAvailable(fileInfo: FileInfo): Boolean { + return fileDownloadManager.isNewerVersionAvailable(fileInfo) + } + + /** + * Gets the local version of a dictionary. + */ + fun getLocalVersion(fileId: String): String { + return fileDownloadManager.getLocalVersion(fileId) + } + + /** + * Deletes all assets of a downloaded dictionary. + */ + @Suppress("SameReturnValue", "SameReturnValue") + fun deleteDictionary(fileInfo: FileInfo): Boolean { + try { + var allDeleted = true + val failedFiles = mutableListOf() + + for (asset in fileInfo.assets) { + val localFile = File(context.filesDir, asset.filename) + if (localFile.exists()) { + val deleted = localFile.delete() + if (!deleted) { + allDeleted = false + failedFiles.add(asset.filename) + Log.e("DictionaryFileRepository", "Failed to delete asset: ${asset.filename}") + } else { + Log.d("DictionaryFileRepository", "Deleted asset: ${asset.filename}") + } + } else { + Log.w("DictionaryFileRepository", "Asset file not found: ${asset.filename}") + } + } + + if (allDeleted) { + // Remove version from SharedPreferences + val sharedPreferences = context.getSharedPreferences("file_versions", Context.MODE_PRIVATE) + sharedPreferences.edit { remove(fileInfo.id) } + loadDownloadedDictionaries() + Log.d("DictionaryFileRepository", "Deleted all assets for dictionary: ${fileInfo.name}") + } else { + throw Exception("Failed to delete some assets: ${failedFiles.joinToString(", ")}") + } + + return true + } catch (e: Exception) { + Log.e("DictionaryFileRepository", "Error deleting dictionary", e) + throw e + } + } + + /** + * Deletes all downloaded dictionary files and their assets. + */ + @Suppress("SameReturnValue") + fun deleteAllDictionaries(): Boolean { + try { + val filesDir = context.filesDir + // Find all dictionary-related files (.db and .zstdict) + val dictionaryFiles = filesDir.listFiles { file -> + file.isFile && ( + file.name.endsWith(".db") || + file.name.endsWith(".zstdict") || + file.name.startsWith("dictionary") + ) && !file.name.endsWith(".db-wal") && + !file.name.endsWith(".db-shm") + } + + if (dictionaryFiles.isNullOrEmpty()) { + Log.d("DictionaryFileRepository", "No dictionary files found to delete") + return true + } + + var allDeleted = true + val failedFiles = mutableListOf() + + dictionaryFiles.forEach { file -> + val deleted = file.delete() + if (!deleted) { + allDeleted = false + failedFiles.add(file.name) + Log.e("DictionaryFileRepository", "Failed to delete file: ${file.name}") + } + } + + if (allDeleted) { + // Clear all versions from SharedPreferences + val sharedPreferences = context.getSharedPreferences("file_versions", Context.MODE_PRIVATE) + sharedPreferences.edit { clear() } + loadDownloadedDictionaries() + Log.d("DictionaryFileRepository", "Deleted all dictionary files") + } else { + throw Exception("Failed to delete some files: ${failedFiles.joinToString(", ")}") + } + + return true + } catch (e: Exception) { + Log.e("DictionaryFileRepository", "Error deleting all dictionaries", e) + throw e + } + } + + /** + * Deletes an orphaned file. + */ + fun deleteOrphanedFile(fileInfo: FileInfo): Boolean { + try { + // For orphaned files, we only have one asset (the .db file) + val asset = fileInfo.assets.firstOrNull() + ?: throw Exception("No asset found for orphaned file: ${fileInfo.id}") + + val localFile = File(context.filesDir, asset.filename) + if (!localFile.exists()) { + throw Exception("Orphaned file not found: ${asset.filename}") + } + + val deleted = localFile.delete() + if (deleted) { + loadDownloadedDictionaries() + Log.d("DictionaryFileRepository", "Deleted orphaned file: ${asset.filename}") + } else { + throw Exception("Failed to delete orphaned file: ${asset.filename}") + } + + return true + } catch (e: Exception) { + Log.e("DictionaryFileRepository", "Error deleting orphaned file", e) + return false + } + } + + /** + * Gets the total size of all assets for a downloaded dictionary. + */ + fun getDictionarySize(fileInfo: FileInfo): Long { + return fileInfo.assets.sumOf { asset -> + val localFile = File(context.filesDir, asset.filename) + if (localFile.exists()) localFile.length() else 0L + } + } + + /** + * Loads the list of downloaded dictionaries and orphaned files based on local files. + */ + private fun loadDownloadedDictionaries() { + val filesDir = context.filesDir + val allDictionaryFiles = filesDir.listFiles { file -> + file.isFile && ( + file.name.endsWith(".db") || + file.name.endsWith(".zstdict") || + file.name.endsWith(".db.corrupt") || + file.name.startsWith("dictionary") + ) && + !file.name.endsWith(".db-wal") && + !file.name.endsWith(".db-shm") + + } ?: emptyArray() + + val manifestFiles = _manifest.value?.files ?: emptyList() + + // Find downloaded dictionaries (files where all assets exist locally) + val downloadedFiles = manifestFiles.filter { fileInfo -> + fileInfo.assets.all { asset -> + File(context.filesDir, asset.filename).exists() + } + } + + // Collect all asset filenames from downloaded dictionaries + val downloadedAssetFilenames = downloadedFiles.flatMap { it.assets }.map { it.filename }.toSet() + + // Find orphaned files (dictionary files that are not assets of any downloaded dictionary) + val orphanedFiles = allDictionaryFiles + .filter { file -> file.name !in downloadedAssetFilenames } + .map { file -> + // Create a FileInfo for orphaned files with minimal data + FileInfo( + id = "orphaned_${file.name}", + name = context.getString(R.string.label_unknown_dictionary_d, file.name), + description = context.getString(R.string.text_orphaned_file_description), + version = context.getString(R.string.label_unknown), + assets = listOf( + Asset( + filename = file.name, + sizeBytes = file.length(), + checksumSha256 = context.getString(R.string.label_unknown), + ) + ) + ) + } + .toList() + + _downloadedDictionaries.value = downloadedFiles + _orphanedFiles.value = orphanedFiles + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryJsonService.kt b/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryJsonService.kt new file mode 100644 index 0000000..52afac0 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryJsonService.kt @@ -0,0 +1,188 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.repository + +import eu.gaudian.translator.model.grammar.DictionaryEntryData +import eu.gaudian.translator.model.grammar.DictionaryJsonParser +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +import javax.inject.Inject + +/** + * Service layer for accessing parsed dictionary JSON data. + * + * This service provides a clean interface between the repository layer + * and the JSON parsing logic, making it easy to use structured dictionary + * data throughout the application. + * + * The service handles caching and error handling, ensuring that + * UI components and other parts of the app can safely access + * parsed dictionary data without worrying about JSON parsing details. + */ +class DictionaryJsonService @Inject constructor() { + + private val parseCache = mutableMapOf() + @Suppress("PrivatePropertyName") + private val TAG = "DictionaryJsonService" + + /** + * Parse a dictionary entry's JSON data into a structured format. + * + * @param entry The dictionary entry from the local database + * @return Structured dictionary data or null if parsing fails + */ + suspend fun parseEntry(entry: DictionaryWordEntry): DictionaryEntryData? { + return withContext(Dispatchers.IO) { + // Check cache first + parseCache[entry.json]?.let { return@withContext it } + + try { + val parsed = DictionaryJsonParser.parseJson(entry.json) + parseCache[entry.json] = parsed + parsed + } catch (e: Exception) { + Log.e(TAG, "Failed to parse dictionary entry for '${entry.word}': ${e.message}", e) + parseCache[entry.json] = null + null + } + } + } + + /** + * Parse multiple dictionary entries efficiently. + * + * @param entries List of dictionary entries to parse + * @return Map of entry word to parsed data (null for failed parses) + */ + suspend fun parseEntries(entries: List): Map { + return withContext(Dispatchers.IO) { + entries.associate { entry -> + entry.word to parseEntry(entry) + } + } + } + + /** + * Get translations for a specific dictionary entry. + * + * @param entry The dictionary entry + * @return List of translations or empty list if parsing fails + */ + suspend fun getTranslations(entry: DictionaryWordEntry) = + parseEntry(entry)?.translations ?: emptyList() + + /** + * Get synonyms for a specific dictionary entry. + * + * @param entry The dictionary entry + * @return List of synonyms or empty list if parsing fails + */ + suspend fun getSynonyms(entry: DictionaryWordEntry) = + parseEntry(entry)?.synonyms ?: emptyList() + + /** + * Get hyponyms for a specific dictionary entry. + * + * @param entry The dictionary entry + * @return List of hyponyms or empty list if parsing fails + */ + suspend fun getHyponyms(entry: DictionaryWordEntry) = + parseEntry(entry)?.hyponyms ?: emptyList() + + /** + * Get all related words for a specific dictionary entry. + * + * @param entry The dictionary entry + * @return List of all related words or empty list if parsing fails + */ + suspend fun getAllRelatedWords(entry: DictionaryWordEntry) = + parseEntry(entry)?.allRelatedWords ?: emptyList() + + suspend fun getPhonetics(entry: DictionaryWordEntry): List = + parseEntry(entry)?.phonetics?.ipa ?: emptyList() + + /** + * Get hyphenation data for a specific dictionary entry. + * + * @param entry The dictionary entry + * @return List of hyphenation parts or empty list if parsing fails + */ + suspend fun getHyphenation(entry: DictionaryWordEntry) = + parseEntry(entry)?.hyphenation ?: emptyList() + + /** + * Get etymology data for a specific dictionary entry. + * + * @param entry The dictionary entry + * @return Etymology data or empty data if parsing fails + */ + suspend fun getEtymology(entry: DictionaryWordEntry) = + parseEntry(entry)?.etymology ?: eu.gaudian.translator.model.grammar.EtymologyData(emptyList()) + + /** + * Get senses/definitions for a specific dictionary entry. + * + * @param entry The dictionary entry + * @return List of senses or empty list if parsing fails + */ + suspend fun getSenses(entry: DictionaryWordEntry) = + parseEntry(entry)?.senses ?: emptyList() + + /** + * Get grammatical properties for a specific dictionary entry. + * + * @param entry The dictionary entry + * @return Grammatical properties or null if parsing fails + */ + suspend fun getGrammaticalProperties(entry: DictionaryWordEntry) = + parseEntry(entry)?.grammaticalProperties + + /** + * Get pronunciation data for a specific dictionary entry. + * + * @param entry The dictionary entry + * @return List of pronunciation data or empty list if parsing fails + */ + suspend fun getPronunciation(entry: DictionaryWordEntry) = + parseEntry(entry)?.pronunciation ?: emptyList() + + + + /** + * Get inflection data for a specific dictionary entry. + * + * @param entry The dictionary entry + * @return List of inflection data or empty list if parsing fails + */ + suspend fun getInflections(entry: DictionaryWordEntry) = + parseEntry(entry)?.inflections ?: emptyList() + + /** + * Clear the internal cache. Useful for testing or when memory is constrained. + */ + fun clearCache() { + parseCache.clear() + } + + /** + * Get cache statistics for debugging purposes. + */ + fun getCacheStats(): CacheStats { + return CacheStats( + totalEntries = parseCache.size, + successfulParses = parseCache.values.count { it != null }, + failedParses = parseCache.values.count { it == null } + ) + } +} + +/** + * Cache statistics for debugging and monitoring. + */ +data class CacheStats( + val totalEntries: Int, + val successfulParses: Int, + val failedParses: Int +) diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryLookupRepository.kt b/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryLookupRepository.kt new file mode 100644 index 0000000..6805da3 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryLookupRepository.kt @@ -0,0 +1,334 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.repository + +import android.content.Context +import com.github.luben.zstd.Zstd +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import eu.gaudian.translator.model.communication.Asset +import eu.gaudian.translator.model.communication.FileInfo +import eu.gaudian.translator.utils.Log +import java.io.File +import java.io.IOException +import java.text.Normalizer + +/** + * Data class representing a dictionary word entry with parsed fields where possible. + */ +data class DictionaryWordEntry( + val word: String, + val langCode: String, + val pos: String?, + val json: String +) + +/** + * Repository for performing dictionary lookups using the DictionaryDatabaseRepository. + * Handles specific dictionary files named "dictionary_.db". + */ +class DictionaryLookupRepository(private val context: Context) { + + private val databaseRepository = DictionaryDatabaseRepository(context) + private val gson = Gson() + @Suppress("PrivatePropertyName") + private val TAG = "DictionaryLookupRepository" + private val dictionaryCache = mutableMapOf() + + /** + * Developer helper: returns a list of ALL words in the local dictionary for a language. + * This can be large and is intended for debugging / cycling through entries only. + */ + @Suppress("HardCodedStringLiteral") + fun getAllWords(langCode: String, limit: Int = 10_000, offset: Int = 0): List { + if (!hasDictionaryForLanguage(langCode)) { + Log.w(TAG, "No dictionary available for language: $langCode") + return emptyList() + } + + val dbFilename = "dictionary_$langCode.db" + val dictFilename = "dictionary_$langCode.zstdict" + val fileInfo = FileInfo( + id = "dictionary_$langCode", + name = "Dictionary for $langCode", + description = "", + version = "", + assets = listOf( + Asset(filename = dbFilename, sizeBytes = 0L, checksumSha256 = ""), + Asset(filename = dictFilename, sizeBytes = 0L, checksumSha256 = "") + ) + ) + + val db = databaseRepository.getDatabase(fileInfo) ?: return emptyList() + val sql = "SELECT word FROM dictionary_data ORDER BY word LIMIT ? OFFSET ?" + Log.d(TAG, "Developer getAllWords for '$langCode' with limit=$limit, offset=$offset") + return try { + db.rawQuery(sql, arrayOf(limit.toString(), offset.toString())).use { cursor -> + val words = mutableListOf() + val wordIndex = cursor.getColumnIndex("word") + while (cursor.moveToNext()) { + val wordValue = cursor.getString(wordIndex) + if (!wordValue.isNullOrBlank()) { + words.add(wordValue) + } + } + Log.d(TAG, "Developer getAllWords fetched ${words.size} words") + words + } + } catch (e: Exception) { + Log.e(TAG, "Developer getAllWords failed for lang '$langCode': ${e.message}", e) + emptyList() + }.also { db.close() } + } + + /** + * Checks if a dictionary file exists for the given language code. + * Language codes are the first part in languages.xml strings, e.g., "de" for German. + */ + fun hasDictionaryForLanguage(langCode: String): Boolean { + val filename = "dictionary_$langCode.db" + val exists = File(context.filesDir, filename).exists() + return exists + } + + /** + * Checks if a specific word exists in the dictionary for the given language code. + * This performs an actual lookup to verify the word is available, not just that + * the dictionary file exists. + */ + fun hasWordInDictionary(word: String, langCode: String): Boolean { + if (!hasDictionaryForLanguage(langCode)) { + return false + } + + val dbFilename = "dictionary_$langCode.db" + val dictFilename = "dictionary_$langCode.zstdict" + val fileInfo = FileInfo( + id = "dictionary_$langCode", + name = "Dictionary for $langCode", + description = "", + version = "", + assets = listOf( + Asset(filename = dbFilename, sizeBytes = 0L, checksumSha256 = ""), + Asset(filename = dictFilename, sizeBytes = 0L, checksumSha256 = "") + ) + ) + + val db = databaseRepository.getDatabase(fileInfo) ?: return false + val sql = "SELECT 1 FROM dictionary_data WHERE word = ? COLLATE NOCASE LIMIT 1" + + return try { + db.rawQuery(sql, arrayOf(word)).use { cursor -> + val found = cursor.moveToFirst() + found + } + } catch (e: Exception) { + Log.e(TAG, "Failed to check word '$word' in dictionary '$langCode': ${e.message}", e) + false + }.also { db.close() } + } + + /** + * Searches for words in the dictionary for the specified language code. + * Returns a list of DictionaryWordEntry matching the exact word. + * Uses case-insensitive exact match on the word column. + */ + @Suppress("HardCodedStringLiteral") + fun searchWord(word: String, langCode: String): List { + if (!hasDictionaryForLanguage(langCode)) { + Log.w(TAG, "No dictionary available for language: $langCode") + return emptyList() + } + + val dbFilename = "dictionary_$langCode.db" + val dictFilename = "dictionary_$langCode.zstdict" + val fileInfo = FileInfo( + id = "dictionary_$langCode", + name = "Dictionary for $langCode", + description = "", + version = "", + assets = listOf( + Asset(filename = dbFilename, sizeBytes = 0L, checksumSha256 = ""), + Asset(filename = dictFilename, sizeBytes = 0L, checksumSha256 = "") + ) + ) + + val db = databaseRepository.getDatabase(fileInfo) ?: return emptyList() + val sql = "SELECT word, pos, data_blob, uncompressed_size FROM dictionary_data WHERE word = ? COLLATE NOCASE LIMIT 100" + //Log.d(TAG, "Attempting query for exact word match '$word': $sql") + return try { + db.rawQuery(sql, arrayOf(word)).use { cursor -> + val entries = mutableListOf() + val wordIndex = cursor.getColumnIndex("word") + val posIndex = cursor.getColumnIndex("pos") + val blobIndex = cursor.getColumnIndex("data_blob") + val sizeIndex = cursor.getColumnIndex("uncompressed_size") + + if(cursor.count != 1){ + Log.d(TAG, "Cursor has ${cursor.count} rows")} + while (cursor.moveToNext()) { + val wordValue = cursor.getString(wordIndex) + val posValue = if (posIndex >= 0) cursor.getString(posIndex) else null + val blob = cursor.getBlob(blobIndex) + val uncompressedSize = cursor.getInt(sizeIndex) + + // Decompress the blob to get the JSON data + val dict = getDecompressionDict(langCode) + val jsonData = if (dict != null && blob != null) { + try { + String(Zstd.decompress(blob, dict, uncompressedSize)) + } catch (e: Exception) { + Log.e(TAG, "Failed to decompress data for word '$word'", e) + "" + } + } else { + "" + } + + val entry = DictionaryWordEntry( + word = wordValue, + langCode = langCode, + pos = posValue, + json = jsonData + ) + entries.add(entry) + } + if(entries.size != 1){ + Log.d(TAG, "Processed ${entries.size} results")} + entries + } + } catch (e: Exception) { + Log.e(TAG, "Query failed for word '$word' in dictionary '$langCode': ${e.message}", e) + Log.d(TAG, "Attemped query for exact word match '$word': $sql") + emptyList() + }.also { db.close() } + } + + /** + * Parses JSON string into a list of strings, or null if parsing fails. + */ + @Suppress("unused") + private fun parseJsonList(json: String?): List? { + return json?.let { + try { + gson.fromJson(it, object : TypeToken>() {}.type) + } catch (e: Exception) { + @Suppress("HardCodedStringLiteral") + Log.w(TAG, "Failed to parse JSON list: $json", e) + null + } + } + } + + /** + * Retrieves word suggestions based on prefix match. + * The match is accent-insensitive, so e.g. "haufig" will still suggest "häufig". + */ + fun getSuggestions(prefix: String, langCode: String, limit: Int): List { + if (!hasDictionaryForLanguage(langCode)) { + return emptyList() + } + + // Normalize the prefix: lowercase and strip diacritics (accents) + val normalizedPrefix = prefix.trim().lowercase().removeDiacritics() + if (normalizedPrefix.isEmpty()) { + return emptyList() + } + + val dbFilename = "dictionary_$langCode.db" + val dictFilename = "dictionary_$langCode.zstdict" + @Suppress("HardCodedStringLiteral") val fileInfo = FileInfo( + id = "dictionary_$langCode", + name = "Dictionary for $langCode", + description = "", + version = "", + assets = listOf( + Asset(filename = dbFilename, sizeBytes = 0L, checksumSha256 = ""), + Asset(filename = dictFilename, sizeBytes = 0L, checksumSha256 = "") + ) + ) + + val db = databaseRepository.getDatabase(fileInfo) ?: return emptyList() + + // To support accent-insensitive matching, query a broader set of candidates + // (all words starting with the same first base letter), then filter in Kotlin. + val broadPrefix = normalizedPrefix[0].toString() + val sql = "SELECT word FROM dictionary_fts WHERE word MATCH ? LIMIT ?" + val matchQuery = "$broadPrefix*" + + return try { + db.rawQuery(sql, arrayOf(matchQuery, (limit * 20).toString())).use { cursor -> + val suggestions = mutableListOf() + val wordIndex = cursor.getColumnIndex("word") + while (cursor.moveToNext()) { + val word = cursor.getString(wordIndex) + if (!word.isNullOrBlank()) { + suggestions.add(word) + } + } + + suggestions + .distinct() // Remove duplicates + .filter { candidate -> + val candidateNorm = candidate.lowercase().removeDiacritics() + candidateNorm.startsWith(normalizedPrefix) + } + .take(limit) + } + } catch (e: Exception) { + Log.e(TAG, "Suggestion query failed: ${e.message}", e) + emptyList() + }.also { db.close() } + } + + /** + * Parses translations JSON into a map of language code to list of translations, or null if parsing fails. + */ + @Suppress("unused") + private fun parseTranslationsJson(json: String?): Map>? { + return json?.let { + try { + gson.fromJson(it, object : TypeToken>>() {}.type) + } catch (e: Exception) { + @Suppress("HardCodedStringLiteral") + Log.w(TAG, "Failed to parse translations JSON: $json", e) + null + } + } + } + + /** + * Gets a cached decompression dictionary for the given language, creating it if necessary. + */ + private fun getDecompressionDict(langCode: String): ByteArray? { + // Return the cached dictionary if it's already loaded + if (dictionaryCache.containsKey(langCode)) { + return dictionaryCache[langCode] + } + + return try { + val dictFileName = "dictionary_${langCode}.zstdict" + Log.d(TAG, "Loading compression dictionary: $dictFileName") + + // Read the dictionary file from filesDir (consistent with database location) + val dictFile = File(context.filesDir, dictFileName) + if (dictFile.exists()) { + val dictBytes = dictFile.readBytes() + // Cache the dictionary bytes for later use + dictionaryCache[langCode] = dictBytes + dictBytes + } else { + Log.e(TAG, "Zstd dictionary file does not exist: $dictFileName") + null + } + } catch (e: IOException) { + Log.e(TAG, "Failed to load Zstd dictionary file for lang '$langCode'", e) + null + } + } +} + +private fun String.removeDiacritics(): String { + val normalized = Normalizer.normalize(this, Normalizer.Form.NFD) + return normalized.replace("\\p{Mn}+".toRegex(), "") +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryRepository.kt b/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryRepository.kt new file mode 100644 index 0000000..85dffe0 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/DictionaryRepository.kt @@ -0,0 +1,89 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.repository + +import android.content.Context +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.stringPreferencesKey +import eu.gaudian.translator.model.DictionaryEntry +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import kotlinx.serialization.SerializationException + +class DictionaryRepository(private val context: Context) { + + companion object { + private val DICTIONARY_ENTRY_KEY = stringPreferencesKey("dictionary_entry") + private val WORD_OF_THE_DAY_KEY = stringPreferencesKey("word_of_the_day") + } + + init { + CoroutineScope(context = Dispatchers.IO).launch { + } + } + + suspend fun saveDictionaryEntry(entry: DictionaryEntry) { + val history = loadDictionaryEntry().first().toMutableList() + history.removeAll { it.word.equals(entry.word, ignoreCase = true) && it.languageCode == entry.languageCode } + history.add(0, entry) + val updatedHistory = history.take(20) + context.dataStore.saveObjectList(DICTIONARY_ENTRY_KEY, updatedHistory) + } + + + fun loadDictionaryEntry(): Flow> { + return context.dataStore.loadObjectList(DICTIONARY_ENTRY_KEY) + .catch { exception -> + if (exception is SerializationException) { + Log.w("DictionaryRepo", "Could not parse old dictionary history. Clearing it.", exception) + clearHistory() + emit(emptyList()) + } else { + throw exception + } + } + } + + suspend fun updateDictionaryEntry(entry: DictionaryEntry) { + val history = loadDictionaryEntry().first().toMutableList() + val index = history.indexOfFirst { it.id == entry.id } + + if (index != -1) { + history[index] = entry + context.dataStore.saveObjectList(DICTIONARY_ENTRY_KEY, history) + Log.d("DictionaryRepo", "Entry with id ${entry.id} updated.") + } else { + Log.w("DictionaryRepo", "Attempted to update non-existent entry with id ${entry.id}.") + } + } + + suspend fun clearHistory() { + context.dataStore.saveObjectList(DICTIONARY_ENTRY_KEY, emptyList()) + } + + suspend fun saveWordOfTheDay(entry: DictionaryEntry) { + context.dataStore.saveObject(WORD_OF_THE_DAY_KEY, entry) + } + + + fun loadWordOfTheDay(): Flow { + return context.dataStore.loadObject(WORD_OF_THE_DAY_KEY) + .catch { exception -> + if (exception is SerializationException) { + Log.w("DictionaryRepo", "Could not parse old Word of the Day. Clearing it.", exception) + context.dataStore.edit { preferences -> + preferences.remove(WORD_OF_THE_DAY_KEY) + } + emit(null) + } else { + throw exception + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/ExerciseRepository.kt b/app/src/main/java/eu/gaudian/translator/model/repository/ExerciseRepository.kt new file mode 100644 index 0000000..59f2530 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/ExerciseRepository.kt @@ -0,0 +1,96 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.repository + +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import eu.gaudian.translator.model.Exercise +import eu.gaudian.translator.model.Question +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.firstOrNull + +private const val TAG = "ExerciseRepository" + +class ExerciseRepository { + + constructor(context: Context) { + this.dataStore = context.dataStore + } + + private val dataStore: DataStore + + + fun getAllExercisesFlow(): Flow> { + return dataStore.loadObjectList(DataStoreKeys.EXERCISES_KEY) + } + + private suspend fun getAllExercises(): List { + return getAllExercisesFlow().firstOrNull() ?: emptyList() + } + + suspend fun saveExercise(exercise: Exercise) { + try { + val currentExercises = getAllExercises().toMutableList() + val existingIndex = currentExercises.indexOfFirst { it.id == exercise.id } + + if (existingIndex != -1) { + currentExercises[existingIndex] = exercise + } else { + currentExercises.add(exercise) + } + dataStore.saveObjectList(DataStoreKeys.EXERCISES_KEY, currentExercises) + } catch (e: Exception) { + Log.e(TAG, "Failed to save exercise", e) + } + } + + suspend fun deleteExercise(exerciseId: String) { + try { + val currentExercises = getAllExercises().toMutableList() + if (currentExercises.removeAll { it.id == exerciseId }) { + dataStore.saveObjectList(DataStoreKeys.EXERCISES_KEY, currentExercises) + Log.d(TAG, "Successfully deleted exercise with ID: $exerciseId") + } + } catch (e: Exception) { + Log.e(TAG, "Failed to delete exercise with ID: $exerciseId", e) + } + } + + + + fun getAllQuestionsFlow(): Flow> { + return dataStore.loadObjectList(DataStoreKeys.QUESTIONS_KEY) + } + + private suspend fun getAllQuestions(): List { + return getAllQuestionsFlow().firstOrNull() ?: emptyList() + } + + /** + * Saves a list of questions to the DataStore, replacing any existing ones with the same ID. + */ + private suspend fun saveQuestions(questions: List) { + try { + val currentQuestions = getAllQuestions().toMutableList() + questions.forEach { newQuestion -> + val index = currentQuestions.indexOfFirst { it.id == newQuestion.id } + if (index != -1) { + currentQuestions[index] = newQuestion + } else { + currentQuestions.add(newQuestion) + } + } + dataStore.saveObjectList(DataStoreKeys.QUESTIONS_KEY, currentQuestions) + } catch (e: Exception) { + Log.e(TAG, "Failed to save questions", e) + } + } + + suspend fun saveNewExerciseWithQuestions(exercise: Exercise, questions: List) { + saveQuestions(questions) + saveExercise(exercise) + Log.d(TAG, "Successfully saved new exercise '${exercise.title}' with ${questions.size} questions.") + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/LanguageRepository.kt b/app/src/main/java/eu/gaudian/translator/model/repository/LanguageRepository.kt new file mode 100644 index 0000000..f4dfbb5 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/LanguageRepository.kt @@ -0,0 +1,367 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.repository + +import android.content.Context +import android.content.pm.PackageManager +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.parseLanguagesFromResources +import eu.gaudian.translator.model.repository.DataStoreKeys.LANGUAGE_INIT_METADATA_KEY +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.firstOrNull + +enum class LanguageListType { + DEFAULT, + CUSTOM, + ALL, + FAVORITE, + HISTORY +} + +class LanguageRepository(private val context: Context) { + + private val dataStore = context.dataStore + + private fun getKeyForType(type: LanguageListType) = when (type) { + // Note: For ALL we will now store only the enabled language IDs (Int) instead of full Language objects + LanguageListType.ALL -> DataStoreKeys.ALL_LANGUAGES_KEY + LanguageListType.DEFAULT -> DataStoreKeys.DEFAULT_LANGUAGES_KEY + LanguageListType.CUSTOM -> DataStoreKeys.CUSTOM_LANGUAGES_KEY + LanguageListType.FAVORITE -> DataStoreKeys.FAVORITE_LANGUAGES_KEY + LanguageListType.HISTORY -> DataStoreKeys.LANGUAGE_HISTORY_KEY + } + + // Returns a flow of the master catalog = DEFAULT + CUSTOM with conflict disambiguation applied + private fun masterLanguagesFlow(): Flow> { + return kotlinx.coroutines.flow.combine( + loadLanguages(LanguageListType.DEFAULT), + loadLanguages(LanguageListType.CUSTOM) + ) { defaults, customs -> + val master = (defaults + customs) + disambiguateConflictingNames(master) + } + } + + // Suffix region codes for languages with duplicate names within the provided list + private fun disambiguateConflictingNames(list: List): List { + if (list.isEmpty()) return list + // Define a regex that matches a trailing region suffix we add, e.g. " (DE)" or " (PT)" + val suffixRegex = " \\([A-Z]{2,}\\)$".toRegex() + + // Compute base names by stripping any existing suffix first + val baseNames = list.associate { lang -> + lang.name to lang.name.replace(suffixRegex, "") + } + // Count occurrences by base name + val countsByBase = list + .map { baseNames[it.name] ?: it.name } + .groupingBy { it } + .eachCount() + + // Map each language to a display name based on base name conflict + return list.map { lang -> + val base = baseNames[lang.name] ?: lang.name + val count = countsByBase[base] ?: 0 + if (count > 1 && lang.region.isNotEmpty()) { + val suffix = lang.region.uppercase() + // Always construct from base to prevent duplicate/chained suffixes + lang.copy(name = "$base ($suffix)") + } else { + // No conflict: ensure we show the clean base + lang.copy(name = base) + } + } + } + + suspend fun wipeHistoryAndFavorites() { + clearLanguages(LanguageListType.HISTORY) + clearLanguages(LanguageListType.FAVORITE) + saveSelectedSourceLanguage(null) + saveSelectedTargetLanguage(null) + } + + suspend fun initializeDefaultLanguages() { + Log.d("LanguageRepository", "Initializing default languages") + try { + // Check if we already have default languages saved + val savedDefaultLanguages = loadLanguages(LanguageListType.DEFAULT).firstOrNull() ?: emptyList() + + // Check if we need to re-parse languages (first run, version change, or language change) + val shouldReparse = shouldReparseLanguages(savedDefaultLanguages) + + if (shouldReparse) { + Log.d("LanguageRepository", "Parsing languages from resources") + val parsedLanguages = parseLanguagesFromResources(context) + wipeHistoryAndFavorites() + saveLanguages(LanguageListType.DEFAULT, parsedLanguages) + // Save the current app version and locale to detect changes next time + saveLanguageInitializationMetadata() + } else { + Log.d("LanguageRepository", "Using cached default languages") + } + } catch (e: Exception) { + Log.e("LanguageRepository", "Error initializing default languages: ${e.message}", e) + } + } + + private suspend fun shouldReparseLanguages(savedLanguages: List): Boolean { + // Always reparse if no languages are saved + if (savedLanguages.isEmpty()) { + return true + } + + // Check if the number of languages matches expected count (51) + if (savedLanguages.size != 51) { + return true + } + + // Check if app version has changed (indicating possible new languages) + val metadata = getLanguageInitializationMetadata() + val currentVersion = try { + context.packageManager.getPackageInfo(context.packageName, 0).versionName + } catch (_: PackageManager.NameNotFoundException) { + // If we can't get the package info, assume version changed to trigger reparse + return true + } + if (metadata?.appVersion != currentVersion) { + return true + } + + // Check if system locale has changed (affecting localized language names) + val currentLocale = context.resources.configuration.locales.get(0)?.toLanguageTag() + return metadata?.systemLocale != currentLocale + } + + private suspend fun saveLanguageInitializationMetadata() { + val currentVersion = try { + context.packageManager.getPackageInfo(context.packageName, 0).versionName + } catch (_: PackageManager.NameNotFoundException) { + // If we can't get the package info, use a default value + "unknown" + } + val currentLocale = context.resources.configuration.locales.get(0)?.toLanguageTag() ?: "" + + val metadata = LanguageInitializationMetadata( + appVersion = currentVersion, + systemLocale = currentLocale, + timestamp = System.currentTimeMillis() + ) + + dataStore.saveObject(LANGUAGE_INIT_METADATA_KEY, metadata) + } + + private suspend fun getLanguageInitializationMetadata(): LanguageInitializationMetadata? { + return try { + dataStore.loadObject(LANGUAGE_INIT_METADATA_KEY).firstOrNull() + } catch (_: Exception) { + null + } + } + + suspend fun initializeAllLanguages() { + Log.d("LanguageRepository", "Initializing enabled languages (ALL as IDs)") + try { + val defaultLanguages = loadLanguages(LanguageListType.DEFAULT).first() + val customLanguages = loadLanguages(LanguageListType.CUSTOM).first() + val master = (defaultLanguages + customLanguages).distinctBy { it.nameResId } + + // Sanitize existing enabled IDs and initialize if empty + val existingEnabled: List = try { + context.dataStore.loadObjectList(DataStoreKeys.ALL_LANGUAGES_KEY).firstOrNull() ?: emptyList() + } catch (_: Exception) { + emptyList() + } + val masterIds = master.map { it.nameResId }.toSet() + val sanitized = existingEnabled.filter { it in masterIds } + val finalIds = sanitized.ifEmpty { master.filter { it.isSelected == true }.map { it.nameResId } } + + context.dataStore.saveObjectList(DataStoreKeys.ALL_LANGUAGES_KEY, finalIds) + + val historyLanguages = loadLanguages(LanguageListType.HISTORY).firstOrNull() ?: emptyList() + if (historyLanguages.size > 5) { + saveLanguages(LanguageListType.HISTORY, historyLanguages.takeLast(5)) + } + } catch (e: Exception) { + Log.e("LanguageRepository", "Error initializing enabled languages: ${e.message}", e) + } + } + + suspend fun getLanguagesByResourceIds(ids: Set): List { + val master = masterLanguagesFlow().first() + return master.filter { it.nameResId in ids } + } + + fun loadMasterLanguages(): Flow> = masterLanguagesFlow() + + suspend fun setEnabledLanguagesByIds(ids: List) { + dataStore.saveObjectList(DataStoreKeys.ALL_LANGUAGES_KEY, ids) + } + + suspend fun editCustomLanguage(languageId: Int, newName: String?, newCode: String, newRegion: String) { + // Update in DEFAULT or CUSTOM by id (nameResId) + val defaults = loadLanguages(LanguageListType.DEFAULT).first().toMutableList() + val customs = loadLanguages(LanguageListType.CUSTOM).first().toMutableList() + var updated = false + for (i in defaults.indices) { + if (defaults[i].nameResId == languageId) { + val l = defaults[i] + // Default languages: do not change name + defaults[i] = l.copy(code = newCode, region = newRegion) + updated = true + break + } + } + if (!updated) { + for (i in customs.indices) { + if (customs[i].nameResId == languageId) { + val l = customs[i] + // Custom languages: allow name editing if provided + val targetName = newName ?: l.name + // Prevent exact duplicates by name+region+code with other customs + val duplicate = customs.withIndex().any { (idx, other) -> + idx != i && other.name.equals(targetName, true) && other.region.equals(newRegion, true) && other.code.equals(newCode, true) + } + if (!duplicate) { + customs[i] = l.copy(name = targetName, code = newCode, region = newRegion) + updated = true + } else { + Log.w("LanguageRepository", "Skipping update to avoid duplicate custom language") + } + break + } + } + } + if (updated) { + saveLanguages(LanguageListType.DEFAULT, defaults) + saveLanguages(LanguageListType.CUSTOM, customs) + // Update selected languages if necessary + val src = loadSelectedSourceLanguage().first() + if (src?.nameResId == languageId) saveSelectedSourceLanguage(src.copy(name = newName ?: src.name, code = newCode, region = newRegion)) + val tgt = loadSelectedTargetLanguage().first() + if (tgt?.nameResId == languageId) saveSelectedTargetLanguage(tgt.copy(name = newName ?: tgt.name, code = newCode, region = newRegion)) + val dict = loadSelectedDictionaryLanguage().first() + if (dict?.nameResId == languageId) saveSelectedDictionaryLanguage(dict.copy(name = newName ?: dict.name, code = newCode, region = newRegion)) + initializeAllLanguages() + } + } + + fun loadLanguages(type: LanguageListType): Flow> { + return when (type) { + LanguageListType.ALL -> { + // Enabled languages (IDs) mapped to actual Language objects from master catalog + kotlinx.coroutines.flow.combine( + dataStore.loadObjectList(getKeyForType(type)), + masterLanguagesFlow() + ) { ids, master -> + val idSet = ids.toSet() + disambiguateConflictingNames(master.filter { it.nameResId in idSet }) + } + } + LanguageListType.FAVORITE, LanguageListType.HISTORY -> { + // Internally store only the language keys (nameResId) to avoid duplicate Language instances + kotlinx.coroutines.flow.combine( + dataStore.loadObjectList(getKeyForType(type)), + masterLanguagesFlow() + ) { ids, master -> + val idSet = ids.toSet() + master.filter { it.nameResId in idSet } + } + } + else -> dataStore.loadObjectList(getKeyForType(type)) + } + } + + suspend fun saveLanguages(type: LanguageListType, languages: List) { + when (type) { + LanguageListType.ALL, LanguageListType.FAVORITE, LanguageListType.HISTORY -> { + val ids = languages.map { it.nameResId } + dataStore.saveObjectList(getKeyForType(type), ids) + } + else -> dataStore.saveObjectList(getKeyForType(type), languages) + } + } + + suspend fun clearLanguages(type: LanguageListType) { + dataStore.clear(getKeyForType(type)) + } + + fun loadSelectedSourceLanguage(): Flow { + return dataStore.loadObject(DataStoreKeys.SELECTED_SOURCE_LANGUAGE_KEY) + } + + suspend fun saveSelectedSourceLanguage(language: Language?) { + dataStore.saveObject(DataStoreKeys.SELECTED_SOURCE_LANGUAGE_KEY, language) + } + + fun loadSelectedTargetLanguage(): Flow { + return dataStore.loadObject(DataStoreKeys.SELECTED_TARGET_LANGUAGE_KEY) + } + + suspend fun saveSelectedTargetLanguage(language: Language?) { + dataStore.saveObject(DataStoreKeys.SELECTED_TARGET_LANGUAGE_KEY, language) + } + + fun loadSelectedDictionaryLanguage(): Flow { + return dataStore.loadObject(DataStoreKeys.SELECTED_DICTIONARY_LANGUAGE_KEY) + } + + suspend fun saveSelectedDictionaryLanguage(language: Language?) { + dataStore.saveObject(DataStoreKeys.SELECTED_DICTIONARY_LANGUAGE_KEY, language) + } + + suspend fun addCustomLanguage(language: Language) { + val customLanguages = loadLanguages(LanguageListType.CUSTOM).first().toMutableList() + + val newId = -(System.currentTimeMillis().toInt()) + + val newLanguage = language.copy(nameResId = newId, isCustom = true) + + // Allow same names with different regions; prevent exact duplicates by name+region+code + if (!customLanguages.any { it.name.equals(newLanguage.name, true) && it.region.equals(newLanguage.region, true) && it.code.equals(newLanguage.code, true) }) { + customLanguages.add(newLanguage) + saveLanguages(LanguageListType.CUSTOM, customLanguages) + initializeAllLanguages() + } + } + + suspend fun deleteCustomLanguage(language: Language) { + // Read all lists needed first + val customLanguages = loadLanguages(LanguageListType.CUSTOM).first().toMutableList() + val historyLanguages = loadLanguages(LanguageListType.HISTORY).first().toMutableList() + val favoriteLanguages = loadLanguages(LanguageListType.FAVORITE).first().toMutableList() + val enabledIds = context.dataStore.loadObjectList(DataStoreKeys.ALL_LANGUAGES_KEY).firstOrNull()?.toMutableList() ?: mutableListOf() + + // Perform removals + val wasCustomRemoved = customLanguages.removeIf { it.nameResId == language.nameResId } + val wasHistoryRemoved = historyLanguages.removeIf { it.nameResId == language.nameResId } + val wasFavoriteRemoved = favoriteLanguages.removeIf { it.nameResId == language.nameResId } + val wasEnabledRemoved = enabledIds.removeIf { it == language.nameResId } + + // Write back to DataStore only if changes were made + if (wasCustomRemoved) { + saveLanguages(LanguageListType.CUSTOM, customLanguages) + // Re-run initialization to update the enabled list + initializeAllLanguages() + } + if (wasHistoryRemoved) { + saveLanguages(LanguageListType.HISTORY, historyLanguages) + } + if (wasFavoriteRemoved) { + saveLanguages(LanguageListType.FAVORITE, favoriteLanguages) + } + if (wasEnabledRemoved) { + context.dataStore.saveObjectList(DataStoreKeys.ALL_LANGUAGES_KEY, enabledIds) + } + } + + suspend fun getLanguageById(id: Int): Language? { + if (id == 0) return null + return try { + masterLanguagesFlow().first().find { it.nameResId == id } + } catch (_: Exception) { + null + } + } +} diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/Setting.kt b/app/src/main/java/eu/gaudian/translator/model/repository/Setting.kt new file mode 100644 index 0000000..c0411f1 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/Setting.kt @@ -0,0 +1,41 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.repository + +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.edit +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +/** + * A generic wrapper for a single setting in DataStore. + * + * @param T The type of the setting value. + * @param dataStore The DataStore instance. + * @param key The Preferences.Key for this setting. + * @param defaultValue The default value to return if none is set. + */ +class Setting( + private val dataStore: DataStore, + private val key: Preferences.Key, + private val defaultValue: T +) { + /** + * A Flow that emits the current value of the setting. + */ + val flow: Flow = dataStore.data.map { preferences -> + preferences[key] ?: defaultValue + } + + /** + * Sets or updates the value of the setting. + */ + suspend fun set(value: T) { + Log.d("Setting", "Setting value for key $key to $value") + dataStore.edit { settings -> + settings[key] = value + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/SettingsRepository.kt b/app/src/main/java/eu/gaudian/translator/model/repository/SettingsRepository.kt new file mode 100644 index 0000000..71f1548 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/SettingsRepository.kt @@ -0,0 +1,163 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.repository + +import android.content.Context +import androidx.datastore.preferences.core.booleanPreferencesKey +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.intPreferencesKey +import androidx.datastore.preferences.core.stringPreferencesKey +import androidx.datastore.preferences.core.stringSetPreferencesKey +import eu.gaudian.translator.model.communication.ApiProvider +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map + +class SettingsRepository(private val context: Context) { + + private object PrefKeys { + const val API_KEY_SUFFIX = "_api_key" + + val CUSTOM_PROMPT_TRANSLATION = stringPreferencesKey("custom_prompt_translation") + val CUSTOM_PROMPT_VOCABULARY = stringPreferencesKey("custom_prompt_vocabulary") + val CUSTOM_PROMPT_DICTIONARY = stringPreferencesKey("custom_prompt_dictionary") + val CUSTOM_PROMPT_EXERCISE = stringPreferencesKey("custom_prompt_exercise") + val SPEAKING_SPEED = intPreferencesKey("SPEAKING_SPEED") + val DEVELOPER_MODE = booleanPreferencesKey("developer_mode") + val DAILY_GOAL = intPreferencesKey("daily_goal") + val SELECTED_CATEGORIES = stringSetPreferencesKey("selectedCategories") + val DICTIONARY_SWITCHES = stringSetPreferencesKey("dictionary_switches") + val THEME = stringPreferencesKey("selected_theme") + val DARK_MODE_PREFERENCE = stringPreferencesKey("dark_mode_preference") + val FONT_PREFERENCE = stringPreferencesKey("font_preference") + val INTRO_COMPLETED = booleanPreferencesKey("intro_completed") + val INTERVAL_NEW = intPreferencesKey("interval_new") + val INTERVAL_STAGE_1 = intPreferencesKey("interval_stage_1") + val INTERVAL_STAGE_2 = intPreferencesKey("interval_stage_2") + val INTERVAL_STAGE_3 = intPreferencesKey("interval_stage_3") + val INTERVAL_STAGE_4 = intPreferencesKey("interval_stage_4") + val INTERVAL_STAGE_5 = intPreferencesKey("interval_stage_5") + val INTERVAL_LEARNED = intPreferencesKey("interval_learned") + val CRITERIA_CORRECT = intPreferencesKey("criteria_correct") + val CRITERIA_WRONG = intPreferencesKey("criteria_wrong") + val SHOW_HINTS = booleanPreferencesKey("show_hints") + val EXPERIMENTAL_FEATURES = booleanPreferencesKey("experimental_features") + val TRY_WIKTIONARY_FIRST = booleanPreferencesKey("try_wiktionary_first") + val SHOW_BOTTOM_NAV_LABELS = booleanPreferencesKey("show_bottom_nav_labels") + val CONNECTION_CONFIGURED = booleanPreferencesKey("connection_configured") + val USE_LIBRE_TRANSLATE = booleanPreferencesKey("use_libretranslate") + val LAST_SEEN_VERSION = stringPreferencesKey("last_seen_version") + + fun getTtsVoiceKey(code: String, region: String): androidx.datastore.preferences.core.Preferences.Key { + val c = code.lowercase() + val r = region.trim() + return stringPreferencesKey("tts_voice_" + if (r.isBlank()) c else "${c}_${r.uppercase()}") + } + fun getLegacyTtsVoiceKey(code: String) = stringPreferencesKey("tts_voice_" + code.lowercase()) + fun getApiKeyPrefKey(providerKey: String) = stringPreferencesKey("${providerKey}$API_KEY_SUFFIX") + } + + suspend fun setTtsVoiceForLanguage(code: String, region: String, voiceName: String?) { + context.dataStore.edit { prefs -> + val key = PrefKeys.getTtsVoiceKey(code, region) + if (voiceName.isNullOrBlank()) { + prefs.remove(key) + } else { + prefs[key] = voiceName + } + } + } + + fun getTtsVoiceForLanguage(code: String, region: String): Flow { + val key = PrefKeys.getTtsVoiceKey(code, region) + val legacy = PrefKeys.getLegacyTtsVoiceKey(code) + return context.dataStore.data.map { prefs -> + prefs[key] ?: prefs[legacy] + } + } + + @Deprecated("Use region-aware overload", ReplaceWith("getTtsVoiceForLanguage(code, region)")) + fun getTtsVoiceForLanguage(code: String): Flow = getTtsVoiceForLanguage(code, "") + + @Deprecated("Use region-aware overload", ReplaceWith("setTtsVoiceForLanguage(code, region, voiceName)")) + suspend fun setTtsVoiceForLanguage(code: String, voiceName: String?) = setTtsVoiceForLanguage(code, "", voiceName) + + val theme = Setting(context.dataStore, PrefKeys.THEME, "Default") + val darkModePreference = Setting(context.dataStore, PrefKeys.DARK_MODE_PREFERENCE, "System") + val fontPreference = Setting(context.dataStore, PrefKeys.FONT_PREFERENCE, "Default") + val introCompleted = Setting(context.dataStore, PrefKeys.INTRO_COMPLETED, false) + val developerMode = Setting(context.dataStore, PrefKeys.DEVELOPER_MODE, false) + val dailyGoal = Setting(context.dataStore, PrefKeys.DAILY_GOAL, 10) + val selectedCategories = Setting(context.dataStore, PrefKeys.SELECTED_CATEGORIES, emptySet()) + val dictionarySwitches = Setting(context.dataStore, PrefKeys.DICTIONARY_SWITCHES, emptySet()) + val customPromptTranslation = Setting(context.dataStore, PrefKeys.CUSTOM_PROMPT_TRANSLATION, "") + val customPromptVocabulary = Setting(context.dataStore, PrefKeys.CUSTOM_PROMPT_VOCABULARY, "") + val customPromptDictionary = Setting(context.dataStore, PrefKeys.CUSTOM_PROMPT_DICTIONARY, "") + val customPromptExercise = Setting(context.dataStore, PrefKeys.CUSTOM_PROMPT_EXERCISE, "") + val speakingSpeed = Setting(context.dataStore, PrefKeys.SPEAKING_SPEED, 100) + val intervalNew = Setting(context.dataStore, PrefKeys.INTERVAL_NEW, 1) + val intervalStage1 = Setting(context.dataStore, PrefKeys.INTERVAL_STAGE_1, 3) + val intervalStage2 = Setting(context.dataStore, PrefKeys.INTERVAL_STAGE_2, 7) + val intervalStage3 = Setting(context.dataStore, PrefKeys.INTERVAL_STAGE_3, 14) + val intervalStage4 = Setting(context.dataStore, PrefKeys.INTERVAL_STAGE_4, 30) + val intervalStage5 = Setting(context.dataStore, PrefKeys.INTERVAL_STAGE_5, 60) + val intervalLearned = Setting(context.dataStore, PrefKeys.INTERVAL_LEARNED, 90) + val criteriaCorrect = Setting(context.dataStore, PrefKeys.CRITERIA_CORRECT, 3) + val criteriaWrong = Setting(context.dataStore, PrefKeys.CRITERIA_WRONG, 2) + val showHints = Setting(context.dataStore, PrefKeys.SHOW_HINTS, true) + val experimentalFeatures = Setting(context.dataStore, PrefKeys.EXPERIMENTAL_FEATURES, false) + val tryWiktionaryFirst = Setting(context.dataStore, PrefKeys.TRY_WIKTIONARY_FIRST, false) + val showBottomNavLabels = Setting(context.dataStore, PrefKeys.SHOW_BOTTOM_NAV_LABELS, true) + val connectionConfigured = Setting(context.dataStore, PrefKeys.CONNECTION_CONFIGURED, true) + val useLibreTranslate = Setting(context.dataStore, PrefKeys.USE_LIBRE_TRANSLATE, false) + val lastSeenVersion = Setting(context.dataStore, PrefKeys.LAST_SEEN_VERSION, "") + + + + fun getAllApiKeys(): Flow> { + return context.dataStore.data.map { preferences -> + preferences.asMap().mapNotNull { (key, value) -> + if (key.name.endsWith(PrefKeys.API_KEY_SUFFIX) && value is String) { + val providerKey = key.name.removeSuffix(PrefKeys.API_KEY_SUFFIX) + providerKey to value + } else { + null + } + }.toMap() + } + } + + /** + * Checks if the user has seen the "what's new" dialog for the current version + */ + suspend fun hasSeenCurrentVersion(currentVersion: String): Boolean { + val lastSeen = lastSeenVersion.flow.first() + return lastSeen == currentVersion + } + + /** + * Marks the current version as seen by the user + */ + suspend fun markVersionAsSeen(version: String) { + lastSeenVersion.set(version) + } + + /** + * Saves an API key for a given provider. + * The provider object is used to get the key, but the preference is stored dynamically. + */ + suspend fun saveApiKey(provider: ApiProvider, apiKey: String) { + context.dataStore.edit { settings -> + settings[PrefKeys.getApiKeyPrefKey(provider.key)] = apiKey + } + } + + /** + * Deletes an API key for a given provider. + */ + suspend fun deleteApiKey(providerKey: String) { + context.dataStore.edit { settings -> + settings.remove(PrefKeys.getApiKeyPrefKey(providerKey)) + } + } +} diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/VocabularyFileSaver.kt b/app/src/main/java/eu/gaudian/translator/model/repository/VocabularyFileSaver.kt new file mode 100644 index 0000000..d2bb761 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/VocabularyFileSaver.kt @@ -0,0 +1,100 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.model.repository + + +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.provider.MediaStore +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import kotlinx.serialization.json.Json +import java.io.IOException +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +class VocabularyFileSaver(private val context: Context, private val repository: VocabularyRepository) { + + fun createSaveDocumentIntent(suggestedFilename: String): Intent { + return Intent(Intent.ACTION_CREATE_DOCUMENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "application/json" // Adjust as needed + putExtra(Intent.EXTRA_TITLE, suggestedFilename) + } + } + + suspend fun saveRepositoryToUri(uri: Uri) { + withContext(Dispatchers.IO) { + try { + context.contentResolver.openOutputStream(uri)?.use { outputStream -> + val vocabularyItems = repository.getAllVocabularyItems() + if (vocabularyItems.isNotEmpty()) { + val jsonString = Json.encodeToString(vocabularyItems) + outputStream.write(jsonString.toByteArray()) + val filename = getFileNameFromUri(uri) + Log.d(TAG, "File saved: $filename") + } else { + Log.e(TAG, "No vocabulary items to save.") + } + } + } catch (e: IOException) { + Log.e(TAG, "Error saving: ${e.message}", e) + } + } + } + + suspend fun saveCategoryToUri(uri: Uri, categoryId: Int) { + withContext(Dispatchers.IO) { + try { + context.contentResolver.openOutputStream(uri)?.use { outputStream -> + val vocabularyItems = repository.getVocabularyItemsByCategory(categoryId) + if (vocabularyItems.isNotEmpty()) { + val jsonString = Json.encodeToString(vocabularyItems) + outputStream.write(jsonString.toByteArray()) + val filename = getFileNameFromUri(uri) + Log.d(TAG, "File saved for category $categoryId: $filename") + } else { + Log.e(TAG, "No vocabulary items to save for category $categoryId.") + } + } + } catch (e: IOException) { + Log.e(TAG, "Error saving for category $categoryId: ${e.message}", e) + } + } + } + + + fun generateFilename(): String { + val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date()) + return "vocabulary_$timeStamp.json" + } + + fun generateFilenameForCategory(categoryId: Int): String { + val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date()) + return "vocabulary_category_$categoryId$timeStamp.json" + } + + fun getFileNameFromUri(uri: Uri): String { + var fileName = "unknown_file" + if (uri.scheme == "content") { + context.contentResolver.query(uri, null, null, null, null)?.use { cursor -> + if (cursor.moveToFirst()) { + val displayNameIndex = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME) + if (displayNameIndex != -1) { + fileName = cursor.getString(displayNameIndex) + } + } + } + } else if (uri.scheme == "file") { + fileName = uri.lastPathSegment ?: fileName + } + return fileName + } + + companion object { + private const val TAG = "VocabularyFileSaver" + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/VocabularyRepository.kt b/app/src/main/java/eu/gaudian/translator/model/repository/VocabularyRepository.kt new file mode 100644 index 0000000..661b3b6 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/model/repository/VocabularyRepository.kt @@ -0,0 +1,792 @@ +@file:OptIn(ExperimentalTime::class) +@file:Suppress("HardCodedStringLiteral", "unused") + +package eu.gaudian.translator.model.repository + +import android.content.Context +import androidx.room.withTransaction +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.TagCategory +import eu.gaudian.translator.model.VocabularyCategory +import eu.gaudian.translator.model.VocabularyFilter +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.model.VocabularyItemState +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.model.db.AppDatabase +import eu.gaudian.translator.model.db.CategoryMappingEntity +import eu.gaudian.translator.model.db.DailyStatEntity +import eu.gaudian.translator.model.db.StageMappingEntity +import eu.gaudian.translator.model.db.VocabularyCategoryEntity +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.VocabularyService +import eu.gaudian.translator.viewmodel.CategoryProgress +import eu.gaudian.translator.viewmodel.StageStats +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.Job +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.datetime.DateTimeUnit +import kotlinx.datetime.LocalDate +import kotlinx.datetime.TimeZone +import kotlinx.datetime.minus +import kotlinx.datetime.plus +import kotlinx.datetime.toLocalDateTime +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import kotlin.time.Clock +import kotlin.time.ExperimentalTime +import kotlin.time.Instant + +private const val TAG = "VocabularyRepository" + +@Serializable +data class CategoryMapping( + val vocabularyItemId: Int, + val categoryId: Int, +) + +class VocabularyRepository private constructor(context: Context) { + companion object { + @Volatile private var INSTANCE: VocabularyRepository? = null + fun getInstance(context: Context): VocabularyRepository = INSTANCE ?: synchronized(this) { + INSTANCE ?: VocabularyRepository(context.applicationContext).also { INSTANCE = it } + } + } + + val settingsRepository = SettingsRepository(context) + private val vocabularyItemService = VocabularyService(context) + private val updateMappingsMutex = Mutex() + + // Coalescing scheduler for updateMappings to avoid heavy bursts + private val repoScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) + private val debounceMs = 1500L + @Volatile private var isRunning = false + @Volatile private var pendingRequest = false + private var debounceJob: Job? = null + + // DAOs from Room are the new data source + private val db = AppDatabase.getDatabase(context) + private val itemDao = db.vocabularyItemDao() + private val stateDao = db.vocabularyStateDao() + private val categoryDao = db.categoryDao() + private val mappingDao = db.mappingDao() + private val dailyStatDao = db.dailyStatDao() + + fun initializeRepository() { + Log.d(TAG, "Initializing repository...") + requestUpdateMappings() + } + + suspend fun getDailyVocabularyStats(startDate: LocalDate, endDate: LocalDate): Map { + // The DAO query does all the hard work + val statsFromDb = stateDao.getCorrectAnswerCountsByDate(startDate, endDate) + val dailyStats = statsFromDb.associate { it.date to it.count }.toMutableMap() + + // Ensure all dates in the range are present, even if their count is 0 + var currentDate = startDate + while (currentDate <= endDate) { + dailyStats.putIfAbsent(currentDate, 0) + currentDate = currentDate.plus(1, DateTimeUnit.DAY) + } + return dailyStats + } + + fun getCategoryMappingsFlow(): Flow> { + return mappingDao.getCategoryMappingsFlow().map { list -> + list.map { CategoryMapping(it.vocabularyItemId, it.categoryId) } + } + } + + suspend fun getWordsLearnedByDate(startDate: LocalDate, endDate: LocalDate): Map { + val allStates = getAllVocabularyItemStates() + val dailyStats = mutableMapOf().withDefault { 0 } + + allStates.forEach { state -> + if (state.correctAnswerCount >= settingsRepository.criteriaCorrect.flow.first()) { + state.lastCorrectAnswer?.let { learnedTime -> + val learnedDate = learnedTime.toLocalDateTime(TimeZone.currentSystemDefault()).date + if (learnedDate in startDate..endDate) { + dailyStats[learnedDate] = dailyStats.getValue(learnedDate) + 1 + } + } + } + } + + var currentDate = startDate + while (currentDate <= endDate) { + dailyStats.putIfAbsent(currentDate, 0) + currentDate = currentDate.plus(1, DateTimeUnit.DAY) + } + return dailyStats + } + + private suspend fun runUpdateMappingsInternal() = updateMappingsMutex.withLock { + coroutineScope { + val stageUpdateJob = async { actualizeVocabularyStageMappings() } + stageUpdateJob.await() + + val listMappings = async { calculateListMappings() }.await() + val filterMappings = async { calculateFilterMappings() }.await() + + val allMappings = (listMappings + filterMappings).distinct() + + // Atomically replace all mappings + mappingDao.setAllCategoryMappings(allMappings.map { CategoryMappingEntity(it.vocabularyItemId, it.categoryId) }) + } + } + + // Public scheduler entry + private fun requestUpdateMappings() { + // Mark that a request is pending + pendingRequest = true + // Restart debounce timer + debounceJob?.cancel() + debounceJob = repoScope.launch { + delay(debounceMs) + triggerIfNeeded() + } + } + + private fun triggerIfNeeded() { + // Only one runner at a time; if already running, we'll run again afterwards + if (isRunning) return + if (!pendingRequest) return + pendingRequest = false + isRunning = true + repoScope.launch { + try { + runUpdateMappingsInternal() + } finally { + isRunning = false + // If more requests arrived while running, schedule next run after small debounce + if (pendingRequest) { + debounceJob?.cancel() + debounceJob = repoScope.launch { + delay(debounceMs) + triggerIfNeeded() + } + } + } + } + } + + suspend fun editVocabularyItem(vocabularyItem: VocabularyItem) { + Log.d(TAG, "editVocabularyItem: Editing item id=${vocabularyItem.id}") + itemDao.upsertItem(vocabularyItem) + requestUpdateMappings() + } + + suspend fun updateVocabularyItems(items: List) { + Log.d(TAG, "updateVocabularyItems: Updating ${items.size} items.") + items.forEach { itemDao.upsertItem(it) } + requestUpdateMappings() + } + + @OptIn(ExperimentalCoroutinesApi::class) + fun getDueTodayItemsFlow(): Flow> { + return combine( + settingsRepository.intervalStage1.flow, settingsRepository.intervalStage2.flow, + settingsRepository.intervalStage3.flow, settingsRepository.intervalStage4.flow, + settingsRepository.intervalStage5.flow, settingsRepository.intervalLearned.flow + ) { intervals -> + // This is a list of integers [stage1, stage2, ...] + intervals.toList() + }.flatMapLatest { intervals -> + // flatMapLatest ensures the DB query is re-triggered when intervals change + itemDao.getDueTodayItemsFlow( + now = Clock.System.now().epochSeconds, + intervalStage1 = intervals[0], + intervalStage2 = intervals[1], + intervalStage3 = intervals[2], + intervalStage4 = intervals[3], + intervalStage5 = intervals[4], + intervalLearned = intervals[5] + ) + } + } + + fun getAllVocabularyItemsFlow(): Flow> = itemDao.getAllItemsFlow() + + suspend fun getAllVocabularyItems(): List = itemDao.getAllItems() + + suspend fun getVocabularyItemById(vocabularyItemId: Int): VocabularyItem? = itemDao.getItemById(vocabularyItemId) + + suspend fun deleteVocabularyItemById(vocabularyItemId: Int) { + Log.w(TAG, "deleteVocabularyItemById: Deleting item id=$vocabularyItemId") + itemDao.deleteItemById(vocabularyItemId) + requestUpdateMappings() + } + + suspend fun deleteVocabularyItemsByIds(vocabularyItemIds: List) { + Log.w(TAG, "deleteVocabularyItemsByIds: Deleting ${vocabularyItemIds.size} items.") + itemDao.deleteItemsByIds(vocabularyItemIds) + requestUpdateMappings() + } + + suspend fun generateVocabularyItems( + category: String, languageFirst: Language, languageSecond: Language, amount: Int + ): Result> { + return vocabularyItemService.generateVocabularyItems(category, languageFirst, languageSecond, amount) + } + + suspend fun introduceVocabularyItems(newItems: List, categoryIds: List = emptyList()) { + Log.i(TAG, "introduceVocabularyItems: Adding ${newItems.size} new items to categories: $categoryIds") + val maxId = itemDao.getMaxItemId() ?: 0 + val updatedItems = newItems.mapIndexed { index, item -> item.copy(id = maxId + index + 1) } + itemDao.insertAll(updatedItems) + + if (categoryIds.isNotEmpty()) { + val newMappings = updatedItems.flatMap { item -> + categoryIds.map { categoryId -> + CategoryMappingEntity(vocabularyItemId = item.id, categoryId = categoryId) + } + } + newMappings.forEach { mappingDao.addCategoryMapping(it) } + } + requestUpdateMappings() + } + + @Suppress("unused") + suspend fun findDuplicates(): List { + Log.d(TAG, "findDuplicates: Searching for duplicate items.") + return getAllVocabularyItems() + .groupBy { item -> item.wordFirst.lowercase() to item.wordSecond.lowercase() } + .values + .filter { it.size > 1 } + .flatten() + } + + suspend fun cleanDuplicates() { + Log.i(TAG, "cleanDuplicates: Starting duplicate cleanup.") + val allItems = getAllVocabularyItems() + val uniqueItems = allItems.distinctBy { item -> item.wordFirst.lowercase() to item.wordSecond.lowercase() } + if (allItems.size != uniqueItems.size) { + val itemsToDelete = allItems.filterNot { uniqueItem -> uniqueItems.any { it.id == uniqueItem.id } } + Log.w(TAG, "cleanDuplicates: Found and deleting ${itemsToDelete.size} duplicates.") + itemDao.deleteItemsByIds(itemsToDelete.map { it.id }) + requestUpdateMappings() + } else { + Log.d(TAG, "cleanDuplicates: No duplicates found.") + } + } + + private fun mapEntityToCategory(entity: VocabularyCategoryEntity): VocabularyCategory { + return when(entity.type) { + "LIST", "TAG" -> TagCategory(entity.id, entity.name) + "FILTER" -> { + val langsJson = entity.filterLanguages + val langs: List? = langsJson?.let { Json.decodeFromString(it) } + val pair: Pair? = if (entity.dictLangFirst != null && entity.dictLangSecond != null) { + Pair(entity.dictLangFirst, entity.dictLangSecond) + } else null + VocabularyFilter( + id = entity.id, + name = entity.name, + languages = langs, + languagePairs = pair, + stages = entity.filterStages?.let { Json.decodeFromString(it) } + ) + } + "DICTIONARY" -> VocabularyFilter( + id = entity.id, + name = entity.name, + languages = null, + languagePairs = Pair(entity.dictLangFirst!!, entity.dictLangSecond!!), + stages = null + ) + else -> TagCategory(entity.id, entity.name) + } + } + + private suspend fun mapCategoryToEntity(category: VocabularyCategory): VocabularyCategoryEntity { + val id = if (category.id == 0) (categoryDao.getAllCategories().maxOfOrNull { it.id } ?: 0) + 1 else category.id + return when(category) { + is TagCategory -> VocabularyCategoryEntity(id, category.name, "TAG", null, null, null, null) + is VocabularyFilter -> { + Log.d(TAG, "mapCategoryToEntity: $category, id=$id") + val hasPair = category.languagePairs != null + VocabularyCategoryEntity( + id = id, + name = category.name, + type = "FILTER", + filterLanguages = if (!hasPair) category.languages?.let { Json.encodeToString(it) } else null, + filterStages = category.stages?.let { if (it.isEmpty()) null else Json.encodeToString(it) }, + dictLangFirst = category.languagePairs?.first, + dictLangSecond = category.languagePairs?.second + ) + } + } + } + + suspend fun getAllCategories(): List { + return categoryDao.getAllCategories().map { mapEntityToCategory(it) } + } + + fun getAllCategoriesFlow(): Flow> { + return categoryDao.getAllCategoriesFlow().map { list -> list.map { mapEntityToCategory(it) } } + } + + suspend fun saveCategory(category: VocabularyCategory) { + val entity = mapCategoryToEntity(category) + Log.i(TAG, "saveCategory: Upserting category='${category.name}' -> entity=${entity}") + categoryDao.upsertCategory(entity) + // Recalculate mappings after saving the updated category to ensure filters (languages/stages/pair) take effect immediately + requestUpdateMappings() + } + + suspend fun deleteCategoryById(categoryId: Int) { + Log.w(TAG, "deleteCategoryById: Deleting category id=$categoryId") + categoryDao.deleteCategoryById(categoryId) + requestUpdateMappings() + } + + suspend fun getCategoryMappings(): List { + return mappingDao.getCategoryMappings().map { CategoryMapping(it.vocabularyItemId, it.categoryId) } + } + + suspend fun addVocabularyItemToList(vocabularyItemId: Int, listId: Int) { + Log.d(TAG, "addVocabularyItemToList: Adding item $vocabularyItemId to list $listId") + mappingDao.addCategoryMapping(CategoryMappingEntity(vocabularyItemId, listId)) + } + + suspend fun removeVocabularyItemFromList(vocabularyItemId: Int, listId: Int) { + Log.d(TAG, "removeVocabularyItemFromList: Removing item $vocabularyItemId from list $listId") + mappingDao.removeCategoryMapping(vocabularyItemId, listId) + } + + suspend fun getVocabularyItemsByCategory(categoryId: Int): List { + return itemDao.getItemsByCategoryId(categoryId) + } + + @Suppress("unused") + fun getAllVocabularyItemStatesFlow(): Flow> = stateDao.getAllStatesFlow() + + suspend fun getAllVocabularyItemStates(): List = stateDao.getAllStates() + + suspend fun getVocabularyItemStateById(vocabularyItemId: Int): VocabularyItemState? = stateDao.getStateById(vocabularyItemId) + + suspend fun saveVocabularyItemState(vocabularyItemState: VocabularyItemState) { + Log.d(TAG, "saveVocabularyItemState: Saving state for item ${vocabularyItemState.vocabularyItemId}") + stateDao.upsertState(vocabularyItemState) + } + + @Suppress("unused") + suspend fun itemExists(word: String, languageID: Int?): Boolean { + // Avoid loading all items into memory; delegate existence check to the DB + return itemDao.itemExists(word, languageID) + } + + suspend fun getLastCorrectAnswer(vocabularyItemId: Int): Instant? { + return getVocabularyItemStateById(vocabularyItemId)?.lastCorrectAnswer + } + + suspend fun getLastIncorrectAnswer(vocabularyItemId: Int): Instant? { + return getVocabularyItemStateById(vocabularyItemId)?.lastIncorrectAnswer + } + + suspend fun getCorrectAnswerCount(vocabularyItemId: Int): Int { + return getVocabularyItemStateById(vocabularyItemId)?.correctAnswerCount ?: 0 + } + + suspend fun getIncorrectAnswerCount(vocabularyItemId: Int): Int { + return getVocabularyItemStateById(vocabularyItemId)?.incorrectAnswerCount ?: 0 + } + + @Suppress("unused") + suspend fun getVocabularyItemsByStage(stage: VocabularyStage): List { + val stageMapping = loadStageMapping().first() + val idsForStage = stageMapping.filterValues { it == stage }.keys + if (idsForStage.isEmpty()) return emptyList() + return itemDao.getItemsByIds(idsForStage.toList()) + } + + suspend fun changeVocabularyItemStage(item: VocabularyItem?, newStage: VocabularyStage) { + val itemId = item?.id ?: return + Log.d(TAG, "changeVocabularyItemStage: Changing item $itemId to stage $newStage") + mappingDao.upsertStageMapping(StageMappingEntity(itemId, newStage)) + } + + suspend fun changeVocabularyItemsStage(items: List?, newStage: VocabularyStage) { + if (items.isNullOrEmpty()) return + Log.d(TAG, "changeVocabularyItemsStage: Changing ${items.size} items to stage $newStage") + val newMappings = items.map { StageMappingEntity(it.id, newStage) } + mappingDao.upsertStageMappings(newMappings) + } + + fun getVocabularyItemStage(itemId: Int): Flow { + return loadStageMapping().map { stageMap -> + stageMap[itemId] ?: VocabularyStage.NEW + } + } + + fun loadStageMapping(): Flow> { + return mappingDao.getStageMappingsFlow().map { list -> + list.associate { it.vocabularyItemId to it.stage } + } + } + + private suspend fun saveStageMapping(mapping: Map) { + val entities = mapping.map { StageMappingEntity(it.key, it.value) } + mappingDao.upsertStageMappings(entities) + } + + suspend fun updateFlashcardStage(item: VocabularyItem, isCorrect: Boolean) { + val vocabularyItemId = item.id + val currentStage = getVocabularyItemStage(item.id).first() + val vocabularyItemState = getVocabularyItemStateById(vocabularyItemId) ?: VocabularyItemState(vocabularyItemId) + val criteriaCorrect = settingsRepository.criteriaCorrect.flow.first() + val criteriaWrong = settingsRepository.criteriaWrong.flow.first() + val now = Clock.System.now() + Log.d(TAG, "updateFlashcardStage: Item=${item.id}, Correct=$isCorrect, CurrentStage=$currentStage") + + + if (isCorrect) { + vocabularyItemState.correctAnswerCount++ + vocabularyItemState.lastCorrectAnswer = now + } else { + vocabularyItemState.incorrectAnswerCount++ + vocabularyItemState.lastIncorrectAnswer = now + } + + val nextStage = calculateNextStage( + currentStage, isCorrect, + vocabularyItemState.correctAnswerCount, vocabularyItemState.incorrectAnswerCount, + criteriaCorrect, criteriaWrong + ) + + if (nextStage != currentStage) { + Log.i(TAG, "updateFlashcardStage: Item ${item.id} moved from $currentStage to $nextStage") + vocabularyItemState.correctAnswerCount = 0 + vocabularyItemState.incorrectAnswerCount = 0 + changeVocabularyItemStage(item, nextStage) + } + saveVocabularyItemState(vocabularyItemState) + } + + private fun calculateNextStage( + currentStage: VocabularyStage, isCorrect: Boolean, + correctCount: Int, incorrectCount: Int, + criteriaCorrect: Int, criteriaWrong: Int + ): VocabularyStage { + val readyToAdvance = if (isCorrect) correctCount >= criteriaCorrect else incorrectCount >= criteriaWrong + if (!readyToAdvance) return currentStage + return when (currentStage) { + VocabularyStage.NEW -> VocabularyStage.STAGE_1 + VocabularyStage.STAGE_1 -> VocabularyStage.STAGE_2 + VocabularyStage.STAGE_2 -> VocabularyStage.STAGE_3 + VocabularyStage.STAGE_3 -> VocabularyStage.STAGE_4 + VocabularyStage.STAGE_4 -> VocabularyStage.STAGE_5 + VocabularyStage.STAGE_5 -> VocabularyStage.LEARNED + VocabularyStage.LEARNED -> VocabularyStage.LEARNED + } + } + + private fun isItemFitForCategory( + item: VocabularyItem, + filter: VocabularyFilter, + stageMapping: Map + ): Boolean { + val stage = stageMapping[item.id] ?: VocabularyStage.NEW + val stageFilter = filter.stages + val stageMatches = stageFilter.isNullOrEmpty() || stageFilter.contains(stage) + + // Language filter precedence: dictionary pair > languages list > no language filter + val firstId = item.languageFirstId + val secondId = item.languageSecondId + val languageMatches = when { + // Pair specified: both item language IDs must be non-null and match the pair (in any order) + filter.languagePairs != null -> { + val (a, b) = filter.languagePairs + (firstId != null && secondId != null) && + ((firstId == a && secondId == b) || (firstId == b && secondId == a)) + } + // Languages list specified: any of the item language IDs must be in the list + !filter.languages.isNullOrEmpty() -> { + val ids = filter.languages + (firstId != null && ids.contains(firstId)) || (secondId != null && ids.contains(secondId)) + } + else -> true + } + val matches = stageMatches && languageMatches + return matches + } + + suspend fun calcAvailableDictionaries(): Set> { + return getAllVocabularyItems().mapNotNull { + val lang1 = it.languageFirstId + val lang2 = it.languageSecondId + if (lang1 != null && lang2 != null) { + if (lang1 < lang2) lang1 to lang2 else lang2 to lang1 + } else { + null + } + }.toSet() + } + + suspend fun getCategoryById(categoryId: Int): VocabularyCategory? { + return categoryDao.getCategoryById(categoryId)?.let { mapEntityToCategory(it) } + } + + private suspend fun calculateListMappings(): List { + val allItemIds = getAllVocabularyItems().map { it.id }.toSet() + val listIds = getAllCategories().filterIsInstance().map { it.id }.toSet() + val listMappings = getCategoryMappings().filter { it.categoryId in listIds && it.vocabularyItemId in allItemIds } + Log.d(TAG, "calculateListMappings: Found ${listMappings.size} manual list mappings.") + return listMappings + } + + private suspend fun calculateFilterMappings(): List { + val vocabularyItems = getAllVocabularyItems() + val autoFilters = getAllCategories().filterIsInstance() + val stageMapping = loadStageMapping().first() + val newMappings = mutableListOf() + + for (item in vocabularyItems) { + for (filter in autoFilters) { + if (isItemFitForCategory(item, filter, stageMapping)) { + newMappings.add(CategoryMapping(item.id, filter.id)) + } + } + } + Log.d(TAG, "calculateFilterMappings: Generated ${newMappings.size} filter mappings.") + return newMappings + } + + + suspend fun actualizeVocabularyStageMappings() { + val allItems = getAllVocabularyItems() + val currentStageMapping = loadStageMapping().first() + val newStageMappings = allItems.associate { item -> + item.id to (currentStageMapping[item.id] ?: VocabularyStage.NEW) + } + val allIds = allItems.map { it.id } + mappingDao.deleteStageMappingsNotIn(allIds) + saveStageMapping(newStageMappings) + calculateCategoryProgress() + } + + suspend fun getDueTodayItems(): List { + return getDueTodayItemsFlow().first() + } + + suspend fun calculateStageStatistics(): List { + val stageMapping = loadStageMapping().first() + val counts = stageMapping.values.groupingBy { it }.eachCount() + return VocabularyStage.entries.map { stage -> + StageStats(stage, counts[stage] ?: 0) + } + } + + suspend fun getDailyCorrectCount(date: LocalDate): Int { + return dailyStatDao.getStatForDate(date)?.correctCount ?: 0 + } + + suspend fun updateDailyCorrectCount(date: LocalDate, count: Int) { + dailyStatDao.upsertStat(DailyStatEntity(date, count)) + } + + suspend fun getCorrectCountsForLastDays(days: Int): Map { + val today = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).date + val counts = mutableMapOf() + for (i in 0 until days) { + val date = today.minus(i, DateTimeUnit.DAY) + counts[date] = getDailyCorrectCount(date) + } + return counts + } + + suspend fun isTargetMetForDate(date: LocalDate): Boolean { + val dailyCorrectCount = getDailyCorrectCount(date) + val target = 10 // TODO: Replace with settingsRepository.dailyGoal.flow.first() + return dailyCorrectCount >= target + } + + suspend fun getAllLanguageIdsFromVocabulary(): Set { + Log.d(TAG, "getAllLanguageIdsFromVocabulary: Fetching all language IDs.") + val languageIds = getAllVocabularyItems() + .asSequence() + .flatMap { sequenceOf(it.languageFirstId, it.languageSecondId) } + .toSet() + Log.d(TAG, "getAllLanguageIdsFromVocabulary: Found ${languageIds.size} unique language IDs: $languageIds") + return languageIds + } + + suspend fun calculateCategoryProgress(): List = coroutineScope { + val stageMappingDeferred = async { loadStageMapping().first() } + val itemsDeferred = async { getAllVocabularyItems() } + val mappingsDeferred = async { getCategoryMappings() } + + val categories = getAllCategories() + val stageMapping = stageMappingDeferred.await() + val allItems = itemsDeferred.await() + val allMappings = mappingsDeferred.await() + + // Create maps for efficient lookups + val itemsById = allItems.associateBy { it.id } + val itemIdsByCategoryId = allMappings.groupBy( + keySelector = { it.categoryId }, + valueTransform = { it.vocabularyItemId } + ) + + categories.map { category -> + val itemIdsForCategory = itemIdsByCategoryId[category.id] ?: emptyList() + val itemsInCategory = itemIdsForCategory.mapNotNull { itemsById[it] } + + val totalItems = itemsInCategory.size + val itemsCompleted = itemsInCategory.count { stageMapping[it.id] == VocabularyStage.LEARNED } + val itemsInStages = itemsInCategory.count { + val stage = stageMapping[it.id] + stage != VocabularyStage.NEW && stage != VocabularyStage.LEARNED + } + val newItems = itemsInCategory.count { stageMapping[it.id] == VocabularyStage.NEW || stageMapping[it.id] == null } + + CategoryProgress( + vocabularyCategory = category, + totalItems = totalItems, + itemsCompleted = itemsCompleted, + itemsInStages = itemsInStages, + newItems = newItems, + ) + } + } + + suspend fun getSynonymsForItem(itemId: Int): List { + val item = getVocabularyItemById(itemId) ?: return emptyList() + val lang1 = item.languageFirstId + val lang2 = item.languageSecondId + return if (lang1 != null && lang2 != null) { + itemDao.getSynonyms( + excludeId = item.id, + lang1 = lang1, + lang2 = lang2, + wordFirst = item.wordFirst, + wordSecond = item.wordSecond + ) + } else { + // Fallback: if we don't have both language IDs, do a minimal in-memory filter + getAllVocabularyItems().asSequence() + .filter { it.id != item.id } + .filter { it.wordFirst == item.wordFirst || it.wordSecond == item.wordSecond } + .toList() + } + } + + suspend fun getNewlyAddedCountForDate(date: LocalDate): Int { + return getAllVocabularyItems().count { item -> + item.createdAt?.toLocalDateTime(TimeZone.currentSystemDefault())?.date == date + } + } + + suspend fun getCompletedCountForDate(date: LocalDate): Int { + val criteria = settingsRepository.criteriaCorrect.flow.first() + return getAllVocabularyItemStates().count { state -> + val completedDate = state.lastCorrectAnswer?.toLocalDateTime(TimeZone.currentSystemDefault())?.date + completedDate == date && state.correctAnswerCount >= criteria + } + } + + suspend fun getCorrectAnswerCountForDate(date: LocalDate): Int { + return getDailyCorrectCount(date) + } + + @Suppress("unused") + suspend fun backupRepositoryState(): String { + Log.i(TAG, "backupRepositoryState: Creating repository backup string.") + val backupData = RepositoryBackup( + items = getAllVocabularyItems(), + categories = getAllCategories(), + states = getAllVocabularyItemStates(), + categoryMappings = getCategoryMappings(), + stageMappings = loadStageMapping().first().toList() + ) + return Json.encodeToString(RepositoryBackup.serializer(), backupData) + } + + @Suppress("unused") + suspend fun restoreRepositoryState(backupJson: String) { + Log.w(TAG, "restoreRepositoryState: Restoring repository from backup. This will replace all existing data.") + val backupData = Json.decodeFromString(RepositoryBackup.serializer(), backupJson) + + db.withTransaction { + itemDao.insertAll(backupData.items) + stateDao.insertAll(backupData.states) + val categoryEntities = backupData.categories.map { mapCategoryToEntity(it) } + categoryDao.insertAll(categoryEntities) + val categoryMappingEntities = backupData.categoryMappings.map { CategoryMappingEntity(it.vocabularyItemId, it.categoryId) } + mappingDao.setAllCategoryMappings(categoryMappingEntities) + val stageMappingEntities = backupData.stageMappings.map { StageMappingEntity(it.first, it.second) } + mappingDao.upsertStageMappings(stageMappingEntities) + } + requestUpdateMappings() + Log.i(TAG, "restoreRepositoryState: Restore complete.") + } + + suspend fun wipeRepository() { + Log.e(TAG, "wipeRepository: Deleting all repository data!") + db.withTransaction { + mappingDao.clearCategoryMappings() + mappingDao.clearStageMappings() + categoryDao.clearAllCategories() + stateDao.clearAllStates() + itemDao.clearAllItems() + dailyStatDao.clearAll() + } + requestUpdateMappings() + Log.i(TAG, "wipeRepository: All data deleted.") + } + + /** + * Prints a detailed summary of the current repository state to the debug log. + * This function is intended for debugging purposes. + */ + @Suppress("unused") + suspend fun printRepoState() { + val allItems = getAllVocabularyItems() + val allCategories = getAllCategories() + val allStates = getAllVocabularyItemStates() + val categoryMappings = getCategoryMappings() + val stageMapping = loadStageMapping().first() + + val itemsPerCategory = categoryMappings.groupBy { it.categoryId } + .mapValues { it.value.size } + + val itemsPerStage = stageMapping.values.groupingBy { it }.eachCount() + + Log.d(TAG, "--- REPOSITORY STATE ---") + Log.d(TAG, "Total Items: ${allItems.size}") + Log.d(TAG, "Total Categories: ${allCategories.size} (${allCategories.filterIsInstance().size} Tags, ${allCategories.filterIsInstance().size} Filters)") + Log.d(TAG, "Total Item States: ${allStates.size}") + Log.d(TAG, "Total Category Mappings: ${categoryMappings.size}") + Log.d(TAG, "Total Stage Mappings: ${stageMapping.size}") + Log.d(TAG, "--- Items per Category ---") + allCategories.forEach { category -> + Log.d(TAG, " - ${category.name} (ID: ${category.id}, Type: ${category::class.simpleName}): ${itemsPerCategory[category.id] ?: 0} items") + } + Log.d(TAG, "--- Items per Stage ---") + VocabularyStage.entries.forEach { stage -> + Log.d(TAG, " - ${stage.name}: ${itemsPerStage[stage] ?: 0} items") + } + Log.d(TAG, "--- END REPOSITORY STATE ---") + } +} + +@Serializable +data class RepositoryBackup( + val items: List, + val categories: List, + val states: List, + val categoryMappings: List, + val stageMappings: List> +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/SemanticColors.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/SemanticColors.kt new file mode 100644 index 0000000..0c9b9f3 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/SemanticColors.kt @@ -0,0 +1,154 @@ +package eu.gaudian.translator.ui.theme + +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.luminance + +@Immutable +data class SemanticColors( + val success: Color, + val onSuccess: Color, + val successContainer: Color, + val onSuccessContainer: Color, + // wrong (error) semantic colors to style destructive/negative actions consistently across themes + val wrong: Color, + val onWrong: Color, + val wrongContainer: Color, + val onWrongContainer: Color, + // streak (fire) color used to indicate learning streaks consistently across themes + val streak: Color, + val onStreak: Color, + // A 6-step gradient transitioning from theme primary to onPrimary + val stageGradient1: Color, + val stageGradient2: Color, + val stageGradient3: Color, + val stageGradient4: Color, + val stageGradient5: Color, + val stageGradient6: Color, +) + +private val LocalSemanticColors = staticCompositionLocalOf { + // Reasonable fallbacks; will be overridden by ProvideSemanticColors + SemanticColors( + success = Color(0xFF2E7D32), + onSuccess = Color(0xFF64DD17), + successContainer = Color(0xFFC8E6C9), + onSuccessContainer = Color(0xFF1B5E20), + wrong = Color(0xFFB00020), + onWrong = Color(0xFFFFFFFF), + wrongContainer = Color(0xFFFCD8DF), + onWrongContainer = Color(0xFF370B0E), + streak = Color(0xFFFF6F00), + onStreak = Color(0xFF000000), + + stageGradient1 = Color(0xFF2E7D32), + stageGradient2 = Color(0xFF3FA046), + stageGradient3 = Color(0xFF51C55B), + stageGradient4 = Color(0xFF7ADD84), + stageGradient5 = Color(0xFFA4F5AE), + stageGradient6 = Color(0xFFFFFFFF), + ) +} + +@Suppress("UnusedReceiverParameter") +val MaterialTheme.semanticColors: SemanticColors + @Composable get() = LocalSemanticColors.current + +private fun lerpColor(a: Color, b: Color, t: Float): Color { + return Color( + red = a.red + (b.red - a.red) * t, + green = a.green + (b.green - a.green) * t, + blue = a.blue + (b.blue - a.blue) * t, + alpha = a.alpha + (b.alpha - a.alpha) * t + ) +} + +@Composable +private fun baseSemanticFromTheme(light: Boolean): SemanticColors { + val cs = MaterialTheme.colorScheme + val start = cs.primary + val mid = cs.secondary + val end = cs.tertiary + val steps = listOf(0f, 0.18f, 0.38f, 0.6f, 0.82f, 1f) + + + fun triLerpColor(a: Color, b: Color, c: Color, t: Float): Color { + val x = t.coerceIn(0f, 1f) + return if (x <= 0.5f) { + lerpColor(a, b, x / 0.5f) + } else { + lerpColor(b, c, (x - 0.5f) / 0.5f) + } + } + + val g1 = triLerpColor(start, mid, end, steps[0]) + val g2 = triLerpColor(start, mid, end, steps[1]) + val g3 = triLerpColor(start, mid, end, steps[2]) + val g4 = triLerpColor(start, mid, end, steps[3]) + val g5 = triLerpColor(start, mid, end, steps[4]) + val g6 = triLerpColor(start, mid, end, steps[5]) + + + return if (light) { + SemanticColors( + success = Color(0xFF2F8C33), + onSuccess = Color(0xFFFFFFFF), + successContainer = Color(0xFFC8E6C9), + onSuccessContainer = Color(0xFF1B5E20), + wrong = Color(0xFFB00020), + onWrong = Color(0xFFFFFFFF), + wrongContainer = Color(0xFFFFDAD6), + onWrongContainer = Color(0xFF410002), + streak = Color(0xFFFF6F00), + onStreak = Color(0xFF000000), + stageGradient1 = g1, + stageGradient2 = g2, + stageGradient3 = g3, + stageGradient4 = g4, + stageGradient5 = g5, + stageGradient6 = g6, + ) + } else { + SemanticColors( + success = Color(0xFF81C784), + onSuccess = Color(0xFF003314), + successContainer = Color(0xFF1B5E20), + onSuccessContainer = Color(0xFFC8E6C9), + wrong = Color(0xFFCF6679), + onWrong = Color(0xFF370B0E), + wrongContainer = Color(0xFF93000A), + onWrongContainer = Color(0xFFFFDAD6), + streak = Color(0xFFFFAB40), + onStreak = Color(0xFF1A0C00), + stageGradient1 = g1, + stageGradient2 = g2, + stageGradient3 = g3, + stageGradient4 = g4, + stageGradient5 = g5, + stageGradient6 = g6, + ) + } +} + +@Composable +fun ProvideSemanticColors(content: @Composable () -> Unit) { + // Provide a green-guaranteed semantic palette. We keep it independent from theme hues + // but adapt for light vs. dark to ensure accessibility and visual fit. + val isLight = MaterialTheme.colorScheme.background.luminance() > 0.5f + + val derived = if (isLight) { + // Light mode greens/reds + baseSemanticFromTheme(light = true) + } else { + // Dark mode greens/reds + baseSemanticFromTheme(light = false) + } + + CompositionLocalProvider(LocalSemanticColors provides derived) { + content() + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/Theme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/Theme.kt new file mode 100644 index 0000000..4043cf3 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/Theme.kt @@ -0,0 +1,206 @@ +package eu.gaudian.translator.ui.theme + +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.themes.AutumnSpiceTheme +import eu.gaudian.translator.ui.theme.themes.CitrusSplashTheme +import eu.gaudian.translator.ui.theme.themes.CoffeeTheme +import eu.gaudian.translator.ui.theme.themes.CrimsonTheme +import eu.gaudian.translator.ui.theme.themes.CyberpunkTheme +import eu.gaudian.translator.ui.theme.themes.DefaultTheme +import eu.gaudian.translator.ui.theme.themes.ForestTheme +import eu.gaudian.translator.ui.theme.themes.NordTheme +import eu.gaudian.translator.ui.theme.themes.OceanicCalmTheme +import eu.gaudian.translator.ui.theme.themes.PixelTheme +import eu.gaudian.translator.ui.theme.themes.SakuraTheme +import eu.gaudian.translator.ui.theme.themes.SlateAndStoneTheme +import eu.gaudian.translator.ui.theme.themes.SpaceTheme +import eu.gaudian.translator.ui.theme.themes.SynthwaveTheme +import eu.gaudian.translator.ui.theme.themes.TealTheme +import eu.gaudian.translator.ui.theme.themes.TwilightSerenityTheme + +/** + * A data class to hold the core colors for a theme variation (light or dark). + * This makes defining new themes as simple as providing these color values. + */ +data class ThemeColorSet( + // Main colors + val primary: Color, + val secondary: Color, + val tertiary: Color, + + // Container colors + val primaryContainer: Color, + val secondaryContainer: Color, + val tertiaryContainer: Color, + + // On colors (text/icons on top of main colors) + val onPrimary: Color, + val onSecondary: Color, + val onTertiary: Color, + val onPrimaryContainer: Color, + val onSecondaryContainer: Color, + val onTertiaryContainer: Color, + + // Error colors + val error: Color, + val onError: Color, + val errorContainer: Color, + val onErrorContainer: Color, + + // Background/surface colors + val background: Color, + val onBackground: Color, + val surface: Color, + val onSurface: Color, + val surfaceVariant: Color, + val onSurfaceVariant: Color, + + // Outline colors + val outline: Color, + val outlineVariant: Color, + + // Scrim + val scrim: Color, + + // Inverse colors + val inverseSurface: Color, + val inverseOnSurface: Color, + val inversePrimary: Color, + + // Surface container colors + val surfaceDim: Color, + val surfaceBright: Color, + val surfaceContainerLowest: Color, + val surfaceContainerLow: Color, + val surfaceContainer: Color, + val surfaceContainerHigh: Color, + val surfaceContainerHighest: Color +) + +/** + * Represents a complete, named theme in the app, containing both its light and dark color sets. + */ +data class AppTheme( + val name: String, + val lightColors: ThemeColorSet, + val darkColors: ThemeColorSet +) + +/** + * Represents a font style, including its display name and the filename of the font file. + */ + + + +val AllThemes = listOf( + + DefaultTheme, + PixelTheme, + CrimsonTheme, + SakuraTheme, + AutumnSpiceTheme, + TealTheme, + ForestTheme, + CoffeeTheme, + CitrusSplashTheme, + OceanicCalmTheme, + SlateAndStoneTheme, + NordTheme, + TwilightSerenityTheme, + SpaceTheme, + CyberpunkTheme, + SynthwaveTheme, + + +) + +/** + * A helper function that dynamically builds a Material [ColorScheme] + * from our generic [ThemeColorSet]. + * + * @param colorSet The set of colors to use. + * @param isDark Whether to build a dark or light color scheme. + * @return A complete Material 3 [ColorScheme]. + */ +fun buildColorScheme(colorSet: ThemeColorSet, isDark: Boolean): ColorScheme { + return if (isDark) { + darkColorScheme( + primary = colorSet.primary, + onPrimary = colorSet.onPrimary, + primaryContainer = colorSet.primaryContainer, + onPrimaryContainer = colorSet.onPrimaryContainer, + inversePrimary = colorSet.inversePrimary, + secondary = colorSet.secondary, + onSecondary = colorSet.onSecondary, + secondaryContainer = colorSet.secondaryContainer, + onSecondaryContainer = colorSet.onSecondaryContainer, + tertiary = colorSet.tertiary, + onTertiary = colorSet.onTertiary, + tertiaryContainer = colorSet.tertiaryContainer, + onTertiaryContainer = colorSet.onTertiaryContainer, + background = colorSet.background, + onBackground = colorSet.onBackground, + surface = colorSet.surface, + onSurface = colorSet.onSurface, + surfaceVariant = colorSet.surfaceVariant, + onSurfaceVariant = colorSet.onSurfaceVariant, + surfaceDim = colorSet.surfaceDim, + surfaceBright = colorSet.surfaceBright, + surfaceContainerLowest = colorSet.surfaceContainerLowest, + surfaceContainerLow = colorSet.surfaceContainerLow, + surfaceContainer = colorSet.surfaceContainer, + surfaceContainerHigh = colorSet.surfaceContainerHigh, + surfaceContainerHighest = colorSet.surfaceContainerHighest, + error = colorSet.error, + onError = colorSet.onError, + errorContainer = colorSet.errorContainer, + onErrorContainer = colorSet.onErrorContainer, + outline = colorSet.outline, + outlineVariant = colorSet.outlineVariant, + scrim = colorSet.scrim, + inverseSurface = colorSet.inverseSurface, + inverseOnSurface = colorSet.inverseOnSurface + ) + } else { + lightColorScheme( + primary = colorSet.primary, + onPrimary = colorSet.onPrimary, + primaryContainer = colorSet.primaryContainer, + onPrimaryContainer = colorSet.onPrimaryContainer, + inversePrimary = colorSet.inversePrimary, + secondary = colorSet.secondary, + onSecondary = colorSet.onSecondary, + secondaryContainer = colorSet.secondaryContainer, + onSecondaryContainer = colorSet.onSecondaryContainer, + tertiary = colorSet.tertiary, + onTertiary = colorSet.onTertiary, + tertiaryContainer = colorSet.tertiaryContainer, + onTertiaryContainer = colorSet.onTertiaryContainer, + background = colorSet.background, + onBackground = colorSet.onBackground, + surface = colorSet.surface, + onSurface = colorSet.onSurface, + surfaceVariant = colorSet.surfaceVariant, + onSurfaceVariant = colorSet.onSurfaceVariant, + surfaceDim = colorSet.surfaceDim, + surfaceBright = colorSet.surfaceBright, + surfaceContainerLowest = colorSet.surfaceContainerLowest, + surfaceContainerLow = colorSet.surfaceContainerLow, + surfaceContainer = colorSet.surfaceContainer, + surfaceContainerHigh = colorSet.surfaceContainerHigh, + surfaceContainerHighest = colorSet.surfaceContainerHighest, + error = colorSet.error, + onError = colorSet.onError, + errorContainer = colorSet.errorContainer, + onErrorContainer = colorSet.onErrorContainer, + outline = colorSet.outline, + outlineVariant = colorSet.outlineVariant, + scrim = colorSet.scrim, + inverseSurface = colorSet.inverseSurface, + inverseOnSurface = colorSet.inverseOnSurface + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/ThemePreview.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/ThemePreview.kt new file mode 100644 index 0000000..7d4e98f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/ThemePreview.kt @@ -0,0 +1,23 @@ +package eu.gaudian.translator.ui.theme + + +import android.annotation.SuppressLint +import android.content.res.Configuration +import androidx.compose.ui.tooling.preview.Preview + +/** + * A multipreview annotation that shows a Composable in both light and dark themes. + * It also suppresses the "HardcodedText" lint warning, as previews are for development + * and do not need string resources. + */ +@Preview( + name = "Light Mode", + showBackground = true +) +@Preview( + name = "Dark Mode", + uiMode = Configuration.UI_MODE_NIGHT_YES, + showBackground = true, +) +@SuppressLint("HardcodedText")@Suppress("HardCodedStringLiteral") +annotation class ThemePreviews \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/Typography.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/Typography.kt new file mode 100644 index 0000000..8559da8 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/Typography.kt @@ -0,0 +1,20 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme + + +data class FontStyle( + val name: String, + val fileName: String +) + + +val AllFonts = listOf( + FontStyle("Default", "default"), + FontStyle("Merriweather", "merriweather_regular"), + FontStyle("Lato", "lato_regular"), + FontStyle("Playfair Display", "playfairdisplay_regular"), + FontStyle("Roboto", "roboto_regular"), + FontStyle("Lora", "lora_regular"), + FontStyle("Open Sans", "opensans_regular"), +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/AutumnSpiceTheme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/AutumnSpiceTheme.kt new file mode 100644 index 0000000..abe6eb1 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/AutumnSpiceTheme.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val AutumnSpiceTheme = AppTheme( + name = "Autumn Spice", + lightColors = ThemeColorSet( + primary = Color(0xFFC55000), + secondary = Color(0xFFA03F3B), + tertiary = Color(0xFF795900), + primaryContainer = Color(0xFFFFDBC8), + secondaryContainer = Color(0xFFFFDAD7), + tertiaryContainer = Color(0xFFFFDF96), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF431400), + onSecondaryContainer = Color(0xFF400000), + onTertiaryContainer = Color(0xFF261A00), + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFFFF8F6), + onBackground = Color(0xFF231917), + surface = Color(0xFFFFF8F6), + onSurface = Color(0xFF231917), + surfaceVariant = Color(0xFFF5DED7), + onSurfaceVariant = Color(0xFF53433F), + outline = Color(0xFF85736E), + outlineVariant = Color(0xFFD8C2BB), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF382E2B), + inverseOnSurface = Color(0xFFFFEDE8), + inversePrimary = Color(0xFFFFB596), + surfaceDim = Color(0xFFE8D6D1), + surfaceBright = Color(0xFFFFF8F6), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFFFF1ED), + surfaceContainer = Color(0xFFFBEBE7), + surfaceContainerHigh = Color(0xFFF5E5E1), + surfaceContainerHighest = Color(0xFFF0E0DB) + ), + darkColors = ThemeColorSet( + primary = Color(0xFFFFB596), + secondary = Color(0xFFFFB3AE), + tertiary = Color(0xFFF5BF48), + primaryContainer = Color(0xFF943C00), + secondaryContainer = Color(0xFF7F2825), + tertiaryContainer = Color(0xFF5C4300), + onPrimary = Color(0xFF6C2900), + onSecondary = Color(0xFF611211), + onTertiary = Color(0xFF402D00), + onPrimaryContainer = Color(0xFFFFDBC8), + onSecondaryContainer = Color(0xFFFFDAD7), + onTertiaryContainer = Color(0xFFFFDF96), + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFB4AB), + background = Color(0xFF1A110F), + onBackground = Color(0xFFF0E0DB), + surface = Color(0xFF1A110F), + onSurface = Color(0xFFF0E0DB), + surfaceVariant = Color(0xFF53433F), + onSurfaceVariant = Color(0xFFD8C2BB), + outline = Color(0xFFA08C87), + outlineVariant = Color(0xFF53433F), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFF0E0DB), + inverseOnSurface = Color(0xFF382E2B), + inversePrimary = Color(0xFFC55000), + surfaceDim = Color(0xFF1A110F), + surfaceBright = Color(0xFF423734), + surfaceContainerLowest = Color(0xFF140C0A), + surfaceContainerLow = Color(0xFF231917), + surfaceContainer = Color(0xFF271D1B), + surfaceContainerHigh = Color(0xFF322825), + surfaceContainerHighest = Color(0xFF3D322F) + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/CitrusSplashTheme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/CitrusSplashTheme.kt new file mode 100644 index 0000000..1e5b539 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/CitrusSplashTheme.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val CitrusSplashTheme = AppTheme( + name = "Citrus Splash", + lightColors = ThemeColorSet( + primary = Color(0xFFF57F17), // Vibrant Orange (Primary) + secondary = Color(0xFFFBC02D), // Sunny Yellow (Secondary) + tertiary = Color(0xFF7CB342), // Lime Green (Tertiary) + primaryContainer = Color(0xFFFFEBC0), + secondaryContainer = Color(0xFFFFF3AD), + tertiaryContainer = Color(0xFFDDEEBF), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFF000000), + onTertiary = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF2C1600), + onSecondaryContainer = Color(0xFF221B00), + onTertiaryContainer = Color(0xFF131F00), + error = Color(0xFFB00020), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFDE7E9), + onErrorContainer = Color(0xFF4A000B), + background = Color(0xFFFFFDF7), // Warm, off-white background + onBackground = Color(0xFF201A17), // Dark, warm text + surface = Color(0xFFFFFFFF), // Crisp white surface + onSurface = Color(0xFF201A17), + surfaceVariant = Color(0xFFF3EFE9), + onSurfaceVariant = Color(0xFF49453F), + outline = Color(0xFF7A756F), + outlineVariant = Color(0xFFCCC5BD), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF352F2B), + inverseOnSurface = Color(0xFFFBEFE8), + inversePrimary = Color(0xFFFFB86C), + surfaceDim = Color(0xFFE2D8D2), + surfaceBright = Color(0xFFFFFDF7), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFFBF2EC), + surfaceContainer = Color(0xFFF5EDE6), + surfaceContainerHigh = Color(0xFFF0E7E1), + surfaceContainerHighest = Color(0xFFEAE2DC) + ), + darkColors = ThemeColorSet( + primary = Color(0xFFFFB86C), // Lighter orange for dark mode + secondary = Color(0xFFEAC248), // Lighter yellow + tertiary = Color(0xFFB8CF83), // Lighter lime + primaryContainer = Color(0xFF5A4121), + secondaryContainer = Color(0xFF564600), + tertiaryContainer = Color(0xFF404D20), + onPrimary = Color(0xFF4A2A00), + onSecondary = Color(0xFF3A3000), + onTertiary = Color(0xFF2B350A), + onPrimaryContainer = Color(0xFFFFDEB5), + onSecondaryContainer = Color(0xFFFFEAAA), + onTertiaryContainer = Color(0xFFD4EC9C), + error = Color(0xFFCF6679), + onError = Color(0xFF000000), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF1F1A17), // Deep, warm brown/gray + onBackground = Color(0xFFEAE2DC), // Light, warm text + surface = Color(0xFF2A2421), // Slightly lighter warm surface + onSurface = Color(0xFFEAE2DC), + surfaceVariant = Color(0xFF443F3A), + onSurfaceVariant = Color(0xFFC9C6C0), + outline = Color(0xFF938F8A), + outlineVariant = Color(0xFF49453F), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFEAE2DC), + inverseOnSurface = Color(0xFF201A17), + inversePrimary = Color(0xFFF57F17), + surfaceDim = Color(0xFF1F1A17), + surfaceBright = Color(0xFF48403A), + surfaceContainerLowest = Color(0xFF16120F), + surfaceContainerLow = Color(0xFF1F1A17), + surfaceContainer = Color(0xFF241E1B), + surfaceContainerHigh = Color(0xFF2E2925), + surfaceContainerHighest = Color(0xFF39332F), + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/CoffeeTheme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/CoffeeTheme.kt new file mode 100644 index 0000000..f7f7240 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/CoffeeTheme.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val CoffeeTheme = AppTheme( + name = "Coffee", + lightColors = ThemeColorSet( + primary = Color(0xFF7A5944), // Rich Coffee Brown + secondary = Color(0xFF6F5C51), // Muted Brown + tertiary = Color(0xFF9A4524), // NEW: Warm Cinnamon Spice Accent + primaryContainer = Color(0xFFFFDBCA), // Light Creamy Brown + secondaryContainer = Color(0xFFF9DFD0), + tertiaryContainer = Color(0xFFFFDBCF), // NEW: Generated from new tertiary + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF2E1707), + onSecondaryContainer = Color(0xFF271A11), + onTertiaryContainer = Color(0xFF380D00), // NEW: Generated from new tertiary + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFFFF8F6), // Warm Off-White + onBackground = Color(0xFF211A17), // Dark Brown Text + surface = Color(0xFFFFF8F6), + onSurface = Color(0xFF211A17), + surfaceVariant = Color(0xFFF0E0D6), + onSurfaceVariant = Color(0xFF50453D), + outline = Color(0xFF82756C), + outlineVariant = Color(0xFFD4C4B9), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF362F2B), + inverseOnSurface = Color(0xFFFCEEE8), + inversePrimary = Color(0xFFEBBFA8), + surfaceDim = Color(0xFFE4D8D2), + surfaceBright = Color(0xFFFFF8F6), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFF8F2EE), + surfaceContainer = Color(0xFFF2ECE8), + surfaceContainerHigh = Color(0xFFEDE6E2), + surfaceContainerHighest = Color(0xFFE8E1DC) + ), + darkColors = ThemeColorSet( + primary = Color(0xFFD5BFA5), // SOFTER: Light Milky Coffee + secondary = Color(0xFFC9B8AB), // SOFTER: Lighter Muted Brown + tertiary = Color(0xFFFFB59B), // NEW: Light Cinnamon Spice + primaryContainer = Color(0xFF61422E), // Dark Coffee Bean + secondaryContainer = Color(0xFF56443A), + tertiaryContainer = Color(0xFF7B2D0F), // NEW: Generated from new tertiary + onPrimary = Color(0xFF472C1A), + onSecondary = Color(0xFF3F2E25), + onTertiary = Color(0xFF5C1D00), // NEW: Generated from new tertiary + onPrimaryContainer = Color(0xFFFFDBCA), + onSecondaryContainer = Color(0xFFF9DFD0), + onTertiaryContainer = Color(0xFFFFDBCF), // NEW: Generated from new tertiary + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF1C1B1A), // SOFTER: Dark Charcoal Brown + onBackground = Color(0xFFE6E2E0), // SOFTER: Light Cream Text + surface = Color(0xFF1C1B1A), // SOFTER: Dark Charcoal Brown + onSurface = Color(0xFFE6E2E0), // SOFTER: Light Cream Text + surfaceVariant = Color(0xFF50453D), + onSurfaceVariant = Color(0xFFD4C4B9), + outline = Color(0xFF9C8E85), + outlineVariant = Color(0xFF50453D), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFE6E2E0), + inverseOnSurface = Color(0xFF31302F), + inversePrimary = Color(0xFF7A5944), + surfaceDim = Color(0xFF141312), + surfaceBright = Color(0xFF3A3938), + surfaceContainerLowest = Color(0xFF0F0E0D), + surfaceContainerLow = Color(0xFF1C1B1A), + surfaceContainer = Color(0xFF201F1E), + surfaceContainerHigh = Color(0xFF2B2A29), + surfaceContainerHighest = Color(0xFF363433) + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/CrimsonTheme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/CrimsonTheme.kt new file mode 100644 index 0000000..fa34afa --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/CrimsonTheme.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val CrimsonTheme = AppTheme( + name = "Crimson", + lightColors = ThemeColorSet( + primary = Color(0xFFA03F3F), + secondary = Color(0xFF775656), + tertiary = Color(0xFF755A2F), + primaryContainer = Color(0xFFFFDAD9), + secondaryContainer = Color(0xFFFFDAD9), + tertiaryContainer = Color(0xFFFFDEAD), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF410004), + onSecondaryContainer = Color(0xFF2C1515), + onTertiaryContainer = Color(0xFF281900), + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFFCFCFC), + onBackground = Color(0xFF201A1A), + surface = Color(0xFFFCFCFC), + onSurface = Color(0xFF201A1A), + surfaceVariant = Color(0xFFF4DDDD), + onSurfaceVariant = Color(0xFF524343), + outline = Color(0xFF857373), + outlineVariant = Color(0xFFD7C1C1), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF362F2F), + inverseOnSurface = Color(0xFFFBEDED), + inversePrimary = Color(0xFFFFB3B3), + surfaceDim = Color(0xFFE3D7D7), + surfaceBright = Color(0xFFFCFCFC), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFF7F0F0), + surfaceContainer = Color(0xFFF1EAEB), + surfaceContainerHigh = Color(0xFFEBE4E5), + surfaceContainerHighest = Color(0xFFE5DFDF) + ), + darkColors = ThemeColorSet( + primary = Color(0xFFFFB3B3), + secondary = Color(0xFFE6BDBC), + tertiary = Color(0xFFE5C18D), + primaryContainer = Color(0xFF812829), + secondaryContainer = Color(0xFF5D3F3F), + tertiaryContainer = Color(0xFF5B431A), + onPrimary = Color(0xFF611216), + onSecondary = Color(0xFF442929), + onTertiary = Color(0xFF412D05), + onPrimaryContainer = Color(0xFFFFDAD9), + onSecondaryContainer = Color(0xFFFFDAD9), + onTertiaryContainer = Color(0xFFFFDEAD), + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF201A1A), + onBackground = Color(0xFFEBE0E0), + surface = Color(0xFF201A1A), + onSurface = Color(0xFFEBE0E0), + surfaceVariant = Color(0xFF524343), + onSurfaceVariant = Color(0xFFD7C1C1), + outline = Color(0xFFA08C8C), + outlineVariant = Color(0xFF524343), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFEBE0E0), + inverseOnSurface = Color(0xFF362F2F), + inversePrimary = Color(0xFFA03F3F), + surfaceDim = Color(0xFF171212), + surfaceBright = Color(0xFF3E3737), + surfaceContainerLowest = Color(0xFF120D0D), + surfaceContainerLow = Color(0xFF251E1E), + surfaceContainer = Color(0xFF2A2222), + surfaceContainerHigh = Color(0xFF342C2C), + surfaceContainerHighest = Color(0xFF3F3737), + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/CyberPunkTheme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/CyberPunkTheme.kt new file mode 100644 index 0000000..e12464a --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/CyberPunkTheme.kt @@ -0,0 +1,87 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val CyberpunkTheme = AppTheme( + name = "Cyberpunk", + // Corrected Light Theme + lightColors = ThemeColorSet( + primary = Color(0xFF007ACC), + secondary = Color(0xFFE600E6), + tertiary = Color(0xFFD4D400), + primaryContainer = Color(0xFFD1E4FF), + secondaryContainer = Color(0xFFFFD7F7), + tertiaryContainer = Color(0xFFF4F37E), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF001D36), + onSecondaryContainer = Color(0xFF3B0038), + onTertiaryContainer = Color(0xFF272700), + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFF8F9FF), // Light background + onBackground = Color(0xFF191C20), // Dark text + surface = Color(0xFFFFFFFF), // White surface for cards, etc. + onSurface = Color(0xFF191C20), // Dark text on surface + surfaceVariant = Color(0xFFDFE2EB), + onSurfaceVariant = Color(0xFF43474E), + outline = Color(0xFF73777F), + outlineVariant = Color(0xFFC3C7CF), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF2E3135), + inverseOnSurface = Color(0xFFF0F1F6), + inversePrimary = Color(0xFF9FCAFF), + surfaceDim = Color(0xFFD9DADE), + surfaceBright = Color(0xFFF8F9FF), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFF2F3F9), + surfaceContainer = Color(0xFFECEEF3), + surfaceContainerHigh = Color(0xFFE6E8EE), + surfaceContainerHighest = Color(0xFFE1E2E8) + ), + // Unchanged Dark Theme (already correct) + darkColors = ThemeColorSet( + primary = Color(0xFF00BFFF), // Deep Sky Blue + secondary = Color(0xFFFF00FF), // Magenta + tertiary = Color(0xFFFFFF00), // Yellow + primaryContainer = Color(0xFF004C66), + secondaryContainer = Color(0xFF660066), + tertiaryContainer = Color(0xFF666600), + onPrimary = Color(0xFF000000), + onSecondary = Color(0xFF000000), + onTertiary = Color(0xFF000000), + onPrimaryContainer = Color(0xFFB3F0FF), + onSecondaryContainer = Color(0xFFFFB3FF), + onTertiaryContainer = Color(0xFFFFFFB3), + error = Color(0xFFCF6679), + onError = Color(0xFF000000), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF0A0A0A), + onBackground = Color(0xFFEAEAEA), + surface = Color(0xFF121212), + onSurface = Color(0xFFEAEAEA), + surfaceVariant = Color(0xFF1E1E1E), + onSurfaceVariant = Color(0xFFB3B3B3), + outline = Color(0xFF595959), + outlineVariant = Color(0xFF2C2C2C), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFEAEAEA), + inverseOnSurface = Color(0xFF121212), + inversePrimary = Color(0xFF0088CC), + surfaceDim = Color(0xFF0A0A0A), + surfaceBright = Color(0xFF333333), + surfaceContainerLowest = Color(0xFF050505), + surfaceContainerLow = Color(0xFF121212), + surfaceContainer = Color(0xFF1A1A1A), + surfaceContainerHigh = Color(0xFF242424), + surfaceContainerHighest = Color(0xFF2E2E2E), + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/DefaultTheme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/DefaultTheme.kt new file mode 100644 index 0000000..c90df24 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/DefaultTheme.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val DefaultTheme = AppTheme( + name = "Default", + lightColors = ThemeColorSet( + primary = Color(0xFF006D3D), + secondary = Color(0xFF00668A), + tertiary = Color(0xFF7D5260), + primaryContainer = Color(0xFF95F5B3), + secondaryContainer = Color(0xFFBBE9FF), + tertiaryContainer = Color(0xFFFFD8E4), // Changed from light brown + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFFFFFFFF), // Changed + onPrimaryContainer = Color(0xFF00210E), + onSecondaryContainer = Color(0xFF001F2D), + onTertiaryContainer = Color(0xFF31111D), // Changed from dark brown + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF93000A), + background = Color(0xFFF9F9FF), + onBackground = Color(0xFF191C20), + surface = Color(0xFFF9F9FF), + onSurface = Color(0xFF191C20), + surfaceVariant = Color(0xFFDEE2ED), + onSurfaceVariant = Color(0xFF424750), + outline = Color(0xFF727781), + outlineVariant = Color(0xFFC2C6D1), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF2E3035), + inverseOnSurface = Color(0xFFF0F0F6), + inversePrimary = Color(0xFF76D899), + surfaceDim = Color(0xFFD9DADF), + surfaceBright = Color(0xFFF9F9FF), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFF3F3F9), + surfaceContainer = Color(0xFFEDEDF3), + surfaceContainerHigh = Color(0xFFE7E8ED), + surfaceContainerHighest = Color(0xFFE1E2E8) + ), + darkColors = ThemeColorSet( + primary = Color(0xFF76D899), + secondary = Color(0xFF60D4FF), + tertiary = Color(0xFFEFB8C8), // Changed from orange/gold + primaryContainer = Color(0xFF00522B), + secondaryContainer = Color(0xFF004D67), + tertiaryContainer = Color(0xFF633B48), // Changed from dark brown + onPrimary = Color(0xFF00391B), + onSecondary = Color(0xFF003548), + onTertiary = Color(0xFF492532), // Changed from dark brown + onPrimaryContainer = Color(0xFF95F5B3), + onSecondaryContainer = Color(0xFFBBE9FF), + onTertiaryContainer = Color(0xFFFFD8E4), // Changed from light brown + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF111317), + onBackground = Color(0xFFE1E2E8), + surface = Color(0xFF111317), + onSurface = Color(0xFFE1E2E8), + surfaceVariant = Color(0xFF424750), + onSurfaceVariant = Color(0xFFC2C6D1), + outline = Color(0xFF8C919B), + outlineVariant = Color(0xFF424750), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFE1E2E8), + inverseOnSurface = Color(0xFF2E3035), + inversePrimary = Color(0xFF006D3D), + surfaceDim = Color(0xFF111317), + surfaceBright = Color(0xFF37393E), + surfaceContainerLowest = Color(0xFF0C0E12), + surfaceContainerLow = Color(0xFF191C20), + surfaceContainer = Color(0xFF1D2024), + surfaceContainerHigh = Color(0xFF282A2E), + surfaceContainerHighest = Color(0xFF333539) + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/ForestTheme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/ForestTheme.kt new file mode 100644 index 0000000..bfe8f6c --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/ForestTheme.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val ForestTheme = AppTheme( + name = "Forest", + lightColors = ThemeColorSet( + primary = Color(0xFF2E6C25), // Deep Forest Green + secondary = Color(0xFF6D4C41), // Wood Brown + tertiary = Color(0xFF7E5700), // NEW: Golden Amber Accent + primaryContainer = Color(0xFFB0F59E), + secondaryContainer = Color(0xFFF8DFD1), + tertiaryContainer = Color(0xFFFFDEA7), // NEW: Generated from new tertiary + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF002200), + onSecondaryContainer = Color(0xFF261005), + onTertiaryContainer = Color(0xFF281900), // NEW: Generated from new tertiary + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFFCFDF6), // Light, earthy off-white + onBackground = Color(0xFF1A1C19), + surface = Color(0xFFFCFDF6), + onSurface = Color(0xFF1A1C19), + surfaceVariant = Color(0xFFDFE4D7), + onSurfaceVariant = Color(0xFF43483F), + outline = Color(0xFF73796E), + outlineVariant = Color(0xFFC3C8BC), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF2F312D), + inverseOnSurface = Color(0xFFF0F1EB), + inversePrimary = Color(0xFF95D885), + surfaceDim = Color(0xFFDCDDD8), + surfaceBright = Color(0xFFFCFDF6), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFF6F7F0), + surfaceContainer = Color(0xFFF0F1EB), + surfaceContainerHigh = Color(0xFFEAEBE5), + surfaceContainerHighest = Color(0xFFE4E6E0) + ), + darkColors = ThemeColorSet( + primary = Color(0xFF95D885), // Lighter Canopy Green + secondary = Color(0xFFDBBFA9), // Lighter Wood Brown + tertiary = Color(0xFFFCBC4A), // NEW: Bright Golden Amber + primaryContainer = Color(0xFF15530D), + secondaryContainer = Color(0xFF533F34), + tertiaryContainer = Color(0xFF604200), // NEW: Generated from new tertiary + onPrimary = Color(0xFF003A00), // FIX: Correct contrast + onSecondary = Color(0xFF3F2D24), // FIX: Correct contrast + onTertiary = Color(0xFF432D00), // NEW: Generated from new tertiary + onPrimaryContainer = Color(0xFFB0F59E), + onSecondaryContainer = Color(0xFFF8DFD1), + onTertiaryContainer = Color(0xFFFFDEA7), // NEW: Generated from new tertiary + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF1A1C19), // NEW: Deep, dark forest green background + onBackground = Color(0xFFE4E6E0), + surface = Color(0xFF1A1C19), // NEW: Deep, dark forest green background + onSurface = Color(0xFFE4E6E0), + surfaceVariant = Color(0xFF43483F), + onSurfaceVariant = Color(0xFFC3C8BC), + outline = Color(0xFF8D9387), + outlineVariant = Color(0xFF43483F), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFE4E6E0), + inverseOnSurface = Color(0xFF1A1C19), + inversePrimary = Color(0xFF2E6C25), + surfaceDim = Color(0xFF121411), + surfaceBright = Color(0xFF383A36), + surfaceContainerLowest = Color(0xFF0F110E), + surfaceContainerLow = Color(0xFF1A1C19), // FIX: Neutral container colors + surfaceContainer = Color(0xFF1E201D), // FIX: Neutral container colors + surfaceContainerHigh = Color(0xFF282B27), // FIX: Neutral container colors + surfaceContainerHighest = Color(0xFF333631) // FIX: Neutral container colors + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/NordTheme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/NordTheme.kt new file mode 100644 index 0000000..22be732 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/NordTheme.kt @@ -0,0 +1,105 @@ +@file:Suppress("HardCodedStringLiteral", "unused") + +package eu.gaudian.translator.ui.theme.themes + + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +// Official Nord Color Palette +private val nord0 = Color(0xFF2E3440) // Polar Night +private val nord1 = Color(0xFF3B4252) +private val nord2 = Color(0xFF434C5E) +private val nord3 = Color(0xFF4C566A) +private val nord4 = Color(0xFFD8DEE9) // Snow Storm +private val nord5 = Color(0xFFE5E9F0) +private val nord6 = Color(0xFFECEFF4) +private val nord7 = Color(0xFF8FBCBB) // Frost +private val nord8 = Color(0xFF88C0D0) +private val nord9 = Color(0xFF81A1C1) +private val nord10 = Color(0xFF5E81AC) +private val nord11 = Color(0xFFBF616A) // Aurora +private val nord12 = Color(0xFFD08770) +private val nord13 = Color(0xFFEBCB8B) +private val nord14 = Color(0xFFA3BE8C) +private val nord15 = Color(0xFFB48EAD) + + +val NordTheme = AppTheme( + name = "Nord", + lightColors = ThemeColorSet( + primary = nord10, + secondary = nord8, + tertiary = nord15, + primaryContainer = Color(0xFFDCE3F9), + secondaryContainer = Color(0xFFD0EAF3), + tertiaryContainer = Color(0xFFF0DBEB), + onPrimary = Color.White, + onSecondary = nord0, + onTertiary = nord0, + onPrimaryContainer = nord1, + onSecondaryContainer = nord1, + onTertiaryContainer = nord1, + error = nord11, + onError = Color.White, + errorContainer = Color(0xFFF9DEDC), + onErrorContainer = Color(0xFF410E0B), + background = nord6, // Crisper, lighter background + onBackground = nord0, + surface = Color.White, // Pure white surface for a frosty, clean look + onSurface = nord0, + surfaceVariant = nord5, + onSurfaceVariant = nord2, + outline = nord3, + outlineVariant = nord4, + scrim = Color.Black, + inverseSurface = nord1, + inverseOnSurface = nord5, + inversePrimary = nord9, + surfaceDim = nord4, + surfaceBright = nord6, + surfaceContainerLowest = Color.White, + surfaceContainerLow = nord6, + surfaceContainer = nord5, + surfaceContainerHigh = nord4, + surfaceContainerHighest = Color(0xFFD3DAE4) // Slightly darker for top layer + ), + darkColors = ThemeColorSet( + primary = nord9, + secondary = nord8, + tertiary = nord15, + primaryContainer = nord3, + secondaryContainer = nord3, + tertiaryContainer = nord2, + onPrimary = nord0, // Dark text for better contrast + onSecondary = nord0, // Dark text for better contrast + onTertiary = nord0, // Dark text for better contrast + onPrimaryContainer = nord5, + onSecondaryContainer = nord5, + onTertiaryContainer = nord5, + error = nord11, + onError = nord1, + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = nord0, + onBackground = nord5, + surface = nord1, // Lifts surfaces off the background for more depth + onSurface = nord5, + surfaceVariant = nord2, + onSurfaceVariant = nord4, + outline = nord3, + outlineVariant = nord2, + scrim = Color.Black, + inverseSurface = nord5, + inverseOnSurface = nord1, + inversePrimary = nord10, + surfaceDim = nord0, + surfaceBright = nord2, + surfaceContainerLowest = Color(0xFF191C23), // Deepest polar night + surfaceContainerLow = nord0, + surfaceContainer = nord1, + surfaceContainerHigh = nord2, + surfaceContainerHighest = nord3 + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/OceanTheme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/OceanTheme.kt new file mode 100644 index 0000000..d5fce91 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/OceanTheme.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val OceanicCalmTheme = AppTheme( + name = "Oceanic Calm", + lightColors = ThemeColorSet( + primary = Color(0xFF006782), + secondary = Color(0xFF4A626C), + tertiary = Color(0xFF565E7D), + primaryContainer = Color(0xFFBBE9FF), + secondaryContainer = Color(0xFFCDE7F2), + tertiaryContainer = Color(0xFFDDE1FF), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF001F29), + onSecondaryContainer = Color(0xFF051F27), + onTertiaryContainer = Color(0xFF111A36), + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFF7F9FA), + onBackground = Color(0xFF191C1E), + surface = Color(0xFFF7F9FA), + onSurface = Color(0xFF191C1E), + surfaceVariant = Color(0xFFDCE4E8), + onSurfaceVariant = Color(0xFF40484C), + outline = Color(0xFF70787C), + outlineVariant = Color(0xFFC0C8CC), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF2E3133), + inverseOnSurface = Color(0xFFEEF1F3), + inversePrimary = Color(0xFF60D4FF), + surfaceDim = Color(0xFFD8DADD), + surfaceBright = Color(0xFFF7F9FA), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFF1F3F5), + surfaceContainer = Color(0xFFEBEDEE), + surfaceContainerHigh = Color(0xFFE5E7E9), + surfaceContainerHighest = Color(0xFFE0E2E3) + ), + darkColors = ThemeColorSet( + primary = Color(0xFF60D4FF), + secondary = Color(0xFFB2CBD6), + tertiary = Color(0xFFBEC5EB), + primaryContainer = Color(0xFF004D63), + secondaryContainer = Color(0xFF334A54), + tertiaryContainer = Color(0xFF3F4664), + onPrimary = Color(0xFF003545), + onSecondary = Color(0xFF1C343D), + onTertiary = Color(0xFF28304D), + onPrimaryContainer = Color(0xFFBBE9FF), + onSecondaryContainer = Color(0xFFCDE7F2), + onTertiaryContainer = Color(0xFFDDE1FF), + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF191C1E), + onBackground = Color(0xFFE0E2E3), + surface = Color(0xFF191C1E), + onSurface = Color(0xFFE0E2E3), + surfaceVariant = Color(0xFF40484C), + onSurfaceVariant = Color(0xFFC0C8CC), + outline = Color(0xFF8A9296), + outlineVariant = Color(0xFF40484C), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFE0E2E3), + inverseOnSurface = Color(0xFF2E3133), + inversePrimary = Color(0xFF006782), + surfaceDim = Color(0xFF111415), + surfaceBright = Color(0xFF373A3B), + surfaceContainerLowest = Color(0xFF0E1112), + surfaceContainerLow = Color(0xFF191C1E), + surfaceContainer = Color(0xFF1D2022), + surfaceContainerHigh = Color(0xFF272A2C), + surfaceContainerHighest = Color(0xFF323537) + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/Pixel.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/Pixel.kt new file mode 100644 index 0000000..d8706e5 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/Pixel.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val PixelTheme = AppTheme( + name = "Pixel", + lightColors = ThemeColorSet( + primary = Color(0xFF0061A4), + secondary = Color(0xFF535F70), + tertiary = Color(0xFF6B5778), + primaryContainer = Color(0xFFD1E4FF), + secondaryContainer = Color(0xFFD7E3F7), + tertiaryContainer = Color(0xFFF2DAFF), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF001D36), + onSecondaryContainer = Color(0xFF101C2B), + onTertiaryContainer = Color(0xFF251431), + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFFDFCFF), + onBackground = Color(0xFF1A1C1E), + surface = Color(0xFFFDFCFF), + onSurface = Color(0xFF1A1C1E), + surfaceVariant = Color(0xFFDFE2EB), + onSurfaceVariant = Color(0xFF42474E), + outline = Color(0xFF73777F), + outlineVariant = Color(0xFFC2C7CF), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF2F3033), + inverseOnSurface = Color(0xFFF1F0F4), + inversePrimary = Color(0xFF9ECAFF), + surfaceDim = Color(0xFFD9DAE0), + surfaceBright = Color(0xFFF9F9FF), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFF3F3FA), + surfaceContainer = Color(0xFFEDEEF4), + surfaceContainerHigh = Color(0xFFE7E8EE), + surfaceContainerHighest = Color(0xFFE2E2E9) + ), + darkColors = ThemeColorSet( + primary = Color(0xFF9ECAFF), + secondary = Color(0xFFBBC7DB), + tertiary = Color(0xFFD6BEE4), + primaryContainer = Color(0xFF00497D), + secondaryContainer = Color(0xFF3B4858), + tertiaryContainer = Color(0xFF524060), + onPrimary = Color(0xFF003258), + onSecondary = Color(0xFF253141), + onTertiary = Color(0xFF3B2948), + onPrimaryContainer = Color(0xFFD1E4FF), + onSecondaryContainer = Color(0xFFD7E3F7), + onTertiaryContainer = Color(0xFFF2DAFF), + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF1A1C1E), + onBackground = Color(0xFFE2E2E6), + surface = Color(0xFF1A1C1E), + onSurface = Color(0xFFE2E2E6), + surfaceVariant = Color(0xFF42474E), + onSurfaceVariant = Color(0xFFC2C7CF), + outline = Color(0xFF8C9199), + outlineVariant = Color(0xFF42474E), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFE2E2E6), + inverseOnSurface = Color(0xFF1A1C1E), + inversePrimary = Color(0xFF0061A4), + surfaceDim = Color(0xFF121415), + surfaceBright = Color(0xFF383A3C), + surfaceContainerLowest = Color(0xFF0D0F11), + surfaceContainerLow = Color(0xFF1A1C1E), + surfaceContainer = Color(0xFF1E2022), + surfaceContainerHigh = Color(0xFF282A2D), + surfaceContainerHighest = Color(0xFF333538) + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/SakuraTheme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/SakuraTheme.kt new file mode 100644 index 0000000..cfedec2 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/SakuraTheme.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val SakuraTheme = AppTheme( + name = "Blossom Pink", + lightColors = ThemeColorSet( + primary = Color(0xFFB94565), + secondary = Color(0xFF755960), + tertiary = Color(0xFF805537), + primaryContainer = Color(0xFFFFD9DF), + secondaryContainer = Color(0xFFFFD9E2), + tertiaryContainer = Color(0xFFFFDCC2), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF40001F), + onSecondaryContainer = Color(0xFF2B171D), + onTertiaryContainer = Color(0xFF311300), + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFFFF8F7), + onBackground = Color(0xFF221A1C), + surface = Color(0xFFFFF8F7), + onSurface = Color(0xFF221A1C), + surfaceVariant = Color(0xFFF2DEE1), + onSurfaceVariant = Color(0xFF514346), + outline = Color(0xFF837376), + outlineVariant = Color(0xFFD5C2C5), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF382E30), + inverseOnSurface = Color(0xFFFDEDEF), + inversePrimary = Color(0xFFE3B9C2), + surfaceDim = Color(0xFFE8D6D8), + surfaceBright = Color(0xFFFFF8F7), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFFFF0F1), + surfaceContainer = Color(0xFFFCEAEF), + surfaceContainerHigh = Color(0xFFF6E4E9), + surfaceContainerHighest = Color(0xFFF1DEE4) + ), + darkColors = ThemeColorSet( + primary = Color(0xFFE3B9C2), + secondary = Color(0xFFE3BDC6), + tertiary = Color(0xFFF3BC95), + primaryContainer = Color(0xFF982C4D), + secondaryContainer = Color(0xFF5C4148), + tertiaryContainer = Color(0xFF653F22), + onPrimary = Color(0xFF581535), + onSecondary = Color(0xFF422C32), + onTertiary = Color(0xFF4A280D), + onPrimaryContainer = Color(0xFFFFD9DF), + onSecondaryContainer = Color(0xFFFFD9E2), + onTertiaryContainer = Color(0xFFFFDCC2), + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF221A1C), + onBackground = Color(0xFFF1DEE4), + surface = Color(0xFF221A1C), + onSurface = Color(0xFFF1DEE4), + surfaceVariant = Color(0xFF514346), + onSurfaceVariant = Color(0xFFD5C2C5), + outline = Color(0xFF9D8C8F), + outlineVariant = Color(0xFF514346), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFF1DEE4), + inverseOnSurface = Color(0xFF221A1C), + inversePrimary = Color(0xFFB94565), + surfaceDim = Color(0xFF191214), + surfaceBright = Color(0xFF41373A), + surfaceContainerLowest = Color(0xFF140D0F), + surfaceContainerLow = Color(0xFF221A1C), + surfaceContainer = Color(0xFF261E20), + surfaceContainerHigh = Color(0xFF31282A), + surfaceContainerHighest = Color(0xFF3C3335) + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/SlatStoneTheme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/SlatStoneTheme.kt new file mode 100644 index 0000000..91c5efe --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/SlatStoneTheme.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val SlateAndStoneTheme = AppTheme( + name = "Slate & Stone", + lightColors = ThemeColorSet( + primary = Color(0xFF5A6470), + secondary = Color(0xFF72787F), + tertiary = Color(0xFFD4A237), + primaryContainer = Color(0xFFDFE9F5), + secondaryContainer = Color(0xFFDCE3E9), + tertiaryContainer = Color(0xFFFAE0A2), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFF3E2E00), + onPrimaryContainer = Color(0xFF171F2B), + onSecondaryContainer = Color(0xFF2C3136), + onTertiaryContainer = Color(0xFF271A00), + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFF8F9FA), + onBackground = Color(0xFF1B1C1E), + surface = Color(0xFFF8F9FA), + onSurface = Color(0xFF1B1C1E), + surfaceVariant = Color(0xFFE1E2E8), + onSurfaceVariant = Color(0xFF44474B), + outline = Color(0xFF75777C), + outlineVariant = Color(0xFFC5C6CC), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF2F3133), + inverseOnSurface = Color(0xFFF2F0F4), + inversePrimary = Color(0xFFB3C5D8), + surfaceDim = Color(0xFFDAD9DD), + surfaceBright = Color(0xFFF8F9FA), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFF2F3F5), + surfaceContainer = Color(0xFFECEEF0), + surfaceContainerHigh = Color(0xFFE7E8EA), + surfaceContainerHighest = Color(0xFFE1E2E4) + ), + darkColors = ThemeColorSet( + primary = Color(0xFFB3C5D8), + secondary = Color(0xFFBFC7CE), + tertiary = Color(0xFFE0C484), + primaryContainer = Color(0xFF424C58), + secondaryContainer = Color(0xFF595F66), + tertiaryContainer = Color(0xFF5B4300), + onPrimary = Color(0xFF2C3541), + onSecondary = Color(0xFF43484D), + onTertiary = Color(0xFF3F2E00), + onPrimaryContainer = Color(0xFFDFE9F5), + onSecondaryContainer = Color(0xFFDCE3E9), + onTertiaryContainer = Color(0xFFFAE0A2), + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF1D1E20), + onBackground = Color(0xFFE1E2E4), + surface = Color(0xFF1D1E20), + onSurface = Color(0xFFE1E2E4), + surfaceVariant = Color(0xFF44474B), + onSurfaceVariant = Color(0xFFC5C6CC), + outline = Color(0xFF8E9196), + outlineVariant = Color(0xFF44474B), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFE1E2E4), + inverseOnSurface = Color(0xFF2F3133), + inversePrimary = Color(0xFF5A6470), + surfaceDim = Color(0xFF121415), + surfaceBright = Color(0xFF383A3B), + surfaceContainerLowest = Color(0xFF0D0F10), + surfaceContainerLow = Color(0xFF1D1E20), + surfaceContainer = Color(0xFF212224), + surfaceContainerHigh = Color(0xFF2B2D2F), + surfaceContainerHighest = Color(0xFF36383A) + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/SpaceOpera.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/SpaceOpera.kt new file mode 100644 index 0000000..6dc960d --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/SpaceOpera.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val SpaceTheme = AppTheme( + name = "Space Opera", + lightColors = ThemeColorSet( + primary = Color(0xFF3399FF), // Hologram Blue + secondary = Color(0xFFFFA500), // Engine Glow Orange + tertiary = Color(0xFFE0E0E0), + primaryContainer = Color(0xFFD7E8FF), + secondaryContainer = Color(0xFFFFECCF), + tertiaryContainer = Color(0xFFF0F0F0), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFF000000), + onTertiary = Color(0xFF000000), + onPrimaryContainer = Color(0xFF001D35), + onSecondaryContainer = Color(0xFF271A00), + onTertiaryContainer = Color(0xFF1F1F1F), + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFF8F9FA), // Cockpit White + onBackground = Color(0xFF181C20), + surface = Color(0xFFF8F9FA), + onSurface = Color(0xFF181C20), + surfaceVariant = Color(0xFFDEE3EB), + onSurfaceVariant = Color(0xFF42474E), + outline = Color(0xFF72787E), + outlineVariant = Color(0xFFC2C7CE), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF2D3135), + inverseOnSurface = Color(0xFFF0F2F5), + inversePrimary = Color(0xFFADC6FF), + surfaceDim = Color(0xFFD9DADD), + surfaceBright = Color(0xFFF8F9FA), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFF2F3F5), + surfaceContainer = Color(0xFFECEEF0), + surfaceContainerHigh = Color(0xFFE6E8EA), + surfaceContainerHighest = Color(0xFFE1E3E5) + ), + darkColors = ThemeColorSet( + primary = Color(0xFFADC6FF), // Nebula Blue + secondary = Color(0xFFFFB74D), // Thruster Orange + tertiary = Color(0xFFE0E0E0), // Starlight + primaryContainer = Color(0xFF004488), + secondaryContainer = Color(0xFF664200), + tertiaryContainer = Color(0xFF424242), + onPrimary = Color(0xFF002F54), + onSecondary = Color(0xFF3F2800), + onTertiary = Color(0xFF000000), + onPrimaryContainer = Color(0xFFD7E8FF), + onSecondaryContainer = Color(0xFFFFDDBF), + onTertiaryContainer = Color(0xFFFAFAFA), + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF101418), // Deep Space + onBackground = Color(0xFFE2E2E6), + surface = Color(0xFF101418), + onSurface = Color(0xFFE2E2E6), + surfaceVariant = Color(0xFF42474E), + onSurfaceVariant = Color(0xFFC2C7CE), + outline = Color(0xFF8C9198), + outlineVariant = Color(0xFF42474E), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFE2E2E6), + inverseOnSurface = Color(0xFF181C20), + inversePrimary = Color(0xFF3399FF), + surfaceDim = Color(0xFF101418), + surfaceBright = Color(0xFF363A3F), + surfaceContainerLowest = Color(0xFF0B0F13), + surfaceContainerLow = Color(0xFF181C20), + surfaceContainer = Color(0xFF1C2024), + surfaceContainerHigh = Color(0xFF272B2F), + surfaceContainerHighest = Color(0xFF32363A) + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/Synthwave.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/Synthwave.kt new file mode 100644 index 0000000..e74b931 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/Synthwave.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val SynthwaveTheme = AppTheme( + name = "Synthwave '84", + lightColors = ThemeColorSet( + primary = Color(0xFFC50083), // Darker Magenta for light theme contrast + secondary = Color(0xFF006874), // Darker Teal + tertiary = Color(0xFF7A5900), + primaryContainer = Color(0xFFFFD8EC), + secondaryContainer = Color(0xFFB3F0FF), + tertiaryContainer = Color(0xFFFFE26E), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF40002A), + onSecondaryContainer = Color(0xFF001F24), + onTertiaryContainer = Color(0xFF261A00), + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFFDF7FF), // A very light lavender/off-white + onBackground = Color(0xFF1F1A21), // Dark Purple for text + surface = Color(0xFFFDF7FF), + onSurface = Color(0xFF1F1A21), + surfaceVariant = Color(0xFFE8E0F3), + onSurfaceVariant = Color(0xFF49454E), + outline = Color(0xFF7A757E), + outlineVariant = Color(0xFFCBC4CE), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF342F36), + inverseOnSurface = Color(0xFFF5EFF7), + inversePrimary = Color(0xFFF475CB), // The vibrant pink from dark theme + surfaceDim = Color(0xFFE0D8E2), + surfaceBright = Color(0xFFFDF7FF), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFF7F1FA), + surfaceContainer = Color(0xFFF1EBF4), + surfaceContainerHigh = Color(0xFFECE5EE), + surfaceContainerHighest = Color(0xFFE6E0E9) + ), + darkColors = ThemeColorSet( + primary = Color(0xFFF475CB), // Vibrant Magenta + secondary = Color(0xFF6AD9E8), // Electric Cyan + tertiary = Color(0xFFFFD400), // Sunset Yellow + primaryContainer = Color(0xFF660044), + secondaryContainer = Color(0xFF005A66), + tertiaryContainer = Color(0xFF665500), + onPrimary = Color(0xFF50003A), + onSecondary = Color(0xFF00363D), + onTertiary = Color(0xFF352D00), + onPrimaryContainer = Color(0xFFFFD8EC), + onSecondaryContainer = Color(0xFFB3F0FF), + onTertiaryContainer = Color(0xFFFFE26E), + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF1A103C), // Deep Indigo + onBackground = Color(0xFFE0E5FF), // Pale Lavender Text + surface = Color(0xFF1A103C), + onSurface = Color(0xFFE0E5FF), + surfaceVariant = Color(0xFF49454E), + onSurfaceVariant = Color(0xFFCBC4CE), + outline = Color(0xFF948F99), + outlineVariant = Color(0xFF49454E), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFE6E0E9), + inverseOnSurface = Color(0xFF342F36), + inversePrimary = Color(0xFFC50083), + surfaceDim = Color(0xFF151218), + surfaceBright = Color(0xFF3C383E), + surfaceContainerLowest = Color(0xFF100D13), + surfaceContainerLow = Color(0xFF1F1A21), + surfaceContainer = Color(0xFF231E25), + surfaceContainerHigh = Color(0xFF2E292F), + surfaceContainerHighest = Color(0xFF39333A) + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/TealTheme.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/TealTheme.kt new file mode 100644 index 0000000..68e49e8 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/TealTheme.kt @@ -0,0 +1,84 @@ +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +@Suppress("HardCodedStringLiteral") +val TealTheme = AppTheme( + name = "Teal", + lightColors = ThemeColorSet( + primary = Color(0xFF006A62), + secondary = Color(0xFF4A6360), + tertiary = Color(0xFF476278), + primaryContainer = Color(0xFF95F7EB), + secondaryContainer = Color(0xFFCCE8E4), + tertiaryContainer = Color(0xFFCEE6FF), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF00201D), + onSecondaryContainer = Color(0xFF051F1D), + onTertiaryContainer = Color(0xFF001E30), + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFFAFDFA), + onBackground = Color(0xFF191C1C), + surface = Color(0xFFFAFDFA), + onSurface = Color(0xFF191C1C), + surfaceVariant = Color(0xFFDAE5E2), + onSurfaceVariant = Color(0xFF3F4947), + outline = Color(0xFF6F7977), + outlineVariant = Color(0xFFBEC9C6), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF2D3130), + inverseOnSurface = Color(0xFFEFF1F0), + inversePrimary = Color(0xFF79DACA), + surfaceDim = Color(0xFFDADADA), + surfaceBright = Color(0xFFFAFDFA), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFF4F7F5), + surfaceContainer = Color(0xFFEEF2F0), + surfaceContainerHigh = Color(0xFFE8ECE9), + surfaceContainerHighest = Color(0xFFE2E6E4) + ), + darkColors = ThemeColorSet( + primary = Color(0xFF79DACA), + secondary = Color(0xFFB0CCC8), + tertiary = Color(0xFFAFCBE2), + primaryContainer = Color(0xFF00504A), + secondaryContainer = Color(0xFF334B48), + tertiaryContainer = Color(0xFF2F4A5F), + onPrimary = Color(0xFF003732), + onSecondary = Color(0xFF1C3532), + onTertiary = Color(0xFF173347), + onPrimaryContainer = Color(0xFF95F7EB), + onSecondaryContainer = Color(0xFFCCE8E4), + onTertiaryContainer = Color(0xFFCEE6FF), + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF191C1C), + onBackground = Color(0xFFE0E3E2), + surface = Color(0xFF191C1C), + onSurface = Color(0xFFE0E3E2), + surfaceVariant = Color(0xFF3F4947), + onSurfaceVariant = Color(0xFFBEC9C6), + outline = Color(0xFF899391), + outlineVariant = Color(0xFF3F4947), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFE0E3E2), + inverseOnSurface = Color(0xFF2D3130), + inversePrimary = Color(0xFF006A62), + surfaceDim = Color(0xFF111413), + surfaceBright = Color(0xFF373A39), + surfaceContainerLowest = Color(0xFF0C0F0E), + surfaceContainerLow = Color(0xFF1F2221), + surfaceContainer = Color(0xFF232625), + surfaceContainerHigh = Color(0xFF2E3130), + surfaceContainerHighest = Color(0xFF393C3B) + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/ui/theme/themes/ThemeTwilight.kt b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/ThemeTwilight.kt new file mode 100644 index 0000000..446d0d5 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/ui/theme/themes/ThemeTwilight.kt @@ -0,0 +1,85 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.ui.theme.themes + +import androidx.compose.ui.graphics.Color +import eu.gaudian.translator.ui.theme.AppTheme +import eu.gaudian.translator.ui.theme.ThemeColorSet + +val TwilightSerenityTheme = AppTheme( + name = "Twilight Serenity", + lightColors = ThemeColorSet( + primary = Color(0xFF5A52A5), + secondary = Color(0xFF9A4555), + tertiary = Color(0xFF7A5900), + primaryContainer = Color(0xFFE2DFFF), + secondaryContainer = Color(0xFFFFD9DD), + tertiaryContainer = Color(0xFFFFDF9E), + onPrimary = Color(0xFFFFFFFF), + onSecondary = Color(0xFFFFFFFF), + onTertiary = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF16035F), + onSecondaryContainer = Color(0xFF400014), + onTertiaryContainer = Color(0xFF261A00), + error = Color(0xFFBA1A1A), + onError = Color(0xFFFFFFFF), + errorContainer = Color(0xFFFFDAD6), + onErrorContainer = Color(0xFF410002), + background = Color(0xFFFEFBFF), + onBackground = Color(0xFF1C1B20), + surface = Color(0xFFFEFBFF), + onSurface = Color(0xFF1C1B20), + surfaceVariant = Color(0xFFE5E0EC), + onSurfaceVariant = Color(0xFF47454E), + outline = Color(0xFF78757F), + outlineVariant = Color(0xFFC8C4CF), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFF313035), + inverseOnSurface = Color(0xFFF3EFF6), + inversePrimary = Color(0xFFC1C1FF), + surfaceDim = Color(0xFFDED9E0), + surfaceBright = Color(0xFFFEFBFF), + surfaceContainerLowest = Color(0xFFFFFFFF), + surfaceContainerLow = Color(0xFFF8F2FA), + surfaceContainer = Color(0xFFF2ECF4), + surfaceContainerHigh = Color(0xFFECE7EF), + surfaceContainerHighest = Color(0xFFE6E1E9) + ), + darkColors = ThemeColorSet( + primary = Color(0xFFC1C1FF), + secondary = Color(0xFFFFB1BB), + tertiary = Color(0xFFF5BF48), + primaryContainer = Color(0xFF413A8C), + secondaryContainer = Color(0xFF7C2B3E), + tertiaryContainer = Color(0xFF5C4300), + onPrimary = Color(0xFF2C2275), + onSecondary = Color(0xFF5F1328), + onTertiary = Color(0xFF402D00), + onPrimaryContainer = Color(0xFFE2DFFF), + onSecondaryContainer = Color(0xFFFFD9DD), + onTertiaryContainer = Color(0xFFFFDF9E), + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFDAD6), + background = Color(0xFF1C1B20), + onBackground = Color(0xFFE6E1E9), + surface = Color(0xFF1C1B20), + onSurface = Color(0xFFE6E1E9), + surfaceVariant = Color(0xFF47454E), + onSurfaceVariant = Color(0xFFC8C4CF), + outline = Color(0xFF928F99), + outlineVariant = Color(0xFF47454E), + scrim = Color(0xFF000000), + inverseSurface = Color(0xFFE6E1E9), + inverseOnSurface = Color(0xFF313035), + inversePrimary = Color(0xFF5A52A5), + surfaceDim = Color(0xFF141317), + surfaceBright = Color(0xFF3A383E), + surfaceContainerLowest = Color(0xFF0F0E12), + surfaceContainerLow = Color(0xFF1C1B20), + surfaceContainer = Color(0xFF201F24), + surfaceContainerHigh = Color(0xFF2B292F), + surfaceContainerHighest = Color(0xFF36343A) + ) +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/ApiRequestHandler.kt b/app/src/main/java/eu/gaudian/translator/utils/ApiRequestHandler.kt new file mode 100644 index 0000000..295db86 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/ApiRequestHandler.kt @@ -0,0 +1,269 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import android.content.Context +import eu.gaudian.translator.model.LanguageModel +import eu.gaudian.translator.model.communication.ApiLogEntry +import eu.gaudian.translator.model.communication.ApiManager +import eu.gaudian.translator.model.communication.ModelType +import eu.gaudian.translator.model.repository.ApiLogRepository +import eu.gaudian.translator.model.repository.ApiRepository +import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.util.UUID + +interface ApiCallback { + fun onSuccess(translatedText: String?) + fun onFailure(errorMessage: String) +} + +/** + * Enhanced API request handler that serves as the single entry point for all API calls. + * Provides unified JSON parsing, error handling, logging, and response validation. + * + * This class should be the only component that directly calls ApiManager.getCompletion(). + * All services should use this handler for their API requests. + */ +class ApiRequestHandler(private val apiManager: ApiManager, context: Context) { + + private val apiLogRepository = ApiLogRepository(context) + private val jsonHelper = JsonHelper() + val apiRepository = ApiRepository(context) + + + /** + * Executes an API request using a template for type-safe, validated responses. + * This is the preferred method for all API requests. + * + * @param template The request template containing all request configuration + * @return Result containing the parsed response or error + */ + suspend fun executeRequest(template: ApiRequestTemplate): Result { + + val languageModel: LanguageModel? = when (template.modelType) { + ModelType.TRANSLATION -> apiRepository.getTranslationModel().first() + ModelType.EXERCISE -> apiRepository.getExerciseModel().first() + ModelType.VOCABULARY -> apiRepository.getVocabularyModel().first() + ModelType.DICTIONARY -> apiRepository.getDictionaryModel().first() + } + + + return withContext(Dispatchers.IO) { + val startTime = System.currentTimeMillis() + var prompt = "" + + try { + Log.i("ApiRequestHandler", "[${template.serviceName}] Executing API request") + + prompt = template.buildPrompt() + Log.d("ApiRequestHandler", "[${template.serviceName}] Generated prompt: $prompt") + + val rawResponse = getCompletionFromApi(prompt, template.modelType, template.serviceName) + val duration = System.currentTimeMillis() - startTime + + if (rawResponse.isFailure) { + val error = rawResponse.exceptionOrNull() + Log.e("ApiRequestHandler", "[${template.serviceName}] API request failed", error) + logInteraction( + template, prompt, null, error, duration, + providerKey = languageModel?.modelId ?: "", + method = template.modelType.name, + ) + return@withContext Result.failure(error!!) + } + + val responseText = rawResponse.getOrNull()!! + Log.d("ApiRequestHandler", "[${template.serviceName}] Raw API response: $responseText") + + // Log the successful raw response + logInteraction( + template, prompt, responseText, null, duration, + providerKey = languageModel?.modelId ?: "", + method = template.modelType.name, + ) + + // Clean the response text to remove conversational wrappers and Markdown fences + val cleanedResponse = extractJsonFromResponse(responseText) + + // Validate response structure if required fields are specified + if (template.requiredFields.isNotEmpty()) { + if (!jsonHelper.validateRequiredFields(cleanedResponse, template.requiredFields)) { + val errorMsg = "Response missing required fields: ${template.requiredFields}" + Log.e("ApiRequestHandler", "[${template.serviceName}] $errorMsg") + return@withContext Result.failure(ApiValidationException(errorMsg)) + } + } + + // Parse the response using the enhanced JsonHelper + val parseResult = jsonHelper.parseJson(cleanedResponse, template.responseSerializer, template.serviceName) + + if (parseResult.isSuccess) { + Log.i("ApiRequestHandler", "[${template.serviceName}] API request completed successfully") + } + + parseResult + } catch (e: Exception) { + val duration = System.currentTimeMillis() - startTime + Log.e("ApiRequestHandler", "[${template.serviceName}] Unexpected error during API request", e) + // Log the unexpected exception if we haven't logged a response yet + logInteraction( + template, prompt, null, e, duration, + providerKey = languageModel?.modelId ?: "", + method = template.modelType.name, + ) + Result.failure(ApiRequestException("Unexpected error in ${template.serviceName}", e)) + } + } + } + + /** + * Logs the API interaction to the database. + */ + private fun logInteraction( + template: ApiRequestTemplate, + prompt: String, + response: String?, + error: Throwable?, + duration: Long, + providerKey: String, + method: String, + + ) { + try { + val entry = ApiLogEntry( + id = UUID.randomUUID().toString(), + timestamp = System.currentTimeMillis(), + providerKey = providerKey, + endpoint = template.serviceName, + method = method, + model = template.modelType.name, + requestJson = prompt, + responseCode = if (error == null) 200 else 500, + responseMessage = error?.message ?: "Success", + responseJson = response, + errorMessage = error?.message, + durationMs = duration, + exceptionType = error?.javaClass?.simpleName, + isTimeout = false, + parseErrorMessage = null, + url = null + ) + // Fire and forget logging + CoroutineScope(Dispatchers.IO).launch { + try { + apiLogRepository.addLog(entry) + } catch (e: Exception) { + Log.e("ApiRequestHandler", "Failed to save API log", e) + } + } + } catch (e: Exception) { + Log.e("ApiRequestHandler", "Failed to create API log entry", e) + } + } + + /** + * Robostly extracts JSON from an API response string. + * Handles: + * 1. Markdown code blocks (```json ... ```) + * 2. Conversational wrapping ("Here is the JSON: ...") + * 3. Raw JSON + */ + private fun extractJsonFromResponse(text: String): String { + val trimmed = text.trim() + + // 1. Try to find content within Markdown code blocks + // This regex looks for ``` (optional json) ... content ... ``` + val codeBlockRegex = Regex("```(?:json)?\\s*([\\s\\S]*?)\\s*```", RegexOption.IGNORE_CASE) + val match = codeBlockRegex.find(trimmed) + if (match != null) { + return match.groupValues[1].trim() + } + + // 2. If no code block is found, try to find the outermost JSON structure (Object or Array) + val firstBrace = trimmed.indexOf('{') + val firstBracket = trimmed.indexOf('[') + + var startIndex = -1 + var endIndex = -1 + + // Determine if we should look for an Object {} or an Array [] + // We pick whichever appears first + if (firstBrace != -1 && (firstBracket == -1 || firstBrace < firstBracket)) { + startIndex = firstBrace + endIndex = trimmed.lastIndexOf('}') + } else if (firstBracket != -1) { + startIndex = firstBracket + endIndex = trimmed.lastIndexOf(']') + } + + if (startIndex != -1 && endIndex != -1 && endIndex > startIndex) { + return trimmed.substring(startIndex, endIndex + 1) + } + + // 3. Fallback: return the original text (parsing will likely fail if it's not valid JSON) + return trimmed + } + + /** + * Internal method to get completion from API manager. + * This is the only place that should call ApiManager.getCompletion(). + */ + private suspend fun getCompletionFromApi( + prompt: String, + modelType: ModelType, + serviceName: String + ): Result { + val deferred = CompletableDeferred>() + + + + try { + apiManager.getCompletion( + prompt = prompt, + callback = object : ApiCallback { + override fun onSuccess(translatedText: String?) { + if (translatedText.isNullOrBlank()) { + val errorMsg = "API returned an empty response" + Log.e("ApiRequestHandler", "[$serviceName] $errorMsg") + deferred.complete(Result.failure(ApiResponseException(errorMsg))) + return + } + Log.d("ApiRequestHandler", "[$serviceName] API response received successfully") + deferred.complete(Result.success(translatedText)) + } + + override fun onFailure(errorMessage: String) { + Log.e("ApiRequestHandler", "[$serviceName] API failure: $errorMessage") + deferred.complete(Result.failure(ApiResponseException(errorMessage))) + } + }, + modelType = modelType + ) + } catch (e: Exception) { + Log.e("ApiRequestHandler", "[$serviceName] Error calling API manager", e) + deferred.complete(Result.failure(ApiRequestException("Error calling API manager", e))) + } + + return deferred.await() + } +} + +/** + * Custom exception for API request errors. + */ +class ApiRequestException(message: String, cause: Throwable? = null) : Exception(message, cause) + +/** + * Custom exception for API response errors. + */ +class ApiResponseException(message: String, cause: Throwable? = null) : Exception(message, cause) + +/** + * Custom exception for API validation errors. + */ +class ApiValidationException(message: String, cause: Throwable? = null) : Exception(message, cause) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/ApiRequestTemplates.kt b/app/src/main/java/eu/gaudian/translator/utils/ApiRequestTemplates.kt new file mode 100644 index 0000000..0c4b4b8 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/ApiRequestTemplates.kt @@ -0,0 +1,477 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import eu.gaudian.translator.model.communication.ModelType +import kotlinx.serialization.KSerializer +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonElement + +/** + * Unified interface for all API request templates. + * Provides a consistent way to define API requests across all services. + */ +interface ApiRequestTemplate { + /** + * The serializer for the expected response type + */ + val responseSerializer: KSerializer + + /** + * The model type to use for this request + */ + val modelType: ModelType + + /** + * The service name for logging purposes + */ + val serviceName: String + + /** + * Builds the prompt for the API request + */ + fun buildPrompt(): String + + /** + * Required fields that should be present in the JSON response + */ + val requiredFields: List get() = emptyList() +} + +/** + * Base class for API request templates with common functionality. + */ +abstract class BaseApiRequestTemplate : ApiRequestTemplate { + + protected val promptBuilder = PromptBuilder("") + + /** + * Adds a detail to the prompt + */ + protected fun addDetail(detail: String): BaseApiRequestTemplate { + promptBuilder.addDetail(detail) + return this + } + + /** + * Sets the JSON response structure description + */ + protected fun withJsonResponse(description: String): BaseApiRequestTemplate { + promptBuilder.withJsonResponse(description) + return this + } + + /** + * Adds an example to the prompt + */ + protected fun withExample(example: String): BaseApiRequestTemplate { + promptBuilder.withExample(example) + return this + } + + override fun buildPrompt(): String = promptBuilder.build() +} + +/** + * Template for dictionary word definition requests + */ +class DictionaryDefinitionRequest( + word: String, + language: String, + requestedParts: String +) : BaseApiRequestTemplate() { + + override val responseSerializer = DictionaryApiResponse.serializer() + override val modelType = ModelType.DICTIONARY + override val serviceName = "DictionaryService" + override val requiredFields = listOf("word", "parts") + + init { + promptBuilder.basePrompt = "Act as a dictionary. Define the word '$word' in $language." + addDetail("Provide the following parts: $requestedParts.") + withJsonResponse("a JSON object with a 'word' key (the original word being defined) and a 'parts' array. Each item in the 'parts' array must be an object with a 'title' (e.g., 'Definition', 'Origin') and a 'content' key (the corresponding text).") + } +} + +/** + * Template for example sentence requests + */ +class ExampleSentenceRequest( + word: String, + wordTranslation: String, + languageFirst: String, + languageSecond: String +) : BaseApiRequestTemplate() { + + override val responseSerializer = ExampleSentenceApiResponse.serializer() + override val modelType = ModelType.DICTIONARY + override val serviceName = "DictionaryService" + override val requiredFields = listOf("word", "sourceSentence", "targetSentence") + + init { + promptBuilder.basePrompt = "Provide one short, simple and clear example sentence for the word '$word' in $languageFirst and fully translate the sentence to $languageSecond, using $wordTranslation as a translation." + addDetail("Structure: { 'word': string, 'sourceSentence': string, 'targetSentence': string }.") + addDetail("Only include the fields above. Keep sentences concise and clear. Do not include any explanations or additional text.") + withJsonResponse("a JSON object with 'word' (the original word), 'sourceSentence' (the example sentence in the source language), and 'targetSentence' (the translation in the target language). Ensure all values are properly quoted strings.") + } +} + +/** + * Template for vocabulary translation requests + */ +class VocabularyTranslationRequest( + words: List, + languageFirst: String, + languageSecond: String +) : BaseApiRequestTemplate() { + + override val responseSerializer = VocabularyApiResponse.serializer() + override val modelType = ModelType.VOCABULARY + override val serviceName = "VocabularyService" + override val requiredFields = listOf("flashcards") + + init { + val wordsJson = Json { ignoreUnknownKeys = true; isLenient = true } + .encodeToString(words.filter { it.isNotBlank() }.distinct()) + + promptBuilder.basePrompt = "Translate a list of words between two languages." + addDetail("Source language: $languageFirst. Target language: $languageSecond.") + addDetail("Translate each source word to the target language as concise vocabulary, not sentences.") + addDetail("Here is the JSON array of words: $wordsJson") + withJsonResponse("a 'flashcards' array, where each item has 'front' and 'back' objects with 'language' and 'word'. The 'front' must be in $languageFirst and the 'back' in $languageSecond.") + } +} + +/** + * Template for text translation requests + */ +class TextTranslationRequest( + text: String, + sourceLanguage: String, + targetLanguage: String, + additionalInstructions: String = "" +) : BaseApiRequestTemplate() { + + override val responseSerializer = TranslationApiResponse.serializer() + override val modelType = ModelType.TRANSLATION + override val serviceName = "TranslationService" + override val requiredFields = listOf("translatedText") + + init { + promptBuilder.basePrompt = "Translate the following from $sourceLanguage to $targetLanguage: '$text'" + addDetail("Act like a translator and translate everything and don't return anything else.") + if (additionalInstructions.isNotBlank()) { + addDetail("Additional instructions: $additionalInstructions") + } + withJsonResponse("a JSON object with a single key 'translatedText' containing only the final translation string, without any extra commentary or formatting.") + } +} + +/** + * Template for translation explanation + */ +class TranslationExplanationRequest( + sourceText: String, + translatedText: String, + sourceLanguage: String, + targetLanguage: String +) : BaseApiRequestTemplate() { + override val responseSerializer = ExplanationApiResponse.serializer() + override val modelType = ModelType.TRANSLATION + override val serviceName = "TranslationService" + override val requiredFields = listOf("explanation") + + init { + promptBuilder.basePrompt = "Explain briefly the translation choice when translating from $sourceLanguage to $targetLanguage." + addDetail("Source: '$sourceText'") + addDetail("Translation: '$translatedText'") + addDetail("Focus on key word choices, grammar, tone, and word order.") + withJsonResponse("a JSON object with a single key 'explanation' containing a concise explanation (1-2 sentences) in $sourceLanguage.") + } +} + +/** + * Template for rephrasing translations + */ +class RephraseRequest( + sourceText: String, + currentTranslation: String, + originalWord: String, + chosenAlternative: String, + sourceLanguage: String, + targetLanguage: String +) : BaseApiRequestTemplate() { + override val responseSerializer = TranslationApiResponse.serializer() + override val modelType = ModelType.TRANSLATION + override val serviceName = "TranslationService" + override val requiredFields = listOf("translatedText") + + init { + promptBuilder.basePrompt = "You are improving a translation from $sourceLanguage to $targetLanguage." + addDetail("Current translation: '$currentTranslation'.") + addDetail("Replace or adapt the word/phrase '$originalWord' with '$chosenAlternative' in a natural way.") + addDetail("Adjust grammar, word order, articles, agreement, and tone as needed so the whole sentence reads naturally in $targetLanguage.") + addDetail("Source text: '$sourceText'") + withJsonResponse("a JSON object with a single key 'translatedText' containing only the updated translation sentence.") + } +} + +/** + * Template for generating a simple list of synonyms (strings) + */ +class SynonymListRequest( + word: String, + language: String, + contextPhrase: String? = null +) : BaseApiRequestTemplate() { + override val responseSerializer = StringListApiResponse.serializer() + override val modelType = ModelType.TRANSLATION + override val serviceName = "TranslationService" + override val requiredFields = listOf("items") + + init { + promptBuilder.basePrompt = "Act like a native speaker and provide multiple alternative forms/ways for the word '$word' in the language $language." + if (!contextPhrase.isNullOrBlank()) { + addDetail("The alternative forms/words must be fitting with the context: '$contextPhrase' and retain the original meaning of the context. All alternative forms must be in the same language: $language. Do not add any additional explanations") + } + withJsonResponse("a JSON object with a key 'items' containing an array of unique strings.") + } +} + + +/** + * Template for text correction requests + */ +class TextCorrectionRequest( + textToCorrect: String, + language: String, + grammarOnly: Boolean, + tone: String? +) : BaseApiRequestTemplate() { + + override val responseSerializer = CorrectionResponse.serializer() + override val modelType = ModelType.DICTIONARY + override val serviceName = "CorrectionService" + override val requiredFields = listOf("correctedText", "explanation") + + init { + val base = "Correct the grammar, spelling, and punctuation of the text, which is in $language." + val extra = when { + grammarOnly -> " Do not change tone, style, or word choice beyond necessary corrections." + !tone.isNullOrBlank() -> " Also, rewrite the text in a $tone tone while preserving the original meaning." + else -> "" + } + + promptBuilder.basePrompt = base + extra + withJsonResponse("containing two keys: \"correctedText\" (the fully corrected text) and \"explanation\" (a brief, one-sentence explanation of the changes).") + withExample(textToCorrect) + } +} + +/** + * Template for word of the day requests + */ +class WordOfTheDayRequest( + language: String, + category: String +) : BaseApiRequestTemplate() { + + override val responseSerializer = DictionaryApiResponse.serializer() + override val modelType = ModelType.DICTIONARY + override val serviceName = "DictionaryService" + override val requiredFields = listOf("word", "parts") + + init { + promptBuilder.basePrompt = "Provide an interesting and uncommon word and its definition in $language from the category of '$category'." + withJsonResponse("a JSON object with a 'word' key and a 'parts' array. The 'parts' array should contain exactly one object with its 'title' as 'Definition' and 'content' as the definition of the word.") + } +} + +/** + * Template for etymology requests + */ +class EtymologyRequest( + word: String, + language: String +) : BaseApiRequestTemplate() { + + override val responseSerializer = EtymologyApiResponse.serializer() + override val modelType = ModelType.DICTIONARY + override val serviceName = "DictionaryService" + override val requiredFields = listOf("word", "timeline", "relatedWords") + + init { + promptBuilder.basePrompt = "Provide a detailed etymology for the word '$word' in $language." + addDetail("Return strictly valid JSON (RFC 8259): double-quoted keys and string values, no comments, no trailing commas, no markdown fences.") + addDetail("Structure: { 'word': string, 'timeline': EtymologyStep[], 'relatedWords': RelatedWord[] }.") + addDetail("EtymologyStep: { 'year': string, 'language': string, 'description': string }. Year may be an exact year like '1883' or ranges/periods like '1890s' or '20th century'.") + addDetail("RelatedWord: { 'language': string, 'word': string }.") + addDetail("Only include the fields above. Keep descriptions concise and factual. Sort timeline chronologically when possible.") + withJsonResponse("a JSON object with 'word', 'timeline' (array of objects with 'year' (string), 'language' (string), 'description' (string)), and 'relatedWords' (array of objects with 'language' and 'word'). Ensure all values are properly quoted strings; no numbers for 'year'.") + } +} + +/** + * Template for generating vocabulary items + */ +class VocabularyGenerationRequest( + category: String, + languageFirst: String, + languageSecond: String, + amount: Int, + customPrompt: String = "" +) : BaseApiRequestTemplate() { + + override val responseSerializer = VocabularyApiResponse.serializer() + override val modelType = ModelType.VOCABULARY + override val serviceName = "VocabularyService" + override val requiredFields = listOf("flashcards") + + init { + promptBuilder.basePrompt = "Your task is to create exactly $amount unique vocabulary flashcards for the category '$category'." + addDetail("Each flashcard must have a 'front' side in $languageFirst and a 'back' side in $languageSecond.") + addDetail("Each side must contain exactly one word, sentence, phrase or interjection.") + addDetail("STRICT FORMATTING RULE: Do not include any parenthetical explanations, grammatical context (e.g. 'formal', 'plural', 'masculine'), or usage notes inside the content strings.") + addDetail("Example: Write 'your', NOT 'your (informal)'. Write 'sie', NOT 'sie (they)'.") + addDetail("If a word is ambiguous, provide ONLY the word itself without disambiguation.") + if (customPrompt.isNotBlank()) { + addDetail(customPrompt) + } + withJsonResponse("a 'flashcards' array. Each object in the array must have a 'front' object and a 'back' object. The 'front' object must contain 'language': '$languageFirst' and 'word': '{the word}'. The 'back' object must contain 'language': '$languageSecond' and 'word': '{the translation}'.") + } +} + +/** + * Template for generating synonyms with proximity + */ +class SynonymGenerationRequest( + amount: Int, + language: String, + term: String, + translation: String, + translationLanguage: String, + languageCode: String +) : BaseApiRequestTemplate() { + + override val responseSerializer = SynonymApiResponse.serializer() + override val modelType = ModelType.VOCABULARY + override val serviceName = "VocabularyService" + override val requiredFields = listOf("synonyms") + + init { + promptBuilder.basePrompt = "Act as a native $language speaker. Generate $amount synonyms for the term '$term' in the $language language (ISO 639-1 code: $languageCode). The term's translation is '$translation' in $translationLanguage. For each synonym, evaluate its proximity to the original term as a percentage (100% being an identical meaning, lower percentages for broader or related terms). Respond with a JSON object containing a 'synonyms' array. Each object in the array should have a 'word' (the synonym) and a 'proximity' (the percentage as an integer). Do not return anything else." + } +} + +/** + * Template for Grammar Classification + */ +class GrammarClassificationRequest( + wordsToClassifyJson: String, + possibleCategories: String +) : BaseApiRequestTemplate() { + override val responseSerializer = VocabularyService.BatchClassificationResponse.serializer() + override val modelType = ModelType.VOCABULARY + override val serviceName = "VocabularyService" + override val requiredFields = listOf("results") + + init { + promptBuilder.basePrompt = "For each word in the JSON array, determine its grammatical category." + addDetail("Possible categories are: $possibleCategories") + withJsonResponse("a 'results' array, each with the original 'id' and the determined 'category'.") + addDetail("Here is the JSON array: $wordsToClassifyJson") + } +} + +/** + * Template for Grammar Features + */ +class GrammarFeaturesRequest( + val prompt: String +) : ApiRequestTemplate { + override val responseSerializer = VocabularyService.BatchGrammarResponse.serializer() + override val modelType = ModelType.VOCABULARY + override val serviceName = "VocabularyService" + override fun buildPrompt() = prompt + // Note: The prompt is pre-built in VocabularyService because it is highly dynamic based on config +} + + +/** + * A generic request template that allows passing a raw prompt string and receiving a JsonElement. + * Useful for complex services like ExerciseService where the prompt generation logic is external + * and the response parsing is manual. + */ +class DynamicJsonRequest( + private val prompt: String, + override val modelType: ModelType, + override val serviceName: String +) : ApiRequestTemplate { + override val responseSerializer = JsonElement.serializer() + override fun buildPrompt(): String = prompt +} + + +// Response data classes +@kotlinx.serialization.Serializable +data class DictionaryApiResponse( + val word: String, + val parts: List +) + +@kotlinx.serialization.Serializable +data class ExampleSentenceApiResponse( + val word: String, + val sourceSentence: String, + val targetSentence: String +) + +@kotlinx.serialization.Serializable +data class VocabularyApiResponse( + val flashcards: List +) + +@kotlinx.serialization.Serializable +data class Flashcard( + val front: CardSide, + val back: CardSide +) + +@kotlinx.serialization.Serializable +data class CardSide( + val language: String, + val word: String +) + +@kotlinx.serialization.Serializable +data class TranslationApiResponse( + val translatedText: String +) + +@kotlinx.serialization.Serializable +data class ExplanationApiResponse( + val explanation: String +) + +@kotlinx.serialization.Serializable +data class StringListApiResponse( + val items: List +) + +@kotlinx.serialization.Serializable +data class CorrectionResponse( + val correctedText: String, + val explanation: String +) + +@kotlinx.serialization.Serializable +data class EtymologyApiResponse( + val word: String, + val timeline: List = emptyList(), + val relatedWords: List = emptyList() +) + +@kotlinx.serialization.Serializable +data class SynonymApiResponse( + val synonyms: List +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/ContextExtensions.kt b/app/src/main/java/eu/gaudian/translator/utils/ContextExtensions.kt new file mode 100644 index 0000000..9dab645 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/ContextExtensions.kt @@ -0,0 +1,14 @@ +package eu.gaudian.translator.utils + +import android.content.Context +import android.content.ContextWrapper +import androidx.activity.ComponentActivity + +fun Context.findActivity(): ComponentActivity { + var context = this + while (context is ContextWrapper) { + if (context is ComponentActivity) return context + context = context.baseContext + } + throw IllegalStateException("Context is not an Activity. Ensure this Composable is running inside a ComponentActivity.") +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/CorrectionService.kt b/app/src/main/java/eu/gaudian/translator/utils/CorrectionService.kt new file mode 100644 index 0000000..0935319 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/CorrectionService.kt @@ -0,0 +1,36 @@ +package eu.gaudian.translator.utils + +import android.content.Context +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.communication.ApiManager +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + + +class CorrectionService(context: Context) { + + private val apiRequestHandler = ApiRequestHandler( + ApiManager(context), + context = context + ) + + suspend fun correctText( + textToCorrect: String, + language: Language, + grammarOnly: Boolean, + tone: String? + ): Result = withContext(Dispatchers.IO) { + + @Suppress("HardCodedStringLiteral") + Log.d("correctText", "$textToCorrect, ${language.englishName}, tone:$tone") + + val template = TextCorrectionRequest( + textToCorrect = textToCorrect, + language = language.englishName, + grammarOnly = grammarOnly, + tone = tone + ) + + apiRequestHandler.executeRequest(template) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/ExerciseHelpers.kt b/app/src/main/java/eu/gaudian/translator/utils/ExerciseHelpers.kt new file mode 100644 index 0000000..7b3fabe --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/ExerciseHelpers.kt @@ -0,0 +1,249 @@ +@file:Suppress("HardCodedStringLiteral", "RegExpRedundantEscape") + +package eu.gaudian.translator.utils + +import eu.gaudian.translator.model.CategorizationQuestion +import eu.gaudian.translator.model.FillInTheBlankQuestion +import eu.gaudian.translator.model.ListeningComprehensionQuestion +import eu.gaudian.translator.model.MatchingPairsQuestion +import eu.gaudian.translator.model.MultipleChoiceQuestion +import eu.gaudian.translator.model.Question +import eu.gaudian.translator.model.TrueFalseQuestion +import eu.gaudian.translator.model.VocabularyTestQuestion +import eu.gaudian.translator.model.WordOrderQuestion +import org.json.JSONObject +import java.util.UUID +import kotlin.reflect.KClass + +object ExercisePromptGenerator { + + fun generateVocabularyPrompt(exerciseTitle: String, languageFirst: String, languageSecond: String): String { + return """ + Generate exactly 10 unique and relevant vocabulary flashcards related to the exercise topic: "$exerciseTitle". + The languages are $languageFirst and $languageSecond. + Return a single JSON object where keys are the words in "$languageFirst" and values are their translations in "$languageSecond". + """.trimIndent() + } + + fun generateExerciseShellPrompt(category: String): String { + return """ + Generate a concise title for an language exercise about "$category". + Return a single JSON object with the key "exerciseTitle". + """.trimIndent() + } + + fun generateContextPrompt( + category: String, + difficulty: String, + languageFirst: String?, + languageSecond: String? + ): String { + val langInfo = if (languageFirst != null && languageSecond != null) { + "The text must be in '$languageSecond' (target language). If a dialogue is used, speakers can be generic (A/B). Optionally provide inline glosses or simple vocabulary in $languageFirst if needed in the context title only." + } else "" + val style = if (difficulty.equals("easy", true)) { + "Write a very short, rudimentary 2-4 line dialogue suitable for beginners." + } else if (difficulty.equals("hard", true)) { + "Write a more complex paragraph (5-8 sentences) on the topic with natural language and a few advanced structures." + } else { + "Write a short paragraph (3-5 sentences) or a simple dialogue." + } + return """ + Create a self-contained context text for an exercise about "$category". + $style + $langInfo + Return a JSON object with keys: + - "contextTitle": a short title for the text (string), + - "contextText": the full text (string). + """.trimIndent() + } + + fun generateQuestionsPrompt( + exerciseTitle: String, + optionalVocabulary: List, + questionTypes: List>, + difficulty: String, + amount: Int, + languageFirst: String, + languageSecond: String, + contextText: String? = null + ): String { + Log.d("ExercisePromptGenerator", "Generating questions for exercise: $exerciseTitle, difficulty: $difficulty, amount: $amount, types: ${questionTypes.joinToString(", ")}, context: $contextText, vocab: $optionalVocabulary, languageFirst: $languageFirst, languageSecond: $languageSecond") + val typeNames = questionTypes.joinToString(", ") { it.simpleName ?: "question" } + return """ + Generate a related set of $amount of Duolingo-like questions for an exercise titled "$exerciseTitle". + The difficulty should be "$difficulty". + The question types should be: $typeNames. + include the following vocabulary words: ${optionalVocabulary.joinToString(", ")}.${if (optionalVocabulary.isNotEmpty()) " (Use them where natural.)" else ""} + ${if (contextText != null) "All questions MUST be answerable solely based on the following passage. Use it as the context and do NOT require external knowledge.\nPASSAGE:\n\"\"\"$contextText\"\"\"" else "Generate questions that are coherent as a set."} + "The exercise should use the languages '$languageFirst' (from) and '$languageSecond' (to). Use these languages for all question content and translations. For VocabularyTestQuestion, set languageDirection to \"$languageFirst -> $languageSecond\"." + + Return a single JSON object containing one key, "questions", which holds a JSON array of the question objects. + Each object in the array must have a "type" field and a "name" field (the question prompt). + Based on the "type", include these additional fields: + - For "TrueFalseQuestion": "correctAnswer" (boolean), "explanation" (string explaining why the statement is true or false, aimed at a learner; keep it concise). + - For "MultipleChoiceQuestion": "options" (array of strings), "correctAnswerIndex" (integer). + - For "FillInTheBlankQuestion": "name" should contain "___" for the blank, and add a "correctAnswer" (string) field. Also include optional "hintBaseForm" (e.g., base verb like "to be") and "hintOptions" (array of 2-4 strings including the correct word and plausible distractors). + - For "WordOrderQuestion": "words" (array of scrambled strings), "correctOrder" (array of strings in the correct order to form the sequence). + - For "MatchingPairsQuestion": "pairs" (a JSON object of key-value strings to match) 5 pairs max. + - For "ListeningComprehensionQuestion": "name" (the sentence to speak), "languageCode" (language code the sentence is in e.g., "en-US"). + - For "CategorizationQuestion": "items" (array of at least 6 strings to categorize), "categories" (array of at least 2 category names, fitting to the topic of the exercise), "correctMapping" (a JSON object mapping each item to its category). + - For "VocabularyTestQuestion": "name" (the word to translate), "correctAnswer" (the translation), "languageDirection" (string like "$languageFirst -> $languageSecond"). + """.trimIndent() + } +} + +object ExerciseParser { + + fun parseExerciseContext(response: String): Pair? { + // Be robust to minor JSON issues from LLMs (smart quotes, trailing commas, code fences) + fun sanitize(input: String): String { + var s = input + // Strip Markdown code fences if present + s = s.replace("^```[a-zA-Z0-9_\\-]*\\s*".toRegex(), "") + .replace("\\s*```$".toRegex(), "") + // Normalize smart quotes to ASCII + s = s.replace("[“”]".toRegex(), "\"") + .replace("[‘’]".toRegex(), "'") + // Remove trailing commas before } or ] + s = s.replace(",\\s*(?=[}\\]])".toRegex(), "") + return s.trim() + } + return try { + val cleaned = cleanJsonString(response) + val sanitized = sanitize(cleaned) + val jsonObject = JSONObject(sanitized) + val title = if (jsonObject.has("contextTitle")) jsonObject.optString("contextTitle", "") else "" + val text = jsonObject.optString("contextText", "") + if (text.isNotBlank()) Pair(title, text) else throw Exception("contextText missing") + } catch (e: Exception) { + // Fallback: try relaxed regex extraction + return try { + val sanitized = sanitize(cleanJsonString(response)) + val titleRegex = "\\\"contextTitle\\\"\\s*:\\s*\\\"([\\s\\S]*?)\\\"".toRegex() + val textRegex = "\\\"contextText\\\"\\s*:\\s*\\\"([\\s\\S]*?)\\\"".toRegex() + val titleMatch = titleRegex.find(sanitized) + val textMatch = textRegex.find(sanitized) + val title = titleMatch?.groups?.get(1)?.value ?: "" + val text = textMatch?.groups?.get(1)?.value ?: "" + if (text.isNotBlank()) Pair(title, text) else throw Exception("Regex fallback failed") + } catch (_: Exception) { + Log.e("ExerciseParser", "Failed to parse exercise context: $response", e) + null + } + } + } + + private fun cleanJsonString(response: String): String { + val firstBrace = response.indexOf('{') + val firstBracket = response.indexOf('[') + + val startIndex = when { + firstBrace == -1 -> firstBracket + firstBracket == -1 -> firstBrace + else -> minOf(firstBrace, firstBracket) + } + + if (startIndex == -1) return response + + val lastBrace = response.lastIndexOf('}') + val lastBracket = response.lastIndexOf(']') + + val endIndex = maxOf(lastBrace, lastBracket) + + if (endIndex == -1) return response + + return response.substring(startIndex, endIndex + 1) + } + + fun parseExerciseShell(response: String): Pair? { + return try { + val cleanedJson = cleanJsonString(response) + val jsonObject = JSONObject(cleanedJson) + val id = UUID.randomUUID().toString() + val title = jsonObject.getString("exerciseTitle") + Pair(id, title) + } catch (e: Exception) { + Log.e("ExerciseParser", "Failed to parse exercise shell: $response", e) + null + } + } + + fun parseQuestions(response: String): List { + return try { + val cleanedJson = cleanJsonString(response) + val rootObject = JSONObject(cleanedJson) + val jsonArray = rootObject.getJSONArray("questions") + + val questions = mutableListOf() + var nextId = (1..10000).random() + + for (i in 0 until jsonArray.length()) { + val qObject = jsonArray.getJSONObject(i) + val type = qObject.getString("type") + + // Provide sensible defaults for missing names to prevent parse failures + val defaultName = when (type) { + "WordOrderQuestion" -> "Tap the words below to form the sentence" + "MatchingPairsQuestion" -> "Match the pairs" + "CategorizationQuestion" -> "Categorize the items" + else -> "" + } + val name = qObject.optString("name", defaultName) + + val question: Question? = when (type) { + "TrueFalseQuestion" -> TrueFalseQuestion( + id = nextId++, + name = name, + correctAnswer = qObject.getBoolean("correctAnswer"), + explanation = if (qObject.has("explanation")) qObject.getString("explanation") else "" + ) + "MultipleChoiceQuestion" -> { + val options = qObject.getJSONArray("options").let { arr -> (0 until arr.length()).map { arr.getString(it) } } + MultipleChoiceQuestion( + id = nextId++, name = name, options = options, + correctAnswerIndex = qObject.getInt("correctAnswerIndex") + ) + } + "FillInTheBlankQuestion" -> FillInTheBlankQuestion( + id = nextId++, name = name, + correctAnswer = qObject.getString("correctAnswer"), + hintBaseForm = if (qObject.has("hintBaseForm")) qObject.getString("hintBaseForm") else "", + hintOptions = if (qObject.has("hintOptions")) qObject.getJSONArray("hintOptions").let { arr -> (0 until arr.length()).map { arr.getString(it) } } else emptyList() + ) + "WordOrderQuestion" -> { + val words = qObject.getJSONArray("words").let { arr -> (0 until arr.length()).map { arr.getString(it) } } + val correctOrder = qObject.getJSONArray("correctOrder").let { arr -> (0 until arr.length()).map { arr.getString(it) } } + WordOrderQuestion(id = nextId++, name = name, words = words, correctOrder = correctOrder) + } + "MatchingPairsQuestion" -> { + val pairs = qObject.getJSONObject("pairs").let { obj -> obj.keys().asSequence().associateWith { obj.getString(it) } } + MatchingPairsQuestion(id = nextId++, name = name, pairs = pairs) + } + "ListeningComprehensionQuestion" -> ListeningComprehensionQuestion( + id = nextId++, name = name, + languageCode = qObject.getString("languageCode") + ) + "CategorizationQuestion" -> { + val items = qObject.getJSONArray("items").let { arr -> (0 until arr.length()).map { arr.getString(it) } } + val categories = qObject.getJSONArray("categories").let { arr -> (0 until arr.length()).map { arr.getString(it) } } + val mapping = qObject.getJSONObject("correctMapping").let { obj -> obj.keys().asSequence().associateWith { obj.getString(it) } } + CategorizationQuestion(id = nextId++, name = name, items = items, categories = categories, correctMapping = mapping) + } + "VocabularyTestQuestion" -> VocabularyTestQuestion( + id = nextId++, + name = name, + correctAnswer = qObject.getString("correctAnswer"), + languageDirection = qObject.getString("languageDirection") + ) + else -> null + } + question?.let { questions.add(it) } + } + questions + } catch (e: Exception) { + Log.e("ExerciseParser", "Failed to parse questions: $response", e) + emptyList() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/ExerciseService.kt b/app/src/main/java/eu/gaudian/translator/utils/ExerciseService.kt new file mode 100644 index 0000000..b046400 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/ExerciseService.kt @@ -0,0 +1,420 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import android.content.Context +import eu.gaudian.translator.model.Exercise +import eu.gaudian.translator.model.Question +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.model.communication.ApiManager +import eu.gaudian.translator.model.communication.ModelType +import eu.gaudian.translator.model.repository.LanguageRepository +import kotlinx.coroutines.flow.first +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import kotlin.reflect.KClass + +private const val TAG = "ExerciseService" + +class ExerciseService(val context: Context) { + + private val apiRequestHandler = ApiRequestHandler(ApiManager(context), context) + private val languageRepository = LanguageRepository(context) + private val jsonHelper = JsonHelper() + + /** + * Generates 10 vocabulary items for a given exercise title. + * @return A list of the newly created VocabularyItems. + */ + suspend fun generateAndSaveVocabularyForExercise(exerciseTitle: String): List { + val sourceLang = languageRepository.loadSelectedSourceLanguage().first() + val targetLang = languageRepository.loadSelectedTargetLanguage().first() + + if (sourceLang == null || targetLang == null) { + Log.w(TAG, "Source or target language not selected. Skipping vocabulary generation.") + return emptyList() + } + + val prompt = ExercisePromptGenerator.generateVocabularyPrompt(exerciseTitle, sourceLang.englishName, targetLang.englishName) + val response = makeApiRequest(prompt) + + val vocabItems = parseVocabularyFromJson(response).map { + it.copy(languageFirstId = sourceLang.nameResId, languageSecondId = targetLang.nameResId) + } + + return vocabItems + } + + /** + * Orchestrates the entire AI generation flow for a new exercise with questions. + * Returns a Triple with the exercise, questions, and new vocabulary. + */ + suspend fun generateExerciseWithQuestions( + category: String, + questionTypes: List>, + difficulty: String, + amount: Int, + sourceLanguage: String? = null, + targetLanguage: String? = null, + progressUpdater: ((String) -> Unit)? = null + ): Triple, List>? { + try { + progressUpdater?.invoke("generateExerciseShellPrompt") + val exercisePrompt = ExercisePromptGenerator.generateExerciseShellPrompt(category) + val exerciseResponse = makeApiRequest(exercisePrompt) + val (exerciseId, exerciseTitle) = ExerciseParser.parseExerciseShell(exerciseResponse) + ?: throw Exception("Failed to parse exercise shell") + + val effectiveSource = sourceLanguage ?: languageRepository.loadSelectedSourceLanguage().first()?.englishName + val effectiveTarget = targetLanguage ?: languageRepository.loadSelectedTargetLanguage().first()?.englishName + + progressUpdater?.invoke("generateVocabularyPrompt") + val newVocabulary = generateAndSaveVocabularyForExercise(exerciseTitle) + val words = newVocabulary.map { it.wordSecond } + + // Generate context passage for this exercise (dialogue or text, depending on difficulty) + progressUpdater?.invoke("generateContextPrompt") + val contextPrompt = ExercisePromptGenerator.generateContextPrompt( + category = category, + difficulty = difficulty, + languageFirst = effectiveSource, + languageSecond = effectiveTarget + ) + val contextResponse = makeApiRequest(contextPrompt) + progressUpdater?.invoke("parseExerciseContext") + val context = ExerciseParser.parseExerciseContext(contextResponse) + val contextTitle = context?.first ?: "" + val contextText = context?.second ?: "" + + // Batch questions generation to max 10 per request + val batches = mutableListOf() + var remaining = amount + while (remaining > 0) { + val size = minOf(10, remaining) + batches.add(size) + remaining -= size + } + val allQuestions = mutableListOf() + + for ((index, batchSize) in batches.withIndex()) { + progressUpdater?.invoke("generateQuestionsPrompt ${index + 1}/${batches.size}") + val questionsPrompt = ExercisePromptGenerator.generateQuestionsPrompt( + exerciseTitle = exerciseTitle, + optionalVocabulary = words, + questionTypes = questionTypes, + difficulty = difficulty, + amount = batchSize, + languageFirst = effectiveSource!!, + languageSecond = effectiveTarget!!, + contextText = contextText.ifBlank { null } + ) + Log.d(TAG, "Questions prompt: $questionsPrompt") + val questionsResponse = makeApiRequest(questionsPrompt) + progressUpdater?.invoke("parseQuestions ${index + 1}/${batches.size}") + val batchQuestions = ExerciseParser.parseQuestions(questionsResponse) + if (batchQuestions.isEmpty()) { + Log.w(TAG, "Batch ${index + 1} returned 0 questions") + } else { + allQuestions.addAll(batchQuestions) + } + } + + if (allQuestions.isEmpty()) { + throw Exception("AI failed to generate any valid questions.") + } + + val finalExercise = Exercise( + id = exerciseId, + title = exerciseTitle, + questions = allQuestions.map { it.id }, + associatedVocabularyIds = newVocabulary.map { it.id }, + sourceLanguage = effectiveSource, + targetLanguage = effectiveTarget, + contextTitle = contextTitle.ifBlank { null }, + contextText = contextText.ifBlank { null } + ) + + return Triple(finalExercise, allQuestions, newVocabulary) + + } catch (e: Exception) { + Log.e(TAG, "Error generating exercise with questions: ${e.message}", e) + return null + } + } + + /** + * Generates questions based on YouTube video subtitles using AI. + * @param subtitles List of subtitle lines from the video + * @param videoTitle Title of the video + * @param sourceLanguage Source language code (optional) + * @param targetLanguage Target language code (optional) + * @param progressUpdater Callback for progress updates (optional) + * @return List of generated questions + */ + suspend fun generateQuestionsFromSubtitles( + subtitles: List, + videoTitle: String, + sourceLanguage: String? = null, + targetLanguage: String? = null, + progressUpdater: ((String) -> Unit)? = null + ): List { + Log.d(TAG, "Generating questions from subtitles...") + try { + if (subtitles.isEmpty()) { + throw Exception("No subtitles provided for question generation") + } + + progressUpdater?.invoke("Preparing video content for AI analysis...") + + // Combine subtitles into a coherent text + val fullText = subtitles.joinToString(" ") { it.text } + val translatedText = subtitles.filter { it.translatedText != null } + .joinToString(" ") { it.translatedText!! } + + sourceLanguage ?: languageRepository.loadSelectedSourceLanguage().first()?.englishName + val effectiveTarget = targetLanguage ?: languageRepository.loadSelectedTargetLanguage().first()?.englishName + + progressUpdater?.invoke("Generating questions with AI...") + + // Create a prompt for generating questions based on video content + val prompt = buildString { + append("Generate 8 diverse, high-quality questions based on this YouTube video content.\n\n") + append("Video Title: $videoTitle\n\n") + append("Video Content (Original Language):\n$fullText\n\n") + + if (translatedText.isNotEmpty()) { + append("Video Content (Translated to $effectiveTarget):\n$translatedText\n\n") + } + + append("Requirements:\n") + append("- Create a mix of question types: True/False, Multiple Choice, Fill-in-the-blank, Word Order\n") + append("- Questions should test comprehension of the video content\n") + append("- Include questions about key facts, concepts, and vocabulary from the video\n") + append("- Make questions challenging but fair\n") + append("- Provide clear, unambiguous correct answers\n") + append("- If using non-English content, include appropriate language questions\n\n") + + append("Return the questions in this exact JSON format:\n") + append("[\n") + append(" {\n") + append(" \"type\": \"TrueFalseQuestion\",\n") + append(" \"name\": \"Question text?\",\n") + append(" \"correctAnswer\": true/false,\n") + append(" \"explanation\": \"Why this is correct\"\n") + append(" },\n") + append(" {\n") + append(" \"type\": \"MultipleChoiceQuestion\",\n") + append(" \"name\": \"Question text?\",\n") + append(" \"options\": [\"Option A\", \"Option B\", \"Option C\", \"Option D\"],\n") + append(" \"correctAnswerIndex\": 0\n") + append(" },\n") + append(" {\n") + append(" \"type\": \"FillInTheBlankQuestion\",\n") + append(" \"name\": \"Question with ___ blank\",\n") + append(" \"correctAnswer\": \"correct answer\"\n") + append(" },\n") + append(" {\n") + append(" \"type\": \"WordOrderQuestion\",\n") + append(" \"name\": \"Rearrange the words to form a sentence from the video:\",\n") + append(" \"words\": [\"word1\", \"word2\", \"word3\"],\n") + append(" \"correctOrder\": [\"word1\", \"word2\", \"word3\"]\n") + append(" }\n") + append("]\n") + } + + val response = makeApiRequest(prompt) + + progressUpdater?.invoke("Parsing AI-generated questions...") + + // Parse the JSON response and convert to Question objects + return parseVideoQuestionsFromJson(response) + + } catch (e: Exception) { + Log.e(TAG, "Error generating questions from subtitles: ${e.message}", e) + // Fallback to simple question generation if AI fails + return generateSimpleQuestionsFromSubtitles(subtitles) + } + } + + private fun parseVideoQuestionsFromJson(jsonResponse: String): List { + val questions = mutableListOf() + var nextId = 1 + + try { + // Simple JSON parsing for the expected format + val json = jsonResponse.trim() + + // Extract question objects from JSON array + val questionMatches = Regex("\\{[^}]*\"type\"\\s*:\\s*\"([^\"]+)\"[^}]*\\}").findAll(json) + + for (match in questionMatches) { + val questionJson = match.value + val type = Regex("\"type\"\\s*:\\s*\"([^\"]+)\"").find(questionJson)?.groupValues?.get(1) + + when (type) { + "TrueFalseQuestion" -> { + val name = extractJsonString(questionJson, "name") + val correctAnswer = extractJsonBoolean(questionJson, "correctAnswer") + val explanation = extractJsonString(questionJson, "explanation") + + if (name != null && correctAnswer != null) { + questions.add( + eu.gaudian.translator.model.TrueFalseQuestion( + id = nextId++, + name = name, + correctAnswer = correctAnswer, + explanation = explanation ?: "Based on the video content" + ) + ) + } + } + "MultipleChoiceQuestion" -> { + val name = extractJsonString(questionJson, "name") + val options = extractJsonStringArray(questionJson, "options") + val correctIndex = extractJsonInt(questionJson, "correctAnswerIndex") + + if (name != null && options != null && correctIndex != null && correctIndex < options.size) { + questions.add( + eu.gaudian.translator.model.MultipleChoiceQuestion( + id = nextId++, + name = name, + options = options, + correctAnswerIndex = correctIndex + ) + ) + } + } + "FillInTheBlankQuestion" -> { + val name = extractJsonString(questionJson, "name") + val correctAnswer = extractJsonString(questionJson, "correctAnswer") + + if (name != null && correctAnswer != null) { + questions.add( + eu.gaudian.translator.model.FillInTheBlankQuestion( + id = nextId++, + name = name, + correctAnswer = correctAnswer + ) + ) + } + } + "WordOrderQuestion" -> { + val name = extractJsonString(questionJson, "name") + val words = extractJsonStringArray(questionJson, "words") + val correctOrder = extractJsonStringArray(questionJson, "correctOrder") + + if (name != null && words != null && correctOrder != null) { + questions.add( + eu.gaudian.translator.model.WordOrderQuestion( + id = nextId++, + name = name, + words = words, + correctOrder = correctOrder + ) + ) + } + } + } + } + } catch (e: Exception) { + Log.e(TAG, "Error parsing video questions JSON: ${e.message}", e) + } + + return questions + } + + private fun extractJsonString(json: String, key: String): String? { + val regex = Regex("\"$key\"\\s*:\\s*\"([^\"]+)\"") + return regex.find(json)?.groupValues?.get(1) + } + + private fun extractJsonBoolean(json: String, key: String): Boolean? { + val regex = Regex("\"$key\"\\s*:\\s*(true|false)") + return regex.find(json)?.groupValues?.get(1)?.toBoolean() + } + + private fun extractJsonInt(json: String, key: String): Int? { + val regex = Regex("\"$key\"\\s*:\\s*(\\d+)") + return regex.find(json)?.groupValues?.get(1)?.toInt() + } + + private fun extractJsonStringArray(json: String, key: String): List? { + @Suppress("RegExpRedundantEscape") val regex = Regex("\"$key\"\\s*:\\s*\\[([^\\]]+)\\]") + val match = regex.find(json) ?: return null + val arrayContent = match.groupValues[1] + + return arrayContent.split(",").map { it.trim().removeSurrounding("\"").trim() } + } + + private fun generateSimpleQuestionsFromSubtitles( + subtitles: List + ): List { + // Fallback to the simple generation method if AI fails + val questions = mutableListOf() + var nextId = 1 + + val meaningfulSubtitles = subtitles.filter { it.text.length > 10 } + if (meaningfulSubtitles.isEmpty()) return emptyList() + + // Generate simple questions as fallback + meaningfulSubtitles.take(3).forEach { subtitle -> + val statement = subtitle.text.trim() + if (statement.length > 20 && statement.contains(" ") && !statement.endsWith("?")) { + questions.add( + eu.gaudian.translator.model.TrueFalseQuestion( + id = nextId++, + name = "According to the video: $statement", + correctAnswer = true, + explanation = "This statement appears in the video content." + ) + ) + } + } + + return questions + } + + /** + * Parses vocabulary items from JSON response using the enhanced JsonHelper + */ + private fun parseVocabularyFromJson(jsonResponse: String): List { + return try { + // Clean and validate the JSON first + val cleanedJson = jsonHelper.cleanAndValidateJson(jsonResponse) + + // Parse the JSON object for vocabulary items + val jsonObject = kotlinx.serialization.json.Json.parseToJsonElement(cleanedJson).jsonObject + + val vocabularyItems = mutableListOf() + var id = 1 + + for ((wordFirst, wordSecondElement) in jsonObject) { + val wordSecond = wordSecondElement.jsonPrimitive.content.trim() + val vocabularyItem = VocabularyItem( + id = id++, + languageFirstId = -1, // Will be set by caller + languageSecondId = -1, // Will be set by caller + wordFirst = wordFirst.trim(), + wordSecond = wordSecond + ) + vocabularyItems.add(vocabularyItem) + } + + vocabularyItems + } catch (e: Exception) { + Log.e(TAG, "Error parsing vocabulary from JSON: ${e.message}", e) + emptyList() + } + } + + private suspend fun makeApiRequest(prompt: String): String { + val template = DynamicJsonRequest(prompt, ModelType.EXERCISE, "ExerciseService") + val result = apiRequestHandler.executeRequest(template) + + return if (result.isSuccess) { + result.getOrNull().toString() + } else { + throw result.exceptionOrNull() ?: Exception("API request failed without exception") + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/HtmlParser.kt b/app/src/main/java/eu/gaudian/translator/utils/HtmlParser.kt new file mode 100644 index 0000000..82422ec --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/HtmlParser.kt @@ -0,0 +1,119 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import org.jsoup.Jsoup +import org.jsoup.nodes.Element + +fun parseDefinitionsFromHtml(html: String, languageName: String? = null): List { + Log.d("HtmlParser", "parseDefinitionsFromHtml: htmlLength=${html.length}") + val document = Jsoup.parse(html) + val definitions = mutableListOf() + + fun clean(text: String): String { + var t = text.trim() + // Remove bracketed references like [1] + @Suppress("RegExpRedundantEscape") + t = t.replace("\\s*\\[\\d+\\]".toRegex(), "").trim() + // Remove obvious inline citation markers like "[2]", "[a]" + @Suppress("RegExpRedundantEscape") + t = t.replace("\\s*\\[[^]]+\\]".toRegex(), "").trim() + // Remove edit bracket artifacts + t = t.replace("\\s*¶".toRegex(), "").trim() + // Collapse multiple spaces + t = t.replace("\\s+".toRegex(), " ") + return t + } + + // Remove blocks that are not relevant to definitions globally (optional) + document.select("div.interproject-box, table.audiotable, figure, div.NavFrame, div.navbox, style, link").remove() + + // Resolve language section robustly. + // Prefer English if present, else take the first language header. + // On Wiktionary, language headers can be: + // - h2#mylang (possibly wrapped in div.mw-heading2) + // - span.mw-headline#English (older markup) + val target = languageName?.trim().takeUnless { it.isNullOrEmpty() } + val lang = target ?: "English" + val langId = lang.replace(" ", "_") + val h2 = document.select("h2#$langId").firstOrNull() + val span = document.select("span.mw-headline#$langId").firstOrNull() + val anyH2 = document.select("h2[id]").firstOrNull() + val anySpan = document.select("span.mw-headline[id]").firstOrNull() + + val languageHeader: Element? = h2 ?: span ?: anyH2 ?: anySpan + + if (languageHeader != null) { + Log.d("HtmlParser", "Language header tag='${languageHeader.tagName()}', id='${languageHeader.id()}', text='${languageHeader.text()}'") + val startFrom = languageHeader.parent()?.takeIf { it.hasClass("mw-heading") } ?: languageHeader + var current: Element? = startFrom.nextElementSibling() + + val posCandidatesBase = listOf( + "Noun", "Verb", "Adjective", "Adverb", "Pronoun", "Preposition", + "Conjunction", "Interjection", "Determiner", "Article", "Proper noun" + ) + // Heuristic: prioritize Proper noun for capitalized headwords + val prioritized = listOf("Proper noun") + posCandidatesBase.filter { it != "Proper noun" } + var foundPos = false + + fun elementIsLanguageBoundary(el: Element): Boolean { + if (el.tagName() == "h2") return true + if (el.hasClass("mw-heading") && el.selectFirst("h2") != null) return true + return false + } + + fun findFirstOlAfter(nodeStart: Element?): Element? { + var node = nodeStart + var steps = 0 + while (node != null && steps < 20) { + val h3 = if (node.tagName() == "h3") node else node.selectFirst("h3") + if (h3 != null && h3 != nodeStart) break + if (elementIsLanguageBoundary(node)) break + if (node.tagName() == "ol") return node + node = node.nextElementSibling() + steps++ + } + return null + } + + fun extractDefinitionFromLi(li: Element): String { + // Clone and remove non-essential nested blocks but keep inline text + val copy = li.clone() + // Remove nested lists (examples, subsenses), tables, figures, dl/dd quotes, references + copy.select("ul, ol, table, figure, div.NavFrame, dl, blockquote").remove() + copy.select("sup.reference, sup, span.citation, span.ref, span.mwe-math-element").remove() + // Now get full text including inline anchors/spans + val raw = copy.text() + return clean(raw) + } + + while (current != null) { + if (elementIsLanguageBoundary(current)) break + + val h3 = if (current.tagName() == "h3") current else current.selectFirst("h3") + val headerText = (h3?.text() ?: current.select("span.mw-headline").firstOrNull()?.text()).orEmpty() + if (headerText.isNotEmpty() && prioritized.any { headerText.contains(it, ignoreCase = true) }) { + if (!foundPos) Log.d("HtmlParser", "POS header '$headerText' found; extracting definitions") + foundPos = true + val listEl = findFirstOlAfter(current.nextElementSibling() ?: current) + var count = 0 + listEl?.children()?.forEach { li -> + if (li.tagName() == "li") { + val text = extractDefinitionFromLi(li) + if (text.isNotBlank()) { + definitions.add(text) + count++ + } + } + } + Log.d("HtmlParser", "Collected $count definitions under '$headerText'") + if (definitions.isNotEmpty()) break + } + current = current.nextElementSibling() + } + } else { + Log.w("HtmlParser", "No language headers found; definitions likely empty") + } + Log.d("HtmlParser", "Returning ${definitions.size} definitions") + return definitions +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/JsonHelper.kt b/app/src/main/java/eu/gaudian/translator/utils/JsonHelper.kt new file mode 100644 index 0000000..d45c775 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/JsonHelper.kt @@ -0,0 +1,292 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import kotlinx.serialization.KSerializer +import kotlinx.serialization.SerializationException +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.buildJsonArray +import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.json.jsonPrimitive + +/** + * Enhanced JSON helper with unified parsing, validation, and error handling. + * Provides robust JSON processing for all API responses in the application. + */ +class JsonHelper { + + private val jsonParser = Json { + ignoreUnknownKeys = true + isLenient = true + coerceInputValues = true + encodeDefaults = false + } + + /** + * Parses a JSON string into the specified type with comprehensive error handling. + * + * @param json The JSON string to parse + * @param serializer The serializer for the target type + * @param serviceName Name of the service calling this method for logging + * @return Result containing the parsed object or error + */ + fun parseJson( + json: String, + serializer: KSerializer, + serviceName: String = "Unknown" + ): Result { + return try { + Log.d("JsonHelper", "[$serviceName] Parsing JSON response") + val cleanedJson = cleanAndValidateJson(json) + Log.d("JsonHelper", "[$serviceName] Cleaned JSON: $cleanedJson") + + val result = jsonParser.decodeFromString(serializer, cleanedJson) + Log.i("JsonHelper", "[$serviceName] Successfully parsed JSON response") + Result.success(result) + } catch (e: SerializationException) { + val errorMsg = "JSON serialization failed in $serviceName: ${e.message}" + Log.e("JsonHelper", errorMsg, e) + Result.failure(JsonParsingException(errorMsg, e)) + } catch (e: Exception) { + val errorMsg = "Unexpected error parsing JSON in $serviceName: ${e.message}" + Log.e("JsonHelper", errorMsg, e) + Result.failure(JsonParsingException(errorMsg, e)) + } + } + + /** + * Cleans and validates a JSON string, handling common formatting issues. + */ + fun cleanAndValidateJson(json: String): String { + if (json.isBlank()) { + throw IllegalArgumentException("JSON string is blank") + } + + // Use existing JsonCleanUtil for robust cleaning + return JsonCleanUtil.cleanAndCorrectJson(json) { message, exception -> + Log.w("JsonHelper", "JSON cleaning issue: $message", exception?.cause) + } + } + + /** + * Validates that a JSON string contains expected required fields. + */ + fun validateRequiredFields(json: String, requiredFields: List): Boolean { + return try { + val element = jsonParser.parseToJsonElement(json) + if (element is JsonObject) { + requiredFields.all { field -> element.containsKey(field) } + } else { + false + } + } catch (e: Exception) { + Log.e("JsonHelper", "Failed to validate required fields: ${e.message}", e) + false + } + } + + /** + * Extracts a specific field value from JSON as string. + */ + fun extractField(json: String, fieldName: String): String? { + return try { + val element = jsonParser.parseToJsonElement(json) + if (element is JsonObject) { + element[fieldName]?.jsonPrimitive?.content + } else { + null + } + } catch (e: Exception) { + Log.e("JsonHelper", "Failed to extract field '$fieldName': ${e.message}", e) + null + } + } + + /** + * Formats JSON for display purposes. + */ + fun formatForDisplay(json: String): String { + return try { + val element = jsonParser.parseToJsonElement(json) + jsonParser.encodeToString(JsonElement.serializer(), element) + .replace(",", ",\n") + .replace("{", "{\n") + .replace("}", "\n}") + .replace("[", "[\n") + .replace("]", "\n]") + } catch (e: Exception) { + Log.w("JsonHelper", "Failed to format JSON for display: ${e.message}") + json + } + } +} + +/** + * Custom exception for JSON parsing errors. + */ +class JsonParsingException(message: String, cause: Throwable? = null) : Exception(message, cause) + +/** + * Legacy JsonHelper class for backward compatibility. + * @deprecated Use the enhanced JsonHelper class instead + */ +@Deprecated("Use the enhanced JsonHelper class instead") +class LegacyJsonHelper { + + fun cleanJson(json: String): String { + val startIndex = json.indexOf('{') + val endIndex = json.lastIndexOf('}') + + if (startIndex == -1 || endIndex == -1 || startIndex >= endIndex) { + throw IllegalArgumentException("Invalid JSON format") + } + + return json.substring(startIndex, endIndex + 1).trim() + } +} + +object JsonCleanUtil { + private val jsonParser = Json { isLenient = true; ignoreUnknownKeys = true } + + /** + * Cleans and corrects a raw string response to make it valid, parsable JSON. + */ + fun cleanAndCorrectJson( + response: String, + onFailure: ((message: String, exception: Exception?) -> Unit)? = null + ): String { + //Log.d("JsonCleanUtil", "Response: $response") + //Isolate the primary JSON block. + val jsonBlock = isolateJsonBlock(response).replace("<|END_RESPONSE|>", "") + if (jsonBlock.isBlank()) { + onFailure?.invoke("No JSON block found in response", null) + return "" + } + + val sanitizedBlock = stripJsonCommentsAndFixCommonErrors(jsonBlock) + Log.d("JsonCleanUtil", onFailure.toString()) + return correctPropertyValues(sanitizedBlock, onFailure) + } + + private fun isolateJsonBlock(response: String): String { + // Handle specific non-JSON tokens first + + // The rest of the function operates on the cleaned response + val markdownRegex = Regex("```json\\s*([\\s\\S]*?)\\s*```") + val markdownMatch = markdownRegex.find(response) + if (markdownMatch != null && markdownMatch.groupValues.size > 1) { + return markdownMatch.groupValues[1] + } + + val firstBrace = response.indexOf('{') + val firstBracket = response.indexOf('[') + val startIndex = when { + firstBrace == -1 -> firstBracket + firstBracket == -1 -> firstBrace + else -> minOf(firstBrace, firstBracket) + } + if (startIndex == -1) return "" + + val lastBrace = response.lastIndexOf('}') + val lastBracket = response.lastIndexOf(']') + val endIndex = maxOf(lastBrace, lastBracket) + if (endIndex == -1 || startIndex >= endIndex) return "" + + return response.substring(startIndex, endIndex + 1) + } + + /** + * A more robust function to remove comments, stray characters, and fix common structural errors like trailing commas. + */ + private fun stripJsonCommentsAndFixCommonErrors(jsonString: String): String { + val lines = jsonString.lines() + val cleanedLines = mutableListOf() + + for (line in lines) { + // Discard lines that are primarily comments + if (line.trim().startsWith("//")) { + continue + } + // Find the position of a line comment and take the substring before it + val commentPosition = line.indexOf("//") + val cleanLine = if (commentPosition != -1) { + line.take(commentPosition) + } else { + line + } + + // Remove other problematic characters, like the stray '/' from the log + //cleanLine = cleanLine.replace("/", "") + + cleanedLines.add(cleanLine) + } + + var result = cleanedLines.joinToString("\n") + + + @Suppress("RegExpRedundantEscape") + result = result.replace(Regex(",(\\s*[\\]}])"), "$1") + + return result + } + + private fun correctPropertyValues( + jsonString: String, + onFailure: ((message: String, exception: Exception?) -> Unit)? + ): String { + try { + val rootElement = jsonParser.parseToJsonElement(jsonString) + if (rootElement !is JsonObject) return jsonString + + val resultsArray = rootElement["results"] as? JsonArray ?: return jsonString + val correctedResults = buildJsonArray { + for (element in resultsArray) { + if (element is JsonObject) { + val properties = element["properties"] as? JsonObject + if (properties != null) { + val correctedProperties = buildJsonObject { + for ((key, value) in properties) { + // If the AI returns a value in an array, just take the first element. + if (value is JsonArray && value.isNotEmpty()) { + put(key, value.first()) + } else { + put(key, value) + } + } + } + val correctedElement = buildJsonObject { + // Safely add properties that exist in the original element + element["id"]?.let { put("id", it) } + element["wordClass"]?.let { put("wordClass", it) } + put("properties", correctedProperties) + } + add(correctedElement) + } else { + add(element) + } + } else { + add(element) + } + } + } + + return buildJsonObject { put("results", correctedResults) }.toString() + } catch (e: Exception) { + Log.e("JsonCleanUtil", "Failed during JSON correction: ${e.message}") + onFailure?.invoke("Failed during JSON correction: ${e.message}", e) + return jsonString + } + } +} + +fun formatJsonForDisplay(json: String): String { + return try { + // Simple JSON formatting - you can enhance this later + json.replace(",", ",\n").replace("{", "{\n").replace("}", "\n}").replace("[", "[\n").replace("]", "\n]") + } catch (_: Exception) { + json // Fallback to raw JSON if formatting fails + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/Log.kt b/app/src/main/java/eu/gaudian/translator/utils/Log.kt new file mode 100644 index 0000000..d235231 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/Log.kt @@ -0,0 +1,151 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import android.annotation.SuppressLint +import timber.log.Timber + +/** + * A wrapper around Timber to centralize logging and suppress the + * "HardcodedText" lint warning for log messages, which are for + * development purposes only. + */ +object Log { + + @SuppressLint("HardcodedText") + fun d(message: String) { + Timber.d("[DEBUG] $message") + } + + @SuppressLint("HardcodedText") + fun d(tag: String, message: String) { + Timber.tag(tag).d("[DEBUG] $message") + } + + @SuppressLint("HardcodedText") + fun d(throwable: Throwable) { + Timber.d("[DEBUG] ${throwable.message}") + } + + + + @SuppressLint("HardcodedText") + fun d(throwable: Throwable, message: String) { + Timber.d(throwable, "[DEBUG] $message") + } + + @SuppressLint("HardcodedText") + fun d(message: String, throwable: Throwable) { + Timber.d(throwable, "[DEBUG] $message") + } + + @SuppressLint("HardcodedText") + fun i(message: String) { + Timber.i("[INFO] $message") + } + + @SuppressLint("HardcodedText") + fun i(tag : String, message: String) { + Timber.tag(tag).i("[INFO] $message") + } + + @SuppressLint("HardcodedText") + fun w(tag : String, message: String) { + Timber.tag(tag).w("[WARNING] $message") + } + + @SuppressLint("HardcodedText") + fun w(message: String) { + Timber.w("[WARNING] $message") + } + + + + @SuppressLint("HardcodedText", "ThrowableNotAtBeginning") + fun w(tag : String, message: String, throwable: Throwable?) { + Timber.tag(tag).w(throwable, "[WARNING] $message") + } + + + + + @SuppressLint("HardcodedText", "ThrowableNotAtBeginning") + fun w(message : String, throwable: Throwable) { + Timber.w("[WARNING] $message", throwable) + } + + @SuppressLint("HardcodedText", "ThrowableNotAtBeginning") + fun e(throwable: Throwable, message: String) { + Timber.e("[ERROR] $message", throwable) + } + + @SuppressLint("HardcodedText", "ThrowableNotAtBeginning") + fun e(message: String, throwable: Throwable) { + Timber.e("[ERROR] $message", throwable) + } + + @SuppressLint("HardcodedText", "ThrowableNotAtBeginning") + fun e(message: String) { + Timber.e("[ERROR] $message") + } + + @SuppressLint("HardcodedText", "ThrowableNotAtBeginning") + fun e(throwable: Throwable) { + Timber.e("[ERROR] ${throwable.message}") + } + + @SuppressLint("HardcodedText", "ThrowableNotAtBeginning") + fun e(tag: String, message: String) { + Timber.tag(tag).e("[ERROR] $message") + } + + @SuppressLint("HardcodedText", "ThrowableNotAtBeginning") + fun e(tag: String, message: String, throwable: Throwable?) { + Timber.tag(tag).e(throwable, "[ERROR] $message") + } + + @SuppressLint("HardcodedText") + fun v(message: String) { + Timber.v("[VERBOSE] $message") + } + + @SuppressLint("HardcodedText") + fun v(tag: String, message: String) { + Timber.tag(tag).v("[VERBOSE] $message") + } + + @SuppressLint("HardcodedText") + fun v(throwable: Throwable, message: String) { + Timber.v(throwable, "[VERBOSE] $message") + } + + @SuppressLint("HardcodedText") + fun v(message: String, throwable: Throwable) { + Timber.v(throwable, "[VERBOSE] $message") + } + + @SuppressLint("HardcodedText") + fun wtf(message: String) { + Timber.wtf("[ASSERT] $message") + } + + @SuppressLint("HardcodedText") + fun wtf(tag: String, message: String) { + Timber.tag(tag).wtf("[ASSERT] $message") + } + + @SuppressLint("HardcodedText") + fun wtf(throwable: Throwable) { + Timber.wtf(throwable, "[ASSERT] ${throwable.message}") + } + + @SuppressLint("HardcodedText") + fun wtf(throwable: Throwable, message: String) { + Timber.wtf(throwable, "[ASSERT] $message") + } + + @SuppressLint("HardcodedText") + fun wtf(message: String, throwable: Throwable) { + Timber.wtf(throwable, "[ASSERT] $message") + } +} diff --git a/app/src/main/java/eu/gaudian/translator/utils/MarkDownParser.kt b/app/src/main/java/eu/gaudian/translator/utils/MarkDownParser.kt new file mode 100644 index 0000000..c8a98a9 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/MarkDownParser.kt @@ -0,0 +1,49 @@ +package eu.gaudian.translator.utils + +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.text.font.FontWeight + +/** + * Formats a simple subset of Markdown (bold, italic) into an AnnotatedString. + */ +fun formatMarkdownText(text: String): AnnotatedString { + val formattedText = text.trim() + return buildAnnotatedString { + var i = 0 + while (i < formattedText.length) { + when { + formattedText.startsWith("**", i) -> { + val endIndex = formattedText.indexOf("**", i + 2) + if (endIndex != -1) { + pushStyle(SpanStyle(fontWeight = FontWeight.Bold)) + append(formattedText.substring(i + 2, endIndex)) + pop() + i = endIndex + 2 + } else { + append(formattedText[i]) + i++ + } + } + formattedText.startsWith("*", i) -> { + val endIndex = formattedText.indexOf("*", i + 1) + if (endIndex != -1) { + pushStyle(SpanStyle(fontStyle = FontStyle.Italic)) + append(formattedText.substring(i + 1, endIndex)) + pop() + i = endIndex + 1 + } else { + append(formattedText[i]) + i++ + } + } + else -> { + append(formattedText[i]) + i++ + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/PromptBuilder.kt b/app/src/main/java/eu/gaudian/translator/utils/PromptBuilder.kt new file mode 100644 index 0000000..7ca0d1b --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/PromptBuilder.kt @@ -0,0 +1,40 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +class PromptBuilder(var basePrompt: String) { + + private val details = mutableListOf() + private var jsonStructure: String? = null + private var example: String? = null + + fun addDetail(detail: String): PromptBuilder { + details.add(detail) + return this + } + + fun withJsonResponse(description: String): PromptBuilder { + this.jsonStructure = "Return strictly valid JSON (RFC 8259): double-quoted keys and string values, no comments, no trailing commas, no markdown fences: $description." + return this + } + + fun withExample(originalText: String): PromptBuilder { + this.example = "Original Text: \"$originalText\"" + return this + } + + fun build(): String { + var prompt = basePrompt + if (details.isNotEmpty()) { + prompt += " " + details.joinToString(" ") + } + jsonStructure?.let { + prompt += " $it" + } + example?.let { + prompt += "\n\n$it" + } + // Ensures the prompt is clean and compact. + return prompt.trimIndent().replace(Regex("\\s+"), " ") + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/ProviderConfigParser.kt b/app/src/main/java/eu/gaudian/translator/utils/ProviderConfigParser.kt new file mode 100644 index 0000000..3e00d51 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/ProviderConfigParser.kt @@ -0,0 +1,80 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import android.content.Context +import eu.gaudian.translator.model.LanguageModel +import eu.gaudian.translator.model.communication.ApiProvider +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json + +/** + * Data classes for parsing the providers configuration JSON + */ +@Serializable +data class ProviderConfig( + val providers: List +) + +@Serializable +data class ProviderData( + val key: String, + val displayName: String, + val baseUrl: String, + val endpoint: String, + val websiteUrl: String, + val isCustom: Boolean = false, + val models: List +) + +@Serializable +data class ModelData( + val modelId: String, + val displayName: String, + val provider: String, + val description: String +) + +/** + * Utility class for parsing provider configuration from JSON + */ +object ProviderConfigParser { + + private val json = Json { ignoreUnknownKeys = true } + + /** + * Loads and parses the providers configuration from the assets folder + */ + fun loadProvidersFromAssets(context: Context): List { + return try { + val jsonString = context.assets.open("providers_config.json") + .bufferedReader() + .use { it.readText() } + + val config = json.decodeFromString(jsonString) + + config.providers.map { providerData -> + ApiProvider( + key = providerData.key, + displayName = providerData.displayName, + baseUrl = providerData.baseUrl, + endpoint = providerData.endpoint, + websiteUrl = providerData.websiteUrl, + isCustom = providerData.isCustom, + models = providerData.models.map { modelData -> + LanguageModel( + modelId = modelData.modelId, + displayName = modelData.displayName, + providerKey = modelData.provider, + description = modelData.description, + isCustom = providerData.isCustom + ) + } + ) + } + } catch (e: Exception) { + Log.e("ProviderConfigParser", "Failed to load providers from JSON", e) + emptyList() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/PunctuationPreserver.kt b/app/src/main/java/eu/gaudian/translator/utils/PunctuationPreserver.kt new file mode 100644 index 0000000..3c2cf16 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/PunctuationPreserver.kt @@ -0,0 +1,92 @@ +package eu.gaudian.translator.utils + + +object PunctuationPreserver { + + // Punctuation that should have a space after + private val requiresSpaceAfter = setOf(',', ';', ':') + + // Punctuation that in some languages commonly has a space before it (e.g., French) + private val mayRequireSpaceBefore = setOf('?', '!', ';', ':') + + fun preserveSpacing(original: String, translated: String): String { + if (original.isBlank() || translated.isBlank()) return translated + + var result = translated + + // 1) If original has space before any of the specified marks, ensure translated also has one + for (mark in mayRequireSpaceBefore) { + val origHas = originalHasSpaceBefore(original, mark) + if (origHas) { + result = ensureSpaceBefore(result, mark) + } + } + + // 2) If original has a space after commas/semicolons/colons, ensure translated also has one + for (mark in requiresSpaceAfter) { + val origHas = originalHasSpaceAfter(original, mark) + if (origHas) { + result = ensureSpaceAfter(result, mark) + } + } + + return result + } + + private fun originalHasSpaceBefore(text: String, ch: Char): Boolean { + var i = text.indexOf(ch) + while (i >= 0) { + if (i > 0 && text[i - 1].isWhitespace()) return true + i = text.indexOf(ch, i + 1) + } + return false + } + + private fun originalHasSpaceAfter(text: String, ch: Char): Boolean { + var i = text.indexOf(ch) + while (i >= 0) { + if (i < text.lastIndex && text[i + 1].isWhitespace()) return true + i = text.indexOf(ch, i + 1) + } + return false + } + + private fun ensureSpaceBefore(text: String, ch: Char): String { + // Replace occurrences of X where directly preceded by non-space with space + // Patterns: "word?" -> "word ?"; also handle cases with multiple punctuation. + val sb = StringBuilder() + var i = 0 + while (i < text.length) { + val c = text[i] + if (c == ch) { + // if there is no space before, add one (but avoid adding at start) + if (i > 0 && !text[i - 1].isWhitespace()) { + sb.append(' ') + } + sb.append(c) + i++ + } else { + sb.append(c) + i++ + } + } + return sb.toString() + } + + private fun ensureSpaceAfter(text: String, ch: Char): String { + val sb = StringBuilder() + var i = 0 + while (i < text.length) { + val c = text[i] + sb.append(c) + if (c == ch) { + val next = if (i + 1 <= text.lastIndex) text[i + 1] else null + if (next != null && !next.isWhitespace()) { + sb.append(' ') + } + } + i++ + } + return sb.toString() + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/ResourceUsageDummy.kt b/app/src/main/java/eu/gaudian/translator/utils/ResourceUsageDummy.kt new file mode 100644 index 0000000..73c6952 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/ResourceUsageDummy.kt @@ -0,0 +1,132 @@ +@file:Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE", "HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import android.content.Context +import androidx.annotation.Keep +import eu.gaudian.translator.R + +//Just a dummy so they appear as used in the XML file and I don't get a few dozens errors +@Keep +val LANGUAGE_STRING_IDS: IntArray = intArrayOf( + R.string.language_1, + R.string.language_2, + R.string.language_3, + R.string.language_4, + R.string.language_5, + R.string.language_6, + R.string.language_7, + R.string.language_8, + R.string.language_9, + R.string.language_10, + R.string.language_11, + R.string.language_12, + R.string.language_13, + R.string.language_14, + R.string.language_15, + R.string.language_16, + R.string.language_17, + R.string.language_18, + R.string.language_19, + R.string.language_20, + R.string.language_21, + R.string.language_22, + R.string.language_23, + R.string.language_24, + R.string.language_25, + R.string.language_26, + R.string.language_27, + R.string.language_28, + R.string.language_29, + R.string.language_30, + R.string.language_31, + R.string.language_32, + R.string.language_33, + R.string.language_34, + R.string.language_35, + R.string.language_36, + R.string.language_37, + R.string.language_38, + R.string.language_39, + R.string.language_40, + R.string.language_41, + R.string.language_42, + R.string.language_43, + R.string.language_44, + R.string.language_45, + R.string.language_46, + R.string.language_47, + R.string.language_48, + R.string.language_49, + R.string.language_50, + R.string.language_51, + + R.string.native_language_1, + R.string.native_language_2, + R.string.native_language_3, + R.string.native_language_4, + R.string.native_language_5, + R.string.native_language_6, + R.string.native_language_7, + R.string.native_language_8, + R.string.native_language_9, + R.string.native_language_10, + R.string.native_language_11, + R.string.native_language_12, + R.string.native_language_13, + R.string.native_language_14, + R.string.native_language_15, + R.string.native_language_16, + R.string.native_language_17, + R.string.native_language_18, + R.string.native_language_19, + R.string.native_language_20, + R.string.native_language_21, + R.string.native_language_22, + R.string.native_language_23, + R.string.native_language_24, + R.string.native_language_25, + R.string.native_language_26, + R.string.native_language_27, + R.string.native_language_28, + R.string.native_language_29, + R.string.native_language_30, + R.string.native_language_31, + R.string.native_language_32, + R.string.native_language_33, + R.string.native_language_34, + R.string.native_language_35, + R.string.native_language_36, + R.string.native_language_37, + R.string.native_language_38, + R.string.native_language_39, + R.string.native_language_40, + R.string.native_language_41, + R.string.native_language_42, + R.string.native_language_43, + R.string.native_language_44, + R.string.native_language_45, + R.string.native_language_46, + R.string.native_language_47, + R.string.native_language_48, + R.string.native_language_49, + R.string.native_language_50, + R.string.native_language_51, + + + +) + +fun useLanguageResources(context: Context?) { + val codesId = R.array.language_codes + val localContext = context ?: return + + val res = localContext.resources + val codes: Array = res.getStringArray(codesId) + val text = buildString { + for (id in LANGUAGE_STRING_IDS) { + append(res.getString(id)).append('\n') + } + if (codes.isNotEmpty()) append(codes[0]) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/StatusMessageService.kt b/app/src/main/java/eu/gaudian/translator/utils/StatusMessageService.kt new file mode 100644 index 0000000..f8ce685 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/StatusMessageService.kt @@ -0,0 +1,56 @@ +@file:Suppress("HardCodedStringLiteral") +package eu.gaudian.translator.utils + +import eu.gaudian.translator.viewmodel.MessageAction +import eu.gaudian.translator.viewmodel.MessageDisplayType +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.asSharedFlow +import kotlinx.coroutines.launch + +/** + * A sealed class representing all possible actions that can be sent to the status system. + */ +sealed class StatusAction { + data class ShowMessage(val text: String, val type: MessageDisplayType, val timeoutInSeconds: Int) : StatusAction() + data class ShowPermanentMessage(val text: String, val type: MessageDisplayType) : StatusAction() + object CancelPermanentMessage : StatusAction() + data class PerformLoadingOperation(val block: suspend () -> Unit) : StatusAction() + object CancelLoadingOperation : StatusAction() + object HideMessageBar : StatusAction() + object CancelAllMessages : StatusAction() + + data class ShowActionableMessage(val text: String, val type: MessageDisplayType, val action: MessageAction) : StatusAction() +} + +/** + * A singleton object that acts as a central event bus for status messages. + * Any part of the app can trigger an action, and any StatusViewModel listening will receive it. + */ +object StatusMessageService { + private val _actions = MutableSharedFlow() + val actions = _actions.asSharedFlow() + private val scope = CoroutineScope(Dispatchers.Default) + + suspend fun trigger(action: StatusAction) { + Log.d("StatusMessageService", "Received action: $action") + _actions.emit(action) + } + + fun triggerNonSuspend(action: StatusAction) { + Log.d("StatusMessageService", "Received non-suspend action: $action") + scope.launch { + _actions.emit(action) + } + } + + fun showSimpleMessage(text: String, type: MessageDisplayType = MessageDisplayType.INFO) { + scope.launch { + _actions.emit(StatusAction.ShowMessage(text, type, 5)) + } + + + } + +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/StringHelper.kt b/app/src/main/java/eu/gaudian/translator/utils/StringHelper.kt new file mode 100644 index 0000000..56f5e9e --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/StringHelper.kt @@ -0,0 +1,51 @@ +package eu.gaudian.translator.utils + +object StringHelper { + // Strict sentence detection: starts with capital, ends with . ! ?, and contains a space + fun isSentenceStrict(text: String): Boolean { + val trimmed = text.trim() + if (trimmed.isEmpty()) return false + val startsWithCapital = trimmed.first().isUpperCase() + val endsWithPunctuation = trimmed.endsWith('.') || trimmed.endsWith('!') || trimmed.endsWith('?') + val hasMultipleWords = trimmed.contains(" ") + return hasMultipleWords && startsWithCapital && endsWithPunctuation + } + + // Loose sentence detection for exercises: either looks like a sentence or is very long + fun isSentenceLoose(text: String): Boolean { + val trimmed = text.trim() + if (trimmed.isEmpty()) return false + val hasMultipleWords = trimmed.contains(" ") + val endsWithPunctuation = trimmed.endsWith('.') || trimmed.endsWith('!') || trimmed.endsWith('?') + val tooLong = trimmed.length > 15 + return (hasMultipleWords && endsWithPunctuation) || tooLong + } + + // Build a regex to remove any of the provided leading articles followed by space + @Suppress("HardCodedStringLiteral", "RegExpUnnecessaryNonCapturingGroup") + fun buildLeadingArticlesRegex(articles: Collection): Regex { + val cleaned = articles.filter { it.isNotBlank() }.joinToString("|") { Regex.escape(it.trim()) } + return if (cleaned.isEmpty()) Regex("^$") else Regex("^(?:$cleaned)\\s+", RegexOption.IGNORE_CASE) + } + + fun removeLeadingArticles(text: String, articles: Collection): String { + val pattern = buildLeadingArticlesRegex(articles) + return text.replace(pattern, "") + } + + fun removeLeadingArticlesOneOf(text: String, articles: Collection): String { + // remove only the first matching leading article once + val pattern = buildLeadingArticlesRegex(articles) + return text.replaceFirst(pattern, "") + } + + // Normalize answers: lowercase, trim, remove parenthetical info + fun normalizeAnswer(answer: String): String { + @Suppress("HardCodedStringLiteral") + return answer.lowercase().trim().replace(Regex("\\s*\\(.*?\\)"), "").trim() + } + + fun possibleAnswersFromSlash(answer: String): List { + return answer.split('/').map { it.trim() }.filter { it.isNotEmpty() } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/TextToSpeechHelper.kt b/app/src/main/java/eu/gaudian/translator/utils/TextToSpeechHelper.kt new file mode 100644 index 0000000..c851e14 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/TextToSpeechHelper.kt @@ -0,0 +1,170 @@ +// eu/gaudian/translator/utils/TextToSpeechHelper.kt +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import android.content.Context +import android.speech.tts.TextToSpeech +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.repository.SettingsRepository +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import java.util.Locale +import kotlin.coroutines.resume + + +object TextToSpeechHelper { + + private var textToSpeech: TextToSpeech? = null + private var languageMap: Map? = null + + private val playableCache = mutableMapOf() + private val mutex = Mutex() + + /** + * Extended speakOut allowing optional voiceName and speaking speed percentage (50..200). + */ + suspend fun speakOut(context: Context, text: String, language: Language, voiceName: String?) { + val tts = getInitializedTtsInstance(context) ?: return + + // Ensure a clean state so engine applies new params (voice/rate) reliably on all OEMs + try { tts.stop() } catch (_: Exception) {} + + val locales = getLanguageMap(context) + val locale = locales[language.code.lowercase(Locale.getDefault())] ?: Locale.US + + val result = tts.setLanguage(locale) + if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { + Log.e("Language ${language.code} not supported.") + return + } + + // Apply voice by name if provided and available + if (!voiceName.isNullOrBlank()) { + val v = tts.voices?.firstOrNull { it.name == voiceName } + if (v != null) { + try { tts.voice = v } catch (e: Exception) { Log.w("Failed to set TTS voice: ${e.message}") } + } + } else { + // try to select a voice that matches the locale language + val v = tts.voices?.firstOrNull { it.locale?.language == locale.language } + if (v != null) { + try { tts.voice = v } catch (_: Exception) {} + } + } + + // Resolve effective speed: prefer provided value; otherwise, use saved setting + val effectiveSpeedPercent: Int = try { + SettingsRepository(context).speakingSpeed.flow.first() + } catch (_: Exception) { + Log.d("Failed to get speaking speed setting, using default") + 100 + } + Log.d("Effective speed: $effectiveSpeedPercent") + val clamped = effectiveSpeedPercent.coerceIn(50, 200) + val rate = clamped / 100f + try { tts.setSpeechRate(rate) } catch (e: Exception) { Log.w("Failed to set speech rate: ${e.message}") } + Log.d("TTS speakOut: lang=${language.code}-${language.region} voice=${voiceName ?: ""} rate=$rate (${clamped}%)") + + // Keep pitch at default (1.0f) to make rate differences clearer + try { tts.setPitch(1.0f) } catch (_: Exception) {} + + tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, null) + } + + /** + * Checks if a given language is supported and playable by the TTS engine. + * Results are cached for performance. + * + * @param language The language to check. + * @return `true` if the language is supported, `false` otherwise. + */ + suspend fun isPlayable(context: Context, language: Language?): Boolean { + if (language == null) return false + + mutex.withLock { + if (playableCache.containsKey(language)) { + val cachedValue = playableCache[language]!! + return cachedValue + } + } + + Log.d("Checking if language is playable: $language") + val tts = getInitializedTtsInstance(context) ?: return false + + val locales = getLanguageMap(context) + val locale = locales[language.code.lowercase(Locale.getDefault())] + + // 3. Perform the slow check ONLY if the result is not in the cache. + val result = tts.setLanguage(locale) + val isSupported = !(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) + + // 4. Store the new result in the cache. + mutex.withLock { + playableCache[language] = isSupported + } + + return isSupported + } + + + private suspend fun getInitializedTtsInstance(context: Context): TextToSpeech? { + textToSpeech?.let { return it } + + return mutex.withLock { + textToSpeech?.let { return@withLock it } + + var ttsInstance: TextToSpeech? = null + val success = suspendCancellableCoroutine { continuation -> + ttsInstance = TextToSpeech(context.applicationContext) { status -> + if (continuation.isActive) { + continuation.resume(status == TextToSpeech.SUCCESS) + } + } + } + + if (success) { + textToSpeech = ttsInstance + ttsInstance + } else { + Log.e("TextToSpeech initialization failed.") + null + } + } + } + + suspend fun getVoicesForLanguage(context: Context, language: Language): List { + val tts = getInitializedTtsInstance(context) ?: return emptyList() + val locale = getLanguageMap(context)[language.code.lowercase(Locale.getDefault())] + val voices = tts.voices ?: return emptyList() + if (locale == null) return voices.toList() + + val langCode = locale.language + val regionCode = language.region.uppercase(Locale.getDefault()) + + // Be lenient: always filter by language first, then prefer exact region match + val languageMatches = voices.filter { it.locale?.language == langCode } + if (languageMatches.isNotEmpty()) { + // Sort so that exact region/country matches come first + return languageMatches.sortedByDescending { it.locale?.country.equals(regionCode, ignoreCase = true) } + } + // Fallback: if OEM reports unexpected locales, show everything rather than empty + return voices.toList() + } + + private fun getLanguageMap(context: Context): Map { + languageMap?.let { return it } + val codes = context.resources.getStringArray(R.array.language_codes) + val newMap = codes.associate { + val parts = it.split(",") + val languageName = parts[0].lowercase(Locale.getDefault()) + val localeCode = parts[1] + languageName to Locale(languageName, localeCode) + } + languageMap = newMap + return newMap + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/TranslationService.kt b/app/src/main/java/eu/gaudian/translator/utils/TranslationService.kt new file mode 100644 index 0000000..ca07360 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/TranslationService.kt @@ -0,0 +1,297 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import android.content.Context +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.TranslationHistoryItem +import eu.gaudian.translator.model.communication.ApiManager +import eu.gaudian.translator.model.repository.ApiRepository +import eu.gaudian.translator.model.repository.LanguageRepository +import eu.gaudian.translator.model.repository.SettingsRepository +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.withContext +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.RequestBody.Companion.toRequestBody + +class TranslationService(private val context: Context) { + + private val settingsRepository = SettingsRepository(context) + private val apiRepository = ApiRepository(context) + private val apiRequestHandler = ApiRequestHandler(ApiManager(context), context) + private val languageRepository = LanguageRepository(context) + + private val libreBaseUrl: String = "http://23.88.48.47:5001" + private val httpClient: okhttp3.OkHttpClient by lazy { okhttp3.OkHttpClient.Builder().build() } + @Volatile private var cachedLibreLangs: Set? = null + + private fun Language.toLibreCode(): String { + val c = this.code.lowercase() + val r = this.region.trim() + return if (r.isBlank()) c else "$c-$r" + } + + private suspend fun getLibreSupportedCodes(): Set = withContext(Dispatchers.IO) { + cachedLibreLangs?.let { return@withContext it } + try { + val url = "$libreBaseUrl/languages" + val req = okhttp3.Request.Builder().url(url).get().build() + val resp = httpClient.newCall(req).execute() + val body = resp.body.string() + val codes = mutableSetOf() + val arr = org.json.JSONArray(body) + for (i in 0 until arr.length()) { + val obj = arr.getJSONObject(i) + val code = obj.optString("code").trim() + if (code.isNotEmpty()) codes.add(code) + } + cachedLibreLangs = codes + codes + } catch (e: Exception) { + Log.e("TranslationService", "Failed to fetch LibreTranslate languages", e) + emptySet() + } + } + + private suspend fun libreTranslate(text: String, source: String?, target: String, alternatives: Int = 1): Result = withContext(Dispatchers.IO) { + try { + val json = org.json.JSONObject().apply { + put("q", text) + put("source", source?.ifBlank { "auto" } ?: "auto") + put("target", target) + put("format", "text") + put("alternatives", alternatives) + put("api_key", "") + } + val media = "application/json; charset=utf-8".toMediaType() + val body = json.toString().toRequestBody(media) + val req = okhttp3.Request.Builder() + .url("$libreBaseUrl/translate") + .post(body) + .header("Content-Type", "application/json") + .build() + val resp = httpClient.newCall(req).execute() + val respBody = resp.body.string() + if (!resp.isSuccessful) return@withContext Result.failure(Exception("LibreTranslate HTTP ${resp.code}")) + val obj = org.json.JSONObject(respBody) + val translated = obj.optString("translatedText").ifBlank { null } + if (translated == null) Result.failure(Exception("No translatedText in response")) else Result.success(translated) + } catch (e: Exception) { + Result.failure(e) + } + } + + suspend fun simpleTranslateTo(text: String, targetLanguage: Language): Result = withContext(Dispatchers.IO) { + Log.d("simpleTranslateTo: $text, $targetLanguage") + //TODO fix this, as it is broken currently + val useLibre = settingsRepository.useLibreTranslate.flow.first() +// if (useLibre) { +// val targetCode = targetLanguage.toLibreCode() +// val supported = getLibreSupportedCodes() +// val supportsTarget = supported.contains(targetCode) || supported.contains(targetCode.substringBefore('-')) +// if (supportsTarget) { +// val sourceCodeFull = languageRepository.loadSelectedSourceLanguage().first()?.toLibreCode() +// val targetForRequest = if (supported.contains(targetCode)) targetCode else targetCode.substringBefore('-') +// val sourceForRequest = sourceCodeFull?.let { sc -> if (supported.contains(sc)) sc else sc.substringBefore('-') } +// val libreResult = libreTranslate(text, sourceForRequest, targetForRequest, alternatives = 3) +// if (libreResult.isSuccess) { +// return@withContext libreResult.map { translated -> +// PunctuationPreserver.preserveSpacing(original = text, translated = translated) +// } +// } +// } +// } + + val sourceLangName = languageRepository.loadSelectedSourceLanguage().first()?.englishName ?: "Auto" + val template = TextTranslationRequest( + text = text, + sourceLanguage = sourceLangName, + targetLanguage = targetLanguage.englishName + ) + + apiRequestHandler.executeRequest(template).map { apiResponse -> + PunctuationPreserver.preserveSpacing(original = text, translated = apiResponse.translatedText) + } + } + + suspend fun translateSentence(sentence: String): Result = withContext(Dispatchers.IO) { + val additionalInstructions = settingsRepository.customPromptTranslation.flow.first() + val selectedSource = languageRepository.loadSelectedSourceLanguage().first() + val sourceLangName = selectedSource?.englishName ?: "Auto" + val targetLang = languageRepository.loadSelectedTargetLanguage().first() + ?: return@withContext Result.failure(Exception("Target language is not selected.")) + + val useLibre = settingsRepository.useLibreTranslate.flow.first() + if (useLibre) { + val targetCode = targetLang.toLibreCode() + val supported = getLibreSupportedCodes() + val supportsTarget = supported.contains(targetCode) || supported.contains(targetCode.substringBefore('-')) + if (supportsTarget) { + val sourceCodeFull = selectedSource?.toLibreCode() + val targetForRequest = if (supported.contains(targetCode)) targetCode else targetCode.substringBefore('-') + val sourceForRequest = sourceCodeFull?.let { sc -> if (supported.contains(sc)) sc else sc.substringBefore('-') } + val libreResult = libreTranslate(sentence, sourceForRequest, targetForRequest, alternatives = 3) + if (libreResult.isSuccess) { + return@withContext libreResult.map { translated -> + val fixed = PunctuationPreserver.preserveSpacing(original = sentence, translated = translated) + TranslationHistoryItem( + text = fixed, + sourceLanguageCode = selectedSource?.nameResId, + targetLanguageCode = selectedSource?.nameResId, + playable = TextToSpeechHelper.isPlayable(context, targetLang), + sourceText = sentence, + // FIXED: Removed translatedText = fixed + translationSource = context.getString(R.string.translation_server), + translationModel = null + ) + } + } + } + } + + val template = TextTranslationRequest( + text = sentence, + sourceLanguage = sourceLangName, + targetLanguage = targetLang.englishName, + additionalInstructions = additionalInstructions + ) + + val translationModel = try { + apiRepository.getTranslationModel().first()?.displayName + } catch (e: Exception) { + Log.e("TranslationService", "Failed to get translation model", e) + null + } + + apiRequestHandler.executeRequest(template).map { apiResponse -> + val fixed = PunctuationPreserver.preserveSpacing(original = sentence, translated = apiResponse.translatedText) + TranslationHistoryItem( + text = fixed, + sourceLanguageCode = selectedSource?.nameResId, + targetLanguageCode = selectedSource?.nameResId, + playable = TextToSpeechHelper.isPlayable(context, targetLang), + sourceText = sentence, + // FIXED: Removed translatedText = fixed + translationSource = context.getString(R.string.label_ai_model), + translationModel = translationModel + ) + } + } + + suspend fun translateVocabulary(word: String): Result = withContext(Dispatchers.IO) { + val selectedSource = languageRepository.loadSelectedSourceLanguage().first() + val targetLang = languageRepository.loadSelectedTargetLanguage().first() + ?: return@withContext Result.failure(Exception("Target language is not selected.")) + + val useLibre = settingsRepository.useLibreTranslate.flow.first() + if (useLibre) { + val targetCode = targetLang.toLibreCode() + val supported = getLibreSupportedCodes() + val supportsTarget = supported.contains(targetCode) || supported.contains(targetCode.substringBefore('-')) + if (supportsTarget) { + val sourceCodeFull = selectedSource?.toLibreCode() + val targetForRequest = if (supported.contains(targetCode)) targetCode else targetCode.substringBefore('-') + val sourceForRequest = sourceCodeFull?.let { sc -> if (supported.contains(sc)) sc else sc.substringBefore('-') } + val libreResult = libreTranslate(word, sourceForRequest, targetForRequest, alternatives = 1) + if (libreResult.isSuccess) { + return@withContext libreResult.map { translatedText -> + val fixed = PunctuationPreserver.preserveSpacing(original = word, translated = translatedText) + TranslationHistoryItem( + text = fixed, + sourceLanguageCode = selectedSource?.nameResId, + targetLanguageCode = targetLang.nameResId, + sourceText = word, + // FIXED: Removed translatedText = fixed + translationSource = context.getString(R.string.translation_server), + translationModel = null + ) + } + } + } + } + + val sourceLangName = selectedSource?.englishName ?: "Auto" + val template = TextTranslationRequest( + text = word, + sourceLanguage = sourceLangName, + targetLanguage = targetLang.englishName + ) + + val translationModel = try { + apiRepository.getTranslationModel().first()?.displayName + } catch (e: Exception) { + Log.e("TranslationService", "Failed to get translation model", e) + null + } + + apiRequestHandler.executeRequest(template).map { response -> + val fixed = PunctuationPreserver.preserveSpacing(original = word, translated = response.translatedText) + TranslationHistoryItem( + text = fixed, + sourceLanguageCode = selectedSource?.nameResId, + targetLanguageCode = targetLang.nameResId, + sourceText = word, + // FIXED: Removed translatedText = fixed + translationSource = context.getString(R.string.label_ai_model), + translationModel = translationModel + ) + } + } + + suspend fun getMultipleSynonyms(word: String, contextPhrase: String? = null): Result> = withContext(Dispatchers.IO) { + val targetLang = languageRepository.loadSelectedTargetLanguage().first() + ?: return@withContext Result.failure(Exception("Target language is not selected.")) + + val template = SynonymListRequest( + word = word, + language = targetLang.englishName, + contextPhrase = contextPhrase + ) + + apiRequestHandler.executeRequest(template).map { response -> + response.items + } + } + + suspend fun explainTranslation(sourceText: String, translatedText: String): Result = withContext(Dispatchers.IO) { + val sourceLang = languageRepository.loadSelectedSourceLanguage().first()?.englishName ?: "Auto" + val targetLang = languageRepository.loadSelectedTargetLanguage().first() + ?: return@withContext Result.failure(Exception("Target language is not selected.")) + + val template = TranslationExplanationRequest( + sourceText = sourceText, + translatedText = translatedText, + sourceLanguage = sourceLang, + targetLanguage = targetLang.englishName + ) + + apiRequestHandler.executeRequest(template).map { it.explanation } + } + + suspend fun rephraseWithAlternative( + sourceText: String, + currentTranslation: String, + originalWord: String, + chosenAlternative: String + ): Result = withContext(Dispatchers.IO) { + val sourceLang = languageRepository.loadSelectedSourceLanguage().first()?.englishName ?: "Auto" + val targetLang = languageRepository.loadSelectedTargetLanguage().first() + ?: return@withContext Result.failure(Exception("Target language is not selected.")) + + val template = RephraseRequest( + sourceText = sourceText, + currentTranslation = currentTranslation, + originalWord = originalWord, + chosenAlternative = chosenAlternative, + sourceLanguage = sourceLang, + targetLanguage = targetLang.englishName + ) + + apiRequestHandler.executeRequest(template) + .map { apiResponse -> + PunctuationPreserver.preserveSpacing(original = sourceText, translated = apiResponse.translatedText) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/VocabularyService.kt b/app/src/main/java/eu/gaudian/translator/utils/VocabularyService.kt new file mode 100644 index 0000000..e6b49b3 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/VocabularyService.kt @@ -0,0 +1,560 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import android.app.Application +import android.content.Context +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.model.communication.ApiManager +import eu.gaudian.translator.model.grammar.GrammaticalFeature +import eu.gaudian.translator.model.grammar.LanguageConfig +import eu.gaudian.translator.model.grammar.VocabularyFeatures +import eu.gaudian.translator.model.repository.SettingsRepository +import eu.gaudian.translator.utils.StringHelper.isSentenceStrict +import eu.gaudian.translator.viewmodel.LanguageConfigViewModel +import eu.gaudian.translator.viewmodel.MessageDisplayType +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.withContext +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive + +class VocabularyService(context: Context) { + + private val apiRequestHandler = ApiRequestHandler(ApiManager(context), context) + private val settingsRepository = SettingsRepository(context) + private val languageConfigViewModel = + LanguageConfigViewModel(context.applicationContext as Application) + private val jsonParser = Json { ignoreUnknownKeys = true; isLenient = true } + + suspend fun fetchZipfFrequency(word: String, languageCode: String): Result = withContext(Dispatchers.IO) { + if (isSentenceStrict(word)) { + return@withContext Result.failure(Exception("Cannot fetch frequency for a sentence")) + } + try { + Log.d("VocabularyService", "Fetching zipf frequency for word '$word' in language '$languageCode'") + + val encodedWord = java.net.URLEncoder.encode(word, Charsets.UTF_8.name()) + val encodedLang = java.net.URLEncoder.encode(languageCode, Charsets.UTF_8.name()) + val urlString = "http://23.88.48.47:5100/zipf_frequency?word=$encodedWord&lang=$encodedLang" + + val url = java.net.URL(urlString) + val connection = (url.openConnection() as java.net.HttpURLConnection).apply { + requestMethod = "GET" + connectTimeout = 8000 + readTimeout = 8000 + } + + try { + val responseCode = connection.responseCode + val responseMessage = connection.responseMessage + val stream = if (responseCode in 200..299) connection.inputStream else connection.errorStream + val body = stream?.bufferedReader()?.use { it.readText() } ?: "" + + if (responseCode in 200..299) { + val jsonObject = Json.parseToJsonElement(body).jsonObject + val zipfFrequency = jsonObject["zipf_frequency"]?.jsonPrimitive?.content?.toFloatOrNull() + if (zipfFrequency != null) { + Log.d("VocabularyService", "Successfully fetched zipf frequency: $zipfFrequency") + Result.success(zipfFrequency) + } else { + Log.w("VocabularyService", "Invalid zipf frequency response format: $body") + Result.failure(Exception("Invalid response format")) + } + } else { + Log.w("VocabularyService", "Failed to fetch zipf frequency: $responseCode - $responseMessage | $body") + Result.failure(Exception("HTTP $responseCode: $responseMessage")) + } + } finally { + connection.disconnect() + } + } catch (e: Exception) { + Log.e("VocabularyService", "Error fetching zipf frequency: ${e.message}") + Result.failure(e) + } + } + + suspend fun translateWordsBatch( + words: List, + languageFirst: Language, + languageSecond: Language + ): Result> { + if (words.isEmpty()) return Result.success(emptyList()) + + return try { + Log.i("VocabularyService", "Translating batch of ${words.size} words from ${languageFirst.englishName} to ${languageSecond.englishName}") + + val template = VocabularyTranslationRequest( + words = words.filter { it.isNotBlank() }.distinct(), + languageFirst = languageFirst.englishName, + languageSecond = languageSecond.englishName + ) + + val result = apiRequestHandler.executeRequest(template) + + result.map { apiResponse -> + val mappedItems = apiResponse.flashcards.mapNotNull { flashcard -> + val frontIsLangFirst = flashcard.front.language.equals(languageFirst.englishName, true) + val backIsLangSecond = flashcard.back.language.equals(languageSecond.englishName, true) + val frontIsLangSecond = flashcard.front.language.equals(languageSecond.englishName, true) + val backIsLangFirst = flashcard.back.language.equals(languageFirst.englishName, true) + when { + frontIsLangFirst && backIsLangSecond -> VocabularyItem( + id = 0, + languageFirstId = languageFirst.nameResId, + languageSecondId = languageSecond.nameResId, + wordFirst = flashcard.front.word, + wordSecond = flashcard.back.word + ) + frontIsLangSecond && backIsLangFirst -> VocabularyItem( + id = 0, + languageFirstId = languageFirst.nameResId, + languageSecondId = languageSecond.nameResId, + wordFirst = flashcard.back.word, + wordSecond = flashcard.front.word + ) + else -> null + } + } + Log.i("VocabularyService", "Successfully translated ${mappedItems.size} out of ${words.size} words") + mappedItems + }.onFailure { exception -> + Log.e("VocabularyService", "Failed to translate word batch", exception) + } + } catch (e: Exception) { + Log.e("VocabularyService", "Unexpected error in translateWordsBatch", e) + Result.failure(e) + } + } + + suspend fun generateVocabularyItems( + category: String, + languageFirst: Language, + languageSecond: Language, + amount: Int + ): Result> { + return try { + Log.i("VocabularyService", "Generating $amount vocabulary items for category '$category' (${languageFirst.englishName} -> ${languageSecond.englishName})") + + val settingsPrompt = settingsRepository.customPromptVocabulary.flow.first() + + val template = VocabularyGenerationRequest( + category = category, + languageFirst = languageFirst.englishName, + languageSecond = languageSecond.englishName, + amount = amount, + customPrompt = settingsPrompt + ) + + val result = apiRequestHandler.executeRequest(template) + + result.map { apiResponse -> + Log.d("VocabularyService", "API returned ${apiResponse.flashcards.size} flashcards. Now mapping to VocabularyItem model.") + + val mappedItems = apiResponse.flashcards.mapNotNull { flashcard -> + val frontIsLangFirst = flashcard.front.language.equals(languageFirst.englishName, ignoreCase = true) + val backIsLangSecond = flashcard.back.language.equals(languageSecond.englishName, ignoreCase = true) + val frontIsLangSecond = flashcard.front.language.equals(languageSecond.englishName, ignoreCase = true) + val backIsLangFirst = flashcard.back.language.equals(languageFirst.englishName, ignoreCase = true) + + when { + frontIsLangFirst && backIsLangSecond -> VocabularyItem( + id = 0, + languageFirstId = languageFirst.nameResId, + languageSecondId = languageSecond.nameResId, + wordFirst = flashcard.front.word.trim(), + wordSecond = flashcard.back.word.trim() + ) + + frontIsLangSecond && backIsLangFirst -> VocabularyItem( + id = 0, + languageFirstId = languageFirst.nameResId, + languageSecondId = languageSecond.nameResId, + wordFirst = flashcard.back.word.trim(), + wordSecond = flashcard.front.word.trim() + ) + + else -> { + Log.w("VocabularyService", "SKIPPING flashcard. Mismatched languages. Expected '${languageFirst.englishName}/${languageSecond.englishName}', but API returned '${flashcard.front.language}/${flashcard.back.language}'.") + StatusMessageService.trigger( + StatusAction.ShowMessage( + "SKIPPING flashcard. Mismatched languages. Expected '${languageFirst.englishName}/${languageSecond.englishName}', but API returned '${flashcard.front.language}/${flashcard.back.language}'.", + MessageDisplayType.ERROR, + 5 + ) + ) + null + } + } + } + + Log.i("VocabularyService", "Successfully mapped ${mappedItems.size} out of ${apiResponse.flashcards.size} received flashcards.") + mappedItems + }.onFailure { exception -> + Log.e("VocabularyService", "Vocabulary generation failed entirely.", exception) + StatusMessageService.trigger( + StatusAction.ShowMessage( + "Vocabulary generation failed entirely: ${exception.message}", //TODO translate + MessageDisplayType.ERROR, + 5 + )) + } + } catch (e: Exception) { + Log.e("VocabularyService", "Unexpected error in generateVocabularyItems", e) + Result.failure(e) + } + } + + suspend fun generateSynonyms( + term: String, + translation: String, + language: Language, + translationLanguage: Language, + amount: Int? = 5 + ): Result> = withContext(Dispatchers.IO) { + try { + Log.i("VocabularyService", "Generating $amount synonyms for term '$term' in ${language.englishName}") + + val template = SynonymGenerationRequest( + amount = amount ?: 5, + language = language.englishName, + term = term, + translation = translation, + translationLanguage = translationLanguage.englishName, + languageCode = language.code + ) + + val result = apiRequestHandler.executeRequest(template) + + result.map { response -> + val synonyms = response.synonyms + .map { it.copy(word = it.word.trim().replace("\"", "")) } + .filter { it.word.isNotEmpty() } + Log.i("VocabularyService", "Successfully generated ${synonyms.size} synonyms for term '$term'") + synonyms + }.onFailure { exception -> + Log.e("VocabularyService", "Failed to generate synonyms for term '$term'", exception) + } + } catch (e: Exception) { + Log.e("VocabularyService", "Unexpected error in generateSynonyms for term '$term'", e) + Result.failure(e) + } + } + + suspend fun fetchAndApplyGrammaticalDetails( + items: List, + languages: Map + ): Result> = withContext(Dispatchers.IO) { + if (items.isEmpty()) return@withContext Result.success(emptyList()) + + val wordsToAnalyze = items.flatMap { item -> + listOfNotNull( + item.languageFirstId?.let { WordIdentifier(item.id, "first", item.wordFirst, it) }, + item.languageSecondId?.let { WordIdentifier(item.id, "second", item.wordSecond, it) } + ) + } + + val classificationResult = classifyWords(wordsToAnalyze, languages) + if (classificationResult.isFailure) { + return@withContext Result.failure(classificationResult.exceptionOrNull()!!) + } + val classifiedWords = classificationResult.getOrNull() ?: return@withContext Result.success(items) + + val wordsWithFeaturesToFetch = mutableListOf() + val wordsWithCategoryOnly = mutableListOf() + + classifiedWords.forEach { word -> + val config = languageConfigViewModel.getConfigForLanguage(word.languageCode) + val categoryHasFields = config?.categories?.get(word.category)?.fields?.isNotEmpty() ?: false + if (categoryHasFields) { + wordsWithFeaturesToFetch.add(word) + } else { + wordsWithCategoryOnly.add(word) + } + } + + val groupedByLangAndCategory = wordsWithFeaturesToFetch.groupBy { Pair(it.languageCode, it.category) } + + val featureResults = groupedByLangAndCategory.map { (groupKey, words) -> + async { + val (langCode, category) = groupKey + val languageConfig = languageConfigViewModel.getConfigForLanguage(langCode) + fetchFeaturesForGroup(words, languageConfig, category) + } + }.awaitAll().filterNotNull().flatten() + + val categoryOnlyResults = wordsWithCategoryOnly.map { + WordWithFeatures( + itemId = it.itemId, + position = it.position, + category = it.category, + properties = emptyMap() // No properties to add + ) + } + + val allResults = featureResults + categoryOnlyResults + val finalItems = mergeFeaturesIntoItems(items, classifiedWords, allResults) + + Result.success(finalItems) + } + + private suspend fun classifyWords( + words: List, + languages: Map + ): Result> { + // Short-circuit classification for sentences using StringHelper + val preclassified = words.associateWith { word -> + if (isSentenceStrict(word.word)) "sentence" else null + } + + val wordsNeedingApi = words.filter { preclassified[it] == null } + + if (wordsNeedingApi.isEmpty()) { + return Result.success(words.map { + ClassifiedWord( + itemId = it.itemId, + position = it.position, + word = it.word, + languageCode = languages[it.languageId]?.code ?: "", + category = "sentence" + ) + }) + } + + val wordsToClassify = wordsNeedingApi.map { + WordToAnalyze(it.tempId, it.word, languages[it.languageId]?.englishName ?: "") + } + val languageConfigs = languageConfigViewModel.configs.value + val possibleCategories = languageConfigs.values.flatMap { it.categories.keys }.distinct() + + val wordsToClassifyJson = jsonParser.encodeToString(wordsToClassify) + val template = GrammarClassificationRequest(wordsToClassifyJson, possibleCategories.joinToString(", ")) + + return apiRequestHandler.executeRequest(template).map { response -> + val apiClassified = response.results.mapNotNull { result -> + val originalWord = wordsNeedingApi.find { it.tempId == result.id } + originalWord?.let { + ClassifiedWord( + itemId = it.itemId, + position = it.position, + word = it.word, + languageCode = languages[it.languageId]?.code ?: "", + category = result.category + ) + } + } + // Add preclassified sentences + val preclassifiedItems = words.filter { preclassified[it] != null }.map { + ClassifiedWord( + itemId = it.itemId, + position = it.position, + word = it.word, + languageCode = languages[it.languageId]?.code ?: "", + category = preclassified[it] ?: "" + ) + } + apiClassified + preclassifiedItems + } + } + + private fun buildPromptForFeatures( + words: List, + languageConfig: LanguageConfig?, + category: String + ): String? { + val categoryConfig = languageConfig?.categories?.get(category) ?: return null + if (categoryConfig.fields.isEmpty()) return null + + val languageName = languageConfig.language_code + val wordsJson = words.map { WordToAnalyzeFeatures(id = it.tempId, word = it.word) } + + val promptBuilder = PromptBuilder("Analyze the grammatical properties for each '$category' in the provided JSON array for the '$languageName' language.") + + categoryConfig.fields.forEach { field -> + val propertyName = "'${field.key}'" + if (field.type == "enum" && !field.options.isNullOrEmpty()) { + val optionsString = field.options.joinToString(", ") { "'$it'" } + promptBuilder.addDetail("For the $propertyName property, choose one of the following values: $optionsString.") + } else { + promptBuilder.addDetail("For the $propertyName property, provide the appropriate value. Do not return anything else. If the property is not applicable, return an empty response.") + } + } + + promptBuilder + .withJsonResponse("a 'results' array, each with the original 'id' and a 'properties' object containing the found values.") + .addDetail("Here is the JSON array: ${jsonParser.encodeToString(wordsJson)}") + + return promptBuilder.build() + } + + private suspend fun fetchFeaturesForGroup( + words: List, + languageConfig: LanguageConfig?, + category: String + ): List? { + val prompt = buildPromptForFeatures(words, languageConfig, category) ?: return null + + Log.d(prompt) + + val template = GrammarFeaturesRequest(prompt) + + return apiRequestHandler.executeRequest(template).map { response -> + response.results.mapNotNull { result -> + words.find { it.tempId == result.id }?.let { originalWord -> + @Suppress("UNCHECKED_CAST") + WordWithFeatures( + itemId = originalWord.itemId, + position = originalWord.position, + category = category, + properties = result.properties.filterValues { it != null } as Map + ) + } + } + }.getOrNull() + } + + private fun mergeFeaturesIntoItems( + originalItems: List, + classifiedWords: List, + featureResults: List + ): List { + val featuresMap = featureResults.associateBy { Pair(it.itemId, it.position) } + val classifiedMap = classifiedWords.associateBy { Pair(it.itemId, it.position) } + val itemsMap = originalItems.associateBy { it.id }.toMutableMap() + + classifiedMap.forEach { (key, classifiedWord) -> + val (itemId, position) = key + val currentItem = itemsMap[itemId] ?: return@forEach + + val currentFeatures = currentItem.features?.let { + try { jsonParser.decodeFromString(it) } catch (_: Exception) { VocabularyFeatures() } + } ?: VocabularyFeatures() + + val wordWithFeatures = featuresMap[key] + val newGrammaticalFeature = GrammaticalFeature( + category = wordWithFeatures?.category ?: classifiedWord.category, + properties = wordWithFeatures?.properties ?: emptyMap() + ) + + var finalWord = classifiedWord.word + val languageConfig = languageConfigViewModel.getConfigForLanguage(classifiedWord.languageCode) + val categoryConfig = languageConfig?.categories?.get(newGrammaticalFeature.category) + + if (!isSentenceStrict(finalWord)) { + if (newGrammaticalFeature.category == "noun" && categoryConfig != null) { + // Prefer explicit mapping based on detected gender; otherwise fall back to removing any configured leading articles + val gender = newGrammaticalFeature.properties["gender"] + val mappedArticle = categoryConfig.mappings?.get("gender")?.get(gender) + finalWord = when { + mappedArticle != null -> StringHelper.removeLeadingArticlesOneOf(finalWord, listOf(mappedArticle)) + !languageConfig.articles.isNullOrEmpty() -> StringHelper.removeLeadingArticlesOneOf( + finalWord, + languageConfig.articles + ) + else -> finalWord + } + } + } + + val updatedFeatures = if (position == "first") { + currentFeatures.copy(first = newGrammaticalFeature) + } else { + currentFeatures.copy(second = newGrammaticalFeature) + } + + val updatedItem = if (position == "first") { + currentItem.copy( + wordFirst = finalWord, + features = jsonParser.encodeToString(updatedFeatures) + ) + } else { + currentItem.copy( + wordSecond = finalWord, + features = jsonParser.encodeToString(updatedFeatures) + ) + } + itemsMap[itemId] = updatedItem + } + + return originalItems.map { itemsMap[it.id] ?: it } + } + + // Data classes for API responses + @Serializable + data class SynonymApiResponse( + val synonyms: List + ) + + @Serializable + data class SynonymObject( + val word: String, + val proximity: Int + ) + + @Serializable + data class BatchClassificationResponse( + val results: List + ) + + @Serializable + data class ClassificationResult( + val id: Int, + val category: String + ) + + @Serializable + data class WordToAnalyze( + val id: Int, + val word: String, + val language: String + ) + + @Serializable + data class WordToAnalyzeFeatures( + val id: Int, + val word: String + ) + + @Serializable + data class BatchGrammarResponse( + val results: List + ) + + @Serializable + data class AnalyzedWordResult( + val id: Int, + val properties: Map + ) + + // Internal data classes + private data class WordIdentifier( + val itemId: Int, + val position: String, // "first" or "second" + val word: String, + val languageId: Int + ) { + val tempId = "item${itemId}_$position".hashCode() + } + + private data class ClassifiedWord( + val itemId: Int, + val position: String, + val word: String, + val languageCode: String, + val category: String + ) { + val tempId = "item${itemId}_$position".hashCode() + } + + private data class WordWithFeatures( + val itemId: Int, + val position: String, + val category: String, + val properties: Map + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/YouTubeApiService.kt b/app/src/main/java/eu/gaudian/translator/utils/YouTubeApiService.kt new file mode 100644 index 0000000..9d2e0c9 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/YouTubeApiService.kt @@ -0,0 +1,49 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import okhttp3.OkHttpClient +import okhttp3.Request + +object YouTubeApiService { + + + private const val VIDEO_TITLE_URL = "http://23.88.48.47:5151/api/get_title/%s" + + private val client = OkHttpClient.Builder().build() + + + suspend fun getVideoTitle(videoId: String): String = withContext(Dispatchers.IO) { + try { + // The URL now points to your Flask server's endpoint. + val url = VIDEO_TITLE_URL.format(videoId) + val request = Request.Builder().url(url).build() + val start = System.currentTimeMillis() + Log.d("YouTubeApiService", "Requesting video title from server: GET $url") + val response = client.newCall(request).execute() + val took = System.currentTimeMillis() - start + val code = response.code + val jsonResponse = response.body.string() + Log.i("YouTubeApiService", "GET $url -> $code in $took ms") + Log.d("YouTubeApiService", "Video title server response: ${jsonResponse.take(200)}") + + // The JSON from your server is simple: {"title": "The Title"} + // This regex will parse it correctly. + val title = "\"title\"\\s*:\\s*\"(.*?)\"".toRegex().find(jsonResponse)?.groupValues?.get(1) ?: "Unknown Title" + + if (title == "Unknown Title") { + Log.w("YouTubeApiService", "Could not parse video title from server response for id=$videoId") + } else { + Log.i("YouTubeApiService", "Parsed video title: '${title.take(100)}'") + } + client.cache?.evictAll() + Log.d("Cache", "OkHttp cache cleared!") + title + } catch (e: Exception) { + Log.e("YouTubeApiService", "Could not fetch video title for $videoId from server", e) + "Unknown Title" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/YouTubeExerciseService.kt b/app/src/main/java/eu/gaudian/translator/utils/YouTubeExerciseService.kt new file mode 100644 index 0000000..db9769c --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/YouTubeExerciseService.kt @@ -0,0 +1,99 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils + +import eu.gaudian.translator.model.SubtitleLine +import eu.gaudian.translator.model.jsonParser +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import okhttp3.OkHttpClient +import okhttp3.Request +import java.util.concurrent.TimeUnit + + +@Serializable +data class LanguageInfo( + @Suppress("HardCodedStringLiteral") @SerialName("language_code") + val languageCode: String +) + +@Serializable +data class TranscriptListResponse( + @SerialName("available_languages") + val availableLanguages: List = emptyList() +) + +@Serializable +data class FullTranscriptResponse( + @Suppress("HardCodedStringLiteral") @SerialName("transcript") + val transcript: List = emptyList() +) + +/** + * Service that talks to the external transcript backend provided in the issue description. + * Base URL: http://23.88.48.47:5151 + */ +object YouTubeExerciseService { + private const val BASE_URL = "http://23.88.48.47:5151" + + private val client: OkHttpClient by lazy { + OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) // Time to establish a connection + .readTimeout(30, TimeUnit.SECONDS) // Time waiting for data after connection + .writeTimeout(30, TimeUnit.SECONDS) // Time to write data + .build() + } + + suspend fun listTranscripts(videoId: String): List = withContext(Dispatchers.IO) { + val url = "$BASE_URL/api/list_transcripts/$videoId" + Log.d("url: $url") + try { + val request = Request.Builder().url(url).build() + val response = client.newCall(request).execute() + val jsonResponse = response.body.string() + + if (response.isSuccessful && jsonResponse.isNotBlank()) { + // Parse the full object + val transcriptListResponse = jsonParser.decodeFromString(jsonResponse) + // Extract just the language codes and return them as a List + val languageCodes = transcriptListResponse.availableLanguages.map { it.languageCode } + Log.d("YouTubeExerciseService", "Found language codes for $videoId: $languageCodes") + return@withContext languageCodes + } else { + Log.w("YouTubeExerciseService", "Failed to list transcripts for $videoId. Code: ${response.code}") + return@withContext emptyList() + } + } catch (e: Exception) { + Log.e("YouTubeExerciseService", "Error listing transcripts for $videoId", e) + return@withContext emptyList() + } + } + suspend fun getTranscript(videoId: String, languageCode: String): List = withContext(Dispatchers.IO) { + val url = "$BASE_URL/api/get_transcript/$videoId/$languageCode" + Log.d("YouTubeExerciseService", "getTranscript url: $url") + try { + val request = Request.Builder().url(url).build() + val response = client.newCall(request).execute() + val jsonResponse = response.body.string() + + if (response.isSuccessful && jsonResponse.isNotBlank()) { + Log.d("YouTubeExerciseService", "getTranscript jsonResponse: ${jsonResponse.take(2000)}") + + + val fullResponse = jsonParser.decodeFromString(jsonResponse) + val subtitles = fullResponse.transcript // Then extract the list of subtitles + + Log.d("YouTubeExerciseService", "Fetched ${subtitles.size} subtitle lines for $videoId") + return@withContext subtitles + } else { + Log.w("YouTubeExerciseService", "Failed to get transcript for $videoId ($languageCode). Code: ${response.code}") + return@withContext emptyList() + } + } catch (e: Exception) { + Log.e("YouTubeExerciseService", "Error getting transcript for $videoId ($languageCode)", e) + return@withContext emptyList() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/dictionary/AbstractVerbParser.kt b/app/src/main/java/eu/gaudian/translator/utils/dictionary/AbstractVerbParser.kt new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/java/eu/gaudian/translator/utils/dictionary/DictionaryService.kt b/app/src/main/java/eu/gaudian/translator/utils/dictionary/DictionaryService.kt new file mode 100644 index 0000000..9b0d483 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/dictionary/DictionaryService.kt @@ -0,0 +1,252 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils.dictionary + +import android.content.Context +import eu.gaudian.translator.R +import eu.gaudian.translator.model.DictionaryEntry +import eu.gaudian.translator.model.EtymologyData +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.communication.ApiManager +import eu.gaudian.translator.model.repository.DictionaryRepository +import eu.gaudian.translator.model.repository.SettingsRepository +import eu.gaudian.translator.utils.ApiRequestHandler +import eu.gaudian.translator.utils.DictionaryDefinitionRequest +import eu.gaudian.translator.utils.EtymologyRequest +import eu.gaudian.translator.utils.ExampleSentenceRequest +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.WordOfTheDayRequest +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.withContext +import java.time.ZoneId +import java.time.format.DateTimeFormatter +import kotlin.time.Clock +import kotlin.time.ExperimentalTime +import kotlin.time.Instant + +class DictionaryService(context: Context) { + private val appContext: Context = context.applicationContext + private val settingsRepository = SettingsRepository(appContext) + private val apiRequestHandler = ApiRequestHandler( + ApiManager(appContext), + context = appContext + ) + private val dictionaryRepository = DictionaryRepository(appContext) + + /** + * Retrieves user-selected dictionary options from settings and ensures + * "Definition" is always included as a required part. + * + * Stored values may be either stable keys (from R.array.dictionary_content_keys) + * or legacy, localized labels (from R.array.dictionary_content). Here we + * normalize them to the current locale's labels so prompts stay coherent + * even if the app language changes. + */ + private suspend fun getActivatedDictionaryOptions(): String { + val storedValues = settingsRepository.dictionarySwitches.flow.first() + + val resources = appContext.resources + val keys = resources.getStringArray(R.array.dictionary_content_keys) + val labels = resources.getStringArray(R.array.dictionary_content) + + val selectedLabels = mutableSetOf() + + // Map each stored entry to a label in the current locale, handling both + // the new key-based format and the legacy label-based format. + for (value in storedValues) { + val keyIndex = keys.indexOf(value) + if (keyIndex >= 0 && keyIndex < labels.size) { + // New: stored as stable key + selectedLabels.add(labels[keyIndex]) + } else { + // Legacy: stored as localized label + val labelIndex = labels.indexOf(value) + if (labelIndex >= 0) { + selectedLabels.add(labels[labelIndex]) + } else { + // Fallback: keep whatever was stored + selectedLabels.add(value) + } + } + } + + // Always ensure the "Definition" part is included. + val definitionKeyIndex = keys.indexOf("definition") + if (definitionKeyIndex >= 0 && definitionKeyIndex < labels.size) { + selectedLabels.add(labels[definitionKeyIndex]) + } else { + // Fallback if arrays are inconsistent + selectedLabels.add("Definition") + } + + return selectedLabels.joinToString(", ") + } + + /** + * Searches for a word's full definition, including user-selected parts. + * Uses the new unified API request template system. + */ + @OptIn(ExperimentalTime::class) + suspend fun searchDefinition(query: String, language: Language): Result = withContext(Dispatchers.IO) { + try { + Log.i("DictionaryService", "Searching definition for word: $query in language: ${language.name}") + + val requestedParts = getActivatedDictionaryOptions() + Log.d("DictionaryService", "Requested dictionary parts: $requestedParts") + + val template = DictionaryDefinitionRequest( + word = query, + language = language.name, + requestedParts = requestedParts + ) + + val result = apiRequestHandler.executeRequest(template) + + result.map { apiResponse -> + Log.i("DictionaryService", "Successfully retrieved definition for: $query") + DictionaryEntry( + id = 0, // Repository will set the ID upon insertion. + word = apiResponse.word, + definition = apiResponse.parts, + languageCode = language.nameResId, + languageName = language.name, + createdAt = Clock.System.now() + ) + }.onFailure { exception -> + Log.e("DictionaryService", "Failed to search definition for: $query", exception) + } + } catch (e: Exception) { + Log.e("DictionaryService", "Unexpected error in searchDefinition for: $query", e) + Result.failure(e) + } + } + + /** + * Retrieves an example sentence for a word with its translation using the new unified API request system. + */ + suspend fun getExampleSentence(word: String, wordTranslation: String, languageFirst: Language, languageSecond: Language): Result> = withContext(Dispatchers.IO) { + try { + Log.i("DictionaryService", "Getting example sentence for word: $word (${languageFirst.name} -> ${languageSecond.name})") + + val template = ExampleSentenceRequest( + word = word, + wordTranslation = wordTranslation, + languageFirst = languageFirst.name, + languageSecond = languageSecond.name + ) + + val result = apiRequestHandler.executeRequest(template) + + result.map { apiResponse -> + Log.i("DictionaryService", "Successfully retrieved example sentence for: $word") + Pair( + apiResponse.sourceSentence.trim(), + apiResponse.targetSentence.trim() + ) + }.onFailure { exception -> + Log.e("DictionaryService", "Failed to get example sentence for: $word", exception) + } + } catch (e: Exception) { + Log.e("DictionaryService", "Unexpected error in getExampleSentence for: $word", e) + Result.failure(e) + } + } + + @OptIn(ExperimentalTime::class) + suspend fun getWordOfTheDay( + language: Language, + forceRefresh: Boolean = false + ): DictionaryEntry? = withContext(Dispatchers.IO) { + try { + val today: Instant = Clock.System.now() + val todayLocalDate = java.time.Instant.ofEpochMilli(today.toEpochMilliseconds()) + .atZone(ZoneId.systemDefault()) + .toLocalDate() + val todayString = todayLocalDate.format(DateTimeFormatter.ISO_LOCAL_DATE) + + if (!forceRefresh) { + val lastWordOfTheDay = dictionaryRepository.loadWordOfTheDay().first() + val createdAtInstant = lastWordOfTheDay?.createdAt + val createdAtLocalDate = createdAtInstant?.let { + java.time.Instant.ofEpochMilli(it.toEpochMilliseconds()) + .atZone(ZoneId.systemDefault()) + .toLocalDate() + } + if (createdAtLocalDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) == todayString) { + Log.d("DictionaryService", "Returning cached word of the day for: $todayString") + return@withContext lastWordOfTheDay + } + } + + Log.i("DictionaryService", "Generating new word of the day for: $todayString in language: ${language.name}") + + val topics = listOf( + "science", "literature", "history", "technology", "nature", + "art", "philosophy", "mathematics", "music", "architecture", + "an obscure animal", "a forgotten tool", "a culinary term", + "a mythological concept" + ) + + val randomTopic = topics.random() + Log.d("DictionaryService", "Selected topic for word of the day: $randomTopic") + + val template = WordOfTheDayRequest( + language = language.name, + category = randomTopic + ) + + val result = apiRequestHandler.executeRequest(template) + + result.fold( + onSuccess = { apiResponse -> + val newEntry = DictionaryEntry( + id = 0, + word = apiResponse.word, + definition = apiResponse.parts, + languageCode = language.nameResId, + languageName = language.name, + createdAt = today + ) + dictionaryRepository.saveWordOfTheDay(newEntry) + Log.i("DictionaryService", "Successfully generated and saved word of the day: ${apiResponse.word}") + return@withContext newEntry + }, + onFailure = { exception -> + Log.e("DictionaryService", "Error generating word of the day", exception) + return@withContext null + } + ) + } catch (e: Exception) { + Log.e("DictionaryService", "Unexpected error in getWordOfTheDay", e) + null + } + } + + suspend fun getEtymology(query: String, language: Language): Result = withContext(Dispatchers.IO) { + try { + Log.i("DictionaryService", "Getting etymology for word: $query in language: ${language.name}") + + val template = EtymologyRequest( + word = query, + language = language.englishName + ) + + val result = apiRequestHandler.executeRequest(template) + + result.map { apiResponse -> + Log.i("DictionaryService", "Successfully retrieved etymology for: $query") + EtymologyData( + word = apiResponse.word, + timeline = apiResponse.timeline, + relatedWords = apiResponse.relatedWords + ) + }.onFailure { exception -> + Log.e("DictionaryService", "Failed to get etymology for: $query", exception) + } + } catch (e: Exception) { + Log.e("DictionaryService", "Unexpected error in getEtymology for: $query", e) + Result.failure(e) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/dictionary/InflectionParser.kt b/app/src/main/java/eu/gaudian/translator/utils/dictionary/InflectionParser.kt new file mode 100644 index 0000000..8d5c630 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/dictionary/InflectionParser.kt @@ -0,0 +1,11 @@ +package eu.gaudian.translator.utils.dictionary + + +import eu.gaudian.translator.model.grammar.Inflection + +/** + * Interface for a language-specific inflection parser. + */ +interface InflectionParser { + fun parse(inflections: List): DisplayInflectionData +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/dictionary/LocalDictionaryAccess.kt b/app/src/main/java/eu/gaudian/translator/utils/dictionary/LocalDictionaryAccess.kt new file mode 100644 index 0000000..694c249 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/dictionary/LocalDictionaryAccess.kt @@ -0,0 +1,165 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils.dictionary + +import eu.gaudian.translator.model.repository.DictionaryWordEntry +import eu.gaudian.translator.utils.Log +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.contentOrNull +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive + +/** + * Reusable parsing helpers for local (on-device) dictionary entries. + * + * This provides a stable, display-independent API so any feature can query + * translations, synonyms, hyponyms, alternative spellings, etc. for a given word. + */ + +data class LocalTranslationInfo( + val languageCode: String, + val word: String, + val sense: String? = null, + val tags: List = emptyList() +) + +data class LocalRelatedWordInfo( + /** Relation type key from the JSON, e.g. "synonyms", "hyponyms", ... */ + val relationType: String, + val word: String, + val senseIndex: String? = null +) + +data class LocalAlternativeForm( + val form: String, + val tags: List = emptyList() +) + +/** + * Aggregated semantic information for a local dictionary word. + */ +data class LocalDictionaryWordInfo( + val word: String, + val langCode: String, + val pos: String?, + val translations: List, + val relatedWords: List, + val alternativeForms: List +) { + val synonyms: List + get() = relatedWords.filter { it.relationType == "synonyms" } + + val hyponyms: List + get() = relatedWords.filter { it.relationType == "hyponyms" } +} + +object LocalDictionaryAccess { + + private val json = Json { ignoreUnknownKeys = true } + private const val TAG = "LocalDictionaryAccess" + + /** + * Parse a [DictionaryWordEntry] (from the local DB) into a structured + * [LocalDictionaryWordInfo] model. + */ + fun parseWordInfo(entry: DictionaryWordEntry): LocalDictionaryWordInfo? { + val root: JsonElement = try { + json.parseToJsonElement(entry.json) + } catch (e: Exception) { + Log.e(TAG, "Failed to parse local dictionary JSON for '${entry.word}': ${e.message}", e) + return null + } + + val obj = root as? JsonObject ?: return null + + val translations = parseTranslations(obj) + val related = parseRelations(obj) + val alternatives = parseAlternativeForms(obj) + + return LocalDictionaryWordInfo( + word = entry.word, + langCode = entry.langCode, + pos = entry.pos, + translations = translations, + relatedWords = related, + alternativeForms = alternatives + ) + } + + // --- Internal helpers --- + + private fun parseTranslations(obj: JsonObject): List { + val translationsElement = obj["translations"] + val array = translationsElement as? JsonArray ?: return emptyList() + + return array.mapNotNull { element -> + val o = element.jsonObject + val langCode = o["lang_code"]?.jsonPrimitive?.contentOrNull + ?: o["language_code"]?.jsonPrimitive?.contentOrNull + val word = o["word"]?.jsonPrimitive?.contentOrNull + + if (langCode.isNullOrBlank() || word.isNullOrBlank()) { + return@mapNotNull null + } + + val sense = o["sense"]?.jsonPrimitive?.contentOrNull + ?: o["sense_index"]?.jsonPrimitive?.contentOrNull + val tags = (o["tags"] as? JsonArray) + ?.mapNotNull { it.jsonPrimitive.contentOrNull } + ?: emptyList() + + LocalTranslationInfo( + languageCode = langCode, + word = word, + sense = sense, + tags = tags + ) + } + } + + private fun parseRelations(obj: JsonObject): List { + val relationsElement = obj["relations"] as? JsonObject ?: return emptyList() + + val result = mutableListOf() + for ((relationType, value) in relationsElement) { + val array = value as? JsonArray ?: continue + array.forEach { element -> + val o = element.jsonObject + val word = o["word"]?.jsonPrimitive?.contentOrNull + if (word.isNullOrBlank()) return@forEach + val senseIndex = o["sense_index"]?.jsonPrimitive?.contentOrNull + result += LocalRelatedWordInfo( + relationType = relationType, + word = word, + senseIndex = senseIndex + ) + } + } + return result + } + + /** + * Extracts forms tagged as "alternative" (e.g. alternative spellings) from + * the generic "forms" array used by some dictionaries. + */ + private fun parseAlternativeForms(obj: JsonObject): List { + val formsElement = obj["forms"] ?: return emptyList() + val formsArray: JsonArray = when (formsElement) { + is JsonArray -> formsElement + is JsonObject -> formsElement["forms"] as? JsonArray ?: return emptyList() + else -> return emptyList() + } + + return formsArray.mapNotNull { element -> + val o = element.jsonObject + val form = o["form"]?.jsonPrimitive?.contentOrNull ?: return@mapNotNull null + val tagsArray = o["tags"] as? JsonArray + val tags = tagsArray?.mapNotNull { it.jsonPrimitive.contentOrNull } ?: emptyList() + if ("alternative" !in tags) return@mapNotNull null + LocalAlternativeForm(form = form, tags = tags) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/dictionary/LocalDictionaryParser.kt b/app/src/main/java/eu/gaudian/translator/utils/dictionary/LocalDictionaryParser.kt new file mode 100644 index 0000000..db04a29 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/dictionary/LocalDictionaryParser.kt @@ -0,0 +1,23 @@ +package eu.gaudian.translator.utils.dictionary + +/** + * A sealed class to represent different ways of displaying inflections. + * Either a simple list or a complex, grouped verb conjugation table. + */ +sealed class DisplayInflectionData { + data class VerbConjugation( + val gerund: String? = null, + val participle: String? = null, + val moods: List + ) : DisplayInflectionData() +} + +data class DisplayMood( + val name: String, // e.g., "Indicative Present" + val persons: List +) + +data class DisplayPersonForm( + val person: String, + val form: String +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/utils/dictionary/PartOfSpeechTranslator.kt b/app/src/main/java/eu/gaudian/translator/utils/dictionary/PartOfSpeechTranslator.kt new file mode 100644 index 0000000..28056e2 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/utils/dictionary/PartOfSpeechTranslator.kt @@ -0,0 +1,86 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.utils.dictionary + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import eu.gaudian.translator.R + +/** + * Service for translating Part of Speech (POS) abbreviations to their full names in English. + * This provides a reusable way to display POS information in English. + */ +object PartOfSpeechTranslator { + + @Composable + fun translatePos(pos: String?): String { + if (pos.isNullOrBlank()) { + return "" + } + + val normalizedPos = pos.lowercase().trim() + + // Map POS abbreviations to string resource names + return when (normalizedPos) { + "abbrev" -> stringResource(R.string.pos_abbrev) + "adj" -> stringResource(R.string.pos_adj) + "adj_noun" -> stringResource(R.string.pos_adj_noun) + "adj_phrase" -> stringResource(R.string.pos_adj_phrase) + "adnominal" -> stringResource(R.string.pos_adnominal) + "adv" -> stringResource(R.string.pos_adv) + "adv_phrase" -> stringResource(R.string.pos_adv_phrase) + "affix" -> stringResource(R.string.pos_affix) + "ambiposition" -> stringResource(R.string.pos_ambiposition) + "article" -> stringResource(R.string.pos_article) + "character" -> stringResource(R.string.pos_character) + "circumfix" -> stringResource(R.string.pos_circumfix) + "circumpos" -> stringResource(R.string.pos_circumpos) + "classifier" -> stringResource(R.string.pos_classifier) + "clause" -> stringResource(R.string.pos_clause) + "combining_form" -> stringResource(R.string.pos_combining_form) + "component" -> stringResource(R.string.pos_component) + "conj" -> stringResource(R.string.pos_conj) + "contraction" -> stringResource(R.string.pos_contraction) + "converb" -> stringResource(R.string.pos_converb) + "counter" -> stringResource(R.string.pos_counter) + "det" -> stringResource(R.string.pos_det) + "gerund" -> stringResource(R.string.pos_gerund) + "hard-redirect" -> stringResource(R.string.pos_hard_redirect) + "infix" -> stringResource(R.string.pos_infix) + "interfix" -> stringResource(R.string.pos_interfix) + "interj" -> stringResource(R.string.pos_interj) + "intj" -> stringResource(R.string.pos_intj) + "name" -> stringResource(R.string.pos_name) + "noun" -> stringResource(R.string.pos_noun) + "num" -> stringResource(R.string.pos_num) + "onomatopoeia" -> stringResource(R.string.pos_onomatopoeia) + "onomatopeia" -> stringResource(R.string.pos_onomatopeia) + "participle" -> stringResource(R.string.pos_participle) + "particle" -> stringResource(R.string.pos_particle) + "phrase" -> stringResource(R.string.pos_phrase) + "postp" -> stringResource(R.string.pos_postp) + "prefix" -> stringResource(R.string.pos_prefix) + "prep" -> stringResource(R.string.pos_prep) + "prep_phrase" -> stringResource(R.string.pos_prep_phrase) + "preverb" -> stringResource(R.string.pos_preverb) + "pron" -> stringResource(R.string.pos_pron) + "proverb" -> stringResource(R.string.pos_proverb) + "punct" -> stringResource(R.string.pos_punct) + "quantifier" -> stringResource(R.string.pos_quantifier) + "romanization" -> stringResource(R.string.pos_romanization) + "root" -> stringResource(R.string.pos_root) + "soft-redirect" -> stringResource(R.string.pos_soft_redirect) + "stem" -> stringResource(R.string.pos_stem) + "suffix" -> stringResource(R.string.pos_suffix) + "syllable" -> stringResource(R.string.pos_syllable) + "symbol" -> stringResource(R.string.pos_symbol) + "typographic variant" -> stringResource(R.string.pos_typographic_variant) + "unknown" -> stringResource(R.string.pos_unknown) + "verb" -> stringResource(R.string.pos_verb) + else -> pos.replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() } + } + + + } + +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/IntroFlow.kt b/app/src/main/java/eu/gaudian/translator/view/IntroFlow.kt new file mode 100644 index 0000000..ece9d42 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/IntroFlow.kt @@ -0,0 +1,269 @@ +package eu.gaudian.translator.view + +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.pager.HorizontalPager +import androidx.compose.foundation.pager.rememberPagerState +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.SuggestionChip +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.PrimaryButton +import kotlinx.coroutines.launch + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun IntroNavHost(onIntroFinished: () -> Unit) { + val pages = listOf( + IntroPageData( + title = stringResource(R.string.intro_title_welcome), + description = stringResource(R.string.intro_desc_welcome), + content = { IconContent(iconRes = R.drawable.ic_intro_welcome) } + ), + IntroPageData( + title = stringResource(R.string.intro_title_ai_assistant), + description = stringResource(R.string.intro_desc_ai_assistant), + content = { + Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(4.dp)) { + IconContent(iconRes = R.drawable.ic_intro_ai_agents) + FlowRow(horizontalArrangement = Arrangement.spacedBy(4.dp, Alignment.CenterHorizontally), verticalArrangement = Arrangement.spacedBy(2.dp), modifier = Modifier.fillMaxWidth()) { + SuggestionChip(onClick = { }, label = { Text(stringResource(R.string.text_mistral)) }) + SuggestionChip(onClick = { }, label = { Text(stringResource(R.string.text_your_own_ai)) }) + SuggestionChip(onClick = { }, label = { Text(stringResource(R.string.text_openai)) }) + SuggestionChip(onClick = { }, label = { Text(stringResource(R.string.text_claude)) }) + SuggestionChip(onClick = { }, label = { Text(stringResource(R.string.text_gemini)) }) + SuggestionChip(onClick = { }, label = { Text(stringResource(R.string.text_deepseek)) }) + SuggestionChip(onClick = { }, label = { Text(stringResource(R.string.text_openrouter)) }) + SuggestionChip(onClick = { }, label = { Text(stringResource(R.string.text_and_many_more)) }) + } + } + } + ), + IntroPageData( + title = stringResource(R.string.intro_title_dictionary_translator), + description = stringResource(R.string.intro_desc_dictionary_translator), + content = { IconContent(iconRes = R.drawable.ic_intro_lookup) } + + ), + IntroPageData( + title = stringResource(R.string.intro_title_flashcards), + description = stringResource(R.string.intro_desc_flashcards), + content = { FlashcardTopicsPreview() } + ), + IntroPageData( + title = stringResource(R.string.intro_title_practice), + description = stringResource(R.string.intro_desc_practice), + content = { IconContent(iconRes = R.drawable.ic_inro_practice) } + ), + IntroPageData( + title = stringResource(R.string.intro_title_learning_journey), + description = stringResource(R.string.intro_desc_learning_journey), + content = { IconContent(iconRes = R.drawable.ic_intro_learning_journey)} + ), + IntroPageData( + title = stringResource(R.string.intro_title_categories), + description = stringResource(R.string.intro_desc_categories), + content = { IconContent(iconRes = R.drawable.ic_intro_categories) } + ), + IntroPageData( + title = stringResource(R.string.intro_title_progress), + description = stringResource(R.string.intro_desc_progress), + content = { IconContent(iconRes = R.drawable.ic_intro_track_progress) } + ), + IntroPageData( + title = stringResource(R.string.intro_need_help), + description = stringResource(R.string.intro_if_you_need_help_you), + content = { IconContent(iconRes = R.drawable.ic_intro_help) } + ), + IntroPageData( + title = stringResource(R.string.intro_title_beta), + description = stringResource(R.string.intro_desc_beta), + content = { IconContent(iconRes = R.drawable.ic_icon_construction) } + ), + IntroPageData( + title = stringResource(R.string.intro_title_all_set), + description = stringResource(R.string.intro_desc_all_set), + content = { IconContent(iconRes = R.drawable.ic_intro_robot) } + ) + ) + + val pagerState = rememberPagerState(pageCount = { pages.size }) + val scope = rememberCoroutineScope() + + Scaffold(topBar = { + Box( + modifier = Modifier + .fillMaxWidth() + .statusBarsPadding() + .padding(horizontal = 16.dp, vertical = 8.dp) + ) { + // Full-width Skip intro button aligned to end but sized like primary (fillMaxWidth) + eu.gaudian.translator.view.composable.SecondaryButton( + onClick = { onIntroFinished() }, + text = stringResource(R.string.intro_skip), + modifier = Modifier.fillMaxWidth() + ) + } + }) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + HorizontalPager( + state = pagerState, + modifier = Modifier.weight(1f) + ) { pageIndex -> + IntroPage(pageData = pages[pageIndex]) + } + + Spacer(modifier = Modifier.height(24.dp)) + + PagerIndicator( + pageCount = pages.size, + currentPage = pagerState.currentPage + ) + + Spacer(modifier = Modifier.height(24.dp)) + + PrimaryButton( + onClick = { + if (pagerState.currentPage < pages.size - 1) { + scope.launch { + pagerState.animateScrollToPage(pagerState.currentPage + 1) + } + } else { + onIntroFinished() + } + }, + text = if (pagerState.currentPage < pages.size - 1) stringResource(R.string.next) else stringResource(R.string.get_started), + icon = if (pagerState.currentPage < pages.size - 1)AppIcons.ArrowForwardNoChevron else null, + modifier = Modifier.fillMaxWidth() + ) + } + } +} + +private data class IntroPageData( + val title: String, + val description: String, + val content: @Composable () -> Unit +) + +@Composable +private fun IntroPage(pageData: IntroPageData) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(24.dp, Alignment.CenterVertically), + modifier = Modifier + .fillMaxHeight() + .padding(horizontal = 16.dp) + .verticalScroll(rememberScrollState()) // Allow scrolling for larger hint content + ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text( + text = pageData.title, + style = MaterialTheme.typography.headlineLarge, + color = MaterialTheme.colorScheme.primary, + textAlign = TextAlign.Center + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + text = pageData.description, + style = MaterialTheme.typography.bodyLarge, + textAlign = TextAlign.Center + ) + } + Box(modifier = Modifier.animateContentSize()) { + pageData.content() + } + } +} + +@Composable +private fun PagerIndicator(pageCount: Int, currentPage: Int) { + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + repeat(pageCount) { iteration -> + val color = if (currentPage == iteration) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.surfaceVariant + Box( + modifier = Modifier + .size(12.dp) + .clip(CircleShape) + .background(color) + ) + } + } +} + +@Composable +private fun IconContent(iconRes: Int) { + Box(modifier = Modifier.clip(RoundedCornerShape(16.dp))) { + Icon( + painter = painterResource(id = iconRes), + contentDescription = null, + tint = Color.Unspecified, + modifier = Modifier.size(250.dp) + ) +} +} + + +@Composable +private fun FlashcardTopicsPreview() { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + Icon( + painter = painterResource(id = R.drawable.ic_intro_flashcards), + contentDescription = null, + tint = Color.Unspecified, + modifier = Modifier.size(250.dp) + ) + + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + SuggestionChip(onClick = {}, label = { Text(stringResource(R.string.intro_topic_history)) }) + SuggestionChip(onClick = {}, label = { Text(stringResource(R.string.intro_topic_science)) }) + SuggestionChip(onClick = {}, label = { Text(stringResource(R.string.intro_topic_cooking)) }) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/MainActivity.kt b/app/src/main/java/eu/gaudian/translator/view/MainActivity.kt new file mode 100644 index 0000000..4b825e7 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/MainActivity.kt @@ -0,0 +1,404 @@ +package eu.gaudian.translator.view + +import android.annotation.SuppressLint +import android.app.Activity +import android.os.Build +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.BackHandler +import androidx.activity.compose.LocalActivity +import androidx.activity.compose.setContent +import androidx.activity.viewModels +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.ime +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.compositionLocalOf +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalView +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsControllerCompat +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.lifecycle.lifecycleScope +import androidx.navigation.NavDestination.Companion.hierarchy +import androidx.navigation.compose.currentBackStackEntryAsState +import androidx.navigation.compose.rememberNavController +import dagger.hilt.android.AndroidEntryPoint +import eu.gaudian.translator.BuildConfig +import eu.gaudian.translator.MyApplication +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.AllFonts +import eu.gaudian.translator.ui.theme.AllThemes +import eu.gaudian.translator.ui.theme.buildColorScheme +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.view.composable.AppAlertDialog +import eu.gaudian.translator.view.composable.BottomNavigationBar +import eu.gaudian.translator.view.composable.Screen +import eu.gaudian.translator.view.dialogs.WhatsNewDialog +import eu.gaudian.translator.view.hints.LocalShowHints +import eu.gaudian.translator.viewmodel.SettingsViewModel +import eu.gaudian.translator.viewmodel.StatusState +import eu.gaudian.translator.viewmodel.StatusViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.drop +import kotlinx.coroutines.launch + +val LocalShowExperimentalFeatures = compositionLocalOf { false } +val LocalConnectionConfigured = compositionLocalOf { true } + +@AndroidEntryPoint +class MainActivity : ComponentActivity() { + + private val statusViewModel: StatusViewModel by viewModels() + private val settingsViewModel: SettingsViewModel by viewModels() + private var isReady = false + private var isUiLoaded = false + private var isInitializing = true + + override fun onCreate(savedInstanceState: Bundle?) { + installSplashScreen().apply { + // The splash screen will now correctly wait until isReady is true + setKeepOnScreenCondition { !isReady } + } + + super.onCreate(savedInstanceState) + + lifecycleScope.launch { + settingsViewModel.theme.drop(1).collect { } + settingsViewModel.fontPreference.drop(1).collect { } + } + + WindowCompat.setDecorFitsSystemWindows(window, false) + + // Show UI immediately and load data in background + setContent { + AppTheme(settingsViewModel = settingsViewModel) { + TranslatorApp( + statusViewModel = statusViewModel, + settingsViewModel = settingsViewModel + ) + } + } + + // Mark UI as loaded immediately after setContent + isUiLoaded = true + + // Start initialization in background without blocking UI + initializeData() + } + + private fun initializeData() { + lifecycleScope.launch(Dispatchers.IO) { + // Get repositories from the Application instance (lazy initialization) + val myApp = application as MyApplication + val languageRepository = myApp.languageRepository + val apiRepository = myApp.apiRepository + + // Perform initialization in parallel where possible + val languageJob = launch { + languageRepository.initializeDefaultLanguages() + languageRepository.initializeAllLanguages() + } + + val apiJob = launch { + apiRepository.initialInit() + } + + // Wait for both to complete + languageJob.join() + apiJob.join() + + // Signal readiness after all work is done. + isReady = true + isInitializing = false + } + } +} + +@Suppress("AssignedValueIsNeverRead") +@SuppressLint("LocalContextResourcesRead") +@Composable +fun TranslatorApp( + statusViewModel: StatusViewModel, + settingsViewModel: SettingsViewModel +) { + val navController = rememberNavController() + val statusState by statusViewModel.status.collectAsStateWithLifecycle() + val keyboardInsets = WindowInsets.ime + val density = LocalDensity.current + val isKeyboardVisible by remember { + derivedStateOf { + keyboardInsets.getBottom(density) > 0 + } + } + val introCompleted by settingsViewModel.introCompleted.collectAsStateWithLifecycle(initialValue = true) + + val showHints by settingsViewModel.showHints.collectAsStateWithLifecycle() + val showExperimentalFeatures by settingsViewModel.experimentalFeatures.collectAsStateWithLifecycle() + val connectionConfigured by settingsViewModel.connectionConfigured.collectAsStateWithLifecycle(initialValue = true) + + val isAtRoot = navController.previousBackStackEntry == null + var showExitDialog by remember { mutableStateOf(false) } + + BackHandler(enabled = introCompleted && isAtRoot) { + showExitDialog = true + } + + val activity = LocalActivity.current + + if (showExitDialog) { + AppAlertDialog( + onDismissRequest = { showExitDialog = false }, + title = { Text(stringResource(R.string.label_quit_app)) }, + text = { Text(stringResource(R.string.text_do_you_want_to_minimize_the_app)) }, + confirmButton = { + TextButton(onClick = { + showExitDialog = false + // Minimize the app similar to default back at root behavior + activity?.moveTaskToBack(true) + }) { + Text(stringResource(R.string.quit)) + } + }, + dismissButton = { + TextButton(onClick = { showExitDialog = false }) { + Text(stringResource(R.string.label_cancel)) + } + } + ) + } + + // Check for app updates and show "What's New" dialog if needed + var showWhatsNewDialog by remember { mutableStateOf(false) } + val context = LocalContext.current + val changelogEntries = context.resources.getStringArray(R.array.changelog_entries) + val latestChangelogEntry = changelogEntries.lastOrNull() ?: "" + + LaunchedEffect(Unit) { + try { + // Only check for updates if the intro is completed + if (introCompleted) { + val currentVersion = BuildConfig.VERSION_NAME + val hasSeenCurrentVersion = settingsViewModel.hasSeenCurrentVersion(currentVersion) + if (!hasSeenCurrentVersion) { + showWhatsNewDialog = true + } + } + } catch (e: Exception) { + @Suppress("HardCodedStringLiteral") + Log.e("TranslatorApp", "Error checking version seen status", e) + } + } + + if (showWhatsNewDialog) { + WhatsNewDialog( + onDismissRequest = { showWhatsNewDialog = false }, + onContinue = { + showWhatsNewDialog = false + settingsViewModel.markVersionAsSeen(BuildConfig.VERSION_NAME) + }, + changelogContent = latestChangelogEntry + ) + } + + AppTheme(settingsViewModel = settingsViewModel) { + CompositionLocalProvider( + LocalShowHints provides showHints, + LocalShowExperimentalFeatures provides showExperimentalFeatures, + LocalConnectionConfigured provides connectionConfigured + ) { + if (introCompleted) { + Box(modifier = Modifier.fillMaxSize()) { + Scaffold( + modifier = Modifier + .fillMaxSize() + .animateContentSize() + .imePadding(), + bottomBar = { + val navBackStackEntry by navController.currentBackStackEntryAsState() + val currentDestination = navBackStackEntry?.destination + val selectedScreen = Screen.fromDestination(currentDestination) + + @Suppress("HardCodedStringLiteral") val isBottomBarHidden = currentDestination?.route?.startsWith("vocabulary_exercise") == true + val showBottomNavLabels by settingsViewModel.showBottomNavLabels.collectAsStateWithLifecycle(initialValue = false) + + BottomNavigationBar( + selectedItem = selectedScreen, + isVisible = !isKeyboardVisible && !isBottomBarHidden, + showLabels = showBottomNavLabels, + onItemSelected = { screen -> + val inSameSection = currentDestination?.hierarchy?.any { it.route == screen.route } == true + + // Always reset the selected section to its root and clear back stack between sections + if (inSameSection) { + // If already within the same section, ensure we are at its graph root + navController.navigate(screen.route) { + popUpTo(screen.route) { + inclusive = false + saveState = false + } + launchSingleTop = true + restoreState = false + } + } else { + // Switching sections: clear entire back stack to start to avoid back navigation results + navController.navigate(screen.route) { + popUpTo(0) { // Pop everything + inclusive = true + saveState = false + } + launchSingleTop = true + restoreState = false + } + } + } + ) + }, + containerColor = MaterialTheme.colorScheme.background + ) { innerPadding -> + val animatedBottomPadding by androidx.compose.animation.core.animateDpAsState( + targetValue = innerPadding.calculateBottomPadding(), + label = "scaffoldBottomPad" + ) + Column( + modifier = Modifier + .padding( + start = innerPadding.calculateLeftPadding(androidx.compose.ui.unit.LayoutDirection.Ltr), + top = innerPadding.calculateTopPadding(), + end = innerPadding.calculateRightPadding(androidx.compose.ui.unit.LayoutDirection.Ltr), + bottom = animatedBottomPadding + ) + .fillMaxSize() + ) { + StatusMessageSystem( + statusState = statusState, + navController = navController, + onDismiss = { statusViewModel.hideMessageBar() }, + modifier = Modifier + .fillMaxWidth() + ) + AppNavHost( + navController = navController, + modifier = Modifier.weight(1f) + ) + } + } + + if (statusState is StatusState.Loading) { + FullScreenLoadingOverlay() + } + } + } else { + IntroNavHost(onIntroFinished = { + settingsViewModel.setIntroCompleted(true) + }) + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +private fun AppTheme( + settingsViewModel: SettingsViewModel, + content: @Composable () -> Unit, +) { + val themeName by settingsViewModel.theme.collectAsStateWithLifecycle() + val darkModePref by settingsViewModel.darkModePreference.collectAsStateWithLifecycle() + val fontName by settingsViewModel.fontPreference.collectAsStateWithLifecycle() + + val useDarkTheme = when (darkModePref) { + "Light" -> false + "Dark" -> true + else -> isSystemInDarkTheme() + } + val context = LocalContext.current + val colorScheme = if (themeName == "System" && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + if (useDarkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } else { + val appTheme = AllThemes.find { it.name == themeName } ?: AllThemes.first() + val colorSet = if (useDarkTheme) appTheme.darkColors else appTheme.lightColors + buildColorScheme(colorSet, useDarkTheme) + } + + val view = LocalView.current + if (!view.isInEditMode) { + SideEffect { + val window = (view.context as Activity).window + val windowInsetsController = WindowInsetsControllerCompat(window, view) + + //window.statusBarColor = android.graphics.Color.TRANSPARENT + //window.navigationBarColor = android.graphics.Color.TRANSPARENT + //TODO remove eventually + + windowInsetsController.isAppearanceLightStatusBars = !useDarkTheme + windowInsetsController.isAppearanceLightNavigationBars = !useDarkTheme + } + } + + val selectedFontStyle = AllFonts.find { it.name == fontName } ?: AllFonts.first() + + val fontFamily = when (selectedFontStyle.fileName) { + "default" -> FontFamily.Default + "merriweather_regular" -> FontFamily(Font(R.font.merriweather_regular)) + "lato_regular" -> FontFamily(Font(R.font.lato_regular)) + "playfairdisplay_regular" -> FontFamily(Font(R.font.playfairdisplay_regular)) + "roboto_regular" -> FontFamily(Font(R.font.roboto_regular)) + "lora_regular" -> FontFamily(Font(R.font.lora_regular)) + "opensans_regular" -> FontFamily(Font(R.font.opensans_regular)) + else -> { + Log.d("AppTheme", "Font not found: ${selectedFontStyle.name}") + FontFamily.Default + } + } + + val dynamicTypography = androidx.compose.material3.Typography( + bodyLarge = MaterialTheme.typography.bodyLarge.copy(fontFamily = fontFamily), + bodyMedium = MaterialTheme.typography.bodyMedium.copy(fontFamily = fontFamily), + bodySmall = MaterialTheme.typography.bodySmall.copy(fontFamily = fontFamily), + headlineLarge = MaterialTheme.typography.headlineLarge.copy(fontFamily = fontFamily), + headlineMedium = MaterialTheme.typography.headlineMedium.copy(fontFamily = fontFamily), + headlineSmall = MaterialTheme.typography.headlineSmall.copy(fontFamily = fontFamily), + titleLarge = MaterialTheme.typography.titleLarge.copy(fontFamily = fontFamily), + titleMedium = MaterialTheme.typography.titleMedium.copy(fontFamily = fontFamily), + titleSmall = MaterialTheme.typography.titleSmall.copy(fontFamily = fontFamily), + labelLarge = MaterialTheme.typography.labelLarge.copy(fontFamily = fontFamily), + labelMedium = MaterialTheme.typography.labelMedium.copy(fontFamily = fontFamily), + labelSmall = MaterialTheme.typography.labelSmall.copy(fontFamily = fontFamily) + ) + MaterialTheme( + colorScheme = colorScheme, + typography = dynamicTypography, + ) { + eu.gaudian.translator.ui.theme.ProvideSemanticColors { + content() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/Navigation.kt b/app/src/main/java/eu/gaudian/translator/view/Navigation.kt new file mode 100644 index 0000000..15a4f35 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/Navigation.kt @@ -0,0 +1,426 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view + +import android.app.Application +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.slideInHorizontally +import androidx.compose.animation.slideOutHorizontally +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Modifier +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.NavType +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.navArgument +import androidx.navigation.navigation +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.view.composable.Screen +import eu.gaudian.translator.view.dictionary.DictionaryResultScreen +import eu.gaudian.translator.view.dictionary.EtymologyResultScreen +import eu.gaudian.translator.view.dictionary.MainDictionaryScreen +import eu.gaudian.translator.view.exercises.ExerciseSessionScreen +import eu.gaudian.translator.view.exercises.MainExerciseScreen +import eu.gaudian.translator.view.exercises.YouTubeExerciseScreen +import eu.gaudian.translator.view.settings.DictionaryOptionsScreen +import eu.gaudian.translator.view.settings.SettingsRoutes +import eu.gaudian.translator.view.settings.TranslationSettingsScreen +import eu.gaudian.translator.view.settings.settingsGraph +import eu.gaudian.translator.view.translation.TranslationScreen +import eu.gaudian.translator.view.vocabulary.CategoryDetailScreen +import eu.gaudian.translator.view.vocabulary.CategoryListScreen +import eu.gaudian.translator.view.vocabulary.LanguageProgressScreen +import eu.gaudian.translator.view.vocabulary.MainVocabularyScreen +import eu.gaudian.translator.view.vocabulary.NoGrammarItemsScreen +import eu.gaudian.translator.view.vocabulary.StageDetailScreen +import eu.gaudian.translator.view.vocabulary.VocabularyCardHost +import eu.gaudian.translator.view.vocabulary.VocabularyExerciseHostScreen +import eu.gaudian.translator.view.vocabulary.VocabularyHeatmapScreen +import eu.gaudian.translator.view.vocabulary.VocabularyListScreen +import eu.gaudian.translator.view.vocabulary.VocabularySortingScreen +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.ExerciseViewModel +import eu.gaudian.translator.viewmodel.ProgressViewModel +import okhttp3.internal.platform.PlatformRegistry.applicationContext + +private const val ANIMATION_DURATION = 200 +private const val TRANSITION_DURATION = 300 + +@Composable +fun AppNavHost( + navController: NavHostController, + modifier: Modifier = Modifier +) { + val exerciseViewModel: ExerciseViewModel = viewModel() + val progressViewModel: ProgressViewModel = ProgressViewModel.getInstance(applicationContext as Application) + + // 1. Define your Main Tab "Leaf" Routes (the actual start destinations of your graphs) + val mainTabRoutes = setOf( + Screen.Home.route, // "home" or "main_translation" depending on which one you actually navigate to + "main_translation", + "main_dictionary", + "main_vocabulary", + "main_exercise", + SettingsRoutes.LIST + ) + + // Helper to check if a route is a top-level tab + fun isTabTransition(initial: String?, target: String?): Boolean { + return mainTabRoutes.contains(initial) && mainTabRoutes.contains(target) + } + + NavHost( + navController = navController, + startDestination = Screen.Home.route, + modifier = modifier, + + // ENTER TRANSITION + enterTransition = { + if (isTabTransition(initialState.destination.route, targetState.destination.route)) { + // Tab Switch: Just Fade In (Subtle Scale for modern feel) + fadeIn(animationSpec = tween(TRANSITION_DURATION)) + + scaleIn(initialScale = 0.96f, animationSpec = tween(TRANSITION_DURATION)) + } else { + // Detail Screen: Slide in from Right + slideInHorizontally( + initialOffsetX = { fullWidth -> (fullWidth * 0.1f).toInt() }, + animationSpec = tween(TRANSITION_DURATION, easing = FastOutSlowInEasing) + ) + fadeIn(animationSpec = tween(TRANSITION_DURATION)) + } + }, + + // EXIT TRANSITION + exitTransition = { + if (isTabTransition(initialState.destination.route, targetState.destination.route)) { + // Tab Switch: Just Fade Out + fadeOut(animationSpec = tween(TRANSITION_DURATION)) + } else { + // Detail Screen: Slide out to Left + slideOutHorizontally( + targetOffsetX = { fullWidth -> -(fullWidth * 0.1f).toInt() }, + animationSpec = tween(TRANSITION_DURATION, easing = FastOutSlowInEasing) + ) + fadeOut(animationSpec = tween(TRANSITION_DURATION)) + } + }, + + // POP ENTER (Pressing Back) -> Always Slide back from left + popEnterTransition = { + slideInHorizontally( + initialOffsetX = { fullWidth -> -(fullWidth * 0.1f).toInt() }, + animationSpec = tween(TRANSITION_DURATION, easing = FastOutSlowInEasing) + ) + fadeIn(animationSpec = tween(TRANSITION_DURATION)) + }, + + // POP EXIT (Pressing Back) -> Always Slide away to right + popExitTransition = { + slideOutHorizontally( + targetOffsetX = { fullWidth -> (fullWidth * 0.1f).toInt() }, + animationSpec = tween(TRANSITION_DURATION, easing = FastOutSlowInEasing) + ) + fadeOut(animationSpec = tween(TRANSITION_DURATION)) + } + ) { + composable(Screen.Home.route) { + TranslationScreen(navController = navController) + } + + // Define all other navigation graphs at the same top level. + translationGraph(navController) + dictionaryGraph(navController) + vocabularyGraph(navController, progressViewModel) + exerciseGraph(navController, exerciseViewModel) + settingsGraph(navController) + } +} +@OptIn(androidx.compose.animation.ExperimentalAnimationApi::class) +fun NavGraphBuilder.translationGraph(navController: NavHostController) { + navigation( + startDestination = "main_translation", + route = Screen.Home.route + ) { + composable("main_translation") { + TranslationScreen(navController = navController) + } + composable("custom_translation_prompt") { + TranslationSettingsScreen(navController = navController) + } + } +} + +@OptIn(androidx.compose.animation.ExperimentalAnimationApi::class) +fun NavGraphBuilder.dictionaryGraph(navController: NavHostController) { + navigation( + startDestination = "main_dictionary", + route = Screen.Dictionary.route + ) { + composable("main_dictionary") { + MainDictionaryScreen(navController = navController) + } + composable("dictionary_result/{entryId}") { backStackEntry -> + val entryId = backStackEntry.arguments?.getString("entryId")?.toIntOrNull() + if (entryId != null) { + DictionaryResultScreen( + entryId = entryId, + navController = navController, + ) + } else { + Text("Error: Invalid Entry ID") + } + } + composable("dictionary_options") { + DictionaryOptionsScreen(navController = navController) + } + composable("etymology_result/{word}/{languageCode}") { backStackEntry -> + val word = backStackEntry.arguments?.getString("word") ?: "" + val languageCode = backStackEntry.arguments?.getString("languageCode")?.toIntOrNull() ?: 1 + EtymologyResultScreen( + navController = navController, + word = word, + languageCode = languageCode + ) + } + + } +} + +@OptIn(androidx.compose.animation.ExperimentalAnimationApi::class) +fun NavGraphBuilder.vocabularyGraph( + navController: NavHostController, + progressViewModel: ProgressViewModel +) { + navigation( + startDestination = "main_vocabulary", + route = Screen.Vocabulary.route + ) { + composable("main_vocabulary") { + MainVocabularyScreen(navController = navController) + } + composable("vocabulary_sorting") { + VocabularySortingScreen( + navController = navController + ) + } + composable("vocabulary_detail/{itemId}") { backStackEntry -> + val itemId = backStackEntry.arguments?.getString("itemId")?.toIntOrNull() + if (itemId != null) { + VocabularyCardHost( + navController = navController, + itemId = itemId, + onBackPressed = { navController.popBackStack() } + ) + } else { + Text("Error: Invalid Vocabulary Item ID") + } + } + composable("dictionary_result/{entryId}") { backStackEntry -> + val entryId = backStackEntry.arguments?.getString("entryId")?.toIntOrNull() + if (entryId != null) { + DictionaryResultScreen( + entryId = entryId, + navController = navController, + ) + } else { + Text("Error: Invalid Entry ID") + } + } + composable("vocabulary_list/{showDueTodayOnly}/{categoryId}") { backStackEntry -> + val showDueTodayOnly = backStackEntry.arguments?.getString("showDueTodayOnly")?.toBoolean() ?: false + val categoryId = backStackEntry.arguments?.getString("categoryId")?.toIntOrNull() + VocabularyListScreen( + navController = navController, + showDueTodayOnly = showDueTodayOnly, + categoryId = categoryId, + onNavigateToItem = { item -> + navController.navigate("vocabulary_detail/${item.id}") + }, + onNavigateBack = { navController.popBackStack() }, + enableNavigationButtons = true + ) + } + composable("language_progress") { + LanguageProgressScreen( + wordsLearned = progressViewModel.totalWordsCompleted.collectAsState().value, + navController = navController + ) + + } + composable("vocabulary_heatmap") { + VocabularyHeatmapScreen( + viewModel = progressViewModel, + navController = navController, + ) + } + composable("vocabulary_list/{showDueTodayOnly}/{stage}") { backStackEntry -> + val showDueTodayOnly = backStackEntry.arguments?.getString("showDueTodayOnly")?.toBoolean() ?: false + val stageString = backStackEntry.arguments?.getString("stage") + val stage = stageString?.let { + if (it.equals("null", ignoreCase = true)) null else VocabularyStage.valueOf(it) + } + + VocabularyListScreen( + navController = navController, + showDueTodayOnly = showDueTodayOnly, + stage = stage, + onNavigateToItem = { item -> + navController.navigate("vocabulary_detail/${item.id}") + }, + onNavigateBack = { navController.popBackStack() }, + categoryId = 0, + enableNavigationButtons = true + ) + } + composable( + route = "vocabulary_exercise/{isSpelling}?categories={categories}&stages={stages}&languages={languages}&dailyOnly={dailyOnly}", + arguments = listOf( + navArgument("isSpelling") { type = NavType.BoolType }, + navArgument("categories") { type = NavType.StringType; nullable = true }, + navArgument("stages") { type = NavType.StringType; nullable = true }, + navArgument("languages") { type = NavType.StringType; nullable = true }, + navArgument("dailyOnly") { + type = NavType.BoolType + defaultValue = false + }, + ) + ) { backStackEntry -> + val arguments = backStackEntry.arguments + + val dailyOnly = arguments?.getBoolean("dailyOnly") ?: false + + val categoryIds = arguments?.getString("categories") + val stageNames = arguments?.getString("stages") + val languageIds = arguments?.getString("languages") + + val dailyOnlyJson = "{\"dailyOnly\": $dailyOnly}" + + VocabularyExerciseHostScreen( + categoryIdsAsJson = categoryIds, + stageNamesAsJson = stageNames, + languageIdsAsJson = languageIds, + dailyOnlyAsJson = dailyOnlyJson, + onClose = { navController.popBackStack() }, + navController = navController + ) + } + composable( + route = "vocabulary_exercise/{dailyOnly}?", + arguments = listOf( + navArgument("dailyOnly") { type = NavType.BoolType }, + ) + ) { _ -> + + VocabularyExerciseHostScreen( + categoryIdsAsJson = null, + stageNamesAsJson = null, + languageIdsAsJson = null, + onClose = { navController.popBackStack() }, + navController = navController, + dailyOnlyAsJson = "{\"dailyOnly\": true}" + ) + } + composable( + "stage_detail/{stage}", + arguments = listOf( + navArgument("stage") { + type = NavType.EnumType(VocabularyStage::class.java) + } + ) + ) + + { backStackEntry -> + @Suppress("DEPRECATION") val stage = backStackEntry.arguments?.getSerializable("stage") as VocabularyStage + //NOTE: can ignore warning for now, once moved away from min SDK 28, use: + // val stage = backStackEntry.arguments?.getSerializable("stage", VocabularyStage::class.java) + StageDetailScreen( + navController = navController, + stage = stage + ) + } + composable("category_detail/{categoryId}") { backStackEntry -> + val categoryId = backStackEntry.arguments?.getString("categoryId")?.toIntOrNull() + + if (categoryId != null) { + CategoryDetailScreen( + categoryId = categoryId, + onBackClick = { navController.popBackStack() }, + onNavigateToItem = { item -> + navController.navigate("vocabulary_detail/${item.id}") + }, + navController = navController + ) + } + } + composable("category_list_screen") { + CategoryListScreen( + categoryViewModel = CategoryViewModel.getInstance(applicationContext as Application), + progressViewModel = ProgressViewModel.getInstance(applicationContext as Application), + onNavigateBack = { navController.popBackStack() }, + onCategoryClicked = { categoryId -> + navController.navigate("category_detail/$categoryId") + } + ) + } + composable( + route = "vocabulary_sorting?mode={mode}", // Route now accepts an optional 'mode' + arguments = listOf( + navArgument("mode") { // Define the argument + type = NavType.StringType + nullable = true + } + ) + ) { backStackEntry -> + VocabularySortingScreen( + navController = navController, + // Pass the argument to the screen + initialFilterMode = backStackEntry.arguments?.getString("mode") + ) + } + composable("no_grammar_items") { + NoGrammarItemsScreen( + navController = navController + ) + } + } +} + +@OptIn(androidx.compose.animation.ExperimentalAnimationApi::class) +fun NavGraphBuilder.exerciseGraph( + navController: NavHostController, + exerciseViewModel: ExerciseViewModel +) { + navigation( + startDestination = "main_exercise", + route = Screen.Exercises.route + ) { + composable("main_exercise") { + MainExerciseScreen( + navController = navController, + exerciseViewModel = exerciseViewModel + ) + } + composable("exercise_session") { + ExerciseSessionScreen( + navController = navController, + exerciseViewModel = exerciseViewModel + ) + } + composable("youtube_exercise") { + YouTubeExerciseScreen( + navController = navController, + exerciseViewModel = exerciseViewModel + ) + } + composable("youtube_browse") { + eu.gaudian.translator.view.exercises.YouTubeBrowserScreen( + navController = navController, + exerciseViewModel = exerciseViewModel + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/NoConncectionScreen.kt b/app/src/main/java/eu/gaudian/translator/view/NoConncectionScreen.kt new file mode 100644 index 0000000..4d1ef7c --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/NoConncectionScreen.kt @@ -0,0 +1,47 @@ +package eu.gaudian.translator.view + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppButton + + + +@Composable +fun NoConnectionScreen(onSettingsClick: () -> Unit) { + Column( + modifier = Modifier.fillMaxSize().padding(24.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Image( + modifier = Modifier.size(200.dp), + painter = painterResource(id = R.drawable.no_connection), + contentDescription = stringResource(id = R.string.text_no_valid_api_configuration_could_be_found) + ) + Spacer(modifier = Modifier.size(16.dp)) + Text( + text = stringResource(id = R.string.text_no_valid_api_configuration_could_be_found), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onBackground, + textAlign = TextAlign.Center + ) + AppButton(onClick = onSettingsClick, modifier = Modifier.padding(top = 16.dp)) { + Text(text = stringResource(id = R.string.settings_title_connection)) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/StatusMessageSystem.kt b/app/src/main/java/eu/gaudian/translator/view/StatusMessageSystem.kt new file mode 100644 index 0000000..6b960e1 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/StatusMessageSystem.kt @@ -0,0 +1,311 @@ +@file:Suppress("HardCodedStringLiteral") +package eu.gaudian.translator.view + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutVertically +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.utils.StatusAction +import eu.gaudian.translator.utils.StatusMessageService +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedButton +import eu.gaudian.translator.view.composable.ComponentDefaults +import eu.gaudian.translator.view.settings.SettingsRoutes +import eu.gaudian.translator.viewmodel.MessageAction +import eu.gaudian.translator.viewmodel.MessageDisplayType +import eu.gaudian.translator.viewmodel.StatusState +import kotlinx.coroutines.launch + +/** + * A system for displaying status messages and loading indicators with a modern, + * floating design consistent with the rest of the app's UI components. + * + * @param statusState The current state to display (e.g., Hidden, Loading, Message). + * @param modifier The modifier to be applied to the component. + * @param onDismiss Callback invoked when a message is dismissed. + */ +@Composable +fun StatusMessageSystem( + statusState: StatusState, + navController: NavController, + modifier: Modifier = Modifier, + onDismiss: () -> Unit = {} +) { + AnimatedVisibility( + visible = statusState != StatusState.Hidden, + label = "StatusMessageSystemVisibility", + enter = fadeIn(animationSpec = tween(150)), + exit = fadeOut(animationSpec = tween(200)), + modifier = modifier + ) { + when (statusState) { + StatusState.Hidden -> { /* Do nothing, handled by AnimatedVisibility */ + } + + StatusState.Loading -> { + FullScreenLoadingOverlay() + } + + is StatusState.Message -> { + // Position the message at the top of the screen + Box( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp, bottom = 16.dp), + contentAlignment = Alignment.TopCenter + ) { + StatusMessage( + message = statusState.text, + type = statusState.type, + action = statusState.action, // ADDED: Pass the action down. + navController = navController, // ADDED: Pass the NavController down. + onDismiss = onDismiss + ) + } + } + } + } +} + +/** + * A full-screen loading indicator with a blurred background overlay. + */ +@Composable +fun FullScreenLoadingOverlay() { + Box( + modifier = Modifier + .fillMaxSize() + // A semi-transparent background provides a modern scrim effect. + .background(MaterialTheme.colorScheme.scrim.copy(alpha = 0.6f)) + .clickable(enabled = false, onClick = {}), // Consume clicks + contentAlignment = Alignment.Center + ) { + Surface( + shape = RoundedCornerShape(24.dp), + color = MaterialTheme.colorScheme.surfaceContainer, + modifier = Modifier.shadow(elevation = 12.dp, shape = RoundedCornerShape(24.dp)) + ) { + CircularProgressIndicator( + modifier = Modifier + .size(64.dp) + .padding(12.dp), + color = MaterialTheme.colorScheme.primary, + strokeWidth = 4.dp + ) + } + } +} + +/** + * A floating status message card that appears at the top of the screen. + */ +@Composable +private fun StatusMessage( + message: String, + type: MessageDisplayType, + action: MessageAction?, + navController: NavController, + onDismiss: () -> Unit, + modifier: Modifier = Modifier +) { + val coroutineScope = rememberCoroutineScope() + + + AnimatedVisibility( + visible = true, // Controlled by the parent's state + enter = slideInVertically(initialOffsetY = { -it }) + fadeIn(), + exit = slideOutVertically(targetOffsetY = { -it }) + fadeOut(), + label = "StatusMessageAnimation" + ) { + Surface( + modifier = modifier + .fillMaxWidth(0.9f) + .shadow(elevation = ComponentDefaults.DefaultElevation, shape = ComponentDefaults.DefaultShape) + .clip(ComponentDefaults.DefaultShape), + shape = ComponentDefaults.DefaultShape, + color = MaterialTheme.colorScheme.surfaceContainer + ) { + Row( + modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp), + verticalAlignment = Alignment.CenterVertically + ) { + when (type) { + MessageDisplayType.LOADING -> { + CircularProgressIndicator( + modifier = Modifier.size(24.dp), + color = MaterialTheme.colorScheme.primary, + strokeWidth = 2.dp + ) + } + else -> { + val icon: ImageVector + val iconColor: Color + when (type) { + MessageDisplayType.SUCCESS -> { + icon = AppIcons.Check + iconColor = MaterialTheme.colorScheme.tertiary + } + MessageDisplayType.ERROR, MessageDisplayType.ACTIONABLE_ERROR -> { + icon = AppIcons.Error + iconColor = MaterialTheme.colorScheme.error + } + else -> { + icon = AppIcons.Info + iconColor = MaterialTheme.colorScheme.secondary + } + } + Icon( + imageVector = icon, + contentDescription = null, + tint = iconColor, + modifier = Modifier.size(24.dp) + ) + } + } + + Spacer(modifier = Modifier.width(12.dp)) + + Text( + text = message, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.weight(1f) + ) + + if (action != null) { + AppOutlinedButton( + onClick = { + when (action) { + MessageAction.NAVIGATE_TO_API_KEYS -> { + navController.navigate(SettingsRoutes.API_KEY) + } + } + coroutineScope.launch { + StatusMessageService.trigger(StatusAction.CancelPermanentMessage) + } + }, + modifier = Modifier.padding(start = 8.dp) + ) { + Text(stringResource(R.string.title_settings)) + } + } else { + IconButton( + onClick = onDismiss, + modifier = Modifier.size(24.dp) + ) { + Icon( + imageVector = AppIcons.Close, + contentDescription = stringResource(R.string.dismiss), + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } + } + } +} + + +// --- Previews (with a new one for Loading Message) --- + +@ThemePreviews +@Composable +private fun StatusMessageSystemPreviewLoading() { + Box(Modifier.fillMaxSize()) { + StatusMessageSystem(statusState = StatusState.Loading, navController = NavController(context = LocalContext.current) ) + } +} + +@ThemePreviews +@Composable +private fun StatusMessageSystemPreviewSuccess() { + Box(Modifier.fillMaxSize()) { + StatusMessageSystem( + statusState = StatusState.Message( + id = 1, + text = "Operation completed successfully.", + type = MessageDisplayType.SUCCESS + ), + navController = NavController(context = LocalContext.current) // Use a dummy NavController for preview + ) + } +} + +@ThemePreviews +@Composable +private fun StatusMessageSystemPreviewError() { + Box(Modifier.fillMaxSize()) { + StatusMessageSystem( + statusState = StatusState.Message( + id = 2, + text = "An unknown error occurred.", + type = MessageDisplayType.ERROR + ), + navController = NavController(context = LocalContext.current) + ) + } +} + +@ThemePreviews +@Composable +private fun StatusMessageSystemPreviewInfo() { + Box(Modifier.fillMaxSize()) { + StatusMessageSystem( + statusState = StatusState.Message( + id = 3, + text = "This is just for your information.", + type = MessageDisplayType.INFO + ), + navController = NavController(context = LocalContext.current) + ) + } +} + +// ADDED: Preview for the new loading message bar +@ThemePreviews +@Composable +private fun StatusMessageSystemPreviewLoadingMessage() { + Box(Modifier.fillMaxSize()) { + StatusMessageSystem( + statusState = StatusState.Message( + id = 4, + text = "Processing in the background...", + type = MessageDisplayType.LOADING + ), + navController = NavController(context = LocalContext.current) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/AppBox.kt b/app/src/main/java/eu/gaudian/translator/view/composable/AppBox.kt new file mode 100644 index 0000000..35990f0 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/AppBox.kt @@ -0,0 +1,125 @@ +package eu.gaudian.translator.view.composable + +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.semanticColors + + +@Composable +fun AppBox( + modifier: Modifier = Modifier, + title: String? = null, + text: String? = null, + expandable: Boolean = false, + initiallyExpanded: Boolean = false, + contentAlignment: Alignment = Alignment.TopStart, + propagateMinConstraints: Boolean = false, + content: @Composable BoxScope.() -> Unit, +) { + // State to track whether the box is expanded + var isExpanded by remember { mutableStateOf(initiallyExpanded) } + + // Rotation animation for the chevron icon + @Suppress("HardCodedStringLiteral") val rotationState by animateFloatAsState( + targetValue = if (isExpanded) 180f else 0f, + label = "Chevron Rotation" + ) + + Box( + modifier = modifier + .clip(ComponentDefaults.NoShape) + .animateContentSize().padding(0.dp), + propagateMinConstraints = propagateMinConstraints + ) { + Column(modifier = Modifier.fillMaxWidth()) { + + // Header Row: Rendered if there is a title, text, or if it is expandable + if (title != null || text != null || expandable) { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable(enabled = expandable) { isExpanded = !isExpanded } + .padding(16.dp), // Standard internal padding for the header + verticalAlignment = Alignment.CenterVertically + ) { + // Title and Text column + Column(modifier = Modifier.weight(1f)) { + if (!title.isNullOrBlank()) { + Text( + text = title, + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onSurface + ) + } + if (!text.isNullOrBlank()) { + Text( + text = text, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + + // Chevron Icon (Only if expandable) + if (expandable) { + Icon( + imageVector = AppIcons.ArrowDropDown, + contentDescription = if (isExpanded) stringResource(R.string.label_collapse) else stringResource(R.string.label_expand), + modifier = Modifier.rotate(rotationState), + tint = MaterialTheme.colorScheme.onSurface + ) + } + } + } + + // Content Area logic + // 1. If NOT expandable: Show content always. + // 2. If expandable: Show content only if isExpanded is true. + if (!expandable || isExpanded) { + Box( + modifier = Modifier.fillMaxWidth().fillMaxSize().padding(0.dp), + contentAlignment = contentAlignment + ) { + content() + } + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun AppBoxPreview() { + AppBox( + modifier = Modifier.background(color = MaterialTheme.semanticColors.success), + contentAlignment = Alignment.Center + ) { + Text(text = "This is a preview of the AppBox") + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/AppDialogs.kt b/app/src/main/java/eu/gaudian/translator/view/composable/AppDialogs.kt new file mode 100644 index 0000000..bca62d5 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/AppDialogs.kt @@ -0,0 +1,513 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.composable + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.ime +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.union +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.BottomSheetDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.SheetValue +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.DialogProperties +import eu.gaudian.translator.R +import eu.gaudian.translator.view.hints.HintBottomSheet +import eu.gaudian.translator.view.hints.LocalShowHints + +@Composable +fun AppDialog( + onDismissRequest: () -> Unit, + title: (@Composable () -> Unit)? = null, + hintContent: @Composable (() -> Unit)? = null, + content: @Composable () -> Unit +) { + // 1. Swipe Resistance: Prevent accidental dismissal + val sheetState = rememberModalBottomSheetState( + skipPartiallyExpanded = true, + confirmValueChange = { newState -> + // Return false to block the sheet from hiding via swipe + newState != SheetValue.Hidden + } + ) + var showBottomSheet by remember { mutableStateOf(false) } + + ModalBottomSheet( + onDismissRequest = onDismissRequest, + sheetState = sheetState, + // 2. Keyboard Handling (Material3 1.4.0+): Respect IME insets + contentWindowInsets = { BottomSheetDefaults.windowInsets.union(WindowInsets.ime) } + ) { + Column( + modifier = Modifier + .padding(horizontal = 24.dp) + .padding(bottom = 24.dp) + // Note: Vertical scroll is applied to the inner content column below + ) { + // 3. Header with Title, Hint Icon, and Close (X) Icon + DialogHeader( + title = title, + hintContent = hintContent, + onHintClick = { showBottomSheet = true }, + onCloseClick = onDismissRequest + ) + + Spacer(modifier = Modifier.height(16.dp)) + + // 4. Scrollable Content Area + Column( + modifier = Modifier + .verticalScroll(rememberScrollState()) + ) { + content() + // Extra spacer at bottom so last field isn't glued to keyboard + Spacer(modifier = Modifier.height(16.dp)) + } + } + } + + if (showBottomSheet) { + EnhancedHintBottomSheet( + onDismissRequest = { showBottomSheet = false }, + content = hintContent, + parentTitle = title + ) + } +} + +@Composable +fun AppAlertDialog( + onDismissRequest: () -> Unit, + confirmButton: @Composable () -> Unit, + modifier: Modifier = Modifier, + dismissButton: @Composable (() -> Unit)? = null, + icon: @Composable (() -> Unit)? = null, + title: @Composable (() -> Unit)? = null, + text: @Composable (() -> Unit)? = null, + properties: DialogProperties = DialogProperties(), + hintContent: @Composable (() -> Unit)? = null, +) { + val sheetState = rememberModalBottomSheetState() + var showBottomSheet by remember { mutableStateOf(false) } + + AlertDialog( + onDismissRequest = onDismissRequest, + confirmButton = confirmButton, + modifier = modifier, + dismissButton = dismissButton, + icon = icon, + title = title?.let { + { + // Reusing a simplified title row for standard AlertDialogs + // (AlertDialogs don't need the close 'X' as much as BottomSheets do) + DialogTitleWithHint( + title = it, + hintContent = hintContent, + onHintClick = { showBottomSheet = true } + ) + } + }, + text = text, + properties = properties + ) + + if (showBottomSheet) { + HintBottomSheet( + onDismissRequest = { showBottomSheet = false }, + sheetState = sheetState, + content = hintContent + ) + } +} + +/** + * Standard Dialog Header for BottomSheets. + * Includes Title (Left), Hint Icon (Right), and Close 'X' Button (Far Right). + */ +@Composable +private fun DialogHeader( + title: (@Composable () -> Unit)?, + hintContent: @Composable (() -> Unit)?, + onHintClick: () -> Unit, + onCloseClick: () -> Unit +) { + val showHints = LocalShowHints.current + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), // Slight top padding + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + // Left side: Title + Box(modifier = Modifier.weight(1f)) { + if (title != null) { + ProvideTextStyle(value = MaterialTheme.typography.headlineSmall) { + title() + } + } + } + + // Right side: Icons (Hint + Close) + Row( + verticalAlignment = Alignment.CenterVertically + ) { + // Hint Icon + if (showHints && hintContent != null) { + IconButton(onClick = onHintClick) { + Icon( + imageVector = AppIcons.Help, + contentDescription = stringResource(R.string.show_hint), + tint = MaterialTheme.colorScheme.secondary + ) + } + } + + IconButton(onClick = onCloseClick) { + Icon( + imageVector = AppIcons.Close, + contentDescription = stringResource(R.string.label_close), + tint = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.size(28.dp) + ) + } + } + } +} + +/** + * Simplified Title Row for standard AlertDialogs (no Close 'X'). + */ +@Composable +private fun DialogTitleWithHint( + title: @Composable () -> Unit, + hintContent: @Composable (() -> Unit)?, + onHintClick: () -> Unit +) { + val showHints = LocalShowHints.current + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Box(modifier = Modifier.weight(1f)) { + ProvideTextStyle(value = MaterialTheme.typography.headlineSmall) { + title() + } + } + if (showHints && hintContent != null) { + IconButton(onClick = onHintClick) { + Icon( + imageVector = AppIcons.Help, + contentDescription = stringResource(R.string.show_hint), + tint = MaterialTheme.colorScheme.secondary + ) + } + } + } +} + +@Composable +private fun EnhancedHintBottomSheet( + onDismissRequest: () -> Unit, + content: @Composable (() -> Unit)?, + parentTitle: (@Composable () -> Unit)?, + sheetGesturesEnabled : Boolean = false +) { + + rememberCoroutineScope() + + val sheetState = rememberModalBottomSheetState( + skipPartiallyExpanded = true + ) + + ModalBottomSheet( + onDismissRequest = onDismissRequest, + sheetState = sheetState, + sheetGesturesEnabled = sheetGesturesEnabled, + contentWindowInsets = { BottomSheetDefaults.windowInsets.union(WindowInsets.ime) } + ) { + Column(modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp)) { + // Header with back navigation context + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + IconButton(onClick = onDismissRequest) { + Icon( + imageVector = AppIcons.ArrowBack, + contentDescription = stringResource(R.string.cd_back), + tint = MaterialTheme.colorScheme.primary + ) + } + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = stringResource(R.string.text_hint), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.primary + ) + parentTitle?.let { + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = "•", + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Spacer(modifier = Modifier.width(8.dp)) + Box(modifier = Modifier.weight(1f)) { + ProvideTextStyle(value = MaterialTheme.typography.bodyMedium) { + it() + } + } + } + } + + Spacer(modifier = Modifier.height(16.dp)) + + // Scrollable content area + Column( + modifier = Modifier + .weight(1f, fill = false) + .verticalScroll(rememberScrollState()) + ) { + content?.invoke() + } + + Spacer(modifier = Modifier.height(16.dp)) + + // Enhanced action button + AppButton( + onClick = { + onDismissRequest() + }, + modifier = Modifier + .align(Alignment.End) + .padding(bottom = 8.dp) + ) { + Text(stringResource(R.string.got_it)) + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun AppDialogPreview() { + AppDialog( + onDismissRequest = {}, + title = { Text("Dialog Title") }, + hintContent = { Text("This is a hint.") }, + content = { + Column { + Text("Content line 1") + Spacer(Modifier.height(8.dp)) + Text("Content line 2") + } + } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun AppDialogNoTitlePreview() { + AppDialog( + onDismissRequest = {}, + content = { + Column { + Text("Dialog without title") + Spacer(Modifier.height(8.dp)) + Text("Just content here") + } + } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun AppDialogNoHintPreview() { + AppDialog( + onDismissRequest = {}, + title = { Text("Dialog Without Hint") }, + content = { + Column { + Text("This dialog has no hint functionality") + Spacer(Modifier.height(8.dp)) + Text("Only title and content") + } + } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun AppDialogLongContentPreview() { + AppDialog( + onDismissRequest = {}, + title = { Text("Long Content Dialog") }, + hintContent = { Text("Hint for long content dialog") }, + content = { + Column { + Text("This is a long content dialog to test scrolling") + Spacer(Modifier.height(8.dp)) + Text("Line 2 of content") + Spacer(Modifier.height(8.dp)) + Text("Line 3 of content") + Spacer(Modifier.height(8.dp)) + Text("Line 4 of content") + Spacer(Modifier.height(8.dp)) + Text("Line 5 of content") + Spacer(Modifier.height(8.dp)) + Text("Line 6 of content") + Spacer(Modifier.height(8.dp)) + Text("Line 7 of content") + Spacer(Modifier.height(8.dp)) + Text("Line 8 - This should trigger scrolling") + } + } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun AppAlertDialogPreview() { + AppAlertDialog( + onDismissRequest = {}, + confirmButton = { + TextButton(onClick = {}) { + Text("Confirm") + } + }, + dismissButton = { + TextButton(onClick = {}) { + Text("Dismiss") + } + }, + icon = { + Icon( + imageVector = AppIcons.Help, + contentDescription = null + ) + }, + title = { Text("Alert Dialog Title") }, + text = { Text("This is the alert dialog text.") }, + hintContent = { Text("This is a hint for the alert dialog.") } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun AppAlertDialogNoIconPreview() { + AppAlertDialog( + onDismissRequest = {}, + confirmButton = { + TextButton(onClick = {}) { + Text("OK") + } + }, + title = { Text("Simple Alert") }, + text = { Text("This alert has no icon but has a title and text.") } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun AppAlertDialogOnlyConfirmPreview() { + AppAlertDialog( + onDismissRequest = {}, + confirmButton = { + TextButton(onClick = {}) { + Text("Got it") + } + }, + icon = { + Icon( + imageVector = AppIcons.Help, + contentDescription = null + ) + }, + title = { Text("Confirmation Required") }, + text = { Text("This dialog only has a confirm button.") } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun AppAlertDialogLongTextPreview() { + AppAlertDialog( + onDismissRequest = {}, + confirmButton = { + TextButton(onClick = {}) { + Text("I Understand") + } + }, + dismissButton = { + TextButton(onClick = {}) { + Text("Cancel") + } + }, + title = { Text("Terms and Conditions") }, + text = { + Column { + Text("This is a long text dialog to test how the alert dialog handles extended content.") + Spacer(Modifier.height(8.dp)) + Text("Second paragraph of the terms and conditions that explains important details.") + Spacer(Modifier.height(8.dp)) + Text("Third paragraph with additional information that users need to be aware of.") + } + }, + hintContent = { Text("This hint explains the terms in more detail.") } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun AppAlertDialogMinimalPreview() { + AppAlertDialog( + onDismissRequest = {}, + confirmButton = { + TextButton(onClick = {}) { + Text("OK") + } + }, + text = { Text("Minimal dialog with only text and confirm button.") } + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/AppDropdownMenu.kt b/app/src/main/java/eu/gaudian/translator/view/composable/AppDropdownMenu.kt new file mode 100644 index 0000000..83e3634 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/AppDropdownMenu.kt @@ -0,0 +1,478 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.composable + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.OutlinedTextFieldDefaults +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.layout.onGloballyPositioned +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.DpOffset +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.toSize +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.PopupProperties +import com.google.android.material.color.MaterialColors.ALPHA_DISABLED +import com.google.android.material.color.MaterialColors.ALPHA_FULL +import eu.gaudian.translator.R + +/** + * A modern, custom dropdown menu composable that provides a styled text field with a dropdown list of options. + * This implementation uses a custom dropdown for a more tailored look compared to the stock menu, behaving like a normal ExposedDropdownMenu. + * Allows managing selection and expansion, making it a convenient wrapper for dropdowns. + * + * @param expanded Whether the dropdown menu is expanded. + * @param onDismissRequest Callback invoked when the dropdown menu should be dismissed. + * @param modifier Modifier for the composable. + * @param label Composable for the label displayed in the text field. + * @param enabled Whether the dropdown is enabled. + * @param placeholder Optional placeholder text when no option is selected. + * @param selectedText The text to display in the text field for the selected option. + * @param onExpandRequest Callback invoked when the dropdown should expand. + * @param content Composable content for the dropdown items, typically using AppDropdownMenuItem. + */ +@Composable +fun AppDropdownMenu( + expanded: Boolean, + onDismissRequest: () -> Unit, + modifier: Modifier = Modifier, + label: @Composable (() -> Unit)? = null, + enabled: Boolean = true, + placeholder: @Composable (() -> Unit)? = null, + selectedText: String = "", + onExpandRequest: () -> Unit = {}, + content: @Composable androidx.compose.foundation.layout.ColumnScope.() -> Unit, +) { + var textFieldSize by remember { mutableStateOf(Size.Zero) } + + val interactionSource = remember { androidx.compose.foundation.interaction.MutableInteractionSource() } + + Column(modifier = modifier) { + OutlinedTextField( + value = selectedText, + onValueChange = {}, + modifier = Modifier + .fillMaxWidth() + .onGloballyPositioned { coordinates -> + textFieldSize = coordinates.size.toSize() + } + .clickable( + enabled = enabled, + onClick = onExpandRequest, + interactionSource = interactionSource, + indication = null + ), + readOnly = true, + label = label, + placeholder = placeholder, + trailingIcon = { + val icon = if (expanded) AppIcons.ArrowDropUp else AppIcons.ArrowDropDown + Icon( + imageVector = icon, + contentDescription = if (expanded) stringResource(R.string.cd_collapse) else stringResource(R.string.cd_expand), + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + }, + shape = ComponentDefaults.DefaultShape, + colors = OutlinedTextFieldDefaults.colors( + focusedBorderColor = MaterialTheme.colorScheme.primary, + unfocusedBorderColor = MaterialTheme.colorScheme.onSurface.copy(alpha = ComponentDefaults.ALPHA_LOW), + focusedLabelColor = MaterialTheme.colorScheme.primary, + cursorColor = MaterialTheme.colorScheme.primary, + disabledBorderColor = MaterialTheme.colorScheme.onSurface.copy(alpha = ComponentDefaults.ALPHA_LOW), + disabledLabelColor = MaterialTheme.colorScheme.onSurface.copy(alpha = ComponentDefaults.ALPHA_MEDIUM) + ), + enabled = enabled, + interactionSource = interactionSource + ) + + DropdownMenu( + expanded = expanded, + onDismissRequest = onDismissRequest, + modifier = Modifier + .width(with(LocalDensity.current) { textFieldSize.width.toDp() }), + offset = DpOffset(0.dp, 0.dp), + scrollState = rememberScrollState(), + properties = PopupProperties(focusable = true), + shape = RoundedCornerShape(8.dp), + containerColor = MaterialTheme.colorScheme.surfaceContainer, + tonalElevation = 0.dp, + shadowElevation = 4.dp, + border = BorderStroke(0.5.dp, MaterialTheme.colorScheme.outline.copy(alpha = 0.14f)) + ) { + content() + } + } +} + +/** + * A modern and stylish composable for individual dropdown items, featuring enhanced visual design + * with subtle shadows, rounded corners, and smooth interactions. This provides a cool, contemporary look + * that aligns with modern UI trends while maintaining accessibility and usability. + * + * @param text Composable lambda for the text to display in the item. + * @param onClick Callback invoked when the item is clicked. + * @param modifier Modifier for the item. + * @param enabled Whether the item is enabled. + * @param leadingIcon Optional leading icon for the item. + * @param trailingIcon Optional trailing icon for the item. + */ +@Composable +fun AppDropdownMenuItem( + text: @Composable () -> Unit, + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + leadingIcon: @Composable (() -> Unit)? = null, + trailingIcon: @Composable (() -> Unit)? = null, + selected: Boolean = false, +) { + val contentColor = if (enabled) { + if (selected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface + } else { + MaterialTheme.colorScheme.onSurface.copy(alpha = 0.38f) // Equivalent to disabled alpha + } + + Box( + modifier = modifier + .fillMaxWidth() + .clickable(enabled = enabled) { onClick() } + ) { + androidx.compose.foundation.layout.Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = androidx.compose.ui.Alignment.CenterVertically + ) { + leadingIcon?.invoke() + if (leadingIcon != null) { + androidx.compose.foundation.layout.Spacer(modifier = Modifier.width(8.dp)) + } + Box(modifier = Modifier.weight(1f)) { + CompositionLocalProvider(LocalContentColor provides contentColor) { + text() + } + } + if (trailingIcon != null) { + androidx.compose.foundation.layout.Spacer(modifier = Modifier.width(8.dp)) + trailingIcon() + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun AppDropdownMenuPreview() { + val options = listOf("Option 1", "Option 2", "Option 3") + AppDropdownMenu( + expanded = false, + onDismissRequest = {}, + label = { Text("Select Option") }, + content = { + options.forEach { option -> + AppDropdownMenuItem( + text = { Text(text = option) }, + onClick = {} + ) + } + } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun AppDropdownMenuExpandedPreview() { + val options = listOf("English", "Spanish", "French", "German", "Italian", "Portuguese") + var expanded by remember { mutableStateOf(true) } // Force expanded state for preview + + // Since previews are static, we'll simulate the expanded state by showing the dropdown + AppDropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false }, + label = { Text("Language") }, + content = { + options.forEach { option -> + AppDropdownMenuItem( + text = { Text(text = option) }, + onClick = {} + ) + } + } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun DropDownItemPreview() { + AppDropdownMenuItem( + text = { Text("Sample Item", style = MaterialTheme.typography.titleSmall) }, + onClick = {}, + leadingIcon = { + Icon( + imageVector = AppIcons.Add, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary + ) + } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun DropDownItemSelectedPreview() { + AppDropdownMenuItem( + text = { Text("Selected Item", style = MaterialTheme.typography.titleSmall) }, + onClick = {}, + selected = true, + trailingIcon = { + Icon( + imageVector = AppIcons.Check, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary + ) + } + ) +} + +@Composable +fun LargeDropdownMenu( + modifier: Modifier = Modifier, + enabled: Boolean = true, + label: String, + notSetLabel: String? = null, + items: List, + selectedIndex: Int = -1, + onItemSelected: (index: Int, item: T) -> Unit, + selectedItemToString: (T) -> String = { it.toString() }, + drawItem: @Composable (T, Boolean, Boolean, () -> Unit) -> Unit = { item, selected, itemEnabled, onClick -> + LargeDropdownMenuItem( + text = item.toString(), + selected = selected, + enabled = itemEnabled, + onClick = onClick, + ) + }, +) { + var expanded by remember { mutableStateOf(false) } + + Box(modifier = modifier.height(IntrinsicSize.Min)) { + OutlinedTextField( + label = { Text(label) }, + value = items.getOrNull(selectedIndex)?.let { selectedItemToString(it) } ?: "", + enabled = enabled, + modifier = Modifier.fillMaxWidth(), + trailingIcon = { + val icon: ImageVector = if (expanded) AppIcons.ArrowDropUp else AppIcons.ArrowDropDown + Icon(icon, contentDescription = "") + }, + onValueChange = { }, + readOnly = true, + ) + + // Transparent clickable surface on top of OutlinedTextField + Surface( + modifier = Modifier + .fillMaxSize() + .padding(top = 8.dp) + .clip(MaterialTheme.shapes.extraSmall) + .clickable(enabled = enabled) { expanded = true }, + color = Color.Transparent, + ) {} + } + + if (expanded) { + Dialog( + onDismissRequest = { expanded = true }, + ) { + Surface( + shape = RoundedCornerShape(12.dp), + ) { + val listState = rememberLazyListState() + if (selectedIndex > -1) { + LaunchedEffect("ScrollToSelected") { + listState.scrollToItem(index = selectedIndex) + } + } + + LazyColumn(modifier = Modifier.fillMaxWidth(), state = listState) { + if (notSetLabel != null) { + item { + LargeDropdownMenuItem( + text = notSetLabel, + selected = false, + enabled = false, + onClick = { }, + ) + } + } + itemsIndexed(items) { index, item -> + val selectedItem = index == selectedIndex + drawItem( + item, + selectedItem, + true + ) { + onItemSelected(index, item) + expanded = false + } + + if (index < items.lastIndex) { + HorizontalDivider(modifier = Modifier.padding(horizontal = 16.dp)) + } + } + } + } + } + } +} + +@Composable +fun LargeDropdownMenuItem( + text: String, + selected: Boolean, + enabled: Boolean, + onClick: () -> Unit, +) { + val contentColor = when { + !enabled -> MaterialTheme.colorScheme.onSurface.copy(alpha = ALPHA_DISABLED) + selected -> MaterialTheme.colorScheme.primary.copy(alpha = ALPHA_FULL) + else -> MaterialTheme.colorScheme.onSurface.copy(alpha = ALPHA_FULL) + } + + CompositionLocalProvider(LocalContentColor provides contentColor) { + Box(modifier = Modifier + .clickable(enabled) { onClick() } + .fillMaxWidth() + .padding(16.dp)) { + Text( + text = text, + style = MaterialTheme.typography.titleSmall, + ) + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun LargeDropdownMenuItemPreview() { + LargeDropdownMenuItem( + text = "Sample Item", + selected = false, + enabled = true, + onClick = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun LargeDropdownMenuItemSelectedPreview() { + LargeDropdownMenuItem( + text = "Selected Item", + selected = true, + enabled = true, + onClick = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun LargeDropdownMenuPreview() { + val options = listOf("Option 1", "Option 2", "Option 3", "Option 4", "Option 5") + var selectedIndex by remember { mutableIntStateOf(1) } + + LargeDropdownMenu( + label = "Select Option", + items = options, + selectedIndex = selectedIndex, + onItemSelected = { index, _ -> + selectedIndex = index + } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun LargeDropdownMenuExpandedPreview() { + val options = listOf("Option 1", "Option 2", "Option 3", "Option 4", "Option 5", "Option 6") + var selectedIndex by remember { mutableIntStateOf(2) } + + // Simulate expanded state by showing the dropdown and the dialog content + Column { + LargeDropdownMenu( + label = "Select Option", + items = options, + selectedIndex = selectedIndex, + onItemSelected = { index, _ -> + selectedIndex = index + } + ) + + // Manually show the expanded dialog content for preview + Dialog(onDismissRequest = {}) { + Surface(shape = RoundedCornerShape(12.dp)) { + val listState = rememberLazyListState() + LaunchedEffect("ScrollToSelected") { + listState.scrollToItem(index = selectedIndex) + } + + LazyColumn(modifier = Modifier.fillMaxWidth(), state = listState) { + itemsIndexed(options) { index, item -> + LargeDropdownMenuItem( + text = item, + selected = index == selectedIndex, + enabled = true, + onClick = { selectedIndex = index } + ) + + if (index < options.lastIndex) { + HorizontalDivider(modifier = Modifier.padding(horizontal = 16.dp)) + } + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/AppFabMenu.kt b/app/src/main/java/eu/gaudian/translator/view/composable/AppFabMenu.kt new file mode 100644 index 0000000..cfb5fe7 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/AppFabMenu.kt @@ -0,0 +1,189 @@ +package eu.gaudian.translator.view.composable + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.spring +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutVertically +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.FloatingActionButtonDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R + + +data class FabMenuItem( + val text: String, + val imageVector: ImageVector? = null, + val painter: Painter? = null, + val onClick: () -> Unit +) + + +@Composable +fun AppFabMenu( + items: List, + modifier: Modifier = Modifier +) { + var isMenuExpanded by remember { mutableStateOf(false) } + + val rotationAngle by animateFloatAsState( + targetValue = if (isMenuExpanded) 45f else 0f, + animationSpec = spring( + dampingRatio = Spring.DampingRatioMediumBouncy, + stiffness = Spring.StiffnessLow + ), + label = "fabRotation" + ) + + Column( + modifier = modifier, + horizontalAlignment = Alignment.End, + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + AnimatedVisibility( + visible = isMenuExpanded, + enter = fadeIn(animationSpec = tween(durationMillis = 100)) + slideInVertically(initialOffsetY = { it / 2 }), + exit = fadeOut(animationSpec = tween(durationMillis = 150)) + slideOutVertically(targetOffsetY = { it / 2 }) + ) { + Column( + horizontalAlignment = Alignment.End, + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + items.forEach { item -> + MenuItem( + text = item.text, + imageVector = item.imageVector, + painter = item.painter, + onClick = { + item.onClick() + isMenuExpanded = false + } + ) + } + } + } + + FloatingActionButton( + onClick = { isMenuExpanded = !isMenuExpanded }, + modifier = Modifier.rotate(rotationAngle), + shape = RoundedCornerShape(16.dp), + containerColor = MaterialTheme.colorScheme.primary, + contentColor = MaterialTheme.colorScheme.onPrimary, + elevation = FloatingActionButtonDefaults.elevation(defaultElevation = ComponentDefaults.DefaultElevation) + ) { + Icon( + imageVector = AppIcons.Add, + contentDescription = stringResource(R.string.cd_toggle_menu) + ) + } + } +} + +@Preview +@Composable +fun AppFabMenuPreview() { + @Suppress("HardCodedStringLiteral") val items = remember { + mutableStateListOf( + FabMenuItem( + text = "Item 1", + imageVector = AppIcons.Add, + onClick = {} + ), + FabMenuItem(text = "Item 2", onClick = {}) + ) + } + AppFabMenu(items = items) +} + + +@Composable +private fun MenuItem( + text: String, + imageVector: ImageVector?, + painter: Painter?, + onClick: () -> Unit +) { + Surface( + modifier = Modifier + .shadow(elevation = 8.dp, shape = ComponentDefaults.DefaultShape) + .clickable( + onClick = onClick, + interactionSource = remember { MutableInteractionSource() }, + indication = null + ), + shape = RoundedCornerShape(16.dp), + color = MaterialTheme.colorScheme.surfaceContainer + ) { + Row( + modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp), + verticalAlignment = Alignment.CenterVertically + ) { + val iconContentColor = MaterialTheme.colorScheme.onSurfaceVariant + if (imageVector != null) { + Icon( + imageVector = imageVector, + contentDescription = null, + modifier = Modifier.size(24.dp), + tint = iconContentColor + ) + } else if (painter != null) { + Icon( + painter = painter, + contentDescription = null, + modifier = Modifier.size(24.dp), + tint = iconContentColor + ) + } + Spacer(modifier = Modifier.width(12.dp)) + Text( + text = text, + color = MaterialTheme.colorScheme.onSurface, + style = MaterialTheme.typography.labelLarge + ) + } + } +} + +@Preview +@Composable +fun MenuItemPreview() { + @Suppress("HardCodedStringLiteral") + MenuItem( + text = "Menu Item", + imageVector = AppIcons.Add, + painter = null, + onClick = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/AppIcons.kt b/app/src/main/java/eu/gaudian/translator/view/composable/AppIcons.kt new file mode 100644 index 0000000..eb18fc4 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/AppIcons.kt @@ -0,0 +1,291 @@ +@file:Suppress("unused", "HardCodedStringLiteral", "DEPRECATION") + +package eu.gaudian.translator.view.composable + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.lazy.grid.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.Icons.Default +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.automirrored.filled.ArrowForward +import androidx.compose.material.icons.automirrored.filled.DriveFileMove +import androidx.compose.material.icons.automirrored.filled.ExitToApp +import androidx.compose.material.icons.automirrored.filled.LibraryBooks +import androidx.compose.material.icons.automirrored.filled.Redo +import androidx.compose.material.icons.automirrored.filled.Sort +import androidx.compose.material.icons.automirrored.filled.Undo +import androidx.compose.material.icons.automirrored.filled.VolumeUp +import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.filled.ArrowCircleUp +import androidx.compose.material.icons.filled.Assessment +import androidx.compose.material.icons.filled.AutoAwesome +import androidx.compose.material.icons.filled.BarChart +import androidx.compose.material.icons.filled.Book +import androidx.compose.material.icons.filled.BrightnessAuto +import androidx.compose.material.icons.filled.BrightnessHigh +import androidx.compose.material.icons.filled.BrightnessLow +import androidx.compose.material.icons.filled.Business +import androidx.compose.material.icons.filled.Cancel +import androidx.compose.material.icons.filled.CheckCircle +import androidx.compose.material.icons.filled.Checklist +import androidx.compose.material.icons.filled.ChevronLeft +import androidx.compose.material.icons.filled.ChevronRight +import androidx.compose.material.icons.filled.CleaningServices +import androidx.compose.material.icons.filled.Close +import androidx.compose.material.icons.filled.ColorLens +import androidx.compose.material.icons.filled.ContentCopy +import androidx.compose.material.icons.filled.ContentPaste +import androidx.compose.material.icons.filled.CreateNewFolder +import androidx.compose.material.icons.filled.Dashboard +import androidx.compose.material.icons.filled.Delete +import androidx.compose.material.icons.filled.Deselect +import androidx.compose.material.icons.filled.Download +import androidx.compose.material.icons.filled.DragIndicator +import androidx.compose.material.icons.filled.Edit +import androidx.compose.material.icons.filled.EditNote +import androidx.compose.material.icons.filled.EmojiEvents +import androidx.compose.material.icons.filled.Error +import androidx.compose.material.icons.filled.ExpandMore +import androidx.compose.material.icons.filled.Extension +import androidx.compose.material.icons.filled.Favorite +import androidx.compose.material.icons.filled.Filter1 +import androidx.compose.material.icons.filled.Filter2 +import androidx.compose.material.icons.filled.Filter3 +import androidx.compose.material.icons.filled.Filter4 +import androidx.compose.material.icons.filled.Filter5 +import androidx.compose.material.icons.filled.FilterAlt +import androidx.compose.material.icons.filled.FilterList +import androidx.compose.material.icons.filled.FitnessCenter +import androidx.compose.material.icons.filled.FlashOn +import androidx.compose.material.icons.filled.Folder +import androidx.compose.material.icons.filled.FolderDelete +import androidx.compose.material.icons.filled.FolderSpecial +import androidx.compose.material.icons.filled.HelpOutline +import androidx.compose.material.icons.filled.History +import androidx.compose.material.icons.filled.Home +import androidx.compose.material.icons.filled.Info +import androidx.compose.material.icons.filled.Key +import androidx.compose.material.icons.filled.KeyboardArrowDown +import androidx.compose.material.icons.filled.KeyboardArrowUp +import androidx.compose.material.icons.filled.Language +import androidx.compose.material.icons.filled.LibraryBooks +import androidx.compose.material.icons.filled.Lightbulb +import androidx.compose.material.icons.filled.LocalFireDepartment +import androidx.compose.material.icons.filled.Lock +import androidx.compose.material.icons.filled.LooksTwo +import androidx.compose.material.icons.filled.MenuBook +import androidx.compose.material.icons.filled.Merge +import androidx.compose.material.icons.filled.ModelTraining +import androidx.compose.material.icons.filled.MonitorHeart +import androidx.compose.material.icons.filled.MoreVert +import androidx.compose.material.icons.filled.NoteAdd +import androidx.compose.material.icons.filled.PlayArrow +import androidx.compose.material.icons.filled.PlayCircleFilled +import androidx.compose.material.icons.filled.PlaylistRemove +import androidx.compose.material.icons.filled.Quiz +import androidx.compose.material.icons.filled.Refresh +import androidx.compose.material.icons.filled.RuleFolder +import androidx.compose.material.icons.filled.Science +import androidx.compose.material.icons.filled.Search +import androidx.compose.material.icons.filled.SelectAll +import androidx.compose.material.icons.filled.Settings +import androidx.compose.material.icons.filled.Share +import androidx.compose.material.icons.filled.SmartToy +import androidx.compose.material.icons.filled.Source +import androidx.compose.material.icons.filled.Spellcheck +import androidx.compose.material.icons.filled.Stairs +import androidx.compose.material.icons.filled.Storage +import androidx.compose.material.icons.filled.Style +import androidx.compose.material.icons.filled.SwapHoriz +import androidx.compose.material.icons.filled.Sync +import androidx.compose.material.icons.filled.Today +import androidx.compose.material.icons.filled.ToggleOn +import androidx.compose.material.icons.filled.Translate +import androidx.compose.material.icons.filled.Tune +import androidx.compose.material.icons.filled.Upload +import androidx.compose.material.icons.filled.Wallpaper +import androidx.compose.material.icons.filled.Warning +import androidx.compose.material.icons.outlined.Book +import androidx.compose.material.icons.outlined.FavoriteBorder +import androidx.compose.material.icons.outlined.FilterAlt +import androidx.compose.material.icons.outlined.FitnessCenter +import androidx.compose.material.icons.outlined.LibraryBooks +import androidx.compose.material.icons.outlined.Translate +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.ui.theme.ThemePreviews + + +object AppIcons { + val Add = Default.Add + val AddCategory = Icons.Filled.CreateNewFolder + val AddTo = Default.Add + val AddToDictionary = Icons.Filled.NoteAdd + val AI = Default.AutoAwesome + val Appearance = Icons.Filled.ColorLens + val ApiKey = Default.Key + val ArrowBack = Icons.AutoMirrored.Filled.ArrowBack + val ArrowCircleUp = Icons.Filled.ArrowCircleUp + val ArrowDropDown = Icons.Filled.KeyboardArrowDown + val ArrowDropUp = Icons.Filled.KeyboardArrowUp + val ArrowForward = Icons.Filled.ChevronRight + val ArrowForwardNoChevron = Icons.AutoMirrored.Filled.ArrowForward + val ArrowLeft = Icons.Filled.ChevronLeft + val ArrowRight = Icons.Filled.ChevronRight + val BarChart = Default.BarChart + val BrightnessAuto = Icons.Filled.BrightnessAuto + val Business = Icons.Filled.Business + val Cancel = Default.Cancel + val Category = Icons.Filled.Folder + val Check = Default.CheckCircle + val CheckCircle = Default.CheckCircle + val CheckList = Icons.Filled.Checklist + val Clean = Default.CleaningServices + val Clear = Default.Close + val Clippy = HintIcons.Clippy + val Close = Default.Close + val Copy = Default.ContentCopy + val Dashboard = Default.Dashboard + val DarkMode = Icons.Filled.BrightnessLow + val Delete = Default.Delete + val DeleteCategory = Icons.Filled.FolderDelete + val Deselect = Default.Deselect + val Dictionary = Icons.Filled.Book + val DictionaryCategory = Icons.Filled.LooksTwo + val DictionaryFilled = Icons.Filled.Book + val DictionaryOutlined = Icons.Outlined.Book + val DragHandle = Icons.Filled.DragIndicator + val Download = Default.Download + val Done = Default.CheckCircle + val Edit = Default.Edit + val EditNote = Default.EditNote + val Error = Default.Error + val Exercise = Default.FitnessCenter + val Exercises = Icons.Filled.FitnessCenter + val ExercisesFilled = Icons.Filled.FitnessCenter + val ExercisesOutlined = Icons.Outlined.FitnessCenter + val ExitToApp = Icons.AutoMirrored.Filled.ExitToApp + val Extension = Default.Extension + val ExpandMore = Default.ExpandMore + val Favorite = Icons.Filled.Favorite + val FavoriteOutline = Icons.Outlined.FavoriteBorder + val Filter = Icons.Filled.FilterList + val FilterCategory = Icons.Filled.RuleFolder + val FilterFilled = Icons.Filled.FilterAlt + val FilterList = Icons.Filled.FolderSpecial + val FilterOutlined = Icons.Outlined.FilterAlt + val Flash = Icons.Filled.FlashOn + val FitnessCenter = Default.FitnessCenter + val Guessing = Icons.Filled.HelpOutline + val Help = HintIcons.Help85 + val History = Default.History + val Home = Default.Home + val Info = Default.Info + val Key = Default.Key + val Language = Default.Language + val LightMode = Icons.Filled.BrightnessHigh + val List = Icons.Filled.Source + val Lock = Default.Lock + val Log = Icons.Filled.MonitorHeart + val MenuBook = Icons.Filled.MenuBook + val Merge = Icons.Filled.Merge + val ModelTraining = Icons.Filled.ModelTraining + val More = Default.MoreVert + val MoreVert = Default.MoreVert + val MoveTo = Icons.AutoMirrored.Filled.DriveFileMove + val Paste = Default.ContentPaste + val Play = Default.PlayArrow + val PlayCircleFilled = Icons.Filled.PlayCircleFilled + val Quiz = Icons.Filled.Quiz + val Redo = Icons.AutoMirrored.Filled.Redo + val Refresh = Default.Refresh + val Remove = Default.PlaylistRemove + val Repository = Default.Storage + val Robo = Default.SmartToy + val Science = Icons.Filled.Science + val Search = Default.Search + val SelectAll = Default.SelectAll + val Settings = Default.Settings + val SettingsFilled = Default.Settings + val SettingsOutlined = Default.Settings + val Share = Icons.Filled.Share + val Sort = Icons.AutoMirrored.Filled.Sort + val SpellCheck = Icons.Filled.Spellcheck + val Speech = Icons.AutoMirrored.Filled.VolumeUp + val Stage1 = Default.Filter1 + val Stage2 = Default.Filter2 + val Stage3 = Default.Filter3 + val Stage4 = Default.Filter4 + val Stage5 = Default.Filter5 + val StageLearned = Default.EmojiEvents + val StageNew = Default.Lightbulb + val Stages = Icons.Filled.Stairs + val Statistics = Icons.Filled.Assessment + val Streak = Icons.Filled.LocalFireDepartment + val Storage = Default.Storage + val Style = Icons.Filled.Style + val SwapHoriz = Icons.Filled.SwapHoriz + val Sync = Icons.Filled.Sync + val TextToSpeech = Icons.AutoMirrored.Filled.VolumeUp + val Today = Icons.Filled.Today + val Translate = Default.Translate + val TranslateFilled = Icons.Filled.Translate + val TranslateOutlined = Icons.Outlined.Translate + val Tune = Default.Tune + val Undo = Icons.AutoMirrored.Filled.Undo + val Upload = Default.Upload + val Vocabulary = Icons.AutoMirrored.Filled.LibraryBooks + val VocabularyFilled = Icons.Filled.LibraryBooks + val VocabularyOutlined = Icons.Outlined.LibraryBooks + val Wallpaper = Icons.Filled.Wallpaper + val Warning = Default.Warning + val SwitchOn = Default.ToggleOn +} + +@ThemePreviews +@Composable +fun AppIconsPreview() { + val allIcons = AppIcons::class.java.declaredFields.mapNotNull { + try { + val icon = when (val value = it.get(AppIcons)) { + is ImageVector -> value + is Painter -> null // Cannot preview Painters directly in this setup + else -> null + } ?: return@mapNotNull null + val name = it.name + name to icon + } catch (e: Exception) { + null + } + } + + MaterialTheme { + LazyVerticalGrid( + columns = GridCells.Adaptive(minSize = 80.dp), + modifier = Modifier.padding(8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + items(allIcons) { (name, icon) -> + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Icon(imageVector = icon, contentDescription = name) + Text(text = name, style = MaterialTheme.typography.bodySmall) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/AppSlider.kt b/app/src/main/java/eu/gaudian/translator/view/composable/AppSlider.kt new file mode 100644 index 0000000..e7633e9 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/AppSlider.kt @@ -0,0 +1,87 @@ +package eu.gaudian.translator.view.composable + +import android.annotation.SuppressLint +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Slider +import androidx.compose.material3.SliderDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + + + +/** + * An AppSlider with a diamond-shaped thumb. + */ +@Composable +fun AppSlider( + value: Float, + onValueChange: (Float) -> Unit, + modifier: Modifier = Modifier, + valueRange: ClosedFloatingPointRange = 0f..1f, + steps: Int = 0, + enabled: Boolean = true, + onValueChangeFinished: (() -> Unit)? = null, +) { + + val sliderColors = SliderDefaults.colors( + thumbColor = MaterialTheme.colorScheme.primary, + activeTrackColor = MaterialTheme.colorScheme.primary, + inactiveTrackColor = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.38f), + activeTickColor = MaterialTheme.colorScheme.onPrimary.copy(alpha = 0.6f), + inactiveTickColor = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) + ) + Slider( + value = value, + onValueChange = onValueChange, + modifier = modifier, + valueRange = valueRange, + steps = steps, + enabled = enabled, + onValueChangeFinished = onValueChangeFinished, + colors = SliderDefaults.colors( + thumbColor = MaterialTheme.colorScheme.primary, + activeTrackColor = MaterialTheme.colorScheme.primary, + inactiveTrackColor = MaterialTheme.colorScheme.onSurface.copy(alpha = ComponentDefaults.ALPHA_LOW), + activeTickColor = MaterialTheme.colorScheme.onPrimary.copy(alpha = ComponentDefaults.ALPHA_MEDIUM), + inactiveTickColor = MaterialTheme.colorScheme.onSurface.copy(alpha = ComponentDefaults.ALPHA_MEDIUM) + ), + track = { sliderState -> + SliderDefaults.Track( + colors = sliderColors, + enabled = enabled, + sliderState = sliderState, + thumbTrackGapSize = 2.dp // This is the gap between the Thumb and the slider + ) + }, + thumb = { + Box( + modifier = Modifier + .size(width = 12.dp, height = 24.dp) + .clip(RoundedCornerShape(6.dp)) + .background(MaterialTheme.colorScheme.primary) + ) + } + ) +} + +@SuppressLint("AutoboxingStateCreation") +@Preview +@Composable +fun AppSliderPreview() { + var sliderValue by remember { mutableFloatStateOf(0.5f) } + AppSlider( + value = sliderValue, + onValueChange = { } + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/AppTabLayout.kt b/app/src/main/java/eu/gaudian/translator/view/composable/AppTabLayout.kt new file mode 100644 index 0000000..5c78241 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/AppTabLayout.kt @@ -0,0 +1,166 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.composable + +import android.annotation.SuppressLint +import androidx.compose.animation.animateColorAsState +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.animateDpAsState +import androidx.compose.animation.core.spring +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.ui.theme.ThemePreviews + +/** + * An interface that defines the required properties for any item + * that can be displayed as a tab in the ModernTabLayout. + */ +interface TabItem { + val title: String + val icon: ImageVector +} + +/** + * A generic, reusable tab layout composable. + * @param T The type of the tab item, which must implement the TabItem interface. + * @param tabs A list of all tab items to display. + * @param selectedTab The currently selected tab item. + * @param onTabSelected A lambda function to be invoked when a tab is clicked. + */ +@SuppressLint("UnusedBoxWithConstraintsScope", "LocalContextResourcesRead", "DiscouragedApi") +@Composable +fun AppTabLayout( + tabs: List, + selectedTab: T, + onTabSelected: (T) -> Unit, + modifier: Modifier = Modifier +) { + val selectedIndex = tabs.indexOf(selectedTab) + + BoxWithConstraints( + modifier = modifier + .fillMaxWidth() + .padding(vertical = 8.dp, horizontal = 8.dp) + .height(56.dp) + .background( + color = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.5f), + shape = ComponentDefaults.CardShape + ) + ) { + val tabWidth = maxWidth / tabs.size + + val indicatorOffset by animateDpAsState( + targetValue = tabWidth * selectedIndex, + animationSpec = spring(dampingRatio = Spring.DampingRatioMediumBouncy, stiffness = Spring.StiffnessMedium), + label = "IndicatorOffset" + ) + + Box( + modifier = Modifier + .offset(x = indicatorOffset) + .width(tabWidth) + .fillMaxHeight() + .padding(4.dp) + .background( + color = MaterialTheme.colorScheme.primary, + shape = RoundedCornerShape(12.dp) + ) + ) + + Row(modifier = Modifier.fillMaxWidth()) { + tabs.forEach { tab -> + val isSelected = tab == selectedTab + val contentColor by animateColorAsState( + targetValue = if (isSelected) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurfaceVariant, + animationSpec = spring(stiffness = Spring.StiffnessLow) + ) + + Box( + modifier = Modifier + .weight(1f) + .fillMaxHeight() + .clickable( + onClick = { onTabSelected(tab) }, + indication = null, + interactionSource = remember { MutableInteractionSource() } + ), + contentAlignment = Alignment.Center + ) { + + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center + ) { + val context = LocalContext.current + val resolvedTitle = run { + val resId = context.resources.getIdentifier(tab.title, "string", context.packageName) + if (resId != 0) stringResource(resId) else tab.title + } + Icon( + modifier = Modifier.padding(4.dp), + imageVector = tab.icon, + contentDescription = resolvedTitle, + tint = contentColor + ) + Spacer(modifier = Modifier.width(2.dp)) + Text( + text = resolvedTitle, + color = contentColor, + ) + } + } + } + } + } +} + +@ThemePreviews +@Composable +fun ModernTabLayoutPreview() { + data class SampleTabItem(override val title: String, override val icon: ImageVector) : TabItem + + val tabs = listOf( + SampleTabItem("All Vocabulary", AppIcons.Home), + SampleTabItem("Flashcards", AppIcons.Search), + SampleTabItem("Settings", AppIcons.Settings) + ) + + var selectedTab by remember { mutableStateOf(tabs.first()) } + + MaterialTheme { + AppTabLayout( + tabs = tabs, + selectedTab = selectedTab, + onTabSelected = { + selectedTab = it + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/AppTopAppBar.kt b/app/src/main/java/eu/gaudian/translator/view/composable/AppTopAppBar.kt new file mode 100644 index 0000000..5c9a491 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/AppTopAppBar.kt @@ -0,0 +1,229 @@ +package eu.gaudian.translator.view.composable + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarColors +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.view.hints.HintBottomSheet +import eu.gaudian.translator.view.hints.LocalShowHints + +@Composable +fun AppTopAppBar( + title: @Composable () -> Unit, + modifier: Modifier = Modifier, + onNavigateBack: (() -> Unit)? = null, + navigationIcon: @Composable (() -> Unit)? = null, + actions: @Composable RowScope.() -> Unit = {}, + colors: TopAppBarColors = TopAppBarDefaults.topAppBarColors(), + hintContent: @Composable (() -> Unit)? = null +) { + val sheetState = rememberModalBottomSheetState() + var showBottomSheet by remember { mutableStateOf(false) } + + TopAppBar( + modifier = modifier.height(56.dp), + windowInsets = WindowInsets(0.dp), + colors = colors, + title = { + Box( + modifier = Modifier.fillMaxHeight(), + contentAlignment = Alignment.Center + ) { + val showHints = LocalShowHints.current + if (showHints && hintContent != null) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + Box(modifier = Modifier.weight(1f)) { + title() + } + Box { + IconButton(onClick = { showBottomSheet = true }) { + Icon( + imageVector = AppIcons.Help, + contentDescription = stringResource(R.string.show_hint), + tint = MaterialTheme.colorScheme.secondary + ) + } + } + } + } else { + title() + } + } + }, + navigationIcon = { + if (onNavigateBack != null) { + Box( + modifier = Modifier.fillMaxHeight(), + contentAlignment = Alignment.Center + ) { + IconButton(onClick = onNavigateBack) { + Icon( + AppIcons.ArrowBack, + contentDescription = stringResource(R.string.cd_navigate_back), + tint = LocalContentColor.current + ) + } + } + } else if (navigationIcon != null) { + Box(modifier = Modifier.fillMaxHeight(), contentAlignment = Alignment.Center) { + navigationIcon() + } + } else { + // No navigation icon + } + }, + actions = actions + ) + + if (showBottomSheet) { + HintBottomSheet( + onDismissRequest = { + @Suppress("AssignedValueIsNeverRead") + showBottomSheet = false + }, + sheetState = sheetState, + content = hintContent + ) + } +} + + +/** + * A composable that acts as a TopAppBar, containing a back navigation icon + * and an [AppTabLayout]. + * + * @param T The type of the tab item, must implement [TabItem]. + * @param tabs The list of tab items to display. + * @param selectedTab The currently selected tab item. + * @param onTabSelected Callback function when a tab is selected. + * @param onNavigateBack Callback function when the back arrow is clicked. + * @param modifier The modifier to be applied to the layout. + */ +@Composable +fun TabbedTopAppBar( + tabs: List, + selectedTab: T, + onTabSelected: (T) -> Unit, + onNavigateBack: () -> Unit, + modifier: Modifier = Modifier +) { + // Use a Surface to provide background color and context for the app bar + Surface( + modifier = modifier.fillMaxWidth(), + color = MaterialTheme.colorScheme.surface + ) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + // Back navigation icon, similar to its usage in AppTopAppBar + IconButton( + onClick = onNavigateBack, + modifier = Modifier.padding(horizontal = 4.dp) + ) { + Icon( + imageVector = AppIcons.ArrowBack, + contentDescription = stringResource(R.string.cd_navigate_back), + tint = MaterialTheme.colorScheme.onSurface + ) + } + + // The AppTabLayout, taking up the remaining space. + // Its appearance matches the provided image. + AppTabLayout( + tabs = tabs, + selectedTab = selectedTab, + onTabSelected = onTabSelected, + modifier = Modifier.weight(1f) + ) + } + } +} + +@Suppress("HardCodedStringLiteral") +@ThemePreviews +@Composable +fun TabbedTopAppBarPreview() { + // Sample data for preview, similar to ModernTabLayoutPreview + data class SampleTabItem(override val title: String, override val icon: ImageVector) : TabItem + + val tabs = listOf( + SampleTabItem("All Vocabulary", AppIcons.Home), + SampleTabItem("Flashcards", AppIcons.Search), + SampleTabItem("Settings", AppIcons.Settings) + ) + + var selectedTab by remember { mutableStateOf(tabs.first()) } + + MaterialTheme { + TabbedTopAppBar( + tabs = tabs, + selectedTab = selectedTab, + onTabSelected = { selectedTab = it }, + onNavigateBack = {} + ) + } +} + +@Suppress("HardCodedStringLiteral") +@ThemePreviews +@Composable +fun AppTopAppBarPreview() { + AppTopAppBar( + title = { Text("Preview Title") } + ) +} + +@ThemePreviews +@Composable +fun AppTopAppBarWithNavigationIconPreview() { + AppTopAppBar( + title = { Text(stringResource(R.string.title_title_preview_title)) }, + onNavigateBack = {} + ) +} + +@ThemePreviews +@Composable +fun AppTopAppBarWithActionsPreview() { + AppTopAppBar( + title = { Text(stringResource(R.string.title_title_preview_title)) }, + actions = { + IconButton(onClick = {}) { + Icon(AppIcons.Settings, contentDescription = stringResource(R.string.title_settings)) + } + IconButton(onClick = {}) { + AppIcons.ArrowBack + } + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/BottomNavigationBar.kt b/app/src/main/java/eu/gaudian/translator/view/composable/BottomNavigationBar.kt new file mode 100644 index 0000000..373271f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/BottomNavigationBar.kt @@ -0,0 +1,188 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.composable + +import android.annotation.SuppressLint +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.Crossfade +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.spring +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutVertically +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBars +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.NavigationBarItemDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.scale +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.hapticfeedback.HapticFeedbackType +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalHapticFeedback +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.navigation.NavDestination +import androidx.navigation.NavDestination.Companion.hierarchy +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.view.LocalShowExperimentalFeatures + +sealed class Screen( + val route: String, + val title: Int, + val selectedIcon: ImageVector, + val unselectedIcon: ImageVector +) { + object Home : Screen("home", R.string.label_translation, AppIcons.TranslateFilled, AppIcons.TranslateOutlined) + object Dictionary : Screen("dictionary", R.string.label_dictionary, AppIcons.DictionaryFilled, AppIcons.DictionaryOutlined) + object Exercises : Screen("exercises", R.string.label_exercises, AppIcons.DictionaryFilled, AppIcons.DictionaryOutlined) + object Vocabulary : Screen("vocabulary", R.string.label_vocabulary, AppIcons.VocabularyFilled, AppIcons.VocabularyOutlined) + object Settings : Screen("settings", R.string.title_settings, AppIcons.SettingsFilled, AppIcons.SettingsOutlined) + + companion object { + fun getAllScreens(showExperimental: Boolean = false): List { + val screens = mutableListOf(Home, Dictionary, Vocabulary, Settings) + if (showExperimental) { + screens.add(2, Exercises) + } + return screens + } + + @Composable + fun fromDestination(destination: NavDestination?): Screen { + val showExperimental = LocalShowExperimentalFeatures.current + return getAllScreens(showExperimental).find { screen -> + destination?.hierarchy?.any { it.route == screen.route } == true + } ?: Home + } + } +} + +/** + * A modernized Material 3 bottom navigation bar with spring animations and haptic feedback. + */ +@SuppressLint("UnusedBoxWithConstraintsScope") +@Composable +fun BottomNavigationBar( + selectedItem: Screen, + isVisible: Boolean, + showLabels: Boolean, + onItemSelected: (Screen) -> Unit, + modifier: Modifier = Modifier, +) { + val showExperimental = LocalShowExperimentalFeatures.current + val screens = remember(showExperimental) { Screen.getAllScreens(showExperimental) } + val haptic = LocalHapticFeedback.current + + AnimatedVisibility( + visible = isVisible, + enter = slideInVertically( + animationSpec = androidx.compose.animation.core.tween(durationMillis = 220), + initialOffsetY = { it } + ), + exit = slideOutVertically( + animationSpec = androidx.compose.animation.core.tween(durationMillis = 220), + targetOffsetY = { it } + ) + ) { + + val baseHeight = if (showLabels) 80.dp else 56.dp + val density = LocalDensity.current + val navBarDp = with(density) { WindowInsets.navigationBars.getBottom(this).toDp() } + val height = baseHeight + navBarDp + + NavigationBar( + modifier = modifier.height(height), + containerColor = MaterialTheme.colorScheme.surface, // Cleaner look than surfaceVariant + tonalElevation = 8.dp, // Slight elevation for depth + ) { + screens.forEach { screen -> + val isSelected = screen == selectedItem + val title = stringResource(id = screen.title) + + // 1. Spring Animation for the Icon Scale + val scale by animateFloatAsState( + targetValue = if (isSelected) 1.2f else 1.0f, // Subtle pop effect + animationSpec = spring( + dampingRatio = Spring.DampingRatioMediumBouncy, + stiffness = Spring.StiffnessLow + ), + label = "iconScale" + ) + + NavigationBarItem( + selected = isSelected, + onClick = { + if (!isSelected) { + haptic.performHapticFeedback(HapticFeedbackType.LongPress) // 2. Tactile feedback + onItemSelected(screen) + } + }, + label = if (showLabels) { + { + Text( + text = title, + maxLines = 1, + fontSize = 10.sp, + fontWeight = if (isSelected) FontWeight.Bold else FontWeight.Normal, + color = if(isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } else null, + icon = { + // 3. Crossfade between Outlined and Filled icons + Crossfade(targetState = isSelected, label = "iconFade") { selected -> + Icon( + imageVector = if (selected) screen.selectedIcon else screen.unselectedIcon, + contentDescription = title, + modifier = Modifier.scale(scale) // Apply the spring scale + ) + } + }, + colors = NavigationBarItemDefaults.colors( + indicatorColor = MaterialTheme.colorScheme.primaryContainer, + selectedIconColor = MaterialTheme.colorScheme.onPrimaryContainer, + selectedTextColor = MaterialTheme.colorScheme.primary, + unselectedIconColor = MaterialTheme.colorScheme.onSurfaceVariant, + unselectedTextColor = MaterialTheme.colorScheme.onSurfaceVariant + ) + ) + } + } + } +} + +@ThemePreviews +@Composable +fun BottomNavigationBarPreview() { + MaterialTheme { + Box( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background), + contentAlignment = Alignment.BottomCenter + ) { + BottomNavigationBar( + selectedItem = Screen.Home, + isVisible = true, + showLabels = true, + onItemSelected = {} + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/ComponentLibrary.kt b/app/src/main/java/eu/gaudian/translator/view/composable/ComponentLibrary.kt new file mode 100644 index 0000000..22e3618 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/ComponentLibrary.kt @@ -0,0 +1,892 @@ +@file:Suppress("AssignedValueIsNeverRead", "HardCodedStringLiteral", "unused") + +package eu.gaudian.translator.view.composable + +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonColors +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.ButtonElevation +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.Checkbox +import androidx.compose.material3.CheckboxDefaults +import androidx.compose.material3.FabPosition +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton +import androidx.compose.material3.OutlinedCard +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.OutlinedTextFieldDefaults +import androidx.compose.material3.Scaffold +import androidx.compose.material3.ScaffoldDefaults +import androidx.compose.material3.Surface +import androidx.compose.material3.Switch +import androidx.compose.material3.SwitchDefaults +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.contentColorFor +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.ui.theme.semanticColors +import eu.gaudian.translator.view.composable.ComponentDefaults.DefaultElevation + + +object ComponentDefaults { + // Sizing + val DefaultButtonHeight = 48.dp + val CardPadding = 8.dp + + // Elevation + val DefaultElevation = 0.dp + val NoElevation = 0.dp + + // Borders + val DefaultBorderWidth = 1.dp + + // Shapes + val DefaultCornerRadius = 16.dp + val CardClipRadius = 8.dp + val NoRounding = 0.dp + val DefaultShape = RoundedCornerShape(DefaultCornerRadius) + val CardClipShape = RoundedCornerShape(CardClipRadius) + val CardShape = RoundedCornerShape(DefaultCornerRadius) + val NoShape = RoundedCornerShape(NoRounding) + + // Opacity Levels + const val ALPHA_HIGH = 0.6f + const val ALPHA_MEDIUM = 0.5f + const val ALPHA_LOW = 0.3f +} + + + +/** + * A styled card container for displaying content with a consistent floating look. + * + * @param modifier The modifier to be applied to the card. + * @param content The content to be displayed inside the card. + */ +@Composable +fun AppCard( + modifier: Modifier = Modifier, + title: String? = null, + icon: ImageVector? = null, // New optional icon parameter + text: String? = null, + expandable: Boolean = false, + initiallyExpanded: Boolean = false, + content: @Composable ColumnScope.() -> Unit, +) { + var isExpanded by remember { mutableStateOf(initiallyExpanded) } + + val rotationState by animateFloatAsState( + targetValue = if (isExpanded) 180f else 0f, + label = "Chevron Rotation" + ) + + // Check if we need to render the header row + // Updated to include icon in the check + val hasHeader = title != null || text != null || expandable || icon != null + + Surface( + modifier = modifier + .fillMaxWidth() + .shadow( + DefaultElevation, + shape = ComponentDefaults.CardShape + ) + .clip(ComponentDefaults.CardClipShape) + // Animate height changes when expanding/collapsing + .animateContentSize(), + shape = ComponentDefaults.CardShape, + color = MaterialTheme.colorScheme.surfaceContainer + ) { + Column { + // --- Header Row --- + if (hasHeader) { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable(enabled = expandable) { isExpanded = !isExpanded } + .padding(ComponentDefaults.CardPadding), + verticalAlignment = Alignment.CenterVertically + ) { + // 1. Optional Icon on the left + if (icon != null) { + Icon( + imageVector = icon, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(24.dp) + ) + Spacer(modifier = Modifier.width(16.dp)) + } + + // 2. Title and Text Column + Column(modifier = Modifier.weight(1f)) { + if (!title.isNullOrBlank()) { + Text( + text = title, + style = MaterialTheme.typography.headlineMedium, + color = MaterialTheme.colorScheme.onSurface + ) + } + + // Only show spacer if both title and text exist + if (!title.isNullOrBlank() && !text.isNullOrBlank()) { + Spacer(Modifier.size(4.dp)) + } + + if (!text.isNullOrBlank()) { + Text( + text = text, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + + // 3. Expand Chevron (Far right) + if (expandable) { + Icon( + imageVector = AppIcons.ArrowDropDown, + contentDescription = if (isExpanded) "Collapse" else "Expand", + modifier = Modifier.rotate(rotationState), + tint = MaterialTheme.colorScheme.onSurface + ) + } + } + } + + // --- Content Area --- + if (!expandable || isExpanded) { + Column( + modifier = Modifier.padding( + start = ComponentDefaults.CardPadding, + end = ComponentDefaults.CardPadding, + bottom = ComponentDefaults.CardPadding, + // If we have a header, remove the top padding so content sits closer to the title. + // If no header (legacy behavior), keep the top padding. + top = if (hasHeader) 0.dp else ComponentDefaults.CardPadding + ), + content = content + ) + } + } + } +} + +@Preview +@Composable +fun AppCardPreview() { + AppCard { + Text(stringResource(R.string.this_is_the_content_inside_the_card)) + PrimaryButton(onClick = { }, text = stringResource(R.string.label_continue)) + } +} + +@Preview(showBackground = true) +@Composable +fun AppCardPreview2() { + MaterialTheme { + Column( + modifier = Modifier + .padding(16.dp) + .fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + // 1. Expandable Card (Initially Collapsed) + AppCard( + title = "Advanced Settings", + text = "Click to reveal more options", + expandable = true, + initiallyExpanded = false + ) { + Text("Here are some hidden settings.") + Text("They are only visible when expanded.") + } + + // 2. Expandable Card (Initially Expanded) + AppCard( + title = "Translation History", + text = "Recent items", + expandable = true, + initiallyExpanded = true + ) { + Text("• Hello -> Hallo") + Text("• World -> Welt") + Text("• Sun -> Sonne") + } + + // 3. Static Card (No Title/Expand logic - Legacy behavior) + AppCard { + Text("This is a standard card without a header.") + } + } + } +} + +/** + * The primary button for the most important actions. + * + * @param onClick The callback to be invoked when the button is clicked. + * @param modifier The modifier to be applied to the button. + * @param enabled Controls the enabled state of the button. + * @param text The text to display on the button. + * @param icon Optional leading icon for the button. + */ +@Composable +fun PrimaryButton( + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + text: String, + icon: ImageVector? = null, + maxLines: Int = 1 +) { + AppButton( + onClick = onClick, + modifier = modifier.height(ComponentDefaults.DefaultButtonHeight), + enabled = enabled, + shape = ComponentDefaults.DefaultShape, + colors = ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.primary, + contentColor = MaterialTheme.colorScheme.onPrimary + ) + ) { + if (icon != null) { + Icon( + imageVector = icon, + contentDescription = null, + modifier = Modifier.size(ButtonDefaults.IconSize) + ) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + } + Text(text) + } +} + +@Preview +@Composable +fun PrimaryButtonPreview() { + PrimaryButton(onClick = { }, text = stringResource(R.string.primary_button)) +} + +@Composable +fun AppButton( + onClick: () -> Unit, + modifier: Modifier? = Modifier, + enabled: Boolean = true, + shape: Shape? = null, + colors: ButtonColors = ButtonDefaults.buttonColors(), + elevation: ButtonElevation? = ButtonDefaults.buttonElevation(), + border: BorderStroke? = null, + contentPadding: PaddingValues = ButtonDefaults.ContentPadding, + interactionSource: MutableInteractionSource? = null, + content: @Composable RowScope.() -> Unit +) { + + val m = modifier ?: Modifier.height(ComponentDefaults.DefaultButtonHeight) + val s = shape ?: ComponentDefaults.DefaultShape + + Button( + onClick = onClick, + modifier = m, + enabled = enabled, + shape = s, + colors = colors, + elevation = elevation, + border = border, + contentPadding = PaddingValues( + start = 8.dp, // More horizontal padding + end = 8.dp, + top = 8.dp, // Default vertical padding + bottom = 8.dp + ), + interactionSource = interactionSource + ) { + content() + } +} + +@Composable +fun AppOutlinedButton( + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + shape: Shape = ButtonDefaults.outlinedShape, + elevation: ButtonElevation? = null, + border: BorderStroke? = ButtonDefaults.outlinedButtonBorder(enabled), + contentPadding: PaddingValues = ButtonDefaults.ContentPadding, + interactionSource: MutableInteractionSource? = null, + borderColor: Color? = null, + content: @Composable RowScope.() -> Unit, +) { + + val borderr = if(borderColor != null) { + BorderStroke(ComponentDefaults.DefaultBorderWidth, borderColor) + } else { + border + } + + OutlinedButton( + onClick = onClick, + modifier = modifier, + enabled = enabled, + shape = ComponentDefaults.DefaultShape, + elevation = elevation, + border = borderr, + contentPadding = contentPadding, + interactionSource = interactionSource, + content = content + ) +} + +@Preview +@Composable +fun PrimaryButtonWithIconPreview() { + PrimaryButton(onClick = { }, text = stringResource(R.string.primary_with_icon), icon = AppIcons.Add) +} + +/** + * The secondary button for less prominent actions. + * + * @param onClick The callback to be invoked when the button is clicked. + * @param modifier The modifier to be applied to the button. + * @param enabled Controls the enabled state of the button. + * @param text The text to display on the button. + * @param icon Optional leading icon for the button. + */ +@Composable +fun SecondaryButton( + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + text: String, + icon: ImageVector? = null, + inverse: Boolean = false, + maxLines: Int= 1 +) { + AppOutlinedButton( + shape = ComponentDefaults.DefaultShape, + onClick = onClick, + modifier = modifier.height(ComponentDefaults.DefaultButtonHeight), + enabled = enabled, + borderColor = MaterialTheme.colorScheme.surfaceContainerHighest, + border = ButtonDefaults.outlinedButtonBorder(enabled = enabled).copy( + width = ComponentDefaults.DefaultBorderWidth + ), + contentPadding = PaddingValues( + start = 8.dp, + end = 8.dp, + top = 0.dp, + bottom = 0.dp + ) + ) { + if (!inverse) Text(text, maxLines = maxLines) + if (icon != null) { + Icon( + imageVector = icon, + contentDescription = null, + modifier = Modifier.size(ButtonDefaults.IconSize) + ) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + } + if (inverse) Text(text, maxLines = maxLines) + } +} + +@Preview +@Composable +fun SecondaryButtonPreview() { + SecondaryButton(onClick = { }, text = stringResource(R.string.secondary_button)) +} + +@Preview +@Composable +fun SecondaryButtonWithIconPreview() { + SecondaryButton(onClick = { }, text = stringResource(R.string.secondary_with_icon), icon = AppIcons.Add) +} + +@Preview +@Composable +fun SecondaryButtonInversePreview() { + SecondaryButton(onClick = { }, text = stringResource(R.string.secondary_inverse), icon = AppIcons.Add, inverse = true) +} + +/** + * Helper composable for consistent OutlinedTextField colors. + */ +@Composable +private fun appTextFieldColors() = OutlinedTextFieldDefaults.colors( + focusedBorderColor = MaterialTheme.colorScheme.primary, + unfocusedBorderColor = MaterialTheme.colorScheme.onSurface.copy(alpha = ComponentDefaults.ALPHA_LOW), + focusedLabelColor = MaterialTheme.colorScheme.primary, + cursorColor = MaterialTheme.colorScheme.primary +) + +/** + * A styled text input field. + * + * @param value The input text to be shown in the text field. + * @param onValueChange The callback that is triggered when the input service updates the text. + * @param modifier The modifier to be applied to the text field. + * @param label A composable lambda for the label to be displayed inside the text field. + * @param trailingIcon A composable lambda for the trailing icon. + * @param paste Controls the visibility of the paste icon. + * @param clear Controls the visibility of the clear icon. + */ +@Composable +fun AppTextField( + value: String, + onValueChange: (String) -> Unit, + modifier: Modifier = Modifier, + label: @Composable (() -> Unit)? = null, + trailingIcon: @Composable (() -> Unit)? = null, + singleLine: Boolean = false, + minLines: Int = 1, + maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE, + placeholder: @Composable (() -> Unit)? = null, + enabled: Boolean = true, + readOnly: Boolean = false, + leadingIcon: @Composable (() -> Unit)? = null, + paste: Boolean = false, + clear: Boolean = false, + supportingText: @Composable (() -> Unit)? = null, +) { + val clipboardManager = LocalClipboardManager.current + + val finalTrailingIcon: @Composable (() -> Unit)? = if (paste || clear || trailingIcon != null) { + { + Row(verticalAlignment = Alignment.CenterVertically) { + if (paste && value.isEmpty()) { + IconButton(onClick = { onValueChange(clipboardManager.getText()?.text ?: "") }) { + Icon( + imageVector = AppIcons.Paste, + contentDescription = stringResource(R.string.cd_paste), + tint = MaterialTheme.colorScheme.primary + ) + } + } + if (clear && value.isNotEmpty()) { + IconButton(onClick = { onValueChange("") }) { + Icon( + imageVector = AppIcons.Clear, + contentDescription = stringResource(R.string.label_clear), + tint = MaterialTheme.colorScheme.primary + ) + } + } + if (trailingIcon != null) { + trailingIcon() + } + } + } + } else { + null + } + + OutlinedTextField( + value = value, + onValueChange = onValueChange, + modifier = modifier.fillMaxWidth(), + label = label, + trailingIcon = finalTrailingIcon, + shape = ComponentDefaults.DefaultShape, + colors = appTextFieldColors(), + placeholder = placeholder, + enabled = enabled, + readOnly = readOnly, + leadingIcon = leadingIcon, + minLines = minLines, + maxLines = maxLines, + supportingText = supportingText, + ) +} + +@Preview +@Composable +fun AppTextFieldPreview() { + var text by remember { mutableStateOf("") } + AppTextField( + value = text, + onValueChange = { text = it }, + label = { Text(stringResource(R.string.email_address)) } + ) +} + + +@Composable +fun AppSwitch( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, + modifier: Modifier = Modifier, + enabled: Boolean = true +) { + Switch( + checked = checked, + onCheckedChange = onCheckedChange, + modifier = modifier, + colors = SwitchDefaults.colors( + checkedThumbColor = MaterialTheme.colorScheme.primary, + checkedTrackColor = MaterialTheme.colorScheme.primary.copy(alpha = ComponentDefaults.ALPHA_MEDIUM), + uncheckedThumbColor = MaterialTheme.colorScheme.onSurface, + uncheckedTrackColor = MaterialTheme.colorScheme.onSurface.copy(alpha = ComponentDefaults.ALPHA_LOW) + ), + enabled = enabled + ) +} + +@Preview +@Composable +fun AppSwitchPreview() { + var checked by remember { mutableStateOf(false) } + AppSwitch( + checked = checked, + onCheckedChange = { checked = it } + ) +} + +/** + * An option row with a title, an optional description below it, and a trailing AppSwitch. + * The whole row is tappable to toggle the switch (if enabled). + */ + + + +/** + * A styled checkbox for selecting an option. + * + * @param checked The current state of the checkbox. + * @param onCheckedChange The callback invoked when the checkbox is toggled. + * @param modifier The modifier to be applied to the checkbox. + */ +@Composable +fun AppCheckbox( + checked: Boolean, + onCheckedChange: (Boolean) -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true +) { + Checkbox( + checked = checked, + onCheckedChange = onCheckedChange, + modifier = modifier, + colors = CheckboxDefaults.colors( + checkedColor = MaterialTheme.colorScheme.primary, + uncheckedColor = MaterialTheme.colorScheme.onSurface.copy(alpha = ComponentDefaults.ALPHA_HIGH), + checkmarkColor = MaterialTheme.colorScheme.onPrimary + ), + enabled = enabled + ) +} + +@Preview +@Composable +fun AppCheckboxPreview() { + var checked by remember { mutableStateOf(false) } + AppCheckbox( + checked = checked, + onCheckedChange = { checked = it } + ) +} + +@Composable +fun DialogButton( + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + isPrimary: Boolean = false, + text: String? = null, + maxLines: Int? = 1, + content: (@Composable () -> Unit)? = null, +) { + TextButton( + onClick = onClick, + modifier = modifier.height(ComponentDefaults.DefaultButtonHeight), + enabled = enabled, + shape = ComponentDefaults.DefaultShape, + colors = ButtonDefaults.buttonColors( + containerColor = if (isPrimary) MaterialTheme.colorScheme.primary else Color.Transparent, + contentColor = if (isPrimary) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.primary, + ) + ) { + if (text != null) { + Text(text, maxLines = maxLines ?: 1) + } + if (content != null) { + content() + } + } +} + +@Preview +@Composable +fun DialogButtonPreview() { + DialogButton( + onClick = { }, + text = stringResource(R.string.label_confirm) + ) +} + +@Preview +@Composable +fun PrimaryDialogButtonPreview() { + DialogButton( + onClick = { }, + text = stringResource(R.string.label_confirm), + isPrimary = true, + content = { Text(stringResource(R.string.label_confirm)) } + ) +} + +@ThemePreviews +@Composable +fun AppOutlinedCardPreview() { + AppOutlinedCard { + Column { + @Suppress("HardCodedStringLiteral") + Text("This is a debug card") + } + } +} + +@ThemePreviews +@Composable +fun WrongOutlinedButtonPreview(){ + WrongOutlinedButton(onClick = { }, text = stringResource(R.string.label_continue)) +} + +@Composable +fun AppOutlinedCard( + modifier: Modifier = Modifier, + content: @Composable ColumnScope.() -> Unit +) { + val debug = false + OutlinedCard( + modifier = modifier + .fillMaxWidth() + .padding(ComponentDefaults.NoElevation), + shape = ComponentDefaults.NoShape, + elevation = CardDefaults.cardElevation(defaultElevation = ComponentDefaults.NoElevation), + border = BorderStroke( + ComponentDefaults.DefaultBorderWidth, + if (debug) Color.Magenta else Color.Transparent + ), + content = content + ) +} + + +@Composable +fun CorrectButton( + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + text: String? = null, + leadingIcon: ImageVector? = null, + trailingIcon: ImageVector? = null, + content: (@Composable RowScope.() -> Unit)? = null, +) { + AppButton( + onClick = onClick, + modifier = modifier.height(ComponentDefaults.DefaultButtonHeight), + enabled = enabled, + shape = ComponentDefaults.DefaultShape, + colors = ButtonDefaults.buttonColors( + containerColor = MaterialTheme.semanticColors.success, + contentColor = MaterialTheme.semanticColors.onSuccess + ) + ) { + if (content != null) { + content() + } else { + if (leadingIcon != null) { + Icon(leadingIcon, contentDescription = null, modifier = Modifier.size(ButtonDefaults.IconSize)) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + } + if (text != null) Text(text) + if (trailingIcon != null) { + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Icon(trailingIcon, contentDescription = null, modifier = Modifier.size(ButtonDefaults.IconSize)) + } + } + } +} + +@Composable +fun WrongButton( + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + text: String? = null, + leadingIcon: ImageVector? = null, + trailingIcon: ImageVector? = null, + content: (@Composable RowScope.() -> Unit)? = null, +) { + AppButton( + onClick = onClick, + modifier = modifier.height(ComponentDefaults.DefaultButtonHeight), + enabled = enabled, + shape = ComponentDefaults.DefaultShape, + colors = ButtonDefaults.buttonColors( + containerColor = MaterialTheme.semanticColors.wrong, + contentColor = MaterialTheme.semanticColors.onWrong + ) + ) { + if (content != null) { + content() + } else { + if (leadingIcon != null) { + Icon(leadingIcon, contentDescription = null, modifier = Modifier.size(ButtonDefaults.IconSize)) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + } + if (text != null) Text(text) + if (trailingIcon != null) { + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Icon(trailingIcon, contentDescription = null, modifier = Modifier.size(ButtonDefaults.IconSize)) + } + } + } +} + +@Preview +@Composable +fun CorrectButtonPreview() { + CorrectButton(onClick = { }, text = stringResource(R.string.label_continue)) +} + +@Preview +@Composable +fun WrongButtonPreview() { + WrongButton(onClick = { }, text = stringResource(R.string.label_continue)) +} + +@Suppress("unused", "HardCodedStringLiteral") +@Composable +fun CorrectOutlinedButton( + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + text: String? = null, + leadingIcon: ImageVector? = null, + trailingIcon: ImageVector? = null, +) { + AppOutlinedButton( + onClick = onClick, + modifier = modifier.height(ComponentDefaults.DefaultButtonHeight), + enabled = enabled, + shape = ComponentDefaults.DefaultShape, + borderColor = MaterialTheme.semanticColors.onSuccessContainer, + border = BorderStroke(ComponentDefaults.DefaultBorderWidth, MaterialTheme.semanticColors.onSuccessContainer) + ) { + if (leadingIcon != null) { + Icon(leadingIcon, contentDescription = null, modifier = Modifier.size(ButtonDefaults.IconSize)) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + } + if (text != null) Text(text) + if (trailingIcon != null) { + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Icon(trailingIcon, contentDescription = null, modifier = Modifier.size(ButtonDefaults.IconSize)) + } + } +} + +@Composable +fun WrongOutlinedButton( + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + text: String? = null, + leadingIcon: ImageVector? = null, + trailingIcon: ImageVector? = null, +) { + AppOutlinedButton( + onClick = onClick, + modifier = modifier.height(ComponentDefaults.DefaultButtonHeight), + enabled = enabled, + shape = ComponentDefaults.DefaultShape, + borderColor = MaterialTheme.semanticColors.wrongContainer, + border = BorderStroke(ComponentDefaults.DefaultBorderWidth, MaterialTheme.semanticColors.onWrongContainer) + ) { + if (leadingIcon != null) { + Icon(leadingIcon, contentDescription = null, modifier = Modifier.size(ButtonDefaults.IconSize)) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + } + if (text != null) Text(text) + if (trailingIcon != null) { + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Icon(trailingIcon, contentDescription = null, modifier = Modifier.size(ButtonDefaults.IconSize)) + } + } +} + + +@Composable +fun AppScaffold( + modifier: Modifier = Modifier, + topBar: @Composable () -> Unit = {}, + snackbarHost: @Composable () -> Unit = {}, + floatingActionButton: @Composable () -> Unit = {}, + floatingActionButtonPosition: FabPosition = FabPosition.End, + containerColor: Color = MaterialTheme.colorScheme.background, + contentColor: Color = contentColorFor(containerColor), + contentWindowInsets: WindowInsets = ScaffoldDefaults.contentWindowInsets, + content: @Composable (PaddingValues) -> Unit +) { + // A Scaffold variant that enforces no bottom bar while keeping proper content padding handling. + Scaffold( + modifier = modifier, + topBar = topBar, + snackbarHost = snackbarHost, + containerColor = containerColor, + contentColor = contentColor, + bottomBar = {}, + floatingActionButton = floatingActionButton, + floatingActionButtonPosition = floatingActionButtonPosition + ) { innerPadding -> + // Ensure bottom padding is always 0.dp + val customPadding = PaddingValues( + top = innerPadding.calculateTopPadding(), + bottom = 0.dp, // Force bottom padding to 0.dp + start = innerPadding.calculateLeftPadding(androidx.compose.ui.unit.LayoutDirection.Ltr), + end = innerPadding.calculateRightPadding(androidx.compose.ui.unit.LayoutDirection.Ltr) + ) + content(customPadding) + } +} diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/LanguageDropDown.kt b/app/src/main/java/eu/gaudian/translator/view/composable/LanguageDropDown.kt new file mode 100644 index 0000000..5a21a0b --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/LanguageDropDown.kt @@ -0,0 +1,483 @@ +package eu.gaudian.translator.view.composable + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.material3.TextFieldDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.viewmodel.LanguageViewModel + + +@Composable +fun BaseLanguageDropDown( + modifier: Modifier = Modifier, + languageViewModel: LanguageViewModel, + selectedLanguage: Language?, + onLanguageSelected: (Language) -> Unit, + showAutoOption: Boolean = false, + onAutoSelected: () -> Unit = {}, + showNoneOption: Boolean = false, + onNoneSelected: () -> Unit = {}, + enableMultipleSelection: Boolean = false, + onLanguagesSelected: (List) -> Unit = {}, + alternateLanguages: List = emptyList(), + iconEnabled: Boolean = true, + noBorder: Boolean = false, +) { + val defaultLanguages by languageViewModel.allLanguages.collectAsState(initial = emptyList()) + val favoriteLanguages by languageViewModel.favoriteLanguages.collectAsState() + val languageHistory by languageViewModel.languageHistory.collectAsState() + + var expanded by remember { mutableStateOf(false) } + var searchText by remember { mutableStateOf("") } + var tempSelection by remember { mutableStateOf>(emptyList()) } + var selectedLanguagesCount by remember { mutableIntStateOf(if (enableMultipleSelection) tempSelection.size else 0) } + + val languages = remember(alternateLanguages, defaultLanguages) { + alternateLanguages.ifEmpty { defaultLanguages } + } + + val buttonText = when { + enableMultipleSelection && selectedLanguagesCount > 0 -> stringResource( + R.string.text_2d_languages_selected, + selectedLanguagesCount + ) + enableMultipleSelection && selectedLanguagesCount == 0 -> stringResource(R.string.text_select_languages) + selectedLanguage != null -> selectedLanguage.name + showAutoOption -> stringResource(R.string.label_language_auto) + else -> stringResource(R.string.label_language_none) + } + + Box(modifier = modifier) { + AppOutlinedButton( + shape = RoundedCornerShape(8.dp), + onClick = { expanded = true }, + contentPadding = if (!iconEnabled) PaddingValues(0.dp) else PaddingValues(horizontal = 16.dp, vertical = 8.dp), + borderColor = if (noBorder) Color.Unspecified else null + ) { + Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxWidth()) { + Text( + text = buttonText, + modifier = Modifier.weight(1f), + textAlign = TextAlign.Center, + maxLines = 1 + ) + if (iconEnabled) + Icon( + imageVector = if (expanded) AppIcons.ArrowDropUp else AppIcons.ArrowDropDown, + contentDescription = if (expanded) stringResource(R.string.cd_collapse) else stringResource(R.string.cd_expand) + ) + } + } + + DropdownMenu(modifier = modifier.fillMaxWidth(), expanded = expanded, onDismissRequest = { + expanded = false + searchText = "" + tempSelection = emptyList() // Also reset temp selection on dismiss + }) { + // Helper composable for a single language row in multiple selection mode + @Composable + fun MultiSelectItem(language: Language) { + val isSelected = tempSelection.contains(language) + DropdownMenuItem( + text = { + Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxWidth()) { + AppCheckbox( + checked = isSelected, + onCheckedChange = { + tempSelection = if (isSelected) tempSelection - language else tempSelection + language + @Suppress("AssignedValueIsNeverRead") + selectedLanguagesCount = tempSelection.size + onLanguagesSelected(tempSelection) + } + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(language.name) + if (language.nativeName != language.name) { + Spacer(modifier = Modifier.width(4.dp)) + Text( + text = "(${language.nativeName})", + style = TextStyle( + fontStyle = FontStyle.Italic, + fontFamily = FontFamily.Default + ) + ) + } + } + }, + onClick = { + tempSelection = if (isSelected) tempSelection - language else tempSelection + language + @Suppress("AssignedValueIsNeverRead") + selectedLanguagesCount = tempSelection.size + } + ) + } + + // Helper composable for a single language row in single selection mode + @Composable + fun SingleSelectItem(language: Language) { + val languageNames = languages.map { it.name } + val duplicateNames = languageNames.groupingBy { it }.eachCount().filter { it.value > 1 }.keys + val isDuplicate = duplicateNames.contains(language.name) + + DropdownMenuItem( + text = { + Row(modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) { + Column { + Text(text = language.name) + if (language.nativeName != language.name) { + Text( + text = language.nativeName, + style = TextStyle( + fontStyle = FontStyle.Italic, + fontSize = 12.sp, + fontFamily = FontFamily.Default + ) + ) + } + } + if (isDuplicate) { + Spacer(modifier = Modifier.width(4.dp)) + Text(text = "(${language.region})") + } + Spacer(modifier = Modifier.weight(1f)) + IconButton(onClick = { + val isCurrentlyFavorite = favoriteLanguages.contains(language) + val updatedFavorites = if (!isCurrentlyFavorite) favoriteLanguages + language else favoriteLanguages - language + languageViewModel.updateFavoriteLanguages(updatedFavorites) + }) { + Icon( + imageVector = if (favoriteLanguages.contains(language)) AppIcons.Favorite else AppIcons.FavoriteOutline, + contentDescription = if (favoriteLanguages.contains(language)) stringResource( + R.string.text_remove_from_favorites + ) else stringResource(R.string.text_add_to_favorites) + ) + } + } + }, + onClick = { + onLanguageSelected(language) + expanded = false + searchText = "" + } + ) + } + + + // --- Main Dropdown Content --- + Column( + modifier = Modifier + .heightIn(max = 900.dp) // Constrain the height + ) { + // Search bar with a back arrow + Row(modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) { + IconButton(onClick = { expanded = false; searchText = "" }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.label_close)) + } + TextField( + value = searchText, + onValueChange = { searchText = it }, + singleLine = true, + placeholder = { Text(stringResource(R.string.text_search_3d)) }, + trailingIcon = { + if (searchText.isNotBlank()) { + IconButton(onClick = { searchText = "" }) { + Icon(imageVector = AppIcons.Close, contentDescription = stringResource(R.string.cd_clear_search)) + } + } + }, + colors = TextFieldDefaults.colors( + focusedContainerColor = Color.Transparent, + unfocusedContainerColor = Color.Transparent, + disabledContainerColor = Color.Transparent, + focusedIndicatorColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent, + ), + modifier = Modifier.weight(1f) + ) + } + HorizontalDivider() + + + Column(modifier = Modifier.verticalScroll(rememberScrollState())) { + val isSearching = searchText.isNotBlank() + + if (isSearching) { + val searchResults = (favoriteLanguages + languageHistory + languages) + .distinctBy { it.nameResId } + .filter { language -> + val matchesName = language.name.contains(searchText, ignoreCase = true) + val matchesNativeName = language.nativeName.contains(searchText, ignoreCase = true) + matchesName || matchesNativeName + } + .sortedBy { it.name } + + if (enableMultipleSelection) { + searchResults.forEach { language -> MultiSelectItem(language) } + } else { + searchResults.forEach { language -> SingleSelectItem(language) } + } + + } else if (alternateLanguages.isNotEmpty()) { + val sortedAlternate = alternateLanguages.sortedBy { it.name } + if (enableMultipleSelection) { + Text(stringResource(R.string.text_all_languages), style = TextStyle(fontWeight = FontWeight.Bold), modifier = Modifier.padding(8.dp)) + sortedAlternate.forEach { language -> MultiSelectItem(language) } + } else { + Text(stringResource(R.string.text_all_languages), style = TextStyle(fontWeight = FontWeight.Bold), modifier = Modifier.padding(8.dp)) + sortedAlternate.forEach { language -> SingleSelectItem(language) } + } + + } else { + if (enableMultipleSelection) { + if (favoriteLanguages.isNotEmpty()) { + Text(stringResource(R.string.text_favorites), style = TextStyle(fontWeight = FontWeight.Bold), modifier = Modifier.padding(8.dp)) + favoriteLanguages.forEach { language -> MultiSelectItem(language) } + HorizontalDivider(modifier = Modifier.padding(vertical = 4.dp)) + } + val recentHistoryFiltered = languageHistory.filter { it !in favoriteLanguages }.takeLast(5) + if (recentHistoryFiltered.isNotEmpty() && alternateLanguages.isEmpty()) { + Text(stringResource(R.string.text_recent_history), style = TextStyle(fontWeight = FontWeight.Bold), modifier = Modifier.padding(8.dp)) + recentHistoryFiltered.forEach { language -> MultiSelectItem(language) } + HorizontalDivider(modifier = Modifier.padding(vertical = 4.dp)) + } + val remainingLanguages = languages.sortedBy { it.name } + if (remainingLanguages.isNotEmpty()) { + Text(stringResource(R.string.text_all_languages), style = TextStyle(fontWeight = FontWeight.Bold), modifier = Modifier.padding(8.dp)) + remainingLanguages.forEach { language -> MultiSelectItem(language) } + } + } else { + // Logic for single selection default view + if (showAutoOption) { + DropdownMenuItem(text = { Text(stringResource(R.string.text_select_auto_recognition)) }, onClick = { onAutoSelected(); expanded = false; searchText = "" }) + HorizontalDivider() + } + if (showNoneOption) { + DropdownMenuItem(text = { Text(stringResource(R.string.text_select_none)) }, onClick = { onNoneSelected(); expanded = false; searchText = "" }) + HorizontalDivider() + } + if (favoriteLanguages.any { + @Suppress("HardCodedStringLiteral") + it.code != "none" && it.code != "auto" + }) { + Text(stringResource(R.string.text_favorites), style = TextStyle(fontWeight = FontWeight.Bold), modifier = Modifier.padding(8.dp)) + favoriteLanguages.filter { + @Suppress("HardCodedStringLiteral") + it.code != "none" && it.code != "auto" + }.forEach { language -> SingleSelectItem(language) } + HorizontalDivider(modifier = Modifier.padding(vertical = 4.dp)) + } + val recentHistoryFiltered = languageHistory.filter { + @Suppress("HardCodedStringLiteral") + it !in favoriteLanguages && it.code != "none" && it.code != "auto" + }.takeLast(5) + if (recentHistoryFiltered.isNotEmpty()) { + Text(stringResource(R.string.text_recent_history), style = TextStyle(fontWeight = FontWeight.Bold), modifier = Modifier.padding(8.dp)) + recentHistoryFiltered.forEach { language -> SingleSelectItem(language) } + HorizontalDivider(modifier = Modifier.padding(vertical = 4.dp)) + } + val remainingLanguages = languages.filter { + @Suppress("HardCodedStringLiteral") + it !in favoriteLanguages && it !in recentHistoryFiltered && it.code != "none" && it.code != "auto" + }.sortedBy { it.name } + if (remainingLanguages.isNotEmpty()) { + Text(stringResource(R.string.text_all_languages), style = TextStyle(fontWeight = FontWeight.Bold), modifier = Modifier.padding(8.dp)) + remainingLanguages.forEach { language -> SingleSelectItem(language) } + } + } + } + } + + // Done button for multiple selection mode + if (enableMultipleSelection) { + HorizontalDivider() + AppButton( + onClick = { + onLanguagesSelected(tempSelection) + @Suppress("AssignedValueIsNeverRead") + selectedLanguagesCount = tempSelection.size + expanded = false + searchText = "" + }, + modifier = Modifier + .padding(8.dp) + .fillMaxWidth() + ) { + Text(stringResource(R.string.label_done)) + } + } + } + } + } +} + +@Composable +fun SourceLanguageDropdown( + modifier: Modifier = Modifier, + languageViewModel: LanguageViewModel, + autoEnabled: Boolean = false, + iconEnabled: Boolean = true, + noBorder: Boolean = false, +) { + val selectedLanguage by languageViewModel.selectedSourceLanguage.collectAsState() + val languageHistory by languageViewModel.languageHistory.collectAsState() + + BaseLanguageDropDown( + modifier = modifier, + languageViewModel = languageViewModel, + selectedLanguage = selectedLanguage, + onLanguageSelected = { lang -> + languageViewModel.setSelectedSourceLanguage(lang) + val updatedHistory = (languageHistory + lang).distinct().takeLast(5) + languageViewModel.updateLanguageHistory(updatedHistory) + }, + showAutoOption = autoEnabled, + onAutoSelected = { languageViewModel.setSelectedSourceLanguage(0) }, + showNoneOption = false, + enableMultipleSelection = false, + iconEnabled = iconEnabled, + noBorder = noBorder, + ) +} + + +@Composable +fun TargetLanguageDropdown( + modifier: Modifier = Modifier, + languageViewModel: LanguageViewModel, + iconEnabled: Boolean = true, + noBorder: Boolean = false, +) { + val selectedLanguage by languageViewModel.selectedTargetLanguage.collectAsState() + val languageHistory by languageViewModel.languageHistory.collectAsState() + + BaseLanguageDropDown( + modifier = modifier, + languageViewModel = languageViewModel, + selectedLanguage = selectedLanguage, + onLanguageSelected = { lang -> + languageViewModel.setSelectedTargetLanguage(lang) + val updatedHistory = (languageHistory + lang).distinct().takeLast(5) + languageViewModel.updateLanguageHistory(updatedHistory) + }, + showAutoOption = false, + showNoneOption = false, + enableMultipleSelection = false, + iconEnabled = iconEnabled, + noBorder = noBorder, + + ) +} + +@Composable +fun DictionaryLanguageDropDown( + modifier: Modifier = Modifier, + languageViewModel: LanguageViewModel +) { + val selectedLanguage by languageViewModel.selectedDictionaryLanguage.collectAsState() + val languageHistory by languageViewModel.languageHistory.collectAsState() + + BaseLanguageDropDown( + modifier = modifier, + languageViewModel = languageViewModel, + selectedLanguage = selectedLanguage, + onLanguageSelected = { lang -> + languageViewModel.setSelectedDictionaryLanguage(lang) + val updatedHistory = (languageHistory + lang).distinct().takeLast(5) + languageViewModel.updateLanguageHistory(updatedHistory) + }, + showAutoOption = false, + showNoneOption = false, + enableMultipleSelection = false + ) +} + + +@Composable +fun MultipleLanguageDropdown( + modifier: Modifier = Modifier, + languageViewModel: LanguageViewModel, + onLanguagesSelected: (List) -> Unit, + alternateLanguages: List = emptyList() +) { + BaseLanguageDropDown( + modifier = modifier, + languageViewModel = languageViewModel, + selectedLanguage = null, + onLanguageSelected = {}, + showAutoOption = false, + showNoneOption = true, + onNoneSelected = { onLanguagesSelected(emptyList()) }, + enableMultipleSelection = true, + onLanguagesSelected = onLanguagesSelected, + alternateLanguages = alternateLanguages + ) +} + +@Composable +fun SingleLanguageDropDown( + modifier: Modifier = Modifier, + languageViewModel: LanguageViewModel, + selectedLanguage: Language?, + onLanguageSelected: (Language) -> Unit, + showAutoOption: Boolean = false, + onAutoSelected: () -> Unit = {}, + showNoneOption: Boolean = false, + onNoneSelected: () -> Unit = {}, + alternateLanguages: List = emptyList() +) { + val languageHistory by languageViewModel.languageHistory.collectAsState() + + BaseLanguageDropDown( + modifier = modifier, + languageViewModel = languageViewModel, + selectedLanguage = selectedLanguage, + onLanguageSelected = { lang -> + onLanguageSelected(lang) + + val updatedHistory = (languageHistory + lang).distinctBy { it.code }.takeLast(5) + languageViewModel.updateLanguageHistory(updatedHistory) + }, + showAutoOption = showAutoOption, + onAutoSelected = onAutoSelected, + showNoneOption = showNoneOption, + onNoneSelected = onNoneSelected, + enableMultipleSelection = false, + alternateLanguages = alternateLanguages + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/ModelIconResolver.kt b/app/src/main/java/eu/gaudian/translator/view/composable/ModelIconResolver.kt new file mode 100644 index 0000000..157208f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/ModelIconResolver.kt @@ -0,0 +1,136 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.composable + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +/** + * Centralized model icon resolver. Heuristics based on model name and provider. + * This is the single place to adjust mappings, keeping UI components simple. + */ +object ModelIconResolver { + sealed interface BadgeSpec { + data class IconSpec(val icon: ImageVector, val tint: Color? = null) : BadgeSpec + data class EmojiSpec(val emoji: String, val tint: Color? = null) : BadgeSpec + } + + fun resolveAll(modelName: String, providerKey: String?): List { + val name = modelName.lowercase() + providerKey?.lowercase() + val provider = providerKey?.lowercase() + + + val specs = mutableListOf() + + // Priority 1: Special keywords (can add multiple) + if (name.contains("free")) { + // Use money emoji for "free" to showcase emoji support + specs.add(BadgeSpec.EmojiSpec("💲", Color(0xFF2E7D32))) // green + } + if (name.contains("turbo") || name.contains("flash") || name.contains("fast")) { + specs.add(BadgeSpec.IconSpec(AppIcons.Flash, Color(0xFFFFC107))) // yellow + } + if (name.contains("-mini") || name.contains("nano") || name.contains("small") || name.contains(" mini")) { + specs.add(BadgeSpec.EmojiSpec("🪶", Color.White)) + } + if (name.contains("-large") || name.contains("pro") || name.contains("large") || name.contains(" pro")) { + specs.add(BadgeSpec.EmojiSpec("💎", Color.White)) + } + if (name.contains("-vision") || name.contains("-image") || name.contains("video")) { + specs.add(BadgeSpec.EmojiSpec("⛔️", Color.White)) + specs.add(BadgeSpec.EmojiSpec("👁️", Color.White)) + + } + if ( name.contains("-audio")) { + specs.add(BadgeSpec.EmojiSpec("⛔️", Color.White)) + specs.add(BadgeSpec.EmojiSpec("🎧", Color.White)) + + } + + @Suppress("UnusedVariable") val sizeIcon = when { + Regex("(^|[^0-9])120b([^0-9]|$)").containsMatchIn(name) -> BadgeSpec.EmojiSpec("1️⃣2️⃣0️⃣", Color(0xFFF44336)) + Regex("(^|[^0-9])70b([^0-9]|$)").containsMatchIn(name) -> BadgeSpec.EmojiSpec("7️⃣0️⃣", Color(0xFFFF9800)) + Regex("(^|[^0-9])(?!1)20b([^0-9]|$)").containsMatchIn(name) -> BadgeSpec.EmojiSpec("2️⃣0️⃣", Color(0xFFFFC107)) + Regex("(^|[^0-9])8b(?!0)([^0-9]|$)").containsMatchIn(name) -> BadgeSpec.EmojiSpec("8️⃣", Color(0xFF43A047)) + Regex("(^|[^0-9])7b(?!0)([^0-9]|$)").containsMatchIn(name) -> BadgeSpec.EmojiSpec("7️⃣", Color(0xFF4CAF50)) + Regex("(^|[^0-9])1b(?!0)([^0-9]|$)").containsMatchIn(name) -> BadgeSpec.EmojiSpec("1️⃣", Color(0xFF64B5F6)) + else -> null + } + //TODO for now no size icon until it is fixed + //if (sizeIcon != null) specs.add(sizeIcon) + + // Instruction-tuned + if (name.contains("instruct")) { + specs.add(BadgeSpec.IconSpec(AppIcons.Science, null)) + } + + // Family heuristics (mix icons and emojis to demonstrate capability) + if (name.contains("llama") || name.contains("meta")) specs.add(BadgeSpec.EmojiSpec("🦙", null)) + if (name.contains("mistral") || name.contains("mixtral"))specs.add(BadgeSpec.EmojiSpec("🐱", null)) + if (name.contains("gpt") || provider == "openai") specs.add(BadgeSpec.EmojiSpec("🌀", null)) + if (name.contains("deepseek")) specs.add(BadgeSpec.EmojiSpec("🐋") ) + if (name.contains("gemini") || name.contains("google") ||name.contains("gemma") || provider == "gemini" || provider == "google") specs.add(BadgeSpec.EmojiSpec("👥") ) + if (name.contains("qwen")) specs.add(BadgeSpec.EmojiSpec("🌊") ) + if (name.contains("phi") || provider?.contains("microsoft") == true) specs.add(BadgeSpec.IconSpec(AppIcons.Science, null)) + if (name.contains("ibm") || name.contains("granite")) specs.add(BadgeSpec.IconSpec(AppIcons.Business, null)) + if (name.contains("moonshot") || name.contains("moonshotai") || name.contains("moon") ) specs.add(BadgeSpec.EmojiSpec("🌕") ) + + return specs + } + +} + +@Composable +fun ModelBadges( + modelDisplayOrId: String, + providerKey: String?, + modifier: Modifier = Modifier, + iconSizeDp: Int = 16, + spacingDp: Int = 4, +) { + val badges = ModelIconResolver.resolveAll(modelDisplayOrId, providerKey) + if (badges.isEmpty()) return + androidx.compose.foundation.layout.Row(modifier = modifier) { + badges.forEachIndexed { index, b -> + when (b) { + is ModelIconResolver.BadgeSpec.IconSpec -> { + Icon( + imageVector = b.icon, + contentDescription = null, + tint = b.tint ?: MaterialTheme.colorScheme.primary, + modifier = Modifier.size(iconSizeDp.dp) + ) + } + is ModelIconResolver.BadgeSpec.EmojiSpec -> { + // Center the emoji inside a fixed-size box and scale font to avoid clipping + Box(modifier = Modifier.size(iconSizeDp.dp), contentAlignment = Alignment.Center) { + val fs = (iconSizeDp * 0.88f).sp + Text( + text = b.emoji, + color = b.tint ?: MaterialTheme.colorScheme.primary, + fontWeight = FontWeight.Normal, + fontSize = fs, + lineHeight = fs, + maxLines = 1 + ) + } + } + } + if (index != badges.lastIndex) { + androidx.compose.foundation.layout.Spacer(Modifier.width(spacingDp.dp)) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/OptionItemSwitch.kt b/app/src/main/java/eu/gaudian/translator/view/composable/OptionItemSwitch.kt new file mode 100644 index 0000000..779807f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/OptionItemSwitch.kt @@ -0,0 +1,91 @@ +package eu.gaudian.translator.view.composable + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R + +@Composable +fun OptionItemSwitch( + modifier: Modifier = Modifier, + title: String, + description: String? = null, + checked: Boolean, + onCheckedChange: (Boolean) -> Unit, + enabled: Boolean = true, + contentPadding: PaddingValues = PaddingValues(horizontal = 16.dp, vertical = 12.dp), +) { + Surface( + modifier = modifier + .fillMaxWidth(), + color = Color.Transparent + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .clip(ComponentDefaults.CardClipShape) + .clickable(enabled = enabled) { onCheckedChange(!checked) } + .padding(contentPadding), // Apply the proper padding here + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(4.dp) // Add space between text and switch + ) { + + Column(modifier = Modifier.weight(1f)) { + Text( + text = title, + style = MaterialTheme.typography.titleMedium, + //color = MaterialTheme.colorScheme.onSurface, + fontWeight = FontWeight.Bold + ) + if (!description.isNullOrBlank()) { + Spacer(modifier = Modifier.size(4.dp)) + Text( + text = description, + style = MaterialTheme.typography.bodyMedium, + ) + } + } + // FIX: Removed the problematic Spacer and the fillMaxWidth() modifier from AppSwitch. + // The switch now takes its natural size and is positioned correctly by the weighted Column. + AppSwitch( + checked = checked, + onCheckedChange = { if (enabled) onCheckedChange(it) }, + enabled = enabled + ) + } + } +} + +@Preview +@Composable +fun OptionItemSwitchPreview() { + var checked by remember { mutableStateOf(true) } + OptionItemSwitch( + title = stringResource(R.string.label_general), + description = stringResource(R.string.this_is_the_content_inside_the_card), + checked = checked, + onCheckedChange = { } + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/TestIcons.kt b/app/src/main/java/eu/gaudian/translator/view/composable/TestIcons.kt new file mode 100644 index 0000000..1c2ae46 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/TestIcons.kt @@ -0,0 +1,694 @@ +@file:Suppress("UnusedReceiverParameter", "HardCodedStringLiteral", "ObjectPropertyName") + +package eu.gaudian.translator.view.composable + +// Preview imports +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.materialIcon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.graphics.vector.rememberVectorPainter +import androidx.compose.ui.unit.dp + +/** + * A collection of custom ImageVectors for use as hint icons. + */ +object HintIcons + +/** + * A classic lightbulb icon, symbolizing an idea or a bright hint. + */ +val HintIcons.Lightbulb: ImageVector + get() { + if (lightbulb != null) { + return lightbulb!! + } + lightbulb = materialIcon(name = "Hint.Lightbulb") { + path(fill = SolidColor(Color(0xFF000000)), stroke = null) { + moveTo(9.0f, 21.0f) + curveToRelative(0.0f, 0.55f, 0.45f, 1.0f, 1.0f, 1.0f) + horizontalLineToRelative(4.0f) + curveToRelative(0.55f, 0.0f, 1.0f, -0.45f, 1.0f, -1.0f) + verticalLineToRelative(-1.0f) + horizontalLineTo(9.0f) + verticalLineToRelative(1.0f) + close() + moveTo(12.0f, 2.0f) + curveTo(8.14f, 2.0f, 5.0f, 5.14f, 5.0f, 9.0f) + curveToRelative(0.0f, 2.38f, 1.19f, 4.47f, 3.0f, 5.74f) + verticalLineTo(17.0f) + curveToRelative(0.0f, 0.55f, 0.45f, 1.0f, 1.0f, 1.0f) + horizontalLineToRelative(6.0f) + curveToRelative(0.55f, 0.0f, 1.0f, -0.45f, 1.0f, -1.0f) + verticalLineToRelative(-2.26f) + curveToRelative(1.81f, -1.27f, 3.0f, -3.36f, 3.0f, -5.74f) + curveToRelative(0.0f, -3.86f, -3.14f, -7.0f, -7.0f, -7.0f) + close() + moveTo(14.85f, 13.1f) + lineToRelative(-0.85f, 0.6f) + verticalLineTo(16.0f) + horizontalLineToRelative(-4.0f) + verticalLineToRelative(-2.3f) + lineToRelative(-0.85f, -0.6f) + curveTo(7.8f, 12.16f, 7.0f, 10.63f, 7.0f, 9.0f) + curveToRelative(0.0f, -2.76f, 2.24f, -5.0f, 5.0f, -5.0f) + reflectiveCurveToRelative(5.0f, 2.24f, 5.0f, 5.0f) + curveToRelative(0.0f, 1.63f, -0.8f, 3.16f, -2.15f, 4.1f) + close() + } + } + return lightbulb!! + } +private var lightbulb: ImageVector? = null + +/** + * A question mark inside a circle, ideal for a "help" or "more info" hint. + */ +val HintIcons.QuestionCircle: ImageVector + get() { + if (_questionCircle != null) { + return _questionCircle!! + } + _questionCircle = materialIcon(name = "Hint.QuestionCircle") { + path(fill = SolidColor(Color(0xFF000000)), stroke = null) { + moveTo(11.0f, 18.0f) + horizontalLineToRelative(2.0f) + verticalLineToRelative(-2.0f) + horizontalLineToRelative(-2.0f) + verticalLineToRelative(2.0f) + close() + moveTo(12.0f, 2.0f) + curveTo(6.48f, 2.0f, 2.0f, 6.48f, 2.0f, 12.0f) + reflectiveCurveToRelative(4.48f, 10.0f, 10.0f, 10.0f) + reflectiveCurveToRelative(10.0f, -4.48f, 10.0f, -10.0f) + reflectiveCurveTo(17.52f, 2.0f, 12.0f, 2.0f) + close() + moveTo(12.0f, 20.0f) + curveToRelative(-4.41f, 0.0f, -8.0f, -3.59f, -8.0f, -8.0f) + reflectiveCurveToRelative(3.59f, -8.0f, 8.0f, -8.0f) + reflectiveCurveToRelative(8.0f, 3.59f, 8.0f, 8.0f) + reflectiveCurveToRelative(-3.59f, 8.0f, -8.0f, 8.0f) + close() + moveTo(12.0f, 6.0f) + curveToRelative(-2.21f, 0.0f, -4.0f, 1.79f, -4.0f, 4.0f) + horizontalLineToRelative(2.0f) + curveToRelative(0.0f, -1.1f, 0.9f, -2.0f, 2.0f, -2.0f) + reflectiveCurveToRelative(2.0f, 0.9f, 2.0f, 2.0f) + curveToRelative(0.0f, 2.0f, -3.0f, 1.75f, -3.0f, 5.0f) + horizontalLineToRelative(2.0f) + curveToRelative(0.0f, -2.25f, 3.0f, -2.5f, 3.0f, -5.0f) + curveToRelative(0.0f, -2.21f, -1.79f, -4.0f, -4.0f, -4.0f) + close() + } + } + return _questionCircle!! + } +private var _questionCircle: ImageVector? = null + +/** + * A magnifying glass, suggesting to the user to look closer or find a clue. + */ +val HintIcons.MagnifyingGlass: ImageVector + get() { + if (magnifyingGlass != null) { + return magnifyingGlass!! + } + magnifyingGlass = materialIcon(name = "Hint.MagnifyingGlass") { + path(fill = SolidColor(Color(0xFF000000)), stroke = null) { + moveTo(15.5f, 14.0f) + horizontalLineToRelative(-0.79f) + lineToRelative(-0.28f, -0.27f) + arcTo(6.471f, 6.471f, 0.0f, isMoreThanHalf = false, isPositiveArc = false, 16.0f, 9.5f) + curveTo(16.0f, 5.91f, 13.09f, 3.0f, 9.5f, 3.0f) + reflectiveCurveTo(3.0f, 5.91f, 3.0f, 9.5f) + reflectiveCurveTo(5.91f, 16.0f, 9.5f, 16.0f) + curveToRelative(1.61f, 0.0f, 3.09f, -0.59f, 4.23f, -1.57f) + lineToRelative(0.27f, 0.28f) + verticalLineToRelative(0.79f) + lineToRelative(5.0f, 4.99f) + lineTo(20.49f, 19.0f) + lineToRelative(-4.99f, -5.0f) + close() + moveTo(9.5f, 14.0f) + curveTo(7.01f, 14.0f, 5.0f, 11.99f, 5.0f, 9.5f) + reflectiveCurveTo(7.01f, 5.0f, 9.5f, 5.0f) + reflectiveCurveTo(14.0f, 7.01f, 14.0f, 9.5f) + reflectiveCurveTo(11.99f, 14.0f, 9.5f, 14.0f) + close() + } + } + return magnifyingGlass!! + } +private var magnifyingGlass: ImageVector? = null + +/** + * A key icon, representing the unlocking of a solution or a secret. + */ +val HintIcons.Key: ImageVector + get() { + if (key != null) { + return key!! + } + key = materialIcon(name = "Hint.Key") { + path(fill = SolidColor(Color(0xFF000000)), stroke = null) { + moveTo(12.65f, 10.0f) + curveTo(11.83f, 7.67f, 9.61f, 6.0f, 7.0f, 6.0f) + curveToRelative(-3.31f, 0.0f, -6.0f, 2.69f, -6.0f, 6.0f) + reflectiveCurveToRelative(2.69f, 6.0f, 6.0f, 6.0f) + curveToRelative(2.61f, 0.0f, 4.83f, -1.67f, 5.65f, -4.0f) + horizontalLineTo(17.0f) + verticalLineToRelative(4.0f) + horizontalLineToRelative(4.0f) + verticalLineToRelative(-4.0f) + horizontalLineToRelative(2.0f) + verticalLineToRelative(-4.0f) + horizontalLineTo(12.65f) + close() + moveTo(7.0f, 14.0f) + curveToRelative(-1.1f, 0.0f, -2.0f, -0.9f, -2.0f, -2.0f) + reflectiveCurveToRelative(0.9f, -2.0f, 2.0f, -2.0f) + reflectiveCurveToRelative(2.0f, 0.9f, 2.0f, 2.0f) + reflectiveCurveToRelative(-0.9f, 2.0f, -2.0f, 2.0f) + close() + } + } + return key!! + } +private var key: ImageVector? = null + +/** + * An information 'i' in a circle, a universal symbol for information. + */ +val HintIcons.Info: ImageVector + get() { + if (_info != null) { + return _info!! + } + _info = materialIcon(name = "Hint.Info") { + path(fill = SolidColor(Color(0xFF000000)), stroke = null) { + moveTo(11.0f, 7.0f) + horizontalLineToRelative(2.0f) + verticalLineToRelative(2.0f) + horizontalLineToRelative(-2.0f) + close() + moveTo(11.0f, 11.0f) + horizontalLineToRelative(2.0f) + verticalLineToRelative(6.0f) + horizontalLineToRelative(-2.0f) + close() + moveTo(12.0f, 2.0f) + curveTo(6.48f, 2.0f, 2.0f, 6.48f, 2.0f, 12.0f) + reflectiveCurveToRelative(4.48f, 10.0f, 10.0f, 10.0f) + reflectiveCurveToRelative(10.0f, -4.48f, 10.0f, -10.0f) + reflectiveCurveTo(17.52f, 2.0f, 12.0f, 2.0f) + close() + moveTo(12.0f, 20.0f) + curveToRelative(-4.41f, 0.0f, -8.0f, -3.59f, -8.0f, -8.0f) + reflectiveCurveToRelative(3.59f, -8.0f, 8.0f, -8.0f) + reflectiveCurveToRelative(8.0f, 3.59f, 8.0f, 8.0f) + reflectiveCurveToRelative(-3.59f, 8.0f, -8.0f, 8.0f) + close() + } + } + return _info!! + } +private var _info: ImageVector? = null + +/** + * A puzzle piece, indicating a piece of the solution or a helpful clue. + */ +val HintIcons.Puzzle: ImageVector + get() { + if (_puzzle != null) { + return _puzzle!! + } + _puzzle = materialIcon(name = "Hint.Puzzle") { + path(fill = SolidColor(Color(0xFF000000)), stroke = null) { + moveTo(640f, 661.3f) + arcToRelative(106.7f, 106.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, -106.7f, 106.7f) + arcToRelative(106.7f, 106.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, -106.7f, -106.7f) + verticalLineToRelative(-74.7f) + arcToRelative(32f, 32f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, -32f) + arcToRelative(32f, 32f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, 32f) + verticalLineToRelative(74.7f) + arcToRelative(42.7f, 42.7f, 0f, isMoreThanHalf = false, isPositiveArc = false, 42.7f, 42.7f) + arcToRelative(42.7f, 42.7f, 0f, isMoreThanHalf = false, isPositiveArc = false, 42.7f, -42.7f) + verticalLineToRelative(-154f) + curveToRelative(-37.1f, -11.9f, -64f, -43.5f, -64f, -80.6f) + curveToRelative(0f, -46.9f, 42.7f, -85.3f, 96f, -85.3f) + reflectiveCurveToRelative(96f, 38.4f, 96f, 85.3f) + curveToRelative(0f, 37.1f, -26.9f, 68.7f, -64f, 80.6f) + verticalLineToRelative(154f) + moveTo(352f, 341.3f) + curveToRelative(53.3f, 0f, 96f, 38.4f, 96f, 85.3f) + curveToRelative(0f, 37.1f, -26.9f, 68.7f, -64f, 80.6f) + verticalLineToRelative(228.7f) + arcToRelative(138.7f, 138.7f, 0f, isMoreThanHalf = false, isPositiveArc = false, 138.7f, 138.7f) + arcToRelative(138.7f, 138.7f, 0f, isMoreThanHalf = false, isPositiveArc = false, 138.7f, -138.7f) + verticalLineToRelative(-149.3f) + arcToRelative(32f, 32f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, -32f) + arcToRelative(32f, 32f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, 32f) + verticalLineToRelative(149.3f) + arcTo(202.7f, 202.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, 522.7f, 938.7f) + arcToRelative(202.7f, 202.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, -202.7f, -202.7f) + verticalLineToRelative(-228.7f) + curveTo(282.9f, 495.4f, 256f, 463.8f, 256f, 426.7f) + curveToRelative(0f, -46.9f, 42.7f, -85.3f, 96f, -85.3f) + moveToRelative(77.2f, -79.8f) + lineToRelative(-18.3f, 62.3f) + curveToRelative(-17.5f, -9.4f, -37.5f, -14.5f, -58.9f, -14.5f) + curveToRelative(-38.8f, 0f, -73.4f, 17.1f, -94.7f, 43.5f) + lineToRelative(-51.2f, -38.4f) + curveTo(233f, 280.3f, 273.5f, 256f, 320f, 247.9f) + verticalLineToRelative(-2.6f) + arcTo(160f, 160f, 0f, isMoreThanHalf = false, isPositiveArc = true, 480f, 85.3f) + arcTo(160f, 160f, 0f, isMoreThanHalf = false, isPositiveArc = true, 640f, 245.3f) + verticalLineToRelative(2.6f) + curveToRelative(46.5f, 8.1f, 87f, 32.4f, 113.9f, 66.6f) + lineToRelative(-51.2f, 38.4f) + curveToRelative(-21.3f, -26.5f, -55.9f, -43.5f, -94.7f, -43.5f) + curveToRelative(-21.3f, 0f, -41.4f, 5.1f, -58.9f, 14.5f) + lineToRelative(-18.3f, -62.3f) + curveToRelative(14.1f, -5.5f, 29.4f, -11.1f, 45.2f, -13.7f) + verticalLineToRelative(-2.6f) + curveToRelative(0f, -53.3f, -42.7f, -96f, -96f, -96f) + reflectiveCurveTo(384f, 192f, 384f, 245.3f) + verticalLineToRelative(2.6f) + curveToRelative(15.8f, 2.6f, 31.1f, 8.1f, 45.2f, 13.7f) + moveToRelative(178.8f, 133.1f) + curveToRelative(-23.5f, 0f, -42.7f, 14.5f, -42.7f, 32f) + reflectiveCurveToRelative(19.2f, 32f, 42.7f, 32f) + reflectiveCurveToRelative(42.7f, -14.5f, 42.7f, -32f) + reflectiveCurveToRelative(-19.2f, -32f, -42.7f, -32f) + moveToRelative(-256f, 0f) + curveToRelative(-23.5f, 0f, -42.7f, 14.5f, -42.7f, 32f) + reflectiveCurveToRelative(19.2f, 32f, 42.7f, 32f) + reflectiveCurveToRelative(42.7f, -14.5f, 42.7f, -32f) + reflectiveCurveToRelative(-19.2f, -32f, -42.7f, -32f) + close() + } + } + return _puzzle!! + } +private var _puzzle: ImageVector? = null + +/** + * A magic wand with sparkles, for a special or "magical" hint. + */ +val HintIcons.MagicWand: ImageVector + get() { + if (_magicWand != null) { + return _magicWand!! + } + _magicWand = materialIcon(name = "Hint.MagicWand") { + path(fill = SolidColor(Color(0xFF000000)), stroke = null) { + moveTo(20.0f, 7.0f) + lineToRelative(-1.41f, -1.41f) + lineToRelative(-3.09f, 3.09f) + lineToRelative(-3.09f, -3.09f) + lineTo(11.0f, 7.0f) + lineToRelative(3.09f, 3.09f) + lineToRelative(-3.09f, 3.09f) + lineToRelative(1.41f, 1.41f) + lineToRelative(3.09f, -3.09f) + lineToRelative(3.09f, 3.09f) + lineToRelative(1.41f, -1.41f) + lineToRelative(-3.09f, -3.09f) + close() + moveTo(8.0f, 4.0f) + curveToRelative(-0.55f, 0.0f, -1.0f, 0.45f, -1.0f, 1.0f) + reflectiveCurveToRelative(0.45f, 1.0f, 1.0f, 1.0f) + reflectiveCurveToRelative(1.0f, -0.45f, 1.0f, -1.0f) + reflectiveCurveToRelative(-0.45f, -1.0f, -1.0f, -1.0f) + close() + moveTo(4.0f, 8.0f) + curveToRelative(-0.55f, 0.0f, -1.0f, 0.45f, -1.0f, 1.0f) + reflectiveCurveToRelative(0.45f, 1.0f, 1.0f, 1.0f) + reflectiveCurveToRelative(1.0f, -0.45f, 1.0f, -1.0f) + reflectiveCurveToRelative(-0.45f, -1.0f, -1.0f, -1.0f) + close() + moveTo(4.0f, 16.0f) + curveToRelative(-0.55f, 0.0f, -1.0f, 0.45f, -1.0f, 1.0f) + reflectiveCurveToRelative(0.45f, 1.0f, 1.0f, 1.0f) + reflectiveCurveToRelative(1.0f, -0.45f, 1.0f, -1.0f) + reflectiveCurveToRelative(-0.45f, -1.0f, -1.0f, -1.0f) + close() + moveTo(16.0f, 12.0f) + curveToRelative(-0.55f, 0.0f, -1.0f, 0.45f, -1.0f, 1.0f) + reflectiveCurveToRelative(0.45f, 1.0f, 1.0f, 1.0f) + reflectiveCurveToRelative(1.0f, -0.45f, 1.0f, -1.0f) + reflectiveCurveToRelative(-0.45f, -1.0f, -1.0f, -1.0f) + close() + } + } + return _magicWand!! + } +private var _magicWand: ImageVector? = null + +/** + * A compass, to provide guidance or point the user in the right direction. + */ +val HintIcons.Compass: ImageVector + get() { + if (_compass != null) { + return _compass!! + } + _compass = materialIcon(name = "Hint.Compass") { + path(fill = SolidColor(Color(0xFF000000)), stroke = null) { + moveTo(12.0f, 12.0f) + curveToRelative(-1.1f, 0.0f, -2.0f, -0.9f, -2.0f, -2.0f) + reflectiveCurveToRelative(0.9f, -2.0f, 2.0f, -2.0f) + reflectiveCurveToRelative(2.0f, 0.9f, 2.0f, 2.0f) + reflectiveCurveToRelative(-0.9f, 2.0f, -2.0f, 2.0f) + close() + moveTo(12.0f, 2.0f) + curveTo(6.48f, 2.0f, 2.0f, 6.48f, 2.0f, 12.0f) + reflectiveCurveToRelative(4.48f, 10.0f, 10.0f, 10.0f) + reflectiveCurveToRelative(10.0f, -4.48f, 10.0f, -10.0f) + reflectiveCurveTo(17.52f, 2.0f, 12.0f, 2.0f) + close() + moveTo(12.0f, 20.0f) + curveToRelative(-4.42f, 0.0f, -8.0f, -3.58f, -8.0f, -8.0f) + reflectiveCurveToRelative(3.58f, -8.0f, 8.0f, -8.0f) + reflectiveCurveToRelative(8.0f, 3.58f, 8.0f, 8.0f) + reflectiveCurveToRelative(-3.58f, 8.0f, -8.0f, 8.0f) + close() + moveTo(9.12f, 16.33f) + lineToRelative(1.83f, -3.87f) + lineToRelative(3.87f, -1.83f) + lineToRelative(-1.83f, 3.87f) + lineToRelative(-3.87f, 1.83f) + close() + } + } + return _compass!! + } +private var _compass: ImageVector? = null + +/** + * A pointing hand, useful for a "tap here" or "look at this" type of hint. + */ +val HintIcons.PointingHand: ImageVector + get() { + if (_pointingHand != null) { + return _pointingHand!! + } + _pointingHand = materialIcon(name = "Hint.PointingHand") { + path(fill = SolidColor(Color(0xFF000000)), stroke = null) { + moveTo(9.0f, 11.3f) + lineToRelative(2.43f, 2.43f) + curveToRelative(0.2f, 0.2f, 0.45f, 0.3f, 0.71f, 0.3f) + curveToRelative(0.26f, 0.0f, 0.51f, -0.1f, 0.71f, -0.29f) + lineTo(19.0f, 7.5f) + verticalLineTo(11.0f) + horizontalLineToRelative(2.0f) + verticalLineTo(4.0f) + horizontalLineToRelative(-7.0f) + verticalLineToRelative(2.0f) + horizontalLineToRelative(3.5f) + lineToRelative(-5.29f, 5.29f) + lineTo(11.3f, 9.0f) + horizontalLineTo(9.0f) + close() + moveTo(3.0f, 3.0f) + verticalLineToRelative(18.0f) + horizontalLineToRelative(18.0f) + verticalLineTo(3.0f) + horizontalLineTo(3.0f) + close() + moveTo(19.0f, 19.0f) + horizontalLineTo(5.0f) + verticalLineTo(5.0f) + horizontalLineToRelative(14.0f) + verticalLineToRelative(14.0f) + close() + } + } + return _pointingHand!! + } +private var _pointingHand: ImageVector? = null + +/** + * An old scroll, representing a hidden clue, a story, or detailed information. + */ +val HintIcons.Scroll: ImageVector + get() { + if (_scroll != null) { + return _scroll!! + } + _scroll = materialIcon(name = "Hint.Scroll") { + path(fill = SolidColor(Color(0xFF000000)), stroke = null) { + moveTo(14.0f, 2.0f) + horizontalLineTo(6.0f) + curveToRelative(-1.1f, 0.0f, -1.99f, 0.9f, -1.99f, 2.0f) + lineTo(4.0f, 20.0f) + curveToRelative(0.0f, 1.1f, 0.89f, 2.0f, 1.99f, 2.0f) + horizontalLineTo(18.0f) + curveToRelative(1.1f, 0.0f, 2.0f, -0.9f, 2.0f, -2.0f) + verticalLineTo(8.0f) + lineToRelative(-6.0f, -6.0f) + close() + moveTo(16.0f, 18.0f) + horizontalLineTo(8.0f) + verticalLineToRelative(-2.0f) + horizontalLineToRelative(8.0f) + verticalLineToRelative(2.0f) + close() + moveTo(16.0f, 14.0f) + horizontalLineTo(8.0f) + verticalLineToRelative(-2.0f) + horizontalLineToRelative(8.0f) + verticalLineToRelative(2.0f) + close() + moveTo(13.0f, 9.0f) + verticalLineTo(3.5f) + lineTo(18.5f, 9.0f) + horizontalLineTo(13.0f) + close() + } + } + return _scroll!! + + + } +private var _scroll: ImageVector? = null + +// ----- Preview of all HintIcons ----- + +@Composable +private fun HintIconRow(label: String, vector: ImageVector) { + Row(modifier = Modifier.fillMaxWidth().padding(vertical = 8.dp), horizontalArrangement = Arrangement.spacedBy(16.dp)) { + androidx.compose.material3.Icon( + painter = rememberVectorPainter(image = vector), + contentDescription = label, + modifier = Modifier.size(40.dp), + tint = MaterialTheme.colorScheme.primary + ) + Text(text = label, style = MaterialTheme.typography.bodyLarge) + } +} + +@eu.gaudian.translator.ui.theme.ThemePreviews +@Composable +fun AllHintIconsPreview() { + MaterialTheme { + Surface(color = MaterialTheme.colorScheme.background) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + .verticalScroll(rememberScrollState()), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text("HintIcons preview", style = MaterialTheme.typography.titleMedium) + Spacer(Modifier.height(8.dp)) + HintIconRow("Lightbulb", HintIcons.Lightbulb) + HintIconRow("QuestionCircle", HintIcons.QuestionCircle) + HintIconRow("MagnifyingGlass", HintIcons.MagnifyingGlass) + HintIconRow("Key", HintIcons.Key) + HintIconRow("Info", HintIcons.Info) + HintIconRow("Puzzle", HintIcons.Puzzle) + HintIconRow("MagicWand", HintIcons.MagicWand) + HintIconRow("Compass", HintIcons.Compass) + HintIconRow("PointingHand", HintIcons.PointingHand) + HintIconRow("Scroll", HintIcons.Scroll) + } + } + } +} + +val HintIcons.Clippy: ImageVector + get() { + if (_Clippy != null) { + return _Clippy!! + } + _Clippy = ImageVector.Builder( + name = "Clippy", + defaultWidth = 1024.dp, + defaultHeight = 1024.dp, + viewportWidth = 1024f, + viewportHeight = 1024f + ).apply { + path(fill = SolidColor(Color.Black)) { + moveTo(640f, 661.3f) + arcToRelative(106.7f, 106.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, -106.7f, 106.7f) + arcToRelative(106.7f, 106.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, -106.7f, -106.7f) + verticalLineToRelative(-74.7f) + arcToRelative(32f, 32f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, -32f) + arcToRelative(32f, 32f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, 32f) + verticalLineToRelative(74.7f) + arcToRelative(42.7f, 42.7f, 0f, isMoreThanHalf = false, isPositiveArc = false, 42.7f, 42.7f) + arcToRelative(42.7f, 42.7f, 0f, isMoreThanHalf = false, isPositiveArc = false, 42.7f, -42.7f) + verticalLineToRelative(-154f) + curveToRelative(-37.1f, -11.9f, -64f, -43.5f, -64f, -80.6f) + curveToRelative(0f, -46.9f, 42.7f, -85.3f, 96f, -85.3f) + reflectiveCurveToRelative(96f, 38.4f, 96f, 85.3f) + curveToRelative(0f, 37.1f, -26.9f, 68.7f, -64f, 80.6f) + verticalLineToRelative(154f) + moveTo(352f, 341.3f) + curveToRelative(53.3f, 0f, 96f, 38.4f, 96f, 85.3f) + curveToRelative(0f, 37.1f, -26.9f, 68.7f, -64f, 80.6f) + verticalLineToRelative(228.7f) + arcToRelative(138.7f, 138.7f, 0f, isMoreThanHalf = false, isPositiveArc = false, 138.7f, 138.7f) + arcToRelative(138.7f, 138.7f, 0f, isMoreThanHalf = false, isPositiveArc = false, 138.7f, -138.7f) + verticalLineToRelative(-149.3f) + arcToRelative(32f, 32f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, -32f) + arcToRelative(32f, 32f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, 32f) + verticalLineToRelative(149.3f) + arcTo(202.7f, 202.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, 522.7f, 938.7f) + arcToRelative(202.7f, 202.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, -202.7f, -202.7f) + verticalLineToRelative(-228.7f) + curveTo(282.9f, 495.4f, 256f, 463.8f, 256f, 426.7f) + curveToRelative(0f, -46.9f, 42.7f, -85.3f, 96f, -85.3f) + moveToRelative(77.2f, -79.8f) + lineToRelative(-18.3f, 62.3f) + curveToRelative(-17.5f, -9.4f, -37.5f, -14.5f, -58.9f, -14.5f) + curveToRelative(-38.8f, 0f, -73.4f, 17.1f, -94.7f, 43.5f) + lineToRelative(-51.2f, -38.4f) + curveTo(233f, 280.3f, 273.5f, 256f, 320f, 247.9f) + verticalLineToRelative(-2.6f) + arcTo(160f, 160f, 0f, isMoreThanHalf = false, isPositiveArc = true, 480f, 85.3f) + arcTo(160f, 160f, 0f, isMoreThanHalf = false, isPositiveArc = true, 640f, 245.3f) + verticalLineToRelative(2.6f) + curveToRelative(46.5f, 8.1f, 87f, 32.4f, 113.9f, 66.6f) + lineToRelative(-51.2f, 38.4f) + curveToRelative(-21.3f, -26.5f, -55.9f, -43.5f, -94.7f, -43.5f) + curveToRelative(-21.3f, 0f, -41.4f, 5.1f, -58.9f, 14.5f) + lineToRelative(-18.3f, -62.3f) + curveToRelative(14.1f, -5.5f, 29.4f, -11.1f, 45.2f, -13.7f) + verticalLineToRelative(-2.6f) + curveToRelative(0f, -53.3f, -42.7f, -96f, -96f, -96f) + reflectiveCurveTo(384f, 192f, 384f, 245.3f) + verticalLineToRelative(2.6f) + curveToRelative(15.8f, 2.6f, 31.1f, 8.1f, 45.2f, 13.7f) + moveToRelative(178.8f, 133.1f) + curveToRelative(-23.5f, 0f, -42.7f, 14.5f, -42.7f, 32f) + reflectiveCurveToRelative(19.2f, 32f, 42.7f, 32f) + reflectiveCurveToRelative(42.7f, -14.5f, 42.7f, -32f) + reflectiveCurveToRelative(-19.2f, -32f, -42.7f, -32f) + moveToRelative(-256f, 0f) + curveToRelative(-23.5f, 0f, -42.7f, 14.5f, -42.7f, 32f) + reflectiveCurveToRelative(19.2f, 32f, 42.7f, 32f) + reflectiveCurveToRelative(42.7f, -14.5f, 42.7f, -32f) + reflectiveCurveToRelative(-19.2f, -32f, -42.7f, -32f) + close() + } + }.build() + + return _Clippy!! + } + +private var _Clippy: ImageVector? = null + +private const val HELP85_SCALE: Float = 0.70f + +val HintIcons.Help85: ImageVector + get() { + if (_Help85 != null) { + return _Help85!! + } + _Help85 = ImageVector.Builder( + name = "Help85", + defaultWidth = 1024.dp, + defaultHeight = 1024.dp, + viewportWidth = 1024f, + viewportHeight = 1024f + ).apply { + group( + pivotX = 512f, + pivotY = 512f, + scaleX = HELP85_SCALE, + scaleY = HELP85_SCALE + ) { + path(fill = SolidColor(Color.Black)) { + moveTo(512f, 993.9f) + curveTo(245.9f, 993.9f, 30.1f, 778.1f, 30.1f, 512f) + reflectiveCurveTo(245.9f, 30.1f, 512f, 30.1f) + reflectiveCurveToRelative(481.9f, 215.7f, 481.9f, 481.9f) + reflectiveCurveToRelative(-215.7f, 481.9f, -481.9f, 481.9f) + close() + moveTo(512f, 933.6f) + curveToRelative(232.9f, 0f, 421.6f, -188.8f, 421.6f, -421.6f) + reflectiveCurveTo(744.9f, 90.4f, 512f, 90.4f) + reflectiveCurveTo(90.4f, 279.1f, 90.4f, 512f) + reflectiveCurveToRelative(188.8f, 421.6f, 421.6f, 421.6f) + close() + } + path(fill = SolidColor(Color.Black)) { + moveTo(510.1f, 778.5f) + arcToRelative(43.8f, 43.8f, 0f, isMoreThanHalf = true, isPositiveArc = true, 0f, -87.5f) + arcToRelative(43.8f, 43.8f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0f, 87.5f) + close() + moveTo(391.8f, 433.8f) + arcToRelative(30.7f, 30.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, -30.2f, -34.4f) + curveToRelative(2f, -17f, 5.2f, -30.9f, 9.5f, -41.7f) + arcToRelative(124.3f, 124.3f, 0f, isMoreThanHalf = false, isPositiveArc = true, 33.4f, -46.6f) + arcToRelative(149f, 149f, 0f, isMoreThanHalf = false, isPositiveArc = true, 51.1f, -30.2f) + arcTo(180.6f, 180.6f, 0f, isMoreThanHalf = false, isPositiveArc = true, 515.1f, 271.1f) + curveToRelative(42.2f, 0f, 77.3f, 12.4f, 105.3f, 37.3f) + curveToRelative(28.1f, 24.8f, 42.1f, 57.8f, 42.1f, 99.1f) + curveToRelative(0f, 18.6f, -3.6f, 35.4f, -10.8f, 50.4f) + curveToRelative(-7.2f, 15.1f, -22.5f, 33.9f, -45.9f, 56.4f) + curveToRelative(-23.5f, 22.5f, -38.9f, 38.5f, -46.6f, 48f) + arcToRelative(98.2f, 98.2f, 0f, isMoreThanHalf = false, isPositiveArc = false, -17.3f, 34.1f) + curveToRelative(-2.1f, 7f, -3.6f, 15.2f, -4.4f, 24.6f) + curveToRelative(-1.4f, 16f, -14.3f, 28.6f, -30.3f, 28.6f) + arcToRelative(30.7f, 30.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, -30.3f, -33.6f) + curveToRelative(1.1f, -11f, 2.7f, -20.5f, 4.9f, -28.6f) + curveToRelative(4.1f, -15.5f, 10.4f, -29.1f, 18.8f, -40.7f) + curveToRelative(8.3f, -11.6f, 23.4f, -28.7f, 45.2f, -51.2f) + curveToRelative(21.8f, -22.5f, 35.8f, -38.9f, 42.2f, -49f) + curveToRelative(6.2f, -10.2f, 12.7f, -26.8f, 12.7f, -47f) + reflectiveCurveToRelative(-10.6f, -36.6f, -24.9f, -52.1f) + curveToRelative(-14.4f, -15.5f, -35.3f, -23.3f, -62.6f, -23.3f) + curveToRelative(-53.4f, 0f, -83.7f, 27.5f, -90.8f, 82.5f) + curveToRelative(-2f, 15.5f, -14.6f, 27.4f, -30.2f, 27.4f) + horizontalLineToRelative(-0.1f) + close() + } + } + }.build() + + return _Help85!! + } + + +@Suppress("ObjectPropertyName") +private var _Help85: ImageVector? = null \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/composable/TextComponents.kt b/app/src/main/java/eu/gaudian/translator/view/composable/TextComponents.kt new file mode 100644 index 0000000..93faf49 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/composable/TextComponents.kt @@ -0,0 +1,80 @@ +package eu.gaudian.translator.view.composable + +import androidx.compose.foundation.text.ClickableText +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign + +@Composable + fun AutoResizeSingleLineText( + text: String, + modifier: Modifier = Modifier, + style: androidx.compose.ui.text.TextStyle, + minFontSize: androidx.compose.ui.unit.TextUnit = style.fontSize * 0.5f, + maxFontSize: androidx.compose.ui.unit.TextUnit = style.fontSize, + textAlign: TextAlign = TextAlign.Start, + color: Color = Color.Unspecified, + fontWeight: FontWeight? = null, +) { + var fontSize by remember(text) { mutableStateOf(maxFontSize) } + + Text( + text = text, + maxLines = 1, + softWrap = false, + textAlign = textAlign, + style = style.copy(fontSize = fontSize), + onTextLayout = { result -> + if (result.didOverflowWidth) { + val next = fontSize * 0.95f + if (next.value >= minFontSize.value && next != fontSize) { + fontSize = next + } + } + }, + modifier = modifier, + color = color + ) +} + + + fun insertBreakOpportunities(text: String): String { + if (text.isEmpty()) return text + val zwsp = "\u200B" + return text + // Keep hyphen (or dash) at the end of the line and allow a break after it + .replace("‑", "‑$zwsp") // non-breaking hyphen U+2011 + .replace("-", "-$zwsp") // hyphen-minus + .replace("–", "–$zwsp") // en dash + .replace("—", "—$zwsp") // em dash + .replace("·", "·$zwsp") // middle dot + .replace("/", "/$zwsp") // slash +} + +@Suppress("DEPRECATION") //TODO find a solution for this +@Composable +fun ClickableText( + text: AnnotatedString, + style: androidx.compose.ui.text.TextStyle, +){ + val uriHandler = LocalUriHandler.current + + ClickableText( + text = text, + style = style, + onClick = { offset -> + text.getStringAnnotations("URL", offset, offset) + .firstOrNull()?.let { uriHandler.openUri(it.item) } + } + ) + +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/AddCategoryDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/AddCategoryDialog.kt new file mode 100644 index 0000000..9e837d8 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/AddCategoryDialog.kt @@ -0,0 +1,415 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.DividerDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SegmentedButton +import androidx.compose.material3.SegmentedButtonDefaults +import androidx.compose.material3.SingleChoiceSegmentedButtonRow +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.viewmodel.compose.viewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.TagCategory +import eu.gaudian.translator.model.VocabularyFilter +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.MultipleLanguageDropdown +import eu.gaudian.translator.view.hints.CategoryHint +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel + +enum class DialogCategoryType { TAG, FILTER } + +@Composable +fun AddCategoryDialog( + onDismiss: () -> Unit, + categoryViewModel: CategoryViewModel +) { + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + var categoryName by remember { mutableStateOf("") } + var selectedLanguages by remember { mutableStateOf>(emptyList()) } + var selectedStages by remember { mutableStateOf>(emptyList()) } + var selectedTab by remember { mutableStateOf(DialogCategoryType.TAG) } + var selectedDictionaryPair by remember { mutableStateOf?>(null) } + + val categoryTypes = DialogCategoryType.entries.map { + when (it) { + DialogCategoryType.TAG -> stringResource(R.string.text_list) + DialogCategoryType.FILTER -> stringResource(R.string.text_filter) + } + } + + val isConfirmEnabled = categoryName.isNotBlank() + + AppDialog( + onDismissRequest = onDismiss, + title = { Text(stringResource(R.string.label_add_category)) }, + hintContent = { CategoryHint() }, + content = { + Column(modifier = Modifier.fillMaxWidth()) { + SingleChoiceSegmentedButtonRow(modifier = Modifier.fillMaxWidth()) { + categoryTypes.forEachIndexed { index, label -> + SegmentedButton( + shape = SegmentedButtonDefaults.itemShape(index = index, count = categoryTypes.size), + onClick = { selectedTab = DialogCategoryType.entries[index] }, + selected = index == selectedTab.ordinal + ) { + Text(label) + } + } + } + + Spacer(modifier = Modifier.height(16.dp)) + + AppTextField( + value = categoryName, + onValueChange = { categoryName = it }, + label = { Text(stringResource(R.string.text_category_name)) }, + modifier = Modifier.fillMaxWidth(), + singleLine = true, + ) + + if (selectedTab == DialogCategoryType.FILTER) { + Spacer(modifier = Modifier.height(16.dp)) + + var isLanguageFilterEnabled by remember { mutableStateOf(false) } + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text(text = stringResource(R.string.language_filter)) + Switch( + checked = isLanguageFilterEnabled, + onCheckedChange = { + isLanguageFilterEnabled = it + if (!it) { // Reset on disable + selectedLanguages = emptyList() + selectedDictionaryPair = null + } + } + ) + } + + // **Conditional Language Filter Options** + if (isLanguageFilterEnabled) { + Spacer(modifier = Modifier.height(8.dp)) + var languageFilterType by remember { mutableIntStateOf(0) } // 0=Languages, 1=Dictionary + val filterOptions = listOf( + stringResource(R.string.label_languages), + stringResource(R.string.language_pair) + ) + SingleChoiceSegmentedButtonRow(modifier = Modifier.fillMaxWidth()) { + filterOptions.forEachIndexed { index, label -> + SegmentedButton( + shape = SegmentedButtonDefaults.itemShape(index = index, count = filterOptions.size), + onClick = { + languageFilterType = index + // Reset other option's selection when switching + if (languageFilterType == 0) selectedDictionaryPair = null + if (languageFilterType == 1) selectedLanguages = emptyList() + }, + selected = index == languageFilterType, + ) { Text(label) } + } + } + + if (languageFilterType == 0) { // Languages + MultipleLanguageDropdown( + languageViewModel = languageViewModel, + modifier = Modifier.fillMaxWidth(), + onLanguagesSelected = { languages -> + selectedLanguages = languages + }, + ) + } else { // Dictionary + DictionarySelectionContent( + categoryViewModel = categoryViewModel, + selectedPair = selectedDictionaryPair, + onPairSelected = { selectedDictionaryPair = it } + ) + } + } + + Spacer(modifier = Modifier.height(8.dp)) + + // **Stage Filter Switch** + var isStageFilterEnabled by remember { mutableStateOf(false) } + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text(text = stringResource(R.string.stage_filter)) + Switch( + checked = isStageFilterEnabled, + onCheckedChange = { + isStageFilterEnabled = it + if (!it) { // Reset on disable + selectedStages = emptyList() + } + } + ) + } + + // **Conditional Stage Filter Options** + if (isStageFilterEnabled) { + VocabularyStageDropDown( + onStageSelected = { stages -> + selectedStages = stages.filterNotNull() + }, + modifier = Modifier.fillMaxWidth(), + multipleSelectable = true, + preselectedStages = emptyList(), + noneSelectable = true + ) + } + } + + if (selectedTab == DialogCategoryType.TAG) { + Spacer(modifier = Modifier.height(8.dp)) + Text(text = stringResource(R.string.text_a_simple_list_to)) + } + + Spacer(modifier = Modifier.height(16.dp)) + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.End + ) { + TextButton(onClick = onDismiss) { + Text(stringResource(R.string.label_cancel)) + } + Spacer(modifier = Modifier.widthIn(8.dp)) + TextButton( + enabled = isConfirmEnabled, + onClick = { + when (selectedTab) { + DialogCategoryType.TAG -> { + val newList = TagCategory(id = 0, name = categoryName.trim()) + categoryViewModel.createCategory(newList) + } + + DialogCategoryType.FILTER -> { + val newFilter = VocabularyFilter( + id = 0, + name = categoryName.trim(), + languages = if (selectedDictionaryPair == null) selectedLanguages.map { it.nameResId } + .ifEmpty { null } else null, + languagePairs = selectedDictionaryPair, + stages = selectedStages.filterNotNull().ifEmpty { null } + ) + categoryViewModel.createCategory(newFilter) + } + } + onDismiss() + } + ) { + Text(stringResource(R.string.label_add)) + } + } + } + } + ) +} + +@Composable +private fun DictionarySelectionContent( + categoryViewModel: CategoryViewModel, + selectedPair: Pair?, + onPairSelected: (Pair) -> Unit +) { + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + var allDictionaries by remember { mutableStateOf>>(emptyList()) } + var isLoading by remember { mutableStateOf(true) } + val allCategories by categoryViewModel.categories.collectAsState() + + LaunchedEffect(allCategories) { + isLoading = true + val existingIdPairs = allCategories.filterIsInstance().mapNotNull { it.languagePairs } + val possibleIdPairs = categoryViewModel.calculateNewDictionaries() + + // Unify existing and possible pairs into a single set to remove duplicates + val allUniqueIdPairs = (possibleIdPairs.toSet() + existingIdPairs.toSet()).toList() + + @Suppress("HardCodedStringLiteral") + suspend fun resolveLanguage(id: Int): Language? = languageViewModel.getLanguageById(id).takeIf { it.code != "error" } + + val resolvedPairs = mutableListOf>() + for ((id1, id2) in allUniqueIdPairs) { + val lang1 = resolveLanguage(id1) + val lang2 = resolveLanguage(id2) + if (lang1 != null && lang2 != null) { + resolvedPairs.add(lang1 to lang2) + } + } + + // Sort alphabetically for consistent ordering + allDictionaries = resolvedPairs.sortedBy { it.first.name + " - " + it.second.name } + isLoading = false + } + + Spacer(modifier = Modifier.height(16.dp)) + + when { + isLoading -> { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), contentAlignment = Alignment.Center + ) { + CircularProgressIndicator() + } + } + allDictionaries.isEmpty() -> { + Text( + text = stringResource(R.string.text_no_dictionary_language_pairs_found), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(top = 8.dp) + ) + } + else -> { + LazyColumn(modifier = Modifier.heightIn(max = 200.dp)) { + item { + Text( + text = stringResource(R.string.text_available_to_create_2d), + style = MaterialTheme.typography.labelLarge, + modifier = Modifier.padding(vertical = 8.dp) + ) + HorizontalDivider(Modifier, DividerDefaults.Thickness, DividerDefaults.color) + } + items(allDictionaries) { (lang1, lang2) -> + val currentPairIds = Pair(lang1.nameResId, lang2.nameResId) + DictionaryRow( + lang1 = lang1, + lang2 = lang2, + isSelected = selectedPair == currentPairIds, + onClick = { onPairSelected(currentPairIds) }, + enabled = true // All rows are always enabled + ) + } + } + } + } +} + +@androidx.compose.ui.tooling.preview.Preview +@Composable +fun AddCategoryDialogPreview() { + AddCategoryDialog( + onDismiss = {}, + categoryViewModel = viewModel() + ) +} + +@androidx.compose.ui.tooling.preview.Preview +@Composable +fun DictionarySelectionContentPreview() { + LocalContext.current + DictionarySelectionContent( + categoryViewModel = viewModel(), + selectedPair = Pair(R.string.language_1, R.string.language_2), + onPairSelected = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@androidx.compose.ui.tooling.preview.Preview +@Composable +fun DictionaryRowPreview() { + DictionaryRow( + lang1 = Language( + code = "en", + region = "US", + nameResId = R.string.language_1, + name = "English", + englishName = "English", + isCustom = false, + isSelected = false + ), + lang2 = Language( + code = "es", + region = "ES", + nameResId = R.string.language_2, + name = "Spanish", + englishName = "Spanish", + isCustom = false, + isSelected = false + ), + isSelected = true, + enabled = false, + onClick = {} + ) +} + +@Composable +private fun DictionaryRow( + lang1: Language, + lang2: Language, + isSelected: Boolean, + enabled: Boolean = true, + onClick: () -> Unit = {} +) { + val textColor = when { + !enabled -> MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) + else -> MaterialTheme.colorScheme.onSurface + } + Row( + modifier = Modifier + .fillMaxWidth() + .clickable(enabled = enabled, onClick = onClick) + .padding(vertical = 12.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text( + text = "${lang1.name} - ${lang2.name}", + style = MaterialTheme.typography.bodyMedium, + color = textColor + ) + if (isSelected) { + Icon( + imageVector = AppIcons.Check, + contentDescription = stringResource(R.string.text_selected), + tint = MaterialTheme.colorScheme.primary + ) + } + } +} diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/AddCostumLanguageDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/AddCostumLanguageDialog.kt new file mode 100644 index 0000000..63a1206 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/AddCostumLanguageDialog.kt @@ -0,0 +1,122 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.DialogButton + +@Composable +fun AddCustomLanguageDialog( + showDialog: Boolean, + onDismiss: () -> Unit, + onAddLanguage: (Language) -> Unit +) { + if (showDialog) { + var languageCode by remember { mutableStateOf("") } + var languageRegion by remember { mutableStateOf("") } + var languageName by remember { mutableStateOf("") } + var englishName by remember { mutableStateOf("") } + + AppDialog(onDismissRequest = onDismiss) { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surface + ) + ) { + Column( + modifier = Modifier.padding(24.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = stringResource(R.string.text_add_custom_language), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(bottom = 8.dp) + ) + + AppTextField( + value = languageCode, + onValueChange = { languageCode = it }, + label = { Text(text = stringResource(R.string.text_language_code)) }, + placeholder = { Text(text = stringResource(R.string.text_e_g_en)) }, + modifier = Modifier.fillMaxWidth() + ) + AppTextField( + value = languageRegion, + onValueChange = { languageRegion = it }, + label = { Text(text = stringResource(R.string.text_region)) }, + placeholder = { Text(text = stringResource(R.string.text_e_g_us)) }, + modifier = Modifier.fillMaxWidth() + ) + AppTextField( + value = languageName, + onValueChange = { languageName = it }, + label = { Text(text = stringResource(R.string.text_name_of_the_language)) }, + placeholder = { Text(text = stringResource(R.string.text_e_g_english)) }, + modifier = Modifier.fillMaxWidth() + ) + AppTextField( + value = englishName, + onValueChange = { englishName = it }, + label = { Text(text = stringResource(R.string.name_in_english)) }, + placeholder = { Text(text = stringResource(R.string.text_e_g_english)) }, + modifier = Modifier.fillMaxWidth() + ) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically + ) { + TextButton(onClick = onDismiss) { + Text(stringResource(R.string.label_cancel)) + } + DialogButton( + onClick = { + val customLanguage = Language( + code = languageCode.lowercase(), + region = languageRegion, + nameResId = -1, + name = languageName, + englishName = englishName, + isCustom = true, + isSelected = true, + ) + onAddLanguage(customLanguage) + onDismiss() + }, + enabled = languageCode.isNotBlank() && languageName.isNotBlank() && languageRegion.isNotBlank(), + content = { + Text(text = stringResource(R.string.label_add)) + } + ) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/AddVocabularyDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/AddVocabularyDialog.kt new file mode 100644 index 0000000..eec1ba8 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/AddVocabularyDialog.kt @@ -0,0 +1,371 @@ +package eu.gaudian.translator.view.dialogs + +import android.app.Application +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SegmentedButton +import androidx.compose.material3.SegmentedButtonDefaults +import androidx.compose.material3.SingleChoiceSegmentedButtonRow +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.viewmodel.compose.viewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.LocalConnectionConfigured +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCheckbox +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.SourceLanguageDropdown +import eu.gaudian.translator.view.composable.TargetLanguageDropdown +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.StatusViewModel +import eu.gaudian.translator.viewmodel.TranslationViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import okhttp3.internal.platform.PlatformRegistry.applicationContext + + +enum class VocabularyDialogTab { SINGLE, MULTIPLE, TEXT } + +@Composable +fun AddVocabularyDialog( + statusViewModel: StatusViewModel, + languageViewModel: LanguageViewModel, + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as Application), + initialWord: String? = null, + translation: String? = null, + onDismissRequest: () -> Unit, + showMultiple: Boolean = true +) { + LocalContext.current + val coroutineScope = rememberCoroutineScope() + val translationViewModel: TranslationViewModel = viewModel() + val categoryViewModel: CategoryViewModel = viewModel() + val connectionConfigured = LocalConnectionConfigured.current + + + + var selectedTab by remember { mutableStateOf(VocabularyDialogTab.SINGLE) } + var word by remember { mutableStateOf(initialWord ?: "") } + var showSuccessMessage by remember { mutableStateOf(false) } + + var singleTranslation by remember { mutableStateOf(translation ?: "") } + val translatedText by translationViewModel.translatedVocabulary.collectAsState() + + var multipleTranslations by remember { mutableStateOf>(emptyList()) } + val selectedTranslations = remember { mutableStateListOf() } + + val selectedSourceLanguage by languageViewModel.selectedSourceLanguage.collectAsState() + val selectedTargetLanguage by languageViewModel.selectedTargetLanguage.collectAsState() + + var showReview by remember { mutableStateOf(false) } + + val isAddButtonEnabled = word.isNotBlank() && + (selectedTab == VocabularyDialogTab.SINGLE && singleTranslation.isNotBlank() || + selectedTab == VocabularyDialogTab.MULTIPLE && selectedTranslations.isNotEmpty()) && + selectedTab != VocabularyDialogTab.TEXT + + LaunchedEffect(translatedText, selectedTab) { + if (selectedTab == VocabularyDialogTab.SINGLE) { + translatedText?.let { singleTranslation = it } + } + } + + AppDialog(onDismissRequest = onDismissRequest, title = { Text(stringResource(R.string.label_add_vocabulary)) }) { + Column( + modifier = Modifier.padding(0.dp), + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + if(showMultiple){ + SingleChoiceSegmentedButtonRow(modifier = Modifier.fillMaxWidth()) { + SegmentedButton( + selected = selectedTab == VocabularyDialogTab.SINGLE, + onClick = { selectedTab = VocabularyDialogTab.SINGLE }, + shape = SegmentedButtonDefaults.itemShape(index = 0, count = if (connectionConfigured) 3 else 1) + ) { + Text(stringResource(R.string.title_single)) + } + if(connectionConfigured){ + SegmentedButton( + selected = selectedTab == VocabularyDialogTab.MULTIPLE, + onClick = { selectedTab = VocabularyDialogTab.MULTIPLE }, + shape = SegmentedButtonDefaults.itemShape(index = 1, count = 3) + ) { + Text(stringResource(R.string.title_multiple)) + } + + SegmentedButton( + selected = selectedTab == VocabularyDialogTab.TEXT, + onClick = { selectedTab = VocabularyDialogTab.TEXT }, + shape = SegmentedButtonDefaults.itemShape(index = 2, count = 3) + ) { + Text(stringResource(R.string.text_text)) + } + }} + } + + if (selectedTab != VocabularyDialogTab.TEXT) { + AppTextField( + value = word, + onValueChange = { word = it }, + label = { Text(stringResource(R.string.text_label_word)) }, + modifier = Modifier.fillMaxWidth(), + ) + } + SourceLanguageDropdown( + languageViewModel = languageViewModel, + modifier = Modifier.fillMaxWidth() + ) + TargetLanguageDropdown( + languageViewModel = languageViewModel, + modifier = Modifier.fillMaxWidth() + ) + + when (selectedTab) { + VocabularyDialogTab.SINGLE -> { + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + if(connectionConfigured) { + AppButton( + onClick = { + if (word.isNotBlank()) translationViewModel.translateVocabulary( + word + ) + }, + modifier = Modifier.fillMaxWidth() + ) { Text(stringResource(R.string.label_translate)) } + } + AppTextField( + value = singleTranslation, + onValueChange = { singleTranslation = it }, + label = { Text(stringResource(R.string.text_translation)) }, + modifier = Modifier.fillMaxWidth(), + ) + } + } + VocabularyDialogTab.MULTIPLE -> { + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + val textFailedToGetTranslations = stringResource(R.string.text_failed_to_get_translations) + AppButton( + onClick = { + if (word.isNotBlank()) { + coroutineScope.launch { + translationViewModel.getMultipleTranslations(word) + .onSuccess { fetched -> + multipleTranslations = fetched + selectedTranslations.clear() + } + .onFailure { exception -> + statusViewModel.showErrorMessage( + textFailedToGetTranslations + exception.message) + } + } + } + }, + modifier = Modifier.fillMaxWidth() + ) { Text(stringResource(R.string.find_translations)) } + + if (multipleTranslations.isNotEmpty()) { + Text(stringResource(R.string.text_select_translations_to_add), style = MaterialTheme.typography.titleMedium) + LazyColumn(modifier = Modifier.heightIn(max = 150.dp)) { + items(multipleTranslations) { trans -> + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .fillMaxWidth() + .clickable { + if (selectedTranslations.contains(trans)) selectedTranslations.remove( + trans + ) + else selectedTranslations.add(trans) + } + .padding(vertical = 4.dp) + ) { + AppCheckbox( + checked = selectedTranslations.contains(trans), + onCheckedChange = { isChecked -> + if (isChecked) selectedTranslations.add(trans) + else selectedTranslations.remove(trans) + } + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(trans, style = MaterialTheme.typography.bodyMedium) + } + } + } + } + } + } + VocabularyDialogTab.TEXT -> { + val isGenerating by vocabularyViewModel.isGenerating.collectAsState() + val generated by vocabularyViewModel.generatedVocabularyItems.collectAsState() + LaunchedEffect(isGenerating, generated) { + if (!isGenerating && showReview) { + //TODO think if we still need this + } + } + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + Text(stringResource(R.string.text_enter_a_text_to_extract)) + Box(Modifier.fillMaxWidth().padding(0.dp).heightIn(max = 300.dp)){ + AppTextField( + value = word, + onValueChange = { word = it }, + label = { Text(stringResource(R.string.label_enter_a_text)) }, + modifier = Modifier.fillMaxWidth(), + maxLines = 5, + paste = true, + clear = true, + + )} + if (isGenerating) { + androidx.compose.material3.CircularProgressIndicator() + } else { + AppButton( + onClick = { + if (word.isNotBlank()) { + vocabularyViewModel.generateVocabularyFromText(word) + // defer showing review until generation completes + showReview = true + } + }, + modifier = Modifier.fillMaxWidth(), + ) { Text(stringResource(R.string.find_translations)) } + } + } + } + } + + AnimatedVisibility( + visible = showSuccessMessage, + enter = fadeIn(), + exit = fadeOut() + ) { + Text( + text = stringResource(R.string.vocabulary_added_successfully), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.primary, + textAlign = TextAlign.Center, + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp) + ) + } + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.End + ) { + TextButton(onClick = onDismissRequest) { Text(stringResource(R.string.label_close)) } + Spacer(modifier = Modifier.width(8.dp)) + TextButton( + enabled = isAddButtonEnabled, + onClick = { + coroutineScope.launch { + val newItems = when (selectedTab) { + VocabularyDialogTab.SINGLE -> listOf( + VocabularyItem( + languageFirstId = selectedSourceLanguage?.nameResId, + languageSecondId = selectedTargetLanguage?.nameResId, + wordFirst = word, + wordSecond = singleTranslation, + id = 0, + ) + ) + VocabularyDialogTab.MULTIPLE -> selectedTranslations.map { selectedTrans -> + VocabularyItem( + languageFirstId = selectedSourceLanguage?.nameResId, + languageSecondId = selectedTargetLanguage?.nameResId, + wordFirst = word, + wordSecond = selectedTrans, + id = 0, + ) + } + VocabularyDialogTab.TEXT -> emptyList() + } + vocabularyViewModel.addVocabularyItems(newItems) + + word = "" + singleTranslation = "" + multipleTranslations = emptyList() + selectedTranslations.clear() + showSuccessMessage = true + delay(2000) + showSuccessMessage = false + } + } + ) { Text(stringResource(R.string.label_add)) } + } + } + } + if (showReview && !vocabularyViewModel.isGenerating.collectAsState().value) { + androidx.compose.ui.window.Dialog( + onDismissRequest = { showReview = false }, + properties = androidx.compose.ui.window.DialogProperties(usePlatformDefaultWidth = false) + ) { + androidx.compose.material3.Surface(modifier = Modifier.fillMaxSize()) { + VocabularyReviewScreen( + vocabularyViewModel = vocabularyViewModel, + onConfirm = { selectedItems, categoryIds -> + vocabularyViewModel.addVocabularyItems(selectedItems, categoryIds) + showReview = false + onDismissRequest() + }, + onCancel = { showReview = false }, + categoryViewModel = categoryViewModel + ) + } + } + } +} + +@ThemePreviews +@Composable +fun AddVocabularyDialogPreview() { + val activity = LocalContext.current.findActivity() + val statusViewModel: StatusViewModel = viewModel() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(LocalContext.current.applicationContext as Application) + + AddVocabularyDialog( + statusViewModel = statusViewModel, + languageViewModel = languageViewModel, + vocabularyViewModel = vocabularyViewModel, + onDismissRequest = {}) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/CategoryDropdown.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/CategoryDropdown.kt new file mode 100644 index 0000000..a9a144b --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/CategoryDropdown.kt @@ -0,0 +1,235 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.TagCategory +import eu.gaudian.translator.model.VocabularyCategory +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCheckbox +import eu.gaudian.translator.view.composable.AppDropdownMenuItem +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedButton +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.viewmodel.CategoryViewModel + + +@Composable +fun CategoryDropdown( + categoryViewModel: CategoryViewModel, + initialCategoryId: Int? = null, + onCategorySelected: (List) -> Unit, + noneSelectable: Boolean? = true, + multipleSelectable: Boolean = false, + onlyLists: Boolean = false, + addCategory: Boolean = false +) { + var expanded by remember { mutableStateOf(false) } + val categories by categoryViewModel.categories.collectAsState(initial = emptyList()) + val selectableCategories = if (onlyLists) categories.filterIsInstance() else categories + val initialCategory = remember(categories, initialCategoryId) { + categories.find { it.id == initialCategoryId } + + } + var selectedCategories by remember { + mutableStateOf>(if (initialCategory != null) listOf(initialCategory) else emptyList()) + } + var newCategoryName by remember { mutableStateOf("") } + + + AppOutlinedButton( + shape = RoundedCornerShape(8.dp), + onClick = { expanded = true }, + modifier = Modifier.fillMaxWidth(), + + ) { + Row(modifier = Modifier.fillMaxWidth()) { + Text(text = when { + selectedCategories.isEmpty() -> stringResource(R.string.text_select_category) + selectedCategories.size == 1 -> selectedCategories.first()?.name ?: stringResource(R.string.text_none) + else -> stringResource(R.string.text_2d_categories_selected, selectedCategories.size) + }, + modifier = Modifier.weight(1f), + textAlign = TextAlign.Center + ) + Icon( + imageVector = if (expanded) AppIcons.ArrowDropUp else AppIcons.ArrowDropDown, + contentDescription = if (expanded) stringResource(R.string.cd_collapse) else stringResource( + R.string.cd_expand + ) + ) + } + } + + DropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false }, + modifier = Modifier.fillMaxWidth(), + ) { + if (noneSelectable == true) { + val noneSelected = selectedCategories.contains(null) + AppDropdownMenuItem( + text = { + Row(modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) { + if (multipleSelectable) { + AppCheckbox( + checked = noneSelected, + onCheckedChange = { + selectedCategories = if (noneSelected) selectedCategories.filterNotNull() else selectedCategories + listOf(null) + onCategorySelected(selectedCategories) + } + ) + Spacer(modifier = Modifier.width(8.dp)) + } + Text(stringResource(R.string.text_none)) + } + }, + onClick = { + if (multipleSelectable) { + selectedCategories = if (noneSelected) { + selectedCategories.filterNotNull() + } else { + selectedCategories + listOf(null) + } + onCategorySelected(selectedCategories) + } else { + selectedCategories = listOf(null) + onCategorySelected(selectedCategories) + expanded = false + } + } + ) + } + selectableCategories.forEach { category -> + val isSelected = selectedCategories.contains(category) + AppDropdownMenuItem( + text = { + Row(modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) { + if (multipleSelectable) { + AppCheckbox( + checked = isSelected, + onCheckedChange = { + selectedCategories = if (isSelected) selectedCategories - category else selectedCategories + category + onCategorySelected(selectedCategories) + } + ) + Spacer(modifier = Modifier.width(8.dp)) + } + Text(category.name) + } + }, + onClick = { + if (multipleSelectable) { + selectedCategories = if (category in selectedCategories) { + selectedCategories - category + } else { + selectedCategories + category + } + onCategorySelected(selectedCategories) + } else { + selectedCategories = listOf(category) + onCategorySelected(selectedCategories) + expanded = false + } + } + ) + } + + if(addCategory) { + + HorizontalDivider() + + // Create new category section + AppDropdownMenuItem( + text = { + Text(stringResource(R.string.label_add_category)) + }, + onClick = {}, + modifier = Modifier.padding(4.dp) + ) + + AppDropdownMenuItem( + text = { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + AppTextField( + value = newCategoryName, + onValueChange = { newCategoryName = it }, + modifier = Modifier.weight(1f), + singleLine = true, + ) + Spacer(modifier = Modifier.width(8.dp)) + IconButton( + onClick = { + if (newCategoryName.isNotBlank()) { + val newList = + TagCategory(id = 0, name = newCategoryName.trim()) + categoryViewModel.createCategory(newList) + newCategoryName = "" + // Optionally, select the new category if single selection + if (!multipleSelectable) { + expanded = false + } + } + }, + enabled = newCategoryName.isNotBlank() + ) { + Icon( + imageVector = AppIcons.Add, + contentDescription = stringResource(R.string.label_add) + ) + } + } + }, + onClick = {} // No action on click + ) + } + + + if (multipleSelectable) { + Spacer(modifier = Modifier.height(8.dp)) + AppButton( + onClick = { expanded = false }, + modifier = Modifier + .fillMaxWidth() + .padding(8.dp) + ) { + Text(stringResource(R.string.label_done)) + } + } + } +} + +@Preview +@Composable +fun CategoryDropdownPreview() { + CategoryDropdown( + categoryViewModel = viewModel(), + onCategorySelected = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/CategorySelectionDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/CategorySelectionDialog.kt new file mode 100644 index 0000000..07f051e --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/CategorySelectionDialog.kt @@ -0,0 +1,69 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.VocabularyCategory +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.DialogButton +import eu.gaudian.translator.viewmodel.CategoryViewModel + +@Composable +fun CategorySelectionDialog( + viewModel: CategoryViewModel, + onCategorySelected: (List) -> Unit, + onDismissRequest: () -> Unit, +) { + var selectedCategory by remember { mutableStateOf>(emptyList()) } + + AppDialog(onDismissRequest = onDismissRequest, title = { + Text(text = stringResource(R.string.text_select_categories)) + }) { + + + + CategoryDropdown( + categoryViewModel = viewModel, + onCategorySelected = { categories -> + selectedCategory = categories + }, + noneSelectable = false, + multipleSelectable = true, + onlyLists = true, + addCategory = true + ) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 24.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.End) + ) { + DialogButton(onClick = onDismissRequest) { + Text(stringResource(R.string.label_cancel)) + } + + DialogButton( + onClick = { + onCategorySelected(selectedCategory) + onDismissRequest() + }, + enabled = true + ) { + Text(stringResource(R.string.label_confirm)) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/CreateCategoryListDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/CreateCategoryListDialog.kt new file mode 100644 index 0000000..f8666f3 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/CreateCategoryListDialog.kt @@ -0,0 +1,91 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppTextField + +@Composable +fun CreateCategoryListDialog( + onDismiss: () -> Unit, + onConfirm: (String) -> Unit +) { + var categoryName by remember { mutableStateOf("") } + + AppDialog( + onDismissRequest = onDismiss, + title = { + Text( + text = stringResource(R.string.create_new_category), + ) + }, + ) { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surface + ) + ) { + Column( + modifier = Modifier.padding(24.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = stringResource(R.string.create_new_category), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(bottom = 8.dp) + ) + + AppTextField( + value = categoryName, + onValueChange = { categoryName = it }, + label = { Text(stringResource(R.string.text_category_name)) }, + singleLine = true, + modifier = Modifier.fillMaxWidth() + ) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.End + ) { + TextButton(onClick = onDismiss) { + Text(stringResource(R.string.label_cancel)) + } + AppButton( + onClick = { + if (categoryName.isNotBlank()) { + onConfirm(categoryName) + } + }, + enabled = categoryName.isNotBlank() + ) { + Text(stringResource(R.string.label_create)) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/DeleteCategoryDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/DeleteCategoryDialog.kt new file mode 100644 index 0000000..5f0a751 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/DeleteCategoryDialog.kt @@ -0,0 +1,44 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppAlertDialog +import eu.gaudian.translator.viewmodel.CategoryViewModel + +@Composable +fun DeleteCategoryDialog( + viewModel: CategoryViewModel, + onDismiss: () -> Unit, +) { + val categoryToDelete = viewModel.categoryToDelete + + AppAlertDialog( + onDismissRequest = onDismiss, + title = { + Text(text = stringResource(R.string.text_delete_category)) + }, + text = { + Text(text = stringResource(R.string.text_are_you_sure_you_want_to_delete_this_category)) + }, + confirmButton = { + TextButton( + onClick = { + viewModel.deleteCategoryById(id = categoryToDelete) + onDismiss() + } + ) { + Text(text = stringResource(R.string.label_confirm)) + } + }, + dismissButton = { + TextButton( + onClick = onDismiss, + ) { + Text(text = stringResource(R.string.label_cancel)) + } + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/DeleteItemsDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/DeleteItemsDialog.kt new file mode 100644 index 0000000..8ce88c4 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/DeleteItemsDialog.kt @@ -0,0 +1,50 @@ +package eu.gaudian.translator.view.dialogs + +import android.app.Application +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import eu.gaudian.translator.R +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.view.composable.AppAlertDialog +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import okhttp3.internal.platform.PlatformRegistry.applicationContext + +@Composable +fun DeleteItemsDialog( + viewModel: VocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as Application), + onDismiss: () -> Unit, + categoryId: Int, +) { + val categoryVocabularyItemDelete = viewModel.categoryVocabularyItemDelete + @Suppress("HardCodedStringLiteral") + Log.d("DeleteItemsDialog", "categoryVocabularyItemDelete: $categoryVocabularyItemDelete") + + AppAlertDialog( + onDismissRequest = onDismiss, + title = { + Text(text = stringResource(R.string.label_delete_items)) + }, + text = { + Text(text = stringResource(R.string.text_are_you_sure_you_want_to_delete_all_items_in_this_category)) + }, + confirmButton = { + TextButton( + onClick = { + viewModel.deleteVocabularyItemsByCategory(categoryId) + onDismiss() + } + ) { + Text(stringResource(R.string.label_confirm)) + } + }, + dismissButton = { + TextButton( + onClick = onDismiss + ) { + Text(stringResource(R.string.label_cancel)) + } + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/DeleteMultipleCategoriesDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/DeleteMultipleCategoriesDialog.kt new file mode 100644 index 0000000..2473682 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/DeleteMultipleCategoriesDialog.kt @@ -0,0 +1,51 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppAlertDialog +import eu.gaudian.translator.viewmodel.CategoryViewModel + +@Composable +fun DeleteMultipleCategoriesDialog( + categoryIds: List, + categoryViewModel: CategoryViewModel, + onDismiss: () -> Unit, + onConfirm: () -> Unit, +) { + AppAlertDialog( + onDismissRequest = onDismiss, + title = { + Text(text = stringResource(R.string.text_delete_category)) + }, + text = { + if (categoryIds.size == 1) { + Text(text = stringResource(R.string.text_are_you_sure_you_want_to_delete_this_category)) + } else { + Text(text = stringResource(R.string.text_are_you_sure_you_want_to_delete_these_categories, categoryIds.size)) + } + }, + confirmButton = { + TextButton( + onClick = { + categoryIds.forEach { categoryId -> + categoryViewModel.deleteCategoryById(categoryId) + } + onConfirm() + onDismiss() + } + ) { + Text(text = stringResource(R.string.label_confirm)) + } + }, + dismissButton = { + TextButton( + onClick = onDismiss, + ) { + Text(text = stringResource(R.string.label_cancel)) + } + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/EditCategoryDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/EditCategoryDialog.kt new file mode 100644 index 0000000..0e3ef79 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/EditCategoryDialog.kt @@ -0,0 +1,149 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.TagCategory +import eu.gaudian.translator.model.VocabularyCategory +import eu.gaudian.translator.model.VocabularyFilter +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.MultipleLanguageDropdown +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import kotlinx.coroutines.flow.collectLatest + +@Suppress("HardCodedStringLiteral") +@Composable +fun EditCategoryDialog( + languageViewModel: LanguageViewModel, + categoryViewModel: CategoryViewModel, + onDismiss: () -> Unit, +) { + var categoryToEdit by remember { mutableStateOf(null) } + + var categoryName by remember { mutableStateOf("") } + var selectedLanguages by remember { mutableStateOf>(emptyList()) } + var selectedStages by remember { mutableStateOf>(emptyList()) } + + LaunchedEffect(categoryViewModel.categoryToEdit) { + if (categoryViewModel.categoryToEdit != 0) { + categoryViewModel.getCategoryById(categoryViewModel.categoryToEdit).collectLatest { category -> + categoryToEdit = category + category?.let { + categoryName = it.name + // Only set languages and stages if it's a filter + if (it is VocabularyFilter) { + selectedLanguages = it.languages?.mapNotNull { id -> languageViewModel.getLanguageById(id).takeIf { l -> l.code != "error" } } ?: emptyList() + selectedStages = it.stages ?: emptyList() + } + } + } + } + } + + AppDialog(onDismissRequest = onDismiss) { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surface + ) + ) { + Column( + modifier = Modifier.padding(24.dp) + ) { + Text( + text = stringResource(R.string.text_edit_category), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(bottom = 16.dp) + ) + + // Content + if (categoryToEdit != null) { + Column(modifier = Modifier + .fillMaxWidth() + .padding(bottom = 16.dp) + ) { + AppTextField( + value = categoryName, + onValueChange = { categoryName = it }, + label = { Text(stringResource(R.string.text_category_name)) }, + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 8.dp) + ) + + if (categoryToEdit is VocabularyFilter) { + MultipleLanguageDropdown( + languageViewModel = languageViewModel, + modifier = Modifier.fillMaxWidth(), + onLanguagesSelected = { languages -> + selectedLanguages = languages + }, + ) + VocabularyStageDropDown( + preselectedStages = selectedStages.filterNotNull(), + onStageSelected = { newStages -> + @Suppress("UNCHECKED_CAST") + val list = newStages + selectedStages = list.filterNotNull() + }, + modifier = Modifier.fillMaxWidth(), + multipleSelectable = true + ) + } + } + } + + // Buttons + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.End + ) { + TextButton(onClick = onDismiss) { + Text(stringResource(R.string.label_cancel)) + } + TextButton( + enabled = categoryToEdit != null && categoryName.isNotBlank(), + onClick = { + categoryToEdit?.let { category -> + val updatedCategory = when (category) { + is TagCategory -> category.copy(name = categoryName.trim()) + is VocabularyFilter -> category.copy( + name = categoryName.trim(), + languages = selectedLanguages.map { it.nameResId }.ifEmpty { null }, + stages = selectedStages.filterNotNull().ifEmpty { null } + ) + } + updatedCategory.let { + categoryViewModel.updateCategory(it) + } + } + onDismiss() + } + ) { Text(stringResource(R.string.label_save)) } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/EditLanguageDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/EditLanguageDialog.kt new file mode 100644 index 0000000..a3e70a2 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/EditLanguageDialog.kt @@ -0,0 +1,100 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.DialogButton + +@Composable +fun EditLanguageDialog( + language: Language, + onDismiss: () -> Unit, + onSave: (name: String, code: String, region: String) -> Unit +) { + var code by remember(language) { mutableStateOf(language.code) } + var region by remember(language) { mutableStateOf(language.region) } + var name by remember(language) { mutableStateOf(language.name) } + + AppDialog(onDismissRequest = onDismiss) { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surface + ) + ) { + Column( + modifier = Modifier.padding(24.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = stringResource(R.string.edit), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onSurface + ) + + // Language name: editable only for custom languages + AppTextField( + value = name, + onValueChange = { if (language.isCustom == true) name = it }, + enabled = language.isCustom == true, + label = { Text(text = stringResource(R.string.text_name_of_the_language)) }, + modifier = Modifier.fillMaxWidth() + ) + + AppTextField( + value = code, + onValueChange = { code = it }, + label = { Text(text = stringResource(R.string.text_language_code)) }, + placeholder = { Text(text = stringResource(R.string.text_e_g_en)) }, + modifier = Modifier.fillMaxWidth() + ) + AppTextField( + value = region, + onValueChange = { region = it }, + label = { Text(text = stringResource(R.string.text_region)) }, + placeholder = { Text(text = stringResource(R.string.text_e_g_us)) }, + modifier = Modifier.fillMaxWidth() + ) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), + horizontalArrangement = Arrangement.End + ) { + TextButton(onClick = onDismiss) { + Text(stringResource(R.string.label_cancel)) + } + DialogButton( + onClick = { onSave(name, code, region) }, + enabled = name.isNotBlank() && code.isNotBlank() && region.isNotBlank(), + modifier = Modifier.padding(start = 8.dp) + ) { + Text(text = stringResource(R.string.label_save)) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/ImportVocabularyDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/ImportVocabularyDialog.kt new file mode 100644 index 0000000..4fe19d0 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/ImportVocabularyDialog.kt @@ -0,0 +1,208 @@ +package eu.gaudian.translator.view.dialogs + +import android.app.Application +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties +import androidx.navigation.NavController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppSlider +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.DialogButton +import eu.gaudian.translator.view.composable.SourceLanguageDropdown +import eu.gaudian.translator.view.composable.TargetLanguageDropdown +import eu.gaudian.translator.view.hints.getImportVocabularyHint +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.coroutines.launch +import okhttp3.internal.platform.PlatformRegistry.applicationContext + +@Composable +fun ImportVocabularyDialog( + onDismiss: () -> Unit, + languageViewModel: LanguageViewModel, + categoryViewModel: CategoryViewModel, + vocabularyViewModel : VocabularyViewModel, + optionalDescription: String? = null, + optionalSearchTerm: String? = null +) { + + val navController = rememberNavController() + NavHost(navController = navController, startDestination = "import") { + composable("import") { + ImportDialogContent( + navController = navController, + onDismiss = onDismiss, + languageViewModel = languageViewModel, + vocabularyViewModel = vocabularyViewModel, + optionalDescription = optionalDescription, + optionalSearchTerm = optionalSearchTerm + ) + } + @Suppress("HardCodedStringLiteral") + composable("review") { + Dialog( + onDismissRequest = onDismiss, + properties = DialogProperties(usePlatformDefaultWidth = false) + ) { + // Full-screen surface to ensure the dialog covers content and stays above the main FAB/menu + Surface(modifier = Modifier.fillMaxSize()) { + VocabularyReviewScreen( + vocabularyViewModel = vocabularyViewModel, + onConfirm = { selectedItems, categoryIds -> + vocabularyViewModel.addVocabularyItems(selectedItems, categoryIds) + onDismiss() + }, + onCancel = onDismiss, + categoryViewModel = categoryViewModel + ) + } + } + } + } +} + +@Composable +fun ImportDialogContent( + navController: NavController, + onDismiss: () -> Unit, + languageViewModel: LanguageViewModel, + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as Application), + optionalDescription: String? = null, + optionalSearchTerm: String? = null +) { + var category by remember { mutableStateOf(optionalSearchTerm ?: "") } + var amount by remember { mutableFloatStateOf(1f) } + val coroutineScope = rememberCoroutineScope() + val descriptionText = optionalDescription ?: stringResource(R.string.text_let_ai_find_vocabulary_for_you) + val isGenerating by vocabularyViewModel.isGenerating.collectAsState() + + AppDialog( + onDismissRequest = onDismiss, + title = { Text(descriptionText) }, + hintContent = { getImportVocabularyHint() }, + content = { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(4.dp) + ) { + if (isGenerating) { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator() + } + } else { + AppTextField( + value = category, + onValueChange = { category = it }, + label = { Text(stringResource(R.string.text_search_term)) }, + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 16.dp) + ) + Text( + text = stringResource(R.string.text_hint_you_can_search), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.fillMaxWidth() + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + text = stringResource(R.string.text_select_languages), + style = MaterialTheme.typography.labelLarge, + modifier = Modifier.padding(bottom = 8.dp) + ) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(1.dp) + ) { + SourceLanguageDropdown(languageViewModel = languageViewModel) + } + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(1.dp) + ) { + TargetLanguageDropdown(languageViewModel = languageViewModel) + } + Spacer(modifier = Modifier.height(16.dp)) + Text( + text = stringResource(R.string.text_select_amount), + style = MaterialTheme.typography.labelLarge, + modifier = Modifier.padding(bottom = 8.dp) + ) + AppSlider( + value = amount, + onValueChange = { amount = it }, + valueRange = 1f..25f, + steps = 24, + modifier = Modifier.fillMaxWidth() + ) + Text( + text = stringResource(R.string.text_amount_2d, amount.toInt()), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp) + ) + Spacer(modifier = Modifier.height(8.dp)) + } + + // Action buttons + Spacer(modifier = Modifier.height(16.dp)) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.End + ) { + DialogButton( + onClick = onDismiss, + content = { Text(stringResource(R.string.label_cancel)) } + ) + if (category.isNotBlank() && !isGenerating) { + Spacer(modifier = Modifier.widthIn(8.dp)) + DialogButton(onClick = { + coroutineScope.launch { + vocabularyViewModel.generateVocabularyItems(category, amount.toInt()) + @Suppress("HardCodedStringLiteral") + navController.navigate("review") + } + }) { Text(stringResource(R.string.text_generate)) } + } + } + } + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/MissingLanguageDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/MissingLanguageDialog.kt new file mode 100644 index 0000000..8fae022 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/MissingLanguageDialog.kt @@ -0,0 +1,228 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Card +import androidx.compose.material3.DividerDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppOutlinedButton +import eu.gaudian.translator.view.composable.DialogButton +import eu.gaudian.translator.view.composable.SingleLanguageDropDown +import eu.gaudian.translator.viewmodel.LanguageViewModel + +@Composable +fun MissingLanguageDialog( + showDialog: Boolean, + missingLanguageId: Int, + affectedItems: List, + languageViewModel: LanguageViewModel, + onDismiss: () -> Unit, + onDelete: (List) -> Unit, + onReplace: (Int, Int) -> Unit, + onCreate: (Language) -> Unit +) { + if (!showDialog) return + + var showAddLanguageDialog by remember { mutableStateOf(false) } + var selectedReplacementLanguage by remember { mutableStateOf(null) } + + if (showAddLanguageDialog) { + AddCustomLanguageDialog( + showDialog = true, + onDismiss = { + @Suppress("AssignedValueIsNeverRead") + showAddLanguageDialog = false + }, + onAddLanguage = { newLanguage -> + onCreate(newLanguage) + @Suppress("AssignedValueIsNeverRead") + showAddLanguageDialog = false + onDismiss() + } + ) + } + + AppDialog(onDismissRequest = onDismiss, title = { + Text(text = stringResource(R.string.resolve_missing_language_id, missingLanguageId)) + }) { Column( + modifier = Modifier.padding(24.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + Text( + text = stringResource(R.string.resolve_missing_language_id, missingLanguageId), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(bottom = 8.dp) + ) + + Text( + stringResource( + R.string.found_d_items_using_this_missing_language_id, + affectedItems.size + ), + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding(bottom = 8.dp) + ) + + var itemsVisible by remember { mutableStateOf(false) } + TextButton(onClick = { itemsVisible = !itemsVisible }) { + Text(if (itemsVisible) stringResource(R.string.hide_affected_items) else stringResource( + R.string.show_affected_items + )) + } + + if (itemsVisible) { + Card(modifier = Modifier.heightIn(max = 150.dp)) { + LazyColumn(modifier = Modifier.padding(8.dp)) { + items(affectedItems) { item -> + Text("• ${item.wordFirst} / ${item.wordSecond}") + } + } + } + } + + Spacer(Modifier.height(16.dp)) + + Text(stringResource(R.string.solution_1_delete_items), fontWeight = FontWeight.Bold) + Text( + stringResource( + R.string.permanently_delete_all_d_affected_vocabulary_items, + affectedItems.size + ), style = MaterialTheme.typography.bodySmall) + AppButton( + onClick = { onDelete(affectedItems) }, + colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.error), + modifier = Modifier + .fillMaxWidth() + .padding(top = 4.dp) + ) { + Text(stringResource(R.string.delete_d_items, affectedItems.size)) + } + HorizontalDivider( + Modifier.padding(vertical = 12.dp), + DividerDefaults.Thickness, + DividerDefaults.color + ) + + Text(stringResource(R.string.solution_2_replace_id), fontWeight = FontWeight.Bold) + Text(stringResource(R.string.text_assign_a_different_language_items), style = MaterialTheme.typography.bodySmall) + + SingleLanguageDropDown( + modifier = Modifier + .fillMaxWidth() + .padding(top = 4.dp), + languageViewModel = languageViewModel, + selectedLanguage = selectedReplacementLanguage, + onLanguageSelected = { selectedReplacementLanguage = it } + ) + + AppButton( + onClick = { + selectedReplacementLanguage?.nameResId?.let { + onReplace(missingLanguageId, it) + } + }, + enabled = selectedReplacementLanguage != null, + modifier = Modifier + .fillMaxWidth() + .padding(top = 4.dp) + ) { + Text( + stringResource( + R.string.replace_with_d, + selectedReplacementLanguage?.name ?: "..." + )) + } + HorizontalDivider( + Modifier.padding(vertical = 12.dp), + DividerDefaults.Thickness, + DividerDefaults.color + ) + + Text(stringResource(R.string.solution_3_create_language), fontWeight = FontWeight.Bold) + Text(stringResource(R.string.create_a_new_custom_language_entry_for_this_id), style = MaterialTheme.typography.bodySmall) + AppOutlinedButton( + onClick = { + @Suppress("AssignedValueIsNeverRead") + showAddLanguageDialog = true + }, + modifier = Modifier + .fillMaxWidth() + .padding(top = 4.dp) + ) { + Text(stringResource(R.string.create_new_language)) + } + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically + ) { + DialogButton( + content = { Text(stringResource(R.string.label_close)) }, + onClick = onDismiss + ) + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@OptIn(ExperimentalComposeUiApi::class) +@Preview +@Composable +fun MissingLanguageDialogPreview() { + LocalContext.current + val activity = LocalContext.current.findActivity() + val affectedItems = listOf( + VocabularyItem(id = 1, languageFirstId = 1, languageSecondId = 2, wordFirst = "Hello", wordSecond = "Hola"), + VocabularyItem(id = 2, languageFirstId = 1, languageSecondId = 2, wordFirst = "World", wordSecond = "Mundo"), + VocabularyItem(id = 3, languageFirstId = 1, languageSecondId = 2, wordFirst = "Cat", wordSecond = "Gato") + ) + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + + MissingLanguageDialog( + showDialog = true, + missingLanguageId = 999, + affectedItems = affectedItems, + languageViewModel = languageViewModel, + onDismiss = {}, + onDelete = {}, + onReplace = { _, _ -> }, + onCreate = {} + ) +} diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/StageSelectionDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/StageSelectionDialog.kt new file mode 100644 index 0000000..9d83d02 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/StageSelectionDialog.kt @@ -0,0 +1,76 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.ListItem +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.ComponentDefaults +import eu.gaudian.translator.view.composable.DialogButton + +@Composable +fun StageSelectionDialog( + onStageSelected: (VocabularyStage?) -> Unit, + onDismissRequest: () -> Unit +) { + + AppDialog(onDismissRequest = onDismissRequest, title = { + Text(text = stringResource(R.string.label_select_stage)) + }) { + + + + Column( + modifier = Modifier + .fillMaxWidth() + .clip(ComponentDefaults.CardShape) + ) { + VocabularyStage.entries.forEach { stage -> + ListItem( + headlineContent = { + Text(text = stage.toString(LocalContext.current)) + }, + modifier = Modifier + .fillMaxWidth() + .clickable { + onStageSelected(stage) + onDismissRequest() + } + .padding(vertical = 0.dp) + ) + } + } + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), + horizontalArrangement = Arrangement.End + ) { + DialogButton( + onClick = onDismissRequest, + ) { + Text(stringResource(R.string.label_cancel)) + } + } + } +} + +@Preview +@Composable +fun StageSelectionDialogPreview() { + StageSelectionDialog(onStageSelected = {}, onDismissRequest = {}) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/StartExerciseDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/StartExerciseDialog.kt new file mode 100644 index 0000000..35cb3e6 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/StartExerciseDialog.kt @@ -0,0 +1,128 @@ +package eu.gaudian.translator.view.dialogs + +import android.app.Application +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.VocabularyCategory +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.MultipleLanguageDropdown +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.coroutines.launch +import okhttp3.internal.platform.PlatformRegistry.applicationContext + +@Composable +fun StartExerciseDialog( + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as Application), + categoryViewModel: CategoryViewModel = CategoryViewModel.getInstance(applicationContext as Application), + onDismiss: () -> Unit, + onConfirm: ( + categories: List, + stages: List, + languageIds: List + ) -> Unit +) { + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val coroutineScope = rememberCoroutineScope() + var lids by remember { mutableStateOf>(emptyList()) } + var languages by remember { mutableStateOf>(emptyList()) } + // Map displayed Language to its DB id (lid) using position mapping from load + var languageIdMap by remember { mutableStateOf>(emptyMap()) } + + LaunchedEffect(Unit) { + coroutineScope.launch { + lids = vocabularyViewModel.getAllLanguagesIdsPresent().filterNotNull().toList() + languages = lids.map { lid -> + languageViewModel.getLanguageById(lid) + } + // build reverse map + languageIdMap = languages.mapIndexed { index, lang -> lang to lids.getOrNull(index) }.filter { it.second != null }.associate { it.first to it.second!! } + } + } + var selectedLanguages by remember { mutableStateOf>(emptyList()) } + var selectedCategories by remember { mutableStateOf>(emptyList()) } + var selectedStages by remember { mutableStateOf>(emptyList()) } + + AppDialog(onDismissRequest = onDismiss, title = { Text(stringResource(R.string.label_start_exercise)) }) { + + Column( + modifier = Modifier + .fillMaxWidth() + .padding(24.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + MultipleLanguageDropdown( + modifier = Modifier.fillMaxWidth(), + languageViewModel = languageViewModel, + onLanguagesSelected = { langs -> + selectedLanguages = langs + }, + languages + ) + CategoryDropdown( + categoryViewModel = categoryViewModel, + onCategorySelected = { categories -> + selectedCategories = categories.filterIsInstance() + }, + multipleSelectable = true + ) + VocabularyStageDropDown( + modifier = Modifier.fillMaxWidth(), + preselectedStages = selectedStages, + onStageSelected = { stages -> + @Suppress("FilterIsInstanceResultIsAlwaysEmpty") + selectedStages = stages.filterIsInstance() + }, + multipleSelectable = true + ) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.End + ) { + TextButton( + onClick = onDismiss, + ) { + Text(stringResource(R.string.label_cancel)) + } + TextButton( + onClick = { + run { + val ids = selectedLanguages.mapNotNull { languageIdMap[it] } + onConfirm(selectedCategories, selectedStages, ids) + } + } + ) { + Text(stringResource(R.string.label_start_exercise)) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyMenu.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyMenu.kt new file mode 100644 index 0000000..da51dd5 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyMenu.kt @@ -0,0 +1,82 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.dialogs + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.viewmodel.compose.viewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppFabMenu +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.FabMenuItem +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.StatusViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel + +@Composable +fun VocabularyMenu( + modifier: Modifier = Modifier, + statusViewModel: StatusViewModel = viewModel(), + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(LocalContext.current.applicationContext as android.app.Application), + categoryViewModel: CategoryViewModel = viewModel(), +) { + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + var showAddVocabularyDialog by remember { mutableStateOf(false) } + var showImportVocabularyDialog by remember { mutableStateOf(false) } + var showAddCategoryDialog by remember { mutableStateOf(false) } + + val menuItems = listOf( + FabMenuItem( + text = stringResource(R.string.label_add_vocabulary), + imageVector = AppIcons.Add, + onClick = { showAddVocabularyDialog = true } + ), + FabMenuItem( + text = stringResource(R.string.menu_import_vocabulary), + imageVector = AppIcons.AI, + onClick = { showImportVocabularyDialog = true } + ), + FabMenuItem( + text = stringResource(R.string.label_add_category), + imageVector = AppIcons.Add, + onClick = { showAddCategoryDialog = true } + ) + ) + + AppFabMenu(items = menuItems, modifier = modifier) + + if (showAddVocabularyDialog) { + AddVocabularyDialog( + statusViewModel = statusViewModel, + languageViewModel = languageViewModel, + vocabularyViewModel = vocabularyViewModel, + onDismissRequest = { showAddVocabularyDialog = false } + ) + } + + if (showImportVocabularyDialog) { + ImportVocabularyDialog( + languageViewModel = languageViewModel, + categoryViewModel = categoryViewModel, + vocabularyViewModel = vocabularyViewModel, + onDismiss = { showImportVocabularyDialog = false } + ) + } + + if (showAddCategoryDialog) { + AddCategoryDialog( + categoryViewModel = categoryViewModel, + onDismiss = { showAddCategoryDialog = false } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyReviewScreen.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyReviewScreen.kt new file mode 100644 index 0000000..abe4b8f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyReviewScreen.kt @@ -0,0 +1,156 @@ +package eu.gaudian.translator.view.dialogs + +import android.app.Application +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.VocabularyCategory +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCheckbox +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.hints.getVocabularyReviewHint +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import okhttp3.internal.platform.PlatformRegistry.applicationContext + +@Composable +fun VocabularyReviewScreen( + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as Application), + categoryViewModel: CategoryViewModel, + onConfirm: (List, List) -> Unit, + onCancel: () -> Unit +) { + val generatedItems: List by vocabularyViewModel.generatedVocabularyItems.collectAsState() + val selectedItems = remember { mutableStateListOf() } + val duplicates = remember { mutableStateListOf() } + var selectedCategoryId by remember { mutableStateOf>(emptyList()) } + LocalContext.current + + LaunchedEffect(generatedItems) { + val duplicateResults = vocabularyViewModel.findDuplicates(generatedItems) + duplicates.clear() + duplicates.addAll(duplicateResults) + selectedItems.clear() + selectedItems.addAll(generatedItems.filterIndexed { index, _ -> !duplicateResults[index] }) + } + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.found_items)) }, + hintContent = { getVocabularyReviewHint() } + ) + }, + ) { paddingValues -> + Column(modifier = Modifier.padding(paddingValues)) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text(text = stringResource(R.string.select_items_to_add), style = MaterialTheme.typography.titleMedium) + val allSelected = generatedItems.isNotEmpty() && selectedItems.size == generatedItems.size + AppCheckbox( + checked = allSelected, + onCheckedChange = { isChecked -> + if (isChecked) { + selectedItems.clear() + selectedItems.addAll(generatedItems) + } else { + selectedItems.clear() + } + } + ) + } + val duplicate = stringResource(R.string.duplicate) + LazyColumn( + modifier = Modifier + .weight(1f) + .padding(horizontal = 16.dp) + ) { + itemsIndexed(generatedItems) { index, item -> + val isDuplicate = duplicates.getOrNull(index) == true + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + AppCheckbox( + checked = selectedItems.contains(item), + onCheckedChange = { isChecked -> + if (isChecked) { + selectedItems.add(item) + } else { + selectedItems.remove(item) + } + } + ) + Spacer(modifier = Modifier.width(8.dp)) + Column { + Text(text = item.wordFirst, style = MaterialTheme.typography.bodyLarge) + Text(text = item.wordSecond, style = MaterialTheme.typography.bodyMedium) + } + if (isDuplicate) { + Spacer(modifier = Modifier.weight(1f)) + Text(duplicate, style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.error) + } + } + } + } + Text( + text = stringResource(R.string.select_list_optional), + style = MaterialTheme.typography.labelLarge, + modifier = Modifier.padding(8.dp) + ) + CategoryDropdown( + categoryViewModel = categoryViewModel, + onCategorySelected = { categories: List -> + selectedCategoryId = categories.filterNotNull().map { it.id } + }, + onlyLists = true + ) + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + horizontalArrangement = Arrangement.End + ) { + TextButton(onClick = onCancel) { + Text(stringResource(R.string.label_cancel)) + } + Spacer(modifier = Modifier.width(8.dp)) + AppButton(onClick = { + onConfirm(selectedItems.toList(), selectedCategoryId) + }) { + Text(stringResource(R.string.label_add_, selectedItems.size)) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyStageDropdown.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyStageDropdown.kt new file mode 100644 index 0000000..bed8c29 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/VocabularyStageDropdown.kt @@ -0,0 +1,169 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCheckbox +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedButton + + +@Composable +fun VocabularyStageDropDown( + preselectedStages: List, + onStageSelected: (List) -> Unit, + modifier: Modifier = Modifier, + noneSelectable: Boolean? = true, + multipleSelectable: Boolean = false, +) { + var expanded by remember { mutableStateOf(false) } + var selectedStages by remember { mutableStateOf(preselectedStages) } + val context = LocalContext.current + + Box( + modifier = modifier, + contentAlignment = Alignment.CenterEnd + ) { + AppOutlinedButton( + shape = RoundedCornerShape(8.dp), + onClick = { expanded = true }, + modifier = Modifier.fillMaxWidth(), + ) { + Row(modifier = Modifier.fillMaxWidth()) { + Text(text = when { + selectedStages.isEmpty() -> stringResource(R.string.label_select_stage) + selectedStages.size == 1 -> selectedStages.first()?.toString(context)?:stringResource(R.string.text_none) + else -> stringResource(R.string.stages_selected, selectedStages.size) + }, + textAlign = TextAlign.Center, + modifier = Modifier.weight(1f) + ) + Icon( + imageVector = if (expanded) AppIcons.ArrowDropUp else AppIcons.ArrowDropDown, + contentDescription = if (expanded) stringResource(R.string.cd_collapse) else stringResource(R.string.cd_expand) + ) + } + } + + DropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false }, + modifier = Modifier.fillMaxWidth() + ) { + if (noneSelectable == true) { + val noneSelected = selectedStages.contains(null) + DropdownMenuItem( + text = { + Row(modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) { + if (multipleSelectable) { + AppCheckbox( + checked = noneSelected, + onCheckedChange = { + selectedStages = if (noneSelected) selectedStages.filterNotNull() else selectedStages + listOf(null) + onStageSelected(selectedStages) + } + ) + Spacer(modifier = Modifier.width(8.dp)) + } + Text(text = stringResource(R.string.text_none)) + } + }, + onClick = { + if (multipleSelectable) { + selectedStages = if (null in selectedStages) { + selectedStages.filterNotNull() + } else { + selectedStages + listOf(null) + } + onStageSelected(selectedStages) + } else { + selectedStages = listOf(null) + onStageSelected(selectedStages) + expanded = false + } + } + ) + } + + VocabularyStage.entries.forEach { stage -> + val isSelected = selectedStages.contains(stage) + DropdownMenuItem( + text = { + Row(modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) { + if (multipleSelectable) { + AppCheckbox( + checked = isSelected, + onCheckedChange = { + selectedStages = if (isSelected) selectedStages - stage else selectedStages + stage + onStageSelected(selectedStages) + } + ) + Spacer(modifier = Modifier.width(8.dp)) + } + Text(stage.toString(context)) + } + }, + onClick = { + if (multipleSelectable) { + selectedStages = if (stage in selectedStages) { + selectedStages - stage + } else { + selectedStages + stage + } + onStageSelected(selectedStages) + } else { + selectedStages = listOf(stage) + onStageSelected(selectedStages) + expanded = false + } + } + ) + } + + if (multipleSelectable) { + HorizontalDivider() + AppButton( + onClick = { expanded = false }, + modifier = Modifier + .fillMaxWidth() + .padding(8.dp) + ) { + Text(stringResource(R.string.label_done)) + } + } + } + } +} + +@Preview +@Composable +fun VocabularyStageDropDownPreview() { + VocabularyStageDropDown( + preselectedStages = listOf(VocabularyStage.NEW), + onStageSelected = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dialogs/WhatsNewDialog.kt b/app/src/main/java/eu/gaudian/translator/view/dialogs/WhatsNewDialog.kt new file mode 100644 index 0000000..6aaf1ce --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dialogs/WhatsNewDialog.kt @@ -0,0 +1,94 @@ +package eu.gaudian.translator.view.dialogs + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.view.composable.AppAlertDialog +import eu.gaudian.translator.view.composable.DialogButton + +@Composable +fun WhatsNewDialog( + onDismissRequest: () -> Unit, + onContinue: () -> Unit, + changelogContent: String +) { + AppAlertDialog( + onDismissRequest = onDismissRequest, + confirmButton = { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), + horizontalArrangement = Arrangement.End + ) { + DialogButton( + onClick = onContinue, + text = stringResource(R.string.label_continue), + isPrimary = false + ) + } + }, + title = { + Text( + text = stringResource(R.string.whats_new_title), + style = MaterialTheme.typography.headlineSmall, + fontWeight = FontWeight.Bold + ) + }, + text = { + Column(modifier = Modifier.verticalScroll(rememberScrollState())) { + Text( + text = stringResource(R.string.whats_new_changelog_title), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.SemiBold, + modifier = Modifier.padding(bottom = 8.dp) + ) + Text( + text = changelogContent, + style = MaterialTheme.typography.bodyMedium + ) + } + } + ) +} + +@Suppress("HardCodedStringLiteral") +@ThemePreviews +@Composable +fun WhatsNewDialogPreview() { + WhatsNewDialog( + onDismissRequest = {}, + onContinue = {}, + changelogContent = """ + • New feature: Dark mode support for a better viewing experience in low-light environments. + • New feature: Offline translation capabilities. Download language packs to translate without an internet connection. + • New feature: Voice input. Speak directly into your device for instant translation. + • New feature: Conversation mode. A split-screen interface to facilitate bilingual conversations. + • Improvement: Enhanced translation accuracy for several language pairs. + • Improvement: UI has been redesigned for a more intuitive and modern look. + • Improvement: Performance has been optimized, resulting in faster translation times. + • Improvement: Reduced application size. + • Bug fix: Fixed an issue where the app would crash on certain older devices. + • Bug fix: Corrected a bug that caused incorrect translations for specific phrases. + • Bug fix: Addressed a memory leak that could slow down the device over time. + • New language: Added support for Klingon. + • New language: Added support for Elvish. + • Removed: Phased out support for Internet Explorer 6. + • Just kidding about those last three. Or are we? + • Lots and lots of other minor bug fixes and performance improvements to make your experience smoother. We've been busy! + """.trimIndent() + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/CorrectionScreen.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/CorrectionScreen.kt new file mode 100644 index 0000000..3dde9cd --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/CorrectionScreen.kt @@ -0,0 +1,555 @@ +package eu.gaudian.translator.view.dictionary + +import android.content.ClipData +import android.widget.Toast +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.spring +import androidx.compose.animation.expandVertically +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.shrinkVertically +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.selection.SelectionContainer +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ContentPaste +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalClipboard +import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.toClipEntry +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.TextFieldValue +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.semanticColors +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedButton +import eu.gaudian.translator.view.composable.AppSwitch +import eu.gaudian.translator.view.composable.DictionaryLanguageDropDown +import eu.gaudian.translator.viewmodel.CorrectionViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import kotlinx.coroutines.launch + +// 1. STATEFUL COMPONENT (Connects to ViewModels) +@Composable +fun CorrectionScreen( + correctionViewModel: CorrectionViewModel, + languageViewModel: LanguageViewModel +) { + val textFieldValue by correctionViewModel.textFieldValue.collectAsState() + val explanation by correctionViewModel.explanation.collectAsState() + val isLoading by correctionViewModel.isLoading.collectAsState() + val correctedText by correctionViewModel.correctedText.collectAsState() + val grammarOnly by correctionViewModel.grammarOnly.collectAsState() + val selectedTone by correctionViewModel.tone.collectAsState() + val errorMessage by correctionViewModel.error.collectAsState() + + val successColor = MaterialTheme.semanticColors.success + + CorrectionScreenContent( + textFieldValue = textFieldValue, + explanation = explanation, + isLoading = isLoading, + correctedText = correctedText, + grammarOnly = grammarOnly, + selectedTone = selectedTone, + errorMessage = errorMessage, + onInputTextChanged = correctionViewModel::onInputTextChanged, + onClearText = correctionViewModel::clearText, + onSetCorrectToneEnabled = correctionViewModel::setCorrectToneEnabled, + onToneSelected = correctionViewModel::setTone, + onCorrectClick = { + languageViewModel.selectedDictionaryLanguage.value?.let { lang -> + correctionViewModel.performCorrection(lang, successColor) + } + }, + languageDropdownContent = { + DictionaryLanguageDropDown( + languageViewModel = languageViewModel, + modifier = Modifier.fillMaxWidth() + ) + } + ) +} + +// 2. STATELESS COMPONENT (Handles UI Layout) +@Composable +fun CorrectionScreenContent( + textFieldValue: TextFieldValue, + explanation: String?, + isLoading: Boolean, + correctedText: String?, + grammarOnly: Boolean, + selectedTone: CorrectionViewModel.Tone, + errorMessage: String?, + onInputTextChanged: (TextFieldValue) -> Unit, + onClearText: () -> Unit, + onSetCorrectToneEnabled: (Boolean) -> Unit, + onToneSelected: (CorrectionViewModel.Tone) -> Unit, + onCorrectClick: () -> Unit, + languageDropdownContent: @Composable () -> Unit +) { + val clipboard = LocalClipboard.current + val clipboardManager = LocalClipboardManager.current + val scope = rememberCoroutineScope() + val context = LocalContext.current + val scrollState = rememberScrollState() + + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(scrollState) + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + // --- Editor Section --- + Card( + modifier = Modifier.fillMaxWidth(), + shape = RoundedCornerShape(24.dp), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(1.dp) + ) + ) { + // Box is used to overlay the buttons on top of the text field + Box( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + contentAlignment = Alignment.BottomEnd + ) { + // Input Field + OutlinedTextField( + value = textFieldValue, + onValueChange = onInputTextChanged, + shape = RoundedCornerShape(12.dp), + modifier = Modifier + .fillMaxWidth() + .heightIn(min = 200.dp, max = 500.dp), // Height accommodates text + bottom buttons + enabled = !isLoading, + label = { Text(stringResource(R.string.text_enter_text_to_correct)) }, + //placeholder = { Text("Type or paste text here...") } + ) + + // Action Buttons (Paste / Copy / Clear) - Floating inside the Box + Row( + modifier = Modifier.padding(8.dp), + horizontalArrangement = Arrangement.spacedBy(4.dp) + ) { + val textCopied = stringResource(R.string.text_copied_to_clipboard) + + // 1. Paste Button (Visible only when text is empty) + val textClipBoardEmpty = stringResource(R.string.text_clipboard_empty) + AnimatedVisibility( + visible = textFieldValue.text.isEmpty(), + enter = fadeIn() + expandVertically(), + exit = fadeOut() + shrinkVertically() + ) { + IconButton(onClick = { + val clipboardText = clipboardManager.getText()?.text + if (!clipboardText.isNullOrBlank()) { + onInputTextChanged(TextFieldValue(clipboardText)) + } else { + Toast.makeText(context, textClipBoardEmpty, Toast.LENGTH_SHORT).show() + } + }) { + Icon( + imageVector = Icons.Default.ContentPaste, + contentDescription = stringResource(R.string.label_paste), + tint = MaterialTheme.colorScheme.primary + ) + } + } + + // 2. Copy Button (Visible only when there is a result) + AnimatedVisibility( + visible = correctedText != null, + enter = fadeIn() + expandVertically(), + exit = fadeOut() + shrinkVertically() + ) { + correctedText?.let { textToCopy -> + IconButton( + onClick = { + Toast.makeText(context, textCopied, Toast.LENGTH_SHORT).show() + scope.launch { + val clipData = ClipData.newPlainText(textToCopy, textToCopy) + clipboard.setClipEntry(clipData.toClipEntry()) + } + }, + ) { + Icon( + imageVector = AppIcons.Copy, + contentDescription = stringResource(R.string.text_copy_corrected_text), + tint = MaterialTheme.colorScheme.primary + ) + } + } + } + + // 3. Clear Button (Visible only when text is NOT empty) + AnimatedVisibility(visible = textFieldValue.text.isNotEmpty()) { + IconButton(onClick = onClearText) { + Icon( + imageVector = AppIcons.Clear, + contentDescription = stringResource(R.string.cd_clear_text), + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } + } + } + + // --- Settings Section --- + Card( + modifier = Modifier + .fillMaxWidth() + .animateContentSize(animationSpec = spring(stiffness = Spring.StiffnessMediumLow)), + shape = RoundedCornerShape(16.dp), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(2.dp) + ) + ) { + Column(modifier = Modifier.padding(16.dp)) { + + + // --- Action Bar --- + Column { + if (errorMessage != null) { + Text( + text = errorMessage, + color = MaterialTheme.colorScheme.error, + style = MaterialTheme.typography.bodySmall, + modifier = Modifier.padding(bottom = 8.dp, start = 8.dp) + ) + } + + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(12.dp) + ) { + // Language Dropdown Slot + Box(modifier = Modifier.weight(1f)) { + languageDropdownContent() + } + + // Correct Button + AppButton( + onClick = onCorrectClick, + enabled = textFieldValue.text.isNotBlank() && !isLoading, + modifier = Modifier.height(50.dp) + ) { + if (isLoading) { + CircularProgressIndicator( + modifier = Modifier.size(20.dp), + color = MaterialTheme.colorScheme.onPrimary, + strokeWidth = 2.dp + ) + } else { + Text( + text = stringResource(R.string.label_action_correct), + style = MaterialTheme.typography.labelLarge + ) + } + } + } + } + + Spacer(modifier = Modifier.width(12.dp)) + + + + + + + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Row(verticalAlignment = Alignment.CenterVertically) { + Icon( + imageVector = AppIcons.Settings, // Fallback icon + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(20.dp) + ) + Spacer(modifier = Modifier.width(12.dp)) + Column { + Text( + text = stringResource(R.string.correct_tone), + style = MaterialTheme.typography.titleSmall, + fontWeight = FontWeight.SemiBold + ) + if (grammarOnly) { + Text( + text = stringResource(R.string.label_grammar_only), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } + + AppSwitch( + checked = !grammarOnly, + onCheckedChange = onSetCorrectToneEnabled, + enabled = !isLoading + ) + } + + if (!grammarOnly) { + Spacer(modifier = Modifier.height(12.dp)) + HorizontalDivider(color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.5f)) + Spacer(modifier = Modifier.height(12.dp)) + + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = stringResource(R.string.label_target_tone), + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(end = 16.dp) + ) + Box(modifier = Modifier.weight(1f)) { + ToneDropdown( + selectedTone = selectedTone, + onToneSelected = onToneSelected, + enabled = !isLoading + ) + } + } + } + + } + } + + // --- Explanation / Results Section --- + AnimatedVisibility( + visible = explanation != null, + enter = expandVertically() + fadeIn(), + exit = shrinkVertically() + fadeOut() + ) { + Card( + modifier = Modifier.fillMaxWidth(), + shape = RoundedCornerShape(16.dp), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.tertiaryContainer.copy(alpha = 0.4f) + ) + ) { + Column(modifier = Modifier.padding(20.dp)) { + Row(verticalAlignment = Alignment.CenterVertically) { + Icon( + imageVector = AppIcons.Info, + contentDescription = null, + tint = MaterialTheme.colorScheme.tertiary, + modifier = Modifier.size(18.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = stringResource(R.string.text_explanation), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.onSurface + ) + } + + Spacer(modifier = Modifier.height(8.dp)) + + SelectionContainer { + Text( + text = explanation ?: "", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + lineHeight = 22.sp + ) + } + } + } + } + + + } +} + +@Composable +private fun ToneDropdown( + selectedTone: CorrectionViewModel.Tone, + onToneSelected: (CorrectionViewModel.Tone) -> Unit, + enabled: Boolean +) { + var expanded by remember { mutableStateOf(false) } + + Box(modifier = Modifier.fillMaxWidth()) { + AppOutlinedButton( + onClick = { if (enabled) expanded = true }, + enabled = enabled, + modifier = Modifier.fillMaxWidth() + ) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = labelFor(selectedTone), + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.Medium + ) + Icon( + imageVector = if(expanded) AppIcons.ArrowDropUp else AppIcons.ArrowDropDown, + contentDescription = null, + modifier = Modifier.size(20.dp) + ) + } + } + + DropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false }, + modifier = Modifier.background(MaterialTheme.colorScheme.surfaceColorAtElevation(3.dp)) + ) { + DropdownMenuItem( + text = { Text(text = stringResource(R.string.text_none)) }, + onClick = { + onToneSelected(CorrectionViewModel.Tone.NONE) + expanded = false + }, + enabled = enabled + ) + HorizontalDivider() + val options = listOf( + CorrectionViewModel.Tone.FORMAL, + CorrectionViewModel.Tone.CASUAL, + CorrectionViewModel.Tone.COLLOQUIAL, + CorrectionViewModel.Tone.POLITE, + CorrectionViewModel.Tone.PROFESSIONAL, + CorrectionViewModel.Tone.FRIENDLY, + CorrectionViewModel.Tone.ACADEMIC, + CorrectionViewModel.Tone.CREATIVE + ) + options.forEach { tone -> + DropdownMenuItem( + text = { Text(text = labelFor(tone)) }, + onClick = { + onToneSelected(tone) + expanded = false + }, + enabled = enabled + ) + } + } + } +} + +@Composable +fun labelFor(tone: CorrectionViewModel.Tone): String = when (tone) { + CorrectionViewModel.Tone.NONE -> stringResource(R.string.text_none) + CorrectionViewModel.Tone.FORMAL -> stringResource(R.string.formal) + CorrectionViewModel.Tone.CASUAL -> stringResource(R.string.label_casual) + CorrectionViewModel.Tone.COLLOQUIAL -> stringResource(R.string.label_colloquial) + CorrectionViewModel.Tone.POLITE -> stringResource(R.string.polite) + CorrectionViewModel.Tone.PROFESSIONAL -> stringResource(R.string.professional) + CorrectionViewModel.Tone.FRIENDLY -> stringResource(R.string.friendly) + CorrectionViewModel.Tone.ACADEMIC -> stringResource(R.string.label_academic) + CorrectionViewModel.Tone.CREATIVE -> stringResource(R.string.creative) +} + +// --- PREVIEWS --- + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "1. Empty State") +@Composable +private fun CorrectionScreenPreview() { + MaterialTheme { + CorrectionScreenContent( + textFieldValue = TextFieldValue(""), + explanation = null, + isLoading = false, + correctedText = null, + grammarOnly = true, + selectedTone = CorrectionViewModel.Tone.NONE, + errorMessage = null, + onInputTextChanged = {}, + onClearText = {}, + onSetCorrectToneEnabled = {}, + onToneSelected = {}, + onCorrectClick = {}, + languageDropdownContent = { + AppOutlinedButton(onClick = {}, modifier = Modifier.fillMaxWidth()) { + Text("German") + } + } + ) + } +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "2. Results State") +@Composable +private fun CorrectionScreenResultsPreview() { + MaterialTheme { + CorrectionScreenContent( + textFieldValue = TextFieldValue("In diesen Satz ist ein Fehler"), + explanation = "Korrektur der Deklination von 'dieser' (Dativ Singular Maskulinum: 'diesem' statt 'diesen') und Ergänzung des fehlenden Schlusszeichens.", + isLoading = false, + correctedText = "In diesem Satz ist ein Fehler.", + grammarOnly = false, + selectedTone = CorrectionViewModel.Tone.PROFESSIONAL, + errorMessage = null, + onInputTextChanged = {}, + onClearText = {}, + onSetCorrectToneEnabled = {}, + onToneSelected = {}, + onCorrectClick = {}, + languageDropdownContent = { + AppOutlinedButton(onClick = {}, modifier = Modifier.fillMaxWidth()) { + Text("German") + } + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryManagerContent.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryManagerContent.kt new file mode 100644 index 0000000..2d50ac5 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryManagerContent.kt @@ -0,0 +1,181 @@ +package eu.gaudian.translator.view.dictionary + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.communication.FileInfo +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.viewmodel.DictionaryViewModel + +@Composable +fun DictionaryManagerContent( + dictionaryViewModel: DictionaryViewModel, +) { + val manifest by dictionaryViewModel.manifest.collectAsState() + val downloadedDictionaries by dictionaryViewModel.downloadedDictionaries.collectAsState() + val orphanedFiles by dictionaryViewModel.orphanedFiles.collectAsState() + val downloadProgress by dictionaryViewModel.downloadProgress.collectAsState() + val isDownloading by dictionaryViewModel.isDownloading.collectAsState() + + var showDeleteAllDialog by remember { mutableStateOf(false) } + + if (manifest == null) return + + AppCard( + title = stringResource(R.string.label_dictionary_manager), + text = stringResource(R.string.text_dictionary_manager_description), + expandable = true + ) { + Column(modifier = Modifier.fillMaxWidth()) { + if (manifest!!.files.isNotEmpty()) { + DictionaryDownloadList( + files = manifest!!.files, + downloadedDictionaries = downloadedDictionaries, + downloadProgress = downloadProgress, + isDownloading = isDownloading, + dictionaryViewModel = dictionaryViewModel + ) + } + + if (orphanedFiles.isNotEmpty()) { + OrphanedFilesList( + files = orphanedFiles, + dictionaryViewModel = dictionaryViewModel + ) + } + + if ((downloadedDictionaries.isNotEmpty() || orphanedFiles.isNotEmpty())) { + AppButton( + onClick = { showDeleteAllDialog = true }, + enabled = !isDownloading, + colors = ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.error, + contentColor = MaterialTheme.colorScheme.onError + ), + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp) + ) { + Text(stringResource(R.string.label_delete_all)) + } + } + + if (manifest!!.files.isEmpty() && orphanedFiles.isEmpty()) { + Text( + text = stringResource(R.string.text_no_dictionaries_available), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(top = 16.dp) + ) + } + } + } + + if (showDeleteAllDialog) { + DeleteAllDialog( + onConfirm = { + dictionaryViewModel.deleteAllDictionaries() + @Suppress("AssignedValueIsNeverRead") + showDeleteAllDialog = false + }, + onDismiss = { + @Suppress("AssignedValueIsNeverRead") + showDeleteAllDialog = false + } + ) + } +} + +@Composable +private fun DictionaryDownloadList( + files: List, + downloadedDictionaries: List, + downloadProgress: Float?, + isDownloading: Boolean, + dictionaryViewModel: DictionaryViewModel +) { + // Local state to track which ID is currently being processed + var currentDownloadingId by remember { mutableStateOf(null) } + + // Reset when progress clears + LaunchedEffect(downloadProgress) { + if (downloadProgress == null) currentDownloadingId = null + } + + Text( + text = stringResource(R.string.text_available_dictionaries), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(top = 16.dp, bottom = 8.dp) + ) + + Column { + files.forEach { fileInfo -> + val isDownloaded = downloadedDictionaries.any { it.id == fileInfo.id } + // Using ViewModel's getDictionaryUiItems for pre-calculated values + val uiItems = dictionaryViewModel.getDictionaryUiItems(files, downloadedDictionaries) + val uiItem = uiItems.find { it.fileInfo.id == fileInfo.id } + + DictionaryManagerItem( + fileInfo = fileInfo, + isDownloaded = uiItem?.isDownloaded ?: isDownloaded, + hasUpdate = uiItem?.hasUpdate ?: false, + size = uiItem?.size ?: fileInfo.assets.sumOf { it.sizeBytes }, + downloadProgress = if (fileInfo.id == currentDownloadingId) downloadProgress else null, + isDownloading = isDownloading, + onDownload = { + currentDownloadingId = fileInfo.id + dictionaryViewModel.downloadDictionary(fileInfo) + }, + onUpdate = { + currentDownloadingId = fileInfo.id + dictionaryViewModel.downloadDictionary(fileInfo) + }, + onDelete = { dictionaryViewModel.deleteDictionary(fileInfo) } + ) + } + } +} + +@Composable +private fun OrphanedFilesList( + files: List, + dictionaryViewModel: DictionaryViewModel +) { + Text( + text = stringResource(R.string.label_orphaned_files), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(top = 16.dp, bottom = 8.dp) + ) + Text( + text = stringResource(R.string.text_these_files_exist_locally), + style = MaterialTheme.typography.bodySmall, + modifier = Modifier.padding(bottom = 8.dp) + ) + + Column { + files.forEach { fileInfo -> + OrphanedFileItem( + fileInfo = fileInfo, + size = dictionaryViewModel.getDictionarySize(fileInfo), + onDelete = { dictionaryViewModel.deleteOrphanedFile(fileInfo) } + ) + } + } +} diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryResultComponents.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryResultComponents.kt new file mode 100644 index 0000000..1d573b3 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryResultComponents.kt @@ -0,0 +1,478 @@ +package eu.gaudian.translator.view.dictionary + +import android.content.ClipData +import androidx.compose.animation.core.RepeatMode +import androidx.compose.animation.core.animateFloat +import androidx.compose.animation.core.infiniteRepeatable +import androidx.compose.animation.core.rememberInfiniteTransition +import androidx.compose.animation.core.tween +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.text.selection.SelectionContainer +import androidx.compose.material3.Button +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.platform.LocalClipboard +import androidx.compose.ui.platform.toClipEntry +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.DictionaryEntry +import eu.gaudian.translator.model.EntryPart +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.repository.DictionaryWordEntry +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.formatMarkdownText +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AutoResizeSingleLineText +import eu.gaudian.translator.view.composable.ClickableText +import eu.gaudian.translator.viewmodel.DictionaryViewModel +import kotlinx.coroutines.launch +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonPrimitive + +@Composable +fun DictionaryResultBreadcrumbs( + breadcrumbs: List, + navController: NavController +) { + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryResultComponents", "[Breadcrumb] DictionaryResultBreadcrumbs called with ${breadcrumbs.size} items: ${breadcrumbs.map { it.word }}") + + // Only show breadcrumbs if there are 2 or more entries (meaning there's something to navigate back to) + if (breadcrumbs.size >= 2) { + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryResultComponents", "[Breadcrumb] Rendering breadcrumbs: ${breadcrumbs.map { it.word }}") + LazyRow( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + items(breadcrumbs) { item -> + val isLast = item == breadcrumbs.last() + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryResultComponents", "[Breadcrumb] Rendering item: '${item.word}' (isLast: $isLast)") + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.clickable(enabled = !isLast) { + // Navigate back to this item by popping the back stack the required number of times + val index = breadcrumbs.indexOf(item) + if (index != -1) { + val stepsToPop = (breadcrumbs.size - 1) - index + repeat(stepsToPop) { + navController.popBackStack() + } + } + } + ) { + Text( + text = item.word, + style = MaterialTheme.typography.bodyMedium, + fontWeight = if (isLast) FontWeight.Bold else FontWeight.Normal, + color = if (isLast) MaterialTheme.colorScheme.onSurface else MaterialTheme.colorScheme.primary + ) + if (!isLast) { + Icon( + imageVector = AppIcons.ArrowRight, + contentDescription = null, + modifier = Modifier.size(16.dp), + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } + } + HorizontalDivider() + } else { + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryResultComponents", "[Breadcrumb] Breadcrumbs list has ${breadcrumbs.size} items - not rendering (need 2 or more for navigation)") + } +} + +@Composable +fun DictionaryResultEntryHeader( + entry: DictionaryEntry +) { + AutoResizeSingleLineText( + text = entry.word, + style = MaterialTheme.typography.displaySmall, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(top = 16.dp) + ) +} + +@Composable +fun DictionaryResultLocalEntriesSection( + localEntries: List, + dictionaryViewModel: DictionaryViewModel, + allLanguages: List, + isDeveloperModeEnabled: Boolean +) { + if (localEntries.isNotEmpty()) { + + localEntries.forEach { entry -> + + + + LocalWordEntryDisplay( + entry = entry, + dictionaryViewModel = dictionaryViewModel, + allLanguages = allLanguages, + expandable = localEntries.size>1 + ) + + HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) + } + WiktionaryContentAcknowledgment() + + // Developer mode: Show raw JSON of local dictionary entries + if (isDeveloperModeEnabled) { + DictionaryResultDeveloperJsonSection(localEntries) + } + } +} + +@Composable +fun WiktionaryContentAcknowledgment( + modifier: Modifier = Modifier, + wordUrl: String = "https://www.wiktionary.org/" +) { + + val licenseUrl = "https://creativecommons.org/licenses/by-sa/3.0/" + + val annotatedText = buildAnnotatedString { + append(stringResource(R.string.text_content_sourced_from)) + + // Wiktionary Link + pushStringAnnotation(tag = "URL", annotation = wordUrl) + withStyle( + style = SpanStyle( + color = MaterialTheme.colorScheme.primary, + textDecoration = TextDecoration.Underline + ) + ) { + append(stringResource(R.string.label_wiktionary)) + } + pop() + + append(". " + (stringResource(R.string.licensed_under) + " ")) + + // License Link + pushStringAnnotation(tag = "URL", annotation = licenseUrl) + withStyle( + style = SpanStyle( + color = MaterialTheme.colorScheme.primary, + textDecoration = TextDecoration.Underline + ) + ) { + @Suppress("HardCodedStringLiteral") + append("CC BY-SA 3.0") + } + pop() + append(".") + } + + Box( + modifier = modifier + .fillMaxWidth() + .padding(vertical = 8.dp), + contentAlignment = Alignment.Center + ) { + ClickableText( + text = annotatedText, + style = MaterialTheme.typography.bodySmall.copy( + textAlign = TextAlign.Center, + color = MaterialTheme.colorScheme.onSurfaceVariant + ), + ) + } +} + +@Preview(showBackground = true) +@Composable +fun WiktionaryAcknowledgmentPreview() { + MaterialTheme { + WiktionaryContentAcknowledgment() + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +fun DictionaryResultDeveloperJsonSection( + localEntries: List +) { + HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) + Text( + text = stringResource(R.string.label_developer_json), + style = MaterialTheme.typography.headlineSmall, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier.padding(bottom = 8.dp) + ) + + val clipboard = LocalClipboard.current + val scope = rememberCoroutineScope() + + Button( + onClick = { + val allJson = localEntries.joinToString("\n\n") { entry -> + "Entry ${entry.word} (${entry.langCode}):\n${entry.json}" + } + scope.launch { + val clipData = ClipData.newPlainText(allJson, allJson) + clipboard.setClipEntry(clipData.toClipEntry()) + } + Log.d("DictionaryResultDeveloperJsonSection", "Copied JSON to clipboard:\n$allJson") + }, + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 8.dp) + ) { + @Suppress("HardCodedStringLiteral") + Text(text = "Copy All JSON") + } + + localEntries.forEachIndexed { index, entry -> + // Log the JSON for debugging + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryResultScreen", "Local Dictionary Entry ${index + 1}: ${entry.json}") + + Card( + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 8.dp), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.3f)) + ) { + Column( + modifier = Modifier.padding(12.dp) + ) { + Text( + text = "Entry ${index + 1} - ${entry.word} (${entry.langCode})", + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.primary + ) + if (entry.pos != null) { + Text( + text = "POS: ${entry.pos}", + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + Spacer(modifier = Modifier.height(8.dp)) + SelectionContainer { + Text( + text = entry.json, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurface + ) + } + } + } + } +} + +// Keep the existing components that are already well-structured +@Composable +fun GeneratingAnimation() { + @Suppress("HardCodedStringLiteral") val infiniteTransition = rememberInfiniteTransition(label = "pulsing") + @Suppress("HardCodedStringLiteral") val alpha by infiniteTransition.animateFloat( + initialValue = 0.3f, + targetValue = 1f, + animationSpec = infiniteRepeatable( + animation = tween(1000), + repeatMode = RepeatMode.Reverse + ), + label = "alpha" + ) + + Card( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 8.dp), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.3f)) + ) { + Row( + modifier = Modifier + .padding(16.dp) + .fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center + ) { + Icon( + imageVector = AppIcons.Refresh, // Or a brain icon if available + contentDescription = null, + modifier = Modifier + .size(24.dp) + .padding(end = 8.dp) + .alpha(alpha), + tint = MaterialTheme.colorScheme.primary + ) + Text( + text = stringResource(R.string.text_contacting_ai), + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier.alpha(alpha) + ) + } + } +} + +@Composable +fun DefinitionPart(part: EntryPart) { + + AppCard( + modifier = Modifier.fillMaxWidth(), + expandable = part.content.toString().length > 250, + initiallyExpanded = true, + title = part.title, + icon = AppIcons.AI + ) { + Column( + modifier = Modifier.padding(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + + // Safely extraction logic + val contentText = remember(part.content) { + try { + when (val contentElement = part.content) { + is JsonPrimitive -> contentElement.content + is JsonArray -> contentElement.joinToString(separator = "\n") { element -> + // Check if the element inside the array is actually a primitive + if (element is JsonPrimitive) { + "• ${element.content}" + } else { + // If it's an Object or Array, convert to string safely instead of crashing + "• $element" + } + } + // Fallback for JsonObject or other top-level types + else -> contentElement.toString() + } + } catch (e: Exception) { + // Ultimate fallback if something else goes wrong during parsing + part.content.toString() + } + } + + SelectionContainer { + Text( + text = formatMarkdownText(contentText), + style = MaterialTheme.typography.bodyLarge, + lineHeight = MaterialTheme.typography.bodyLarge.lineHeight + ) + } + } + } +} + + + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun DictionaryResultBreadcrumbsPreview() { + val mockBreadcrumbs = listOf( + BreadcrumbItem("Word1", 1), + BreadcrumbItem("Word2", 2), + BreadcrumbItem("Current", 3) + ) + DictionaryResultBreadcrumbs( + breadcrumbs = mockBreadcrumbs, + navController = rememberNavController() + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun DictionaryResultEntryHeaderPreview() { + val mockEntry = DictionaryEntry( + id = 1, + word = "Example", + languageCode = 1, + definition = emptyList(), + languageName = "English", + ) + DictionaryResultEntryHeader( + entry = mockEntry + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun DictionaryResultDeveloperJsonSectionPreview() { + val mockEntry = DictionaryWordEntry( + word = "Example", + langCode = "en", + pos = "noun", + json = """{"word": "example", "pos": "noun", "definition": "something that is typical"}""" + ) + val mockEntries = listOf(mockEntry) + + DictionaryResultDeveloperJsonSection( + localEntries = mockEntries + ) +} + +@Preview(showBackground = true) +@Composable +fun GeneratingAnimationPreview() { + GeneratingAnimation() +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun DefinitionPartPreview() { + val mockPart = EntryPart( + title = "Definition", + content = JsonPrimitive("A word or phrase used to describe something") + ) + + DefinitionPart(part = mockPart) +} + +// Data classes for the refactored components +data class EntryData( + val entry: DictionaryEntry, + val language: Language? +) + +data class BreadcrumbItem( + val word: String, + val entryId: Int +) \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryResultScreen.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryResultScreen.kt new file mode 100644 index 0000000..bcbd479 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryResultScreen.kt @@ -0,0 +1,442 @@ +package eu.gaudian.translator.view.dictionary + +import android.content.Context +import androidx.annotation.StringRes +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.DictionaryEntry +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.repository.DictionaryWordEntry +import eu.gaudian.translator.utils.TextToSpeechHelper +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppFabMenu +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.FabMenuItem +import eu.gaudian.translator.view.composable.TabItem +import eu.gaudian.translator.view.composable.TabbedTopAppBar +import eu.gaudian.translator.view.dialogs.AddVocabularyDialog +import eu.gaudian.translator.viewmodel.DictionaryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.SettingsViewModel +import eu.gaudian.translator.viewmodel.StatusViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.coroutines.launch + +enum class DictionaryResultTab( + @param:StringRes val titleRes: Int, + val icon: ImageVector +) { + AI(R.string.tab_ai_definition, AppIcons.Robo), + Local(R.string.tab_downloaded, AppIcons.Download) +} + +data class DictionaryTabUi( + val type: DictionaryResultTab, + override val title: String, + override val icon: ImageVector +) : TabItem + +@Composable +fun DictionaryResultScreen( + navController: NavController, + entryId: Int, +) { + val activity = LocalContext.current.findActivity() + val dictionaryViewModel: DictionaryViewModel = hiltViewModel(viewModelStoreOwner = activity) + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val vocabularyViewModel: VocabularyViewModel = viewModel(viewModelStoreOwner = activity) + val statusViewModel: StatusViewModel = viewModel() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + + // State Collection + val searchHistory by dictionaryViewModel.searchHistoryEntries.collectAsState() + val currentEntry = remember(searchHistory, entryId) { searchHistory.find { it.id == entryId } } + val isDeveloperModeEnabled by settingsViewModel.isDeveloperModeEnabled.collectAsState() + val developerEntry by dictionaryViewModel.developerCurrentEntry.collectAsState() + val allLanguages by languageViewModel.allLanguages.collectAsState() + val entryToNavigate by dictionaryViewModel.navigateToEntry.collectAsState() + val generatingEntryIds by dictionaryViewModel.generatingEntryIds.collectAsState() + val breadcrumbs by dictionaryViewModel.breadcrumbs.collectAsState() + + // Using ViewModel's StateFlows for entryData and localEntries + val entryData by dictionaryViewModel.currentEntryData.collectAsState() + val isTtsAvailable by dictionaryViewModel.isTtsAvailable.collectAsState() + val localEntries by dictionaryViewModel.localEntries.collectAsState() + + var showAddVocabularyDialog by remember { mutableStateOf(false) } + + val context = LocalContext.current + val scope = rememberCoroutineScope() + + // Update entryData using ViewModel's method + LaunchedEffect(currentEntry) { + if (currentEntry != null) { + val language = languageViewModel.getLanguageById(currentEntry.languageCode) + val ttsAvailable = TextToSpeechHelper.isPlayable(context, language) + dictionaryViewModel.updateCurrentEntryData(currentEntry, language, ttsAvailable) + } + } + + // Update breadcrumbs using ViewModel's method + var lastBreadcrumbEntryId by remember { mutableStateOf(null) } + LaunchedEffect(entryData) { + entryData?.let { data -> + if (data.entry.id != lastBreadcrumbEntryId) { + lastBreadcrumbEntryId = data.entry.id + dictionaryViewModel.updateBreadcrumbs(data.entry) + } + } + } + + // Handle Entry ID direct lookup using ViewModel + LaunchedEffect(entryId) { + val entry = dictionaryViewModel.getDictionaryEntryById(entryId) + if (entry != null) { + val language = languageViewModel.getLanguageById(entry.languageCode) + val ttsAvailable = TextToSpeechHelper.isPlayable(context, language) + dictionaryViewModel.updateCurrentEntryData(entry, language, ttsAvailable) + } + } + + // Developer Entry Update + LaunchedEffect(developerEntry) { + developerEntry?.let { devEntry -> + val language = languageViewModel.getLanguageById(devEntry.languageCode) + val ttsAvailable = TextToSpeechHelper.isPlayable(context, language) + dictionaryViewModel.updateCurrentEntryData(devEntry, language, ttsAvailable) + } + } + + // Navigation Effect + LaunchedEffect(entryToNavigate) { + entryToNavigate?.let { targetEntry -> + dictionaryViewModel.setInternalNavigation() + @Suppress("HardCodedStringLiteral") + navController.navigate("dictionary_result/${targetEntry.id}") + dictionaryViewModel.onNavigationDone() + } + } + + // Load local entries using ViewModel's method + LaunchedEffect(entryData) { + entryData?.let { data -> + val langCode = data.language?.code + if (langCode != null) { + dictionaryViewModel.loadLocalEntriesForEntry(data.entry, langCode) + } else { + dictionaryViewModel.clearLocalEntries() + } + } ?: run { + dictionaryViewModel.clearLocalEntries() + } + } + + DisposableEffect(entryId) { + onDispose { + dictionaryViewModel.clearCurrentEntryId() + // Only clear breadcrumbs if this is truly leaving the screen + // (not just internal navigation to a new entry) + dictionaryViewModel.onLeavingDictionaryResultScreen() + } + } + + val isGenerating = entryData?.entry?.id?.let { generatingEntryIds.contains(it) } == true + + // Prepare FAB Items + val fabItems = remember(entryData, isGenerating, isTtsAvailable, isDeveloperModeEnabled) { + createFabItems( + entryData = entryData, + isGenerating = isGenerating, + isTtsAvailable = isTtsAvailable, + isDeveloperModeEnabled = isDeveloperModeEnabled, + onCycleDev = { lang -> dictionaryViewModel.developerCycleLocalDictionaryEntries(lang) }, + onRegenerate = { data -> + scope.launch { + dictionaryViewModel.performSearch(data.entry.word, data.language!!, regenerate = true) + } + }, + onAddToVocab = { showAddVocabularyDialog = true }, + onReadAloud = { data -> + scope.launch { + val voice = settingsViewModel.getTtsVoiceForLanguage(data.language!!.code, data.language.region) + TextToSpeechHelper.speakOut(context, data.entry.word, data.language, voice) + } + }, + context = context + ) + } + + DictionaryResultContent( + entryData = entryData, + localEntries = localEntries, + breadcrumbs = breadcrumbs.map { BreadcrumbItem(it.word, it.id) }, + isGenerating = isGenerating, + isDeveloperModeEnabled = isDeveloperModeEnabled, + fabItems = fabItems, + navController = navController, + dictionaryViewModel = dictionaryViewModel, + allLanguages = allLanguages, + onNavigateBack = { navController.popBackStack() } + ) + + if (showAddVocabularyDialog) { + entryData?.let { + AddVocabularyDialog( + statusViewModel = statusViewModel, + languageViewModel = languageViewModel, + vocabularyViewModel = vocabularyViewModel, + initialWord = it.entry.word, + onDismissRequest = { + @Suppress("AssignedValueIsNeverRead") + showAddVocabularyDialog = false + } + ) + } + } +} + +// Extracted Helper for FAB creation +private fun createFabItems( + entryData: DictionaryViewModel.EntryData?, + isGenerating: Boolean, + isTtsAvailable: Boolean, + isDeveloperModeEnabled: Boolean, + onCycleDev: (Language) -> Unit, + onRegenerate: (DictionaryViewModel.EntryData) -> Unit, + onAddToVocab: () -> Unit, + onReadAloud: (DictionaryViewModel.EntryData) -> Unit, + context: Context, +): List { + if (entryData == null) return emptyList() + val items = mutableListOf() + + if (isDeveloperModeEnabled && entryData.language != null) { + items.add(FabMenuItem(context.getString(R.string.label_auto_cycle_dev), AppIcons.Settings) { onCycleDev(entryData.language) }) + } + + if (!isGenerating) { + items.add(FabMenuItem(context.getString(R.string.label_regenerate), AppIcons.Refresh) { onRegenerate(entryData) }) + } + + items.add(FabMenuItem(context.getString(R.string.label_add_to_dictionary), AppIcons.AddTo) { onAddToVocab() }) + + if (isTtsAvailable) { + items.add(FabMenuItem(context.getString(R.string.label_read_aloud), AppIcons.Speech) { onReadAloud(entryData) }) + } + return items +} + +@Composable +fun DictionaryResultContent( + entryData: DictionaryViewModel.EntryData?, + localEntries: List, + breadcrumbs: List, + isGenerating: Boolean, + isDeveloperModeEnabled: Boolean, + fabItems: List, + navController: NavController, + dictionaryViewModel: DictionaryViewModel, + allLanguages: List, + onNavigateBack: () -> Unit +) { + val hasAiResult = entryData?.entry?.definition?.isNotEmpty() == true || isGenerating + val hasLocalResult = localEntries.isNotEmpty() + val showTabs = hasAiResult && hasLocalResult + + val aiTabTitle = stringResource(DictionaryResultTab.AI.titleRes) + val localTabTitle = stringResource(DictionaryResultTab.Local.titleRes) + + val tabs = remember(aiTabTitle, localTabTitle) { + listOf( + DictionaryTabUi(DictionaryResultTab.AI, aiTabTitle, DictionaryResultTab.AI.icon), + DictionaryTabUi(DictionaryResultTab.Local, localTabTitle, DictionaryResultTab.Local.icon) + ) + } + + var selectedTab by remember { mutableStateOf(tabs.first()) } + LaunchedEffect(showTabs) { if (!showTabs) selectedTab = tabs.first() } + + AppScaffold( + topBar = { + if (showTabs) { + TabbedTopAppBar( + tabs = tabs, + selectedTab = selectedTab, + onTabSelected = { selectedTab = it }, + onNavigateBack = onNavigateBack + ) + } else { + DictionarySimpleTopBar( + word = entryData?.entry?.word, + languageName = entryData?.language?.name, + onNavigateBack = onNavigateBack + ) + } + }, + floatingActionButton = { + if (fabItems.isNotEmpty()) { + AppFabMenu(items = fabItems) + } + } + ) { paddingValues -> + entryData?.let { data -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + ) { + val showAi = !showTabs || selectedTab.type == DictionaryResultTab.AI + val showLocal = (!showTabs && hasLocalResult) || (showTabs && selectedTab.type == DictionaryResultTab.Local) + + if (showLocal) { + DictionaryResultBreadcrumbs( + breadcrumbs = breadcrumbs, + navController = navController + ) + } + + DefinitionBody( + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 20.dp) + .verticalScroll(rememberScrollState()), + entry = data.entry, + localEntries = localEntries, + dictionaryViewModel = dictionaryViewModel, + allLanguages = allLanguages, + isGenerating = isGenerating, + isDeveloperModeEnabled = isDeveloperModeEnabled, + showAiContent = showAi, + showLocalContent = showLocal + ) + } + } + } +} + +@Composable +fun DictionarySimpleTopBar( + word: String?, + languageName: String?, + onNavigateBack: () -> Unit +) { + AppTopAppBar( + title = { + Column { + Text( + text = word ?: stringResource(R.string.text_loading_3d), + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + languageName?.let { + Text( + text = it, + style = MaterialTheme.typography.bodyMedium, + fontStyle = FontStyle.Italic + ) + } + } + }, + navigationIcon = { + IconButton(onClick = onNavigateBack) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + }, + actions = {} + ) +} + +@Composable +fun DefinitionBody( + modifier: Modifier = Modifier, + entry: DictionaryEntry, + localEntries: List, + dictionaryViewModel: DictionaryViewModel, + allLanguages: List, + isGenerating: Boolean, + isDeveloperModeEnabled: Boolean, + showAiContent: Boolean = true, + showLocalContent: Boolean = true +) { + Column( + modifier = modifier, + verticalArrangement = Arrangement.spacedBy(24.dp) + ) { + if (showAiContent) { + AiDefinitionsSection( + definitionParts = entry.definition, + isGenerating = isGenerating, + hasOtherContent = showLocalContent + ) + } + + if (showLocalContent) { + DictionaryResultLocalEntriesSection( + localEntries = localEntries, + dictionaryViewModel = dictionaryViewModel, + allLanguages = allLanguages, + isDeveloperModeEnabled = isDeveloperModeEnabled + ) + } + + if (isGenerating && entry.definition.isNotEmpty() && showAiContent) { + GeneratingAnimation() + } + + Spacer(modifier = Modifier.height(16.dp)) + } +} + +@Composable +private fun AiDefinitionsSection( + definitionParts: List, + isGenerating: Boolean, + hasOtherContent: Boolean +) { + if (definitionParts.isNotEmpty()) { + definitionParts.forEach { part -> + DefinitionPart(part = part) + } + } else if (isGenerating) { + GeneratingAnimation() + } else if (!hasOtherContent) { + Text( + text = stringResource(R.string.text_no_data_available), + style = MaterialTheme.typography.bodyLarge, + fontStyle = FontStyle.Italic, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } +} diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryScreen.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryScreen.kt new file mode 100644 index 0000000..452eeab --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryScreen.kt @@ -0,0 +1,45 @@ +package eu.gaudian.translator.view.dictionary + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.viewmodel.DictionaryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel + +@Composable +fun DictionaryScreen( + navController: NavController, + onEntryClick: (eu.gaudian.translator.model.DictionaryEntry) -> Unit = {}, + dictionaryViewModel: DictionaryViewModel, + languageViewModel: LanguageViewModel, + onNavigateToOptions: () -> Unit +) { + // Use the new refactored component + DictionaryScreenContent( + navController = navController, + onEntryClick = onEntryClick, + dictionaryViewModel = dictionaryViewModel, + languageViewModel = languageViewModel, + onNavigateToOptions = onNavigateToOptions + ) +} + +@Preview +@Composable +fun DictionaryScreenPreview() { + val activity = androidx.compose.ui.platform.LocalContext.current.findActivity() + val dictionaryViewModel: DictionaryViewModel = viewModel() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + + DictionaryScreen( + navController = rememberNavController(), + onEntryClick = {}, + dictionaryViewModel = dictionaryViewModel, + languageViewModel = languageViewModel, + onNavigateToOptions = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryScreenContent.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryScreenContent.kt new file mode 100644 index 0000000..56a308d --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryScreenContent.kt @@ -0,0 +1,2 @@ +package eu.gaudian.translator.view.dictionary + diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryTableComponents.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryTableComponents.kt new file mode 100644 index 0000000..4a7f537 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/DictionaryTableComponents.kt @@ -0,0 +1,257 @@ +package eu.gaudian.translator.view.dictionary + +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AutoResizeSingleLineText + +// A shared constant for consistency across the app +val UnifiedCornerShape = RoundedCornerShape(16.dp) + +@Composable +fun DictionaryTableCard( + items: List, + modifier: Modifier = Modifier, + cornerRadius: Dp = 16.dp, // Modernized radius + maxRowsBeforeCollapse: Int = 6, + headerContent: @Composable RowScope.() -> Unit, + rowContent: @Composable RowScope.(T) -> Unit +) { + val maxDataRows = maxRowsBeforeCollapse - 1 + val isCollapsible = items.size > maxDataRows + var isExpanded by remember { mutableStateOf(false) } + + val visibleItems = if (isCollapsible && !isExpanded) items.take(maxDataRows) else items + + Card( + modifier = modifier + .fillMaxWidth() + .animateContentSize(), + shape = RoundedCornerShape(cornerRadius), + // Switch to a filled surface variant for a modern "block" look, removing borders + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surfaceContainerLow + ), + elevation = CardDefaults.cardElevation(defaultElevation = 0.dp) + ) { + Column { + // Header with distinct background + Row( + modifier = Modifier + .fillMaxWidth() + .background(MaterialTheme.colorScheme.primaryContainer.copy(alpha = 0.4f)) + .padding(horizontal = 16.dp, vertical = 12.dp), + verticalAlignment = Alignment.CenterVertically, + content = headerContent + ) + + // Rows + visibleItems.forEachIndexed { index, item -> + Column( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 12.dp) + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + content = { rowContent(item) } + ) + } + // Subtle divider between rows, but not after the last one unless footer exists + if (index < visibleItems.lastIndex || isCollapsible) { + HorizontalDivider( + color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.3f), + modifier = Modifier.padding(horizontal = 16.dp) + ) + } + } + + // Footer + if (isCollapsible) { + DictionaryTableFooter( + isExpanded = isExpanded, + remainingCount = items.size - maxDataRows, + onToggle = { isExpanded = !isExpanded } + ) + } + } + } +} + +@Composable +fun DictionaryTableFooter( + isExpanded: Boolean, + remainingCount: Int, + onToggle: () -> Unit +) { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { onToggle() } + .padding(12.dp), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = if (isExpanded) stringResource(R.string.label_show_less) else stringResource( + R.string.label_show_2d_more, + remainingCount + ), + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.primary, + fontWeight = FontWeight.Bold + ) + Spacer(modifier = Modifier.width(4.dp)) + Icon( + imageVector = if (isExpanded) AppIcons.ArrowDropUp else AppIcons.ArrowDropDown, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(16.dp) + ) + } +} + +// --- Unchanged Layout Helpers (Same as previous step) --- + +@Composable +fun DictionaryTableHeaderRow( + modifier: Modifier = Modifier, + content: @Composable RowScope.() -> Unit +) { + Row( + modifier = modifier + .fillMaxWidth() + .background(MaterialTheme.colorScheme.surfaceVariant) + .padding(8.dp), + verticalAlignment = Alignment.CenterVertically, + content = content + ) +} + +@Composable +fun DictionaryTableRow( + modifier: Modifier = Modifier, + showDivider: Boolean = true, + content: @Composable RowScope.() -> Unit +) { + if (showDivider) { + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + } + Row( + modifier = modifier + .fillMaxWidth() + .padding(8.dp), + verticalAlignment = Alignment.CenterVertically, + content = content + ) +} + +@Composable +fun RowScope.DictionaryTableHeaderCell( + text: String, + modifier: Modifier = Modifier, + weight: Float = 1f +) { + Text( + text = text.uppercase(), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + fontWeight = FontWeight.Bold, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + modifier = modifier.weight(weight) + ) +} + +@Composable +fun RowScope.DictionaryTableCell( + text: String, + modifier: Modifier = Modifier, + weight: Float = 1f, + isItalic: Boolean = false +) { + val baseStyle = MaterialTheme.typography.bodyMedium + val finalStyle = if (isItalic) baseStyle.copy(fontStyle = FontStyle.Italic) else baseStyle + + AutoResizeSingleLineText( + text = text, + style = finalStyle, + modifier = modifier.weight(weight), + color = MaterialTheme.colorScheme.onSurface + ) +} + + +// Simple data class for preview purposes +data class WordEntry(val word: String, val translation: String, val type: String) + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun DictionaryTableCardCollapsiblePreview() { + // Define column weights + val w1 = .35f; val w2 = .35f; val w3 = .3f + + // Create a list with 6 items (Header + 6 = 7 lines total -> Should Collapse) + val entries = listOf( + WordEntry("hello", "hola", "noun"), + WordEntry("world", "mundo", "noun"), + WordEntry("cat", "gato", "noun"), // Item 3 (Line 4) + WordEntry("dog", "perro", "noun"), // Item 4 (Line 5) -> Hidden + WordEntry("red", "rojo", "adj"), + WordEntry("blue", "azul", "adj") + ) + + Column(modifier = Modifier.padding(16.dp)) { + Text("Collapsible Table (Limit: 4 lines)", style = MaterialTheme.typography.titleMedium) + Spacer(modifier = Modifier.height(8.dp)) + + DictionaryTableCard( + items = entries, + maxRowsBeforeCollapse = 7, // Header + items + headerContent = { + DictionaryTableHeaderCell("Word", weight = w1) + DictionaryTableHeaderCell("Translation", weight = w2) + DictionaryTableHeaderCell("Type", weight = w3) + } + ) { item -> + // This block runs for every item in the list + DictionaryTableCell(item.word, weight = w1) + DictionaryTableCell(item.translation, weight = w2) + DictionaryTableCell(item.type, weight = w3, isItalic = true) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/EtymologyResultScreen.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/EtymologyResultScreen.kt new file mode 100644 index 0000000..07caac2 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/EtymologyResultScreen.kt @@ -0,0 +1,268 @@ +package eu.gaudian.translator.view.dictionary + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.EtymologyData +import eu.gaudian.translator.model.EtymologyStep +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.RelatedWord +import eu.gaudian.translator.utils.TextToSpeechHelper +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.viewmodel.DictionaryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.SettingsViewModel +import kotlinx.coroutines.launch + +@Composable +fun EtymologyResultScreen( + navController: NavController, + word: String, + languageCode: Int, +) { + val activity = LocalContext.current.findActivity() + val dictionaryViewModel: DictionaryViewModel = hiltViewModel(viewModelStoreOwner = activity) + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + val uiState by dictionaryViewModel.uiState.collectAsState() + + var etymologyData by remember { mutableStateOf(null) } + var language by remember { mutableStateOf(null) } + var isTtsAvailable by remember { mutableStateOf(false) } + + val context = LocalContext.current + val scope = rememberCoroutineScope() + + LaunchedEffect(word, languageCode) { + language = languageViewModel.getLanguageById(languageCode) + isTtsAvailable = TextToSpeechHelper.isPlayable(context, language) + + // Fetch etymology data + dictionaryViewModel.fetchEtymology(word, language!!) + } + + LaunchedEffect(uiState) { + if (!uiState.isLoading) { + etymologyData = dictionaryViewModel.etymologyData.value + } + } + + DisposableEffect(Unit) { + onDispose { + // Clear etymology data when leaving the screen + } + } + + AppScaffold( + topBar = { + AppTopAppBar( + title = { + Column { + Text( + text = word, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + language?.name?.let { + Text( + text = it, + style = MaterialTheme.typography.bodyMedium, + fontStyle = androidx.compose.ui.text.font.FontStyle.Italic + ) + } + } + }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + }, + actions = { + etymologyData?.let { data -> + if (isTtsAvailable) { + IconButton(onClick = { + scope.launch { + val voice = settingsViewModel.getTtsVoiceForLanguage((language?.code ?: 1).toString(), language?.region ?: "") + TextToSpeechHelper.speakOut(context, data.word, language!!, voice) + } + }) { + Icon(AppIcons.Speech, contentDescription = stringResource(R.string.cd_text_to_speech)) + } + } + IconButton( + onClick = { + // Refresh etymology + scope.launch { + dictionaryViewModel.fetchEtymology(word, language!!) + } + }, + enabled = !uiState.isLoading + ) { + if (uiState.isLoading) { + CircularProgressIndicator( + modifier = Modifier.size(24.dp), + strokeWidth = 2.5.dp + ) + } else { + Icon(AppIcons.Refresh, contentDescription = stringResource(R.string.cd_re_generate_definition)) + } + } + } + } + ) + } + ) { paddingValues -> + etymologyData?.let { data -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(horizontal = 20.dp) + .verticalScroll(rememberScrollState()) + ) { + EtymologyResult(data = data) + } + } ?: run { + // Loading state + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + CircularProgressIndicator( + modifier = Modifier.size(48.dp), + strokeWidth = 4.dp + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + text = stringResource(R.string.text_loading_3d), + style = MaterialTheme.typography.bodyLarge + ) + } + } + } +} + +@Composable +fun EtymologyResult(data: EtymologyData) { + Column( + modifier = Modifier.fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + Text( + text = stringResource(R.string.origin_of_, data.word), + style = MaterialTheme.typography.headlineMedium, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.primary + ) + data.timeline.reversed().forEach { step -> + AppCard(modifier = Modifier.fillMaxWidth()) { + Column(modifier = Modifier.padding(16.dp)) { + Text( + text = "${step.year} - ${step.language}", + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.primary + ) + Spacer(modifier = Modifier.height(8.dp)) + Text(text = step.description, style = MaterialTheme.typography.bodyLarge) + } + } + } + if (data.relatedWords.isNotEmpty()) { + Text( + text = stringResource(R.string.label_related_words), + style = MaterialTheme.typography.headlineSmall, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(top = 16.dp), + color = MaterialTheme.colorScheme.primary + ) + data.relatedWords.forEach { related -> + AppCard( + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text(text = related.word, fontWeight = FontWeight.SemiBold) + Text(text = related.language) + } + } + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun EtymologyResultPreview() { + val sampleEtymologyData = EtymologyData( + word = "example", + timeline = listOf( + EtymologyStep("1600s", "Latin", "From Latin 'exemplum'"), + EtymologyStep("1800s", "English", "Adopted into English") + ), + relatedWords = listOf( + RelatedWord("Latin", "exemplum"), + RelatedWord("French", "exemple") + ) + ) + EtymologyResult(data = sampleEtymologyData) +} + +@Suppress("HardCodedStringLiteral") +@Composable +@Preview +fun EtymologyResultScreenPreview() { + EtymologyResultScreen( + navController = rememberNavController(), + word = "example", + languageCode = 1 + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/EtymologyScreen.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/EtymologyScreen.kt new file mode 100644 index 0000000..a0bf8da --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/EtymologyScreen.kt @@ -0,0 +1,108 @@ +package eu.gaudian.translator.view.dictionary + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppOutlinedCard +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.DictionaryLanguageDropDown +import eu.gaudian.translator.viewmodel.DictionaryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel + +@Composable +fun EtymologyScreen( + navController: NavController, + dictionaryViewModel: DictionaryViewModel, + languageViewModel: LanguageViewModel, +) { + var searchQuery by remember { mutableStateOf("") } + val uiState by dictionaryViewModel.uiState.collectAsState() + + Column(modifier = Modifier.padding(16.dp)) { + AppOutlinedCard { + Column( + modifier = Modifier.padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + AppTextField( + value = searchQuery, + onValueChange = { searchQuery = it }, + label = { Text(stringResource(R.string.search_for_a_word_s_origin)) }, + modifier = Modifier.fillMaxWidth() + ) + Spacer(modifier = Modifier.height(8.dp)) + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + DictionaryLanguageDropDown( + languageViewModel = languageViewModel, + modifier = Modifier.weight(1f) + ) + AppButton( + onClick = { + val language = languageViewModel.selectedDictionaryLanguage.value + if (searchQuery.isNotBlank() && language != null) { + @Suppress("HardCodedStringLiteral") + navController.navigate("etymology_result/${searchQuery}/${language.code}") + } + }, + enabled = searchQuery.isNotBlank() && !uiState.isLoading, + modifier = Modifier.padding(start = 8.dp) + ) { + if (uiState.isLoading) { + CircularProgressIndicator( + modifier = Modifier.size(24.dp), + color = MaterialTheme.colorScheme.onPrimary, + strokeWidth = 2.dp + ) + } else { + Text(stringResource(R.string.cd_search)) + } + } + } + } + } + + + } +} + +@Preview +@Composable +fun EtymologyScreenPreview() { + val activity = LocalContext.current.findActivity() + val dictionaryViewModel: DictionaryViewModel = viewModel() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + EtymologyScreen( + navController = rememberNavController(), + dictionaryViewModel = dictionaryViewModel, + languageViewModel = languageViewModel + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/LocalWordEntryComponents.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/LocalWordEntryComponents.kt new file mode 100644 index 0000000..95b5d08 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/LocalWordEntryComponents.kt @@ -0,0 +1,1318 @@ +package eu.gaudian.translator.view.dictionary + +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.spring +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.selection.SelectionContainer +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SuggestionChip +import androidx.compose.material3.SuggestionChipDefaults +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateMapOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.BaselineShift +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.lifecycle.viewmodel.compose.viewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.grammar.DictionaryEntryData +import eu.gaudian.translator.model.grammar.EtymologyData +import eu.gaudian.translator.model.grammar.GrammaticalFeaturesData +import eu.gaudian.translator.model.grammar.Inflection +import eu.gaudian.translator.model.grammar.LanguageConfig +import eu.gaudian.translator.model.grammar.SenseData +import eu.gaudian.translator.model.grammar.UnifiedMorphology +import eu.gaudian.translator.model.grammar.UnifiedMorphologyParser +import eu.gaudian.translator.utils.dictionary.LocalDictionaryWordInfo +import eu.gaudian.translator.utils.dictionary.PartOfSpeechTranslator +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AutoResizeSingleLineText +import eu.gaudian.translator.viewmodel.DictionaryViewModel +import eu.gaudian.translator.viewmodel.LanguageConfigViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +// Main component that orchestrates all the sections +@Composable +fun RichLocalEntryDisplay( + word: String, + langCode: String, + pos: String?, + data: DictionaryEntryData, + localInfo: LocalDictionaryWordInfo? = null, + onWordClick: ((String, String) -> Unit)? = null, + dictionaryViewModel: DictionaryViewModel, + allLanguages: List, + expandable: Boolean = true, // Enables whole-entry collapsing + initiallyExpanded: Boolean = true // Default state +) { + val languageConfigViewModel: LanguageConfigViewModel = viewModel() + val allConfigs by languageConfigViewModel.configs.collectAsState() + val languageConfig = allConfigs[langCode] + + // State for the whole entry + var isEntryExpanded by remember { mutableStateOf(initiallyExpanded) } + + // Cache to store which words are clickable (exist in DB) + val clickableWordsCache = remember { mutableStateMapOf() } + + // Asynchronously check related words/translations + LaunchedEffect(localInfo, data) { + withContext(Dispatchers.IO) { + val wordsToCheck = mutableListOf>() + // 1. Gather Translations + localInfo?.translations?.forEach { wordsToCheck.add(it.languageCode to it.word) } + ?: data.translations.forEach { wordsToCheck.add(it.languageCode to it.word) } + // 2. Gather Relations + localInfo?.relatedWords?.forEach { wordsToCheck.add(langCode to it.word) } + ?: data.allRelatedWords.forEach { wordsToCheck.add(langCode to it.word) } + // 3. Batch Check + wordsToCheck.distinct().forEach { (lCode, w) -> + val targetLang = allLanguages.firstOrNull { it.code.equals(lCode, ignoreCase = true) } + val exists = if (targetLang != null) { + dictionaryViewModel.hasWordInDictionary(w, targetLang.code.lowercase()) + } else false + clickableWordsCache["$lCode:$w"] = exists + } + } + } + + val isWordClickableAsync: (String, String) -> Boolean = { lCode, w -> + clickableWordsCache["$lCode:$w"] == true + } + + // Outer Container + Column( + verticalArrangement = Arrangement.spacedBy(16.dp), + modifier = Modifier.animateContentSize(animationSpec = spring(stiffness = Spring.StiffnessMediumLow)) + ) { + + // --- PRIMARY BLOCK: Header + Definitions --- + Column(verticalArrangement = Arrangement.spacedBy(2.dp)) { + + // Header is always visible. It acts as the toggle if expandable is true. + LocalEntryHeaderSection( + word = word, + pos = pos, + data = data, + isExpanded = isEntryExpanded, + onHeaderClick = if (expandable) { { isEntryExpanded = !isEntryExpanded } } else null, + // Visual connection logic: + // If Expanded AND has senses: Flat bottom to connect to senses. + // Else (Collapsed OR no senses): Rounded bottom (standalone card). + shape = if (isEntryExpanded && data.senses.isNotEmpty()) RoundedCornerShape( + topStart = 24.dp, + topEnd = 24.dp, + bottomStart = 4.dp, + bottomEnd = 4.dp + ) else RoundedCornerShape(24.dp) + ) + + // Definitions appear only when expanded + if (isEntryExpanded && data.senses.isNotEmpty()) { + LocalEntrySensesSection( + data = data + ) + } + } + + // --- SECONDARY BLOCKS (Metadata) --- + // These only appear when the entry is expanded + if (isEntryExpanded) { + // 1. Grammar / Forms + if (languageConfig != null) { + LocalEntryGrammarSection( + word = word, + langCode = langCode, + pos = pos, + data = data, + languageConfig = languageConfig + ) + } + + // 2. Etymology + LocalEntryEtymologySection(data = data) + + // 3. Translations + LocalEntryTranslationsSection( + localInfo = localInfo, + data = data, + allLanguages = allLanguages, + isWordClickableAsync = isWordClickableAsync, + onWordClick = onWordClick + ) + + // 4. Relations + LocalEntryRelationsSection( + localInfo = localInfo, + data = data, + langCode = langCode, + allLanguages = allLanguages, + isWordClickableAsync = isWordClickableAsync, + onWordClick = onWordClick + ) + } + } +} + +/** + * A uniform expandable container for sections like Grammar, Etymology, etc. + */ +@Composable +fun ExpandableSectionCard( + title: String, + icon: ImageVector? = null, + initiallyExpanded: Boolean = false, + content: @Composable () -> Unit +) { + var isExpanded by remember { mutableStateOf(initiallyExpanded) } + + Card( + modifier = Modifier + .fillMaxWidth() + .animateContentSize(animationSpec = spring(stiffness = Spring.StiffnessMediumLow)), + shape = RoundedCornerShape(16.dp), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(1.dp) + ), + ) { + Column { + // Header Row + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { isExpanded = !isExpanded } + .padding(16.dp), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Row(verticalAlignment = Alignment.CenterVertically) { + if (icon != null) { + Icon( + imageVector = icon, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(20.dp) + ) + Spacer(modifier = Modifier.width(12.dp)) + } + Text( + text = title, + style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.Bold), + color = MaterialTheme.colorScheme.onSurface + ) + } + + Icon( + imageVector = if (isExpanded) AppIcons.ArrowDropUp else AppIcons.ArrowDropDown, + contentDescription = if (isExpanded) stringResource(R.string.label_collapse) else stringResource(R.string.label_expand), + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + + // Content + if (isExpanded) { + HorizontalDivider( + color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.5f), + modifier = Modifier.padding(horizontal = 16.dp) + ) + Box(modifier = Modifier.padding(16.dp)) { + content() + } + } + } + } +} + +@Composable +fun LocalEntryHeaderSection( + word: String, + pos: String?, + data: DictionaryEntryData, + shape: Shape = RoundedCornerShape(24.dp), + isExpanded: Boolean = true, + onHeaderClick: (() -> Unit)? = null +) { + Card( + modifier = Modifier + .fillMaxWidth() + .then( + if (onHeaderClick != null) Modifier.clickable { onHeaderClick() } else Modifier + ), + shape = shape, + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(4.dp) + ) + ) { + Column( + modifier = Modifier + .padding(20.dp) + .fillMaxWidth() + ) { + // Header Row: Word, POS, and Expand Arrow + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.Top // Align top to handle multiline words nicely + ) { + // Word and POS Column + Column(modifier = Modifier.weight(1f)) { + AutoResizeSingleLineText( + text = word, + color = MaterialTheme.colorScheme.onSurface, + style = MaterialTheme.typography.displaySmall.copy( + fontWeight = FontWeight.Bold, + letterSpacing = (-0.5).sp, + ) + ) + + if (!pos.isNullOrBlank()) { + Text( + text = PartOfSpeechTranslator.translatePos(pos), + style = MaterialTheme.typography.titleLarge, + fontStyle = FontStyle.Italic, + color = MaterialTheme.colorScheme.primary.copy(alpha = 0.9f) + ) + } + } + + // Expand Arrow (only if clickable) + if (onHeaderClick != null) { + Icon( + imageVector = if (isExpanded) AppIcons.ArrowDropUp else AppIcons.ArrowDropDown, + contentDescription = if (isExpanded) stringResource(R.string.label_collapse) else stringResource(R.string.label_expand), + modifier = Modifier + .padding(start = 16.dp) + .size(28.dp), + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + + HorizontalDivider( + modifier = Modifier.padding(vertical = 12.dp), + thickness = 0.5.dp, + color = MaterialTheme.colorScheme.outlineVariant + ) + + // Phonetics + val phonetics = data.phonetics + if (phonetics != null && (phonetics.ipa.isNotEmpty() || phonetics.variations.isNotEmpty())) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 4.dp), + verticalAlignment = Alignment.Top + ) { + Icon( + imageVector = AppIcons.Speech, + contentDescription = stringResource(R.string.label_pronunciation), + modifier = Modifier + .padding(top = 6.dp, end = 12.dp) + .size(20.dp), + tint = MaterialTheme.colorScheme.primary + ) + + FlowRow( + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + phonetics.ipa.forEach { ipaString -> + PhoneticChip(ipa = ipaString, tags = emptyList()) + } + phonetics.variations.forEach { variation -> + PhoneticChip(ipa = variation.ipa, tags = variation.rawTags) + } + } + } + } + + // Hyphenation + val hyphenation = data.hyphenation + if (hyphenation.isNotEmpty()) { + Text( + text = buildAnnotatedString { + withStyle(SpanStyle(fontWeight = FontWeight.Light)) { + append(stringResource(R.string.label_grammar_hyphenation) + " ") + } + append(hyphenation.joinToString(" • ")) + }, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(top = 12.dp) + ) + } + + // Grammatical Tags + val tagLabels = data.allTags + if (tagLabels.isNotEmpty()) { + FlowRow( + modifier = Modifier.padding(top = 16.dp), + horizontalArrangement = Arrangement.spacedBy(6.dp), + verticalArrangement = Arrangement.spacedBy(6.dp) + ) { + tagLabels.forEach { tag -> + SuggestionChip( + onClick = { /* No-op */ }, + label = { + Text( + tag, + style = MaterialTheme.typography.labelMedium, + fontWeight = FontWeight.Medium + ) + }, + shape = CircleShape, + border = BorderStroke( + 1.dp, + MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.5f) + ), + colors = SuggestionChipDefaults.suggestionChipColors( + containerColor = Color.Transparent + ), + ) + } + } + } + } + } +} + +// 2. Senses Section +@Composable +private fun LocalEntrySensesSection( + data: DictionaryEntryData +) { + val senses = data.senses + if (senses.isEmpty()) return + + Card( + shape = RoundedCornerShape( + topStart = 4.dp, + topEnd = 4.dp, + bottomStart = 24.dp, + bottomEnd = 24.dp + ), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(1.dp) + ), + modifier = Modifier.fillMaxWidth() + ) { + Column(modifier = Modifier.padding(horizontal = 20.dp, vertical = 16.dp)) { + Text( + text = stringResource(R.string.label_grammar_meanings), + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier.padding(bottom = 12.dp) + ) + + senses.forEachIndexed { index, senseData -> + SenseDisplay(index = index, senseData = senseData) + if (index < senses.lastIndex) { + Spacer(modifier = Modifier.height(16.dp)) + } + } + } + } +} + +// 3. Grammar Section +@Composable +fun GenericGridTable(grid: UnifiedMorphology.Grid) { + if (grid.rowLabels.isEmpty() || grid.colLabels.isEmpty()) return + + Column( + modifier = Modifier + .fillMaxWidth() + .border( + 1.dp, + MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.5f), + RoundedCornerShape(8.dp) + ) + .clip(RoundedCornerShape(8.dp)) + ) { + // Header Row + Row( + modifier = Modifier + .background(MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.3f)) + .padding(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + // Title in the top-left corner + AutoResizeSingleLineText( + text = grid.title, + style = MaterialTheme.typography.labelLarge, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colorScheme.secondary, + // CHANGED: Increased weight from 0.35f to 0.8f to give labels more space + modifier = Modifier.weight(0.8f) + ) + + grid.colLabels.forEach { colKey -> + Text( + text = colKey.replaceFirstChar { it.uppercase() }, + style = MaterialTheme.typography.labelMedium, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.weight(1f) + ) + } + } + + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // Data Rows + grid.rowLabels.forEachIndexed { index, rowKey -> + Row( + modifier = Modifier + .fillMaxWidth() + .background( + if (index % 2 == 1) MaterialTheme.colorScheme.surfaceVariant.copy( + alpha = 0.1f + ) else Color.Transparent + ) + .padding(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + // Row Label (e.g. Nominative, Genitive) + AutoResizeSingleLineText( + text = rowKey.replaceFirstChar { it.uppercase() }, + style = MaterialTheme.typography.bodySmall, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colorScheme.secondary, + // CHANGED: Must match the header weight (0.8f) to align columns + modifier = Modifier.weight(0.8f) + ) + + // Cells + val hasSingleColumn = grid.colLabels.size == 1 + grid.colLabels.forEach { colKey -> + val cellKey = if (hasSingleColumn) rowKey else "$rowKey|$colKey" + AutoResizeSingleLineText( + text = grid.cells[cellKey] ?: "—", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.weight(1f) + ) + } + } + } + } +} + +@Composable +private fun LocalEntryGrammarSection( + word: String, + langCode: String, + pos: String?, + data: DictionaryEntryData, + languageConfig: LanguageConfig +) { + val context = LocalContext.current + val morphology = remember(langCode, pos, data, languageConfig) { + UnifiedMorphologyParser.parse( + entry = data, + lemma = word, + pos = pos, + langCode = langCode, + config = languageConfig, + context = context + ) + } + + if (morphology != null) { + ExpandableSectionCard( + title = stringResource(R.string.label_grammar_inflections), + icon = AppIcons.MenuBook + ) { + when (morphology) { + is UnifiedMorphology.Verb -> { + val aux = morphology.auxiliary + if (aux != null) { + Text( + text = stringResource(R.string.label_grammar_auxiliary, aux), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.secondary, + modifier = Modifier.padding(bottom = 8.dp) + ) + } + UnifiedVerbTable(verbData = morphology) + } + + is UnifiedMorphology.Grid -> { + // FIX: Removed the standalone Text(text = morphology.title) + // The title is now handled inside GenericGridTable + GenericGridTable(grid = morphology) + } + + is UnifiedMorphology.ListForms -> { + InflectionTable(inflections = morphology.forms) + } + } + } + } +} + +// 4. Etymology Section +@Composable +private fun LocalEntryEtymologySection( + data: DictionaryEntryData +) { + val etymologyList = data.etymology.texts + + if (etymologyList.isNotEmpty()) { + ExpandableSectionCard( + title = stringResource(R.string.label_etymology), + icon = AppIcons.History + ) { + SelectionContainer { + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + etymologyList.forEach { rawText -> + val styledText = rememberEtymologyStyling(rawText) + + Text( + text = styledText, + style = MaterialTheme.typography.bodyMedium.copy( + fontFamily = FontFamily.Serif, + lineHeight = 24.sp, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + ) + } + } + } + } + } +} + +// 5. Translations Section +@Composable +private fun LocalEntryTranslationsSection( + localInfo: LocalDictionaryWordInfo?, + data: DictionaryEntryData, + allLanguages: List, + isWordClickableAsync: (String, String) -> Boolean, + onWordClick: ((String, String) -> Unit)? +) { + val hasTranslations = !localInfo?.translations.isNullOrEmpty() || data.translations.isNotEmpty() + if (!hasTranslations) return + + ExpandableSectionCard( + title = stringResource(R.string.label_translations), + icon = AppIcons.Translate + ) { + val infoTranslations = localInfo?.translations + + if (!infoTranslations.isNullOrEmpty()) { + val grouped = infoTranslations.groupBy { it.languageCode } + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + grouped.forEach { (lang, list) -> + Column { + Text( + text = getLanguageName(lang, allLanguages), + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier.padding(bottom = 4.dp) + ) + CollapsibleFlowRow(items = list, maxLinesToShow = 4) { item -> + TranslationChip( + label = buildString { + append(item.word) + item.sense?.takeIf { it.isNotBlank() }?.let { append(" ($it)") } + }, + isClickable = onWordClick != null && isWordClickableAsync(item.languageCode, item.word), + onClick = { onWordClick?.invoke(item.languageCode, item.word) } + ) + } + } + } + } + } else { + // Fallback to data.translations + val grouped = data.translations.groupBy { it.languageCode } + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + grouped.forEach { (lang, list) -> + Row(verticalAlignment = Alignment.Top) { + Text( + text = "${getLanguageName(lang, allLanguages)}: ", + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.width(90.dp) + ) + val words = list.joinToString(", ") { item -> + val w = item.word + val sense = item.sense + if (!sense.isNullOrBlank()) "$w ($sense)" else w + } + + SelectionContainer { + Text( + text = words, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } + } + } + } +} + +// 6. Relations Section +@Composable +private fun LocalEntryRelationsSection( + localInfo: LocalDictionaryWordInfo?, + data: DictionaryEntryData, + langCode: String, + allLanguages: List, + isWordClickableAsync: (String, String) -> Boolean, + onWordClick: ((String, String) -> Unit)? +) { + val hasRelations = !localInfo?.relatedWords.isNullOrEmpty() || data.relations.isNotEmpty() + if (!hasRelations) return + + ExpandableSectionCard( + title = stringResource(R.string.label_related_words), + icon = AppIcons.Share + ) { + val relationsInfo = localInfo?.relatedWords + if (!relationsInfo.isNullOrEmpty()) { + val grouped = relationsInfo.groupBy { it.relationType } + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + grouped.toSortedMap().forEach { (relationType, list) -> + Column { + Text( + text = relationType.replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() }, + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.tertiary, + modifier = Modifier.padding(bottom = 4.dp) + ) + CollapsibleFlowRow(items = list, maxLinesToShow = 3) { item -> + TranslationChip( + label = buildString { + append(item.word) + item.senseIndex?.takeIf { it.isNotBlank() }?.let { append(" ($it)") } + }, + isClickable = onWordClick != null && isWordClickableAsync(langCode, item.word), + onClick = { onWordClick?.invoke(langCode, item.word) } + ) + } + } + } + } + } else { + // Fallback for relations from data + val relations = data.relations + Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { + relations.entries.sortedBy { it.key }.forEach { (relationType, list) -> + if (list.isNotEmpty()) { + Row( + verticalAlignment = Alignment.Top, + modifier = Modifier.padding(vertical = 2.dp) + ) { + Text( + text = "${getLanguageName(relationType, allLanguages)}: ", + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier + .width(96.dp) + .padding(end = 4.dp) + ) + val words = list.joinToString(", ") { item -> + val w = item.word + val senseIndex = item.senseIndex + if (!senseIndex.isNullOrBlank()) "$w ($senseIndex)" else w + } + SelectionContainer { + Text( + text = words, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } + } + } + } + } +} + + +// --- HELPERS AND TABLES --- + + + +@Composable +fun UnifiedVerbTable(verbData: UnifiedMorphology.Verb) { + Column(verticalArrangement = Arrangement.spacedBy(16.dp)) { + verbData.tenses.forEach { (tenseLabel, forms) -> + if (forms.isNotEmpty()) { + Column { + Text( + text = tenseLabel, + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier.padding(bottom = 4.dp) + ) + + Column( + modifier = Modifier + .clip(RoundedCornerShape(8.dp)) + .background(MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.2f)) + ) { + forms.indices.forEach { i -> + val pronoun = verbData.pronouns.getOrNull(i) ?: "" + val form = forms[i] + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 12.dp, vertical = 8.dp) + ) { + Text( + text = pronoun, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.secondary, + modifier = Modifier.width(80.dp) + ) + Text( + text = form, + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.SemiBold, + color = MaterialTheme.colorScheme.onSurface + ) + } + if (i < forms.lastIndex) { + HorizontalDivider(color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.2f)) + } + } + } + } + } + } + } +} + +@Composable +fun InflectionTable(inflections: List) { + val visibleRows = inflections.filter { it.form.isNotBlank() } + if (visibleRows.isEmpty()) return + + Column( + modifier = Modifier + .fillMaxWidth() + .border( + 1.dp, + MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.5f), + RoundedCornerShape(8.dp) + ) + .clip(RoundedCornerShape(8.dp)) + ) { + visibleRows.forEachIndexed { index, item -> + Row( + modifier = Modifier + .fillMaxWidth() + .background( + if (index % 2 == 1) MaterialTheme.colorScheme.surfaceVariant.copy( + alpha = 0.1f + ) else Color.Transparent + ) + .padding(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = item.form, + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.SemiBold, + modifier = Modifier.weight(1f) + ) + Text( + text = item.tags.joinToString(", "), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.weight(2f) + ) + } + if (index < visibleRows.lastIndex) { + HorizontalDivider(color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.2f)) + } + } + } +} + +@Composable +fun SenseDisplay(index: Int, senseData: SenseData) { + // New feature: Collapsible examples + // If examples exist, we show a toggle instead of flooding the screen + val hasExamples = senseData.examples.isNotEmpty() + var areExamplesExpanded by remember { mutableStateOf(false) } + + Column(modifier = Modifier + .fillMaxWidth() + .animateContentSize()) { + Row(verticalAlignment = Alignment.Top) { + Text( + text = "${index + 1}.", + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.secondary, + modifier = Modifier.width(28.dp) + ) + + Column { + senseData.glosses.forEach { gloss -> + SelectionContainer { + Text( + text = gloss, + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurface + ) + } + } + + // Tags inline + if (senseData.tags.isNotEmpty()) { + FlowRow( + modifier = Modifier.padding(top = 4.dp), + horizontalArrangement = Arrangement.spacedBy(4.dp) + ) { + senseData.tags.forEach { tag -> + Text( + text = tag.uppercase(), + style = MaterialTheme.typography.labelSmall.copy(fontSize = 10.sp), + color = MaterialTheme.colorScheme.secondary + ) + } + } + } + + // Collapsible Examples Section + if (hasExamples) { + Spacer(modifier = Modifier.height(6.dp)) + + // Toggle Button + Row( + modifier = Modifier + .clickable { areExamplesExpanded = !areExamplesExpanded } + .padding(vertical = 4.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = if (areExamplesExpanded) stringResource(R.string.label_hide_examples) + else stringResource(R.string.label_show_examples), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.primary, + fontWeight = FontWeight.Bold + ) + Icon( + imageVector = if (areExamplesExpanded) AppIcons.ArrowDropUp else AppIcons.ArrowDropDown, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(16.dp) + ) + } + + // Actual Examples List + if (areExamplesExpanded) { + Column { + senseData.examples.forEach { ex -> + Row(modifier = Modifier.padding(vertical = 2.dp)) { + Box( + modifier = Modifier + .padding(top = 6.dp, end = 8.dp) + .size(4.dp) + .clip(CircleShape) + .background(MaterialTheme.colorScheme.primary.copy(alpha = 0.4f)) + ) + Text( + text = ex, + style = MaterialTheme.typography.bodyMedium, + fontStyle = FontStyle.Italic, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } + } + } + } + } + } +} + +@Composable +private fun TranslationChip( + label: String, + isClickable: Boolean, + onClick: () -> Unit +) { + Text( + text = label, + style = MaterialTheme.typography.bodyMedium, + color = if (isClickable) MaterialTheme.colorScheme.onPrimaryContainer else MaterialTheme.colorScheme.onSurface, + modifier = Modifier + .border( + 1.dp, + if (isClickable) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.outlineVariant, + RoundedCornerShape(8.dp) + ) + .background( + if (isClickable) MaterialTheme.colorScheme.primaryContainer else Color.Transparent, + RoundedCornerShape(8.dp) + ) + .padding(horizontal = 8.dp, vertical = 4.dp) + .then(if (isClickable) Modifier.clickable { onClick() } else Modifier) + ) +} + +@Composable +fun CollapsibleFlowRow( + items: List, + maxLinesToShow: Int, + modifier: Modifier = Modifier, + horizontalArrangement: Arrangement.Horizontal = Arrangement.spacedBy(8.dp), + verticalArrangement: Arrangement.Vertical = Arrangement.spacedBy(4.dp), + itemContent: @Composable (T) -> Unit +) { + var isExpanded by remember { mutableStateOf(false) } + // Simple heuristic + val shouldShowCollapseButton = items.size > maxLinesToShow * 3 + + Column(modifier = modifier) { + FlowRow( + horizontalArrangement = horizontalArrangement, + verticalArrangement = verticalArrangement + ) { + val itemsToShow = if (shouldShowCollapseButton && !isExpanded) { + items.take(maxLinesToShow * 3) + } else { + items + } + itemsToShow.forEach { item -> itemContent(item) } + } + + if (shouldShowCollapseButton) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 4.dp) + .clickable { isExpanded = !isExpanded }, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = if (isExpanded) stringResource(R.string.label_show_less) else stringResource(R.string.label_more), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.primary + ) + } + } + } +} + +@Composable +private fun PhoneticChip( + ipa: String, + tags: List, + modifier: Modifier = Modifier +) { + Surface( + modifier = modifier, + shape = RoundedCornerShape(8.dp), + color = MaterialTheme.colorScheme.secondaryContainer.copy(alpha = 0.3f), + border = BorderStroke(1.dp, MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.3f)) + ) { + Row( + modifier = Modifier.padding(horizontal = 8.dp, vertical = 6.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text( + text = "[$ipa]", + style = MaterialTheme.typography.bodyMedium.copy( + fontFamily = FontFamily.Monospace, + fontWeight = FontWeight.SemiBold + ), + color = MaterialTheme.colorScheme.onSecondaryContainer + ) + if (tags.isNotEmpty()) { + Row(horizontalArrangement = Arrangement.spacedBy(4.dp)) { + tags.forEach { tag -> + Text( + text = tag.uppercase(), + style = MaterialTheme.typography.labelSmall.copy(fontSize = 9.sp, fontWeight = FontWeight.Bold), + color = MaterialTheme.colorScheme.primary, + modifier = Modifier + .border( + 1.dp, + MaterialTheme.colorScheme.primary.copy(alpha = 0.3f), + RoundedCornerShape(4.dp) + ) + .padding(horizontal = 4.dp, vertical = 2.dp) + ) + } + } + } + } + } +} + +@Composable +private fun rememberEtymologyStyling(text: String): AnnotatedString { + val primaryColor = MaterialTheme.colorScheme.primary + val definitionColor = MaterialTheme.colorScheme.secondary + return remember(text) { + buildAnnotatedString { + @Suppress("HardCodedStringLiteral") val pattern = Regex("(\\^\\(→\\s*\\w+\\))|(‚[^‘]+‘)") + var lastIndex = 0 + pattern.findAll(text).forEach { match -> + append(text.substring(lastIndex, match.range.first)) + val value = match.value + if (value.startsWith("^")) { + val code = value.substringAfter("→").substringBefore(")").trim() + withStyle(SpanStyle(fontSize = 10.sp, color = primaryColor, fontWeight = FontWeight.Bold, baselineShift = BaselineShift.Superscript)) { + append(code.uppercase()) + } + } else { + withStyle(SpanStyle(fontStyle = FontStyle.Italic, color = definitionColor, fontWeight = FontWeight.Medium)) { + append(value) + } + } + lastIndex = match.range.last + 1 + } + append(text.substring(lastIndex)) + } + } +} + +private fun getLanguageName(languageCode: String, allLanguages: List): String { + return allLanguages.find { it.code.equals(languageCode, ignoreCase = true) }?.name + ?: languageCode +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +private fun LocalEntryHeaderSectionPreview() { + val testData = DictionaryEntryData( + translations = emptyList(), + relations = emptyMap(), + phonetics = null, + hyphenation = listOf("hel", "lo"), + etymology = EtymologyData(emptyList()), + senses = emptyList(), + grammaticalFeatures = GrammaticalFeaturesData(listOf("noun")), + grammaticalProperties = null, + pronunciation = emptyList(), + inflections = emptyList(), + forms = emptyList() + ) + MaterialTheme { + LocalEntryHeaderSection(word = "hello", pos = "noun", data = testData) + } +} + +// --- PREVIEWS --- + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "1. Header & Senses Combo") +@Composable +private fun HeaderAndSensesPreview() { + val testData = DictionaryEntryData( + translations = emptyList(), + relations = emptyMap(), + phonetics = null, + hyphenation = listOf("Hund"), + etymology = EtymologyData(emptyList()), + senses = listOf( + SenseData( + glosses = listOf("Haustier, dessen Vorfahre der Wolf ist"), + examples = listOf("Der Hund bellt laut.", "Vorsicht vor dem Hund!"), + tags = listOf("Zoologie"), + categories = emptyList(), + topics = emptyList(), + rawTags = emptyList(), + ), + SenseData( + glosses = listOf("gerissener, gemeiner, hinterhältiger Mensch"), + examples = emptyList(), + tags = listOf("pejorative", "figurative"), + categories = emptyList(), + topics = emptyList(), + rawTags = emptyList(), + ) + ), + grammaticalFeatures = GrammaticalFeaturesData(listOf("masculine", "singular")), + grammaticalProperties = null, + pronunciation = emptyList(), + inflections = emptyList(), + forms = emptyList(), + ) + + MaterialTheme { + Column(modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(2.dp)) { + LocalEntryHeaderSection( + word = "Hund", + pos = "noun", + data = testData, + shape = RoundedCornerShape( + topStart = 24.dp, + topEnd = 24.dp, + bottomStart = 4.dp, + bottomEnd = 4.dp + ) + ) + LocalEntrySensesSection(data = testData) + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "2. Grammar Section (Expanded)") +@Composable +private fun GrammarSectionPreview() { + // Mocking a Grid for Noun Declension + val mockGrid = UnifiedMorphology.Grid( + title = "Declension", + rowLabels = listOf("nominative", "genitive", "dative", "accusative"), + colLabels = listOf("singular", "plural"), + cells = mapOf( + "nominative|singular" to "der Hund", "nominative|plural" to "die Hunde", + "genitive|singular" to "des Hundes", "genitive|plural" to "der Hunde", + "dative|singular" to "dem Hund", "dative|plural" to "den Hunden", + "accusative|singular" to "den Hund", "accusative|plural" to "die Hunde" + ) + ) + + MaterialTheme { + Column(modifier = Modifier.padding(16.dp)) { + ExpandableSectionCard( + title = "Inflections", + icon = AppIcons.MenuBook, + initiallyExpanded = true + ) { + GenericGridTable(grid = mockGrid) + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "3. Etymology Section") +@Composable +private fun EtymologySectionPreview() { + val rawText = "aus ^(→ gmh) hunt < ^(→ ine) *kwon-, daher auch griechisch κύων (kýōn) (siehe auch zynisch), lateinisch canis (Hund)." + + MaterialTheme { + Column(modifier = Modifier.padding(16.dp)) { + ExpandableSectionCard( + title = "Etymology", + icon = AppIcons.History, + initiallyExpanded = true + ) { + SelectionContainer { + Text( + text = rememberEtymologyStyling(rawText), + style = MaterialTheme.typography.bodyMedium.copy( + fontFamily = FontFamily.Serif, + lineHeight = 24.sp, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + ) + } + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "4. Translations Section") +@Composable +private fun TranslationsSectionPreview() { + MaterialTheme { + Column(modifier = Modifier.padding(16.dp)) { + ExpandableSectionCard( + title = "Translations", + icon = AppIcons.Translate, // Ensure this icon exists or use a placeholder + initiallyExpanded = true + ) { + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + // English Group + Column { + Text( + text = "English", + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier.padding(bottom = 4.dp) + ) + FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + TranslationChip(label = "dog (1)", isClickable = true) {} + TranslationChip(label = "hound (1)", isClickable = true) {} + TranslationChip(label = "scoundrel (2)", isClickable = false) {} + } + } + + // French Group + Column { + Text( + text = "French", + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier.padding(bottom = 4.dp) + ) + FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + TranslationChip(label = "chien (1)", isClickable = true) {} + TranslationChip(label = "canaille (2)", isClickable = true) {} + } + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/LocalWordEntryDisplay.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/LocalWordEntryDisplay.kt new file mode 100644 index 0000000..2b177e0 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/LocalWordEntryDisplay.kt @@ -0,0 +1,103 @@ +package eu.gaudian.translator.view.dictionary + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.text.selection.SelectionContainer +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.repository.DictionaryWordEntry +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.dictionary.LocalDictionaryAccess +import eu.gaudian.translator.utils.formatJsonForDisplay +import eu.gaudian.translator.viewmodel.DictionaryViewModel +import kotlinx.coroutines.launch + +@Composable +fun LocalWordEntryDisplay( + entry: DictionaryWordEntry, + dictionaryViewModel: DictionaryViewModel, + allLanguages: List, + expandable: Boolean = false +) { + // State to hold the parsed data + val structuredData by dictionaryViewModel.getStructuredDictionaryDataState(entry).collectAsState() + val isLoading by dictionaryViewModel.getStructuredDictionaryDataLoading(entry).collectAsState() + val scope = rememberCoroutineScope() + + // TODO: Move `LocalDictionaryAccess.parseWordInfo` to ViewModel. + // It creates `localInfo` which is derived data, should be part of a UI State object. + val localInfo = remember(entry.json) { + try { + LocalDictionaryAccess.parseWordInfo(entry) + } catch (e: Exception) { + @Suppress("HardCodedStringLiteral") + Log.e("LocalDisplay", "Failed to parse LocalDictionaryWordInfo for ${entry.word}: ${e.message}") + null + } + } + + val onWordClick: (String, String) -> Unit = { targetLangCode, targetWord -> + val targetLang = allLanguages.firstOrNull { it.code.equals(targetLangCode, ignoreCase = true) } + scope.launch { + if (targetLang != null && dictionaryViewModel.hasWordInDictionary(targetWord, targetLang.code.lowercase())) { + dictionaryViewModel.performSearch( + query = targetWord, + language = targetLang, + regenerate = false, + useDownloaded = true, + isDrillDown = true + ) + } else { + @Suppress("HardCodedStringLiteral") + Log.d("LocalWordEntryDisplay", "Cannot navigate to word '$targetWord' - not available") + } + } + } + + if (isLoading) { + Box(modifier = Modifier.fillMaxWidth().padding(16.dp), contentAlignment = Alignment.Center) { + CircularProgressIndicator(modifier = Modifier.size(24.dp), strokeWidth = 2.dp) + } + } else { + structuredData?.let { data -> + RichLocalEntryDisplay( + word = entry.word, + langCode = entry.langCode, + pos = entry.pos, + data = data, + localInfo = localInfo, + onWordClick = onWordClick, + dictionaryViewModel = dictionaryViewModel, + allLanguages = allLanguages, + expandable = expandable + ) + } ?: run { + Column(modifier = Modifier.fillMaxWidth()) { + Text( + text = stringResource(R.string.label_raw_data_2d), + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.error + ) + SelectionContainer { + Text(text = formatJsonForDisplay(entry.json), style = MaterialTheme.typography.bodySmall) + } + } + } + } +} + diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/MainDictionaryScreen.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/MainDictionaryScreen.kt new file mode 100644 index 0000000..ba02cff --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/MainDictionaryScreen.kt @@ -0,0 +1,108 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.dictionary + +import androidx.activity.compose.LocalActivity +import androidx.compose.foundation.layout.Column +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.res.stringResource +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.ViewModelStoreOwner +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.LocalConnectionConfigured +import eu.gaudian.translator.view.NoConnectionScreen +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppTabLayout +import eu.gaudian.translator.view.composable.TabItem +import eu.gaudian.translator.view.settings.SettingsRoutes +import eu.gaudian.translator.viewmodel.CorrectionViewModel +import eu.gaudian.translator.viewmodel.DictionaryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel + + +@Composable +private fun getDictionaryTabs(): List { + return listOf( + DictionaryTab(stringResource(R.string.label_dictionary), AppIcons.Dictionary), + DictionaryTab(stringResource(R.string.title_corrector), AppIcons.Check) + ) +} +private data class DictionaryTab(override val title: String, override val icon: ImageVector) : + TabItem + +@Composable +fun MainDictionaryScreen( + navController: NavController + ) { + val viewModelStoreOwner = if (LocalInspectionMode.current) { + null + } else { + LocalActivity.current + } + + + val activity = LocalContext.current.findActivity() + + val dictionaryViewModel: DictionaryViewModel = hiltViewModel(viewModelStoreOwner = activity) + val correctionViewModel: CorrectionViewModel = viewModel(viewModelStoreOwner = viewModelStoreOwner as ViewModelStoreOwner) + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val dictionaryTabs = getDictionaryTabs() + + val connectionConfigured = LocalConnectionConfigured.current + + if (!connectionConfigured) { + NoConnectionScreen(onSettingsClick = {navController.navigate(SettingsRoutes.API_KEY)}) + return + } + + var selectedTab by remember { mutableStateOf(dictionaryTabs[0]) } + Column { + AppTabLayout( + tabs = dictionaryTabs, + selectedTab = selectedTab, + onTabSelected = { selectedTab = it } + ) + + when (selectedTab) { + dictionaryTabs[0] -> DictionaryScreen( + navController = navController, + dictionaryViewModel = dictionaryViewModel, + languageViewModel = languageViewModel, + onEntryClick = { entry -> + // Set flag indicating navigation is from external source (not DictionaryResultScreen) + dictionaryViewModel.setNavigatingFromDictionaryResult(false) + navController.navigate("dictionary_result/${entry.id}") + }, + onNavigateToOptions = { + navController.navigate("dictionary_options") + } + ) + dictionaryTabs[1] -> CorrectionScreen( + correctionViewModel = correctionViewModel, + languageViewModel = languageViewModel + ) + } + } +} + +@ThemePreviews +@Composable +fun DictionaryHostScreenPreview() { + val navController = rememberNavController() + + MainDictionaryScreen( + navController = navController, + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/MainDictionaryScreenComponents.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/MainDictionaryScreenComponents.kt new file mode 100644 index 0000000..97cfb7b --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/MainDictionaryScreenComponents.kt @@ -0,0 +1,746 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.dictionary + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Card +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExposedDropdownMenuAnchorType +import androidx.compose.material3.ExposedDropdownMenuBox +import androidx.compose.material3.ExposedDropdownMenuDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.ProgressIndicatorDefaults +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.DictionaryEntry +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.communication.FileInfo +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedButton +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.DictionaryLanguageDropDown +import eu.gaudian.translator.view.composable.OptionItemSwitch +import eu.gaudian.translator.viewmodel.DictionaryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch + +// Main Dictionary Screen Component +@Composable +fun DictionaryScreenContent( + navController: NavController, + onEntryClick: (DictionaryEntry) -> Unit, + dictionaryViewModel: DictionaryViewModel, + languageViewModel: LanguageViewModel, + onNavigateToOptions: () -> Unit +) { + // Navigation effect + val entryToNavigate by dictionaryViewModel.navigateToEntry.collectAsState() + LaunchedEffect(entryToNavigate) { + entryToNavigate?.let { entry -> + onEntryClick(entry) + dictionaryViewModel.onNavigationDone() + } + } + + LaunchedEffect(Unit) { + dictionaryViewModel.fetchManifest() + } + + var showHistorySheet by remember { mutableStateOf(false) } + val sheetState = rememberModalBottomSheetState() + var searchQuery by remember { mutableStateOf("") } + val searchHistory by dictionaryViewModel.searchHistoryEntries.collectAsState(initial = emptyList()) + val uiState by dictionaryViewModel.uiState.collectAsState() + val wordOfTheDay by dictionaryViewModel.wordOfTheDay.collectAsState() + val selectedLanguage by languageViewModel.selectedDictionaryLanguage.collectAsState() + var useDownloaded by remember { mutableStateOf(false) } + + // Update local dictionary availability when selected language changes + LaunchedEffect(selectedLanguage) { + selectedLanguage?.let { lang -> + dictionaryViewModel.updateLocalDictAvailability(lang.code.lowercase()) + } + } + + LazyColumn( + modifier = Modifier.padding(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + item { + DictionarySearchCard( + searchQuery = searchQuery, + onSearchQueryChange = { searchQuery = it }, + selectedLanguage = selectedLanguage, + languageViewModel = languageViewModel, + dictionaryViewModel = dictionaryViewModel, + useDownloaded = useDownloaded, + onUseDownloadedChange = { useDownloaded = it }, + uiState = uiState, + onNavigateToOptions = onNavigateToOptions, + onShowHistory = { showHistorySheet = true }, + onOriginClick = { + if (searchQuery.isNotBlank() && selectedLanguage != null) { + @Suppress("HardCodedStringLiteral") + navController.navigate("etymology_result/${searchQuery}/${selectedLanguage!!.nameResId}") + } + }, + onDefinitionClick = { + if (searchQuery.isNotBlank() && selectedLanguage != null) { + dictionaryViewModel.performSearch(searchQuery, selectedLanguage!!, useDownloaded = useDownloaded) + } + } + ) + } + + wordOfTheDay?.let { entry -> + item { + WordOfTheDayCard( + entry = entry, + isLoading = uiState.isLoading, + onEntryClick = { onEntryClick(it) }, + onRefresh = dictionaryViewModel::refreshWordOfTheDay + ) + } + } + + item { + DictionaryManagerSection( + dictionaryViewModel = dictionaryViewModel + ) + } + } + + if (showHistorySheet) { + ModalBottomSheet( + onDismissRequest = { showHistorySheet = false }, + sheetState = sheetState + ) { + DictionaryHistorySheetContent( + historyEntries = searchHistory, + onEntryClick = { + onEntryClick(it) + showHistorySheet = false + } + ) + } + } +} + +// --- Component 1: Search Card --- + +@Composable +fun DictionarySearchCard( + searchQuery: String, + onSearchQueryChange: (String) -> Unit, + selectedLanguage: Language?, + languageViewModel: LanguageViewModel, + dictionaryViewModel: DictionaryViewModel, + useDownloaded: Boolean, + onUseDownloadedChange: (Boolean) -> Unit, + uiState: DictionaryViewModel.DictionaryUiState, + onNavigateToOptions: () -> Unit, + onShowHistory: () -> Unit, + onOriginClick: () -> Unit, + onDefinitionClick: () -> Unit +) { + AppCard { + Column( + modifier = Modifier.padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + SearchFieldWithSuggestions( + searchQuery = searchQuery, + selectedLanguage = selectedLanguage, + onSearchQueryChange = onSearchQueryChange, + dictionaryViewModel = dictionaryViewModel + ) + + Spacer(modifier = Modifier.height(8.dp)) + + // Using ViewModel's isLocalDictAvailable StateFlow + val isLocalDictAvailable by dictionaryViewModel.isLocalDictAvailable.collectAsState() + + LanguageSelectionRow( + languageViewModel = languageViewModel, + hasDictionary = isLocalDictAvailable, + useDownloaded = useDownloaded, + onUseDownloadedChange = onUseDownloadedChange + ) + + Spacer(modifier = Modifier.height(8.dp)) + + SearchActionRow( + onNavigateToOptions = onNavigateToOptions, + onShowHistory = onShowHistory, + onOriginClick = onOriginClick, + onDefinitionClick = onDefinitionClick, + isSearchEnabled = searchQuery.isNotBlank(), + isLoading = uiState.isLoading + ) + } + } +} + +@Composable +private fun SearchFieldWithSuggestions( + searchQuery: String, + selectedLanguage: Language?, + onSearchQueryChange: (String) -> Unit, + dictionaryViewModel: DictionaryViewModel +) { + var expanded by remember { mutableStateOf(false) } + var suggestions by remember { mutableStateOf(emptyList()) } + val scope = rememberCoroutineScope() + var lastJob by remember { mutableStateOf(null) } + + // Observe suggestions from ViewModel + val vmSuggestions by dictionaryViewModel.suggestions.collectAsState() + LaunchedEffect(vmSuggestions) { + suggestions = vmSuggestions + expanded = suggestions.isNotEmpty() + } + + ExposedDropdownMenuBox( + expanded = expanded && suggestions.isNotEmpty(), + onExpandedChange = { expanded = !expanded } + ) { + AppTextField( + value = searchQuery, + onValueChange = { + onSearchQueryChange(it) + // Using ViewModel's fetchSuggestions with debounce + lastJob?.cancel() + lastJob = scope.launch { + delay(100) + if (searchQuery.length >= 3 && selectedLanguage != null) { + dictionaryViewModel.fetchSuggestions(searchQuery, selectedLanguage.code.lowercase(), 5) + } else { + dictionaryViewModel.clearSuggestions() + } + } + }, + label = { Text(stringResource(R.string.cd_search)) }, + modifier = Modifier + .fillMaxWidth() + .menuAnchor(ExposedDropdownMenuAnchorType.PrimaryEditable), + trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) } + ) + if (suggestions.isNotEmpty()) { + ExposedDropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false } + ) { + suggestions.forEach { word -> + DropdownMenuItem( + text = { Text(word) }, + onClick = { + dictionaryViewModel.setNavigatingFromDictionaryResult(false) + if (selectedLanguage != null) { + dictionaryViewModel.performSearch(word, selectedLanguage) + } + } + ) + } + } + } + } +} + +@Composable +private fun LanguageSelectionRow( + languageViewModel: LanguageViewModel, + hasDictionary: Boolean, + useDownloaded: Boolean, + onUseDownloadedChange: (Boolean) -> Unit +) { + Column { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + DictionaryLanguageDropDown( + languageViewModel = languageViewModel, + modifier = Modifier.weight(1f) + ) + } + if (hasDictionary) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + OptionItemSwitch( + title = stringResource(R.string.text_use_downloaded_dictionary), + checked = useDownloaded, + onCheckedChange = onUseDownloadedChange, + ) + } + } + } +} + +@Composable +private fun SearchActionRow( + onNavigateToOptions: () -> Unit, + onShowHistory: () -> Unit, + onOriginClick: () -> Unit, + onDefinitionClick: () -> Unit, + isSearchEnabled: Boolean, + isLoading: Boolean +) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + ) { + IconButton(onClick = onNavigateToOptions, modifier = Modifier.size(35.dp)) { + Icon(AppIcons.Settings, contentDescription = stringResource(R.string.label_dictionary_options), tint = MaterialTheme.colorScheme.primary) + } + IconButton(onClick = onShowHistory, modifier = Modifier.size(35.dp)) { + Icon(AppIcons.History, contentDescription = stringResource(R.string.cd_translation_history), tint = MaterialTheme.colorScheme.primary) + } + Spacer(Modifier.weight(1f)) + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + AppButton(onClick = onOriginClick, enabled = isSearchEnabled && !isLoading) { + Text(stringResource(R.string.origin)) + } + AppButton(onClick = onDefinitionClick, enabled = isSearchEnabled && !isLoading) { + Text(text = stringResource(R.string.definition), maxLines = 1, overflow = TextOverflow.Ellipsis) + } + if (isLoading) { + CircularProgressIndicator( + modifier = Modifier.size(24.dp), + color = MaterialTheme.colorScheme.primary, + strokeWidth = 2.dp + ) + } + } + } +} + +// --- Component 2: Manager Section --- + +@Composable +fun DictionaryManagerSection( + dictionaryViewModel: DictionaryViewModel, +) { + val manifest by dictionaryViewModel.manifest.collectAsState() + val downloadedDictionaries by dictionaryViewModel.downloadedDictionaries.collectAsState() + val orphanedFiles by dictionaryViewModel.orphanedFiles.collectAsState() + val downloadProgress by dictionaryViewModel.downloadProgress.collectAsState() + val isDownloading by dictionaryViewModel.isDownloading.collectAsState() + + var showDeleteAllDialog by remember { mutableStateOf(false) } + + if (manifest == null) return + + AppCard( + title = stringResource(R.string.label_dictionary_manager), + text = stringResource(R.string.text_dictionary_manager_description), + expandable = true + ) { + Column(modifier = Modifier.fillMaxWidth()) { + if (manifest!!.files.isNotEmpty()) { + DictionaryDownloadList( + files = manifest!!.files, + downloadedDictionaries = downloadedDictionaries, + downloadProgress = downloadProgress, + isDownloading = isDownloading, + dictionaryViewModel = dictionaryViewModel + ) + } + + if (orphanedFiles.isNotEmpty()) { + OrphanedFilesList( + files = orphanedFiles, + dictionaryViewModel = dictionaryViewModel + ) + } + + if ((downloadedDictionaries.isNotEmpty() || orphanedFiles.isNotEmpty())) { + AppButton( + onClick = { showDeleteAllDialog = true }, + enabled = !isDownloading, + colors = ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.error, + contentColor = MaterialTheme.colorScheme.onError + ), + modifier = Modifier.fillMaxWidth().padding(top = 8.dp) + ) { + Text(stringResource(R.string.label_delete_all)) + } + } + + if (manifest!!.files.isEmpty() && orphanedFiles.isEmpty()) { + Text( + text = stringResource(R.string.text_no_dictionaries_available), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(top = 16.dp) + ) + } + } + } + + if (showDeleteAllDialog) { + DeleteAllDialog( + onConfirm = { + dictionaryViewModel.deleteAllDictionaries() + showDeleteAllDialog = false + }, + onDismiss = { showDeleteAllDialog = false } + ) + } +} + +@Composable +private fun DictionaryDownloadList( + files: List, + downloadedDictionaries: List, + downloadProgress: Float?, + isDownloading: Boolean, + dictionaryViewModel: DictionaryViewModel +) { + // Local state to track which ID is currently being processed + var currentDownloadingId by remember { mutableStateOf(null) } + + // Reset when progress clears + LaunchedEffect(downloadProgress) { + if (downloadProgress == null) currentDownloadingId = null + } + + Text( + text = stringResource(R.string.text_available_dictionaries), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(top = 16.dp, bottom = 8.dp) + ) + + Column { + files.forEach { fileInfo -> + val isDownloaded = downloadedDictionaries.any { it.id == fileInfo.id } + // Using ViewModel's getDictionaryUiItems to get pre-calculated values + val uiItems = dictionaryViewModel.getDictionaryUiItems(files, downloadedDictionaries) + val uiItem = uiItems.find { it.fileInfo.id == fileInfo.id } + + DictionaryManagerItem( + fileInfo = fileInfo, + isDownloaded = uiItem?.isDownloaded ?: isDownloaded, + hasUpdate = uiItem?.hasUpdate ?: false, + size = uiItem?.size ?: fileInfo.assets.sumOf { it.sizeBytes }, + downloadProgress = if (fileInfo.id == currentDownloadingId) downloadProgress else null, + isDownloading = isDownloading, + onDownload = { + currentDownloadingId = fileInfo.id + dictionaryViewModel.downloadDictionary(fileInfo) + }, + onUpdate = { + currentDownloadingId = fileInfo.id + dictionaryViewModel.downloadDictionary(fileInfo) + }, + onDelete = { dictionaryViewModel.deleteDictionary(fileInfo) } + ) + } + } +} + +@Composable +private fun OrphanedFilesList( + files: List, + dictionaryViewModel: DictionaryViewModel +) { + Text( + text = stringResource(R.string.label_orphaned_files), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(top = 16.dp, bottom = 8.dp) + ) + Text( + text = stringResource(R.string.text_these_files_exist_locally), + style = MaterialTheme.typography.bodySmall, + modifier = Modifier.padding(bottom = 8.dp) + ) + + Column { + files.forEach { fileInfo -> + OrphanedFileItem( + fileInfo = fileInfo, + size = dictionaryViewModel.getDictionarySize(fileInfo), + onDelete = { dictionaryViewModel.deleteOrphanedFile(fileInfo) } + ) + } + } +} + +@Composable +fun DeleteAllDialog(onConfirm: () -> Unit, onDismiss: () -> Unit) { + AlertDialog( + onDismissRequest = onDismiss, + title = { Text(stringResource(R.string.delete_all_dictionaries_title)) }, + text = { Text(stringResource(R.string.delete_all_dictionaries_confirmation)) }, + confirmButton = { + TextButton(onClick = onConfirm) { Text(stringResource(android.R.string.ok)) } + }, + dismissButton = { + TextButton(onClick = onDismiss) { Text(stringResource(android.R.string.cancel)) } + } + ) +} + +// --- Helper Items --- + +@Composable +fun DictionaryManagerItem( + fileInfo: FileInfo, + isDownloaded: Boolean, + hasUpdate: Boolean, + size: Long, + downloadProgress: Float?, + isDownloading: Boolean, + onDownload: () -> Unit, + onUpdate: () -> Unit, + onDelete: () -> Unit +) { + Card( + modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp) + ) { + Column(modifier = Modifier.padding(16.dp)) { + Text(fileInfo.name, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.Bold) + Text(fileInfo.description, style = MaterialTheme.typography.bodyMedium) + Text(stringResource(R.string.label_version_2d, fileInfo.version), style = MaterialTheme.typography.bodySmall) + Text(stringResource(R.string.label_size_2d_mb, size / 1024 / 1024), style = MaterialTheme.typography.bodySmall) + + if (downloadProgress != null) { + LinearProgressIndicator( + progress = { downloadProgress }, + modifier = Modifier.fillMaxWidth(), + color = ProgressIndicatorDefaults.linearColor, + trackColor = ProgressIndicatorDefaults.linearTrackColor, + strokeCap = ProgressIndicatorDefaults.LinearStrokeCap, + ) + } else { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + if (!isDownloaded) { + AppButton(onClick = onDownload, enabled = !isDownloading) { + Text(stringResource(R.string.label_download)) + } + } else { + if (hasUpdate) { + AppOutlinedButton(onClick = onUpdate, enabled = !isDownloading) { + Text(stringResource(R.string.label_update)) + } + } + AppOutlinedButton(onClick = onDelete, enabled = !isDownloading, borderColor = MaterialTheme.colorScheme.error) { + Text(stringResource(R.string.label_delete)) + } + } + } + } + } + } +} + +@Composable +fun OrphanedFileItem(fileInfo: FileInfo, size: Long, onDelete: () -> Unit) { + Card(modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp)) { + Column(modifier = Modifier.padding(16.dp)) { + Text(fileInfo.name, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.Bold) + Text(fileInfo.description, style = MaterialTheme.typography.bodyMedium) + Text(stringResource(R.string.label_version_2d, fileInfo.version), style = MaterialTheme.typography.bodySmall) + Text(stringResource(R.string.label_size_2d_mb, size / 1024 / 1024), style = MaterialTheme.typography.bodySmall) + AppButton(onClick = onDelete) { Text(stringResource(R.string.label_delete)) } + } + } +} + +@Composable +fun WordOfTheDayCard( + entry: DictionaryEntry, + isLoading: Boolean, + onEntryClick: (DictionaryEntry) -> Unit, + onRefresh: () -> Unit, + modifier: Modifier = Modifier +) { + AppCard(modifier = modifier.fillMaxWidth().clickable { onEntryClick(entry) }) { + Column(modifier = Modifier.padding(16.dp)) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Text(stringResource(R.string.text_word_of_the_day), style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.Bold) + IconButton(onClick = onRefresh, enabled = !isLoading) { + Icon(AppIcons.Refresh, contentDescription = stringResource(R.string.refresh_word_of_the_day)) + } + } + Spacer(modifier = Modifier.height(8.dp)) + Text(text = "${entry.word}: ${entry.definition.firstOrNull()?.content ?: ""}") + } + } +} + +@Composable +fun DictionaryHistorySheetContent( + historyEntries: List, + onEntryClick: (DictionaryEntry) -> Unit +) { + Column(modifier = Modifier.padding(16.dp)) { + Text(stringResource(R.string.text_search_history), style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.Bold, modifier = Modifier.padding(bottom = 8.dp)) + LazyColumn { + items(historyEntries) { entry -> + DictionaryHistoryItem(entry = entry, onEntryClick = onEntryClick) + } + } + } +} + +@Composable +fun DictionaryHistoryItem(entry: DictionaryEntry, onEntryClick: (DictionaryEntry) -> Unit) { + Card(modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp), onClick = { onEntryClick(entry) }) { + Row(modifier = Modifier.fillMaxWidth().padding(16.dp), horizontalArrangement = Arrangement.SpaceBetween) { + Text(text = entry.word) + Text(text = entry.languageName, style = MaterialTheme.typography.bodySmall) + } + } +} + + +@Suppress("HardCodedStringLiteral") +@Composable +@androidx.compose.ui.tooling.preview.Preview +fun DictionarySearchCardPreview() { + // Preview with mock values - ViewModels are null for preview + Box(modifier = Modifier.padding(16.dp)) { + Text("DictionarySearchCard Preview") + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +@androidx.compose.ui.tooling.preview.Preview +fun LanguageSelectionRowPreview() { + // Preview with mock values + Box(modifier = Modifier.padding(16.dp)) { + Text("LanguageSelectionRow Preview") + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +@androidx.compose.ui.tooling.preview.Preview +fun SearchActionRowPreview() { + // Preview with mock values + Box(modifier = Modifier.padding(16.dp)) { + Text("SearchActionRow Preview") + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +@androidx.compose.ui.tooling.preview.Preview +fun DictionaryManagerItemPreview() { + val mockFileInfo = FileInfo( + id = "test_id", + name = "German Dictionary", + description = "German to English dictionary", + version = "1.0.0", + assets = emptyList() + ) + DictionaryManagerItem( + fileInfo = mockFileInfo, + isDownloaded = false, + hasUpdate = false, + size = 1024 * 1024 * 50, + downloadProgress = null, + isDownloading = false, + onDownload = {}, + onUpdate = {}, + onDelete = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Composable +@androidx.compose.ui.tooling.preview.Preview +fun WordOfTheDayCardPreview() { + val mockEntry = DictionaryEntry( + id = 1, + word = "Apfel", + definition = emptyList(), + languageCode = 1, + languageName = "German" + ) + WordOfTheDayCard( + entry = mockEntry, + isLoading = false, + onEntryClick = {}, + onRefresh = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Composable +@androidx.compose.ui.tooling.preview.Preview +fun DictionaryHistoryItemPreview() { + val mockEntry = DictionaryEntry( + id = 1, + word = "Hello", + definition = emptyList(), + languageCode = 1, + languageName = "English" + ) + DictionaryHistoryItem(entry = mockEntry, onEntryClick = {}) +} + +@Suppress("HardCodedStringLiteral") +@Composable +@androidx.compose.ui.tooling.preview.Preview +fun DictionaryHistorySheetContentPreview() { + val mockEntries = listOf( + DictionaryEntry(id = 1, word = "Hello", definition = emptyList(), languageCode = 1, languageName = "English"), + DictionaryEntry(id = 2, word = "Guten Tag", definition = emptyList(), languageCode = 1, languageName = "German") + ) + DictionaryHistorySheetContent(historyEntries = mockEntries, onEntryClick = {}) +} diff --git a/app/src/main/java/eu/gaudian/translator/view/dictionary/VerbTable.kt b/app/src/main/java/eu/gaudian/translator/view/dictionary/VerbTable.kt new file mode 100644 index 0000000..1fd9d97 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/dictionary/VerbTable.kt @@ -0,0 +1,189 @@ +package eu.gaudian.translator.view.dictionary + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.expandVertically +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.shrinkVertically +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateMapOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.grammar.VerbConjugation +import eu.gaudian.translator.view.composable.AppIcons + +@Composable +fun VerbTable( + conjugation: VerbConjugation, + modifier: Modifier = Modifier +) { + val tenses = conjugation.conjugations.keys.toList() + val expandedStates = remember { + mutableStateMapOf().apply { + tenses.firstOrNull()?.let { this[it] = true } + } + } + + Card( + modifier = modifier.fillMaxWidth(), + shape = UnifiedCornerShape, // Using the shared shape + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surfaceContainerLow + ?: MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.3f) + ), + elevation = CardDefaults.cardElevation(0.dp) + ) { + Column(modifier = Modifier.padding(16.dp)) { + // Title + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.padding(bottom = 12.dp) + ) { + Icon( + imageVector = AppIcons.Check, // Or a generic Verb icon + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.padding(end = 8.dp).width(18.dp) + ) + Text( + text = stringResource(R.string.label_conjugation, conjugation.infinitive), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.onSurface + ) + } + + tenses.forEach { tense -> + val forms = conjugation.conjugations[tense] ?: emptyList() + val isExpanded = expandedStates[tense] == true + + Column( + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 4.dp) + .clip(RoundedCornerShape(8.dp)) + .background(if(isExpanded) MaterialTheme.colorScheme.surface.copy(alpha=0.5f) else androidx.compose.ui.graphics.Color.Transparent) + ) { + // Expandable tense header + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { expandedStates[tense] = !isExpanded } + .padding(horizontal = 8.dp, vertical = 12.dp), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = tense, + style = MaterialTheme.typography.bodyLarge, + fontWeight = if(isExpanded) FontWeight.Bold else FontWeight.Medium, + color = MaterialTheme.colorScheme.onSurface + ) + Icon( + imageVector = if (isExpanded) AppIcons.ArrowDropUp else AppIcons.ArrowDropDown, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary + ) + } + + // Conjugation forms + AnimatedVisibility( + visible = isExpanded, + enter = expandVertically() + fadeIn(), + exit = shrinkVertically() + fadeOut() + ) { + Column(modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp)) { + val count = maxOf(conjugation.pronouns.size, forms.size) + for (i in 0 until count) { + val person = conjugation.pronouns.getOrNull(i) ?: "" + val form = forms.getOrNull(i) ?: "" + + if (form.isNotBlank()) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 4.dp), + verticalAlignment = Alignment.CenterVertically + ) { + if (person.isNotBlank()) { + Text( + text = person, + modifier = Modifier.width(100.dp), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.secondary + ) + } + Text( + text = form, + modifier = Modifier.weight(1f), + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.SemiBold, + color = MaterialTheme.colorScheme.onSurface + ) + } + } + } + } + } + } + if (tense != tenses.last()) { + HorizontalDivider( + color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.3f), + modifier = Modifier.padding(horizontal = 8.dp) + ) + } + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun VerbTablePreview() { + val sampleConjugation = VerbConjugation( + infinitive = "être", + conjugations = mapOf( + "Présent" to listOf("suis", "es", "est", "sommes", "êtes", "sont"), + "Imparfait" to listOf("étais", "étais", "était", "étions", "étiez", "étaient") + ) + ) + VerbTable(conjugation = sampleConjugation) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun VerbTableGermanPreview() { + val sampleConjugation = VerbConjugation( + infinitive = "laufen", + pronouns = listOf("ich", "du", "er/sie/es", "wir", "ihr", "sie"), + conjugations = mapOf( + "Präsens" to listOf("laufe", "läufst", "läuft", "laufen", "lauft", "laufen"), + "Präteritum" to listOf("lief", "liefst", "lief", "liefen", "lieft", "liefen") + ) + ) + VerbTable(conjugation = sampleConjugation) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/exercises/AiGenerationScreen.kt b/app/src/main/java/eu/gaudian/translator/view/exercises/AiGenerationScreen.kt new file mode 100644 index 0000000..b561fe6 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/exercises/AiGenerationScreen.kt @@ -0,0 +1,144 @@ +package eu.gaudian.translator.view.exercises + +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.LinearEasing +import androidx.compose.animation.core.RepeatMode +import androidx.compose.animation.core.animateFloat +import androidx.compose.animation.core.infiniteRepeatable +import androidx.compose.animation.core.rememberInfiniteTransition +import androidx.compose.animation.core.tween +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.drawscope.Stroke +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.viewmodel.AiGenerationState +import kotlin.math.cos +import kotlin.math.sin + +@Composable +fun AiGenerationScreen(state: AiGenerationState) { + Box( + modifier = Modifier + .fillMaxSize() + .background(Color.Black.copy(alpha = 0.8f)) + .padding(16.dp), + contentAlignment = Alignment.Center + ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(24.dp) + ) { + when (state) { + is AiGenerationState.Generating -> { + GeneratingAnimation() + Text( + text = state.statusMessage, + color = Color.White, + style = MaterialTheme.typography.titleMedium + ) + } + is AiGenerationState.Success -> { + Icon( + imageVector = AppIcons.CheckCircle, + contentDescription = stringResource(R.string.cd_success), + tint = Color.Green, + modifier = Modifier.size(80.dp) + ) + Text( + text = state.generatedExerciseTitle, + color = Color.White, + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold + ) + } + is AiGenerationState.Error -> { + Icon( + imageVector = AppIcons.Error, + contentDescription = stringResource(R.string.cd_error), + tint = MaterialTheme.colorScheme.error, + modifier = Modifier.size(80.dp) + ) + Text( + text = state.errorMessage, + color = Color.White, + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold + ) + } + else -> {} + } + } + } +} + +@Composable +private fun GeneratingAnimation() { + @Suppress("HardCodedStringLiteral") val transition = rememberInfiniteTransition(label = "generating_anim") + + val angle1 by transition.animateFloat( + initialValue = 0f, + targetValue = 360f, + animationSpec = infiniteRepeatable(tween(2000, easing = LinearEasing), RepeatMode.Restart), + label = "" + ) + val angle2 by transition.animateFloat( + initialValue = 180f, + targetValue = 540f, + animationSpec = infiniteRepeatable(tween(3000, easing = FastOutSlowInEasing), RepeatMode.Restart), + label = "" + ) + val scale by transition.animateFloat( + initialValue = 1f, + targetValue = 1.2f, + animationSpec = infiniteRepeatable(tween(1500), RepeatMode.Reverse), + label = "" + ) + val color = MaterialTheme.colorScheme.primary + + Canvas(modifier = Modifier.size(120.dp)) { + val radius = size.minDimension / 4 + val center = this.center + + drawCircle( + color = color, + radius = radius * scale, + style = Stroke(width = 8f) + ) + + fun getOffset(angle: Float, r: Float) = Offset( + x = center.x + r * cos(angle * (Math.PI / 180f)).toFloat(), + y = center.y + r * sin(angle * (Math.PI / 180f)).toFloat() + ) + + drawCircle( + color = color, + radius = 20f, + center = getOffset(angle1, radius * 2.5f) + ) + + drawCircle( + color = color.copy(alpha = 0.7f), + radius = 15f, + center = getOffset(angle2, radius * 2.5f) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseListScreen.kt b/app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseListScreen.kt new file mode 100644 index 0000000..b48ef39 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseListScreen.kt @@ -0,0 +1,113 @@ +package eu.gaudian.translator.view.exercises + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Exercise +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedButton +import eu.gaudian.translator.view.composable.AppOutlinedCard +import eu.gaudian.translator.viewmodel.ExerciseViewModel + +@Composable +fun ExerciseListScreen( + onExerciseClicked: (Exercise) -> Unit, + onLongExerciseClicked: (Exercise) -> Unit, + onDeleteClicked: (Exercise) -> Unit, +) { + val exerciseViewModel: ExerciseViewModel = viewModel() + val exercises by exerciseViewModel.exercises.collectAsState() + + AppOutlinedCard{ + + LazyColumn( + modifier = Modifier.fillMaxSize(), + contentPadding = PaddingValues(8.dp) + ) { + items(exercises) { exercise -> + ExerciseListItem( + exercise = exercise, + onClick = { onExerciseClicked(exercise) }, + onLongClick = { onLongExerciseClicked(exercise) }, + onDelete = { onDeleteClicked(exercise) } + ) + } + } +} +} + +@Composable +private fun ExerciseListItem( + exercise: Exercise, + onClick: () -> Unit, + onLongClick: () -> Unit, + onDelete: () -> Unit +) { + AppCard( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 4.dp), + ) { + Row( + modifier = Modifier.padding(start = 16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + imageVector = AppIcons.Quiz, + contentDescription = stringResource(R.string.label_exercise), + modifier = Modifier.size(40.dp) + ) + Spacer(modifier = Modifier.width(16.dp)) + Column( + modifier = Modifier + .weight(1f) + .padding(vertical = 8.dp), + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + Text(text = exercise.title, style = MaterialTheme.typography.titleMedium) + Text( + text = stringResource(R.string.questions, exercise.questions.size), + style = MaterialTheme.typography.bodyMedium + ) + // Add the new button + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + AppButton(onClick = onClick, shape = RoundedCornerShape(8.dp), + ) { + Text(stringResource(R.string.label_start)) + } + AppOutlinedButton(onClick = onLongClick, shape = RoundedCornerShape(8.dp)) { + Text(stringResource(R.string.start_long)) + } + } + } + IconButton(onClick = onDelete) { + Icon(AppIcons.Delete, contentDescription = stringResource(R.string.delete_exercise)) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseMenu.kt b/app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseMenu.kt new file mode 100644 index 0000000..a24c8ad --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseMenu.kt @@ -0,0 +1,38 @@ +package eu.gaudian.translator.view.exercises + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppFabMenu +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.FabMenuItem + +@Composable +fun ExerciseMenu( + modifier: Modifier = Modifier, + onCreateExercise: () -> Unit, + onCreateYouTubeExercise: () -> Unit, + onStartExercise: () -> Unit +) { + val menuItems = listOf( + FabMenuItem( + text = stringResource(R.string.label_create_exercise), + imageVector = AppIcons.Add, + onClick = onCreateExercise + ), + FabMenuItem( + text = stringResource(R.string.menu_create_youtube_exercise), + imageVector = AppIcons.Play, + onClick = onCreateYouTubeExercise + ), + FabMenuItem( + text = stringResource(R.string.label_start_exercise), + imageVector = AppIcons.Play, + onClick = onStartExercise + ) + + ) + + AppFabMenu(items = menuItems, modifier = modifier) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseSessionScreen.kt b/app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseSessionScreen.kt new file mode 100644 index 0000000..8628cbe --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseSessionScreen.kt @@ -0,0 +1,569 @@ +package eu.gaudian.translator.view.exercises + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.tween +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutVertically +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.CategorizationQuestion +import eu.gaudian.translator.model.Exercise +import eu.gaudian.translator.model.FillInTheBlankQuestion +import eu.gaudian.translator.model.ListeningComprehensionQuestion +import eu.gaudian.translator.model.MatchingPairsQuestion +import eu.gaudian.translator.model.MultipleChoiceQuestion +import eu.gaudian.translator.model.TrueFalseQuestion +import eu.gaudian.translator.model.VocabularyTestQuestion +import eu.gaudian.translator.model.WordOrderQuestion +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.ui.theme.semanticColors +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.ComponentDefaults +import eu.gaudian.translator.view.vocabulary.ExerciseProgressIndicator +import eu.gaudian.translator.viewmodel.AnswerResult +import eu.gaudian.translator.viewmodel.ExerciseSessionState +import eu.gaudian.translator.viewmodel.ExerciseViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel + + +@Composable +fun ExerciseSessionScreen( + navController: NavController, + exerciseViewModel: ExerciseViewModel, // Changed: No longer creates its own instance + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(androidx.compose.ui.platform.LocalContext.current.applicationContext as android.app.Application) +) { + val sessionState by exerciseViewModel.exerciseSessionState.collectAsState() + + var showVocabulary by remember { mutableStateOf(true) } + var vocabularyChecked by remember { mutableStateOf(false) } + + LaunchedEffect(sessionState) { + if (!vocabularyChecked && sessionState != null) { + val vocabIds = sessionState?.exercise?.associatedVocabularyIds + if (!vocabIds.isNullOrEmpty()) { + vocabularyViewModel.filterByIds(vocabIds) + showVocabulary = true + } else { + showVocabulary = false + } + vocabularyChecked = true + } + } + + DisposableEffect(Unit) { + onDispose { + exerciseViewModel.closeExercise() + vocabularyViewModel.clearFilter() + } + } + + val currentSession = sessionState + if (currentSession == null) { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + CircularProgressIndicator() + } + return + } + + if (currentSession.isExerciseFinished) { + GenericResultScreen( + score = currentSession.correctAnswers, + wrongAnswers = currentSession.wrongAnswers, + totalItems = currentSession.questions.size, + onFinish = { + exerciseViewModel.closeExercise() + navController.popBackStack() + } + ) + return + } + + if (showVocabulary) { + ExerciseVocabularyScreen( + onStartExercise = { + vocabularyViewModel.clearFilter() + @Suppress("AssignedValueIsNeverRead") + showVocabulary = false + }, + navController = navController + ) + } else { + ExerciseQuestionScreen( + state = currentSession, + onAnswerSelect = { answer -> exerciseViewModel.selectAnswer(answer) }, + onCheckClick = { exerciseViewModel.checkAnswer() }, + onContinueClick = { exerciseViewModel.nextQuestion() }, + onCloseClick = { + navController.popBackStack() + }, + navController =navController + ) + } +} + +@Suppress("HardCodedStringLiteral") +@ThemePreviews +@Composable +fun ExerciseQuestionScreenPreview() { + val sampleQuestion = TrueFalseQuestion(id = 1, name = "Is the sky blue?", correctAnswer = true) + val sampleState = ExerciseSessionState( + exercise = Exercise(id = "1", title = "Sample Exercise", questions = listOf(1)), + questions = listOf(sampleQuestion), + currentQuestionIndex = 0, + correctAnswers = 0, + wrongAnswers = 0, + selectedAnswer = null, + answerResult = AnswerResult.UNCHECKED + ) + ExerciseQuestionScreen( + state = sampleState, + onAnswerSelect = {}, + onCheckClick = {}, + onContinueClick = {}, + onCloseClick = {}, + navController = rememberNavController() + ) +} + +@Composable +fun GenericResultScreen( + score: Int, + wrongAnswers: Int, + totalItems: Int, + onFinish: () -> Unit +) { + val percentage = if (totalItems > 0) score.toFloat() / totalItems.toFloat() else 0f + val animatedProgress by androidx.compose.animation.core.animateFloatAsState( + targetValue = percentage, + animationSpec = tween(durationMillis = 1200), + label = "ResultProgressAnimationGeneric" + ) + Scaffold( + topBar = { + androidx.compose.material3.TopAppBar( + title = { Text(stringResource(R.string.result)) } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceAround + ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text( + text = stringResource(R.string.exercise_complete), + style = MaterialTheme.typography.headlineLarge, + fontWeight = FontWeight.Bold + ) + androidx.compose.foundation.layout.Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stringResource(R.string.here_s_how_you_did), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + Box(contentAlignment = Alignment.Center, modifier = Modifier.size(220.dp)) { + CircularProgressIndicator( + progress = { animatedProgress }, + modifier = Modifier.fillMaxSize(), + strokeWidth = 16.dp, + color = MaterialTheme.colorScheme.primary, + trackColor = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.5f), + ) + Text( + text = "${(percentage * 100).toInt()}%", + style = MaterialTheme.typography.displayMedium, + fontWeight = FontWeight.Bold + ) + } + androidx.compose.material3.Card( + modifier = Modifier.fillMaxWidth(), + colors = androidx.compose.material3.CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface) + ) { + Column(modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { + Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(vertical = 8.dp)) { + androidx.compose.material3.Icon( + imageVector = AppIcons.CheckCircle, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(32.dp) + ) + androidx.compose.foundation.layout.Spacer(modifier = Modifier.width(16.dp)) + Text(text = stringResource(R.string.label_correct), style = MaterialTheme.typography.titleLarge, modifier = Modifier.weight(1f)) + Text(text = "$score / $totalItems", style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.Bold, color = MaterialTheme.colorScheme.primary) + } + androidx.compose.material3.HorizontalDivider() + Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(vertical = 8.dp)) { + androidx.compose.material3.Icon( + imageVector = AppIcons.Error, + contentDescription = null, + tint = MaterialTheme.colorScheme.error, + modifier = Modifier.size(32.dp) + ) + androidx.compose.foundation.layout.Spacer(modifier = Modifier.width(16.dp)) + Text(text = stringResource(R.string.label_wrong), style = MaterialTheme.typography.titleLarge, modifier = Modifier.weight(1f)) + Text(text = "$wrongAnswers", style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.Bold, color = MaterialTheme.colorScheme.error) + } + } + } + AppButton( + onClick = onFinish, + modifier = Modifier + .fillMaxWidth() + .height(48.dp) + ) { + Text(stringResource(R.string.finish)) + } + } + } +} + +@Composable +fun ExerciseQuestionScreen( + state: ExerciseSessionState, + onAnswerSelect: (Any) -> Unit, + onCheckClick: () -> Unit, + onContinueClick: () -> Unit, + onCloseClick: () -> Unit, + navController: NavController +) { + val exerciseViewModel = viewModel() + + Scaffold( + topBar = { + ExerciseProgressIndicator( + correctAnswers = state.correctAnswers, + wrongAnswers = state.wrongAnswers, + totalItems = state.questions.size, + onClose = onCloseClick + ) + }, + bottomBar = { + BottomBar( + answerResult = state.answerResult, + onCheckClick = onCheckClick, + onContinueClick = onContinueClick, + isCheckEnabled = state.isAnswerSelected(), + secondaryText = (if (state.answerResult !is AnswerResult.UNCHECKED && state.currentQuestion is TrueFalseQuestion) (state.currentQuestion as TrueFalseQuestion).explanation else null) + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(24.dp) + ) { + // Context panel shown at the beginning of each exercise + val ctxTitle = state.exercise.contextTitle + val ctxText = state.exercise.contextText + val youtubeUrl = state.exercise.youtubeUrl + var showContext by remember { mutableStateOf(true) } + + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + // Show YouTube video button if this is a YouTube exercise + if (!youtubeUrl.isNullOrBlank()) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + AppButton( + onClick = { + // Navigate back to YouTube browser with the saved URL + val youtubeUrl = state.exercise.youtubeUrl + val sourceLang = state.exercise.sourceLanguage + val targetLang = state.exercise.targetLanguage + + if (youtubeUrl.isNotBlank()) { + exerciseViewModel.restartYouTubeExercise( + youtubeUrl = youtubeUrl, + sourceLanguage = sourceLang, + targetLanguage = targetLang + ) + @Suppress("HardCodedStringLiteral") + navController.navigate("youtube_exercise") + } + }, + modifier = Modifier.weight(1f) + ) { + androidx.compose.material3.Icon( + imageVector = AppIcons.Play, + contentDescription = null, + modifier = Modifier.padding(end = 8.dp) + ) + Text(stringResource(R.string.text_watch_video_again)) + } + } + } + + // Show context if available + if (!ctxText.isNullOrBlank()) { + Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) { + Text(text = ctxTitle?.ifBlank { stringResource(R.string.label_context) } ?: stringResource(R.string.label_context), style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.SemiBold) + AppButton(onClick = { showContext = !showContext }) { + Text(if (showContext) stringResource(R.string.hide_context) else stringResource(R.string.show_context)) + } + } + if (showContext) { + Surface(tonalElevation = 1.dp, shape = RoundedCornerShape(8.dp)) { + Text(text = ctxText, modifier = Modifier.padding(12.dp), style = MaterialTheme.typography.bodyMedium) + } + } + } + } + Text( + text = stringResource( + R.string.text_question_of, + state.currentQuestionIndex + 1, + state.questions.size + ), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + val headerText = when (state.currentQuestion) { + is ListeningComprehensionQuestion -> stringResource(id = R.string.type_what_you_hear) + is WordOrderQuestion -> stringResource(id = R.string.tap_the_words_below_to_form_the_sentence) + else -> state.currentQuestion.name + } + Text( + text = headerText, + style = MaterialTheme.typography.headlineMedium, + fontWeight = FontWeight.Bold + ) + + // Main router for displaying the correct question UI + when (val question = state.currentQuestion) { + is TrueFalseQuestion -> TrueFalseQuestionUi( + selectedAnswer = state.selectedAnswer as? Boolean, + onAnswerSelect = { onAnswerSelect(it) }, + isLocked = state.answerResult !is AnswerResult.UNCHECKED + ) + is MultipleChoiceQuestion -> MultipleChoiceQuestionUi( + question = question, + selectedAnswerIndex = state.selectedAnswer as? Int, + onAnswerSelect = { onAnswerSelect(it) }, + isLocked = state.answerResult !is AnswerResult.UNCHECKED + ) + is FillInTheBlankQuestion -> FillInTheBlankQuestionUi( + question = question, + selectedAnswer = state.selectedAnswer as? String ?: "", + onAnswerSelect = { onAnswerSelect(it) }, + isLocked = state.answerResult !is AnswerResult.UNCHECKED + ) + is WordOrderQuestion -> WordOrderQuestionUi( + question = question, + selectedAnswer = (state.selectedAnswer as? List<*>)?.filterIsInstance() + ?: emptyList(), + onAnswerSelect = { onAnswerSelect(it) }, + isLocked = state.answerResult !is AnswerResult.UNCHECKED + ) + is MatchingPairsQuestion -> MatchingPairsQuestionUi( + question = question, + selectedAnswer = (state.selectedAnswer as? Map<*, *>)?.mapNotNull { (k, v) -> (k as? String)?.let { key -> (v as? String)?.let { value -> key to value } } } + ?.toMap() ?: emptyMap(), + onAnswerSelect = { onAnswerSelect(it) }, + isLocked = state.answerResult !is AnswerResult.UNCHECKED + ) + is ListeningComprehensionQuestion -> ListeningComprehensionQuestionUi( + question = question, + selectedAnswer = state.selectedAnswer as? String ?: "", + onAnswerSelect = { onAnswerSelect(it) }, + isLocked = state.answerResult !is AnswerResult.UNCHECKED + ) + is CategorizationQuestion -> CategorizationQuestionUi( + question = question, + selectedAnswer = (state.selectedAnswer as? Map<*, *>)?.mapNotNull { (k, v) -> (k as? String)?.let { key -> (v as? String)?.let { value -> key to value } } } + ?.toMap() ?: emptyMap(), + onAnswerSelect = { onAnswerSelect(it) }, + isLocked = state.answerResult !is AnswerResult.UNCHECKED + ) + is VocabularyTestQuestion -> VocabularyTestQuestionUi( + question = question, + selectedAnswer = state.selectedAnswer as? String ?: "", + onAnswerSelect = { onAnswerSelect(it) }, + isLocked = state.answerResult !is AnswerResult.UNCHECKED + ) + } + } + } +} + +@Composable +fun TrueFalseQuestionUi(selectedAnswer: Boolean?, onAnswerSelect: (Boolean) -> Unit, isLocked: Boolean) { + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + AnswerButton( + text = stringResource(R.string.text_true), + isSelected = selectedAnswer == true, + onClick = { onAnswerSelect(true) }, + enabled = !isLocked + ) + AnswerButton( + text = stringResource(R.string.text_false), + isSelected = selectedAnswer == false, + onClick = { onAnswerSelect(false) }, + enabled = !isLocked + ) + } +} + +@Composable +fun MultipleChoiceQuestionUi( + question: MultipleChoiceQuestion, + selectedAnswerIndex: Int?, + onAnswerSelect: (Int) -> Unit, + isLocked: Boolean +) { + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + question.options.forEachIndexed { index, text -> + AnswerButton( + text = text, + isSelected = selectedAnswerIndex == index, + onClick = { onAnswerSelect(index) }, + enabled = !isLocked + ) + } + } +} + +@Composable +fun AnswerButton(text: String, isSelected: Boolean, onClick: () -> Unit, enabled: Boolean) { + AppButton( + onClick = onClick, + modifier = Modifier + .fillMaxWidth() + .defaultMinSize(minHeight = 52.dp), + enabled = enabled, + shape = RoundedCornerShape(12.dp), + colors = ButtonDefaults.buttonColors( + containerColor = if (isSelected) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.surface, + contentColor = if (isSelected) MaterialTheme.colorScheme.onPrimaryContainer else MaterialTheme.colorScheme.onSurface + ), + border = BorderStroke(2.dp, if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.outline) + ) { + Text(text, fontSize = 16.sp, fontWeight = FontWeight.SemiBold) + } +} + +@Composable +fun BottomBar(answerResult: AnswerResult, onCheckClick: () -> Unit, onContinueClick: () -> Unit, isCheckEnabled: Boolean, secondaryText: String? = null) { + val isResultVisible = answerResult !is AnswerResult.UNCHECKED + + Box(contentAlignment = Alignment.BottomCenter) { + if (!isResultVisible) { + Surface(shadowElevation = ComponentDefaults.DefaultElevation) { + AppButton( + onClick = onCheckClick, + enabled = isCheckEnabled, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + .height(50.dp) + ) { + Text(stringResource(R.string.text_check), fontWeight = FontWeight.Bold) + } + } + } + + // Animated Correct/Incorrect Result View + AnimatedVisibility( + visible = isResultVisible, + enter = slideInVertically(initialOffsetY = { it }, animationSpec = tween(300)), + exit = slideOutVertically(targetOffsetY = { it }, animationSpec = tween(300)) + ) { + val backgroundColor = if (answerResult is AnswerResult.CORRECT) MaterialTheme.semanticColors.successContainer else MaterialTheme.colorScheme.errorContainer + val contentColor = if (answerResult is AnswerResult.CORRECT) MaterialTheme.semanticColors.onSuccessContainer else MaterialTheme.colorScheme.onErrorContainer + + Surface( + color = backgroundColor, + modifier = Modifier.fillMaxWidth() + ) { + Row( + modifier = Modifier + .padding(horizontal = 24.dp, vertical = 16.dp) + .defaultMinSize(minHeight = 80.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Column(modifier = Modifier.weight(1f)) { + Text( + text = if (answerResult is AnswerResult.CORRECT) stringResource(R.string.text_correct_em) else stringResource( + R.string.text_incorrect_em + ), + color = contentColor, + style = MaterialTheme.typography.headlineSmall, + fontWeight = FontWeight.Bold + ) + if (answerResult is AnswerResult.INCORRECT) { + Text( + text = answerResult.feedback, + color = contentColor, + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.SemiBold + ) + } else if (!secondaryText.isNullOrBlank()) { + Text( + text = secondaryText, + color = contentColor, + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.SemiBold + ) + } + } + if (answerResult is AnswerResult.CORRECT) { + eu.gaudian.translator.view.composable.CorrectButton( + onClick = onContinueClick, + text = stringResource(R.string.label_continue) + ) + } else { + eu.gaudian.translator.view.composable.WrongButton( + onClick = onContinueClick, + text = stringResource(R.string.label_continue) + ) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseVocabularyScreen.kt b/app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseVocabularyScreen.kt new file mode 100644 index 0000000..e79b065 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/exercises/ExerciseVocabularyScreen.kt @@ -0,0 +1,55 @@ +package eu.gaudian.translator.view.exercises + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import androidx.navigation.NavHostController +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.vocabulary.VocabularyListScreen + +@Composable +fun ExerciseVocabularyScreen( + onStartExercise: () -> Unit, + navController: NavController +) { + Scaffold( + topBar = { + AppTopAppBar(title = { Text(stringResource(R.string.text_new_vocabulary_for_this_exercise)) }) + }, + bottomBar = { + Surface(shadowElevation = 8.dp) { + AppButton( + onClick = onStartExercise, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + ) { + Text(stringResource(R.string.label_start_exercise)) + } + } + } + ) { paddingValues -> + Box(modifier = Modifier.padding(paddingValues)) { + + VocabularyListScreen( + navController = navController as NavHostController?, + onNavigateToItem = { item -> + // Navigate to the detail screen for a specific vocabulary item + @Suppress("HardCodedStringLiteral") + navController.navigate("vocabulary_detail/${item.id}") + }, + onNavigateBack = { /* Not needed in this context */ }, + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/exercises/GenerateExerciseDialog.kt b/app/src/main/java/eu/gaudian/translator/view/exercises/GenerateExerciseDialog.kt new file mode 100644 index 0000000..f2f19ec --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/exercises/GenerateExerciseDialog.kt @@ -0,0 +1,214 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.exercises + +import android.annotation.SuppressLint +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.FilterChip +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Question +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppSlider +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.DialogButton +import eu.gaudian.translator.view.composable.SourceLanguageDropdown +import eu.gaudian.translator.view.composable.TargetLanguageDropdown +import eu.gaudian.translator.viewmodel.LanguageViewModel +import kotlin.math.roundToInt +import kotlin.reflect.KClass + +@SuppressLint("FrequentlyChangingValue") +@Composable +fun GenerateExerciseDialog( + onDismiss: () -> Unit, + onGenerate: (category: String, types: List>, difficulty: String, amount: Int, sourceLanguage: String?, targetLanguage: String?) -> Unit +) { + // Orchestrator for a compact 2-step flow + var step by remember { mutableIntStateOf(1) } + val activity = LocalContext.current.findActivity() + + + var category by remember { mutableStateOf("") } + var amount by remember { mutableFloatStateOf(10f) } + var difficulty by remember { mutableFloatStateOf(1f) } // 0=Easy, 1=Medium, 2=Hard + val questionTypes = Question.allTypes + var selectedTypes by remember { mutableStateOf(questionTypes.toSet()) } + + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val sourceLang = languageViewModel.selectedSourceLanguage.collectAsState().value?.name + val targetLang = languageViewModel.selectedTargetLanguage.collectAsState().value?.name + + val difficultyLabels = listOf( + stringResource(R.string.label_easy), + stringResource(R.string.label_medium), + stringResource(R.string.label_hard) + ) + + when (step) { + 1 -> { + // Step 1: Basic Info (Category + Languages) + val isNextEnabled = category.isNotBlank() && !targetLang.isNullOrBlank() + AppDialog(onDismissRequest = onDismiss) { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface) + ) { + Column(modifier = Modifier.padding(8.dp), verticalArrangement = Arrangement.spacedBy(16.dp)) { + Text( + text = stringResource(R.string.text_generate_exercise_with_ai), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(bottom = 8.dp) + ) + AppTextField( + value = category, + onValueChange = { category = it }, + label = { Text(stringResource(R.string.text_category_prompt)) }, + placeholder = { Text(stringResource(R.string.text_e_g_irregular_verbs)) }, + modifier = Modifier.fillMaxWidth() + ) + Text(stringResource(R.string.text_select_languages), style = MaterialTheme.typography.labelLarge) + Row(modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) { + Box(modifier = Modifier.weight(1f)) { + SourceLanguageDropdown(languageViewModel = languageViewModel, autoEnabled = true, iconEnabled = true) + } + Spacer(modifier = Modifier.width(8.dp)) + Box(modifier = Modifier.weight(1f)) { + TargetLanguageDropdown(languageViewModel = languageViewModel, iconEnabled = true) + } + } + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically + ) { + TextButton(onClick = onDismiss) { Text(stringResource(R.string.label_cancel)) } + DialogButton(onClick = { step = 2 }, enabled = isNextEnabled) { + Text(stringResource(R.string.next)) + } + } + } + } + } + } + else -> { + // Step 2: Options (Types + Difficulty + Amount) and Generate + val isGenerateEnabled = category.isNotBlank() && selectedTypes.isNotEmpty() && !targetLang.isNullOrBlank() + AppDialog(onDismissRequest = { step = 1 }) { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface) + ) { + Column(modifier = Modifier.padding(8.dp), verticalArrangement = Arrangement.spacedBy(16.dp)) { + Text( + text = stringResource(R.string.text_question_types), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(bottom = 8.dp) + ) + Box { + val scrollState = rememberScrollState() + if (scrollState.canScrollForward) { + Box( + modifier = Modifier + .align(Alignment.BottomCenter) + .offset(y = 8.dp) + .fillMaxWidth() + .heightIn(max = 20.dp) + .background(MaterialTheme.colorScheme.surface.copy(alpha = 0.5f)) + .alpha(if (scrollState.value < scrollState.maxValue - 50) 1f else (scrollState.maxValue - scrollState.value) / 50f) + ) { + Text("...", modifier = Modifier.align(Alignment.Center), color = MaterialTheme.colorScheme.onSurface) + } + } + Box( + modifier = Modifier + .heightIn(max = 200.dp) + .verticalScroll(scrollState) + ) { + FlowRow(horizontalArrangement = Arrangement.spacedBy(4.dp)) { + questionTypes.forEach { type -> + val isSelected = selectedTypes.contains(type) + FilterChip( + selected = isSelected, + onClick = { + selectedTypes = if (isSelected) selectedTypes - type else selectedTypes + type + }, + label = { Text(type.simpleName?.replace(stringResource(R.string.text_question), "") ?: "") } + ) + } + } + } + } + Text(stringResource(R.string.text_difficulty_2d, difficultyLabels[difficulty.roundToInt()]), style = MaterialTheme.typography.labelLarge) + AppSlider(value = difficulty, onValueChange = { difficulty = it }, valueRange = 0f..2f, steps = 1) + Text(stringResource(R.string.text_amount_2d_questions, amount.roundToInt()), style = MaterialTheme.typography.labelLarge) + AppSlider(value = amount, onValueChange = { amount = it }, valueRange = 1f..20f, steps = 18) + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + TextButton(onClick = { step = 1 }) { Text(stringResource(R.string.cd_back)) } + Row(horizontalArrangement = Arrangement.spacedBy(8.dp), verticalAlignment = Alignment.CenterVertically) { + TextButton(onClick = { step = 1 }) { Text(stringResource(R.string.label_cancel)) } + DialogButton( + onClick = { + onGenerate( + category, + selectedTypes.toList(), + difficultyLabels[difficulty.roundToInt()], + amount.roundToInt(), + sourceLang, + targetLang + ) + onDismiss() + }, + enabled = isGenerateEnabled + ) { Text(stringResource(R.string.text_generate)) } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/exercises/MainExerciseScreen.kt b/app/src/main/java/eu/gaudian/translator/view/exercises/MainExerciseScreen.kt new file mode 100644 index 0000000..e7f8b6a --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/exercises/MainExerciseScreen.kt @@ -0,0 +1,206 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.exercises + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Exercise +import eu.gaudian.translator.view.composable.AppAlertDialog +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedCard +import eu.gaudian.translator.view.composable.AppTabLayout +import eu.gaudian.translator.view.composable.DialogButton +import eu.gaudian.translator.view.composable.TabItem +import eu.gaudian.translator.viewmodel.AiGenerationState +import eu.gaudian.translator.viewmodel.ExerciseViewModel + +/** + * Defines the tabs for the main Exercise screen, replacing the enum from ExerciseFragment. + */ +enum class ExerciseTab(override val title: String, override val icon: ImageVector) : TabItem { + Dashboard("Dashboard", AppIcons.Dashboard), + AllExercises("All Exercises", AppIcons.BarChart) +} + +/** + * This screen replaces ExerciseFragment. It acts as the main entry point for the "Exercises" tab, + * showing a tabbed layout for the dashboard and the list of all exercises. + * + * @param navController The main NavController to handle navigation to an exercise session. + * @param exerciseViewModel The ViewModel for managing exercise data and state. + */ +@Composable +fun MainExerciseScreen( + navController: NavController, + exerciseViewModel: ExerciseViewModel // Changed: No longer creates its own instance +) { + val aiState by exerciseViewModel.aiGenerationState.collectAsState() + var exerciseToDelete by remember { mutableStateOf(null) } + var showGenerateDialog by remember { mutableStateOf(false) } + + // This outer 'when' handles the AI generation state, same as in the fragment. + when (val currentState = aiState) { + is AiGenerationState.Idle -> { + var selectedTab by remember { mutableStateOf(ExerciseTab.Dashboard) } + + Box(modifier = Modifier.fillMaxSize()) { + Column(modifier = Modifier.fillMaxSize()) { + AppTabLayout( + tabs = ExerciseTab.entries, + selectedTab = selectedTab, + onTabSelected = { selectedTab = it } + ) + + Box(modifier = Modifier.weight(1f)) { + when (selectedTab) { + ExerciseTab.Dashboard -> ExerciseDashboard( + onCreateExercise = { showGenerateDialog = true } + ) + ExerciseTab.AllExercises -> ExerciseListScreen( + onExerciseClicked = { exercise -> + exerciseViewModel.startExercise(exercise) + navController.navigate("exercise_session") + }, + onDeleteClicked = { exercise -> + exerciseToDelete = exercise + }, + onLongExerciseClicked = { exercise -> + exerciseToDelete = exercise // Open delete dialog on long press + }, + ) + } + + } + } + + ExerciseMenu( + modifier = Modifier + .align(Alignment.BottomEnd) + .padding(16.dp), + onCreateExercise = { showGenerateDialog = true }, + onCreateYouTubeExercise = { + // Navigate to YouTube browser and keep MainExerciseScreen in the back stack + navController.navigate("youtube_browse") + }, + onStartExercise = { } //TODO + ) + + } + if (showGenerateDialog) { + GenerateExerciseDialog( + onDismiss = { + @Suppress("AssignedValueIsNeverRead") + showGenerateDialog = false + }, + onGenerate = { category, types, difficulty, amount, sourceLanguage, targetLanguage -> + exerciseViewModel.generateExerciseWithAi(category, types, difficulty, amount, sourceLanguage, targetLanguage) + } + ) + } + + + exerciseToDelete?.let { exercise -> + DeleteConfirmationDialog( + exercise = exercise, + onConfirm = { + // Assuming the Exercise model has a string or numeric ID + exerciseViewModel.deleteExercise(exercise.id) + }, + onDismiss = { + @Suppress("AssignedValueIsNeverRead") + exerciseToDelete = null + } + ) + } + } + else -> { + AiGenerationScreen(state = currentState) + } + } +} + +@Composable +private fun DeleteConfirmationDialog( + exercise: Exercise, + onConfirm: () -> Unit, + onDismiss: () -> Unit +) { + AppAlertDialog( + onDismissRequest = onDismiss, + title = { Text("Delete Exercise") }, + text = { Text("Are you sure you want to delete the exercise \"${exercise.title}\"? This action cannot be undone.") }, + confirmButton = { + DialogButton( + onClick = { + onConfirm() + onDismiss() + }, + ) { + Text("Delete") + } + }, + dismissButton = { + TextButton(onClick = onDismiss) { + Text("Cancel") + } + } + ) +} + +@Composable +private fun ExerciseDashboard(onCreateExercise: () -> Unit) { + AppOutlinedCard{ + Column( + modifier = Modifier + .fillMaxSize() + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Image( + painter = painterResource(id = R.drawable.ic_icon_construction), + contentDescription = null, + modifier = Modifier.size(200.dp), + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + "Danger Zone", + style = MaterialTheme.typography.headlineMedium + ) + Text( + "This area is under construction, exercises are in a beta state and may not work as expected.", + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding(top = 8.dp, bottom = 24.dp) + ) + AppButton(onClick = onCreateExercise) { + Icon(AppIcons.Add, contentDescription = null, modifier = Modifier.padding(end = 8.dp)) + Text("Generate New Exercise") + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/exercises/QuestionUIs.kt b/app/src/main/java/eu/gaudian/translator/view/exercises/QuestionUIs.kt new file mode 100644 index 0000000..6810ddb --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/exercises/QuestionUIs.kt @@ -0,0 +1,515 @@ +package eu.gaudian.translator.view.exercises + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.CategorizationQuestion +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.ListeningComprehensionQuestion +import eu.gaudian.translator.model.MatchingPairsQuestion +import eu.gaudian.translator.model.VocabularyTestQuestion +import eu.gaudian.translator.model.WordOrderQuestion +import eu.gaudian.translator.utils.TextToSpeechHelper +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.viewmodel.SettingsViewModel +import kotlinx.coroutines.launch +import java.util.Locale + +@Composable +fun WordChip(text: String, isSelected: Boolean, onClick: () -> Unit, enabled: Boolean = true) { + AppButton( + onClick = onClick, + enabled = enabled, + shape = RoundedCornerShape(16.dp), + colors = ButtonDefaults.buttonColors( + containerColor = if (isSelected) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.surface, + contentColor = if (isSelected) MaterialTheme.colorScheme.onPrimaryContainer else MaterialTheme.colorScheme.onSurface + ), + border = BorderStroke(2.dp, if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.outline) + ) { + Text(text) + } +} + +@Composable +@Preview +fun WordChipPreview() { + WordChip( + text = stringResource(R.string.text_sample_word), + isSelected = false, + onClick = {} + ) +} + +@Composable +fun FillInTheBlankQuestionUi( + question: eu.gaudian.translator.model.FillInTheBlankQuestion, + selectedAnswer: String, + onAnswerSelect: (String) -> Unit, + isLocked: Boolean +) { + val correct = question.correctAnswer + val firstLetter = correct.firstOrNull()?.toString() ?: "" + val placeholder = if (firstLetter.isNotBlank()) firstLetter + "_".repeat((correct.length - 1).coerceAtLeast(1)) else "_".repeat(correct.length.coerceAtLeast(1)) + + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + if (question.hintBaseForm.isNotBlank()) { + Text(stringResource(R.string.hint, question.hintBaseForm)) + } + if (question.hintOptions.isNotEmpty()) { + FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { + question.hintOptions.forEach { option -> + WordChip(text = option, isSelected = false, onClick = { if (!isLocked) onAnswerSelect(option) }, enabled = !isLocked) + } + } + } + AppTextField( + value = selectedAnswer, + onValueChange = onAnswerSelect, + placeholder = { Text(placeholder) }, + label = { Text(stringResource(R.string.label_your_answer)) }, + modifier = Modifier.fillMaxWidth(), + enabled = !isLocked, + singleLine = true + ) + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +@Preview +fun FillInTheBlankQuestionUiPreview() { + val question = eu.gaudian.translator.model.FillInTheBlankQuestion( + id = 1, + name = "The capital of France is ___.", + correctAnswer = "Paris", + hintBaseForm = "City in Europe", + hintOptions = listOf("Berlin", "Madrid", "Paris", "Rome") + ) + var selectedAnswer by remember { mutableStateOf("") } + FillInTheBlankQuestionUi( + question = question, + selectedAnswer = selectedAnswer, + onAnswerSelect = { + @Suppress("AssignedValueIsNeverRead") + selectedAnswer = it + }, + isLocked = false) +} + +@Composable +fun WordOrderQuestionUi( + question: WordOrderQuestion, + selectedAnswer: List, + onAnswerSelect: (List) -> Unit, + isLocked: Boolean +) { + val baseWords = remember(question.words, question.correctOrder) { + if (question.words == question.correctOrder) question.words.shuffled() else question.words + } + val availableWords = remember(baseWords, selectedAnswer) { + val selectedCounts = selectedAnswer.groupingBy { it }.eachCount() + baseWords.filter { word -> + (selectedCounts[word] ?: 0) < baseWords.count { it == word } + } + } + + Column(verticalArrangement = Arrangement.spacedBy(16.dp)) { + Box( + modifier = Modifier + .fillMaxWidth() + .defaultMinSize(minHeight = 70.dp) + .clip(RoundedCornerShape(8.dp)) + .border(1.dp, MaterialTheme.colorScheme.outline, RoundedCornerShape(8.dp)) + .padding(8.dp) + ) { + if (selectedAnswer.isEmpty()) { + Text(stringResource(R.string.tap_the_words_below_to_form_the_sentence), color = MaterialTheme.colorScheme.onSurfaceVariant) + } else { + FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { + selectedAnswer.forEachIndexed { index, word -> + WordChip( + text = word, + isSelected = false, + enabled = !isLocked, + onClick = { + val newList = selectedAnswer.toMutableList() + newList.removeAt(index) + onAnswerSelect(newList) + } + ) + } + } + } + } + + // The bank of available words + FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { + availableWords.forEach { word -> + WordChip( + text = word, + isSelected = false, + enabled = !isLocked, + onClick = { onAnswerSelect(selectedAnswer + word) } + ) + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +@Preview +fun WordOrderQuestionUiPreview() { + val question = WordOrderQuestion( + id = 1, + name = "Form the sentence.", + words = listOf("the", "quick", "brown", "fox"), + correctOrder = listOf("the", "quick", "brown", "fox") + ) + var selectedAnswer by remember { mutableStateOf>(emptyList()) } + WordOrderQuestionUi( + question = question, + selectedAnswer = selectedAnswer, + onAnswerSelect = { + @Suppress("AssignedValueIsNeverRead") + selectedAnswer = it + }, + isLocked = false + ) +} + +@Composable +fun MatchingPairsQuestionUi( + question: MatchingPairsQuestion, + selectedAnswer: Map, + onAnswerSelect: (Map) -> Unit, + isLocked: Boolean +) { + var selectedKey by remember { mutableStateOf(null) } + val keys = remember(question.pairs) { question.pairs.keys.shuffled() } + val values = remember(question.pairs) { question.pairs.values.shuffled() } + + // When locked (after check), highlight correct vs incorrect matches + val correctnessMap = remember(selectedAnswer, question.pairs, isLocked) { + if (!isLocked) emptyMap() + else selectedAnswer.mapValues { (k, v) -> question.pairs[k] == v } + } + + Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) { + Column(modifier = Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(8.dp)) { + keys.forEach { key -> + val isSelected = selectedKey == key || selectedAnswer.containsKey(key) + val isCorrect = correctnessMap[key] + val label = if (isLocked && isCorrect == false) "$key ✗" else if (isLocked && isCorrect == true) "$key ✓" else key + AnswerButton( + text = label, + isSelected = isSelected, + enabled = !isLocked && !selectedAnswer.containsKey(key), + onClick = { selectedKey = key } + ) + } + } + Column(modifier = Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(8.dp)) { + values.forEach { value -> + val isSelected = selectedAnswer.containsValue(value) + AnswerButton( + text = value, + isSelected = isSelected, + enabled = !isLocked && !isSelected, + onClick = { + selectedKey?.let { key -> + onAnswerSelect(selectedAnswer + (key to value)) + selectedKey = null + } + } + ) + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +@Preview +fun MatchingPairsQuestionUiPreview() { + val question = MatchingPairsQuestion( + id = 1, + name = "Match the capitals to their countries.", + pairs = mapOf("France" to "Paris", "Germany" to "Berlin", "Spain" to "Madrid") + ) + var selectedAnswer by remember { mutableStateOf>(emptyMap()) } + MatchingPairsQuestionUi( + question = question, + selectedAnswer = selectedAnswer, + onAnswerSelect = { + @Suppress("AssignedValueIsNeverRead") + selectedAnswer = it + }, + isLocked = false + ) +} + + +@Composable +fun ListeningComprehensionQuestionUi( + question: ListeningComprehensionQuestion, + selectedAnswer: String, + onAnswerSelect: (String) -> Unit, + isLocked: Boolean +) { + val context = LocalContext.current + val scope = rememberCoroutineScope() + val activity = LocalContext.current.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + val maskedHint = remember(question.name) { + val words = question.name.split(" ").filter { it.isNotBlank() } + if (words.size < 4) "" else { + val blankCount = (words.size * 0.4).toInt().coerceAtLeast(1) + val indicesToBlank = words.indices.shuffled().take(blankCount).toSet() + words.mapIndexed { idx, w -> if (idx in indicesToBlank) "___" else w } + .joinToString(" ") + } + } + + Column(verticalArrangement = Arrangement.spacedBy(16.dp), horizontalAlignment = Alignment.CenterHorizontally) { + IconButton( + onClick = { + scope.launch { + val locale = Locale.forLanguageTag(question.languageCode) + val language = Language( + nameResId = 0, + code = locale.language, + region = locale.country, + name = locale.displayName, + englishName = locale.displayName, + isCustom = false, + isSelected = true + ) + val voice = settingsViewModel.getTtsVoiceForLanguage(language.code, language.region) + TextToSpeechHelper.speakOut(context, question.name, language, voice) + } + }, + modifier = Modifier.size(80.dp) + ) { + Icon(AppIcons.TextToSpeech, contentDescription = stringResource(R.string.listen), modifier = Modifier.fillMaxSize()) + } + // Do NOT show the full sentence; show a masked hint instead (if available) + if (maskedHint.isNotBlank()) { + Text(maskedHint, style = MaterialTheme.typography.bodyMedium) + } + AppTextField( + value = selectedAnswer, + onValueChange = onAnswerSelect, + label = { Text(stringResource(R.string.type_what_you_hear)) }, + modifier = Modifier.fillMaxWidth(), + enabled = !isLocked + ) + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +@Preview +fun ListeningComprehensionQuestionUiPreview() { + val question = ListeningComprehensionQuestion( + id = 1, + name = "This is a sample sentence to be spoken.", + languageCode = "en-US" + ) + var selectedAnswer by remember { mutableStateOf("") } + ListeningComprehensionQuestionUi( + question = question, + selectedAnswer = selectedAnswer, + onAnswerSelect = { + @Suppress("AssignedValueIsNeverRead") + selectedAnswer = it + }, + isLocked = false + ) +} + +@Composable +fun CategorizationQuestionUi( + question: CategorizationQuestion, + selectedAnswer: Map, + onAnswerSelect: (Map) -> Unit, + isLocked: Boolean +) { + val unassignedItems = remember(question.items, selectedAnswer) { + question.items.filter { !selectedAnswer.containsKey(it) } + } + + val correctnessMap = remember(selectedAnswer, isLocked) { + if (!isLocked) emptyMap() else question.items.associateWith { item -> + val chosen = selectedAnswer[item] + val correct = question.correctMapping[item] + chosen != null && chosen == correct + } + } + + Column(verticalArrangement = Arrangement.spacedBy(16.dp)) { + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + question.categories.forEach { category -> + Column( + modifier = Modifier + .weight(1f) + .background( + MaterialTheme.colorScheme.surfaceVariant, + RoundedCornerShape(8.dp) + ) + .padding(8.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + Text(category, fontWeight = FontWeight.Bold) + selectedAnswer.filterValues { it == category }.keys.forEach { item -> + val isCorrect = correctnessMap[item] + val suffix = if (isLocked) { + if (isCorrect == true) " ✓" else if (isCorrect == false) " ✗" else "" + } else "" + Text(item + suffix, style = MaterialTheme.typography.bodySmall) + } + } + } + } + + if (unassignedItems.isNotEmpty() && !isLocked) { + var expandedItem by remember { mutableStateOf(null) } + Text(stringResource(R.string.text_assign_these_items_2d), style = MaterialTheme.typography.labelLarge) + LazyRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + items(unassignedItems) { item -> + Box { + WordChip( + text = item, + isSelected = false, + enabled = !isLocked, + onClick = { expandedItem = item } + ) + DropdownMenu( + expanded = expandedItem == item, + onDismissRequest = { expandedItem = null } + ) { + question.categories.forEach { category -> + DropdownMenuItem( + text = { Text(category) }, + onClick = { + onAnswerSelect(selectedAnswer + (item to category)) + expandedItem = null + } + ) + } + } + } + } + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +@Preview +fun CategorizationQuestionUiPreview() { + val question = CategorizationQuestion( + id = 1, + name = "Sort these items into categories.", + items = listOf("Apple", "Banana", "Carrot", "Broccoli"), + categories = listOf("Fruit", "Vegetable"), + correctMapping = mapOf("Apple" to "Fruit", "Banana" to "Fruit", "Carrot" to "Vegetable", "Broccoli" to "Vegetable") + ) + var selectedAnswer by remember { mutableStateOf>(emptyMap()) } + CategorizationQuestionUi( + question = question, + selectedAnswer = selectedAnswer, + onAnswerSelect = { + @Suppress("AssignedValueIsNeverRead") + selectedAnswer = it + }, + isLocked = false + ) +} + + +@Composable +fun VocabularyTestQuestionUi( + question: VocabularyTestQuestion, + selectedAnswer: String, + onAnswerSelect: (String) -> Unit, + isLocked: Boolean +) { + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text( + text = stringResource(R.string.translate_the_following_d, question.languageDirection), + style = MaterialTheme.typography.bodyMedium + ) + AppTextField( + value = selectedAnswer, + onValueChange = onAnswerSelect, + label = { Text(stringResource(R.string.label_your_translation)) }, + modifier = Modifier.fillMaxWidth(), + enabled = !isLocked, + singleLine = true + ) + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun VocabularyTestQuestionUiPreview() { + val question = VocabularyTestQuestion( + id = 1, + name = "Hello", + correctAnswer = "Hola", + languageDirection = "English to Spanish" + ) + var selectedAnswer by remember { mutableStateOf("") } + VocabularyTestQuestionUi( + question = question, + selectedAnswer = selectedAnswer, + onAnswerSelect = { + @Suppress("AssignedValueIsNeverRead") + selectedAnswer = it + }, + isLocked = false) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/exercises/YouTubeBrowserScreen.kt b/app/src/main/java/eu/gaudian/translator/view/exercises/YouTubeBrowserScreen.kt new file mode 100644 index 0000000..8d32325 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/exercises/YouTubeBrowserScreen.kt @@ -0,0 +1,275 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.exercises + +import android.annotation.SuppressLint +import android.graphics.Bitmap +import android.graphics.Color +import android.webkit.CookieManager +import android.webkit.JavascriptInterface +import android.webkit.WebChromeClient +import android.webkit.WebResourceRequest +import android.webkit.WebSettings +import android.webkit.WebView +import android.webkit.WebViewClient +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.viewinterop.AndroidView +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.viewmodel.ExerciseViewModel +import java.net.URLDecoder + +/** + * A screen that lets the user browse YouTube inside a WebView. When the user taps on a video link, + * we open the YouTubeExerciseDialog in language-only mode to pick languages, then start the exercise. + */ +@Suppress("HardCodedStringLiteral") +@Composable +@SuppressLint("SetJavaScriptEnabled") +fun YouTubeBrowserScreen( + navController: NavController, + exerciseViewModel: ExerciseViewModel +) { + var pendingVideoUrl by remember { mutableStateOf(null) } + var showLanguageDialog by remember { mutableStateOf(false) } + var showCustomDialog by remember { mutableStateOf(false) } + + val context = LocalContext.current + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text("YouTube") }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, stringResource(R.string.cd_back)) + } + } + ) + } + ) { padding -> + androidx.compose.foundation.layout.Box( + modifier = Modifier + .fillMaxSize() + .padding(padding) + ) { + AndroidView( + modifier = Modifier.fillMaxSize(), + factory = { + WebView(context).apply { + setBackgroundColor(Color.BLACK) + CookieManager.getInstance().setAcceptCookie(true) + CookieManager.getInstance().setAcceptThirdPartyCookies(this, true) + + settings.javaScriptEnabled = true + settings.domStorageEnabled = true + settings.loadsImagesAutomatically = true + settings.mediaPlaybackRequiresUserGesture = false + settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW + settings.useWideViewPort = true + settings.loadWithOverviewMode = true + + webChromeClient = WebChromeClient() + webViewClient = object : WebViewClient() { + override fun shouldOverrideUrlLoading( + view: WebView?, + request: WebResourceRequest? + ): Boolean { + val url = request?.url?.toString() ?: return false + if (url.startsWith("intent://")) { + extractFallbackFromIntentUrl(url)?.let { fallback -> + return handleUrl(fallback) { + pendingVideoUrl = it + showLanguageDialog = true + } + } + return true + } + return handleUrl(url) { + pendingVideoUrl = it + showLanguageDialog = true + } + } + + @Deprecated("Deprecated in Java") + override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { + val u = url ?: return false + if (u.startsWith("intent://")) { + extractFallbackFromIntentUrl(u)?.let { fallback -> + return handleUrl(fallback) { + pendingVideoUrl = it + showLanguageDialog = true + } + } + return true + } + return handleUrl(u) { + pendingVideoUrl = it + showLanguageDialog = true + } + } + + override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { + super.onPageStarted(view, url, favicon) + val u = url ?: return + if (!showLanguageDialog && isYouTubeWatchUrl(u)) { + pendingVideoUrl = u + showLanguageDialog = true + view?.stopLoading() + } + } + + override fun onPageFinished(view: WebView?, url: String?) { + super.onPageFinished(view, url) + // Inject JS hooks to catch SPA navigations and link clicks + view?.evaluateJavascript(YT_INTERCEPT_JS, null) + } + } + + // Bridge: receive URL changes from JS world + addJavascriptInterface(YouTubeJsBridge { url -> + // Ensure state changes happen on UI thread + this.post { + if (!showLanguageDialog) { + pendingVideoUrl = url + showLanguageDialog = true + try { stopLoading() } catch (_: Throwable) {} + } + } + }, "YTBridge") + + // Load mobile YouTube for better interaction in WebView + loadUrl("https://m.youtube.com/") + } + } + ) + FloatingActionButton( + onClick = { showCustomDialog = true }, + modifier = Modifier + .align(Alignment.BottomEnd) + .padding(16.dp) + ) { + Icon(imageVector = AppIcons.Add, contentDescription = "Add YouTube link") + } + } + } + + if (showLanguageDialog && pendingVideoUrl != null) { + YouTubeExerciseDialog( + onDismiss = { + showLanguageDialog = false + pendingVideoUrl = null + }, + onCreate = { _, sourceLanguage, targetLanguage -> + val url = pendingVideoUrl ?: return@YouTubeExerciseDialog + exerciseViewModel.startYouTubeExercise(url, sourceLanguage, targetLanguage) + // Navigate to the exercise screen; keep this browser on the back stack so back returns here + navController.navigate("youtube_exercise") + showLanguageDialog = false + pendingVideoUrl = null + }, + presetUrl = pendingVideoUrl!!, + languageOnly = true + ) + } + + if (showCustomDialog) { + YouTubeExerciseDialog( + onDismiss = { + showCustomDialog = false + }, + onCreate = { youtubeUrl, sourceLanguage, targetLanguage -> + exerciseViewModel.startYouTubeExercise(youtubeUrl, sourceLanguage, targetLanguage) + // Navigate to the exercise screen; keep this browser on the back stack so back returns here + navController.navigate("youtube_exercise") + showCustomDialog = false + }, + languageOnly = false + ) + } +} + +private fun isYouTubeWatchUrl(url: String): Boolean { + @Suppress("HardCodedStringLiteral") + return url.contains("youtube.com/watch") || url.contains("youtu.be/") || url.contains("youtube.com/shorts/") +} + +private inline fun handleUrl(url: String, onVideo: (String) -> Unit): Boolean { + return if (isYouTubeWatchUrl(url)) { + onVideo(url) + true // intercept + } else { + false // let WebView load normally + } +} + +@Suppress("HardCodedStringLiteral") +private fun extractFallbackFromIntentUrl(intentUrl: String): String? { + val match = Regex("S\\.browser_fallback_url=([^;]+)").find(intentUrl) ?: return null + val encoded = match.groupValues[1] + return try { + URLDecoder.decode(encoded, "UTF-8") + } catch (_: Exception) { + null + } +} + +// DO NOT EVER TOUCH THIS AGAIN +@Suppress("HardCodedStringLiteral") +private val YT_INTERCEPT_JS: String = ( + "(function(){" + + "if(window.__ytInterceptInstalled){return;}" + + "window.__ytInterceptInstalled=true;" + + "function notify(url){try{YTBridge.onUrlChange(url||location.href);}catch(e){}}" + + // Hook history API + "var ps=history.pushState, rs=history.replaceState;" + + "history.pushState=function(){ps.apply(this,arguments);notify();};" + + "history.replaceState=function(){rs.apply(this,arguments);notify();};" + + "window.addEventListener('popstate',function(){notify();},true);" + + // Intercept link clicks + "document.addEventListener('click',function(e){" + + "try{" + + "var el=e.target;" + + "while(el && el.tagName && el.tagName.toLowerCase()!=='a'){el=el.parentElement;}" + + "if(el && el.href){" + + "var href=el.href;" + + "if(/youtube\\.com\\/watch|youtu\\.be\\/|youtube\\.com\\/shorts\\//.test(href)){" + + "e.preventDefault();e.stopPropagation();" + + "notify(href);" + + "return false;" + + "}" + + "}" + + "}catch(ex){}" + + "}, true);" + + // Initial notify on first load (in case we landed directly on a watch page) + "setTimeout(function(){notify();},0);" + + "})();" +) + +private class YouTubeJsBridge(private val onVideo: (String) -> Unit) { + @Suppress("unused", "HardCodedStringLiteral") + @JavascriptInterface + fun onUrlChange(url: String) { + if (isYouTubeWatchUrl(url)) { + onVideo(url) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/exercises/YouTubeExerciseDialog.kt b/app/src/main/java/eu/gaudian/translator/view/exercises/YouTubeExerciseDialog.kt new file mode 100644 index 0000000..1c5b780 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/exercises/YouTubeExerciseDialog.kt @@ -0,0 +1,108 @@ +package eu.gaudian.translator.view.exercises + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.DialogButton +import eu.gaudian.translator.view.composable.SourceLanguageDropdown +import eu.gaudian.translator.view.composable.TargetLanguageDropdown +import eu.gaudian.translator.viewmodel.LanguageViewModel + +@Composable +fun YouTubeExerciseDialog( + onDismiss: () -> Unit, + onCreate: (youtubeUrl: String, sourceLanguage: Language, targetLanguage: Language) -> Unit, + presetUrl: String? = null, + languageOnly: Boolean = false +) { + val activity = LocalContext.current.findActivity() + var youtubeUrl by remember { mutableStateOf(presetUrl ?: "") } + + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val sourceLang = languageViewModel.selectedSourceLanguage.collectAsState().value + val targetLang = languageViewModel.selectedTargetLanguage.collectAsState().value + + val isCreateEnabled = (languageOnly || youtubeUrl.isNotBlank()) && sourceLang != null + + AppDialog(onDismissRequest = onDismiss) { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface) + ) { + Column(modifier = Modifier.padding(8.dp), verticalArrangement = Arrangement.spacedBy(16.dp)) { + Text( + text = stringResource(R.string.menu_create_youtube_exercise), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onSurface + ) + + if (!languageOnly) { + AppTextField( + value = youtubeUrl, + onValueChange = { youtubeUrl = it }, + label = { Text(stringResource(R.string.text_youtube_link)) }, + placeholder = { Text("https://www.youtube.com/watch?v=...") }, + modifier = Modifier.fillMaxWidth() + ) + } + + Text(stringResource(R.string.text_select_languages), style = MaterialTheme.typography.labelLarge) + Row(modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) { + Box(modifier = Modifier.weight(1f)) { + SourceLanguageDropdown(languageViewModel = languageViewModel, autoEnabled = true, iconEnabled = true) + } + Spacer(modifier = Modifier.width(8.dp)) + Box(modifier = Modifier.weight(1f)) { + TargetLanguageDropdown(languageViewModel = languageViewModel, iconEnabled = true) + } + } + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically + ) { + TextButton(onClick = onDismiss) { Text(stringResource(R.string.label_cancel)) } + DialogButton(onClick = { + if (sourceLang != null && targetLang != null) { + val finalUrl = (presetUrl ?: youtubeUrl).trim() + onCreate(finalUrl, sourceLang, targetLang) + } + onDismiss() + }, enabled = isCreateEnabled) { + Text(stringResource(R.string.label_confirm)) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/exercises/YouTubeExerciseScreen.kt b/app/src/main/java/eu/gaudian/translator/view/exercises/YouTubeExerciseScreen.kt new file mode 100644 index 0000000..af067a9 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/exercises/YouTubeExerciseScreen.kt @@ -0,0 +1,319 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.exercises + +import android.annotation.SuppressLint +import android.widget.Toast +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.viewinterop.AndroidView +import androidx.navigation.NavController +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.AbstractYouTubePlayerListener +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.options.IFramePlayerOptions +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.utils.loadOrCueVideo +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.viewmodel.ExerciseViewModel +import eu.gaudian.translator.viewmodel.YouTubeExerciseState + +@SuppressLint("SetJavaScriptEnabled") +@Composable +fun YouTubeExerciseScreen( + navController: NavController, + exerciseViewModel: ExerciseViewModel +) { + val context = LocalContext.current + val lifecycleOwner = androidx.lifecycle.compose.LocalLifecycleOwner.current + val sessionParams by exerciseViewModel.youTubeSessionParams.collectAsState() + val exerciseState by exerciseViewModel.youTubeExerciseState.collectAsState() + + val initialUrl = sessionParams?.url + val videoIdFromUrl = extractVideoId(initialUrl) + + var currentTimeSec by remember { mutableFloatStateOf(0f) } + val listState = rememberLazyListState() + var title by remember{ mutableStateOf(String())} + + // Keep a reference to the player to support seeking from the subtitle list + var youTubePlayerRef by remember { mutableStateOf(null) } + + // Video completion detection and manual finish + @Suppress("VariableNeverRead") var videoEnded by remember { mutableStateOf(false) } + var userWantsToFinish by remember { mutableStateOf(false) } + var isGeneratingQuestions by remember { mutableStateOf(false) } + val textErrorGeneratingQuestions = stringResource(R.string.text_error_generating_questions) + + // Create the player view once and manage its lifecycle + val playerView = remember { + YouTubePlayerView(context).apply { + enableAutomaticInitialization = false + val listener = object : AbstractYouTubePlayerListener() { + override fun onReady(youTubePlayer: YouTubePlayer) { + youTubePlayerRef = youTubePlayer + // Load the initial video when ready + videoIdFromUrl?.let { id -> + // Best practice: Use loadOrCueVideo to avoid playing in the background + // if the view is not resumed. + youTubePlayer.loadOrCueVideo(lifecycleOwner.lifecycle, id, 0f) + exerciseViewModel.fetchSubtitlesForVideoId(id) + } + } + override fun onCurrentSecond(youTubePlayer: YouTubePlayer, second: Float) { + currentTimeSec = second + } + + override fun onStateChange(youTubePlayer: YouTubePlayer, state: com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants.PlayerState) { + if (state == com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants.PlayerState.ENDED) { + videoEnded = true + } + } + } + // IFramePlayerOptions allow for more control over the player appearance and behavior + val options = IFramePlayerOptions.Builder(context) + .controls(1) // Show player controls + .rel(0) // Show related videos from the same channel + .build() + initialize(listener, options) + } + } + + // Attach the player view to the Composable's lifecycle + DisposableEffect(lifecycleOwner) { + lifecycleOwner.lifecycle.addObserver(playerView) + onDispose { + exerciseViewModel.clearYouTubeSubtitles() + // It's crucial to release the player resource when the Composable is disposed + try { playerView.release() } catch (_: Exception) {} + } + } + + // Support changing the URL during the session + LaunchedEffect(videoIdFromUrl) { + if (videoIdFromUrl != null) { + // Best practice: Use loadOrCueVideo for subsequent video loads as well. + youTubePlayerRef?.loadOrCueVideo(lifecycleOwner.lifecycle, videoIdFromUrl, 0f) + exerciseViewModel.fetchSubtitlesForVideoId(videoIdFromUrl) + } else { + exerciseViewModel.clearYouTubeSubtitles() + } + } + + fun seekTo(seconds: Float) { + youTubePlayerRef?.seekTo(seconds) + } + + // Generate questions when user wants to finish + LaunchedEffect(userWantsToFinish, exerciseState) { + if (userWantsToFinish && exerciseState is YouTubeExerciseState.Success && !isGeneratingQuestions) { + val state = exerciseState as YouTubeExerciseState.Success + val subtitles = state.subtitles + + if (subtitles.isNotEmpty()) { + isGeneratingQuestions = true + + // Use ViewModel method to avoid coroutine cancellation issues + exerciseViewModel.generateAndSaveYouTubeExercise( + subtitles = subtitles, + videoTitle = title, + videoId = videoIdFromUrl ?: "unknown", + sourceLanguage = sessionParams?.sourceLanguage, + targetLanguage = sessionParams?.targetLanguage, + onComplete = { exercise: eu.gaudian.translator.model.Exercise -> + // Exercise is saved, now get the questions for the session + exerciseViewModel.startExercise(exercise) + @Suppress("HardCodedStringLiteral") + navController.navigate("exercise_session") + }, + onError = { error -> + Toast.makeText( + context, + "$textErrorGeneratingQuestions $error", + Toast.LENGTH_LONG + ).show() + isGeneratingQuestions = false + } + ) + } + } + } + + // Navigation is now handled in the generateAndSaveYouTubeExercise onComplete callback + + fun onFinishVideo() { + userWantsToFinish = true + } + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(title, maxLines = 1) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource( + R.string.cd_back + )) + } + }, + actions = { + IconButton( + onClick = { onFinishVideo() }, + enabled = exerciseState is YouTubeExerciseState.Success && !isGeneratingQuestions + ) { + Icon( + AppIcons.Check, + contentDescription = stringResource(R.string.text_finish_video_and_start_exercise) + ) + } + } + ) + } + ) { innerPadding -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(innerPadding) + ) { + // Split mode: video player and subtitles panel + AndroidView( + factory = { playerView }, + modifier = Modifier + .fillMaxWidth() + .weight(1f) + ) + + Box( + modifier = Modifier + .fillMaxWidth() + .weight(2f) + .background(MaterialTheme.colorScheme.surfaceVariant), + contentAlignment = Alignment.Center + ) { + when (val state = exerciseState) { + is YouTubeExerciseState.Idle -> Text(stringResource(R.string.text_paste_or_open_a_), textAlign = TextAlign.Center, modifier = Modifier.padding(16.dp)) + is YouTubeExerciseState.Loading -> CircularProgressIndicator() + is YouTubeExerciseState.Error -> Text( + stringResource( + R.string.text_error_2d, + state.message + ), color = MaterialTheme.colorScheme.error, textAlign = TextAlign.Center, modifier = Modifier.padding(16.dp)) + is YouTubeExerciseState.Success -> { + title = state.videoTitle + val subtitles = state.subtitles + val activeIndex = subtitles.indexOfLast { s -> currentTimeSec >= s.start } + + LaunchedEffect(activeIndex) { + if (activeIndex >= 1) { + // Animate scroll to the currently active subtitle + listState.animateScrollToItem(index = activeIndex) + } + } + + // Show loading indicator when generating questions + if (isGeneratingQuestions) { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + CircularProgressIndicator() + Text( + text = stringResource(R.string.text_generating_questions_from_video), + modifier = Modifier.padding(top = 16.dp), + style = MaterialTheme.typography.bodyMedium + ) + } + } else { + LazyColumn( + modifier = Modifier.fillMaxSize(), + state = listState, + contentPadding = androidx.compose.foundation.layout.PaddingValues(vertical = 12.dp) + ) { + itemsIndexed(items = subtitles, key = { _, item -> item.start }) { index, subtitle -> + val isActive = index == activeIndex + val bg = if (isActive) MaterialTheme.colorScheme.primary.copy(alpha = 0.12f) else MaterialTheme.colorScheme.surfaceVariant + Column( + modifier = Modifier + .fillMaxWidth() + .background(bg) + .clickable { seekTo(subtitle.start) } + .padding(horizontal = 16.dp, vertical = 8.dp) + ) { + Text( + text = "${formatTimestamp(subtitle.start)} - ${formatTimestamp(subtitle.end)}", + style = MaterialTheme.typography.labelSmall, + color = if (isActive) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant + ) + Text( + text = subtitle.text, + fontWeight = if (isActive) FontWeight.Bold else FontWeight.Normal, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.fillMaxWidth() + ) + if (!subtitle.translatedText.isNullOrBlank()) { + Text( + text = subtitle.translatedText, + style = MaterialTheme.typography.bodyMedium, + color = if (isActive) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier + .fillMaxWidth() + .padding(top = 4.dp) + ) + } + } + } + } + } + } + } + } + } + } +} + +fun extractVideoId(url: String?): String? { + if (url == null) return null + @Suppress("RegExpRedundantEscape", "HardCodedStringLiteral") val pattern = "(?<=watch\\?v=|/videos/|embed\\/|youtu.be\\/|\\/v\\/|\\/e\\/|watch\\?v%3D|watch\\?feature=player_embedded&v=|%2Fvideos%2F|embed%2Fvideos%2F|youtu.be%2F)[^#&?]*".toRegex() + return pattern.find(url)?.value +} + +fun formatTimestamp(seconds: Float): String { + val total = seconds.toInt() + val mins = total / 60 + val secs = total % 60 + @Suppress("HardCodedStringLiteral") + return "%d:%02d".format(mins, secs) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/AddModelScanHint.kt b/app/src/main/java/eu/gaudian/translator/view/hints/AddModelScanHint.kt new file mode 100644 index 0000000..5e09ffb --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/AddModelScanHint.kt @@ -0,0 +1,154 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SuggestionChip +import androidx.compose.material3.SuggestionChipDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons + +/** + * Transformed AddModelScanHint using the new uniform Hint structure. + */ + +@Composable +fun getAddModelScanHint(): Hint { + return Hint( + titleRes = R.string.hint_scan_hint_title, + elements = listOf( + + HintElement.Section( + title = stringResource(R.string.scan_hint_section_how_scan_works), + content = listOf( + HintElement.Text(stringResource(R.string.scan_hint_how_scan_works_paragraph)), + HintElement.UIElement { Spacer(Modifier.height(8.dp)) }, + HintElement.UIElement { ReusedScanButtonPreview() }, + HintElement.UIElement { Spacer(Modifier.height(8.dp)) }, + HintElement.BulletList( + listOf( + stringResource(R.string.scan_hint_bullet_results_depend), + stringResource(R.string.scan_hint_bullet_public_private), + stringResource(R.string.scan_hint_bullet_try_again) + ) + ) + ) + ), + HintElement.Divider, + HintElement.Section( + title = stringResource(R.string.scan_hint_section_why_missing), + content = listOf( + HintElement.InfoBadge( + icon = AppIcons.Lock, + text = stringResource(R.string.scan_hint_badge_restricted) + ), + HintElement.InfoBadge( + icon = AppIcons.Warning, + text = stringResource(R.string.scan_hint_badge_not_suitable) + ), + HintElement.InfoBadge( + icon = AppIcons.CheckCircle, + text = stringResource(R.string.scan_hint_badge_only_text_models) + ), + HintElement.Divider, + HintElement.Text(stringResource(R.string.scan_hint_focus_text_models)), + HintElement.Divider, + HintElement.Card { + PerformanceTierChips() + }, + HintElement.Divider, + HintElement.InfoBadge( + icon = AppIcons.Info, + text = stringResource(R.string.scan_hint_most_tasks_small_models) + ) + ) + ), + HintElement.Divider, + HintElement.Section( + title = stringResource(R.string.scan_hint_section_tips), + content = listOf( + HintElement.BulletList( + listOf( + stringResource(R.string.scan_hint_tip_verify_key), + stringResource(R.string.scan_hint_tip_select_org), + stringResource(R.string.scan_hint_tip_type_manually), + stringResource(R.string.scan_hint_tip_instruct_chat_text) + ) + ) + ) + ), + HintElement.Divider, + HintElement.Section( + title = stringResource(R.string.hint_scan_hint_section_visual_guide), + content = listOf( + HintElement.VisualStep( + step = stringResource(R.string.hint_scan_hint_step_1), + title = stringResource(R.string.hint_scan_hint_step1_title), + description = stringResource(R.string.hint_scan_hint_step1_desc), + trailing = { + Icon(AppIcons.Search, contentDescription = null, tint = MaterialTheme.colorScheme.primary) + } + ), + HintElement.VisualStep( + step = stringResource(R.string.hint_scan_hint_step_2), + title = stringResource(R.string.hint_scan_hint_step2_title), + description = stringResource(R.string.hint_scan_hint_step2_desc), + trailing = { + SuggestionChip( + onClick = {}, + label = { Text(stringResource(R.string.hint_scan_hint_label_text_chat)) }, + enabled = false, + icon = {}, + colors = SuggestionChipDefaults.suggestionChipColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + labelColor = MaterialTheme.colorScheme.onPrimaryContainer + ) + ) + } + ), + HintElement.VisualStep( + step = stringResource(R.string.hint_scan_hint_step_3), + title = stringResource(R.string.hint_scan_hint_step3_title), + description = stringResource(R.string.hint_scan_hint_step3_desc), + trailing = { + SmallPrimaryCard(text = stringResource(R.string.hint_scan_hint_add_validate)) + } + ) + ) + ), + HintElement.Divider, + HintElement.Section( + title = stringResource(R.string.hint_scan_hint_section_cant_find), + content = listOf( + HintElement.Text(stringResource(R.string.hint_scan_hint_manual_add_paragraph)) + ) + ) + ) +) +} + + + +@Preview +@Composable +fun ReusedScanButtonPreviewPreview() { + ReusedScanButtonPreview() +} + +@Preview +@Composable +fun AddModelScanHintPreview() { + getAddModelScanHint().Render() +} + +@Composable +fun AddModelScanHint() { + getAddModelScanHint().Render() +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/ApiKeyHints.kt b/app/src/main/java/eu/gaudian/translator/view/hints/ApiKeyHints.kt new file mode 100644 index 0000000..7a5506a --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/ApiKeyHints.kt @@ -0,0 +1,125 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons + +object ApiKeyHint: LegacyHint() { + override val titleRes: Int = R.string.hint_how_to_connect_to_an_ai + + @Composable + override fun getTitle(): String = stringResource(R.string.hint_how_to_connect_to_an_ai) + + @Composable + override fun Content() { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + HeaderWithIcon( + title = stringResource(R.string.hint_how_to_connect_to_an_ai) + ) + + HintSection(title = stringResource(R.string.connecting_your_ai_model)) { + Text( + text = stringResource(R.string.api_hint_intro_1), + style = MaterialTheme.typography.bodyMedium + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stringResource(R.string.api_hint_intro_2), + style = MaterialTheme.typography.bodyMedium + ) + } + + HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) + + HintSection(title = stringResource(R.string.key_status_indicators_title)) { + Text( + text = stringResource(R.string.key_status_explanation), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(bottom = 8.dp) + ) + KeyStatus(hasKey = true) + Text( + text = stringResource(R.string.key_saved_and_active), + style = MaterialTheme.typography.bodySmall, + modifier = Modifier.padding(start = 20.dp, bottom = 8.dp) + ) + KeyStatus(hasKey = false) + Text( + text = stringResource(R.string.key_missing_or_cleared), + style = MaterialTheme.typography.bodySmall, + modifier = Modifier.padding(start = 20.dp) + ) + } + + HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) + + HintSection(title = stringResource(R.string.troubleshooting_title)) { + Text( + text = stringResource(R.string.troubleshooting_intro), + style = MaterialTheme.typography.bodyMedium + ) + Text( + text = stringResource(R.string.troubleshooting_bullets), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(top = 4.dp) + ) + } + } + } + + + @Composable + private fun KeyStatus(hasKey: Boolean) { + val (text, color, icon) = if (hasKey) { + Triple( + stringResource(R.string.text_key_active), + MaterialTheme.colorScheme.primary, + AppIcons.Check + ) + } else { + Triple( + stringResource(R.string.text_no_key), + MaterialTheme.colorScheme.error, + AppIcons.Warning + ) + } + Row(verticalAlignment = Alignment.CenterVertically) { + Icon( + imageVector = icon, + contentDescription = text, + tint = color, + modifier = Modifier.size(16.dp) + ) + Spacer(Modifier.width(4.dp)) + Text(text, color = color, style = MaterialTheme.typography.labelLarge) + } + } +} + +@Preview(showBackground = true) +@Composable +fun ApiKeyHintPreview() { + MaterialTheme { + ApiKeyHint.Content() + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/CategoryHint.kt b/app/src/main/java/eu/gaudian/translator/view/hints/CategoryHint.kt new file mode 100644 index 0000000..2d9cda9 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/CategoryHint.kt @@ -0,0 +1,116 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons + +object CategoryHint : LegacyHint() { + override val titleRes: Int = R.string.category_hint_intro + + @Composable + override fun Content() { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + HeaderWithIcon( + title = stringResource(R.string.category_hint_intro) + ) + + HintSection(title = stringResource(R.string.category_hint_intro)) { + // Tag Category Explanation (formerly List) + CategoryHintItem( + icon = { + Icon( + AppIcons.FilterList, + contentDescription = stringResource(R.string.content_desc_tag_category), + modifier = Modifier.size(32.dp), + tint = MaterialTheme.colorScheme.secondary + ) + }, + title = stringResource(R.string.text_list), + description = stringResource(R.string.hint_list_category) + ) + + // Filter Category Explanation + CategoryHintItem( + icon = { + Icon( + AppIcons.FilterCategory, + contentDescription = stringResource(R.string.content_desc_filter_category), + modifier = Modifier.size(32.dp), + tint = MaterialTheme.colorScheme.secondary + ) + }, + title = stringResource(R.string.text_filter), + description = stringResource(R.string.hint_filter_category_description) + ) + } + } + } +} + +@Composable +fun CategoryHint() { + CategoryHint.Content() +} + +@Composable +private fun CategoryHintItem( + icon: @Composable () -> Unit, + title: String, + description: String +) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + icon() + Column { + Text(text = title, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.Bold) + Spacer(modifier = Modifier.height(4.dp)) + Text(text = description, style = MaterialTheme.typography.bodyMedium) + } + } +} + +@Preview +@Composable +fun CategoryHintPreview() { + CategoryHint() +} + +@Preview +@Composable +fun CategoryHintItemPreview() { + CategoryHintItem( + icon = { + Icon( + AppIcons.Category, + contentDescription = stringResource(R.string.cd_tag_category), + modifier = Modifier.size(32.dp), + tint = MaterialTheme.colorScheme.secondary + ) + }, + title = stringResource(R.string.text_list), + description = stringResource(R.string.category_hint_item_preview_description) + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/CategoryHintScreen.kt b/app/src/main/java/eu/gaudian/translator/view/hints/CategoryHintScreen.kt new file mode 100644 index 0000000..53521ca --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/CategoryHintScreen.kt @@ -0,0 +1,131 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons + +object CategoryHintScreen : LegacyHint() { + override val titleRes: Int = R.string.category_hint_intro + + @Composable + override fun Content() { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + HeaderWithIcon( + title = stringResource(R.string.category_hint_intro) + ) + + HintSection(title = stringResource(R.string.category_list_title)) { + Text( + text = stringResource(R.string.category_list_description), + style = MaterialTheme.typography.bodyMedium + ) + Spacer(modifier = Modifier.height(8.dp)) + // Visual representation for List Category + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + WordItem(text = stringResource(R.string.example_word_apple)) + Icon(AppIcons.Add, contentDescription = stringResource(R.string.action_add), tint = MaterialTheme.colorScheme.secondary) + CategoryBox(icon = AppIcons.FilterList, text = stringResource(R.string.example_category_my_fruit_list)) + } + } + + HorizontalDivider() + + HintSection(title = stringResource(R.string.category_filter_title)) { + Text( + text = stringResource(R.string.category_filter_description), + style = MaterialTheme.typography.bodyMedium + ) + Spacer(modifier = Modifier.height(8.dp)) + // Visual representation for Filter Category + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Row { + WordItem(text = stringResource(R.string.example_word_dog), subtext = stringResource(R.string.stage_1)) + Spacer(modifier = Modifier.padding(horizontal = 4.dp)) + WordItem(text = stringResource(R.string.example_word_cat), subtext = stringResource(R.string.stage_1)) + } + CategoryBox(icon = AppIcons.FilterCategory, text = stringResource(R.string.example_filter_stage_1)) + } + } + } + } +} + +@Composable +fun CategoryHintScreen() { + CategoryHintScreen.Content() +} + +/** + * A simple visual representation of a vocabulary word. + */ +@Composable +private fun WordItem(text: String, subtext: String? = null) { + Box( + modifier = Modifier + .clip(RoundedCornerShape(8.dp)) + .background(MaterialTheme.colorScheme.surfaceContainer) + .padding(horizontal = 12.dp, vertical = 6.dp) + ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text(text = text, style = MaterialTheme.typography.bodyMedium, fontWeight = FontWeight.SemiBold) + subtext?.let { + Text(text = it, style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant) + } + } + } +} + +/** + * A simple visual representation of a category. + */ +@Composable +private fun CategoryBox(icon: ImageVector, text: String) { + Row( + modifier = Modifier + .clip(RoundedCornerShape(8.dp)) + .background(MaterialTheme.colorScheme.secondaryContainer) + .padding(horizontal = 12.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + Icon(imageVector = icon, contentDescription = text, modifier = Modifier.size(24.dp)) + Text(text = text, style = MaterialTheme.typography.bodyMedium, fontWeight = FontWeight.Bold) + } +} + + +@Preview(showBackground = true) +@Composable +fun CategoryHintScreenPreview() { + MaterialTheme { + CategoryHintScreen() + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/DictionaryOptionsHint.kt b/app/src/main/java/eu/gaudian/translator/view/hints/DictionaryOptionsHint.kt new file mode 100644 index 0000000..92023c4 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/DictionaryOptionsHint.kt @@ -0,0 +1,79 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons + +@Composable +fun getDictionaryOptionsHint(): Hint { + return Hint( + titleRes = R.string.label_dictionary_options, + elements = listOf( + HintElement.Section( + title = stringResource(R.string.hint_dictionary_desc), + content = listOf( + // VisualStep 1: + HintElement.VisualStep( + step = "1", + title = stringResource(R.string.hint_dict_options_step1_title), + description = stringResource(R.string.hint_dict_options_step1_desc) + ), + // VisualStep 2: + HintElement.VisualStep( + step = "2", + title = stringResource(R.string.hint_dict_options_step2_title), + description = stringResource(R.string.hint_dict_options_step2_desc), + trailing = { + // Custom trailing composable from the original hint + Row( + modifier = Modifier + .clip(RoundedCornerShape(8.dp)) + .background(MaterialTheme.colorScheme.surfaceContainer) + .padding(horizontal = 12.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text( + text = stringResource(R.string.eg_synonyms), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Icon( + imageVector = AppIcons.SwitchOn, + contentDescription = stringResource(R.string.example_toggle), + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(32.dp) + ) + } + } + ) + ) + ) + ) + ) +} + +/** + * Preview for the migrated DictionaryOptionsHint. + * It now calls getDictionaryOptionsHint() and then Render(). + */ +@Preview +@Composable +fun DictionaryOptionsHintPreview() { + getDictionaryOptionsHint().Render() +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/ExampleModernHint.kt b/app/src/main/java/eu/gaudian/translator/view/hints/ExampleModernHint.kt new file mode 100644 index 0000000..bb6591c --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/ExampleModernHint.kt @@ -0,0 +1,162 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material3.FilterChipDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SuggestionChip +import androidx.compose.material3.SuggestionChipDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedButton + +/** + * Example of a modern hint using the new uniform structure with Hint and HintElements. + * This demonstrates how to migrate from the old Content() based hints to the new element-based system. + */ +val ExampleModernHint = Hint( + titleRes = R.string.hint_example_hint_scan_for_models_hint, + subtitle = "How to find and add AI models to your app", + elements = listOf( + HintElement.Section( + title = "How Scanning Works", + content = listOf( + HintElement.Text("The scan feature searches for available AI models on your device or network."), + HintElement.UIElement { + ReusedScanButtonPreview() + }, + HintElement.BulletList( + listOf( + "Results depend on your API key permissions.", + "Only public models are shown by default.", + "Try again if no models are found." + ) + ) + ) + ), + HintElement.Divider, + HintElement.Section( + title = "Why Some Models Are Missing", + content = listOf( + HintElement.InfoBadge( + icon = AppIcons.Lock, + text = "Restricted access" + ), + HintElement.InfoBadge( + icon = AppIcons.Warning, + text = "Not suitable for this app" + ), + HintElement.InfoBadge( + icon = AppIcons.CheckCircle, + text = "Only text models are supported" + ), + HintElement.Text("Focus on text-based models for best performance."), + HintElement.Card { + PerformanceTierChips() + }, + HintElement.InfoBadge( + icon = AppIcons.Info, + text = "Most tasks work well with smaller models" + ) + ) + ), + HintElement.Divider, + HintElement.Section( + title = "Tips", + content = listOf( + HintElement.BulletList( + listOf( + "Verify your API key is active.", + "Select the correct organization.", + "Type model names manually if needed.", + "Prefer instruct or chat models for text." + ) + ) + ) + ), + HintElement.Divider, + HintElement.Section( + title = "Visual Guide", + content = listOf( + HintElement.VisualStep( + step = "1", + title = "Initiate Scan", + description = "Click the scan button to search for models.", + trailing = { + Icon(AppIcons.Search, contentDescription = null, tint = MaterialTheme.colorScheme.primary) + } + ), + HintElement.VisualStep( + step = "2", + title = "Select Model Type", + description = "Choose between text, chat, or instruct models.", + trailing = { + SuggestionChip( + onClick = {}, + label = { Text("Text Chat") }, + enabled = false, + colors = SuggestionChipDefaults.suggestionChipColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + labelColor = MaterialTheme.colorScheme.onPrimaryContainer + ) + ) + } + ), + HintElement.VisualStep( + step = "3", + title = "Add and Validate", + description = "Add the selected model and validate it.", + trailing = { + SmallPrimaryCard(text = "Add & Validate") + } + ) + ) + ), + HintElement.Divider, + HintElement.Section( + title = "Can't Find Your Model?", + content = listOf( + HintElement.Text("You can manually add models by entering their details.") + ) + ) + ) +) + +/** + * Preview composable for the example modern hint. + */ +@Preview +@Composable +fun ExampleModernHintPreview() { + ExampleModernHint.Render() +} + +/** + * Reused composable for scan button preview (from original hint). + */ +@Preview +@Composable +fun ReusedScanButtonPreview() { + AppCard { + AppOutlinedButton(onClick = {}, enabled = true, modifier = Modifier.fillMaxWidth()) { + Icon( + AppIcons.Search, + contentDescription = null, + modifier = Modifier.size(FilterChipDefaults.IconSize) + ) + Spacer(Modifier.width(8.dp)) + Text(text = "Scan for Models") + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/Hint.kt b/app/src/main/java/eu/gaudian/translator/view/hints/Hint.kt new file mode 100644 index 0000000..1b0a0ac --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/Hint.kt @@ -0,0 +1,324 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SuggestionChip +import androidx.compose.material3.SuggestionChipDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons + +/** + * Data class for the new uniform Hint structure. + * Each hint has a title and a list of HintElements. + */ +data class Hint( + val titleRes: Int, + val subtitle: String? = null, + val elements: List +) { + /** + * Composable to render the hint. + */ + @Composable + fun Render() { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + HeaderWithIcon(title = getTitle(), subtitle) + elements.forEach { RenderHintElement(it) } + } + } + @Composable + fun getTitle(): String = stringResource(titleRes) +} + +/** + * Legacy abstract class for existing hints (to be migrated). + * New hints should use the data class above. + */ +@Deprecated("Use Hint data class instead") +abstract class LegacyHint { + abstract val titleRes: Int + + @Composable + abstract fun Content() + + @Composable + open fun getTitle(): String = stringResource(titleRes) +} +@Composable +fun HeaderWithIcon(title: String, subtitle: String? = null) { + Row(verticalAlignment = Alignment.CenterVertically) { + Icon( + imageVector = AppIcons.Info, + contentDescription = null, + tint = MaterialTheme.colorScheme.secondary + ) + + Spacer(Modifier.width(8.dp)) + Column(modifier = Modifier.weight(1f)) { + Text( + title, + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold + ) + if(subtitle != null) { + Text( + subtitle, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + )} + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun HeaderWithIconPreview() { + HeaderWithIcon(title = "Sample Title", subtitle = "Sample Subtitle") +} + +@Composable +fun HintSection(title: String, content: @Composable () -> Unit) { + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text(title, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.Bold) + content() + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun HintSectionPreview() { + AppCard( + modifier = Modifier.fillMaxWidth(), + ) { + HintSection(title = "Sample Section Title") { + Text("Sample section content.") + } + } +} + +@Composable +fun BulletPoints(items: List) { + Column(verticalArrangement = Arrangement.spacedBy(6.dp)) { + items.forEach { line -> + Row(verticalAlignment = Alignment.Top) { + Text("•", modifier = Modifier.width(16.dp), textAlign = TextAlign.Center) + Text(line, style = MaterialTheme.typography.bodyMedium) + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun BulletPointsPreview() { + BulletPoints(items = listOf("Point 1", "Point 2", "Point 3")) +} + +@Composable +fun InfoBadgeRow(icon: ImageVector, text: String) { + Row(verticalAlignment = Alignment.CenterVertically) { + Icon(icon, contentDescription = null, tint = MaterialTheme.colorScheme.primary, modifier = Modifier.size(16.dp)) + Spacer(Modifier.width(6.dp)) + Text(text, style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant) + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun InfoBadgeRowPreview() { + InfoBadgeRow(icon = AppIcons.Info, text = "Sample info badge text") +} + + + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun PerformanceTierChips() { + FlowRow( + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + SuggestionChip( + onClick = {}, + label = { Text(stringResource(R.string.hint_scan_hint_chip_nano)) }, + enabled = false, + colors = SuggestionChipDefaults.suggestionChipColors( + containerColor = MaterialTheme.colorScheme.secondaryContainer, + labelColor = MaterialTheme.colorScheme.onSecondaryContainer + ) + ) + SuggestionChip( + onClick = {}, + label = { Text(stringResource(R.string.hint_scan_hint_chip_mini)) }, + enabled = false, + colors = SuggestionChipDefaults.suggestionChipColors( + containerColor = MaterialTheme.colorScheme.secondaryContainer, + labelColor = MaterialTheme.colorScheme.onSecondaryContainer + ) + ) + SuggestionChip( + onClick = {}, + label = { Text(stringResource(R.string.hint_scan_hint_chip_small)) }, + enabled = false, + colors = SuggestionChipDefaults.suggestionChipColors( + containerColor = MaterialTheme.colorScheme.secondaryContainer, + labelColor = MaterialTheme.colorScheme.onSecondaryContainer + ) + ) + SuggestionChip( + onClick = {}, + label = { Text(stringResource(R.string.hint_scan_hint_chip_medium)) }, + enabled = false, + colors = SuggestionChipDefaults.suggestionChipColors( + containerColor = MaterialTheme.colorScheme.surfaceVariant, + labelColor = MaterialTheme.colorScheme.onSurfaceVariant + ) + ) + SuggestionChip( + onClick = {}, + label = { Text(stringResource(R.string.hint_scan_hint_chip_large_paid)) }, + enabled = false, + colors = SuggestionChipDefaults.suggestionChipColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + labelColor = MaterialTheme.colorScheme.onPrimaryContainer + ) + ) + } +} + +@Preview +@Composable +fun PerformanceTierChipsPreview() { + PerformanceTierChips() +} + + + + + +@Composable +fun VisualStep( + step: String, + title: String, + description: String, + trailing: @Composable (() -> Unit)? = null +) { + AppCard( + modifier = Modifier.fillMaxWidth(), + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(12.dp), + verticalAlignment = Alignment.CenterVertically + ) { + StepBadge(step) + Spacer(Modifier.width(12.dp)) + Column(modifier = Modifier.weight(1f)) { + Text(title, style = MaterialTheme.typography.titleSmall, fontWeight = FontWeight.SemiBold) + Text(description, style = MaterialTheme.typography.bodySmall) + } + } + if (trailing != null) { + Spacer(Modifier.width(8.dp)) + Row( + Modifier + .fillMaxWidth() + .padding(12.dp), + verticalAlignment = Alignment.CenterVertically + ){ + trailing() + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun VisualStepPreview() { + VisualStep( + step = "1", + title = "Sample Step Title", + description = "Sample step description.", + trailing = { Icon(AppIcons.Search, contentDescription = null) } + ) +} + +@Composable +private fun StepBadge(step: String) { + Card( + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.primaryContainer), + shape = RoundedCornerShape(8.dp) + ) { + Box(modifier = Modifier.padding(horizontal = 10.dp, vertical = 6.dp), contentAlignment = Alignment.Center) { + Text(step, color = MaterialTheme.colorScheme.onPrimaryContainer, fontWeight = FontWeight.Bold, fontSize = 12.sp) + } + } +} + +@Preview +@Composable +fun StepBadgePreview() { + StepBadge(step = "1") +} + +@Composable +fun SmallPrimaryCard(text: String) { + Card(colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.primary)) { + Box(modifier = Modifier.padding(horizontal = 10.dp, vertical = 6.dp)) { + Text(text, color = MaterialTheme.colorScheme.onPrimary, fontSize = 12.sp, fontWeight = FontWeight.SemiBold) + } + } +} + +@Composable +fun TextSection(title: String, text: String) { + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text(title, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.Bold) + Text(text, style = MaterialTheme.typography.bodySmall) + } +} + + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun SmallPrimaryCardPreview() { + SmallPrimaryCard(text = "Sample Text") +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/HintBottomSheet.kt b/app/src/main/java/eu/gaudian/translator/view/hints/HintBottomSheet.kt new file mode 100644 index 0000000..28b02ba --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/HintBottomSheet.kt @@ -0,0 +1,73 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.SheetState +import androidx.compose.material3.Text +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppButton +import kotlinx.coroutines.launch + +/** + * A shared modal bottom sheet for displaying hint content. + * The content area is scrollable if it exceeds the available space. + * + * @param onDismissRequest Called when the user requests to dismiss the sheet. + * @param sheetState The state of the bottom sheet. + * @param content The hint content to display inside the sheet. + */ +@Composable +fun HintBottomSheet( + onDismissRequest: () -> Unit, + sheetState: SheetState, + content: @Composable (() -> Unit)? +) { + val scope = rememberCoroutineScope() + ModalBottomSheet( + onDismissRequest = onDismissRequest, + sheetState = rememberModalBottomSheetState( + skipPartiallyExpanded = true + ) + ) { + + + Column(modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp)) { + + Column( + modifier = Modifier + .weight(1f, fill = false) + .verticalScroll(rememberScrollState()) + ) { + content?.invoke() + } + + Spacer(modifier = Modifier.height(16.dp)) + AppButton( + onClick = { + scope.launch { sheetState.hide() }.invokeOnCompletion { + if (!sheetState.isVisible) { + onDismissRequest() + } + } + }, + modifier = Modifier + .align(Alignment.End) + .padding(bottom = 8.dp) + ) { + Text(stringResource(R.string.got_it)) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/HintComposable.kt b/app/src/main/java/eu/gaudian/translator/view/hints/HintComposable.kt new file mode 100644 index 0000000..c6b2e84 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/HintComposable.kt @@ -0,0 +1,95 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.compositionLocalOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons + +/** + * A CompositionLocal to provide the "show hints" setting down the component tree. + * This avoids having to pass the setting as a parameter to every composable. + * The default value is `false`. + */ +val LocalShowHints = compositionLocalOf { false } + +/** + * A wrapper composable that adds an optional hint button next to its content. + * The button is only visible if the 'LocalShowHints' CompositionLocal is true. + * When clicked, it displays the provided hint content in a ModalBottomSheet. + * + * @param hintContent The composable content to display inside the ModalBottomSheet. + * @param modifier The modifier to be applied to the layout. + * @param content The main composable content that this hint is for. + */ +@Composable +fun WithHint( + hintContent: @Composable () -> Unit, + modifier: Modifier = Modifier, + content: @Composable () -> Unit +) { + val showHints = LocalShowHints.current + + val sheetState = rememberModalBottomSheetState() + var showBottomSheet by remember { mutableStateOf(false) } + + Row( + modifier = modifier, + verticalAlignment = Alignment.CenterVertically + ) { + content() + + if (showHints) { + IconButton( + onClick = { showBottomSheet = true }, + modifier = Modifier.padding(start = 4.dp) + ) { + Icon( + imageVector = AppIcons.Help, + contentDescription = stringResource(R.string.show_hint), + tint = MaterialTheme.colorScheme.secondary + ) + } + } + } + + if (showBottomSheet) { + HintBottomSheet( + onDismissRequest = { + @Suppress("AssignedValueIsNeverRead") + showBottomSheet = false + }, + sheetState = sheetState, + hintContent + ) + } +} + +@Preview +@Composable +fun WithHintPreview() { + androidx.compose.runtime.CompositionLocalProvider(LocalShowHints provides true) { + WithHint( + hintContent = { + Text(stringResource(R.string.this_is_a_hint)) + } + ) { + Text(stringResource(R.string.this_is_the_main_content)) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/HintElement.kt b/app/src/main/java/eu/gaudian/translator/view/hints/HintElement.kt new file mode 100644 index 0000000..a22ede9 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/HintElement.kt @@ -0,0 +1,261 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.tooling.preview.Preview +import eu.gaudian.translator.view.composable.AppIcons + +/** + * Sealed class representing different types of elements that can be used in a Hint. + * Each subclass corresponds to a specific UI component or content type. + */ +sealed class HintElement { + + /** + * A simple text element. + */ + data class Text(val text: String) : HintElement() + + /** + * A header element with an icon, title, and optional subtitle. + */ + data class Header(val title: String, val subtitle: String? = null) : HintElement() + + /** + * A section element that groups content with a title. + */ + data class Section(val title: String, val content: List) : HintElement() + + data class TextSection(val title: String, val text: String) : HintElement() + + /** + * A bullet list element. + */ + data class BulletList(val items: List) : HintElement() + + /** + * A visual step element with step number, title, description, and optional trailing composable. + */ + data class VisualStep( + val step: String, + val title: String, + val description: String, + val trailing: (@Composable () -> Unit)? = null + ) : HintElement() + + /** + * An info badge row with an icon and text. + */ + data class InfoBadge(val icon: ImageVector, val text: String) : HintElement() + + /** + * A divider element. + */ + object Divider : HintElement() + + /** + * A card element with content. + */ + data class Card(val content: @Composable () -> Unit) : HintElement() + + /** + * A chips element for performance tiers or similar. + */ + data class Chips(val chips: List) : HintElement() + + /** + * A small primary card with text. + */ + data class SmallCard(val text: String) : HintElement() + + /** + * A custom UI element with a composable. + */ + data class UIElement(val composable: @Composable () -> Unit) : HintElement() +} + +/** + * Composable to render a HintElement. + */ +@Composable +fun RenderHintElement(element: HintElement) { + when (element) { + is HintElement.Text -> { + Text( + text = element.text, + style = MaterialTheme.typography.bodyMedium + ) + } + is HintElement.Header -> { + HeaderWithIcon(title = element.title, subtitle = element.subtitle) + } + is HintElement.Section -> { + HintSection(title = element.title) { + element.content.forEach { RenderHintElement(it) } + } + } + is HintElement.BulletList -> { + BulletPoints(items = element.items) + } + is HintElement.VisualStep -> { + VisualStep( + step = element.step, + title = element.title, + description = element.description, + trailing = element.trailing + ) + } + is HintElement.InfoBadge -> { + InfoBadgeRow(icon = element.icon, text = element.text) + } + is HintElement.Divider -> { + HorizontalDivider() + } + is HintElement.Card -> { + element.content() + } + is HintElement.Chips -> { + PerformanceTierChips(chips = element.chips) + } + is HintElement.SmallCard -> { + SmallPrimaryCard(text = element.text) + } + is HintElement.UIElement -> { + element.composable() + } + is HintElement.TextSection -> { + TextSection(title = element.title, text = element.text) + } + } +} + +/** + * Helper composable for PerformanceTierChips based on list of strings. + */ +@Composable +fun PerformanceTierChips(chips: List) { + // Assuming chips are resource strings or direct strings + chips.forEach { chip -> + Text(text = chip, style = MaterialTheme.typography.bodySmall) // Simplified for template + } +} + +// Preview Composables for each HintElement type + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun TextElementPreview() { + RenderHintElement(HintElement.Text("This is a sample text element.")) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun HeaderElementPreview() { + RenderHintElement(HintElement.Header("Sample Header", "Optional subtitle")) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun SectionElementPreview() { + RenderHintElement( + HintElement.Section( + title = "Sample Section", + content = listOf( + HintElement.Text("Content 1"), + HintElement.Text("Content 2") + ) + ) + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun BulletListElementPreview() { + RenderHintElement( + HintElement.BulletList( + listOf("Item 1", "Item 2", "Item 3") + ) + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun VisualStepElementPreview() { + RenderHintElement( + HintElement.VisualStep( + step = "1", + title = "Sample Step", + description = "This is a description of the step.", + trailing = { + Icon(AppIcons.Info, contentDescription = null) + } + ) + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun InfoBadgeElementPreview() { + RenderHintElement( + HintElement.InfoBadge( + icon = AppIcons.Info, + text = "Sample info badge" + ) + ) +} + +@Preview +@Composable +fun DividerElementPreview() { + RenderHintElement(HintElement.Divider) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun CardElementPreview() { + RenderHintElement( + HintElement.Card { + Text("Content inside card") + } + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun ChipsElementPreview() { + RenderHintElement( + HintElement.Chips( + listOf("Chip 1", "Chip 2", "Chip 3") + ) + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun SmallCardElementPreview() { + RenderHintElement(HintElement.SmallCard("Sample Card")) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun UIElementPreview() { + RenderHintElement( + HintElement.UIElement { + Text("Custom UI Element") + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/HintScreen.kt b/app/src/main/java/eu/gaudian/translator/view/hints/HintScreen.kt new file mode 100644 index 0000000..aeab7d7 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/HintScreen.kt @@ -0,0 +1,51 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar + +/** + * Generic hint screen wrapper that provides a consistent layout for all hint screens + * with a top app bar and back navigation. + */ +@Composable +fun HintScreen( + navController: NavController, + title: String, + content: @Composable () -> Unit +) { + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(title) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .verticalScroll(rememberScrollState()) + ) { + content() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/HintScreens.kt b/app/src/main/java/eu/gaudian/translator/view/hints/HintScreens.kt new file mode 100644 index 0000000..b6444df --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/HintScreens.kt @@ -0,0 +1,121 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.runtime.Composable +import androidx.navigation.NavController + +/** + * Wrapper for Category Hint Screen + */ +@Composable +fun CategoryHintScreenWrapper(navController: NavController) { + HintScreen( + navController = navController, + title = CategoryHint.getTitle() + ) { + CategoryHint.Content() + } +} + +/** + * Dictionary Hint Screen + */ +@Composable +fun DictionaryHintScreen(navController: NavController) { + HintScreen( + navController = navController, + title = getDictionaryOptionsHint().getTitle() + ) { + getDictionaryOptionsHint() + } +} + +/** + * Import Hint Screen + */ +@Composable +fun ImportHintScreen(navController: NavController) { + HintScreen( + navController = navController, + title = getImportVocabularyHint().getTitle() + ) { + getImportVocabularyHint() + } +} + +/** + * Sorting Hint Screen + */ +@Composable +fun SortingHintScreen(navController: NavController) { + HintScreen( + navController = navController, + title = SortingScreenHint.getTitle() + ) { + SortingScreenHint.Content() + } +} + +/** + * Stages Hint Screen + */ +@Composable +fun StagesHintScreen(navController: NavController) { + HintScreen( + navController = navController, + title = LearningStagesHint.getTitle() + ) { + LearningStagesHint.Content() + } +} + +/** + * Translation Hint Screen + */ +@Composable +fun TranslationHintScreen(navController: NavController) { + HintScreen( + navController = navController, + title = getTranslationScreenHint().getTitle() + ) { + getTranslationScreenHint() + } +} + +/** + * Scan Hint Screen + */ +@Composable +fun ScanHintScreen(navController: NavController) { + HintScreen( + navController = navController, + title = getAddModelScanHint().getTitle() + ) { + AddModelScanHint() + } +} + +/** + * API Hint Screen + */ +@Composable +fun ApiHintScreen(navController: NavController) { + HintScreen( + navController = navController, + title = ApiKeyHint.getTitle() + ) { + ApiKeyHint.Content() + } +} + +/** + * Vocabulary Progress Hint Screen + */ +@Composable +fun VocabularyProgressHintScreen(navController: NavController) { + HintScreen( + navController = navController, + title = VocabularyProgressHint.getTitle() + ) { + VocabularyProgressHint.Content() + } +} diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/HintsOverviewScreen.kt b/app/src/main/java/eu/gaudian/translator/view/hints/HintsOverviewScreen.kt new file mode 100644 index 0000000..22b2034 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/HintsOverviewScreen.kt @@ -0,0 +1,188 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.ListItem +import androidx.compose.material3.ListItemDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.view.LocalShowExperimentalFeatures +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedCard +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.settings.SettingsRoutes + +private data class HintItem(val titleRes: Int, val icon: ImageVector, val route: String) + +/** + * Hints overview screen that lists all available hint screens in organized categories + */ +@Composable +fun HintsOverviewScreen( + navController: NavController, + modifier: Modifier = Modifier +) { + val showExperimental = LocalShowExperimentalFeatures.current + + val importHint = getImportVocabularyHint() + val addModelScanHint = getAddModelScanHint() + val dictionaryOptionsHint = getDictionaryOptionsHint() + val translationScreenHint = getTranslationScreenHint() + + + + + val hintGroups = remember(showExperimental, importHint) { + val allGroups = listOf( + R.string.hint_hints_header_basics to listOf( + HintItem(CategoryHint.titleRes, AppIcons.Category, SettingsRoutes.HINTS_CATEGORIES), + HintItem(LearningStagesHint.titleRes, AppIcons.Stages, SettingsRoutes.HINTS_STAGES), + HintItem(translationScreenHint.titleRes, AppIcons.Translate, SettingsRoutes.HINTS_TRANSLATION) + ), + R.string.hint_hints_header_vocabulary to listOf( + HintItem(importHint.titleRes, AppIcons.Vocabulary, SettingsRoutes.HINTS_IMPORT), + HintItem(SortingScreenHint.titleRes, AppIcons.Sort, SettingsRoutes.HINTS_SORTING), + HintItem(dictionaryOptionsHint.titleRes, AppIcons.Dictionary, SettingsRoutes.HINTS_DICTIONARY), + HintItem(VocabularyProgressHint.titleRes, AppIcons.Stages, SettingsRoutes.HINTS_VOCABULARY_PROGRESS) + ), + R.string.hint_hints_header_advanced to listOf( + HintItem(addModelScanHint.titleRes, AppIcons.AI, SettingsRoutes.HINTS_SCAN), + HintItem(ApiKeyHint.titleRes, AppIcons.ApiKey, SettingsRoutes.HINTS_API) + ) + ) + + if (showExperimental) { + allGroups + } else { + allGroups + } + } + + AppOutlinedCard { + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.hint_title_hints_overview), style = MaterialTheme.typography.titleLarge) } + ) + } + ) { paddingValues -> + LazyColumn(modifier = modifier.padding(paddingValues).padding(bottom = 0.dp)) { + // Introduction section + item { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + ) { + Text( + text = stringResource(R.string.hint_hints_overview_intro), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.primary + ) + Text( + text = stringResource(R.string.hint_hints_overview_description), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(top = 8.dp) + ) + } + } + + // Hint categories + hintGroups.forEach { (headerRes, hints) -> + item { + HintHeader(title = stringResource(id = headerRes)) + } + item { + AppCard( + modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), + ) { + Column { + hints.forEachIndexed { index, hint -> + HintListItem( + title = stringResource(id = hint.titleRes), + icon = hint.icon, + onClick = { navController.navigate(hint.route) } + ) + if (index < hints.lastIndex) { + HorizontalDivider(modifier = Modifier.padding(start = 56.dp)) + } + } + } + } + } + } + } + } + } +} + +@ThemePreviews +@Composable +fun HintsOverviewScreenPreview() { + HintsOverviewScreen(navController = rememberNavController()) +} + +@Composable +private fun HintHeader( + title: String, + modifier: Modifier = Modifier +) { + Text( + text = title, + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.primary, + modifier = modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 16.dp) + ) +} + +@Composable +private fun HintListItem( + title: String, + icon: ImageVector, + onClick: () -> Unit, +) { + ListItem( + headlineContent = { Text(title) }, + leadingContent = { + Icon( + imageVector = icon, + contentDescription = null, + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + }, + colors = ListItemDefaults.colors( + containerColor = MaterialTheme.colorScheme.surfaceContainer + ), + modifier = Modifier.clickable(onClick = onClick) + ) +} + +@ThemePreviews +@Composable +fun HintListItemPreview() { + HintListItem( + title = stringResource(R.string.category_hint_intro), + icon = AppIcons.Category, + onClick = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/ImportVocabularyHints.kt b/app/src/main/java/eu/gaudian/translator/view/hints/ImportVocabularyHints.kt new file mode 100644 index 0000000..656d3b4 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/ImportVocabularyHints.kt @@ -0,0 +1,173 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.width +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppCheckbox +import eu.gaudian.translator.view.composable.AppSlider +import eu.gaudian.translator.view.composable.AppTextField + +/** + * Provides the migrated Hint for ImportVocabulary. + * This function is @Composable to access stringResource. + */ +@Composable +fun getImportVocabularyHint(): Hint { + return Hint( + titleRes = R.string.hint_how_to_generate_vocabulary_with_ai, + elements = listOf( + HintElement.Section( + title = stringResource(R.string.import_ai_intro), + content = listOf( + // VisualStep 1: Search Term + HintElement.VisualStep( + step = "1", + title = stringResource(R.string.import_step1_title), + description = stringResource(R.string.text_hint_you_can_search), + trailing = { + // The AppTextField is wrapped in the VisualStep's trailing composable + AppTextField( + value = stringResource(R.string.search_term_placeholder), + onValueChange = {}, + label = { Text(stringResource(R.string.text_search_term)) }, + modifier = Modifier.fillMaxWidth(), + enabled = false + ) + } + ), + // VisualStep 2: Select Languages + HintElement.VisualStep( + step = "2", + title = stringResource(R.string.import_step2_title), + description = stringResource(R.string.import_step2_desc) + ), + // VisualStep 3: Select Amount + HintElement.VisualStep( + step = "3", + title = stringResource(R.string.import_step3_title), + description = stringResource(R.string.import_step3_desc), + trailing = { + // The Column with Slider and Text is wrapped in the trailing composable + Column { + AppSlider( + value = 10f, + onValueChange = {}, + valueRange = 1f..25f, + steps = 24, + modifier = Modifier.fillMaxWidth(), + enabled = false + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stringResource(R.string.import_after_generating), + style = MaterialTheme.typography.bodyMedium + ) + } + } + ) + ) + ) + ) + ) +} + +/** + * Preview for the migrated ImportVocabularyHint. + * It now calls getImportVocabularyHint() and then Render(). + */ +@Preview +@Composable +fun ImportVocabularyHintPreview() { + getImportVocabularyHint().Render() +} + +/** + * Provides the migrated Hint for VocabularyReview. + * This function is @Composable to access stringResource. + */ + +@Composable +fun getVocabularyReviewHint(): Hint { + return Hint( + titleRes = R.string.review_intro, + elements = listOf( + // Section 1: Select Items + HintElement.Section( + title = stringResource(R.string.review_select_items_title), + content = listOf( + HintElement.Text(stringResource(R.string.review_select_items_desc)), + // Custom Row with Checkbox is wrapped in a UIElement + HintElement.UIElement { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + AppCheckbox(checked = true, onCheckedChange = {}, enabled = false) + Spacer(modifier = Modifier.width(8.dp)) + Column { + Text(text = stringResource(R.string.example_word_der_apfel), style = MaterialTheme.typography.bodyLarge) + Text(text = stringResource(R.string.example_word_the_apple), style = MaterialTheme.typography.bodyMedium) + } + } + } + ) + ), + // Divider + HintElement.Divider, + // Section 2: Duplicate Handling + HintElement.Section( + title = stringResource(R.string.duplicate_handling_title), + content = listOf( + HintElement.Text(stringResource(R.string.duplicate_handling_desc)), + // Custom Row with Checkbox and Error Text is wrapped in a UIElement + HintElement.UIElement { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + AppCheckbox(checked = false, onCheckedChange = {}, enabled = false) + Spacer(modifier = Modifier.width(8.dp)) + Column { + Text(text = stringResource(R.string.example_word_der_hund), style = MaterialTheme.typography.bodyLarge) + Text(text = stringResource(R.string.example_word_the_dog), style = MaterialTheme.typography.bodyMedium) + } + Spacer(modifier = Modifier.weight(1f)) + Text(stringResource(R.string.duplicate), style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.error) + } + } + ) + ), + // Divider + HintElement.Divider, + // Section 3: Add to List + HintElement.Section( + title = stringResource(R.string.add_to_list_optional), + content = listOf( + HintElement.Text(stringResource(R.string.add_to_list_optional_desc)) + ) + ) + ) + ) +} + +/** + * Preview for the migrated VocabularyReviewHint. + * It now calls getVocabularyReviewHint() and then Render(). + */ +@Preview +@Composable +fun VocabularyReviewHintPreview() { + getVocabularyReviewHint().Render() +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/LearningStagesHint.kt b/app/src/main/java/eu/gaudian/translator/view/hints/LearningStagesHint.kt new file mode 100644 index 0000000..886e1db --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/LearningStagesHint.kt @@ -0,0 +1,200 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.PathEffect +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons + +private data class LearningStage( + val icon: ImageVector, + val name: String, + val interval: String? = null +) + +object LearningStagesHint : LegacyHint() { + override val titleRes: Int = R.string.learning_stages_title + + @Composable + override fun Content() { + val stages = listOf( + LearningStage(AppIcons.StageNew, stringResource(R.string.stage_new)), + LearningStage(AppIcons.Stage1, stringResource(R.string.stage_1), stringResource(R.string.interval_1_day)), + LearningStage(AppIcons.Stage2, stringResource(R.string.stage_2), stringResource(R.string.interval_3_days)), + LearningStage(AppIcons.Stage3, stringResource(R.string.stage_3), stringResource(R.string.interval_1_week)), + LearningStage(AppIcons.Stage4, stringResource(R.string.stage_4), stringResource(R.string.interval_2_weeks)), + LearningStage(AppIcons.Stage5, stringResource(R.string.stage_5), stringResource(R.string.interval_1_month)), + LearningStage(AppIcons.StageLearned, stringResource(R.string.stage_learned)) + ) + + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + HeaderWithIcon( + title = stringResource(R.string.learning_stages_title) + ) + + HintSection(title = stringResource(R.string.learning_stages_title)) { + Column( + verticalArrangement = Arrangement.spacedBy(16.dp), + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + // Group stages into chunks of 2 to create rows. + stages.chunked(2).forEach { rowItems -> + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center + ) { + rowItems.forEach { stage -> + StageNode(stage) + // If the stage has an interval, show the connector arrow + stage.interval?.let { interval -> + StageConnector(interval) + } + } + } + } + } + } + + HintSection(title = stringResource(R.string.hint_how_it_works)) { + RuleExplanation( + icon = AppIcons.Check, + title = stringResource(R.string.hint_answer_correctly), + description = stringResource(R.string.hint_the_word_moves), + tint = MaterialTheme.colorScheme.primary + ) + Spacer(modifier = Modifier.height(8.dp)) + RuleExplanation( + icon = AppIcons.Error, + title = stringResource(R.string.hint_answer_incorrectly), + description = stringResource(R.string.hint_the_word_moves_back_another_stage_this_helps_you_focus_on_), + tint = MaterialTheme.colorScheme.error + ) + Spacer(modifier = Modifier.height(8.dp)) + RuleExplanation( + icon = AppIcons.Info, + title = stringResource(R.string.hint_customizable), + description = stringResource(R.string.hint_you_can_costumize_all_intervals_and_rules_in_the_settings), + tint = MaterialTheme.colorScheme.primary + ) + } + } + } +} + +@Composable +fun LearningStagesHint() { + LearningStagesHint.Content() +} + +/** + * A composable that displays a single stage icon and its name. + */ +@Composable +private fun StageNode(stage: LearningStage) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + Icon( + imageVector = stage.icon, + contentDescription = stage.name, + modifier = Modifier.size(32.dp), + tint = MaterialTheme.colorScheme.primary + ) + Text( + text = stage.name, + style = MaterialTheme.typography.labelMedium + ) + } +} + +/** + * A composable that draws a dashed arrow and displays the time interval between stages. + */ +@Composable +private fun StageConnector(interval: String) { + val arrowColor = MaterialTheme.colorScheme.onSurfaceVariant + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.padding(horizontal = 8.dp) + ) { + Text( + text = interval, + style = MaterialTheme.typography.bodySmall, + fontWeight = FontWeight.SemiBold, + color = MaterialTheme.colorScheme.secondary + ) + Spacer(modifier = Modifier.height(4.dp)) + Canvas(modifier = Modifier.size(width = 50.dp, height = 10.dp)) { + val startY = center.y + val endX = size.width + // Draw the dashed line + drawLine( + color = arrowColor, + start = Offset(0f, startY), + end = Offset(endX - 5.dp.toPx(), startY), + strokeWidth = 1.5.dp.toPx(), + pathEffect = PathEffect.dashPathEffect(floatArrayOf(10f, 10f), 0f) + ) + // Draw the arrowhead + drawLine(arrowColor, Offset(endX - 5.dp.toPx(), startY - 4.dp.toPx()), Offset(endX, startY), strokeWidth = 1.5.dp.toPx()) + drawLine(arrowColor, Offset(endX - 5.dp.toPx(), startY + 4.dp.toPx()), Offset(endX, startY), strokeWidth = 1.5.dp.toPx()) + } + } +} + +/** + * A helper composable to explain the success/failure rules. + */ +@Composable +private fun RuleExplanation(icon: ImageVector, title: String, description: String, tint: androidx.compose.ui.graphics.Color) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + Icon( + imageVector = icon, + contentDescription = title, + modifier = Modifier.size(28.dp), + tint = tint + ) + Column { + Text(text = title, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.Bold) + Text(text = description, style = MaterialTheme.typography.bodyMedium) + } + } +} + +@Preview(showBackground = true) +@Composable +fun LearningStagesHintPreview() { + MaterialTheme { + Box(modifier = Modifier.padding(8.dp)) { + LearningStagesHint() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/SortingScreenHint.kt b/app/src/main/java/eu/gaudian/translator/view/hints/SortingScreenHint.kt new file mode 100644 index 0000000..ddede6e --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/SortingScreenHint.kt @@ -0,0 +1,239 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.FilterChipDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SuggestionChip +import androidx.compose.material3.SuggestionChipDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppTextField + +object SortingScreenHint : LegacyHint() { + override val titleRes: Int = R.string.sorting_hint_title + + @Composable + override fun getTitle(): String = stringResource(R.string.sorting_hint_title) + + @Composable + override fun Content() { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + HeaderWithIcon( + title = stringResource(R.string.sorting_hint_title) + ) + + HintSection(title = stringResource(R.string.sorting_hint_intro_text)) { + @Suppress("HardCodedStringLiteral") + AppTextField( + value = "der Hund", + onValueChange = {}, + label = { Text(stringResource(R.string.label_word)) }, + modifier = Modifier.fillMaxWidth(), + enabled = false + ) + @Suppress("HardCodedStringLiteral") + AppTextField( + value = "the dog", + onValueChange = {}, + label = { Text(stringResource(R.string.label_translation)) }, + modifier = Modifier.fillMaxWidth(), + enabled = false + ) + } + + HorizontalDivider() + + HintSection(title = stringResource(R.string.sorting_hint_helper_text)) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceEvenly + ) { + SuggestionChip( + onClick = {}, + label = { Text(stringResource(R.string.sorting_hint_chip_duplicate)) }, + icon = { + Icon( + imageVector = AppIcons.Warning, + contentDescription = stringResource(R.string.label_warning), + modifier = Modifier.size(FilterChipDefaults.IconSize) + ) + }, + colors = SuggestionChipDefaults.suggestionChipColors( + containerColor = MaterialTheme.colorScheme.errorContainer, + labelColor = MaterialTheme.colorScheme.onErrorContainer, + iconContentColor = MaterialTheme.colorScheme.onErrorContainer + ), + border = BorderStroke(1.dp, MaterialTheme.colorScheme.error), + enabled = false + ) + + SuggestionChip( + onClick = {}, + label = { Text(stringResource(R.string.label_remove_articles)) }, + icon = { + Icon( + imageVector = AppIcons.Clean, + contentDescription = stringResource(R.string.label_remove_articles), + modifier = Modifier.size(FilterChipDefaults.IconSize) + ) + }, + border = BorderStroke(1.dp, MaterialTheme.colorScheme.onSurface), + enabled = false + ) + } + } + + HorizontalDivider() + + HintSection(title = stringResource(R.string.sorting_hint_decide_next_action)) { + LabeledSegmentedIconButtons( + onDeleteClick = {}, + onLearnedClick = {}, + onDoneClick = {} + ) + } + } + } +} + +@Preview +@Composable +private fun SortingScreenHintContentPreview() { + SortingScreenHint.Content() +} + +/** + * A non-functional, recycled composable for visual demonstration in the hint. + */ +@Composable +private fun LabeledSegmentedIconButtons( + onDeleteClick: () -> Unit, + onLearnedClick: () -> Unit, + onDoneClick: () -> Unit +) { + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + val buttonHeight = 48.dp + val cornerRadius = 24.dp + val secondaryButtonColor = MaterialTheme.colorScheme.surfaceVariant + + Row( + modifier = Modifier + .fillMaxWidth() + .height(buttonHeight) + .clip(RoundedCornerShape(cornerRadius)), + verticalAlignment = Alignment.CenterVertically + ) { + AppButton( + onClick = onDeleteClick, + modifier = Modifier + .weight(1f) + .fillMaxHeight(), + shape = RoundedCornerShape(0.dp), + colors = ButtonDefaults.buttonColors(containerColor = secondaryButtonColor), + enabled = false + ) { + Icon(AppIcons.Delete, contentDescription = stringResource(R.string.label_delete), tint = MaterialTheme.colorScheme.onSurfaceVariant) + } + + VerticalDivider() + + AppButton( + onClick = onLearnedClick, + modifier = Modifier + .weight(1f) + .fillMaxHeight(), + shape = RoundedCornerShape(0.dp), + colors = ButtonDefaults.buttonColors(containerColor = secondaryButtonColor), + enabled = false + ) { + Icon(AppIcons.StageLearned, contentDescription = stringResource(R.string.label_learned), tint = MaterialTheme.colorScheme.onSurfaceVariant) + } + + AppButton( + onClick = onDoneClick, + modifier = Modifier + .weight(2f) + .fillMaxHeight(), + shape = RoundedCornerShape(0.dp), + colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.primary), + enabled = false + ) { + Icon(AppIcons.Stage1, contentDescription = stringResource(R.string.label_done), tint = MaterialTheme.colorScheme.onSurfaceVariant) + } + } + + Spacer(Modifier.height(4.dp)) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp) + ) { + Text(stringResource(R.string.label_delete), Modifier.weight(1f), textAlign = TextAlign.Center, fontSize = 12.sp, color = MaterialTheme.colorScheme.onSurfaceVariant) + Text(stringResource(R.string.label_learned), Modifier.weight(1f), textAlign = TextAlign.Center, fontSize = 12.sp, color = MaterialTheme.colorScheme.onSurfaceVariant) + Text(stringResource(R.string.label_move_first_stage), Modifier.weight(2f), textAlign = TextAlign.Center, fontSize = 12.sp, color = MaterialTheme.colorScheme.onSurface) + } + } +} + +@Preview +@Composable +private fun LabeledSegmentedIconButtonsPreview() { + LabeledSegmentedIconButtons(onDeleteClick = {}, onLearnedClick = {}, onDoneClick = {}) +} + + +@Composable +private fun VerticalDivider( + modifier: Modifier = Modifier, + thickness: Dp = 1.dp, + color: Color = MaterialTheme.colorScheme.background.copy(alpha = 0.5f) +) { + Box( + modifier + .fillMaxHeight() + .width(thickness) + .background(color = color) + ) +} + +@Preview +@Composable +private fun VerticalDividerPreview() { + VerticalDivider() +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/TranslationScreenHint.kt b/app/src/main/java/eu/gaudian/translator/view/hints/TranslationScreenHint.kt new file mode 100644 index 0000000..8ff65c5 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/TranslationScreenHint.kt @@ -0,0 +1,104 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons + +@Composable +fun getTranslationScreenHint() = Hint( + titleRes = R.string.hint_translate_how_it_works, + elements = listOf( + HintElement.TextSection( + title = stringResource(R.string.hint_translate_alternative_translations_title), + text = stringResource(R.string.hint_translate_alternative_translations_desc) + ), + HintElement.TextSection( + title = stringResource(R.string.hint_translate_custom_prompts_title), + text = stringResource(R.string.hint_translate_custom_prompts_desc), + ), + + HintElement.TextSection( + title = stringResource(R.string.hint_translate_multiple_services_title), + text = stringResource(R.string.hint_translate_multiple_services_desc) + ), + HintElement.TextSection( + title = stringResource(R.string.hint_translate_history_title), + text = stringResource(R.string.hint_translate_history_desc) + ), + HintElement.TextSection( + title = stringResource(R.string.hint_translate_tts_title), + text = stringResource(R.string.hint_translate_tts_desc) + ), + HintElement.TextSection( + title = stringResource(R.string.hint_translate_quick_actions_title), + text = stringResource(R.string.hint_translate_quick_actions_desc) + ), + HintElement.TextSection( + title = stringResource(R.string.hint_translate_model_selection_title), + text = stringResource(R.string.hint_translate_model_selection_desc)) + ) +) + + +@Composable +fun TranslationScreenHint() { + getTranslationScreenHint().Render() +} + +@Preview +@Composable +fun TranslationScreenHintPreview() { + getTranslationScreenHint().Render() +} + +@Composable +private fun TranslationHintItem( + icon: ImageVector, + title: String, + description: String +) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + Icon( + imageVector = icon, + contentDescription = title, + modifier = Modifier.size(32.dp), + tint = MaterialTheme.colorScheme.secondary + ) + Column { + Text(text = title, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.Bold) + Spacer(modifier = Modifier.height(4.dp)) + Text(text = description, style = MaterialTheme.typography.bodyMedium) + } + } +} + +@Preview +@Composable +private fun TranslationHintItemPreview() { + TranslationHintItem( + icon = AppIcons.Info, + title = stringResource(R.string.hint_translation_context_aware_title), + description = stringResource(R.string.hint_translation_context_aware_desc) + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/hints/VocabularyProgressHint.kt b/app/src/main/java/eu/gaudian/translator/view/hints/VocabularyProgressHint.kt new file mode 100644 index 0000000..2f3ef2d --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/hints/VocabularyProgressHint.kt @@ -0,0 +1,122 @@ +package eu.gaudian.translator.view.hints + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons + +object VocabularyProgressHint : LegacyHint() { + override val titleRes: Int = R.string.hint_vocabulary_progress_hint_title + + @Composable + override fun Content() { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + HeaderWithIcon( + title = stringResource(R.string.hint_vocabulary_progress_hint_title) + ) + + HintSection(title = stringResource(R.string.hint_vocabulary_progress_tracking_title)) { + // Progress Tracking + VocabularyProgressHintItem( + icon = AppIcons.BarChart, + title = stringResource(R.string.hint_vocabulary_progress_tracking_title), + description = stringResource(R.string.hint_vocabulary_progress_tracking_desc) + ) + + // Learning Stages + VocabularyProgressHintItem( + icon = AppIcons.Stages, + title = stringResource(R.string.hint_vocabulary_learning_stages_title), + description = stringResource(R.string.hint_vocabulary_learning_stages_desc) + ) + + // Review System + VocabularyProgressHintItem( + icon = AppIcons.History, + title = stringResource(R.string.hint_vocabulary_review_system_title), + description = stringResource(R.string.hint_vocabulary_review_system_desc) + ) + + // Customization + VocabularyProgressHintItem( + icon = AppIcons.Tune, + title = stringResource(R.string.hint_vocabulary_customization_title), + description = stringResource(R.string.hint_vocabulary_customization_desc) + ) + } + } + } +} + +@Preview +@Composable +private fun ContentPreview() { + VocabularyProgressHint.Content() +} + +@Composable +fun VocabularyProgressHint() { + VocabularyProgressHint.Content() +} + +@Preview +@Composable +private fun VocabularyProgressHintPreview() { + VocabularyProgressHint() +} + + +@Composable +private fun VocabularyProgressHintItem( + icon: androidx.compose.ui.graphics.vector.ImageVector, + title: String, + description: String +) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + Icon( + imageVector = icon, + contentDescription = title, + modifier = Modifier.size(32.dp), + tint = MaterialTheme.colorScheme.secondary + ) + Column { + Text(text = title, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.Bold) + Spacer(modifier = Modifier.height(4.dp)) + Text(text = description, style = MaterialTheme.typography.bodyMedium) + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +private fun VocabularyProgressHintItemPreview() { + VocabularyProgressHintItem( + icon = AppIcons.BarChart, + title = "Progress Tracking", + description = "Track your learning progress with detailed statistics." + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/AboutScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/AboutScreen.kt new file mode 100644 index 0000000..244e9a4 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/AboutScreen.kt @@ -0,0 +1,508 @@ +package eu.gaudian.translator.view.settings + +import android.annotation.SuppressLint +import android.content.Context +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringArrayResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.unit.dp +import androidx.core.net.toUri +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavController +import eu.gaudian.translator.BuildConfig +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppSwitch +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.SecondaryButton +import eu.gaudian.translator.viewmodel.SettingsViewModel +import eu.gaudian.translator.viewmodel.StatusViewModel +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter + +@Composable +fun AboutScreen( + navController: NavController, +) { + val context = LocalContext.current + val activity = LocalContext.current.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + val isDeveloperMode by settingsViewModel.isDeveloperModeEnabled.collectAsStateWithLifecycle(initialValue = false) + var tapCount by remember { mutableIntStateOf(0) } + var showDeveloperSwitch by remember { mutableStateOf(isDeveloperMode) } + var licensesExpanded by remember { mutableStateOf(false) } + var changelogExpanded by remember { mutableStateOf(false) } + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.label_about)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(paddingValues) + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + AppCard { + + Column( + modifier = Modifier + .padding(16.dp) + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + Image( + painter = painterResource(id = R.mipmap.ic_launcher_foreground), + contentDescription = stringResource(R.string.cd_app_logo), + modifier = Modifier + .size(128.dp) + .clickable { + tapCount++ + if (tapCount >= 7) { + showDeveloperSwitch = true + } + } + ) + + Text( + text = stringResource(id = R.string.app_name), + style = MaterialTheme.typography.headlineSmall, + fontWeight = FontWeight.Bold + ) + Text( + text = getAppVersion(context), + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Text( + text = stringResource(id = R.string.text_developed_by_jonas_gaudian), + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + + val uriHandler = LocalUriHandler.current + + // Group 1: Website + Contact Developer + Changelog in one AppCard + AppCard { + Column { + // Website link + val websiteUrl = stringResource(R.string.gaudian_eu_website) + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { uriHandler.openUri(websiteUrl) } + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text( + text = stringResource(id = R.string.text_visit_my_website), + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.SemiBold + ) + Icon( + imageVector = AppIcons.ExitToApp, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary + ) + } + + HorizontalDivider() + + // Contact developer + val appName = stringResource(R.string.app_name) + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { + @Suppress("HardCodedStringLiteral") val intent = android.content.Intent(android.content.Intent.ACTION_SENDTO).apply { + data = "mailto:play@gaudian.eu".toUri() + putExtra(android.content.Intent.EXTRA_EMAIL, arrayOf("play@gaudian.eu")) + putExtra(android.content.Intent.EXTRA_SUBJECT, + "$appName Feedback" + ) + } + context.startActivity(intent) + } + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Column(modifier = Modifier.weight(1f)) { + Text( + text = stringResource(R.string.contact_developer_title), + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.SemiBold + ) + Text( + text = stringResource(R.string.contact_developer_description), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + + HorizontalDivider() + + // Changelog expandable + @Suppress("HardCodedStringLiteral") val rotationAngle by animateFloatAsState( + targetValue = if (changelogExpanded) 180f else 0f, + label = "Changelog Arrow Animation" + ) + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { changelogExpanded = !changelogExpanded } + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = stringResource(R.string.whats_new_changelog_title), + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.SemiBold, + modifier = Modifier.weight(1f) + ) + Icon( + imageVector = AppIcons.ExpandMore, + contentDescription = stringResource(R.string.toggle_licenses), + modifier = Modifier.rotate(rotationAngle) + ) + } + + AnimatedVisibility(visible = changelogExpanded) { + ChangelogList() + } + } + } + + // Group 2: Open source licenses + Legal information in one AppCard + AppCard { + Column { + @Suppress("HardCodedStringLiteral") val rotationAngle by animateFloatAsState( + targetValue = if (licensesExpanded) 180f else 0f, + label = "License Arrow Animation" + ) + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { licensesExpanded = !licensesExpanded } + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = stringResource(R.string.open_source_licenses), + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.SemiBold, + modifier = Modifier.weight(1f) + ) + Icon( + imageVector = AppIcons.ExpandMore, + contentDescription = stringResource(R.string.toggle_licenses), + modifier = Modifier.rotate(rotationAngle) + ) + } + + AnimatedVisibility(visible = licensesExpanded) { + OpenSourceLicensesList() + } + + HorizontalDivider() + val legalInformationUrl = stringResource(R.string.legal_information_url) + + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { uriHandler.openUri(legalInformationUrl) } + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text( + text = stringResource(R.string.legal_information), + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.SemiBold + ) + Icon( + imageVector = AppIcons.ExitToApp, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary + ) + } + } + } + + if (showDeveloperSwitch) { + DeveloperOptions( + isDeveloperMode = isDeveloperMode, + onToggle = { settingsViewModel.setDeveloperMode(it) }, + navController = navController + ) + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +private fun OpenSourceLicensesList() { + val uriHandler = LocalUriHandler.current + val apacheLicenseUrl = "https://www.apache.org/licenses/LICENSE-2.0" + + data class LibraryInfo(val name: String, val author: String, val licenseUrl: String, val licenseType: String = "Apache License 2.0") + + // Updated dependencies + val libraries = remember { + listOf( + LibraryInfo("Android Jetpack", "Google", apacheLicenseUrl), + LibraryInfo("AndroidX", "Google", apacheLicenseUrl), + LibraryInfo("Core KTX", "Google", apacheLicenseUrl), + LibraryInfo("JSoup", "Jonathan Hedley", "https://jsoup.org/license"), + LibraryInfo("Kotlin", "JetBrains", "https://kotlinlang.org/LICENSE.txt"), + LibraryInfo("KotlinX", "JetBrains", apacheLicenseUrl), + LibraryInfo("Material Components for Android", "Google", apacheLicenseUrl), + LibraryInfo("OkHttp", "Square, Inc.", "https://www.apache.org/licenses/LICENSE-2.0"), + LibraryInfo("Retrofit", "Square, Inc.", "https://www.apache.org/licenses/LICENSE-2.0"), + LibraryInfo("Room Compiler", "Google", apacheLicenseUrl), + LibraryInfo("Timber", "Jake Wharton", "https://www.apache.org/licenses/LICENSE-2.0"), + LibraryInfo("YouTube Player Android Core", "Pierfrancesco Soffritti", "https://www.apache.org/licenses/LICENSE-2.0"), + LibraryInfo("Zstandard", "Meta Platforms", "https://github.com/facebook/zstd/blob/dev/LICENSE"), + ).sortedBy { it.name } // Sort alphabetically + } + + Column(Modifier.padding(horizontal = 16.dp, vertical = 8.dp)) { + libraries.forEach { library -> + Column(Modifier.padding(vertical = 8.dp)) { + Text( + text = library.name, + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.Bold + ) + Text( + text = library.author, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Text( + text = library.licenseType, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.primary, + textDecoration = TextDecoration.Underline, + modifier = Modifier.clickable { uriHandler.openUri(library.licenseUrl) } + ) + } + HorizontalDivider(modifier = Modifier.padding(top = 8.dp)) + } + } +} + +@Composable +private fun ChangelogList() { + val changelogEntries = stringArrayResource(R.array.changelog_entries) + + Column(Modifier.padding(horizontal = 16.dp, vertical = 8.dp)) { + changelogEntries.forEachIndexed { index, entry -> + Text( + text = entry, + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(vertical = 8.dp) + ) + if (index < changelogEntries.size - 1) { + HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) + } + } + } +} + + +@Composable +private fun DeveloperOptions( + isDeveloperMode: Boolean, + onToggle: (Boolean) -> Unit, + navController: NavController, +) { + val context = LocalContext.current + val statusViewModel: StatusViewModel = viewModel() + val activity = context.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + + + AppCard { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { onToggle(!isDeveloperMode) }, + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text( + text = stringResource(R.string.title_developer_options), + style = MaterialTheme.typography.titleMedium + ) + AppSwitch(checked = isDeveloperMode, onCheckedChange = onToggle) + } + + if (isDeveloperMode) { + val experimentalFeatures by settingsViewModel.experimentalFeatures.collectAsStateWithLifecycle() + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { settingsViewModel.setExperimentalFeatures(!experimentalFeatures) }, + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Column(modifier = Modifier.weight(1f)) { + Text( + text = stringResource(R.string.experimental_features), + style = MaterialTheme.typography.bodyLarge + ) + Text( + text = stringResource(R.string.experimental_features_description), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + AppSwitch( + checked = experimentalFeatures, + onCheckedChange = { settingsViewModel.setExperimentalFeatures(it) } + ) + } + + val loadingText = stringResource(R.string.text_loading_3d) + val infoText = stringResource(R.string.text_sentence_this_is_an_info_message) + val successText = stringResource(R.string.text_success_em) + val errorText = stringResource(R.string.text_sentence_oops_something_went_wrong) + + SecondaryButton( + onClick = { statusViewModel.showLoadingMessage(loadingText) }, + text = stringResource(R.string.text_show_loading), + modifier = Modifier.fillMaxWidth() + ) + SecondaryButton( + onClick = { statusViewModel.cancelLoadingOperation() }, + text = stringResource(R.string.text_cancel_loading), + modifier = Modifier.fillMaxWidth() + ) + SecondaryButton( + onClick = { statusViewModel.showInfoMessage(infoText) }, + text = stringResource(R.string.text_show_info_message), + modifier = Modifier.fillMaxWidth() + ) + SecondaryButton( + onClick = { statusViewModel.showSuccessMessage(successText) }, + text = stringResource(R.string.title_show_success_message), + modifier = Modifier.fillMaxWidth() + ) + SecondaryButton( + onClick = { statusViewModel.showErrorMessage(errorText, 2) }, + text = stringResource(R.string.text_show_error_message), + modifier = Modifier.fillMaxWidth() + ) + SecondaryButton( + onClick = { statusViewModel.showApiKeyMissingMessage() }, + text = stringResource(R.string.show_api_key_missing_message), + modifier = Modifier.fillMaxWidth() + ) + SecondaryButton( + onClick = { settingsViewModel.setIntroCompleted(false) }, + text = stringResource(R.string.text_reset_intro), + modifier = Modifier.fillMaxWidth() + ) + HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) + SecondaryButton( + onClick = { navController.navigate(SettingsRoutes.THEME_PREVIEW) }, + text = stringResource(R.string.text_theme_preview), + modifier = Modifier.fillMaxWidth() + ) + } + } + } +} + +@SuppressLint("DefaultLocale") +@Suppress("HardCodedStringLiteral") +private fun getAppVersion(context: Context): String { + return try { + val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0) + + + val parser = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm") + + val buildDateTime = LocalDateTime.parse(BuildConfig.BUILD_TIME, parser) + + val year = buildDateTime.format(DateTimeFormatter.ofPattern("yy")) + val dayOfYear = String.format("%03d", buildDateTime.dayOfYear) + val time = buildDateTime.format(DateTimeFormatter.ofPattern("HHmm")) + val buildIdentifier = "$year.$dayOfYear.$time" + + + context.getString( + R.string.text_version_display_string_2d, + packageInfo.versionName, + buildIdentifier + ) + } catch (e: Exception) { + e.printStackTrace() + context.getString(R.string.text_sentenc_version_information_not_available) + } +} + +@ThemePreviews +@Composable +private fun AboutScreenPreview() { + MaterialTheme { + AboutScreen(navController = NavController(LocalContext.current)) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/AddModelScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/AddModelScreen.kt new file mode 100644 index 0000000..66fe226 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/AddModelScreen.kt @@ -0,0 +1,709 @@ +package eu.gaudian.translator.view.settings + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.ListItem +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.LanguageModel +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppSwitch +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.ModelBadges +import eu.gaudian.translator.view.hints.AddModelScanHint +import eu.gaudian.translator.viewmodel.ApiViewModel + +@Composable +fun AddModelScreen(navController: NavController, providerKey: String) { + val activity = LocalContext.current.findActivity() + val apiViewModel : ApiViewModel = hiltViewModel(viewModelStoreOwner = activity) + val state by apiViewModel.apiKeyManagementState.collectAsStateWithLifecycle() + val allProviders by apiViewModel.allProviders.collectAsStateWithLifecycle() + + val provider = remember(allProviders, providerKey) { + allProviders.find { it.key == providerKey } + } + val providerName = provider?.displayName ?: stringResource(R.string.label_add_custom_model) + + var modelId by remember { mutableStateOf("") } + var displayName by remember { mutableStateOf("") } + var description by remember { mutableStateOf("") } + var showScannedModelsDialog by remember { mutableStateOf(false) } + + val isLoading = state.isAddingModel + val isScanning = state.isScanningModels + val scannedModels = state.scannedModels + val errorMessage = state.addModelError + + LaunchedEffect(Unit) { + var wasAdding = state.isAddingModel + snapshotFlow { state.isAddingModel } + .collect { isCurrentlyAdding -> + if (wasAdding && !isCurrentlyAdding && state.addModelError == null) { + navController.popBackStack() + } + wasAdding = isCurrentlyAdding + } + } + + LaunchedEffect(Unit) { + var wasScanning = state.isScanningModels + snapshotFlow { state.isScanningModels } + .collect { isCurrentlyScanning -> + if (wasScanning && !isCurrentlyScanning && state.scannedModels.isNotEmpty()) { + showScannedModelsDialog = true + } + wasScanning = isCurrentlyScanning + } + } + + LaunchedEffect(providerKey) { + apiViewModel.startAddingModelForProvider(providerKey) + } + DisposableEffect(Unit) { + onDispose { apiViewModel.cancelAddModel() } + } + + if (showScannedModelsDialog) { + EnhancedScannedModelsDialog( + scannedModels = scannedModels, + onDismiss = { + @Suppress("AssignedValueIsNeverRead") + showScannedModelsDialog = false + }, + onModelSelected = { selectedModel -> + modelId = selectedModel.modelId + displayName = selectedModel.displayName.ifBlank { selectedModel.modelId } + description = selectedModel.description + @Suppress("AssignedValueIsNeverRead") + showScannedModelsDialog = false + } + ) + } + + + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(providerName) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + }, + hintContent = { AddModelScanHint() } + ) + }, + ) { paddingValues -> + LazyColumn( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues), + contentPadding = PaddingValues(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + item { + // Scan Option - Primary + AppCard( + modifier = Modifier.fillMaxWidth() + ) { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + Row( + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + AppIcons.Search, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(24.dp) + ) + Spacer(Modifier.width(12.dp)) + Column(modifier = Modifier.weight(1f)) { + Text( + stringResource(R.string.text_scan_for_available_models), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.primary + ) + Text( + stringResource( + R.string.text_automatically_discover_models_from, + providerName + ), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f) + ) + } + } + + AppButton( + onClick = { apiViewModel.scanModelsForProvider(providerKey) }, + enabled = !isLoading && !isScanning, + modifier = Modifier.fillMaxWidth() + ) { + if (isScanning) { + CircularProgressIndicator( + modifier = Modifier.size(20.dp), + color = MaterialTheme.colorScheme.onPrimary, + strokeWidth = 2.dp + ) + Spacer(Modifier.width(8.dp)) + Text(stringResource(R.string.label_scanning)) + } else { + Icon( + AppIcons.Search, + contentDescription = null, + modifier = Modifier.size(ButtonDefaults.IconSize) + ) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Text(stringResource(R.string.label_scan_for_models)) + } + } + } + errorMessage?.let { + AppCard( + modifier = Modifier.fillMaxWidth(), + ) { + Row( + modifier = Modifier.padding(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + AppIcons.Warning, + contentDescription = null, + tint = MaterialTheme.colorScheme.error, + modifier = Modifier.size(20.dp) + ) + Spacer(Modifier.width(12.dp)) + Text( + text = it, + color = MaterialTheme.colorScheme.onErrorContainer, + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.weight(1f) + ) + } + } + } + } + } + + item { + // Manual Option + AppCard( + modifier = Modifier.fillMaxWidth() + ) { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + Row( + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + AppIcons.Edit, + contentDescription = null, + tint = MaterialTheme.colorScheme.secondary, + modifier = Modifier.size(24.dp) + ) + Spacer(Modifier.width(12.dp)) + Column(modifier = Modifier.weight(1f)) { + Text( + stringResource(R.string.label_add_model_manually), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.secondary + ) + Text( + stringResource(R.string.text_enter_model_details_yourself), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f) + ) + } + } + + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + AppTextField( + value = displayName, + onValueChange = { displayName = it }, + label = { Text(stringResource(R.string.label_display_name)) }, + placeholder = { Text(stringResource(R.string.text_e_g_gpt_4_claude_3)) }, + enabled = !isLoading, + modifier = Modifier.fillMaxWidth(), + supportingText = { + if (displayName.isBlank()) { + Text( + stringResource(R.string.text_required_enter_a_human_readable_name), + color = MaterialTheme.colorScheme.error, + style = MaterialTheme.typography.bodySmall + ) + } + } + ) + AppTextField( + value = modelId, + onValueChange = { modelId = it }, + label = { Text(stringResource(R.string.label_model_id_star)) }, + placeholder = { Text(stringResource(R.string.text_e_g_gpt_4_claude_3_sonnet)) }, + enabled = !isLoading, + modifier = Modifier.fillMaxWidth(), + supportingText = { + if (modelId.isBlank()) { + Text( + stringResource(R.string.text_required_enter_the_exact_model_identifier), + color = MaterialTheme.colorScheme.error, + style = MaterialTheme.typography.bodySmall + ) + } else { + Text( + stringResource(R.string.text_this_must_match_the_provider_s_model_name_exactly), + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f), + style = MaterialTheme.typography.bodySmall + ) + } + } + ) + AppTextField( + value = description, + onValueChange = { description = it }, + label = { Text(stringResource(R.string.label_description)) }, + placeholder = { Text(stringResource(R.string.text_e_g_fast_and_efficient_for_simple_tasks)) }, + enabled = !isLoading, + modifier = Modifier.fillMaxWidth(), + maxLines = 3, + supportingText = { + Text( + stringResource(R.string.text_optional_describe_what_this_model_is_good_for), + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f), + style = MaterialTheme.typography.bodySmall + ) + } + ) + } + } + } + } + + + item { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically + ) { + TextButton( + onClick = { navController.popBackStack() }, + enabled = !isLoading + ) { + Text(stringResource(R.string.label_cancel)) + } + Spacer(modifier = Modifier.width(8.dp)) + AppButton( + onClick = { + apiViewModel.addModelToProvider( + providerKey, + LanguageModel( + modelId.trim(), + displayName.trim(), + providerKey, + description.trim(), + true + ) + ) + }, + enabled = modelId.isNotBlank() && displayName.isNotBlank() && !isLoading + ) { + if (isLoading) { + CircularProgressIndicator( + modifier = Modifier.size(20.dp), + color = MaterialTheme.colorScheme.onPrimary + ) + } else { + Text(stringResource(R.string.label_add_model)) + } + } + } + } + } + } +} + + + +@Suppress("HardCodedStringLiteral") +@Composable +private fun EnhancedScannedModelsDialog( + scannedModels: List, + onDismiss: () -> Unit, + onModelSelected: (LanguageModel) -> Unit +) { + var searchQuery by remember { mutableStateOf("") } + var showOnlyFreeModels by remember { mutableStateOf(false) } + + val showSearch = remember(scannedModels) { scannedModels.size > 10 } + val hasFreeModels = remember(scannedModels) { + scannedModels.any { it.displayName.contains("free", true) || it.modelId.contains("free", true) } + } + + val filteredModels = remember(scannedModels, showOnlyFreeModels, searchQuery) { + scannedModels + .filter { model -> + if (showOnlyFreeModels) { + model.displayName.contains("free", true) || model.modelId.contains("free", true) + } else { + true + } + } + .filter { model -> + model.displayName.contains(searchQuery, true) || model.modelId.contains(searchQuery, true) + } + } + + AppDialog(title = { Row( + modifier = Modifier.padding(start = 4.dp, end = 4.dp, top = 8.dp, bottom = 8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + IconButton(onClick = onDismiss) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + Text( + text = stringResource(R.string.select_a_model), + style = MaterialTheme.typography.headlineSmall, + modifier = Modifier.weight(1f) + ) + } }, onDismissRequest = onDismiss) { + + Column(modifier = Modifier.padding(0.dp)) { + + + if (showSearch || hasFreeModels) { + Column(Modifier.padding(horizontal = 8.dp)) { + if (showSearch) { + AppTextField( + value = searchQuery, + onValueChange = { searchQuery = it }, + modifier = Modifier.fillMaxWidth(), + label = { Text(stringResource(R.string.search_models)) }, + leadingIcon = { Icon(AppIcons.Search, contentDescription = null) }, + singleLine = true + ) + Spacer(Modifier.height(8.dp)) + } + if (hasFreeModels) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .fillMaxWidth() + .clickable { showOnlyFreeModels = !showOnlyFreeModels } + .padding(vertical = 8.dp) + ) { + Text( + stringResource(R.string.show_free_models_only), + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.weight(1f) + ) + AppSwitch(checked = showOnlyFreeModels, onCheckedChange = null) + } + } + } + } + + HorizontalDivider(modifier = Modifier.padding(top = 16.dp)) + + LazyColumn(modifier = Modifier.heightIn(max = 1000.dp)) { + if (filteredModels.isEmpty()) { + item { + Text( + text = stringResource(R.string.no_models_found), + style = MaterialTheme.typography.bodyMedium, + textAlign = TextAlign.Center, + modifier = Modifier + .fillMaxWidth() + .padding(24.dp) + ) + } + } else { + itemsIndexed(filteredModels, key = { index, model -> "${model.modelId}_${model.providerKey}_${model.displayName}_$index" }) { index, model -> + var expanded by remember { mutableStateOf(false) } + var canExpand by remember { mutableStateOf(false) } + val secondary = buildString { + if (model.displayName.isNotBlank()) append(model.modelId) + if (model.description.isNotBlank()) { + if (isNotEmpty()) append(" • ") + append(model.description) + } + if (model.isCustom) { + if (isNotEmpty()) append(" • ") + append("Custom") + } + } + ListItem( + overlineContent = { Text(model.providerKey.uppercase()) }, + headlineContent = { + Row(verticalAlignment = Alignment.CenterVertically) { + Text( + text = model.displayName.ifBlank { model.modelId }, + modifier = Modifier.weight(1f), + maxLines = 1, + overflow = androidx.compose.ui.text.style.TextOverflow.Ellipsis + ) + Spacer(Modifier.width(8.dp)) + ModelBadges( + modelDisplayOrId = model.displayName.ifBlank { model.modelId }, + providerKey = model.providerKey, + ) + } + }, + supportingContent = { + if (secondary.isNotBlank()) { + Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { + Text( + modifier = Modifier.clickable(enabled = canExpand) { expanded = !expanded }, + text = secondary, + maxLines = if (expanded) Int.MAX_VALUE else 1, + style = MaterialTheme.typography.bodyMedium, + onTextLayout = { result -> + + if (!expanded) { + val overflow = result.hasVisualOverflow + if (canExpand != overflow) { + canExpand = overflow + } + } + } + ) + } + } + }, + trailingContent = { + if (secondary.isNotBlank() && (canExpand || expanded)) { + val rotation by animateFloatAsState( + targetValue = if (expanded) 180f else 0f, + label = "expandRotate" + ) + IconButton(onClick = { expanded = !expanded }) { + Icon( + imageVector = AppIcons.ExpandMore, + contentDescription = if (expanded) stringResource(R.string.cd_collapse) else stringResource(R.string.cd_expand), + modifier = Modifier.rotate(rotation) + ) + } + } + }, + modifier = Modifier.clickable { onModelSelected(model) } + ) + } + } + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "AddModelScreen - Default") +@Composable +fun AddModelScreenPreview() { + val navController = NavController(LocalContext.current) + AddModelScreen(navController = navController, providerKey = "openai") +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "AddModelScreen - Custom Provider") +@Composable +fun AddModelScreenCustomProviderPreview() { + val navController = NavController(LocalContext.current) + AddModelScreen(navController = navController, providerKey = "custom-local") +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "AddModelScreen - Anthropic") +@Composable +fun AddModelScreenAnthropicPreview() { + val navController = NavController(LocalContext.current) + AddModelScreen(navController = navController, providerKey = "anthropic") +} + +// Preview data providers +@Suppress("HardCodedStringLiteral") +class ScannedModelsPreviewProvider : PreviewParameterProvider> { + override val values = sequenceOf( + // Small set for basic preview + listOf( + LanguageModel(modelId = "gpt-3.5-turbo", displayName = "GPT-3.5 Turbo", providerKey = "openai", description = "Fast and efficient model for most tasks", isCustom = false), + LanguageModel(modelId = "gpt-4", displayName = "GPT-4", providerKey = "openai", description = "Most capable model for complex tasks", isCustom = false), + LanguageModel(modelId = "claude-instant", displayName = "Claude Instant", providerKey = "anthropic", description = "Fast and responsive model", isCustom = false) + ), + // Large set for comprehensive preview + listOf( + LanguageModel(modelId = "gpt-3.5-turbo", displayName = "GPT-3.5 Turbo", providerKey = "openai", description = "OpenAI's most capable model", isCustom = false), + LanguageModel(modelId = "gpt-4", displayName = "GPT-4", providerKey = "openai", description = "OpenAI's newest model", isCustom = false), + LanguageModel(modelId = "gpt-4-turbo", displayName = "GPT-4 Turbo", providerKey = "openai", description = "Faster version of GPT-4", isCustom = false), + LanguageModel(modelId = "claude-1", displayName = "Claude 1", providerKey = "anthropic", description = "Anthropic's largest model", isCustom = false), + LanguageModel(modelId = "claude-instant-1", displayName = "Claude Instant 1", providerKey = "anthropic", description = "Anthropic's fastest model", isCustom = false), + LanguageModel(modelId = "claude-2", displayName = "Claude 2", providerKey = "anthropic", description = "Improved Claude model", isCustom = false), + LanguageModel(modelId = "palm-2", displayName = "PaLM 2", providerKey = "google", description = "Google's latest model", isCustom = false), + LanguageModel(modelId = "gemini-pro", displayName = "Gemini Pro", providerKey = "google", description = "Google's advanced model", isCustom = false), + LanguageModel(modelId = "custom-model-1", displayName = "My Custom Model", providerKey = "custom", description = "A custom model added by the user", isCustom = true), + LanguageModel(modelId = "free-model-1", displayName = "Free Model Alpha", providerKey = "community", description = "A free model from the community", isCustom = false), + LanguageModel(modelId = "experimental-model-x", displayName = "Experimental Model X", providerKey = "labs", description = "An experimental model with latest features", isCustom = false), + LanguageModel(modelId = "legacy-model", displayName = "Legacy Model", providerKey = "archive", description = "An older model for compatibility", isCustom = false), + LanguageModel(modelId = "specialized-model-finance", displayName = "Finance Analyzer", providerKey = "financeLLM", description = "Model specialized in financial data", isCustom = false), + LanguageModel(modelId = "code-gen-master", displayName = "CodeGen Master", providerKey = "devTools", description = "Advanced code generation model", isCustom = false), + LanguageModel(modelId = "story-writer-pro", displayName = "Story Writer Pro", providerKey = "creativeAI", description = "Model for creative writing and storytelling", isCustom = false) + ) + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "ScannedModelsDialog - Small List") +@Composable +fun EnhancedScannedModelsDialogSmallPreview() { + val scannedModels = listOf( + LanguageModel(modelId = "gpt-3.5-turbo", displayName = "GPT-3.5 Turbo", providerKey = "openai", description = "Fast and efficient model for most tasks", isCustom = false), + LanguageModel(modelId = "gpt-4", displayName = "GPT-4", providerKey = "openai", description = "Most capable model for complex tasks", isCustom = false), + LanguageModel(modelId = "claude-instant", displayName = "Claude Instant", providerKey = "anthropic", description = "Fast and responsive model", isCustom = false) + ) + EnhancedScannedModelsDialog( + scannedModels = scannedModels, + onDismiss = {}, + onModelSelected = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "ScannedModelsDialog - Large List") +@Composable +fun EnhancedScannedModelsDialogLargePreview( + @PreviewParameter(ScannedModelsPreviewProvider::class) scannedModels: List +) { + EnhancedScannedModelsDialog( + scannedModels = scannedModels, + onDismiss = {}, + onModelSelected = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "ScannedModelsDialog - Custom Models Only") +@Composable +fun EnhancedScannedModelsDialogCustomPreview() { + val scannedModels = listOf( + LanguageModel(modelId = "custom-gpt", displayName = "Custom GPT", providerKey = "custom", description = "My custom GPT model", isCustom = true), + LanguageModel(modelId = "local-llama", displayName = "Local LLaMA", providerKey = "local", description = "Local LLaMA instance", isCustom = true), + LanguageModel(modelId = "fine-tuned-model", displayName = "Fine-Tuned Model", providerKey = "custom", description = "Model fine-tuned on my data", isCustom = true) + ) + EnhancedScannedModelsDialog( + scannedModels = scannedModels, + onDismiss = {}, + onModelSelected = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "ScannedModelsDialog - Free Models Only") +@Composable +fun EnhancedScannedModelsDialogFreePreview() { + val scannedModels = listOf( + LanguageModel(modelId = "free-gpt", displayName = "Free GPT", providerKey = "free", description = "Free GPT model", isCustom = false), + LanguageModel(modelId = "free-claude", displayName = "Free Claude", providerKey = "free", description = "Free Claude model", isCustom = false), + LanguageModel(modelId = "community-model", displayName = "Community Model", providerKey = "community", description = "Community-supported model", isCustom = false) + ) + EnhancedScannedModelsDialog( + scannedModels = scannedModels, + onDismiss = {}, + onModelSelected = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "ScannedModelsDialog - Mixed Providers") +@Composable +fun EnhancedScannedModelsDialogMixedPreview() { + val scannedModels = listOf( + LanguageModel(modelId = "gpt-3.5-turbo", displayName = "GPT-3.5 Turbo", providerKey = "openai", description = "OpenAI's fast model", isCustom = false), + LanguageModel(modelId = "claude-instant", displayName = "Claude Instant", providerKey = "anthropic", description = "Anthropic's fast model", isCustom = false), + LanguageModel(modelId = "custom-local", displayName = "Local Custom", providerKey = "custom", description = "My local model", isCustom = true), + LanguageModel(modelId = "free-basic", displayName = "Free Basic", providerKey = "free", description = "Free basic model", isCustom = false) + ) + EnhancedScannedModelsDialog( + scannedModels = scannedModels, + onDismiss = {}, + onModelSelected = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "ScannedModelsDialog - Empty State") +@Composable +fun EnhancedScannedModelsDialogEmptyPreview() { + EnhancedScannedModelsDialog( + scannedModels = emptyList(), + onDismiss = {}, + onModelSelected = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "ScannedModelsDialog - Single Model") +@Composable +fun EnhancedScannedModelsDialogSinglePreview() { + val scannedModels = listOf( + LanguageModel(modelId = "gpt-4", displayName = "GPT-4", providerKey = "openai", description = "OpenAI's most advanced model", isCustom = false) + ) + EnhancedScannedModelsDialog( + scannedModels = scannedModels, + onDismiss = {}, + onModelSelected = {} + ) +} diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/ApiKeyScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/ApiKeyScreen.kt new file mode 100644 index 0000000..ca570b0 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/ApiKeyScreen.kt @@ -0,0 +1,1482 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.settings + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavController +import androidx.test.core.app.ApplicationProvider +import eu.gaudian.translator.R +import eu.gaudian.translator.model.LanguageModel +import eu.gaudian.translator.model.communication.ApiProvider +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppAlertDialog +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTabLayout +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.ClickableText +import eu.gaudian.translator.view.composable.PrimaryButton +import eu.gaudian.translator.view.composable.SecondaryButton +import eu.gaudian.translator.view.composable.TabItem +import eu.gaudian.translator.view.hints.ApiKeyHint +import eu.gaudian.translator.viewmodel.ApiKeyManagementState +import eu.gaudian.translator.viewmodel.ApiViewModel +import eu.gaudian.translator.viewmodel.ProviderState + +@Composable +private fun getApiTabs(): List { + return listOf( + ApiTab(stringResource(R.string.label_providers), AppIcons.Storage), + ApiTab(stringResource(R.string.label_tasks), AppIcons.ModelTraining) + ) +} + +private data class ApiTab(override val title: String, override val icon: ImageVector) : + TabItem + +@Composable +fun ApiKeyScreen(navController: NavController) { + val activity = LocalContext.current.findActivity() + val apiViewModel : ApiViewModel = hiltViewModel(viewModelStoreOwner = activity) + val state by apiViewModel.apiKeyManagementState.collectAsStateWithLifecycle() + + val allModels by apiViewModel.allModels.collectAsStateWithLifecycle() + val allProviders by apiViewModel.allProviders.collectAsStateWithLifecycle() + val translationModel by apiViewModel.translationModel.collectAsStateWithLifecycle() + val exerciseModel by apiViewModel.exerciseModel.collectAsStateWithLifecycle() + val vocabularyModel by apiViewModel.vocabularyModel.collectAsStateWithLifecycle() + val dictionaryModel by apiViewModel.dictionaryModel.collectAsStateWithLifecycle() + + val apiTabs = getApiTabs() + var selectedTab by remember { mutableStateOf(apiTabs[0]) } + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.label_ai_configuration)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + }, + hintContent = { ApiKeyHint.Content() } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .imePadding() + ) { + HandleApiManagementDialogs(state) + + // Tab Layout + AppTabLayout( + tabs = apiTabs, + selectedTab = selectedTab, + onTabSelected = { selectedTab = it } + ) + + // Tab Content + when (selectedTab) { + apiTabs[0] -> ProvidersTabContent( + state = state, + allProviders = allProviders, + apiViewModel = apiViewModel, + navController = navController + ) + apiTabs[1] -> TasksTabContent( + allModels = allModels.filter { model -> allProviders.any { it.key == model.providerKey && it.hasValidKey } }, + allProviders = allProviders.filter { it.isCustom || it.hasValidKey }, + translationModel = translationModel, + exerciseModel = exerciseModel, + vocabularyModel = vocabularyModel, + dictionaryModel = dictionaryModel, + apiViewModel = apiViewModel + ) + } + } + } +} + +@Composable +private fun ProvidersTabContent( + state: ApiKeyManagementState, + allProviders: List, + apiViewModel: ApiViewModel, + navController: NavController +) { + var showDeleteProviderDialog by remember { mutableStateOf(false) } + var showDeleteModelDialog by remember { mutableStateOf(false) } + var providerToDelete by remember { mutableStateOf(null) } + var modelToDelete by remember { mutableStateOf?>(null) } // providerKey to modelId + var showDeleteKeyDialog by remember { mutableStateOf(false) } + var providerToDeleteKey by remember { mutableStateOf(null) } + + val listState = rememberLazyListState() + var focusedProviderKey by remember { mutableStateOf(null) } + + // 1. Stable Sort: Remember the sorted list to avoid re-sorting on every frame + val sortedProviders = remember(state.providerStates) { + state.providerStates.sortedWith(compareBy { !it.provider.isCustom } + .thenBy { !it.hasKey } + .thenBy { it.provider.displayName.lowercase() }) + } + + // 2. Smart Scroll Logic: Scroll to the focused provider if its index changes + var lastKnownIndex by remember { mutableIntStateOf(-1) } + + LaunchedEffect(sortedProviders, focusedProviderKey) { + val key = focusedProviderKey ?: return@LaunchedEffect + val newIndex = sortedProviders.indexOfFirst { it.provider.key == key } + + if (newIndex != -1 && newIndex != lastKnownIndex) { + listState.animateScrollToItem(newIndex) + lastKnownIndex = newIndex + } else if (newIndex == -1) { + lastKnownIndex = -1 + } + } + + Column( + modifier = Modifier.fillMaxSize() + ) { + // Add Provider Button + AppButton( + onClick = { apiViewModel.startAddingProvider() }, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + ) { + Icon(AppIcons.Add, contentDescription = null, modifier = Modifier.size(ButtonDefaults.IconSize)) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Text(stringResource(R.string.label_add_custom_provider)) + } + + // Provider List + LazyColumn( + state = listState, + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 16.dp), + contentPadding = PaddingValues(vertical = 8.dp), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + items( + items = sortedProviders, + // 3. Key: Ensure Compose tracks items by ID, not position + key = { it.provider.key } + ) { providerState -> + + val focusRequester = remember { FocusRequester() } + + // If this is the focused provider, request focus + LaunchedEffect(focusedProviderKey) { + if (focusedProviderKey == providerState.provider.key) { + focusRequester.requestFocus() + } + } + + ProviderCard( + providerState = providerState, + onApiKeyChanged = { newKey -> + apiViewModel.updateApiKeyForProvider(providerState.provider.key, newKey) + // Keep focus on this provider while typing + if (newKey.isNotBlank()) { + focusedProviderKey = providerState.provider.key + } + }, + onSave = { + apiViewModel.saveApiKeyForProvider(providerState.provider.key) + // Ensure we track this provider as it moves in the list + focusedProviderKey = providerState.provider.key + }, + onToggleEdit = { + apiViewModel.toggleEditModeForProvider(providerState.provider.key) + }, + onAddModel = { + focusedProviderKey = providerState.provider.key + @Suppress("HardCodedStringLiteral") + navController.navigate(SettingsRoutes.ADD_MODEL.replace("{providerKey}", providerState.provider.key)) + }, + onEditModel = { modelId -> + focusedProviderKey = providerState.provider.key + apiViewModel.startEditingModel(providerState.provider.key, modelId) + }, + onDeleteModel = { modelId -> + modelToDelete = Pair(providerState.provider.key, modelId) + showDeleteModelDialog = true + }, + onEditProvider = { apiViewModel.startEditingProvider(providerState.provider.key) }, + onDeleteProvider = { + providerToDelete = providerState.provider + showDeleteProviderDialog = true + }, + onDeleteKey = { + providerToDeleteKey = providerState.provider.key + showDeleteKeyDialog = true + }, + modifier = Modifier.focusRequester(focusRequester) + ) + } + + // Danger zone + @Suppress("HardCodedStringLiteral") + item(key = "danger_zone") { + AppButton( + onClick = { apiViewModel.showWipeAllConfirm() }, + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 8.dp), + colors = ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.error, + contentColor = MaterialTheme.colorScheme.onError + ) + ) { + Icon(AppIcons.Delete, contentDescription = null, modifier = Modifier.size(ButtonDefaults.IconSize)) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Text(stringResource(R.string.text_delete_all_providers_and_models)) + } + } + } + } + + // Delete Provider Confirmation Dialog + if (showDeleteProviderDialog && providerToDelete != null) { + AppAlertDialog( + onDismissRequest = { + showDeleteProviderDialog = false + providerToDelete = null + }, + icon = { + Icon( + AppIcons.Warning, + contentDescription = null, + tint = MaterialTheme.colorScheme.error + ) + }, + title = { Text(stringResource(R.string.label_delete_provider)) }, + text = { + Text( + stringResource( + R.string.text_dialog_delete_provider, + providerToDelete!!.displayName + )) + }, + confirmButton = { + TextButton( + onClick = { + apiViewModel.deleteProvider(providerToDelete!!.key) + showDeleteProviderDialog = false + providerToDelete = null + }, + colors = ButtonDefaults.textButtonColors( + contentColor = MaterialTheme.colorScheme.error + ) + ) { + Text(stringResource(R.string.label_delete)) + } + }, + dismissButton = { + TextButton(onClick = { + showDeleteProviderDialog = false + providerToDelete = null + }) { + Text(stringResource(R.string.label_cancel)) + } + } + ) + } + + // Delete Model Confirmation Dialog + if (showDeleteModelDialog && modelToDelete != null) { + val (providerKey, modelId) = modelToDelete!! + val provider = allProviders.find { it.key == providerKey } + val model = provider?.models?.find { it.modelId == modelId } + + AppAlertDialog( + onDismissRequest = { + showDeleteModelDialog = false + modelToDelete = null + }, + icon = { + Icon( + AppIcons.Warning, + contentDescription = null, + tint = MaterialTheme.colorScheme.error + ) + }, + title = { Text(stringResource(R.string.label_delete_model)) }, + text = { + Text( + stringResource( + R.string.text_dialog_delete_model, + model?.displayName ?: modelId, + provider?.displayName ?: providerKey + )) + }, + confirmButton = { + TextButton( + onClick = { + apiViewModel.deleteModelFromProvider(providerKey, modelId) + showDeleteModelDialog = false + modelToDelete = null + }, + colors = ButtonDefaults.textButtonColors( + contentColor = MaterialTheme.colorScheme.error + ) + ) { + Text(stringResource(R.string.label_delete)) + } + }, + dismissButton = { + TextButton(onClick = { + showDeleteModelDialog = false + modelToDelete = null + }) { + Text(stringResource(R.string.label_cancel)) + } + } + ) + } + + // Delete Key Confirmation Dialog + if (showDeleteKeyDialog && providerToDeleteKey != null) { + val provider = allProviders.find { it.key == providerToDeleteKey } + + AppAlertDialog( + onDismissRequest = { + showDeleteKeyDialog = false + providerToDeleteKey = null + }, + icon = { + Icon( + AppIcons.Warning, + contentDescription = null, + tint = MaterialTheme.colorScheme.error + ) + }, + title = { Text(stringResource(R.string.label_delete_key)) }, + text = { + Text( + stringResource( + R.string.text_dialog_delete_key, + provider?.displayName ?: providerToDeleteKey!! + )) + }, + confirmButton = { + TextButton( + onClick = { + apiViewModel.deleteApiKeyForProvider(providerToDeleteKey!!) + showDeleteKeyDialog = false + providerToDeleteKey = null + }, + colors = ButtonDefaults.textButtonColors( + contentColor = MaterialTheme.colorScheme.error + ) + ) { + Text(stringResource(R.string.label_delete)) + } + }, + dismissButton = { + TextButton(onClick = { + showDeleteKeyDialog = false + providerToDeleteKey = null + }) { + Text(stringResource(R.string.label_cancel)) + } + } + ) + } +} + +@Composable +private fun TasksTabContent( + allModels: List, + allProviders: List, + translationModel: LanguageModel?, + exerciseModel: LanguageModel?, + vocabularyModel: LanguageModel?, + dictionaryModel: LanguageModel?, + apiViewModel: ApiViewModel +) { + LazyColumn( + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 16.dp), + contentPadding = PaddingValues(vertical = 16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + item { + AppCard { + Column(Modifier.padding(16.dp)) { + Text( + text = stringResource(R.string.label_task_model_assignments), + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.padding(bottom = 4.dp) + ) + Text( + text = stringResource(R.string.text_configure_which_ai_model_to_use_for_each_task_type), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f), + modifier = Modifier.padding(bottom = 12.dp) + ) + HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) + + ModelSelectionRow( + label = stringResource(id = R.string.label_translation), + allModels = allModels, + allProviders = allProviders, + selectedModel = translationModel, + onModelSelected = { apiViewModel.setTranslationModel(it) } + ) + ModelSelectionRow( + label = stringResource(id = R.string.label_exercise), + allModels = allModels, + allProviders = allProviders, + selectedModel = exerciseModel, + onModelSelected = { apiViewModel.setExerciseModel(it) } + ) + ModelSelectionRow( + label = stringResource(id = R.string.label_vocabulary), + allModels = allModels, + allProviders = allProviders, + selectedModel = vocabularyModel, + onModelSelected = { apiViewModel.setVocabularyModel(it) } + ) + ModelSelectionRow( + label = stringResource(id = R.string.label_dictionary), + allModels = allModels, + allProviders = allProviders, + selectedModel = dictionaryModel, + onModelSelected = { apiViewModel.setDictionaryModel(it) } + ) + } + } + } + } +} + +@Composable +@Preview +fun ApiKeyScreenPreview() { + ApiKeyScreen(navController = NavController(ApplicationProvider.getApplicationContext())) +} + +@Composable +private fun ModelSelectionRow( + label: String, + allModels: List, + allProviders: List, + selectedModel: LanguageModel?, + onModelSelected: (LanguageModel?) -> Unit +) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 4.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text( + text = label, + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.weight(1f) + ) + Box(modifier = Modifier.weight(1.5f)) { + ApiModelDropDown( + models = allModels, + providers = allProviders, + selectedModel = selectedModel, + onModelSelected = onModelSelected + ) + } + } +} + +@Composable +@Preview +private fun HandleApiManagementDialogsPreview() { + HandleApiManagementDialogs( + state = ApiKeyManagementState() + ) +} + + +@Composable +private fun HandleApiManagementDialogs( + state: ApiKeyManagementState +) { + val activity = LocalContext.current.findActivity() + val apiViewModel: ApiViewModel = hiltViewModel(viewModelStoreOwner = activity) + if (state.isAddingProvider) { + AddProviderDialog( + onDismiss = { apiViewModel.cancelAddProvider() }, + onConfirm = { provider -> apiViewModel.addProvider(provider) } + ) + } + + state.providerKeyForAddingModel?.let { providerKey -> + AddModelDialog( + providerKey = providerKey, + isLoading = state.isAddingModel, + isScanning = state.isScanningModels, + scannedModels = state.scannedModels, + errorMessage = state.addModelError, + onDismiss = { apiViewModel.cancelAddModel() }, + onScan = { apiViewModel.scanModelsForProvider(providerKey) }, + onConfirm = { model -> apiViewModel.addModelToProvider(providerKey, model) } + ) + } + + // Edit provider dialog + state.providerKeyForEditing?.let { providerKey -> + val provider = state.providerStates.firstOrNull { it.provider.key == providerKey }?.provider + if (provider != null && state.modelIdForEditing == null) { + EditProviderDialog( + initial = provider, + onDismiss = { apiViewModel.cancelEditing() }, + onConfirm = { updated -> apiViewModel.applyEditProvider(updated) } + ) + } + // Edit model dialog + val modelId = state.modelIdForEditing + if (provider != null && modelId != null) { + val model = provider.models.firstOrNull { it.modelId == modelId } + if (model != null) { + EditModelDialog( + providerKey = provider.key, + initial = model, + onDismiss = { apiViewModel.cancelEditing() }, + onConfirm = { updated -> apiViewModel.applyEditModel(provider.key, updated) }, + errorMessage = state.addModelError + ) + } + } + } + + if (state.showWipeAllConfirm) { + AlertDialog( + onDismissRequest = { apiViewModel.hideWipeAllConfirm() }, + title = { Text(stringResource(R.string.text_delete_all_providers_and_models_qm)) }, + text = { Text(stringResource(R.string.text_this_will_remove_all)) }, + confirmButton = { + TextButton( + onClick = { apiViewModel.confirmWipeAll() }, + colors = ButtonDefaults.textButtonColors( + contentColor = MaterialTheme.colorScheme.error + ) + ) { + Text(stringResource(R.string.label_delete_all)) + } + }, + dismissButton = { + TextButton(onClick = { apiViewModel.hideWipeAllConfirm() }) { + Text(stringResource(R.string.label_cancel)) + } + } + ) + } +} + + +@Suppress("HardCodedStringLiteral") +@Composable +private fun EnhancedKeyStatus(provider: ApiProvider, hasKey: Boolean) { + val base = provider.baseUrl.trim() + val lower = base.lowercase() + val isLocalHost = ( + lower.contains("localhost") || + lower.contains("127.0.0.1") || + lower.startsWith("192.168.") || + lower.startsWith("http://192.168.") || + lower.startsWith("10.") || + lower.startsWith("http://10.") || + Regex("^172\\.(1[6-9]|2[0-9]|3[0-1])\\.").containsMatchIn(lower) || + Regex("^http://172\\.(1[6-9]|2[0-9]|3[0-1])\\.").containsMatchIn(lower) + ) + + val (text, color, icon) = when { + isLocalHost -> Triple(stringResource(R.string.text_key_optional), MaterialTheme.colorScheme.primary, AppIcons.CheckCircle) + hasKey -> Triple(stringResource(R.string.text_key_active), MaterialTheme.colorScheme.primary, AppIcons.CheckCircle) + provider.isCustom -> Triple(stringResource(R.string.text_key_optional), MaterialTheme.colorScheme.primary, AppIcons.CheckCircle) + else -> Triple(stringResource(R.string.text_no_key), MaterialTheme.colorScheme.error, AppIcons.Warning) + } + + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .background( + color = color.copy(alpha = 0.1f), + shape = RoundedCornerShape(12.dp) + ) + .padding(horizontal = 8.dp, vertical = 4.dp) + ) { + Icon( + imageVector = icon, + contentDescription = text, + tint = color, + modifier = Modifier.size(14.dp) + ) + Spacer(Modifier.width(4.dp)) + Text( + text, + color = color, + style = MaterialTheme.typography.labelSmall, + fontWeight = androidx.compose.ui.text.font.FontWeight.Medium + ) + } +} + +@Composable +private fun EnhancedProviderDetails( + provider: ApiProvider, + hasKey: Boolean, + onChangeClick: () -> Unit, + onAddModel: () -> Unit, + onEditModel: (String) -> Unit, + onDeleteModel: (String) -> Unit, + onDeleteKey: () -> Unit = {} +) { + Column(modifier = Modifier.fillMaxWidth()) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + stringResource(R.string.text_available_models), + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.weight(1f) + ) + TextButton(onClick = onAddModel) { + Icon(AppIcons.Add, contentDescription = null, modifier = Modifier.size(16.dp)) + Spacer(Modifier.width(4.dp)) + Text(stringResource(R.string.label_add_model)) + } + } + + if (provider.models.isNotEmpty()) { + Spacer(Modifier.height(8.dp)) + provider.models.forEach { model -> + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 4.dp) + ) { + Column(modifier = Modifier.weight(1f)) { + Text( + model.displayName, + style = MaterialTheme.typography.bodyMedium, + fontWeight = androidx.compose.ui.text.font.FontWeight.Medium + ) + if (model.description.isNotBlank()) { + Text( + model.description, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f) + ) + } + } + if (model.isCustom) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.height(40.dp) + ) { + IconButton( + onClick = { onEditModel(model.modelId) }, + modifier = Modifier.size(36.dp) + ) { + Icon( + AppIcons.Edit, + contentDescription = stringResource(R.string.edit), + modifier = Modifier.size(20.dp) + ) + } + IconButton( + onClick = { onDeleteModel(model.modelId) }, + modifier = Modifier.size(36.dp) + ) { + Icon( + AppIcons.Delete, + contentDescription = stringResource(R.string.delete_model), + modifier = Modifier.size(20.dp) + ) + } + } + } + } + } + } else { + Spacer(Modifier.height(8.dp)) + Text( + stringResource(R.string.no_models_configured), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f), + modifier = Modifier.padding(vertical = 8.dp) + ) + } + + Spacer(Modifier.height(16.dp)) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + if (hasKey) { + SecondaryButton( + onClick = onChangeClick, + text = stringResource(R.string.text_change_key), + modifier = Modifier.weight(1f) + ) + SecondaryButton( + onClick = onDeleteKey, + text = stringResource(R.string.label_delete_key), + modifier = Modifier.weight(1f), + maxLines = 1 + ) + } else { + SecondaryButton( + onClick = onChangeClick, + text = stringResource(R.string.label_add_key), + modifier = Modifier.fillMaxWidth() + ) + } + } + } +} + +@Composable +private fun ProviderCard( + providerState: ProviderState, + onApiKeyChanged: (String) -> Unit, + onSave: () -> Unit, + onToggleEdit: () -> Unit, + onAddModel: () -> Unit, + onEditModel: (String) -> Unit, + onDeleteModel: (String) -> Unit, + onEditProvider: () -> Unit, + onDeleteProvider: () -> Unit, + onDeleteKey: () -> Unit, + modifier: Modifier = Modifier +) { + var expanded by remember { mutableStateOf(false) } + @Suppress("HardCodedStringLiteral") val rotationAngle by animateFloatAsState( + targetValue = if (expanded) 180f else 0f, + animationSpec = tween(durationMillis = 300), + label = "rotation" + ) + + val isActive = providerState.hasKey || providerState.provider.isCustom + val modelCount = providerState.provider.models.size + + AppCard( + modifier = modifier.fillMaxWidth(), + ) { + Column(Modifier.padding(vertical = 12.dp, horizontal = 16.dp)) { + // Main header with essential info only + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { expanded = !expanded }, + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + imageVector = AppIcons.ExpandMore, + contentDescription = if (expanded) stringResource(R.string.cd_collapse) else stringResource(R.string.cd_expand), + modifier = Modifier.rotate(rotationAngle), + tint = if (isActive) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) + ) + Spacer(Modifier.width(12.dp)) + + Column(modifier = Modifier.weight(1f)) { + Row(verticalAlignment = Alignment.CenterVertically) { + Text( + providerState.provider.displayName, + style = MaterialTheme.typography.titleMedium, + color = if (isActive) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f), + modifier = Modifier.weight(1f) + ) + if (providerState.provider.isCustom) { + Spacer(Modifier.width(8.dp)) + Text( + stringResource(R.string.label_custom), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier + .background( + color = MaterialTheme.colorScheme.primary.copy(alpha = 0.1f), + shape = RoundedCornerShape(4.dp) + ) + .padding(horizontal = 6.dp, vertical = 2.dp) + ) + } + } + Spacer(Modifier.height(4.dp)) + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(12.dp) + ) { + EnhancedKeyStatus(provider = providerState.provider, hasKey = providerState.hasKey) + Text( + text = stringResource(R.string.label_amount_models, modelCount), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f) + ) + } + } + } + + // Quick actions when not expanded + if (!expanded && isActive) { + Spacer(Modifier.height(8.dp)) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + TextButton( + onClick = onAddModel, + modifier = Modifier.weight(1f) + ) { + Icon(AppIcons.Add, contentDescription = null, modifier = Modifier.size(16.dp)) + Spacer(Modifier.width(4.dp)) + Text(stringResource(R.string.label_add_model)) + } + } + } + + // Expanded content with better organization + AnimatedVisibility(visible = expanded) { + Column(modifier = Modifier.padding(top = 12.dp)) { + HorizontalDivider() + + Spacer(Modifier.height(12.dp)) + + // Status and actions section + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Column { + Text( + stringResource(R.string.label_status), + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f) + ) + EnhancedKeyStatus(provider = providerState.provider, hasKey = providerState.hasKey) + } + + if (providerState.provider.isCustom) { + Row { + IconButton(onClick = onEditProvider) { + Icon(AppIcons.Edit, contentDescription = stringResource(R.string.edit), tint = MaterialTheme.colorScheme.primary) + } + IconButton(onClick = onDeleteProvider) { + Icon(AppIcons.Delete, contentDescription = stringResource(R.string.delete_provider), tint = MaterialTheme.colorScheme.error) + } + } + } + } + + if (providerState.provider.websiteUrl.isNotBlank()) { + Spacer(Modifier.height(12.dp)) + val annotatedString = buildAnnotatedString { + withStyle(style = SpanStyle(color = MaterialTheme.colorScheme.primary, textDecoration = TextDecoration.Underline)) { + append(stringResource(R.string.text_get_api_key_at, providerState.provider.displayName)) + addStringAnnotation("URL", providerState.provider.websiteUrl, 0, length) + } + } + ClickableText( + text = annotatedString, + style = MaterialTheme.typography.bodySmall, + ) + } + + Spacer(Modifier.height(16.dp)) + + if (providerState.isEditing) { + ApiKeyInput( + apiKey = providerState.apiKey, + validationMessage = providerState.validationMessage, + onApiKeyChanged = onApiKeyChanged, + onSave = onSave, + onCancel = onToggleEdit + ) + } else { + EnhancedProviderDetails( + provider = providerState.provider, + hasKey = providerState.hasKey, + onChangeClick = onToggleEdit, + onAddModel = onAddModel, + onEditModel = onEditModel, + onDeleteModel = onDeleteModel, + onDeleteKey = onDeleteKey + ) + } + } + } + } + } +} + + +@Suppress("HardCodedStringLiteral") +@Composable +@Preview +private fun ApiKeyInputPreview() { + ApiKeyInput( + apiKey = "test_api_key", + validationMessage = "", + onApiKeyChanged = {}, + onSave = {} + ) +} + + +@Composable +private fun ApiKeyInput( + apiKey: String, + validationMessage: String, + onApiKeyChanged: (String) -> Unit, + onSave: () -> Unit, + onCancel: (() -> Unit)? = null +) { + Column(modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(8.dp)) { + val clipboard = LocalClipboardManager.current + AppTextField( + value = apiKey, + onValueChange = onApiKeyChanged, + label = { Text(stringResource(R.string.text_enter_api_key)) }, + modifier = Modifier.fillMaxWidth(), + trailingIcon = { + IconButton( + onClick = { + val text = clipboard.getText()?.text + if (!text.isNullOrBlank()) onApiKeyChanged(text) + }, + enabled = true + ) { Icon(AppIcons.Paste, contentDescription = stringResource(R.string.cd_paste)) } + } + ) + if (validationMessage.isNotBlank()) { + Text(validationMessage, color = MaterialTheme.colorScheme.error, style = MaterialTheme.typography.bodySmall) + } + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.End) { + onCancel?.let { + TextButton(onClick = it) { Text(stringResource(R.string.label_cancel)) } + Spacer(Modifier.width(8.dp)) + } + PrimaryButton( + onClick = onSave, + enabled = apiKey.isNotBlank(), + text = stringResource(R.string.text_save_key) + ) + } + } +} + + +@Composable +fun AddProviderDialog(onDismiss: () -> Unit, onConfirm: (ApiProvider) -> Unit) { + val activity = LocalContext.current.findActivity() + val apiViewModel: ApiViewModel = hiltViewModel(viewModelStoreOwner = activity) + var key by remember { mutableStateOf("") } + var displayName by remember { mutableStateOf("") } + var baseUrl by remember { mutableStateOf("") } + var endpoint by remember { mutableStateOf("") } + var websiteUrl by remember { mutableStateOf("") } + val isFormValid = displayName.isNotBlank() && baseUrl.isNotBlank() + var isChecking by remember { mutableStateOf(false) } + var availabilityMessage by remember { mutableStateOf(null) } + var availabilityOk by remember { mutableStateOf(null) } + + AppDialog( + onDismissRequest = onDismiss, + title = { Text(stringResource(R.string.label_add_custom_provider)) }, + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(0.dp), + ) { + Column( + modifier = Modifier.padding(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + AppTextField( + value = displayName, + onValueChange = { newValue: String -> displayName = newValue }, + label = { Text(stringResource(R.string.display_name) + " *") }, + modifier = Modifier.fillMaxWidth() + ) + AppTextField( + value = baseUrl, + onValueChange = { newValue: String -> baseUrl = newValue }, + label = { Text(stringResource(R.string.text_base_url_and_example) + " *") }, + modifier = Modifier.fillMaxWidth(), + maxLines = 2 + ) + AppTextField( + value = endpoint, + onValueChange = { newValue: String -> endpoint = newValue }, + label = { Text(buildString { + append(stringResource(R.string.endpoint_e_g_api_chat)) + append(stringResource(R.string.text_optional)) + }) }, + modifier = Modifier.fillMaxWidth() + ) + AppTextField( + value = websiteUrl, + onValueChange = { newValue: String -> websiteUrl = newValue }, + label = { Text(buildString { + append(stringResource(R.string.website_url)) + append(stringResource(R.string.text_optional)) + }) }, + modifier = Modifier.fillMaxWidth() + ) + + Text(stringResource(R.string.label_start_required), style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f)) + + Row(verticalAlignment = Alignment.CenterVertically) { + if (isChecking) { + CircularProgressIndicator(modifier = Modifier.size(18.dp)) + Spacer(Modifier.width(8.dp)) + @Suppress("HardCodedStringLiteral") + Text("Checking...", style = MaterialTheme.typography.bodySmall) + } else { + SecondaryButton( + onClick = { + availabilityMessage = null + availabilityOk = null + isChecking = true + val url = baseUrl.trim() + apiViewModel.checkProviderAvailability(url) { ok, msg -> + availabilityOk = ok + availabilityMessage = msg + isChecking = false + } + }, + text = stringResource(R.string.text_check_availability) + ) + } + } + availabilityMessage?.let { msg -> + val color = if (availabilityOk == true) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.error + Text(msg, color = color, style = MaterialTheme.typography.bodySmall) + } + + // Buttons + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically + ) { + TextButton(onClick = onDismiss) { + Text(stringResource(R.string.label_cancel)) + } + AppButton( + onClick = { + onConfirm(ApiProvider( + key = key.trim(), + displayName = displayName.trim(), + baseUrl = baseUrl.trim(), + endpoint = endpoint.trim(), + websiteUrl = websiteUrl.trim(), + models = emptyList(), + isCustom = true + )) + }, + enabled = isFormValid + ) { + Text(stringResource(R.string.label_add)) + } + } + } + } + } +} + + + +@Composable +fun EditProviderDialog( + initial: ApiProvider, + onDismiss: () -> Unit, + onConfirm: (ApiProvider) -> Unit +) { + var displayName by remember { mutableStateOf(initial.displayName) } + var baseUrl by remember { mutableStateOf(initial.baseUrl) } + var endpoint by remember { mutableStateOf(initial.endpoint) } + var websiteUrl by remember { mutableStateOf(initial.websiteUrl) } + val isFormValid = displayName.isNotBlank() && baseUrl.isNotBlank() + + AppDialog( + onDismissRequest = onDismiss, + title = { Text(stringResource(R.string.edit) + " " + initial.displayName) }, + ) { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surface + ) + ) { + Column( + modifier = Modifier.padding(24.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + AppTextField( + value = displayName, + onValueChange = { displayName = it }, + label = { Text(stringResource(R.string.display_name) + " *") }, + modifier = Modifier.fillMaxWidth() + ) + AppTextField( + value = baseUrl, + onValueChange = { baseUrl = it }, + label = { Text(stringResource(R.string.text_base_url_and_example) + " *") }, + modifier = Modifier.fillMaxWidth() + ) + AppTextField( + value = endpoint, + onValueChange = { endpoint = it }, + label = { Text(buildString { + append(stringResource(R.string.endpoint_e_g_api_chat)) + append(stringResource(R.string.text_optional)) + }) }, + modifier = Modifier.fillMaxWidth() + ) + AppTextField( + value = websiteUrl, + onValueChange = { websiteUrl = it }, + label = { Text(buildString { + append(stringResource(R.string.website_url)) + append(stringResource(R.string.text_optional)) + }) }, + modifier = Modifier.fillMaxWidth() + ) + + Text(stringResource(R.string.label_star_required), style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f)) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically + ) { + TextButton(onClick = onDismiss) { Text(stringResource(R.string.label_cancel)) } + AppButton( + onClick = { + onConfirm( + initial.copy( + displayName = displayName.trim(), + baseUrl = baseUrl.trim(), + endpoint = endpoint.trim(), + websiteUrl = websiteUrl.trim() + ) + ) + }, + enabled = isFormValid + ) { Text(stringResource(R.string.label_save)) } + } + } + } + } +} + + +@Composable +@Preview +fun AddModelDialogPreview() { + @Suppress("HardCodedStringLiteral") + AddModelDialog( + providerKey = "test_provider", + isLoading = false, + isScanning = false, + scannedModels = emptyList(), + errorMessage = null, + onDismiss = {}, + onScan = {}, + onConfirm = {} + ) +} + +@Composable +fun AddModelDialog( + providerKey: String, + isLoading: Boolean, + isScanning: Boolean, + scannedModels: List, + errorMessage: String?, + onDismiss: () -> Unit, + onScan: () -> Unit, + onConfirm: (LanguageModel) -> Unit +) { + var modelId by remember { mutableStateOf("") } + var displayName by remember { mutableStateOf("") } + var description by remember { mutableStateOf("") } + val isFormValid = modelId.isNotBlank() && displayName.isNotBlank() && !isLoading + + AppDialog( + onDismissRequest = { if (!isLoading) onDismiss() }, + title = { + Text( + text = stringResource(R.string.label_add_custom_model), + ) + } + ) { + + Column( + modifier = Modifier + .padding(4.dp) + .heightIn(max = 1000.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + // Optional scan area + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically) { + TextButton(onClick = onScan, enabled = !isLoading && !isScanning) { + Text(text = if (isScanning) stringResource(R.string.scanning) else stringResource(R.string.scan_models)) + } + } + if (scannedModels.isNotEmpty()) { + Text(text = stringResource(R.string.text_select_model), style = MaterialTheme.typography.titleSmall) + LazyColumn( + modifier = Modifier.heightIn(max = 150.dp) + ) { + items(scannedModels) { m -> + Row(verticalAlignment = Alignment.CenterVertically) { + Text(text = m.modelId, modifier = Modifier.weight(1f)) + TextButton(onClick = { + modelId = m.modelId + displayName = m.displayName.ifBlank { m.modelId } + description = m.description + }) { Text(stringResource(R.string.label_select)) } + } + } + } + } else if (!isScanning) { + Text(text = stringResource(R.string.no_models_found), style = MaterialTheme.typography.bodySmall) + } + + // Manual entry + AppTextField( + value = displayName, + onValueChange = { newValue: String -> displayName = newValue }, + label = { Text(stringResource(R.string.display_name)) }, + enabled = !isLoading, + modifier = Modifier.fillMaxWidth() + ) + AppTextField( + value = modelId, + onValueChange = { newValue: String -> modelId = newValue }, + label = { Text(stringResource(R.string.model_id)) }, + enabled = !isLoading, + modifier = Modifier.fillMaxWidth(), + maxLines = 2 + ) + AppTextField( + value = description, + onValueChange = { newValue: String -> description = newValue }, + label = { Text(stringResource(R.string.description)) }, + enabled = !isLoading, + modifier = Modifier.fillMaxWidth() + ) + + if (isLoading) { + Spacer(modifier = Modifier.height(8.dp)) + CircularProgressIndicator(modifier = Modifier.align(Alignment.CenterHorizontally)) + } + + errorMessage?.let { + Spacer(modifier = Modifier.height(8.dp)) + Text(text = it, color = MaterialTheme.colorScheme.error, style = MaterialTheme.typography.bodySmall) + } + + // Buttons + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically + ) { + TextButton(onClick = onDismiss, enabled = !isLoading) { + Text(stringResource(R.string.label_cancel)) + } + AppButton( + onClick = { + onConfirm(LanguageModel( + modelId = modelId.trim(), + displayName = displayName.trim(), + providerKey = providerKey, + description = description.trim(), + isCustom = true + )) + }, + enabled = isFormValid + ) { + Text(stringResource(R.string.label_add_validate)) + } + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +@Preview +fun EditModelDialogPreview() { + EditModelDialog( + providerKey = "test_provider", + initial = LanguageModel("test_model_id", "Test Model", "test_provider", "Test description"), + onDismiss = {}, + onConfirm = {}, + errorMessage = null + ) +} + + +@Composable +fun EditModelDialog( + providerKey: String, + initial: LanguageModel, + onDismiss: () -> Unit, + onConfirm: (LanguageModel) -> Unit, + errorMessage: String? = null +) { + var displayName by remember { mutableStateOf(initial.displayName) } + var description by remember { mutableStateOf(initial.description) } + var modelId by remember { mutableStateOf(initial.modelId) } + + val isFormValid = modelId.isNotBlank() && displayName.isNotBlank() + + AppDialog( + onDismissRequest = onDismiss, + title = { Text(stringResource(R.string.edit) + " " + initial.displayName) }, + ) { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surface + ) + ) { + Column( + modifier = Modifier.padding(24.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + AppTextField( + value = displayName, + onValueChange = { displayName = it }, + label = { Text(stringResource(R.string.display_name)) }, + modifier = Modifier.fillMaxWidth() + ) + AppTextField( + value = modelId, + onValueChange = { modelId = it }, + label = { Text(stringResource(R.string.model_id)) }, + modifier = Modifier.fillMaxWidth() + ) + AppTextField( + value = description, + onValueChange = { description = it }, + label = { Text(stringResource(R.string.description)) }, + modifier = Modifier.fillMaxWidth() + ) + + errorMessage?.let { + Spacer(modifier = Modifier.height(8.dp)) + Text(text = it, color = MaterialTheme.colorScheme.error, style = MaterialTheme.typography.bodySmall) + } + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically + ) { + TextButton(onClick = onDismiss) { Text(stringResource(R.string.label_cancel)) } + AppButton( + onClick = { + onConfirm( + initial.copy( + modelId = modelId.trim(), + displayName = displayName.trim(), + description = description.trim(), + providerKey = providerKey, + isCustom = true + ) + ) + }, + enabled = isFormValid + ) { Text(stringResource(R.string.label_save)) } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/BasePromptSettingsScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/BasePromptSettingsScreen.kt new file mode 100644 index 0000000..c23a824 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/BasePromptSettingsScreen.kt @@ -0,0 +1,391 @@ +package eu.gaudian.translator.view.settings + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.material3.TextFieldDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.LanguageModel +import eu.gaudian.translator.model.communication.ApiProvider +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedButton +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.ModelBadges + +data class PromptSettingsState( + val availableModels: List = emptyList(), + val selectedModel: LanguageModel? = null, + val customPrompt: String = "", + val examplePrompts: List = emptyList() +) + +@Composable +fun BasePromptSettingsScreen( + state: PromptSettingsState, + providers: List, // Pass the list of providers + description: String, + onPromptChanged: (String) -> Unit, + onSaveClicked: () -> Unit, + onModelSelected: (LanguageModel?) -> Unit, + onExamplePromptClicked: (String) -> Unit +) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 0.dp) + ) { + Text( + text = description, + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding(vertical = 16.dp) + ) + + AppCard( + modifier = Modifier.fillMaxWidth(), + ) { + Column(Modifier.padding(16.dp)) { + AppTextField( + value = state.customPrompt, + onValueChange = onPromptChanged, + modifier = Modifier.fillMaxWidth(), + label = { Text(stringResource(id = R.string.text_enter_your_custom_prompt)) }, + minLines = 3 + ) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + + Box(modifier = Modifier.weight(1f)) { + ApiModelDropDown( + models = state.availableModels, + providers = providers, // Pass providers down + selectedModel = state.selectedModel, + onModelSelected = onModelSelected, + ) + } + + Spacer(modifier = Modifier.width(16.dp)) + + AppButton(onClick = onSaveClicked) { + Text(stringResource(id = R.string.label_save)) + } + } + } + } + + Spacer(modifier = Modifier.height(24.dp)) + + Text( + text = stringResource(R.string.text_example_prompts), + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.padding(bottom = 8.dp) + ) + + state.examplePrompts.forEach { prompt -> + Text( + text = prompt, + modifier = Modifier + .fillMaxWidth() + .clickable { onExamplePromptClicked(prompt) } + .padding(vertical = 8.dp) + ) + HorizontalDivider() + } + } +} + +@Composable +fun ApiModelDropDown( + models: List, + providers: List, + selectedModel: LanguageModel?, + onModelSelected: (LanguageModel?) -> Unit +) { + LocalContext.current + var expanded by remember { mutableStateOf(false) } + var searchQuery by remember { mutableStateOf("") } + + val activeModels = models.filter { model -> providers.any { it.key == model.providerKey && (it.hasValidKey || it.isCustom) } } + val groupedModels = activeModels.groupBy { it.providerKey } + val providerNames = remember(providers) { providers.associate { it.key to it.displayName } } + val providerStatuses = remember(providers) { providers.associate { it.key to (it.hasValidKey || it.isCustom) } } + + val filteredGroupedModels = remember(groupedModels, searchQuery) { + if (searchQuery.isBlank()) { + groupedModels + } else { + groupedModels.mapValues { (_, models) -> + models.filter { model -> + model.displayName.contains(searchQuery, ignoreCase = true) || + model.modelId.contains(searchQuery, ignoreCase = true) || + model.description.contains(searchQuery, ignoreCase = true) + } + }.filterValues { it.isNotEmpty() } + } + } + + Box { + AppOutlinedButton( + onClick = { expanded = true }, + modifier = Modifier.align(Alignment.Center), + contentPadding = PaddingValues(horizontal = 12.dp, vertical = 8.dp), + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxWidth() + ) { + Column(modifier = Modifier.weight(1f)) { + Text( + text = selectedModel?.displayName ?: stringResource(R.string.text_select_model), + style = MaterialTheme.typography.bodyMedium, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + if (selectedModel != null) { + Text( + text = providerNames[selectedModel.providerKey] ?: selectedModel.providerKey, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f), + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + } + } + Spacer(modifier = Modifier.width(8.dp)) + Icon( + imageVector = if (expanded) AppIcons.ArrowDropUp else AppIcons.ArrowDropDown, + contentDescription = if (expanded) stringResource(R.string.cd_collapse) else stringResource(R.string.cd_expand) + ) + } + } + + DropdownMenu( + modifier = Modifier + .fillMaxWidth(), + expanded = expanded, + onDismissRequest = { expanded = false } + ) { + // Search bar + Column { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + AppIcons.Search, + contentDescription = null, + modifier = Modifier.size(20.dp), + tint = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) + ) + Spacer(modifier = Modifier.width(8.dp)) + TextField( + value = searchQuery, + onValueChange = { searchQuery = it }, + placeholder = { Text(stringResource(R.string.label_search_models)) }, + singleLine = true, + colors = TextFieldDefaults.colors( + focusedContainerColor = Color.Transparent, + unfocusedContainerColor = Color.Transparent, + focusedIndicatorColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent, + ), + modifier = Modifier.weight(1f) + ) + if (searchQuery.isNotBlank()) { + IconButton( + onClick = { searchQuery = "" }, + modifier = Modifier.size(24.dp) + ) { + Icon( + AppIcons.Close, + contentDescription = stringResource(R.string.cd_clear_search), + modifier = Modifier.size(16.dp) + ) + } + } + } + HorizontalDivider() + } + + if (filteredGroupedModels.isNotEmpty()) { + filteredGroupedModels.entries.forEachIndexed { index, entry -> + val providerKey = entry.key + val providerModels = entry.value + val isActive = providerStatuses[providerKey] == true + val providerName = providerNames[providerKey] ?: providerKey + + if (index > 0) HorizontalDivider() + + // Provider header + DropdownMenuItem( + text = { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxWidth() + ) { + Icon( + imageVector = if (isActive) AppIcons.CheckCircle else AppIcons.Warning, + contentDescription = null, + tint = if (isActive) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.error, + modifier = Modifier.size(16.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Column(modifier = Modifier.weight(1f)) { + Text( + text = providerName, + style = MaterialTheme.typography.labelMedium, + fontWeight = androidx.compose.ui.text.font.FontWeight.Medium, + color = if (isActive) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f) + ) + Text( + text = stringResource( + R.string.labels_1d_models, + providerModels.size + ), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) + ) + } + } + }, + enabled = false, + onClick = {} + ) + + // Models for this provider + providerModels.forEach { model -> + DropdownMenuItem( + text = { + Column(modifier = Modifier.fillMaxWidth()) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxWidth() + ) { + Text( + text = model.displayName, + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.weight(1f), + fontWeight = if (model == selectedModel) androidx.compose.ui.text.font.FontWeight.Medium else androidx.compose.ui.text.font.FontWeight.Normal + ) + Spacer(modifier = Modifier.width(8.dp)) + ModelBadges( + modelDisplayOrId = model.displayName.ifBlank { model.modelId }, + providerKey = model.providerKey, + ) + } + if (model.description.isNotBlank()) { + Text( + text = model.description, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f), + maxLines = 2, + overflow = TextOverflow.Ellipsis + ) + } + } + }, + onClick = { + onModelSelected(model) + expanded = false + searchQuery = "" + }, + modifier = if (model == selectedModel) { + Modifier.background( + color = MaterialTheme.colorScheme.primary.copy(alpha = 0.1f) + ) + } else { + Modifier + } + ) + } + } + } else if (searchQuery.isNotBlank()) { + DropdownMenuItem( + text = { + Text( + stringResource(R.string.text_no_models_found), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f), + modifier = Modifier.fillMaxWidth() + ) + }, + enabled = false, + onClick = {} + ) + } + } + } +} + + + +@Suppress("HardCodedStringLiteral") +@ThemePreviews +@Composable +fun BasePromptSettingsScreenPreview() { + val previewProviders = listOf( + ApiProvider("openai", "OpenAI", "", "", "", emptyList()), + ApiProvider("anthropic", "Anthropic", "", "", "", emptyList()) + ) + val state = PromptSettingsState( + availableModels = listOf( + LanguageModel("gpt-4", "GPT-4", "openai", "OpenAI's most capable model."), + LanguageModel("claude-2", "Claude 2", "anthropic", "Anthropic's largest model.") + ), + selectedModel = LanguageModel("gpt-4", "GPT-4", "openai", "OpenAI's most capable model."), + customPrompt = "Translate the following English text to French:", + examplePrompts = listOf( + "Summarize this article for me.", + "Explain this concept in simple terms.", + "Write a poem about nature." + ) + ) + BasePromptSettingsScreen( + state = state, + providers = previewProviders, + description = "Configure your translation prompt settings here. You can choose a language model and set a custom prompt.", + onPromptChanged = {}, + onSaveClicked = {}, + onModelSelected = {}, + onExamplePromptClicked = {}) +} diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/CustomPromptScreens.kt b/app/src/main/java/eu/gaudian/translator/view/settings/CustomPromptScreens.kt new file mode 100644 index 0000000..3c952a4 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/CustomPromptScreens.kt @@ -0,0 +1,89 @@ +package eu.gaudian.translator.view.settings + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.viewmodel.ApiViewModel +import eu.gaudian.translator.viewmodel.SettingsViewModel + + +/** + * A settings screen for configuring the custom prompt used for vocabulary generation. + */ +@Composable +fun CustomVocabularyPromptScreen( + navController: NavController +) { + + val activity = LocalContext.current.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + val apiViewModel: ApiViewModel = hiltViewModel(viewModelStoreOwner = activity) + val customPrompt by settingsViewModel.customPromptVocabulary.collectAsStateWithLifecycle() + val availableModels by apiViewModel.allValidModels.collectAsStateWithLifecycle() + val allProviders by apiViewModel.allValidProviders.collectAsStateWithLifecycle() + val selectedModel by apiViewModel.vocabularyModel.collectAsStateWithLifecycle() + var tempPrompt by remember(customPrompt) { mutableStateOf(customPrompt) } + + val screenState = PromptSettingsState( + availableModels = availableModels, + selectedModel = selectedModel, + customPrompt = tempPrompt + ) + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.text_vocabulary_prompt)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + }, + hintContent = { + Text( + //TODO make this nicer and own file + stringResource(R.string.hint_this_screen_lets_you_customize_) + ) + } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .padding(paddingValues) + .verticalScroll(rememberScrollState()) + .fillMaxWidth() + ) { + BasePromptSettingsScreen( + state = screenState, + providers = allProviders, + description = stringResource(R.string.text_here_you_can_set_a_custom_), + onPromptChanged = { tempPrompt = it }, + onSaveClicked = { settingsViewModel.saveCustomVocabularyPrompt(tempPrompt) }, + onModelSelected = { apiViewModel.setVocabularyModel(it) }, + onExamplePromptClicked = { tempPrompt = it } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/DictionaryOptionsScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/DictionaryOptionsScreen.kt new file mode 100644 index 0000000..2de8588 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/DictionaryOptionsScreen.kt @@ -0,0 +1,203 @@ +package eu.gaudian.translator.view.settings + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringArrayResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.LocalShowExperimentalFeatures +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.OptionItemSwitch +import eu.gaudian.translator.view.composable.PrimaryButton +import eu.gaudian.translator.view.dictionary.DictionaryManagerContent +import eu.gaudian.translator.view.hints.getDictionaryOptionsHint +import eu.gaudian.translator.viewmodel.ApiViewModel +import eu.gaudian.translator.viewmodel.DictionaryViewModel +import eu.gaudian.translator.viewmodel.SettingsViewModel + +/** + * A settings screen for configuring dictionary content and the related AI prompt. + */ +@Composable +fun DictionaryOptionsScreen( + navController: NavController +) { + val activity = LocalContext.current.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + val apiViewModel: ApiViewModel = hiltViewModel(viewModelStoreOwner = activity) + val dictionaryViewModel : DictionaryViewModel = hiltViewModel(viewModelStoreOwner = activity) + val showExperimental = LocalShowExperimentalFeatures.current + val dictionarySwitches by settingsViewModel.dictionarySwitches.collectAsStateWithLifecycle() + val dictionaryOptionLabels = stringArrayResource(R.array.dictionary_content).toList() + val dictionaryOptionKeys = stringArrayResource(R.array.dictionary_content_keys).toList() + val customPrompt by settingsViewModel.customPromptDictionary.collectAsStateWithLifecycle() + var tempPrompt by remember(customPrompt) { mutableStateOf(customPrompt) } + val availableModels by apiViewModel.allValidModels.collectAsStateWithLifecycle() + val allProviders by apiViewModel.allValidProviders.collectAsStateWithLifecycle() + val selectedModel by apiViewModel.dictionaryModel.collectAsStateWithLifecycle() + val tryWiktionaryFirst by settingsViewModel.tryWiktionaryFirst.collectAsStateWithLifecycle() + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.label_dictionary_options)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + }, + hintContent = { getDictionaryOptionsHint() } + ) + } + ) { paddingValues -> + LazyColumn( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + if (showExperimental) { + item { + AppCard { + Column( + modifier = Modifier.padding(0.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + Column(modifier = Modifier.weight(1f)) { + OptionItemSwitch( + title = stringResource(R.string.text_try_wiktionary_first), + description = stringResource(R.string.text_try_first_finding_the_word_on), + checked = tryWiktionaryFirst, + onCheckedChange = { settingsViewModel.setTryWiktionaryFirst(it) }, + ) + } + } + } + } + } + } + + item { + AppCard { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + Text( + stringResource(R.string.text_ai_model_custom_prompt), + style = MaterialTheme.typography.titleMedium + ) + ApiModelDropDown( + models = availableModels, + providers = allProviders, + selectedModel = selectedModel, + onModelSelected = { model -> + apiViewModel.setDictionaryModel(model) + }, + ) + AppTextField( + value = tempPrompt, + onValueChange = { tempPrompt = it }, + label = { Text(stringResource(R.string.text_custom_dictionary_prompt)) }, + modifier = Modifier.defaultMinSize(minHeight = 120.dp) + ) + PrimaryButton( + onClick = { settingsViewModel.saveCustomPromptDictionary(tempPrompt) }, + text = stringResource(R.string.text_save_prompt), + modifier = Modifier.align(Alignment.End) + ) + } + } + } + + item { + AppCard { + + AppCard ( + title = stringResource(R.string.label_dictionary_content), + text = stringResource(R.string.text_select_the_content_dictionary), + expandable = true, + initiallyExpanded = false, + + ){ + Column(Modifier.padding(0.dp)) { + + + dictionaryOptionKeys.zip(dictionaryOptionLabels).forEach { (key, label) -> + val isChecked = dictionarySwitches.contains(key) || dictionarySwitches.contains(label) + + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { + settingsViewModel.setDictionarySwitch(key, !isChecked) + } + .padding(vertical = 4.dp), + verticalAlignment = Alignment.CenterVertically + ) { + OptionItemSwitch( + title = label, + // TODO description = "TODO()", + checked = isChecked, + onCheckedChange = { checked -> + settingsViewModel.setDictionarySwitch(key, checked) + }, + ) + } + } + } + } + } + } + + item { + // The AppCard and callbacks are now handled internally by DictionaryManagerContent + DictionaryManagerContent( + dictionaryViewModel = dictionaryViewModel + ) + } + } + } +} + +@Preview +@Composable +fun DictionaryOptionsScreenPreview() { + val navController = rememberNavController() + DictionaryOptionsScreen(navController = navController) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/ExerciseSettingsScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/ExerciseSettingsScreen.kt new file mode 100644 index 0000000..82e8762 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/ExerciseSettingsScreen.kt @@ -0,0 +1,155 @@ +package eu.gaudian.translator.view.settings + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringArrayResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.PrimaryButton +import eu.gaudian.translator.view.composable.SecondaryButton +import eu.gaudian.translator.viewmodel.ApiViewModel +import eu.gaudian.translator.viewmodel.SettingsViewModel + +@Composable +fun ExerciseSettingsScreen( + navController: NavController +) { + val activity = LocalContext.current.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + val apiViewModel: ApiViewModel = hiltViewModel(viewModelStoreOwner = activity) + val customPrompt by settingsViewModel.customPromptExercise.collectAsStateWithLifecycle() + var tempPrompt by remember(customPrompt) { mutableStateOf(customPrompt) } + + // Get all models and all providers from the ApiViewModel + val allModels by apiViewModel.allValidModels.collectAsStateWithLifecycle() + val allProviders by apiViewModel.allValidProviders.collectAsStateWithLifecycle() + + // Get the state from the SettingsViewModel which knows which providers have keys + val apiKeyState by apiViewModel.apiKeyManagementState.collectAsStateWithLifecycle() + + // Derive the list of models that are actually available (i.e., their provider has a key) + val availableModels by remember(allModels, apiKeyState) { + derivedStateOf { + val providersWithKeys = apiKeyState.providerStates.filter { it.hasKey }.map { it.provider.key }.toSet() + allModels.filter { it.providerKey in providersWithKeys } + } + } + + val selectedModel by apiViewModel.exerciseModel.collectAsStateWithLifecycle() + val examplePrompts = stringArrayResource(R.array.exercise_example_prompts).toList() + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.exercise_settings)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + } + ) + } + ) { paddingValues -> + LazyColumn( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + item { + AppCard { + Text( + text = stringResource(R.string.exercise_settings_description), + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding(16.dp) + ) + } + } + + item { + AppCard { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + Text( + stringResource(R.string.label_ai_model_and_prompt), + style = MaterialTheme.typography.titleMedium + ) + ApiModelDropDown( + models = availableModels, // Use the filtered list + providers = allProviders, + selectedModel = selectedModel, + onModelSelected = { model -> + apiViewModel.setExerciseModel(model) + }, + ) + AppTextField( + value = tempPrompt, + onValueChange = { tempPrompt = it }, + label = { Text(stringResource(R.string.custom_exercise_prompt)) }, + modifier = Modifier.defaultMinSize(minHeight = 150.dp) + ) + PrimaryButton( + onClick = { settingsViewModel.saveCustomExercisePrompt(tempPrompt) }, + text = stringResource(R.string.text_save_prompt), + modifier = Modifier.align(Alignment.End) + ) + } + } + } + + if (examplePrompts.isNotEmpty()) { + item { + AppCard { + Column(Modifier.padding(16.dp)) { + Text( + stringResource(R.string.examples), + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.padding(bottom = 8.dp) + ) + LazyRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + items(examplePrompts) { prompt -> + SecondaryButton( + onClick = { tempPrompt = prompt }, + text = prompt + ) + } + } + } + } + } + } + } + } +} diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/GeneralSettingsScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/GeneralSettingsScreen.kt new file mode 100644 index 0000000..5c67e1a --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/GeneralSettingsScreen.kt @@ -0,0 +1,88 @@ +package eu.gaudian.translator.view.settings + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppSwitch +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.viewmodel.SettingsViewModel + +@Composable +fun GeneralSettingsScreen( + navController: NavController, +) { + val activity = LocalContext.current.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + val showHints by settingsViewModel.showHints.collectAsStateWithLifecycle() + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.label_general)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + AppCard { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { settingsViewModel.setShowHints(!showHints) } + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Column(modifier = Modifier.weight(1f)) { + Text( + text = stringResource(R.string.show_contextual_hints), + style = MaterialTheme.typography.bodyLarge + ) + Text( + text = stringResource(R.string.display_info_buttons_for_on_screen_help), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + AppSwitch( + checked = showHints, + onCheckedChange = { settingsViewModel.setShowHints(it) } + ) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/LanguageOptionsScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/LanguageOptionsScreen.kt new file mode 100644 index 0000000..9c5bc3e --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/LanguageOptionsScreen.kt @@ -0,0 +1,189 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.settings + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppSwitch +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.PrimaryButton +import eu.gaudian.translator.view.dialogs.AddCustomLanguageDialog +import eu.gaudian.translator.view.dialogs.EditLanguageDialog +import eu.gaudian.translator.viewmodel.LanguageViewModel + +/** + * This screen allows users to manage which languages are available in the app and add custom languages. + */ +@Composable +fun LanguageOptionsScreen( + navController: NavController, +) { + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val enabledLanguages by languageViewModel.allLanguages.collectAsState() + val masterLanguages by languageViewModel.masterLanguages.collectAsState() + val isAllSelected by languageViewModel.isAllSelected.collectAsState() + var showAddLanguageDialog by remember { mutableStateOf(false) } + var editLanguageTarget by remember { mutableStateOf(null) } + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.text_language_options)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + AppCard { + Column(Modifier.padding(16.dp)) { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { languageViewModel.selectAllLanguages(!isAllSelected) }, + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text(stringResource(R.string.text_select_all_languages), style = MaterialTheme.typography.titleMedium) + AppSwitch( + checked = isAllSelected, + onCheckedChange = { languageViewModel.selectAllLanguages(it) } + ) + } + + HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) + + LazyColumn(modifier = Modifier.heightIn(max = 400.dp)) { + items(masterLanguages.sortedBy { it.name }) { language -> + val isEnabled = enabledLanguages.any { it.nameResId == language.nameResId } + LanguageItem( + language = language, + isEnabled = isEnabled, + onLanguageToggled = { lang -> languageViewModel.toggleLanguageSelection(lang) }, + onLanguageDeleted = { lang -> languageViewModel.removeCustomLanguage(lang) }, + onLanguageEdit = { lang -> editLanguageTarget = lang } + ) + } + } + } + } + + PrimaryButton( + onClick = { showAddLanguageDialog = true }, + text = stringResource(R.string.text_add_custom_language), + modifier = Modifier.fillMaxWidth() + ) + } + } + + if (showAddLanguageDialog) { + @Suppress("KotlinConstantConditions") + AddCustomLanguageDialog( + showDialog = showAddLanguageDialog, + onDismiss = { showAddLanguageDialog = false }, + onAddLanguage = { language -> + languageViewModel.addCustomLanguage(language) + } + ) + } + + editLanguageTarget?.let { lang -> + EditLanguageDialog( + language = lang, + onDismiss = { editLanguageTarget = null }, + onSave = { name, code, region -> + languageViewModel.editLanguage(lang.nameResId, name, code, region) + editLanguageTarget = null + } + ) + } +} + +/** + * A composable that displays a single language item with a switch and a delete button for custom languages. + */ +@Composable +private fun LanguageItem( + language: Language, + isEnabled: Boolean, + onLanguageToggled: (Language) -> Unit, + onLanguageDeleted: (Language) -> Unit, + onLanguageEdit: (Language) -> Unit +) { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { onLanguageToggled(language) } + .padding(vertical = 12.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Column(modifier = Modifier.weight(1f)) { + Text(language.name, style = MaterialTheme.typography.bodyLarge) + Text("${language.code} - ${language.region.uppercase()}", style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurfaceVariant) + } + + Row(verticalAlignment = Alignment.CenterVertically) { + IconButton(onClick = { onLanguageEdit(language) }) { + Icon( + imageVector = AppIcons.Edit, + contentDescription = stringResource(R.string.edit) + ) + } + if (language.isCustom == true) { + IconButton(onClick = { onLanguageDeleted(language) }) { + Icon( + imageVector = AppIcons.Delete, + contentDescription = stringResource(R.string.text_delete_custom_language), + tint = MaterialTheme.colorScheme.error + ) + } + } + AppSwitch( + checked = isEnabled, + onCheckedChange = { onLanguageToggled(language) } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/LayoutOptionsScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/LayoutOptionsScreen.kt new file mode 100644 index 0000000..a8b440b --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/LayoutOptionsScreen.kt @@ -0,0 +1,410 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.settings + +import android.annotation.SuppressLint +import android.app.Activity +import android.content.Context +import android.os.Build +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.animateColorAsState +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.spring +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.AllFonts +import eu.gaudian.translator.ui.theme.AllThemes +import eu.gaudian.translator.ui.theme.FontStyle +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTabLayout +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.TabItem +import eu.gaudian.translator.viewmodel.SettingsViewModel + +private data class DarkModeOption( + override val title: String, + override val icon: ImageVector, + val name: String +) : TabItem + +@Suppress("HardCodedStringLiteral") +private fun getDarkModeOptions(context: Context): List { + return listOf( + DarkModeOption(context.getString(R.string.text_light), AppIcons.LightMode, "Light"), + DarkModeOption(context.getString(R.string.text_dark), AppIcons.DarkMode, "Dark"), + DarkModeOption(context.getString(R.string.label_system), AppIcons.BrightnessAuto, "System") + ) +} + +@Composable +fun LayoutOptionsScreen(navController: NavController) { + val activity = LocalContext.current.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + val context = LocalContext.current + val selectedThemeName by settingsViewModel.theme.collectAsStateWithLifecycle() + val selectedDarkMode by settingsViewModel.darkModePreference.collectAsStateWithLifecycle() + val selectedFontName by settingsViewModel.fontPreference.collectAsStateWithLifecycle() + val showBottomNavLabels by settingsViewModel.showBottomNavLabels.collectAsStateWithLifecycle() + + val cdBack = stringResource(R.string.cd_back) + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.label_appearance)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = cdBack) + } + } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .padding(paddingValues) + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(4.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + AppCard(Modifier.padding(0.dp)) { + Column(Modifier.padding(0.dp)) { + Text( + text = stringResource(R.string.text_appearance_mode), + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.padding(bottom = 8.dp) + ) + val darkModeOptions = getDarkModeOptions(context) + val selectedMode = darkModeOptions.find { it.name == selectedDarkMode } ?: darkModeOptions.last() + AppTabLayout( + tabs = darkModeOptions, + selectedTab = selectedMode, + onTabSelected = { settingsViewModel.setDarkModePreference(it.name) } + ) + } + } + + AppCard { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { settingsViewModel.setShowBottomNavLabels(!showBottomNavLabels) } + .padding(horizontal = 16.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Column(modifier = Modifier.weight(1f)) { + Text( + text = stringResource(R.string.text_navigation_bar_labels), + style = MaterialTheme.typography.titleMedium + ) + Text( + text = stringResource(R.string.text_show_text_labels_on_the_main_navigation_bar), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + Spacer(Modifier.width(16.dp)) + Switch( + checked = showBottomNavLabels, + onCheckedChange = { settingsViewModel.setShowBottomNavLabels(it) } + ) + } + } + + // --- Color Palette Section --- + AppCard { + Column(Modifier.padding(16.dp)) { + Text( + text = stringResource(R.string.text_color_palette), + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.padding(bottom = 16.dp) + ) + ThemePicker( + selectedThemeName = selectedThemeName, + onThemeSelected = { themeName -> + settingsViewModel.setTheme(themeName) + (context as? Activity)?.recreate() + } + ) + } + } + + AppCard { + Column(Modifier.padding(16.dp)) { + Text( + text = stringResource(R.string.text_font_style), + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.padding(bottom = 16.dp) + ) + FontPicker( + selectedFontName = selectedFontName, + onFontSelected = { font -> + settingsViewModel.setFontPreference(font.name) + (context as? Activity)?.recreate() + } + ) + } + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +private fun ThemePicker(selectedThemeName: String, onThemeSelected: (String) -> Unit) { + val isDynamicThemeSupported = remember { Build.VERSION.SDK_INT >= Build.VERSION_CODES.S } + + LazyRow( + horizontalArrangement = Arrangement.spacedBy(16.dp), + contentPadding = PaddingValues(horizontal = 4.dp) + ) { + // Add the System Dynamic Theme option if supported + if (isDynamicThemeSupported) { + item { + SystemThemeOption( + isSelected = selectedThemeName == "System", + onClick = { onThemeSelected("System") } + ) + } + } + items(AllThemes) { theme -> + val isSelected = theme.name == selectedThemeName + val borderColor by animateColorAsState( + targetValue = if (isSelected) MaterialTheme.colorScheme.primary else Color.Transparent, + animationSpec = spring(stiffness = Spring.StiffnessMedium), + label = "borderColor" + ) + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier + .clip(RoundedCornerShape(12.dp)) + .clickable { onThemeSelected(theme.name) } + .padding(vertical = 4.dp) + ) { + Box( + modifier = Modifier + .size(64.dp) + .clip(CircleShape) + .border( + width = 3.dp, + color = borderColor, + shape = CircleShape + ), + contentAlignment = Alignment.Center + ) { + Column(Modifier.fillMaxSize()) { + Row(Modifier.weight(1f)) { + Box(modifier = Modifier + .weight(1f) + .fillMaxHeight() + .background(theme.lightColors.primary)) + Box(modifier = Modifier + .weight(1f) + .fillMaxHeight() + .background(theme.lightColors.secondary)) + } + Row(Modifier.weight(1f)) { + Box(modifier = Modifier + .weight(1f) + .fillMaxHeight() + .background(theme.lightColors.tertiary)) + Box(modifier = Modifier + .weight(1f) + .fillMaxHeight() + .background(theme.lightColors.surface)) + } + } + + this@Column.AnimatedVisibility( + visible = isSelected, + enter = fadeIn(animationSpec = spring()), + exit = fadeOut(animationSpec = spring()) + ) { + Box( + modifier = Modifier + .fillMaxSize() + .background(Color.Black.copy(alpha = 0.4f)) + ) + Icon( + imageVector = AppIcons.Check, + contentDescription = stringResource(R.string.text_2d_selected, theme.name), + tint = Color.White, + modifier = Modifier.size(32.dp) + ) + } + } + + Text( + text = theme.name, + style = MaterialTheme.typography.labelMedium, + fontWeight = if (isSelected) FontWeight.Bold else FontWeight.Normal, + color = if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface + ) + } + } + } +} + +@Composable +private fun SystemThemeOption(isSelected: Boolean, onClick: () -> Unit) { + val borderColor by animateColorAsState( + targetValue = if (isSelected) MaterialTheme.colorScheme.primary else Color.Transparent, + animationSpec = spring(stiffness = Spring.StiffnessMedium), + label = "borderColor" + ) + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier + .clip(RoundedCornerShape(12.dp)) + .clickable(onClick = onClick) + .padding(vertical = 4.dp) + ) { + Box( + modifier = Modifier + .size(64.dp) + .clip(CircleShape) + .border( + width = 3.dp, + color = borderColor, + shape = CircleShape + ) + .background(MaterialTheme.colorScheme.surfaceVariant), + contentAlignment = Alignment.Center + ) { + // Icon representing the system/wallpaper theme + Icon( + imageVector = AppIcons.Wallpaper, + contentDescription = stringResource(R.string.system_theme), + tint = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.size(32.dp) + ) + + this@Column.AnimatedVisibility( + visible = isSelected, + enter = fadeIn(animationSpec = spring()), + exit = fadeOut(animationSpec = spring()) + ) { + Box( + modifier = Modifier + .fillMaxSize() + .background(Color.Black.copy(alpha = 0.4f)) + ) + Icon( + imageVector = AppIcons.Check, + contentDescription = stringResource(R.string.text_2d_selected, stringResource(R.string.system_theme)), + tint = Color.White, + modifier = Modifier.size(32.dp) + ) + } + } + + Text( + text = stringResource(R.string.label_system), + style = MaterialTheme.typography.labelMedium, + fontWeight = if (isSelected) FontWeight.Bold else FontWeight.Normal, + color = if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface + ) + } +} + + +@SuppressLint("LocalContextResourcesRead", "DiscouragedApi") +@Composable +private fun FontPicker(selectedFontName: String, onFontSelected: (FontStyle) -> Unit) { + val context = LocalContext.current + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + AllFonts.forEach { font -> + val isSelected = font.name == selectedFontName + val fontFamily = if (font.name == "default") { + FontFamily.Default + } else { + val fontResId = context.resources.getIdentifier(font.fileName, "font", context.packageName) + if (fontResId != 0) FontFamily(Font(resId = fontResId)) else FontFamily.Default + } + + val displayText = if (font.name == "default") { + stringResource(R.string.system_default_font) + } else { + stringResource(R.string.d_the_quick_brown_fox_jumps_over_the_lazy_dog, font.name) + } + + Surface( + modifier = Modifier + .fillMaxWidth() + .clickable { onFontSelected(font) }, + shape = RoundedCornerShape(12.dp), + border = if (isSelected) BorderStroke(2.dp, MaterialTheme.colorScheme.primary) else BorderStroke(1.dp, MaterialTheme.colorScheme.outlineVariant) + ) { + Text( + text = displayText, + style = MaterialTheme.typography.bodyLarge.copy(fontFamily = fontFamily), + modifier = Modifier.padding(16.dp), + textAlign = TextAlign.Center + ) + } + } + } +} + +@ThemePreviews +@Composable +private fun LayoutOptionsScreenPreview() { + val mockNavController = NavController(LocalContext.current) + LayoutOptionsScreen(navController = mockNavController) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/LogsScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/LogsScreen.kt new file mode 100644 index 0000000..36684ee --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/LogsScreen.kt @@ -0,0 +1,509 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.settings + +import android.content.Intent +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutVertically +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SecondaryTabRow +import androidx.compose.material3.Switch +import androidx.compose.material3.Tab +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.communication.ApiLogEntry +import eu.gaudian.translator.ui.theme.semanticColors +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.viewmodel.SettingsViewModel +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +@Composable +fun LogsScreen(navController: NavController) { + val activity = LocalContext.current.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + val logsState by settingsViewModel.apiLogs.collectAsStateWithLifecycle(initialValue = emptyList()) + var onlyErrors by remember { mutableStateOf(false) } + var showStatusCodesDialog by remember { mutableStateOf(false) } + val listState = rememberLazyListState() + + val displayedLogs by remember(logsState, onlyErrors) { + derivedStateOf { + val filtered = if (onlyErrors) { + logsState.filter { it.isError() } + } else { + logsState + } + filtered.asReversed() // Show most recent first + } + } + + if (showStatusCodesDialog) { + @Suppress("AssignedValueIsNeverRead") + StatusCodesDialog(onDismiss = { showStatusCodesDialog = false }) + } + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.label_logs)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon( + imageVector = AppIcons.ArrowBack, + contentDescription = stringResource(R.string.cd_back) + ) + } + }, + actions = { + TextButton(onClick = { + settingsViewModel.clearApiLogs() + }) { + Text(stringResource(R.string.label_clear)) + } + } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + ) { + // ## A more compact and cleaner header for filters and actions + LogScreenHeader( + onlyErrors = onlyErrors, + onFilterChange = { onlyErrors = it }, + onInfoClick = { + @Suppress("AssignedValueIsNeverRead") + showStatusCodesDialog = true + } + ) + + if (logsState.isEmpty()) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Text( + text = stringResource(R.string.logs_empty), + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } else { + LazyColumn( + state = listState, + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(8.dp), + contentPadding = androidx.compose.foundation.layout.PaddingValues(horizontal = 16.dp, vertical = 8.dp) + ) { + items(items = displayedLogs, key = { it.id }) { entry -> + LogListItem(entry = entry) + } + } + } + } + } +} + +@Composable +private fun LogScreenHeader( + onlyErrors: Boolean, + onFilterChange: (Boolean) -> Unit, + onInfoClick: () -> Unit +) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text( + text = stringResource(R.string.only_show_errors), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.weight(1f) + ) + Switch(checked = onlyErrors, onCheckedChange = onFilterChange) + IconButton(onClick = onInfoClick) { + Icon( + imageVector = AppIcons.Info, + contentDescription = stringResource(R.string.title_http_status_codes) + ) + } + } + HorizontalDivider(modifier = Modifier.padding(bottom = 4.dp)) +} + + +@Suppress("HardCodedStringLiteral") +@Composable +private fun LogListItem(entry: ApiLogEntry) { + var expanded by remember { mutableStateOf(false) } + val timeFormat = remember { SimpleDateFormat("HH:mm:ss", Locale.getDefault()) } + + Card( + modifier = Modifier.fillMaxWidth(), + onClick = { + expanded = !expanded + }, + elevation = CardDefaults.cardElevation(defaultElevation = if (expanded) 4.dp else 2.dp) + ) { + Column( + modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp) + ) { + // ## This is the collapsed, scannable view + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(12.dp) + ) { + StatusIndicator(entry = entry) + Column(modifier = Modifier.weight(1f)) { + Text( + text = "${entry.method} ${entry.endpoint}", + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.Bold + ) + Text( + text = entry.providerKey, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + Text( + text = timeFormat.format(Date(entry.timestamp)), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + + // ## This is the expanded, detailed view + AnimatedVisibility( + visible = expanded, + enter = slideInVertically(initialOffsetY = { -it / 2 }) + fadeIn(animationSpec = tween(300)), + exit = slideOutVertically(targetOffsetY = { -it / 2 }) + fadeOut(animationSpec = tween(300)) + ) { + LogDetails(entry = entry) + } + } + } +} + +@Composable +private fun StatusIndicator(entry: ApiLogEntry) { + val isHttpSuccess = entry.responseCode != null && entry.responseCode in 200..299 + val isParseOk = entry.parseErrorMessage.isNullOrBlank() && entry.errorMessage.isNullOrBlank() + val color = when { + isHttpSuccess && isParseOk -> MaterialTheme.semanticColors.success + entry.responseCode != null && entry.responseCode in 400..499 -> Color(0xFFF57C00) // Orange 700 + else -> MaterialTheme.colorScheme.error // Red for 5xx or network errors + } + Box( + modifier = Modifier + .size(12.dp) + .clip(CircleShape) + .background(color) + ) +} + +@Suppress("HardCodedStringLiteral") +@Composable +private fun LogDetails(entry: ApiLogEntry) { + Log.d("LogListItem", "LogDetails: $entry") + + val fullDateFormat = remember { SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) } + var tabIndex by remember { mutableIntStateOf(0) } + val tabs = listOf(stringResource(R.string.logs_request_json), stringResource(R.string.logs_response_json)) + + Column { + Spacer(Modifier.height(16.dp)) + HorizontalDivider() + Spacer(Modifier.height(16.dp)) + + // ## Detailed meta-information + DetailRow(label = stringResource(R.string.logs_time), value = fullDateFormat.format(Date(entry.timestamp))) + DetailRow(label = stringResource(R.string.label_status), value = "${entry.responseCode ?: stringResource(R.string.na)} ${entry.responseMessage ?: ""}".trim()) + entry.model?.let { DetailRow(label = stringResource(R.string.model), value = it) } + entry.durationMs?.let { DetailRow(label = stringResource(R.string.duration), value = "$it ${stringResource(R.string.ms)}") } + entry.exceptionType?.let { DetailRow(label = stringResource(R.string.exception), value = it, valueColor = MaterialTheme.colorScheme.error) } + entry.isTimeout?.let { if (it) DetailRow(label = stringResource(R.string.timeout), value = stringResource(R.string.label_yes), valueColor = MaterialTheme.colorScheme.error) } + entry.errorMessage?.let { + DetailRow(label = stringResource(R.string.cd_error), value = it, valueColor = MaterialTheme.colorScheme.error) + } + entry.parseErrorMessage?.let { + DetailRow(label = stringResource(R.string.parse_error), value = it, valueColor = MaterialTheme.colorScheme.error) + } + + Spacer(Modifier.height(16.dp)) + + SecondaryTabRow(selectedTabIndex = tabIndex, containerColor = Color.Transparent) { + tabs.forEachIndexed { index, title -> + Tab( + text = { Text(title) }, + selected = tabIndex == index, + onClick = { tabIndex = index } + ) + } + } + Card( + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceVariant) + ) { + Text( + text = when (tabIndex) { + 0 -> entry.requestJson ?: stringResource(R.string.not_available) + else -> entry.responseJson ?: stringResource(R.string.not_available) + }, + modifier = Modifier.padding(12.dp), + fontFamily = FontFamily.Monospace, + fontSize = 12.sp + ) + } + + Spacer(Modifier.height(8.dp)) + ShareLogRow(entry = entry) + } +} + +@Composable +private fun DetailRow(label: String, value: String, valueColor: Color = Color.Unspecified) { + Row(modifier = Modifier.fillMaxWidth()) { + Text( + text = "$label:", + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.SemiBold, + modifier = Modifier.weight(0.3f) + ) + Text( + text = value, + style = MaterialTheme.typography.bodyMedium, + color = valueColor, + modifier = Modifier.weight(0.7f) + ) + } + Spacer(Modifier.height(4.dp)) +} + +@Composable +private fun StatusCodesDialog(onDismiss: () -> Unit) { + AppDialog( + onDismissRequest = onDismiss, + title = { Text(stringResource(R.string.title_http_status_codes)) }, + content = { StatusCodeInfo() }, + ) +} + +@Composable +private fun ShareLogRow(entry: ApiLogEntry) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.End + ) { + val context = LocalContext.current + val logsEmail = stringResource(R.string.logs_email_subject) + val logsLabelId = stringResource(R.string.logs_label_id) + val logsLabelTimestamp = stringResource(R.string.logs_label_timestamp) + val logsLabelProvider = stringResource(R.string.logs_label_provider) + val logsLabelEndpoint = stringResource(R.string.logs_label_endpoint) + val logsLabelModel = stringResource(R.string.logs_label_model) + val logsLabelStatus = stringResource(R.string.logs_label_status) + val logsLabelDuration = stringResource(R.string.logs_label_duration) + val logsLabelException = stringResource(R.string.logs_label_exception) + val logsLabelTimeoutYes = stringResource(R.string.logs_label_timeout_yes) + val logsLabelParseError = stringResource(R.string.logs_label_parse_error) + val logsLabelError = stringResource(R.string.logs_label_error) + val logsRequestSection = stringResource(R.string.logs_request_section) + val logsResponseSection = stringResource(R.string.logs_response_section) + val ms = stringResource(R.string.ms) + val notAvailable = stringResource(R.string.not_available) + val emailLog = stringResource(R.string.email_log) + val share = stringResource(R.string.share) + + TextButton(onClick = { + val subject = (logsEmail + " " + entry.id) + val body = buildString { + @Suppress("HardCodedStringLiteral") val ts = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(Date(entry.timestamp)) + appendLine(logsLabelId.format(entry.id)) + appendLine(logsLabelTimestamp.format(ts)) + appendLine(logsLabelProvider.format(entry.providerKey)) + appendLine(logsLabelEndpoint.format(entry.method, entry.endpoint)) + appendLine(logsLabelModel.format(entry.model ?: "-")) + appendLine(logsLabelStatus.format((entry.responseCode ?: "-").toString(), entry.responseMessage ?: "")) + entry.durationMs?.let { appendLine(logsLabelDuration.format(it.toString(), ms)) } + entry.exceptionType?.let { appendLine(logsLabelException.format(it)) } + if (entry.isTimeout == true) appendLine(logsLabelTimeoutYes) + if (!entry.parseErrorMessage.isNullOrBlank()) appendLine(logsLabelParseError.format(entry.parseErrorMessage)) + if (!entry.errorMessage.isNullOrBlank()) appendLine(logsLabelError.format(entry.errorMessage)) + appendLine("\n$logsRequestSection\n${entry.requestJson ?: notAvailable}") + appendLine("\n$logsResponseSection\n${entry.responseJson ?: notAvailable}") + } + val intent = Intent(Intent.ACTION_SEND).apply { + type = "message/rfc822" + putExtra(Intent.EXTRA_EMAIL, arrayOf("play@gaudian.eu")) + putExtra(Intent.EXTRA_SUBJECT, subject) + putExtra(Intent.EXTRA_TEXT, body) + } + try { + context.startActivity(Intent.createChooser(intent, emailLog)) + } catch (_: Exception) { + // Fallback to plain text share if no email clients + val fallbackIntent = Intent(Intent.ACTION_SEND).apply { + type = "text/plain" + putExtra(Intent.EXTRA_SUBJECT, subject) + putExtra(Intent.EXTRA_TEXT, body) + } + context.startActivity(Intent.createChooser(fallbackIntent, share)) + } + }) { + Text(emailLog) + } + } +} + +// Helper extension function +private fun ApiLogEntry.isError(): Boolean { + val isHttpError = responseCode != null && responseCode !in 200..299 + val hasErrorMessage = !errorMessage.isNullOrBlank() + val hasParseError = !parseErrorMessage.isNullOrBlank() + return isHttpError || hasErrorMessage || hasParseError +} + +@Preview(showBackground = true) +@Composable +private fun LogsScreenPreview() { + LogsScreen(navController = rememberNavController()) +} + +@Preview(showBackground = true) +@Composable +private fun LogListItemPreview() { + val entry = ApiLogEntry( + id = "123", + timestamp = System.currentTimeMillis(), + providerKey = "DeepL", + endpoint = "/v2/translate", + method = "POST", + model = "deepl-pro", + requestJson = """{"text": ["Hello, world!"], "target_lang": "DE"}""", + responseCode = 200, + responseMessage = "OK", + responseJson = """{"translations": [{"detected_source_language": "EN", "text": "Hallo, Welt!"}]}""", + errorMessage = null + ) + Column(modifier = Modifier.padding(16.dp)) { + LogListItem(entry = entry) + } +} + +@Preview(showBackground = true) +@Composable +private fun LogListItemErrorPreview() { + val entry = ApiLogEntry( + id = "456", + timestamp = System.currentTimeMillis(), + providerKey = "OpenAI", + endpoint = "/v1/chat/completions", + method = "POST", + model = "gpt-4", + requestJson = """{"model": "gpt-4", "messages": [{"role": "user", "content": "Say this is a test!"}]}""", + responseCode = 401, + responseMessage = "Unauthorized", + responseJson = """{"error": {"message": "Incorrect API key provided.", "type": "invalid_request_error"}}""", + errorMessage = "HTTP 401 Unauthorized" + ) + Column(modifier = Modifier.padding(16.dp)) { + LogListItem(entry = entry) + } +} + +@Composable +fun StatusCodeInfo() { + val items = listOf( + stringResource(R.string.text_200_ok) to stringResource(R.string.the_request_was_successful), + stringResource(R.string.text_400_bad_request) to stringResource(R.string.the_server_could_not_understand_the_request), + stringResource(R.string.text_401_unauthorized) to stringResource(R.string.text_authentication_is_required_and_has_failed), + stringResource(R.string.text_403_forbidden) to stringResource(R.string.the_server_understood_the_request_but_is_refusing_to_authorize_it), + stringResource(R.string.text_404_not_found) to stringResource(R.string.the_requested_resource_could_not_be_found), + stringResource(R.string.text_429_too_many_requests) to stringResource(R.string.text_too_many_requests), + stringResource(R.string.text_500_internal_server_error) to stringResource(R.string.text_an_unexpected_condition_was_encountered_on_the_server) + ) + + LazyColumn( + modifier = Modifier + .padding(8.dp) + .heightIn(max = 500.dp) + ) { + items(items) { (code, description) -> + Row(modifier = Modifier.padding(vertical = 4.dp)) { + Text( + text = code, + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.width(120.dp) + ) + Text( + text = description, + style = MaterialTheme.typography.bodyMedium + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/MainSettingsScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/MainSettingsScreen.kt new file mode 100644 index 0000000..810d950 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/MainSettingsScreen.kt @@ -0,0 +1,179 @@ +package eu.gaudian.translator.view.settings + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.ListItem +import androidx.compose.material3.ListItemDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.view.LocalShowExperimentalFeatures +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedCard +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar + +private data class Setting(val titleRes: Int, val icon: ImageVector, val route: String) + +@Composable +fun MainSettingsScreen( + navController: NavController, + modifier: Modifier = Modifier +) { + val showExperimental = LocalShowExperimentalFeatures.current + + val settingsGroups = remember(showExperimental) { + val allGroups = listOf( + R.string.label_general to listOf( + Setting(R.string.label_about, AppIcons.Info, SettingsRoutes.ABOUT), + Setting(R.string.label_general, AppIcons.Tune, SettingsRoutes.GENERAL), + Setting(R.string.settings_title_connection, AppIcons.ApiKey, SettingsRoutes.API_KEY), + Setting(R.string.label_appearance, AppIcons.Appearance, SettingsRoutes.LAYOUT_OPTIONS), + Setting(R.string.settings_title_voice, AppIcons.TextToSpeech, SettingsRoutes.TTS_OPTIONS), + Setting(R.string.label_logs, AppIcons.Log, SettingsRoutes.LOGS), + Setting(R.string.label_languages, AppIcons.Language, SettingsRoutes.LANGUAGE_OPTIONS), + //Setting(R.string.hint_settings_title_hints, AppIcons.Info, SettingsRoutes.HINTS_OVERVIEW) + + ), + R.string.settings_header_translator to listOf( + Setting(R.string.label_translation, AppIcons.Translate, SettingsRoutes.CUSTOM_TRANSLATION_PROMPT) + ), + R.string.label_dictionary to listOf( + Setting(R.string.label_dictionary, AppIcons.Dictionary, SettingsRoutes.DICTIONARY_OPTIONS) + ), + R.string.label_vocabulary to listOf( + Setting(R.string.settings_title_vocab_progress, AppIcons.Stages, SettingsRoutes.VOCABULARY_OPTIONS), + Setting(R.string.settings_title_vocab_prompt, AppIcons.EditNote, SettingsRoutes.VOCABULARY_PROMPT_OPTIONS), + Setting(R.string.settings_title_vocab_repo, AppIcons.Repository, SettingsRoutes.VOCABULARY_REPOSITORY_OPTIONS) + ), + R.string.label_exercises to listOf( + Setting(R.string.settings_title_exercise_generation, AppIcons.Exercise, SettingsRoutes.EXERCISE_OPTIONS) + ) + ) + + if (showExperimental) { + allGroups + } else { + allGroups.map { (headerRes, settings) -> + val filteredSettings = settings.filterNot { setting -> + setting.route == SettingsRoutes.DEV_OPTIONS + } + headerRes to filteredSettings + }.filterNot { (headerRes, _) -> + headerRes == R.string.label_exercises + } + } + } + + AppOutlinedCard { + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.title_settings), style = MaterialTheme.typography.titleLarge) } + ) + } + ) { paddingValues -> + LazyColumn(modifier = modifier.padding(paddingValues).padding(bottom = 0.dp)) { + settingsGroups.forEach { (headerRes, settings) -> + item { + // The string is resolved here, in the composable context + SettingsHeader(title = stringResource(id = headerRes)) + } + item { + AppCard( + modifier = Modifier.padding(horizontal = 8.dp, vertical = 8.dp), + ) { + Column { + settings.forEachIndexed { index, setting -> + SettingsItem( + // The string is resolved here, in the composable context + title = stringResource(id = setting.titleRes), + icon = setting.icon, + onClick = { navController.navigate(setting.route) } + ) + if (index < settings.lastIndex) { + HorizontalDivider(modifier = Modifier.padding(start = 56.dp)) + } + } + } + } + } + } + } + } + } +} + +@ThemePreviews +@Composable +fun MainSettingsScreenPreview() { + MainSettingsScreen(navController = rememberNavController()) +} + +@Composable +private fun SettingsHeader( + title: String, + modifier: Modifier = Modifier +) { + Text( + text = title, + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.primary, + modifier = modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 16.dp) + ) +} + +@ThemePreviews +@Composable +fun SettingsHeaderPreview() { + SettingsHeader(title = stringResource(R.string.general_settings)) +} + +@Composable +private fun SettingsItem( + title: String, + icon: ImageVector, + onClick: () -> Unit, +) { + ListItem( + headlineContent = { Text(title) }, + leadingContent = { + Icon( + imageVector = icon, + contentDescription = null, + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + }, + colors = ListItemDefaults.colors( + containerColor = MaterialTheme.colorScheme.surfaceContainer + ), + modifier = Modifier.clickable(onClick = onClick) + ) +} + +@ThemePreviews +@Composable +fun SettingsItemPreview() { + SettingsItem( + title = stringResource(R.string.label_about), + icon = AppIcons.Info, + onClick = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/SettingsNavGraph.kt b/app/src/main/java/eu/gaudian/translator/view/settings/SettingsNavGraph.kt new file mode 100644 index 0000000..3b03598 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/SettingsNavGraph.kt @@ -0,0 +1,144 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.settings + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable +import androidx.navigation.navigation +import eu.gaudian.translator.view.composable.Screen +import eu.gaudian.translator.view.hints.ApiHintScreen +import eu.gaudian.translator.view.hints.CategoryHintScreenWrapper +import eu.gaudian.translator.view.hints.DictionaryHintScreen +import eu.gaudian.translator.view.hints.HintsOverviewScreen +import eu.gaudian.translator.view.hints.ImportHintScreen +import eu.gaudian.translator.view.hints.ScanHintScreen +import eu.gaudian.translator.view.hints.SortingHintScreen +import eu.gaudian.translator.view.hints.StagesHintScreen +import eu.gaudian.translator.view.hints.TranslationHintScreen +import eu.gaudian.translator.view.hints.VocabularyProgressHintScreen + +// Defines the routes for the settings graph to avoid using raw strings +object SettingsRoutes { + const val TTS_OPTIONS = "settings_tts_options" + const val LOGS = "settings_logs" + const val LIST = "settings_list" + const val ABOUT = "settings_about" + const val API_KEY = "settings_api_key" + const val LAYOUT_OPTIONS = "settings_layout_options" + const val CUSTOM_TRANSLATION_PROMPT = "settings_custom_translation_prompt" + const val LANGUAGE_OPTIONS = "settings_language_options" + const val DICTIONARY_OPTIONS = "settings_dictionary_options" + const val VOCABULARY_OPTIONS = "settings_vocabulary_options" + const val VOCABULARY_PROMPT_OPTIONS = "settings_vocabulary_prompt_options" + const val VOCABULARY_REPOSITORY_OPTIONS = "settings_vocabulary_repository_options" + const val EXERCISE_OPTIONS = "settings_exercise_options" + // ADD THIS LINE + const val GENERAL = "settings_general" + const val ADD_MODEL = "settings_add_model/{providerKey}" + const val HINTS_OVERVIEW = "settings_hints_overview" + const val HINTS_CATEGORIES = "settings_hints_categories" + const val HINTS_DICTIONARY = "settings_hints_dictionary" + const val HINTS_IMPORT = "settings_hints_import" + const val HINTS_SORTING = "settings_hints_sorting" + const val HINTS_STAGES = "settings_hints_stages" + const val HINTS_TRANSLATION = "settings_hints_translation" + const val HINTS_SCAN = "settings_hints_scan" + const val HINTS_API = "settings_hints_api" + const val HINTS_VOCABULARY_PROGRESS = "settings_hints_vocabulary_progress" + + const val DEV_OPTIONS = "settings_dev_options" + const val THEME_PREVIEW = "settings_theme_preview" +} + +// This function builds the nested navigation graph for all settings screens +fun NavGraphBuilder.settingsGraph(navController: NavController) { + navigation( + startDestination = SettingsRoutes.LIST, + route = Screen.Settings.route // The route for the entire settings flow + ) { + composable(SettingsRoutes.LIST) { + MainSettingsScreen(navController = navController) + } + composable(SettingsRoutes.ABOUT) { + AboutScreen(navController = navController) + } + composable(SettingsRoutes.GENERAL) { + GeneralSettingsScreen(navController = navController) + } + composable(SettingsRoutes.API_KEY) { + ApiKeyScreen(navController = navController) + } + composable(SettingsRoutes.ADD_MODEL) { backStackEntry -> + val providerKey = backStackEntry.arguments?.getString("providerKey") ?: "" + AddModelScreen(navController = navController, providerKey = providerKey) + } + composable(SettingsRoutes.LAYOUT_OPTIONS) { + LayoutOptionsScreen(navController = navController) + } + composable(SettingsRoutes.CUSTOM_TRANSLATION_PROMPT) { + TranslationSettingsScreen( + navController = navController + ) + } + composable(SettingsRoutes.LANGUAGE_OPTIONS) { + LanguageOptionsScreen(navController = navController) + } + composable(SettingsRoutes.DICTIONARY_OPTIONS) { + DictionaryOptionsScreen( + navController = navController + ) + } + composable(SettingsRoutes.VOCABULARY_OPTIONS) { + VocabularyProgressOptionsScreen(navController = navController) + } + composable(SettingsRoutes.VOCABULARY_PROMPT_OPTIONS) { + CustomVocabularyPromptScreen(navController = navController) + } + composable(SettingsRoutes.VOCABULARY_REPOSITORY_OPTIONS) { + VocabularyRepositoryOptionsScreen(navController = navController) + } + composable(SettingsRoutes.EXERCISE_OPTIONS) { + ExerciseSettingsScreen(navController) + } + composable(SettingsRoutes.LOGS) { + LogsScreen(navController = navController) + } + composable(SettingsRoutes.TTS_OPTIONS) { + TextToSpeechSettingsScreen(navController = navController) + } + composable(SettingsRoutes.THEME_PREVIEW) { + ThemePreviewScreen(navController = navController) + } + composable(SettingsRoutes.HINTS_OVERVIEW) { + HintsOverviewScreen(navController = navController) + } + composable(SettingsRoutes.HINTS_CATEGORIES) { + CategoryHintScreenWrapper(navController = navController) + } + composable(SettingsRoutes.HINTS_DICTIONARY) { + DictionaryHintScreen(navController = navController) + } + composable(SettingsRoutes.HINTS_IMPORT) { + ImportHintScreen(navController = navController) + } + composable(SettingsRoutes.HINTS_SORTING) { + SortingHintScreen(navController = navController) + } + composable(SettingsRoutes.HINTS_STAGES) { + StagesHintScreen(navController = navController) + } + composable(SettingsRoutes.HINTS_TRANSLATION) { + TranslationHintScreen(navController = navController) + } + composable(SettingsRoutes.HINTS_SCAN) { + ScanHintScreen(navController = navController) + } + composable(SettingsRoutes.HINTS_API) { + ApiHintScreen(navController = navController) + } + composable(SettingsRoutes.HINTS_VOCABULARY_PROGRESS) { + VocabularyProgressHintScreen(navController = navController) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/TextToSpeechSettingsScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/TextToSpeechSettingsScreen.kt new file mode 100644 index 0000000..31aedad --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/TextToSpeechSettingsScreen.kt @@ -0,0 +1,227 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.settings + +import android.speech.tts.Voice +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.TextToSpeechHelper +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppSlider +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.SecondaryButton +import eu.gaudian.translator.view.composable.SingleLanguageDropDown +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.SettingsViewModel +import kotlinx.coroutines.launch + +@Composable +fun TextToSpeechSettingsScreen( + navController: NavController, +) { + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + val scope = rememberCoroutineScope() + val speakingSpeed by settingsViewModel.speakingSpeed.collectAsState() + val context = LocalContext.current + + // Single language selection + var selectedLanguage by remember { mutableStateOf(null) } + + // Available voices and current selection for the chosen language + var availableVoices by remember { mutableStateOf>(emptyList()) } + var selectedVoiceName by remember { mutableStateOf(null) } + + // Load stored voice whenever language changes + LaunchedEffect(selectedLanguage) { + val lang = selectedLanguage ?: run { + availableVoices = emptyList() + selectedVoiceName = null + return@LaunchedEffect + } + val voices = TextToSpeechHelper.getVoicesForLanguage(context, lang) + availableVoices = voices + val stored = settingsViewModel.getTtsVoiceForLanguage(lang.code, lang.region) + selectedVoiceName = stored + } + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.settings_title_voice)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(paddingValues) + .padding(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + // Language selection card + AppCard { + Column(modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text(stringResource(R.string.language), style = MaterialTheme.typography.titleMedium) + SingleLanguageDropDown( + languageViewModel = languageViewModel, + selectedLanguage = selectedLanguage, + onLanguageSelected = { selectedLanguage = it }, + showNoneOption = true, + onNoneSelected = { selectedLanguage = null } + ) + } + } + + // Voice selection for the selected language + val lang = selectedLanguage + Log.d("Selected language: $lang") + if (lang != null) { + AppCard { + Column(modifier = Modifier.padding(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text(text = lang.name, style = MaterialTheme.typography.titleMedium) + Row(modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp)) { + SecondaryButton( + onClick = { + selectedVoiceName = null + scope.launch { settingsViewModel.saveTtsVoiceForLanguage(lang.code, lang.region, null) } + }, + text = stringResource(R.string.default_value), + icon = if (selectedVoiceName == null) AppIcons.Check else null, + inverse = true + ) + Spacer(Modifier.weight(1f)) + } + // Bounded scrollable list of voices to save space + if (availableVoices.isEmpty()) { + Text( + text = "No TTS voices found for this language on your device.", + style = MaterialTheme.typography.bodyMedium + ) + } else { + LazyColumn( + modifier = Modifier + .fillMaxWidth() + .heightIn(max = 300.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + items(availableVoices) { v -> + SecondaryButton( + onClick = { + selectedVoiceName = v.name + scope.launch { settingsViewModel.saveTtsVoiceForLanguage(lang.code, lang.region, selectedVoiceName) } + }, + modifier = Modifier.fillMaxWidth(), + text = v.name, + icon = if (selectedVoiceName == v.name) AppIcons.Check else null, + inverse = true + ) + } + } + } + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp)) { + val sample = stringResource(R.string.tts_test_phrase) + AppButton( + onClick = { + scope.launch { + val ts = eu.gaudian.translator.utils.TranslationService(context) + val translated = if(lang.code != "en") ts.simpleTranslateTo(sample, lang).getOrElse { sample } else sample + + TextToSpeechHelper.speakOut( + context, + translated, + lang, + selectedVoiceName, + ) + } + }, + modifier = Modifier.weight(1f), + content = {Text(stringResource(R.string.test))} + ) + } + } + } + } + + AppCard { + var speedLocal by remember { mutableFloatStateOf(speakingSpeed.toFloat()) } + var isDragging by remember { mutableStateOf(false) } + var saveJob by remember { mutableStateOf(null) } + + LaunchedEffect(speakingSpeed) { + if (!isDragging) { + speedLocal = speakingSpeed.toFloat() + } + } + + Column(modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text(text = stringResource(R.string.label_speaking_speed), style = MaterialTheme.typography.titleMedium) + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically) { + Text(text = speedLocal.toInt().toString(), style = MaterialTheme.typography.bodyMedium) + } + AppSlider( + value = speedLocal, + onValueChange = { value -> + isDragging = true + val coerced = value.coerceIn(50f, 200f) + speedLocal = coerced + // Debounce persistence: cancel previous pending save and schedule a new one + saveJob?.cancel() + saveJob = scope.launch { + kotlinx.coroutines.delay(350) + settingsViewModel.saveSpeakingSpeed(coerced.toInt()) + isDragging = false + } + }, + valueRange = 50f..200f, + steps = 14 + ) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/ThemePreviewScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/ThemePreviewScreen.kt new file mode 100644 index 0000000..d9794a9 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/ThemePreviewScreen.kt @@ -0,0 +1,213 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.settings + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppCheckbox +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppSwitch +import eu.gaudian.translator.view.composable.Compass +import eu.gaudian.translator.view.composable.HintIcons +import eu.gaudian.translator.view.composable.Info +import eu.gaudian.translator.view.composable.Key +import eu.gaudian.translator.view.composable.Lightbulb +import eu.gaudian.translator.view.composable.MagicWand +import eu.gaudian.translator.view.composable.MagnifyingGlass +import eu.gaudian.translator.view.composable.PointingHand +import eu.gaudian.translator.view.composable.PrimaryButton +import eu.gaudian.translator.view.composable.Puzzle +import eu.gaudian.translator.view.composable.QuestionCircle +import eu.gaudian.translator.view.composable.Scroll +import eu.gaudian.translator.view.composable.SecondaryButton + +@Composable +fun ThemePreviewScreen(navController: NavController) { + AppScaffold( + topBar = { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = "Back") + } + Text( + text = "Theme Preview", + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.SemiBold + ) + } + } + ) { padding -> + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + // Buttons + AppCard { + Column(Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text("Buttons", style = MaterialTheme.typography.titleMedium) + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + PrimaryButton(onClick = {}, text = "Primary") + SecondaryButton(onClick = {}, text = "Secondary") + } + } + } + + // Switch & Checkbox + AppCard { + Column(Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text("Toggles", style = MaterialTheme.typography.titleMedium) + var sw by remember { mutableStateOf(true) } + var cb by remember { mutableStateOf(false) } + Row(horizontalArrangement = Arrangement.spacedBy(16.dp), verticalAlignment = Alignment.CenterVertically) { + AppSwitch(checked = sw, onCheckedChange = { sw = it }) + AppCheckbox(checked = cb, onCheckedChange = { cb = it }) + } + } + } + + // Hint icons + AppCard { + Column(Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text("Hint icons", style = MaterialTheme.typography.titleMedium) + Row(horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.CenterVertically) { + Icon(HintIcons.Lightbulb, contentDescription = "Lightbulb", modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.primary) + Text("Lightbulb") + } + Row(horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.CenterVertically) { + Icon(HintIcons.QuestionCircle, contentDescription = "QuestionCircle", modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.primary) + Text("QuestionCircle") + } + Row(horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.CenterVertically) { + Icon(HintIcons.MagnifyingGlass, contentDescription = "MagnifyingGlass", modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.primary) + Text("MagnifyingGlass") + } + Row(horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.CenterVertically) { + Icon(HintIcons.Key, contentDescription = "Key", modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.primary) + Text("Key") + } + Row(horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.CenterVertically) { + Icon(HintIcons.Info, contentDescription = "Info", modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.primary) + Text("Info") + } + Row(horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.CenterVertically) { + Icon(HintIcons.Puzzle, contentDescription = "Puzzle", modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.primary) + Text("Puzzle") + } + Row(horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.CenterVertically) { + Icon(HintIcons.MagicWand, contentDescription = "MagicWand", modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.primary) + Text("MagicWand") + } + Row(horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.CenterVertically) { + Icon(HintIcons.Compass, contentDescription = "Compass", modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.primary) + Text("Compass") + } + Row(horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.CenterVertically) { + Icon(HintIcons.PointingHand, contentDescription = "PointingHand", modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.primary) + Text("PointingHand") + } + Row(horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.CenterVertically) { + Icon(HintIcons.Scroll, contentDescription = "Scroll", modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.primary) + Text("Scroll") + } + } + } + + // Color swatches from Material color scheme (backed by ThemeColorSet) + AppCard { + Column(Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(12.dp)) { + Text("Theme colors", style = MaterialTheme.typography.titleMedium) + val cs = MaterialTheme.colorScheme + val items: List> = listOf( + Triple("primary", cs.primary, cs.onPrimary), + Triple("secondary", cs.secondary, cs.onSecondary), + Triple("tertiary", cs.tertiary, cs.onTertiary), + Triple("primaryContainer", cs.primaryContainer, cs.onPrimaryContainer), + Triple("secondaryContainer", cs.secondaryContainer, cs.onSecondaryContainer), + Triple("tertiaryContainer", cs.tertiaryContainer, cs.onTertiaryContainer), + Triple("error", cs.error, cs.onError), + Triple("errorContainer", cs.errorContainer, cs.onErrorContainer), + Triple("background", cs.background, cs.onBackground), + Triple("surface", cs.surface, cs.onSurface), + Triple("surfaceVariant", cs.surfaceVariant, cs.onSurfaceVariant), + Triple("outline", cs.outline, cs.onSurface), + Triple("outlineVariant", cs.outlineVariant, cs.onSurface), + Triple("scrim", cs.scrim, cs.onSurface), + Triple("inverseSurface", cs.inverseSurface, cs.inverseOnSurface), + Triple("inversePrimary", cs.inversePrimary, cs.onPrimary), + Triple("surfaceDim", cs.surfaceDim, cs.onSurface), + Triple("surfaceBright", cs.surfaceBright, cs.onSurface), + Triple("surfaceContainerLowest", cs.surfaceContainerLowest, cs.onSurface), + Triple("surfaceContainerLow", cs.surfaceContainerLow, cs.onSurface), + Triple("surfaceContainer", cs.surfaceContainer, cs.onSurface), + Triple("surfaceContainerHigh", cs.surfaceContainerHigh, cs.onSurface), + Triple("surfaceContainerHighest", cs.surfaceContainerHighest, cs.onSurface), + ) + items.forEach { (name, bg, fg) -> + ColorRow(name = name, bg = bg, fg = fg) + } + } + } + } + } +} + +@Composable +private fun ColorRow(name: String, bg: Color, fg: Color) { + Row( + modifier = Modifier + .fillMaxWidth() + .height(48.dp) + .background(bg) + .padding(horizontal = 12.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text(text = name, color = appropriateTextColor(bg, fg), fontWeight = FontWeight.Medium) + Box( + modifier = Modifier + .size(28.dp) + .background(appropriateTextColor(bg, fg)) + ) + } +} + +private fun appropriateTextColor(bg: Color, suggested: Color): Color { + // prefer suggested, but ensure sufficient contrast by falling back to black/white heuristic + val luminance = 0.299f * bg.red + 0.587f * bg.green + 0.114f * bg.blue + val fallback = if (luminance < 0.5f) Color.White else Color.Black + return if (suggested.alpha > 0f) suggested else fallback +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/TranslationSettings.kt b/app/src/main/java/eu/gaudian/translator/view/settings/TranslationSettings.kt new file mode 100644 index 0000000..8d8ea8f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/TranslationSettings.kt @@ -0,0 +1,115 @@ +package eu.gaudian.translator.view.settings + +import android.annotation.SuppressLint +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.OptionItemSwitch +import eu.gaudian.translator.viewmodel.ApiViewModel +import eu.gaudian.translator.viewmodel.SettingsViewModel + +@SuppressLint("LocalContextResourcesRead") +@Composable +fun TranslationSettingsScreen( + navController: NavController, +) { + val activity = LocalContext.current.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + val apiViewModel: ApiViewModel = hiltViewModel(viewModelStoreOwner = activity) + val context = LocalContext.current + val customPrompt by settingsViewModel.customPrompt.collectAsStateWithLifecycle() + val availableModels by apiViewModel.allValidModels.collectAsStateWithLifecycle() + val allProviders by apiViewModel.allValidProviders.collectAsStateWithLifecycle() + val selectedModel by apiViewModel.translationModel.collectAsStateWithLifecycle() + var tempPrompt by remember(customPrompt) { mutableStateOf(customPrompt) } + val examplePrompts = remember { + context.resources.getStringArray(R.array.example_prompts).toList() + } + + val screenState = PromptSettingsState( + availableModels = availableModels, + selectedModel = selectedModel, + customPrompt = tempPrompt, + examplePrompts = examplePrompts + ) + + val useLibre by settingsViewModel.useLibreTranslate.collectAsStateWithLifecycle() + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.label_translation_settings)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + }, + hintContent = { + Text( + //TODO make this nicer and an own file + stringResource(R.string.hint_use_this_screen_to_define) + ) + } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .padding(paddingValues) + .fillMaxWidth() + .verticalScroll(rememberScrollState()) + .padding(8.dp) + ) { + AppCard{ + Row(modifier = Modifier.fillMaxWidth().padding(0.dp), + ) { + + OptionItemSwitch( + title = stringResource(R.string.toggle_use_libretranslate), + description = stringResource(R.string.toggle_use_libretranslate_desc), + checked = useLibre, + onCheckedChange = { settingsViewModel.setUseLibreTranslate(it) }, + ) + }} + + + Spacer(modifier = Modifier.height(16.dp)) + + BasePromptSettingsScreen( + state = screenState, + providers = allProviders, + description = stringResource(R.string.text_here_you_can_set), + onPromptChanged = { tempPrompt = it }, + onSaveClicked = { settingsViewModel.saveCustomPrompt(tempPrompt) }, + onModelSelected = { apiViewModel.setTranslationModel(it) }, + onExamplePromptClicked = { tempPrompt = it } + ) + } + } + } diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/VocabularyProgressOptionsScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/VocabularyProgressOptionsScreen.kt new file mode 100644 index 0000000..e66baa1 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/VocabularyProgressOptionsScreen.kt @@ -0,0 +1,450 @@ +package eu.gaudian.translator.view.settings + +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppSlider +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.hints.VocabularyProgressHint +import eu.gaudian.translator.viewmodel.SettingsViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlin.math.exp +import kotlin.math.ln +import kotlin.math.roundToInt + +@Composable +fun VocabularyProgressOptionsScreen( + navController: NavController, + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(LocalContext.current.applicationContext as android.app.Application) +) { + val activity = LocalContext.current.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + + + val exportFileLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.StartActivityForResult(), + onResult = { result -> vocabularyViewModel.handleSaveResult(result) } + ) + + LaunchedEffect(exportFileLauncher) { + vocabularyViewModel.initializeSaveFileLauncher(exportFileLauncher) + } + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.vocabulary_settings)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + }, + // Here is the new hint content + hintContent = { VocabularyProgressHint() } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(paddingValues) + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + // Interval Settings + AppCard( + expandable = true, + initiallyExpanded = true, + title = stringResource(R.string.text_interval_settings_in_days), + text = stringResource(R.string.text_customize_the_intervals), + + + + ) { + val intervals by settingsViewModel.intervals.collectAsStateWithLifecycle() + Column( + modifier = Modifier + .padding(16.dp) + .animateContentSize(), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + IntervalTimeline(intervals = intervals) + intervals.forEach { (stageKey, days) -> + val displayLabel = labelForStage(stageKey) + IntervalSlider( + label = displayLabel, + value = days, + onValueChange = { newValue -> + settingsViewModel.setInterval(stageKey, newValue) + } + ) + } + + Spacer(Modifier.height(8.dp)) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.End + ) { + TextButton(onClick = { settingsViewModel.resetIntervalsToDefaults() }) { + Text(stringResource(R.string.reset_to_defaults)) + } + } + } + } + + // Criteria Settings + AppCard { + val criteriaCorrect by settingsViewModel.criteriaCorrect.collectAsStateWithLifecycle() + val criteriaWrong by settingsViewModel.criteriaWrong.collectAsStateWithLifecycle() + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + Text( + text = stringResource(R.string.label_learning_criteria), + style = MaterialTheme.typography.titleMedium + ) + // Slider for "Min correct to advance" + SettingsSlider( + label = stringResource(R.string.min_correct_to_advance), + value = criteriaCorrect, + onValueChange = { settingsViewModel.setCriteriaCorrect(it) }, + valueRange = 1f..5f, + steps = 3 // Allows snapping to 1, 2, 3, 4, 5 + ) + // Slider for "Max wrong to demote" + SettingsSlider( + label = stringResource(R.string.max_wrong_to_demote), + value = criteriaWrong, + onValueChange = { settingsViewModel.setCriteriaWrong(it) }, + valueRange = 1f..5f, + steps = 3 + ) + } + } + + // Daily Goal Settings + AppCard { + val dailyGoal by settingsViewModel.dailyGoal.collectAsStateWithLifecycle() + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text( + text = stringResource(R.string.daily_learning_goal), + style = MaterialTheme.typography.titleMedium + ) + @Suppress("USELESS_ELVIS", "HardCodedStringLiteral") + SettingsSlider( + label = stringResource(R.string.target_correct_answers_per_day), + value = dailyGoal ?: 10, + onValueChange = { settingsViewModel.setDailyGoal(it) }, + valueRange = 10f..100f, + steps = 17 // Allows snapping in steps of 5 + ) + Text( + text = stringResource(R.string.text_daily_goal_description), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } + } +} + +@Composable +private fun SettingsSlider( + label: String, + value: Int, + onValueChange: (Int) -> Unit, + valueRange: ClosedFloatingPointRange, + steps: Int +) { + Column { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = label, + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.weight(1f) + ) + Box( + modifier = Modifier + .background( + MaterialTheme.colorScheme.primaryContainer, + RoundedCornerShape(8.dp) + ) + .padding(horizontal = 12.dp, vertical = 4.dp) + ) { + Text( + text = value.toString(), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onPrimaryContainer, + fontWeight = FontWeight.Bold + ) + } + } + Spacer(Modifier.height(4.dp)) + AppSlider( + value = value.toFloat(), + onValueChange = { onValueChange(it.roundToInt()) }, + valueRange = valueRange, + steps = steps + ) + } +} + +@Composable +private fun IntervalTimeline(intervals: Map) { + val totalDays = intervals.values.sum() + val stageColors = listOf( + MaterialTheme.colorScheme.primary, + MaterialTheme.colorScheme.secondary, + MaterialTheme.colorScheme.tertiary, + Color(0xFF3F51B5), // Indigo + Color(0xFF009688), // Teal + Color(0xFFE91E63), // Pink + Color(0xFFFF9800) // Orange for the 'Learned' stage + ) + + // Main layout for the timeline and its labels + Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { + // Build the string showing the sum of all stage days + val calculationString = intervals.values + .filter { it > 0 } // Exclude stages with 0 days from the text + .joinToString(" + ") + + val fullText = if (calculationString.isNotEmpty()) { + // Using a simple "days" string, adjust if you have a specific resource + buildString { + append(calculationString) + append(" = ") + append(totalDays) + append(stringResource(R.string.text_days)) + } + } else { + buildString { + append(totalDays) + append(stringResource(R.string.text_days)) + } + } + + // Display the full calculation string centered above the bar + Text( + text = fullText, + modifier = Modifier.fillMaxWidth(), + textAlign = TextAlign.Center, + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.Bold + ) + + // The timeline bar + Row( + modifier = Modifier + .fillMaxWidth() + .height(20.dp) + .clip(CircleShape) + .background(MaterialTheme.colorScheme.surfaceContainerHighest) + ) { + intervals.onEachIndexed { index, (_, days) -> + val weight = if (totalDays > 0) days.toFloat() / totalDays.toFloat() else 0f + if (weight > 0) { + Box( + modifier = Modifier + .fillMaxHeight() + .weight(weight) + .background(stageColors.getOrElse(index) { Color.Gray }) + ) + } + } + } + + // Spacer before the legend + Spacer(modifier = Modifier.height(4.dp)) + + // The legend using a FlowRow to ensure all items are visible + FlowRow( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(16.dp, Alignment.CenterHorizontally), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + intervals.keys.forEachIndexed { index, stageKey -> + LegendItem( + color = stageColors.getOrElse(index) { Color.Gray }, + icon = getIconForStage(stageKey), + stageName = labelForStage(stageKey) + ) + } + } + } +} + +@Composable +private fun getIconForStage(stageKey: String): ImageVector { + return when (stageKey) { + SettingsViewModel.STAGE_NEW -> AppIcons.StageNew + SettingsViewModel.STAGE_1 -> AppIcons.Stage1 + SettingsViewModel.STAGE_2 -> AppIcons.Stage2 + SettingsViewModel.STAGE_3 -> AppIcons.Stage3 + SettingsViewModel.STAGE_4 -> AppIcons.Stage4 + SettingsViewModel.STAGE_5 -> AppIcons.Stage5 + SettingsViewModel.STAGE_LEARNED -> AppIcons.StageLearned + else -> AppIcons.Error + } +} + +@Composable +private fun labelForStage(stageKey: String): String { + return when (stageKey) { + SettingsViewModel.STAGE_NEW -> stringResource(R.string.stage_new) + SettingsViewModel.STAGE_1 -> stringResource(R.string.stage_1) + SettingsViewModel.STAGE_2 -> stringResource(R.string.stage_2) + SettingsViewModel.STAGE_3 -> stringResource(R.string.stage_3) + SettingsViewModel.STAGE_4 -> stringResource(R.string.stage_4) + SettingsViewModel.STAGE_5 -> stringResource(R.string.stage_5) + SettingsViewModel.STAGE_LEARNED -> stringResource(R.string.stage_learned) + else -> stageKey + } +} + +@Composable +private fun IntervalSlider( + label: String, + value: Int, + onValueChange: (Int) -> Unit +) { + // Constants for the logarithmic scale + val minVal = 1f + val maxVal = 180f + + fun valueToPos(v: Int): Float { + val vv = v.toFloat().coerceAtLeast(minVal) + return (ln(vv) - ln(minVal)) / (ln(maxVal) - ln(minVal)) + } + fun posToValue(p: Float): Int { + val logValue = ln(minVal) + (ln(maxVal) - ln(minVal)) * p + return exp(logValue).roundToInt().coerceIn(minVal.toInt(), maxVal.toInt()) + } + + // Local slider position state to avoid jitter when ViewModel updates on every tick + val initialPos = valueToPos(value) + val localPosState = androidx.compose.runtime.remember(value) { androidx.compose.runtime.mutableFloatStateOf(initialPos) } + + val displayValue = posToValue(localPosState.floatValue) + + Column { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = label, + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.SemiBold + ) + Box( + modifier = Modifier + .background( + MaterialTheme.colorScheme.primaryContainer, + RoundedCornerShape(8.dp) + ) + .padding(horizontal = 12.dp, vertical = 4.dp) + ) { + Text( + text = stringResource(R.string.days_2d, displayValue), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onPrimaryContainer, + fontWeight = FontWeight.Bold + ) + } + } + Spacer(Modifier.height(4.dp)) + AppSlider( + value = localPosState.floatValue, + onValueChange = { newSliderPosition -> + localPosState.floatValue = newSliderPosition + }, + valueRange = 0f..1f, + onValueChangeFinished = { + // Commit only when the user releases the thumb + onValueChange(posToValue(localPosState.floatValue)) + } + ) + } +} + +@Composable +private fun LegendItem(color: Color, icon: ImageVector, stageName: String) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(4.dp) + ) { + Box( + modifier = Modifier + .size(10.dp) + .background(color, CircleShape) + ) + Icon( + imageVector = icon, + contentDescription = stageName, + modifier = Modifier.size(24.dp), + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + } +} + +@ThemePreviews +@Composable +fun VocabularyOptionsScreenPreview() { + VocabularyProgressOptionsScreen(navController = NavController(LocalContext.current)) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/settings/VocabularyRepositoryOptionsScreen.kt b/app/src/main/java/eu/gaudian/translator/view/settings/VocabularyRepositoryOptionsScreen.kt new file mode 100644 index 0000000..e499bc5 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/settings/VocabularyRepositoryOptionsScreen.kt @@ -0,0 +1,433 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.settings + +import android.app.Application +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Checkbox +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedButton +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.PrimaryButton +import eu.gaudian.translator.view.composable.SecondaryButton +import eu.gaudian.translator.view.composable.SingleLanguageDropDown +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.StatusViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import okhttp3.internal.platform.PlatformRegistry.applicationContext + +@Composable +fun VocabularyRepositoryOptionsScreen( + navController: NavController, + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as Application), + statusViewModel: StatusViewModel = StatusViewModel.getInstance(applicationContext as Application) +) { + + val context = LocalContext.current + val repositoryStateImportedFrom = stringResource(R.string.repository_state_imported_from) + + val importFileLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.OpenDocument(), + onResult = { uri -> + uri?.let { + context.contentResolver.openInputStream(it)?.use { inputStream -> + val jsonString = inputStream.bufferedReader().use { reader -> reader.readText() } + vocabularyViewModel.importVocabulary(jsonString) + statusViewModel.showInfoMessage(repositoryStateImportedFrom + " " +it.path) + } + } + } + ) + + // CSV/Excel import state + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val showTableImportDialog = remember { mutableStateOf(false) } + var parsedTable by remember { mutableStateOf>>(emptyList()) } + var selectedColFirst by remember { mutableIntStateOf(0) } + var selectedColSecond by remember { mutableIntStateOf(1) } + var skipHeader by remember { mutableStateOf(true) } + var selectedLangFirst by remember { mutableStateOf(null) } + var selectedLangSecond by remember { mutableStateOf(null) } + var parseError by remember { mutableStateOf(null) } + + fun parseCsv(text: String): List> { + if (text.isBlank()) return emptyList() + // Detect delimiter by highest occurrence among comma, semicolon, tab + val candidates = listOf(',', ';', '\t') + val sampleLine = text.lineSequence().firstOrNull { it.isNotBlank() } ?: return emptyList() + val delimiter = candidates.maxBy { c -> sampleLine.count { it == c } } + + val rows = mutableListOf>() + var current = StringBuilder() + var inQuotes = false + val currentRow = mutableListOf() + + var i = 0 + while (i < text.length) { + when (val ch = text[i]) { + '"' -> { + if (inQuotes && i + 1 < text.length && text[i + 1] == '"') { + current.append('"') + i++ // skip escaped quote + } else { + inQuotes = !inQuotes + } + } + '\r' -> { /* ignore, handle on \n */ } + '\n' -> { + // end of line + val field = current.toString() + current = StringBuilder() + currentRow.add(if (inQuotes) field else field) + rows.add(currentRow.toList()) + currentRow.clear() + inQuotes = false + } + else -> { + if (ch == delimiter && !inQuotes) { + val field = current.toString() + currentRow.add(field) + current = StringBuilder() + } else { + current.append(ch) + } + } + } + i++ + } + // flush last field/row if any + if (current.isNotEmpty() || currentRow.isNotEmpty()) { + currentRow.add(current.toString()) + rows.add(currentRow.toList()) + } + // Normalize: trim and drop trailing empty columns + return rows.map { row -> + row.map { it.trim().trim('"') } + }.filter { r -> r.any { it.isNotBlank() } } + } + val textExcelNotSupportedUseCsv = stringResource(R.string.text_excel_not_supported_use_csv) + val errorParsingTable = stringResource(R.string.error_parsing_table) + val errorParsingTableWithReason = stringResource(R.string.error_parsing_table_with_reason) + val importTableLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.OpenDocument(), + onResult = { uri -> + uri?.let { u -> + try { + context.contentResolver.takePersistableUriPermission(u, android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION) + } catch (_: Exception) {} + try { + val mime = context.contentResolver.getType(u) + val isExcel = mime == "application/vnd.ms-excel" || mime == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + if (isExcel) { + statusViewModel.showInfoMessage(textExcelNotSupportedUseCsv) + return@let + } + context.contentResolver.openInputStream(u)?.use { inputStream -> + val text = inputStream.bufferedReader().use { it.readText() } + val rows = parseCsv(text) + if (rows.isNotEmpty() && rows.maxOf { it.size } >= 2) { + parsedTable = rows + selectedColFirst = 0 + selectedColSecond = 1.coerceAtMost(rows.first().size - 1) + showTableImportDialog.value = true + parseError = null + } else { + parseError = errorParsingTable + statusViewModel.showErrorMessage(parseError!!) + } + } + } catch (e: Exception) { + parseError = e.message + statusViewModel.showErrorMessage( + (errorParsingTableWithReason + " " + e.message) + ) + } + } + } + ) + + val exportFileLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.StartActivityForResult(), + onResult = { result -> vocabularyViewModel.handleSaveResult(result) } + ) + + LaunchedEffect(exportFileLauncher) { + vocabularyViewModel.initializeSaveFileLauncher(exportFileLauncher) + } + + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.vocabulary_repository)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + } + ) + } + ) { paddingValues -> + LazyColumn( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + item { + // Backup and Restore Section + AppCard { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + Text( + text = stringResource(R.string.label_backup_and_restore), + style = MaterialTheme.typography.titleMedium + ) + PrimaryButton( + onClick = { vocabularyViewModel.saveRepositoryState() }, + text = stringResource(R.string.export_vocabulary_data), + modifier = Modifier.fillMaxWidth() + ) + SecondaryButton( + onClick = { importFileLauncher.launch(arrayOf("application/json")) }, + text = stringResource(R.string.import_vocabulary_data), + modifier = Modifier.fillMaxWidth() + ) + SecondaryButton( + onClick = { + // Allow CSV and Excel mime types, but we only support CSV parsing in-app + @Suppress("HardCodedStringLiteral") + importTableLauncher.launch( + arrayOf( + "text/csv", + "text/comma-separated-values", + "text/tab-separated-values", + "text/plain", + "application/vnd.ms-excel", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + ) + ) + }, + text = stringResource(R.string.label_import_table_csv_excel), + modifier = Modifier.fillMaxWidth() + ) + } + } + } + item { + AppCard { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + Text( + text = stringResource(R.string.danger_zone), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.error + ) + + val showConfirm = androidx.compose.runtime.remember { mutableStateOf(false) } + + AppButton( + onClick = { showConfirm.value = true }, + modifier = Modifier.fillMaxWidth(), + colors = ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.error, + contentColor = MaterialTheme.colorScheme.onError + ) + ) { + Text(stringResource(R.string.wipe_repository_delete_all_data)) + } + + if (showConfirm.value) { + AlertDialog( + onDismissRequest = { showConfirm.value = false }, + title = { Text(stringResource(R.string.label_warning)) }, + text = { Text(stringResource(R.string.wipe_repository_delete_all_data)) }, + confirmButton = { + TextButton(onClick = { + showConfirm.value = false + vocabularyViewModel.wipeRepository() + }, + colors = ButtonDefaults.textButtonColors( + contentColor = MaterialTheme.colorScheme.error + )) { + Text(stringResource(R.string.label_confirm)) + } + }, + dismissButton = { + TextButton(onClick = { showConfirm.value = false }) { + Text(stringResource(R.string.label_cancel)) + } + } + ) + } + } + } + } + } + + + if (showTableImportDialog.value) { + AlertDialog( + onDismissRequest = { showTableImportDialog.value = false }, + title = { Text(stringResource(R.string.label_import_table_csv_excel)) }, + text = { + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + val columnCount = parsedTable.maxOfOrNull { it.size } ?: 0 + // Column selectors + Row(verticalAlignment = Alignment.CenterVertically) { + Text(stringResource(R.string.label_first_column), modifier = Modifier.weight(1f)) + var menu1Expanded by remember { mutableStateOf(false) } + AppOutlinedButton(onClick = { menu1Expanded = true }) { Text(stringResource(R.string.label_column_n, selectedColFirst + 1)) } + DropdownMenu(expanded = menu1Expanded, onDismissRequest = { menu1Expanded = false }) { + (0 until columnCount).forEach { idx -> + val header = parsedTable.firstOrNull()?.getOrNull(idx).orEmpty() + DropdownMenuItem( + text = { Text("#${idx + 1} • $header") }, + onClick = { selectedColFirst = idx; menu1Expanded = false } + ) + } + } + } + Row(verticalAlignment = Alignment.CenterVertically) { + Text(stringResource(R.string.label_second_column), modifier = Modifier.weight(1f)) + var menu2Expanded by remember { mutableStateOf(false) } + AppOutlinedButton(onClick = { menu2Expanded = true }) { Text(stringResource(R.string.label_column_n, selectedColSecond + 1)) } + DropdownMenu(expanded = menu2Expanded, onDismissRequest = { menu2Expanded = false }) { + (0 until columnCount).forEach { idx -> + val header = parsedTable.firstOrNull()?.getOrNull(idx).orEmpty() + DropdownMenuItem( + text = { Text("#${idx + 1} • $header") }, + onClick = { selectedColSecond = idx; menu2Expanded = false } + ) + } + } + } + // Language selectors + Text(stringResource(R.string.label_languages)) + Row(horizontalArrangement = Arrangement.spacedBy(8.dp), verticalAlignment = Alignment.CenterVertically) { + Column(modifier = Modifier.weight(1f)) { + Text(stringResource(R.string.label_first_language)) + SingleLanguageDropDown( + languageViewModel = languageViewModel, + selectedLanguage = selectedLangFirst, + onLanguageSelected = { selectedLangFirst = it } + ) + } + Column(modifier = Modifier.weight(1f)) { + Text(stringResource(R.string.label_second_language)) + SingleLanguageDropDown( + languageViewModel = languageViewModel, + selectedLanguage = selectedLangSecond, + onLanguageSelected = { selectedLangSecond = it } + ) + } + } + // Header toggle + Row(verticalAlignment = Alignment.CenterVertically) { + Checkbox(checked = skipHeader, onCheckedChange = { skipHeader = it }) + Spacer(modifier = Modifier.width(4.dp)) + Text(stringResource(R.string.label_header_row)) + } + // Previews + val startIdx = if (skipHeader) 1 else 0 + val previewA = parsedTable.drop(startIdx).take(5).mapNotNull { it.getOrNull(selectedColFirst) }.joinToString(", ") + val previewB = parsedTable.drop(startIdx).take(5).mapNotNull { it.getOrNull(selectedColSecond) }.joinToString(", ") + Text(stringResource(R.string.label_preview_first, previewA)) + Text(stringResource(R.string.label_preview_second, previewB)) + val totalRows = parsedTable.drop(startIdx).count { row -> + val a = row.getOrNull(selectedColFirst).orEmpty().isNotBlank() + val b = row.getOrNull(selectedColSecond).orEmpty().isNotBlank() + a || b + } + Text(stringResource(R.string.text_rows_to_import_1d, totalRows)) + } + }, + confirmButton = { + val errorSelectTwoColumns = stringResource(R.string.error_select_two_columns) + val errorSelectLanguages = stringResource(R.string.error_select_languages) + val errorNoRowsToImport = stringResource(R.string.error_no_rows_to_import) + val infoImportedItemsFrom = stringResource(R.string.info_imported_items_from) + TextButton(onClick = { + if (selectedColFirst == selectedColSecond) { + statusViewModel.showErrorMessage(errorSelectTwoColumns) + return@TextButton + } + val langA = selectedLangFirst + val langB = selectedLangSecond + if (langA == null || langB == null) { + statusViewModel.showErrorMessage(errorSelectLanguages) + return@TextButton + } + val startIdx = if (skipHeader) 1 else 0 + val items = parsedTable.drop(startIdx).mapNotNull { row -> + val a = row.getOrNull(selectedColFirst)?.trim().orEmpty() + val b = row.getOrNull(selectedColSecond)?.trim().orEmpty() + if (a.isBlank() && b.isBlank()) null else eu.gaudian.translator.model.VocabularyItem( + id = 0, + languageFirstId = langA.nameResId, + languageSecondId = langB.nameResId, + wordFirst = a, + wordSecond = b + ) + } + if (items.isEmpty()) { + statusViewModel.showErrorMessage(errorNoRowsToImport) + return@TextButton + } + vocabularyViewModel.addVocabularyItems(items) + statusViewModel.showSuccessMessage(infoImportedItemsFrom + " " +items.size) + showTableImportDialog.value = false + }) { Text(stringResource(R.string.label_import)) } + }, + dismissButton = { + TextButton(onClick = { showTableImportDialog.value = false }) { Text(stringResource(R.string.label_cancel)) } + } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/translation/InputCard.kt b/app/src/main/java/eu/gaudian/translator/view/translation/InputCard.kt new file mode 100644 index 0000000..c3ddfcb --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/translation/InputCard.kt @@ -0,0 +1,201 @@ +@file:Suppress("HardCodedStringLiteral") +package eu.gaudian.translator.view.translation + +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.material3.TextFieldDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons + +@Composable +fun InputCard( + modifier: Modifier = Modifier, + text: String, + isTranslating: Boolean, + onTextChange: (String) -> Unit, + onPasteClick: () -> Unit, + onClearClick: () -> Unit, + onTranslateClick: () -> Unit, + onHistoryClick: () -> Unit, + showBackButton: Boolean, + showForwardButton: Boolean, + onBackClick: () -> Unit, + onForwardClick: () -> Unit +) { + val showClearButton = text.isNotEmpty() + + AppCard( + modifier = modifier + .fillMaxWidth().padding(0.dp) + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .fillMaxHeight() + .verticalScroll(rememberScrollState()) + ) { + OutlinedTextField( + value = text, + onValueChange = onTextChange, + textStyle = MaterialTheme.typography.titleLarge.copy(color = MaterialTheme.colorScheme.onSurfaceVariant), + placeholder = { + Text( + stringResource(R.string.text_enter_text_to_translate), + style = MaterialTheme.typography.titleLarge, + ) + }, + modifier = Modifier + .weight(1f) + .fillMaxWidth().padding(top = 0.dp), + colors = TextFieldDefaults.colors( + focusedContainerColor = Color.Transparent, unfocusedContainerColor = Color.Transparent, + disabledContainerColor = Color.Transparent, + cursorColor = MaterialTheme.colorScheme.primary, + focusedIndicatorColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent, + disabledIndicatorColor = Color.Transparent + ), + ) + Row( + modifier = Modifier + .fillMaxWidth() + .padding(0.dp), + horizontalArrangement = Arrangement.Start, + verticalAlignment = Alignment.CenterVertically + ) { + + Row( + modifier = Modifier + .weight(1f) + .horizontalScroll(rememberScrollState()), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Start + ) { + ActionBar( + contentHorizontalArrangement = Arrangement.Start, + modifier = Modifier.padding(0.dp) + ) { + if (showClearButton) { + IconButton(onClick = onClearClick) { + Icon( + imageVector = AppIcons.Clear, + contentDescription = stringResource(R.string.cd_clear_text), + tint = MaterialTheme.colorScheme.primary + ) + } + } + if (!showClearButton) { + IconButton(onClick = onPasteClick) { + Icon( + imageVector = AppIcons.Paste, + contentDescription = stringResource(R.string.cd_paste), + tint = MaterialTheme.colorScheme.primary + ) + } + } + } + + Spacer(modifier = Modifier.width(4.dp)) + + ExpandableActionBar(modifier = Modifier.padding(0.dp)) { + IconButton(onClick = onHistoryClick) { + Icon( + imageVector = AppIcons.History, + contentDescription = stringResource(R.string.cd_translation_history), + tint = MaterialTheme.colorScheme.primary + ) + } + IconButton(onClick = onBackClick, enabled = showBackButton) { + Icon( + imageVector = AppIcons.Undo, + contentDescription = "Back", + tint = if (showBackButton) MaterialTheme.colorScheme.primary else Color.Gray + ) + } + IconButton(onClick = onForwardClick, enabled = showForwardButton) { + Icon( + imageVector = AppIcons.Redo, + contentDescription = "Forward", + tint = if (showForwardButton) MaterialTheme.colorScheme.primary else Color.Gray + ) + } + } + } + + // SAFETY SPACER: Ensures the menu never touches the FAB + Spacer(Modifier.width(8.dp)) + + // Primary Translate FAB stays prominent and anchored + FloatingActionButton( + onClick = { if (!isTranslating) onTranslateClick() }, + modifier = Modifier.size(56.dp), + shape = RoundedCornerShape(16.dp), + containerColor = MaterialTheme.colorScheme.primary, + contentColor = MaterialTheme.colorScheme.onPrimary + ) { + if (isTranslating) { + CircularProgressIndicator( + modifier = Modifier.size(24.dp), + color = MaterialTheme.colorScheme.onPrimary, + strokeWidth = 2.dp + ) + } else { + Icon( + AppIcons.Translate, + contentDescription = stringResource(R.string.label_translate) + ) + } + } + } + } + } +} + +@Preview +@Composable +fun InputCardPreview() { + var text by remember { mutableStateOf("") } + InputCard( + text = text, + isTranslating = false, + onTextChange = { }, + onPasteClick = { }, + onClearClick = { }, + onTranslateClick = { }, + onHistoryClick = { }, + showBackButton = true, + showForwardButton = false, + onBackClick = { }, + onForwardClick = { } + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/translation/LanguageSelectorBar.kt b/app/src/main/java/eu/gaudian/translator/view/translation/LanguageSelectorBar.kt new file mode 100644 index 0000000..4086ab8 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/translation/LanguageSelectorBar.kt @@ -0,0 +1,178 @@ +package eu.gaudian.translator.view.translation + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween +import androidx.compose.animation.expandHorizontally +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.shrinkHorizontally +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentWidth +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.SourceLanguageDropdown +import eu.gaudian.translator.view.composable.TargetLanguageDropdown +import eu.gaudian.translator.view.hints.WithHint +import eu.gaudian.translator.viewmodel.LanguageViewModel + +/** + * A shared composable for a modern, pill-shaped action bar. + */ +@Composable +fun ActionBar( + modifier: Modifier = Modifier, + containerColor: Color = MaterialTheme.colorScheme.surfaceVariant, + contentHorizontalArrangement: Arrangement.Horizontal = Arrangement.SpaceEvenly, + content: @Composable RowScope.() -> Unit +) { + Surface( + // FIXED: Enforce standard height (48.dp) to align with ExpandableActionBar + modifier = modifier.height(48.dp), + shape = RoundedCornerShape(percent = 50), + color = containerColor, + tonalElevation = 2.dp + ) { + Row( + modifier = Modifier.padding(horizontal = 0.dp), //0 here is okay since every icon has enpough padding + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = contentHorizontalArrangement, + content = content + ) + } +} + +@Composable +fun TopBarActions(languageViewModel: LanguageViewModel, onSettingsClick: () -> Unit, hintContent: (@Composable () -> Unit)? = null) { + + ActionBar(modifier = Modifier.padding(horizontal = 8.dp, vertical = 8.dp)) { + if (hintContent != null) { + WithHint(hintContent = hintContent) { + } + } + + LanguageSelectorBar( + languageViewModel = languageViewModel, + modifier = Modifier.weight(1f) + ) + + IconButton(onClick = onSettingsClick) { + Icon(imageVector = AppIcons.Settings, contentDescription = stringResource(R.string.translation_prompt_settings)) + } + } +} + +@Composable +fun LanguageSelectorBar(languageViewModel: LanguageViewModel, modifier: Modifier = Modifier) { + var isSwapped by remember { mutableStateOf(false) } + @Suppress("HardCodedStringLiteral") val rotationAngle by animateFloatAsState( + targetValue = if (isSwapped) 180f else 0f, + animationSpec = tween(durationMillis = 300), + label = "rotation" + ) + + Row( + modifier = modifier, + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceEvenly + ) { + Box(modifier = Modifier.weight(1f)) { + SourceLanguageDropdown(languageViewModel = languageViewModel, autoEnabled = true, iconEnabled = false, noBorder = true) + } + + IconButton(onClick = { + isSwapped = !isSwapped + languageViewModel.switchLanguages() + }) { + Icon( + imageVector = AppIcons.SwapHoriz, + contentDescription = stringResource(R.string.cd_switch_languages), + modifier = Modifier.rotate(rotationAngle) + ) + } + + Box(modifier = Modifier.weight(1f)) { + TargetLanguageDropdown(languageViewModel = languageViewModel, iconEnabled = false,noBorder = true) + } + } +} + +/** + * A modern, expandable action bar that shows a single button when collapsed + * and reveals a row of actions when expanded. + */ +@Composable +fun ExpandableActionBar( + modifier: Modifier = Modifier, + expandIcon: ImageVector = AppIcons.ArrowRight, + content: @Composable RowScope.() -> Unit +) { + var isExpanded by remember { mutableStateOf(false) } + + Surface( + // FIXED: Enforce standard height (48.dp) + modifier = modifier.wrapContentWidth().height(48.dp), + shape = RoundedCornerShape(percent = 50), + color = MaterialTheme.colorScheme.surfaceVariant, + tonalElevation = 2.dp + ) { + + Row( + modifier = Modifier + .animateContentSize(animationSpec = tween(50, easing = FastOutSlowInEasing)) + .padding(horizontal = 0.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Start + ) { + + IconButton( + onClick = { isExpanded = !isExpanded }, + // FIXED: Default size matches other buttons + ) { + val rotation by animateFloatAsState(targetValue = if (isExpanded) 180f else 0f) + Icon( + imageVector = expandIcon, + contentDescription = stringResource(R.string.label_show_more_actions), + modifier = Modifier.rotate(rotation), + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + + AnimatedVisibility( + visible = isExpanded, + enter = expandHorizontally(expandFrom = Alignment.Start) + fadeIn(), + exit = shrinkHorizontally(shrinkTowards = Alignment.Start) + fadeOut() + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(0.dp), + content = content + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/translation/MainTranslationScreen.kt b/app/src/main/java/eu/gaudian/translator/view/translation/MainTranslationScreen.kt new file mode 100644 index 0000000..5c45ae6 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/translation/MainTranslationScreen.kt @@ -0,0 +1,401 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.translation + +import android.app.Application +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import android.content.Intent +import androidx.compose.animation.Crossfade +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.RepeatMode +import androidx.compose.animation.core.animateFloat +import androidx.compose.animation.core.infiniteRepeatable +import androidx.compose.animation.core.rememberInfiniteTransition +import androidx.compose.animation.core.tween +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.VerticalDivider +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalClipboard +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.LocalLifecycleOwner +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavHostController +import eu.gaudian.translator.R +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.TextToSpeechHelper +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.LocalConnectionConfigured +import eu.gaudian.translator.view.NoConnectionScreen +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppOutlinedCard +import eu.gaudian.translator.view.dialogs.AddVocabularyDialog +import eu.gaudian.translator.view.hints.TranslationScreenHint +import eu.gaudian.translator.view.settings.SettingsRoutes +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.SettingsViewModel +import eu.gaudian.translator.viewmodel.StatusViewModel +import eu.gaudian.translator.viewmodel.TranslationViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.coroutines.launch + +@Composable +fun TranslationScreen( + translationViewModel: TranslationViewModel, + languageViewModel: LanguageViewModel, + statusViewModel: StatusViewModel, + onHistoryClick: () -> Unit, + onSettingsClick: () -> Unit, + navController: NavHostController +) { + val context = LocalContext.current + val activity = LocalContext.current.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + + val vocabularyViewModel = remember(context) { + VocabularyViewModel.getInstance(context.applicationContext as Application) + } + + + val isInitializationComplete by settingsViewModel.isInitialized.collectAsStateWithLifecycle( + initialValue = true, + lifecycleOwner = LocalLifecycleOwner.current + ) + + val connectionConfigured = LocalConnectionConfigured.current + + + if (isInitializationComplete && !connectionConfigured) { + NoConnectionScreen(onSettingsClick = { navController.navigate(SettingsRoutes.API_KEY) }) + return + } + + val isUiReady = isInitializationComplete + + @Suppress("HardCodedStringLiteral") + Crossfade(targetState = isUiReady, label = "loading_transition") { ready -> + if (!ready) { + TranslationScreenSkeleton() + } else { + // Real Content + LoadedTranslationContent( + translationViewModel = translationViewModel, + languageViewModel = languageViewModel, + statusViewModel = statusViewModel, + settingsViewModel = settingsViewModel, + vocabularyViewModel = vocabularyViewModel, + onHistoryClick = onHistoryClick, + onSettingsClick = onSettingsClick, + context = context + ) + } + } +} + +@Composable +private fun LoadedTranslationContent( + translationViewModel: TranslationViewModel, + languageViewModel: LanguageViewModel, + statusViewModel: StatusViewModel, + settingsViewModel: SettingsViewModel, + vocabularyViewModel: VocabularyViewModel, + onHistoryClick: () -> Unit, + onSettingsClick: () -> Unit, + context: Context +) { + val inputText by translationViewModel.inputText.collectAsState() + val translatedText by translationViewModel.translatedText.collectAsState() + val targetLanguage by languageViewModel.selectedTargetLanguage.collectAsState() + val isTranslating by translationViewModel.isTranslating.collectAsState() + val isExplanationOn by translationViewModel.showExplanation.collectAsState() + val explanationText by translationViewModel.explanationText.collectAsState() + val canGoBack by translationViewModel.canGoBack.collectAsState() + val canGoForward by translationViewModel.canGoForward.collectAsState() + + // Defer history logic + val translationHistory by translationViewModel.translationHistory.collectAsState() + val historyCursor by translationViewModel.historyCursor.collectAsState() + + val clipboard = LocalClipboard.current + val coroutineScope = rememberCoroutineScope() + var isPlayable by remember { mutableStateOf(false) } + var showAddVocabularyDialog by remember { mutableStateOf(false) } + + val currentHistoryItem = remember(historyCursor, translationHistory) { + if (historyCursor >= 0 && historyCursor < translationHistory.size) { + translationHistory[historyCursor] + } else { + null + } + } + val translationSource = currentHistoryItem?.translationSource + val translationModel = currentHistoryItem?.translationModel + + if (showAddVocabularyDialog) { + AddVocabularyDialog( + statusViewModel = statusViewModel, + languageViewModel = languageViewModel, + vocabularyViewModel = vocabularyViewModel, + initialWord = inputText, + translation = translatedText, + onDismissRequest = { showAddVocabularyDialog = false }, + showMultiple = false + ) + } + + AppOutlinedCard { + Column( + modifier = Modifier + .fillMaxSize() + .padding(0.dp) + ) { + TopBarActions( + languageViewModel = languageViewModel, + onSettingsClick = onSettingsClick, + hintContent = { TranslationScreenHint() } + ) + + AppCard(modifier = Modifier.padding(8.dp, end = 8.dp, bottom = 8.dp, top = 0.dp)) { + val configuration = LocalConfiguration.current + val isLandscape = configuration.orientation == android.content.res.Configuration.ORIENTATION_LANDSCAPE + + if (isLandscape) { + Row(modifier = Modifier.fillMaxSize()) { + InputCard( + modifier = Modifier.weight(1f), + text = inputText, + onTextChange = { translationViewModel.setInputText(it) }, + onClearClick = { translationViewModel.clearInputAndOutputText() }, + onPasteClick = { + coroutineScope.launch { + val clipEntry = clipboard.getClipEntry() + val text = clipEntry?.clipData?.getItemAt(0)?.coerceToText(context)?.toString() + if (!text.isNullOrEmpty()) translationViewModel.setInputText(text) + } + }, + onTranslateClick = { if (inputText.isNotBlank()) translationViewModel.translateSentence(inputText) }, + isTranslating = isTranslating, + onHistoryClick = onHistoryClick, + showBackButton = canGoBack, + showForwardButton = canGoForward, + onBackClick = { translationViewModel.goBackInHistory() }, + onForwardClick = { translationViewModel.goForwardInHistory() } + ) + + VerticalDivider( + modifier = Modifier.padding(vertical = 4.dp), + color = MaterialTheme.colorScheme.outline.copy(alpha = 0.3f) + ) + + OutputCard( + modifier = Modifier.weight(1f), + text = translatedText ?: "", + explanationText = explanationText, + isExplanationOn = isExplanationOn, + translationSource = translationSource, + translationModel = translationModel, + onCopyClick = { translatedText?.let { context.copyToClipboard(it) } }, + onPlayClick = { + translatedText?.let { text -> + targetLanguage?.let { lang -> + coroutineScope.launch { + val voice = settingsViewModel.getTtsVoiceForLanguage(lang.code, lang.region) + TextToSpeechHelper.speakOut(context, text, lang, voice) + } + } + } + }, + isPlayEnabled = isPlayable, + onShareClick = { translatedText?.let { shareText(context, it) } }, + onAddToDictionaryClick = { if (!translatedText.isNullOrBlank()) showAddVocabularyDialog = true }, + onExplanationToggle = { translationViewModel.toggleExplanation() }, + onRequestAlternatives = { word, cb -> + coroutineScope.launch { + val ctx = translatedText ?: "" + cb(translationViewModel.getMultipleTranslations(word, ctx.ifBlank { null })) + } + }, + onApplyAlternative = { original, chosen -> translationViewModel.applyAlternative(original, chosen) } + ) + } + } else { + InputCard( + modifier = Modifier.weight(1f), + text = inputText, + onTextChange = { translationViewModel.setInputText(it) }, + onClearClick = { translationViewModel.clearInputAndOutputText() }, + onPasteClick = { + coroutineScope.launch { + val clipEntry = clipboard.getClipEntry() + val text = clipEntry?.clipData?.getItemAt(0)?.coerceToText(context)?.toString() + if (!text.isNullOrEmpty()) translationViewModel.setInputText(text) + } + }, + onTranslateClick = { if (inputText.isNotBlank()) translationViewModel.translateSentence(inputText) }, + isTranslating = isTranslating, + onHistoryClick = onHistoryClick, + showBackButton = canGoBack, + showForwardButton = canGoForward, + onBackClick = { translationViewModel.goBackInHistory() }, + onForwardClick = { translationViewModel.goForwardInHistory() } + ) + + HorizontalDivider( + modifier = Modifier.padding(horizontal = 4.dp), + color = MaterialTheme.colorScheme.outline.copy(alpha = 0.3f) + ) + + OutputCard( + modifier = Modifier.weight(1f), + text = translatedText ?: "", + explanationText = explanationText, + isExplanationOn = isExplanationOn, + translationSource = translationSource, + translationModel = translationModel, + onCopyClick = { translatedText?.let { context.copyToClipboard(it) } }, + onPlayClick = { + translatedText?.let { text -> + targetLanguage?.let { lang -> + coroutineScope.launch { + val voice = settingsViewModel.getTtsVoiceForLanguage(lang.code, lang.region) + TextToSpeechHelper.speakOut(context, text, lang, voice) + } + } + } + }, + isPlayEnabled = isPlayable, + onShareClick = { translatedText?.let { shareText(context, it) } }, + onAddToDictionaryClick = { if (!translatedText.isNullOrBlank()) showAddVocabularyDialog = true }, + onExplanationToggle = { translationViewModel.toggleExplanation() }, + onRequestAlternatives = { word, cb -> + coroutineScope.launch { + val ctx = translatedText ?: "" + cb(translationViewModel.getMultipleTranslations(word, ctx.ifBlank { null })) + } + }, + onApplyAlternative = { original, chosen -> translationViewModel.applyAlternative(original, chosen) } + ) + } + } + } + } + + LaunchedEffect(targetLanguage) { + isPlayable = TextToSpeechHelper.isPlayable(context, targetLanguage) + } +} +@Suppress("HardCodedStringLiteral") +@Composable +fun TranslationScreenSkeleton() { + Log.d("TranslationScreenSkeleton", "Skeleton started") + + val infiniteTransition = rememberInfiniteTransition(label = "shimmer") + val alpha by infiniteTransition.animateFloat( + initialValue = 0.3f, + targetValue = 0.6f, + animationSpec = infiniteRepeatable( + animation = tween(1000, easing = FastOutSlowInEasing), + repeatMode = RepeatMode.Reverse + ), + label = "alpha" + ) + + AppOutlinedCard { + Column(modifier = Modifier.fillMaxSize()) { + // Header Skeleton + AppCard(Modifier.padding(horizontal = 8.dp, vertical = 8.dp)) { + Row( + modifier = Modifier.fillMaxWidth().height(48.dp).padding(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Box(Modifier.weight(1f).fillMaxHeight().clip(RoundedCornerShape(8.dp)).background(Color.Gray.copy(alpha = alpha))) + Spacer(Modifier.width(8.dp)) + Box(Modifier.size(24.dp).clip(CircleShape).background(Color.Gray.copy(alpha = alpha))) + Spacer(Modifier.width(8.dp)) + Box(Modifier.size(24.dp).clip(CircleShape).background(Color.Gray.copy(alpha = alpha))) + } + } + + // Body Skeleton + AppCard(modifier = Modifier.padding(8.dp, end = 8.dp, bottom = 8.dp, top = 0.dp)) { + Column(Modifier.fillMaxSize()) { + // Input Area + Box( + Modifier + .weight(1f) + .fillMaxWidth() + .padding(16.dp) + .clip(RoundedCornerShape(8.dp)) + .background(Color.Gray.copy(alpha = alpha / 2)) + ) + + // Divider + Box(Modifier.fillMaxWidth().height(1.dp).background(Color.LightGray.copy(alpha = 0.2f))) + + // Output Area + Box( + Modifier + .weight(1f) + .fillMaxWidth() + .padding(16.dp) + .clip(RoundedCornerShape(8.dp)) + .background(Color.Gray.copy(alpha = alpha / 2)) + ) + + // Bottom Buttons Row Skeleton + Row(Modifier.fillMaxWidth().padding(8.dp)) { + Box(Modifier.size(48.dp).clip(CircleShape).background(Color.Gray.copy(alpha = alpha))) + Spacer(Modifier.width(8.dp)) + Box(Modifier.size(48.dp).clip(CircleShape).background(Color.Gray.copy(alpha = alpha))) + } + } + } + } + } +} + +fun Context.copyToClipboard(text: String, label: String = getString(R.string.copied_text)) { + val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val clip = ClipData.newPlainText(label, text) + clipboard.setPrimaryClip(clip) +} + +private fun shareText(context: Context, text: String) { + val sendIntent: Intent = Intent().apply { + action = Intent.ACTION_SEND + putExtra(Intent.EXTRA_TEXT, text) + type = "text/plain" + } + val shareIntent = Intent.createChooser(sendIntent, null) + context.startActivity(shareIntent) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/translation/OutputCard.kt b/app/src/main/java/eu/gaudian/translator/view/translation/OutputCard.kt new file mode 100644 index 0000000..6b31afb --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/translation/OutputCard.kt @@ -0,0 +1,389 @@ +package eu.gaudian.translator.view.translation + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.onSizeChanged +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Popup +import androidx.compose.ui.window.PopupProperties +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons + +@Composable +fun OutputCard( + modifier: Modifier = Modifier, + text: String, + explanationText: String? = null, + isExplanationOn: Boolean = false, + isPlayEnabled: Boolean = false, + translationSource: String? = null, + translationModel: String? = null, + onCopyClick: () -> Unit, + onPlayClick: () -> Unit, + onShareClick: () -> Unit, + onAddToDictionaryClick: () -> Unit, + onExplanationToggle: () -> Unit, + onRequestAlternatives: (String, (Result>) -> Unit) -> Unit, + onApplyAlternative: (originalWord: String, chosen: String) -> Unit +) { + AppCard( + modifier = modifier + .fillMaxWidth() + .padding(0.dp) + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .fillMaxHeight(), + verticalArrangement = Arrangement.SpaceBetween + ) { + Box( + modifier = Modifier + .weight(1f) + .fillMaxWidth() + .verticalScroll(rememberScrollState()) + .padding(8.dp), + contentAlignment = if (text.isEmpty()) Alignment.Center else Alignment.TopStart + ) { + if (text.isEmpty()) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center, + modifier = Modifier.alpha(0.3f) + ) { + Icon( + imageVector = AppIcons.Translate, + contentDescription = null, + modifier = Modifier.size(48.dp), + tint = MaterialTheme.colorScheme.onSurface + ) + Text( + text = stringResource(R.string.text_translation_will_appear_here), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurface + ) + } + } else { + Column { + if (!translationSource.isNullOrBlank()) { + val sourceInfo = if (!translationModel.isNullOrBlank()) { + translationModel + } else { + translationSource + } + Text( + text = sourceInfo, + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier + .padding(bottom = 8.dp) + .background( + color = MaterialTheme.colorScheme.primary.copy(alpha = 0.16f), + shape = RoundedCornerShape(999.dp) + ) + .padding(horizontal = 10.dp, vertical = 4.dp) + ) + } + + ClickableTranslatedText( + text = text, + onWordClick = { word -> + onRequestAlternatives(word) { _ -> } + }, + onRequestAlternatives = onRequestAlternatives, + onApplyAlternative = onApplyAlternative + ) + + if (isExplanationOn && !explanationText.isNullOrBlank()) { + Text( + text = stringResource(R.string.text_explanation) + ":\n" + explanationText, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(top = 8.dp) + ) + } + } + } + } + + val hasText = text.isNotEmpty() + Row( + modifier = Modifier + .fillMaxWidth() + .padding(0.dp, bottom = 0.dp), + horizontalArrangement = Arrangement.Start, + verticalAlignment = Alignment.CenterVertically + ) { + + ActionBar( + contentHorizontalArrangement = Arrangement.Start + ) { + IconButton(onClick = onPlayClick, enabled = isPlayEnabled) { + Icon( + imageVector = AppIcons.TextToSpeech, + contentDescription = stringResource(R.string.play_audio), + tint = if (isPlayEnabled && hasText) MaterialTheme.colorScheme.primary else Color.Gray + ) + } + IconButton(onClick = onCopyClick, enabled = hasText) { + Icon( + imageVector = AppIcons.Copy, + contentDescription = stringResource(R.string.copy_text), + tint = if (hasText) MaterialTheme.colorScheme.primary else Color.Gray + ) + } + } + + Spacer(modifier = Modifier.width(4.dp)) + + ExpandableActionBar { + IconButton(onClick = onShareClick, enabled = hasText) { + Icon( + imageVector = AppIcons.Share, + contentDescription = stringResource(R.string.share_text), + tint = if (hasText) MaterialTheme.colorScheme.primary else Color.Gray + ) + } + IconButton(onClick = onAddToDictionaryClick, enabled = hasText) { + Icon( + imageVector = AppIcons.AddToDictionary, + contentDescription = stringResource(R.string.label_add_to_dictionary), + tint = if (hasText) MaterialTheme.colorScheme.primary else Color.Gray + ) + } + IconButton(onClick = onExplanationToggle, enabled = hasText) { + Icon( + imageVector = AppIcons.Info, + contentDescription = stringResource(R.string.text_explanation), + tint = if (hasText) MaterialTheme.colorScheme.primary else Color.Gray + ) + } + } + } + } + } +} + +@Suppress("LocalVariableName") +@Composable +private fun ClickableTranslatedText( + text: String, + onWordClick: (word: String) -> Unit, + onRequestAlternatives: (String, (Result>) -> Unit) -> Unit, + onApplyAlternative: (originalWord: String, chosen: String) -> Unit +) { + val tokens = remember(text) { + val builder = mutableListOf() + if (text.isEmpty()) builder + else { + val sb = StringBuilder() + val KIND_SPACE = 0 + val KIND_WORD = 1 + val KIND_OTHER = 2 + fun Char.isJoinerOrMark(): Boolean = + this == '\u200D' || this == '\u200C' || + this == '\u09CD' || this == '\u094D' || + this == '\u0BCD' || + run { + val t = Character.getType(this) + t == Character.NON_SPACING_MARK.toInt() || t == Character.COMBINING_SPACING_MARK.toInt() || t == Character.ENCLOSING_MARK.toInt() + } + fun kindOf(ch: Char): Int = when { + ch.isWhitespace() -> KIND_SPACE + ch.isLetterOrDigit() || ch.isJoinerOrMark() -> KIND_WORD + else -> KIND_OTHER + } + var currentKind: Int? = null + for (ch in text) { + val k = kindOf(ch) + if (currentKind == null) { + currentKind = k + sb.append(ch) + } else if (k == currentKind || (currentKind == KIND_WORD && (ch.isJoinerOrMark() || ch.isLetterOrDigit()))) { + sb.append(ch) + } else { + builder.add(sb.toString()) + sb.clear() + sb.append(ch) + currentKind = k + } + } + if (sb.isNotEmpty()) builder.add(sb.toString()) + builder + } + } + + var popupOpen by remember { mutableStateOf(false) } + var selectedWord by remember { mutableStateOf(null) } + var isLoading by remember { mutableStateOf(false) } + var alternatives by remember { mutableStateOf>(emptyList()) } + + LaunchedEffect(popupOpen) { + if (!popupOpen) selectedWord = null + } + + Box { + FlowRow(horizontalArrangement = Arrangement.Start) { + tokens.forEach { token -> + val isWord = token.any { it.isLetterOrDigit() } + val isSelected = isWord && token == selectedWord && popupOpen + + var wordHeight by remember { mutableIntStateOf(0) } + + Box( + modifier = Modifier.onSizeChanged { wordHeight = it.height } + ) { + if (isWord) { + Text( + text = token, + style = MaterialTheme.typography.titleLarge, + color = if (isSelected) MaterialTheme.colorScheme.onPrimaryContainer else MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier + .padding(horizontal = 0.dp) + .clip(RoundedCornerShape(4.dp)) + .background(if (isSelected) MaterialTheme.colorScheme.primaryContainer else Color.Transparent) + .clickable { + selectedWord = token + popupOpen = true + isLoading = true + onRequestAlternatives(token) { result -> + isLoading = false + result.onSuccess { alternatives = it } + .onFailure { alternatives = emptyList() } + } + onWordClick(token) + } + .padding(horizontal = 2.dp) + ) + + if (isSelected) { + Popup( + alignment = Alignment.TopCenter, + offset = IntOffset(0, wordHeight + 10), // +10 for small visual gap + onDismissRequest = { popupOpen = false }, + properties = PopupProperties(focusable = true) + ) { + Card( + elevation = CardDefaults.cardElevation(4.dp), + shape = RoundedCornerShape(12.dp), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceContainerHighest), + modifier = Modifier + .widthIn(min = 150.dp, max = 250.dp) + ) { + Column( + modifier = Modifier.padding(8.dp), + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + Text( + text = stringResource(R.string.label_alternatives_for, token), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier.padding(bottom = 4.dp, start = 8.dp) + ) + + if (isLoading) { + Box(Modifier + .fillMaxWidth() + .padding(16.dp), contentAlignment = Alignment.Center) { + CircularProgressIndicator(modifier = Modifier.size(24.dp)) + } + } else if (alternatives.isEmpty()) { + Text( + text = stringResource(id = R.string.not_available), + style = MaterialTheme.typography.bodySmall, + modifier = Modifier.padding(8.dp) + ) + } else { + alternatives.take(5).forEach { alt -> + Row( + modifier = Modifier + .fillMaxWidth() + .clip(RoundedCornerShape(8.dp)) + .clickable { + onApplyAlternative(token, alt) + popupOpen = false + } + .padding(horizontal = 8.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = alt, + style = MaterialTheme.typography.bodyMedium + ) + } + } + } + } + } + } + } + } else { + Text( + text = token, + style = MaterialTheme.typography.headlineSmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@ThemePreviews +@Composable +fun OutputCardPreview() { + OutputCard( + text = stringResource(R.string.this_is_a_sample_output_text), + explanationText = "This is an explanation.", + isExplanationOn = true, + translationSource = "AI Model", + translationModel = "GPT-4", + onCopyClick = {}, + onPlayClick = {}, + onShareClick = {}, + onAddToDictionaryClick = {}, + onExplanationToggle = {}, + onRequestAlternatives = { _, cb -> cb(Result.success(listOf("option1", "option2"))) }, + onApplyAlternative = { _, _ -> } + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/translation/TranlsationScreen.kt b/app/src/main/java/eu/gaudian/translator/view/translation/TranlsationScreen.kt new file mode 100644 index 0000000..73da6e3 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/translation/TranlsationScreen.kt @@ -0,0 +1,98 @@ +package eu.gaudian.translator.view.translation + +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.tooling.preview.Preview +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavController +import androidx.navigation.NavHostController +import eu.gaudian.translator.utils.TextToSpeechHelper +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.SettingsViewModel +import eu.gaudian.translator.viewmodel.StatusViewModel +import eu.gaudian.translator.viewmodel.TranslationViewModel +import kotlinx.coroutines.launch + + +@Composable +fun TranslationScreen( + navController: NavController, + statusViewModel: StatusViewModel = viewModel(), + translationViewModel: TranslationViewModel = viewModel(), +) { + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + var showHistorySheet by remember { mutableStateOf(false) } + val sheetState = rememberModalBottomSheetState() + + val scope = rememberCoroutineScope() + val context = LocalContext.current + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + + + TranslationScreen( + translationViewModel = translationViewModel, + languageViewModel = languageViewModel, + statusViewModel = statusViewModel, + onHistoryClick = { showHistorySheet = true }, + onSettingsClick = { + @Suppress("HardCodedStringLiteral") + navController.navigate("custom_translation_prompt") + }, + navController = navController as NavHostController + ) + + if (showHistorySheet) { + ModalBottomSheet( + onDismissRequest = { + @Suppress("AssignedValueIsNeverRead") + showHistorySheet = false + }, + sheetState = sheetState + ) { + + HistorySheetContent( + translationViewModel = translationViewModel, + onPlayAudio = { text, language -> + scope.launch { + val voice = + settingsViewModel.getTtsVoiceForLanguage(language.code, language.region) + TextToSpeechHelper.speakOut( + context = context, + text = text, + language = language, + voiceName = voice, + ) + } + }, + onItemClick = { item -> + translationViewModel.applyHistoryItem(item) + @Suppress("AssignedValueIsNeverRead") + showHistorySheet = false + }, + languageViewModel = languageViewModel + ) + } + } + +} + +@Preview +@Composable +fun TranslationScreenPreview() { + val navController = NavController(LocalContext.current) + TranslationScreen( + navController = navController, + statusViewModel = viewModel(), + translationViewModel = viewModel(), + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/translation/TranslationHistory.kt b/app/src/main/java/eu/gaudian/translator/view/translation/TranslationHistory.kt new file mode 100644 index 0000000..92c3837 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/translation/TranslationHistory.kt @@ -0,0 +1,382 @@ +package eu.gaudian.translator.view.translation + +import androidx.compose.animation.animateColorAsState +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.ElevatedCard +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SwipeToDismissBox +import androidx.compose.material3.SwipeToDismissBoxValue +import androidx.compose.material3.Text +import androidx.compose.material3.rememberSwipeToDismissBoxState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.scale +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.TranslationHistoryItem +import eu.gaudian.translator.model.generateRandomLanguage +import eu.gaudian.translator.model.generateSimpleLanguage +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.TranslationViewModel + +@Composable +fun HistorySheetContent( + translationViewModel: TranslationViewModel, + languageViewModel: LanguageViewModel, + onPlayAudio: (text: String, language: Language) -> Unit, + onItemClick: (TranslationHistoryItem) -> Unit +) { + + val history by translationViewModel.translationHistory.collectAsState() + + Column( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.surface) // Clean background + .padding(bottom = 16.dp) + ) { + // --- Custom Header --- + Column( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 24.dp, horizontal = 16.dp) // Added outer padding + ) { + // 1. Calculate a safe padding for the title so it never touches the delete button + // "Delete All" usually takes about 60-80dp. We use 80dp to be safe. + val titlePadding = if (history.isNotEmpty()) 80.dp else 0.dp + + Text( + text = stringResource(R.string.cd_translation_history), + style = MaterialTheme.typography.headlineSmall, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.onSurface, + textAlign = TextAlign.Center, + modifier = Modifier + // FIX: This padding ensures the title wraps before hitting the button + .padding(horizontal = titlePadding) + .fillMaxWidth() + ) + + if (history.isNotEmpty()) { + Text( + text = stringResource(R.string.label_delete_all), + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.error, + modifier = Modifier + .clip(RoundedCornerShape(8.dp)) + .clickable { translationViewModel.clearTranslationHistory() } + .padding(8.dp) // Touch target padding + ) + } + } + + if (history.isEmpty()) { + EmptyHistoryState() + } else { + LazyColumn( + contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp), + verticalArrangement = Arrangement.spacedBy(12.dp), + modifier = Modifier.fillMaxSize() + ) { + itemsIndexed( + items = history, + key = { _, item -> item.id } + ) { _, item -> + val sourceLanguage by languageViewModel.getLanguageByIdFlow(item.sourceLanguageCode).collectAsState(initial = null) + val targetLanguage by languageViewModel.getLanguageByIdFlow(item.targetLanguageCode).collectAsState(initial = null) + + + + sourceLanguage?.let { + targetLanguage?.let { onClick -> + SwipeableHistoryItem( + item = item, + onDelete = { translationViewModel.deleteTranslationHistoryItem(item) }, + onPlay = onPlayAudio, + onClick = onItemClick, + sourceLanguage = it, + targetLanguage = onClick, + + ) + } + } + + + } + } + } + } +} + +@Composable +fun EmptyHistoryState() { + Column( + modifier = Modifier + .fillMaxSize() + .padding(bottom = 64.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Icon( + imageVector = AppIcons.History, + contentDescription = null, + tint = MaterialTheme.colorScheme.surfaceVariant, + modifier = Modifier.size(80.dp) + ) + Spacer(modifier = Modifier.size(16.dp)) + Text( + text = stringResource(R.string.label_no_history_yet), + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } +} + +@Composable +fun SwipeableHistoryItem( + item: TranslationHistoryItem, + sourceLanguage: Language, + targetLanguage: Language, + onDelete: () -> Unit, + onPlay: (text: String, language: Language) -> Unit, + onClick: (TranslationHistoryItem) -> Unit +) { + + val dismissState = rememberSwipeToDismissBoxState( + + confirmValueChange = { + if (it == SwipeToDismissBoxValue.EndToStart || it == SwipeToDismissBoxValue.StartToEnd) { + onDelete() + true + } + else { + false + } + } + ) + + SwipeToDismissBox( + state = dismissState, + enableDismissFromStartToEnd = false, + backgroundContent = { + val color by animateColorAsState( + if (dismissState.targetValue == SwipeToDismissBoxValue.EndToStart) MaterialTheme.colorScheme.errorContainer else Color.Transparent, + label = "bgColor" + ) + val iconScale by animateFloatAsState( + if (dismissState.targetValue == SwipeToDismissBoxValue.EndToStart) 1.2f else 0.8f, + label = "iconScale" + ) + + Box( + Modifier + .fillMaxSize() + .clip(RoundedCornerShape(16.dp)) + .background(color) + .padding(horizontal = 24.dp), + contentAlignment = Alignment.CenterEnd + ) { + Icon( + AppIcons.Delete, + contentDescription = stringResource(R.string.label_delete), + modifier = Modifier.scale(iconScale), + tint = MaterialTheme.colorScheme.onErrorContainer + ) + } + }, + content = { + HistoryCard(item, sourceLanguage, targetLanguage, onPlay, onClick) + } + ) +} + +@Composable +fun HistoryCard( + item: TranslationHistoryItem, + sourceLanguage: Language, + targetLanguage: Language, + onPlay: (text: String, language: Language) -> Unit, + onClick: (TranslationHistoryItem) -> Unit +) { + ElevatedCard( + onClick = { onClick(item) }, + shape = RoundedCornerShape(16.dp), + colors = CardDefaults.elevatedCardColors( + containerColor = MaterialTheme.colorScheme.surfaceContainerLow + ), + elevation = CardDefaults.elevatedCardElevation(defaultElevation = 0.5.dp), + modifier = Modifier.fillMaxWidth(), + ) { + Column( + modifier = Modifier.padding(16.dp) + ) { + // --- Top Row: Language Indicators & Time --- + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Row(verticalAlignment = Alignment.CenterVertically) { + LanguageBadge(text = sourceLanguage.name) + Icon( + imageVector = AppIcons.ArrowRight, + contentDescription = null, + modifier = Modifier + .size(14.dp) + .padding(horizontal = 4.dp), + tint = MaterialTheme.colorScheme.outline + ) + LanguageBadge(text = targetLanguage.name) + } + + Text( + text = item.getRelativeTimeSpan(), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.outline + ) + } + + Spacer(modifier = Modifier.size(12.dp)) + + // --- Source Text (Subtle) --- + Text( + text = item.sourceText, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + maxLines = 2, + overflow = TextOverflow.Ellipsis + ) + + Spacer(modifier = Modifier.size(4.dp)) + + // --- Translated Text (Prominent) --- + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.Top, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text( + text = item.text, + style = MaterialTheme.typography.titleMedium.copy( + fontSize = 18.sp, + fontWeight = FontWeight.SemiBold + ), + color = MaterialTheme.colorScheme.primary, + modifier = Modifier + .weight(1f) + .padding(end = 8.dp) + ) + + if (item.playable == true) { + IconButton( + onClick = { item.targetLanguageCode?.let { onPlay(item.text, targetLanguage) } }, + modifier = Modifier + .size(32.dp) + .background( + MaterialTheme.colorScheme.primaryContainer.copy(alpha = 0.5f), + CircleShape + ) + ) { + Icon( + imageVector = AppIcons.TextToSpeech, + contentDescription = stringResource(R.string.cd_play), + modifier = Modifier.size(16.dp), + tint = MaterialTheme.colorScheme.onPrimaryContainer + ) + } + } + } + } + } +} + +@Composable +fun LanguageBadge(text: String) { + Text( + text = text, + style = MaterialTheme.typography.labelSmall, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier + .background( + MaterialTheme.colorScheme.surfaceVariant, + RoundedCornerShape(4.dp) + ) + .padding(horizontal = 6.dp, vertical = 2.dp) + ) +} + +// --- Preview --- + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +fun HistoryItemPreview() { + val mockItem = TranslationHistoryItem( + text = "Guten Morgen", + sourceText = "Good Morning", + sourceLanguageCode = 134, + targetLanguageCode = 221, + playable = true, + timestamp = System.currentTimeMillis() + ) + + MaterialTheme { + Column(Modifier.padding(16.dp)) { + HistoryCard( + item = mockItem, onClick = {}, + sourceLanguage = generateRandomLanguage(), + targetLanguage = generateRandomLanguage(), + onPlay = { _: String, _: Language -> }, + ) + Spacer(Modifier.size(16.dp)) + // Swipe visual mock + Box(Modifier.background(MaterialTheme.colorScheme.errorContainer, RoundedCornerShape(16.dp))) { + Row(Modifier + .fillMaxWidth() + .padding(16.dp), horizontalArrangement = Arrangement.End) { + Icon(AppIcons.Delete, null, tint = MaterialTheme.colorScheme.onErrorContainer) + } + HistoryCard( + item = mockItem.copy(text = "Example Swipe"), + onPlay = { _: String, _: Language -> }, + onClick = {}, + sourceLanguage = generateSimpleLanguage("German"), + targetLanguage = generateSimpleLanguage("English"), + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/CategoryDetailScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/CategoryDetailScreen.kt new file mode 100644 index 0000000..a944ddf --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/CategoryDetailScreen.kt @@ -0,0 +1,270 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.vocabulary + +import android.annotation.SuppressLint +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavHostController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.TagCategory +import eu.gaudian.translator.model.VocabularyFilter +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.PrimaryButton +import eu.gaudian.translator.view.dialogs.DeleteCategoryDialog +import eu.gaudian.translator.view.dialogs.DeleteItemsDialog +import eu.gaudian.translator.view.dialogs.EditCategoryDialog +import eu.gaudian.translator.view.vocabulary.widgets.CategoryProgressCircle +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.ProgressViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel + +@SuppressLint("ContextCastToActivity") +@Composable +fun CategoryDetailScreen( + categoryId: Int, + onBackClick: () -> Unit, + onNavigateToItem: (VocabularyItem) -> Unit, + navController: NavHostController, + modifier: Modifier = Modifier +) { + val activity = LocalContext.current.findActivity() + val categoryViewModel: CategoryViewModel = viewModel(viewModelStoreOwner = activity) + val progressViewModel: ProgressViewModel = ProgressViewModel.getInstance(LocalContext.current.applicationContext as android.app.Application) + val vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(activity.application as android.app.Application) + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + + val category by categoryViewModel.getCategoryById(categoryId).collectAsState(initial = null) + val categoryProgressList by progressViewModel.categoryProgressList.collectAsState() + val categoryProgress = categoryProgressList.find { it.vocabularyCategory.id == categoryId } + + val context = LocalContext.current + val title = when (val cat = category) { + is TagCategory -> cat.name + is VocabularyFilter -> cat.name + else -> stringResource(R.string.text_loading_3d) + } + + val languages = languageViewModel.allLanguages.collectAsState(initial = emptyList()) + + val subtitle = when (val cat = category) { + is TagCategory -> stringResource(R.string.text_manual_vocabulary_list) + is VocabularyFilter -> buildString { + val hasLangList = !cat.languages.isNullOrEmpty() + val hasPair = cat.languagePairs != null + val hasStages = !cat.stages.isNullOrEmpty() + if (!hasLangList && !hasPair && !hasStages) { + append(stringResource(R.string.text_filter_all_items)) + } else { + //append(stringResource(R.string.filter)) + append(" ") + if (hasPair) { + val (a,b) = cat.languagePairs + append("[${languages.value.find{ it.nameResId == a }?.name} - ${languages.value.find{ it.nameResId == b }?.name}]") + } else if (hasLangList) { + append(cat.languages.joinToString(", ") { langId -> languages.value.find { it.nameResId == langId }?.name.toString() }) + } else { + append(stringResource(R.string.text_all_languages)) + } + append(" | ") + if (hasStages) append(cat.stages.joinToString(", ") { it.toString(context) }) else append(stringResource(R.string.label_all_stages)) + } + } + else -> "" + } + + var showMenu by remember { mutableStateOf(false) } + val showDeleteCategoryDialog by categoryViewModel.showDeleteCategoryDialog.collectAsState(initial = false) + val showDeleteItemsDialog by categoryViewModel.showDeleteItemsDialog.collectAsState(initial = false) + val showEditCategoryDialog by categoryViewModel.showEditCategoryDialog.collectAsState(initial = false) + + AppScaffold( + modifier = modifier, + topBar = { + Column( + modifier = Modifier.background(MaterialTheme.colorScheme.surface) + ) { + AppTopAppBar( + title = { + Column { + Text( + text = title, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + Text( + text = subtitle, + style = MaterialTheme.typography.bodySmall, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + }, + navigationIcon = { + IconButton(onClick = onBackClick) { + Icon( + AppIcons.ArrowBack, + contentDescription = stringResource(R.string.cd_back) + ) + } + }, + actions = { + IconButton(onClick = { showMenu = !showMenu }) { + Icon( + imageVector = AppIcons.MoreVert, + contentDescription = stringResource(R.string.text_more_options) + ) + } + DropdownMenu( + + expanded = showMenu, + onDismissRequest = { showMenu = false }, + modifier = Modifier.width(220.dp) + ) { + DropdownMenuItem( + text = { Text(stringResource(R.string.text_edit_category)) }, + onClick = { + categoryViewModel.setShowEditCategoryDialog(true, categoryId) + showMenu = false + } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.text_export_category)) }, + onClick = { + vocabularyViewModel.saveCategory(categoryId) + showMenu = false + } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.delete_items_category)) }, + onClick = { + categoryViewModel.setShowDeleteItemsDialog(true, categoryId) + showMenu = false + } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.text_delete_category)) }, + onClick = { + categoryViewModel.setShowDeleteCategoryDialog(true, categoryId) + showMenu = false + } + ) + } + }, + colors = TopAppBarDefaults.topAppBarColors( + // TODO: Review this + containerColor = MaterialTheme.colorScheme.surface + ) + ) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 8.dp, horizontal = 16.dp), + horizontalArrangement = Arrangement.SpaceEvenly, + verticalAlignment = Alignment.CenterVertically + ) { + if (categoryProgress != null) { + Box(modifier = Modifier.weight(1f)) { + CategoryProgressCircle( + totalItems = categoryProgress.totalItems, + itemsCompleted = categoryProgress.itemsCompleted, + itemsInStages = categoryProgress.itemsInStages, + newItems = categoryProgress.newItems, + circleSize = 80.dp, + ) + } + } else { + Spacer(modifier = Modifier.weight(1f)) + } + + Box( + modifier = Modifier + .weight(1f) + .padding(start = 8.dp) + ) { + PrimaryButton( + text = stringResource(R.string.label_start), + icon = AppIcons.Play, + onClick = { + val categories = listOf(category) + val categoryIds = categories.joinToString(",") { it?.id.toString() } + navController.navigate("vocabulary_exercise/false?categories=$categoryIds") + }, + modifier = Modifier.heightIn(max = 80.dp) + ) + } + } + } + } + ) { paddingValues -> + Column(modifier = Modifier.padding(paddingValues)) { + VocabularyListScreen( + categoryId = categoryId, + showDueTodayOnly = false, + onNavigateToItem = onNavigateToItem, + navController = navController, // Pass the received navController here + isRemoveFromCategoryEnabled = category is TagCategory, + showTopBar = false, + enableNavigationButtons = true + ) + + // Dialogs + if (showDeleteCategoryDialog) { + DeleteCategoryDialog( + onDismiss = { categoryViewModel.setShowDeleteCategoryDialog(false, categoryId) }, + viewModel = categoryViewModel, + ) + } + if (showDeleteItemsDialog) { + DeleteItemsDialog( + onDismiss = { categoryViewModel.setShowDeleteItemsDialog(false, categoryId) }, + viewModel = vocabularyViewModel, + categoryId = categoryId + ) + } + if (showEditCategoryDialog) { + EditCategoryDialog( + onDismiss = { categoryViewModel.setShowEditCategoryDialog(false, categoryId) }, + languageViewModel = languageViewModel, + categoryViewModel = categoryViewModel, + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/CategoryListScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/CategoryListScreen.kt new file mode 100644 index 0000000..f65c38c --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/CategoryListScreen.kt @@ -0,0 +1,336 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.vocabulary + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background +import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Badge +import androidx.compose.material3.Checkbox +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.FloatingActionButtonDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.hapticfeedback.HapticFeedbackType +import androidx.compose.ui.platform.LocalHapticFeedback +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.TagCategory +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.dialogs.AddCategoryDialog +import eu.gaudian.translator.view.dialogs.DeleteMultipleCategoriesDialog +import eu.gaudian.translator.view.vocabulary.widgets.CategoryCircleType +import eu.gaudian.translator.view.vocabulary.widgets.CategoryProgressCircle +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.ProgressViewModel + +enum class SortOption { + NAME, + SIZE, + COMPLETION_PERCENTAGE, + NEW_ITEMS, + IN_PROGRESS +} + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun CategoryListScreen( + categoryViewModel: CategoryViewModel, + progressViewModel: ProgressViewModel, + onNavigateBack: () -> Unit, + onCategoryClicked: (Int) -> Unit, +) { + + var sortOption by remember { mutableStateOf(SortOption.NAME) } + var sortMenuExpanded by remember { mutableStateOf(false) } + val categoryProgressList by progressViewModel.categoryProgressList.collectAsState(initial = emptyList()) + var showAddCategoryDialog by remember { mutableStateOf(false) } + var showDeleteCategoryDialog by remember { mutableStateOf(false) } + var selectedCategories by remember { mutableStateOf(emptySet()) } + var isSelectionMode by remember { mutableStateOf(false) } + val haptic = LocalHapticFeedback.current + + if (showAddCategoryDialog) { + AddCategoryDialog( + onDismiss = { showAddCategoryDialog = false }, + categoryViewModel = categoryViewModel, + ) + } + + val sortedCategories = remember(categoryProgressList, sortOption) { + when (sortOption) { + SortOption.NAME -> categoryProgressList.sortedBy { it.vocabularyCategory.name } + SortOption.SIZE -> categoryProgressList.sortedByDescending { it.totalItems } + SortOption.COMPLETION_PERCENTAGE -> categoryProgressList.sortedByDescending { + if (it.totalItems > 0) it.itemsCompleted.toFloat() / it.totalItems else 0f + } + SortOption.NEW_ITEMS -> categoryProgressList.sortedByDescending { it.newItems } + SortOption.IN_PROGRESS -> categoryProgressList.sortedByDescending { it.itemsInStages } + } + } + + AppScaffold( + topBar = { + AppTopAppBar( + title = { + if (isSelectionMode && selectedCategories.isNotEmpty()) { + Text(stringResource(R.string.text_2d_categories_selected, selectedCategories.size)) + } else { + Text(stringResource(R.string.label_categories)) + } + }, + navigationIcon = { + if (isSelectionMode) { + IconButton(onClick = { + isSelectionMode = false + selectedCategories = emptySet() + }) { + Icon(AppIcons.CheckCircle, contentDescription = stringResource(R.string.label_close)) + } + } else { + IconButton(onClick = onNavigateBack) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + } + }, + actions = { + if (isSelectionMode) { + if (selectedCategories.isNotEmpty()) { + IconButton( + onClick = { + showDeleteCategoryDialog = true + }, + enabled = true + ) { + Icon(AppIcons.Delete, contentDescription = stringResource(R.string.label_delete)) + } + } + IconButton( + onClick = { + selectedCategories = if (selectedCategories.size == sortedCategories.size) { + emptySet() + } else { + sortedCategories.map { it.vocabularyCategory.id }.toSet() + } + } + ) { + if (selectedCategories.size == sortedCategories.size) { + Icon(AppIcons.Deselect, contentDescription = stringResource(R.string.deselect_all)) + } else { + Icon(AppIcons.SelectAll, contentDescription = stringResource(R.string.select_all)) + } + } + } else { + IconButton(onClick = { sortMenuExpanded = true }) { + Icon(AppIcons.Sort, contentDescription = stringResource(R.string.sort)) + } + } + DropdownMenu( + expanded = sortMenuExpanded, + onDismissRequest = { sortMenuExpanded = false } + ) { + DropdownMenuItem( + text = { + Text( + text = stringResource(R.string.sort_by_name), + color = if (sortOption == SortOption.NAME) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface + ) + }, + onClick = { + sortOption = SortOption.NAME + sortMenuExpanded = false + } + ) + DropdownMenuItem( + text = { + Text( + text = stringResource(R.string.sort_by_size), + color = if (sortOption == SortOption.SIZE) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface + ) + }, + onClick = { + sortOption = SortOption.SIZE + sortMenuExpanded = false + } + ) + DropdownMenuItem( + text = { + Text( + text = stringResource(R.string.sort_by_completion_percentage), + color = if (sortOption == SortOption.COMPLETION_PERCENTAGE) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface + ) + }, + onClick = { + sortOption = SortOption.COMPLETION_PERCENTAGE + sortMenuExpanded = false + } + ) + DropdownMenuItem( + text = { + Text( + text = stringResource(R.string.sort_by_new_items), + color = if (sortOption == SortOption.NEW_ITEMS) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface + ) + }, + onClick = { + sortOption = SortOption.NEW_ITEMS + sortMenuExpanded = false + } + ) + DropdownMenuItem( + text = { + Text( + text = stringResource(R.string.sort_by_in_progress), + color = if (sortOption == SortOption.IN_PROGRESS) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface + ) + }, + onClick = { + sortOption = SortOption.IN_PROGRESS + sortMenuExpanded = false + } + ) + } + } + ) + }, + floatingActionButton = { + if (!isSelectionMode) { + FloatingActionButton( + onClick = { showAddCategoryDialog = true }, + shape = RoundedCornerShape(16.dp), + containerColor = MaterialTheme.colorScheme.primary, + contentColor = MaterialTheme.colorScheme.onPrimary, + elevation = FloatingActionButtonDefaults.elevation(defaultElevation = 8.dp) + ) { + Icon(AppIcons.Add, contentDescription = stringResource(R.string.label_add_category)) + } + } + } + ) { paddingValues -> + LazyVerticalGrid( + columns = GridCells.Adaptive(minSize = 128.dp), + contentPadding = paddingValues, + verticalArrangement = Arrangement.spacedBy(16.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp), + modifier = Modifier.padding(16.dp) + ) { + items(sortedCategories.size) { index -> + val data = sortedCategories[index] + val categoryId = data.vocabularyCategory.id + val isSelected = selectedCategories.contains(categoryId) + + Box( + modifier = Modifier + .combinedClickable( + onClick = { + if (isSelectionMode) { + selectedCategories = if (isSelected) { + selectedCategories - categoryId + } else { + selectedCategories + categoryId + } + if (selectedCategories.isEmpty()) { + isSelectionMode = false + } + } else { + onCategoryClicked(categoryId) + } + }, + onLongClick = { + haptic.performHapticFeedback(HapticFeedbackType.LongPress) + isSelectionMode = true + selectedCategories = selectedCategories + categoryId + } + ) + ) { + Box( + modifier = if (isSelected) Modifier.background( + color = MaterialTheme.colorScheme.primary.copy(alpha = 0.1f), + shape = MaterialTheme.shapes.medium + ) else Modifier + ) { + CategoryProgressCircle( + category = data.vocabularyCategory.name, + totalItems = data.totalItems, + itemsCompleted = data.itemsCompleted, + itemsInStages = data.itemsInStages, + newItems = data.newItems, + onClick = null, + showPercentage = true, + type = if(data.vocabularyCategory is TagCategory) CategoryCircleType.List else CategoryCircleType.Filter + ) + } + + if (isSelectionMode) { + Checkbox( + checked = isSelected, + onCheckedChange = { checked -> + selectedCategories = if (checked) { + selectedCategories + categoryId + } else { + selectedCategories - categoryId + } + if (selectedCategories.isEmpty()) { + isSelectionMode = false + } + }, + modifier = Modifier + .align(Alignment.TopStart) + .padding(8.dp) + .size(24.dp) + ) + } + + if (isSelected && !isSelectionMode) { + Badge( + modifier = Modifier + .align(Alignment.TopEnd) + .padding(8.dp) + ) { + Icon( + imageVector = AppIcons.CheckCircle, + contentDescription = stringResource(R.string.text_selected), + modifier = Modifier.size(16.dp) + ) + } + } + } + } + } + } + + if (showDeleteCategoryDialog && selectedCategories.isNotEmpty()) { + DeleteMultipleCategoriesDialog( + categoryIds = selectedCategories.toList(), + categoryViewModel = categoryViewModel, + onDismiss = { showDeleteCategoryDialog = false }, + onConfirm = { + selectedCategories = emptySet() + isSelectionMode = false + showDeleteCategoryDialog = false + } + ) + } +} diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/DashboardContent.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/DashboardContent.kt new file mode 100644 index 0000000..9b2f68f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/DashboardContent.kt @@ -0,0 +1,678 @@ +@file:Suppress("HardCodedStringLiteral", "AssignedValueIsNeverRead", "UnusedMaterial3ScaffoldPaddingParameter") + +package eu.gaudian.translator.view.vocabulary + +import android.annotation.SuppressLint +import android.app.Application +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.core.Animatable +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.VisibilityThreshold +import androidx.compose.animation.core.spring +import androidx.compose.animation.core.tween +import androidx.compose.foundation.gestures.detectDragGestures +import androidx.compose.foundation.gestures.scrollBy +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.unit.dp +import androidx.compose.ui.zIndex +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.model.WidgetType +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedCard +import eu.gaudian.translator.view.dialogs.MissingLanguageDialog +import eu.gaudian.translator.view.vocabulary.widgets.AllVocabularyWidget +import eu.gaudian.translator.view.vocabulary.widgets.CategoryProgressWidget +import eu.gaudian.translator.view.vocabulary.widgets.DueTodayWidget +import eu.gaudian.translator.view.vocabulary.widgets.LevelWidget +import eu.gaudian.translator.view.vocabulary.widgets.ModernStartButtons +import eu.gaudian.translator.view.vocabulary.widgets.StatusWidget +import eu.gaudian.translator.view.vocabulary.widgets.StreakWidget +import eu.gaudian.translator.view.vocabulary.widgets.WeeklyActivityChartWidget +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.ProgressViewModel +import eu.gaudian.translator.viewmodel.SettingsViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.launch + +@SuppressLint("FrequentlyChangingValue") +@Composable +fun DashboardContent( + navController: NavController, + onShowCustomExerciseDialog: () -> Unit, + startDailyExercise: (Boolean) -> Unit, + onNavigateToCategoryDetail: (Int) -> Unit, + onNavigateToCategoryList: () -> Unit, + onShowWordPairExerciseDialog: () -> Unit, + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(LocalContext.current.applicationContext as Application), + progressViewModel: ProgressViewModel = ProgressViewModel.getInstance(LocalContext.current.applicationContext as Application), +) { + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + var showMissingLanguageDialog by remember { mutableStateOf(false) } + var selectedMissingLanguageId by remember { mutableStateOf(null) } + + val affectedItems by remember(selectedMissingLanguageId) { + selectedMissingLanguageId?.let { + vocabularyViewModel.getItemsForLanguage(it) + } ?: flowOf(emptyList()) + }.collectAsState(initial = emptyList()) + + if (showMissingLanguageDialog && selectedMissingLanguageId != null) { + MissingLanguageDialog( + showDialog = true, + missingLanguageId = selectedMissingLanguageId!!, + affectedItems = affectedItems, + onDismiss = { showMissingLanguageDialog = false }, + onDelete = { items -> + vocabularyViewModel.deleteVocabularyItemsById(items.map { it.id }) + showMissingLanguageDialog = false + }, + onReplace = { oldId, newId -> + vocabularyViewModel.replaceLanguageId(oldId, newId) + showMissingLanguageDialog = false + }, + onCreate = { newLanguage -> + languageViewModel.addCustomLanguage(newLanguage) + }, + languageViewModel = languageViewModel + ) + } + + AppOutlinedCard { + // We collect the order from DB initially + val initialWidgetOrder by settingsViewModel.widgetOrder.collectAsState(initial = null) + val collapsedWidgetIds by settingsViewModel.collapsedWidgetIds.collectAsState(initial = emptySet()) + val dashboardScrollState by settingsViewModel.dashboardScrollState.collectAsState() + val scope = rememberCoroutineScope() + + if (initialWidgetOrder == null) { + Box( + modifier = Modifier + .fillMaxSize() + .padding(vertical = 64.dp), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator() + } + } else { + // BEST PRACTICE: Use a SnapshotStateList for immediate UI updates. + // We only initialize this once, so DB updates don't reset the list while dragging. + val orderedWidgets = remember { mutableStateListOf() } + + // Sync with DB only on first load + LaunchedEffect(initialWidgetOrder) { + if (orderedWidgets.isEmpty() && !initialWidgetOrder.isNullOrEmpty()) { + orderedWidgets.addAll(initialWidgetOrder!!) + } else if (orderedWidgets.isEmpty()) { + orderedWidgets.addAll(WidgetType.DEFAULT_ORDER) + } + } + + val lazyListState = rememberLazyListState( + initialFirstVisibleItemIndex = dashboardScrollState.first, + initialFirstVisibleItemScrollOffset = dashboardScrollState.second + ) + + // Save scroll state + LaunchedEffect(lazyListState.firstVisibleItemIndex, lazyListState.firstVisibleItemScrollOffset) { + settingsViewModel.saveDashboardScrollState( + lazyListState.firstVisibleItemIndex, + lazyListState.firstVisibleItemScrollOffset + ) + } + DisposableEffect(Unit) { + onDispose { + settingsViewModel.saveDashboardScrollState( + lazyListState.firstVisibleItemIndex, + lazyListState.firstVisibleItemScrollOffset + ) + } + } + + // --- Robust Drag and Drop State --- + val dragDropState = rememberDragDropState( + lazyListState = lazyListState, + onSwap = { fromIndex, toIndex -> + // Swap data immediately for responsiveness + orderedWidgets.apply { + add(toIndex, removeAt(fromIndex)) + } + }, + onDragEnd = { + // Persist to DB only when user drops + settingsViewModel.saveWidgetOrder(orderedWidgets.toList()) + } + ) + + LazyColumn( + state = lazyListState, + modifier = Modifier + .fillMaxSize() + .dragContainer(dragDropState), + contentPadding = PaddingValues(bottom = 160.dp) + ) { + itemsIndexed( + items = orderedWidgets, + key = { _, widget -> widget.id } + ) { index, widgetType -> + + val isDragging = index == dragDropState.draggingItemIndex + + // Calculate translation: distinct logic for dragged vs. stationary items + val translationY = if (isDragging) { + dragDropState.draggingItemOffset + } else { + 0f + } + + Box( + modifier = Modifier + .zIndex(if (isDragging) 1f else 0f) + .graphicsLayer { + this.translationY = translationY + this.shadowElevation = if (isDragging) 8.dp.toPx() else 0f + this.scaleX = if (isDragging) 1.02f else 1f + this.scaleY = if (isDragging) 1.02f else 1f + } + // CRITICAL FIX: Only apply animation to items NOT being dragged. + // This prevents the "flicker" by stopping the layout animation + // from fighting your manual drag offset. + .then( + if (!isDragging) { + Modifier.animateItem( + placementSpec = spring( + stiffness = Spring.StiffnessLow, + visibilityThreshold = IntOffset.VisibilityThreshold + ) + ) + } else { + Modifier + } + ) + ) { + WidgetContainer( + widgetType = widgetType, + isExpanded = widgetType.id !in collapsedWidgetIds, + onExpandedChange = { newExpandedState -> + scope.launch { + settingsViewModel.setWidgetExpandedState(widgetType.id, newExpandedState) + } + }, + onDragStart = { dragDropState.onDragStart(index) }, + onDrag = { dragAmount -> dragDropState.onDrag(dragAmount) }, + onDragEnd = { dragDropState.onDragEnd() }, + onDragCancel = { dragDropState.onDragInterrupted() }, + modifier = Modifier.fillMaxWidth() + ) { + LazyWidget( + widgetType = widgetType, + navController = navController, + vocabularyViewModel = vocabularyViewModel, + progressViewModel = progressViewModel, + onShowCustomExerciseDialog = onShowCustomExerciseDialog, + startDailyExercise = startDailyExercise, + onNavigateToCategoryDetail = onNavigateToCategoryDetail, + onNavigateToCategoryList = onNavigateToCategoryList, + onShowWordPairExerciseDialog = onShowWordPairExerciseDialog, + onMissingLanguage = { missingId -> + selectedMissingLanguageId = missingId + showMissingLanguageDialog = true + } + ) + } + } + } + } + } + } +} + +@Composable +private fun WidgetContainer( + widgetType: WidgetType, + isExpanded: Boolean, + onExpandedChange: (Boolean) -> Unit, + modifier: Modifier = Modifier, + onDragStart: () -> Unit, + onDrag: (Float) -> Unit, + onDragEnd: () -> Unit, + onDragCancel: () -> Unit, + content: @Composable () -> Unit +) { + AppCard( + modifier = modifier.padding(horizontal = 8.dp, vertical = 4.dp), + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .animateContentSize(animationSpec = tween(300, easing = FastOutSlowInEasing)) + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(start = 12.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = stringResource(widgetType.titleRes), + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.weight(1f) + ) + + IconButton(onClick = { onExpandedChange(!isExpanded) }) { + Icon( + imageVector = if (isExpanded) AppIcons.ArrowDropUp + else AppIcons.ArrowDropDown, + contentDescription = if (isExpanded) stringResource(R.string.text_collapse_widget) + else stringResource(R.string.text_expand_widget) + ) + } + + // Drag Handle with specific pointer input + Icon( + imageVector = AppIcons.DragHandle, + contentDescription = stringResource(R.string.text_drag_to_reorder), + tint = if (isExpanded) MaterialTheme.colorScheme.onSurface.copy(alpha = 0.38f) + else MaterialTheme.colorScheme.onSurface, + modifier = Modifier + .padding(end = 8.dp, start = 8.dp) + .pointerInput(Unit) { + detectDragGestures( + onDragStart = { _ -> onDragStart() }, + onDrag = { change, dragAmount -> + change.consume() + onDrag(dragAmount.y) + }, + onDragEnd = { onDragEnd() }, + onDragCancel = { onDragCancel() } + ) + } + ) + } + if (isExpanded) { + content() + } + } + } +} + +// -------------------------------------------------------------------------------- +// Fixed Drag and Drop Logic +// -------------------------------------------------------------------------------- + +@Composable +fun rememberDragDropState( + lazyListState: LazyListState, + onSwap: (Int, Int) -> Unit, + onDragEnd: () -> Unit +): DragDropState { + val scope = rememberCoroutineScope() + return remember(lazyListState, scope) { + DragDropState( + state = lazyListState, + onSwap = onSwap, + onDragFinished = onDragEnd, + scope = scope + ) + } +} + +fun Modifier.dragContainer(dragDropState: DragDropState): Modifier { + return this.pointerInput(dragDropState) { + // Just allows the modifier to exist in the chain, logic is in the handle + } +} + +class DragDropState( + private val state: LazyListState, + private val onSwap: (Int, Int) -> Unit, + private val onDragFinished: () -> Unit, + private val scope: CoroutineScope +) { + var draggingItemIndex by mutableIntStateOf(-1) + private set + + private val _draggingItemOffset = Animatable(0f) + val draggingItemOffset: Float + get() = _draggingItemOffset.value + + private val scrollChannel = Channel(Channel.CONFLATED) + + init { + scope.launch { + for (scrollAmount in scrollChannel) { + if (scrollAmount != 0f) { + state.scrollBy(scrollAmount) + checkSwap() + } + } + } + } + + fun onDragStart(index: Int) { + draggingItemIndex = index + scope.launch { _draggingItemOffset.snapTo(0f) } + } + + fun onDrag(dragAmount: Float) { + if (draggingItemIndex == -1) return + + scope.launch { + _draggingItemOffset.snapTo(_draggingItemOffset.value + dragAmount) + checkSwap() + checkOverscroll() + } + } + + private fun checkSwap() { + val draggedIndex = draggingItemIndex + if (draggedIndex == -1) return + + val visibleItems = state.layoutInfo.visibleItemsInfo + val draggedItemInfo = visibleItems.find { it.index == draggedIndex } ?: return + + // Calculate the visual center of the dragged item + val draggedCenter = draggedItemInfo.offset + (draggedItemInfo.size / 2) + _draggingItemOffset.value + + // Find a target to swap with + // FIX: We strictly check if we have crossed the CENTER of the target item. + // This acts as a hysteresis buffer to prevent flickering at the edges. + val targetItem = visibleItems.find { item -> + item.index != draggedIndex && + draggedCenter > item.offset && + draggedCenter < (item.offset + item.size) + } + + if (targetItem != null) { + // Extra Check: Ensure we have actually crossed the midpoint of the target + val targetCenter = itemCenter(targetItem.offset, targetItem.size) + val isAboveAndMovingDown = draggedIndex < targetItem.index && draggedCenter > targetCenter + val isBelowAndMovingUp = draggedIndex > targetItem.index && draggedCenter < targetCenter + + if (isAboveAndMovingDown || isBelowAndMovingUp) { + val targetIndex = targetItem.index + + // 1. Swap Data + onSwap(draggedIndex, targetIndex) + + // 2. Adjust Offset + // We calculate the physical distance the item moved in the layout (e.g. 150px). + // We subtract this from the current drag offset to keep the item visually stationary under the finger. + val layoutJumpDistance = (targetItem.offset - draggedItemInfo.offset).toFloat() + + scope.launch { + _draggingItemOffset.snapTo(_draggingItemOffset.value - layoutJumpDistance) + } + + // 3. Update Index + draggingItemIndex = targetIndex + } + } + } + + private fun itemCenter(offset: Int, size: Int): Float { + return offset + (size / 2f) + } + + private fun checkOverscroll() { + val draggedIndex = draggingItemIndex + if (draggedIndex == -1) { + scrollChannel.trySend(0f) + return + } + + val layoutInfo = state.layoutInfo + val visibleItems = layoutInfo.visibleItemsInfo + val draggedItemInfo = visibleItems.find { it.index == draggedIndex } ?: return + + val viewportStart = layoutInfo.viewportStartOffset + val viewportEnd = layoutInfo.viewportEndOffset + // Increased threshold slightly for smoother top-edge scrolling + val boundsStart = viewportStart + (viewportEnd * 0.15f) + val boundsEnd = viewportEnd - (viewportEnd * 0.15f) + + val itemTop = draggedItemInfo.offset + _draggingItemOffset.value + val itemBottom = itemTop + draggedItemInfo.size + + val scrollAmount = when { + itemTop < boundsStart -> -10f // Slower, more controlled scroll speed + itemBottom > boundsEnd -> 10f + else -> 0f + } + + scrollChannel.trySend(scrollAmount) + } + + fun onDragEnd() { + resetDrag() + onDragFinished() + } + + fun onDragInterrupted() { + resetDrag() + } + + private fun resetDrag() { + draggingItemIndex = -1 + scrollChannel.trySend(0f) + scope.launch { _draggingItemOffset.snapTo(0f) } + } +} + +// -------------------------------------------------------------------------------- +// Remainder of your existing components +// -------------------------------------------------------------------------------- + +@Composable +private fun LazyWidget( + widgetType: WidgetType, + navController: NavController, + vocabularyViewModel: VocabularyViewModel, + progressViewModel: ProgressViewModel, + onShowCustomExerciseDialog: () -> Unit, + startDailyExercise: (Boolean) -> Unit, + onNavigateToCategoryDetail: (Int) -> Unit, + onNavigateToCategoryList: () -> Unit, + onShowWordPairExerciseDialog: () -> Unit, + onMissingLanguage: (Int) -> Unit +) { + when (widgetType) { + WidgetType.StartButtons -> ModernStartButtons( + onCustomClick = onShowCustomExerciseDialog, + onDailyClick = { isSpelling -> + if (isSpelling) { + onShowWordPairExerciseDialog() + } else { + startDailyExercise(true) + Log.d("DailyExercise", "Starting daily exercise") + } + } + ) + + WidgetType.Status -> LazyStatusWidget( + vocabularyViewModel = vocabularyViewModel, + onNavigateToNew = { navController.navigate("vocabulary_sorting?mode=NEW") }, + onNavigateToDuplicates = { navController.navigate("vocabulary_sorting?mode=DUPLICATES") }, + onNavigateToFaulty = { navController.navigate("vocabulary_sorting?mode=FAULTY") }, + onNavigateToNoGrammar = { navController.navigate("no_grammar_items") }, + onNavigateToMissingLanguage = onMissingLanguage + ) + + else -> { + // Regular widgets that load immediately + when (widgetType) { + WidgetType.Streak -> StreakWidget( + streak = progressViewModel.streak.collectAsState(initial = 0).value, + lastSevenDays = progressViewModel.lastSevenDays.collectAsState().value, + dueTodayCount = progressViewModel.dueTodayCount.collectAsState().value, + wordsCompleted = progressViewModel.totalWordsCompleted.collectAsState().value, + onStatisticsClicked = { navController.navigate("vocabulary_heatmap") } + ) + + WidgetType.WeeklyActivityChart -> WeeklyActivityChartWidget( + weeklyStats = progressViewModel.weeklyActivityStats.collectAsState().value + ) + + WidgetType.AllVocabulary -> AllVocabularyWidget( + vocabularyViewModel = vocabularyViewModel, + onOpenAllVocabulary = { navController.navigate("vocabulary_list/false/null") }, + onStageClicked = { stage -> navController.navigate("vocabulary_list/false/$stage") } + ) + + WidgetType.DueToday -> DueTodayWidget( + vocabularyViewModel = vocabularyViewModel, + onStageClicked = { stage -> navController.navigate("vocabulary_list/false/$stage") } + ) + + WidgetType.CategoryProgress -> CategoryProgressWidget( + onCategoryClicked = { category -> + category?.let { onNavigateToCategoryDetail(it.id) } + }, + onViewAllClicked = onNavigateToCategoryList + ) + + WidgetType.Levels -> LevelWidget( + totalWords = vocabularyViewModel.vocabularyItems.collectAsState().value.size, + learnedWords = vocabularyViewModel.stageStats.collectAsState().value + .firstOrNull { it.stage == VocabularyStage.LEARNED }?.itemCount ?: 0, + onNavigateToProgress = { navController.navigate("language_progress") } + ) + + } + } + } +} + +@Composable +private fun LazyStatusWidget( + vocabularyViewModel: VocabularyViewModel, + onNavigateToNew: () -> Unit, + onNavigateToDuplicates: () -> Unit, + onNavigateToFaulty: () -> Unit, + onNavigateToNoGrammar: () -> Unit, + onNavigateToMissingLanguage: (Int) -> Unit +) { + var isLoading by remember { mutableStateOf(true) } + + // Collect all flows asynchronously + val newItemsCount by vocabularyViewModel.newItemsCount.collectAsState() + val duplicateCount by vocabularyViewModel.duplicateItemsCount.collectAsState() + val faultyItemsCount by vocabularyViewModel.faultyItemsCount.collectAsState() + val itemsWithoutGrammarCount by vocabularyViewModel.itemsWithoutGrammarCount.collectAsState() + val missingLanguageInfo by vocabularyViewModel.missingLanguageInfo.collectAsState() + + LaunchedEffect( + newItemsCount, + duplicateCount, + faultyItemsCount, + itemsWithoutGrammarCount, + missingLanguageInfo + ) { + delay(100) + isLoading = false + } + + if (isLoading) { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 32.dp), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator(modifier = Modifier.padding(16.dp)) + } + } else { + StatusWidget( + vocabularyViewModel = vocabularyViewModel, + onNavigateToNew = onNavigateToNew, + onNavigateToDuplicates = onNavigateToDuplicates, + onNavigateToFaulty = onNavigateToFaulty, + onNavigateToNoGrammar = onNavigateToNoGrammar, + onNavigateToMissingLanguage = onNavigateToMissingLanguage + ) + } +} + +@Preview +@Composable +fun DashboardContentPreview() { + val navController = rememberNavController() + DashboardContent( + navController = navController, + onShowCustomExerciseDialog = {}, + onNavigateToCategoryDetail = {}, + startDailyExercise = {}, + onNavigateToCategoryList = {}, + onShowWordPairExerciseDialog = {}, + ) +} + +@Preview +@Composable +fun WidgetContainerPreview() { + WidgetContainer( + widgetType = WidgetType.Streak, + isExpanded = true, + onExpandedChange = {}, + onDragStart = { } , + onDrag = { }, + onDragEnd = { }, + onDragCancel = { } + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + contentAlignment = Alignment.Center + ) { + Text("Preview Content") + } + } +} diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/ExerciseControls.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/ExerciseControls.kt new file mode 100644 index 0000000..eeb85d5 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/ExerciseControls.kt @@ -0,0 +1,119 @@ +package eu.gaudian.translator.view.vocabulary +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedButton +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.CorrectButton +import eu.gaudian.translator.view.composable.WrongButton + +@Composable +fun ExerciseControls( + state: VocabularyExerciseState?, + onAction: (VocabularyExerciseAction) -> Unit +) { + if (state == null) return // Don't show controls if exercise is finished + + var spellingAnswer by remember { mutableStateOf("") } + + LaunchedEffect(state.item.id) { + spellingAnswer = "" + } + + val isRevealed = state.isRevealed + val isAnswered = state.isCorrect != null + + Column(modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp)) { + // Input field for spelling, only shown before the answer is revealed. + if (!isRevealed && state is VocabularyExerciseState.Spelling) { + AppTextField( + value = spellingAnswer, + onValueChange = { spellingAnswer = it }, + label = { Text(stringResource(R.string.type_the_translation)) }, + modifier = Modifier.fillMaxWidth() + ) + Spacer(modifier = Modifier.height(8.dp)) + } + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceEvenly + ) { + if (!isRevealed) { + when (state) { + is VocabularyExerciseState.Spelling -> { + AppOutlinedButton( + onClick = { onAction(VocabularyExerciseAction.Submit(spellingAnswer)) }, + modifier = Modifier.fillMaxWidth() + ) { + Icon(AppIcons.Check, contentDescription = stringResource(R.string.text_check)) + Spacer(modifier = Modifier.padding(4.dp)) + Text(stringResource(R.string.text_check)) + } + } + is VocabularyExerciseState.Guessing -> { + AppOutlinedButton( + onClick = { onAction(VocabularyExerciseAction.Reveal) }, + modifier = Modifier.fillMaxWidth() + ) { + Icon(AppIcons.Sync, contentDescription = stringResource(R.string.flip_card)) + Spacer(modifier = Modifier.padding(4.dp)) + Text(stringResource(R.string.flip_card)) + } + } + + else -> { + } + } + } + else { + if (isAnswered) { + + AppOutlinedButton( + onClick = { onAction(VocabularyExerciseAction.Next) }, + modifier = Modifier.fillMaxWidth() + ) { + Text(stringResource(R.string.next_card)) + } + } else { + + if (state is VocabularyExerciseState.Guessing) { + Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) { + WrongButton( + onClick = { onAction(VocabularyExerciseAction.Submit(false)) }, + modifier = Modifier.weight(1f) + ) { + Icon(AppIcons.Close, contentDescription = stringResource(R.string.incorrect)) + Text(stringResource(R.string.label_wrong)) + } + CorrectButton( + onClick = { onAction(VocabularyExerciseAction.Submit(true)) }, + modifier = Modifier.weight(1f) + ) { + Icon(AppIcons.Check, contentDescription = stringResource(R.string.label_correct)) + Text(stringResource(R.string.right)) + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/ExerciseProgressIndicator.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/ExerciseProgressIndicator.kt new file mode 100644 index 0000000..8f06a25 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/ExerciseProgressIndicator.kt @@ -0,0 +1,179 @@ +package eu.gaudian.translator.view.vocabulary + + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.view.composable.AppIcons + +@Composable +fun ExerciseProgressIndicator( + correctAnswers: Int, + wrongAnswers: Int, + totalItems: Int, + onClose: () -> Unit, + modifier: Modifier = Modifier, + correctColor: Color = MaterialTheme.colorScheme.primary, + wrongColor: Color = MaterialTheme.colorScheme.error, + trackColor: Color = MaterialTheme.colorScheme.outline +) { + val targetCorrectFraction = if (totalItems > 0) correctAnswers.toFloat() / totalItems else 0f + val targetWrongFraction = if (totalItems > 0) wrongAnswers.toFloat() / totalItems else 0f + + val animatedCorrectFraction by animateFloatAsState(targetValue = targetCorrectFraction, label = "correctAnimation") + val animatedWrongFraction by animateFloatAsState(targetValue = targetWrongFraction, label = "wrongAnimation") + val totalProgressFraction = animatedCorrectFraction + animatedWrongFraction + + Row( + modifier = modifier + .fillMaxWidth() + .padding(horizontal = 8.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + IconButton(onClick = onClose, modifier = Modifier.size(28.dp)) { + Icon( + imageVector = AppIcons.Close, + contentDescription = stringResource(R.string.label_close_exercise), + modifier = Modifier.size(36.dp), + tint = MaterialTheme.colorScheme.onSurface + ) + } + + Box( + modifier = Modifier + .weight(1f) + .height(32.dp), + contentAlignment = Alignment.Center + ) { + Canvas( + modifier = Modifier + .matchParentSize() + .clip(RoundedCornerShape(8.dp)) + ) { + drawRect(color = trackColor) + drawRect( + color = wrongColor, + size = Size(width = size.width * totalProgressFraction, height = size.height) + ) + drawRect( + color = correctColor, + size = Size(width = size.width * animatedCorrectFraction, height = size.height) + ) + } + + ProgressContent( + correctAnswers = correctAnswers, + wrongAnswers = wrongAnswers, + color = MaterialTheme.colorScheme.onPrimary + ) + + + } + + Text( + text = "/ $totalItems", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + fontWeight = FontWeight.SemiBold + ) + } +} + +@Composable +private fun ProgressContent(correctAnswers: Int, wrongAnswers: Int, color: Color) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 10.dp), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(4.dp) + ) { + Icon( + imageVector = AppIcons.Check, + contentDescription = stringResource(R.string.correct_answers), + tint = color, + modifier = Modifier.size(16.dp, 16.dp) + ) + Text( + text = "$correctAnswers", + color = color, + fontSize = 14.sp, + fontWeight = FontWeight.Bold + ) + } + + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(4.dp) + ) { + Text( + text = "$wrongAnswers", + color = color, + fontSize = 14.sp, + fontWeight = FontWeight.Bold + ) + Icon( + imageVector = AppIcons.Cancel, + contentDescription = stringResource(R.string.label_wrong_answers), + tint = color, + modifier = Modifier.size(16.dp, 16.dp) + ) + } + } +} + + +@ThemePreviews +@Composable +private fun ExerciseProgressIndicatorPreview() { + Column(verticalArrangement = Arrangement.spacedBy(16.dp), modifier = Modifier.padding(16.dp)) { + ExerciseProgressIndicator( + correctAnswers = 0, + wrongAnswers = 0, + totalItems = 20, + onClose = {} + ) + ExerciseProgressIndicator( + correctAnswers = 5, + wrongAnswers = 2, + totalItems = 20, + onClose = {} + ) + ExerciseProgressIndicator( + correctAnswers = 10, + wrongAnswers = 8, + totalItems = 20, + onClose = {} + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/LanguageProgressScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/LanguageProgressScreen.kt new file mode 100644 index 0000000..5615bd6 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/LanguageProgressScreen.kt @@ -0,0 +1,372 @@ +package eu.gaudian.translator.view.vocabulary + +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.RepeatMode +import androidx.compose.animation.core.animateFloat +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.infiniteRepeatable +import androidx.compose.animation.core.rememberInfiniteTransition +import androidx.compose.animation.core.tween +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.scale +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.StrokeCap +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.LanguageLevels +import eu.gaudian.translator.model.MyAppLanguageLevel +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar + +@Composable +fun LanguageProgressScreen(wordsLearned: Int, navController: NavController) { + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.your_language_journey)) }, + onNavigateBack = { navController.popBackStack() } + ) + }, + content = { innerPadding -> + LevelsRoadmap( + wordsLearned = wordsLearned, + modifier = Modifier.padding(innerPadding) + ) + } + ) +} + +@Composable +private fun LevelsRoadmap(wordsLearned: Int, modifier: Modifier = Modifier) { + val allLevels = LanguageLevels.all + val currentLevel = LanguageLevels.getLevelForWords(wordsLearned) + val nextLevel = LanguageLevels.getNextLevel(wordsLearned) + var selectedLevelForDialog by remember { mutableStateOf(null) } + + Box(modifier = modifier.fillMaxSize()) { + LazyColumn( + contentPadding = PaddingValues(horizontal = 16.dp, vertical = 24.dp) + ) { + item { + JourneyHeader(currentLevel, nextLevel, wordsLearned) + Spacer(modifier = Modifier.height(32.dp)) + } + + items(allLevels.size) { index -> + val level = allLevels[index] + RoadmapNode( + level = level, + isUnlocked = wordsLearned >= level.wordsKnown, + isCurrent = level == currentLevel, + isFirst = index == 0, + isLast = index == allLevels.lastIndex, + onClick = { + if (wordsLearned >= level.wordsKnown) { + selectedLevelForDialog = level + } + } + ) + } + } + + // Show the dialog when a level is selected + selectedLevelForDialog?.let { level -> + LevelDetailDialog( + level = level, + onDismiss = { selectedLevelForDialog = null } + ) + } + } +} + +@Composable +private fun JourneyHeader( + currentLevel: MyAppLanguageLevel, + nextLevel: MyAppLanguageLevel?, + wordsLearned: Int +) { + val progress = if (nextLevel != null && nextLevel.wordsKnown > currentLevel.wordsKnown) { + (wordsLearned - currentLevel.wordsKnown).toFloat() / (nextLevel.wordsKnown - currentLevel.wordsKnown).toFloat() + } else { + 1f + } + val animatedProgress by animateFloatAsState( + targetValue = progress.coerceIn(0f, 1f), + animationSpec = tween(1000, easing = FastOutSlowInEasing), + label = "ProgressAnimation" + ) + + Card( + modifier = Modifier.fillMaxWidth(), + elevation = CardDefaults.cardElevation(4.dp), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceVariant) + ) { + Column(modifier = Modifier.padding(16.dp)) { + Text( + text = stringResource(R.string.current_level), + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.primary + ) + Spacer(modifier = Modifier.height(4.dp)) + Text( + text = stringResource(id = currentLevel.nameResId), + style = MaterialTheme.typography.headlineSmall, + fontWeight = FontWeight.Bold + ) + Spacer(modifier = Modifier.height(16.dp)) + + if (nextLevel != null) { + Text( + text = stringResource(R.string.next_, stringResource(id = nextLevel.nameResId)), + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.SemiBold + ) + Spacer(modifier = Modifier.height(8.dp)) + LinearProgressIndicator( + progress = { animatedProgress }, + modifier = Modifier + .fillMaxWidth() + .height(8.dp) + .clip(CircleShape), + strokeCap = StrokeCap.Round + ) + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) { + Text( + text = stringResource(R.string.words_2d, currentLevel.wordsKnown), + style = MaterialTheme.typography.labelSmall + ) + Text( + text = stringResource(R.string.words, nextLevel.wordsKnown), + style = MaterialTheme.typography.labelSmall + ) + } + } else { + Text( + text = stringResource(R.string.text_mastered_final_level), + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.SemiBold, + color = MaterialTheme.colorScheme.primary + ) + } + } + } +} + +@Composable +private fun RoadmapNode( + level: MyAppLanguageLevel, + isUnlocked: Boolean, + isCurrent: Boolean, + isFirst: Boolean, + isLast: Boolean, + onClick: () -> Unit +) { + val pathColor = if (isUnlocked) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.surfaceVariant + @Suppress("HardCodedStringLiteral") val infiniteTransition = rememberInfiniteTransition(label = "pulse_transition") + @Suppress("HardCodedStringLiteral") val pulseScale by if (isCurrent) { + infiniteTransition.animateFloat( + initialValue = 1f, + targetValue = 1.15f, + animationSpec = infiniteRepeatable( + animation = tween(800, easing = FastOutSlowInEasing), + repeatMode = RepeatMode.Reverse + ), + label = "pulse_scale" + ) + } else { + animateFloatAsState(targetValue = 1f, label = "static_scale") + } + + Row(modifier = Modifier.height(IntrinsicSize.Min)) { + // Path and Icon Column + Column( + modifier = Modifier.width(48.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Canvas(modifier = Modifier + .weight(0.4f) + .fillMaxWidth()) { + if (!isFirst) { + drawLine( + color = pathColor, + start = Offset(center.x, 0f), + end = Offset(center.x, size.height), + strokeWidth = 3.dp.toPx(), + cap = StrokeCap.Round + ) + } + } + Box( + modifier = Modifier + .size(48.dp) + .scale(pulseScale) + .background( + if (isCurrent) MaterialTheme.colorScheme.primaryContainer else Color.Transparent, + CircleShape + ) + .border(width = 3.dp, color = pathColor, shape = CircleShape), + contentAlignment = Alignment.Center + ) { + Icon( + painter = painterResource(id = level.iconResId), + contentDescription = stringResource(id = level.nameResId), + modifier = Modifier.size(28.dp), + tint = if (isUnlocked) Color.Unspecified else MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f) + ) + } + + // Line below the icon + Canvas(modifier = Modifier + .weight(0.6f) + .fillMaxWidth()) { + if (!isLast) { + drawLine( + color = pathColor, + start = Offset(center.x, 0f), + end = Offset(center.x, size.height), + strokeWidth = 3.dp.toPx(), + cap = StrokeCap.Round + ) + } + } + } + + // Card with level details + Card( + modifier = Modifier + .padding(start = 16.dp, bottom = 24.dp) + .align(Alignment.CenterVertically) + .clickable(enabled = isUnlocked, onClick = onClick), + elevation = CardDefaults.cardElevation(if (isUnlocked) 4.dp else 1.dp), + colors = CardDefaults.cardColors( + containerColor = if (isUnlocked) MaterialTheme.colorScheme.surfaceContainer else MaterialTheme.colorScheme.surface.copy(alpha = 0.5f) + ) + ) { + Column(modifier = Modifier.padding(16.dp)) { + Row(verticalAlignment = Alignment.CenterVertically) { + Column(modifier = Modifier.weight(1f)) { + Text( + text = stringResource(id = level.nameResId), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold + ) + Text( + text = stringResource(R.string.words_2d, level.wordsKnown), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.primary + ) + } + if (isUnlocked) { + Icon( + imageVector = AppIcons.CheckCircle, + contentDescription = stringResource(R.string.cd_achieved), + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(24.dp) + ) + } + } + if (isUnlocked) { + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stringResource(id = level.descriptionResId), + style = MaterialTheme.typography.bodySmall, + lineHeight = 16.sp + ) + } + } + } + } +} + +@Composable +private fun LevelDetailDialog(level: MyAppLanguageLevel, onDismiss: () -> Unit) { + AppDialog(onDismissRequest = onDismiss) { + Surface( + shape = MaterialTheme.shapes.large, + color = MaterialTheme.colorScheme.surface, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + ) { + Column( + modifier = Modifier.padding(24.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Icon( + painter = painterResource(id = level.iconResId), + contentDescription = null, + modifier = Modifier.size(120.dp), + tint = Color.Unspecified + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + text = stringResource(id = level.nameResId), + style = MaterialTheme.typography.headlineMedium, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stringResource(R.string.words_required, level.wordsKnown), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.primary + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + text = stringResource(id = level.descriptionResId), + style = MaterialTheme.typography.bodyMedium, + textAlign = TextAlign.Center + ) + } + } + } +} + +@Preview(showBackground = true) +@Composable +fun LanguageProgressScreenPreview() { + LanguageProgressScreen(wordsLearned = 50000, navController = NavController(androidx.compose.ui.platform.LocalContext.current)) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/MainVocabularyScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/MainVocabularyScreen.kt new file mode 100644 index 0000000..a8cea1c --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/MainVocabularyScreen.kt @@ -0,0 +1,452 @@ +@file:Suppress("HardCodedStringLiteral", "AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.vocabulary + +import android.app.Application +import androidx.activity.ComponentActivity +import androidx.activity.compose.LocalActivity +import androidx.compose.animation.core.animateDpAsState +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.layout.onSizeChanged +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavController +import androidx.navigation.NavGraph.Companion.findStartDestination +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.currentBackStackEntryAsState +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Exercise +import eu.gaudian.translator.model.MatchingPairsQuestion +import eu.gaudian.translator.model.Question +import eu.gaudian.translator.model.VocabularyCategory +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedCard +import eu.gaudian.translator.view.composable.AppSlider +import eu.gaudian.translator.view.composable.AppTabLayout +import eu.gaudian.translator.view.composable.OptionItemSwitch +import eu.gaudian.translator.view.composable.TabItem +import eu.gaudian.translator.view.dialogs.StartExerciseDialog +import eu.gaudian.translator.view.dialogs.VocabularyMenu +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.ExerciseViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch + + +@Suppress("HardCodedStringLiteral") +enum class VocabularyTab( + override val title: String, + override val icon: ImageVector, + val route: String +) : TabItem { + Dashboard(title = "title_dashboard", icon = AppIcons.Dashboard, route = "dashboard"), + Statistics(title = "label_all_vocabulary", icon = AppIcons.BarChart, route = "statistics") +} + +//Used to avoid the warning of unused variables in strings.xml + +@Suppress("unused", "HardCodedStringLiteral", "UnusedVariable") +@Composable +fun Dummy() { + + val dummy = listOf( + stringResource(id = R.string.title_dashboard), + stringResource(id = R.string.label_all_vocabulary), + ) +} + +@Composable +fun MainVocabularyScreen( + navController: NavController +) { + + val activity = LocalActivity.current as ComponentActivity + val vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(activity.application as Application) + val categoryViewModel: CategoryViewModel = viewModel(viewModelStoreOwner = activity) + val exerciseViewModel: ExerciseViewModel = viewModel(viewModelStoreOwner = activity) + val vocabularyNavController = rememberNavController() + val coroutineScope = rememberCoroutineScope() + var showCustomExerciseDialog by remember { mutableStateOf(false) } + var startDailyExercise by remember { mutableStateOf(false) } + var showWordPairExerciseDialog by remember { mutableStateOf(false) } + + // Word Pair settings and temporary selections + var showWordPairSettingsDialog by remember { mutableStateOf(false) } + var tempWpCategories by remember { mutableStateOf>(emptyList()) } + var tempWpStages by remember { mutableStateOf>(emptyList()) } + var tempWpLanguageIds by remember { mutableStateOf>(emptyList()) } + + var wpQuestionCount by remember { mutableIntStateOf(5) } + var wpShuffleQuestions by remember { mutableStateOf(true) } + var wpShuffleWordOrder by remember { mutableStateOf(true) } + var wpTrainingMode by remember { mutableStateOf(false) } + var wpDueTodayOnly by remember { mutableStateOf(false) } + + if (showCustomExerciseDialog) { + StartExerciseDialog( + vocabularyViewModel = vocabularyViewModel, + categoryViewModel = categoryViewModel, + onDismiss = { showCustomExerciseDialog = false }, + onConfirm = { categories, stages, languageIds -> + showCustomExerciseDialog = false + val categoryIds = categories.joinToString(",") { it.id.toString() } + val stageNames = stages.joinToString(",") { it.name } + val languageIdsStr = languageIds.joinToString(",") { it.toString() } + @Suppress("HardCodedStringLiteral") + navController.navigate("vocabulary_exercise/false?categories=$categoryIds&stages=$stageNames&languages=$languageIdsStr") + } + ) + } + + if (showWordPairExerciseDialog) { + StartExerciseDialog( + vocabularyViewModel = vocabularyViewModel, + categoryViewModel = categoryViewModel, + onDismiss = { showWordPairExerciseDialog = false }, + onConfirm = { categories, stages, languageIds -> + // Store selections and open settings dialog instead of starting immediately + tempWpCategories = categories + tempWpStages = stages + tempWpLanguageIds = languageIds + showWordPairExerciseDialog = false + showWordPairSettingsDialog = true + } + ) + } + + val textWordPairSettings = stringResource(R.string.text_word_pair_settings) + + // Settings dialog for Word Pair Exercise + if (showWordPairSettingsDialog) { + AppDialog( + onDismissRequest = { showWordPairSettingsDialog = false }, + title = { Text(textWordPairSettings) } + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(8.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + // Amount of questions + Text( + stringResource( + R.string.text_amount_of_questions_2d, + wpQuestionCount + )) + AppSlider( + value = wpQuestionCount.toFloat(), + onValueChange = { wpQuestionCount = it.toInt().coerceIn(1, 20) }, + valueRange = 1f..20f, + steps = 18 + ) + + // Toggles + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) { + OptionItemSwitch( + title = stringResource(R.string.text_shuffle_questions), + checked = wpShuffleQuestions, + onCheckedChange = { wpShuffleQuestions = it }, + ) + } + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) { + OptionItemSwitch( + title = stringResource(R.string.text_shuffle_card_order), + description = stringResource(R.string.text_swap_sides), + checked = wpShuffleWordOrder, + onCheckedChange = { wpShuffleWordOrder = it }, + ) + } + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) { + OptionItemSwitch( + title = stringResource(R.string.tetx_training_mode), + description = stringResource(R.string.text_no_progress), + checked = wpTrainingMode, + onCheckedChange = { wpTrainingMode = it }, + ) + } + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) { + OptionItemSwitch( + title = stringResource(R.string.text_due_today_only), + checked = wpDueTodayOnly, + onCheckedChange = { wpDueTodayOnly = it }, + ) + } + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), + horizontalArrangement = Arrangement.End + ) { + TextButton(onClick = { showWordPairSettingsDialog = false }) { + Text(stringResource(id = R.string.label_cancel)) + } + val textMatchThePairs = stringResource(R.string.text_match_the_pairs) + val textWordPairExercise = stringResource(R.string.text_word_pair_exercise) + val textTrainingModeDescription = stringResource(R.string.text_training_mode_description) + val labelTrainingMode = stringResource(R.string.label_training_mode) + TextButton(onClick = { + showWordPairSettingsDialog = false + // Build a Word Pair Exercise using matching pairs from selected vocabulary with options + coroutineScope.launch { + val items = vocabularyViewModel.filterVocabularyItems( + languages = tempWpLanguageIds, + query = null, + categoryIds = tempWpCategories.map { it.id }, + stage = tempWpStages.firstOrNull(), + sortOrder = VocabularyViewModel.SortOrder.NEWEST_FIRST, + dueTodayOnly = wpDueTodayOnly + ).first() + + val maxPairsPerQuestion = 5 + var pairsList = items.mapNotNull { item -> + val k = item.wordFirst.trim() + val v = item.wordSecond.trim() + if (k.isNotBlank() && v.isNotBlank()) k to v else null + } + if (wpShuffleWordOrder) { + pairsList = pairsList.map { (a, b) -> if ((0..1).random() == 0) a to b else b to a } + } + if (pairsList.isEmpty()) return@launch + + + val shuffledPairs = if (wpShuffleQuestions) pairsList.shuffled() else pairsList + + val chunked = shuffledPairs.chunked(maxPairsPerQuestion) + val limitedChunks = chunked.take(wpQuestionCount) + val questions = mutableListOf() + var qId = 1 + limitedChunks.forEach { chunk -> + if (chunk.size >= 2) { + questions.add( + MatchingPairsQuestion( + id = qId++, + name = textMatchThePairs, + pairs = chunk.toMap() + ) + ) + } + } + if (questions.isEmpty()) return@launch + + @Suppress("HardCodedStringLiteral") val exercise = Exercise( + id = "wordpair-" + System.currentTimeMillis().toString(), + title = textWordPairExercise, + questions = questions.map { it.id }, + contextTitle = if (wpTrainingMode) labelTrainingMode else null, + contextText = if (wpTrainingMode) textTrainingModeDescription else null + ) + exerciseViewModel.startAdHocExercise(exercise, questions) + @Suppress("HardCodedStringLiteral") + navController.navigate("exercise_session") + } + }) { + Text(stringResource(id = R.string.label_start_exercise)) + } + } + } + } + } + + // Use LaunchedEffect to handle the navigation side effect + LaunchedEffect(startDailyExercise) { + if (startDailyExercise) { + @Suppress("HardCodedStringLiteral") + Log.d("DailyExercise", "Starting daily exercise") + @Suppress("HardCodedStringLiteral") + navController.navigate("vocabulary_exercise/false?categories=&stages=&languages=&dailyOnly=true") + startDailyExercise = false + } + } + + val navBackStackEntry by vocabularyNavController.currentBackStackEntryAsState() + val currentRoute = navBackStackEntry?.destination?.route + val selectedTab = remember(currentRoute) { + VocabularyTab.entries.find { it.route == currentRoute } ?: VocabularyTab.Dashboard + } + + val repoEmpty = + vocabularyViewModel.vocabularyItems.collectAsState(initial = emptyList()).value.isEmpty() + + if (repoEmpty) { + NoVocabularyScreen() + return + } + + Box(modifier = Modifier.fillMaxSize()) { + Column(modifier = Modifier.fillMaxSize()) { + AppTabLayout( + tabs = VocabularyTab.entries, + selectedTab = selectedTab, + onTabSelected = { tab -> + vocabularyNavController.navigate(tab.route) { + popUpTo(vocabularyNavController.graph.findStartDestination().id) { + saveState = true + } + launchSingleTop = true + restoreState = true + } + } + ) + + NavHost( + navController = vocabularyNavController, + startDestination = VocabularyTab.Dashboard.route, + modifier = Modifier.weight(1f) + ) { + composable(VocabularyTab.Dashboard.route) { + DashboardContent( + navController = navController, + onShowCustomExerciseDialog = { showCustomExerciseDialog = true }, + onNavigateToCategoryDetail = { categoryId -> + navController.navigate("category_detail/$categoryId") + }, + startDailyExercise = { startDailyExercise = true }, + onNavigateToCategoryList = { + navController.navigate("category_list_screen") + }, + onShowWordPairExerciseDialog = { showWordPairExerciseDialog = true } + ) + } + composable(VocabularyTab.Statistics.route) { + StatisticsContent(navController = navController) + } + composable("category_detail/{categoryId}") { backStackEntry -> + + val categoryId = backStackEntry.arguments?.getString("categoryId")?.toIntOrNull() + + if (categoryId != null) { + CategoryDetailScreen( + categoryId = categoryId, + onBackClick = { vocabularyNavController.popBackStack() }, + onNavigateToItem = { item -> + navController.navigate("vocabulary_detail/${item.id}") + }, + navController = navController as NavHostController + ) + } + } + composable("vocabulary_exercise/{isSpelling}") { backStackEntry -> + backStackEntry.arguments?.getString("isSpelling")?.toBooleanStrict() ?: false + VocabularyExerciseHostScreen( + categoryIdsAsJson = null, + stageNamesAsJson = null, + languageIdsAsJson = null, + onClose = { navController.popBackStack() }, + navController = navController, + dailyOnlyAsJson = null + ) + } + composable("vocabulary_exercise/{dailyOnly}") { backStackEntry -> + backStackEntry.arguments?.getString("dailyOnly")?.toBooleanStrict() ?: false + VocabularyExerciseHostScreen( + categoryIdsAsJson = null, + stageNamesAsJson = null, + languageIdsAsJson = null, + onClose = { navController.popBackStack() }, + navController = navController, + dailyOnlyAsJson = "{\"dailyOnly\": true}" + ) + } + } + } + + var menuHeightPx by remember { mutableIntStateOf(0) } + val density = LocalDensity.current + val menuHeightDp = (menuHeightPx / density.density).dp + val animatedBottomPadding by animateDpAsState(targetValue = 16.dp + 8.dp + menuHeightDp, label = "fabBottomPadding") + + Column( + modifier = Modifier + .align(Alignment.BottomEnd) + .padding(16.dp), + horizontalAlignment = Alignment.End + ) { + VocabularyMenu(modifier = Modifier.onSizeChanged { menuHeightPx = it.height }) + } + + // Place the FAB separately and animate its bottom padding based on the menu height + FloatingActionButton( + onClick = { showCustomExerciseDialog = true }, + containerColor = MaterialTheme.colorScheme.primary, + contentColor = MaterialTheme.colorScheme.onPrimary, + modifier = Modifier + .align(Alignment.BottomEnd) + .padding(end = 16.dp, bottom = animatedBottomPadding) + ) { + Icon( + imageVector = AppIcons.Quiz, + contentDescription = stringResource(R.string.cd_start_exercise) + ) + } + } +} + +@Composable +fun StatisticsContent( + navController: NavController +) { + + AppOutlinedCard { + VocabularyListScreen( + categoryId = null, + showDueTodayOnly = false, + onNavigateToItem = { item -> + navController.navigate("vocabulary_detail/${item.id}") + }, + onNavigateBack = null, + navController = navController as NavHostController, + enableNavigationButtons = true + ) + } +} + +@ThemePreviews +@Composable +fun VocabularyDashboardScreenPreview() { + val navController = rememberNavController() + MainVocabularyScreen(navController = navController) +} + + +@ThemePreviews +@Composable +fun StatisticsContentPreview() { + val navController = rememberNavController() + StatisticsContent(navController = navController) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/NoGrammarItemsScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/NoGrammarItemsScreen.kt new file mode 100644 index 0000000..bbaa3c3 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/NoGrammarItemsScreen.kt @@ -0,0 +1,213 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.vocabulary + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.Text +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppSlider +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.coroutines.launch + +@Composable +fun NoGrammarItemsScreen( + navController: NavController, + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(androidx.compose.ui.platform.LocalContext.current.applicationContext as android.app.Application) +) { + val itemsWithoutGrammar by vocabularyViewModel.allItemsWithoutGrammar.collectAsState() + val isGenerating by vocabularyViewModel.isGenerating.collectAsState() + + var showFetchGrammarDialog by remember { mutableStateOf(false) } + + @Suppress("UnusedVariable") val onClose = { navController.popBackStack() } + + if (itemsWithoutGrammar.isEmpty() && !isGenerating) { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + AppTopAppBar( + title = { Text(stringResource(R.string.title_items_without_grammar)) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + }, + ) + Box( + modifier = Modifier + .fillMaxSize() + .padding(16.dp), + contentAlignment = Alignment.Center + ) { + Text( + text = stringResource(R.string.no_items_without_grammar), + textAlign = TextAlign.Center, + style = MaterialTheme.typography.bodyLarge, + ) + } + } + } else { + // Use the generic VocabularyListScreen to display the items + VocabularyListScreen( + itemsToShow = itemsWithoutGrammar, + onNavigateToItem = { item -> + @Suppress("HardCodedStringLiteral") + navController.navigate("vocabulary_detail/${item.id}") + }, + onNavigateBack = { navController.popBackStack() } + ) + } + + Box(modifier = Modifier + .fillMaxSize() + .padding(bottom = 80.dp), contentAlignment = Alignment.BottomCenter) { + if (itemsWithoutGrammar.isNotEmpty() && !isGenerating) { + AppButton(onClick = { showFetchGrammarDialog = true }) { + Text(text = stringResource(R.string.fetch_all_grammar_infos)) + } + } + } + + if (showFetchGrammarDialog) { + val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) + val scope = rememberCoroutineScope() + + ModalBottomSheet( + onDismissRequest = { showFetchGrammarDialog = false }, + sheetState = sheetState + ) { + if (itemsWithoutGrammar.size <= 2) { + // Directly fetch all items without slider for 1 or 2 items + val itemsToFetch = itemsWithoutGrammar + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + .padding(bottom = 16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = stringResource(R.string.fetching_for_d_items, itemsToFetch.size), + style = MaterialTheme.typography.titleMedium + ) + Spacer(Modifier.height(24.dp)) + AppButton( + onClick = { + scope.launch { + showFetchGrammarDialog = false + vocabularyViewModel.fetchAndApplyGrammaticalDetailsForList(itemsToFetch) + } + }, + modifier = Modifier.fillMaxWidth(), + enabled = !isGenerating + ) { + if (isGenerating) { + CircularProgressIndicator(modifier = Modifier.size(24.dp)) + } else { + Text(stringResource(R.string.start_fetching)) + } + } + } + } else { + // Use slider for more than 2 items + var sliderValue by remember { mutableFloatStateOf(1f) } + val itemsToFetch = itemsWithoutGrammar.take(sliderValue.toInt()) + + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + .padding(bottom = 16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = stringResource(R.string.select_number_of_items_to_fetch), + style = MaterialTheme.typography.titleMedium + ) + Spacer(Modifier.height(16.dp)) + AppSlider( + value = sliderValue, + onValueChange = { sliderValue = it }, + valueRange = 1f..minOf(50f, itemsWithoutGrammar.size.toFloat()), + steps = minOf(50, itemsWithoutGrammar.size) - 2, + modifier = Modifier.fillMaxWidth() + ) + Text( + text = stringResource(R.string.fetching_for_d_items, sliderValue.toInt()), + style = MaterialTheme.typography.bodyMedium + ) + Spacer(Modifier.height(24.dp)) + AppButton( + onClick = { + scope.launch { + showFetchGrammarDialog = false + vocabularyViewModel.fetchAndApplyGrammaticalDetailsForList(itemsToFetch) + } + }, + modifier = Modifier.fillMaxWidth(), + enabled = !isGenerating + ) { + if (isGenerating) { + CircularProgressIndicator(modifier = Modifier.size(24.dp)) + } else { + Text(stringResource(R.string.start_fetching)) + } + } + } + } + } + } + + // A small indicator to show that the process is ongoing + if (isGenerating) { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + Card( + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceVariant) + ) { + Column( + modifier = Modifier.padding(24.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + CircularProgressIndicator() + Text(stringResource(R.string.fetching_grammar_details)) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/NoVocabularyScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/NoVocabularyScreen.kt new file mode 100644 index 0000000..1100ac4 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/NoVocabularyScreen.kt @@ -0,0 +1,107 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.vocabulary + +import android.app.Application +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.LocalConnectionConfigured +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.dialogs.AddVocabularyDialog +import eu.gaudian.translator.view.dialogs.ImportVocabularyDialog +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.StatusViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel + +@Composable +fun NoVocabularyScreen(){ + + val application = LocalContext.current.applicationContext as Application + val statusViewModel = StatusViewModel.getInstance(application) + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val vocabularyViewModel = VocabularyViewModel.getInstance(application) + val categoryViewModel = CategoryViewModel.getInstance(application) + + + var showAddVocabularyDialog by remember { mutableStateOf(false) } + var showImportVocabularyDialog by remember { mutableStateOf(false) } + + val connectionConfigured = LocalConnectionConfigured.current + + + if (showAddVocabularyDialog) { + AddVocabularyDialog( + statusViewModel = statusViewModel, + languageViewModel = languageViewModel, + vocabularyViewModel = vocabularyViewModel, + onDismissRequest = { showAddVocabularyDialog = false } + ) + } + + if (showImportVocabularyDialog) { + ImportVocabularyDialog( + languageViewModel = languageViewModel, + categoryViewModel = categoryViewModel, + vocabularyViewModel = vocabularyViewModel, + onDismiss = { showImportVocabularyDialog = false } + ) + } + + Column( + modifier = Modifier + .fillMaxSize() + .padding(16.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + + Image( + modifier = Modifier.size(200.dp), + painter = painterResource(id = R.drawable.ic_empty), + contentDescription = stringResource(id = R.string.text_vocab_empty) + ) + Spacer(modifier = Modifier.size(16.dp)) + Text( + text = stringResource(id = R.string.text_vocab_empty), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onBackground, + textAlign = TextAlign.Center + ) + Spacer(modifier = Modifier.size(16.dp)) + + AppButton(modifier = Modifier.fillMaxWidth(), onClick = { showAddVocabularyDialog = true }) { + Text(stringResource(R.string.label_add_vocabulary)) + } + if(connectionConfigured) { + AppButton(modifier = Modifier.fillMaxWidth(), onClick = { showImportVocabularyDialog = true }) { + Text(stringResource(R.string.label_create_vocabulary_with_ai)) + } + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/ResultScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/ResultScreen.kt new file mode 100644 index 0000000..25b26da --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/ResultScreen.kt @@ -0,0 +1,267 @@ +package eu.gaudian.translator.view.vocabulary + +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.DividerDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedButton + +@Composable +fun ResultScreen( + score: Int, + wrongAnswers: Int, + totalItems: Int, + onRestart: () -> Unit, + onRetryWrong: (List) -> Unit, + onClose: () -> Unit +) { + val percentage = if (totalItems > 0) score.toFloat() / totalItems.toFloat() else 0f + + val animatedProgress by animateFloatAsState( + targetValue = percentage, + animationSpec = tween(durationMillis = 1200, easing = FastOutSlowInEasing), + label = "ResultProgressAnimation" + ) + + Scaffold( + topBar = { + TopAppBar( + title = { + Text( + if (wrongAnswers > 0) { + stringResource(R.string.text_repeat_wrong_guesses) + } else { + stringResource(R.string.result) + } + ) + }, + actions = { + IconButton(onClick = onClose) { + Icon(AppIcons.Close, contentDescription = stringResource(R.string.label_close)) + } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Color.Transparent + ) + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceAround + ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text( + text = stringResource(R.string.exercise_complete), + style = MaterialTheme.typography.headlineLarge, + fontWeight = FontWeight.Bold + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stringResource(R.string.here_s_how_you_did), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + + Box(contentAlignment = Alignment.Center, modifier = Modifier.size(220.dp)) { + CircularProgressIndicator( + progress = { animatedProgress }, + modifier = Modifier.fillMaxSize(), + strokeWidth = 16.dp, + color = MaterialTheme.colorScheme.primary, + trackColor = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.5f), + ) + Text( + text = "${(percentage * 100).toInt()}%", + style = MaterialTheme.typography.displayMedium, + fontWeight = FontWeight.Bold + ) + } + + Card( + modifier = Modifier.fillMaxWidth(), + elevation = CardDefaults.cardElevation(defaultElevation = 2.dp), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface) + ) { + Column(modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { + ResultStatRow( + icon = AppIcons.Done, + label = stringResource(R.string.label_correct), + value = "$score / $totalItems", + color = MaterialTheme.colorScheme.primary + ) + HorizontalDivider(Modifier, DividerDefaults.Thickness, DividerDefaults.color) + ResultStatRow( + icon = AppIcons.Clear, + label = stringResource(R.string.label_wrong), + value = "$wrongAnswers", + color = MaterialTheme.colorScheme.error + ) + } + } + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + if (wrongAnswers > 0) { + // Show retry button for wrong answers + AppOutlinedButton( + onClick = { + onRetryWrong(emptyList()) // ViewModel handles filtering + }, + modifier = Modifier + .weight(1f) + .height(56.dp) + ) { + Icon(AppIcons.Refresh, contentDescription = null, modifier = Modifier.size(ButtonDefaults.IconSize)) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Text(stringResource(R.string.text_repeat_wrong)) + } + // Show restart button as secondary option + AppButton( + onClick = onRestart, + modifier = Modifier + .weight(1f) + .height(56.dp) + ) { + Text(stringResource(R.string.text_start_over)) + } + } else { + // Show regular try again and finish buttons when no wrong answers + AppOutlinedButton( + onClick = onRestart, + modifier = Modifier + .weight(1f) + .height(56.dp) + ) { + Icon(AppIcons.Refresh, contentDescription = null, modifier = Modifier.size(ButtonDefaults.IconSize)) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Text(stringResource(R.string.try_again)) + } + AppButton( + onClick = onClose, + modifier = Modifier + .weight(1f) + .height(56.dp) + ) { + Text(stringResource(R.string.finish)) + } + } + } + } + } +} + +@Composable +private fun ResultStatRow(icon: ImageVector, label: String, value: String, color: Color) { + Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(vertical = 8.dp)) { + Icon( + imageVector = icon, + contentDescription = label, + tint = color, + modifier = Modifier.size(32.dp) + ) + Spacer(modifier = Modifier.width(16.dp)) + Text( + text = label, + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.weight(1f) + ) + Text( + text = value, + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold, + color = color + ) + } +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "Result Screen - Perfect Score") +@Composable +fun ResultScreenPerfectPreview() { + + ResultScreen( + score = 3, + wrongAnswers = 0, + totalItems = 3, + onRestart = {}, + onRetryWrong = {}, + onClose = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "Result Screen - Some Wrong Answers") +@Composable +fun ResultScreenSomeWrongPreview() { + + + ResultScreen( + score = 3, + wrongAnswers = 2, + totalItems = 5, + onRestart = {}, + onRetryWrong = {}, + onClose = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "Result Screen - All Wrong") +@Composable +fun ResultScreenAllWrongPreview() { + + + ResultScreen( + score = 0, + wrongAnswers = 2, + totalItems = 2, + onRestart = {}, + onRetryWrong = {}, + onClose = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/StageDetailScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/StageDetailScreen.kt new file mode 100644 index 0000000..fb3db6f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/StageDetailScreen.kt @@ -0,0 +1,76 @@ +package eu.gaudian.translator.view.vocabulary + +import android.app.Application +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.navigation.NavController +import androidx.navigation.NavHostController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.vocabulary.widgets.DetailedStageProgressBar +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import okhttp3.internal.platform.PlatformRegistry.applicationContext + +@Composable +fun StageDetailScreen( + navController: NavController, + stage: VocabularyStage, + viewModel: VocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as Application), +) { + val stageMapping by viewModel.stageMapping.collectAsState() + val dueTodayItems by viewModel.dueTodayItems.collectAsState() + + val itemsInStage = stageMapping.filter { it.value == stage }.keys + val dueTodayInStage = dueTodayItems.filter { stageMapping[it.id] == stage } + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(text = stringResource(R.string.due_today_, stage.toString())) }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon( + AppIcons.ArrowBack, + contentDescription =stringResource(R.string.cd_back) + ) + } + } + ) + } + ) { paddingValues -> + Column(modifier = Modifier.padding(paddingValues)) { + DetailedStageProgressBar( + stage = stage, + itemCount = dueTodayInStage.size, + totalItems = itemsInStage.size, + onStageTapped = {}, + ) + + VocabularyListScreen( + categoryId = null, + showDueTodayOnly = true, + stage = stage, + onNavigateToItem = { item -> + @Suppress("HardCodedStringLiteral") + navController.navigate( + "vocabulary_card/${item.id}/false/false/false" + ) + }, + onNavigateBack = { navController.popBackStack() }, + navController = navController as NavHostController, + enableNavigationButtons = true + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/StartScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/StartScreen.kt new file mode 100644 index 0000000..a3d7f40 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/StartScreen.kt @@ -0,0 +1,470 @@ +package eu.gaudian.translator.view.vocabulary + +import android.app.Application +import androidx.compose.animation.animateColorAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.DividerDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.CardSet +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppOutlinedButton +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppSlider +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.OptionItemSwitch +import eu.gaudian.translator.view.composable.SingleLanguageDropDown +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel + +@Composable +fun StartScreen( + cardSet: CardSet?, + onStartClicked: (List) -> Unit, + onClose: () -> Unit, + shuffleCards: Boolean, + onShuffleCardsChanged: (Boolean) -> Unit, + shuffleLanguages: Boolean, + onShuffleLanguagesChanged: (Boolean) -> Unit, + trainingMode: Boolean, + onTrainingModeChanged: (Boolean) -> Unit, + dueTodayOnly: Boolean, + onDueTodayOnlyChanged: (Boolean) -> Unit, + selectedExerciseTypes: Set, + onExerciseTypeSelected: (VocabularyExerciseType) -> Unit, + hideTodayOnlySwitch: Boolean = false, + selectedOriginLanguage: Language?, + onOriginLanguageChanged: (Language?) -> Unit, + selectedTargetLanguage: Language?, + onTargetLanguageChanged: (Language?) -> Unit, +) { + val vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance( + LocalContext.current.applicationContext as Application + ) + val dueTodayItems by vocabularyViewModel.dueTodayItems.collectAsState(initial = emptyList()) + val allItems = cardSet?.cards ?: emptyList() + + var amount by remember(allItems) { mutableIntStateOf(allItems.size) } + + val itemsToShow = if (dueTodayOnly) { + allItems.filter { card -> dueTodayItems.any { it.id == card.id } } + } else { + allItems + } + + if (amount > itemsToShow.size) { + amount = itemsToShow.size + } + + StartScreenContent( + vocabularyItemsCount = itemsToShow.size, + shuffleCards = shuffleCards, + onShuffleCardsChanged = onShuffleCardsChanged, + shuffleLanguages = shuffleLanguages, + onShuffleLanguagesChanged = onShuffleLanguagesChanged, + trainingMode = trainingMode, + onTrainingModeChanged = onTrainingModeChanged, + dueTodayOnly = dueTodayOnly, + onDueTodayOnlyChanged = onDueTodayOnlyChanged, + amount = amount, + onAmountChanged = { + @Suppress("AssignedValueIsNeverRead") + amount = it + }, + onStartClicked = { + val finalItems = if (shuffleCards) { + itemsToShow.shuffled().take(amount) + } else { + itemsToShow.take(amount) + } + onStartClicked(finalItems) + }, + onClose = onClose, + selectedExerciseTypes = selectedExerciseTypes, + onExerciseTypeSelected = onExerciseTypeSelected, + hideTodayOnlySwitch = hideTodayOnlySwitch, + selectedOriginLanguage = selectedOriginLanguage, + onOriginLanguageChanged = onOriginLanguageChanged, + selectedTargetLanguage = selectedTargetLanguage, + onTargetLanguageChanged = onTargetLanguageChanged, + allItems = allItems + ) +} + +@Composable +private fun StartScreenContent( + vocabularyItemsCount: Int, + shuffleCards: Boolean, + onShuffleCardsChanged: (Boolean) -> Unit, + shuffleLanguages: Boolean, + onShuffleLanguagesChanged: (Boolean) -> Unit, + trainingMode: Boolean, + onTrainingModeChanged: (Boolean) -> Unit, + dueTodayOnly: Boolean, + onDueTodayOnlyChanged: (Boolean) -> Unit, + amount: Int, + onAmountChanged: (Int) -> Unit, + onStartClicked: () -> Unit, + onClose: () -> Unit, + selectedExerciseTypes: Set, + onExerciseTypeSelected: (VocabularyExerciseType) -> Unit, + hideTodayOnlySwitch: Boolean = false, + selectedOriginLanguage: Language?, + onOriginLanguageChanged: (Language?) -> Unit, + selectedTargetLanguage: Language?, + onTargetLanguageChanged: (Language?) -> Unit, + allItems: List, +) { + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.prepare_exercise)) }, + navigationIcon = { + IconButton(onClick = onClose) { + Icon( + AppIcons.Close, + contentDescription = stringResource(R.string.label_close) + ) + } + } + ) + }, + + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + ) { + Box( + modifier = Modifier.weight(1f) + ) { + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(horizontal = 16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer(Modifier.height(16.dp)) + if (vocabularyItemsCount > 0) { + Text(stringResource(R.string.number_of_cards, amount, vocabularyItemsCount)) + AppSlider( + value = amount.toFloat(), + onValueChange = { onAmountChanged(it.toInt()) }, + valueRange = 1f..vocabularyItemsCount.toFloat(), + steps = if (vocabularyItemsCount > 1) vocabularyItemsCount - 2 else 0 + ) + + // Quick selection buttons + val quickSelectValues = listOf(10, 25, 50, 100) + val availableValues = + quickSelectValues.filter { it <= vocabularyItemsCount } + + if (availableValues.isNotEmpty()) { + Spacer(Modifier.height(16.dp)) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy( + 8.dp, + Alignment.CenterHorizontally + ) + ) { + availableValues.forEach { value -> + AppOutlinedButton( + onClick = { onAmountChanged(value) }, + modifier = Modifier.weight(1f), + enabled = value <= vocabularyItemsCount + ) { + Text(value.toString()) + } + } + } + } + } else { + Text( + stringResource(R.string.no_cards_found_for_the_selected_filters), + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.error + ) + } + + HorizontalDivider( + modifier = Modifier.padding(vertical = 24.dp), + thickness = DividerDefaults.Thickness, + color = DividerDefaults.color + ) + + +// Language Selection Section + Text( + stringResource(R.string.label_language_direction), + style = MaterialTheme.typography.titleLarge + ) + + Text( + stringResource(R.string.text_language_direction_explanation), + style = MaterialTheme.typography.bodyMedium + ) + Spacer(Modifier.height(16.dp)) + + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + +// Get available languages from the card set + val availableLanguages = remember(allItems) { + allItems.flatMap { listOfNotNull(it.languageFirstId, it.languageSecondId) } + .distinct() + .mapNotNull { languageId -> + languageViewModel.allLanguages.value.find { it.nameResId == languageId } + } + } + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + // Origin Language Dropdown + Column(modifier = Modifier.weight(1f)) { + Text( + stringResource(R.string.label_origin_language), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(bottom = 8.dp) + ) + SingleLanguageDropDown( + modifier = Modifier.fillMaxWidth(), + languageViewModel = languageViewModel, + selectedLanguage = selectedOriginLanguage, + onLanguageSelected = { language -> + onOriginLanguageChanged(language) + // Clear target language if it's the same as origin + if (selectedTargetLanguage?.nameResId == language.nameResId) { + onTargetLanguageChanged(null) + } + }, + showNoneOption = true, + alternateLanguages = availableLanguages + ) + } + + // Target Language Dropdown + Column(modifier = Modifier.weight(1f)) { + Text( + stringResource(R.string.label_target_language), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(bottom = 8.dp) + ) + SingleLanguageDropDown( + modifier = Modifier.fillMaxWidth(), + languageViewModel = languageViewModel, + selectedLanguage = selectedTargetLanguage, + onLanguageSelected = { language -> + onTargetLanguageChanged(language) + // Clear origin language if it's the same as target + if (selectedOriginLanguage?.nameResId == language.nameResId) { + onOriginLanguageChanged(null) + } + }, + alternateLanguages = availableLanguages, + showNoneOption = true, + ) + } + } + Spacer(Modifier.height(16.dp)) + HorizontalDivider( + modifier = Modifier.padding(vertical = 24.dp), + thickness = DividerDefaults.Thickness, + color = DividerDefaults.color + ) + + Text( + stringResource(R.string.label_choose_exercise_types), + style = MaterialTheme.typography.titleLarge + ) + Spacer(Modifier.height(16.dp)) + ExerciseTypeSelector( + selectedTypes = selectedExerciseTypes, + onTypeSelected = onExerciseTypeSelected + ) + HorizontalDivider( + modifier = Modifier.padding(vertical = 24.dp), + thickness = DividerDefaults.Thickness, + color = DividerDefaults.color + ) + + Text( + stringResource(R.string.options), + style = MaterialTheme.typography.titleLarge + ) + Spacer(Modifier.height(16.dp)) + + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + OptionItemSwitch( + title = stringResource(R.string.shuffle_cards), + description = stringResource(R.string.text_shuffle_card_order_description), + checked = shuffleCards, + onCheckedChange = onShuffleCardsChanged + ) + OptionItemSwitch( + title = stringResource(R.string.text_shuffle_languages), + description = stringResource(R.string.text_shuffle_languages_description), + checked = shuffleLanguages, + onCheckedChange = onShuffleLanguagesChanged + ) + OptionItemSwitch( + title = stringResource(R.string.label_training_mode), + description = stringResource(R.string.text_training_mode_description), + checked = trainingMode, + onCheckedChange = onTrainingModeChanged + ) + if (!hideTodayOnlySwitch) { + OptionItemSwitch( + title = stringResource(R.string.text_due_today_only), + description = stringResource(R.string.text_due_today_only_description), + checked = dueTodayOnly, + onCheckedChange = onDueTodayOnlyChanged + ) + } + } + Spacer(Modifier.height(16.dp)) + } + } + AppButton( + onClick = onStartClicked, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + .height(50.dp), + enabled = vocabularyItemsCount > 0 && amount > 0 + ) { + Text(stringResource(R.string.label_start_exercise_2d, amount)) + } + } + + } + + +} + +@Composable +private fun ExerciseTypeSelector( + selectedTypes: Set, + onTypeSelected: (VocabularyExerciseType) -> Unit, +) { + // Using FlowRow for a more flexible layout that wraps to the next line if needed + @OptIn(ExperimentalLayoutApi::class) + FlowRow( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(12.dp, Alignment.CenterHorizontally), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + ExerciseTypeCard( + icon = AppIcons.Guessing, + isSelected = VocabularyExerciseType.GUESSING in selectedTypes, + onClick = { onTypeSelected(VocabularyExerciseType.GUESSING) }, + text = stringResource(R.string.label_guessing_exercise), + ) + ExerciseTypeCard( + icon = AppIcons.SpellCheck, + isSelected = VocabularyExerciseType.SPELLING in selectedTypes, + onClick = { onTypeSelected(VocabularyExerciseType.SPELLING) }, + text = stringResource(R.string.label_spelling_exercise), + ) + ExerciseTypeCard( + icon = AppIcons.CheckList, + isSelected = VocabularyExerciseType.MULTIPLE_CHOICE in selectedTypes, + onClick = { onTypeSelected(VocabularyExerciseType.MULTIPLE_CHOICE) }, + text = stringResource(R.string.label_multiple_choice_exercise), + ) + ExerciseTypeCard( + icon = AppIcons.Extension, + isSelected = VocabularyExerciseType.WORD_JUMBLE in selectedTypes, + onClick = { onTypeSelected(VocabularyExerciseType.WORD_JUMBLE) }, + text = stringResource(R.string.label_word_jumble_exercise), + ) + } +} + +@Composable +private fun ExerciseTypeCard( + text: String, + icon: ImageVector, + isSelected: Boolean, + onClick: () -> Unit, +) { + val borderColor by animateColorAsState( + targetValue = if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.outline.copy( + alpha = 0.5f + ), + label = "borderColorAnimation", + animationSpec = tween(300) + ) + val containerColor by animateColorAsState( + targetValue = if (isSelected) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.surfaceVariant, + animationSpec = tween(300) + ) + + Card( + onClick = onClick, + modifier = Modifier.size(width = 120.dp, height = 100.dp), // Made the cards smaller + shape = RoundedCornerShape(12.dp), + border = BorderStroke(2.dp, borderColor), + colors = CardDefaults.cardColors(containerColor = containerColor), + elevation = CardDefaults.cardElevation(if (isSelected) 4.dp else 1.dp) + ) { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Icon(icon, contentDescription = null, modifier = Modifier.size(32.dp)) // Smaller icon + Spacer(Modifier.height(8.dp)) + Text( + text = text, + style = MaterialTheme.typography.bodyLarge, // Smaller text + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/StartScreenContent.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/StartScreenContent.kt new file mode 100644 index 0000000..a629929 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/StartScreenContent.kt @@ -0,0 +1,148 @@ +package eu.gaudian.translator.view.vocabulary + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppSlider +import eu.gaudian.translator.view.composable.OptionItemSwitch + +@Composable +fun StartScreenContent( + vocabularyItemsCount: Int, + shuffleCards: Boolean, + shuffleLanguages: Boolean, + trainingMode: Boolean, + dueTodayOnly: Boolean, + onShuffleCardsChanged: (Boolean) -> Unit, + onShuffleLanguagesChanged: (Boolean) -> Unit, + onTrainingModeChanged: (Boolean) -> Unit, + onDueTodayOnlyChanged: (Boolean) -> Unit, + onAmountChanged: (Int) -> Unit, + onStartClicked: () -> Unit, + onClose: () -> Unit +) { + var amount by remember { mutableIntStateOf(vocabularyItemsCount) } + + LaunchedEffect(vocabularyItemsCount) { + amount = vocabularyItemsCount + onAmountChanged(amount) + } + + Column(modifier = Modifier.padding(16.dp)) { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 32.dp) + ) { + IconButton( + onClick = onClose, + modifier = Modifier + .size(28.dp) + .align(Alignment.CenterStart) + ) { + Icon( + imageVector = AppIcons.Close, + contentDescription = stringResource(R.string.label_close_exercise), + modifier = Modifier.size(36.dp) + ) + } + Text( + text = stringResource(R.string.label_start_exercise), + modifier = Modifier.align(Alignment.Center), + style = MaterialTheme.typography.headlineMedium, + color = MaterialTheme.colorScheme.onSurface, + ) + } + Text("${stringResource(id = R.string.text_amount_of_cards)}: $amount", color = MaterialTheme.colorScheme.onSurface, + ) + AppSlider( + value = amount.toFloat(), + onValueChange = { + amount = it.toInt() + onAmountChanged(amount) + }, + valueRange = 1f..vocabularyItemsCount.toFloat(), + steps = if (vocabularyItemsCount > 1) vocabularyItemsCount - 2 else 0, + ) + Spacer(Modifier.height(16.dp)) + OptionItemSwitch( + title = stringResource(id = R.string.text_shuffle_card_order), + checked = shuffleCards, + onCheckedChange = onShuffleCardsChanged + ) + Spacer(Modifier.height(16.dp)) + + OptionItemSwitch( + title = stringResource(id = R.string.text_shuffle_languages), + checked = shuffleLanguages, + onCheckedChange = onShuffleLanguagesChanged + ) + Spacer(Modifier.height(16.dp)) + + OptionItemSwitch( + title = stringResource(id = R.string.text_training_mode), + description = stringResource(R.string.this_mode_will_not_affect_your_progress_in_stages), + checked = trainingMode, + onCheckedChange = onTrainingModeChanged + ) + Spacer(Modifier.height(16.dp)) + OptionItemSwitch( + title = stringResource(id = R.string.text_due_today_only), + checked = dueTodayOnly, + onCheckedChange = onDueTodayOnlyChanged + ) + Spacer(Modifier.height(16.dp)) + + AppButton ( + onClick = onStartClicked, + modifier = Modifier + .padding(top = 16.dp) + .align(Alignment.CenterHorizontally) + .defaultMinSize(minHeight = 48.dp), + ) { + Text(stringResource(id = R.string.label_start)) + } + } +} + +@ThemePreviews +@Composable +fun StartScreenContentPreview() { + StartScreenContent( + vocabularyItemsCount = 10, + shuffleCards = false, + shuffleLanguages = false, + trainingMode = false, + dueTodayOnly = false, + onShuffleCardsChanged = {}, + onShuffleLanguagesChanged = {}, + onTrainingModeChanged = {}, + onDueTodayOnlyChanged = {}, + onAmountChanged = {}, + onStartClicked = {}, + onClose = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyCardHost.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyCardHost.kt new file mode 100644 index 0000000..b7fa644 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyCardHost.kt @@ -0,0 +1,370 @@ +package eu.gaudian.translator.view.vocabulary + +import android.app.Application +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.LocalLifecycleOwner +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppAlertDialog +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.dialogs.CategorySelectionDialog +import eu.gaudian.translator.view.dialogs.ImportVocabularyDialog +import eu.gaudian.translator.view.dialogs.StageSelectionDialog +import eu.gaudian.translator.view.vocabulary.card.VocabularyCard +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.coroutines.launch +import kotlin.time.ExperimentalTime + +@Composable +fun VocabularyCardHost( + navController: NavController, + itemId: Int, + exerciseMode: Boolean = false, + spellingMode: Boolean = false, + switchOrder: Boolean? = false, + onAnswerSelected: ((Boolean) -> Unit)? = null, + onBackPressed: (() -> Unit)? = null +) { + val activity = LocalContext.current.findActivity() + val vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(LocalContext.current.applicationContext as Application) + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val categoryViewModel: CategoryViewModel = viewModel() + val scope = rememberCoroutineScope() + + val navigationItems by vocabularyViewModel.currentNavigationItems.collectAsState() + val navigationPosition by vocabularyViewModel.currentNavigationPosition.collectAsState() + + var vocabularyItem by remember { mutableStateOf(null) } + + LaunchedEffect(itemId) { + vocabularyItem = vocabularyViewModel.getVocabularyItemById(itemId) + } + + AppScaffold( + topBar = { + AppTopAppBar( + modifier = Modifier.height(56.dp), + title = { + if (navigationItems.isNotEmpty()) { + Text(stringResource(R.string.label_card_with_position, navigationPosition + 1, navigationItems.size)) + } else { + Text(stringResource(R.string.item_details)) + } + }, + navigationIcon = { + IconButton(onClick = { onBackPressed?.invoke() }) { + Icon( + AppIcons.ArrowBack, + contentDescription = stringResource(R.string.cd_back) + ) + } + }, + actions = { + // Previous button + if (navigationPosition > 0) { + IconButton(onClick = { + if (vocabularyViewModel.navigateToPreviousItem()) { + val prevItem = navigationItems[navigationPosition - 1] + scope.launch { + + @Suppress("AssignedValueIsNeverRead") + vocabularyItem = vocabularyViewModel.getVocabularyItemById(prevItem.id) + } + } + }) { + Icon( + AppIcons.ArrowLeft, + contentDescription = stringResource(R.string.previous_item), + tint = MaterialTheme.colorScheme.primary + ) + } + } + + // Next button + if (navigationPosition < navigationItems.size - 1) { + IconButton(onClick = { + if (vocabularyViewModel.navigateToNextItem()) { + val nextItem = navigationItems[navigationPosition + 1] + scope.launch { + @Suppress("AssignedValueIsNeverRead") + vocabularyItem = vocabularyViewModel.getVocabularyItemById(nextItem.id) + } + } + }) { + Icon( + AppIcons.ArrowRight, + contentDescription = stringResource(R.string.next_item), + tint = MaterialTheme.colorScheme.primary + ) + } + } + } + ) + } + ) { paddingValues -> + Box(modifier = Modifier.padding(paddingValues)) { + if (vocabularyItem == null) { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + CircularProgressIndicator() + } + } else { + val currentVocabularyItem = vocabularyItem!! + + var isFlipped by remember { mutableStateOf(false) } + var showQuitDialog by remember { mutableStateOf(false) } + var showStatisticsDialog by remember { mutableStateOf(false) } + var showCategoryDialog by remember { mutableStateOf(false) } + var showStageDialog by remember { mutableStateOf(false) } + var showImportDialog by remember { mutableStateOf(false) } + var showDeleteDialog by remember { mutableStateOf(false) } + + val lifecycleOwner = LocalLifecycleOwner.current + val stats by vocabularyViewModel + .getVocabularyItemDetailsFlow(currentVocabularyItem.id) + .collectAsStateWithLifecycle( + initialValue = null, + lifecycle = lifecycleOwner.lifecycle + ) + + if (exerciseMode && onBackPressed != null) { + //TODO consider BackPressHandler(onBackPressed = { showQuitDialog = true }) + } + + if(showDeleteDialog){ + AppAlertDialog( + title = { + Text(stringResource(R.string.text_delete_vocabulary_item)) + }, + text = { + Text(stringResource(R.string.text_are_you_sure_delete_vocabulary_item)) + }, + confirmButton = { + TextButton( + onClick = { + vocabularyViewModel.deleteData( + VocabularyViewModel.DeleteType.VOCABULARY_ITEM_BY_ID, + currentVocabularyItem.id + ) + if (exerciseMode) { + onAnswerSelected?.invoke(false) + } else { + navController.popBackStack() + } + } + ) { + Text(text = stringResource(R.string.label_delete)) + } + }, + dismissButton = @Composable { + TextButton( + onClick = { showDeleteDialog = false }, + ) { + Text(text = stringResource(R.string.label_cancel)) + } + }, + onDismissRequest = { showDeleteDialog = false }, + ) + } + + // Main content + VocabularyCard( + vocabularyItem = currentVocabularyItem, + exerciseMode = exerciseMode, + switchOrder = switchOrder == true, + isFlipped = isFlipped, + onStatisticsClick = { showStatisticsDialog = true }, + onMoveToCategoryClick = { showCategoryDialog = true }, + onMoveToStageClick = { showStageDialog = true }, + onDeleteClick = { showDeleteDialog = true }, + navController = navController, + isUserSpellingCorrect = false, + vocabularyViewModel = vocabularyViewModel + ) + + // Dialogs are unaffected by the layout change + if (showQuitDialog) { + QuitDialog( + onConfirm = { + onBackPressed?.invoke() + showQuitDialog = false + }, + onDismiss = { showQuitDialog = false } + ) + } + + if (showStatisticsDialog) { + StatisticsDialog( + vocabularyItem = currentVocabularyItem, + stats = stats, + onDismiss = { showStatisticsDialog = false } + ) + } + + if (showCategoryDialog) { + CategorySelectionDialog( + viewModel = categoryViewModel, + onCategorySelected = { + vocabularyViewModel.addVocabularyItemToCategories( + listOf(currentVocabularyItem), + it.mapNotNull { category -> category?.id } + ) + showCategoryDialog = false + }, + onDismissRequest = { showCategoryDialog = false } + ) + } + + if (showStageDialog) { + StageSelectionDialog( + onStageSelected = { stage -> + stage?.let { + vocabularyViewModel.addVocabularyItemToStage( + listOf(currentVocabularyItem), + it + ) + } + showStageDialog = false + }, + onDismissRequest = { showStageDialog = false } + ) + } + + if (showImportDialog) { + ImportVocabularyDialog( + onDismiss = { showImportDialog = false }, + languageViewModel = languageViewModel, + optionalDescription = stringResource(R.string.generate_related_vocabulary_items), + optionalSearchTerm = currentVocabularyItem.wordFirst, + categoryViewModel = categoryViewModel, + vocabularyViewModel = vocabularyViewModel + ) + } + + LaunchedEffect(spellingMode) { + if (spellingMode) { + //TODO implement // Setup spelling mode logic if needed + } + } + } + } + } +} + + +@Composable +private fun QuitDialog( + onConfirm: () -> Unit, + onDismiss: () -> Unit +) { + AppAlertDialog( + onDismissRequest = onDismiss, + title = { Text(stringResource(R.string.quit)) }, + text = { Text(text = stringResource(R.string.text_are_you_sure_you_want_to_quit)) }, + confirmButton = { TextButton(onClick = onConfirm) { Text(stringResource(R.string.label_yes)) } }, + dismissButton = { TextButton(onClick = onDismiss) { Text(stringResource(R.string.no)) } } + ) +} + +@OptIn(ExperimentalTime::class) +@Composable +private fun StatisticsDialog( + vocabularyItem: VocabularyItem, + stats: VocabularyViewModel.VocabularyItemDetails?, + onDismiss: () -> Unit +) { + AppDialog( + onDismissRequest = onDismiss, + title = { Text(stringResource(R.string.label_statistics)) }, + content = { + if (stats != null) { + Column { + Text(stringResource(R.string.stage__, stats.stage.toString(context = LocalContext.current))) + Text(stringResource(R.string.last_correct, stats.lastCorrectAnswer ?: "-")) + Text(stringResource(R.string.last_incorrect, stats.lastIncorrectAnswer ?: "-")) + Text(stringResource(R.string.correct_answers_, stats.correctAnswerCount)) + Text(stringResource(R.string.incorrect_answers, stats.incorrectAnswerCount)) + Text(stringResource(R.string.item_id, vocabularyItem.id)) + vocabularyItem.languageFirstId?.let { Text(stringResource(R.string.languagefirst_id, it)) } + vocabularyItem.languageSecondId?.let { Text(stringResource(R.string.languagesecond_id, it)) } + } + } else { + Text(stringResource(R.string.statistics_are_loading)) + } + }, + ) +} + +@ThemePreviews +@Composable +fun VocabularyCardHostPreview() { + val navController = NavController(LocalContext.current) + VocabularyCardHost(navController = navController, itemId = 1) +} + +@ThemePreviews +@Composable +fun QuitDialogPreview() { + QuitDialog(onConfirm = {}, onDismiss = {}) +} + +@ThemePreviews +@Composable +fun VocabularyCardHostWithNavigationPreview() { + val navController = NavController(LocalContext.current) + VocabularyCardHost( + navController = navController, + itemId = 1, + onBackPressed = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@OptIn(ExperimentalTime::class) +@ThemePreviews +@Composable +fun StatisticsDialogPreview() { + val vocabularyItem = VocabularyItem(id = 1, languageFirstId = 101, languageSecondId = 102, wordFirst = "Hello", wordSecond = "Hola") + val stats = VocabularyViewModel.VocabularyItemDetails( + stage = VocabularyStage.NEW, + lastCorrectAnswer = null, + lastIncorrectAnswer = null, + correctAnswerCount = 5, + incorrectAnswerCount = 2 + ) + StatisticsDialog(vocabularyItem = vocabularyItem, stats = stats, onDismiss = {}) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyExercise.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyExercise.kt new file mode 100644 index 0000000..2c52196 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyExercise.kt @@ -0,0 +1,516 @@ +package eu.gaudian.translator.view.vocabulary + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.ui.theme.semanticColors +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.ComponentDefaults +import eu.gaudian.translator.view.vocabulary.card.VocabularyCard +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel + +/** + * Represents the different types of exercises available. + * This enum can be expanded with new exercise types. + */ +enum class VocabularyExerciseType { + GUESSING, + SPELLING, + MULTIPLE_CHOICE, + WORD_JUMBLE +} + +/** + * A sealed interface to represent the state of an exercise. + * Each exercise type will have its own state implementation. + */ +sealed interface VocabularyExerciseState { + val item: VocabularyItem + val isRevealed: Boolean + val isCorrect: Boolean? + val isSwitched: Boolean + + data class Guessing( + override val item: VocabularyItem, + override val isRevealed: Boolean = false, + override val isCorrect: Boolean? = null, + override val isSwitched: Boolean = false, + ) : VocabularyExerciseState + + data class Spelling( + override val item: VocabularyItem, + val userAnswer: String = "", + override val isRevealed: Boolean = false, + override val isCorrect: Boolean? = null, + override val isSwitched: Boolean = false, + ) : VocabularyExerciseState + + data class MultipleChoice( + override val item: VocabularyItem, + val options: List, + val selectedAnswer: String? = null, + override val isRevealed: Boolean = false, + override val isCorrect: Boolean? = null, + override val isSwitched: Boolean = false, + ) : VocabularyExerciseState + + data class WordJumble( + override val item: VocabularyItem, + val jumbledLetters: List>, // Pair of Char and a unique ID for stability + val assembledWord: List> = emptyList(), + override val isRevealed: Boolean = false, + override val isCorrect: Boolean? = null, + override val isSwitched: Boolean = false, + ) : VocabularyExerciseState +} + +/** + * A generic renderer for exercises. It takes an ExerciseState + * and renders the appropriate UI for that state. + */ +@Composable +fun VocabularyExerciseRenderer( + state: VocabularyExerciseState, + onAction: (VocabularyExerciseAction) -> Unit, + navController: NavController +) { + when (state) { + is VocabularyExerciseState.Guessing -> GuessingExercise(state, navController) + is VocabularyExerciseState.Spelling -> SpellingExercise(state, navController) + is VocabularyExerciseState.MultipleChoice -> MultipleChoiceExercise(state, onAction) + is VocabularyExerciseState.WordJumble -> WordJumbleExercise(state, onAction) + } +} + + + + + +sealed interface VocabularyExerciseAction { + data object Reveal : VocabularyExerciseAction + data class Submit(val answer: Any) : VocabularyExerciseAction + data object Next : VocabularyExerciseAction + data class UpdateWordJumble(val assembledWord: List>) : VocabularyExerciseAction +} + +@Composable +fun GuessingExercise( + state: VocabularyExerciseState.Guessing, + navController: NavController, + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(LocalContext.current.applicationContext as android.app.Application) +) { + VocabularyCard( + vocabularyItem = state.item, + isFlipped = state.isRevealed, + navController = navController, + exerciseMode = true, + switchOrder = state.isSwitched, + vocabularyViewModel = vocabularyViewModel + ) +} + + + +@Composable +fun SpellingExercise( + state: VocabularyExerciseState.Spelling, + navController: NavController, + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(LocalContext.current.applicationContext as android.app.Application) +) { + VocabularyCard( + vocabularyItem = state.item, + isFlipped = state.isRevealed, + userSpellingAnswer = state.userAnswer, + isUserSpellingCorrect = state.isCorrect, + navController = navController, + exerciseMode = true, + switchOrder = state.isSwitched, + vocabularyViewModel = vocabularyViewModel + ) +} + + + +@Composable +fun MultipleChoiceExercise( + state: VocabularyExerciseState.MultipleChoice, + onAction: (VocabularyExerciseAction) -> Unit +) { + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + var languageFirst by remember { mutableStateOf(null) } + var languageSecond by remember { mutableStateOf(null) } + + LaunchedEffect(state.item.languageFirstId, state.item.languageSecondId) { + languageFirst = languageViewModel.getLanguageById(state.item.languageFirstId ?: 0) + languageSecond = languageViewModel.getLanguageById(state.item.languageSecondId ?: 0) + } + + val correctAnswer = if (state.isSwitched) state.item.wordFirst else state.item.wordSecond + val promptLanguage = if (state.isSwitched) languageSecond else languageFirst + val targetLanguage = if (state.isSwitched) languageFirst else languageSecond + + Column( + modifier = Modifier + .fillMaxSize() + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceBetween + ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text( + text = stringResource(R.string.label_translate_from_2d, promptLanguage?.name ?: ""), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Text( + text = if (state.isSwitched) state.item.wordSecond else state.item.wordFirst, + style = MaterialTheme.typography.displaySmall, + textAlign = TextAlign.Center, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Text( + text = stringResource(R.string.to_d, targetLanguage?.name ?: ""), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(top = 8.dp) + ) + } + + Column( + modifier = Modifier.fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + state.options.forEach { option -> + val isSelected = state.selectedAnswer == option + val isCorrectOption = option == correctAnswer + + val buttonColors = when { + // After reveal: show correct as filled CorrectButton, wrong selected as filled WrongButton + state.isRevealed && isCorrectOption -> ButtonDefaults.buttonColors( + containerColor = MaterialTheme.semanticColors.success, + contentColor = MaterialTheme.semanticColors.onSuccess + ) + state.isRevealed && isSelected && !isCorrectOption -> ButtonDefaults.buttonColors( + containerColor = MaterialTheme.semanticColors.wrong, + contentColor = MaterialTheme.semanticColors.onWrong + ) + // Before reveal: keep neutral outlined look until selection + !state.isRevealed && isSelected && isCorrectOption -> ButtonDefaults.buttonColors( + containerColor = MaterialTheme.semanticColors.success.copy(alpha = 0.85f), + contentColor = MaterialTheme.semanticColors.onSuccess + ) + !state.isRevealed && isSelected && !isCorrectOption -> ButtonDefaults.buttonColors( + containerColor = MaterialTheme.semanticColors.wrong.copy(alpha = 0.85f), + contentColor = MaterialTheme.semanticColors.onWrong + ) + else -> ButtonDefaults.outlinedButtonColors() + } + + val borderColor = when { + state.isRevealed -> Color.Transparent + isSelected && !isCorrectOption -> MaterialTheme.colorScheme.error + isSelected && isCorrectOption -> MaterialTheme.semanticColors.success + else -> MaterialTheme.colorScheme.outline + } + + AppButton( + onClick = { if (!state.isRevealed) onAction(VocabularyExerciseAction.Submit(option)) }, + modifier = Modifier + .fillMaxWidth() + .height(50.dp), + colors = buttonColors, + border = BorderStroke(1.dp, borderColor) + ) { + val textColor = when { + state.isRevealed && isCorrectOption -> MaterialTheme.semanticColors.onSuccess + state.isRevealed && isSelected && !isCorrectOption -> MaterialTheme.semanticColors.onWrong + !state.isRevealed && isSelected && isCorrectOption -> MaterialTheme.semanticColors.onSuccess + !state.isRevealed && isSelected && !isCorrectOption -> MaterialTheme.semanticColors.onWrong + else -> MaterialTheme.colorScheme.onSurfaceVariant + } + Text(option, color = textColor) + } + } + + // Optional textual feedback when an option was selected + if (state.selectedAnswer != null && !state.isRevealed) { + val wasCorrect = state.selectedAnswer == correctAnswer + val msg = if (wasCorrect) stringResource(R.string.text_correct_em) else stringResource(R.string.label_wrong) + val color = if (wasCorrect) MaterialTheme.semanticColors.success else MaterialTheme.colorScheme.error + Text(text = msg, color = color, style = MaterialTheme.typography.bodyMedium) + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun MultipleChoiceExercisePreview() { + val vocabularyItem = VocabularyItem( + id = 1, + languageFirstId = 1, + languageSecondId = 2, + wordFirst = "Hello", + wordSecond = "Hola" + ) + val state = VocabularyExerciseState.MultipleChoice( + item = vocabularyItem, + options = listOf("Hola", "Bonjour", "Hallo", "Ciao"), + selectedAnswer = "Hola", + isRevealed = true, + isCorrect = true, + isSwitched = false + ) + MultipleChoiceExercise(state = state, onAction = {}) +} + + + +@Composable +fun WordJumbleExercise( + state: VocabularyExerciseState.WordJumble, + onAction: (VocabularyExerciseAction) -> Unit +) { + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + var languageFirst by remember { mutableStateOf(null) } + var languageSecond by remember { mutableStateOf(null) } + + LaunchedEffect(state.item.languageFirstId, state.item.languageSecondId) { + languageFirst = languageViewModel.getLanguageById(state.item.languageFirstId ?: 0) + languageSecond = languageViewModel.getLanguageById(state.item.languageSecondId ?: 0) + } + + val availableLetters = remember(state.jumbledLetters, state.assembledWord) { + state.jumbledLetters.filterNot { it in state.assembledWord } + } + val correctAnswer = if (state.isSwitched) state.item.wordFirst else state.item.wordSecond + + // NEW: Group available letters by character to get counts + val groupedAvailableLetters = remember(availableLetters) { + availableLetters + .groupBy { it.first } // Groups into a Map>> + .map { (char, instances) -> + // Triple stores: 1. The character, 2. Its count, 3. The ID of the first instance for a stable key + Triple(char, instances.size, instances.first().second) + } + } + + + Column( + modifier = Modifier + .fillMaxSize() + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceBetween + ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + val promptLanguage = if (state.isSwitched) languageSecond else languageFirst + val targetLanguage = if (state.isSwitched) languageFirst else languageSecond + + Text( + text = stringResource(R.string.label_translate_from_2d, promptLanguage?.name ?: ""), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + + Text( + text = if (state.isSwitched) state.item.wordSecond else state.item.wordFirst, + style = MaterialTheme.typography.displaySmall, + textAlign = TextAlign.Center, + modifier = Modifier.padding(bottom = 8.dp), + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + + Text( + text = stringResource(R.string.to_d, targetLanguage?.name ?: ""), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + + + Column(horizontalAlignment = Alignment.CenterHorizontally) { + FlowRow( + modifier = Modifier + .fillMaxWidth() + .defaultMinSize(minHeight = 60.dp) + .border(1.dp, MaterialTheme.colorScheme.outline, RoundedCornerShape(8.dp)) + .padding(8.dp), + horizontalArrangement = if (state.assembledWord.isEmpty()) Arrangement.Center else Arrangement.spacedBy(8.dp), + verticalArrangement = if (state.assembledWord.isEmpty()) Arrangement.Center else Arrangement.spacedBy(8.dp) + ) { + if (state.assembledWord.isEmpty()) { + Text(stringResource(R.string.text_assemble_the_word_here), color = MaterialTheme.colorScheme.onSurfaceVariant) + } else { + state.assembledWord.forEach { (char, id) -> + LetterPill(char = char, isDraggable = true, onClick = { + val newAssembled = state.assembledWord.toMutableList().apply { remove(Pair(char, id)) } + onAction(VocabularyExerciseAction.UpdateWordJumble(newAssembled)) + }) + } + } + } + + Spacer(Modifier.height(8.dp)) + if (state.isRevealed) { + val color = if (state.isCorrect == true) Color(0xFF4CAF50) else MaterialTheme.colorScheme.error + Text(if (state.isCorrect == true) stringResource(R.string.text_correct_em) else stringResource( + R.string.correct_answer, correctAnswer + ), color = color) + } else { + Surface(shadowElevation = ComponentDefaults.DefaultElevation) { + AppButton( + onClick = { + val assembledString = state.assembledWord.map { it.first }.joinToString("") + onAction(VocabularyExerciseAction.Submit(assembledString)) + }, + enabled = state.assembledWord.isNotEmpty(), + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + .height(50.dp) + ) { + Text(stringResource(R.string.text_check), fontWeight = FontWeight.Bold) + } + } + } + + Spacer(Modifier.height(24.dp)) + + // Available letters - UPDATED LOGIC + LazyRow( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterHorizontally) + ) { + items(groupedAvailableLetters, key = { it.third }) { (char, count, _) -> + // This is the action to perform when a letter is clicked + val onClickAction = { + if (!state.isRevealed) { + // Find the first available instance of the clicked character + val instanceToMove = availableLetters.first { it.first == char } + val newAssembled = state.assembledWord + instanceToMove + onAction(VocabularyExerciseAction.UpdateWordJumble(newAssembled)) + } + } + + // If count is > 1, show the grouped pill. Otherwise, show the original single pill. + if (count > 1) { + GroupedLetterPill( + char = char, + count = count, + isDraggable = !state.isRevealed, + onClick = onClickAction + ) + } else { + LetterPill( + char = char, + isDraggable = !state.isRevealed, + onClick = onClickAction + ) + } + } + } + } + } +} + + + +@Composable +private fun LetterPill(char: Char, isDraggable: Boolean, onClick: () -> Unit) { + Box( + modifier = Modifier + .size(48.dp) + .clip(CircleShape) + .background(MaterialTheme.colorScheme.primaryContainer) + .then(if (isDraggable) Modifier.clickable(onClick = onClick) else Modifier) + .padding(4.dp), + contentAlignment = Alignment.Center + ) { + Text( + text = char.uppercase(), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onPrimaryContainer + ) + } +} + +@Composable +private fun GroupedLetterPill( + char: Char, + count: Int, + isDraggable: Boolean, + onClick: () -> Unit +) { + Box { // Use a Box to stack the pill and the count badge + // The base is the standard round letter pill + LetterPill(char = char, isDraggable = isDraggable, onClick = onClick) + + // This is the count badge, styled and aligned on top + Box( + modifier = Modifier + .align(Alignment.TopStart) // Position in the top-left corner + .size(20.dp) // Give the badge a fixed circular size + .background( + color = MaterialTheme.colorScheme.secondary, + shape = CircleShape + ) + // Add a small border to make it pop + .border(1.dp, MaterialTheme.colorScheme.background, CircleShape), + contentAlignment = Alignment.Center + ) { + Text( + text = count.toString(), + color = MaterialTheme.colorScheme.onSecondary, + style = MaterialTheme.typography.labelSmall, // Use a small font style + textAlign = TextAlign.Center + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyExerciseHostScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyExerciseHostScreen.kt new file mode 100644 index 0000000..eb012e5 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyExerciseHostScreen.kt @@ -0,0 +1,288 @@ +package eu.gaudian.translator.view.vocabulary + +import androidx.activity.compose.BackHandler +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.slideInHorizontally +import androidx.compose.animation.slideOutHorizontally +import androidx.compose.animation.togetherWith +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.view.composable.AppAlertDialog +import eu.gaudian.translator.viewmodel.ExerciseConfig +import eu.gaudian.translator.viewmodel.ScreenState +import eu.gaudian.translator.viewmodel.VocabularyExerciseViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json + + +@Serializable +private data class DailyOnly(val dailyOnly: Boolean) + +@Composable +fun VocabularyExerciseHostScreen( + categoryIdsAsJson: String?, + stageNamesAsJson: String?, + languageIdsAsJson: String?, + dailyOnlyAsJson: String?, + onClose: () -> Unit, + navController: NavController +) { + val vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(androidx.compose.ui.platform.LocalContext.current.applicationContext as android.app.Application) + val exerciseViewModel: VocabularyExerciseViewModel = viewModel() + + val cardSet by vocabularyViewModel.cardSet.collectAsState() + val screenState by exerciseViewModel.screenState.collectAsState() + + var shuffleCards by rememberSaveable { mutableStateOf(false) } + var shuffleLanguages by remember { mutableStateOf(false) } + var trainingMode by remember { mutableStateOf(false) } + var dueTodayOnly by remember { mutableStateOf(false) } + var selectedExerciseTypes by remember { mutableStateOf(setOf(VocabularyExerciseType.GUESSING)) } + var selectedOriginLanguage by remember { mutableStateOf(null) } + var selectedTargetLanguage by remember { mutableStateOf(null) } + + var finalScore by remember { mutableIntStateOf(0) } + var finalWrongAnswers by remember { mutableIntStateOf(0) } + + + val dailyOnly = try { + dailyOnlyAsJson?.let { Json.decodeFromString(it).dailyOnly } ?: false + } catch (_: Exception) { + false + } + + LaunchedEffect(Unit) { + + + vocabularyViewModel.prepareExercise( + categoryIdsAsJson, + stageNamesAsJson, + languageIdsAsJson, + dailyOnly = dailyOnly, + ) + } + + if (cardSet == null && screenState != ScreenState.START) { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + CircularProgressIndicator() + } + } else { + when (screenState) { + ScreenState.START -> { + StartScreen( + cardSet = cardSet, + onStartClicked = { finalItems -> + exerciseViewModel.startExerciseWithConfig( + finalItems, + ExerciseConfig( + shuffleCards = shuffleCards, + shuffleLanguages = shuffleLanguages, + trainingMode = trainingMode, + dueTodayOnly = dueTodayOnly, + selectedExerciseTypes = selectedExerciseTypes, + exerciseItemCount = finalItems.size, + originalExerciseItems = finalItems, + originLanguageId = selectedOriginLanguage?.nameResId, + targetLanguageId = selectedTargetLanguage?.nameResId + ) + ) + }, + onClose = onClose, + shuffleCards = shuffleCards, + onShuffleCardsChanged = { + @Suppress("AssignedValueIsNeverRead") + shuffleCards = it + }, + shuffleLanguages = shuffleLanguages, + onShuffleLanguagesChanged = { + @Suppress("AssignedValueIsNeverRead") + shuffleLanguages = it + }, + trainingMode = trainingMode, + onTrainingModeChanged = { + @Suppress("AssignedValueIsNeverRead") + trainingMode = it + exerciseViewModel.onTrainingModeChanged(it) + }, + hideTodayOnlySwitch = dailyOnly, + dueTodayOnly = dueTodayOnly, + onDueTodayOnlyChanged = { + @Suppress("AssignedValueIsNeverRead") + dueTodayOnly = it + }, + selectedExerciseTypes = selectedExerciseTypes, + onExerciseTypeSelected = { type -> + val currentTypes = selectedExerciseTypes.toMutableSet() + if (type in currentTypes) { + if (currentTypes.size > 1) currentTypes.remove(type) + } else { + currentTypes.add(type) + } + selectedExerciseTypes = currentTypes + }, + selectedOriginLanguage = selectedOriginLanguage, + onOriginLanguageChanged = { + @Suppress("AssignedValueIsNeverRead") + selectedOriginLanguage = it + }, + selectedTargetLanguage = selectedTargetLanguage, + onTargetLanguageChanged = { + @Suppress("AssignedValueIsNeverRead") + selectedTargetLanguage = it + } + ) + } + ScreenState.EXERCISE -> { + ExerciseScreen( + viewModel = exerciseViewModel, + onClose = onClose, + onFinish = { score, wrong -> + @Suppress("AssignedValueIsNeverRead") + finalScore = score + @Suppress("AssignedValueIsNeverRead") + finalWrongAnswers = wrong + exerciseViewModel.finishExercise(score, wrong) + }, + navController = navController + ) + } + ScreenState.RESULT -> { + val totalItems by exerciseViewModel.totalItems.collectAsState() + val originalItems by exerciseViewModel.originalItems.collectAsState() + ResultScreen( + score = finalScore, + wrongAnswers = finalWrongAnswers, + totalItems = totalItems, + onRestart = { + vocabularyViewModel.clearCardSet() + exerciseViewModel.resetExercise() + }, + onRetryWrong = { _ -> + exerciseViewModel.retryWrongAnswers(originalItems) + }, + onClose = onClose + ) + } + } + } +} + + + + + + + +@OptIn(ExperimentalAnimationApi::class) +@Composable +private fun ExerciseScreen( + viewModel: VocabularyExerciseViewModel, + onClose: () -> Unit, + onFinish: (score: Int, wrongAnswers: Int) -> Unit, + navController: NavController +) { + val exerciseState by viewModel.exerciseState.collectAsState() + val totalItems by viewModel.totalItems.collectAsState() + val score by viewModel.correctAnswers.collectAsState() + val wrongAnswers by viewModel.wrongAnswers.collectAsState() + + val currentExerciseState = exerciseState + + var showExitDialog by remember { mutableStateOf(false) } + + val onExitConfirmed = { + showExitDialog = false + onClose() + } + + BackHandler(enabled = true) { + showExitDialog = true + } + + if (showExitDialog) { + AppAlertDialog( + onDismissRequest = { + @Suppress("AssignedValueIsNeverRead") + showExitDialog = false + }, + title = { Text(stringResource(R.string.label_quit_exercise_qm)) }, + text = { Text(stringResource(R.string.text_are_you_sure_you_want_to_quit_your_progress_in_this_session_will_be_lost)) }, + confirmButton = { + TextButton(onClick = onExitConfirmed) { + Text(stringResource(R.string.quit)) + } + }, + dismissButton = { + TextButton(onClick = { + @Suppress("AssignedValueIsNeverRead") + showExitDialog = false + }) { + Text(stringResource(R.string.label_cancel)) + } + } + ) + } + + LaunchedEffect(currentExerciseState, score, wrongAnswers) { + if (currentExerciseState == null && (score + wrongAnswers) >= totalItems && totalItems > 0) { + onFinish(score, wrongAnswers) + } + } + + Column(modifier = Modifier.fillMaxSize()) { + ExerciseProgressIndicator( + correctAnswers = score, + wrongAnswers = wrongAnswers, + totalItems = totalItems, + onClose = { + @Suppress("AssignedValueIsNeverRead") + showExitDialog = true + } + ) + + Box(modifier = Modifier.weight(1f)) { + AnimatedContent( + targetState = currentExerciseState?.item?.id, + transitionSpec = { + slideInHorizontally { height -> height }.togetherWith(slideOutHorizontally { height -> -height }) + }, + label = "VocabularyCardAnimation" + ) { targetState -> + if (currentExerciseState != null && targetState == currentExerciseState.item.id) { + VocabularyExerciseRenderer( + state = currentExerciseState, + onAction = viewModel::onAction, + navController = navController + ) + } + } + } + + ExerciseControls( + state = currentExerciseState, + onAction = viewModel::onAction + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyHeatMapScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyHeatMapScreen.kt new file mode 100644 index 0000000..30fbdfc --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyHeatMapScreen.kt @@ -0,0 +1,554 @@ +package eu.gaudian.translator.view.vocabulary + +import android.annotation.SuppressLint +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ProgressIndicatorDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.viewmodel.CategoryProgress +import eu.gaudian.translator.viewmodel.ProgressViewModel +import kotlinx.coroutines.launch +import kotlinx.datetime.DateTimeUnit +import kotlinx.datetime.LocalDate +import kotlinx.datetime.TimeZone +import kotlinx.datetime.minus +import kotlinx.datetime.number +import kotlinx.datetime.plus +import kotlinx.datetime.todayIn +import java.time.YearMonth +import java.time.format.DateTimeFormatter +import kotlin.math.log2 +import kotlin.time.Clock +import kotlin.time.ExperimentalTime + +// Data class to hold the data for a single month's grid +private data class HeatmapMonth(val yearMonth: YearMonth, val weeks: List>) + +@OptIn(ExperimentalTime::class) +@Composable +fun VocabularyHeatmapScreen( + viewModel: ProgressViewModel = ProgressViewModel.getInstance(androidx.compose.ui.platform.LocalContext.current.applicationContext as android.app.Application), navController: NavController +) { + // State and derived data + val dailyStats by viewModel.dailyVocabularyStats.collectAsState() + val today = remember { Clock.System.todayIn(TimeZone.currentSystemDefault()) } + val categoryProgressList by viewModel.categoryProgressList.collectAsState() + val streak by viewModel.streak.collectAsState() + val totalWordsCompleted by viewModel.totalWordsCompleted.collectAsState() + val totalWordsInProgress by viewModel.totalWordsInProgress.collectAsState() + val startDate = remember { today.minus(12, DateTimeUnit.MONTH) } + + AppScaffold( + topBar = { + AppTopAppBar( + title = { Text(stringResource(R.string.label_vocabulary_activity)) }, + onNavigateBack = { navController.popBackStack() }, + ) + }, + modifier = Modifier.fillMaxSize() + ) { paddingValues -> + Column( + // Allow content to scroll if it exceeds the screen height + modifier = Modifier + .verticalScroll(rememberScrollState()) + .padding(paddingValues) + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally + ) { + // Heatmap + HeatmapCalendar( + dailyStats = dailyStats, + startDate = startDate, + endDate = today, + ) + + // Spacer and Legend + Spacer(modifier = Modifier.height(24.dp)) + Legend( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp) + ) + Spacer(modifier = Modifier.height(24.dp)) + CategoryProgressSection( + categoryProgress = categoryProgressList, + ) + Spacer(modifier = Modifier.height(24.dp)) + StatsOverview( + streak = streak, + wordsCompleted = totalWordsCompleted, + wordsInProgress = totalWordsInProgress, + ) + } + } + } +} + +/** + * Generates a list of HeatmapMonth objects, each containing the data for one month's grid. + */ +private fun generateHeatmapMonths(startDate: LocalDate, endDate: LocalDate): List { + val months = mutableListOf() + val startMonth = YearMonth.of(startDate.year, startDate.month.number) + val endMonth = YearMonth.of(endDate.year, endDate.month.number) + + var currentMonth = startMonth + while (!currentMonth.isAfter(endMonth)) { + months.add(HeatmapMonth( + yearMonth = currentMonth, + weeks = generateWeeksForMonth(currentMonth) + )) + currentMonth = currentMonth.plusMonths(1) + } + return months +} + +/** + * Generates the list of weeks for a single month, with padding for alignment. + */ +private fun generateWeeksForMonth(yearMonth: YearMonth): List> { + val firstDayOfMonth = yearMonth.atDay(1) + val lastDayOfMonth = yearMonth.atEndOfMonth() + val days = mutableListOf() + + val startDayOfWeek = firstDayOfMonth.dayOfWeek.value + repeat(startDayOfWeek - 1) { days.add(null) } + + for (day in 1..lastDayOfMonth.dayOfMonth) { + val date = yearMonth.atDay(day) + days.add(LocalDate(date.year, date.monthValue, date.dayOfMonth)) + } + + return days.chunked(7) +} + + +@SuppressLint("FrequentlyChangingValue") +@Composable +private fun HeatmapCalendar( + dailyStats: Map, + startDate: LocalDate, + endDate: LocalDate, + modifier: Modifier = Modifier +) { + val months = remember(startDate, endDate) { generateHeatmapMonths(startDate, endDate) } + val maxCount = remember(dailyStats) { dailyStats.values.maxOrNull() ?: 1 } + val coroutineScope = rememberCoroutineScope() + + val lazyListState = rememberLazyListState(initialFirstVisibleItemIndex = months.size - 1) + var currentMonth by remember { mutableStateOf(months.last().yearMonth) } + + LaunchedEffect(lazyListState.firstVisibleItemIndex) { + if (months.isNotEmpty() && lazyListState.firstVisibleItemIndex < months.size) { + currentMonth = months[lazyListState.firstVisibleItemIndex].yearMonth + } + } + + Column(modifier = modifier) { + MonthHeader( + month = currentMonth, + onPrev = { + coroutineScope.launch { + if (lazyListState.firstVisibleItemIndex > 0) { + lazyListState.animateScrollToItem(lazyListState.firstVisibleItemIndex - 1) + } + } + }, + onNext = { + coroutineScope.launch { + if (lazyListState.firstVisibleItemIndex < months.size - 1) { + lazyListState.animateScrollToItem(lazyListState.firstVisibleItemIndex + 1) + } + } + } + ) + Spacer(modifier = Modifier.height(8.dp)) + + // This BoxWithConstraints ensures each month grid gets the full width of the container. + BoxWithConstraints { + val itemWidth = this.maxWidth + LazyRow( + state = lazyListState, + // The fling behavior makes the list snap to the start of each item. + flingBehavior = rememberSnapFlingBehavior(lazyListState = lazyListState), + horizontalArrangement = Arrangement.spacedBy(16.dp) // Space between months + ) { + items(months.size) { index -> + MonthGrid( + modifier = Modifier.width(itemWidth), + month = months[index], + dailyStats = dailyStats, + maxCount = maxCount + ) + } + } + } + } +} + +@Composable +private fun MonthHeader( + month: YearMonth, + onPrev: () -> Unit, + onNext: () -> Unit, + modifier: Modifier = Modifier +) { + val formatter = remember { + @Suppress("HardCodedStringLiteral") + DateTimeFormatter.ofPattern("MMMM yyyy") + } + Row( + modifier = modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center + ) { + IconButton(onClick = onPrev) { + Icon(AppIcons.ArrowLeft, contentDescription = stringResource(R.string.previous_month)) + } + Text( + text = month.format(formatter), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(horizontal = 16.dp) + ) + IconButton(onClick = onNext) { + Icon(AppIcons.ArrowRight, contentDescription = stringResource(R.string.next_month)) + } + } +} + +@Composable +private fun MonthGrid( + month: HeatmapMonth, + dailyStats: Map, + maxCount: Int, + modifier: Modifier = Modifier +) { + Column(modifier = modifier) { + Row(modifier = Modifier.fillMaxWidth()) { + val locale = java.util.Locale.getDefault() + // Generate localized short weekday labels for Monday to Sunday. + val dayFormatter = remember(locale) { + DateTimeFormatter.ofPattern("EEEEE", locale) + } + val baseMonday = java.time.LocalDate.of(2024, 9, 2) // a known Monday + val days = (0..6).map { offset -> + val d = baseMonday.plusDays(offset.toLong()) + // Use 1-letter if available; otherwise fallback to short name and take first char + val label = d.format(dayFormatter) + if (label.length <= 2) label else label.first().toString() + } + days.forEach { day -> + Text( + text = day, + style = MaterialTheme.typography.bodySmall, + modifier = Modifier.weight(1f), + textAlign = TextAlign.Center + ) + } + } + Spacer(modifier = Modifier.height(4.dp)) + + month.weeks.forEach { week -> + Row(modifier = Modifier.fillMaxWidth()) { + for (i in 0 until 7) { + val date = week.getOrNull(i) + if (date != null) { + val count = dailyStats[date] ?: 0 + val colorIntensity = if (count > 0) { + (log2(count.toFloat() + 1) / log2(maxCount.toFloat() + 1)) + } else { + 0f + }.coerceIn(0f, 1f) + + DaySquare( + date = date, + count = count, + colorIntensity = colorIntensity, + modifier = Modifier + .weight(1f) + .aspectRatio(1f) + ) + } else { + Spacer(modifier = Modifier + .weight(1f) + .aspectRatio(1f)) + } + } + } + } + } +} + + +@OptIn(ExperimentalTime::class) +@Composable +private fun DaySquare( + date: LocalDate, + count: Int, + colorIntensity: Float, + modifier: Modifier = Modifier +) { + val today = remember { Clock.System.todayIn(TimeZone.currentSystemDefault()) } + val isToday = date == today + val isFuture = date > today + val baseColor = MaterialTheme.colorScheme.primary + + val backgroundColor = when { + isFuture -> MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.1f) // Faint color for future dates + colorIntensity > 0 -> baseColor.copy(alpha = (0.15f + (colorIntensity * 0.85f)).coerceIn(0.15f, 1f)) + else -> MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.3f) // For past/today with no activity + } + + Box( + modifier = modifier + .padding(2.dp) + .clip(MaterialTheme.shapes.extraSmall) + .background(backgroundColor) + .border( + width = 1.dp, + color = if (isToday) MaterialTheme.colorScheme.outline else Color.Transparent, + shape = MaterialTheme.shapes.extraSmall + ), + contentAlignment = Alignment.Center + ) { + // Only show the count for past and present days + if (count > 0 && !isFuture) { + Text( + text = count.toString(), + fontSize = 8.sp, + color = if (colorIntensity > 0.6f) Color.White else MaterialTheme.colorScheme.onSurface + ) + } + } +} + +@Composable +private fun Legend(modifier: Modifier = Modifier) { + Row( + modifier = modifier, + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.End + ) { + Text( + text = stringResource(R.string.less), + style = MaterialTheme.typography.bodySmall, + modifier = Modifier.padding(end = 6.dp) + ) + + val baseColor = MaterialTheme.colorScheme.primary + val shades = listOf(0.15f, 0.4f, 0.7f, 1.0f) + shades.forEach { alpha -> + Box( + modifier = Modifier + .size(14.dp) + .clip(MaterialTheme.shapes.extraSmall) + .background(baseColor.copy(alpha = alpha)) + .padding(end = 2.dp) // Add spacing between color boxes + ) + } + + Text( + text = stringResource(R.string.more), + style = MaterialTheme.typography.bodySmall, + modifier = Modifier.padding(start = 6.dp) // Increased spacing + ) + } +} + +// --- Previews for easy testing in Android Studio --- + +@OptIn(ExperimentalTime::class) +@Preview(showBackground = true, widthDp = 380) +@Composable +fun VocabularyHeatmapScreenPreview() { + val today = Clock.System.todayIn(TimeZone.currentSystemDefault()) + val startDate = today.minus(12, DateTimeUnit.MONTH) + val sampleStats = buildMap { + var currentDate = startDate + while (currentDate <= today) { + if ((1..10).random() > 2) { + put(currentDate, (1..25).random()) + } + currentDate = currentDate.plus(1, DateTimeUnit.DAY) + } + } + + Column(modifier = Modifier + .fillMaxSize() + .padding(16.dp)) { + Text( + text = stringResource(R.string.label_vocabulary_activity), + style = MaterialTheme.typography.headlineMedium, + modifier = Modifier.padding(bottom = 24.dp) + ) + HeatmapCalendar(dailyStats = sampleStats, startDate = startDate, endDate = today) + Spacer(modifier = Modifier.height(24.dp)) + Legend(modifier = Modifier.fillMaxWidth()) + } +} + +@Composable +fun StatsOverview( + streak: Int, + wordsCompleted: Int, + wordsInProgress: Int, + modifier: Modifier = Modifier +) { + Row( + modifier = modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + StatCard(title = stringResource(R.string.current_streak), value = stringResource( + R.string.days_2d, + streak + ), modifier = Modifier.weight(1f)) + StatCard(title = stringResource(R.string.words_completed), value = wordsCompleted.toString(), modifier = Modifier.weight(1f)) + StatCard(title = stringResource(R.string.text_in_progress), value = wordsInProgress.toString(), modifier = Modifier.weight(1f)) + } +} + +@Composable +private fun StatCard(title: String, value: String, modifier: Modifier = Modifier) { + Card( + modifier = modifier, + elevation = CardDefaults.cardElevation(defaultElevation = 2.dp) + ) { + Column( + modifier = Modifier.padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Text( + text = title, + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Spacer(modifier = Modifier.height(4.dp)) + Text( + text = value, + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold + ) + } + } +} + + +/** + * A Composable to show a detailed list of progress per vocabulary category. + * + * How to use: + * 1. Collect the category progress list from your ViewModel: + * val categoryProgress by viewModel.categoryProgressList.collectAsState() + * + * 2. Call this composable in the main Column of your screen, likely below the StatsOverview: + * CategoryProgressSection(categoryProgress = categoryProgress) + */ +@Composable +fun CategoryProgressSection( + categoryProgress: List, + modifier: Modifier = Modifier +) { + Column(modifier = modifier) { + Text( + text = stringResource(R.string.progress_by_category), + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.padding(bottom = 8.dp, top = 24.dp) + ) + categoryProgress.forEach { progress -> + CategoryProgressItem(progress = progress) + Spacer(modifier = Modifier.height(12.dp)) + } + } +} + +@Composable +private fun CategoryProgressItem(progress: CategoryProgress) { + val progressPercentage = if (progress.totalItems > 0) { + progress.itemsCompleted.toFloat() / progress.totalItems.toFloat() + } else { + 0f + } + // Animate the progress bar's movement + val animatedProgress by animateFloatAsState( + targetValue = progressPercentage, + animationSpec = ProgressIndicatorDefaults.ProgressAnimationSpec, + label = "CategoryProgressAnimation" + ) + + Column { + Row(modifier = Modifier.fillMaxWidth()) { + Text( + text = progress.vocabularyCategory.name, + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.SemiBold + ) + Spacer(modifier = Modifier.weight(1f)) + Text( + text = "${progress.itemsCompleted} / ${progress.totalItems}", + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + Spacer(modifier = Modifier.height(4.dp)) + LinearProgressIndicator( + progress = { animatedProgress }, + modifier = Modifier + .fillMaxWidth() + .height(8.dp) + .clip(MaterialTheme.shapes.small), + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyListScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyListScreen.kt new file mode 100644 index 0000000..e4764dd --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularyListScreen.kt @@ -0,0 +1,973 @@ +@file:Suppress("HardCodedStringLiteral", "AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.vocabulary + +import android.os.Parcelable +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.Crossfade +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.FabPosition +import androidx.compose.material3.FilterChip +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.OutlinedCard +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavHostController +import androidx.navigation.compose.rememberNavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppSwitch +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.MultipleLanguageDropdown +import eu.gaudian.translator.view.composable.insertBreakOpportunities +import eu.gaudian.translator.view.dialogs.CategoryDropdown +import eu.gaudian.translator.view.dialogs.CategorySelectionDialog +import eu.gaudian.translator.view.dialogs.StageSelectionDialog +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.LanguageConfigViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel.SortOrder +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.launch +import kotlinx.parcelize.Parcelize + + +@Parcelize +private data class VocabularyFilterState( + val searchQuery: String = "", + val selectedStage: VocabularyStage? = null, + val sortOrder: SortOrder = SortOrder.NEWEST_FIRST, + val categoryId: Int? = null, + val dueTodayOnly: Boolean = false, + val selectedLanguageIds: List = emptyList(), + val selectedWordClass: String? = null +) : Parcelable + +@Composable +fun VocabularyListScreen( + categoryId: Int? = null, + showDueTodayOnly: Boolean? = null, + stage: VocabularyStage? = null, + onNavigateToItem: (VocabularyItem) -> Unit?, + onNavigateBack: (() -> Unit)? = null, + navController: NavHostController? = null, + itemsToShow: List = emptyList(), + isRemoveFromCategoryEnabled: Boolean = false, + showTopBar: Boolean = true, + enableNavigationButtons: Boolean = false +) { + val scope = rememberCoroutineScope() + val activity = LocalContext.current.findActivity() + val lazyListState = rememberLazyListState() + val vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(LocalContext.current.applicationContext as android.app.Application) + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val categoryViewModel: CategoryViewModel = viewModel() + val context = LocalContext.current + + var filterState by rememberSaveable { + mutableStateOf( + VocabularyFilterState( + categoryId = categoryId, + dueTodayOnly = showDueTodayOnly == true, + selectedStage = stage + ) + ) + } + val isFilterActive by remember(filterState) { + derivedStateOf { + filterState.selectedStage != null || + (filterState.categoryId != null && filterState.categoryId != 0) || + filterState.dueTodayOnly || + filterState.selectedLanguageIds.isNotEmpty() || + !filterState.selectedWordClass.isNullOrBlank() + } + } + var showFilterSheet by remember { mutableStateOf(false) } + + var selection by remember { mutableStateOf>(emptySet()) } + val isInSelectionMode = selection.isNotEmpty() + + var showCategoryDialog by remember { mutableStateOf(false) } + var showStageDialog by remember { mutableStateOf(false) } + var isSearchActive by rememberSaveable { mutableStateOf(false) } + + val allLanguages by languageViewModel.allLanguages.collectAsStateWithLifecycle(initialValue = emptyList()) + val languagesPresent by vocabularyViewModel.languagesPresent.collectAsStateWithLifecycle(initialValue = emptySet()) + val categoryNameFlow = remember(categoryId) { categoryId?.let { categoryViewModel.getCategoryById(it) } } + + val vocabularyItemsFlow: Flow> = remember(filterState) { + vocabularyViewModel.filterVocabularyItems( + languages = filterState.selectedLanguageIds, + query = filterState.searchQuery.takeIf { it.isNotBlank() }, + categoryId = filterState.categoryId, + stage = filterState.selectedStage, + wordClass = filterState.selectedWordClass, + dueTodayOnly = filterState.dueTodayOnly, + sortOrder = filterState.sortOrder + ) + } + + val vocabularyItems: List = itemsToShow.ifEmpty { + vocabularyItemsFlow.collectAsStateWithLifecycle(initialValue = emptyList()).value + } + + LaunchedEffect(categoryId, showDueTodayOnly, stage) { + filterState = filterState.copy( + categoryId = categoryId, + dueTodayOnly = showDueTodayOnly == true, + selectedStage = stage + ) + } + + // Set navigation context when navigation buttons are enabled + LaunchedEffect(vocabularyItems, enableNavigationButtons) { + if (enableNavigationButtons && vocabularyItems.isNotEmpty()) { + // Set the first item as the current navigation context + vocabularyViewModel.setNavigationContext(vocabularyItems, vocabularyItems.first().id) + } + } + + + val allItemsSelected = remember(vocabularyItems, selection) { + vocabularyItems.isNotEmpty() && selection.size == vocabularyItems.size + } + + + AppScaffold( + modifier = Modifier + .padding(0.dp) + .background(Color.Magenta), + topBar = { + val topBarMode = when { + isInSelectionMode -> "selection" + isSearchActive -> "search" + showTopBar -> "default" + else -> "none" + } + Crossfade( + modifier = Modifier.padding(0.dp), + targetState = topBarMode, + label = "top-bar-anim" + ) { state -> + when (state) { + "selection" -> ContextualTopAppBar( + modifier = Modifier.padding(0.dp), + selectionCount = selection.size, + allItemsSelected = allItemsSelected, + isRemoveEnabled = isRemoveFromCategoryEnabled, + onSelectAllClick = { + selection = if (allItemsSelected) { + emptySet() + } else { + vocabularyItems.map { it.id.toLong() }.toSet() + } + }, + onCloseClick = { selection = emptySet() }, + onDeleteClick = { + vocabularyViewModel.deleteVocabularyItemsById(selection.map { it.toInt() }) + selection = emptySet() + }, + onMoveToCategoryClick = { showCategoryDialog = true }, + onMoveToStageClick = { showStageDialog = true }, + onRemoveFromCategoryClick = { + if (categoryId != null) { + val itemsToRemove = vocabularyItems.filter { selection.contains(it.id.toLong()) } + vocabularyViewModel.removeVocabularyItemsFromCategory(itemsToRemove, categoryId) + selection = emptySet() + } + } + ) + + "search" -> SearchTopAppBar( + searchQuery = filterState.searchQuery, + onQueryChanged = { newQuery -> + filterState = filterState.copy(searchQuery = newQuery) + }, + onCloseSearch = { + isSearchActive = false + filterState = filterState.copy(searchQuery = "") + } + ) + + "default" -> DefaultTopAppBar( + title = when { + filterState.searchQuery.isNotBlank() -> "Results for: \"${filterState.searchQuery}\"" // Consider using a string resource + + stage != null -> stringResource(R.string.text_stage_2d, stage.toString(context)) + categoryId != null && categoryId != 0 -> stringResource(R.string.label_category_2d, + categoryNameFlow?.collectAsStateWithLifecycle(initialValue = null)?.value?.name + ?: "" + ) + showDueTodayOnly == true -> stringResource(R.string.text_due_today) + else -> stringResource(R.string.label_all_vocabulary) + }, + currentSortOrder = filterState.sortOrder, + isFilterActive = isFilterActive, + onSortOrderChanged = { newOrder -> + filterState = filterState.copy(sortOrder = newOrder) + }, + onFilterClick = { showFilterSheet = true }, + onSearchClick = { isSearchActive = true }, + onNavigateBack = onNavigateBack + ) + } + } + }, + floatingActionButton = { + val showFab by remember { derivedStateOf { lazyListState.firstVisibleItemIndex > 5 && !isInSelectionMode } } + AnimatedVisibility(visible = showFab) { + FloatingActionButton( + onClick = { scope.launch { lazyListState.animateScrollToItem(0) } }, + shape = CircleShape, + modifier = Modifier.size(50.dp), + containerColor = MaterialTheme.colorScheme.surfaceVariant + ) { + Icon(AppIcons.ArrowCircleUp, contentDescription = "Scroll to top") + } + } + }, + floatingActionButtonPosition = FabPosition.Center + ) { paddingValues -> + Column(modifier = Modifier.padding(paddingValues).padding(bottom = 0.dp)) { + if (vocabularyItems.isEmpty()) { + Column( + modifier = Modifier + .fillMaxSize() + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Image( + modifier = Modifier.size(200.dp), + painter = painterResource(id = R.drawable.ic_nothing_found), + contentDescription = stringResource(id = R.string.no_vocabulary_items_found_perhaps_try_changing_the_filters) + ) + Spacer(modifier = Modifier.size(16.dp)) + + Box(modifier = Modifier + .fillMaxSize() + .padding(8.dp), contentAlignment = Alignment.Center) { + Text( + text = stringResource(R.string.no_vocabulary_items_found_perhaps_try_changing_the_filters), + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant, + textAlign = androidx.compose.ui.text.style.TextAlign.Center + ) + } + } + } else { + LazyColumn( + state = lazyListState, + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + contentPadding = PaddingValues(vertical = 0.dp) + ) { + items( + items = vocabularyItems, + key = { it.id } + ) { item -> + val isSelected = selection.contains(item.id.toLong()) + VocabularyListItem( + item = item, + allLanguages = allLanguages, + isSelected = isSelected, + onItemClick = { + if (isInSelectionMode) { + selection = if (isSelected) { + selection - item.id.toLong() + } else { + selection + item.id.toLong() + } + } else { + if (navController != null && enableNavigationButtons) { + vocabularyViewModel.setNavigationContext(vocabularyItems, item.id) + navController.navigate("vocabulary_detail/${item.id}") + } else { + onNavigateToItem(item) + } + } + }, + onItemLongClick = { + if (!isInSelectionMode) { + selection = setOf(item.id.toLong()) + } + }, + onDeleteClick = { + vocabularyViewModel.deleteData(VocabularyViewModel.DeleteType.VOCABULARY_ITEM, item = item) + }, + modifier = Modifier.animateItem() + ) + } + } + } + } + + + if (showFilterSheet) { + FilterSortBottomSheet( + currentFilterState = filterState, + onDismiss = { showFilterSheet = false }, + onApplyFilters = { newState -> + filterState = newState + showFilterSheet = false + scope.launch { lazyListState.scrollToItem(0) } + }, + categoryViewModel = categoryViewModel, + languageViewModel = languageViewModel, + languagesPresent = allLanguages.filter { it.nameResId in languagesPresent }, + hideCategory = categoryId != null && categoryId != 0, + hideStage = stage != null + ) + } + + if (showCategoryDialog) { + val selectedItems = vocabularyItems.filter { selection.contains(it.id.toLong()) } + CategorySelectionDialog( + viewModel = categoryViewModel, + onCategorySelected = { + vocabularyViewModel.addVocabularyItemToCategories( + selectedItems, + it.mapNotNull { category -> category?.id } + ) + showCategoryDialog = false + }, + onDismissRequest = { showCategoryDialog = false } + ) + } + + if (showStageDialog) { + val selectedItems = vocabularyItems.filter { selection.contains(it.id.toLong()) } + StageSelectionDialog( + onStageSelected = { selectedStage -> + selectedStage?.let { + vocabularyViewModel.addVocabularyItemToStage(selectedItems, it) + } + showStageDialog = false + selection = emptySet() + }, + onDismissRequest = { showStageDialog = false } + ) + } + } +} + +@ThemePreviews +@Composable +fun VocabularyListScreenPreview() { + val navController = rememberNavController() + VocabularyListScreen( + categoryId = 1, + showDueTodayOnly = false, + stage = VocabularyStage.NEW, + onNavigateToItem = {}, + onNavigateBack = {}, + navController = navController + ) +} + + +@Composable +private fun DefaultTopAppBar( + title: String, + onFilterClick: () -> Unit, + onNavigateBack: (() -> Unit)?, + currentSortOrder: SortOrder, + isFilterActive: Boolean, // <-- Add new parameter + onSortOrderChanged: (SortOrder) -> Unit, + onSearchClick: () -> Unit +) { + + var showSortMenu by remember { mutableStateOf(false) } + AppTopAppBar( + modifier = Modifier.height(56.dp), + title = { + + Box( + modifier = Modifier.fillMaxHeight(), + contentAlignment = Alignment.Center + ) { + Text(title) + } + }, + navigationIcon = { + onNavigateBack?.let { + IconButton(onClick = it) { + Icon( + AppIcons.ArrowBack, + contentDescription = "stringResource(R.string.navigate_back)" + ) + } + } + }, + actions = { + IconButton(onClick = onSearchClick) { + Icon( + imageVector = AppIcons.Search, + contentDescription = stringResource(R.string.cd_search)) + } + + Box { + IconButton(onClick = { showSortMenu = true }) { + Icon( + imageVector = AppIcons.Sort, + contentDescription = stringResource(R.string.sort) + ) + } + DropdownMenu( + expanded = showSortMenu, + onDismissRequest = { showSortMenu = false } + ) { + SortOrder.entries.forEach { order -> + DropdownMenuItem( + text = { Text(order.name.replace('_', ' ').lowercase().replaceFirstChar { it.titlecase() }) }, + onClick = { + onSortOrderChanged(order) + showSortMenu = false + }, + leadingIcon = { + if (currentSortOrder == order) { + Icon( + imageVector = AppIcons.Check, + contentDescription = stringResource(R.string.text_selected) + ) + } + } + ) + } + } + } + IconButton(onClick = onFilterClick) { + Icon( + imageVector = if (isFilterActive) { + AppIcons.FilterFilled + } else { + AppIcons.FilterOutlined + }, + contentDescription = stringResource(R.string.filter_and_sort), + tint = if (isFilterActive) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface + ) + } + } + + ) +} + + + +@Composable +private fun SearchTopAppBar( + searchQuery: String, + onQueryChanged: (String) -> Unit, + onCloseSearch: () -> Unit +) { + val focusRequester = remember { FocusRequester() } + + LaunchedEffect(Unit) { + focusRequester.requestFocus() + } + + AppTopAppBar( + modifier = Modifier.height(56.dp), + title = { + Box( + modifier = Modifier.fillMaxHeight(), + contentAlignment = Alignment.Center + ) { + BasicTextField( + value = searchQuery, + onValueChange = onQueryChanged, + modifier = Modifier + .fillMaxWidth() + .focusRequester(focusRequester), + textStyle = MaterialTheme.typography.bodyLarge.copy( + color = MaterialTheme.colorScheme.onSurface + ), + singleLine = true, + cursorBrush = SolidColor(MaterialTheme.colorScheme.primary), + decorationBox = { innerTextField -> + Box(contentAlignment = Alignment.CenterStart) { + if (searchQuery.isEmpty()) { + Text( + text = stringResource(R.string.search_vocabulary), + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + innerTextField() + } + } + ) + } + }, + navigationIcon = { + IconButton(onClick = onCloseSearch) { + Icon( + imageVector = AppIcons.Close, + contentDescription = stringResource(R.string.label_close_search) + ) + } + }, + actions = { + } + ) +} + +@ThemePreviews +@Composable +fun SearchTopAppBarPreview() { + SearchTopAppBar( + searchQuery = stringResource(R.string.search_query), + onQueryChanged = {}, + onCloseSearch = {} + ) +} + +@Composable +private fun ContextualTopAppBar( + modifier: Modifier = Modifier, + selectionCount: Int, + allItemsSelected: Boolean, + isRemoveEnabled: Boolean, + onCloseClick: () -> Unit, + onSelectAllClick: () -> Unit, + onDeleteClick: () -> Unit, + onMoveToCategoryClick: () -> Unit, + onMoveToStageClick: () -> Unit, + onRemoveFromCategoryClick: () -> Unit +) { + var showOverflowMenu by remember { mutableStateOf(false) } + + AppTopAppBar( + modifier = modifier.height(56.dp), + title = { + Box( + modifier = Modifier.fillMaxHeight(), + contentAlignment = Alignment.Center + ) { + Text(stringResource(R.string.d_selected, selectionCount)) + } + }, + navigationIcon = { + IconButton(onClick = onCloseClick) { + Icon(imageVector = AppIcons.Close, contentDescription = stringResource(R.string.label_close_selection_mode)) + } + }, + actions = { + IconButton(onClick = onSelectAllClick) { + Icon( + imageVector = AppIcons.SelectAll, + contentDescription = if (allItemsSelected) stringResource(R.string.deselect_all) else stringResource(R.string.select_all) + ) + } + + IconButton(onClick = onDeleteClick) { + Icon(AppIcons.Delete, contentDescription = stringResource(R.string.label_delete)) + } + + Box { + IconButton(onClick = { showOverflowMenu = true }) { + Icon(imageVector = AppIcons.More, contentDescription = stringResource(R.string.more_actions)) + } + DropdownMenu( + expanded = showOverflowMenu, + onDismissRequest = { showOverflowMenu = false } + ) { + DropdownMenuItem( + text = { Text(stringResource(R.string.move_to_category)) }, + onClick = { + onMoveToCategoryClick() + showOverflowMenu = false + }, + leadingIcon = { Icon(AppIcons.Category, contentDescription = null) } + ) + if (isRemoveEnabled) { + DropdownMenuItem( + text = { Text(stringResource(R.string.remove_from_category)) }, + onClick = { + onRemoveFromCategoryClick() + showOverflowMenu = false + }, + leadingIcon = { Icon(AppIcons.Remove, contentDescription = null) } + ) + } + DropdownMenuItem( + text = { Text(stringResource(R.string.move_to_stage)) }, + onClick = { + onMoveToStageClick() + showOverflowMenu = false + }, + leadingIcon = { Icon(AppIcons.Stages, contentDescription = null) } + ) + } + } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + titleContentColor = MaterialTheme.colorScheme.onPrimaryContainer, + actionIconContentColor = MaterialTheme.colorScheme.onPrimaryContainer, + navigationIconContentColor = MaterialTheme.colorScheme.onPrimaryContainer + ) + ) +} + + +@ThemePreviews +@Composable +fun ContextualTopAppBarPreview() { + ContextualTopAppBar( + selectionCount = 5, + allItemsSelected = false, + isRemoveEnabled = true, + onCloseClick = {}, + onSelectAllClick = {}, + onDeleteClick = {}, + onMoveToCategoryClick = {}, + onMoveToStageClick = {}, + onRemoveFromCategoryClick = {} + ) +} + +@Composable +private fun VocabularyListItem( + item: VocabularyItem, + allLanguages: List, + isSelected: Boolean, + onItemClick: () -> Unit, + onItemLongClick: () -> Unit, + onDeleteClick: () -> Unit, + modifier: Modifier = Modifier +) { + val languageMap = remember(allLanguages) { allLanguages.associateBy { it.nameResId } } + val langFirst = item.languageFirstId?.let { languageMap[it]?.name } ?: "" + val langSecond = item.languageSecondId?.let { languageMap[it]?.name } ?: "" + + OutlinedCard( + modifier = modifier + .fillMaxWidth() + .clip(CardDefaults.shape) + .combinedClickable( + onClick = onItemClick, + onLongClick = onItemLongClick + ) + .animateContentSize(), + elevation = CardDefaults.cardElevation(defaultElevation = if (isSelected) 4.dp else 0.dp), + colors = CardDefaults.cardColors( + containerColor = if (isSelected) MaterialTheme.colorScheme.primaryContainer + else MaterialTheme.colorScheme.surface + ), + border = BorderStroke( + width = if (isSelected) 1.5.dp else 1.dp, + color = if (isSelected) MaterialTheme.colorScheme.primary + else MaterialTheme.colorScheme.outline.copy(alpha = 0.5f) + ) + ) { + Row( + modifier = Modifier.padding(horizontal = 4.dp, vertical = 6.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Column( + modifier = Modifier.weight(1f), + verticalArrangement = Arrangement.spacedBy(2.dp) + ) { + LanguageRow(word = item.wordFirst, language = langFirst) + HorizontalDivider(color = MaterialTheme.colorScheme.outline.copy(alpha = 0.3f)) + LanguageRow(word = item.wordSecond, language = langSecond) + } + + Box( + modifier = Modifier.padding(4.dp), + contentAlignment = Alignment.Center + ) { + Crossfade(targetState = isSelected, label = "action-icon-fade") { selected -> + if (selected) { + Icon( + imageVector = AppIcons.Check, + contentDescription = "Selected", + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(24.dp) + ) + } else { + IconButton(onClick = onDeleteClick) { + Icon( + imageVector = AppIcons.Delete, + contentDescription = stringResource(id = R.string.label_delete), + tint = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f), + ) + } + } + } + } + } + } +} + + + +@Composable +private fun LanguageRow(word: String, language: String) { + Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(vertical = 2.dp)) { + Text( + text = insertBreakOpportunities(word), + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.weight(0.7f) + ) + Spacer(Modifier.width(8.dp)) + Text( + text = language, + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + maxLines = 1, + modifier = Modifier.weight(0.3f) + ) + } +} + +@ThemePreviews +@Composable +fun LanguageRowPreview() { + LanguageRow( + word = "Hello", + language = "English" + ) +} + + +@Composable +private fun FilterSortBottomSheet( + currentFilterState: VocabularyFilterState, + categoryViewModel: CategoryViewModel, + languageViewModel: LanguageViewModel, + languagesPresent: List, + onDismiss: () -> Unit, + onApplyFilters: (VocabularyFilterState) -> Unit, + hideCategory: Boolean = false, + hideStage: Boolean = false +) { + var selectedStage by rememberSaveable { mutableStateOf(currentFilterState.selectedStage) } + var dueTodayOnly by rememberSaveable { mutableStateOf(currentFilterState.dueTodayOnly) } + var selectedCategoryId by rememberSaveable { mutableStateOf(currentFilterState.categoryId) } + var selectedLanguageIds by rememberSaveable { mutableStateOf(currentFilterState.selectedLanguageIds) } + var selectedWordClass by rememberSaveable { mutableStateOf(currentFilterState.selectedWordClass) } + + val context = LocalContext.current + val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) + + val languageConfigViewModel: LanguageConfigViewModel = viewModel() + val allWordClasses by languageConfigViewModel.allWordClasses.collectAsStateWithLifecycle() + + ModalBottomSheet( + onDismissRequest = onDismiss, + sheetState = sheetState + ) { + Column( + modifier = Modifier + .padding(horizontal = 16.dp) + .navigationBarsPadding() + ) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + ) { + Text(stringResource(R.string.text_filter), style = MaterialTheme.typography.titleLarge) + Spacer(Modifier.weight(1f)) + TextButton(onClick = { + if (!hideStage) selectedStage = null + dueTodayOnly = false + if (!hideCategory) selectedCategoryId = null + selectedLanguageIds = emptyList() + selectedWordClass = null + }) { + Text(stringResource(R.string.label_clear_all), color = MaterialTheme.colorScheme.error) + } + Spacer(Modifier.width(8.dp)) + TextButton( + onClick = { + onApplyFilters( + currentFilterState.copy( + selectedStage = selectedStage, + dueTodayOnly = dueTodayOnly, + categoryId = selectedCategoryId, + selectedLanguageIds = selectedLanguageIds, + selectedWordClass = selectedWordClass + ) + ) + } + ) { + Text(stringResource(R.string.label_apply_filters), fontWeight = FontWeight.Bold) + } + } + HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) + + Column(modifier = Modifier.verticalScroll(rememberScrollState())) { + Spacer(Modifier.height(16.dp)) + + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + Text(stringResource(R.string.text_due_today_only), style = MaterialTheme.typography.bodyMedium) + Spacer(Modifier.width(8.dp)) + AppSwitch(checked = dueTodayOnly, onCheckedChange = { dueTodayOnly = it }) + } + Spacer(Modifier.height(16.dp)) + + Text(stringResource(R.string.language), style = MaterialTheme.typography.titleMedium) + Spacer(Modifier.height(8.dp)) + MultipleLanguageDropdown( + languageViewModel = languageViewModel, + onLanguagesSelected = { languages -> + selectedLanguageIds = languages.map { it.nameResId } + }, + alternateLanguages = languagesPresent + ) + Spacer(Modifier.height(16.dp)) + + if (!hideCategory) { + Text(stringResource(R.string.label_category), style = MaterialTheme.typography.titleMedium) + Spacer(Modifier.height(8.dp)) + CategoryDropdown( + categoryViewModel = categoryViewModel, + initialCategoryId = selectedCategoryId, + onCategorySelected = { categories -> + selectedCategoryId = categories.firstOrNull()?.id + } + ) + Spacer(Modifier.height(16.dp)) + } + + if (!hideStage) { + Text(stringResource(R.string.filter_by_stage), style = MaterialTheme.typography.titleMedium) + FlowRow( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + FilterChip( + selected = selectedStage == null, + onClick = { selectedStage = null }, + label = { Text(stringResource(R.string.label_all_stages)) } + ) + VocabularyStage.entries.forEach { stage -> + FilterChip( + selected = selectedStage == stage, + onClick = { selectedStage = stage }, + label = { Text(stage.toString(context)) } + ) + } + } + } + + if (allWordClasses.isNotEmpty()) { + Spacer(Modifier.height(16.dp)) + Text(stringResource(R.string.filter_by_word_type), style = MaterialTheme.typography.titleMedium) + FlowRow( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + FilterChip( + selected = selectedWordClass == null, + onClick = { selectedWordClass = null }, + label = { Text(stringResource(R.string.label_all_types)) } + ) + allWordClasses.forEach { wordClass -> + FilterChip( + selected = selectedWordClass == wordClass, + onClick = { selectedWordClass = wordClass }, + label = { Text(wordClass.replaceFirstChar { it.titlecase() }) } + ) + } + } + } + // Add padding at the bottom for better scrolling experience + Spacer(Modifier.height(16.dp)) + } + } + } +} + +@ThemePreviews +@Composable +fun FilterSortBottomSheetPreview() { + val activity = LocalContext.current.findActivity() + val categoryViewModel: CategoryViewModel = viewModel() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + FilterSortBottomSheet( + currentFilterState = VocabularyFilterState(), + categoryViewModel = categoryViewModel, + languageViewModel = languageViewModel, + languagesPresent = emptyList(), + onDismiss = {}, + onApplyFilters = {}, + hideCategory = false, + hideStage = false + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularySortingScreen.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularySortingScreen.kt new file mode 100644 index 0000000..fa5260f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/VocabularySortingScreen.kt @@ -0,0 +1,861 @@ +@file:Suppress("AssignedValueIsNeverRead") + +package eu.gaudian.translator.view.vocabulary + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeOut +import androidx.compose.animation.slideOutHorizontally +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.DividerDefaults +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.FilterChipDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SuggestionChip +import androidx.compose.material3.SuggestionChipDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavHostController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.TagCategory +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.utils.StringHelper +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppButton +import eu.gaudian.translator.view.composable.AppCard +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AppScaffold +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.AppTopAppBar +import eu.gaudian.translator.view.composable.SingleLanguageDropDown +import eu.gaudian.translator.view.dialogs.CategoryDropdown +import eu.gaudian.translator.view.dialogs.CreateCategoryListDialog +import eu.gaudian.translator.view.hints.SortingScreenHint +import eu.gaudian.translator.viewmodel.CategoryViewModel +import eu.gaudian.translator.viewmodel.LanguageConfigViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import okhttp3.internal.platform.PlatformRegistry.applicationContext + +enum class FilterMode { + NEW, DUPLICATES, FAULTY +} + +@Composable +fun VocabularySortingScreen( + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as android.app.Application), + categoryViewModel: CategoryViewModel = CategoryViewModel.getInstance(applicationContext as android.app.Application), + navController: NavHostController, + initialFilterMode: String? = null +) { + var sortOrder by remember { mutableStateOf(VocabularyViewModel.SortOrder.NEWEST_FIRST) } + val allDuplicateItems by vocabularyViewModel.allDuplicateItems.collectAsState() + val allFaultyItems by vocabularyViewModel.allFaultyItems.collectAsState() + val startingMode = remember { + try { + initialFilterMode?.let { FilterMode.valueOf(it.uppercase()) } + } catch (_: IllegalArgumentException) { + FilterMode.NEW + } + } + var filterMode by remember { mutableStateOf(startingMode) } + + LaunchedEffect(filterMode, allDuplicateItems, allFaultyItems) { + when (filterMode) { + FilterMode.DUPLICATES -> vocabularyViewModel.filterByIds(allDuplicateItems.map { it.id }) + FilterMode.FAULTY -> vocabularyViewModel.filterByIds(allFaultyItems.map { it.id }) + else -> vocabularyViewModel.clearFilter() // For NEW or null mode + } + } + + DisposableEffect(Unit) { + onDispose { + vocabularyViewModel.clearFilter() + } + } + + val itemsToDisplay + by vocabularyViewModel.filterVocabularyItems( + languages = null, + query = null, + categoryIds = null, + stage = if (filterMode == FilterMode.NEW) VocabularyStage.NEW else null, // Only filter by NEW stage in that mode + sortOrder = sortOrder, + ).collectAsState(initial = emptyList()) + + var showCreateCategoryDialog by remember { mutableStateOf(false) } + + if (showCreateCategoryDialog) { + CreateCategoryListDialog( + onDismiss = { showCreateCategoryDialog = false }, + onConfirm = { categoryName -> + categoryViewModel.createCategory( + TagCategory( + id = 0, + name = categoryName + ) + ) + showCreateCategoryDialog = false + } + ) + } + + AppScaffold( + modifier = Modifier.fillMaxSize(), + topBar = { + var showSortMenu by remember { mutableStateOf(false) } + var showFilterMenu by remember { mutableStateOf(false) } + + AppTopAppBar( + title = { Text(stringResource(R.string.sort_new_vocabulary)) }, + actions = { + Box { + IconButton(onClick = { showFilterMenu = true }) { + Icon( + imageVector = AppIcons.Filter, + contentDescription = stringResource(R.string.text_filter) + ) + } + DropdownMenu( + expanded = showFilterMenu, + onDismissRequest = { showFilterMenu = false } + ) { + DropdownMenuItem( + text = { Text(stringResource(R.string.new_items_only)) }, + onClick = { + filterMode = if (filterMode == FilterMode.NEW) null else FilterMode.NEW + showFilterMenu = false + }, + trailingIcon = { if (filterMode == FilterMode.NEW) Icon(AppIcons.Check, stringResource(R.string.enabled)) } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.duplicates_only)) }, + onClick = { + filterMode = if (filterMode == FilterMode.DUPLICATES) null else FilterMode.DUPLICATES + showFilterMenu = false + }, + trailingIcon = { if (filterMode == FilterMode.DUPLICATES) Icon(AppIcons.Check, stringResource(R.string.enabled)) } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.faulty_items_only)) }, + onClick = { + filterMode = if (filterMode == FilterMode.FAULTY) null else FilterMode.FAULTY + showFilterMenu = false + }, + trailingIcon = { if (filterMode == FilterMode.FAULTY) Icon(AppIcons.Check, stringResource(R.string.enabled)) } + ) + } + } + + // Sort Button and Menu + Box { + IconButton(onClick = { showSortMenu = true }) { + Icon( + imageVector = AppIcons.Sort, + contentDescription = stringResource(R.string.sort) + ) + } + DropdownMenu( + expanded = showSortMenu, + onDismissRequest = { showSortMenu = false } + ) { + DropdownMenuItem( + text = { Text(stringResource(R.string.newest_first)) }, + onClick = { + sortOrder = VocabularyViewModel.SortOrder.NEWEST_FIRST + showSortMenu = false + } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.oldest_first)) }, + onClick = { + sortOrder = VocabularyViewModel.SortOrder.OLDEST_FIRST + showSortMenu = false + } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.label_by_language)) }, + onClick = { + sortOrder = VocabularyViewModel.SortOrder.LANGUAGE + showSortMenu = false + } + ) + } + } + }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + Icon(AppIcons.ArrowBack, contentDescription = stringResource(R.string.cd_back)) + } + }, + hintContent = {SortingScreenHint.Content()} + ) + }, + + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + ) { + if (itemsToDisplay.isEmpty()) { + Text( + text = stringResource(R.string.no_new_vocabulary_to_sort), + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier + .align(Alignment.CenterHorizontally) + .padding(16.dp) + ) + } else { + LazyColumn( + modifier = Modifier.weight(1f), + verticalArrangement = Arrangement.spacedBy(8.dp), + contentPadding = paddingValues + ) { + items(itemsToDisplay, key = { it.id }) { item -> + VocabularySortingItem( + item = item, + filterMode = filterMode, // NEW: Pass the mode to the item + vocabularyViewModel = vocabularyViewModel, + categoryViewModel = categoryViewModel, + languageConfigViewModel = viewModel() + ) + } + } + AppButton( + onClick = { showCreateCategoryDialog = true }, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + ) { + Text(stringResource(R.string.create_new_category)) + } + } + } + } +} + +@Preview +@Composable +fun VocabularySortingScreenPreview() { + VocabularySortingScreen( + vocabularyViewModel = viewModel(), + categoryViewModel = viewModel(), + navController = NavHostController(LocalContext.current), + initialFilterMode = "NEW" + ) +} + +@Composable +fun VocabularySortingItem( + item: VocabularyItem, + filterMode: FilterMode?, // NEW: Receive the current filter mode + vocabularyViewModel: VocabularyViewModel, + categoryViewModel: CategoryViewModel, + languageConfigViewModel: LanguageConfigViewModel = viewModel() +) { + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + var wordFirst by remember { mutableStateOf(item.wordFirst) } + var wordSecond by remember { mutableStateOf(item.wordSecond) } + var selectedCategories by remember { mutableStateOf>(emptyList()) } + var langFirst by remember { mutableStateOf(null) } + var langSecond by remember { mutableStateOf(null) } + val isDuplicate by vocabularyViewModel.isDuplicateFlow(item.id).collectAsState(initial = false) + val duplicates by vocabularyViewModel.getDuplicatesOf(item).collectAsState(initial = emptyList()) + var visible by remember { mutableStateOf(true) } + val scope = rememberCoroutineScope() + + var articlesLangFirst by remember { mutableStateOf(emptySet()) } + var articlesLangSecond by remember { mutableStateOf(emptySet()) } + + var showDuplicateDialog by remember { mutableStateOf(false) } + + // NEW: Calculate if the item is valid for the "Done" button in faulty mode + val isItemNowValid by remember(wordFirst, wordSecond, langFirst, langSecond) { + mutableStateOf( + wordFirst.isNotBlank() && + wordSecond.isNotBlank() && + langFirst != null && + langSecond != null && + langFirst?.nameResId != langSecond?.nameResId && + langFirst?.nameResId != 0 && + langSecond?.nameResId != 0 + ) + } + + if (showDuplicateDialog && duplicates.isNotEmpty()) { + EnhancedDuplicateDialog( + newItem = item, + existingItem = duplicates.first(), + onDismiss = { showDuplicateDialog = false }, + onDelete = { + scope.launch { + showDuplicateDialog = false + visible = false + delay(350) + vocabularyViewModel.deleteVocabularyItemsById(listOf(item.id)) + } + }, + onMerge = { + scope.launch { + showDuplicateDialog = false + visible = false + delay(350) + vocabularyViewModel.mergeDuplicateItems(item, duplicates.first()) + } + } + ) + } + + LaunchedEffect(item) { + wordFirst = item.wordFirst + wordSecond = item.wordSecond + } + + LaunchedEffect(item.languageFirstId, item.languageSecondId) { + langFirst = languageViewModel.getLanguageById(item.languageFirstId ?: 0) + langSecond = languageViewModel.getLanguageById(item.languageSecondId ?: 0) + } + + + LaunchedEffect(langFirst, langSecond) { + langFirst?.code?.let { code -> + articlesLangFirst = languageConfigViewModel.getArticlesForLanguage(code) + } + langSecond?.code?.let { code -> + articlesLangSecond = languageConfigViewModel.getArticlesForLanguage(code) + } + } + + val canRemoveArticles = remember(wordFirst, wordSecond, articlesLangFirst, articlesLangSecond) { + val wordFirstHasArticle = articlesLangFirst.any { wordFirst.startsWith("$it ", ignoreCase = true) } + val wordSecondHasArticle = articlesLangSecond.any { wordSecond.startsWith("$it ", ignoreCase = true) } + + val isAnyWordASentence = StringHelper.isSentenceStrict(wordFirst) || StringHelper.isSentenceStrict(wordSecond) + + (wordFirstHasArticle || wordSecondHasArticle) && !isAnyWordASentence + } + + + fun processAndHide(action: suspend () -> Unit) { + scope.launch { + visible = false + delay(350) + action() + } + } + + AnimatedVisibility( + visible = visible, + exit = slideOutHorizontally( + targetOffsetX = { fullWidth -> fullWidth }, + animationSpec = tween(durationMillis = 300) + ) + fadeOut(animationSpec = tween(durationMillis = 200)) + ) { + AppCard( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 4.dp) + ) { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + if (isDuplicate) { + SuggestionChip( + onClick = { + if (duplicates.isNotEmpty()) { + showDuplicateDialog = true + } + }, + label = { Text(stringResource(R.string.duplicate)) }, + icon = { + Icon( + imageVector = AppIcons.Warning, + contentDescription = stringResource(R.string.label_warning), + modifier = Modifier.size(FilterChipDefaults.IconSize) + ) + }, + colors = SuggestionChipDefaults.suggestionChipColors( + containerColor = MaterialTheme.colorScheme.errorContainer, + labelColor = MaterialTheme.colorScheme.onErrorContainer, + iconContentColor = MaterialTheme.colorScheme.onErrorContainer + ), + border = BorderStroke(1.dp, MaterialTheme.colorScheme.error) + ) + } else { + Spacer(modifier = Modifier.height(1.dp)) + } + + AnimatedVisibility(visible = canRemoveArticles) { + SuggestionChip( + onClick = { + vocabularyViewModel.removeArticles(item, articlesLangFirst, articlesLangSecond) + }, + label = { Text(stringResource(R.string.label_remove_articles)) }, + icon = { + Icon( + imageVector = AppIcons.Clean, + contentDescription = stringResource(R.string.label_remove_articles), + modifier = Modifier.size(FilterChipDefaults.IconSize) + ) + }, + border = BorderStroke(1.dp, MaterialTheme.colorScheme.onSurface) + ) + } + } + + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + AppTextField( + value = wordFirst, + onValueChange = { wordFirst = it }, + label = { Text(stringResource(R.string.label_word)) }, + modifier = Modifier.fillMaxWidth() + ) + SingleLanguageDropDown( + languageViewModel = languageViewModel, + selectedLanguage = langFirst, + onLanguageSelected = { langFirst = it } + ) + } + + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + AppTextField( + value = wordSecond, + onValueChange = { wordSecond = it }, + label = { Text(stringResource(R.string.label_translation)) }, + modifier = Modifier.fillMaxWidth() + ) + SingleLanguageDropDown( + languageViewModel = languageViewModel, + selectedLanguage = langSecond, + onLanguageSelected = { langSecond = it } + ) + } + + CategoryDropdown( + categoryViewModel = categoryViewModel, + onCategorySelected = { categories -> + selectedCategories = categories.mapNotNull { it?.id } + }, + multipleSelectable = true, + onlyLists = true + ) + + + HorizontalDivider(Modifier, DividerDefaults.Thickness, DividerDefaults.color) + + // UPDATED: Conditionally display action buttons based on the filter mode + when (filterMode) { + FilterMode.FAULTY -> { + FaultyItemActions( + isDoneEnabled = isItemNowValid, + onDeleteClick = { + processAndHide { + vocabularyViewModel.deleteVocabularyItemsById(listOf(item.id)) + } + }, + onDoneClick = { + processAndHide { + val updatedItem = item.copy( + wordFirst = wordFirst, wordSecond = wordSecond, + languageFirstId = langFirst?.nameResId, languageSecondId = langSecond?.nameResId + ) + vocabularyViewModel.editVocabularyItem(updatedItem) + + vocabularyViewModel.addVocabularyItemToStage(listOf(updatedItem), VocabularyStage.NEW) + } + } + ) + } + else -> { + LabeledSegmentedIconButtons( + onDeleteClick = { + processAndHide { + vocabularyViewModel.deleteVocabularyItemsById(listOf(item.id)) + } + }, + onLearnedClick = { + processAndHide { + val updatedItem = item.copy(wordFirst = wordFirst, wordSecond = wordSecond, languageFirstId = langFirst?.nameResId, languageSecondId = langSecond?.nameResId) + vocabularyViewModel.editVocabularyItem(updatedItem) + selectedCategories.forEach { catId -> vocabularyViewModel.addVocabularyItemToCategory(listOf(updatedItem), catId) } + vocabularyViewModel.addVocabularyItemToStage(listOf(updatedItem), VocabularyStage.LEARNED) + } + }, + onDoneClick = { + processAndHide { + val updatedItem = item.copy(wordFirst = wordFirst, wordSecond = wordSecond, languageFirstId = langFirst?.nameResId, languageSecondId = langSecond?.nameResId) + vocabularyViewModel.editVocabularyItem(updatedItem) + selectedCategories.forEach { catId -> vocabularyViewModel.addVocabularyItemToCategory(listOf(updatedItem), catId) } + vocabularyViewModel.addVocabularyItemToStage(listOf(updatedItem), VocabularyStage.STAGE_1) + } + } + ) + } + } + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun VocabularySortingItemPreview() { + val item = VocabularyItem(id = 1, wordFirst = "Hello", wordSecond = "Hola", languageFirstId = 1, languageSecondId = 2) + VocabularySortingItem( + item = item, + filterMode = FilterMode.NEW, + vocabularyViewModel = viewModel(), + categoryViewModel = viewModel(), + languageConfigViewModel = viewModel() + ) +} + +@Preview +@Composable +fun FaultyItemActionsPreview() { + FaultyItemActions(isDoneEnabled = true, onDeleteClick = {}, onDoneClick = {}) +} + +@Composable +fun FaultyItemActions( + isDoneEnabled: Boolean, + onDeleteClick: () -> Unit, + onDoneClick: () -> Unit +) { + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + val buttonHeight = 48.dp + val cornerRadius = 24.dp + + Row( + modifier = Modifier + .fillMaxWidth() + .height(buttonHeight) + .clip(RoundedCornerShape(cornerRadius)), + verticalAlignment = Alignment.CenterVertically + ) { + // Delete Button + AppButton( + onClick = onDeleteClick, + modifier = Modifier + .weight(1f) + .fillMaxHeight(), + shape = RoundedCornerShape(0.dp), + colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.errorContainer) + ) { + Icon(AppIcons.Delete, contentDescription = stringResource(R.string.label_delete), tint = MaterialTheme.colorScheme.onErrorContainer) + } + + AppButton( + onClick = onDoneClick, + enabled = isDoneEnabled, // Button is enabled only when the item is valid + modifier = Modifier + .weight(2f) + .fillMaxHeight(), + shape = RoundedCornerShape(0.dp), + colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.primary) + ) { + Icon(AppIcons.Check, contentDescription = stringResource(R.string.label_done), tint = MaterialTheme.colorScheme.onPrimary) + } + } + + Spacer(Modifier.height(4.dp)) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp) + ) { + Text(stringResource(R.string.label_delete), Modifier.weight(1f), textAlign = TextAlign.Center, fontSize = 12.sp, color = MaterialTheme.colorScheme.error) + Text(stringResource(R.string.label_done), Modifier.weight(2f), textAlign = TextAlign.Center, fontSize = 12.sp, color = MaterialTheme.colorScheme.onSurface) + } + } +} + +@Preview +@Composable +fun LabeledSegmentedIconButtonsPreview() { + LabeledSegmentedIconButtons(onDeleteClick = {}, onLearnedClick = {}, onDoneClick = {}) +} +@Composable +fun LabeledSegmentedIconButtons( + onDeleteClick: () -> Unit, + onLearnedClick: () -> Unit, + onDoneClick: () -> Unit +) { + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + val buttonHeight = 48.dp + val cornerRadius = 24.dp + val secondaryButtonColor = MaterialTheme.colorScheme.surfaceVariant + + Row( + modifier = Modifier + .fillMaxWidth() + .height(buttonHeight) + .clip(RoundedCornerShape(cornerRadius)), + verticalAlignment = Alignment.CenterVertically + ) { + AppButton( + onClick = onDeleteClick, + modifier = Modifier + .weight(1f) + .fillMaxHeight(), + shape = RoundedCornerShape(0.dp), + colors = ButtonDefaults.buttonColors(containerColor = secondaryButtonColor) + ) { + Icon(AppIcons.Delete, contentDescription = stringResource(R.string.label_delete), tint = MaterialTheme.colorScheme.onSurfaceVariant) + } + + VerticalDivider() + + AppButton( + onClick = onLearnedClick, + modifier = Modifier + .weight(1f) + .fillMaxHeight(), + shape = RoundedCornerShape(0.dp), + colors = ButtonDefaults.buttonColors(containerColor = secondaryButtonColor) + ) { + Icon(AppIcons.StageLearned, contentDescription = stringResource(R.string.label_learned), tint = MaterialTheme.colorScheme.onSurfaceVariant) + } + + AppButton( + onClick = onDoneClick, + modifier = Modifier + .weight(2f) + .fillMaxHeight(), + shape = RoundedCornerShape(0.dp), + colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.primary) + ) { + Icon(AppIcons.Stage1, contentDescription = stringResource(R.string.label_done), tint = MaterialTheme.colorScheme.onPrimary) + } + } + + Spacer(Modifier.height(4.dp)) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp) + ) { + Text(stringResource(R.string.label_delete), Modifier.weight(1f), textAlign = TextAlign.Center, fontSize = 12.sp, color = MaterialTheme.colorScheme.onSurfaceVariant) + Text(stringResource(R.string.label_learned), Modifier.weight(1f), textAlign = TextAlign.Center, fontSize = 12.sp, color = MaterialTheme.colorScheme.onSurfaceVariant) + Text(stringResource(R.string.label_move_first_stage), Modifier.weight(2f), textAlign = TextAlign.Center, fontSize = 12.sp, color = MaterialTheme.colorScheme.onSurface) + } + } +} + +@Composable +fun VerticalDivider( + modifier: Modifier = Modifier, + thickness: Dp = 1.dp, + color: Color = MaterialTheme.colorScheme.background.copy(alpha = 0.5f) +) { + Box( + modifier + .fillMaxHeight() + .width(thickness) + .background(color = color) + ) +} + +@Preview +@Composable +fun VerticalDividerPreview() { + VerticalDivider() +} + +@Composable +fun EnhancedDuplicateDialog( + newItem: VocabularyItem, + existingItem: VocabularyItem, + onDismiss: () -> Unit, + onDelete: () -> Unit, + onMerge: () -> Unit +) { + AppDialog(onDismissRequest = onDismiss, title = {Text(stringResource(R.string.duplicate_detected), style = MaterialTheme.typography.headlineSmall)}) { + Column(Modifier.padding(24.dp)) { + Text( + stringResource(R.string.text_a_similar_item_already_exists), + style = MaterialTheme.typography.bodyMedium + ) + Spacer(Modifier.height(16.dp)) + + Row(Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceAround) { + Column(Modifier.weight(1f)) { + Text(stringResource(R.string.new_item), style = MaterialTheme.typography.titleSmall) + Text(newItem.wordFirst) + Text(newItem.wordSecond) + } + Column(Modifier.weight(1f)) { + Text(stringResource(R.string.existing_item_id_d, existingItem.id), style = MaterialTheme.typography.titleSmall) + Text(existingItem.wordFirst) + Text(existingItem.wordSecond) + } + } + Spacer(Modifier.height(24.dp)) + DialogSegmentedButtons( + onDeleteClick = onDelete, + onKeepBothClick = onDismiss, + onMergeClick = onMerge + ) + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun EnhancedDuplicateDialogPreview() { + val newItem = VocabularyItem(id = 1, wordFirst = "Test New", wordSecond = "Test Neu", languageFirstId = 1, languageSecondId = 2) + val existingItem = VocabularyItem(id = 2, wordFirst = "Test Old", wordSecond = "Test Alt", languageFirstId = 1, languageSecondId = 2) + EnhancedDuplicateDialog( + newItem = newItem, + existingItem = existingItem, + onDismiss = {}, + onDelete = {}, + onMerge = {} + ) +} + +@Composable +fun DialogSegmentedButtons( + onDeleteClick: () -> Unit, + onKeepBothClick: () -> Unit, + onMergeClick: () -> Unit +) { + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + val buttonHeight = 48.dp + val cornerRadius = 24.dp + val secondaryButtonColor = MaterialTheme.colorScheme.surfaceVariant + val onSecondaryTextColor = MaterialTheme.colorScheme.onSurfaceVariant + + Row( + modifier = Modifier + .fillMaxWidth() + .height(buttonHeight) + .clip(RoundedCornerShape(cornerRadius)), + verticalAlignment = Alignment.CenterVertically + ) { + + AppButton( + onClick = onDeleteClick, + modifier = Modifier + .weight(1f) + .fillMaxHeight(), + shape = RoundedCornerShape(0.dp), + colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.errorContainer) + ) { + Icon(AppIcons.Delete, contentDescription = stringResource(R.string.delete_new), tint = MaterialTheme.colorScheme.onErrorContainer) + } + + VerticalDivider() + + + AppButton( + onClick = onKeepBothClick, + modifier = Modifier + .weight(1f) + .fillMaxHeight(), + shape = RoundedCornerShape(0.dp), + colors = ButtonDefaults.buttonColors(containerColor = secondaryButtonColor) + ) { + Icon(AppIcons.Copy, contentDescription = stringResource(R.string.keep_both), tint = onSecondaryTextColor) + } + + // Merge Button + AppButton( + onClick = onMergeClick, + modifier = Modifier + .weight(2f) + .fillMaxHeight(), + shape = RoundedCornerShape(0.dp), + colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.primary) + ) { + Icon(AppIcons.Merge, contentDescription = stringResource(R.string.merge), tint = MaterialTheme.colorScheme.onPrimary) + } + } + + Spacer(Modifier.height(4.dp)) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 4.dp) + ) { + Text(stringResource(R.string.delete_new), Modifier.weight(1f), textAlign = TextAlign.Center, fontSize = 12.sp, color = MaterialTheme.colorScheme.error) + Text(stringResource(R.string.keep_both), Modifier.weight(1f), textAlign = TextAlign.Center, fontSize = 12.sp, color = onSecondaryTextColor) + Text(stringResource(R.string.merge_items), Modifier.weight(2f), textAlign = TextAlign.Center, fontSize = 12.sp, color = MaterialTheme.colorScheme.onSurface) + } + } +} + +@Preview +@Composable +fun DialogSegmentedButtonsPreview() { + DialogSegmentedButtons(onDeleteClick = {}, onKeepBothClick = {}, onMergeClick = {}) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/card/AdditionalContentBottomSheet.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/card/AdditionalContentBottomSheet.kt new file mode 100644 index 0000000..8356cb8 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/card/AdditionalContentBottomSheet.kt @@ -0,0 +1,556 @@ +package eu.gaudian.translator.view.vocabulary.card + +import android.app.Application +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.lerp +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.SecondaryButton +import eu.gaudian.translator.viewmodel.DictionaryViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.coroutines.launch +import okhttp3.internal.platform.PlatformRegistry.applicationContext +import kotlin.system.measureTimeMillis + + +data class SynonymDisplayState( + val synonym: VocabularyItem, + val language: Language, + val alreadyInRepository: Boolean, + val proximity: Int? +) + +@Composable +fun AdditionalContentBottomSheet( + vocabularyItemId: Int, + term: String, // "first" or "second" + navController: NavController, +) { + val activity = LocalContext.current.findActivity() + + val vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as Application) + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val dictionaryViewModel: DictionaryViewModel = hiltViewModel(viewModelStoreOwner = activity) + val coroutineScope = rememberCoroutineScope() + + // Get the vocabulary item + val vocabularyItem by vocabularyViewModel.getVocabularyItemFlow(vocabularyItemId) + .collectAsState(initial = null) + + val item = vocabularyItem ?: return + + // Get languages + val languageFirst by languageViewModel.getLanguageByIdFlow(item.languageFirstId ?: 0) + .collectAsState(initial = null) + val languageSecond by languageViewModel.getLanguageByIdFlow(item.languageSecondId ?: 0) + .collectAsState(initial = null) + + // State for synonyms and examples + var synonyms by remember(vocabularyItemId, term) { mutableStateOf?>(null) } + var example by remember(vocabularyItemId, term) { mutableStateOf?>(null) } + + // Loading states for refresh operations + var synonymsLoading by remember { mutableStateOf(false) } + var exampleLoading by remember { mutableStateOf(false) } + + // Determine which word and language to use + val isFirst = term == "first" + val word = if (isFirst) item.wordFirst else item.wordSecond + val language = if (isFirst) languageFirst else languageSecond + + // Handle dictionary navigation + val handleMoveToDictionary: () -> Unit = { + if (language != null) { + coroutineScope.launch { + @Suppress("HardCodedStringLiteral") + Log.i("handleMoveToDictionary","handleMoveToDictionary performed") + dictionaryViewModel.performSearch( + query = word, + language = language, + regenerate = false + ) + } + } + } + + val entryToNavigate by dictionaryViewModel.navigateToEntry.collectAsState() + LaunchedEffect(key1 = entryToNavigate) { + entryToNavigate?.let { entry -> + // Set flag indicating navigation is from external source (not DictionaryResultScreen) + dictionaryViewModel.setNavigatingFromDictionaryResult(false) + // Clear the navigation event immediately to prevent DictionaryResultScreen from handling it + dictionaryViewModel.onNavigationDone() + @Suppress("HardCodedStringLiteral") + navController.navigate("dictionary_result/${entry.id}") { + // Clear the back stack up to the dictionary_result destination to prevent double navigation + popUpTo("dictionary_result") { inclusive = false } + launchSingleTop = true + } + } + } + + val refreshSynonyms: () -> Unit = { + if (language != null) { + coroutineScope.launch { + synonymsLoading = true + measureTimeMillis { + val rawSynonymData = vocabularyViewModel.getSynonymsForItem( + vocabularyItemId = item.id, + isForFirstWord = isFirst + ) + val sortedSynonymData = rawSynonymData.sortedByDescending { it.proximity ?: 101 } + + if (sortedSynonymData.isNotEmpty()) { + val rawItems = sortedSynonymData.map { it.item } + val existenceFlags = vocabularyViewModel.findDuplicates(rawItems) + synonyms = sortedSynonymData.mapIndexed { index, synonymData -> + SynonymDisplayState( + synonym = synonymData.item, + language = language, + alreadyInRepository = existenceFlags[index], + proximity = synonymData.proximity + ) + } + } else { + synonyms = emptyList() + } + } + synonymsLoading = false + } + } + } + + val refreshExample: () -> Unit = { + coroutineScope.launch { + exampleLoading = true + measureTimeMillis { + example = vocabularyViewModel.getExampleForItem( + item.id, + isFirstWord = isFirst, + languageFirst = languageFirst, + languageSecond = languageSecond + ) + } + exampleLoading = false + } + } + + // Load data when component is first displayed + LaunchedEffect(vocabularyItemId, term) { + refreshExample() + } + + // Load synonyms when language becomes available + LaunchedEffect(language) { + if (language != null) { + refreshSynonyms() + } + } + + // Handle synonym addition + val handleSynonymAdded: () -> Unit = { + refreshSynonyms() + } + + // Handle example reload + val handleReloadExample: () -> Unit = { + refreshExample() + } + Column( + modifier = Modifier + .fillMaxSize() + .padding(16.dp) + .verticalScroll(rememberScrollState()) + ) { + Text( + text = word, + style = MaterialTheme.typography.headlineMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(bottom = 16.dp) + ) + + if (language != null) { + Text( + text = language.name, + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.padding(bottom = 16.dp) + ) + } + + ExampleSentencesDisplay(exampleSentence = example, loading = exampleLoading, onReload = handleReloadExample) + + Spacer(modifier = Modifier.height(16.dp)) + + SynonymsDisplay( + synonyms = synonyms, + loading = synonymsLoading, + vocabularyViewModel = vocabularyViewModel, + onSynonymAdded = handleSynonymAdded, + onReload = refreshSynonyms + ) + + Spacer(modifier = Modifier.height(16.dp)) + + MoveToDictionaryButton(onClick = handleMoveToDictionary) + } +} + +@Preview +@Composable +fun AdditionalContentBottomSheetPreview() { + + AdditionalContentBottomSheet( + vocabularyItemId = 1, + term = "first", + navController = NavController(applicationContext as Application) + ) +} + +@Composable +private fun ExampleSentencesDisplay( + exampleSentence: Pair?, + loading: Boolean, + onReload: () -> Unit, +) { + Column { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = stringResource(R.string.example), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(bottom = 0.dp) + ) + IconButton(onClick = onReload) { + Icon( + modifier = Modifier.padding(0.dp), + imageVector = AppIcons.Refresh, + contentDescription = stringResource(R.string.label_reload) + ) + } + } + + if (loading || exampleSentence == null) { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 2.dp), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator() + } + } else { + Text( + text = "\"${exampleSentence.first.trim()}\"", + style = MaterialTheme.typography.bodyMedium, + ) + Spacer(Modifier.height(4.dp)) + Text( + text = "\"${exampleSentence.second.trim()}\"", + style = MaterialTheme.typography.bodyMedium, + ) + } + } +} + +@Preview(showBackground = true) +@Composable +private fun ExampleSentencesDisplayLoadingPreview() { + ExampleSentencesDisplay(exampleSentence = null, loading = false, onReload = {}) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +private fun ExampleSentencesDisplayLoadedPreview() { + ExampleSentencesDisplay( + exampleSentence = Pair("This is an example sentence.", "Dies ist ein Beispielsatz."), + loading = false, + onReload = {} + ) +} + + + +@Composable +private fun SynonymsDisplay( + synonyms: List?, + loading: Boolean, + vocabularyViewModel: VocabularyViewModel, + onSynonymAdded: () -> Unit, + onReload: () -> Unit, +) { + Column { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = stringResource(R.string.synonyms), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold + ) + IconButton(onClick = onReload) { + Icon( + imageVector = AppIcons.Refresh, + contentDescription = stringResource(R.string.label_reload) + ) + } + } + Spacer(Modifier.height(4.dp)) + + if (loading || synonyms == null) { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 16.dp), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator() + } + return + } + + if (synonyms.isNotEmpty()) { + val coroutineScope = rememberCoroutineScope() + var locallyAddedSynonyms by remember(synonyms) { mutableStateOf(emptySet()) } + + FlowRow( + modifier = Modifier.fillMaxWidth(), + ) { + synonyms.forEach { state -> + val isDisplayedAsAdded = state.alreadyInRepository || locallyAddedSynonyms.contains(state.synonym) + + SynonymChip( + state = state, + isDisplayedAsAdded = isDisplayedAsAdded, + onAddClick = { itemToAdd -> + coroutineScope.launch { + vocabularyViewModel.addVocabularyItems(listOf(itemToAdd)) + locallyAddedSynonyms = locallyAddedSynonyms + itemToAdd + onSynonymAdded() + } + } + ) + } + } + } + } +} + +@Preview(showBackground = true) +@Composable +private fun SynonymsDisplayLoadingPreview() { + // This preview doesn't have a real VocabularyViewModel, so actions will not work. + SynonymsDisplay(synonyms = null, loading = false, vocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as Application), onSynonymAdded = {}, onReload = {}) +} + +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true) +@Composable +private fun SynonymsDisplayLoadedPreview() { + val language = Language(code = "en", region = "US", nameResId = 1, name = "English", englishName = "English") + val synonyms = listOf( + SynonymDisplayState( + synonym = VocabularyItem(1, 1, 2, "similar", "ähnlich", null, null, null, null), + language = language, + alreadyInRepository = false, + proximity = 95 + ), + SynonymDisplayState( + synonym = VocabularyItem(2, 1, 2, "alike", "gleich", null, null, null, null), + language = language, + alreadyInRepository = true, + proximity = 80 + ), + SynonymDisplayState( + synonym = VocabularyItem(3, 1, 2, "comparable", "vergleichbar", null, null, null, null), + language = language, + alreadyInRepository = false, + proximity = null + ) + ) + SynonymsDisplay(synonyms = synonyms, loading = false, vocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as Application), onSynonymAdded = {}, onReload = {}) +} + +@Composable +private fun MoveToDictionaryButton(onClick: () -> Unit) { + + SecondaryButton( + modifier = Modifier.fillMaxWidth(), + onClick = onClick, + text = stringResource(R.string.label_show_dictionary_entry), + icon = AppIcons.ArrowForward + ) + + + +} + +@Preview +@Composable +private fun MoveToDictionaryButtonPreview() { + + MoveToDictionaryButton(onClick = {}) + +} + + + +@Composable +private fun SynonymChip( + state: SynonymDisplayState, + isDisplayedAsAdded: Boolean, + onAddClick: (VocabularyItem) -> Unit, +) { + val text = if (state.language.nameResId == state.synonym.languageFirstId) { + state.synonym.wordFirst + } else { + state.synonym.wordSecond + } + + val displayText = if (state.proximity != null) { + "$text (${state.proximity}%)" + } else { + text + } + + val icon = if (isDisplayedAsAdded) AppIcons.Check else AppIcons.Add + + val backgroundColor = when { + isDisplayedAsAdded -> MaterialTheme.colorScheme.secondaryContainer + state.proximity != null -> { + val fraction = (state.proximity / 100f).coerceIn(0f, 1f) + lerp( + start = MaterialTheme.colorScheme.surfaceVariant, + stop = MaterialTheme.colorScheme.primaryContainer, + fraction = fraction + ) + } + else -> MaterialTheme.colorScheme.primaryContainer + } + + val contentColor = when { + isDisplayedAsAdded -> MaterialTheme.colorScheme.onSecondaryContainer + state.proximity != null -> { + val fraction = (state.proximity / 100f).coerceIn(0f, 1f) + lerp( + start = MaterialTheme.colorScheme.onSurfaceVariant, + stop = MaterialTheme.colorScheme.onPrimaryContainer, + fraction = fraction + ) + } + else -> MaterialTheme.colorScheme.onPrimaryContainer + } + + val clickModifier = if (isDisplayedAsAdded) { + Modifier + } else { + Modifier.clickable { onAddClick(state.synonym) } + } + + Surface( + modifier = Modifier + .padding(4.dp) + .then(clickModifier), + shape = RoundedCornerShape(16.dp), + color = backgroundColor, + contentColor = contentColor, + tonalElevation = 2.dp + ) { + Row( + modifier = Modifier.padding(horizontal = 6.dp, vertical = 4.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(6.dp) + ) { + Icon( + imageVector = icon, + contentDescription = if (isDisplayedAsAdded) stringResource(R.string.synonym_exists) else stringResource( + R.string.label_add_synonym + ) + ) + Text(text = displayText, style = MaterialTheme.typography.bodyMedium) + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +private fun SynonymChipNotAddedPreview() { + val language = Language(code = "en", region = "US", nameResId = 1, name = "English", englishName = "English") + val state = SynonymDisplayState( + synonym = VocabularyItem(1, 1, 2, "example", "beispiel", null, null, null, null), + language = language, + alreadyInRepository = false, + proximity = 85 + ) + SynonymChip( + state = state, + isDisplayedAsAdded = false, + onAddClick = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +private fun SynonymChipAddedPreview() { + val language = Language(code = "en", region = "US", nameResId = 1, name = "English", englishName = "English") + val state = SynonymDisplayState( + synonym = VocabularyItem(1, 1, 2, "example", "beispiel", null, null, null, null), + language = language, + alreadyInRepository = true, + proximity = 90 + ) + SynonymChip( + state = state, + isDisplayedAsAdded = true, + onAddClick = {} + ) +} diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/card/DraggableActionPanel.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/card/DraggableActionPanel.kt new file mode 100644 index 0000000..69b3538 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/card/DraggableActionPanel.kt @@ -0,0 +1,244 @@ +package eu.gaudian.translator.view.vocabulary.card + +import androidx.compose.animation.core.exponentialDecay +import androidx.compose.animation.core.tween +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.gestures.AnchoredDraggableDefaults +import androidx.compose.foundation.gestures.AnchoredDraggableState +import androidx.compose.foundation.gestures.DraggableAnchors +import androidx.compose.foundation.gestures.Orientation +import androidx.compose.foundation.gestures.anchoredDraggable +import androidx.compose.foundation.gestures.animateTo +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.layout.onSizeChanged +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.view.composable.AppIcons +import kotlinx.coroutines.launch +import kotlin.math.roundToInt + +private enum class DragState { Minimized, Extended } + +@OptIn(ExperimentalFoundationApi::class) +@Composable +internal fun DraggableActionPanel( + modifier: Modifier = Modifier, + isEditing: Boolean, + onEditClick: () -> Unit, + onSaveClick: () -> Unit, + onCancelClick: () -> Unit, + onStatisticsClick: () -> Unit, + onMoveToCategoryClick: () -> Unit, + onMoveToStageClick: () -> Unit, + onDeleteClick: () -> Unit, + showAnalyzeGrammarButton: Boolean, + onAnalyzeGrammarClick: () -> Unit, +) { + val coroutineScope = rememberCoroutineScope() + val density = LocalDensity.current + + val positionalThreshold = { totalDistance: Float -> totalDistance * 0.5f } + val velocityThreshold = { with(density) { 125.dp.toPx() } } + + @Suppress("DEPRECATION") val state: AnchoredDraggableState = remember { + AnchoredDraggableState( + initialValue = DragState.Minimized, + anchors = DraggableAnchors { + DragState.Extended at 0f + DragState.Minimized at 1000f // Initial off-screen position + }, + positionalThreshold = positionalThreshold, + velocityThreshold = velocityThreshold, + snapAnimationSpec = tween(), + decayAnimationSpec = exponentialDecay() + ) + } + + var panelWidth by remember { mutableFloatStateOf(0f) } + val minimizedWidth = with(density) { 64.dp.toPx() } + val isExtended = state.targetValue == DragState.Extended + + LaunchedEffect(panelWidth) { + if (panelWidth > 0) { + val anchors = DraggableAnchors { + DragState.Extended at 0f + DragState.Minimized at panelWidth - minimizedWidth + } + if (state.anchors != anchors) { + state.updateAnchors(anchors) + } + } + } + + Card( + shape = RoundedCornerShape(topStart = 20.dp, bottomStart = 20.dp), + elevation = CardDefaults.cardElevation(defaultElevation = 8.dp), + modifier = modifier + .padding(vertical = 16.dp) + .widthIn(min = 64.dp, max = 250.dp) + .onSizeChanged { + panelWidth = it.width.toFloat() + } + .offset { + val xOffset = if (state.anchors.size > 0) state.requireOffset() else 0f + IntOffset(x = xOffset.roundToInt(), y = 0) + } + .anchoredDraggable( + state = state, + orientation = Orientation.Horizontal, + flingBehavior = AnchoredDraggableDefaults.flingBehavior( + state = state, + positionalThreshold = positionalThreshold, + ) + ) + ) { + Row(modifier.padding(8.dp)) { + // Thumb indicator + Surface( + modifier = Modifier + .height(75.dp) + .width(4.dp) + .align(Alignment.CenterVertically), + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.3f), + shape = RoundedCornerShape(2.dp) + ) {} + Column( + modifier = Modifier + .fillMaxHeight() + .verticalScroll(rememberScrollState()) + .padding(horizontal = 8.dp), + horizontalAlignment = Alignment.Start, + verticalArrangement = Arrangement.Center + ) { + + val actionClickHandler: (() -> Unit) -> () -> Unit = { action -> + { + action() + coroutineScope.launch { + state.animateTo(DragState.Minimized) + } + } + } + + if (isEditing) { + ActionItem(icon = AppIcons.Check, label = stringResource(R.string.label_save), isExtended = isExtended, onClick = actionClickHandler(onSaveClick)) + ActionItem(icon = AppIcons.Close, stringResource(R.string.label_cancel), isExtended = isExtended, onClick = actionClickHandler(onCancelClick)) + } else { + ActionItem(icon = AppIcons.Edit, label = stringResource(R.string.edit), isExtended = isExtended, onClick = actionClickHandler(onEditClick)) + } + if (!isEditing) { + + if (showAnalyzeGrammarButton) { + ActionItem( + icon = AppIcons.AI, + label = stringResource(R.string.label_analyze_grammar), + isExtended = isExtended, + onClick = actionClickHandler(onAnalyzeGrammarClick) + ) + } + + ActionItem(icon = AppIcons.Category, label = stringResource(R.string.move_to_category), isExtended = isExtended, onClick = actionClickHandler(onMoveToCategoryClick)) + ActionItem(icon = AppIcons.Stages, label = stringResource(R.string.move_to_stage), isExtended = isExtended, onClick = actionClickHandler(onMoveToStageClick)) + ActionItem(icon = AppIcons.Statistics, label = stringResource(R.string.label_statistics), isExtended = isExtended, onClick = actionClickHandler(onStatisticsClick)) + + + ActionItem(icon = AppIcons.Delete, stringResource(R.string.label_delete), isExtended = isExtended, onClick = actionClickHandler(onDeleteClick)) + } + } + } + } +} + +@Composable +private fun ActionItem( + icon: ImageVector, + label: String, + isExtended: Boolean, + onClick: () -> Unit, + isLoading: Boolean = false, + isActive: Boolean = false +) { + val shape = RoundedCornerShape(12.dp) + val backgroundColor = if (isActive) { + MaterialTheme.colorScheme.primaryContainer.copy(alpha = 0.6f) + } else { + Color.Transparent + } + + Row( + modifier = Modifier + .clip(shape) + .background(backgroundColor) + .clickable(onClick = onClick, enabled = !isLoading) + .padding(vertical = 8.dp, horizontal = 12.dp), + verticalAlignment = Alignment.CenterVertically + ) { + if (isLoading) { + CircularProgressIndicator( + modifier = Modifier.size(24.dp), + color = MaterialTheme.colorScheme.primary, + strokeWidth = 2.5.dp + ) + } else { + Icon(icon, contentDescription = label) + } + if (isExtended) { + Text(text = label, style = MaterialTheme.typography.bodyMedium) + } + } +} + +@Preview +@Composable +fun DraggableActionPanelPreview() { + DraggableActionPanel( + isEditing = false, + onEditClick = {}, + onSaveClick = {}, + onCancelClick = {}, + + onStatisticsClick = {}, + onMoveToCategoryClick = {}, + onMoveToStageClick = {}, + onDeleteClick = {}, + showAnalyzeGrammarButton = true, + onAnalyzeGrammarClick = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/card/GrammarComponents.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/card/GrammarComponents.kt new file mode 100644 index 0000000..023a9b3 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/card/GrammarComponents.kt @@ -0,0 +1,515 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.vocabulary.card + +import android.annotation.SuppressLint +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Checkbox +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExposedDropdownMenuAnchorType +import androidx.compose.material3.ExposedDropdownMenuBox +import androidx.compose.material3.ExposedDropdownMenuDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.blur +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.grammar.CategoryConfig +import eu.gaudian.translator.model.grammar.FieldConfig +import eu.gaudian.translator.model.grammar.GrammaticalFeature +import eu.gaudian.translator.model.grammar.LanguageConfig +import eu.gaudian.translator.model.grammar.formatGrammarDetails +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.view.composable.AppDialog +import eu.gaudian.translator.view.composable.AppTextField +import eu.gaudian.translator.view.composable.DialogButton +import eu.gaudian.translator.viewmodel.LanguageConfigViewModel + +@Composable +internal fun GrammarDetailsText( + details: GrammaticalFeature?, + language: Language?, + isRevealed: Boolean +) { + Log.d("GrammarComponents", "GrammarDetailsText called with details: $details, language: $language, isRevealed: $isRevealed") + + val configViewModel: LanguageConfigViewModel = viewModel() + val allConfigs by configViewModel.configs.collectAsState() + val languageConfig = language?.code?.let { allConfigs[it] } + val categoryConfig = details?.category?.let { languageConfig?.categories?.get(it) } + + val propertiesString = remember(details, categoryConfig) { + if (details == null) { + "" + } else { + formatGrammarDetails(details, categoryConfig) + } + } + + Log.d("GrammarComponents", "Properties string: '$propertiesString'") + + if (propertiesString.isNotEmpty()) { + Text( + text = propertiesString, + style = MaterialTheme.typography.bodyLarge.copy(fontStyle = FontStyle.Italic), + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f), + modifier = Modifier.blur(if (!isRevealed) 10.dp else 0.dp) + ) + } +} + +@Composable +internal fun GrammarEditDialog( + feature: GrammaticalFeature?, + language: Language, + onDismiss: () -> Unit, + onSave: (GrammaticalFeature?) -> Unit +) { + Log.d("GrammarComponents", "GrammarEditDialog called with feature: $feature, language: $language") + + val configViewModel: LanguageConfigViewModel = viewModel() + val allConfigs by configViewModel.configs.collectAsState() + val languageConfig = allConfigs[language.code] + + Log.d("GrammarComponents", "Language config found: ${languageConfig != null}") + + var selectedCategoryKey by remember { mutableStateOf(feature?.category) } + var properties by remember { mutableStateOf(feature?.properties ?: emptyMap()) } + + Log.d("GrammarComponents", "Initial selectedCategoryKey: $selectedCategoryKey, properties: $properties") + + AppDialog(onDismissRequest = onDismiss, title = {Text( + text = stringResource(R.string.edit_features_for, language.name), + )}) { + Column(modifier = Modifier.padding(16.dp)) { + + if (languageConfig == null) { + Text(stringResource(R.string.no_grammar_configuration_found_for_this_language)) + } else { + GuidedEditTabContent( + languageConfig = languageConfig, + selectedCategoryKey = selectedCategoryKey, + onCategoryChange = { newCategoryKey -> + selectedCategoryKey = newCategoryKey + properties = emptyMap() + }, + selectedProperties = properties, + onPropertiesChange = { newProperties -> + properties = newProperties + } + ) + } + + Row( + modifier = Modifier.fillMaxWidth().padding(0.dp), + verticalAlignment = Alignment.CenterVertically + ) { + TextButton( + onClick = { onSave(null) }, + colors = ButtonDefaults.textButtonColors(contentColor = MaterialTheme.colorScheme.error) + ) { + Text(stringResource(R.string.label_delete)) + } + } + + Spacer(Modifier.height(24.dp)) + + Row( + modifier = Modifier.fillMaxWidth().padding(0.dp), + verticalAlignment = Alignment.CenterVertically + ) { + + TextButton(onClick = onDismiss) { + Text(stringResource(R.string.label_cancel)) + } + DialogButton( + onClick = { + selectedCategoryKey?.let { + onSave(GrammaticalFeature(category = it, properties = properties)) + } + }, + enabled = selectedCategoryKey != null, + text = stringResource(R.string.label_save) + + ) + } + } + } +} + +@Composable +private fun GuidedEditTabContent( + languageConfig: LanguageConfig, + selectedCategoryKey: String?, + onCategoryChange: (String) -> Unit, + selectedProperties: Map, + onPropertiesChange: (Map) -> Unit +) { + Log.d("GrammarComponents", "GuidedEditTabContent called with selectedCategoryKey: $selectedCategoryKey, selectedProperties: $selectedProperties") + + var isCategoryDropdownExpanded by remember { mutableStateOf(false) } + val categories = languageConfig.categories.entries.toList() + val selectedCategoryConfig = selectedCategoryKey?.let { languageConfig.categories[it] } + + Log.d("GrammarComponents", "Categories count: ${categories.size}, selectedCategoryConfig: $selectedCategoryConfig") + + Column { + Log.d("GrammarComponents", "Column with verticalScroll modifier created") + ExposedDropdownMenuBox( + expanded = isCategoryDropdownExpanded, + onExpandedChange = { isCategoryDropdownExpanded = !isCategoryDropdownExpanded } + ) { + AppTextField( + modifier = Modifier + .menuAnchor(ExposedDropdownMenuAnchorType.PrimaryEditable, enabled = true) + .fillMaxWidth(), + readOnly = true, // value is from a dropdown + value = selectedCategoryConfig?.display_key?.let { resolveStringResource(it) } ?: stringResource(R.string.text_select_category), + onValueChange = {}, // readOnly, so no-op + label = { Text(stringResource(R.string.word_type)) }, + trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = isCategoryDropdownExpanded) }, + ) + ExposedDropdownMenu( + expanded = isCategoryDropdownExpanded, + onDismissRequest = { isCategoryDropdownExpanded = false } + ) { + categories.forEach { (key, config) -> + DropdownMenuItem( + text = { Text(resolveStringResource(config.display_key)) }, + onClick = { + onCategoryChange(key) + isCategoryDropdownExpanded = false + } + ) + } + } + } + + Spacer(Modifier.height(16.dp)) + + selectedCategoryConfig?.fields?.forEach { fieldConfig -> + DynamicField( + fieldConfig = fieldConfig, + currentValue = selectedProperties[fieldConfig.key], + onValueChange = { newValue -> + val newProps = selectedProperties.toMutableMap() + if (newValue == null) { + newProps.remove(fieldConfig.key) + } else { + newProps[fieldConfig.key] = newValue + } + onPropertiesChange(newProps) + } + ) + Spacer(Modifier.height(8.dp)) + } + } +} + +@Suppress("HardCodedStringLiteral") +@Composable +private fun DynamicField( + fieldConfig: FieldConfig, + currentValue: String?, + onValueChange: (String?) -> Unit +) { + Log.d("GrammarComponents", "DynamicField called with fieldConfig: ${fieldConfig.key}, type: ${fieldConfig.type}, currentValue: $currentValue") + + val label = resolveStringResource(fieldConfig.display_key) + + Log.d("GrammarComponents", "Resolved label: $label") + + when (fieldConfig.type) { + "text" -> { + AppTextField( + value = currentValue ?: "", + onValueChange = { onValueChange(it.ifEmpty { null }) }, + label = { Text(label) }, + modifier = Modifier.fillMaxWidth() + ) + } + "enum" -> { + var isExpanded by remember { mutableStateOf(false) } + ExposedDropdownMenuBox( + expanded = isExpanded, + onExpandedChange = { + isExpanded = !isExpanded + } + ) { + AppTextField( + modifier = Modifier + .menuAnchor(ExposedDropdownMenuAnchorType.PrimaryEditable, enabled = true) + .fillMaxWidth(), + readOnly = true, + value = currentValue?.let { resolveStringResource(it) } ?: "", + onValueChange = {}, + label = { Text(label) }, + trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = isExpanded) }, + ) + ExposedDropdownMenu( + expanded = isExpanded, + onDismissRequest = { isExpanded = false } + ) { + fieldConfig.options?.forEach { optionKey -> + DropdownMenuItem( + text = { Text(resolveStringResource(optionKey)) }, + onClick = { + onValueChange(optionKey) + isExpanded = false + } + ) + } + } + } + } + "boolean" -> { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .fillMaxWidth() + .clickable { onValueChange((!(currentValue?.toBoolean() ?: false)).toString()) } + ) { + Checkbox( + checked = currentValue?.toBoolean() ?: false, + onCheckedChange = { onValueChange(it.toString()) } + ) + Spacer(Modifier.width(8.dp)) + Text(label) + } + } + } +} + +/** + * A map to associate string keys from the grammar configuration with their corresponding + * Android string resource IDs. This avoids the use of `getIdentifier` which is inefficient + * and discouraged. This approach is much faster and allows for compile-time verification. + */ +@Suppress("HardCodedStringLiteral") +private val stringResourceMap = mapOf( + "noun" to R.string.label_noun, + "verb" to R.string.label_verb, + "adjective" to R.string.label_adjective, + "adverb" to R.string.label_adverb, + "pronoun" to R.string.label_pronoun, + "preposition" to R.string.label_preposition, + "conjunction" to R.string.label_conjunction, + "interjection" to R.string.label_interjection, + "article" to R.string.label_article, + "gender" to R.string.label_gender, + "masculine" to R.string.label_masculine, + "feminine" to R.string.label_feminine, + "neuter" to R.string.label_neuter, + "common" to R.string.label_common, + "plural" to R.string.label_plural, + "tense" to R.string.label_tense, + "present" to R.string.present, + "past" to R.string.past, + "future" to R.string.future, + "mood" to R.string.mood, + "indicative" to R.string.indicative, + "subjunctive" to R.string.subjunctive, + "imperative" to R.string.imperative, + "word_type" to R.string.word_type +) + +@SuppressLint("LocalContextResourcesRead") +@Composable +private fun resolveStringResource(key: String): String { + // Using a map is more efficient than reflection with getIdentifier, + // as it avoids runtime lookups and allows for better build optimizations. + val resourceId = stringResourceMap[key] + return if (resourceId != null) { + stringResource(id = resourceId) + } else { + // Fallback for keys not in the map, useful for development or dynamic keys. + // The remember call here prevents recalculating the formatted string on every recomposition. + remember(key) { + key.replace('_', ' ').replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun GrammarDetailsTextPreview() { + val details = GrammaticalFeature( + category = "noun", + properties = mapOf("gender" to "masculine", "plural" to "die Männer") + ) + val language = Language( + code = "de", + region = "DE", + nameResId = 0, + name = "German", + englishName = "German" + ) + GrammarDetailsText(details = details, language = language, isRevealed = true) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun GrammarDetailsTextBlurredPreview() { + val details = GrammaticalFeature( + category = "noun", + properties = mapOf("gender" to "masculine", "plural" to "die Männer") + ) + val language = Language( + code = "de", + region = "DE", + nameResId = 0, + name = "German", + englishName = "German" + ) + GrammarDetailsText(details = details, language = language, isRevealed = false) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun GrammarEditDialogPreview() { + val language = Language( + code = "de", + region = "DE", + nameResId = 0, + name = "German", + englishName = "German" + ) + val feature = GrammaticalFeature( + category = "noun", + properties = mapOf("gender" to "masculine") + ) + GrammarEditDialog( + feature = feature, + language = language, + onDismiss = {}, + onSave = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun GuidedEditTabContentPreview() { + val languageConfig = LanguageConfig( + language_code = "de", + categories = mapOf( + "noun" to CategoryConfig( + display_key = "noun", + fields = listOf( + FieldConfig( + "gender", + "gender", + "enum", + listOf("masculine", "feminine", "neuter") + ), + FieldConfig("plural", "plural", "text") + ) + ), + "verb" to CategoryConfig( + display_key = "verb", + fields = listOf( + FieldConfig("tense", "tense", "enum", listOf("present", "past")) + ) + ) + ) + ) + GuidedEditTabContent( + languageConfig = languageConfig, + selectedCategoryKey = "noun", + onCategoryChange = {}, + selectedProperties = mapOf("gender" to "masculine"), + onPropertiesChange = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun DynamicFieldTextPreview() { + val fieldConfig = FieldConfig( + key = "plural", + display_key = "Plural form", + type = "text" + ) + DynamicField( + fieldConfig = fieldConfig, + currentValue = "die Wörter", + onValueChange = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun DynamicFieldEnumPreview() { + val fieldConfig = FieldConfig( + key = "gender", + display_key = "Gender", + type = "enum", + options = listOf("masculine", "feminine", "neuter") + ) + DynamicField( + fieldConfig = fieldConfig, + currentValue = "masculine", + onValueChange = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun DynamicFieldBooleanPreview() { + val fieldConfig = FieldConfig( + key = "is_strong", + display_key = "Is strong verb?", + type = "boolean" + ) + DynamicField( + fieldConfig = fieldConfig, + currentValue = "true", + onValueChange = {} + ) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun ResolveStringResourceWithResourceIdPreview() { + // This preview depends on having a real resource. It might not render correctly in all cases. + // Let's assume R.string.word_type exists and its key is "word_type". + // In a real app, this would resolve to "Word type". + Text(resolveStringResource("word_type")) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun ResolveStringResourceWithKeyFallbackPreview() { + // This tests the fallback mechanism when a resource ID is not found. + Text(resolveStringResource("a_made_up_key")) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/card/VocabularyCard.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/card/VocabularyCard.kt new file mode 100644 index 0000000..dd71dd0 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/card/VocabularyCard.kt @@ -0,0 +1,782 @@ +package eu.gaudian.translator.view.vocabulary.card + +import android.app.Application +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.OutlinedCard +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.blur +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavController +import eu.gaudian.translator.R +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.model.grammar.GrammaticalFeature +import eu.gaudian.translator.model.grammar.VocabularyFeatures +import eu.gaudian.translator.model.grammar.formatGrammarDetails +import eu.gaudian.translator.model.jsonParser +import eu.gaudian.translator.ui.theme.semanticColors +import eu.gaudian.translator.utils.StatusAction +import eu.gaudian.translator.utils.StatusMessageService +import eu.gaudian.translator.utils.TextToSpeechHelper +import eu.gaudian.translator.utils.findActivity +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.AutoResizeSingleLineText +import eu.gaudian.translator.view.composable.SingleLanguageDropDown +import eu.gaudian.translator.view.composable.insertBreakOpportunities +import eu.gaudian.translator.viewmodel.DictionaryViewModel +import eu.gaudian.translator.viewmodel.LanguageConfigViewModel +import eu.gaudian.translator.viewmodel.LanguageViewModel +import eu.gaudian.translator.viewmodel.MessageDisplayType +import eu.gaudian.translator.viewmodel.SettingsViewModel +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import kotlinx.coroutines.launch +import okhttp3.internal.platform.PlatformRegistry.applicationContext + + +@Composable +fun VocabularyCard( + vocabularyItem: VocabularyItem, + navController: NavController, + exerciseMode: Boolean, + isFlipped: Boolean, + switchOrder: Boolean, + onStatisticsClick: () -> Unit = {}, + onMoveToCategoryClick: () -> Unit = {}, + onMoveToStageClick: () -> Unit = {}, + onDeleteClick: () -> Unit = {}, + userSpellingAnswer: String? = null, + isUserSpellingCorrect: Boolean? = null, + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as Application), +) { + + + + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val dictionaryViewModel: DictionaryViewModel = hiltViewModel(viewModelStoreOwner = activity) + + val coroutineScope = rememberCoroutineScope() + val itemState by vocabularyViewModel.getVocabularyItemFlow(vocabularyItem.id) + .collectAsState(initial = vocabularyItem) + val item = itemState ?: vocabularyItem + + + var editedFeatures by remember(item.id) { + mutableStateOf( + item.features?.let { + try { + jsonParser.decodeFromString(it) + } catch (e: Exception) { + StatusMessageService.triggerNonSuspend( + StatusAction.ShowMessage( + text = e.toString(), + type = MessageDisplayType.ERROR, + timeoutInSeconds = 3 + ) + ) + VocabularyFeatures() + } + } ?: VocabularyFeatures() + ) + } + + val languageFirst by languageViewModel.getLanguageByIdFlow(item.languageFirstId ?: 0) + .collectAsState(initial = null) + val languageSecond by languageViewModel.getLanguageByIdFlow(item.languageSecondId ?: 0) + .collectAsState(initial = null) + + var isEditing by remember(item.id) { mutableStateOf(false) } + + LaunchedEffect(key1 = item.features, key2 = isEditing) { + if (!isEditing) { + editedFeatures = item.features?.let { + try { + jsonParser.decodeFromString(it) + } catch (e: Exception) { + StatusMessageService.triggerNonSuspend( + StatusAction.ShowMessage( + text = e.toString(), + type = MessageDisplayType.ERROR, + timeoutInSeconds = 3 + ) + ) + VocabularyFeatures() + } + } ?: VocabularyFeatures() + } + } + + var editedWordFirst by remember(item.id) { + mutableStateOf(item.wordFirst) + } + var editedWordSecond by remember(item.id) { + mutableStateOf(item.wordSecond) + } + var editedLangFirstId by remember(item.id) { + mutableStateOf(item.languageFirstId) + } + var editedLangSecondId by remember(item.id) { + mutableStateOf(item.languageSecondId) + } + + + var showGrammarDialogFor by remember(item.id) { mutableStateOf(null) } + var showBottomSheet by remember(item.id) { mutableStateOf(false) } + var bottomSheetTerm by remember(item.id) { mutableStateOf(null) } + + + + val entryToNavigate by dictionaryViewModel.navigateToEntry.collectAsState() + LaunchedEffect(key1 = entryToNavigate) { + entryToNavigate?.let { entry -> + // Set flag indicating navigation is from external source (not DictionaryResultScreen) + dictionaryViewModel.setNavigatingFromDictionaryResult(false) + @Suppress("HardCodedStringLiteral") + navController.navigate("dictionary_result/${entry.id}") + dictionaryViewModel.onNavigationDone() + } + } + + val handleSave = remember(editedWordFirst, editedWordSecond, editedLangFirstId, editedLangSecondId, editedFeatures) { + { + coroutineScope.launch { + val updatedItem = item.copy( + wordFirst = editedWordFirst, + wordSecond = editedWordSecond, + languageFirstId = editedLangFirstId!!, + languageSecondId = editedLangSecondId, + features = jsonParser.encodeToString(editedFeatures) + ) + vocabularyViewModel.editVocabularyItem(updatedItem) + isEditing = false + } + } + } + + val handleCancel = remember { + { + editedWordFirst = item.wordFirst + editedWordSecond = item.wordSecond + editedLangFirstId = item.languageFirstId + editedLangSecondId = item.languageSecondId + editedFeatures = item.features?.let { jsonParser.decodeFromString(it) } ?: VocabularyFeatures() + isEditing = false + } + } + + LaunchedEffect(key1 = true) { + if(vocabularyItem.zipfFrequencyFirst == null || vocabularyItem.zipfFrequencySecond == null){ + vocabularyViewModel.editVocabularyItem(vocabularyItem) + } + } + + val rotationY by animateFloatAsState( + targetValue = if (isFlipped) 180f else 0f, + label = "rotationY" + ) + + if (languageFirst == null || languageSecond == null) { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + CircularProgressIndicator() + } + return + } + + OutlinedCard( + modifier = Modifier + .fillMaxSize() + .padding(2.dp), + shape = RoundedCornerShape(24.dp), + elevation = CardDefaults.cardElevation(defaultElevation = 0.dp), + border = BorderStroke(1.dp, MaterialTheme.colorScheme.outline.copy(alpha = 0.5f)) + ) { + Box( + modifier = Modifier.fillMaxSize() + ) { + val panelVisible = isFlipped || !exerciseMode + val panelMargin = if (panelVisible) 64.dp else 0.dp + + Card( + modifier = Modifier + .fillMaxSize() + .padding(start = 0.dp, top = 0.dp, bottom = 0.dp, end = panelMargin) + .graphicsLayer { this.rotationY = rotationY }, + shape = RoundedCornerShape(24.dp), + elevation = CardDefaults.cardElevation(defaultElevation = 0.dp), + colors = CardDefaults.cardColors(containerColor = Color.Transparent) + ) { + Column( + modifier = Modifier + .fillMaxSize() + .padding(start = 0.dp, top = 0.dp, bottom = 0.dp, end = 0.dp) + .verticalScroll(rememberScrollState()) + ) { + val isFrontFace = rotationY < 90f + val baseModifier = Modifier.weight(1f, fill = false) + + val frontFaceModifier = if (isFrontFace) { + baseModifier + } else { + baseModifier.graphicsLayer { this.rotationY = 180f } + } + + val backFaceModifier = if (isFrontFace) { + baseModifier + } else { + baseModifier.graphicsLayer { this.rotationY = 180f } + } + + CardFace( + modifier = frontFaceModifier, + isFront = true, + isFirst = !switchOrder, + languageViewModel = languageViewModel, + isEditing = isEditing, + word = if (isEditing) (if (!switchOrder) editedWordFirst else editedWordSecond) else (if (!switchOrder) item.wordFirst else item.wordSecond), + onWordChange = { if (!switchOrder) editedWordFirst = it else editedWordSecond = it }, + language = if (!switchOrder) languageFirst else languageSecond, + onLanguageIdChange = { if (!switchOrder) editedLangFirstId = it else editedLangSecondId = it }, + isRevealed = isFrontFace || exerciseMode, + userSpellingAnswer = userSpellingAnswer, + isUserSpellingCorrect = isUserSpellingCorrect, + correctWord = if (switchOrder) item.wordFirst else item.wordSecond, + wordDetails = if (!switchOrder) editedFeatures.first else editedFeatures.second, + onEditGrammarClick = { showGrammarDialogFor = "first" }, + isExerciseMode = exerciseMode, + vocabularyItem = item, + onMoreClick = { + @Suppress("HardCodedStringLiteral") + bottomSheetTerm = if (!switchOrder) "first" else "second" + showBottomSheet = true + } + ) + HorizontalDivider( + modifier = Modifier.padding(horizontal = 4.dp), + color = MaterialTheme.colorScheme.outline.copy(alpha = 0.3f) + ) + + CardFace( + modifier = backFaceModifier, + isFront = false, + isFirst = switchOrder, + languageViewModel = languageViewModel, + isEditing = isEditing, + word = if (isEditing) (if (switchOrder) editedWordFirst else editedWordSecond) else (if (switchOrder) item.wordFirst else item.wordSecond), + onWordChange = { if (switchOrder) editedWordFirst = it else editedWordSecond = it }, + language = if (switchOrder) languageFirst else languageSecond, + onLanguageIdChange = { if (switchOrder) editedLangFirstId = it else editedLangSecondId = it }, + isRevealed = !(!isFlipped && exerciseMode), + userSpellingAnswer = userSpellingAnswer, + isUserSpellingCorrect = isUserSpellingCorrect, + correctWord = if (switchOrder) item.wordFirst else item.wordSecond, + wordDetails = if (switchOrder) editedFeatures.first else editedFeatures.second, + onEditGrammarClick = { + @Suppress("HardCodedStringLiteral") + showGrammarDialogFor = "second" + }, + isExerciseMode = exerciseMode, + vocabularyItem = item, + onMoreClick = { + @Suppress("HardCodedStringLiteral") + bottomSheetTerm = if (switchOrder) "first" else "second" + showBottomSheet = true + } + ) + } + } + + + !switchOrder + if(isFlipped || !exerciseMode) + DraggableActionPanel( + modifier = Modifier + .align(Alignment.CenterEnd) + .height((IntrinsicSize.Min)), + isEditing = isEditing, + onEditClick = { isEditing = true }, + onSaveClick = { handleSave() }, + onCancelClick = handleCancel, + + onStatisticsClick = onStatisticsClick, + onMoveToCategoryClick = onMoveToCategoryClick, + onMoveToStageClick = onMoveToStageClick, + onDeleteClick = onDeleteClick, + + showAnalyzeGrammarButton = item.features.isNullOrBlank(), + onAnalyzeGrammarClick = { + vocabularyViewModel.fetchAndApplyGrammaticalDetailsForList(listOf(item)) + }, + ) + } + + if (showGrammarDialogFor != null) { + val isFirst = showGrammarDialogFor == "first" + val featureToEdit = if (isFirst) editedFeatures.first else editedFeatures.second + val langForDialog = if (isFirst) languageFirst else languageSecond + + if (langForDialog != null) { + GrammarEditDialog( + feature = featureToEdit, + language = langForDialog, + onDismiss = { showGrammarDialogFor = null }, + onSave = { newFeature -> + editedFeatures = if (isFirst) { + editedFeatures.copy(first = newFeature) + } else { + editedFeatures.copy(second = newFeature) + } + showGrammarDialogFor = null + } + ) + } + } + + if (showBottomSheet) { + val sheetState = rememberModalBottomSheetState() + ModalBottomSheet( + onDismissRequest = { + showBottomSheet = false + bottomSheetTerm = null + }, + sheetState = sheetState + ) { + AdditionalContentBottomSheet( + vocabularyItemId = item.id, + term = bottomSheetTerm ?: "first", + navController = navController + ) + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +fun VocabularyCardPreview() { + val item = VocabularyItem( + id = 1, + wordFirst = "Hello", + wordSecond = "Hola", + languageFirstId = R.string.language_1, + languageSecondId = R.string.language_2 + ) + val navController = NavController(LocalContext.current) + VocabularyCard( + vocabularyItem = item, + navController = navController, + exerciseMode = false, + isFlipped = false, + switchOrder = false, + onStatisticsClick = {}, + onMoveToCategoryClick = {}, + onMoveToStageClick = {}, + onDeleteClick = {}, + userSpellingAnswer = null, + isUserSpellingCorrect = null + ) +} + +@Composable +private fun FrequencyPill(zipfFrequency: Float?) { + if (zipfFrequency == null) return + + val semanticColors = MaterialTheme.semanticColors + val (label, color) = when { + zipfFrequency <= 3f -> Pair(stringResource(R.string.text_rare), semanticColors.wrongContainer) + zipfFrequency <= 4f -> Pair(stringResource(R.string.text_infrequent), semanticColors.stageGradient2) + zipfFrequency <= 4.5f -> Pair(stringResource(R.string.text_uncommon), semanticColors.stageGradient3) + zipfFrequency <= 5.5f -> Pair(stringResource(R.string.text_common), semanticColors.stageGradient4) + zipfFrequency <= 6.5f -> Pair(stringResource(R.string.text_frequent), semanticColors.stageGradient5) + zipfFrequency <= 7.5f -> Pair(stringResource(R.string.text_very_frequent), semanticColors.stageGradient6) + else -> Pair(stringResource(R.string.text_very_frequent), semanticColors.successContainer) + } + + Surface( + shape = RoundedCornerShape(16.dp), + color = color.copy(alpha = 0.5f), + modifier = Modifier.padding(horizontal = 4.dp) + ) { + Text( + text = label, + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(horizontal = 8.dp, vertical = 2.dp) + ) + } +} + +@Composable +private fun GrammarPill( + wordDetails: GrammaticalFeature?, + language: Language?, + isEditing: Boolean, + isRevealed: Boolean, + onEditGrammarClick: () -> Unit +) { + val configViewModel: LanguageConfigViewModel = viewModel() + val allConfigs by configViewModel.configs.collectAsState() + val languageConfig = language?.code?.let { allConfigs[it] } + val categoryConfig = wordDetails?.category?.let { languageConfig?.categories?.get(it) } + + val propertiesString = remember(wordDetails, categoryConfig) { + if (wordDetails == null) { + "" + } else { + formatGrammarDetails(wordDetails, categoryConfig) + } + } + + when { + isEditing && wordDetails == null -> { + // Show "add grammar details" pill with plus icon + Surface( + shape = RoundedCornerShape(16.dp), + color = MaterialTheme.colorScheme.primary.copy(alpha = 0.3f), + modifier = Modifier + .padding(horizontal = 4.dp) + .clickable { onEditGrammarClick() } + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.padding(horizontal = 8.dp, vertical = 2.dp) + ) { + Icon( + imageVector = AppIcons.Add, + contentDescription = stringResource(R.string.text_add_grammar_details), + modifier = Modifier.size(12.dp), + tint = MaterialTheme.colorScheme.onSurface + ) + Spacer(Modifier.width(4.dp)) + Text( + text = stringResource(R.string.text_add_grammar_details), + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.onSurface + ) + } + } + } + isEditing && wordDetails != null -> { + // Show existing grammar details as clickable pill + Surface( + shape = RoundedCornerShape(16.dp), + color = MaterialTheme.colorScheme.primary.copy(alpha = 0.3f), + modifier = Modifier + .padding(horizontal = 4.dp) + .clickable { onEditGrammarClick() } + ) { + Text( + text = propertiesString, + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(horizontal = 8.dp, vertical = 2.dp) + ) + } + } + wordDetails != null && isRevealed -> { + // Show grammar details as non-clickable pill + Surface( + shape = RoundedCornerShape(16.dp), + color = MaterialTheme.colorScheme.secondary.copy(alpha = 0.3f), + modifier = Modifier.padding(horizontal = 4.dp) + ) { + Text( + text = propertiesString, + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(horizontal = 8.dp, vertical = 2.dp) + ) + } + } + } +} + +@Composable +private fun CardFace( + modifier: Modifier = Modifier, + isFront: Boolean, + isFirst: Boolean, + languageViewModel: LanguageViewModel, + isEditing: Boolean, + word: String, + onWordChange: (String) -> Unit, + language: Language?, + onLanguageIdChange: (Int?) -> Unit, + isRevealed: Boolean = true, + userSpellingAnswer: String?, + isUserSpellingCorrect: Boolean?, + correctWord: String, + wordDetails: GrammaticalFeature?, + onEditGrammarClick: () -> Unit, + isExerciseMode: Boolean = false, + vocabularyItem: VocabularyItem? = null, + onMoreClick: (() -> Unit)? = null, +) { + + + val coroutineScope = rememberCoroutineScope() + val context = LocalContext.current + val activity = LocalContext.current.findActivity() + val settingsViewModel: SettingsViewModel = hiltViewModel(viewModelStoreOwner = activity) + var playable by remember { mutableStateOf(false) } + + LaunchedEffect(language) { + if (language != null) { + playable = TextToSpeechHelper.isPlayable(context,language) + } + if (isEditing) { + if (isFirst) { + languageViewModel.setSelectedSourceLanguage(language?.nameResId) + } else { + languageViewModel.setSelectedTargetLanguage(language?.nameResId) + } + } + } + + val showSpellingCorrection = !isEditing && isRevealed && (userSpellingAnswer != null) + if(!isExerciseMode) { + Row( + verticalAlignment = Alignment.Top, + modifier = Modifier.padding(start = 8.dp, end = 8.dp, top = 8.dp, bottom = 0.dp) + ){ + val zipfFrequency = if(isFirst) vocabularyItem?.zipfFrequencyFirst else vocabularyItem?.zipfFrequencySecond + + FrequencyPill(zipfFrequency = zipfFrequency) + + GrammarPill( + wordDetails = wordDetails, + language = language, + isEditing = isEditing, + isRevealed = isRevealed, + onEditGrammarClick = onEditGrammarClick + ) + } + } + + Box(modifier = modifier.fillMaxSize()) { + Column( + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 0.dp, vertical = 0.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + + Row( + verticalAlignment = Alignment.CenterVertically + ) { + if (isEditing) { + SingleLanguageDropDown( + modifier = Modifier.weight(1f), + languageViewModel = languageViewModel, + selectedLanguage = language, + onLanguageSelected = { selected -> onLanguageIdChange(selected.nameResId) }, + ) + } else { + Text( + text = language?.name ?: stringResource(R.string.text_unknown_language), + style = MaterialTheme.typography.titleMedium, + maxLines = 1, + fontWeight = FontWeight.Bold, + ) + } + if (!isEditing && playable && isRevealed) { + IconButton(onClick = { + coroutineScope.launch { + settingsViewModel.speakingSpeed.value + val voice = settingsViewModel.getTtsVoiceForLanguage(language!!.code, language.region) + TextToSpeechHelper.speakOut(context, word, + language, voice) + } + }) { + Icon(AppIcons.TextToSpeech, stringResource(R.string.cd_text_to_speech)) + } + } + } + + Spacer(Modifier.height(2.dp)) + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.padding(horizontal = 4.dp) + ) { + Box( + modifier = Modifier + .then(if (!isRevealed) Modifier.blur(10.dp) else Modifier), + contentAlignment = Alignment.Center + ) { + if (showSpellingCorrection && !isFront && isExerciseMode) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + val userAnswerAnnotatedString = buildAnnotatedString { + if (isUserSpellingCorrect == false) { + for (i in userSpellingAnswer.indices) { + val userChar = userSpellingAnswer.getOrNull(i) + val correctChar = correctWord.getOrNull(i) + if (userChar != null && correctChar != null && userChar.equals(correctChar, ignoreCase = true)) { + withStyle(style = SpanStyle(color = MaterialTheme.colorScheme.onSurface)) { append(userChar) } + } else { + withStyle(style = SpanStyle(color = MaterialTheme.colorScheme.error)) { append(userChar.toString()) } + } + } + } else { + withStyle(style = SpanStyle(color = MaterialTheme.colorScheme.primary)) { append( + userSpellingAnswer + ) } + } + } + Text(text = userAnswerAnnotatedString, style = MaterialTheme.typography.headlineLarge, textAlign = TextAlign.Center) + if (isUserSpellingCorrect == false) { + Text(text = correctWord, style = MaterialTheme.typography.headlineLarge, color = MaterialTheme.colorScheme.primary, textAlign = TextAlign.Center) + } + } + } + else if (isEditing) { + TextField( + value = word, + onValueChange = onWordChange, + textStyle = MaterialTheme.typography.headlineLarge.copy(textAlign = TextAlign.Center) + ) + } else { + val hasCompoundDelimiters = word.any { it == '-' || it == '–' || it == '—' || it == '‑' || it == '/' || it == '·' } + val isSingleToken = word.isNotBlank() && !word.any { it.isWhitespace() } + if (isSingleToken && !hasCompoundDelimiters) { + AutoResizeSingleLineText( + text = word, + style = MaterialTheme.typography.headlineLarge, + textAlign = TextAlign.Center + ) + } else { + val displayText = insertBreakOpportunities(word) + Text( + text = displayText, + style = MaterialTheme.typography.headlineLarge, + textAlign = TextAlign.Center + ) + } + } + } + + } + + + if (!isEditing) { + Box(modifier = Modifier + .weight(2f, fill = false) + .padding(0.dp)) { } + } + } + + // Info icon in bottom left + if (onMoreClick != null && !isEditing) { + IconButton( + onClick = onMoreClick, + modifier = Modifier + .align(Alignment.BottomStart) + .padding(8.dp) + ) { + Icon( + imageVector = AppIcons.Info, + contentDescription = stringResource(R.string.more), + tint = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f) + ) + } + } + } +} + +@Preview +@Composable +private fun FrequencyPillPreview() { + FrequencyPill(zipfFrequency = 4.2f) +} + +@Suppress("HardCodedStringLiteral") +@Preview +@Composable +private fun CardFacePreview() { + val activity = LocalContext.current.findActivity() + val languageViewModel: LanguageViewModel = hiltViewModel(viewModelStoreOwner = activity) + val language = Language( + code = "en", + region = "US", + nameResId = R.string.language_1, + name = "English", + englishName = "English" + ) + val vocabularyItem = VocabularyItem( + id = 1, + wordFirst = "example", + wordSecond = "Beispiel", + languageFirstId = R.string.language_1, + languageSecondId = R.string.language_2, + zipfFrequencyFirst = 5.0f + ) + + CardFace( + isFront = true, + isFirst = true, + languageViewModel = languageViewModel, + isEditing = false, + word = "example", + onWordChange = {}, + language = language, + onLanguageIdChange = {}, + isRevealed = true, + userSpellingAnswer = null, + isUserSpellingCorrect = null, + correctWord = "example", + wordDetails = null, + onEditGrammarClick = {}, + isExerciseMode = false, + vocabularyItem = vocabularyItem + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/AllVocabularyWidget.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/AllVocabularyWidget.kt new file mode 100644 index 0000000..5242e5f --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/AllVocabularyWidget.kt @@ -0,0 +1,79 @@ +package eu.gaudian.translator.view.vocabulary.widgets + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.SecondaryButton +import eu.gaudian.translator.viewmodel.VocabularyViewModel + +@Composable +fun AllVocabularyWidget( + vocabularyViewModel: VocabularyViewModel, + onOpenAllVocabulary: () -> Unit, + onStageClicked: (VocabularyStage) -> Unit +) { + val stageStats = vocabularyViewModel.stageStats.collectAsState().value + val totalItems = stageStats.sumOf { it.itemCount } + + + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + + } + + if (totalItems > 0) { + VocabularyStage.entries.forEach { stage -> + val stageCount = stageStats.find { it.stage == stage }?.itemCount ?: 0 + if (stageCount > 0) { + StageProgressBar( + stage = stage, + itemCount = stageCount, + totalItems = totalItems, + onClick = onStageClicked + ) + } + } + } else { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 32.dp) + ) { + Text( + text = stringResource(R.string.text_no_vocabulary_available), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) { + SecondaryButton( + onClick = onOpenAllVocabulary, + text = stringResource(R.string.text_view_all), + icon = AppIcons.ArrowRight + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/CategoryWidget.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/CategoryWidget.kt new file mode 100644 index 0000000..1235b97 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/CategoryWidget.kt @@ -0,0 +1,364 @@ +package eu.gaudian.translator.view.vocabulary.widgets + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Checkbox +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.StrokeCap +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.TagCategory +import eu.gaudian.translator.model.VocabularyCategory +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.ui.theme.semanticColors +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.SecondaryButton +import eu.gaudian.translator.viewmodel.ProgressViewModel + +@Composable +fun CategoryProgressWidget( + onCategoryClicked: (VocabularyCategory?) -> Unit, + onViewAllClicked: () -> Unit +) { + val viewModel: ProgressViewModel = ProgressViewModel.getInstance(androidx.compose.ui.platform.LocalContext.current.applicationContext as android.app.Application) + val categoryProgressList by viewModel.categoryProgressList.collectAsState(initial = emptyList()) + val selectedCategories by viewModel.selectedCategories.collectAsState(initial = emptySet()) + + var expanded by remember { mutableStateOf(false) } + + Column( + modifier = Modifier.padding(16.dp).fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + + + ChartLegend() + + Row( + modifier = Modifier + .height(200.dp) + .fillMaxWidth() + .horizontalScroll(rememberScrollState()), + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + if (selectedCategories.isEmpty()) { + // Show all categories if none are selected + categoryProgressList.forEach { data -> + CategoryProgressCircle( + category = data.vocabularyCategory.name, + totalItems = data.totalItems, + itemsCompleted = data.itemsCompleted, + itemsInStages = data.itemsInStages, + newItems = data.newItems, + onClick = { onCategoryClicked(data.vocabularyCategory) }, + showPercentage = true, + type = if(data.vocabularyCategory is TagCategory) CategoryCircleType.List else CategoryCircleType.Filter + ) + } + } else { + // Show only selected categories + selectedCategories.forEach { categoryId -> + val data = categoryProgressList.find { it.vocabularyCategory.id == categoryId } + if (data != null) { + CategoryProgressCircle( + category = data.vocabularyCategory.name, + totalItems = data.totalItems, + itemsCompleted = data.itemsCompleted, + itemsInStages = data.itemsInStages, + newItems = data.newItems, + onClick = { onCategoryClicked(data.vocabularyCategory) }, + showPercentage = true, + type = if(data.vocabularyCategory is TagCategory) CategoryCircleType.List else CategoryCircleType.Filter + ) + } + } + } + } + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterHorizontally) + ) { + Box { + SecondaryButton( + onClick = { expanded = true }, + text = stringResource(R.string.label_select), + icon = AppIcons.FilterFilled + ) + DropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false }, + modifier = Modifier.background(MaterialTheme.colorScheme.surfaceContainer) + ) { + categoryProgressList.forEach { data -> + val isSelected = selectedCategories.contains(data.vocabularyCategory.id) + DropdownMenuItem( + text = { Text(text = data.vocabularyCategory.name) }, + onClick = { viewModel.toggleCategorySelection(data.vocabularyCategory.id) }, + leadingIcon = { + Checkbox( + checked = isSelected, + onCheckedChange = { viewModel.toggleCategorySelection(data.vocabularyCategory.id) } + ) + } + ) + } + } + } + + SecondaryButton( + onClick = onViewAllClicked, + text = stringResource(id = R.string.text_view_all), + icon = AppIcons.ArrowForward + ) + } + } +} + +enum class CategoryCircleType { Filter, List } + +@Composable +fun CategoryProgressCircle( + category: String? = null, + totalItems: Int, + itemsCompleted: Int, + itemsInStages: Int, + newItems: Int, + circleSize: Dp = 120.dp, + onClick: (() -> Unit)? = null, + showPercentage: Boolean = false, + type: CategoryCircleType? = null +) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(8.dp), + modifier = if (onClick != null) { + Modifier + .clip(MaterialTheme.shapes.medium) + .clickable { onClick() } + .padding(8.dp) + } else { + Modifier + .clip(MaterialTheme.shapes.medium) + .padding(8.dp) + } + ) { + if (category != null) { + Text( + text = category, + style = MaterialTheme.typography.titleSmall + ) + } + + when { + totalItems == 0 -> { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .size(circleSize) + .background(MaterialTheme.colorScheme.surfaceContainerHighest, CircleShape).fillMaxWidth() + ) { + Text( + modifier = Modifier.align(Alignment.Center).padding(4.dp).fillMaxWidth(), + text = stringResource(R.string.text_no_items_available), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + if (type != null) { + CategoryTypeBadge(type) + } + } + } + itemsCompleted == totalItems -> { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier.size(circleSize) + ) { + Icon( + imageVector = AppIcons.CheckCircle, + contentDescription = stringResource(R.string.text_all_items_completed), + tint = MaterialTheme.semanticColors.stageGradient6, + modifier = Modifier.size(circleSize * 0.6f) + ) + if (type != null) { + CategoryTypeBadge(type) + } + } + } + else -> { + val pCompleted = if (totalItems > 0) itemsCompleted.toFloat() / totalItems else 0f + val pInStages = if (totalItems > 0) itemsInStages.toFloat() / totalItems else 0f + val pNew = if (totalItems > 0) newItems.toFloat() / totalItems else 0f + + val animatedCompleted by animateFloatAsState(targetValue = pCompleted, animationSpec = tween(1000), label = "") + val animatedInStages by animateFloatAsState(targetValue = pInStages, animationSpec = tween(1000), label = "") + val animatedNew by animateFloatAsState(targetValue = pNew, animationSpec = tween(1000), label = "") + + Box( + contentAlignment = Alignment.Center, + modifier = Modifier.size(circleSize) + ) { + val strokeWidth = circleSize * 0.1f + // Background track + CircularProgressIndicator( + progress = { 1f }, + modifier = Modifier.fillMaxSize(), + color = MaterialTheme.colorScheme.surfaceVariant, + strokeWidth = strokeWidth, + ) + // New Items + CircularProgressIndicator( + progress = { animatedNew + animatedInStages + animatedCompleted }, + modifier = Modifier.fillMaxSize(), + color = MaterialTheme.semanticColors.stageGradient1, + strokeWidth = strokeWidth, + strokeCap = StrokeCap.Round + ) + // In Stages + CircularProgressIndicator( + progress = { animatedInStages + animatedCompleted }, + modifier = Modifier.size(circleSize * 0.75f), + color = MaterialTheme.semanticColors.stageGradient3, + strokeWidth = strokeWidth, + strokeCap = StrokeCap.Round + ) + // Completed + CircularProgressIndicator( + progress = { animatedCompleted }, + modifier = Modifier.size(circleSize * 0.5f), + color = MaterialTheme.semanticColors.stageGradient6, + strokeWidth = strokeWidth, + strokeCap = StrokeCap.Round + ) + + if (showPercentage) { + Text( + text = "${(pCompleted * 100).toInt()}%", + style = MaterialTheme.typography.headlineSmall, + ) + } + if (type != null) { + CategoryTypeBadge(type) + } + } + } + } + // NOTE: You may need to add a plural string resource for "items" + Text( + text = stringResource(R.string.items, totalItems), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } +} +@Composable +private fun ChartLegend() { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp, Alignment.CenterHorizontally) + ) { + LegendItem(color = MaterialTheme.semanticColors.stageGradient6, label = stringResource(R.string.label_done)) + LegendItem(color = MaterialTheme.semanticColors.stageGradient3, label = stringResource(R.string.label_in_stages)) + LegendItem(color = MaterialTheme.semanticColors.stageGradient1, label = stringResource(R.string.label_new)) + } +} + +@Composable +private fun LegendItem(color: Color, label: String) { + Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(6.dp)) { + Box( + modifier = Modifier + .size(10.dp) + .background(color, shape = CircleShape) + ) + Text(text = label, style = MaterialTheme.typography.labelMedium) + } +} + + + +@ThemePreviews +@Composable +private fun VocabularyStatsWidgetPreview() { + LevelWidget( + totalWords = 500, learnedWords = 150, + onNavigateToProgress = { } + ) +} + +@Suppress("HardCodedStringLiteral") +@ThemePreviews +@Composable +private fun CategoryProgressCirclePreview() { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + CategoryProgressCircle(category = "Greetings", totalItems = 100, itemsCompleted = 20, itemsInStages = 30, newItems = 50, showPercentage = true) + CategoryProgressCircle(category = "Food", totalItems = 50, itemsCompleted = 50, itemsInStages = 0, newItems = 0) + CategoryProgressCircle(category = "Empty", totalItems = 0, itemsCompleted = 0, itemsInStages = 0, newItems = 0) + } +} + + +@Composable +private fun BoxScope.CategoryTypeBadge(type: CategoryCircleType) { + val icon = when (type) { + CategoryCircleType.Filter -> AppIcons.FilterCategory + CategoryCircleType.List -> AppIcons.FilterList + } + val contentDesc = when (type) { + CategoryCircleType.Filter -> stringResource(R.string.text_filter) + CategoryCircleType.List -> stringResource(R.string.text_list) + } + Box( + modifier = Modifier + .align(Alignment.TopEnd) + .padding(6.dp) + .size(20.dp) + .background(MaterialTheme.colorScheme.surface, CircleShape), + contentAlignment = Alignment.Center + ) { + Icon( + imageVector = icon, + contentDescription = contentDesc, + tint = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.size(12.dp) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/DueTodayWidget.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/DueTodayWidget.kt new file mode 100644 index 0000000..157da94 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/DueTodayWidget.kt @@ -0,0 +1,72 @@ +package eu.gaudian.translator.view.vocabulary.widgets + +import android.annotation.SuppressLint +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.viewmodel.VocabularyViewModel + +@SuppressLint("SuspiciousIndentation") +@Composable +fun DueTodayWidget(vocabularyViewModel: VocabularyViewModel, onStageClicked: (VocabularyStage) -> Unit) { + val dueTodayItems = vocabularyViewModel.dueTodayItems.collectAsState().value + val stageMapping = vocabularyViewModel.stageMapping.collectAsState().value + val dueTodayCount = dueTodayItems.size + val dueTodayByStage = dueTodayItems.groupingBy { stageMapping[it.id] ?: VocabularyStage.NEW }.eachCount() + + + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + + if (dueTodayCount > 0) { + VocabularyStage.entries.forEach { stage -> + val stageCount = dueTodayByStage[stage] ?: 0 + if (stageCount > 0) { + Column( + modifier = Modifier + .fillMaxWidth() + .clickable { onStageClicked(stage) } + .padding(vertical = 4.dp) + ) { + DetailedStageProgressBar( + stage = stage, + itemCount = stageCount, + totalItems = stageMapping.values.count { it == stage }, + onStageTapped = onStageClicked + ) + } + } + } + } else { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 32.dp) + ) { + Text( + text = stringResource(R.string.text_no_vocabulary_due_today), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/LanguageLevelWidget.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/LanguageLevelWidget.kt new file mode 100644 index 0000000..70b3fcb --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/LanguageLevelWidget.kt @@ -0,0 +1,123 @@ +package eu.gaudian.translator.view.vocabulary.widgets + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.LanguageLevels +import eu.gaudian.translator.model.MyAppLanguageLevel +import eu.gaudian.translator.view.composable.ComponentDefaults + + +/** + * A composable widget that displays a single language level's information. + * It shows the level's icon, name, word count, and description in a styled card. + * + * @param level The [MyAppLanguageLevel] object to display. + * @param modifier A [Modifier] for this composable. + */ +@Composable +fun LanguageLevelWidget(level: MyAppLanguageLevel, modifier: Modifier = Modifier) { + Card( + modifier = modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 8.dp), + elevation = CardDefaults.cardElevation(defaultElevation = ComponentDefaults.DefaultElevation), + shape = MaterialTheme.shapes.medium + ) { + Row( + modifier = Modifier.padding(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + // Level Icon + Image( + painter = painterResource(id = level.iconResId), + contentDescription = stringResource(id = level.nameResId), + modifier = Modifier + .size(64.dp) + .padding(end = 16.dp) + ) + + // Level Details Column + Column(modifier = Modifier.weight(1f)) { + // Level Name + Text( + text = stringResource(id = level.nameResId), + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold + ) + + Spacer(modifier = Modifier.height(4.dp)) + + // Words Known + // Note: For proper localization, it's best to use Plurals string resources. + // For simplicity here, we are using a simple string. + Text( + text = stringResource(R.string.words_known, level.wordsKnown), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.primary + ) + + Spacer(modifier = Modifier.height(8.dp)) + + // Description + Text( + text = stringResource(id = level.descriptionResId), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } +} + +/** + * A preview function to display the LanguageLevelWidget in Android Studio. + * This uses the "Newborn" tier as an example. + */ +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "Single Level Preview") +@Composable +fun LanguageLevelWidgetPreview() { + // This preview uses the Newborn object from your MyAppLanguageLevel sealed class. + // Ensure you have a drawable resource named 'ic_level_newborn' and the + // corresponding string resources for the preview to render correctly. + + LanguageLevelWidget(level = MyAppLanguageLevel.Newborn) + +} + +/** + * A preview function that displays all language levels in a scrollable list. + */ +@Suppress("HardCodedStringLiteral") +@Preview(showBackground = true, name = "All Levels List Preview", heightDp = 800) +@Composable +fun AllLanguageLevelsPreview() { + + LazyColumn { + items(LanguageLevels.all) { level -> + LanguageLevelWidget(level = level) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/LevelWidget.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/LevelWidget.kt new file mode 100644 index 0000000..8014e62 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/LevelWidget.kt @@ -0,0 +1,133 @@ +package eu.gaudian.translator.view.vocabulary.widgets + +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedCard +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.model.LanguageLevels +import eu.gaudian.translator.model.MyAppLanguageLevel + +/** + * Main widget that displays word statistics and the user's current language level. + */ +@Composable +fun LevelWidget( + totalWords: Int, + learnedWords: Int, + onNavigateToProgress: () -> Unit // Add this parameter +) { + + Column( + modifier = Modifier + .fillMaxWidth() + .clickable { onNavigateToProgress() }, // Make whole widget clickable + horizontalAlignment = Alignment.CenterHorizontally + ) { + // Original row with word statistics + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + horizontalArrangement = Arrangement.SpaceAround + ) { + StatItem(value = totalWords.toString(), label = stringResource(R.string.label_total_words)) + StatItem(value = learnedWords.toString(), label = stringResource(R.string.label_learned)) + StatItem( + value = (totalWords - learnedWords).toString(), + label = stringResource(R.string.remaining) + ) + } + + // Determine the current language level based on the number of learned words. + val currentLevel = LanguageLevels.getLevelForWords(learnedWords) + + // Display the detailed language level widget below the stats. + LanguageLevelInfoWidget(level = currentLevel) + } +} + +/** + * A composable that displays a single statistic (e.g., total words). + */ +@Composable +fun StatItem(value: String, label: String) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text(text = value, style = MaterialTheme.typography.headlineMedium) + Spacer(modifier = Modifier.height(4.dp)) + Text( + text = label, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } +} + +/** + * A widget (previously LanguageLevelWidget) that displays detailed information + * about a single language level in a styled card. + * + * @param level The [MyAppLanguageLevel] object to display. + * @param modifier A [Modifier] for this composable. + */ +@Composable +fun LanguageLevelInfoWidget(level: MyAppLanguageLevel, modifier: Modifier = Modifier) { + OutlinedCard( + modifier = modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 8.dp), + ) { + Row( + modifier = Modifier.padding(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + // Level Icon + Image( + painter = painterResource(id = level.iconResId), + contentDescription = stringResource(id = level.nameResId), + modifier = Modifier + .size(64.dp) + .padding(end = 16.dp) + ) + + // Level Details Column + Column(modifier = Modifier.weight(1f)) { + // Level Name + Text( + text = stringResource(id = level.nameResId), + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold + ) + Spacer(modifier = Modifier.height(4.dp)) + // Words Known + Text( + text = stringResource(R.string.words_known, level.wordsKnown), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.primary + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stringResource(id = level.descriptionResId), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/ModernStartButton.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/ModernStartButton.kt new file mode 100644 index 0000000..2ca96db --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/ModernStartButton.kt @@ -0,0 +1,200 @@ +package eu.gaudian.translator.view.vocabulary.widgets + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.interaction.collectIsPressedAsState +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.scale +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.view.composable.AppIcons + +/** + * A modern, visually appealing set of start buttons for exercises. + * The public signature is identical to the original for drop-in replacement. + * + * @param onCustomClick Lambda for the primary custom exercise action. + * @param onDailyClick Lambda for daily exercises. It's called with `false` for a + * normal daily exercise and `true` for a daily spelling exercise. + */ +@Composable +fun ModernStartButtons( + onCustomClick: () -> Unit, + onDailyClick: (isSpelling: Boolean) -> Unit +) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 24.dp, vertical = 16.dp), + horizontalArrangement = Arrangement.spacedBy(20.dp), + verticalAlignment = Alignment.CenterVertically + ) { + // A large, prominent "feature button" for the main call to action. + FeatureButton( + text = stringResource(R.string.text_custom_exercise), + icon = AppIcons.PlayCircleFilled, + onClick = onCustomClick, + modifier = Modifier.weight(1f) + ) + + // A column for the two secondary "daily" actions. + Column( + modifier = Modifier.weight(1f), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + SecondaryButton( + text = stringResource(R.string.text_daily_exercise), + icon = AppIcons.Today, + onClick = { onDailyClick(false) } + ) + + SecondaryButton( + text = stringResource(R.string.quick_word_pairs), + icon = AppIcons.SwapHoriz, + onClick = { onDailyClick(true) } + ) + } + } +} + +/** + * A visually rich feature button with a gradient background and a subtle + * press animation. Designed to be the primary call to action. + */ +@Composable +private fun FeatureButton( + text: String, + icon: ImageVector, + onClick: () -> Unit, + modifier: Modifier = Modifier +) { + val interactionSource = remember { MutableInteractionSource() } + val isPressed by interactionSource.collectIsPressedAsState() + @Suppress("HardCodedStringLiteral") val scale by animateFloatAsState(targetValue = if (isPressed) 0.95f else 1f, label = "label_scale" + ) + + Card( + modifier = modifier + .aspectRatio(1f) + .scale(scale) + .clickable( + interactionSource = interactionSource, + indication = null, + onClick = onClick + ), + shape = MaterialTheme.shapes.extraLarge, + elevation = CardDefaults.cardElevation(defaultElevation = 8.dp) + ) { + Box( + modifier = Modifier + .fillMaxSize() + .background( + Brush.linearGradient( + colors = listOf( + MaterialTheme.colorScheme.primaryContainer, + MaterialTheme.colorScheme.primary + ) + ) + ), + contentAlignment = Alignment.Center + ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center, + modifier = Modifier.padding(16.dp) + ) { + Icon( + imageVector = icon, + contentDescription = null, + modifier = Modifier.size(48.dp), + tint = MaterialTheme.colorScheme.onPrimary + ) + Spacer(modifier = Modifier.height(6.dp)) + Text( + text = text, + style = MaterialTheme.typography.titleMedium.copy( + fontWeight = FontWeight.Bold, + fontSize = 14.sp + ), + color = MaterialTheme.colorScheme.onPrimary, + textAlign = TextAlign.Center + ) + } + } + } +} + +/** + * A clean and simple OutlinedButton for secondary actions, with an icon and text. + */ +@Composable +private fun SecondaryButton( + text: String, + icon: ImageVector, + onClick: () -> Unit, + modifier: Modifier = Modifier +) { + OutlinedButton( + onClick = onClick, + modifier = modifier.fillMaxWidth(), + shape = MaterialTheme.shapes.large, + contentPadding = PaddingValues(horizontal = 16.dp, vertical = 12.dp), + border = BorderStroke(1.dp, MaterialTheme.colorScheme.primary.copy(alpha = 0.5f)) + ) { + Icon( + imageVector = icon, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(20.dp) + ) + Spacer(modifier = Modifier.size(8.dp)) + Text( + text = text, + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier.weight(1f) + ) + } +} + + +@ThemePreviews +@Composable +private fun ModernStartButtonsPreview() { + ModernStartButtons( + onCustomClick = {}, + onDailyClick = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/StageProgressBar.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/StageProgressBar.kt new file mode 100644 index 0000000..3d4d565 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/StageProgressBar.kt @@ -0,0 +1,173 @@ +package eu.gaudian.translator.view.vocabulary.widgets + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Icon +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ProgressIndicatorDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.ui.theme.semanticColors +import eu.gaudian.translator.view.composable.AppIcons + +@Composable +fun StageProgressBar(stage: VocabularyStage, itemCount: Int, totalItems: Int, onClick: (VocabularyStage) -> Unit) { + + val progress = if (totalItems > 0) itemCount.toFloat() / totalItems else 0f + val animatedProgress by animateFloatAsState( + targetValue = progress, + animationSpec = tween(durationMillis = 1000), + label = "progressAnimation", + ) + val context = LocalContext.current + + val color = when (stage) { + VocabularyStage.NEW -> MaterialTheme.semanticColors.stageGradient1 + VocabularyStage.STAGE_1 -> MaterialTheme.semanticColors.stageGradient2 + VocabularyStage.STAGE_2 -> MaterialTheme.semanticColors.stageGradient3 + VocabularyStage.STAGE_3 -> MaterialTheme.semanticColors.stageGradient4 + VocabularyStage.STAGE_4 -> MaterialTheme.semanticColors.stageGradient5 + VocabularyStage.STAGE_5 -> MaterialTheme.semanticColors.stageGradient6 + VocabularyStage.LEARNED -> MaterialTheme.semanticColors.stageGradient6 + } + + Column { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { onClick(stage) }, + horizontalArrangement = Arrangement.SpaceBetween + + ) { + Text( + text = stage.toString(context), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurface + ) + Text( + text = "$itemCount", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + Spacer(modifier = Modifier.height(4.dp)) + LinearProgressIndicator( + progress = { animatedProgress }, + modifier = Modifier + .fillMaxWidth() + .height(8.dp) + .clip(CircleShape), + color = color, + trackColor = MaterialTheme.colorScheme.surfaceContainerHighest, + strokeCap = ProgressIndicatorDefaults.LinearStrokeCap, + ) + } +} + +@Preview +@Composable +fun StageProgressBarPreview() { + StageProgressBar( + stage = VocabularyStage.NEW, itemCount = 10, totalItems = 100, + onClick = { } + ) +} + + +@Composable +fun DetailedStageProgressBar( + stage: VocabularyStage, + itemCount: Int, + totalItems: Int, + modifier: Modifier = Modifier, + onStageTapped: (VocabularyStage) -> Unit +) { + val context = LocalContext.current + val progress = if (totalItems > 0) itemCount.toFloat() / totalItems else 0f + val animatedProgress by animateFloatAsState( + targetValue = progress, + animationSpec = tween(durationMillis = 1000), + label = "detailedProgressAnimation" + ) + + val stageColor = when (stage) { + VocabularyStage.NEW -> MaterialTheme.semanticColors.stageGradient1 + VocabularyStage.STAGE_1 -> MaterialTheme.semanticColors.stageGradient2 + VocabularyStage.STAGE_2 -> MaterialTheme.semanticColors.stageGradient3 + VocabularyStage.STAGE_3 -> MaterialTheme.semanticColors.stageGradient4 + VocabularyStage.STAGE_4 -> MaterialTheme.semanticColors.stageGradient5 + VocabularyStage.STAGE_5 -> MaterialTheme.semanticColors.stageGradient6 + VocabularyStage.LEARNED -> MaterialTheme.semanticColors.stageGradient6 + } + + val stageIcon = when (stage) { + VocabularyStage.NEW -> AppIcons.StageNew + VocabularyStage.STAGE_1 -> AppIcons.Stage1 + VocabularyStage.STAGE_2 -> AppIcons.Stage2 + VocabularyStage.STAGE_3 -> AppIcons.Stage3 + VocabularyStage.STAGE_4 -> AppIcons.Stage4 + VocabularyStage.STAGE_5 -> AppIcons.Stage5 + VocabularyStage.LEARNED -> AppIcons.StageLearned + } + + Column( + modifier = modifier + .clip(MaterialTheme.shapes.medium) + .clickable { onStageTapped(stage) } + .padding(vertical = 8.dp, horizontal = 4.dp) + ) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + Icon( + imageVector = stageIcon, + contentDescription = stage.toString(context), + tint = stageColor + ) + Text( + text = stage.toString(context), + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.SemiBold, + modifier = Modifier.weight(1f) + ) + Text( + text = "$itemCount / $totalItems", + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + + Spacer(modifier = Modifier.height(8.dp)) + + LinearProgressIndicator( + progress = { animatedProgress }, + modifier = Modifier + .fillMaxWidth() + .height(8.dp) + .clip(CircleShape), + color = stageColor, + trackColor = MaterialTheme.colorScheme.surfaceContainerHighest, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/StatusWidget.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/StatusWidget.kt new file mode 100644 index 0000000..15c6ee7 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/StatusWidget.kt @@ -0,0 +1,145 @@ +package eu.gaudian.translator.view.vocabulary.widgets + +import android.app.Application +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.semanticColors +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.viewmodel.VocabularyViewModel +import okhttp3.internal.platform.PlatformRegistry.applicationContext + +@Composable +fun StatusWidget( + vocabularyViewModel: VocabularyViewModel = VocabularyViewModel.getInstance(applicationContext as Application), + onNavigateToNew: () -> Unit, + onNavigateToDuplicates: () -> Unit, + onNavigateToFaulty: () -> Unit, + onNavigateToNoGrammar: () -> Unit, + onNavigateToMissingLanguage: (Int) -> Unit +) { + val newItemsCount by vocabularyViewModel.newItemsCount.collectAsState() + val duplicateCount by vocabularyViewModel.duplicateItemsCount.collectAsState() + val faultyItemsCount by vocabularyViewModel.faultyItemsCount.collectAsState() + val itemsWithoutGrammarCount by vocabularyViewModel.itemsWithoutGrammarCount.collectAsState() + val missingLanguageInfo by vocabularyViewModel.missingLanguageInfo.collectAsState() + + val hasIssues = newItemsCount > 0 || duplicateCount > 0 || faultyItemsCount > 0 || itemsWithoutGrammarCount > 0 || missingLanguageInfo.isNotEmpty() + + Column( + modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + if (hasIssues) { + if (newItemsCount > 0) { + StatusItem( + icon = AppIcons.Sort, + text = stringResource(R.string.status_widget_new_items), + count = newItemsCount, + onClick = onNavigateToNew, + color = MaterialTheme.colorScheme.primary + ) + } + if (duplicateCount > 0) { + StatusItem( + icon = AppIcons.Error, + text = stringResource(R.string.status_widget_duplicates), + count = duplicateCount, + onClick = onNavigateToDuplicates, + color = MaterialTheme.colorScheme.error + ) + } + if (faultyItemsCount > 0) { + StatusItem( + icon = AppIcons.Error, + text = stringResource(R.string.status_widget_faulty_items), + count = faultyItemsCount, + onClick = onNavigateToFaulty, + color = MaterialTheme.colorScheme.error + ) + } + missingLanguageInfo.forEach { (languageId, count) -> + StatusItem( + icon = AppIcons.Error, + text = stringResource(R.string.language_with_id_d_not_found, languageId), + count = count, + onClick = { onNavigateToMissingLanguage(languageId) }, + color = MaterialTheme.colorScheme.error + ) + } + if (itemsWithoutGrammarCount > 0) { + StatusItem( + icon = AppIcons.Error, + text = stringResource(R.string.items_without_grammar_infos), + count = itemsWithoutGrammarCount, + onClick = onNavigateToNoGrammar, + color = MaterialTheme.colorScheme.error + ) + } + } else { + StatusItem( + icon = AppIcons.CheckCircle, + text = stringResource(R.string.status_widget_all_good), + onClick = null, + color = MaterialTheme.semanticColors.success + ) + } + } +} + +@Composable +private fun StatusItem( + icon: ImageVector, + text: String, + onClick: (() -> Unit)?, + color: Color, + count: Int? = null +) { + var modifier = Modifier.fillMaxWidth() + if (onClick != null) { + modifier = modifier.clickable(onClick = onClick) + } + + Row( + modifier = modifier.padding(vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + Icon( + imageVector = icon, + contentDescription = null, + tint = color + ) + Text( + modifier = Modifier.weight(1f), + text = text, + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurface + ) + if (count != null) { + Text( + text = count.toString(), + style = MaterialTheme.typography.bodyLarge, + color = color, + fontWeight = FontWeight.Bold + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/StreakWidget.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/StreakWidget.kt new file mode 100644 index 0000000..0bb5720 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/StreakWidget.kt @@ -0,0 +1,259 @@ +package eu.gaudian.translator.view.vocabulary.widgets + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.drawWithCache +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.view.composable.AppIcons +import eu.gaudian.translator.view.composable.SecondaryButton +import eu.gaudian.translator.viewmodel.DayStreak + +@Composable +fun StreakWidget( + streak: Int, + lastSevenDays: List, + dueTodayCount: Int, + wordsCompleted: Int, + onStatisticsClicked: () -> Unit +) { + Column( + modifier = Modifier.padding(vertical = 8.dp, horizontal = 4.dp) + ) { + // Section 1: Top Stats (Streak & Due Today) + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 8.dp), + horizontalArrangement = Arrangement.SpaceAround, + verticalAlignment = Alignment.CenterVertically + ) { + StatItem( + emoji = "🔥", + value = streak.toString(), + label = stringResource(R.string.text_day_streak), + iconColor = MaterialTheme.colorScheme.onSurface + ) + + StatItem( + icon = AppIcons.Vocabulary, + value = dueTodayCount.toString(), + label = stringResource(R.string.text_due_today), + iconColor = MaterialTheme.colorScheme.secondary + ) + } + + Spacer(modifier = Modifier.height(16.dp)) + + // Section 2: Weekly Progress + Text( + text = stringResource(R.string.text_last_7_days), + style = MaterialTheme.typography.titleSmall, + modifier = Modifier.padding(start = 12.dp, bottom = 12.dp), + ) + + WeeklyProgress(lastSevenDays = lastSevenDays) + + Spacer(modifier = Modifier.height(24.dp)) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center + ) { + Text( + text = stringResource(R.string.text_total_learned_words) + ": $wordsCompleted", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurface + ) + } + + Spacer(modifier = Modifier.height(8.dp)) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center + ) { + SecondaryButton( + onClick = onStatisticsClicked, + icon = AppIcons.ArrowForward, + text = stringResource(R.string.text_more_stats) + ) + } + } +} + +@Composable +private fun StatItem( + icon: ImageVector? = null, + emoji: String? = null, + value: String, + label: String, + iconColor: Color, + gradientBrush: Brush? = null +) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + when { + emoji != null -> { + Text( + text = emoji, + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.size(28.dp) + ) + } + gradientBrush != null && icon != null -> { + Icon( + imageVector = icon, + contentDescription = label, + modifier = Modifier + .size(28.dp) + .drawWithCache { + onDrawWithContent { + // Draw the gradient first + drawRect( + brush = gradientBrush, + size = size + ) + // Then draw the icon shape using SrcIn to clip the gradient to the icon shape + drawContent() + } + }, + tint = Color.White // Use white to preserve the gradient colors + ) + } + icon != null -> { + Icon( + imageVector = icon, + contentDescription = label, + modifier = Modifier.size(28.dp), + tint = iconColor + ) + } + } + + Spacer(modifier = Modifier.height(8.dp)) + + Text( + text = value, + style = MaterialTheme.typography.headlineSmall, + fontWeight = FontWeight.Bold + ) + + Text( + text = label, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurface + ) + } +} + +@Composable +private fun WeeklyProgress(lastSevenDays: List) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp), + horizontalArrangement = Arrangement.SpaceAround + ) { + lastSevenDays.forEach { day -> + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + val backgroundColor = if (day.targetMet) { + MaterialTheme.colorScheme.primary + } else { + MaterialTheme.colorScheme.surfaceContainerHighest + } + + val contentColor = if (day.targetMet) { + MaterialTheme.colorScheme.onPrimary + } else { + MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f) + } + + Box( + modifier = Modifier + .size(38.dp) + .clip(CircleShape) + .background(backgroundColor), + contentAlignment = Alignment.Center + ) { + if (day.targetMet) { + Icon( + imageVector = AppIcons.Check, + contentDescription = stringResource(R.string.cd_target_met), + tint = contentColor, + modifier = Modifier.size(24.dp) + ) + } + } + + Text( + text = day.day, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurface + ) + } + } + } +} + +@Suppress("HardCodedStringLiteral") +@ThemePreviews +@Composable +private fun StreakWidgetPreview() { + val lastSevenDays = listOf( + DayStreak(day = "Mon", targetMet = true), + DayStreak(day = "Tue", targetMet = false), + DayStreak(day = "Wed", targetMet = true), + DayStreak(day = "Thu", targetMet = true), + DayStreak(day = "Fri", targetMet = false), + DayStreak(day = "Sat", targetMet = true), + DayStreak(day = "Sun", targetMet = true) + ) + + Box( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background) + .padding(16.dp), + contentAlignment = Alignment.Center + ) { + StreakWidget( + streak = 5, + lastSevenDays = lastSevenDays, + dueTodayCount = 10, + wordsCompleted = 120, + onStatisticsClicked = {} + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/WeeklyActivityChartWidget.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/WeeklyActivityChartWidget.kt new file mode 100644 index 0000000..b908ba3 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/WeeklyActivityChartWidget.kt @@ -0,0 +1,214 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.vocabulary.widgets + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import eu.gaudian.translator.R +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.ui.theme.semanticColors +import eu.gaudian.translator.viewmodel.WeeklyActivityStat +import kotlinx.coroutines.delay + +/** + * A widget that displays weekly activity statistics in a visually appealing bar chart. + * It's designed to be consistent with the app's modern, floating UI style. + * + * @param weeklyStats A list of [WeeklyActivityStat] for the last 7 days. + */ +@Composable +fun WeeklyActivityChartWidget( + weeklyStats: List +) { + val maxValue = remember(weeklyStats) { + (weeklyStats.flatMap { listOf(it.newlyAdded, it.completed, it.answeredRight) }.maxOrNull() ?: 0).let { + if (it < 10) 10 else ((it / 5) + 1) * 5 + } + } + + val hasNoData = remember(weeklyStats) { + weeklyStats.all { it.newlyAdded == 0 && it.completed == 0 && it.answeredRight == 0 } + } + + if (hasNoData) { + Box( + modifier = Modifier + .fillMaxWidth(), + contentAlignment = Alignment.Center + ) { + Text( + text = stringResource(R.string.text_no_data_available), + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } else { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(8.dp) + ) { + ChartLegend() + Spacer(modifier = Modifier.height(16.dp)) + + Row( + modifier = Modifier + .fillMaxWidth() + .height(220.dp), + verticalAlignment = Alignment.Bottom + ) { + // Y-Axis Labels + Column( + modifier = Modifier + .fillMaxHeight() + .padding(end = 8.dp), + verticalArrangement = Arrangement.SpaceBetween, + horizontalAlignment = Alignment.End + ) { + Text(maxValue.toString(), style = MaterialTheme.typography.labelSmall) + Text((maxValue / 2).toString(), style = MaterialTheme.typography.labelSmall) + Text("0", style = MaterialTheme.typography.labelSmall) + } + + // Chart Bars + Row( + modifier = Modifier + .weight(1f) + .fillMaxHeight(), + horizontalArrangement = Arrangement.SpaceAround, + verticalAlignment = Alignment.Bottom + ) { + weeklyStats.forEach { stat -> + Column( + modifier = Modifier.weight(1f), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Bottom + ) { + Row( + verticalAlignment = Alignment.Bottom, + horizontalArrangement = Arrangement.spacedBy(2.dp), + modifier = Modifier + .weight(1f) + .fillMaxWidth(0.8f) + ) { + Bar(value = stat.newlyAdded, maxValue = maxValue, color = MaterialTheme.semanticColors.stageGradient1) + Bar(value = stat.completed, maxValue = maxValue, color = MaterialTheme.semanticColors.stageGradient3) + Bar(value = stat.answeredRight, maxValue = maxValue, color = MaterialTheme.semanticColors.stageGradient5) + } + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stat.day, + style = MaterialTheme.typography.bodySmall + ) + } + } + } + } + } + } +} + +@Composable +private fun RowScope.Bar(value: Int, maxValue: Int, color: Color) { + var startAnimation by remember { mutableStateOf(false) } + val barHeight by animateFloatAsState( + targetValue = if (startAnimation) value.toFloat() / maxValue.toFloat() else 0f, + animationSpec = tween(durationMillis = 1000), + label = "barHeightAnimation" + ) + + LaunchedEffect(Unit) { + delay(200) // Small delay to ensure the UI is ready before animating + @Suppress("AssignedValueIsNeverRead") + startAnimation = true + } + + Box( + modifier = Modifier + .weight(1f) + .fillMaxHeight(barHeight) + .clip(RoundedCornerShape(topStart = 4.dp, topEnd = 4.dp)) + .background(color) + ) +} + +@Composable +private fun ChartLegend() { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + LegendItem(color = MaterialTheme.semanticColors.stageGradient1, label = stringResource(R.string.label_added)) + LegendItem(color = MaterialTheme.semanticColors.stageGradient3, label = stringResource(R.string.label_completed)) + LegendItem(color = MaterialTheme.semanticColors.stageGradient5, label = stringResource(R.string.label_correct)) + } +} + +@Composable +private fun LegendItem(color: Color, label: String) { + Row(verticalAlignment = Alignment.CenterVertically) { + Box( + modifier = Modifier + .size(10.dp) + .background(color, shape = CircleShape) + ) + Spacer(modifier = Modifier.width(6.dp)) + Text(text = label, style = MaterialTheme.typography.labelMedium, fontSize = 12.sp) + } +} + +@ThemePreviews +@Composable +fun WeeklyActivityChartWidgetPreview() { + val sampleStats = listOf( + WeeklyActivityStat("Mon", 10, 5, 20), + WeeklyActivityStat("Tue", 12, 3, 15), + WeeklyActivityStat("Wed", 8, 8, 25), + WeeklyActivityStat("Thu", 15, 2, 18), + WeeklyActivityStat("Fri", 5, 10, 30), + WeeklyActivityStat("Sat", 7, 6, 22), + WeeklyActivityStat("Sun", 9, 4, 17) + ) + Box( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background) + .padding(16.dp), + contentAlignment = Alignment.Center + ) { + WeeklyActivityChartWidget(weeklyStats = sampleStats) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/WidgetButtonOutline.kt b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/WidgetButtonOutline.kt new file mode 100644 index 0000000..daabd91 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/view/vocabulary/widgets/WidgetButtonOutline.kt @@ -0,0 +1,79 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.view.vocabulary.widgets + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import eu.gaudian.translator.ui.theme.ThemePreviews +import eu.gaudian.translator.view.composable.AppIcons + +@Composable +fun WidgetButtonOutline( + onClick: () -> Unit, + modifier: Modifier = Modifier, + showIcon: Boolean = false, + content: @Composable RowScope.() -> Unit // RowScope is fine for this version +) { + Surface( + onClick = onClick, + modifier = modifier.fillMaxWidth(), // The clickable area is still full-width + shape = MaterialTheme.shapes.medium, + border = BorderStroke(1.dp, MaterialTheme.colorScheme.outline.copy(alpha = 0.5f)), + color = Color.Transparent, + tonalElevation = 2.dp + ) { + // This Row now only takes up as much space as its children need. + // It is placed at the start of the Surface by default. + Row( + modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Start // Explicitly align to the start + ) { + // Your content is placed first + content() + + if (showIcon) { + // A small spacer for breathing room + Spacer(modifier = Modifier.width(8.dp)) + + // The Icon is placed immediately after the spacer + Icon( + AppIcons.ArrowForward, + contentDescription = "Arrow Icon", + tint = MaterialTheme.colorScheme.onSurface + ) + } + } + } +} + +@ThemePreviews +@Composable +fun WidgetButtonOutlinePreview() { + WidgetButtonOutline(onClick = {}) { + Text("Button Text") + } +} + +@ThemePreviews +@Composable +fun WidgetButtonOutlinePreviewIcon() { + WidgetButtonOutline(onClick = {}, showIcon = true) { + Text("Button Text") + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/ApiViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/ApiViewModel.kt new file mode 100644 index 0000000..cb86be9 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/ApiViewModel.kt @@ -0,0 +1,373 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import eu.gaudian.translator.model.LanguageModel +import eu.gaudian.translator.model.communication.ApiManager +import eu.gaudian.translator.model.communication.ApiProvider +import eu.gaudian.translator.model.repository.ApiRepository +import eu.gaudian.translator.model.repository.SettingsRepository +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import javax.inject.Inject + +data class ProviderState( + val provider: ApiProvider, + val apiKey: String = "", + val hasKey: Boolean = false, + val validationMessage: String = "", + val isEditing: Boolean = false +) + +data class ApiKeyManagementState( + val providerStates: List = emptyList(), + val isAddingProvider: Boolean = false, + val providerKeyForAddingModel: String? = null, + val isAddingModel: Boolean = false, + val addModelError: String? = null, + val isScanningModels: Boolean = false, + val scannedModels: List = emptyList(), + val providerKeyForEditing: String? = null, + val modelIdForEditing: String? = null, + val showWipeAllConfirm: Boolean = false +) + +@HiltViewModel +class ApiViewModel @Inject constructor( + application: Application, + private val settingsRepository: SettingsRepository, + private val apiManager: ApiManager, + private val apiRepository: ApiRepository, +) : AndroidViewModel(application) { + + @Suppress("PrivatePropertyName") + private val TAG = "ApiViewModel" + private val _apiKeyManagementState = MutableStateFlow(ApiKeyManagementState()) + val apiKeyManagementState: StateFlow = _apiKeyManagementState.asStateFlow() + val interval:Long = 1000 + + // 1. Source of Truth: All providers from DB + val allProviders: StateFlow> = apiRepository.getProviders() + .onEach { Log.d(TAG, "allProviders updated: ${it.size} items") } + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(interval), emptyList()) + + // 2. Derived: Only providers that are active (Valid Key or Custom) + val allValidProviders: StateFlow> = allProviders + .map { list -> list.filter { it.hasValidKey || it.isCustom } } + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(interval), emptyList()) + + // 3. Derived: All models + val allModels: StateFlow> = allProviders + .map { providers -> providers.flatMap { it.models } } + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(interval), emptyList()) + + // 4. Derived: Valid Models + // Since we now manually remove models when keys are missing, we can trust allModels. + // However, keeping the filter is safer for edge cases. + val allValidModels: StateFlow> = allProviders + .map { providers -> + providers + .filter { it.hasValidKey || it.isCustom } + .flatMap { it.models } + } + .onEach { Log.d(TAG, "allValidModels updated: ${it.size} models available") } + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(interval), emptyList()) + + val translationModel: StateFlow = apiRepository.getTranslationModel() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(interval), null) + + val exerciseModel: StateFlow = apiRepository.getExerciseModel() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(interval), null) + + val vocabularyModel: StateFlow = apiRepository.getVocabularyModel() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(interval), null) + + val dictionaryModel: StateFlow = apiRepository.getDictionaryModel() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(interval), null) + + init { + // Sync UI state + viewModelScope.launch { + apiRepository.getProviders() + .combine(settingsRepository.getAllApiKeys()) { providers, apiKeys -> + providers.map { provider -> + val apiKey = apiKeys[provider.key] ?: "" + val hasKey = apiKey.isNotBlank() + + val currentUiState = _apiKeyManagementState.value.providerStates + .find { it.provider.key == provider.key } + + ProviderState( + provider = provider, + apiKey = currentUiState?.apiKey.takeIf { !it.isNullOrBlank() && currentUiState?.isEditing == true } ?: apiKey, + hasKey = hasKey, + isEditing = currentUiState?.isEditing ?: false, + validationMessage = currentUiState?.validationMessage ?: "" + ) + } + } + .collect { providerStates -> + _apiKeyManagementState.update { it.copy(providerStates = providerStates) } + } + } + } + + /* --- Provider Management --- */ + + fun startAddingProvider() = _apiKeyManagementState.update { it.copy(isAddingProvider = true) } + + fun cancelAddProvider() = _apiKeyManagementState.update { it.copy(isAddingProvider = false) } + + fun addProvider(provider: ApiProvider) = viewModelScope.launch { + Log.i(TAG, "Adding custom provider: ${provider.displayName}") + // Logic to ensure unique keys + val existingKeys = allProviders.value.map { it.key }.toSet() + fun slugify(input: String): String { + val base = input.lowercase().trim() + .replace("[^a-z0-9]+".toRegex(), "-") + .trim('-') + return when { + base.isBlank() -> "custom" + base.length <= 40 -> base + else -> base.take(40).trim('-') + } + } + var desired = provider.key.trim() + desired = if (desired.isBlank()) slugify(provider.displayName) else slugify(desired) + var unique = desired + var counter = 1 + while (unique.isBlank() || existingKeys.contains(unique)) { + unique = if (desired.isBlank()) "custom-$counter" else "$desired-$counter" + counter++ + } + + val safeProvider = provider.copy(key = unique, isCustom = true) + apiRepository.addProvider(safeProvider) + cancelAddProvider() + } + + fun deleteProvider(providerKey: String) = viewModelScope.launch { + Log.i(TAG, "Deleting provider: $providerKey") + apiRepository.deleteProvider(providerKey) + settingsRepository.deleteApiKey(providerKey) + } + + fun updateApiKeyForProvider(providerKey: String, newKey: String) { + _apiKeyManagementState.update { currentState -> + val updatedStates = currentState.providerStates.map { + if (it.provider.key == providerKey) it.copy(apiKey = newKey, validationMessage = "") else it + } + currentState.copy(providerStates = updatedStates) + } + } + + fun deleteApiKeyForProvider(providerKey: String) = viewModelScope.launch { + Log.i(TAG, "Deleting API key for: $providerKey") + settingsRepository.deleteApiKey(providerKey) + + // MANUAL LOGIC: Key deleted -> Remove pre-configured models + apiRepository.removeDefaultModels(providerKey) + + // Refresh fallback selections + apiRepository.initialInit() + } + + fun saveApiKeyForProvider(providerKey: String) { + val providerState = _apiKeyManagementState.value.providerStates.find { it.provider.key == providerKey } ?: return + val keyToSave = providerState.apiKey.filter { !it.isWhitespace() } + val provider = providerState.provider + + viewModelScope.launch(Dispatchers.IO) { + val (isValid, message) = apiManager.validateApiKey(keyToSave, provider) + withContext(Dispatchers.Main) { + if (isValid) { + settingsRepository.saveApiKey(provider, keyToSave) + + // MANUAL LOGIC: Key activated -> Add pre-configured models + Log.i(TAG, "Key valid. Adding default models for $providerKey") + apiRepository.addDefaultModels(providerKey) + + toggleEditModeForProvider(providerKey, false) + apiRepository.initialInit() // Re-check fallbacks + } else { + val errorMessage = "Invalid key. $message" + _apiKeyManagementState.update { currentState -> + val updatedStates = currentState.providerStates.map { + if (it.provider.key == providerKey) it.copy(validationMessage = errorMessage) else it + } + currentState.copy(providerStates = updatedStates) + } + } + } + } + } + + fun toggleEditModeForProvider(providerKey: String, isEditing: Boolean? = null) { + _apiKeyManagementState.update { currentState -> + val updatedStates = currentState.providerStates.map { + if (it.provider.key == providerKey) { + it.copy(isEditing = isEditing ?: !it.isEditing, validationMessage = "") + } else { + it + } + } + currentState.copy(providerStates = updatedStates) + } + } + + /* --- Provider Editing (Name/Url) --- */ + + fun startEditingProvider(providerKey: String) = _apiKeyManagementState.update { + it.copy(providerKeyForEditing = providerKey, modelIdForEditing = null) + } + + fun applyEditProvider(updated: ApiProvider) = viewModelScope.launch { + apiRepository.updateProvider(updated) + cancelEditing() + } + + /* --- Model Management --- */ + + fun startAddingModelForProvider(providerKey: String) = _apiKeyManagementState.update { + it.copy(providerKeyForAddingModel = providerKey, scannedModels = emptyList(), addModelError = null) + } + + fun cancelAddModel() = _apiKeyManagementState.update { + it.copy(providerKeyForAddingModel = null, isAddingModel = false, addModelError = null, isScanningModels = false, scannedModels = emptyList()) + } + + fun startEditingModel(providerKey: String, modelId: String) = _apiKeyManagementState.update { + it.copy(providerKeyForEditing = providerKey, modelIdForEditing = modelId, addModelError = null) + } + + fun cancelEditing() = _apiKeyManagementState.update { + it.copy(providerKeyForEditing = null, modelIdForEditing = null) + } + + fun applyEditModel(providerKey: String, updatedModel: LanguageModel) = viewModelScope.launch { + val state = _apiKeyManagementState.value + val provider = state.providerStates.find { it.provider.key == providerKey }?.provider ?: return@launch + val originalId = state.modelIdForEditing ?: return@launch + + val duplicateExists = provider.models.any { it.modelId == updatedModel.modelId && it.modelId != originalId } + if (duplicateExists) { + _apiKeyManagementState.update { it.copy(addModelError = "A model with this ID already exists.") } + return@launch + } + + val newModels = provider.models.map { m -> + if (m.modelId == originalId && m.isCustom) updatedModel.copy(isCustom = true) else m + } + val updatedProvider = provider.copy(models = newModels) + apiRepository.updateProvider(updatedProvider) + cancelEditing() + } + + fun scanModelsForProvider(providerKey: String) = viewModelScope.launch { + val state = _apiKeyManagementState.value + val providerState = state.providerStates.find { it.provider.key == providerKey } ?: return@launch + + _apiKeyManagementState.update { it.copy(isScanningModels = true, addModelError = null, scannedModels = emptyList()) } + + val apiKey = settingsRepository.getAllApiKeys().first()[providerKey] ?: providerState.apiKey + val (models, error) = apiManager.fetchAvailableModels(apiKey, providerState.provider) + + _apiKeyManagementState.update { + it.copy( + isScanningModels = false, + addModelError = error, + scannedModels = models + ) + } + } + + fun addModelToProvider(providerKey: String, model: LanguageModel) = viewModelScope.launch { + _apiKeyManagementState.update { it.copy(isAddingModel = true, addModelError = null) } + val providerState = _apiKeyManagementState.value.providerStates.find { it.provider.key == providerKey } + + if (providerState == null) { + _apiKeyManagementState.update { it.copy(isAddingModel = false, addModelError = "Provider not found.") } + return@launch + } + + val apiKeyForValidation = settingsRepository.getAllApiKeys().first()[providerKey] + ?: providerState.apiKey.takeIf { it.isNotBlank() } + val base = providerState.provider.baseUrl.trim().lowercase() + val isLocalHost = (base.contains("localhost") || base.contains("127.0.0.1") || base.startsWith("10.")) + + var canAddDirectly = isLocalHost || apiKeyForValidation == null + var validationMessage: String? = null + + if (!canAddDirectly) { + val (isValid, message) = apiManager.validateModel(apiKeyForValidation!!, providerState.provider, model) + validationMessage = message + canAddDirectly = isValid + } + + if (canAddDirectly) { + val provider = providerState.provider + // Mark manually added models as custom + val filteredModels = provider.models.filterNot { it.modelId == model.modelId }.toMutableList() + filteredModels.add(model.copy(isCustom = true)) + + val updatedProvider = provider.copy(models = filteredModels) + apiRepository.updateProvider(updatedProvider) + cancelAddModel() + } else { + _apiKeyManagementState.update { + it.copy(isAddingModel = false, addModelError = "Model validation failed: ${validationMessage ?: "Unknown error"}") + } + } + } + + fun deleteModelFromProvider(providerKey: String, modelId: String) = viewModelScope.launch { + val provider = _apiKeyManagementState.value.providerStates.find { it.provider.key == providerKey }?.provider + if (provider != null) { + val updatedModels = provider.models.filterNot { it.modelId == modelId && it.isCustom } + if (updatedModels.size < provider.models.size) { + val updatedProvider = provider.copy(models = updatedModels) + apiRepository.updateProvider(updatedProvider) + } else { + Log.w(TAG, "Attempted to delete a non-custom model or model not found.") + } + } + } + fun showWipeAllConfirm() = _apiKeyManagementState.update { it.copy(showWipeAllConfirm = true) } + fun hideWipeAllConfirm() = _apiKeyManagementState.update { it.copy(showWipeAllConfirm = false) } + + fun confirmWipeAll() = viewModelScope.launch { + try { + apiRepository.wipeAll() + } finally { + _apiKeyManagementState.update { it.copy(showWipeAllConfirm = false) } + } + } + + fun checkProviderAvailability(baseUrl: String, callback: (Boolean, String) -> Unit) { + viewModelScope.launch(Dispatchers.IO) { + val (ok, message) = apiManager.checkProviderAvailability(baseUrl) + withContext(Dispatchers.Main) { callback(ok, message) } + } + } + + fun setTranslationModel(model: LanguageModel?) = viewModelScope.launch { model?.let { apiRepository.setTranslationModel(it) } } + fun setExerciseModel(model: LanguageModel?) = viewModelScope.launch { model?.let { apiRepository.setExerciseModel(it) } } + fun setVocabularyModel(model: LanguageModel?) = viewModelScope.launch { model?.let { apiRepository.setVocabularyModel(it) } } + fun setDictionaryModel(model: LanguageModel?) = viewModelScope.launch { model?.let { apiRepository.setDictionaryModel(it) } } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/CategoryViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/CategoryViewModel.kt new file mode 100644 index 0000000..f1dc2c0 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/CategoryViewModel.kt @@ -0,0 +1,150 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import eu.gaudian.translator.model.VocabularyCategory +//import eu.gaudian.translator.model.VocabularyDictionary +import eu.gaudian.translator.model.repository.VocabularyRepository +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext + +/** + * TODO: Convert CategoryViewModel to HiltViewModel + * + * This ViewModel needs to be converted to use Hilt for dependency injection. + * Currently it manually instantiates dependencies and uses a singleton pattern. + * + * Checklist: + * - [ ] Add @HiltViewModel annotation to the class + * - [ ] Change constructor to use @Inject and inject dependencies: + * - VocabularyRepository + * - [ ] Create/update RepositoryModule.kt to provide singleton instances of: + * - VocabularyRepository + * - [ ] Modify companion object getInstance() method to use Hilt's EntryPoint system + * - [ ] Create CategoryViewModelEntryPoint interface for accessing the singleton instance + * - [ ] Remove manual dependency instantiation from constructor and init block + * - [ ] Update all places where CategoryViewModel.getInstance() is called to ensure compatibility + * - [ ] Test that the ViewModel works correctly with dependency injection + */ +class CategoryViewModel(application: Application) : AndroidViewModel(application) { + + companion object { + @Volatile private var INSTANCE: CategoryViewModel? = null + fun getInstance(application: Application): CategoryViewModel = INSTANCE ?: synchronized(this) { + INSTANCE ?: CategoryViewModel(application).also { INSTANCE = it } + } + } + + private val repository: VocabularyRepository = VocabularyRepository.getInstance(application) + + val categories: StateFlow> = repository.getAllCategoriesFlow() + .stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5000), + initialValue = emptyList() + ) + private val _showDeleteCategoryDialog = MutableStateFlow(false) + val showDeleteCategoryDialog: StateFlow = _showDeleteCategoryDialog.asStateFlow() + + private val _showDeleteItemsDialog = MutableStateFlow(false) + val showDeleteItemsDialog: StateFlow = _showDeleteItemsDialog.asStateFlow() + + private val _showEditCategoryDialog = MutableStateFlow(false) + val showEditCategoryDialog: StateFlow = _showEditCategoryDialog.asStateFlow() + + private val _navigateBack = MutableStateFlow(false) + + private val _updateUI = MutableStateFlow(false) + + var categoryToDelete: Int = 0 + var categoryVocabularyItemDelete: Int = 0 + var categoryToEdit: Int = 0 + + init { + viewModelScope.launch { + repository.initializeRepository() + } + } + + fun setNavigateBack(navigate: Boolean) { + _navigateBack.value = navigate + } + + fun setUpdateUI(update: Boolean) { + _updateUI.value = update + Log.d("CategoryViewModel", "Update UI: $update") + } + + fun getCategoryById(id: Int): Flow { + return categories.map { categoryList -> + categoryList.firstOrNull { it.id == id } + } + } + + fun createCategory(category: VocabularyCategory) { + viewModelScope.launch { + repository.saveCategory(category) + } + } + + fun updateCategory(category: VocabularyCategory) { + viewModelScope.launch { + repository.saveCategory(category) + setUpdateUI(true) + } + } + + fun deleteCategoryById(id: Int) { + viewModelScope.launch { + try { + repository.deleteCategoryById(id) + setNavigateBack(true) + } catch (_: Exception) { + + } + } + } + + suspend fun calculateNewDictionaries(): Set> { + val allPairs = getAllPossibleDictionariesInt() + val existingPairs = categories.value.mapNotNull { category -> + (category as? eu.gaudian.translator.model.VocabularyFilter)?.languagePairs + }.distinct() + return allPairs.filterNot { existingPairs.contains(it) }.toSet() + } + + suspend fun getAllPossibleDictionariesInt(): Set> { + val context = viewModelScope.coroutineContext + return withContext(context) { + repository.calcAvailableDictionaries() + } + } + + fun setShowDeleteCategoryDialog(show: Boolean, categoryId: Int) { + _showDeleteCategoryDialog.value = show + categoryToDelete = categoryId + } + + fun setShowDeleteItemsDialog(show: Boolean, categoryId: Int) { + Log.d("CategoryViewModel", "setShowDeleteItemsDialog: $show, categoryId: $categoryId") + _showDeleteItemsDialog.value = show + categoryVocabularyItemDelete = categoryId + } + + fun setShowEditCategoryDialog(show: Boolean, categoryId: Int) { + _showEditCategoryDialog.value = show + categoryToEdit = categoryId + } + +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/CorrectionViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/CorrectionViewModel.kt new file mode 100644 index 0000000..b7c5a33 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/CorrectionViewModel.kt @@ -0,0 +1,153 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.viewmodel + +import android.app.Application +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.TextFieldValue +import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.text.withStyle +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.utils.CorrectionService +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch + + +/** + * TODO: Convert CorrectionViewModel to HiltViewModel + * + * This ViewModel needs to be converted to use Hilt for dependency injection. + * Currently it manually instantiates dependencies in the constructor. + * + * Checklist: + * - [ ] Add @HiltViewModel annotation to the class + * - [ ] Change constructor to use @Inject and inject dependencies: + * - CorrectionService + * - [ ] Create/update RepositoryModule.kt to provide singleton instances of: + * - CorrectionService + * - [ ] Remove manual dependency instantiation from constructor + * - [ ] Update all places where CorrectionViewModel() is instantiated to use Hilt injection + * - [ ] Test that the ViewModel works correctly with dependency injection + */ +class CorrectionViewModel(application: Application) : AndroidViewModel(application) { + + enum class Tone { NONE, FORMAL, CASUAL, COLLOQUIAL, POLITE, PROFESSIONAL, FRIENDLY, ACADEMIC, CREATIVE } + + val correctionService = CorrectionService(application.applicationContext) + + private val _textFieldValue = MutableStateFlow(TextFieldValue("")) + val textFieldValue = _textFieldValue.asStateFlow() + + private val _explanation = MutableStateFlow(null) + val explanation = _explanation.asStateFlow() + + private val _correctedText = MutableStateFlow(null) + val correctedText = _correctedText.asStateFlow() + + private val _isLoading = MutableStateFlow(false) + val isLoading = _isLoading.asStateFlow() + + private val _error = MutableStateFlow(null) + val error = _error.asStateFlow() + + private val _grammarOnly = MutableStateFlow(true) + val grammarOnly = _grammarOnly.asStateFlow() + + private val _tone = MutableStateFlow(Tone.NONE) + val tone = _tone.asStateFlow() + + fun setCorrectToneEnabled(enabled: Boolean) { + _grammarOnly.value = !enabled + if (!enabled) { + _tone.value = Tone.NONE + } + } + + fun setTone(newTone: Tone) { + _tone.value = newTone + if (newTone != Tone.NONE) _grammarOnly.value = false + } + + fun onInputTextChanged(newValue: TextFieldValue) { + _textFieldValue.value = newValue + if (_error.value != null) _error.value = null + } + + fun performCorrection(language: Language, color : Color) { + val originalText = _textFieldValue.value.text + if (originalText.isBlank()) return + + viewModelScope.launch { + _isLoading.value = true + _explanation.value = null + _error.value = null + + val grammarOnly = _grammarOnly.value + val tone = _tone.value.name.lowercase() + + correctionService.correctText(originalText, language, grammarOnly, if (_tone.value == Tone.NONE) null else tone) + .onSuccess { response -> + val annotatedString = createDiffAnnotatedString(originalText, response.correctedText, color) + _textFieldValue.value = TextFieldValue(annotatedString) + _explanation.value = response.explanation + _correctedText.value = response.correctedText + } + .onFailure { exception -> + // This block executes only if the result is a failure + _error.value = "Correction failed: ${exception.message ?: "Unknown error"}" + } + + // The loading state is updated once at the end, regardless of outcome + _isLoading.value = false + } + } + + // Clears only the text and related outputs, preserving user-selected options + fun clearText() { + _textFieldValue.value = TextFieldValue("") + _explanation.value = null + _correctedText.value = null + _error.value = null + // Do not touch _grammarOnly or _tone here + } + + private fun createDiffAnnotatedString(original: String, corrected: String, color : Color): AnnotatedString { + if (original.trim() == corrected.trim()) { + return buildAnnotatedString { + withStyle(style = SpanStyle(background = color, fontWeight = FontWeight.Bold)) { + append(corrected) + } + } + } else { + return buildAnnotatedString { + val originalWords = original.split(' ') + val correctedWordsSet = corrected.split(' ').toSet() + originalWords.forEachIndexed { index, word -> + if (word.isNotEmpty()) { + if (word in correctedWordsSet) { + append(word) + } else { + withStyle(style = SpanStyle(color = Color.Gray, textDecoration = TextDecoration.LineThrough)) { + append(word) + } + } + if (index < originalWords.lastIndex) { + append(" ") + } + } + } + append("\n\n") + withStyle(style = SpanStyle(background = color, fontWeight = FontWeight.Bold)) { + append(corrected) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/DictionaryViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/DictionaryViewModel.kt new file mode 100644 index 0000000..b57a6fe --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/DictionaryViewModel.kt @@ -0,0 +1,1016 @@ +@file:Suppress("HardCodedStringLiteral", "unused") + +package eu.gaudian.translator.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.DictionaryEntry +import eu.gaudian.translator.model.EntryPart +import eu.gaudian.translator.model.EtymologyData +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.communication.FileInfo +import eu.gaudian.translator.model.communication.RetrofitClient +import eu.gaudian.translator.model.grammar.DictionaryEntryData +import eu.gaudian.translator.model.repository.DictionaryFileRepository +import eu.gaudian.translator.model.repository.DictionaryJsonService +import eu.gaudian.translator.model.repository.DictionaryLookupRepository +import eu.gaudian.translator.model.repository.DictionaryRepository +import eu.gaudian.translator.model.repository.DictionaryWordEntry +import eu.gaudian.translator.model.repository.LanguageRepository +import eu.gaudian.translator.model.repository.SettingsRepository +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.StatusMessageService +import eu.gaudian.translator.utils.dictionary.DictionaryService +import eu.gaudian.translator.utils.dictionary.LocalAlternativeForm +import eu.gaudian.translator.utils.dictionary.LocalDictionaryAccess +import eu.gaudian.translator.utils.dictionary.LocalDictionaryWordInfo +import eu.gaudian.translator.utils.dictionary.LocalRelatedWordInfo +import eu.gaudian.translator.utils.dictionary.LocalTranslationInfo +import eu.gaudian.translator.utils.parseDefinitionsFromHtml +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonPrimitive +import java.util.concurrent.atomic.AtomicInteger +import javax.inject.Inject + +@HiltViewModel +class DictionaryViewModel @Inject constructor( + application: Application, + private val dictionaryService: DictionaryService, + private val dictionaryRepository: DictionaryRepository, + private val languageRepository: LanguageRepository, + private val settingsRepository: SettingsRepository, + private val dictionaryFileRepository: DictionaryFileRepository, + private val dictionaryLookupRepository: DictionaryLookupRepository, + private val dictionaryJsonService: DictionaryJsonService, + private val statusMessageService: StatusMessageService +) : AndroidViewModel(application) { + + private val idCounter = AtomicInteger(0) + + private val _uiState = MutableStateFlow(DictionaryUiState()) + val uiState: StateFlow = _uiState.asStateFlow() + + // Wrapper class for UI display of dictionary items with pre-calculated values + data class DictionaryUiItem( + val fileInfo: FileInfo, + val isDownloaded: Boolean, + val hasUpdate: Boolean, + val size: Long + ) + + // StateFlow exposing local dictionary entries for a given word/language + private val _localEntries = MutableStateFlow>(emptyList()) + val localEntries: StateFlow> = _localEntries.asStateFlow() + + // StateFlow exposing current entry data with language info + private val _currentEntryData = MutableStateFlow(null) + val currentEntryData: StateFlow = _currentEntryData.asStateFlow() + + // StateFlow exposing TTS availability for current entry + private val _isTtsAvailable = MutableStateFlow(false) + val isTtsAvailable: StateFlow = _isTtsAvailable.asStateFlow() + + // StateFlow exposing local dictionary availability for selected language + private val _isLocalDictAvailable = MutableStateFlow(false) + val isLocalDictAvailable: StateFlow = _isLocalDictAvailable.asStateFlow() + + // StateFlow for suggestions with debounce support + private val _suggestions = MutableStateFlow>(emptyList()) + val suggestions: StateFlow> = _suggestions.asStateFlow() + + private val _searchHistoryEntries = MutableStateFlow>(emptyList()) + val searchHistoryEntries = _searchHistoryEntries.asStateFlow() + + private val _currentEntryId = MutableStateFlow(null) + + private val _navigateToEntry = MutableStateFlow(null) + val navigateToEntry: StateFlow = _navigateToEntry.asStateFlow() + + private val _generatingEntryIds = MutableStateFlow>(emptySet()) + val generatingEntryIds: StateFlow> = _generatingEntryIds.asStateFlow() + + private val _breadcrumbs = MutableStateFlow>(emptyList()) + val breadcrumbs: StateFlow> = _breadcrumbs.asStateFlow() + + private var _pendingBreadcrumbReset = false + private var _isNavigatingFromDictionaryResult = false + + // Public StateFlow to expose navigation source + private val _isNavigatingFromDictionaryResultFlow = MutableStateFlow(false) + val isNavigatingFromDictionaryResultFlow: StateFlow = _isNavigatingFromDictionaryResultFlow.asStateFlow() + + // Developer-only: currently displayed entry when cycling through local dictionary + private val _developerCurrentEntry = MutableStateFlow(null) + val developerCurrentEntry: StateFlow = _developerCurrentEntry.asStateFlow() + + private val _wordOfTheDay = MutableStateFlow(null) + val wordOfTheDay: StateFlow = _wordOfTheDay.asStateFlow() + + + init { + loadSavedEntries() + viewModelScope.launch { + dictionaryRepository.loadDictionaryEntry().collect { entries -> _searchHistoryEntries.value = entries } + } + loadWordOfTheDay(forceRefresh = false) + } + + private suspend fun fetchWiktionaryDefinitions(word: String, language: Language): List? { + val normalized = word.trim().ifEmpty { return null } + val pageName = normalized.replace(' ', '_') + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Wikt] start fetch for word='$normalized' (page='$pageName')") + return try { + // First attempt with given page + var response = RetrofitClient.api.getPageHtml(page = pageName) + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Wikt] raw response: $response") + var parse = response.parse + if (parse == null) { + // Retry with capitalized first letter (common on Wiktionary) + val cap = pageName.replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() } + if (cap != pageName) { + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Wikt] retrying with capitalized page='$cap'") + response = RetrofitClient.api.getPageHtml(page = cap) + parse = response.parse + } + } + if (parse == null) { + @Suppress("HardCodedStringLiteral") + Log.w("DictionaryViewModel", "[Wikt] response.parse is null for word='$normalized'") + return null + } + val htmlContent = parse.text?.html + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Wikt] parse.title='${parse.title}', html length='${htmlContent?.length ?: 0}'") + if (htmlContent != null) { + val defs = parseDefinitionsFromHtml(htmlContent, language.name) + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Wikt] parsed definitions count=${defs.size}") + defs + } else { + @Suppress("HardCodedStringLiteral") + Log.w("DictionaryViewModel", "[Wikt] htmlContent (parse.text[\"*\"]) is null — can't parse definitions") + null + } + } catch (e: Exception) { + @Suppress("HardCodedStringLiteral") + Log.e("DictionaryViewModel", "[Wikt] exception: ${e::class.java.simpleName}: ${e.message}") + null + } + } + + + fun refreshWordOfTheDay() { + loadWordOfTheDay(forceRefresh = true) + } + + private fun loadWordOfTheDay(forceRefresh: Boolean) { + viewModelScope.launch { + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "loadWordOfTheDay(forceRefresh=$forceRefresh)") + _uiState.value = _uiState.value.copy(isLoading = true, error = null) + val selectedLanguage = languageRepository.loadSelectedDictionaryLanguage().first() + + if (selectedLanguage == null) { + _uiState.value = _uiState.value.copy( + isLoading = false, + error = getApplication().getString(R.string.text_please_select_a_dictionary_language_first) + ) + return@launch + } + + val wordOfTheDay = dictionaryService.getWordOfTheDay(selectedLanguage, forceRefresh)?.copy( + id = idCounter.incrementAndGet() + ) + + if (wordOfTheDay != null) { + val updatedEntries = _searchHistoryEntries.value.toMutableList() + updatedEntries.add(0, wordOfTheDay) + _searchHistoryEntries.value = updatedEntries + _wordOfTheDay.value = wordOfTheDay + + try { + dictionaryRepository.saveDictionaryEntry(wordOfTheDay) + } catch (e: Exception) { + _uiState.value = _uiState.value.copy( + error = getApplication().getString( + R.string.text_error_saving_entry, + e.localizedMessage + ) + ) + } + } else { + _uiState.value = _uiState.value.copy(error = getApplication().getString( + R.string.text_could_not_fetch_a_new_word + )) + } + _uiState.value = _uiState.value.copy(isLoading = false) + } + } + + + private fun loadSavedEntries() { + viewModelScope.launch { + try { + val entries = dictionaryRepository.loadDictionaryEntry().first() + _searchHistoryEntries.value = entries + val maxId = entries.maxOfOrNull { it.id } ?: 0 + idCounter.set(maxId) + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "Loaded ${entries.size} saved entries; maxId=$maxId") + } catch (e: Exception) { + @Suppress("HardCodedStringLiteral") + Log.e("DictionaryViewModel", "Failed to load stored values: ${e.message}") + _uiState.value = _uiState.value.copy( + error = getApplication().getString( + R.string.text_error_loading_stored_values, + e.localizedMessage + ) + ) + } + } + } + + fun performSearch(query: String, language: Language, regenerate: Boolean = false, useDownloaded: Boolean = false, isDrillDown: Boolean = false) { + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "performSearch(query='$query', lang='${language.englishName}', regen=$regenerate, useDownloaded=$useDownloaded, isDrillDown=$isDrillDown)") + + if (!isDrillDown && !regenerate) { + _pendingBreadcrumbReset = true + } + + // 1. Check for existing entry in history + val existingEntry = _searchHistoryEntries.value.find { + it.word.equals(query, ignoreCase = true) && it.languageCode == language.nameResId + } + + // 2. Prepare the entry to navigate to + val entryToUse = if (existingEntry != null && !regenerate) { + // Use existing entry + existingEntry + } else { + // Create a new entry (or update existing if regenerating) + val id = if (regenerate && existingEntry != null) existingEntry.id else idCounter.incrementAndGet() + DictionaryEntry( + id = id, + word = query, + definition = emptyList(), // Start empty, will be populated by AI/Wiktionary + languageCode = language.nameResId, + languageName = language.name + ) + } + + // 3. Save/Update initial state in repository + viewModelScope.launch { + if (regenerate && existingEntry != null) { + // If regenerating, we might want to clear old definitions first? + // For now, we keep them until new ones arrive, or we could clear them. + // Let's keep the object as is for now, but we will trigger the loading state. + // Actually, if we want to show "Generating...", we should probably signal that. + // But we don't want to wipe the screen blank if we have old data. + // The UI will show a loading indicator overlay or similar. + } else if (existingEntry == null) { + dictionaryRepository.saveDictionaryEntry(entryToUse) + } + } + + // 4. Navigate immediately + _navigateToEntry.value = entryToUse + + // 5. If we are in "Offline Mode" (useDownloaded = true), we stop here. + // The ResultScreen will show local entries. + if (useDownloaded) { + return + } + + // 6. If Online, trigger AI/Wiktionary fetch in background + val entryId = entryToUse.id + _generatingEntryIds.value += entryId + + viewModelScope.launch { + try { + // A. Try Wiktionary first if enabled + val tryWiktionary = settingsRepository.tryWiktionaryFirst.flow.first() + if (tryWiktionary) { + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "Attempting Wiktionary for '$query'") + val wiktionaryDefs = withContext(Dispatchers.IO) { fetchWiktionaryDefinitions(query, language) } + + if (!wiktionaryDefs.isNullOrEmpty()) { + @Suppress("HardCodedStringLiteral") + val parts = listOf( + EntryPart( + title = "Wiktionary", + content = JsonArray(wiktionaryDefs.map { JsonPrimitive(it) }) + ) + ) + updateEntryDefinitions(entryId, parts) + _generatingEntryIds.value -= entryId + return@launch + } + } + + // B. Fallback to AI Service + dictionaryService.searchDefinition(query, language) + .onSuccess { entryFromServer -> + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "AI service returned entry for '$query'") + updateEntryDefinitions(entryId, entryFromServer.definition) + } + .onFailure { exception -> + @Suppress("HardCodedStringLiteral") + Log.e("DictionaryViewModel", "AI service failed for '$query': ${exception.message}") + // Optionally update entry with error part or just show toast + // For now, we just stop loading. + } + + } catch (e: Exception) { + Log.e("DictionaryViewModel", "Error during search: ${e.message}") + } finally { + _generatingEntryIds.value -= entryId + } + } + } + + private suspend fun updateEntryDefinitions(entryId: Int, newDefinitions: List) { + val currentList = _searchHistoryEntries.value + val entryIndex = currentList.indexOfFirst { it.id == entryId } + if (entryIndex != -1) { + val updatedEntry = currentList[entryIndex].copy(definition = newDefinitions) + dictionaryRepository.updateDictionaryEntry(updatedEntry) + } + } + + fun onNavigationDone() { + _navigateToEntry.value = null + } + + fun getDictionaryEntryById(id: Int): DictionaryEntry? { + // Use the already loaded searchHistory - don't call loadSavedEntries() here + // as it would create a race condition + return _searchHistoryEntries.value.find { it.id == id } + } + + + + fun clearCurrentEntryId() { + _currentEntryId.value = null + } + + /** + * Clears all breadcrumbs when leaving DictionaryResultScreen + */ + fun clearBreadcrumbs() { + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] CLEARING ALL BREADCRUMBS - user is leaving DictionaryResultScreen") + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] Current breadcrumbs before clearing: ${_breadcrumbs.value.map { it.word }}") + _breadcrumbs.value = emptyList() + _pendingBreadcrumbReset = false + _isNavigatingFromDictionaryResult = false + // Also reset the StateFlow for consistency + _isNavigatingFromDictionaryResultFlow.value = false + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] Breadcrumbs cleared successfully") + } + + /** + * Called when leaving DictionaryResultScreen. + * Only clears breadcrumbs if this is truly leaving (not internal navigation). + */ + fun onLeavingDictionaryResultScreen() { + // If we're not navigating internally, clear everything + if (!_isNavigatingFromDictionaryResult) { + clearBreadcrumbs() + } + // Reset the internal navigation flag + _isNavigatingFromDictionaryResult = false + } + + /** + * Sets the flag indicating navigation is coming from DictionaryResultScreen + */ + fun setNavigatingFromDictionaryResult(isFromDictionaryResult: Boolean) { + _isNavigatingFromDictionaryResult = isFromDictionaryResult + } + + /** + * Sets the flag to true when internal navigation happens within DictionaryResultScreen + */ + fun setInternalNavigation() { + _isNavigatingFromDictionaryResult = true + } + + /** + * Enhanced breadcrumb update logic that respects navigation source + */ + fun updateBreadcrumbs(entry: DictionaryEntry) { + val current = _breadcrumbs.value + + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] updateBreadcrumbsEnhanced called for entry: '${entry.word}' (id: ${entry.id})") + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] Current breadcrumbs: ${current.map { it.word }}") + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] Pending reset: $_pendingBreadcrumbReset, Is from DictionaryResult: $_isNavigatingFromDictionaryResult") + + // If pending reset is true, start fresh regardless of navigation source + if (_pendingBreadcrumbReset) { + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] ACTION: Resetting breadcrumbs due to pending reset flag") + _breadcrumbs.value = listOf(entry) + _pendingBreadcrumbReset = false + _isNavigatingFromDictionaryResult = true // Set flag for future internal navigations + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] New breadcrumbs: ${_breadcrumbs.value.map { it.word }}") + return + } + + // If we're not navigating from DictionaryResultScreen, clear breadcrumbs and start fresh + if (!_isNavigatingFromDictionaryResult) { + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] ACTION: Clearing breadcrumbs - external navigation detected") + _breadcrumbs.value = listOf(entry) + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] New breadcrumbs: ${_breadcrumbs.value.map { it.word }}") + // Don't set the flag to true here - let it be set when internal navigation happens + return + } + + // Normal breadcrumb logic: append or truncate + val index = current.indexOfFirst { it.id == entry.id } + if (index != -1) { + // Truncate after this entry + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] ACTION: Truncating breadcrumbs at index $index") + _breadcrumbs.value = current.take(index + 1) + } else { + // Append + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] ACTION: Appending entry to breadcrumbs") + _breadcrumbs.value = current + entry + } + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "[Breadcrumb] Final breadcrumbs: ${_breadcrumbs.value.map { it.word }}") + } + + data class DictionaryUiState( + val isLoading: Boolean = false, + val error: String? = null, + ) + + private val _etymologyData = MutableStateFlow(null) + val etymologyData: StateFlow = _etymologyData.asStateFlow() + + private val _manifest = MutableStateFlow(null) + val manifest: StateFlow = _manifest.asStateFlow() + + private val _downloadedDictionaries = MutableStateFlow>(emptyList()) + val downloadedDictionaries = _downloadedDictionaries.asStateFlow() + + private val _orphanedFiles = MutableStateFlow>(emptyList()) + val orphanedFiles = _orphanedFiles.asStateFlow() + + private val _downloadProgress = MutableStateFlow(null) + val downloadProgress = _downloadProgress.asStateFlow() + + private val _isDownloading = MutableStateFlow(false) + val isDownloading = _isDownloading.asStateFlow() + + + private val _errorMessage = MutableStateFlow(null) + val errorMessage = _errorMessage.asStateFlow() + + init { + viewModelScope.launch { + dictionaryFileRepository.manifest.collect { _manifest.value = it } + } + viewModelScope.launch { + dictionaryFileRepository.downloadedDictionaries.collect { _downloadedDictionaries.value = it } + } + viewModelScope.launch { + dictionaryFileRepository.orphanedFiles.collect { _orphanedFiles.value = it } + } + } + + fun fetchEtymology(query: String, language: Language) { + viewModelScope.launch { + _uiState.value = _uiState.value.copy(isLoading = true, error = null) + dictionaryService.getEtymology(query, language) + .onSuccess { + _etymologyData.value = it + _uiState.value = _uiState.value.copy(isLoading = false) + } + .onFailure { exception -> + _uiState.value = _uiState.value.copy( + isLoading = false, + error = exception.message ?: getApplication().getString(R.string.text_failed_to_fetch_etymology) + ) + } + } + } + + /** + * Fetches the manifest from the server. + */ + fun fetchManifest() { + viewModelScope.launch { + _uiState.value = _uiState.value.copy(isLoading = true, error = null) + try { + dictionaryFileRepository.fetchManifest() + _uiState.value = _uiState.value.copy(isLoading = false) + } catch (e: Exception) { + _uiState.value = _uiState.value.copy(isLoading = false) + showErrorMessage( + getApplication().getString( + R.string.text_failed_to_fetch_manifest, + e.message + )) + } + } + } + + /** + * Downloads a dictionary file. + */ + fun downloadDictionary(fileInfo: FileInfo) { + viewModelScope.launch { + _isDownloading.value = true + try { + val success = dictionaryFileRepository.downloadDictionary(fileInfo) { progress -> + _downloadProgress.value = progress + } + if (success) { + _uiState.value = _uiState.value.copy(isLoading = false, error = null) + showSuccessToast(getApplication().getString(R.string.text_dictionary_downloaded_successfully)) + } else { + showErrorMessage( + getApplication().getString( + R.string.text_failed_to_download_dictionary, + fileInfo.name + )) + } + } catch (e: Exception) { + showErrorMessage( + getApplication().getString( + R.string.text_error_downloading_dictionary, + e.message + )) + } finally { + _downloadProgress.value = null + _isDownloading.value = false + } + } + } + + /** + * Deletes a downloaded dictionary. + */ + fun deleteDictionary(fileInfo: FileInfo) { + viewModelScope.launch { + try { + val success = dictionaryFileRepository.deleteDictionary(fileInfo) + if (success) { + showSuccessToast(getApplication().getString(R.string.text_dictionary_deleted_successfully)) + } else { + showErrorMessage( + getApplication().getString( + R.string.text_failed_to_delete_dictionary, + fileInfo.name + )) + } + } catch (e: Exception) { + showErrorMessage( + getApplication().getString( + R.string.text_error_deleting_dictionary, + e.message + )) + } + } + } + + /** + * Checks if a newer version is available. + */ + fun isNewerVersionAvailable(fileInfo: FileInfo): Boolean { + return dictionaryFileRepository.isNewerVersionAvailable(fileInfo) + } + + /** + * Gets the local version of a dictionary. + */ + fun getLocalVersion(fileId: String): String { + return dictionaryFileRepository.getLocalVersion(fileId) + } + + /** + * Gets the size of a downloaded dictionary. + */ + fun getDictionarySize(fileInfo: FileInfo): Long { + return dictionaryFileRepository.getDictionarySize(fileInfo) + } + + /** + * Deletes all downloaded dictionaries. + */ + fun deleteAllDictionaries() { + viewModelScope.launch { + try { + val success = dictionaryFileRepository.deleteAllDictionaries() + if (success) { + showSuccessToast(getApplication().getString(R.string.text_all_dictionaries_deleted_successfully)) + } else { + showErrorMessage(getApplication().getString(R.string.text_failed_to_delete_some_dictionaries)) + } + } catch (e: Exception) { + showErrorMessage( + getApplication().getString( + R.string.text_error_deleting_dictionaries, + e.message + )) + } + } + } + + /** + * Deletes an orphaned file. + */ + fun deleteOrphanedFile(fileInfo: FileInfo) { + viewModelScope.launch { + try { + val success = dictionaryFileRepository.deleteOrphanedFile(fileInfo) + if (success) { + showSuccessToast(getApplication().getString(R.string.text_orphaned_file_deleted_successfully)) + } else { + showErrorMessage( + getApplication().getString( + R.string.text_failed_to_delete_orphaned_file, + fileInfo.name + )) + } + } catch (e: Exception) { + showErrorMessage( + getApplication().getString( + R.string.text_error_deleting_orphaned_file, + e.message + )) + } + } + } + + /** + * Searches for local dictionary entries for a word in a specific language. + */ + fun getLocalDictionaryEntries(word: String, langCode: String): List { + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "Fetching local dictionary entries for word '$word' in language '$langCode'") + val result = dictionaryLookupRepository.searchWord(word.trim(), langCode) + @Suppress("HardCodedStringLiteral") + Log.d("DictionaryViewModel", "Retrieved ${result.size} local dictionary entries") + Log.d("DictionaryViewModel", "Result: $result") + return result + } + + /** + * Convenience wrapper: parses the first local dictionary entry for a word into + * a display-agnostic [LocalDictionaryWordInfo]. Returns null if no entry exists + * or JSON cannot be parsed. + */ + fun getLocalDictionaryWordInfo(word: String, langCode: String): LocalDictionaryWordInfo? { + val entries = getLocalDictionaryEntries(word, langCode) + val first = entries.firstOrNull() ?: return null + return LocalDictionaryAccess.parseWordInfo(first) + } + + /** + * Retrieves all translations for a word in the given language from the local + * dictionary. Returns an empty list if no local entry is available. + */ + fun getLocalTranslations(word: String, langCode: String): List { + return getLocalDictionaryWordInfo(word, langCode)?.translations.orEmpty() + } + + /** + * Retrieves all related words (synonyms, hyponyms, etc.) across all + * relation types for a given word and language. + */ + fun getLocalRelatedWords(word: String, langCode: String): List { + return getLocalDictionaryWordInfo(word, langCode)?.relatedWords.orEmpty() + } + + /** + * Retrieves only synonyms for a word from the local dictionary. + */ + fun getLocalSynonyms(word: String, langCode: String): List { + return getLocalDictionaryWordInfo(word, langCode)?.synonyms.orEmpty() + } + + /** + * Retrieves only hyponyms for a word from the local dictionary. + */ + fun getLocalHyponyms(word: String, langCode: String): List { + return getLocalDictionaryWordInfo(word, langCode)?.hyponyms.orEmpty() + } + + /** + * Retrieves alternative forms (e.g. alternative spellings) for a word from + * the local dictionary. + */ + fun getLocalAlternativeForms(word: String, langCode: String): List { + return getLocalDictionaryWordInfo(word, langCode)?.alternativeForms.orEmpty() + } + + /** + * Retrieves word suggestions based on prefix for a specific language. + */ + fun getSuggestions(prefix: String, langCode: String, limit: Int): List { + return dictionaryLookupRepository.getSuggestions(prefix, langCode, limit) + } + + /** + * Checks if a dictionary is downloaded for the language. + */ + fun hasDictionaryForLanguage(langCode: String): Boolean { + Log.d("DictionaryViewModel", "Checking if dictionary exists for language: $langCode") + return dictionaryLookupRepository.hasDictionaryForLanguage(langCode) + } + + /** + * Checks if a specific word exists in the dictionary for the given language code. + * This performs an actual lookup to verify the word is available, not just that + * the dictionary file exists. + */ + fun hasWordInDictionary(word: String, langCode: String): Boolean { + Log.d("DictionaryViewModel", "Checking word availability: word='$word', lang='$langCode'") + val result = dictionaryLookupRepository.hasWordInDictionary(word, langCode) + Log.d("DictionaryViewModel", "Word availability result: word='$word', lang='$langCode', available=$result") + return result + } + + /** + * Developer-only helper: cycles through local dictionary entries for the given language + * and navigates to each one in sequence. Intended for testing dictionary rendering. + */ + @Suppress("HardCodedStringLiteral") + fun developerCycleLocalDictionaryEntries(language: Language, maxEntriesToDisplay: Int = 200000, delayMs: Long = 2L) { + viewModelScope.launch { + val langCode = language.code.lowercase() + Log.d("DictionaryViewModel", "[DEV] Starting cycle for local dictionary entries in '$langCode'") + + // Fetch a broad list of words from the dictionary (developer-focused; may be large) + val allWords: List = withContext(Dispatchers.IO) { + dictionaryLookupRepository.getAllWords(langCode, limit = maxEntriesToDisplay * 5) + } + + var shownCount = 0 + for (word in allWords) { + if (shownCount >= maxEntriesToDisplay) break + + // Look up local entries for the word + val localEntries: List = withContext(Dispatchers.IO) { + getLocalDictionaryEntries(word, langCode) + } + + if (localEntries.isNotEmpty()) { + val parts = localEntries.map { entry: DictionaryWordEntry -> + EntryPart( + title = getApplication().getString(R.string.label_definitions), + content = JsonPrimitive(entry.json) + ) + } + + val entry = DictionaryEntry( + id = idCounter.incrementAndGet(), + word = word, + definition = parts, + languageCode = language.nameResId, + languageName = language.name + ) + + // Directly expose the current entry for the developer UI to render + _developerCurrentEntry.value = entry + shownCount++ + delay(delayMs) + } + } + + Log.d("DictionaryViewModel", "[DEV] Finished cycling dictionary entries. Shown=$shownCount") + } + } + + /** + * Shows an error toast message. + */ + private fun showErrorMessage(message: String) { + _errorMessage.value = message + viewModelScope.launch { + StatusMessageService.trigger( + eu.gaudian.translator.utils.StatusAction.ShowMessage( + message, + MessageDisplayType.ERROR, + 5 + ) + ) + } + } + + /** + * Shows a success toast message. + */ + private fun showSuccessToast(message: String) { + viewModelScope.launch { + StatusMessageService.trigger( + eu.gaudian.translator.utils.StatusAction.ShowMessage( + message, + MessageDisplayType.SUCCESS, + 3 + ) + ) + } + } + + /** + * Gets structured dictionary data for a word entry using the new JSON service. + * This provides clean access to parsed JSON data without UI coupling. + */ + suspend fun getStructuredDictionaryData(entry: DictionaryWordEntry) = dictionaryJsonService.parseEntry(entry) + + /** + * Gets phonetics data for a word entry. + */ + suspend fun getPhoneticsData(entry: DictionaryWordEntry) = dictionaryJsonService.getPhonetics(entry) + + /** + * Gets translations data for a word entry. + */ + suspend fun getTranslationsData(entry: DictionaryWordEntry) = dictionaryJsonService.getTranslations(entry) + + /** + * Gets etymology data for a word entry. + */ + suspend fun getEtymologyData(entry: DictionaryWordEntry) = dictionaryJsonService.getEtymology(entry) + + /** + * Gets relations data (synonyms, hyponyms, etc.) for a word entry. + */ + suspend fun getRelationsData(entry: DictionaryWordEntry) = dictionaryJsonService.getAllRelatedWords(entry) + + /** + * Gets senses/definitions data for a word entry. + */ + suspend fun getSensesData(entry: DictionaryWordEntry) = dictionaryJsonService.getSenses(entry) + + /** + * Gets inflection data for a word entry. + */ + suspend fun getInflectionsData(entry: DictionaryWordEntry) = dictionaryJsonService.getInflections(entry) + + /** + * Clears the JSON service cache. Useful for testing. + */ + fun clearJsonServiceCache() = dictionaryJsonService.clearCache() + + // --- EntryData and State Management --- + + /** + * Data class representing entry data with language information. + * Used to pass entry and language info from ViewModel to UI. + */ + data class EntryData( + val entry: DictionaryEntry, + val language: Language? + ) + + /** + * Updates the current entry data with language info and TTS availability. + * Called from UI layer when entry changes. + */ + fun updateCurrentEntryData(entry: DictionaryEntry, language: Language?, isTtsAvailable: Boolean) { + _currentEntryData.value = EntryData(entry, language) + _isTtsAvailable.value = isTtsAvailable + } + + /** + * Loads local dictionary entries for a word and updates the StateFlow. + * Should be called when an entry is displayed to fetch local data. + */ + fun loadLocalEntriesForEntry(entry: DictionaryEntry, languageCode: String) { + viewModelScope.launch { + val entries = getLocalDictionaryEntries(entry.word, languageCode.lowercase()) + _localEntries.value = entries + } + } + + /** + * Clears the local entries StateFlow. + */ + fun clearLocalEntries() { + _localEntries.value = emptyList() + } + + /** + * Updates the local dictionary availability for the given language. + */ + fun updateLocalDictAvailability(langCode: String) { + Log.d("DictionaryViewModel", "Local dictionary availability updated: $langCode") + _isLocalDictAvailable.value = hasDictionaryForLanguage(langCode.lowercase()) + } + + /** + * Fetches suggestions with debounce support and updates the StateFlow. + */ + fun fetchSuggestions(query: String, langCode: String, limit: Int = 5, debounceMs: Long = 100) { + viewModelScope.launch { + delay(debounceMs) + if (query.length >= 3) { + _suggestions.value = getSuggestions(query, langCode.lowercase(), limit) + } else { + _suggestions.value = emptyList() + } + } + } + + /** + * Clears suggestions. + */ + fun clearSuggestions() { + _suggestions.value = emptyList() + } + + /** + * Creates a list of DictionaryUiItem for the manifest files with pre-calculated values. + */ + fun getDictionaryUiItems(files: List, downloadedDictionaries: List): List { + return files.map { fileInfo -> + val isDownloaded = downloadedDictionaries.any { it.id == fileInfo.id } + val hasUpdate = isDownloaded && isNewerVersionAvailable(fileInfo) + val size = if (isDownloaded) getDictionarySize(fileInfo) else fileInfo.assets.sumOf { it.sizeBytes } + DictionaryUiItem(fileInfo, isDownloaded, hasUpdate, size) + } + } + + // --- Structured Data State Management --- + + /** + * Internal cache for structured data results - uses mutableMapOf with explicit type + */ + private val structuredDataCache = mutableMapOf>() + + /** + * Gets or creates a StateFlow for structured dictionary data. + * This allows the UI to observe data changes for specific entries. + * Loading state is indicated by null value in the flow. + */ + fun getStructuredDictionaryDataState(entry: DictionaryWordEntry): StateFlow { + val key = entry.word + "_" + entry.langCode + val existing = structuredDataCache[key] + if (existing != null) return existing + + val newFlow: MutableStateFlow = MutableStateFlow(null) + structuredDataCache[key] = newFlow + + viewModelScope.launch { + val result = dictionaryJsonService.parseEntry(entry) + newFlow.value = result + } + + return newFlow + } + + /** + * Gets or creates a loading StateFlow for structured data. + * Returns true if data is still loading (null). + */ + fun getStructuredDictionaryDataLoading(entry: DictionaryWordEntry): StateFlow { + val key = entry.word + "_" + entry.langCode + // Create a derived flow that emits true when data is null + val dataFlow = getStructuredDictionaryDataState(entry) + val loadingFlow = MutableStateFlow(true) + viewModelScope.launch { + dataFlow.collect { data -> + loadingFlow.value = (data == null) + } + } + return loadingFlow + } + + /** + * Clears all caches for structured data. + */ + fun clearStructuredDataCache() { + structuredDataCache.clear() + } +} diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/ExerciseViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/ExerciseViewModel.kt new file mode 100644 index 0000000..832f2ca --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/ExerciseViewModel.kt @@ -0,0 +1,619 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.viewmodel + +import android.annotation.SuppressLint +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import eu.gaudian.translator.R +import eu.gaudian.translator.model.CategorizationQuestion +import eu.gaudian.translator.model.Exercise +import eu.gaudian.translator.model.FillInTheBlankQuestion +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.ListeningComprehensionQuestion +import eu.gaudian.translator.model.MatchingPairsQuestion +import eu.gaudian.translator.model.MultipleChoiceQuestion +import eu.gaudian.translator.model.Question +import eu.gaudian.translator.model.SubtitleLine +import eu.gaudian.translator.model.TrueFalseQuestion +import eu.gaudian.translator.model.VocabularyTestQuestion +import eu.gaudian.translator.model.WordOrderQuestion +import eu.gaudian.translator.model.repository.ExerciseRepository +import eu.gaudian.translator.model.repository.LanguageRepository +import eu.gaudian.translator.model.repository.VocabularyRepository +import eu.gaudian.translator.utils.ExerciseService +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.TranslationService +import eu.gaudian.translator.utils.YouTubeApiService +import eu.gaudian.translator.utils.YouTubeExerciseService +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.launch +import kotlin.reflect.KClass + +sealed class AnswerResult { + object UNCHECKED : AnswerResult() + object CORRECT : AnswerResult() + data class INCORRECT(val feedback: String) : AnswerResult() +} + +data class ExerciseSessionState( + val exercise: Exercise, + val questions: List, + val currentQuestionIndex: Int = 0, + val correctAnswers: Int = 0, + val wrongAnswers: Int = 0, + val selectedAnswer: Any? = null, + val answerResult: AnswerResult = AnswerResult.UNCHECKED +) { + val currentQuestion: Question get() = questions[currentQuestionIndex] + val isExerciseFinished: Boolean get() = currentQuestionIndex >= questions.size + + + fun isAnswerSelected(): Boolean { + return when (val question = currentQuestion) { + is FillInTheBlankQuestion, is ListeningComprehensionQuestion, is VocabularyTestQuestion -> (selectedAnswer as? String)?.isNotBlank() == true + is WordOrderQuestion -> (selectedAnswer as? List<*>)?.isNotEmpty() == true + is MatchingPairsQuestion -> ((selectedAnswer as? Map<*, *>)?.size ?: 0) == question.pairs.size + is CategorizationQuestion -> ((selectedAnswer as? Map<*, *>)?.size ?: 0) == question.items.size + else -> selectedAnswer != null + } + } +} + +sealed class AiGenerationState { + object Idle : AiGenerationState() + data class Generating(val statusMessage: String) : AiGenerationState() + data class Success(val generatedExerciseTitle: String) : AiGenerationState() + data class Error(val errorMessage: String) : AiGenerationState() +} + +sealed class YouTubeExerciseState { + object Idle : YouTubeExerciseState() + object Loading : YouTubeExerciseState() + data class Success( + val videoId: String, + val videoTitle: String, + val subtitles: List + ) : YouTubeExerciseState() + data class Error(val message: String) : YouTubeExerciseState() +} + +/** + * TODO: Convert ExerciseViewModel to HiltViewModel + * + * This ViewModel needs to be converted to use Hilt for dependency injection. + * Currently it manually instantiates dependencies and uses a singleton pattern. + * + * Checklist: + * - [ ] Add @HiltViewModel annotation to the class + * - [ ] Change constructor to use @Inject and inject dependencies: + * - ExerciseRepository + * - ExerciseService + * - VocabularyRepository + * - LanguageRepository + * - TranslationService + * - YouTubeApiService + * - YouTubeExerciseService + * - [ ] Create/update RepositoryModule.kt to provide singleton instances of: + * - ExerciseRepository + * - ExerciseService + * - VocabularyRepository + * - LanguageRepository + * - TranslationService + * - YouTubeApiService + * - YouTubeExerciseService + * - [ ] Modify companion object getInstance() method to use Hilt's EntryPoint system + * - [ ] Create ExerciseViewModelEntryPoint interface for accessing the singleton instance + * - [ ] Remove manual dependency instantiation from constructor and init block + * - [ ] Update all places where ExerciseViewModel.getInstance() is called to ensure compatibility + * - [ ] Test that the ViewModel works correctly with dependency injection + */ +class ExerciseViewModel(application: Application) : AndroidViewModel(application) { + data class YouTubeSessionParams(val url: String, val sourceLanguage: String?, val targetLanguage: String?) + companion object { + @SuppressLint("StaticFieldLeak") + @Volatile private var INSTANCE: ExerciseViewModel? = null + fun getInstance(application: Application): ExerciseViewModel = INSTANCE ?: synchronized(this) { + INSTANCE ?: ExerciseViewModel(application).also { INSTANCE = it } + } + } + + private fun normalizeText(input: String?): String { + if (input.isNullOrBlank()) return "" + @Suppress("HardCodedStringLiteral") val normalized = java.text.Normalizer.normalize(input, java.text.Normalizer.Form.NFD) + .replace("\\p{InCombiningDiacriticalMarks}+".toRegex(), "") + val noPunct = normalized.replace("\\p{Punct}".toRegex(), " ") + return noPunct.trim().replace("\\s+".toRegex(), " ").lowercase() + } + + private fun normalizeTokens(tokens: List): List = tokens.map { normalizeText(it) } + + private fun normalizeMap(map: Map): Map = map.mapNotNull { (k, v) -> + val nk = normalizeText(k?.toString()) + val nv = normalizeText(v?.toString()) + if (nk.isNotBlank() && nv.isNotBlank()) nk to nv else null + }.toMap() + + + @SuppressLint("StaticFieldLeak") + val context = application.applicationContext!! + val exerciseRepository = ExerciseRepository(application.applicationContext) + val exerciseService = ExerciseService(application.applicationContext) + val vocabularyRepository = VocabularyRepository.getInstance(application.applicationContext) + + // Translation helpers + private val languageRepository = LanguageRepository(application.applicationContext) + private val translationService = TranslationService(application.applicationContext) + private var currentSubtitleTranslationJob: Job? = null + + private val _exercises = MutableStateFlow>(emptyList()) + val exercises: StateFlow> = _exercises.asStateFlow() + + private val _exerciseSessionState = MutableStateFlow(null) + val exerciseSessionState: StateFlow = _exerciseSessionState.asStateFlow() + + private val _aiGenerationState = MutableStateFlow(AiGenerationState.Idle) + val aiGenerationState: StateFlow = _aiGenerationState.asStateFlow() + + private val _youTubeSessionParams = MutableStateFlow(null) + val youTubeSessionParams: StateFlow = _youTubeSessionParams.asStateFlow() + + private val _youTubeExerciseState = MutableStateFlow(YouTubeExerciseState.Idle) + val youTubeExerciseState: StateFlow = _youTubeExerciseState.asStateFlow() + + private var currentlyFetchingVideoId: String? = null + + + init { + loadExercisesFromRepository() + } + + private fun loadExercisesFromRepository() { + viewModelScope.launch { + exerciseRepository.getAllExercisesFlow().collect { exercisesList -> + _exercises.value = exercisesList + } + } + } + + fun generateExerciseWithAi( + category: String, + questionTypes: List>, + difficulty: String, + amount: Int, + sourceLanguage: String? = null, + targetLanguage: String? = null + ) { + Log.i("ExerciseViewModel", "generateExerciseWithAi: category=$category, types=${questionTypes.map { it.simpleName }}, difficulty=$difficulty, amount=$amount, source=$sourceLanguage, target=$targetLanguage") + viewModelScope.launch { + try { + _aiGenerationState.value = AiGenerationState.Generating(getApplication().applicationContext.getString(R.string.text_contacting_ai)) + + val result = exerciseService.generateExerciseWithQuestions( + category, + questionTypes, + difficulty, + amount, + sourceLanguage, + targetLanguage + ) { msg -> + _aiGenerationState.value = AiGenerationState.Generating(msg) + } + + if (result != null) { + val (exercise, questions, newVocab) = result + Log.i("ExerciseViewModel", "AI generated exercise '$exercise.title}' with ${questions.size} questions and ${newVocab.size} new vocab items") + + var savedVocabIds: List = emptyList() + if (newVocab.isNotEmpty()) { + vocabularyRepository.introduceVocabularyItems(newVocab) + val allVocab = vocabularyRepository.getAllVocabularyItems() + savedVocabIds = allVocab.filter { v -> newVocab.any { it.isDuplicate(v) } }.map { it.id } + } + + exerciseRepository.saveNewExerciseWithQuestions( + exercise.copy(associatedVocabularyIds = savedVocabIds), + questions + ) + Log.d("ExerciseViewModel", "Saved AI-generated exercise '${exercise.title}' with ${questions.size} questions; associatedVocabularyIds=${savedVocabIds.size}") + + _aiGenerationState.value = AiGenerationState.Success( + getApplication().applicationContext.getString( + R.string.exercise_2d_created, + exercise.title + )) + } else { + _aiGenerationState.value = AiGenerationState.Error(context.getString(R.string.text_ai_failed_to_create_the_exercise)) + } + + } catch (e: Exception) { + Log.e(context.getString(R.string.text_ai_generation_failed_with_an_exception), e) + _aiGenerationState.value = AiGenerationState.Error(e.message ?: context.getString(R.string.text_an_unknown_error_occurred)) + } finally { + delay(2500) + _aiGenerationState.value = AiGenerationState.Idle + } + } + } + + fun startAdHocExercise(exercise: Exercise, questions: List) { + _exerciseSessionState.value = ExerciseSessionState( + exercise = exercise, + questions = questions + ) + } + + fun startExercise(exercise: Exercise) { + viewModelScope.launch { + val allQuestions = exerciseRepository.getAllQuestionsFlow().first() + val questionsForExercise = allQuestions.filter { it.id in exercise.questions } + + if (questionsForExercise.size != exercise.questions.size) { + Log.w(context.getString(R.string.text_mismatch_between_question_ids_in_exercise_and_questions_found_in_repository)) + } + + _exerciseSessionState.value = ExerciseSessionState( + exercise = exercise, + questions = questionsForExercise + ) + } + } + + fun selectAnswer(answer: Any) { + _exerciseSessionState.update { it?.copy(selectedAnswer = answer) } + } + + fun checkAnswer() { + val currentState = _exerciseSessionState.value ?: return + if (!currentState.isAnswerSelected()) return + + var isCorrect: Boolean + var feedback = context.getString(R.string.text_that_s_not_quite_right) + + when (val question = currentState.currentQuestion) { + is TrueFalseQuestion -> { + isCorrect = question.correctAnswer == currentState.selectedAnswer as? Boolean + if (!isCorrect) { + question.explanation.ifBlank { context.getString(R.string.text_the_correct_answer_is_2d) + " " +(question.correctAnswer) } + .also { feedback = it } + } + } + is MultipleChoiceQuestion -> { + isCorrect = question.correctAnswerIndex == currentState.selectedAnswer as? Int + if (!isCorrect) feedback = context.getString(R.string.text_the_correct_answer_is_2d)+ question.options[question.correctAnswerIndex] + } + is FillInTheBlankQuestion -> { + val expected = normalizeText(question.correctAnswer) + val given = normalizeText(currentState.selectedAnswer as? String) + isCorrect = expected == given + if (!isCorrect) feedback = context.getString(R.string.text_the_correct_answer_is_2d) + " " + question.correctAnswer + } + is WordOrderQuestion -> { + val expected = normalizeTokens(question.correctOrder) + val given = normalizeTokens((currentState.selectedAnswer as? List<*>)?.map { it?.toString() ?: "" } ?: emptyList()) + isCorrect = expected == given + if (!isCorrect) feedback = context.getString( + R.string.text_the_correct_order_is_2d, + question.correctOrder.joinToString(" ") + ) + } + is MatchingPairsQuestion -> { + val selRaw = (currentState.selectedAnswer as? Map<*, *>) ?: emptyMap() + val sel = normalizeMap(selRaw) + val target = normalizeMap(question.pairs) + isCorrect = target == sel + if (!isCorrect) { + val correctCount = sel.count { (k, v) -> target[k] == v } + feedback = context.getString(R.string.text_check_your_matches) + " (" + correctCount + "/" + target.size + ")" + } + } + is ListeningComprehensionQuestion -> { + val expected = normalizeText(question.name) + val given = normalizeText(currentState.selectedAnswer as? String) + isCorrect = expected == given + if (!isCorrect) feedback = + context.getString(R.string.text_the_correct_sentence_was_2d, question.name) + } + is CategorizationQuestion -> { + val selRaw = (currentState.selectedAnswer as? Map<*, *>) ?: emptyMap() + val sel = normalizeMap(selRaw) + val target = normalizeMap(question.correctMapping) + isCorrect = target == sel + if (!isCorrect) { + val correctCount = sel.count { (item, cat) -> target[item] == cat } + feedback = context.getString(R.string.text_some_items_are_in_the_wrong_category) + " ($correctCount/" + question.items.size + ")" + } + } + is VocabularyTestQuestion -> { + val expected = normalizeText(question.correctAnswer) + val given = normalizeText(currentState.selectedAnswer as? String) + isCorrect = expected == given + if (!isCorrect) feedback = + context.getString(R.string.text_the_correct_translation_is_2d, question.correctAnswer) + } + } + + if (isCorrect) { + _exerciseSessionState.update { it?.copy(correctAnswers = it.correctAnswers + 1, answerResult = AnswerResult.CORRECT) } + } else { + _exerciseSessionState.update { it?.copy(wrongAnswers = it.wrongAnswers + 1, answerResult = AnswerResult.INCORRECT(feedback)) } + } + } + + fun nextQuestion() { + val currentState = _exerciseSessionState.value ?: return + val nextIndex = currentState.currentQuestionIndex + 1 + if (nextIndex >= currentState.questions.size) { + _exerciseSessionState.update { + it?.copy( + currentQuestionIndex = currentState.questions.size, + answerResult = AnswerResult.UNCHECKED + ) + } + } else { + _exerciseSessionState.update { + it?.copy( + currentQuestionIndex = nextIndex, + selectedAnswer = null, + answerResult = AnswerResult.UNCHECKED + ) + } + } + } + + fun closeExercise() { + _exerciseSessionState.value = null + } + + fun deleteExercise(exerciseId: String) { + viewModelScope.launch { + exerciseRepository.deleteExercise(exerciseId) + } + } + + fun startYouTubeExercise(url: String, sourceLanguage: Language, targetLanguage: Language) { + _youTubeSessionParams.value = YouTubeSessionParams(url = url, sourceLanguage = sourceLanguage.code, targetLanguage = targetLanguage.code) + _youTubeExerciseState.value = YouTubeExerciseState.Idle + } + + fun fetchSubtitlesForVideoId(videoId: String) { + // Guard against re-fetching if already in progress or already successfully loaded. + if (videoId == currentlyFetchingVideoId) { + Log.i("ExerciseViewModel", "Already fetching subtitles for $videoId. Ignoring request.") + return + } + val currentState = _youTubeExerciseState.value + if (currentState is YouTubeExerciseState.Success && currentState.videoId == videoId) { + Log.i("ExerciseViewModel", "Subtitles for $videoId are already loaded. Ignoring request.") + return + } + + val params = _youTubeSessionParams.value ?: run { + Log.e("ExerciseViewModel", "No YouTube session params while trying to fetch subtitles for $videoId") + _youTubeExerciseState.value = YouTubeExerciseState.Error("Session parameters not found. Please start the exercise again.") + return + } + val langCode = params.sourceLanguage ?: "en" // Default to English + + Log.i("ExerciseViewModel", "Fetching subtitles for videoId=$videoId (preferredLang=$langCode)") + + // Cancel any ongoing subtitle translation job when starting a new fetch + currentSubtitleTranslationJob?.cancel() + + viewModelScope.launch { + currentlyFetchingVideoId = videoId + _youTubeExerciseState.value = YouTubeExerciseState.Loading + Log.d("ExerciseViewModel", "State set to Loading for videoId=$videoId") + try { + val title = YouTubeApiService.getVideoTitle(videoId) + Log.i("ExerciseViewModel", "Fetched video title: '${title.take(100)}'") + + var available: List = emptyList() + var attempts = 0 + // Retry fetching transcripts as the page might still be loading JS. + while (attempts < 3 && available.isEmpty()) { + if (attempts > 0) { + Log.i("ExerciseViewModel", "Transcript list was empty. Retrying after delay... (Attempt ${attempts + 1}/3)") + delay(2500) + } + try { + available = YouTubeExerciseService.listTranscripts(videoId) + } catch (e: Exception) { + Log.w("ExerciseViewModel", "listTranscripts failed on attempt $attempts", e) + } + attempts++ + } + + Log.i("ExerciseViewModel", "Available transcript languages for $videoId: $available") + val chosenLang = when { + available.contains(langCode) -> langCode + available.contains("en") -> "en" + available.isNotEmpty() -> available.first() + else -> null + } + Log.d("ExerciseViewModel", "Chosen transcript language: $chosenLang (preferred was $langCode)") + + val finalLang = chosenLang ?: throw Exception("No transcripts available for this video.") + val subtitles = YouTubeExerciseService.getTranscript(videoId, finalLang) + Log.i("ExerciseViewModel", "Fetched ${subtitles.size} subtitle lines for $videoId in lang=${finalLang}") + + _youTubeExerciseState.value = YouTubeExerciseState.Success( + videoId = videoId, + videoTitle = title, + subtitles = subtitles + ) + Log.d("ExerciseViewModel", "YouTubeExerciseState set to Success for videoId=$videoId") + + // Kick off subtitle translations in background, prioritizing earliest lines first + startTranslatingSubtitles(videoId) + } catch (e: Exception) { + Log.e("ExerciseViewModel", "Failed to fetch YouTube data for $videoId", e) + _youTubeExerciseState.value = YouTubeExerciseState.Error(e.message ?: "An unknown error occurred.") + } finally { + // Clear the lock only if the fetch was for the current video. + if(currentlyFetchingVideoId == videoId) { + currentlyFetchingVideoId = null + } + Log.d("ExerciseViewModel", "Fetch complete for videoId=$videoId; fetch lock released") + } + } + } + + private fun startTranslatingSubtitles(videoId: String) { + val params = _youTubeSessionParams.value + val targetCode = params?.targetLanguage + if (targetCode.isNullOrBlank()) { + Log.w("ExerciseViewModel", "No target language set for YouTube exercise; skipping subtitle translation") + return + } + + currentSubtitleTranslationJob?.cancel() + currentSubtitleTranslationJob = viewModelScope.launch { + // Resolve target language by code + val allLangs = try { languageRepository.loadMasterLanguages().first() } catch (_: Exception) { emptyList() } + val targetLang = allLangs.firstOrNull { it.code.equals(targetCode, ignoreCase = true) } + if (targetLang == null) { + Log.w("ExerciseViewModel", "Could not resolve target Language for code=$targetCode; skipping subtitle translation") + return@launch + } + + val cache = mutableMapOf() + + fun updateLine(index: Int, translated: String) { + val state = _youTubeExerciseState.value + if (state is YouTubeExerciseState.Success && state.videoId == videoId) { + val updated = state.subtitles.toMutableList() + val old = updated.getOrNull(index) + if (old != null && old.translatedText != translated) { + updated[index] = old.copy(translatedText = translated) + _youTubeExerciseState.value = YouTubeExerciseState.Success( + videoId = state.videoId, + videoTitle = state.videoTitle, + subtitles = updated + ) + } + } + } + + val initialState = _youTubeExerciseState.value as? YouTubeExerciseState.Success ?: return@launch + val subtitles = initialState.subtitles + // Ensure order by start time (should already be) + val indices = subtitles.indices.sortedBy { subtitles[it].start } + + for (i in indices) { + val current = (_youTubeExerciseState.value as? YouTubeExerciseState.Success) ?: break + if (current.videoId != videoId) break // video changed + + val line = current.subtitles.getOrNull(i) ?: continue + if (line.text.isBlank() || line.translatedText != null) continue + + val cached = cache[line.text] + if (cached != null) { + updateLine(i, cached) + continue + } + + val res = translationService.simpleTranslateTo(line.text, targetLang) + if (res.isSuccess) { + val translated = res.getOrNull() ?: continue + cache[line.text] = translated + updateLine(i, translated) + } else { + Log.w("ExerciseViewModel", "Subtitle translation failed at index=$i: ${res.exceptionOrNull()?.message}") + } + // Tiny pause to avoid hammering the server + delay(50) + } + Log.i("ExerciseViewModel", "Subtitle translation finished for videoId=$videoId") + } + } + + fun clearYouTubeSubtitles() { + Log.d("ExerciseViewModel", "Clearing YouTube subtitles and resetting state to Idle") + currentlyFetchingVideoId = null + currentSubtitleTranslationJob?.cancel() + _youTubeExerciseState.value = YouTubeExerciseState.Idle + } + + /** + * Generates questions from YouTube video subtitles using AI and saves the exercise. + * This should be called from ViewModel scope to avoid coroutine cancellation issues. + */ + fun generateAndSaveYouTubeExercise( + subtitles: List, + videoTitle: String, + videoId: String, + sourceLanguage: String?, + targetLanguage: String?, + onComplete: (Exercise) -> Unit, + onError: (String) -> Unit + ) { + viewModelScope.launch { + try { + Log.i("ExerciseViewModel", "Generating AI questions for YouTube video: $videoTitle") + + val questions = exerciseService.generateQuestionsFromSubtitles( + subtitles = subtitles, + videoTitle = videoTitle, + sourceLanguage = sourceLanguage, + targetLanguage = targetLanguage + ) { progress -> + Log.d("ExerciseViewModel", "Question generation progress: $progress") + } + + if (questions.isEmpty()) { + onError("No questions could be generated from the video content") + return@launch + } + + Log.i("ExerciseViewModel", "Successfully generated ${questions.size} questions from YouTube video") + + // Create the exercise with YouTube URL for future reference + val youtubeUrl = _youTubeSessionParams.value?.url + val exercise = Exercise( + id = "youtube_${videoId}_${System.currentTimeMillis()}", + title = "YouTube: $videoTitle", + questions = questions.map { it.id }, + sourceLanguage = sourceLanguage, + targetLanguage = targetLanguage, + contextTitle = "YouTube Video: $videoTitle", + contextText = "Questions based on the YouTube video content.", + youtubeUrl = youtubeUrl + ) + + // Save the exercise and questions to repository + exerciseRepository.saveNewExerciseWithQuestions(exercise, questions) + + Log.i("ExerciseViewModel", "Saved YouTube exercise '${exercise.title}' with ${questions.size} questions") + + onComplete(exercise) + + } catch (e: Exception) { + Log.e("ExerciseViewModel", "Failed to generate and save YouTube exercise", e) + onError(e.message ?: "Unknown error occurred while generating questions") + } + } + } + + /** + * Navigates back to YouTube video from an exercise session. + * Restarts the YouTube exercise with the saved URL. + */ + fun restartYouTubeExercise(youtubeUrl: String, sourceLanguage: String?, targetLanguage: String?) { + // Update the YouTube session params to restart the exercise + _youTubeSessionParams.value = YouTubeSessionParams( + url = youtubeUrl, + sourceLanguage = sourceLanguage, + targetLanguage = targetLanguage + ) + // Reset the exercise state to allow restarting + _youTubeExerciseState.value = YouTubeExerciseState.Idle + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/LanguageConfigViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/LanguageConfigViewModel.kt new file mode 100644 index 0000000..82e0514 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/LanguageConfigViewModel.kt @@ -0,0 +1,108 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import eu.gaudian.translator.model.grammar.LanguageConfig +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch +import kotlinx.serialization.json.Json + +/** + * TODO: Convert LanguageConfigViewModel to HiltViewModel + * + * This ViewModel needs to be converted to use Hilt for dependency injection. + * Currently it manually instantiates dependencies in the constructor. + * + * Checklist: + * - [ ] Add @HiltViewModel annotation to the class + * - [ ] Change constructor to use @Inject and inject dependencies: + * - Application (provided by Hilt) + * - [ ] Remove manual dependency instantiation from constructor + * - [ ] Update all places where LanguageConfigViewModel() is instantiated to use Hilt injection + * - [ ] Test that the ViewModel works correctly with dependency injection + */ +class LanguageConfigViewModel(application: Application) : AndroidViewModel(application) { + + private val _configs = MutableStateFlow>(emptyMap()) + val configs = _configs.asStateFlow() + + private val jsonParser = Json { ignoreUnknownKeys = true } + + init { + loadAllConfigs() + } + + val allWordClasses: StateFlow> = configs.map { configsMap -> + configsMap.values + .flatMap { it.categories.keys } + .distinct() + .sorted() + }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList()) + + /** + * Loads all language configuration files from the "language_configs" asset directory. + */ + private fun loadAllConfigs() { + viewModelScope.launch { + val context = getApplication().applicationContext + try { + val configFiles = context.assets.list("language_configs") ?: return@launch + val loadedConfigs = mutableMapOf() + + for (fileName in configFiles) { + if (fileName.endsWith(".json")) { + val jsonString = context.assets.open("language_configs/$fileName") + .bufferedReader() + .use { it.readText() } + + val config = jsonParser.decodeFromString(jsonString) + loadedConfigs[config.language_code] = config + } + } + _configs.value = loadedConfigs + } catch (e: Exception) { + // Log the error for debugging, but don't crash the app + Log.e("Failed to load language configs: ${e.message}") + e.printStackTrace() + } + } + } + + /** + * Retrieves the configuration for a specific language code. + * + * @param langCode The ISO language code (e.g., "de"). + * @return The LanguageConfig for the given code, or null if not found. + */ + fun getConfigForLanguage(langCode: String): LanguageConfig? { + Log.d("Fetching config for language: $langCode") + return _configs.value[langCode] + } + + /** + * Retrieves the set of articles for a specific language code. + * This method is robust and will not crash if the language or articles are not found. + * + * @param langCode The ISO language code (e.g., "de"). + * @return A Set of articles for the given language. Returns an empty set if + * the language code is not found or if the language has no articles defined. + */ + fun getArticlesForLanguage(langCode: String): Set { + return try { + val config = _configs.value[langCode] + config?.articles?.toSet() ?: emptySet() + } catch (e: Exception) { + Log.e("Error retrieving articles for '$langCode': ${e.message}") + emptySet() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/LanguageViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/LanguageViewModel.kt new file mode 100644 index 0000000..741af13 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/LanguageViewModel.kt @@ -0,0 +1,196 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.repository.LanguageListType +import eu.gaudian.translator.model.repository.LanguageRepository +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import javax.inject.Inject + +/** + * LanguageViewModel - Hilt-enabled ViewModel for language management + * + * This ViewModel uses Hilt for dependency injection and manages language-related state + * including selected languages, language lists, and language preferences. + */ +@HiltViewModel +class LanguageViewModel @Inject constructor( + application: Application +) : AndroidViewModel(application) { + + val languageRepository = LanguageRepository(application) + + private val languageSwitchMutex = Mutex() + + + // Enabled languages (visible across the app) + val allLanguages: StateFlow> = languageRepository.loadLanguages(LanguageListType.ALL) + .stateIn(viewModelScope, SharingStarted.Eagerly, emptyList()) + + // Master catalog (DEFAULT + CUSTOM), used by LanguageOptionsScreen to toggle visibility + val masterLanguages: StateFlow> = languageRepository.loadMasterLanguages() + .stateIn(viewModelScope, SharingStarted.Eagerly, emptyList()) + + val favoriteLanguages: StateFlow> = languageRepository.loadLanguages(LanguageListType.FAVORITE) + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList()) + + val languageHistory: StateFlow> = languageRepository.loadLanguages(LanguageListType.HISTORY) + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList()) + + val selectedSourceLanguage: StateFlow = languageRepository.loadSelectedSourceLanguage() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), null) + + val selectedTargetLanguage: StateFlow = languageRepository.loadSelectedTargetLanguage() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), null) + + val selectedDictionaryLanguage: StateFlow = languageRepository.loadSelectedDictionaryLanguage() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), null) + + val isAllSelected: StateFlow = kotlinx.coroutines.flow.combine(masterLanguages, allLanguages) { master, enabled -> + val masterIds = master.map { it.nameResId }.toSet() + val enabledIds = enabled.map { it.nameResId }.toSet() + masterIds.isNotEmpty() && enabledIds.containsAll(masterIds) + }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), false) + + + suspend fun getLanguageById(id: Int): Language { + + + val languages = allLanguages.first { it.isNotEmpty() } + + val language = languages.find { it.nameResId == id } + + if (language == null) { + Log.e("LanguageViewModel", "Language with ID $id not found, returning dummy language.") + return Language( + code = "error", + region = "error", + nameResId = 0, + name = "Error", + englishName = "Error", + isCustom = false, + isSelected = false + ) + } + + return language + } + + fun getLanguageByIdFlow(id: Int?): Flow { + return allLanguages.map { languages -> + languages.find { it.nameResId == id } + } + } + + fun switchLanguages() { + viewModelScope.launch { + languageSwitchMutex.withLock { + val source = selectedSourceLanguage.value + val target = selectedTargetLanguage.value + languageRepository.saveSelectedSourceLanguage(target) + languageRepository.saveSelectedTargetLanguage(source) + } + } + } + + fun setSelectedSourceLanguage(languageId: Int?) { + viewModelScope.launch { + if (languageId == 0 || languageId == null) { + languageRepository.saveSelectedSourceLanguage(null) + return@launch + } + val language = getLanguageById(languageId) + languageRepository.saveSelectedSourceLanguage(language) + } + } + + fun setSelectedTargetLanguage(languageId: Int?) { + viewModelScope.launch { + val language = if (languageId != null) getLanguageById(languageId) else null + languageRepository.saveSelectedTargetLanguage(language) + } + } + + fun setSelectedSourceLanguage(language: Language?) { + viewModelScope.launch { + languageRepository.saveSelectedSourceLanguage(language) + } + } + + fun setSelectedTargetLanguage(language: Language?) { + viewModelScope.launch { + languageRepository.saveSelectedTargetLanguage(language) + } + } + + fun setSelectedDictionaryLanguage(language: Language?) { + viewModelScope.launch { + languageRepository.saveSelectedDictionaryLanguage(language) + } + } + + fun updateFavoriteLanguages(languages: List) { + viewModelScope.launch { + languageRepository.saveLanguages(LanguageListType.FAVORITE, languages) + } + } + + fun updateLanguageHistory(languages: List) { + viewModelScope.launch { + languageRepository.saveLanguages(LanguageListType.HISTORY, languages) + } + } + + fun addCustomLanguage(language: Language) { + viewModelScope.launch { + languageRepository.addCustomLanguage(language) + // No need to re-observe. The 'allLanguages' and 'customLanguages' StateFlows will update automatically. + } + } + + fun removeCustomLanguage(languageToRemove: Language) { + viewModelScope.launch { + languageRepository.deleteCustomLanguage(languageToRemove) + // No need to re-observe. Flows will update automatically. + } + } + + fun selectAllLanguages(isSelected: Boolean) { + viewModelScope.launch { + val masterIds = masterLanguages.value.map { it.nameResId } + languageRepository.setEnabledLanguagesByIds(if (isSelected) masterIds else emptyList()) + } + } + + fun toggleLanguageSelection(languageToToggle: Language) { + viewModelScope.launch { + val enabledIds = allLanguages.value.map { it.nameResId }.toMutableSet() + if (enabledIds.contains(languageToToggle.nameResId)) { + enabledIds.remove(languageToToggle.nameResId) + } else { + enabledIds.add(languageToToggle.nameResId) + } + languageRepository.setEnabledLanguagesByIds(enabledIds.toList()) + } + } + + fun editLanguage(languageId: Int, newName: String, newCode: String, newRegion: String) { + viewModelScope.launch { + languageRepository.editCustomLanguage(languageId, newName, newCode, newRegion) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/ProgressViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/ProgressViewModel.kt new file mode 100644 index 0000000..383009b --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/ProgressViewModel.kt @@ -0,0 +1,317 @@ +package eu.gaudian.translator.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.application +import androidx.lifecycle.viewModelScope +import eu.gaudian.translator.model.VocabularyCategory +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.model.repository.SettingsRepository +import eu.gaudian.translator.model.repository.VocabularyRepository +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.Job +import kotlinx.coroutines.async +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex +import kotlinx.datetime.DateTimeUnit +import kotlinx.datetime.LocalDate +import kotlinx.datetime.TimeZone +import kotlinx.datetime.minus +import kotlinx.datetime.toLocalDateTime +import java.text.DateFormatSymbols +import java.util.Locale + + +data class CategoryProgress( + val vocabularyCategory: VocabularyCategory, + val totalItems: Int, + val newItems: Int, + val itemsInStages: Int, + val itemsCompleted: Int, +) + +data class DayStreak( + val day: String, + val targetMet: Boolean, +) + +data class WeeklyActivityStat( + val day: String, + val newlyAdded: Int, + val completed: Int, + val answeredRight: Int +) + +data class StageStats( + val stage: VocabularyStage, + val itemCount: Int +) + + +/** + * TODO: Convert ProgressViewModel to HiltViewModel + * + * This ViewModel needs to be converted to use Hilt for dependency injection. + * Currently it manually instantiates dependencies and uses a singleton pattern. + * + * Checklist: + * - [ ] Add @HiltViewModel annotation to the class + * - [ ] Change constructor to use @Inject and inject dependencies: + * - VocabularyRepository + * - SettingsRepository + * - [ ] Create/update RepositoryModule.kt to provide singleton instances of: + * - VocabularyRepository + * - SettingsRepository + * - [ ] Modify companion object getInstance() method to use Hilt's EntryPoint system + * - [ ] Create ProgressViewModelEntryPoint interface for accessing the singleton instance + * - [ ] Remove manual dependency instantiation from constructor and init block + * - [ ] Update all places where ProgressViewModel.getInstance() is called to ensure compatibility + * - [ ] Test that the ViewModel works correctly with dependency injection + */ +class ProgressViewModel(application: Application) : AndroidViewModel(application) { + companion object { + @Volatile private var INSTANCE: ProgressViewModel? = null + fun getInstance(application: Application): ProgressViewModel = INSTANCE ?: synchronized(this) { + INSTANCE ?: ProgressViewModel(application).also { INSTANCE = it } + } + } + + + val vocabularyRepository = VocabularyRepository.getInstance(application.applicationContext) + val settingsRepository = SettingsRepository(application.applicationContext) + + // Single-flight + coalescing scheduler for refresh() + private val refreshMutex = Mutex() + @Volatile private var isRefreshing = false + @Volatile private var pendingRefresh = false + private var refreshDebounceJob: Job? = null + private val refreshDebounceMs = 250L + + private val _categoryProgressList = MutableStateFlow>(emptyList()) + val categoryProgressList: StateFlow> = _categoryProgressList.asStateFlow() + + private val _lastSevenDays = MutableStateFlow>(emptyList()) + val lastSevenDays: StateFlow> = _lastSevenDays.asStateFlow() + + private val _streak = MutableStateFlow(0) + val streak: StateFlow = _streak.asStateFlow() + + private val _selectedCategories = MutableStateFlow>(emptySet()) + val selectedCategories: StateFlow> = _selectedCategories.asStateFlow() + + private val _dueTodayCount = MutableStateFlow(0) + val dueTodayCount: StateFlow = _dueTodayCount.asStateFlow() + + private val _totalWordsCompleted = MutableStateFlow(0) + val totalWordsCompleted: StateFlow = _totalWordsCompleted.asStateFlow() + + private val _totalWordsInProgress = MutableStateFlow(0) + val totalWordsInProgress: StateFlow = _totalWordsInProgress.asStateFlow() + + private val _weeklyActivityStats = MutableStateFlow>(emptyList()) + val weeklyActivityStats: StateFlow> = _weeklyActivityStats.asStateFlow() + + private val _dailyVocabularyStats = MutableStateFlow>(emptyMap()) + val dailyVocabularyStats: StateFlow> = _dailyVocabularyStats.asStateFlow() + + + init { + viewModelScope.launch { + // Delay the first refresh a bit to avoid colliding with repository init + delay(1500L) + tickerFlowInternal(5000L).collect { + // Coalesced refresh requests + requestRefresh() + } + } + viewModelScope.launch { + vocabularyRepository.getDueTodayItemsFlow().collect { + _dueTodayCount.value = it.size + } + } + } + + private fun tickerFlowInternal(period: Long) = flow { + while (true) { + emit(Unit) + delay(period) + } + } + + + suspend fun getLastSevenDays(): List { + val dailyCounts = vocabularyRepository.getCorrectCountsForLastDays(7) + + return dailyCounts.entries + .sortedByDescending { it.key } + .map { (date, _) -> + // Map ISO day (Mon=1...Sun=7) to Calendar day (Sun=1...Sat=7) for DateFormatSymbols + // kotlinx.datetime.DayOfWeek is an enum (Mon=0...Sun=6). + // Logic: ((ordinal + 1) % 7) + 1 -> Mon(0)=>2, Sun(6)=>1 + val calendarDay = ((date.dayOfWeek.ordinal + 1) % 7) + 1 + + // Get localized short name (e.g., "Mon", "Seg") from the device's default locale + val localizedDay = DateFormatSymbols.getInstance(Locale.getDefault()).shortWeekdays[calendarDay].uppercase() + + DayStreak(localizedDay, vocabularyRepository.isTargetMetForDate(date)) + } + } + + suspend fun calculateDailyStreak(): Int { + val dailyData = vocabularyRepository.getCorrectCountsForLastDays(365) + val today = kotlin.time.Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).date + var currentStreak = 0 + + for (i in 0..365) { + val dateToCheck = today.minus(i, DateTimeUnit.DAY) + if (dailyData.containsKey(dateToCheck) && vocabularyRepository.isTargetMetForDate(dateToCheck)) { + currentStreak++ + } else { + break + } + } + return currentStreak + } + + fun toggleCategorySelection(category: Int) { + val currentSelection = _selectedCategories.value.toMutableSet() + if (currentSelection.contains(category)) { + currentSelection.remove(category) + } else { + currentSelection.add(category) + } + _selectedCategories.value = currentSelection + saveSelectedCategories(currentSelection) + } + + private fun loadSelectedCategories() { + viewModelScope.launch { + val stringSet = settingsRepository.selectedCategories.flow.first() + _selectedCategories.value = stringSet.mapNotNull { it.toIntOrNull() }.toSet() + } + } + + private fun saveSelectedCategories(categories: Set) { + viewModelScope.launch { + settingsRepository.selectedCategories.set(categories.map { it.toString() }.toSet()) + } + } + + suspend fun getWeeklyActivityStats(): List { + val vocabularyRepository = VocabularyRepository.getInstance(application) + val today = kotlin.time.Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).date + + // 1. Create a list of the last 7 dates in chronological order. + val lastSevenDates = (0..6).map { i -> + today.minus(6 - i, DateTimeUnit.DAY) + } + + // 2. Map each date to its corresponding statistics. + return lastSevenDates.map { date -> + val newlyAdded = vocabularyRepository.getNewlyAddedCountForDate(date) + val completed = vocabularyRepository.getCompletedCountForDate(date) + val answeredRight = vocabularyRepository.getCorrectAnswerCountForDate(date) + + // Calculate localized day name + val calendarDay = ((date.dayOfWeek.ordinal + 1) % 7) + 1 + val localizedDay = DateFormatSymbols.getInstance(Locale.getDefault()).shortWeekdays[calendarDay].uppercase() + + WeeklyActivityStat( + // 3. Get the actual day name from the date and take the first 3 letters. + day = localizedDay, + newlyAdded = newlyAdded, + completed = completed, + answeredRight = answeredRight + ) + } + } + + suspend fun getDailyVocabularyStats(): Map { + val today = kotlin.time.Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).date + val startDate = today.minus(365, DateTimeUnit.DAY) // Get up to a year of data + + return vocabularyRepository.getDailyVocabularyStats(startDate, today) + } + + + //let's keep as public entry point + fun refresh() { + requestRefresh() + } + + private fun requestRefresh() { + pendingRefresh = true + refreshDebounceJob?.cancel() + refreshDebounceJob = viewModelScope.launch { + delay(refreshDebounceMs) + triggerRefreshIfNeeded() + } + } + + private fun triggerRefreshIfNeeded() { + if (isRefreshing) return + if (!pendingRefresh) return + pendingRefresh = false + isRefreshing = true + viewModelScope.launch { + try { + runRefreshInternal() + } finally { + isRefreshing = false + if (pendingRefresh) { + refreshDebounceJob?.cancel() + refreshDebounceJob = viewModelScope.launch { + delay(refreshDebounceMs) + triggerRefreshIfNeeded() + } + } + } + } + } + + private suspend fun runRefreshInternal() { + refreshMutex.lock() + try { + loadSelectedCategories() + try { + val progressDeferred = viewModelScope.async { vocabularyRepository.calculateCategoryProgress() } + val lastSevenDaysDeferred = viewModelScope.async { getLastSevenDays() } + val streakDeferred = viewModelScope.async { calculateDailyStreak() } + val weeklyStatsDeferred = viewModelScope.async { getWeeklyActivityStats() } + val dailyStatsDeferred = viewModelScope.async { getDailyVocabularyStats() } + + val progressList = progressDeferred.await() + val stageList = vocabularyRepository.calculateStageStatistics() + _categoryProgressList.value = progressList + _totalWordsCompleted.value = stageList.firstOrNull { it.stage == VocabularyStage.LEARNED }?.itemCount ?: 0 + + _totalWordsInProgress.value = stageList + .filter { it.stage != VocabularyStage.LEARNED && it.stage != VocabularyStage.NEW } + .sumOf { it.itemCount } + + if (_selectedCategories.value.isEmpty() && progressList.isNotEmpty()) { + val initialCategory = setOf(progressList.first().vocabularyCategory.id) + _selectedCategories.value = initialCategory + saveSelectedCategories(initialCategory) + } + + _lastSevenDays.value = lastSevenDaysDeferred.await() + _streak.value = streakDeferred.await() + _weeklyActivityStats.value = weeklyStatsDeferred.await() + _dailyVocabularyStats.value = dailyStatsDeferred.await() + } catch (e: Exception) { + @Suppress("HardCodedStringLiteral") + Log.e("ProgressViewModel", "Error during refresh: ${e.message}", e) + } + } finally { + refreshMutex.unlock() + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/SettingsViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/SettingsViewModel.kt new file mode 100644 index 0000000..d729e76 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/SettingsViewModel.kt @@ -0,0 +1,282 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.viewmodel + +import android.app.Application +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.stringPreferencesKey +import androidx.datastore.preferences.core.stringSetPreferencesKey +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.application +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import eu.gaudian.translator.R +import eu.gaudian.translator.model.WidgetType +import eu.gaudian.translator.model.repository.ApiLogRepository +import eu.gaudian.translator.model.repository.SettingsRepository +import eu.gaudian.translator.model.repository.dataStore +import eu.gaudian.translator.utils.Log +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch +import javax.inject.Inject + + +@HiltViewModel +class SettingsViewModel @Inject constructor( + application: Application, + private val settingsRepository: SettingsRepository, + private val apiLogRepository: ApiLogRepository +) : AndroidViewModel(application) { + companion object { + // Stable, non-localized keys for vocabulary stages + const val STAGE_NEW: String = "stage_new" + const val STAGE_1: String = "stage_1" + const val STAGE_2: String = "stage_2" + const val STAGE_3: String = "stage_3" + const val STAGE_4: String = "stage_4" + const val STAGE_5: String = "stage_5" + const val STAGE_LEARNED: String = "stage_learned" + } + + val apiLogs = apiLogRepository.getLogs() + fun clearApiLogs() = viewModelScope.launch { apiLogRepository.clear() } + + private object PrefKeys { + val WIDGET_ORDER = stringPreferencesKey("widget_order") + val COLLAPSED_WIDGET_IDS = stringSetPreferencesKey("collapsed_widget_ids") + val DASHBOARD_SCROLL_POSITION = stringPreferencesKey("dashboard_scroll_position") + val DASHBOARD_SCROLL_OFFSET = stringPreferencesKey("dashboard_scroll_offset") + } + + private val _isInitialized = MutableStateFlow(false) + val isInitialized: StateFlow = _isInitialized.asStateFlow() + init { + viewModelScope.launch { + //TODO do connection check + + _isInitialized.value = true + } + } + + val theme: StateFlow = settingsRepository.theme.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), "Default") + val darkModePreference: StateFlow = settingsRepository.darkModePreference.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), "System") + val fontPreference: StateFlow = settingsRepository.fontPreference.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), "Default") + val introCompleted: StateFlow = settingsRepository.introCompleted.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), true) + val showBottomNavLabels: StateFlow = settingsRepository.showBottomNavLabels.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), true) + + + val isDeveloperModeEnabled: StateFlow = settingsRepository.developerMode.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), false) + val dictionarySwitches: StateFlow> = settingsRepository.dictionarySwitches.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptySet()) + val customPrompt: StateFlow = settingsRepository.customPromptTranslation.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), "") + val customPromptVocabulary: StateFlow = settingsRepository.customPromptVocabulary.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), "") + val customPromptDictionary: StateFlow = settingsRepository.customPromptDictionary.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), "") + val customPromptExercise: StateFlow = settingsRepository.customPromptExercise.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), "") + val speakingSpeed: StateFlow = settingsRepository.speakingSpeed.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), 100) + + val showHints: StateFlow = settingsRepository.showHints.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), true) + fun setShowHints(enabled: Boolean) = viewModelScope.launch { settingsRepository.showHints.set(enabled) } + + val experimentalFeatures: StateFlow = settingsRepository.experimentalFeatures.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), false) + val connectionConfigured: StateFlow = settingsRepository.connectionConfigured.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), true) + val tryWiktionaryFirst: StateFlow = settingsRepository.tryWiktionaryFirst.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), false) + + // LibreTranslate toggle + val useLibreTranslate: StateFlow = settingsRepository.useLibreTranslate.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), false) + fun setUseLibreTranslate(enabled: Boolean) = viewModelScope.launch { settingsRepository.useLibreTranslate.set(enabled) } + + fun setExperimentalFeatures(enabled: Boolean) = viewModelScope.launch { settingsRepository.experimentalFeatures.set(enabled) } + fun setTryWiktionaryFirst(enabled: Boolean) = viewModelScope.launch { settingsRepository.tryWiktionaryFirst.set(enabled) } + + val widgetOrder: StateFlow> = application.dataStore.data + .map { preferences -> + val allWidgets = WidgetType.DEFAULT_ORDER + val orderString = preferences[PrefKeys.WIDGET_ORDER] + + if (orderString.isNullOrEmpty()) { + allWidgets + } else { + val savedWidgets = orderString.split(",").mapNotNull { WidgetType.fromId(it) } + + + if (savedWidgets.size != allWidgets.size) { + saveWidgetOrder(allWidgets) + allWidgets + } else { + savedWidgets + } + } + }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), WidgetType.DEFAULT_ORDER) + + + val collapsedWidgetIds: StateFlow> = application.dataStore.data + .map { preferences -> + preferences[PrefKeys.COLLAPSED_WIDGET_IDS] ?: emptySet() + }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptySet()) + val dailyGoal: StateFlow = settingsRepository.dailyGoal.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), 10) + val criteriaCorrect: StateFlow = settingsRepository.criteriaCorrect.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), 3) + val criteriaWrong: StateFlow = settingsRepository.criteriaWrong.flow + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), 2) + val intervals: StateFlow> = combine( + settingsRepository.intervalNew.flow, + settingsRepository.intervalStage1.flow, + settingsRepository.intervalStage2.flow, + settingsRepository.intervalStage3.flow, + settingsRepository.intervalStage4.flow, + settingsRepository.intervalStage5.flow, + settingsRepository.intervalLearned.flow + ) { values -> + mapOf( + STAGE_NEW to values[0], + STAGE_1 to values[1], + STAGE_2 to values[2], + STAGE_3 to values[3], + STAGE_4 to values[4], + STAGE_5 to values[5], + STAGE_LEARNED to values[6] + ) + }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyMap()) + fun setInterval(stage: String, days: Int) = viewModelScope.launch { + when (stage) { + STAGE_NEW -> settingsRepository.intervalNew.set(days) + STAGE_1 -> settingsRepository.intervalStage1.set(days) + STAGE_2 -> settingsRepository.intervalStage2.set(days) + STAGE_3 -> settingsRepository.intervalStage3.set(days) + STAGE_4 -> settingsRepository.intervalStage4.set(days) + STAGE_5 -> settingsRepository.intervalStage5.set(days) + STAGE_LEARNED -> settingsRepository.intervalLearned.set(days) + } + } + + /** Resets all vocabulary stage intervals to their default values. */ + fun resetIntervalsToDefaults() = viewModelScope.launch { + // Defaults as defined in SettingsRepository + settingsRepository.intervalNew.set(1) + settingsRepository.intervalStage1.set(3) + settingsRepository.intervalStage2.set(7) + settingsRepository.intervalStage3.set(14) + settingsRepository.intervalStage4.set(30) + settingsRepository.intervalStage5.set(60) + settingsRepository.intervalLearned.set(90) + } + + + fun setTheme(theme: String) = viewModelScope.launch { + settingsRepository.theme.set(theme) + } + fun setDarkModePreference(preference: String) = viewModelScope.launch { settingsRepository.darkModePreference.set(preference) } + fun setFontPreference(font: String) = viewModelScope.launch { settingsRepository.fontPreference.set(font) } + fun setShowBottomNavLabels(enabled: Boolean) = viewModelScope.launch { settingsRepository.showBottomNavLabels.set(enabled) } + + fun setDeveloperMode(isEnabled: Boolean) = viewModelScope.launch { settingsRepository.developerMode.set(isEnabled) } + fun setDailyGoal(goal: Int) = viewModelScope.launch { settingsRepository.dailyGoal.set(goal) } + fun setDictionarySwitch(switchKey: String, isChecked: Boolean) { + viewModelScope.launch { + val currentSwitches = settingsRepository.dictionarySwitches.flow.first().toMutableSet() + + // Normalize legacy values which stored localized labels instead of stable keys + // by removing the old label for this key (if present) before updating. + val resources = application.resources + val keys = resources.getStringArray(R.array.dictionary_content_keys) + val labels = resources.getStringArray(R.array.dictionary_content) + val index = keys.indexOf(switchKey) + if (index >= 0) { + val legacyLabel = labels[index] + currentSwitches.remove(legacyLabel) + } + + if (isChecked) { + currentSwitches.add(switchKey) + } else { + currentSwitches.remove(switchKey) + } + settingsRepository.dictionarySwitches.set(currentSwitches) + } + } + fun saveCustomPrompt(customPrompt: String) = viewModelScope.launch { settingsRepository.customPromptTranslation.set(customPrompt) } + fun saveCustomVocabularyPrompt(customPrompt: String) = viewModelScope.launch { settingsRepository.customPromptVocabulary.set(customPrompt) } + fun saveCustomPromptDictionary(customPrompt: String) = viewModelScope.launch { settingsRepository.customPromptDictionary.set(customPrompt) } + fun saveCustomExercisePrompt(customPrompt: String) = viewModelScope.launch { settingsRepository.customPromptExercise.set(customPrompt) } + fun saveSpeakingSpeed(speed: Int) = viewModelScope.launch { settingsRepository.speakingSpeed.set(speed) } + fun saveTtsVoiceForLanguage(code: String, region: String, voiceName: String?) = viewModelScope.launch { settingsRepository.setTtsVoiceForLanguage(code, region, voiceName) } + suspend fun getTtsVoiceForLanguage(code: String, region: String): String? = settingsRepository.getTtsVoiceForLanguage(code, region).first() + fun setCriteriaCorrect(value: Int) = viewModelScope.launch { settingsRepository.criteriaCorrect.set(value) } + fun setCriteriaWrong(value: Int) = viewModelScope.launch { settingsRepository.criteriaWrong.set(value) } + fun saveWidgetOrder(order: List) = viewModelScope.launch { + application.dataStore.edit { settings -> + settings[PrefKeys.WIDGET_ORDER] = order.joinToString(",") { it.id } + } + Log.d("SettingsViewModel", "Widget order saved successfully") + } + suspend fun setWidgetExpandedState(widgetId: String, isExpanded: Boolean) { + application.dataStore.edit { settings -> + val currentCollapsedIds = settings[PrefKeys.COLLAPSED_WIDGET_IDS]?.toMutableSet() ?: mutableSetOf() + if (isExpanded) { + currentCollapsedIds.remove(widgetId) + } else { + currentCollapsedIds.add(widgetId) + } + settings[PrefKeys.COLLAPSED_WIDGET_IDS] = currentCollapsedIds + } + } + + // Dashboard scroll state persistence + val dashboardScrollState: StateFlow> = application.dataStore.data + .map { preferences -> + val firstVisibleItemIndex = preferences[PrefKeys.DASHBOARD_SCROLL_POSITION]?.toIntOrNull() ?: 0 + val firstVisibleItemScrollOffset = preferences[PrefKeys.DASHBOARD_SCROLL_OFFSET]?.toIntOrNull() ?: 0 + Pair(firstVisibleItemIndex, firstVisibleItemScrollOffset) + }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), Pair(0, 0)) + + fun saveDashboardScrollState(firstVisibleItemIndex: Int, firstVisibleItemScrollOffset: Int) = viewModelScope.launch { + application.dataStore.edit { settings -> + settings[PrefKeys.DASHBOARD_SCROLL_POSITION] = firstVisibleItemIndex.toString() + settings[PrefKeys.DASHBOARD_SCROLL_OFFSET] = firstVisibleItemScrollOffset.toString() + } + Log.d("SettingsViewModel", "Dashboard scroll state saved: index=$firstVisibleItemIndex, offset=$firstVisibleItemScrollOffset") + } + fun setIntroCompleted(completed: Boolean) = viewModelScope.launch { + settingsRepository.introCompleted.set(completed) + } + + /** + * Checks if the user has seen the "what's new" dialog for the current version + */ + suspend fun hasSeenCurrentVersion(currentVersion: String): Boolean { + return settingsRepository.hasSeenCurrentVersion(currentVersion) + } + + /** + * Marks the current version as seen by the user + */ + fun markVersionAsSeen(version: String) = viewModelScope.launch { + settingsRepository.markVersionAsSeen(version) + } + + +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/StatusViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/StatusViewModel.kt new file mode 100644 index 0000000..a150e46 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/StatusViewModel.kt @@ -0,0 +1,301 @@ +@file:Suppress("HardCodedStringLiteral", "unused") + +package eu.gaudian.translator.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.StatusAction +import eu.gaudian.translator.utils.StatusMessageService +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import java.util.LinkedList +import java.util.Queue + +enum class MessageAction { + NAVIGATE_TO_API_KEYS +} + +sealed class StatusState { + object Hidden : StatusState() + object Loading : StatusState() + data class Message( + val id: Long, + val text: String, + val type: MessageDisplayType = MessageDisplayType.INFO, + val action: MessageAction? = null + ) : StatusState() +} + +// Priorities are now more distinct to ensure clear hierarchy. +enum class MessageDisplayType(val priority: Int) { + INFO(1), + INTERN(1), + LOADING(2), + SUCCESS(3), + ERROR(4), + ACTIONABLE_ERROR(5) +} + +/** + * TODO: Convert StatusViewModel to HiltViewModel + * + * This ViewModel needs to be converted to use Hilt for dependency injection. + * Currently it manually instantiates dependencies and uses a singleton pattern. + * + * Checklist: + * - [ ] Add @HiltViewModel annotation to the class + * - [ ] Change constructor to use @Inject and inject dependencies: + * - StatusMessageService + * - [ ] Create/update RepositoryModule.kt to provide singleton instances of: + * - StatusMessageService + * - [ ] Modify companion object getInstance() method to use Hilt's EntryPoint system + * - [ ] Create StatusViewModelEntryPoint interface for accessing the singleton instance + * - [ ] Remove manual dependency instantiation from constructor and init block + * - [ ] Update all places where StatusViewModel.getInstance() is called to ensure compatibility + * - [ ] Test that the ViewModel works correctly with dependency injection + */ +class StatusViewModel(application: Application) : AndroidViewModel(application) { + companion object { + @Volatile private var INSTANCE: StatusViewModel? = null + fun getInstance(application: Application): StatusViewModel = INSTANCE ?: synchronized(this) { + INSTANCE ?: StatusViewModel(application).also { INSTANCE = it } + } + } + + private val messageQueue: Queue> = LinkedList() + private var messageDisplayJob: Job? = null + private var activeLoadingJob: Job? = null + private var messageIdCounter = 0L + + private val _status = MutableStateFlow(StatusState.Hidden) + val status: StateFlow = _status.asStateFlow() + + init { + viewModelScope.launch { + StatusMessageService.actions.collect { action -> + handleAction(action) + } + } + } + + private fun handleAction(action: StatusAction) { + Log.d("StatusViewModel", "Received action: $action") + when (action) { + is StatusAction.ShowMessage -> showMessageInternal(action.text, action.type, action.timeoutInSeconds) + is StatusAction.ShowActionableMessage -> showPermanentActionableMessageInternal(action.text, action.type, action.action) + is StatusAction.ShowPermanentMessage -> showPermanentMessageInternal(action.text, action.type) + is StatusAction.PerformLoadingOperation -> performLoadingOperationInternal(action.block) + is StatusAction.CancelLoadingOperation -> cancelLoadingOperationInternal() + is StatusAction.CancelPermanentMessage -> cancelPermanentMessageInternal() + is StatusAction.HideMessageBar -> hideMessageBarInternal() + is StatusAction.CancelAllMessages -> cancelAllMessagesInternal() + } + } + + fun showApiKeyMissingMessage() = viewModelScope.launch { + StatusMessageService.trigger( + StatusAction.ShowActionableMessage( + text = "API Key is missing or invalid.", + type = MessageDisplayType.ACTIONABLE_ERROR, + action = MessageAction.NAVIGATE_TO_API_KEYS + ) + ) + } + + private fun showPermanentActionableMessageInternal(message: String, type: MessageDisplayType, action: MessageAction) { + cancelAllOperations() // Clear any other messages or loaders. + _status.value = StatusState.Message(messageIdCounter++, message, type, action) + } + + private fun showPermanentMessageInternal(message: String, type: MessageDisplayType) { + cancelAllOperations() + _status.value = StatusState.Message(messageIdCounter++, message, type, action = null) + } + + fun showPermanentMessage(message: String, type: MessageDisplayType) = viewModelScope.launch { + StatusMessageService.trigger(StatusAction.ShowPermanentMessage(message, type)) + } + + fun cancelPermanentMessage() = viewModelScope.launch { + StatusMessageService.trigger(StatusAction.CancelPermanentMessage) + } + + fun performLoadingOperation(block: suspend () -> Unit) = viewModelScope.launch { + StatusMessageService.trigger(StatusAction.PerformLoadingOperation(block)) + } + + fun cancelLoadingOperation() = viewModelScope.launch { + StatusMessageService.trigger(StatusAction.CancelLoadingOperation) + } + + fun showInfoMessage(message: String, timeoutInSeconds: Int = 3) = viewModelScope.launch { + StatusMessageService.trigger(StatusAction.ShowMessage(message, MessageDisplayType.INFO, timeoutInSeconds)) + } + + fun showLoadingMessage(message: String, timeoutInSeconds: Int = 0) = viewModelScope.launch { // Default timeout 0 for indefinite + StatusMessageService.trigger(StatusAction.ShowMessage(message, MessageDisplayType.LOADING, timeoutInSeconds)) + } + + fun showErrorMessage(message: String, timeoutInSeconds: Int = 5) = viewModelScope.launch { // Default timeout 5 for errors + StatusMessageService.trigger(StatusAction.ShowMessage(message, MessageDisplayType.ERROR, timeoutInSeconds)) + } + + fun showSuccessMessage(message: String, timeoutInSeconds: Int = 3) = viewModelScope.launch { + StatusMessageService.trigger(StatusAction.ShowMessage(message, MessageDisplayType.SUCCESS, timeoutInSeconds)) + } + + fun hideMessageBar() = viewModelScope.launch { + StatusMessageService.trigger(StatusAction.HideMessageBar) + } + + fun cancelAllMessages() = viewModelScope.launch { + StatusMessageService.trigger(StatusAction.CancelAllMessages) + } + + private fun cancelPermanentMessageInternal() { + if (_status.value is StatusState.Message) { + // This logic can be simplified or adjusted based on desired behavior for permanent messages + _status.value = StatusState.Hidden + processNextMessageInQueue() + } + } + + private fun performLoadingOperationInternal(block: suspend () -> Unit) { + cancelAllOperations() + _status.value = StatusState.Loading + Log.d("StatusViewModel", "Starting loading operation.") + activeLoadingJob = viewModelScope.launch { + try { + block() + Log.d("StatusViewModel", "Loading operation completed successfully.") + } catch (e: CancellationException) { + Log.i("StatusViewModel", "Loading operation was cancelled.") + } catch (e: Exception) { + Log.e("StatusViewModel", "Loading operation failed.", e) + showErrorMessage("Operation failed: ${e.localizedMessage ?: "Unknown error"}") + } finally { + if (activeLoadingJob == this.coroutineContext[Job]) { + if (_status.value == StatusState.Loading) { + _status.value = StatusState.Hidden + } + activeLoadingJob = null + processNextMessageInQueue() + } + } + } + } + + private fun cancelLoadingOperationInternal() { + activeLoadingJob?.cancel() + activeLoadingJob = null + if (_status.value == StatusState.Loading || (_status.value as? StatusState.Message)?.type == MessageDisplayType.LOADING) { + _status.value = StatusState.Hidden + processNextMessageInQueue() + } + } + + // --- REVISED LOGIC --- + private fun showMessageInternal(message: String, type: MessageDisplayType, timeoutInSeconds: Int) { + val currentState = _status.value + val currentPriority = (currentState as? StatusState.Message)?.type?.priority ?: -1 + + // If a high-priority message arrives, it interrupts any lower-priority one. + if (type.priority >= currentPriority) { + messageDisplayJob?.cancel() // Cancel the current display job + messageQueue.clear() // Clear pending lower-priority messages + messageQueue.offer(Pair(message, type)) + processNextMessageInQueue(timeoutInSeconds) + } else if (activeLoadingJob?.isActive != true) { + // Queue if lower priority and no full-screen loading is active + messageQueue.offer(Pair(message, type)) + if (currentState == StatusState.Hidden) { + processNextMessageInQueue(timeoutInSeconds) + } + } else { + Log.d("StatusViewModel", "Full-screen loading active or lower priority. Queuing message: $message") + messageQueue.offer(Pair(message, type)) + } + } + + private fun hideMessageBarInternal() { + messageDisplayJob?.cancel() + messageDisplayJob = null + if (_status.value is StatusState.Message) { + _status.value = StatusState.Hidden + } + if (activeLoadingJob?.isActive != true) { + processNextMessageInQueue() + } + } + + private fun cancelAllMessagesInternal() { + Log.d("StatusViewModel", "Cancelling all messages.") + messageQueue.clear() + messageDisplayJob?.cancel() + messageDisplayJob = null + // Do not cancel activeLoadingJob here unless that's the desired behavior. + // Assuming CancelAllMessages is for the message bar only. + if (_status.value is StatusState.Message) { + _status.value = StatusState.Hidden + } + } + + private fun cancelAllOperations() { + messageQueue.clear() + messageDisplayJob?.cancel() + messageDisplayJob = null + activeLoadingJob?.cancel() + activeLoadingJob = null + _status.value = StatusState.Hidden + } + + // --- REVISED LOGIC --- + private fun processNextMessageInQueue(timeoutInSeconds: Int = 3) { + if (activeLoadingJob?.isActive == true) { + Log.d("StatusViewModel", "Full-screen loading is active, not processing message queue now.") + return + } + if (messageDisplayJob?.isActive == true) { + // A message is already being displayed and its timeout is active. + return + } + + val messagePair = messageQueue.poll() + if (messagePair != null) { + val currentId = messageIdCounter++ + val (text, type) = messagePair + _status.value = StatusState.Message(currentId, text, type) + + val timeoutMillis = timeoutInSeconds * 1000L + + if (timeoutMillis > 0) { + messageDisplayJob = viewModelScope.launch { + delay(timeoutMillis) + // Ensure we are hiding the correct message before proceeding. + if ((_status.value as? StatusState.Message)?.id == currentId) { + _status.value = StatusState.Hidden + // After hiding, check if there's another message to show. + processNextMessageInQueue() + } + } + } + } else { + if (_status.value is StatusState.Message) { + _status.value = StatusState.Hidden + } + } + } + + override fun onCleared() { + super.onCleared() + Log.d("StatusViewModel", "onCleared called. Cancelling all operations.") + cancelAllOperations() + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/TranslationViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/TranslationViewModel.kt new file mode 100644 index 0000000..1418593 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/TranslationViewModel.kt @@ -0,0 +1,344 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import eu.gaudian.translator.model.LanguageModel +import eu.gaudian.translator.model.TranslationHistoryItem +import eu.gaudian.translator.model.repository.ApiRepository +import eu.gaudian.translator.model.repository.DataStoreKeys +import eu.gaudian.translator.model.repository.LanguageRepository +import eu.gaudian.translator.model.repository.dataStore +import eu.gaudian.translator.model.repository.loadObjectList +import eu.gaudian.translator.model.repository.saveObjectList +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.TextToSpeechHelper +import eu.gaudian.translator.utils.TranslationService +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch + +/** + * TODO: Convert TranslationViewModel to HiltViewModel + * + * This ViewModel needs to be converted to use Hilt for dependency injection. + * Currently it manually instantiates dependencies in the constructor. + * + * Checklist: + * - [ ] Add @HiltViewModel annotation to the class + * - [ ] Change constructor to use @Inject and inject dependencies: + * - TranslationService + * - ApiRepository + * - TextToSpeechHelper (if needed) + * - [ ] Create/update RepositoryModule.kt to provide singleton instances of: + * - TranslationService + * - ApiRepository + * - [ ] Modify companion object getInstance() method to use Hilt's EntryPoint system + * - [ ] Create TranslationViewModelEntryPoint interface for accessing the singleton instance + * - [ ] Remove manual dependency instantiation from constructor and init block + * - [ ] Update all places where TranslationViewModel.getInstance() is called to ensure compatibility + * - [ ] Test that the ViewModel works correctly with dependency injection + */ +class TranslationViewModel(application: Application) : AndroidViewModel(application) { + + // For back/forward navigation of history in the UI (like editors) + val languageRepository = LanguageRepository(application) + + private val _historyCursor = MutableStateFlow(-1) + + private val _canGoBack = MutableStateFlow(false) + val canGoBack: StateFlow get() = _canGoBack + + private val _canGoForward = MutableStateFlow(false) + val canGoForward: StateFlow get() = _canGoForward + + val historyCursor: StateFlow get() = _historyCursor + + private val translationService = TranslationService(application) + private val apiRepository = ApiRepository(application) + + private val _inputText = MutableStateFlow("") + val inputText: StateFlow get() = _inputText + + private val _translatedText = MutableStateFlow(null) + val translatedText: StateFlow get() = _translatedText + + private val _translatedVocabulary = MutableStateFlow(null) + val translatedVocabulary: StateFlow get() = _translatedVocabulary + + private val _translationHistory = MutableStateFlow>(mutableListOf()) + val translationHistory: StateFlow> get() = _translationHistory + + // Explanation support + private val _showExplanation = MutableStateFlow(false) + val showExplanation: StateFlow get() = _showExplanation + + private val _explanationText = MutableStateFlow(null) + val explanationText: StateFlow get() = _explanationText + + private val _selectedTranslationModel = MutableStateFlow(null) + val selectedTranslationModel: StateFlow get() = _selectedTranslationModel + + private val _isTranslating = MutableStateFlow(false) + val isTranslating: StateFlow get() = _isTranslating + + init { + viewModelScope.launch { + apiRepository.getTranslationModel().collect { model -> + _selectedTranslationModel.value = model + } + } + loadTranslationHistory() + } + + fun setInputText(text: String) { + _inputText.value = text + } + + fun clearInputAndOutputText() { + _inputText.value = "" + _translatedText.value = "" + _explanationText.value = null + + } + + fun setShowExplanation(show: Boolean) { + _showExplanation.value = show + if (!show) { + _explanationText.value = null + } else { + // Try to compute explanation if we already have a translation and input + val source = _inputText.value + val translated = _translatedText.value + if (source.isNotBlank() && !translated.isNullOrBlank()) { + viewModelScope.launch { + translationService.explainTranslation(source, translated) + .onSuccess { _explanationText.value = it } + .onFailure { Log.e("TranslationViewModel", "Explanation failed: ${it.message}") } + } + } + } + } + + fun toggleExplanation() { + setShowExplanation(!_showExplanation.value) + } + + fun translateSentence(sentence: String) { + val sentenceToTranslate = sentence.ifEmpty { _inputText.value } + if (sentenceToTranslate.isBlank()) { + return + } + + if (selectedTranslationModel.value == null) { + Log.e("TranslationViewModel", "Cannot translate because no model is selected.") + return + } + + + + viewModelScope.launch { + _isTranslating.value = true + _explanationText.value = null + + translationService.translateSentence(sentenceToTranslate) + .onSuccess { historyItem -> + _translatedText.value = historyItem.text + // We copy the item to ensure we capture the specific inputs used right now + addToTranslationHistory( + historyItem.copy( + sourceText = sentenceToTranslate, + sourceLanguageCode = languageRepository.loadSelectedSourceLanguage().first()?.nameResId, + targetLanguageCode = languageRepository.loadSelectedTargetLanguage().first()?.nameResId + ) + ) + Log.d("TranslationViewModel", "Translation successful: $historyItem") + + if (_showExplanation.value) { + translationService.explainTranslation(sentenceToTranslate, historyItem.text) + .onSuccess { explanation -> + _explanationText.value = explanation + } + .onFailure { exception -> + Log.e("TranslationViewModel", "Explanation failed: ${exception.message}") + } + } + } + .onFailure { exception -> + Log.e("TranslationViewModel", "Translation failed: ${exception.message}") + } + + _isTranslating.value = false + } + } + + fun translateVocabulary(word: String) { + viewModelScope.launch { + translationService.translateVocabulary(word) + .onSuccess { historyItem -> + _translatedVocabulary.value = historyItem.text + Log.d("TranslationViewModel", "Translation successful: $historyItem") + } + .onFailure { exception -> + Log.e("TranslationViewModel", "Translation failed: ${exception.message}") + } + } + } + + suspend fun getMultipleTranslations(sentence: String, contextPhrase: String? = null): Result> { + return translationService.getMultipleSynonyms(sentence, contextPhrase) + .also { result -> + result + .onSuccess { translations -> + Log.d("TranslationViewModel", "Multiple translations successful: $translations") + } + .onFailure { exception -> + Log.e("TranslationViewModel", "Multiple translations failed: ${exception.message}") + } + } + } + + fun applyAlternative(originalWord: String, chosenAlternative: String) { + val source = _inputText.value + val current = _translatedText.value + if (source.isBlank() || current.isNullOrBlank()) return + + viewModelScope.launch { + _isTranslating.value = true + translationService.rephraseWithAlternative(source, current, originalWord, chosenAlternative) + .onSuccess { updated -> + _translatedText.value = updated + if (_showExplanation.value) { + translationService.explainTranslation(source, updated) + .onSuccess { _explanationText.value = it } + .onFailure { Log.e("TranslationViewModel", "Explanation failed: ${it.message}") } + } + } + .onFailure { ex -> + Log.e("TranslationViewModel", "Rephrase with alternative failed: ${ex.message}") + } + _isTranslating.value = false + } + } + + private fun addToTranslationHistory(item: TranslationHistoryItem) { + viewModelScope.launch { + val currentHistory = _translationHistory.value + val newHistory = currentHistory.toMutableList() + val lang = languageRepository.loadSelectedTargetLanguage().first() + val playable = TextToSpeechHelper.isPlayable(getApplication(), lang) + + Log.d("TranslationViewModel", "Adding item to history: $item, item is playable is $playable") + + // Create a new item with updated timestamp and playable status + // Note: We do NOT pass translatedText here as it was removed from the data class + val newItem = item.copy( + sourceText = item.sourceText.ifEmpty { _inputText.value }, + playable = playable, + timestamp = System.currentTimeMillis() + ) + + newHistory.add(0, newItem) + _translationHistory.value = newHistory + _historyCursor.value = if (newHistory.isNotEmpty()) 0 else -1 + updateBackForwardState() + saveTranslationHistory() + } + } + + fun deleteTranslationHistoryItem(item: TranslationHistoryItem) { + viewModelScope.launch { + val currentHistory = _translationHistory.value + val newHistory = currentHistory.toMutableList() + // We compare IDs or references. Since data class equals works on fields, this should work. + // If you added an ID field, use that for safer removal. + if (newHistory.remove(item)) { + _translationHistory.value = newHistory + val size = newHistory.size + _historyCursor.value = if (size == 0) -1 else _historyCursor.value.coerceAtMost(size - 1) + updateBackForwardState() + saveTranslationHistory() + Log.d("TranslationViewModel", "Item deleted from history: $item") + } else { + Log.w("TranslationViewModel", "Item not found in history: $item") + } + } + } + + private fun saveTranslationHistory() { + viewModelScope.launch { + val history = _translationHistory.value + getApplication().dataStore.saveObjectList(DataStoreKeys.TRANSLATION_HISTORY_KEY, history) + } + } + + fun clearTranslationHistory() { + viewModelScope.launch { + _translationHistory.value = mutableListOf() + _historyCursor.value = -1 + _inputText.value = "" + _translatedText.value = "" + _explanationText.value = null + updateBackForwardState() + saveTranslationHistory() + } + } + + private fun loadTranslationHistory() { + viewModelScope.launch { + val history = getApplication().dataStore.loadObjectList(DataStoreKeys.TRANSLATION_HISTORY_KEY).first() + _translationHistory.value = history.toMutableList() + // Start with a fresh/empty screen; do not preload the last translation + _historyCursor.value = -1 + _explanationText.value = null + updateBackForwardState() + } + } + + private fun updateBackForwardState() { + val size = _translationHistory.value.size + val cursor = _historyCursor.value + // Allow going back from the "fresh" state (cursor == -1) to the most recent history item + _canGoBack.value = size > 0 && (cursor == -1 || (cursor < size - 1 && cursor >= 0)) + _canGoForward.value = size > 0 && cursor > 0 + } + + fun goBackInHistory() { + val size = _translationHistory.value.size + if (size == 0) return + val newCursor = (_historyCursor.value + 1).coerceAtMost(size - 1) + if (newCursor != _historyCursor.value) { + _historyCursor.value = newCursor + val item = _translationHistory.value[newCursor] + applyHistoryItem(item) + } + } + + fun goForwardInHistory() { + val size = _translationHistory.value.size + if (size == 0) return + val newCursor = (_historyCursor.value - 1).coerceAtLeast(0) + if (newCursor != _historyCursor.value) { + _historyCursor.value = newCursor + val item = _translationHistory.value[newCursor] + applyHistoryItem(item) + } + } + + fun applyHistoryItem(item: TranslationHistoryItem) { + // Find the index of this item to set the cursor correctly + val index = _translationHistory.value.indexOfFirst { it.id == item.id } + + _inputText.value = item.sourceText + _translatedText.value = item.text + _explanationText.value = null + + if (index >= 0) { + _historyCursor.value = index + } + updateBackForwardState() + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/VocabularyExerciseViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/VocabularyExerciseViewModel.kt new file mode 100644 index 0000000..96d21f4 --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/VocabularyExerciseViewModel.kt @@ -0,0 +1,489 @@ +package eu.gaudian.translator.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.model.repository.VocabularyRepository +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.StringHelper +import eu.gaudian.translator.view.vocabulary.VocabularyExerciseAction +import eu.gaudian.translator.view.vocabulary.VocabularyExerciseState +import eu.gaudian.translator.view.vocabulary.VocabularyExerciseType +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toLocalDateTime +import javax.inject.Inject +import kotlin.random.Random +import kotlin.time.Clock +import kotlin.time.ExperimentalTime + +enum class ScreenState { + START, + EXERCISE, + RESULT +} + +data class ExerciseConfig( + val shuffleCards: Boolean = false, + val shuffleLanguages: Boolean = false, + val trainingMode: Boolean = false, + val dueTodayOnly: Boolean = false, + val selectedExerciseTypes: Set = setOf(VocabularyExerciseType.GUESSING), + val exerciseItemCount: Int = 0, + val originalExerciseItems: List = emptyList(), + val originLanguageId: Int? = null, + val targetLanguageId: Int? = null +) + +data class ExerciseResults( + val finalScore: Int = 0, + val finalWrongAnswers: Int = 0 +) + +/** + * VocabularyExerciseViewModel - Hilt-enabled ViewModel for vocabulary exercises + * + * This ViewModel manages vocabulary exercise sessions including different exercise types, + * tracking progress, and managing exercise state across configuration changes. + */ +@HiltViewModel +class VocabularyExerciseViewModel @Inject constructor( + application: Application, +) : AndroidViewModel(application) { + + private val vocabularyRepository = VocabularyRepository.getInstance(application) + + + private val languageConfigViewModel = LanguageConfigViewModel(application) + private val languageViewModel = LanguageViewModel(application) + + private val _exerciseState = MutableStateFlow(null) + val exerciseState: StateFlow = _exerciseState.asStateFlow() + + // Added StateFlows for tracking correct and wrong answers + private val _correctAnswers = MutableStateFlow(0) + val correctAnswers: StateFlow = _correctAnswers.asStateFlow() + + private val _wrongAnswers = MutableStateFlow(0) + val wrongAnswers: StateFlow = _wrongAnswers.asStateFlow() + + // Track which items were answered wrong for retry functionality + private val _wrongItems = MutableStateFlow>(emptySet()) + + private var items: List = emptyList() + // Working list for this exercise session to allow safe in-place swaps without duplication + private var currentItems: MutableList = mutableListOf() + private var currentIndex = 0 + private var exerciseTypes: Set = setOf(VocabularyExerciseType.GUESSING) + private var shuffleLanguages = false + + private val _trainingMode = MutableStateFlow(false) + val trainingMode: StateFlow = _trainingMode.asStateFlow() + + // Screen state management to survive configuration changes + private val _screenState = MutableStateFlow(ScreenState.START) + val screenState: StateFlow = _screenState.asStateFlow() + + // Exercise configuration state + private val _exerciseConfig = MutableStateFlow(ExerciseConfig()) + + // Exercise results state + private val _exerciseResults = MutableStateFlow(ExerciseResults()) + + // State to persist total items and original items across configuration changes + private val _totalItems = MutableStateFlow(0) + val totalItems: StateFlow = _totalItems.asStateFlow() + + private val _originalItems = MutableStateFlow>(emptyList()) + val originalItems: StateFlow> = _originalItems.asStateFlow() + + fun startExercise( + items: List, + types: Set, + shuffleLanguages: Boolean + ) { + // Reset counters for the new exercise session + _correctAnswers.value = 0 + _wrongAnswers.value = 0 + _wrongItems.value = emptySet() + + this.items = items + this.currentItems = items.shuffled().toMutableList() // Shuffle working list at the start of the exercise + this.currentIndex = 0 + this.exerciseTypes = types.ifEmpty { setOf(VocabularyExerciseType.GUESSING) } + this.shuffleLanguages = shuffleLanguages + loadExercise() + } + + // Start exercise with only the wrong items from previous session + fun startRetryExercise( + originalItems: List, + types: Set, + shuffleLanguages: Boolean + ) { + // Capture wrong items before resetting counters + val wrongItemIds = _wrongItems.value + val retryItems = originalItems.filter { it.id in wrongItemIds } + + // Reset counters for the new exercise session + _correctAnswers.value = 0 + _wrongAnswers.value = 0 + _wrongItems.value = emptySet() + + this.items = retryItems + this.currentItems = retryItems.shuffled().toMutableList() + this.currentIndex = 0 + this.exerciseTypes = types.ifEmpty { setOf(VocabularyExerciseType.GUESSING) } + this.shuffleLanguages = shuffleLanguages + loadExercise() + } + + fun onAction(action: VocabularyExerciseAction) { + viewModelScope.launch { + when (action) { + is VocabularyExerciseAction.Reveal -> revealAnswer() + is VocabularyExerciseAction.Submit -> checkAnswer(action.answer) + is VocabularyExerciseAction.Next -> nextItem() + is VocabularyExerciseAction.UpdateWordJumble -> updateJumbledWord(action.assembledWord) + } + } + } + + private fun isSentenceItem(item: VocabularyItem): Boolean { + return StringHelper.isSentenceLoose(item.wordFirst) || StringHelper.isSentenceLoose(item.wordSecond) + } + + private fun loadExercise() { + if (currentIndex < currentItems.size) { + // Ensure item categories align with exercise type by attempting a swap instead of replacement + val randomType = exerciseTypes.random() + val config = _exerciseConfig.value + + // Try to swap based on desired categories + val currentIsSentence = isSentenceItem(currentItems[currentIndex]) + when (randomType) { + VocabularyExerciseType.WORD_JUMBLE, VocabularyExerciseType.SPELLING -> { + // Prefer non-sentence. If current is sentence, try to find a later non-sentence to swap with. + if (currentIsSentence) { + val swapIndex = (currentIndex + 1 until currentItems.size).firstOrNull { !isSentenceItem(currentItems[it]) } + if (swapIndex != null) { + val tmp = currentItems[currentIndex] + currentItems[currentIndex] = currentItems[swapIndex] + currentItems[swapIndex] = tmp + } + } + } + VocabularyExerciseType.GUESSING, VocabularyExerciseType.MULTIPLE_CHOICE -> { + // Prefer sentence. If current is non-sentence, try to find a later sentence to swap with. + if (!currentIsSentence) { + val swapIndex = (currentIndex + 1 until currentItems.size).firstOrNull { isSentenceItem(currentItems[it]) } + if (swapIndex != null) { + val tmp = currentItems[currentIndex] + currentItems[currentIndex] = currentItems[swapIndex] + currentItems[swapIndex] = tmp + } + } + } + } + + val itemToUse = currentItems[currentIndex] + + // Determine language switching based on selected origin and target languages + val isSwitched = when { + // If specific languages are selected, use them to determine switching + config.originLanguageId != null || config.targetLanguageId != null -> { + val originMatchesFirst = config.originLanguageId == null || config.originLanguageId == itemToUse.languageFirstId + val targetMatchesFirst = config.targetLanguageId == null || config.targetLanguageId == itemToUse.languageFirstId + val originMatchesSecond = config.originLanguageId == null || config.originLanguageId == itemToUse.languageSecondId + val targetMatchesSecond = config.targetLanguageId == null || config.targetLanguageId == itemToUse.languageSecondId + + val itemMatchesForward = originMatchesFirst && targetMatchesSecond + val itemMatchesReversed = originMatchesSecond && targetMatchesFirst + + // If the item doesn't match the selected language pair (even partially), don't use it + if (!(itemMatchesForward || itemMatchesReversed)) { + // Try to find a matching item + val matchingIndex = (currentIndex + 1 until currentItems.size).firstOrNull { index -> + val item = currentItems[index] // Get the VocabularyItem using the index + val itemOriginMatchesFirst = config.originLanguageId == null || config.originLanguageId == item.languageFirstId + val itemTargetMatchesFirst = config.targetLanguageId == null || config.targetLanguageId == item.languageFirstId + val itemOriginMatchesSecond = config.originLanguageId == null || config.originLanguageId == item.languageSecondId + val itemTargetMatchesSecond = config.targetLanguageId == null || config.targetLanguageId == item.languageSecondId + (itemOriginMatchesFirst && itemTargetMatchesSecond) || (itemOriginMatchesSecond && itemTargetMatchesFirst) + } + + if (matchingIndex != null) { + val tmp = currentItems[currentIndex] + currentItems[currentIndex] = currentItems[matchingIndex] + currentItems[matchingIndex] = tmp + + // Check if we need to switch the new item + val newItem = currentItems[currentIndex] + // Switch if origin is specified and it's the second language + config.originLanguageId != null && config.originLanguageId == newItem.languageSecondId + } else { + // No matching item found, fall back to random behavior + if (shuffleLanguages) Random.nextBoolean() else (config.originLanguageId != null && config.originLanguageId == itemToUse.languageSecondId) + } + } else { + // Item matches, determine if we need to switch + // Switch if origin is specified and it's not the first language, or if target is specified and it IS the first language + (config.originLanguageId != null && config.originLanguageId != itemToUse.languageFirstId) || + (config.originLanguageId == null && config.targetLanguageId != null && config.targetLanguageId == itemToUse.languageFirstId) + } + } + // Fallback to original random behavior + else -> if (shuffleLanguages) Random.nextBoolean() else false + } + + _exerciseState.value = when (randomType) { + VocabularyExerciseType.GUESSING -> VocabularyExerciseState.Guessing( + item = itemToUse, + isSwitched = isSwitched + ) + VocabularyExerciseType.SPELLING -> VocabularyExerciseState.Spelling( + item = itemToUse, + isSwitched = isSwitched + ) + VocabularyExerciseType.MULTIPLE_CHOICE -> { + val correctAnswer = if (isSwitched) itemToUse.wordFirst else itemToUse.wordSecond + val options = generateMultipleChoiceOptions(correctAnswer, isSwitched) + VocabularyExerciseState.MultipleChoice( + item = itemToUse, + isSwitched = isSwitched, + options = options + ) + } + VocabularyExerciseType.WORD_JUMBLE -> { + val wordToJumble = if (isSwitched) itemToUse.wordFirst else itemToUse.wordSecond + VocabularyExerciseState.WordJumble( + item = itemToUse, + isSwitched = isSwitched, + jumbledLetters = wordToJumble.toList().mapIndexed { index, char -> Pair(char, index) }.shuffled() + ) + } + } + @Suppress("HardCodedStringLiteral") + Log.d("ExerciseDebug", "Item: ${itemToUse.wordFirst} (${itemToUse.languageFirstId}) / ${itemToUse.wordSecond} (${itemToUse.languageSecondId}), Switched: $isSwitched") + @Suppress("HardCodedStringLiteral") + Log.d("ExerciseDebug", "Origin Lang: ${config.originLanguageId}, Target Lang: ${config.targetLanguageId}") + + _exerciseState.value = when (randomType) { + VocabularyExerciseType.GUESSING -> VocabularyExerciseState.Guessing( + item = itemToUse, + isSwitched = isSwitched + ) + VocabularyExerciseType.SPELLING -> VocabularyExerciseState.Spelling( + item = itemToUse, + isSwitched = isSwitched + ) + VocabularyExerciseType.MULTIPLE_CHOICE -> { + val correctAnswer = if (isSwitched) itemToUse.wordFirst else itemToUse.wordSecond + val options = generateMultipleChoiceOptions(correctAnswer, isSwitched) + VocabularyExerciseState.MultipleChoice( + item = itemToUse, + isSwitched = isSwitched, + options = options + ) + } + VocabularyExerciseType.WORD_JUMBLE -> { + val wordToJumble = if (isSwitched) itemToUse.wordFirst else itemToUse.wordSecond + VocabularyExerciseState.WordJumble( + item = itemToUse, + isSwitched = isSwitched, + jumbledLetters = wordToJumble.toList().mapIndexed { index, char -> Pair(char, index) }.shuffled() + ) + } + } + } else { + _exerciseState.value = null // End of exercise + } + } + + private fun generateMultipleChoiceOptions(correctAnswer: String, isSwitched: Boolean): List { + val options = mutableSetOf(correctAnswer) + val allWords = currentItems.map { if (isSwitched) it.wordFirst else it.wordSecond } + + val sameStartLetterWords = allWords.filter { it.firstOrNull() == correctAnswer.firstOrNull() && it != correctAnswer } + options.addAll(sameStartLetterWords.take(3)) + + if (options.size < 4) { + val sameLengthWords = allWords.filter { it.length == correctAnswer.length && it != correctAnswer && !options.contains(it) } + options.addAll(sameLengthWords.take(4 - options.size)) + } + + if (options.size < 4) { + val vowelCount = correctAnswer.count { "aeiouAEIOU".contains(it) } + val similarVowelWords = allWords.filter { it.count { v -> "aeiouAEIOU".contains(v) } == vowelCount && it != correctAnswer && !options.contains(it) } + options.addAll(similarVowelWords.take(4 - options.size)) + } + + if (options.size < 4) { + val distractors = allWords + .filter { it != correctAnswer && !options.contains(it) } + .shuffled() + .take(4 - options.size) + options.addAll(distractors) + } + + + return options.shuffled().take(4) + } + + private fun revealAnswer() { + _exerciseState.value = when (val state = _exerciseState.value) { + is VocabularyExerciseState.Guessing -> state.copy(isRevealed = true) + is VocabularyExerciseState.Spelling -> state.copy(isRevealed = true) + is VocabularyExerciseState.MultipleChoice -> state.copy(isRevealed = true) + is VocabularyExerciseState.WordJumble -> state.copy(isRevealed = true) + null -> null + } + } + + private fun checkAnswer(answer: Any) { + viewModelScope.launch { + val state = _exerciseState.value ?: return@launch + val correctAnswer = if (state.isSwitched) state.item.wordFirst else state.item.wordSecond + + // Check if the state is a Spelling type before proceeding with specific logic + val isCorrect = when (state) { + is VocabularyExerciseState.Spelling -> { + val userAnswer = (answer as String).trim() + val languageId = if (state.isSwitched) state.item.languageFirstId else state.item.languageSecondId + val language = languageViewModel.getLanguageById(languageId ?: 0) + + // Get articles for the language + val articles = languageConfigViewModel.getArticlesForLanguage(language.code) + + // Normalize and split possible answers using helper + val normalizedCorrectAnswer = StringHelper.normalizeAnswer(correctAnswer) + val possibleAnswers = StringHelper.possibleAnswersFromSlash(normalizedCorrectAnswer) + + val userNormalizedAnswer = StringHelper.normalizeAnswer(userAnswer) + + // Check if the user's answer matches any of the possible correct answers + val isDirectMatch = possibleAnswers.any { + it.equals(userNormalizedAnswer, ignoreCase = true) + } + + // Check if user answer with a removed article matches any possible correct answer + val isMatchWithArticleRemoved = if (articles.isNotEmpty()) { + val userWithoutArticle = StringHelper.removeLeadingArticlesOneOf(userNormalizedAnswer, articles) + possibleAnswers.any { it.equals(userWithoutArticle, ignoreCase = true) } + } else { + false + } + + //TODO val hasGuessedSynonym = vocabularyRepository.getSynonymsForItem(state.item.id) + + isDirectMatch || isMatchWithArticleRemoved + } + is VocabularyExerciseState.Guessing -> answer as Boolean + is VocabularyExerciseState.MultipleChoice -> (answer as String).equals(correctAnswer, ignoreCase = true) + is VocabularyExerciseState.WordJumble -> (answer as String).equals(correctAnswer, ignoreCase = true) + } + + if (isCorrect) { + _correctAnswers.value++ + } else { + _wrongAnswers.value++ + // Track the wrong item for retry functionality + _wrongItems.value += state.item.id + } + + updateVocabularyItemState(state.item.id, isCorrect) + + _exerciseState.value = when (state) { + is VocabularyExerciseState.Guessing -> state.copy(isCorrect = isCorrect, isRevealed = true) + is VocabularyExerciseState.Spelling -> state.copy(isCorrect = isCorrect, isRevealed = true, userAnswer = answer as String) + is VocabularyExerciseState.MultipleChoice -> state.copy(isCorrect = isCorrect, isRevealed = true, selectedAnswer = answer as String) + is VocabularyExerciseState.WordJumble -> state.copy(isCorrect = isCorrect, isRevealed = true) + } + } + } + + private fun updateJumbledWord(assembledWord: List>) { + _exerciseState.value = when (val state = _exerciseState.value) { + is VocabularyExerciseState.WordJumble -> state.copy(assembledWord = assembledWord) + else -> state + } + } + + private fun nextItem() { + currentIndex++ + loadExercise() + } + + fun onTrainingModeChanged(value: Boolean) { + _trainingMode.value = value + } + + fun startExerciseWithConfig( + items: List, + config: ExerciseConfig + ) { + _exerciseConfig.value = config + _totalItems.value = items.size + _originalItems.value = items + startExercise(items, config.selectedExerciseTypes, config.shuffleLanguages) + _screenState.value = ScreenState.EXERCISE + } + + fun finishExercise(score: Int, wrongAnswers: Int) { + _exerciseResults.value = ExerciseResults(score, wrongAnswers) + _screenState.value = ScreenState.RESULT + } + + fun resetExercise() { + _screenState.value = ScreenState.START + _exerciseConfig.value = ExerciseConfig() + _exerciseResults.value = ExerciseResults() + _correctAnswers.value = 0 + _wrongAnswers.value = 0 + _wrongItems.value = emptySet() + _exerciseState.value = null + _totalItems.value = 0 + _originalItems.value = emptyList() + } + + fun retryWrongAnswers(originalItems: List) { + val wrongItemIds = _wrongItems.value + val retryItems = originalItems.filter { it.id in wrongItemIds } + + if (retryItems.isNotEmpty()) { + _totalItems.value = retryItems.size + _originalItems.value = originalItems + val config = _exerciseConfig.value.copy( + exerciseItemCount = retryItems.size, + originalExerciseItems = originalItems + ) + _exerciseConfig.value = config + startRetryExercise(originalItems, config.selectedExerciseTypes, config.shuffleLanguages) + _screenState.value = ScreenState.EXERCISE + } + } + + @OptIn(ExperimentalTime::class) + private fun updateVocabularyItemState(vocabularyItemId: Int, isCorrect: Boolean) { + viewModelScope.launch { + val item = vocabularyRepository.getVocabularyItemById(vocabularyItemId) + item?.let { + if (!trainingMode.value) { + vocabularyRepository.updateFlashcardStage(it, isCorrect) + } + if (isCorrect) { + val today = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).date + val currentCount = vocabularyRepository.getDailyCorrectCount(today) + vocabularyRepository.updateDailyCorrectCount(today, currentCount + 1) + } + } + } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/eu/gaudian/translator/viewmodel/VocabularyViewModel.kt b/app/src/main/java/eu/gaudian/translator/viewmodel/VocabularyViewModel.kt new file mode 100644 index 0000000..c9ea59d --- /dev/null +++ b/app/src/main/java/eu/gaudian/translator/viewmodel/VocabularyViewModel.kt @@ -0,0 +1,1327 @@ +@file:Suppress("HardCodedStringLiteral") + +package eu.gaudian.translator.viewmodel + +import android.app.Activity +import android.app.Application +import android.content.Intent +import android.net.Uri +import androidx.activity.result.ActivityResult +import androidx.activity.result.ActivityResultLauncher +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.viewModelScope +import eu.gaudian.translator.model.CardSet +import eu.gaudian.translator.model.Language +import eu.gaudian.translator.model.VocabularyCategory +import eu.gaudian.translator.model.VocabularyGrammarDetails +import eu.gaudian.translator.model.VocabularyItem +import eu.gaudian.translator.model.VocabularyStage +import eu.gaudian.translator.model.jsonParser +import eu.gaudian.translator.model.repository.LanguageListType +import eu.gaudian.translator.model.repository.LanguageRepository +import eu.gaudian.translator.model.repository.VocabularyFileSaver +import eu.gaudian.translator.model.repository.VocabularyRepository +import eu.gaudian.translator.utils.Log +import eu.gaudian.translator.utils.StringHelper +import eu.gaudian.translator.utils.VocabularyService +import eu.gaudian.translator.utils.dictionary.DictionaryService +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import kotlinx.serialization.json.Json +import kotlin.system.measureTimeMillis +import kotlin.time.ExperimentalTime + +/** + * TODO: Convert VocabularyViewModel to HiltViewModel + * + * This ViewModel needs to be converted to use Hilt for dependency injection. + * Currently it manually instantiates dependencies in the constructor and companion object. + * + * Checklist: + * - [ ] Add @HiltViewModel annotation to the class + * - [ ] Change constructor to use @Inject and inject dependencies: + * - ApiManager + * - ApiRepository + * - SettingsRepository + * - ApiLogRepository + * - VocabularyRepository + * - LanguageRepository + * - VocabularyService + * - StatusViewModel (consider if this should be injected or accessed differently) + * - LanguageConfigViewModel (consider if this should be injected or accessed differently) + * - [ ] Create/update RepositoryModule.kt to provide singleton instances of: + * - VocabularyRepository + * - LanguageRepository + * - VocabularyService + * - [ ] Modify companion object getInstance() method to use Hilt's EntryPoint system + * - [ ] Create VocabularyViewModelEntryPoint interface for accessing the singleton instance + * - [ ] Remove manual dependency instantiation from constructor and init block + * - [ ] Update all places where VocabularyViewModel.getInstance() is called to ensure compatibility + * - [ ] Test that the ViewModel works correctly with dependency injection + */ +class VocabularyViewModel(application: Application) : AndroidViewModel(application) { + fun extractUniqueWords(text: String): List { + if (text.isBlank()) return emptyList() + val words = text.lowercase() + .replace("\n", " ") + .split(Regex("""[^\p{L}\p{Nd}']+""")) + .map { it.trim('"', '\'', '(', ')', '[', ']', '{', '}', '.', ',', '!', '?', ';', ':') } + .filter { it.isNotBlank() } + return words.distinct() + } + + fun generateVocabularyFromText(text: String) { + viewModelScope.launch { + try { + val src = languageRepository.loadSelectedSourceLanguage().first() + val tgt = languageRepository.loadSelectedTargetLanguage().first() + if (src == null || tgt == null) { + statusViewModel.showErrorMessage("Source and target languages must be selected.") + return@launch + } + val words = extractUniqueWords(text) + if (words.isEmpty()) { + statusViewModel.showErrorMessage("No words found in the provided text.") + return@launch + } + _isGenerating.value = true + statusViewModel.showLoadingMessage("Translating ${words.size} words…") + val result = vocabularyItemService.translateWordsBatch(words, src, tgt) + result.onSuccess { items -> + _generatedVocabularyItems.value = items + statusViewModel.cancelLoadingOperation() + }.onFailure { ex -> + statusViewModel.showErrorMessage("Failed to translate words: ${ex.message}") + } + } catch (e: Exception) { + statusViewModel.showErrorMessage("Unexpected error: ${e.message}") + } finally { + _isGenerating.value = false + } + } + } + companion object { + @Volatile private var INSTANCE: VocabularyViewModel? = null + fun getInstance(application: Application): VocabularyViewModel = INSTANCE ?: synchronized(this) { + INSTANCE ?: VocabularyViewModel(application).also { INSTANCE = it } + } + } + @Suppress("PrivatePropertyName") + private val TAG = "VocabularyViewModel" + + + val statusViewModel = StatusViewModel.getInstance(application) + val languageConfigViewModel = LanguageConfigViewModel(application) + val vocabularyRepository = VocabularyRepository.getInstance(application) + val languageRepository = LanguageRepository(application) + + private val vocabularyItemService = VocabularyService(application) + + + val vocabularyItems: StateFlow> = vocabularyRepository.getAllVocabularyItemsFlow() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList()) + + val categories: StateFlow> = vocabularyRepository.getAllCategoriesFlow() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList()) + + val dueTodayItems: StateFlow> = vocabularyRepository.getDueTodayItemsFlow() + .stateIn( + scope = viewModelScope, + started = SharingStarted.Eagerly, + initialValue = emptyList() + ) + val languagesPresent: StateFlow> = vocabularyItems + .map { items -> + items.flatMap { listOf(it.languageFirstId, it.languageSecondId) }.toSet() + } + .distinctUntilChanged() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptySet()) + + + + val stageStats: StateFlow> = vocabularyItems.map { + vocabularyRepository.calculateStageStatistics() + } + .flowOn(Dispatchers.Default) + .stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5000), + initialValue = emptyList() + ) + + val stageMapping: StateFlow> = vocabularyRepository.loadStageMapping() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyMap()) + + val dictionaryService = DictionaryService(application) + + private val _cardSet = MutableStateFlow(null) + val cardSet: StateFlow = _cardSet.asStateFlow() + + private val fileSaver = VocabularyFileSaver(application, vocabularyRepository) + private val _saveStatus = MutableLiveData() + private lateinit var saveFileLauncher: ActivityResultLauncher + + private val _isGenerating = MutableStateFlow(false) + val isGenerating: StateFlow = _isGenerating.asStateFlow() + + private val _generationResult = MutableSharedFlow() + + + private val _generatedVocabularyItems = MutableStateFlow>(emptyList()) + val generatedVocabularyItems: StateFlow> = _generatedVocabularyItems.asStateFlow() + + private val _idFilter = MutableStateFlow?>(null) + + // Navigation state for VocabularyCardHost + private val _currentNavigationItems = MutableStateFlow>(emptyList()) + val currentNavigationItems: StateFlow> = _currentNavigationItems.asStateFlow() + + private val _currentNavigationPosition = MutableStateFlow(0) + val currentNavigationPosition: StateFlow = _currentNavigationPosition.asStateFlow() + + val newItemsCount: StateFlow = combine(vocabularyItems, stageMapping) { items, stageMap -> + if (stageMap.isEmpty() && items.isNotEmpty()) { + items.size + } else { + items.count { (stageMap[it.id] ?: VocabularyStage.NEW) == VocabularyStage.NEW } + } + }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), 0) + + /** + * A flow that contains a list of all vocabulary items that have at least one duplicate in the database. + * Duplicates are determined by comparing words and languages, ignoring order. This serves as the primary + * function to find all duplicates. + */ + val allDuplicateItems: StateFlow> = vocabularyItems + .map { items -> + // Group items by their content (words and languages, order-independent) + items.groupBy { + // The key for grouping is a pair of sets: one for words, one for language IDs. + Pair( + setOf(it.wordFirst.lowercase(), it.wordSecond.lowercase()), + setOf(it.languageFirstId, it.languageSecondId) + ) + } + .values // We only need the groups of items, not the keys + .filter { group -> group.size > 1 } // A group with more than one item signifies duplicates + .flatten() // Convert the list of duplicate groups into a a single list of all duplicate items + } + .flowOn(Dispatchers.Default) // Perform this potentially heavy computation on a background thread + .stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5000), + initialValue = emptyList() + ) + + /** + * A flow that provides the total count of duplicate vocabulary items. + * This is derived from the `allDuplicateItems` flow. + */ + val duplicateItemsCount: StateFlow = allDuplicateItems + .map { it.size } + .stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5000), + initialValue = 0 + ) + + var categoryVocabularyItemDelete: Int = 0 + + init { + Log.d(TAG, "Initializing VocabularyViewModel") + + viewModelScope.launch { + val duration = measureTimeMillis { + vocabularyRepository.initializeRepository() + } + Log.d(TAG, "init: Repositories initialized in ${duration}ms") + + val stageMap = stageMapping.first() + val itemCount = vocabularyItems.first().size + Log.d(TAG, "DEBUG: After init - Items: $itemCount, Stage mappings: ${stageMap.size}") + } + } + + /** + * Returns a Flow that emits a single VocabularyItem, updating only when that specific item changes. + * This is more efficient than observing the entire list for changes to a single item. + * + * @param id The ID of the vocabulary item to observe. + * @return A Flow that emits the VocabularyItem with the given ID, or null if it doesn't exist. + */ + fun getVocabularyItemFlow(id: Int): Flow { + Log.d(TAG, "Setting up a flow for item ID $id") + return vocabularyItems + .map { items -> + items.find { it.id == id } + } + .distinctUntilChanged() + } + + fun clearCardSet() { + _cardSet.value = null + } + + fun filterByIds(ids: List) { + _idFilter.value = ids.toSet() + } + fun clearFilter() { + _idFilter.value = null + } + + + fun addVocabularyItemToCategory(vocabularyItems: List, categoryId: Int) { + Log.d(TAG, "Adding ${vocabularyItems.size} vocabulary items to category $categoryId") + viewModelScope.launch { + try { + val duration = measureTimeMillis { + vocabularyItems.forEach { item -> + vocabularyRepository.addVocabularyItemToList(item.id, categoryId) + } + } + Log.d(TAG, "Successfully added vocabulary items to category in ${duration}ms") + } catch (e: Exception) { + statusViewModel.showErrorMessage("Error in addVocabularyItemToCategory: ${e.message}") + Log.e(TAG, "Error in addVocabularyItemToCategory: ${e.message}") + } + } + } + fun addVocabularyItemToCategories(vocabularyItems: List, categoryIds: List) { + Log.d("Adding vocabulary item to categories: $categoryIds") + for (categoryId in categoryIds) { + addVocabularyItemToCategory(vocabularyItems, categoryId) + } + } + + fun removeVocabularyItemsFromCategory(items: List, categoryId: Int) { + Log.d(TAG, "Removing ${items.size} vocabulary items from category $categoryId") + if (items.isEmpty()) return + + viewModelScope.launch { + try { + val duration = measureTimeMillis { + items.forEach { item -> + vocabularyRepository.removeVocabularyItemFromList(item.id, categoryId) + } + } + Log.d(TAG, "Successfully removed vocabulary items from category in ${duration}ms") + } catch (e: Exception) { + statusViewModel.showErrorMessage("Error removing items from category: ${e.message}") + Log.e(TAG, "Error in removeVocabularyItemsFromCategory: ${e.message}") + } + } + } + + fun addVocabularyItemToStage(vocabularyItems: List, stage: VocabularyStage) { + Log.d(TAG, "Adding ${vocabularyItems.size} vocabulary items to stage $stage") + viewModelScope.launch { + try { + + vocabularyRepository.changeVocabularyItemsStage(vocabularyItems, stage) + } catch (e: Exception) { + statusViewModel.showErrorMessage("Error in addVocabularyItemToStage: ${e.message}") + Log.e(TAG, "Error in addVocabularyItemToStage: ${e.message}") + } + } + } + + fun addVocabularyItems(items: List, categoryIds: List = emptyList()) { + Log.d(TAG, "Adding ${items.size} new vocabulary items, categories: $categoryIds") + viewModelScope.launch { + try { + val duration = measureTimeMillis { + vocabularyRepository.introduceVocabularyItems(items, categoryIds) + } + Log.d( + TAG, + "Successfully added ${items.size} new vocabulary items in ${duration}ms" + ) + } catch (e: Exception) { + statusViewModel.showErrorMessage("Error adding items: ${e.message}") + Log.e(TAG, "Error adding items: ${e.message}") + } + } + } + + + + fun deleteVocabularyItemsById(list: List) { + Log.d(TAG, "Deleting vocabulary items with IDs: $list") + viewModelScope.launch { + try { + val duration = measureTimeMillis { + vocabularyRepository.deleteVocabularyItemsByIds(list) + } + Log.d(TAG, "Successfully deleted vocabulary items in ${duration}ms") + } catch (e: Exception) { + statusViewModel.showErrorMessage("Error deleting items: ${e.message}") + Log.e(TAG, "Error deleting item: ${e.message}") + } + } + } + + suspend fun editVocabularyItem(vocabularyItem: VocabularyItem) { + val itemWithNewFrequency = fetchAndUpdateZipfFrequency(vocabularyItem) + + Log.d(TAG, "Editing vocabulary item: ${vocabularyItem.id}") + try { + val duration = measureTimeMillis { + vocabularyRepository.editVocabularyItem(itemWithNewFrequency) + } + Log.d(TAG, "Successfully edited vocabulary item in ${duration}ms") + } catch (e: Exception) { + statusViewModel.showErrorMessage("Error in editVocabularyItem: ${e.message}") + Log.e(TAG, "Error in editVocabularyItem: ${e.message}") + } + } + + + suspend fun findDuplicates(items: List): List { + val allItems = vocabularyRepository.getAllVocabularyItems() + val results = items.map { item -> + val duplicateItem = allItems.find { existingItem -> item.isDuplicate(existingItem) } + duplicateItem != null + } + results.count { it } + return results + } + + /** + * Creates a flow to perform a quick check if a single vocabulary item has any duplicates. + * + * @param itemId The ID of the item to check. + * @return A Flow that emits `true` if a duplicate exists, `false` otherwise. + */ + fun isDuplicateFlow(itemId: Int): Flow = vocabularyItems.map { allItems -> + val currentItem = allItems.find { it.id == itemId } + if (currentItem != null) { + // Check if there is any *other* item that is a duplicate of the current one. + allItems.any { otherItem -> + otherItem.id != currentItem.id && currentItem.isDuplicate(otherItem) + } + } else { + false // Item not found, so it can't have a duplicate. + } + }.distinctUntilChanged() + + /** + * Finds all items in the repository that are duplicates of the given item, excluding the item itself. + */ + fun getDuplicatesOf(item: VocabularyItem): Flow> { + return vocabularyItems.map { allItems -> + allItems.filter { otherItem -> + item.id != otherItem.id && item.isDuplicate(otherItem) + } + } + } + + /** + * Handles the merging of two duplicate vocabulary items. + * Placeholder logic: Deletes the new item, effectively keeping the original. + * A full implementation would merge properties like stage, categories, and features. + */ + fun mergeDuplicateItems(newItem: VocabularyItem, existingItem: VocabularyItem) { + Log.d(TAG, "mergeDuplicateItems: Merging ${newItem.id} into ${existingItem.id}. (Placeholder logic)") + //TODO + // Placeholder: For now, this just deletes the new item. + // A full implementation would merge stages, categories, etc., and update the existing item based on the rules. + viewModelScope.launch { + statusViewModel.showSuccessMessage("Items merged!", 2) + deleteVocabularyItemsById(listOf(newItem.id)) + } + } + + + fun deleteData(type: DeleteType, id: Int? = null, item: VocabularyItem? = null, items: List? = null, categoryId: Int? = null) { + Log.d(TAG, "Deleting data of type $type") + viewModelScope.launch { + try { + val duration = measureTimeMillis { + when (type) { + DeleteType.VOCABULARY_ITEM_BY_ID -> id?.let { vocabularyRepository.deleteVocabularyItemById(it) } + DeleteType.VOCABULARY_ITEM -> item?.let { vocabularyRepository.deleteVocabularyItemById(it.id) } + DeleteType.VOCABULARY_ITEMS -> items?.map { it.id }?.let { vocabularyRepository.deleteVocabularyItemsByIds(it) } + DeleteType.REMOVE_FROM_CATEGORY -> { + if (id != null && categoryId != null) { + vocabularyRepository.removeVocabularyItemFromList(id, categoryId) + } + } + } + } + Log.d(TAG, "deleteData of type $type completed in ${duration}ms") + } catch (e: Exception) { + statusViewModel.showErrorMessage("Error in deleteData: ${e.message}") + Log.e(TAG, "Error in deleteData: ${e.message}") + } + } + } + + @Deprecated("use the new filterVocabularyItems") + fun filterVocabularyItems(languageFirst: Language?, languageSecond: Language?, query: String?, categoryId: Int?, stage: VocabularyStage?): Flow> { + Log.d(TAG, "[DEPRECATED] filterVocabularyItems called.") + val languages = listOfNotNull(languageFirst, languageSecond).ifEmpty { null }?.map { it.nameResId } + return filterVocabularyItems(languages = languages, query = query, categoryId = categoryId, stage = stage, sortOrder = SortOrder.NEWEST_FIRST) + } + + fun filterVocabularyItems( + languages: List?, + query: String?, + categoryId: Int?, // Accepts a single category ID + stage: VocabularyStage?, + wordClass: String? = null, + dueTodayOnly: Boolean = false, + sortOrder: SortOrder + ): Flow> { + Log.d(TAG, "[DEPRECATED] filterVocabularyItems called. with args: " + + "languages=$languages, query=$query, categoryId=$categoryId, stage=$stage, " + + "wordClass=$wordClass, dueTodayOnly=$dueTodayOnly, sortOrder=$sortOrder") + + return filterVocabularyItems( + languages = languages, + query = query, + categoryIds = categoryId?.let { listOf(it) }, + stage = stage, + wordClass = wordClass, + dueTodayOnly = dueTodayOnly, + sortOrder = sortOrder + ) + } + + + + + /** + * Filters vocabulary items based on multiple criteria, including a list of category IDs and a specific word class. + * + * @param languages A list of language resource IDs to filter by. + * @param query A search string to match against the words. + * @param categoryIds A list of category IDs to filter by. + * @param stage The vocabulary stage to filter by. + * @param wordClass The grammatical word class (e.g., "noun", "verb") to filter by. + * @param dueTodayOnly If true, only includes items due for review today. + * @param sortOrder The order to sort the final list. + * @return A Flow emitting the filtered and sorted list of VocabularyItems. + */ + fun filterVocabularyItems( + languages: List?, + query: String?, + categoryIds: List?, + stage: VocabularyStage?, + wordClass: String? = null, + dueTodayOnly: Boolean = false, + sortOrder: SortOrder + ): Flow> { + Log.d(TAG, "Setting up filterVocabularyItems Flow with categoryIds: $categoryIds, stage: $stage, wordClass: $wordClass, dueToday: $dueTodayOnly, sort: $sortOrder") + + val categoryItemsFlow: Flow?> = if (categoryIds.isNullOrEmpty() || categoryIds.contains(0)) { + Log.d(TAG, "Category filter: DISABLED (null/empty/contains 0)") + flowOf(null) + } else { + Log.d(TAG, "Category filter: ENABLED for categories $categoryIds") + vocabularyRepository.getCategoryMappingsFlow().map { mappings -> + mappings.filter { it.categoryId in categoryIds } + .map { it.vocabularyItemId } + .toSet() + } + } + + return combine( + vocabularyItems, + dueTodayItems, + _idFilter, + categoryItemsFlow, + if (stage == null) flowOf(null) else stageMapping.map { it } // Pass the full stage mapping instead of pre-filtering + ) { allItems, dueItems, idFilterSet, categoryItemsSet, stageMappingMap -> + + if (allItems.isEmpty()) { + Log.d(TAG, "filterVocabularyItems: Waiting for vocabulary items to load...") + return@combine emptyList() + } + + if (stage != null && stageMappingMap.isNullOrEmpty()) { + Log.d(TAG, "filterVocabularyItems: Items loaded (${allItems.size}) but stage mapping empty, triggering initialization...") + viewModelScope.launch { + vocabularyRepository.actualizeVocabularyStageMappings() + } + return@combine emptyList() + } + + val preFilteredItems = if (idFilterSet != null) { + allItems.filter { it.id in idFilterSet } + } else { + allItems + } + + Log.d(TAG, "--- Starting Filter ---") + Log.d(TAG, "Items to filter: ${preFilteredItems.size}") + Log.d(TAG, "Filter criteria: wordClass='$wordClass'") + + var filteredList: List + val duration = measureTimeMillis { + val dueItemsSet = if (dueTodayOnly) dueItems.map { it.id }.toSet() else emptySet() + val languageIdSet = languages?.takeIf { it.isNotEmpty() }?.toSet() + + filteredList = preFilteredItems.filter { item -> + val languageMatch = languageIdSet.isNullOrEmpty() || + item.languageFirstId in languageIdSet || item.languageSecondId in languageIdSet + val queryMatch = query.isNullOrEmpty() || + item.wordFirst.contains(query, ignoreCase = true) || item.wordSecond.contains(query, ignoreCase = true) + val categoryMatch = categoryItemsSet == null || item.id in categoryItemsSet + + val stageMatch = if (stage == null) { + true + } else if (stageMappingMap.isNullOrEmpty()) { + stage == VocabularyStage.NEW + } else { + (stageMappingMap[item.id] ?: VocabularyStage.NEW) == stage + } + + val dueTodayMatch = !dueTodayOnly || item.id in dueItemsSet + + // Expanded word class filtering with detailed logs + val wordClassMatch = if (wordClass.isNullOrBlank()) { + true // No filter applied, always true + } else { + if (item.features.isNullOrBlank()) { + false + } else { + try { + // Corrected class name to VocabularyFeatures + val features = jsonParser.decodeFromString(item.features) + val firstClass = features.first?.wordClass + val secondClass = features.second?.wordClass + + // Log the parsed values from the JSON + Log.d(TAG, "Item #${item.id} ('${item.wordFirst}') -> Parsed classes: first='${firstClass}', second='${secondClass}'") + + val isMatch = firstClass.equals(wordClass, ignoreCase = true) || + secondClass.equals(wordClass, ignoreCase = true) + + // Log the final comparison result for this item + Log.d(TAG, "Item #${item.id} ('${item.wordFirst}') -> Comparing with '$wordClass'. Match result: $isMatch") + isMatch + } catch (e: Exception) { + // Log any errors during JSON parsing, which is a common failure point + Log.e(TAG, "Item #${item.id} ('${item.wordFirst}') -> FAILED JSON PARSING: ${e.message}. JSON: ${item.features}") + false + } + } + } + + val finalMatch = languageMatch && queryMatch && categoryMatch && stageMatch && dueTodayMatch && wordClassMatch + + finalMatch + } + + filteredList = when (sortOrder) { + SortOrder.NEWEST_FIRST -> filteredList.sortedByDescending { it.id } + SortOrder.OLDEST_FIRST -> filteredList.sortedBy { it.id } + SortOrder.ALPHABETICAL -> filteredList.sortedBy { it.wordFirst } + SortOrder.LANGUAGE -> filteredList.sortedWith(compareBy({ it.languageFirstId }, { it.languageSecondId })) + } + } + Log.d(TAG, "--- Filter Complete ---") + Log.d(TAG, "Filtering & Sorting took ${duration}ms, result size: ${filteredList.size}") + filteredList + } + } + + suspend fun generateVocabularyItems(category: String, amount: Int) { + val selectedSourceLanguage = languageRepository.loadSelectedSourceLanguage().first() + val selectedTargetLanguage = languageRepository.loadSelectedTargetLanguage().first() + + if (selectedSourceLanguage == null || selectedTargetLanguage == null) { + _generationResult.emit("Source and target languages must be selected.") + return + } + + _isGenerating.value = true + Log.d(TAG, "Generating $amount vocabulary items for category '$category'") + try { + var result: Result> + val duration = measureTimeMillis { + result = vocabularyRepository.generateVocabularyItems(category, selectedSourceLanguage, selectedTargetLanguage, amount) + } + Log.d(TAG, "Vocabulary generation process took ${duration}ms") + result.onSuccess { + _generatedVocabularyItems.value = it + _generationResult.emit("Generation completed") + }.onFailure { exception -> + _generationResult.emit("Error generating vocabulary items: ${exception.message}") + } + } catch (e: Exception) { + _generationResult.emit("Error generating vocabulary items: ${e.message}") + } finally { + _isGenerating.value = false + } + } + + suspend fun getVocabularyItemById(id: Int): VocabularyItem? { + Log.d(TAG, "getVocabularyItemById: Fetching item $id") + var item: VocabularyItem? + val duration = measureTimeMillis { + item = vocabularyRepository.getVocabularyItemById(id) + } + Log.d(TAG, "getVocabularyItemById: Fetched item $id in ${duration}ms") + return item + } + + + fun prepareExercise( + categoryIdsAsJson: String?, + stageNamesAsJson: String?, + languageIdsAsJson: String?, + dailyOnly: Boolean = false + ) { + viewModelScope.launch { + val categoryList = categoryIdsAsJson?.takeIf { it.isNotBlank() } + ?.split(",") + ?.mapNotNull { it.toIntOrNull() } + ?.let { ids -> + ids.mapNotNull { id -> vocabularyRepository.getCategoryById(id) } + } ?: emptyList() + + val stageList = stageNamesAsJson?.takeIf { it.isNotBlank() }?.split(",") + ?.mapNotNull { try { VocabularyStage.valueOf(it) } catch (_: Exception) { null } } ?: emptyList() + + val languageList = languageIdsAsJson?.takeIf { it.isNotBlank() }?.split(",") + ?.mapNotNull { it.toIntOrNull() } + ?.let { ids -> + val allLangs = languageRepository.loadLanguages(LanguageListType.ALL).first() + allLangs.filter { it.nameResId in ids } + } ?: emptyList() + + loadCardSet(categoryList, stageList, languageList, dailyOnly) + } + } + + + fun loadCardSet( + categories: List? = null, + stages: List? = null, + languages: List? = null, + dailyOnly: Boolean = false + ) { + Log.d(TAG, "Loading card set with languages: $languages, categories: ${categories?.size}, stages: ${stages?.size}") + viewModelScope.launch { + statusViewModel.showLoadingMessage("Loading card set") + + try { + // Step 1: Wait for vocabulary items to be loaded + Log.d(TAG, "loadCardSet: Waiting for vocabulary items to load...") + val allItems = vocabularyItems.first { it.isNotEmpty() } + Log.d(TAG, "loadCardSet: Vocabulary items loaded (${allItems.size} items)") + + // Step 2: If we need stage filtering, ensure stage mappings are initialized + if (!stages.isNullOrEmpty()) { + Log.d(TAG, "loadCardSet: Stage filtering required, checking stage mappings...") + var stageMappingMap = stageMapping.first() + + // If stage mapping is empty, but we have items, initialize it + if (stageMappingMap.isEmpty() && allItems.isNotEmpty()) { + Log.d(TAG, "loadCardSet: Stage mapping empty, initializing...") + vocabularyRepository.actualizeVocabularyStageMappings() + + // Wait for stage mapping to be populated (with timeout) + var attempts = 0 + val maxAttempts = 10 + while (stageMappingMap.isEmpty() && attempts < maxAttempts) { + delay(100) // Wait 100ms between attempts + stageMappingMap = stageMapping.first() + attempts++ + Log.d(TAG, "loadCardSet: Waiting for stage mapping... attempt $attempts, size: ${stageMappingMap.size}") + } + + if (stageMappingMap.isEmpty()) { + Log.w(TAG, "loadCardSet: Stage mapping still empty after $maxAttempts attempts") + statusViewModel.showErrorMessage("Failed to initialize stage mappings") + _cardSet.value = null + return@launch + } else { + Log.d(TAG, "loadCardSet: Stage mapping ready with ${stageMappingMap.size} mappings") + } + } + } + + // Step 3: If we need category filtering, ensure category mappings are ready + if (!categories.isNullOrEmpty()) { + Log.d(TAG, "loadCardSet: Category filtering required, checking category mappings...") + val categoryMappings = vocabularyRepository.getCategoryMappings() + Log.d(TAG, "loadCardSet: Category mappings loaded (${categoryMappings.size} mappings)") + } + + // Step 4: Now perform the actual filtering + Log.d(TAG, "loadCardSet: All data ready, performing filtering...") + val filteredItems = filterVocabularyItems( + languages = languages?.map { it.nameResId }, + query = null, + categoryIds = categories?.map { it.id }, + stage = stages?.firstOrNull(), + sortOrder = SortOrder.NEWEST_FIRST, + dueTodayOnly = dailyOnly + ).first() + + Log.d(TAG, "loadCardSet: Filtering completed, found ${filteredItems.size} items") + + if (filteredItems.isNotEmpty()) { + val cardSetFromSource = CardSet( + languageFirst = languages?.getOrNull(0)?.nameResId, + languageSecond = languages?.getOrNull(1)?.nameResId, + cards = filteredItems + ) + _cardSet.value = cardSetFromSource + Log.d(TAG, "Successfully loaded card set with ${filteredItems.size} items") + } else { + _cardSet.value = null + Log.d(TAG, "No items found for the specified filters") + } + } catch (e: Exception) { + statusViewModel.showErrorMessage("Error loading card set: ${e.message}") + _cardSet.value = null + Log.e(TAG, "Error in loadCardSet: ${e.message}") + } + + statusViewModel.hideMessageBar() + if (_cardSet.value == null) { + statusViewModel.cancelAllMessages() + statusViewModel.showErrorMessage("No cards found for the specified filter", 3) + } + } + } + + fun deleteVocabularyItemsByCategory(categoryID: Int) { + Log.d(TAG, "Deleting vocabulary items by category ID $categoryID") + viewModelScope.launch { + try { + val duration = measureTimeMillis { + val itemsToDelete = vocabularyRepository.getVocabularyItemsByCategory(categoryID) + vocabularyRepository.deleteVocabularyItemsByIds(itemsToDelete.map { it.id }) + } + Log.d(TAG, "deleteVocabularyItemsByCategory for ID $categoryID took ${duration}ms") + } catch (e: Exception) { + statusViewModel.showErrorMessage("Error in deleteVocabularyItemsByCategory: ${e.message}") + } + } + } + + @OptIn(ExperimentalTime::class) + fun getVocabularyItemDetailsFlow(vocabularyItemId: Int): Flow = flow { + Log.d(TAG, "Getting details for item ID $vocabularyItemId") + try { + val duration = measureTimeMillis { + coroutineScope { + val stage = async { vocabularyRepository.getVocabularyItemStage(vocabularyItemId).first() } + val lastCorrect = async { vocabularyRepository.getLastCorrectAnswer(vocabularyItemId) } + val lastIncorrect = async { vocabularyRepository.getLastIncorrectAnswer(vocabularyItemId) } + val correctCount = async { vocabularyRepository.getCorrectAnswerCount(vocabularyItemId) } + val incorrectCount = async { vocabularyRepository.getIncorrectAnswerCount(vocabularyItemId) } + + emit( + VocabularyItemDetails( + stage = stage.await(), + lastCorrectAnswer = lastCorrect.await(), + lastIncorrectAnswer = lastIncorrect.await(), + correctAnswerCount = correctCount.await(), + incorrectAnswerCount = incorrectCount.await() + ) + ) + } + } + Log.d(TAG, "getVocabularyItemDetails for ID $vocabularyItemId took ${duration}ms") + } catch (e: Exception) { + Log.e(TAG, "Error in getVocabularyItemDetails: ${e.message}") + } + } + + fun initializeSaveFileLauncher(launcher: ActivityResultLauncher) { + saveFileLauncher = launcher + } + + fun saveRepositoryState() { + if (!::saveFileLauncher.isInitialized) { + statusViewModel.showErrorMessage("Save File Launcher not initialized.") + return + } + val intent = fileSaver.createSaveDocumentIntent(fileSaver.generateFilename()) + saveFileLauncher.launch(intent) + } + + fun saveCategory(categoryId: Int) { + if (!::saveFileLauncher.isInitialized) { + statusViewModel.showErrorMessage("Save File Launcher not initialized.") + return + } + val filename = fileSaver.generateFilenameForCategory(categoryId) + val intent = fileSaver.createSaveDocumentIntent(filename) + saveFileLauncher.launch(intent) + } + + fun handleSaveResult(result: ActivityResult, categoryId: Int? = null) { + Log.d(TAG, "Handling save result for categoryId: $categoryId") + if (result.resultCode == Activity.RESULT_OK) { + val uri: Uri? = result.data?.data + uri?.let { + viewModelScope.launch { + if (categoryId == null) { + val startSave = System.currentTimeMillis() + fileSaver.saveRepositoryToUri(it) + Log.d(TAG, "handleSaveResult: Saved repository in ${System.currentTimeMillis() - startSave}ms") + val filename = fileSaver.getFileNameFromUri(it) + _saveStatus.postValue("File saved to $filename") + } + if (categoryId != null) { + val startSave = System.currentTimeMillis() + fileSaver.saveCategoryToUri(it, categoryId) + Log.d(TAG, "handleSaveResult: Saved category in ${System.currentTimeMillis() - startSave}ms") + val filename = fileSaver.getFileNameFromUri(it) + _saveStatus.postValue("File saved to $filename") + } + } + } ?: run { + statusViewModel.showErrorMessage("Error: No URI received from file picker.") + Log.e(TAG, "handleSaveResult: No URI received") + } + } else { + statusViewModel.showErrorMessage("File save cancelled or failed.") + Log.d(TAG, "handleSaveResult: Save cancelled or failed") + } + } + + fun importVocabulary(jsonString: String) { + Log.d(TAG, "Attempting to import vocabulary from JSON string (length: ${jsonString.length})") + viewModelScope.launch { + try { + val duration = measureTimeMillis { + val vocabularyItems = Json.decodeFromString>(jsonString) + Log.d(TAG, "Successfully decoded ${vocabularyItems.size} items from JSON.") + vocabularyRepository.introduceVocabularyItems(vocabularyItems) + vocabularyRepository.cleanDuplicates() + } + statusViewModel.showSuccessMessage("Vocabulary items imported successfully.") + Log.d(TAG, "Vocabulary import process took ${duration}ms") + } catch (e: Exception) { + statusViewModel.showErrorMessage("Error importing vocabulary items: ${e.message}") + } + } + } + + fun wipeRepository() { + viewModelScope.launch { + try { + vocabularyRepository.wipeRepository() + statusViewModel.showErrorMessage("All repository data deleted.") + } catch (e: Exception) { + statusViewModel.showErrorMessage("Failed to wipe repository: $e.message}") + } + } + } + + suspend fun getSynonymsForItem( + vocabularyItemId: Int, + isForFirstWord: Boolean + ): List { + val vocabularyItem = getVocabularyItemById(vocabularyItemId) ?: return emptyList() + + val allLangs = languageRepository.loadLanguages(LanguageListType.ALL).first() + val langFirst = allLangs.find { it.nameResId == vocabularyItem.languageFirstId } + val langSecond = allLangs.find { it.nameResId == vocabularyItem.languageSecondId } + + if (langFirst == null || langSecond == null) { + Log.e(TAG, "Could not find languages for vocabulary item $vocabularyItemId") + return emptyList() + } + + val termLanguage = if (isForFirstWord) langFirst else langSecond + val translationLanguage = if (isForFirstWord) langSecond else langFirst + val term = if (isForFirstWord) vocabularyItem.wordFirst else vocabularyItem.wordSecond + val translation = if (isForFirstWord) vocabularyItem.wordSecond else vocabularyItem.wordFirst + + val dbSynonyms = withContext(Dispatchers.IO) { + try { + vocabularyRepository.getSynonymsForItem(vocabularyItemId) + } catch (e: Exception) { + Log.e(TAG, "Error fetching synonyms from database: ${e.message}") + emptyList() + } + } + val combinedItems = dbSynonyms.map { SynonymData(it, null) }.toMutableList() + + if (combinedItems.size < 4) { + vocabularyItemService.generateSynonyms( + term = term, + language = termLanguage, + amount = 4 - combinedItems.size, + translation = translation, + translationLanguage = translationLanguage + ).onSuccess { generatedSynonyms -> + val newItems = generatedSynonyms.map { synonym -> + val newItem = VocabularyItem( + id = 0, + languageFirstId = if (isForFirstWord) termLanguage.nameResId else translationLanguage.nameResId, + languageSecondId = if (isForFirstWord) translationLanguage.nameResId else termLanguage.nameResId, + wordFirst = if (isForFirstWord) synonym.word else translation, + wordSecond = if (isForFirstWord) translation else synonym.word + ) + SynonymData(item = newItem, proximity = synonym.proximity) + } + combinedItems.addAll(newItems) + }.onFailure { exception -> + Log.e(TAG, "AI synonym generation failed: ${exception.message}") + } + } + + return combinedItems + .filterNot { (item, _) -> + val currentTerm = if (item.languageFirstId == termLanguage.nameResId) item.wordFirst else item.wordSecond + currentTerm.equals(term, ignoreCase = true) + } + .distinctBy { (item, _) -> + if (item.languageFirstId == termLanguage.nameResId) item.wordFirst else item.wordSecond + } + } + + + suspend fun getAllLanguagesIdsPresent(): Set { + try { + return withContext(Dispatchers.IO) { + Log.d(TAG, "Fetching all present language IDs...") + val ids = vocabularyRepository.getAllLanguageIdsFromVocabulary() + Log.d(TAG, "Fetched ${ids.size} language IDs") + ids + } + } catch (e: Exception) { + Log.e(TAG, "Error fetching all language IDs: ${e.message}") + return emptySet() + } + } + + suspend fun getExampleForItem(itemId: Int, isFirstWord: Boolean, languageFirst: Language?, languageSecond: Language?): Pair? { + Log.d(TAG, "Fetching example for item ID $itemId") + + val item = getVocabularyItemById(itemId) ?: return null + val word = if (isFirstWord) item.wordFirst else item.wordSecond + val wordTranslation = if (!isFirstWord) item.wordFirst else item.wordSecond + + if (languageFirst == null || languageSecond == null) return null + + return dictionaryService.getExampleSentence(word, wordTranslation, languageFirst, languageSecond).getOrNull() + } + + suspend fun fetchAndUpdateZipfFrequency(item: VocabularyItem): VocabularyItem { + Log.d(TAG, "Fetching zipf frequency for item ID ${item.id}") + var updatedItem = item + + try { + val languageFirst = languageRepository.getLanguageById(item.languageFirstId ?: 0) + if (languageFirst != null) { + Log.d(TAG, "Fetching zipf frequency for '${item.wordFirst}' in language '${languageFirst.name}'") + val frequencyResult = vocabularyItemService.fetchZipfFrequency(item.wordFirst, languageFirst.code) + frequencyResult.onSuccess { frequency -> + Log.d(TAG, "Fetched zipf frequency for '${item.wordFirst}': $frequency") + updatedItem = updatedItem.copy(zipfFrequencyFirst = frequency) + }.onFailure { exception -> + Log.e(TAG, "Failed to fetch zipf frequency for '${item.wordFirst}': ${exception.message}") + } + } + } catch (e: Exception) { + Log.e(TAG, "Error fetching zipf frequency for first word: ${e.message}") + } + + try { + + val languageSecond = languageRepository.getLanguageById(item.languageSecondId ?: 0) + if (languageSecond != null) { + Log.d(TAG, "Fetching zipf frequency for '${item.wordSecond}' in language '${languageSecond.name}'") + val frequencyResult = vocabularyItemService.fetchZipfFrequency(item.wordSecond, languageSecond.code) + frequencyResult.onSuccess { frequency -> + Log.d(TAG, "Fetched zipf frequency for '${item.wordSecond}': $frequency") + updatedItem = updatedItem.copy(zipfFrequencySecond = frequency) + }.onFailure { exception -> + Log.e(TAG, "Failed to fetch zipf frequency for '${item.wordSecond}': ${exception.message}") + } + } + }catch (e: Exception) { + Log.e(TAG, "Error fetching zipf frequency for second word: ${e.message}") + } + + Log.d(TAG, "Updated item: $updatedItem") + return updatedItem + } + + + fun fetchAndApplyGrammaticalDetailsForList(items: List) { + if (items.isEmpty()) { + Log.d(TAG, "fetchAndApplyGrammaticalDetailsForList called with an empty list. Nothing to do.") + return + } + + viewModelScope.launch { + statusViewModel.showLoadingMessage("Fetching grammar for ${items.size} items...") + Log.d(TAG, "Attempting to fetch grammar details for a list of ${items.size} items.") + + try { + + // 1. Get all unique language IDs and fetch their objects in one go. + val languageIds = items.flatMap { listOfNotNull(it.languageFirstId, it.languageSecondId) }.toSet() + val languagesMap = languageRepository.getLanguagesByResourceIds(languageIds).associateBy { it.nameResId } + + // 2. Create a new list with articles removed from non-sentence items + val itemsWithoutArticles = items.map { item -> + if (StringHelper.isSentenceStrict(item.wordFirst) || StringHelper.isSentenceStrict(item.wordSecond)) { + item // Skip article removal for sentences + } else { + val articlesLangFirst = languagesMap[item.languageFirstId]?.code?.let { languageConfigViewModel.getArticlesForLanguage(it) } ?: emptySet() + val articlesLangSecond = languagesMap[item.languageSecondId]?.code?.let { languageConfigViewModel.getArticlesForLanguage(it) } ?: emptySet() + + val allArticles = (articlesLangFirst + articlesLangSecond) + + item.copy( + wordFirst = StringHelper.removeLeadingArticles(item.wordFirst, allArticles), + wordSecond = StringHelper.removeLeadingArticles(item.wordSecond, allArticles) + ) + } + } + + // 3. Call the new batch service method with the updated item list. + val result = vocabularyItemService.fetchAndApplyGrammaticalDetails(itemsWithoutArticles, languagesMap) + + // 4. Handle the result from the service. + result.onSuccess { updatedItems -> + Log.i(TAG, "Successfully fetched and mapped details for ${updatedItems.count { it.features != null }} items.") + + // 5. Persist the updated items back to the database. + vocabularyRepository.updateVocabularyItems(updatedItems) + statusViewModel.cancelLoadingOperation() + statusViewModel.showSuccessMessage("Grammar details updated!") + + }.onFailure { exception -> + Log.e(TAG, "Failed to fetch grammar details for list: ${exception.message}") + statusViewModel.showErrorMessage("Could not retrieve grammar details.") + } + } catch (e: Exception) { + Log.e(TAG, "An unexpected error occurred in fetchAndApplyGrammaticalDetailsForList: ${e.message}") + statusViewModel.showErrorMessage("An unexpected error occurred.") + } + } + } + + /** + * Removes leading articles from a VocabularyItem's words based on the provided article sets for each language. + * The item is then updated in the database. + * + * @param item The VocabularyItem to process. + * @param articlesLangFirst A set of articles for the first language. + * @param articlesLangSecond A set of articles for the second language. + */ + fun removeArticles(item: VocabularyItem, articlesLangFirst: Set, articlesLangSecond: Set) { + viewModelScope.launch { + try { + + // Don't remove articles if either word is a sentence + if (StringHelper.isSentenceStrict(item.wordFirst) || StringHelper.isSentenceStrict(item.wordSecond)) { + Log.d(TAG, "removeArticles: Skipping item ${item.id} as it contains a sentence.") + return@launch + } + + // Combine all articles and filter out any blank ones. + val allArticles = (articlesLangFirst + articlesLangSecond).filter { it.isNotBlank() } + if (allArticles.isEmpty()) { + Log.d(TAG, "removeArticles: No articles provided, skipping.") + return@launch + } + + + // Create a new item with the articles removed. + val updatedItem = item.copy( + wordFirst = StringHelper.removeLeadingArticles(item.wordFirst, allArticles), + wordSecond = StringHelper.removeLeadingArticles(item.wordSecond, allArticles) + ) + + // Only call the repository if a change was actually made. + if (updatedItem != item) { + Log.d(TAG, "removeArticles: Articles removed, updating item ${item.id}") + editVocabularyItem(updatedItem) + } else { + Log.d(TAG, "removeArticles: No articles found in item ${item.id}, no update needed.") + } + } catch (e: Exception) { + statusViewModel.showErrorMessage("Error removing articles: ${e.message}") + Log.e(TAG, "Error in removeArticles: ${e.message}") + } + } + } + private val validLanguageIds: StateFlow> = languageRepository.loadLanguages(LanguageListType.ALL) + .map { languages -> languages.map { it.nameResId }.toSet() } + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptySet()) + + val faultyItemsCount: StateFlow = combine(vocabularyItems, validLanguageIds) { items, validIds -> + // Return 0 if the list of valid IDs hasn't been loaded yet to prevent incorrect counts. + if (validIds.isEmpty()) return@combine 0 + + items.count { item -> + val lang1 = item.languageFirstId + val lang2 = item.languageSecondId + + item.wordFirst.isBlank() || + item.wordSecond.isBlank() || + lang1 == null || + lang2 == null || + lang1 == lang2 || + lang1 == 0 || + lang2 == 0 || + !validIds.contains(lang1) || + !validIds.contains(lang2) + } + } + .stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5000), + initialValue = 0 + ) + + val itemsWithoutGrammarCount: StateFlow = vocabularyItems + .map { items -> + items.count { it.features.isNullOrEmpty() } + } + .stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5000), + initialValue = 0 + ) + + val allItemsWithoutGrammar: StateFlow> = vocabularyItems + .map { items -> + items.filter { it.features.isNullOrEmpty() } + } + .stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5000), + initialValue = emptyList() + ) + + + val allFaultyItems: StateFlow> = combine(vocabularyItems, validLanguageIds) { items, validIds -> + if (validIds.isEmpty()) emptyList() + else items.filter { item -> + val lang1 = item.languageFirstId + val lang2 = item.languageSecondId + item.wordFirst.isBlank() || item.wordSecond.isBlank() || lang1 == null || lang2 == null || + lang1 == lang2 || lang1 == 0 || lang2 == 0 || !validIds.contains(lang1) || + !validIds.contains(lang2) + } + }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList()) + + val missingLanguageInfo: StateFlow> = combine(vocabularyItems, validLanguageIds) { items, validIds -> + if (validIds.isEmpty() || items.isEmpty()) { + emptyMap() + } else { + val presentIds = items.flatMap { listOfNotNull(it.languageFirstId, it.languageSecondId) }.toSet() + val missingIds = presentIds - validIds + + if (missingIds.isEmpty()) { + emptyMap() + } else { + missingIds.associateWith { missingId -> + items.count { it.languageFirstId == missingId || it.languageSecondId == missingId } + } + } + } + }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyMap()) + + fun getItemsForLanguage(languageId: Int): Flow> { + return vocabularyItems.map { items -> + items.filter { it.languageFirstId == languageId || it.languageSecondId == languageId } + } + } + + fun replaceLanguageId(oldId: Int, newId: Int) { + viewModelScope.launch { + Log.d(TAG, "Replacing language ID $oldId with $newId") + try { + val itemsToUpdate = vocabularyItems.value.filter { + it.languageFirstId == oldId || it.languageSecondId == oldId + }.map { item -> + val newFirstId = if (item.languageFirstId == oldId) newId else item.languageFirstId + val newSecondId = if (item.languageSecondId == oldId) newId else item.languageSecondId + item.copy(languageFirstId = newFirstId, languageSecondId = newSecondId) + } + + if (itemsToUpdate.isNotEmpty()) { + vocabularyRepository.updateVocabularyItems(itemsToUpdate) + statusViewModel.showSuccessMessage("Language ID updated for ${itemsToUpdate.size} items.") + Log.d(TAG, "Successfully updated ${itemsToUpdate.size} items.") + } else { + Log.d(TAG, "No items found with language ID $oldId to update.") + } + } catch (e: Exception) { + val errorMessage = "Error replacing language ID: ${e.message}" + statusViewModel.showErrorMessage(errorMessage) + Log.e(TAG, errorMessage) + } + } + } + + enum class DeleteType { VOCABULARY_ITEM_BY_ID, VOCABULARY_ITEM, VOCABULARY_ITEMS, REMOVE_FROM_CATEGORY } + enum class SortOrder { NEWEST_FIRST, OLDEST_FIRST, ALPHABETICAL, LANGUAGE } + + data class VocabularyItemDetails @OptIn(ExperimentalTime::class) constructor( + val stage: VocabularyStage, + val lastCorrectAnswer: kotlin.time.Instant?, + val lastIncorrectAnswer: kotlin.time.Instant?, + val correctAnswerCount: Int, + val incorrectAnswerCount: Int + ) + + data class SynonymData( + val item: VocabularyItem, + val proximity: Int? + ) + + // Navigation state management functions + fun setNavigationContext(items: List, currentItemId: Int) { + val currentIndex = items.indexOfFirst { it.id == currentItemId } + if (currentIndex != -1) { + _currentNavigationItems.value = items + _currentNavigationPosition.value = currentIndex + } + } + + fun navigateToNextItem(): Boolean { + val currentPos = _currentNavigationPosition.value + val items = _currentNavigationItems.value + if (currentPos < items.size - 1) { + _currentNavigationPosition.value = currentPos + 1 + return true + } + return false + } + + fun navigateToPreviousItem(): Boolean { + val currentPos = _currentNavigationPosition.value + if (currentPos > 0) { + _currentNavigationPosition.value = currentPos - 1 + return true + } + return false + } + +} diff --git a/app/src/main/res/drawable/ic_empty.png b/app/src/main/res/drawable/ic_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..32399d863d261b1e40b22983dda5669f8ab94230 GIT binary patch literal 39146 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 KMNUMnLSTZqR_B!f literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_icon_construction.png b/app/src/main/res/drawable/ic_icon_construction.png new file mode 100644 index 0000000000000000000000000000000000000000..eb612af50538bd0a6efbd82455e05d82105d8251 GIT binary patch literal 71028 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 y8}*=F|}H$i0cuVaD5XI*lax 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_intro_categories.png b/app/src/main/res/drawable/ic_intro_categories.png new file mode 100644 index 0000000000000000000000000000000000000000..52d437910870c09bcac7c6f077cdb10a31ba48c5 GIT binary patch literal 74881 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_intro_flashcards.png b/app/src/main/res/drawable/ic_intro_flashcards.png new file mode 100644 index 0000000000000000000000000000000000000000..b280fe45c1bf9cae8114900a1c1802a3eeee24a1 GIT binary patch literal 71699 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

|nF1u{hFmaW%R>kO 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

DThil{>Dh%-Z`(cx$!p-jo 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_level_auctioneer.png b/app/src/main/res/drawable/ic_level_auctioneer.png new file mode 100644 index 0000000000000000000000000000000000000000..693d2d4c179a56d3e4c11c09c62b9b6a4090e494 GIT binary patch literal 194438 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

;g2 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%0Dm?#<~pJ@Ez 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�E;_2M8dKq2UKfi$-e0IUS? zUxwvX)xGnclgsx^-}3NfhmL(DXE`&r@cD_??%9%U^=FCM%^0QhG{F^sh8x*q27d7iOO zA7D@yLItrj0i3`Ehryr$9MHC{^&(&Zi$HY0=^&ddF%%V0U?^vDxnqnl6xxgnFu${p z{UWcFl^!HFnaE^u}_>y8Fe+9xd=ykjJ!N2|xzq{;* z5Uo*pq6x($s@Y9GgIF3%*xAsW6W+HYbdIw2<(KF@h{4KKhcuaN+aKjK5DFb}uFJ14 zaX!jt3#?s?yxMnW`#y6z1Vp2_e=JvTWV^-tE2EGU7Vk+wM?kp6hU?8oHbW{3B##{X zz?zfsxTn1ZH*Va@Dh;m)o>f8*fAoWZ`6(J(LlpR3H1V9%vIPj)m$fZU6o&h0$-P^b z!2fVT8h^Dtp-ekv&G2GRrsfotl-ghqmLGN$Qf`M16}YS%Zjt*U@CZ&Ch`R>B|29b2 zKknS)4&?x-s{7bOPFNo1u71$O;Ugc@6z=Q9t;<=w*h`_x!&Qf{Y>7xHPphg(Md#hv z>oH~QoKNU@!Glj2$5T!p#j>8q&V^)cZPQQ_eWc^?&sWXkSGPs1>;<5}*+zZ}PFcg< zG*w1ENLBw!O#xKZedwMe>km4ycR_F5z1gXrsF2z@C#h`^LV&2EO%WbI6{wky?1rrN zED{D&SDbLww=aB?&d;y;kKgeh$H`B=KnHUg0k0Y}G_?Q$4Tuw@HrnCD$e0Ha4|7JM zi$jc*tg2++mz;RXGlNE4!2^%cY=S0sXPezKpwNvkhKY`wszN+F%cacw5sRv69gHvs zfyRWDN1ciTPdX8j2S7IX*ipV&c|&$6Tb|Tmc#DQ_2SQJUarAnz=Ck}0jm|V3Q zANtg{aO!=ZjBo#X8h+)W$hn0eTj#y9Ky=PHe+8N@TnHMjtR&IpvUG~0k3W|ZW{iK{v5-WLsf>J6chEy!(xRqaQUquu}73O5v zT-$FJEfAZ0q_#z>GUmrm!9&h{8Gd{DZ=psI_M{_VZoa`Yo_a2Hb{m|dqliU-%+}Pd zIYck)x$Jpu8sI#0_azfFbPOy7#0#+^iR%uCnj`J(Gv&E0bpi#XnZfvmHOPZ(XlMCm z<7gzlbE-gH33@A!na^2&BqDQm$^By=9d{T9Kvms4?z`fEu?@SQHMYXNQ=*>agYSq6 zLOE=gL@&<7dZ5aDwouBJ#|aIQa{}*q^mrkuYqp=Ut1r0g;a&Xk=@aNxg1JVmQ4O7n z(T>NK-ShbJuV*mU@ld7chHB#JUpa_|%4Hn#U+D^@`UU^ayUO8fPaJ=t6M31y9qFLH zasrryF7pj`kXiH_yoUrngCvDy!HPr1>MOr~@zLn@mZ|Fha(z#E^s`gjxNWL2p>jrw zD!~@>?#>0M7Ku?FJ~U{S`?teR0i@ECT$sn@KXNS~#SySW5tMFK``|ZO1CFU!ZCgQ!BK{RGcyc ztC_~dj0)`v^TlG$jTrnrd@3CV`$KMo8(QIlme}XS0h$nULW+ui{K6#|L_-9`aqS%= zQC7}t`9(`<2y)D*Ivq5q@yzGF9*=zDtMIFBJ>+GFAZZIHM5q9P3bo9#(74jpU6-KXoTt>61iY$x&#!UC(dH~ea;G88}GpkT= z8JY)3aR#v&FbxH^6o#*%81T!|04dHRr3EC-Xxaf%Y=FTm`U`UuQyN(Vf52&Y|Ccu6 z=u^+Z4I6K_;sQl54T&5x9(133;)pdZobOV-Qix309fJtFt&3G-ASa#$!%tB|s5lL3 zL|O3l;2b%7=Y;P(T@67l*~5}{u!|7k5QsKN>M_209R2x7C!;tLWq+$_a|DNeY_R6= zlNOwFzXH&=o7_M4(Xn_M@5Mt^-G|OtcJQj>dM^;K=ZeUBh#i4uWO$nJ1y$~P9$Z7{ zbukZ2Cb*r#U=*qL@~Sl^aR8DC#wx)=lku%9XVI;kiFKPk#UxXUy%X!#Iw~Av3qvx*#l+H zFbh)vG`M`x;XQUT7+Tw7&K-OMtjbnf4ft2 z67&yK{`IqQ@^Od2@BA%uz*QF_ zhURFAC>b%*E3um|=?gLTy7NOaB%QzVXac8;@Onv8@cGN$!5^^QVaQPi4IVA1Arr-L zAtS3m9U#d;(*j(ti?+8O-R=ms?3%{+esVQ7-n-3~=jhJMh)-{2bR^c?CZIl^K8mH9ZJ8mKXv1@mWZ@=ZW7+c-rzlk7b6DPBZo}3lAjX31Y=WIOVPhWkObG;jEDff?k zbS$2Vd+AVB`Qpo$O zxx=nocg;TKE1N$PIuoxHksV9FbLq%Aciw;BHD|9qF?=K~|)X&F9vv`u7_AM3zkUgF0Dy!-({j%#VRXF4t7VRX=(KWcOab}=77aYviN652S6RL>JS`u;<@N8Uxj9nAj=i*6^JRQy4?U0$R5LdAu zgWBSmlgE2qLdHX}&2*+oretpbf#s^pCa}#RR`O;)j5$b5lQlXlE2p6isV1 zD~-S9G!@L%F)c`;6aI+@@uH{A{@`NyMf(uz(}jm#iMX6+FK%({CWoZhy`Z?;!8J}g zxP$3IW@8PZy4JE$htK_L7NZs5B}22r!scIv46HZ#u>adoRr%1VPhGd+ZYy5wRPUXl zj%!lMDIo-_+g9Ee>@Y1XV1V8{!00ykz+8A%AVo7O>pMG~4BGSy$h&kASy4V*wV zeFHOYwxOgLYnxM&S&B?_f!jG>P(aipDd2nuyJq{y zN#PwE;B45i8ehBc^=NMVH$34n_ea~XpMnT;yWTVXR2nxec3uQxGeED~!SsBKzx=B= zVfE1u!E4|1&$xbeEoAjkNTG`q7btaWQ9O#@;_UAw;uW_o79XLAM%3U3U>G4_`Tmui-lts^Bm-GK!JWF^qS67$5Ipa$*$g)-J=!6{F~M0!BwW z03335hW;4`!w0By7#kVEcP{=Y)}~t^zRLzWB9Opmbm9P|s1E06iIFZOJXQXiIl=`| z)8W=I1gbcX<`fOLu6SNclnY{WSmqo;Cxt&2q7h&duTt_UPT-wGo7hVs1c!y`g}mmN zdrkp;^Je#teR=HF4uGnL-+$p7$E`eg`HM8UgX_?7&a?KrK*#@|=J@^hKVfv$-6zjN!b1U>@ZO6HfD0a4NN%8!DfvVvr6sBwIgx3L zCbew10)-0!F(s{g%NBHGXbS(+AtJi`sHSP!oH&72Igwe$=Dc}FmX{R=>%e9~4wxe^ z5nXW}a-yaJgb`uRiV!#rYQ4#G&Pc|Y5XXpI0nE?!0b^T-DnO&%ni@F)9?l1d^GI3H z-#v?yF8DK~ZC68FG8oz-O#ac31VaK~jdv_c7oh=I68{d5VF4q&;@GGO_3$5gC{uY3 z$U?Fyp>A^m43+VPjAxszpilff;5?Aq7Nd0yZ;npCnZvW6elD=>3WVM&9C!GkIB@+a zsw(hzQ$~zwxPJjc@WoLR5x{#4nuu<96f0J&!sjmfXFTAM&%^PjJr!^M*bi~j{08{d z$01LwM@k8)Aqmuh_v-@5chCf9X)jJsVo{w&OFLx1N*%K>FP~!z$q`!GGut{lYo3z^ z1H@(y+8u!|KLUg0$Kzu^*p9z=)yJ{&z=z^lfBr`N@Ml+GV&zJVj*TL8dgw<*lQUF2 zTuqff8cGj!4p~_t(^b@<*T@5ce| z2BKkVq(2Bzg5qeGh+pXZaDDj>mVZ+v8X(GN<_=rrDHW%oWc*={5o~KfjlW_qld7Rh z0z-((-c*RI;DfoWP7vF~-w~@EaROI)tUdCs3r^)1BEA3bN@e@U9e(_$#%XUE?>lqV znzcuczrLO8A0rZcjFCnsv3ng2kuin=dr9p0=KExki9wT4mXQ_X3Pz*eTMoVap5?Y- zhA^ulSkLun(w+}HWfW5j8I|YD2oX$l94`9B9;_TwWK`1Mesd-NNkgDtKKpLfsODJWFd#vLiq zGOuDq8aWw&fI+{)?p^y)_bOxuJS8BqGGVMLRVbtaHDmhV)cS4MeAJP&)IiIaYFxCt zNw`YzaxumNw=h55W%^#hPUSxnKQic#f*vKZyZo%rb^k6pQ=iaZ`1`CqW&ysk8!!2- zr{l(3c4GIQy*T}pQ}Hv8z9&LV23?BmX#~p@?4hbqReB@&*lGQ7y}CFK zFvcRlF}r3476bm|eILVpFL)ZZp70R->Tkaj@Bh-R7_B=EzTtSZ(;E@$0h*>oGa9kO zrIGy!K{188*vyD?nR7;s01E*z8m-dYBIO3TSp`BLqp7X%4JW|2-UXkzyoZ;*UY8wWKy83s}*Uq5Ts$zUd z^2~h*?nmxJHnR$KKyDNE?OVVLp8HGq*q^-ub4!=QaxH*Hxlsn-C7qCOuYE)&jFbS+ z0c3bEO;~YBF#cW4fh+T*Fk>jjNO`8tS8=)UiFB(u6cb=TM&KM2Mx}u20)))~&uE7& z)*O4rqQ&qr0E@ci!RvqUH7WXTSC_kocRqOb)D1_k`v}^66oZ_=$X}K6jA~O_EWDf? zQKeP^T9wd|Or;jPGd0j9oUO0`a70mbbnVgFb0e+E>T3iK7AQyt5%|zWi`XztMNGOa zL#Eggv7BZ3> z78jS1n}jM1@xb%$gX2#*7Wetd({b9-n=!j?BYe1wrX9g7!JActrUh~XSfZtD&hB*8 z6cBqrH4RuqoT{;F_a1!p8`t9N-}(-2y!v{4`ftC4eal14&CZ~nnj)i#kB36XP0fruF#1L&qrsB1DJ47>|K&ZznoR#!$?Sz1M9Eq?yz9*<`~ z^Kn=+x(3#$Ii6g6*;%|wnwcP?V;YNc)qgejlqn@>S1FLe2x#^BqM*6kxC!an8dLbZ zZ#ga#EJ6Y3%3c|bhS<9ZeEMZC#Pp`#n5EKP3EC5u_axlwS+BYF`13D(fLZ@PRiNzP z_2YTnZUMjte(}t;Rl4?(-xt?R{VV z?gs(5%*@=~?R95v-g?Ac!tcf4j|o+8CTA+s7*s|!vMvuK(8f|g1IVH_od311|2P0R z_U{AR8s0W(a_y4^^o^zgh+k=jM$mYXV-jq_>YDNpLd#-}_LZn5X+LjM1 z%B}=%fpfsFvkKwN)%(Sd#-JEAoOZP zTaUZ_{4q_*9GDl)~*qG5Su1)hN6aEMVm!j^S?oP6SO zIBeTCtX(&QsWmeQp@M~)M4}mx8m!Lm#f>*yhwoi+J+8cA2bz&#Ze~WH$I+jjMnFW9 z8hB=W1YHh{bcX}cS>X=ec5wvU=j2ghRWa5;poYMT@5+vMWq!GZOQ~Xa$I@zxEi*NK z>Tws~{GYrV?tb>sNc+AItS+Ojr`SQ!SXU#Iw$0@%2z>HfcBiu231x4Uedy(nMJAQa zQTBj=frTC3(dYOe?pvKbhstv+E5h5=as_$)fX#O=x}5J?`?Ca&635tDnJ!Qo2%tbQ_TM zh;_v3@(3rKybaB2qJ=Cg&|P`#1}yKM$CDeqjY)X?-=rg&hX8@k_h_ zRP@I+c6jmAjsv`kZ0>}*enHU4`RRaDSNDe1++0~4q13qNgm(9lPUx(5gM%d;1Ykuc zr=0OuUt7Sle(ev?8w5nJkOP?*D=`2QL1@%H1eck#7T;5IUjVOEgaC73WV+_fRgkBu zA`8@r`AFFrlo$mjjLnvMp+bnzCSb5E!3OtHdDm{Nnp>)K6~Qsa;?UR5eZ)ObkS^VR zrO6HFk@MHKEvl-PyGU!T`&Thy&z`;5dEMV)c+ z+%pS+Kyx?VAQM2Z)9F;&Of}|O6c4P6ous>9Y`wb}s7@{wTmUCn^bCs;IS+C9x39-V z?|TQP*Y>;Y8Uh)EqlLv9RdwgpN517_pEL`tBNd#8(73hiaErHr2KYI>|wsJZ?&_uNb^egn!%!Bdi^G> z-+VYi)uTQ&Pdf2DKIDUqDkFR0=56cE+O~d^S?Eh+b90qtYn3p%E?cv$77| zon?s0Kogj_Bc~ETMrBUQm``?rjZ(UK%=|c-l(5{aqH#y^jJh9D#eiO~hhEKpCvTB* zM$BeuMXMy`XRA^P8h^2RFxf|>5a?1z)BUs7*N7r_`tUH&IOa`}^s`MG} zV^H_VQg*t42EBs=-J0nqm=`uf@hctv5fac|jG>R^-3#c?&^5}mTizwNJh#pMAr3j^ z^!0UrI zU}-huqU%=ip|36A1OL2$@7=fxc*44Y(7G(gDl!#}2UOO(1thhcMafAII;;W+Ar`Ac zmJu9DRq2YN4iVV3l<=Ta=df=@imhqUi-v3FF?Go&|Ky$-Q$O*sXFu}Pjc06qd>-aI zyIBv2a0SV^ky->Ohsgv`s9RuQUY3B#o{(HVP*KEgj(|R94!>u+?W_k~4a9E(_&0t3 zlh@s!^{%1KFJ2v|tOqNWoQ6{#gkrI2B7OfC}o| zCt+rq^rHN#Xt??2y{P*&^`IF{!FJgbR`xF7*atlkY5pb&*@rj;gC#_oJH&n)?`I2kv5sS|6st#Tby9 zRp==XXs&xj^h8N1z1oGZR(0Y{!mqX(^VPQ@f9dlifTJIlStVoL(s#4Loz z#xvcv4MDM@;6n%q)wnuj&ZUAQKTo$`g2S-9x{B$UDP#w7YWUt_I!tRPb!?{*XejFI&@i7o|utGkzKYK+>is(`)2g!`X3z@Ehhu#6S~TQ~OX z)9-!fwrjrn$(QZ8=Cf}K(SOOzHW(N=UCQlJSXw8HL!^=g6oGH_-Lmo?Y1mk?@QVdn zu-9L@H(&6IH(eb_{!kFBdx6x{|T%v{>j=xFadopOh&7Kg5V$RbkK0d4!TasAzpdM7Dq}C!J2EC|3kb z+Csw7O6Ekd(l~YcFO?2iB7Gke+V0BbhAenlQqX(2kJ$~5iz-SmLxNityM#PHmw>?P z{;oCTUkRWzypG~6*&u8WTQWid^1kbF{)6s^rG;fwHM1oQtj6eSN!+##U<9>ApIHbn zfgx8pUemux0O)ME>I-nCsqaeVy2Q1&5anKBv#ebDF&G(@7**e)t7ykUKX4}tL^1>B zwAzb4H2M2ki=#9j;@Gt{cy9sbDn_(TOVi#al&R($*$PW&j`yQ``)}481yHdfn!B`mmF42C)2}lnn>3ALHwG0RY_HKJeI+ zXWw#e|HMze_4&^{;Uxc^C*FO_w)5`1-X3x09PV@SG|oD93MU-e!I94%T5G<2QMk5Ph8 zG`K@K{Y5D_DSOCm;?yPdbvlK2%A!~eqPeYO0y>}Qgn(oaU&f9dd(rFFR1P7~=1L8Y zI_F`?i#M?jL#flB2@H#H&Q2e2u?DFrDWqu;`q%`QaLtPG;IE{Vi_(XbcxS2Ua{?G# zO151!3#5yw&8hN3fMxDGzNTUojB{4@n~7baA^>1)MGO$^1gmi2Bkzgj#` zvD3KlZfkMjnR7Vrq*<(+i`cu8&}6lnrTv7pGmM7)@I}k`?hUKhI7N#BQfQqrNIHoC z1)mPNVX|P1a(5{w>GPHr2rBH7kg+l}-23=h>|V-1%l>nl1`*dUzvgL>U(d=193v@#=8sR1S5o4{J6yXa4+eeAj}#7r=kW_dj`=nLqdsKD@NL zZ}}Sc+`uA*AODJ!6H;nrsjBFb0cq4q&=N4Ti8L{+h;+_XT~(b$6GKHmIXItG*c5&_ ztG|FVx1ite;ijARpzig$e(0-v=CS?kpM;N=3#uDmfw|EXoXSWb3gEarD>#hBS-_>G z@^M;Bjxo(kAzGB9z@CZDmBi;y+;auwP)O6dEb~R>z-MuU;EvNc_**G}!mtQfgs3!6 zSIOVS>+r-2AC5*PqrIfUa-f{|l++2a5s@rDN%82Mv_wdN{X(7SRxqDW!pA%3z&A6 zkK+>{7SFpvNZL&d8?RVaX>&&0E)@IBEk&$6)eAV3#D(WLZz~5>9(-6UcrTt~^m*!at z60{n-u4-}D$N$`X2>zLa9RLqrlh=P60C4y4nHM~2!$1E0pPaYl%)|bys_K^n#8aci zbsi9ce0b3^tpmRF_V7oB+e*yYLgUKpVqnA=nw`oZIn?>xsa(}+>Z@=l<;P`C- zR~btJ{->|$O(*R`*!J#N)%!fLO>ZS3608&%qJNcw35az?q2r|Ai+r=fT1a5CkdIQC zoDt&yEl{!sMbQO}hRnk@Q1C9yuOR1yCMWd!HTvr|qZ-U2SS<-EfjnWUbCn=^wP;r= zaLD2={&o(Z|22><_7a}}TIoS_w<`)=x8XQT;GxT!ckQnN21I{PGEU_`Ma%~}hP(GD z|L>EEM-%Oc$n!h#vp@4dEG>LB3>C*}eE*cRr{GMz1AsEk(mY6I+BcC4GN@aVhD;rtV(u&|miq%1&_ zS*>p>8vf#2%eZ-0!l0&N%1|j+(R<~9GUS)So#(6sv~g@PGBUYMvWUbR8w{%>;4a&H zm|x-Nn`~HIO;{NYksE%licDoIio{I5Y-yEZmC@?sJXio=90#pFgSR6ba@KgM=Omb;Y_$ogIRJxWR`%~rV_DEy06My0RFI1S6QcOa319zanH66_AT zNFdNVsSLW`gMRanGwON@cRTS29KLl9bxn%9Q#on|L{@-)`xvRD(bbJ2po0N1)`03S zm{^!nqS@UM1L=5fM=>iUNOFQD@eX_u2*nUE8jWBUP*pXcAjJ@v){3$=U|xGwF>ZiB zp}0NdzR>%dF~Bg^-2c+EFu5sWWV&NjRRlNga8Gm(HVF@T&{=4Q`vqon)}_34BS1i^ ztP~WOSllSQFM%i5P+x;A|IT&5^&r?CuYM?X3XJfygCLz8;thFg<2q#R2|d@0|3w6< z{u*5QPv60sjREeg;o&ZqiD&HHxr9?5`NZAXnm7JOGlLFZ|8uS%IRJ2Xd*8!P+q`Dm z{8I-Ts$a;-kF^*p2HnY$cIarZ$OLM?k8Ec{ba z!H6GJ16|64R+DnZm1>F1pPSJLd-knj@2)*K_8t#LZkHq|p~(W3FSSJ3McPJOI|D&Y zC+tD6z*KVm(iInw$q&$io2Vlog~x}F752CT9DnW38WTA)P0|X`(;nt8%FqRV^b~@j zObjtGFD1sog2BB--hU0A`U_9S>f$OIS3R8WzCrWy6u{dw9%U=djY2 zrXZxuowKHH!MQboY@d8k{IR+%{Uj^=Z z!~lzJM$gL4s2Mv7O@{-RUhtPr8bvYOZnId>uzpkfdPdb z5F5bX$O;E-^ujn509M!uIN6{=eV6;HSWHLNQ_FP)b3#zio%0u|0@T7Du z!bB0AqIkHs6;PQ1e07MQd;ED=T3AG-V9eq>&NB5&-TMqj(*CsqVjOS;v?&8Qp~(gh zhF&&QA)}6DGI~}cRshhV4sfvuyD@0(On<^g3Hb9q8}o%UpnHf z(>}Yrcep3O9GS`@7^@GuBEg~l2nIu}YgE-Z>e?V$zF5Rs(GXbVMtWC0M!E(RFX5h~d^s-w6>G7uLx^H;C`f~`b^(3$6ryF!?p#BDRrMb< zIEVJ9GC~MC3xkuT)Fvok?F}mL@!+ToI>)ap;)#?}u>@Ie1_P-BzLVxD5_?qr9^&#& zJn2b~MVlJ5IiYEJmLdq&NYnE@3;;YJ8ENmjRBsGD%#Zrmmn$q-jXDFz#(>i+!-EDx zoYz~yed-2xse$z=Vrk^q+0vos>^B+U^KmJ z0T58-KR{M?QS9n6>6uD0>%4}lA_FBwoz;L!SPP-*W8JzQ*3ZnM*B@|h3x(e;kz6HO zv!Zy*`KEGb`ETS5vr@>a>{abz0RirDj@L+Uj{l#pG)5FqT4s>1zkpOn_gwC|@?8gH z0A2RQFJWfGpaVb<*sEg1uIm^5Za@Dkdw}p6GdtM)=iv2!U1KSIfG>Bqx1BS+ZPT4L zyd~D72LNG!5D*a+)I&j6tjv=0o)wwPw6fxN9a{+qLeK7sO*8HEarzV?N2!CmtJ?napyhe z=PC^T{{PYU{{xr1Z+gr58(*>M=-&Sdj@g`)nkGfaX{IHX-BB5t5(+L_?6f=`RZahK z5puDLomEOjDr?OG+QcG3Sw)&U#cUFSxyAgh2Iu|K^Kj^KTTuZ@%cIY`03_bry8o8@ z(~>JfU)#R3*vK4^g%OY19gQN`DfD??ZHe-^avQCoJNHttw8!X#po4;+0^hZ-icdXt zf755P*aj!~K*^EM4sVCJJ|2s+?sXy7t=|L#Q$tg3fntyfP|)SicDV~H0jM$_)^Bmw zxfPr&Kbdhs&ZJ$s47P<8E(yni&hL*4J&+SrH{W~rPCx- zz>GN>xeUncG5(-U4Bjhq%e7J82oq>ifv&QCWD1z_2eC?AYq2uMvyyT~UDqr&rOuI2 zO~Vi(p7fae;WvNjClE)9+d*c(0m%*n*OiMqxp%}ymN+5j870Ud6Un7#@LpjJt@1=8%U4OVj@g;7o(9ipT*B_YmUIjU-TlRd=rB%&CuoqAj7RjoVx4M zqu>0|4;t*(LkK(hfP>e;Ykd947=SB2@rK@-BWF&JecT0B^@Bx3u>2{7Uuow_N;G8& zK}g0*)|P-6Mr6|(FTjAZMr~*_gT7)g>|Sbc+7UI5+gzb-*&`eP`bfB8PlIcBH|VLR zddu=^5xnn95(*-Zh7w@V0g_?aV1Vfti4q zvl<BjmnUpA2TOK?nBC-c+2R&2@z{I5Ab)deJy+mmga8}ISU4Pj?-Ur|0P1aqX>+G2m`iS-?kew6fTD^_ z>6ZYQBFeGQLNyJOnE`xZ>JBH{66EuBexDMIi>txd#Ds}WZ<6_!$kV|o#fm`iy1;j8%P;}-C@M=jua>sN6^4eT8nhB?66glvvB zkCdVpJDNU5MYDJ1qLmH^%78L|sTE_OcHEkLxLiwS3?hWGA5vm0jVqRQxVVD5opV>% z@`9Fz3b?Eh_l@?Rm?wDg)$=n}j0~O25Lo$;52BLxvSI>mR%$#r8L+HwmTd7r-9qe3eZPIRq{)|!}!2&7;#{fle>wqXCUuTJdM7gD+ za)JW`70|-SarzMh9JMiGwV|aRf?;|P@YSn_fK?0(QU$ZRu5@@+ZZuS)=+$YfSdn5W z3My|i73FX>VcXh(Cedo?*M^(+Ht4B{4oagRQO(6_48f3P39$;CYQ!60NSMEQh*KW_ z+#RhouQ0P)%e4HkE;CC{c>70hp1);udA2ah3OK7qy$eXEvhKpNzrPY%V1Q> zqftvkwlryRrJu=yH~vy!kP0kDqkottJ^*0dk$rsPrN4u)?kFxScrOl~BY>C#Dp)cW z=0$+&e@a|}L)KqFE;WBSl&(S?1u^$r0eVV^6ClvOEr7KIc@=-S#!_fyD{O--T;VEPOrAu!D-C-G41!@cd_B&+h#lph^v&pL0f=fqf1DP{tO4#vWpK$gqAb4jJlfG2oWVe>I(4i7o?yo&+c zXl4a99lQ=+KXCm>006GJroZ;s(dj5XvIvco2aHwABps+^BKEIloVtA)hpeG68MQoQ8~TQiUp$XBQ?&f6sssedM>!E3 zi0r5oY{hs130+b4q?!SX5wlYft3!u@X;j0;!L(^okFA0mAw|$8mhdb>jpBkn-L}n$ zbsu%y)|~XfCtn%S|K0(x{&`Jr+B37}nAi8JygNp@BnnU~O1;?6a%IqcQ(^%~ow6k< zg>w}nDN?O-mO#rns}Ya^N!dKu?z0WCmCj$ZKS1##T zWsKqsoPGrYgMuxzj{wruL5vb5d$A@9;E+WQ7IcD(RRGtrQ`~ZKNajoNKy)(qF}jQi z{+$+J07|@qD>7VrL<8V}G7v%!$8HID@cr+FUaV1tfLJNc0l)%!c+19R{ObBu+?)ay za*cjeEQ4-CkU_=F;cE??`~LVgfW(@(ocqe~ zxJTa~qlG=F>Hx^kZ&u`oeEn+u3s8wiqf4Wp1A<=7RRO znH{A54_^Q3^&}yR=9vh-F$5OcanA^nB&PDOJX{p?^mD4?9HFyP;uy_b zsl;rE0l8Jwa#1Rtk#Z|}JEl`Zh*(^8-2aq0G_9jovz=%*U=V??T)BclO%|AO02C5l z6g6mxB?bLaaPnZ5#zBQDjt2CCBUobna|4!#iM;?&SiUVUfrEq&n$af(w-P#83WhEC4}`aAX9*+ z%yhb<@+mxv3#C|FrocSu@4!Mlv;yfP&$)E8GgZVh%&hC-EARRPthDQp+mY6n?P}?| zQ81d1pBv0b!;jx_TrJNeWL+s-LBLN9bKG5JgCI%IdlGEwr6GOfOabI`$0w}Jof$`w zrL?^GcBObsbM4MO;wXV|d^Y1wtOGkS0KVrM{Qk?Hg&jL~b_yM$*dI98;*6PuWiud= zO>zKv#P=$1(CW;&6cuEB8kZ5sj$T!BP81_k$~k)sh~|383FUGBP812^p5nd|V$nu6Z3g`(69iZw;G!E- z?j<2AVFvz8N=z;Wt}|~d0Fe@QUU@ZAJI_C)3=1sE6)fS1J3nZ&;e@jeRNtppS4t7=R z{LChW87L8XmdD~ci5etT?6`G*!o$y;#h#@WfFUVr`o?_?mWGa2K{(ynm*qv_%fC^^ z>d-4vJ}6?Cv^iiQG7ZZ4#%@4AQVEvY1q^oM3FlL!H)M$k_oMFjv2g2hI`whSz17SP zob?aD%>0mh|IA*u!#@;zVSl1#0|Lh#W1zJdIL{#hpcsT%z^EAk?g;AY*3FZTOZ^uA zeb;6fis;*&4^U4+fYA%k5VvsfV)%CJJgQ?!bL=bV;% z7uhZS3Jc5|2Qn3s?j@P8&rDFlAu4N|%7|9FelChd-!WsX0YXt8oLAHI1g$m|zF2~Z z%5uqB6%yLtK^X#}uCb-J7f*TeqtK3^x)hF_B2KDC7+OG^S*|*OStc%J>*jDbRI!xD z<)v-iDJ7mij>$mF)H9?2onXjJ9T>S5DFe9$TXb8(^~rH^&+zG^_ThIA8Dh{zj9OLS zL_nJjNvw|t?)yTi8;q_nS;}4Z2WXi)GCU``2oO|*!w`exe&-www|X4pX*`eA(|iso zd9AHvhYm3<_Am}4wa91l9P|AN8o2ISdEO!vhKiHffep=X=gt5)kCSx=#6CD2i28mA zu=R)ItM7dm<_?)g%z)KEM2l>W9p7E?^MC7=HyP~r4_f~RuYd14-~izI>#rZIJ$CBO z89wbX8=UAIU=W$X5UU!=odJCcumPm(Wo;Ww$Xce7_f^1=Z6Cf z7J=oV;{m5kV}7-K6PWHreExe&*f_)d?GWi7v~rMjOhfRlt^mhiNSU)4BrswyBy&vl z82Rftp-GV?gd;7);=)L+BGe`DLLlwyaKI|$Heu9^u>GDtwcn!ssk`qv&^f*9fcZ0j z`mrC{d(&tKav|Y4uT9G+^DY?5IaWqzvji!NnlO5s!d2Fq>%U3`44}21C*}e2nNzef zRw9>r5Jh%28Ew7=|MbW2Mefg1t;?dMRY&2>m8DO&C^!Cwdj=BTRCoe90D@KAr$)t1 zVb3pn0T!;*M}C<%MgWxB%7QHfMZ7iR8OUmp<_ENiEy#zhxeBHEjT-*k#syJW3ch0i zmiORgzx|7to|XEmD_G2U`|bhO7(qr~Rp>%=j?)V(L95n_RotC8u7$h6cGfeY=SqP( zOtCKnO>_~FC2}hV#Skq3lt630qZfc%njX%m8+_)-J$TWfD;TvAtDa$jg@}NRkPYxa z_DpBYWEH#SfD8%+K^9|_)TbgF&@>rOe&WNC=Wj&S>kFcCESh-jfwFBhzkC6>>Ra&q zO5o^Ole>v~A54E$upXHx@Mi;Hf!2G6Hpk74T#SV_5@)|06H2~r^NrFf=65dO)@#29 zPmVTlLpGi)`b-Tn8KgT>k2ZtQoAY9_MXbTW6tN z2_mw@%I6mKW{TP_ep-nk2_h+b1>WRbBJmj*RHAJG9wvUCimDu_tUx}%ux7f4V>Z^R zI#&dq;d?g@QCDMMVoEANqzL$OUn&Q>1Y%&(5?aN4uiSFbt?0XGj%1E@#8kkhX#g|E z4u~}ffw2M63_w8e1dkC5J2H+x{{ag?`s9xyr`OE#U7z^k9fRJc&xX2MG8ikYDzbr=rs4>)0E#>JmpPf6B7h4p&{pX{2qb)q1y)3I0j0d30Cu{sXfH~(OM0l6_rjLRE(k9$67HVMU#rVTly#Vw3_R?)-2E>4$ zzitLc#+Ed{u^cBUq zE27+&yHARQuNXYR5OD6@w%`Hx`w8USz`aEu4ZfEuJb&+6tgTu=ij?mH^$O6LP!to6+S9&q@q5B!QjUUsLOnsv1D|tICnV*xHY(b)$sWBOZdzY`_N0w zV-IzOX4JqtmpCju3M&Nm27p)!t`FD#tTXO}!!}Q$?oGi;7tk^?*8~6niAgE? zi8Ef#G_;2DQI@xhaa;_DlgW4Hdh)Fu05a>EP?^j1V0;#V;CL^fJgcx1GH@IQPa`bu z+mBnX`VNpA$~ica8}?nl>gWCXYi_No`ZZ>~D-TBgAH4n}*8v3p?ryfG*SCNvgg7Q- zgDFU_(5uu69U2afwq@EBIz~>1NmdGtEEdKIQWjl3aYa@WSu-8VJ%e$A6Nk+ldsZ9| zy3-8yjS_40J1{ed_{KHMRMgH6Wg)QD=~&SxSRkd(vo9r3^5Mm1EH)G-$us5#5p81E zHK+j#?^TouuOc6^Go~R%$C|^>Tn;IJ5x{cy!2^7mSvvM{zkA)9nWO(W2j7>}SOq9` z8mO!|<+KD%MO$K^FE|8J+fjAhY4K+T*ioqkrB(UF{%|kW7%fnOw(|d~u`d_Wx+A9W zi5I*8;gD0&wj(4Yxa6N6Nm6Tg0%{oHlj|z=Z{~&-Fp#BDIrv~z6<0wp$?JN9o>;q%d^%d1gQES3?3XA z0ZU8ExbUYR3Ez7?$K0w$Lnz95e9rj(RPHDiI>_dg&w=NG0lbQz$O1reN`MT%D1XTV zZUZ(@q7kE&6YBuQtMc)hBD2s zeazR);uip{XvhbzgV(=#9cTd1+kEuQad7X^$|ZHk!vHFRiT>X((*c(-QB-)F)KXQx zRRRdnys8_Yy;!9bXgrh?LS6!${mVIy00s%o%|xv0M^t7AmeC6lm+ovaTT=kXszPeB zY6DOq6-kjGf89iD-(W0yliQ47j@BJjsIX-&jPu$>{kqd)_NWJBeOYz=!y$bvHEy0{?w61bI_u4*g&NXUpQ8n_}2deCx znX{f12T-XpCmgoeCdV7Vs&fMft-oH1KIk11iFHznw931OeECr2FUW#~{JX`fG0=JoqLNAJmIJS-T$42_;beggd2FI^OA+YBBBh{X zzJAV*`5|z>lcuqEm4dzTj6rmKf5(V50osJRr=T#^<`2sE4MDvDprApG-{IJ|Y^VY) zxTV#Ebu$%)EeqRGKvLPe3J8_=gakoK3At@CTxqfH(2b+$@oE4+(!d@w%SYYwVK;0z z_WXBvvb_XE0jbG|YElGHNLo+?v;6<=Ow)wkv$$ehe%cPy0i7KcLO^bv1y&RbP=sw= z)p{1A{@b=02a@&;`*&W6fA~M|17WN?k>*+xn(~m zXVaqloIHaIA9p^GIfI^o^|Jwwy?PCHRT1t10X?{77TgMStlwp zo*)pR45AJx5G{0Z1oV(_Je&ms-;DFcU&>XgZJHdYH=l^lzy1%fesisgm2{yj-n#1d z{N7L-XqwC_%3ALNgx&>Y_|7*w}EBEXSjz!B>r5GdFOb-=f7 zY%n*VKyBLwo(V>RC_Rc3f(rvJITsaP1;g(7Rm51qjj;$DW_kZu1W_g}8H_amit8W? z&;$zz(XfA4_CwA%Cj)5zo6!Bz!`|?oPtRW$uCyw&p44V`Lh&KcVidjuB=k&*uL#4U z%wmWF0Th;9kR7xW#LTrOB)1O>b{lxj|h57vw1Xt7sWU2B7yaRu)xsa6&P(g(W za6qL=r7%`r#i}e8u;MIKoQgFKGV*W{ulwC!z>!BC-bL)C{Rpyo|qgED0wy{)82qFsLdV0 z9mAY)^Z@wi_9e_Gx(iZbuyBzFfac%GV8p7zD79E#Uc$4U{!_sG4qEu&!t;EU_2pSD zN}226Vjs26+R5FsjEWaV5bI?;x@V9prP~ggANZIF8-qbUt2~Ln*JFyi#mRo;-VDC- z$M40|x>bxC%8Z;6a%!>R$TL<>d(1EX1AtEgSmI3%UI(xL*mXbwz@?x2$Ep`bTitVI zFhoWFyMl#E&US|KYddOFxwc9>O0qy`9n+FGD-q-wS%;gE^F-hwQlR8a;n(?@T?bNB zG=15?(#Ubo<7TjDi9u_g4b7;?!vx@~MCw6sE3Z5;(X&fWV*_8gh5> zVTubG|Dt;~#7c2u^Wqr2Y?H z|CQ^20)V&-3$;yqh8fr&+)xgjEXG_8ukxKq+{-yfMNvgkd?^(_xqSVi-YtlV2T;Wd zkU}ka*FlGuF$Gx>0&*+BI@STTVZ)S)oPZetH|`#x9}SRo@2)(4D=CLk8~_aC0I+C| z-AgUn%)f7#23AuA1F6a?N;MRpYl$I{ua&nQLJv$8iT^c_ zE8y?AJ*6Q9Tsq;c6uR;p>Uv3kyTsP%PfGpuuwfQ5Dh=7PqV zGgI|~v7B+N)E&~)axl}wv+6ZCU4iZ4LgJW8mK4XE~1?Pgm4PV=Hr#-BE2k37`C}=VIgbS++q(g-`)|E?w~l zz2Z$bgnIBIpuY4V^?&gCuUrQd0PNZet9rc{LohE2GXQYFyDorB1p zfLs3i%v|!)ofXc&8>n-i%XjQa{yA-FF!*v{3GRky#c3kP1i&NG&7EV-=ZC zu2eqj`aiITLMB2SyKBZU5YRs0A`v77MZ{+}kB>e7Y1lJAjT{)f znN{)^9T0H9MY{`Vn3NAic~KlxJfx8M8SVrMbpBh)Tf)6l`iFuKedz%AgY!8Q2shu)06yLO@1kMLkf9&MeF9uakeDT4dc(-Fec#>xTMxRKr7fr3@A7SDKk~QRg?t^dil0*AFG5hAe+CHzk!8S(u`%rL+R~pGC3-4uYMceqCUYdw>iQ|H!)g zdO|l(22hzhzwAy++e{X|EPK&l0632Xp|nW3H>6OUq&*8KNl6J1!GX#v+U$W5DLHij&YF1g8Ev9CcNzfle*dM< zgYUaaE*Sd!JFq1{&GbsL7TjkL0OM?rKVK++t{BRe(0B`&G=mt-i6!e|jwUip3h6spqH>j(K+yrdB)BT&%AN|xz%wp4)H5>bt2az8Wjp!0SF$9#O*d46Wpv095 z=;*A9@_YV+2b@+D4}H!V!`88NZ3SfJst+n)?{Z54Y$_3Kw2DG0>lzfmhkzIiSKhjc z5M4ow8C&NJtF0rL(vc)P0dPB09cHJImJ~JCV;x&KzwdMJB zpXl{`(IT6}m|QgwpevEkCLl&ZOr;)zp{^srjudJXDDzyvoD`z!JQN9M!8%|;fG8!J znNOcfik&R;sckd(>*qZc`}Pfxdo!SCy$Exc;1}3Z(4jVm{Ps*f`vEJ`wV!3_(*?k- z=&p9HVxSBhUs+ZI#|WntSwI0~nZg|qxG;<3XXnw3B zrh8Mw6gG>1%)vcjVFD18eZ!fAzK%ApAkQ3+zkT6zu;u7kB+tkRSRFP%eN6kHSHABO zSa^<^U3Pnr2|vus-Ob$x*Is+^`j7nCpB?hXcfN7kYhLr3!(R5XmmT)TH@e2s<@RbR$MzjK#5=%jTs7@PzL_AVt{ za_uT|a3C9w+Fax4L;9VMK0BMLIG6|BrbMg49P0)Z{^ZO1uz9vZ17KmL#Ut*#2BXA) zDbJ>sz~f%`=DbH$DHB5P0MDp;eJm^=deh_H@ee;+Rn_0$9_T)IkJo+mqbGgp1y6j} zx}yhoMGlq0VIGl6>R%^x8QEP{HoIQWIClWhHmy4Sfkjpn6lePL;OSf7O|7UfU(1c52X zB3fPXGW-kRA>d0luEk>>_4C-UVJ(JPo%||?yJ2Gp_&?kBp=u0?m9zN12GaKe#@Q39 z5UH%oS?WNDj<5P&cwzx4EBDd{DDQ7p;s}(kS3r~jZE(~%BD5_&y4=G%=4-%3`-74A zRqSD=AMv#>{}J+y-(e6UH!Am&t4uKnye6MdeV@8MkzNMm5XdVEyO`-x)x=;lP!!Ju zGc_bC9Xvrv0?)7@TseV5mKNw7(J=L#IXdD|2J_r`9^}LeW zc1P1RmoDsI`sUo++|?^9D~mQYmEZIBKW-oU*oQ8d+0u_2C_0c=(Y8PI%iVkLdDzT- z=C-YUR|K|Yc+Bh}m9%2O#8(2i|!tmKsOXw5TeM)4H`EvWV&im{l^EMORemuFMCeH_YfuZ>uwIeAsJ0d|_SJU%tJx z_jLE(XI}lhdtU!ffAqHLwefh%G1QfzO%kp&1EoZ{MoEgu#GFuh7r(xOs*1AgbZJo< z{5L@a86(z$pj#+d*~(mGQ^{v<9ia}0y$U^`)=RMc)I$-5%e2r{NQb&sb1y|3 zWC51ncjL>f15p5i8H3@<5U6VT0>wg?E-#bUeYgmIwJK(Vr4%lhknEnQ0=al<^O*LuQ zi&jTBn5S%R$k9S;$fKNmHP&&I67r~N+qN0qu)Mtb$-@rY`gc!$@>6&H#&7(_ika;> z*bwR8z780L;_h`$I5HyC(&TLM>l9E9s0taa-V)fQqt^-j5Se?MQtA}QWYHEY>1aw5 zoIKFMKsG?i)OCp4l#r97sw#~YXhj`YRmPfG3hZoT1(uVcGDn*e>YCp%Q^&qU;W||V zU%z&Q?12`C8+I*>aPJeQv42_bB85-?qsDJ^UwBalQZTfB4JnOK&us9js{Y$8|H;eD zM)!N(tG`vxoc71w`fh_Un7&wp0CH+cu^O{D#sZjsuPRkkEGe4CxC$x(Xhx)Tp=fsl z;B*7HeC08WbFV{Gyhf(QXMu`3tu|PH#9I90+h2}ved-&qnT;?{C`P*5SP2+Ze9Cj@ zN2ais!irTF#M%KC(MQtNRQ{@EF!sk6Euvcr81Ycp_+027F6C1|lneASkglACvXKNN z%KZzF0oOz_8USb@|B|yeC%}0+qR!xncBsN{L`31fY0r&+|tWwmoHv|?i=F6Hka69acCd7eHkv!-(*Eth}h-{itX0gWgC zj$bZ6L;Kb`z^d2+$u;Pe&FPvj1mxZteC?y3$IeSHLftn6ROt6>?6`D49`=Xt+dsSc zxQ_ziZ|O%X$Er}7_42%U34|yDMSK1GtO&A+jcqD z#iCVYziSPP71iyBaSTV!jONdYf<6~TT!PJBPYS;|n{z}RXoALIQyVC(`*Qc_v>bThysva=fBk-Z)G`%k_V#~yYFyh%X2ie5jW z3K3zritEtF1FxCEA1_Q{Tc2Gio0P=3IRh`9l`vgZ{0N+=>~Y(e3X@wy0fROXkjeQ6 zJVr+F#|jxO90^-ugI~U77ImA^I1mF%3R_iUpdI+>x*m$8)T1c97$!*+YP0~V9Wfj8y8a0a%TTAvfZvXUf9-2@BpTp{-c zxcTaNT>Q~@qqm;>KlCc>ylf91@!G#!-FoMr_;Lv0O=fn>9ZmUv?sK23rZBbb!4JOw z+0)bYI}bZ@%SXMkXC$OkW3;1!*&!CtClt#F?v&}O0t;}?GL$J2S-H`R8!?(yW_4;t z8xU~B%xwR-+1cJhzJAeH{&d5Jb?>?VgYSRO#l^)#-F;jL;@|}wNB|I*hgBWore>5Y zcUmEkjHU8a;Fb;rM z#N1Q`B%oIrMhUpb@dFGK066{r63DTNXj2O)hnbt4LX)6?K5eTaylK%;Sf$$=08m%L zYajA|-uL1i*H#xLc;oWhhd{bCs8U^a=4vw=gP-x@_f{b%)}Jp5JHXTrpa@S2gn%kk z9morzqC25vQe?(bpeO*XaZ-iIfQ;GoJ?y;Vi}>*KUx50M6Or47E`uOVp#m(BvZdih z@Yl)t!dl7I0cRvXb)Cu&7v=&KXvHeG2+cuxPEjIdK6D>FzX(7GNcqHG2QX1Mi0pud zCxydx7+-XoI1Cmm%q@QhpZdrf@ZbmB11rN;J1ntXb=zQlzs36(1~~Kk>+qE&!x2*n zAtYF=5YQr95!L|-T<2iw_F2Xh80{ZWKyaoD#UTH|7=(v3Ldq@BwrEno;RDBS?AnNb zTh7xq^{ySe@UH*;df=9?p{jexa_8jC_a*R@k`7>1PC|Y$E`|9qFyun_7kJ`i zYk51jl-!Ue5Fqg9xhQz9O1IVqpfG=087`?}Ner+$;MN_6Prd9pSa;|EAvmg-vHOYz zJm6)2K0N%)bH4`I^8s9ONAhpGdpP~{)7M>i;e}^xJ$~~$*REUlrvT0mZbt=#wK;hx zESeePIiR^IaTG;QB)JSzVnBA;{04%kFkr~#tLvDuot{%30(-3DYk&Aqm0PUDUp#CgAhW1SwPb?6zuKy(X60=A2~-lSAklHbwN{JHCZC{?3JX z=i6S6z5Dhexv^}LfoXqk7*s7@w092YT)hQfSm zcN(8~{?oAO$XPaqGQ;lgui!o}c*}76y&n8EOa5##`_3In`Ja34xmCY!$L-y}`-XfQJukJRBSWx$&e?#>w8q?al|O_0ah?;}wm}suw5f%I8C6m8lIKe@-7{bTRmI*c z27xxEc;}RQbuVt8UNe2cCqMN!e{#YJCp_b`pZ)CdIp@ARcfkMT>wp0OEH9hGdlub1 z$;vOst3>A~9-0sW+7V+lD8v~oSFG~oQNrDhp2GY}g26Ez4Y%wW;ZxsQ#G0vqQA1$_ zD1}e}k%y300fj7)xJ~%oQLHePn{87CvpwMJ*R0?} z|Ga>y%Fv4ebpTQZb}eQ+<}NeXze;77O2L^>Dx=A=P|QL~iIk@U2Kq-sP#gewPYdp5 zquU(=P%blTPJQh2zH!{cp8dSVoeLLRNDW;$6ndSyl-w&yf@`L|;1h*-%4-%Ek13km z0f7H4Rzs^j1UL)BK$f{#7q8)&0K=S0p28UPhtKWC`=0V7?AU3r{;UXdDqaLye@y$M z?MS6EW*F#h(B~ag;&N?qxJ3bp=_#NF(0w>5Cgaf*EZKo&C>@a|DuJz10K2Qqne%zU zNX3_XLoT-h8q7I((%!6kR}JTJzteiS_{;CZ_HBovX_V^c86hSFa|~<*vk_joFu>X0 zUxSY>^s%*a%tb>(^uh7Lfy8D#P?iFm@9SPt0|gMBXE%h15xC*EgpBVuecbDY^|&b~ zxCeNO^w&F(V!&BU} zn|cq>l9qjtT^T95S6Oeyu_yqve6QPAtZ)eg?A||(kN(EbVasuIXe}bdjJ;Q{;3uB@ z_TfqQyYS0x3crH7{?_d!`1e0@oqY1iz3+VIJEw2oe)QYT^K*cFLI~Dp_zD%c%bGU} zT^v~M_B;?{jkawOLqrS_qlWsyJ*(}zTxf-5R0hzbjESLw3(A`N)KtGdDW&0aFTC(^ z?|sGZ{_c71zTtm58*t!Wer5(ar%)&}cSmKB%C}8OZIZxeKvQ7@DDdc4w7@z6l?Ciu zZt>7lXRvRDKHsV)p8oLH7qDfvLUI;>;hAM{8PR`02}mCUaCpp}#Zl+2b${xwMB8E^sNY?P`6Omq*|(RaDu5`emCuxWS& zKJ($1;W@wj1niyPhqiT~0on!%W;E1DsH=px?yqsztJmTgJ7)3CVZ@RB7MtpT;1Qz` zF_POaIp7uB2PeH#_J9-(D@?ONKeRZqH^L<&!((n(ho|2>z+4~`W@&`F&d7mTCMO?% z96tC*FG8Nb1&9@U9~c!mUvq2$1nn;bLl)R59{~gsw3qZ{sSkaqXryB87dk+|&`hxx z0$~n4J8N;=#{t72o8m}7jM%+2hmSn}7qR7-^=NWN<-oq{mT}H=-aI<-!599sn?0x3 zvy1OY%KzMR&mHX9v*R9X*H6E_ZAbTXU4JZNH4QtoUp7Dmay#5a#``E`m9l%lllVbz4 z(|`Ea!Y$uFDq)*IFwRzIwY^;F74dnJ0glUJe%%P(@K&)vYt{-_9X3qU^_F1~gZ zI~GZqBWJ__>|b#_?(XZbPgVQMfn>^#e664#5>CrMXDZpO>VuH*XZL$QXuGZy3z*PNIvTz6I$ z8!kBRdf{`gxznS5<-TT9*ZjaF-wrQ#uikpUqfXnfb@6o;?3~!EdT`pjIm-$Z-JN9> zo0Up;&SFcR(I!U_onEZx?4;qFHlwOYZ+F7OnN3v$H6UL(2Q{VyOLa!xj06!JF#^lW zj{e+sJmRGicQ1QzNb*lDWQs$KqkM>`*(wa(K71(w>yV9(XBQ;gFWpU{MrlOicfy# zt60Bb4Mt6?vddy3ETEP`Uu*+b-Eex<;@-0(oH;$h-KR4=M6^xff3pKE>tOV2ppSs- zSAoADMSO9ohfl0TOl4rsSXgQ#Sr9@-fMb54!DAkFAH4bZe-Y`{%MfCXj0)Dp9uSR{ zH8%hVszXqKmh()SmLxmp-N5yA%_*EQ3t2KDlpsDC3f{ra}n|CDTfB4~tPvtzi=k#>{ z)hXlDV7bbgJEr|YHDH)d>RB!tV?a0o0N0OmtvIa^VK$bjC60*kQk>cDXEU)(6P`LT zVD6MJlodIrW(Ed9P=e-jU||hjmE={qV1ag`2m$|EErV?fN5nk22VF zh!MFhQU40WQ(#u1*-~P&5tsFs)1=>!hjex-;DcXYz?vCtl*In@qqfDv?@ACrp;rpX zFck@zpF=K!96a=1tZpJvQ+KqT`&(Rm!wP!UxFcBS(=Ey@8s=99Ji&${uNpn zWQ>)Y-dPO<0U=U=aAOxLneXeFRS{#w@np|f-Mfl=KmU)e*?j6l?mIPg`v(9Zxaz;> zyd&;6cf{x&u~%z4_}r&uT!qCL zU)n+vRTG-nNf#Hk!5lzj%?k)9^4a`*VYG;$%D5aJWZQN@s#JJpw5DRHIBudaJ(%FL z14J-Z{?oiRO-8kTGro6y!t-AEYFzZKYp{0X43HdcVl9TMA_B<t^BEQvP?C9QNam zJFdU7vT#nnU%xJ=e5wOgU8%fzcJ>1)<()N81yC922F{tRFsc6vFjfX7PNnV;*vYZ9_CRkp|nt&=sG;MI!I964r0Oiw|x)!MEef%-Sb^ z?&@3Ct-I^e!pI#BBlGF|WgJEbvaBV*bEoL(GRmd-4n*M=sU1LJE()Cy7ETr=XIdAE zAf{!e{i6A$IKx`KoaHGBJ86F%78Fg(4i+gaVHMinpfBZZ6(EEQMr=55t_Uv0g3;}h&?kwow z9BqRh`sSFb5;nvUHuntP%h+obzLFxo-Ui&99dl@~xi`XGNQfb!MX46ZES@UTH@vWa z33od7Fnr@ne}PBedoyftCoI&G51OAcC!DfwLixJ1>Nytz6aqkuBU5aE%crl3gw8`c zcCQFe@;x={no2LmgU)#QJp@290Hg*svmF$-YPYSXC}tP1MRnq}puRwbni)1*2eK`~&t6pU&U zs=$D7>T4}WKRHu+Q|FLO6d$C9!fZJ4%oWB zhxG$PuZ~DkoV8_q`{q@&jic?TW?Dg%2Ta8)0b;>OA)8SGdmewT3QPs8B85riObM)m zVQ$)R#^HVZue0ZH`t~07uVlc+{w+q37a&ohkVz-9VF;hejY><60Yjo5WtF*pZinvE z8#a!-uTyh7xZJ(EdhgzK&v?~4w{5%IBaXn}m?JURb_AvlI~-HT9lmMXX~*C7yeHiM zO)F=wo$d!zgBlqTy&lWPMw5?J?x0|*90&^GV04EB{Tn4l!sNG?qUbEGQdc1<_g_L8 zvV^UCxAY}I@u4#y3^}nPptG7?)3#W&HK@{7=ArU;xEPeP}IW$||vA16*Cbr@9&?=7$@&|``b;AhJoBWU1z6EtLJ^gTq9 zy1)-YnM;1IJOdVhP{UBcP{BimgaD6I!2B(^$DxaO|J#2PU;W&>@R0kRgS|UwWajQS7BNDN298w&hURDy;K2}*!Eyp3(5oVH9%0|Ud7N<6 zq4>y$-h>ao=S4WuuS95Cc%Xcyvrp#?kj&r_Aq>+08eobEf{m4YkuT%V>#hPzoRr%f zIV&|9%DxgO80eRFFY6j8T7$u?hUbKM=qdQ*o8E{kKlvW4*)oHi9sRn-&dZnZ;6M2A z>M`eD@Z}JC&jRXi-I0|4x#yl+ZQHi_l>XGz>m7btRaZ>=b^x%6{tIPK5}32ybdn(^ zBdG*v3yhH&8;S=dt z6vl>cU9*HeOHc(s;N(LGIC@K8%}FSn1HF&(?y;3=31Z{!lV4DZt;iWOrDcJ_*@TKY zUS%r0@ zSoCjxQv$P01eJ>kSe7~J_7NZoU`_GLo5bk1GT8hspw=0xv0jTD3Ik=;3 zhOo8kftkbcSD*Mt{L>fz8Snex-y-&=5zVn?%@kk(O_Kq%?DVKcKxD_%^)WIl!?R;$ zc?m1Y5c3E>bKxWKlqWv|$87DP-F+ou9B6)IL6$l4%)mM^YgU+!QfNqy{&Kd;{P4U9 zOeuzM*EHeGq9jIay zv-4tw{3%1SIBKftOz7Rai{9s1yx_u4u^riONrT4 z*;QWzkkOX0yf~Ww?caX!2cPkbXZ((t-F$lvy8dBZT!{m4<(%jK=z^IiZ#;bMi`>IT zN>(0R`X%M#E0lQT0U94HD&njZu0p>jfref%Ty^s*uG-gfaY1@`G)lP35i{7dwi?q< zvV1~tz=ZsqK77VN72!zd=b$ot;nHQ~47Ay?(m2jNVH$N04E|#~G71LnO1Nn4LSl?Y z4f=yVEkg<6QjoOh^vKo&)boZoXRqi98t*V*1%t-+%4h1Me zmKXPCvDm!0=AeE9%G5z<5Y}vh^)}$@oA%)2fA=k1d-)Z(=$n_|;>)f@vH@bKshA_5 zfdsVe2pNVWx6a@`=iU=X9D67H^aXdu5r=F*n!g$C;$GC%6mn25tg3vD-${c2#;z9A zJC{ERNV$XSuJhh4R|yP5aplMYm|PPrKxy{HEi`s7aVShPq<;uXYjfn@0Q=?#_{ejA z1#7nh!4gtyKpPQldw%5GKC-)>+Vn-3y~xbIcSlnG0I+uL+V$%<&izVG{>(atjRlys zsYR5W2L#HsvrRHx)7Mq>gqnKs?D2Ogl{hM{G24bSmD&trmu=?UTbKabdO+DTCO58G zan~_jm&cI%JXXPX?^?M2t#5tvuU~lK6aL!FmM7o$$MKpFOF!Hz=REZ%kDR$+&0*`` zm|GkIFsj=X{SBczo}jWlR8cG^R8>6=3M_!%>9@<70)F#sg+Kr5JZAemlx!>m>|bv2 zxU=T4ca>H7Ix9?6^pcQb5eVz24DbK)0%oTovbUIDayXyiyg zs>`Qe{7^ZIa&^Eh(@L1II%w50RjK&J+4ZmnEF)Ak=5N@$@PrTVdoRph6hhd2+j;(B zUZ4Bi=c)@XeAb2~3}!ao>G)%OX8NgfgQ>fWMx#N~w$pBLT?nWxJ1j=}xshN}9z3Tt zGZ?a?3WlW=Fo-Qin8Cg39eCBYkK&ul>oH{w7=Xq43rRpP7x$2ux?XEYF82Z5n*N>vTZ3QegRZ0p~zd)LqiYZMfs3M-qp7at6)Xlp|$&|~1+#;+!0^j-E zxA4{f^9pP@dM&eBsv65Xmayfd`?n8z)gNC4#PTVqgas>M=Q6`H0&hygJ~G;NDYso=#G;O>Z3g|=yEAWkx>1(bGi z8wI=-T~NU@(}2sm@jF^)&nzQc_Iix)yt2!Xsj8#>Us_xam@bKLiyz}p0 z5)j@ULRc8j@DJy5_i(|}U$FLL@B7G_&8OY@Fw9OrGfYjL;VI9e&FkSl2z6!NGGg8V zMEU2kf+rbZ#=lW%fNmQn>*1BLGh#c$QMreA9Q9|oa<~S`GO9d+#~M%rm?k?y2?7EI zu`7y#b_Ac1+LnS`N-(=>INW9rB>{ml*Ipu$3$q0I#+g9CK*6>_T?>E)G7mAvj+$&o zz;M38y`K3(9Cga!$osBFtoz7qW;DLJIH|D(PJlwN=T4eAd!o!LmZvK42}<$*T|ood zzc~va$l47``=k3vdGB1E*tOj=H1Ec5-8c!D#J7%+Z zFz8q1`N&*XC^Nwb?m7Gl7J(3Z-585fEf;BD{%oNC-J~G+1u0_J__bMzVL?F7>XMKF zfe>IS9j#IG{knj{Vu3270DC}$zoSb@R(%ICh9+ghSu?;B>-t+jo<0VjdgV*8@5W29 zW*yMvg#Mtyj?4D@xzB(1@Wcl^=His|3uBC5H?w^zseOmJ+}#EPJL<5*w*N_+hG+Ha zUfr}Ko?A{l+*$IR^?9WGb1z`RqT!G=H8xCFw4$9oE6;tg$6Dgc&)AisakT`>^~Ek_-rdYn@z)rXxn3dyeoSSam>b-8=B`Q)><&YpC? zQ@(QfP0!zQ?tTBp*KT}2EIu5=_IR{;n^~9&Ay`ounnI+U(KM>bU0|H7#pHCw0MZ9a z@${U~pu+dV5RbU-Y1mYaP$MH%R8Dmbg0HILb4>nTXRBt1$^pZvh|7JAG@^k3k;1wt zR;_O!;0z(4s@ch}$e9q-sLBFeQpgBZHMR;MxF2B-%E#C{LG z{uFw>X=Vh)is!XZ>;;&I39Ahh;tn9ErgK@0eaedO0A&aSx-*njAZ3%)XQKcYzGonN z6UgC|d1I_Y=Iyeg*QNa3ls%xV6C^5;)*E<#Gj`lO!k<0mLbOX)U}}wHWDP!9{o9(J*}#$FN6^G+|iUj0Nm|vcbnR_?eKF_8XX&BRTFGWo{QZIkufAu z3|>-zo=NGtgKQTlXWNtz>q>iD!MWfWpz@~-a3{deNT})_M$Hgaj}`ySltNhahxWY5 zpvXB<`A7bpTZzTqiflGBgc$2D{^Q@D_7@-d;4iuRh97+UAFu0x0RS`0dv0!4E3-@i z!oyt-EinKW-vUGx(c&rPaLs6@kT@uTJ%M%gBR9t0)fVTUJcET{LhOR30_vFY)vH&L zTPlkp=(38oc+RvSjk6FepiLRQ5b^z8s=8~y{Ho)WL;Gl3rS`dZnFOwTy3-$(p|n4J z&Wvq=i8g7uxVn;Qhq5k7ITRDZF69Qz(kfGRUjS5{tWJ@VhuAxYFo^1nMM_F#GgI$$@u)c zKa8;cXdqVb)bbr%0edCBV6vG|Sr6krD*ypjeA(1#-RFJW_^N1V*{@Q-+)pLVm6kr0 zCvirYc!52Sjv8=U6OSX!0th`70H^B|>CXg%Nd^x{7ce3t-;$dQ7#Y5wZ zx^oSv*TsBvu^OBO`iKccQewBk5ZG$Ej0YfaWB|%ILjo3=`J=HG#)_JV=PxT~J;1~O zXk9eNUD{y=Lx4koM?(%7asA2o>|5T0zkSuOWBuU)DI}nBtS&|MBOp+kE0( z{=`E3Rpp!iPyzjq>T>t+?Qehk@T!W>HQ1)IKSQK-PnVv8?R;F@qqycwmN)}_^>3Ab z7b?(sA>%@3j`E$X4_Wxj16lmeB@hu zv0<7y-3G(j>41J@w5ewXs<4JN-;wXaF?yz7DP@6rQQ@RLDZCgzzzA^JRdZ(26o&oIs_)is|Hf?m*d z*t7)*p14o5XQXaGRH9@BsHFLIeztt9SZ$2Z*L$iYcL66N*vrGp@|0KW6b8y!RX5QR zPg7(_d2Wf5DBmUOkt+%U?XFmW@#}WVgSG-8kq))SGXZcQmLVr#umLw+=XlT0J|2s= zehF(1nPVfHVAy@-GETeTdBaD%?Q@q@(;I#hh_6sbzdNj7`Cj+B*UTY@YVyUT6Ga~BFrJHhOxmWEzR#Yo}b>dKJv$d;EEk9^(hUiU(GKja4{;m7FG z$v-gHJI}%P+2c0+T{Y+(Q(3U&Y@ZpTe3(LI0EK~T19?txGeiZ6@$l(@7QZ<)QWxws z=sCXf{T1w)Pl$Cy@Qmb+ItJ`rN_gzqYp~Q%@CQu1xjUK+Y?zMt!evX?w~|pA1E6*- zCOrD|84Nw3iVg#NQvcxBx%on1RVoT&oeBjhQPEInFi=qeRuo-2KnfaDH$&u%8!ubN zQ~&0QtLvG$^Zu)4fZaV@@PwzY{oGf-dDQIjr@Sy$^%<~ys3Y`9c8(h$!MP@mEI)i! zKqgZ*z0l4|Riwfa-Pb0>swUVm@XgfOudayJX*GeJ;+zd(R?`57I`F?w`U~t`a;!Ej z0f!q}52z~kevhFRAW`aHWV{9xlhCFXRjfq`D`Fm8C@Lw=2iJ+#e2jeOAiuxKEmV{N zl@ildtBP?PA?SToUe=XOkWxmdBNi8jNJ}-&e8RJF@&oUSyyFsTyWk9%Q>1+etbakQ zD_{cZD>%jqD3EPnH8Tl2qeA1SxW_Uiz<3vaR*Z?el)c`IKbKFA|6!_vSJ)k93@|m4 z*hOqtxrgFFy11OoXK-G0M&;rHxL^2Penx}izY7>H%3L6nbD_`YQpuN}@iOktm?*)N zyiCm6SV8a|d9NZv$|osfoEVf~P#OIkAK(eFSaJVXQ}F(JeD)7shg-h?b*$Ys01|!3 zFkm>pER|Wh|25fhK zr~F9eOt=a+<&0jhkNNqP8*aY&mY+AXFWgaCn}6#n661he$3Nr|d9)GB?e^@Qai@Ds<*U^N33f-;8!+61hdiTKc$ z=drYsuyKmVy=gNV1@>&1uJQ42&13&^W>-HCXhs<)Z|$SkkEj)Co{}O*MHABEDFTn1 z3{LC8;G}JXM7dGvi{%x_OI3bO(&l4 zwObdTH+R~Ze+r8a&hFdWp1ClG+F-1?kb^B&ALUKyepEz)zGThCBU;Rb(7WWM{gfB(pOBkaI!hF&={yk&)s= zcFfGwSiiN##UJ_uyzfbm!xb0bh-%aEQt;*NwRfB@sGOOOMBg-lBdt|g^@?{Ooy{>9 zEy6TZGH6tC0%a9_*3_**RKpkyP{B(Cmizs{-vr>G@dyBx_lDl4D0Fj!MgG65zH~1q8sXfG>4KnOJ>I?SQ2w4q#Mr%o+bE5(I#5wA zz1J8Z@MdO)+^!&OI1bLM# zhS{@J*>CxduKYjnfe-YKJY?;0tHYJeRq$BOgo#l}DNV#X6}F3K!xSKGuJY}22|!JL z2)y1%V5<7Z&A}-DE<#=w zS}uVeIUy%UsEUsW+FYca9pg$PhBZh5;BMU?Xtd1N_n{m>%9**AF z!%FM8dA`NBuUp2ZnH~@vDbXS`10H-w7(*JO5JMeWHW%x<;Kz5^i?XP0qk2} z>eP42M0BJ>7AF`X?P_BgLl0J;yz*R;^p!y9$i@xa*UiffLWaFR=GgaDlU6#0FXN+LB+|Bg8u`<`VG-Lc(7F7p| z^$ZS-!#9E+9Rx8jV`c^N19x*!UPha@+q)AA-Zdz5c0x3bn`>hXrc|7WX1dIBx8Avn zp-^fn44#It^~d6-E3U%lUh^spW;5c{Nc90CLN@HX0e+v~eDm@#=RV?cLw>bc{49VS z|F7=5+sidQjjh`b+y1uHjvnZ+LAO0S@JXQECIxb9f288#6q{AmH5}^D8Yl;2DU+^M z2tg%$%?S8pB)W{i5R?Iw3v&wok7vZHV&8%8_;3$UZqpE@OlRyuk(AO8x3qY?9thudV61J2LSZNqkGBv1( zM`U#jTf?AAc<5@`1R9w<6hf#g|xw1?^EF$?py@I=N8QDnbIAP!y9&)KwhHxu%6l(CpHOtpKvrwlD=lCbe+D|HoP4QvY10`x15mm6xVr^j>0zZ-N0 zCtMYLi=v7-qVm}SB*4ARz&%$yMLAaj(cM#=|0-S;FP%1vqA!30W!!omAK1NyLyeOF zgmp(^$8|gK#W%kiOZ#uY+?FY(o4Uafv3Sb}>yN)zdf3a~c5|57{8_+WV`f+WSWx~y zcx^xK`0bx=Mx*0HG_#V{DR9bt!Plh=pagCcpvw%0bvMlf{GH6_iKQo@jwHGyvt_mTU2JV3vDl9H8jo$Q@w|?m{ zk9z3OgfMgC#C+W0uW~{U$mQ+xcy#u6rZ2Fh<54JcF{se9eCeiz zzy#%qi9j#c#$$@$*iuL-VZ%&?uU)l@D|U>qc8XSd2C1LyPK1|b*@0HU{EFj@Bl|e% z&^{JMV+D=uFm)0vz$8|z*jL4fwk<(UV|nOFzLLi}3LzMDCQ3Bp#VP}JT zJpK2sKmPtd_eitexBk6cRCkZ3-Q(e#Zcg>t;qYxQL26DkU<#hi-B4BZnPnAt@!}&F zJHqONB}$q?k_wRh8mLJ4ERK-}shE(Z;YO@jWQDAO=;{6xFj~dRE#JrLzMY8u86c1e ziAB%o;6nbpSQ*-3z~;*E;^QyJ@mmsh=V^@ERhS!M9k7}m)5U*R#?v8vsuLro;+g*A7}%|h=o12*k4ls$)FSXmxo{-$Ldcitm# z&f}ke{&b7H??%MXhsOYKM`H`f0LwB-B-G%d;j`2^x0ALe$4*MMuxwl(KzpoM_Tv*Z zv1tj4G+UZCe!o=8gYkUveI~7N#yD^l zD45}6cA>1JX#q?uVgVCWO4?r?lfmyXrbqxiC4{O5V93o7Vbig=^{SijPw#jG_TO?9 z)*n6#FR?`_Vw6^}uwxqc{f#%Y$DI4{OU>{~Abi2hZu$4l>mBWK_i*g7$DW+h>c{FT z9+^$+tvP2zi(}bY7=YUtUuKLW zE6ShGD~;wjCJQDP0r#z$k$H8xE;~I0#iF?*#2x}1r{CqQYd`qG4?YsWw||`0_J9Ha z0C?r`IOh2KZu>h&Ix2Wn@DfD~w262yxoBnakeN3cLy07o54~6(8afr0tRnr52R>j> zJDOzp`^y%wf5kC~hF%W{9?+zOCI<}LgxOxiaa$^!a@YX#BMKS{cWp3Zt~uKYD^O}8 zU20t1VmvbE;JU*>0Vg3Pp;tCtn5adc;4rJOc@9nZDIQS5W>~E^}l$1?sK23 z9{9h0_4t{y&idub@nAzZ!riNArn=lj=|w^YHR32f(VR29bmLM`CFhdsP}ap!sB|8f zZrx&*Qa;S>NS#X?1@_yK{P?Ccmu#ZeTV_F3um zpmft14RAwpMzaGYMuEbK@1eK~HNI+7M%AY)W%qR}*u4Ej+~vY2;;6gc1!>O8lEy{T)FQR?TAW)?z=8U#YsB1Qw zDxWT~S#|8=y6bM(zr4Kswh*dUnc3cQyF2>T&C7whUUUeKy7MEpe%4byI#|uFYd~i; znk@a)v7ee?~X{R%P@fYhW|LMxp`bVAcn$+eqV({4z z>p&rH9W9I^pank608=nc5Rjp-dol(?6sQopK?i8UVkgB~6bfMGi2WHf^SiNl!{rE; zVZA9TF;xU}A?*;=9=J^`(9<-s>bNmu716W~e=Uhm+LJCD2ro<9Z z(n(P|kTt&{7y>H9XxP7V0c~61r1O6YXFmEth;;?bUklHM7;8rOy8xWr65TlvHC`f6 zY?3ygV7$fxkkR%X7&V@u0`j^q%Js(AD&{&DpVP~;pqoyxdI}8F?GJ0Zkhmu2{47bV_ZQ`mOY zA&0)#-G36WUNHa)@dK27Lxv{=C3qIYu9RCB_ylNF1zGt84A3YdMIWmQ06}{YlJ=pnD85^(tdLKsL0V;i_exaz-5uZHZ9Lj5~l4Oh~#;SPVP> z6h8btX=g>LLV`t96%}R?R$~jqN#E$AaLw?xC(KDcx0cjE{FnDC@T+Xfzl`Zz(G{VNi566iQc`Q!2=RFXR zkoQ~<7zG!D&a}2DL2eXUMKQyS*$Z9qES?csQ}nfZCLkfMD3R6#8M*9R#Ys2{T|Wll zL3`Js`nUE4i5pL9bwm131>d_x0xrLy?yS02a1~Yp&hWWqs7KBAbv)3aNHr%Z|_o` zkX7fhq8KP8g&}|f0B}`6%aoRrX=x!CQ{rlFIHF^XLsld=CV(no=jBWOluzxvGFblt zGrQupo6X(By6r!?wm$Z_bLutIFH4?Ji)NLl#2~+%P=$!>#^9H(q8$&7O{Tu+o~9rh zz8Ov2qO^-ZjWM!$jq>HQGpMraPoZswSh(t2$T_1L$l@y^z@RQy zBdHK;w5dU*J;>*>xpPq(a6s|!oh4m_T9QkMsf1K$#f?BgH}+GOy+Z-UU`PZ?k4y zFTV&IxAxGVs*sulvxsa7xycCA6&9{u!sgQ++CJo^uiF)-w_IsvZv}>50s6Q6xKjTA z!gbUMCm;K{(aOqECb~X}b~h=1DBh*b1h|l4mnUMpC|VqK%|K(W_n7tV&cE0~l%M4q zq>N@flgl!*4!|nCmjWKHB46X6WbVIi5A#rpk>rLpjh99sS;*1q5Yw{*gfMmUCExze zQviJS$0ZwJ@`xUgYkq!y)B7(x^raiNP5q2nHES-vAV_DHKsl~O@v-W-Q~n?|Qbx)> zFAGlzO+Pm`ix8mvys1e{IivG&Lea`fP;rUke=H8tV$By{Zn0AU2B}O6cGuuLYfsp? zYkDGD6e>_bipmhHNf!s_iU6R(?8bYq-0#Kj`M8DfjN7LFeZW0FY1`cn+j#bwj~?dm z|3&2E%wm;u%c3npxv5RCDk8T`v9uuN4FHOKEmtszz2E`<0Vc-&@8BA^!*gJ-gWeRD zuKylJi@QT zWYt(zE{&EEXEq>BZNz9{3E%znXK~r5K8QBASi7Z9gQ8Wyrvm{Qt!3Cki)B9q=l}Lw z+O4PE`+HTutAX$jW_Ih3VTAv`dbzuq*>NYHu>EgGqh>n;pwoC?1S;U5Dyfvwl;>JJ zKn9f=>uhu~#)`b6oN@pWqWg(m0mUs@amDdqsfB!TN$IQ_OUc)Dg_Ky!BnJ8ROQ%f( z<#C%()v9wM8J<+iysqjlE5>s|RrPS|&Rq-p_UwC)S$y$+=_C{d{rtes}f6nd;sCqI({ z<~|qR_ujL< zpUKNi>nIr!w>f9;wbz<+%rVEDvw?$#^!qey{CpmB8ajSHcign`SV#r)CB;Rt%AgIe z=w1;^fC3s)PBfn`M|<)_!)JfvkKTO6zxukbG3)|C@Y6P4CrivmQW2>1NnGaR#UE+{FG1 zj^O-9eIXw91&_yk_d4pC6NuBdv*$wBiQ8YUBhQ?k@$zAF4Iu48h~W}oA_(SBr=w3W ztuIdRw*(wKcV^rYVauPhWO9P<$5(vPxgb#Gz9qx7Gkv6kQdwFV+LIH=QM8B{nCjSd z2(hvUr*FFrANbQh$IXBB2RL!&EOsAQ!+dQ9Zw*7TbVkiVX@Rji4z4u(>E?s+!>@T$ zM3mdj?D=Np4FHb+OL6@9iioc7`$t}W>G{7kMqD_K(hW(k!`}Q((5LF5t`wa!+R{-0 zN&;YrE%4$P23Aw?jEv~|8ODLOllzwaEn02px?ZAda91j=6$*UP?z@_qxpCjJvW%N? z0_ETtNzguhKTCiUj0ZvH=~G+veeZq$-|gOg_~~nF_YECDp2EBB6%pkXkG$X^7k_4Z zOIdZ;zzrI7+$6quXzGr!m-#ZM z=#G62m=7jhO{bsiN;Edqs4DMsrdpl^YqS6=iWJ>gnS!uzf8MXzmoVD%uY{kBDV-207d&(6+p<=>Q2h>86r#sJ z63WRY@a6dwfY8||P+gwK>HO|+__E~__?XxR=UyS3MsX%;g|DoltsOw$ZQ%O%y&E6> zi+AD1|MeEQRcstuLz&M|7Y$|=h7M60Q0bJKT3DMKunipV*YVufS3KiOo)G`_XMgUx zeY;k^>b_P2_D_Aa)>e1#UU}*{hYtRX1BXEv$DpHCbP{0?isHM{u{2xJwq+_tsYJc! zQirsI6*BFw^h`Fff%?KHfl!`X*8m`zWD{sjfT*(aA}6n)gSmaOowYU0W<9pIx6$=8 z22u(PAf~F;5#xyXu^)ZuN1yr3Z}_~Ow)x)t`eg5LH@wWO+T!T(I*cRZ&1Fu#bS&3! zle7O&G5?G9*T!=4A^cBi)cV+=vExn4FBuKZM^9{C-H$> zw=s9ep7nxxDQHuBQKlIp46~k8qZ=u8;wORxH=_z+7?ks8xuKcr)aB&NfXo{@!JMgww{1|@z z-#!h$@!Wrhcl^qmapT9fP|mpwb?;TE>*oS3uoyNmj-+41igXfSI!4C_Q-DhWXRl^8lDpa(gL{WF1cJ(qth~q%5TJshK%^6wgC~$?TE(DJMq>a_>ws}<6LlES zW-G8g=c63FKaOt|y!+2SfZuz;^YDvb`=$7wulg~Z_}E`!&jssPKfD20L0eQkA2Nb% z3`C6VGG|5*QVVv?3$DE#h;z@wZ@ue-xc@^RvHsIP`|8UgV&%Tr4)*`o%gjneIj2V{ zv~WuxM~BVx-<5*CpH0y-#Q1UlET=8D;92K6Bb9H`e$`4{44=~{+fxEphnJ4u+hM!S zHDoULR+i}k@J>G{HiFmEFp8};V`W$0^)NLAB4A({U?@mHG<)xRKTyoJ?=ySg({dw! z`7_VD_``qlhi_dw)GqgM^TG$g%^=4vP{1ukpuj*Z_Fejc5MO2R^d4an6_8Z1zDjYY|~~;L#fwe%_;=x_Nf-gPr;1fhb-I>M)=arOd%Q zZ00jX_$lgBH>Fux})rxJ;m3 z05h*C3_#72k>y6$Y0weT`4kw)^@Gs?STarqAao9Gfz}G@xJBDgR!~-UVeEHfwz`ht z%qiUX!GFMQfA@ae{Qh^~)a`e{=N;B|cbKhm8YTBO?}0)CUQ=p_LLjdNSt=7FIHKX| zwQYRG+pflK?gXHv3^;!D?=L>E>-(?$+jqSOz#adRn1F~_UteGQ`g0HM|G^sV9Phe` z2~DwUtDKmcBYG{3oX&iNdOOH*H#HDoJpJjVR5sj0Cx^rDW;GTLR%vKXB@DQcEZ zwG@sul`84)dSK~sKvtQE7>IfmmGZ9e@qZ~uM3{-e9!77=#NIrm$iJ^u4PcNp7` zn6;~;qU$;;U0Y*1fg4-Vb^;83)bfy|9SqW7P)?c$K!*x+auW^^6>9-lS8)6v--WWW z#>h@U30lWA{G|Fc8BuL@U7|!tl}?AJd>t4uW&;nlAkI8_z&koKGoDs{A}P62B)~Jk zYDF{0<=ud9KKNdIY+Qjk(4k=*9cHRZ5RhxtaCR|brFT5=!c|rGIE#1YpcKR#;6_+!^r%g8RNNQpOSJM35!m z2;2#YOu!-3yr>2ZUayoDJYd0UfpEvxsWUize8jLhV0CWTd+7sk@cxg$flJQAxmR3_ zy@w8>wm>w4EzZIg$50n%SiN5x%i)Zy9ZVG_Q<9%MN$?LA{1>47ZGeDc90ghgj_U#_ z4l66L)eTs`3M+G<>*008?H{`dw_W#P9KG%q-2UNr;>4{t0VtTSby(XsN4GKu+JJGS z{sjWr9tH3OWpX4%PD4R_M4;;&vxT|TH1fNPH5VUbb_&5-Qbsfdec_tzlJZdL$SJp_Hk^Z2u zzNZwH=+e!InKMo+1o$2SXbRdD~4gfaB{@i(-l1`dsUW$KXxBDi1j@i zSlx3#EK?RpE~M815RPz;{GQHra6iCj09Z9*FpQhWarWeKoW1J=j^1_*r|&q5Gq>D~ zv!_0R)3@D-&11Kt)j3*cSl#7V+r0uS9qY7fW3@v83T-#fLn&w~PlZ^n6me3Q<9s$M zIcu$=0ho6k#>zPp#S7kl*IxYid-tQw*^;`s!E3-7z@FW{?Uox}^u6Eu+UI}AbAQ)t ze*JyD2S7y3x|Qy6mtJ`8uWSwD`LnJE42slUjMtJ7;r?LxWo?zsev|?Y%K(GH*u*-5 zfdutk31}NUc%sPO=sZmUAPsPO;HUmIo0-bTEke;6_y|& zDDq17f(}9#1VwDcFpMKw3-r5Iao2}Wj$i+#PrSSM>=^()_LblKyp6Yi_}0&lwbdW& z%&ta67f`gENLo%a83yLi$qbNzAR=C-GKz-SP{y8428xm*0u2?tv869s1G<6}AG!wJ z${KTKZ9tD1##zM-1&b7qwTcLOATy`HDhw9RF|pM+wi8&=zfQxD2d)XhPrdp-Wqb1Q z^Eq+vG&GHUCOrrs28>w4rM`vd9(pfs^Mcq07Nr2ifT5yu=G$v)1TY!`0xLLrazvRq z4(~Etc5sIEHRc6d5JWNJWklj;sES6a=0UXVVhJ@N0d)g;-BqHgDg)G7LzgU$vqdmd z3a00qppknfLXi;VCjew9^}MxG%F{26ZN6&boOa7`r@5chd9Ah)-t~wEEVdSiVZdS= zs0%U*+gl5CEzqy_2m|KxRh0P(`jr(#HAGoK*E!laQcKgeuvk5-EcGX;|oW&_k`Uc$zd7UYI*KvSwB7r=}fqZG7q|1c;R z+X!R3C72alwp#J;-fy_yZEB>{;0Nk5deuMvy@dQb+X?C{?lNcDbiM@j3=Px*V1M~DMboI z<-~Q?Y4h~n>I%q5ESoA@o(ykMsbQXZ^ymN5w`V;#nwleu>yb2ZMXiTEfhS?Cx7$7FT&dT56!xAH4GgQt(>6f zdPbVc3rh)W!JhLF_1yQpma4Id8Xp{R>NIq2Aplc z7>3RRhxV@E{JkBX^q_S-`F?A7Sz@hH4SlEEcrZ07+SMd+u2MDIjUNzn%pxk zz(qEwVA$G53L^O+VdhM^4Yl;Ub{%-rU)}gw4}Q`UUj4N{_!(dEOMmclmqx_eeNiN6W^J*s z&Enpc0Y*Ws4RxfzFa0xFFM+V!kD+v{#MJ?yFFnwLK)j|1Gy^3)cQH3S-(m=iHXs>R zex2z?1~7cDX2TbW-PjWjj$JFL$)(7-{?l17OlB-RF#vS;MY!+xbf5ns%8+oF{=GCmU%30YhyAPF+9Xt6%@V zJNos*FReA+e%T}b^`nN%?*AQa+`7E;(s}8ySPYoW3Wi}B{Un;symVF0d0IqxVJ757^dc|2BxndjV9NNTerD5D|7-~UZ z4BiD=7)~84`1ps{@DK0bK(&f)gJo`A=8Fx$jy2%=iZ$5L7>QS}^(<88hwhmGlDX*Y zCoqhRDBK3r!GOLYY>tb!Hu17Yd=Q&;1+$gFzV#Kf$}yiUDi#O~&CtdXH4L?qrYu|( zMmV*?osC7H_OmMwk2#g`!$@y=q5to{~MNss|JxT2jBl%^SsmcD9Nv8$w zFP(P@MJ79@=nWw-?4Bt^rmV&~Aflm^j(c48HTQwsxXvGdA!b9Zd0*_v<+Jp?9Kg zuVYUSJo(8tX3l{p!zklMW7Kt@3_=Y8yr~_~xiDiY ziqDr-5-z9BXHQK=*ReyIC8&0;Yu9&-u!af`V~>bhfo23iX?&g5GOEfxE15Y%vU`lm zTWu8o>E2ppb%Z7GXv`;v&Q-Set!>!_5&&E&mZW$OU5ql!y(`IAu&esDke_$KNcEUV+P3B-7+DLacu7b(I z1{qE>U@;EM{jTO~#T{*|h)9Kg@?vBGlKpKVP{4z)w1J$pIa=dv4a3r*!+@f0qzFd% zrLbR%YmZMa`2;ie?cmSn{-%ATyu-GP-#q2b@BPSE*t}d^ zN+~VhN1K{8=QOw`0K?RVdS|PA5ry}~h)9P;hLp}$hPjD)s}-FA+uPe{z6+6VMihupppTL73 zdIrPM8G6@^s16qe)4C-nb0}T1!&!7)#~eH#1lN!YErory4mF?|v+fcvVr_xfzke@Y zv3G`-;zH~lf!zzkb^ulj0fp#68`+lEL-eAe6DT5eS43c71PcnA^0~Xp|LB~7R_VY? z&l-8A517M8fX;aWL)tIK_YH{-1JH0M(yc{?*1)K@iWL}TOi7$cWnW37#}3dNjcRM- z&GEiPsb)ytnj)jl5zc3gB7>^`MFiR?AnS6-&MJm5i5-J$0s}&8XYP#R)i4Ui=hk%@ zy-~GjShn@$dE>RYQ|zdR!gY6j22_&SDm4;tMCk9Xb3YwT?xBTM4D*6@tN6{8gIKK0 zFf=uBia=PyFtEHfVwr|OIIIM07U<7AgTH>`#r?{G#o;}>*B*5EqWJC?zUsSv^Gl!e z1>bthoi|+7THCm{1A(7;_0MdME#773o7|^jShcTAtYcI%j4meD%u$pM;}hqeZ>^&1 zdg?DK0X_q)B^d3z@UTg!ozFQ%e67`~(kO!g$UX!(?Udk_wvLQhK7XEj(>~&hsa)z6 z$RdOVidc!-fUE9*KWuGnEf?lq{`$0S%B>YHAe}u8pcgvy1ORkMw1%VrT~x6Ef_$Oe zgEmH%3yN8QjI^jf3Z@7)y5cBCM`^})GYvk03?D$f0N+zWKW*`(OY5}BmyxswBXfhP z?JbRYOIlJ!2SUiT2I<{4VDoI)sqO9Av%lv@&tJdb+&vcVUFj8JIjk7Q0A@g$zj2&O zt{An`NCjxDP1Lffo1p~{0My`QT09AA_Ieb4Wt$uMPDwu(h+PE8)6-TGbxtFVhLKaTP5?vG%`^7fcAy^HIV5GMmG-UocXRO zg3aiIC9PFun$S=u>P#w7WbmT#c~pv?vb8d!C5LwcCrIbbXV$;1%MI-i`uZ!fVcP@pYa(tp>0!3WE~ksSL<+I*OIo* zJsap?>sxr|n~q>(qn5??V*kbG?SJ5A_u=n)(z71(8$bAS-~SB&E{OjI)Lu*}fJjyi0)NYNDQ%hTlJ;XVaF)S~eigZ| zr0*iYNI*iA9hvb0iM z9j^@M>~%cj**|2s=!i$HW@Z?MZ5UV|pH7kn5=-`@aed5yswOj@^ssXsLX;_YEU&{2 zQ$v<&9ma(twpQ_^$G#DlUiuy^&g?>Mj&9}{MIRd>GySb{Z3ac(Bd?L4LgU?aWLylS z=r&Kx@vok76AtbPcy+|cQ(p?3icJ1MUGPfjP>9mhGL)%~ssT=N70Wefm?|$!Ba3S^ zjD=b}oC?39=Waz_u0*{rahc>;C((}Ds@E<5*i4NYXMVxr(v6DvrtgdOyM9l2Hw z0jAFsMac;goKnl;#>fZySyN<9!wdviCYP44bM7T;WZq2Fe^a^(AfdqMi*3G@1DXIw zt`noTAbYbTs;t?mP0f;`aWB&8>nv(t63ACp1q4BMGzl9O2vpVkBN|gW5opbDS*v*Q zd><~_44ix6fL$HXtYH*O#ySp`7_#O(uf4*WM8q-Tj#E8u{LltU-ys~O*~-3)uiXEj zx4ipxFMPt+ea6pSbKPG(_}NOAZ3|NI29@AVdx|z1Rp2r6@}ge65H!+? zsqH$jw8?VbF1ri~@;tRx$-C)n<$eqBEt&3Z0*7Lv!~z%uJa&LMmjDz1r>Cmwi~9{~ zJI(;0xM6#1Xh$x(_~b-K-3MNu761UCTRo>8Hg8=7Sic^aObcms(S|KBR0^Mp1XqB= zI_8c59^j1Hfj|uf5CRsYpV$i0l}qAhHCZL)5oLH7ktsS$+EsbcB4^G#CJpM+&_hm@ zf0_aF*<1=#8vRyjOrZ@v);ci|)_~{@fA`+M#$Vie3K$rvHB@wckD)GLN|_kwXq&1N z_<6=Ce{zyaM>Gu^k~5*PCDo=Yg@L`^&z?MhE6%?Kpa0o!KwZo*Y(1W>%T1XiUP!W-_obB4!1H*eBeDBSStoAzXyj_;yoKWYJ_ni5Ih&Nsj5g#PWm-Z*N^(sg z;6>VMf3AV=&WSqiqy{fXd28$=ZGEDc~#RB8c6A1vPqZmxw!G312mqk(Ga)b z90xO#sB8Ir=$jK9kSQ?m9Gfo6OICicZl71lb6C`2&Xo4cvus(ZqvyeUJ_3d1Za{-SK)^u~a0Hsa*j6+HIyZb#c(LkH&nTjM_ES}`~XkYQ^W zP+LPohuP`^?|JuO^!)aGKjunkD@PK~w^T-0wWeK(Jyffh}a0 zc|F|mo*+2_ofi}xP_=v_od*k$yl*@j*S1OL=&KS5UtOLgOCU?Y1DMwExS+5oE?#zAiDu6&B zwzl!E+gCB$zk)Jn&KTirsi_7zA!@%AM^`A=ODD&L;w2fDw5d%Ri;9AVHnPJaEBpg> zoTF{;!WVqj>v8y;58%Yf4VYJSx_8c1*TFH?ptlMP11H#pA~>dLblCv`jmG9YZZIPi z+OHgsgybDd=P6R>EJXjs6~o-_mv>}Q_`UET%;X-u@gW^U+b z9Z*Je`vQOY=jUM0t^o*O%?b{W75{Z*FJ8H8KlToRT?SMXz=5Fq>bZf|97ALSV0c!3)rXloD03^^LD9Myt z0)qIYX^Yy^VkaUs9@92wNn_}FFa?*XKC&pZABxINXAEl74WJcA80TC>IM%iYyl#C1 z>t_QI9j~ucTzK9og4k)!ft-`k?f^P>(J{bn4Xpy*?$h||KRyq;H#R9ys}&v&_cFie z(sLgC7w><=E57tQKj-DQAHU(jt+n~|;O+&lH@)di!^u-;ukU8F0dS=|?=izhbBq$x>OMc|R3F!v0O)R>Be+ z6F>q2tya|9_}PkrBbW;%-6_Yeu6w!#qFPh_v$4U<=GGoubj~e!@?(D=r_XfkyUwE^ zgGvAf1BGp(>WVvNv!0Z)4kQl{uiL=98fjJ@_^N?6kTbK|aPrs;Px#_Hu-;K+9u8e2 zomB3Jj4fzKDDWhm3#K3B)Lg(Hs59N{pfRJtkZ(EU5FH$-(;HKg+5Qrw&Jl#DD~O6V2@wMluJ z-jvUid%h_>LO^87YjY1p3(WeSEDCfclpp8wTN>YtxTgo(_)J<0un{KLI{O3w1fhIC zu4RaxaHp1rpqkG^8vzhK%;VV=VxL@Tn^L=D?1=PRns01@O*Y%5xX-IsPRX+PsR}u z?8V=-zPV?BY$;5APaTITeMF!ro71vIJ16}`FtDs6fk`PHL5sxRfo1d$?RSFs%5-ZB zY;9G1(Nq7;Hh>SB*-ij%?AGB%t3N zN3jPIDrp~cOfa(iNFt`R!J1(ZEihEWPy_G|v4Fb9X|o3JhwD@bl5`LldGcUYiNFk0 z&N4?P2O3l}SCDlXwszx5pZN#4^!#ga^6VOBGae8+y7XvtMiDfknXwrw4-|qF9iPEc zgy!zk;exT@M%S_T03(2gegz0?IDUJ|82>8Yp{_Y*;VDJ7)qh*0E3=stvjSZhbk8j@ChwHiymyO%Z zw*%;8(_8{P3zm=#BbzUoOM}vwdI&A07fqdX2O7&pYa`Q>Oeh@{0cRSzbb6*p-}J)~ zbiC;}hhY%#Ofcd=T>{6V{tz{F7K-wT7-HH-$tJLTk?Q$UI4ZX|qh?Qmr0$h7B?KN4 z1z4u%#AHmRkGxkpYEu6^kUVdYP9>jh6PrfnLf7g>z@gIIrn246RUMcJwe<=M0(k~54T!L=o2?$XXxBr3{40c@ybH{AHg3|ZxbDsF5(`L4~FLiwU zv~0Tfyx|wh+MafR8YYRSg!yT}d2kqOF}IY6t`tU>0UD?X(y~x=9Eu)XVnA2!i8Ltb zCD7c`Xcq^v2fm`rrk?!<=OGqVOVE&%6F)Pzv`sbjsY#Gy5IAVrZBIfs2w-$wr}|fZ zzjVO7Z}7T6^rLd29Cw*1jXJ8Iwek80G?IcOXsNA=O5;VgOr6*W2hg^62?2VUU*;P;sKsx`TvL};+gi+WCfh;;kMM*7S9i4oroYBPy z$;wU!lxCR@lF>MybJe;H(&I*U;mhIkJ!Hao~{cpvv|&PzWwO>u06lHwz6_Oon$e224B&QrJ<4dhwmkas1NZSf+Bj)slE*Z?mTQP_kh8XeiB ze(siYvW*wX&w(5xZLJKq!y2bv5&1TlHFRj$y6Z3=^Wgu9tFCw_j-FhHVGGd$rHsn; zFPVm5b_TU3oz3ViQMFrAV?ymnki^nGIv%biMCA?Bq&5H&M!E;Q1G*Bp`XQ%LYXFrr zIs)ozkY#B!(5bV4=x;CCVT^Qf3yv+$T?7}ETsqXTf&puTt!?4jcOJs7jnk;2`T(*d zg9jF^V3!x1V}aML9>8~O9KgwNoZkj4EKrO3MJN)kS_?SEqBLGC4Q*;W?YicoIRIQw zspcS&uP_3XD+XOdN z_qZC(6le4gk|lrz%sX@uxcy{@<0odUPH^(jrr|UcD~@G-eSW0uIr;3*{_=;v?0p~o z+XvnYN(E1S%YXcqH=aCs=2n$dB};NAZGFXU^bT zzWJL^n2oaL2VP66S(DkHP6P#ppl7=;F zWL-`u*#UkShYcAT+BnBx^_(#!CSAoK`z_6I3 zZ@?Em`E~Hv!eUrK-vI!PT%@SWZ0g44&eRD^iuJNwBh!CaU6Jcarl9WVDeu{YM2(r(Jv7;+8I*%YAcLCZUY&S5)O325x8SBX3bw@FZO1-G{vecd2W1178AcWcg zrQgaOG?^EAyuoSOKCe<636WTqQ1-}nW96; zvFqbA8X*;_zl(h&i?BqQk%{o2pit>(OpJyMZ&Hn^gymjZDoWw3Er(JAEdnzHX?8WI znZSf{*yHxV-t~%rxJqdp9Wr%{nu8JKsm*h6zw@rgqaXfOoI0@^CPJ7zTJ@*wqZN0nqGtPpHO8_{66U|8VQ8+-8QWsZ$j5erAB{BTj{H#dhX?Z~oM zYD5kl+J=?DSfwRUc_{(Dv?n9a535qt8zBPQ9{A`7_Q7Wjuna!vkh+c|rCVzj4Qm%% zw)ZjL^NR2J*&qGs7k%bEyh7mQ^Pm6x-#&Tr)U9sT+-Y}Nr6XG|;1~$hsgojst0e;< z(K0nKe9oD!3NVNpC7R{nCb3)6W8`AecVsDaaPCP_`K|(|Kn_Xc`B^MREEY_;rlF>I zlxegeD#e|5-G%S@-sj&LQGeddj(zGv+}mHD767n*7-lgVHwE-yG9Sd3d?=mASkd(y zcte9ms&tB^`d-uccz^>$aVGYF`F%#{0Xo~HNL^~}2vN8Ee;GMCxt3I@J~NF(Qjo2t z!=O>@)GL5DlD1Wq1Aq;x7 zNTZ`DIL3nE%sKd?NB=R--TM)o-rS8S+4MxIh5#Gu$WcOuwzbM=P}DXe5j%}?$atBk zYBNLEcNm5NeJRTSON%iH#ME3#U?p05lwjVqaZbVBeHG`OyI@MbD=0-kN0CIESOyvi zrb%c_Y8@w0S?&X!n)Ry$lpL3Jy&zKV~&iCCP zfmHxMw`&i+Z_hs5(e=1!*n-tyVWJ`&GeZepXQ#-N`FrjOH)l14^AN_4H6sod)vcjJ z2!aS=uE+(;3adzxK}ukn`!wjcYL$G*?q-wNQ&CoRN%;B~hHfQaw|d;9ff z@UHKP){Vv@BB^>z6rz_;nSwU8)fKfXs)&a^7^x{D^3dcte5ISklBfg>mJ(RkB~(_nHvX_RSt zMWsT<8Nq`jdK5z2nb$T^Yo!!Yq0oIBBR0sehst*{KTg0xo5^(tP8^%zVUN2V<6Ws* zCqNiQd*@o`!|95|cdeoCIzHQc28v8m=!qtV1%^`igLPn^_oK%#KOq{zG_oKgWfO0qbMKCJduFn=Qfs>i{`H4^@o7#cC)T zYB7~^HkBxKrN9a`3a*No;!BX~#&_Xmky)u@WmiZ=Q-+zz%Do_F=xt{Z2+oVox<01AQ2Vt=ix3 zs>2WcZ~xikeLzG6Z<*IKsdl4(5(h^qJ0`?9a3S68sIvWg=|F2utg{tz5Gbk4-6H8iZQuHe+kGsBO(qIc%FSxo5`(%Ka-9f+CTz?fFdBaX(hsQV~)NxIU3Nhk0X22 zTj3qEypC@gdULW1GX6XMoet7zAp|0V&RM}M=|gVnQaVMiE*=_>(vwm0!eC)6OHO)H^bIqfVp9;jOe3Pl&;~-iNko%6(7Xo9{xKxetZLN zK?h{OFt8gPl%LJR!sRzKl`N){kH|c%O70lD@@6$~g{6I5Ax3Ysn|!GHufP%_Fb>P+ zMFtvJUJ5-%KM%}y8O}Yz0Y`2I6gH$Gc%h!4RlYyfya_0{PI_`M% z&d_f(eDr;LuxB^fm*NB`+&|1gChJtEPLKjG<_I|UFAB~d1Aj4F#kU+d55K*>hQlpz zK^?I$L+zQj^j6V~#)Wh!D+Q7r$u!YyHY0FVWru-PA;}EY+NLgnt+M=)NgSpYX7irs zW;zGlPoXxumaJMM&?Kd5fW`SbiGts5$(tF@wlx|ak7EUP6;MPS3dYr$C#ohov=7BK5@VIA=9uHf6(58;Bv zg3er@17m4yS6I55N^k?vp!VZh|E?=Id3F^Kf9$QOXFCQHC54vU&y5S9J(;PA6uxpD zumA7{JVsOmydzqe(f~yz!r4b+M0fT5&wJ3X{@E-4%TK)eC7%P}9>)ZjS=-py_{b0Z zzz;tE_+6(yYF=7jdYxz41LvNU71JJPFffi3LnkAZlTM2&yIdv2MQl!JFVrSRDWqp{ zo(-}L{5;6cY;JC1Wj4oyAN)XAahyJN8jJ01blq%f>AYAhFbo6s?c0MZuDBehPM(G} z!|Bso)N{9Sr6IUOz!59|c- zX)ucpan2~$fgVRqwlZ>_q`aEO8WWHJEYX4lH0yqr;={_%Gg(gxj|hs|)cuT(m?;RL zMUQdw2)^KR-++Bw)v8tZ%ojEW*& zSO0;$KbLXN-VqS>&0QzikpNm7M%;AcF7)#Snq~o%Lfr^OMcjLqd#Eeuz>-dLvMvZ< zFkl71kzv5iwvKP#vkyPAu^XFkT(mi21%XA^qqPMcS|uZqF}Rl^MhEHuDR7+6E41g+ z>48Gbu26Jka)eFJv}GCuU?)a7OynBw05!{;D{B$cNJF3^J^ZL~zHUT%b&v+cXzVRn zAMFJKL#nUyDI)hqZ3y)XaP2`TVk;_xttr5r^fNryMa{L`2>A>Y)D?3K%`h{^!MeZ? z>^X=xudLz{YpCuhaLfxClz@blLB~`w<)xP^#ZbCJpxzn|U$6kG6CeZwguKtr)T|~S znf434I?v5)_i4QUnnUQjfmJk0g;u5dhU{<`ff^%XJGzT5*!zHAdeh5a_R|0M;?KS( zG680`c;+*o`JQii&VTszt*y;F$2w{ec?JyxT4r2>5F3~xz{nEooa)yY)Z}^2MpQfu z6!8}6Ehx4$gpnZ~#}O`8)76dgz&ZPI+2xmFd$E9L)3z`y7TaQ&*hak8k^Ln49uIri zLviNpCN4a3=^Zb4(Fs=4SOOpOg5E`gb&gfzgf}B*pb?#-IKFR4@oZL5hYDc8 zu-L$gb@+nEyarn*XIQj=HAnGa+CU6MzM@eWWhxD*5 zE`?y!Pmpn8iY6n`jy0ClOhiTLcwJ3K_}H-yp)SmgUlfouv`SEs%n<40PSLrc6wa{d zx`NsT+!nZG2+Rk^FK_I|Hy_xKH^&U;Y;EI$sAymcfq7@OE{%qen2gT^K!kFmsx1cr zDfebztPNH4X$1FR?&sWtfYkG?u|zQ%nw}d0F3%e4`nw5eg!XqS9jf{P6zyR%?xUO) zU}C~r4eBvQiY{Hvt8_CuZ`|DG8g|sU&ZKb3;*CmUxU)@n0x_~6WKp;ml#5rd0Q10+ zwv9jSSMV)+4x%rC-QJ^GkfQL0u~xJ?qS&%iXOPjKe09lI#yT&&--gqt99KQ)IAT!% z<(d4h=`Ej8ekyB=cT|-_JJv1rgCXZRb>^lt1gC8 z|J>1)lD0LZZy|{0{tQ)y5MVW2a@i%=UMw&y2ELB~ec$!46f!F?p>_!fZ`i$OZ~N0f zd+YHb{BO6{TO{yVa@*zW!jWm?Mm9eIw=GwOGcd+v?2Nlzh6X*I71RwzK zB*@W$pMK6Va*{KxObeJ9-~lg&JC62v$Y&kJ;!H;)5RCGXdja5qrFobDr0~g(bOrZ9 zR**~wTwBKk=DIxtZohdQ{fe^kt{Q(ubnKJBW-e!+QZJKCoZtn_$&wvWUz(q$lP!t(>a>X1L;|b09#vj z1vEPSXsOs2@=toVshVd;S(i{cKihdPZkj&Wv37qfj+F>pQUiZyJ)XViApT)}6<0>X zFcLffhVa7wsbYfj=O?tPXU&Zqn(%4TA~dy+-C7h}{ooTA&dy;)fd>d&0TN^;q6@}> zQ_voY2v{rd-4*Zu>pj@D!5#^0Zo_lV{S=5$OKp>gvqty8E6#u5%YN&JU-r9idEMh8 zVucUxp7AoX2H?iGzT+={WPM}rpPO}OP3&NxqAzTMWCEtGsanTqmns5X*E3ki8hxeO zonjQYIeOMFQ$I8@L*VljfPnVTFb=rv%FA%(^l7xpG>%JD+@!NXXtHBI`%D`KaM|To z#EQ?(#@5z-s_WnX-Ro`#04M+P108@v2y`ekR&+KpP!i-c&>2@v-m;|eosl^}yTHS; zR53>=4=J^IQ*JLp2T-bP8Wz51gc_%S#yx+Ac8(4&_~y)k%CV8=)^<@2wFU2?6jJre z>yZ;OL!(vT{Z*pl2(}|GKBA3=ecd)XF!C>Ih0Nqk9r}GUJrK98J!32QJ zB{M?ivoemi1;JF4C<@3{n{?cOp_C4N*I{f;o&Oj;UUn&9Lx*tb927xVDa=&|-@A@< zcJ5TYQ(515-BY>&)8Hwx0ZY2Qwg&4)+;rUrR#vz4%(=(d0EghMNu(5_EV(wK5F2yX zecw}Ok|`1Jxs3+QU^pBVEAIH6wf*>peFyMg);F*fhAS6a*c;sQTSiR>f(Eh=rW^8Q zg{%@>YGp-_rs&25hBJ5W%C~l^V994hnpG{M<&ZO1i%|RG2y`9KSj#kyfZWpfG7@Je zKhC+R!CY=cppF7}JJL*iBueoF0C25&))-Nz^1B%G?GA@oLo-Iw+YMM*47hx2z-uF66I1E;`uZ*ahJHSqg0VKGVCg@y^trZ%(y?#F zIF2}V;;4Vu^S*2M%F4>@o|bm`=YHMo0N{pq{+^c=+YK{kq`9Qe!Oer#Xdps|-@u=v zy&wfjf1^%e8GU-XwT7y4vMdqFpVx5~qEFxfHQbTW%g=*KkkT;3a)o3Y5RJ4lJ}Htm z48zDKK}LgWa*ok7$6C%MbU$tqvbkZXz&WvrQIo~!yy*m(8fd874W*6PJb4j5|8Z}@ z?u}#ET+H6a>w2lQ3C@~y8?{!6x`2Mh_bFXqd%NM>3%1b}I`>et+A=37y@lt% z9RazJA{*J5Bvs`31kFg-y7K)_R^a%t4zszTN;RoRh}PH--^KQrk*%V?;P0922ZmAg$-G6{6_i_SCY(75A}0$ckFruS()R}%vP zMzCh=fj~zq_QfeQb?07Wq{nE@oDKn?=XK9Wm>@aEiWnoCG`uvT0!40zl68out} zVf;zAhKsymwFR0J+zpEnP35^T1{1u80l;#kZ&Lkvt`oQbyhpC7h9$XS^K`*w4?c$R z4EN=zCNgI1gs7Ya*U@tSP)~}+=P_S9iw|FW2wh=$Dc7FDL(_9Ivxz<7(sZa5-Qi2@ zLC^aBXa3}g6Sv;ungy9zHM0-=&ENgq_pI*T^B0TeXPj*yxvmJNcPgDO(=E%Y6!ww^ zN5LagTAIPo^$9gqc1lK|wT3=>fn?e2IAH&QeOL^Y;_qRkZXg7D1xC|`n>146Frd|n zaco#!o7*4$!S8MS*6V-$VfQq~<)8a?w*!Ea*WG2->WZ~6jii}!l#Dn@gGHmjCmnJ~ zY{rL6r(<%u6I7ScH&MM1-5Eh7&I8WhOXDZjjY7MO)b#h(NCDPLF`-XwD)~Dt8}Ase zfumg+6}i*#7&59-&Qr~S=rmYO!25u_OyFdl;lUesU{G$-MW+_^Qm#dM&Gu=4 zaSU%>BEd;EhoVjaQ)P#oPg_P7fj}LAD8S|!hs(LwXpHW}oRE#-XJm~zw7-(ju$@$H zHaC&OD=KXT2>2FWv53Gq04^CT&ddvbZTB90^X~olPrDA{9q4hW1um}(9J0W+0i#px z?-CBeIG_gtuR!Xe=+t3`W?*9}IlBP&IURGA=#Rh4IS+dFN_AzLh=+#J79FGZ1p`@F z1Zo@E%P$&Vh4r zZ9m5qWcJ0r#dDp71xds<#^?%&o3C?f*RSRQ!r@ELf_ z2=tIl89_1ukbt4i1A~Ez|(DS09j?+92(xVW?Q&wSjT5puH=OFSk_SoD%kFl)F(fi&R1+ifRSq&`Jg6%gO4c2qNqlICSR$N5|d$2F9NNzehAPK zw6=80p}eY_L{geEHx479p)Ki*$B{YyMFq}1G61KOid_OM2w=5Q4$Ppm1#@~C$xizP ziZFOFs;o#xhWX@vzQEDj=Gq&9qJ99`@FieV^~E@_ZK+Q>5AK7>2`hbN;Qf+4kTKKq zFUtEP3?qQi47+N>g{@&<*YK{j4Se_R1Nesh=i=x4H5~JT^Tvh?8nAa9F`}Uw8G=RQ z;~CX!p<2MaV1)Xc!?9=;-Hg5ZOCfNBA|})MNmd4OVu7VDgkRQ>D0Akz!M#%ufHX1y zz)TyBG74FiV(j4O7HHPkci#-*I)4QiJrHg<<2}0OICreLvW_^54zFF^i*MMw53ky_ z8{@3tNL`>b$7nrTCqS-}U>-&nfFlTGV;BCr1pzXkKK=>_)KLHy>?mgfK<>u2-`dlg zTRkqmuNM`YNG=+ zI9v-xK`lh{lkMY~F&-iTtz?eL7Bb1VT%%%z0NV^>jF_#g=>3>3$e<-81b1hLSp+ca z`l$zj8Fee}hGATEYb)J@{{6F`_40^#;5}`f|G8dwKL9ujv&!snZgSYpysV;53F%_W z^E1+M8FCH;ksS>lu*}E0$tm;XP0o8#kxOu=9krw_U1GBAS08m!B=hq#5+`M4avT8} zLq$-nu}yKlLf}Qmo<K|NbtxtW&W7Xk!u-^Ac8l>KPYhG zeee+SbFwm^n~|PF`aLl>{7KFjFqQvQHG?4vH^3@|jMcHee;c-Aly4eWMp-+Iq?3}Z zSwaUIkFIBx0Dqp2+zMF=L;eY1)^PjHE11oMC{%6+Ju{AUW|Wb_q1G5dFiK`rJ8kc5 z%`4PdceEMh{t@66bx(@C0bUR&m`BB-aT}Kpfm2eKkPYx@7TQ?zp%awAB!3G z0JwZu;9>*T<;c%gleo;$HK)>E%nzfWz+zm$U>F;xG&XftS!zOt4wpRW6o!*CO_0nknmRW+|EY5@a1S^fb!>2Nu$2KH{M!TAw|_uwhUTiA z=-8WF(@sZlD#x9!am&_bvrBJm-U}bHs|KR)I`x$S1)i+9^h`@I9po)r(p&> zSk}j!KM#KPO`qDi8tF(H`=rOzRZ9*WqC%@Wy^R^&s?{$*hmc|>2vx?Uil=v@At${X z!2u@YNMuO=CgiCmCj=&n{5;jkaw15li^&sMh_V%potx3rC99Oe!951te|8GtyRb4} z!8mTA9y^ZHAG;NCd@r8#p-X3) zrBEgvz!GhT=+KN{$&fG_ry=7#LeHoPopa4eu}dfxn9?EZzV5V`-nkE=6P^=)r zv3)jh@l|I~xA?S86n;9<#)PZ>O=iJM5n!z9oj{P*z#&ft8i_QruKo|+1&)4V4XZ07 z(*Sy&kZ}*Cm1xUJZ^P7wVoFi)W+}KMpk$=Uwz8>WCgm=@MF==Fpm(;n=Du-w>9Ab_ z0|NU1T+~LKTMeh0VeYZYhpEL&ZgH#HDqCgLTB(Vu6sr zc98STYo9sbp+-U)Sk#Gn4QGj7b{K@5Q7#Lgk@l5&GsB3Atr{3gkA+eD zGH(@o#{m~DwsFzsfL+$(@3D%PukXP#5ADTs4<5!_R@UJyaM7@hz2k`L70onl5F8-L zG|!TKqqEf|(pYd02CvObWtQMX!?6bXju9u*cm~do22Az&Fre=`rTW-?)2(68?rn5d zB~lgrtj*r?yy^K8fC{k4hDA6|oi%K3&S`gy$%Hym7sFK8QgG^>#zsSZ5UgTjeQnqO zc>8NV?^k~BwOAm!R7`Y5g5xFj>Ks^`PzR6Kl6Tc{TwkauwoCu zlfU41aN_hjyJyvkf}Cv*AO(rKciI;@n9!l&w@6b5b0JI*@Se>$G^flupo+Fslt)n; zmC2rKp!c1kTp8LBA3yc}o}wQL#!O(YsCJ*vg?-&?=0K~i+krY7`mW)RfBztCp3Yu% zRw5{JP0bmRXOu@EBxj$1MEQ7#^)M%`i;f1N9$UlHzV=3(I@M8dCz@MsPr%5~+DJ;4 z;rRdn|MW>jK~w=)WyiuWu@7}bS9(P_bcz7iGWU0~MG@>*9#ank0$)ZmYHFpn$?1s0 z!AQpd3#tJ^`!5_g)fvvzf~}}1Fr04nLZ@|f}!~2GYW9zH9)_dGy z1tx*quWhv)dvhj+ufI`u#xAWva0|!K0XCUKK1vowAZq6 zRdXuH3M@+tqvd=P!yh)`O@>=HVp03-Z^>}GKT4-=n(jD$>t?J#D`~C(yB13 zqM?!@$XGE@P2@-+4m*a?DGK-LQ}mhQoYFbz(nK{;M33BZ81n zDyDRVu2*Z?L{;xJMgbzH32X@*q*3HKQTdXZydZ)O*66_XX`izGa;92CD5A>lYCa8X z;d8Z&D%A%7awrHx-#HdzCFKso?%mt?%~v16{J<9KD52VpU*X}F)u_%GZ8 zV-B3b47YcNTcY4haa8ZH1z=ViHfD~M?FCj#K@F{yHH;G1dPal1S#?Wf4+cFBgsDtW zP7xW|na*Bgl-@$=fXS8!IOjeQP)^{_eJqyADK;bHr(G4aL7@qttE&}%_*)mC+Zc3y z1j1V*G75=t%hFCII0tBY+KC=t@-;W%uH%eEbI&Dc%+DoZqyQ^R%6wLDyJ2zd zU;p;seQS@^cbXYX9qwVTi13Km1>oX0zxhqy_~IA;@E3gKLmxSRWACnA##|KxFn5fV zGX+|0u+k&i_({(u8rVgZR*;h`!QieSu(`R7M?B(TIJ3D$izUPE>a_sy?2l8|LF#AZ zkZ4!+JWF9;juXdDo_+4OefRHv?bm$G_n6tO_m%ztw8VGg>jw_wlF$6IBX6riy_5(` z2Q{a;No5OBtE0Z|rpPTDILNv1;F6{eF#==?n9raIzqd0fGoPH$3m! zH7#%om-xO~Q#d1iL)Mk^`f6oOE)BC78Y%7}wjuwWAb>!O>r)%^?PCoX0=xG#{PFLc zhsA6}z$yHLt})nckhyhP)E&9Ke0C6^G^6IDiOr~0Q2;d3_l)83Pd}dzCVp3 zos21WX=WU$%!5Py2Us!DPbn0@EihQY&;nb|T>heCr@93i8UrAqL!zA-2x4ZXgCo#Y zGHqS0DBjRDM_)JvjTU;^$4(Q!DniQ zBCt?LmW0-k?uPkivLsAF5MamI9-sA;TQTbj4Gu#Q0!}Uj??Hcu>|l{d5pY-p&Macw zQ_lUn-+lR8ztPODy(dSg5#e$2h`F6)T2&n!Yem$G()ZZAXE*kqvlotn#bTRwL5$8=D`#$mI;A>& z45R%e3zzJ4*LQI5;>PQ5_}HJk0EdyCoFKzPW59<>HH1A)@H%E2hUUzCs`kBmlGdTs%}*z3$~Nh|M_vo~8%b`7*QSd-fbPvumI98ISn>*Sz*uzWDg@li&ON z7d-!(tFO4<^|#)1$1Pji_4F`|Z9eZYo6mWc`yQq1s6SB<(RqiiD_C2dp)UnzHn*@C z&~E$09jEs0JMR;n&+lk;97>_+koyVfyB@=0F{KVn!{JPUr#Y*fy1r-dI8qdzP`YLmL8e{OR;`J#-BGJL^zcQ(9|+jEwSCB_Jc5 zv^Sk5jeV<)07DbbV3{;%Xx5>aVSjAnl^=N`?mYiC>^k>OSajGPfO#1??QM#VB@W6K z!OCBDolg-^=DiGbGIh+3Wf_^u*eYF7JoEC)Xd^(w7e;YpYs*~bFplVD%$Y9XGk}DU z;}`&zVx}q5o8Ftx)07g)Yh5C7KH_1lIC*r2Yp&UiZf2xByPgpwM9nvl4dMqZx3nTB zpCTwl=wfmb$id`sqr+7foxzc-&#=6!aUHFYQE-!BFzI%E3_pYK#ZGu)NswxEfg$jt zrnG^WD*jDrr%ZV%#nAMey28dvR4h{n)<95^DG@Sj1>-Okk zE?duA=>jug92~0~+jz@wp9f#3vqw|Vl7WH(oypKR!E=MEcMRCRa}`hj_t)dZ(K%*a z!MLMUZRx07ckft<;EtHqGOv&Ou~~~7ufOw_AA9brp7(D)_sf3Q-R~8%>m$MJ#p;VuJ?c7TEF4CkIXi=H|N&%-K=x>!hY&?sBIV)_0XYn z$HzbMNyCu~FBl*7s7IfC%2U4JZ7AjKo2QQ*e9U7%>sc3Fbm-yRi*cowCWE${0bo&k z;$<+%uMG=U63}jtvl%!Mbo1$7_Em5GwtxShzui{tWB2w{z}*c1%B!9@d+>Qz9sa#> z+&<#dupC85I~*_1m&Ry*l7n*qbXJ+iqrq67t<3d-XH>?QdGOQ`xN`=4>E(pMoN2NF z0CTaPqO|;40t&ZjhPS7f3*0n~R&n|ro^~Ejv4R381~_Rb;)_7@9#%(ec;F9kE^gVo ziBkh3lFob77?eH`a1z+i`U1*{8r00HtYQ!9`Zyug+&muY|<1{n>lD(~Lt zC|PYJqw9uIf=i}zxRvOb365*9-$O1-KzX=;axRSa=+JpTof@))7=vhmKYio*D0{X+ z5~l!a4Vr5~7DHeU5I~gBQIUMB0qfXHKA&|$K(m4xBMxr>4}aX9SZoWN3d{kFCeuMD z-I!l9%k|6WPWFZA7DfCCxU`n++PD-iErV|p*Z3!~+UbXqnIax5cJwU%9ra}*x zKTF1{@4FqMIYz8{YxgJn=eJR5A?-ol z-}2cAl}{qKv5vF{836;RZG@|r0R3!6*8KdM6)LH{Q2ztIH?Nc0faU!qy`1Z*ox^|U zew^M*dpn@Xbp>s#IB>x6`d>W{v9`qu2qSxF5-Lg=B*&6dG}YPCv}cDNk9p!9m#<<~S;9;UzN? zZP}nkfQHlvb1um1;rrAUSX--j!>?X|e)kr^nl?%93Eo3qJP+^^#89unCNKOwlVdMl zIDftlFe@k?*j0Kw@u|1r^l7m>K}VNPl+*4wHjt5~l-Y9pE+h!ius5HezwGcgeSDuTAq5>QIQ`w&ymtNI08!ikk~2N2XdP-j7hY`IPbiVZEB zL+xO_+*x9ofW@E-AowA*zT9^$w6?(~&WauiAzM_j9&EM~>NsdY5GHTNwbFG>|1QpY z_&i4-`{wG_2pR5Fk8{1bFS*YMuF}wxx$CC9FjG$ixX`oBvnjfYA~mCZ8e3p>wc-7L zeE_!{|K#Tm0XBXvg`+l|Un$k4eF_hpzhQXDV{gM^oGah}_nXQQb8ooXoRh7PST6gY z7`WG?4y)q@*Zhy4`NQX!&F;~9fPczM48aV*96)Dg9y*X_R)Y&RO8i(qH6o9Q{t=IO z#H04@TluB2)+@ZYC*TVOmbs^!x>6=EWm;-7OgP4mqQPI=XQKyow&*5lLp5UCrzCNJA0)-xJoH#W2()!V?yWz5fRZpAeHua44F z=-I)zx4ct-39w8u8XZm6qK9-1NM=fmgFCef>HHH^q@!vY5@nDgS$)r8X{acAW4Oua~(B4g*K{`(R{Liy-2rQq00KOK&lNo1)`dIBw>^hVdy`Gx?c ztCxVO1D`u7Y%7d~nP26#x2p33?oVDe*TuoM$IJ0AH%TOBh-M4za!zJ zu|+Zg0a<`#$6BqlH3od_`We>uXdZ`x76QlwaM}+^{cBH6rJ$e#3u`E)@9#Ks!^2+v z+rRLA5%+98z(3_>X5sGJ?taqU?=rJH-TkQke!|^Px%;M>ji2iL_4~s$*Ie_#yY4#q z`uWQ2lq*=o#L~sGlW5@?jmDH#(_kjkzR#+qq1G~=l`EhBg6DmAL>#_1ukqaq004Ly zx7KS7ua!=hC_D`$|1>%CXpDYZrIQZPeUK2w6nWCI`{b19|A_Egqlhik+B5Xv+*$5H zSMC;LHw30exhpQ%|#&CksHlqMTX`}*2 zA8|zuoUMRGLp2J&NJDE>@*@J{IKVZ}9RO)B5G-Kod2fK$ zgDD2ygJUTo3^6PrkX9Q9n!xA`2|%*fI-duxmtw%yRKKptUXiSUx(K?4Fhy{>UaGVE zIb9ehkJ6|!8lvOp>eErAMI^A`8i!Q(Xd{MkKr#M2Sq$c61BT5r1*K!&n`P>XdiCCB z46W1YGa6;I%x$^^J5_*_`%;v50xXb)SUxjS(|O$)dGxa$5CdZ>n+!b%fKJAo;H5U^ z`vDrTjB;G(BNE6YkW2>1jBT0a=)82&I`DfX+xF&Jq5EeFL!w9M-df{*wOTQo&j{w6 zkuHG`g}9dYDGFHG_3@(2P`si1lWcVl^F1^PQ90=){XU%H=DR z%Ly>W5TaNiM_EKIx}shhBO>!ARrd5o0w8qWyoQ#k2wDq)5IU4dC<#J+3*IAJ;qpE! zD%?7FaqPi1nsJtPsfA@liX2E$(y%w>C?Vs{dtT26_RGJ7iwn30~cBAov3>TdQ{|xCT_;+4oYh*?sRt7MP)v-FG z(GShC&uG~_e^)7t?AVtn8{HE>pJ1^o9ji1n^as)*@bMYOK@@W1)HtR@^2JVV`FAAX zG)5KXbbvPLLBL2nqsSao)ilXa(Jc3LYF?IrA-LFl){1@!*qEbqNENP)M-ak?TS`ZO zE3n5k%KhNeaH5h;h;)8TP>>Fq_nrbYI^-pL0f3(^FrViJdhQ8oGMk@!H?N)W@TV+S4P$bF&!y}XQy-qc0bAEgJIT~oT?S-g%{w~$W`5+w<4JBhxdFY9z zHDh3hBQ(+E#dz=;Ny~W2&}4%a8hYlcv!}RsJ4=+*a0XCKG!K48mS|8%s}W^r*y;;* zHJ~%VOC>WQhh4m2kn=2s^duu-u@`cB`V@UFDQFsWHyR03nHBBO(lJF48M|ms7?}|0 zT^VWd-(+d{`}99t$G%^VG-i}*d{}gWa$?Z$kUA!K33Pp78)(s;08kf>L+1{tjm$$p z(XyKRct+R~W#;CX=xW^V;lR_Kg2OTop%7V1dDRx1I9s}Dd%N;FvN-L7?*qG9V88JLSUHvm8+f^Z+4{k!z68pAILDzZj&Bp)&U?d(%ThZeT!w)HwmCnhP0$RH%fG zd%yuWN+IY3GUO#g(^SO}8nYTOvC!PR?tGu7J`lAjk`C}WJKu-yk>|_P+3KF_z|M^m zlb8EV1C%Uye`hU?cGduRi-~EGMzUk)M|Gvy;3zMd1;9O>D$2fSX)9|Oh>lox^KM+^v zQ7}C=@5}rz|MDG={EgrEl`m1J!+X{1ZUq2l$E{d&>i>%=FW;5|KxpG;X$z@nQGW6f z6pqn2HL%e}afxG$4$aNwU}TVG#7RIhUP=SKQ;cWE@0w@oAj_5L=mVm{MJIbPz>0JR z%rBc*0jMDk4>qqE$v|XJda)4|q=DJx%+X@R_ST5Y;HcivQjIEOYR=gSr7&L}iXa;_ z<6if}KbLDuW6nPrb?g97W>jd09J^98t?tkT2!Mn{WnK(p9b^nOyvbGnE|D8QS5bL> z-elnE+|#LW94J|v(7jgWUm?16&p8!sFkncBB8t@bE}-+DK$3ov&M}+V z5HxTRLaBwONoG(dG>ZPXmeg!yuA0Bc=Stwv6)`EH@>-))O-GlG20IvrK4YA~p+mwMwGDrMOf@}k!CqBLhMJ8<=+3!CY|Kgu{;n#0&Zay?3di)E1nOQsMoO3?%Z~yHxzUQWo-+XP~_anso z@cdABVM^)N%5vkTk-`D8m04O&KN5Dq`R5*Z*^mFkv&V6~>fV-axmy7Mun*Qo>pLo~ zxrp4HT}ROv9WQ&K({L*N+d?(Vq_|S|lZxela`d$Ca)v-P8i#np_BEUT9HB)L_U|#)d1#DnfhuG@L**JZ#W1<6iF@5 zqSiJAcuChg)Ej}tGN0470lOkW=c_NCQ}?T z)uHUS>8v|M@R^--90T z&>t8Ui;qW(pxBQZnbv8oqDC$I_pe{^w6A#D4`B=Us#L(; zf1zc?Ya0PLnsU;#%M|yt>2Pv$w+NUVyeZeR({QB|G!wmw00EiGXKWcoq}p2^M|aDS zt)|kou??a*`R}CNXm}J+1tZQ7?Ms8((8&O^1Wbosd3Z)JDsM8U@Xw@72i4YMMiJ_# zZeh5hHJoYAiENhF!u66rnv9;7jNcDlSJLrK`UV81wzqUz6t^(Kq4Nn{Hw|6p9<}!4 zNN17H$Vfc~WQar)hgxg`GNNkn8u?r@dNQifYaK~Zr*Si*^O}Gn-`~x!I&X*y_IMYQ zK<6YQs%OO2;Ik`T$LF9Hvu>hh1wNPq7wZuOi(PSy+ti0x#5z9)RC#86p!r?i8Ec1C5`!NoFdp-_C+Uf<7Lv(Gnqqn#w9+q zQYc{4S|tM&0(OW%>3dcKw19aEo#^OmrPhXP%}WWL!O|5pwSlG+t`pcmG_*luzWG}O zEdogarrr?J3%~KMV<%4kQ9qxbt}Ue3AhcdA1{8OU;7bBa| zRG-dBkdCc|oJpgxc2WJ?t)WBU@DSLt0d4BI$4jD73_!}~bY@&9UUU-;8d%cqHW^l+ zg`s#SC&nl=L@`H}CMIhEQnbEf$G@?G*_G~ z122O}pMMAt1oOhn8toiX#LFN^U<7K(8mO!b0&=x+w)~VjNS}nP+vl|exVFj6SaH-K zkmUOE`Gp*z8><9bBg4cFT<6}G1c(r^A4pNN-|5q3pKSZW@ODM zd|V7#k4`JiJ=V=<0{eV+0YH6&`7GTCGQKJ6qG;FQbiqiF%&t?;Q38hi{u7?S< zy3Twl#SR`ibk56u^oPIcL)U-kUXyOQy8!@Vd$2SL>72|Amg##F>QCe!GDM<413Z9? z6tbT;4@-bk!m5lB{d68&9>53+W-|Xz3Vu0*x&WLYCB<~fk~sm6kP~JE&FducUN!+T zwTzU7pPKV9FRaf?YE<3zl9Km{{?*W$I$+H^bSPjTM&}Owt~sN3-vLNWbT)$bj}~GK zmXSzn4ZR}&XrZ-kKp5&UN)$z>ABvdWxdyDKrb98;a3j&WJTNMQR2df{P^FfwQcbr} zQ`fA(yB(h~_1n%30lMi4hy+Rpv?_{D29K?dS=QG8H06Ssp9^>?sN5)w92MR1-nHMd z^|VRJ-+p&t6*HI zIX($eo+d+BT%Z(<w^81aE7uyePm%iz?6X=JXw*4($M3Ifk78H-?)Z6o?w!^$pR zcLIFAmb#$aHCcKL-@KKpCG?k5&3zr4q%TkiHv5Z)AWi|z^@e!fJf zDt8DpxP_*s@xai4(+RQ>43;@jqw_5;p&qTM-aDg{JgoY%4r3Zw*5tD?L3WNOE%a}J z0Qxol0KrDG3G5-@c{=m!zBG8;Bxy(KkjMlOhtP;{irSgEO5@I?)iYDnZHKc}*mgYYnlF&7p!3$8VB2Wd05}|WlsyYl7jqOePlK@7Mmr@~N z%1iUn(|Ib_OMW6?l>m}ahQ2k-#}O-| zVb*{mP+h#BGlJ#P&$w>@RPg+DT?b}5I_9n$(7B;1!ge*pv576>Lr*{q-G6$s(3v67 z)VWiH@9x|`0%rVO?lY)2MW)%H{aFeDD2yqesLOI-bM|;=l+JS&!4}5^2XeBJbUZJU zYt4^|DA+pXICN+e22pn4errlsWf}k=17aX}gHagjVd!@)@QEAen6C!f$m$4!BHA|? z(?kRh)DCeiWffv6SmnYw0+pJd2(0<6zvjkw-2YAQc*9o#*t5K#f0-{c8(#8~m%Q)% z^Dp?tdB1YBD>JY%fP2v0(bRXNHKtFi_S3}d@DYlA8L_>nT}6G!kGT_jI6j z_g|c--$dOZYTh%a3ZP}zEgi6QrU?M5RK#gSXzWPKH66y%F$W1iBVjXw&x6M(7(wF# zMNzJjjsSFhG8}p7#^@lOoXLnlxjZlIu@5mAi8MmOJ1FvRpo3^FFpf0r{K%vSX&6qp z2PX%z(+~&! zAn8+=U`pTbx}vC?)N-n0L)gh}nXYLgBdyZ0|2pYd=He54RaI^zz?tU58xU~RfyONq z6uNTUV;vFTAfeV8838cb&u8dT{wJH1sSGU?ThFSa9tzVqY+J3!SpY0rgNuD2a7}Bk z4WU~1%IAn63fT(kC&Z|vKusUiV!3~MH6{U;z|4yFVSs~< zRQXWH%J~d(thEMeT_DC0J_C-f^!Vt7`+?ONhOWmQhgNXgfjN%PJ1ndRN(T%htTT-6 z=sSYSaU9?!0Bab=0ZjvJTy2$yVVKTE$tiwavSaL2X`pjUa384$a@qh_)dt^&@7n~9 zODT-zvl=FYd>LrcxvU;&!Kxy%b2%7DRT?hVP!!0+hVZKrUE12~?_^sSi!LnhofR?rs1n6XNc;Bon zSq|)CS`xVQqVx9t@GHOXt2c+uhum9e>bv=M>Nnr;hrf5n(WCEKoz1pGDO-2PsGbbT z(DvO7u0~a9@1s==!^feO|M=SP8?*{`)*Qs`zV5O7}frictjyK?8t)dmj*0^B)w~>0K z%9>89%9+sNfY+BU!X%9Hf(X&L8O_v8p)j%oG#p0Zni)H!x$c8&%>T=t`}vq!Rf$Z} znwb*OMNs_7_izoxA@gBV2^ims5nRc>{7TPwDe!3Uj?dYh2hr7hiO&}33!~_&J(5kD zCP5Zm2Av79pXgjRnE@&a8qgfGc>yG(8`LC+##W!{+&l^HAfS_mW4V7-RpGo>Q$ztp zsgWCAzzkwi>KJe<7)AoUkR#%XaGbVljza`N1>aYKHI>b=3M5dYPJQwFo+Xd15`=eM zf%O&M^|W^zZuxEP8EFhOYT2fl4UWU-EzlMc zEOy!NfgqgwNA(|*W`xfmfeLg|8p1mwm@ezU`&kv3=P+Jwm;^UuM=;%s%#_7rgjI*L~!Mk91vWoPE)z zvzBR~+Qz9|Jye3}g$!6r0r*%E4R+Q2uRQ04FL?gHi--r@lY!RV{_u-?7&zCi)r`zj z48t6n85`u#c#E#xQA6H>PP3^AiWf(uu{Q(cY(waLI>gWr9_8wgxz>rcCIw6ikzERT zwD_5fY$aj?yQF1~yJ;>sjJ52wv5Oaipo44#Pi@F)WqvT41d1)-rio;5j5RPf$7O8` z$6AM#LgU4!w9G5AAxI$|s9bb92>v9EBOMowAwc7bB4;idI>4wFqGSW4heJAnG?b)8 zX&A@0TqnLasZ$t@S{mq7Cj(?X+<9<#jr={x5CZ)DiOs2`*Bg3Z6qgJdw@_NBY7K|R z!7^4x-sw}H)a(t$~{G*)GI1+dzNQfpun$jG(m)#7* z$VNXc*vJMd6K!KfH}tr5x8YlU{UdnTyN}_{L#sG8cig$raL0iaY<2|~+hx{Is64YdM6HfFJyMO&ietV)fncj_hJ^r{GbJ!= zE_`FxuFJpf8@}$v_v9{tclSjFJZep5EPze%IQwJk-!$bn4@JmiK=Tyb>3uwt+}B6@-n!~(EDS1Mw? z;r8{4j~yyFv&*sf_Otlhw|^Wj`i1N8(*JTTUij({;q$J!9T%UdIK6*{+b&weiG4G) zzC+(C=26j`o=*i@bF?7%;=NbQM4|FnErBba51npPIxT1}xc4XaNx-JnPa4bwBSXOV zRB8%4*N-`Mro+Ul!O()wnXID#bC89qA@OLCK@1BlHanbm;edibRi6hPbFq{>w|VxF zpQC#iYoOmV;;x(4G3)gnxy4*lNZrx(+3j;_(=5wXwGR+vplCCgs^s2kXl1}#MpHnQ3sSsm0Owb?0SU8>oOM~%&SYZ zmIsc;mIfFB{fh^fd1k6)Q+Soa8Xh#z>B(^s*&Desq(fWg?jdagnS^D;&ugL6>I%ES zr4VhDVL{TC`N1ZdQJ-5?HVCCaToD1B^dM;`$JwYjTt{?GhLD#9nsxrS0dQYlyY1+W zKGFFguwpKhYa2m@H$6T-H=T@ow)bUiI)6taNX@veiZq+vhc;T`ER$nalukxL`FMII z(WhKY126$&Rc*9jgkE!SlobRRfwe}Zeu!=}WBFdB^9||&2r$$5^Eoi*Oy^mnk(N$J zX-o~c84M%5D;)3KaUYhFqC>3}z^OFgeN<8E#n`Lf&9r%C=*40o1o$S3oNEHDe+yNo zXrFmHYA{kI7-jxBs~|X_Ueyh%OXqSDgpq|I&@u$NStree!)oA;3+DLpKfV=r?Ow%L z2j-k5wuN=@s2E$r2!~lgF+*1y=GI~89VgcdPVVk-cD2LhH=f1kz4cZ+|G)hse*7iZ z;<>N=C_ek|j$_}k0VnpZJ(69Cg1Rt#ek z>(ZoaF;f>o0X{izx6JX&CeS2sz2y)i2$b{pq6H}7;WP1~_Z8U8z9D=EvJ?sM!x(66 zZZ#ab;3S4KSvJXKj0g@c17Inzl}(^+qdlX2Y`FQRRjjRZpCouMDR!=n{UgL`81bw= zgZrd~fG&9L1b?!f8hPFte7@_{B|rX)Kl1$%ao)Xor0qY)%gkbRb@irS`L$p9v72wX z{XMhQ`5@yZn^LA$;|*jfhs6SY-y>?nVnH21MB9-PsJQUL^Y;DNkGDiNIETcP~}nz zQxGO}?~XQRejGHckfEk2MI_CWqC@A;nNkc*0;IggA_HJz6zF70)rTTy&$23>>S>mH zgz9#k%KZYvY3uR8VGH9_hPCXtHc?QzXBw=$PZ=v2dwwn*P;ntyxEK^(yiblE zrr(ojke?@GEQ7^0ma!9y5|CK16lx6kYcPq~_-uL2bW)YB}ob3QA zW=4vZtoqc0!E;SOW`?Vzd~Q<9jrYq}{yZ}cERo}U0Dc~Yir(>Auz}E$Wdf)X0l*G_ z!RWIJpcFA$rb>@=3?@d0dKH2t0#lAtCIBVCpp)YJHPng3dS@Z?Vl>`u6rVOVP#(Yk^+W z^mb=Bx<1D(=M>adam7cD;fw$1R=ntE{sBM!viITJe)Bp!;oV1Z==fROvS$}Qe%=g6 z_suZc41l2w3)m27Rsd5kezl3_Ne19zC$|JKJvk@{rYeC?wfA>*gurwl{Sjcv9+plTnbyeuAdm#GL_gmdrG*Y*1#}~ z<5=tpEVnA6{&0xmVQ?MIJtla!gSdnY4vlEei)c7xuL3%V2}A^iY3@5( zi%yXM-;3`mLoeq;+FH)T8jeMW&ukS(I~omAccO@mO8Q7j(MUh@4!F!wD;>*@nsTa+ zxsHKlWYL0#uoRAS0lBq;VsSuZ#iUy6pS6d~Z&^4Oq)CeNyG^RA1d>&0@c3g8s z_7RAva5=<`URA6}T0BSrLx3eTD2EvlIRZ64q2Xt$scLRP?kO7MkVE0`7k8i#sFjX= zD5erSu>%oo{R%l&APu;lyVwDr28O72f@TNsev?rmNJ}-i1^0&~TNI?M8@SGCSje_; z&`wg%WTV((IU>+yCp;$rHRs=(+7-Jynmaakb$H@?PU7^2W4i*iunNN?&|<`0#{!4{ z&6mQDT!vfj7;xLE!1l;{T3PJ?7t>G-F%B%9>jKp(YAf)uqN_lx&T!kVhFkXnwpnr2 zKiq{cdGpP9 zV?gOUjp&w0)>t|VHng(Kuikz5+kW($o{s@n-qW1Z|36-4Hh$NC`mXn0eZPnP)M6NJ zYpq3BdemAu7)VTKSJ-JZRA!yNfCi7xvg-&0YpcDXKKQ49`X_$io>m%ocV9?zvn_Kb z#6poE^PfO~QCv|CZ)7wt$IsE1iavvzdR)+vIjBO18S`=4^vuEX#i?LaqH`QC9YyTO z^YM51eiY6P?_F%yHK96aA|d9&%P0p3F%Q-0=>s#Bmh-6z3?$@y^}@Ksw| z*mQ^022`j#O3*={Ejvb25L_dsLCCh`-`li?+@Q9jK0ntXgAJoVVgg=#ZZsNAWskrz zZ%#8rLEAXWsVn;ALni&%8aqAmz{q@Q?cB8u!{n5CpRMuP4B@I8U^;_e=X*1sOT*WK z4zZ4$;q6Kr@J|6CFy)dJ6l6`fMjLAtz<@d?Al2F?a1F6GCXl3cB@>}EK{5(*#wKQ} z2`EhO8I52nS&dRO?NED4YeV7K5(E&~it5%nHqBt5@8EkAbSeGQn1blK4j2qx105PR z_w;z+`)e}Y*j_N5XWmmV*BrfCY&UBd%ZTU;dULeG?8&eOeEg8(#seczfCt=g7ry9i zH{*G)`4C?EU*3-w{=z@v^Z)WzoO{}E;`~+IbnZIN?wzCVnqd}mbhQwKmmbAC6z@@* zp(rKOqeE?u7#XqGR;PXu(HdYKYGul3V*0d)4BXoxCW>p!a>E(~VLUB-F0FAOj~f}t zwb_CWR}H~-1~mMWO|L?Gyrta;gIR^GZsX`}>)Zg&bVF;o*LgNr6-9Q^owHS#4kTDD z>ci2R?nfd*o;99p1ki@k-Fo`QtAG2=ul=sGarW@P^i%){0?z*Cum9$so<6npm-E$? zEx2RW&rtQe(?=25iG|XBs7lkxLIcK$uN%A9S6=ZmuXx;tKJ>w_x+m!Y?$(DL5o@o0 z>iW|UT(IXSVR5KdpjgtKJakEoc~1RGnv_@^H5lQ_bn`%|{PG=Iq{CC%LbSIm6 z$Wb{P*|-bYD=%x{DunuIN65JaYr#{vHF;e8zu0@vfa}t#JosAoz4tj!d;2@R4>JP{ zMHoPkB9>TC!5Cu_je;hUe71a+7-RdQX~crW0v5oU#AxhB0~&}(lg=>13`~KkOnZBI z%Gvu~>-%wCYo7weF>3;~({OneRhK7H2-a+j5f(X{6)>0706X}e8iIHJ8no054^ipB~48nS% zMjIWR2k0b7tH5NCOnFnit)du?gDHy2f9F+7MT;i%n-Nq0nNcA>;+abqTQRXUVAMS=0CTKG#TS3o5u84q zWp`XVwG*Qd4nu{DserM4tWRARljWI)9|S-$7-Bkd3_6vp@ew!zIsViXsPs^dsiaX4 zMUvq7S_xPbcu>^Izt^xsCpikpRd+h!RxzwN{`Kqcz{C4i_zYZ-@X|1g9>?njzUe)` z20w8R&!xbK(j2jI5K;D_TiJtSx7~@`|KcM!b>~NM*PGsntp|=^bw0=HD$sQWy;Zn1 zF@KKY>V(+=82N0R%8pD{3B(X6vjS^|*9R947_O>>}mNV|jJnkR@> z3N!+1D~_AqwGa0l=`kuj=$dl_5Jj4$;NE3^nNT@=+wIdCV9J|%Z zG*0CSkuZP<1=1*l_I$FK)IV@6n$Bt98!(-TFmx4h&pn&>zU$XM{4cus{EcR|tyTOP zdqqTj>s#OSq;LA>fBM?1A9wi;K1NppXzHcXMxIbPdZYG-8wl=>zU$f3BxtK^Uoj31 zvw88eXZ*IezxACj2k<}W&Y`Jva0qhH7~$yx6{PNhys zlPh9PLOViMl=NPOVUc1C=&$%C+@OsOHX!i@Yc=JoC;D6umQD=J5!R_ML4t#HQeqY} z8kGa%EeJ%Wjb@}8-O{lr#gVQpfr5bygCaTMe|{>M{{?`x2)w!LaP!JKd-w+cBTes8 z_ZA(a%e*|~q!|gOv*PF3XsLD`+BneR=R1UI{=o(pUDr)cY4_g;L_=%7%+v_UNa<53 zmkp8B-ZTxG$(t(LCx8RHG%|cfAcb^{#_7aa=`dew_|xCK7-hf1f;8+@ayjKh#S8#) z@_7&57t`S_0zAQ-eW_eKwF2j_25$I*6WH36_ojtkf}XPrKz957tpmJ7SqvM>uw_d>UT*NBBuhDY9iEAD>B%{YGh%{cm@kK*AwAHvGY413mqzAKoOiU`A^wMi7o_jMQw#eh!0 zfU#igA)sTJ?F8nF5%ZnEVy(l+E?LK&SM0&vSIltVg&Ww~0rs8U!P?FOt0=G$*bYZG z>i{@x;Jb#vUD}yiRBoG0jTk1{j3ui>Chn5~XAXSrI#>*N_`VrFc+)=gwV^3xK>GmA zZ3107_Q{R}?OB-@tc`{*_{t+VdxpPXYFSqN>;eR#veDEh(2g$Crn&EstQDvWD8^RQ zW*x#u>@0T1&%WZzKk$lw_0!*AX1Cj<1pUmtBBK9}@A{7Cy!)@-_L{vLt51wlD;qa4 z#RM4U^BER9Yz^ER`vO2`s6egI%?iuRTVV6d*~QCW{%vpj$6xpL-@LN2a+h&IJ!V(B z#7E_dh}o~aWaWi>E;#V3=5cW`);XsU+3kP>`81?7OVOV8;OdLE zaP`wqBb+@aYGJe*(g@@@(NW8`>i-pEYJtX>+6m(TPmEQSK(Fg6yk)vZ0?%E|nwm4Z zaL=+ut?LA2xqfO9kmkE`oC$QsrUOhshXE*G8NlF%N6xSKPp`fUNB0!eHZqE|RKiyj zjLc<6pnu`>@sgkVF2v>?Fsw~yPef2>VF-jZ6dSJ8j_$sXK#A0yp4Ie{vzZm2F1+a`=&$5(F7m#FV9_VPt@a20t~& zKm6wVarEd++88l=rqmn+NW>O}^EhTMN3xA=+gSaL#zOrn62$W#Y02O@RPeJV#$U zjN^dW>Ku38anFPAd(Zp7e{F5g|0t!L-Ti&%`dYrpqi{t;_vV^LdFirpj-Ox=S- zRgl^h0s@iFCbR)+S=O#g=?t+o>HKIEIVNxbCDg;5z%5`nbGqPNZ##r;b!0z)1a9fn zQsAfYGscd*ud9KPSQ8{52pakD0i~-Lw+v6eVG{>0*n$;m8bbGnX*%W1YsW@A)fhEq zQ>aoBT#)5z0!1cc&4^2{-Eg|H7>}e!zext~y97@$<=gI8L86T>JHZ56}MoZ$dqJ8&Esc z5_I+nGi3Ot4WRWEL7`ryD=U;joIo7 z*5{6m4Yu|k8c+sD===&;phkhkh!JyC8!<+pGYT7v2U;=I?ZE1GLq9g0+`op8T)T>U zFImAom&|c=-v-vt23F4uSQ`V)7x0Z$z_-xG3R^5-m?7o`7zrFp04N0wqslE=`4R=_ zicaVYhc&~VLnD6o^%rC1z^JaF3IaOrm9aTG37NHPDC#6n#Cx4s!B@WYKAhcDYGhjR z+E1C@lb)w>GWeO)@CZ02$WFjMO_ASvFxee}({Js()l= zcRZFXK)S0(<%)>%YcJY(^4_cV|FMtb`_o0Ph2aakTOPq|I5Npr==1r#=CUqMs z`|~!cDG@ z3DqX>qiAK?AnM3ya&mCPiDNz9`|iC!*T6JVsG}VCyBuM@Q{}ntIq;Js6F6cnoDP!P zZiJ)2w>v!N1t+kvm(7S06lMN2!3wn#T#HSmqEe6wgbHZn#240HX9FUez|bxrwM)BU zMp3A^f93w!O1GF!HO$6A(>vMp{-)CbCoPI}0|B4%@Z&7-{9AVL#19?=W=`OUOs7bP zVA_ZL3C5is`(OA>e96zh0)F&;sC~~h?@MP7BZv!bg$aN%9mOBIfSQkif)QoDiZ(wC z>(^1r44?R`_u{_y-HGELx(TI$&BRuC;Pgu@$;VnwndGPI*oW9E#C z7k$NQRKz%9V+)uscmm`jSFPZtOZMUR>(_Db`KyS*u{t*FIkiApbQmj7$c)m#f-S7k zb+C~gB$*Ee?N8-|7c1}v?AyPM-}|*I(d{`4vz|^qpoUpXwvF5g=P-khfX<58oZ<7o zD}`MSb41gb^9g8$OgfPS_y-6=il_z z|JS#g+5L~DbNcIYMMU|fU;3r%UiqpYd(EYnUHm)`pOLjzgFAJBWj9x*0=Yl4&3eG| z&!b~?Z4I~HcE^$Ty!|~ty8qz8Un`}Y{?zY0SJ$Hr0PM9dm|uJN$p`){nq6Va52px? zOID}CX_2xLfP-p9Rn8^=P&2Q>4Ff1N3+1B~jbnPI3^X2=7yW+bG&V3 z1+zv&6CvkZ3jK~P4K}}rRB>zLBwBI_94D_NqmZD;pmM38sHIm~62)T~HIUxQgG}Fk=@|)@BX`D?2Og`w38KI{scclUF|0WZI%pz#xsCgQ{x~3sY*(VoCN@O1mChaD|b$ zm5MOn$b~ET(f@Qa9y!!ub;0~`%anmYKrYAPhA8Y-=&fS&+9%;jjlkW#=4>-#Y z0cu|&e_!dS5TjP|?*x7@MWX_6=7_}(q6DI@!`99N`aLLNxaVCrU!)fDMkiMZv+Lq7Dn3?gRH- zxsKZ|-oUL_@5KX$daQH>{h1x?*>rS+qj*E>D@Ja1R_&N{4AH@?p+v>XM#DSbZ~(`K z09@=`E$~52rgC@_RYsPq8p2rhGwc*RrhL;YEpJB6I|NrN&(O-HX1xRGU{bJW~tO*IFMk0~+b#1<6lHfA%&hu^sucO5Gz z(dpyrv5@obfv!@FIOXCdGt2j6H3yxIvetCM;O7@7=lH5`xC>{_tnm~(GqiCeYFFuB z9{8lCsd1On%tlrc2&L|T=ME6Kn3fxIP3ELc<3O4?Pkc)tm#G_$lOk$iU)KRV69ueD zxap84w;*%mBjARa4>-NCg71CZ9XPe8qx>=#j*+fz&C&H8&l?bMYVLqJX071l-V5>f ze)Gq$_rO`ixC28EV8M|NX+HEmhGYct&t!Fw%u*ilof|y>RIVqC1=bo+8d{yBtXv46 z%`h7S58iYK?s&&-IC1NTao?NX1s?|VvmX0a3c8hwooya~Qyk2jBUq8(BMb!wF@J{QezPgG#_DMEEU&24GA>e8K^RS)UdX?hL3#ojt6hO`Sx$? zy6#UOE1;G9>7#a?*oK@9%TU6XO)KfIf9ZjPKFgh!28Jq^2Mvtk1 zQVc_L0-1>trbDWQdD#+<>&~9V&TJK}6|}-br6Rb2i*o;@)787W^8EtLb(>K=%>Awd zL0qMTq5xxZxa{(mevMB{5R}wyOyxv$N-0RH%6}(25y3GmwZH+26^8+qdW*uwEEx&2 zmR)UNt)QA=92%-QPM*nQT1P%V_-q^tM)FOE2QBpt=~KD3EPulS4j$k!i2#Elww2!4 zea;<4eH5Cr8zG~9u0?j^V{~0u=S9b^*3Vg$!8w&PG>(&d9@ndRFU$RbszZLJw3x(> z#`$5iEWm3j-3+dWd^R?_Nj*YAjRJ2xG$sr2_fl3sLN=&9>o+A&+ z;s~J_qs0LY8=DW|zkcr5;g&ZYL0P{Xfi0$Y#HQI);SvbGDw)1%4}*UPftmmUm291{ z5kVO{et*{kWsVA8>TZmu?!=+X0?&Qf)A6EL{VRO)EpNojZ}}5^@h|)bod42q zK>vg*aqQ#*$B#6e-709Up!PimINIoF7TERyQGubaXfdMI0bz!dz2V5=f`<=vXe)ue zXEyPi4<5ryfB$a$`&WJ#|MsVD#Xo$*{kY-IZJdXO#o;yFcm4{F9Gv6KdWSOau`_nq zf5iwpV>|{e8qh{L{f429fCXwa?IoooLnqLM!K2~WLp{2V$0f_U5sZRL{s?Jx(tfHE zCfBqTHpNOXHUSMWPbge3=?2^b1p`+4S@*76-h9p5Z+!EYMuZv?{Ox6CXWsCqfBvTr zK6vymXZ>u;3Pph7oY%hVr_&n49j?A8E&JKjf^k@&Si#ozHumq`bMU|X*I)g%h&cGE z-*v98v{R4T^?euM%4h$*3*T%FSB=3u2|U%b8B=01Y%~qZheA=iE$h84>!3q9=pg0I z6`i2L=)kk2OeutnW?-zF4s9sraZRBLJ8RLoDrX-u;xgc+vJSNCI=}*LRK6{p4gjAN zxZK=8P{FRxjAKJT>!w_Ls!2&71IAaxzC){c(;q#6cmMrsV2eOq5M=PgJ}?ZF^Jg^x zPkF1gU>HVrI)j{jqhQeGyyy^Rp!JR{D@>5Xcj9>Szik&wVM%QY1i9$(9Jc_S6B_|> zoIRrsA&*j3>n=@3(RVDy5wpI>+THGW z=i(*9ysJ!%>yDpGfY(Mx*Q>-!&RJVX^GDW6(}n=lDwyzRYz@aQS;znLv$x{ZS`X|r z^c}}6)YQmBprvsCP5VddC5)PZ0^rnEVD(wg##g=O-=N}tl-LGkV-0Q<=8WbMndIYh zh6cdE2-T*bwWz3FAT~d%-{XE4hVWL#HQX>H%Iv@tFB?Os}pyUH~ zb`@XwPwvO5BPoid7?)UlDWoQFVD$k!(88&eX+&26?p@BY)}M~!4iLPi?KMzmGV4lv zlIhv%4=VA(VM&Qs{)FAw1A78 zsu`Vez<@R))E7U??QF{JXT<%nd6cF%CSEwI*c-XS17KPA{o>qI*Vb{BuRALWdzxVn*6`q=2g^UkgQ3d*%gy zdFvUpEyvrx@LKFSwFNIM(<>dDACvCQ$d8L}a)!u5Vw|~Va6CDdbXdu#Fm)oplZ#ja zy->N@ZgAjPZs)8{pwnAAza_0mRv_CCbKGcj#x`Qs^`NLT!2x|^Yk_?S2mH=2UxN7o z)$_ZN$!JvLhobMvVdgplMPNCKx$`w%@tg~3`(D`Ms#Ctkw&E_8b zc``g)Yn)#KCNdFS-}8NgZJEtNNeD4QN@wLW8knkKNh84t0fx%ORG-iB6L=1G5Of*# zHjbQsXfOq)h?fI1D>!zj;NSk_9eCip0z*a3Y8c*GEC$Du>q)X1t){UF#G7MQ3}+XP z<7Y=a?-k#Vr~iZJVLbj(bah>0Eq1}^T1@w+=LrI{pfKi>u+U_c6v-w)0CU^Z_Ru|Y z{d?pgQ0mIp8guLOy%=Zv(XAZ9aO^lf_O|!qk()k(2j2E>JaE&UD6<*Xdc&R-L+P{^ zwneWS5S4(8Y)N6dCjjdWW!tfs6^st_W~f8MTC3QL5ku#A$JzzByR6~HZWTAr4#F{m z4QF`R5rEqBWm=Plr7H*p4~t{KSN)R*aq@VbG%qcdT^|Y7c=$}7O;1P9(aV&mt16(4 z4l81EMwJ$-g*V$AtFlP@==90$t(Sc6H~r~%zw`&c%gpZk+f)EAcb|Xl*M996J^0|= zuP(h^mP+fQ#&4!p>Y;Vq)s9-CX}npPRl5#%+;-dXTW-1QmGk-hF)6)#^Z~%*ape;~ z|H3yTa24p^=`@5ko0|K$jG_tYPj$@db{BF&2u4)dtR}D&V3B&Jfst+CXEK7%egQJl zG}w9ViZ&!TY$H2|*{*0TRHEpO8!r^q(HXK+SB$Japyr97BAg5W5U|3$Yp)Jsp69g3 zC$|hWtLS3HJx2@=-g^SKKI;l>&MQy~75R+^!T>VZ`mQGDl=)8PCOKBXGCHm)giMWs zqDt4vXSJ);4u~?$-z&6q{wzcH1ccH7-}tN^bYO`im~+jqT<x>`{N@KB0Swo->jwjr|jpx7bIL@vNz}RCBrn&_A#CD0*nb-<-@04?hVz3q{#n~JP zz~+`?`{K*-#jpCexcG^CQO@3punG&&_>-=O3(*Ah_|1A_y&lY1Ibk^x)Z|R=r!bP@ zji5nv1S-%*R*zJ!xl#(yI-sxzfMGzC3iRt(*dffa z@+Op(ij~Sd8ey;a!iR>)_o2YlCBNjOZG$ zS>|~E$~rziJBYXA06yyLFc@mxK~38*jzDyXvmIXabq`|mq@i{>@7jY(!4U@%F&BYy zt~QQ~iPZ6wZWR7Oc{VWxsno`< zNQ}mf&oMb9CTbB*r^{UHGP*9MU>I0FQi^P)8jA#gXpaAL`!+7x9`V1w;(F{ob{0`d zC$c0gy$j#LL^s)V+%KaA0x40f;8?pe?}&^tJx@;q-(L=a&WFx39cfHuFaj=eK)Lwc z8L^qh9})>7D45~AP?;POnk8M%aV%Kf81P5`UVD$yH36A2xc&5V_fAujM`RY?soZajJt4s)(7@24HHDCHREg8?|R=fHkAo%xY z%n24Lh8=1u6Fd%=j*rjZCehgP{0g|7vF0oikfqo%9i4oj_M z1FNcwf|`xyWKOVpK2XquyeB zfl?jKSfW_1!eU^>K?I^ywm-LE2T(T*#jp{96>nJehGQ#hxY0In&wLGk?g#LR`5yGc z0GtYZ#W$S9c&fom!`OrU2^I^~YKYMgm303wHdIgui#*aN7|4)xDPZ9u!D9+?p+LZc zd!^PTQ|AbDsBNQMebayY$^Y?E;{%``&%)*R~eLRUX<^ zrgA-PexZF1s8ziV67q1Y%x1XeaZkSMXMX1AUIgHy=bB}C)B(Wne9z}!vGd?fZJm86058GA(lup>qvxX)73H1p&gU&EWh|w``V9EP z_ng4~zQa9N?8AwR4!|4B^#&)k#OefNo$)S5YjPwRMb?hFM%QV4U14q=z(h@(>^*Nl z2kt~xbiSg3``W2IPU9@F#*#{nBh&;5JRL9%wJBl=jghQ2nTJ|2I-|UuP2e4WaRJKO z0%#8FdIB%4lh#IbeNTq~M<_gxSPJ*(2a|PJjy;FWF&yjgmH*^noHI@dWc&z zCZgjxR(y{f$EgoOiSF5y;V;LH8#J z$P*kn@MZuhCL_om80vHS2 zcVL47d-tHt&O5rW|rQn%tsD!Im!tER1&K(2UK2AX>i|ooO~1%DgXw14ZVFazEL) z>Su}|8R?2vOL3Qkg!~=Q2q}*r#$$NH3c4x9!R~JfHfWUD36GJDfei}_!dT0W2sNK+ zQ~KcGT8H0!$5HHGt=M~Nf&cZACt=@-9Wp79*ioOg!q%iM^#B^T$(c;fi;jJ%=%=Gg zkW)Zo7)q7oJOMEs{F6eWn)y+XAt*>uB@f`Kg`k5!HUyT!K~srmTH=C&sm+N2k9=Ys zANuebtOL3*j3fJQbKC=%=xRB^X#670dme-{r5y-W5Fo&?>cAPpOI~^eXO36K!&)a3 zE0m7kgLIYNyA;kD^(CUrvOR5hSqS zzqAeoWcj@Lt_6UhZ@{GwpTd{Dy`pNu}o%0@n~OFs;_Yh&NmSW9jJ$TJZSEU z0I@}269sn+0Sia%W;i)CeA(U^j%{z_^j5*vFrdzXE1vgR*mwOiaOu;o!R0T!0q6>R zaT2z36yw%O)KXCUIUT>yHoudOANv!5x48P8_-IE*yFHyYTRb??qo`=(>VE^FX)O!J=R> zjszuX&sxAb1{ofPZsza?pi~THgbj17U<(^(*xj&OG~9Ca8t%LF0PeYHhI=nt!74KjlDvPB{o4t$Vb&24Tp6GLlsUM)~`7>Yp_z?VSeQ*+))xn{&! z=*8q@CD2hhT!I_@I?R@IG^28#{)|tJSQP24ts4IFmQ92Mvy(fx`T193r?Rw(fa;NGJhs|6%L%gr;b4T(gZd5-CQgf94Rqr-;;QAwjW z0GAzH;K|QEjm6Nx+pq+AdPX|rrJ#^&NB|;%0l2|~o^Z*^aJfzEGn^d;32Jp*>~uI3 zZ|y&h!1VN?4&U-$?m-RkL_Y!D!ez&`E#Sjj z@%<7wwzljE;2;y=kWUE!-Y}n6eCTYzykXR{^)>L!&T!TWd@&+QMK@#PqMhx)rjOWJ zILd0l#m~I~ho1N}TzJD(xbnHz1N|!6;w;K=6xcokvr1ioIwM*Do?R5Dd^hbxfbTSo zd6sf&E}*{;_XJy@Ka}T&tKh!`#=0~ z9J~3$xaTk4hw#A0YL8hB%+`8zB`}VT?HxxyGqjOCP_$6!TTf?3KnD031<^s`I>{y_Ns&o?2CO%3w z6JW5QT^Gm_Za+6KQG^0Qr@r$D9d>QE{a-w4qIxp!!1RzrJt?%Vt&F*6~Xho|& z(s0Woha&v6taQq0eAAgKQZpiJ8e6p*-aU-L@3OFEe|51IX+UXAX;6yMf34*866JKb5u# zBxD4i5i?tv)+u7NN_L>BcYP?&HT_OHdkY{zO;cCL3Gm5DMv}LT+Sk_||Lb=Tqs>N) zjm=wlPd!)d=mfw6ga{`%AB?8;oth7(kVJC^IPOEi4bM7(1BXNX?L~)&fSZ5?feyu+ zRqcvvrj807tp|VCjMWX$ zSqQ`EJdF@OV1|MR5AVfKyz;}i|6oChUF;4pfolke8Tg)EmCglO&B4D-fZ`T_v&y6e zun)kSc7P2&0!9E=*T5c#UJq(+TI1nWroQ;Kk};ZDht0)+Q=5*RF;LBM=@&i|`>uZm zu6fQixZoK#z-&acGeA3naqA?y3UoH39wwOPw!-lZ*IqRqYUCA+ZncJB!E##&FbRxu zGPsYm!L?EJ@7TaOMQ=dE2eH`_}ug^N|nWuK)cmR109X zf&;ywU+duGh!z114XsuI7M(sfjHqFVo`T9!IB$l6`Bp|7*j};*w;XGoVE<1zM7E)#(RMRojP^iZ~y%ZUa{}W{r||^*GY%a(6!d4 z<8MhhtNwj@Dp6S`^|XE-a*(0&CPuR|YC(im1Rw%BE1)o{WfZtnVJG#KWqWx)q=6NE z6A^SwyUN*U_(hrTat6&6A?RT06EiSB#=}A`lD?_|Ay8+_8<-8L)nG zz*}DOMC?7ivy19yei)Gz4g^L`;xN+C64x2H2uGbFXna^YO4&vkY6QUoor0Pxg#=(3 zeOWriWIJdQ320~_BN*M2qE`$bd`^yOI$qUCd&PnC2K@KeU5eS>9h6S=tx+VI^IHY_ zJnNzxfq^T>Ic5rji-^&i4(cgpXs2iR;;()H<5;LQ*SJN*q^@R^tB6Qxs{D*5SZhJm zBLhpSa{ehj;J|VmOx^J0Q4D~SY7a9sMGX3}x-2daQ6hUG1|h#!kuJ1e3D6u}6qMSq zaWe1?|MMQ4T4&141Yq;)VHxf7Cm}#F?F9ta7AT_SSn7M6fZ%8t9(16Y!yMR*g6Gd2 z+fE@IKg-ly?q^e7v_*mSCfyD9>Z~tVw7|FsY;84+?igo=3qR)uT==wS;fkj}9v46B zI>g)%J7+PDr_gU51K`vYpunxb(9o<0*aTR6R%yLS0%>|nv0k}PbN?a(29*|p^O*;H z<$sg9(Ztn)h><|vgW!2(4{YT^*ldpQf`{IIBkp+bM{)AT_u$_5-ipPk1y*N0)@P2{ ztViDgo8tmCjQcQ{APX;;)q*io7#2WOEGkgPKtDRxb{zAq5vMk0xa+Dtxb<=SaN~6c zu;=7ybc;Y;t%wCvc`$I#DmZGR#I9|GbvpZ_qRrx}kNn;%|L51KZvAfsfdI}w|NN`3 zfAZCTUTeK7+|3F#SmW3LwQz>c;+R4hGuokHfipWhc*&Rl-MhZ$yT9)XS65d*_Nn)O zG_PIm=+U{{eb2AFX!cD9uQ>ewxZ@Bb6y~T+##nBe#?pW>qir2B6Ea8>JSJrlI~5X1#N0p7*whJ&FH+i@nx(+PCH1K@witupY6JW zHU@=X89~T-nDLow=GTo*oRNR!-v|2)td+nYf9MQWX9auDF7Teue;mr_XvqA0D$l84 zbg>K!i=WI&WH)L0K_P-Ys}-PaM1XW(@NT%@?f;8IZU05i5Yih*uP#Wr`xmM1Z;n z3fbrwnH~s))@;aG=X;u|dO&kJ=`1FCm*65q*YE6`0< zzzVv4MPO_{tuM0=bYxN|GHkUe)UgY_WED{jX&PMzW(H}s9Cu)wh^_kw?~&} zgn+@ERcXP+c@D0$A&=S>5wq8Q*~SYGU$OUBqqU0-oeU>f zU))IDqXZ0Um=dDUjaw`7Y<4+GZmjIs$C?)lXQ!V6KE>MFf1IkH^dk?akAjOe{~RbrbC3p@Nja2lj46D+9+^L6g=c$n6pom>_2_rZPwXOA_6WXwXHxCsX7JPOy z9PA8Nm}Akzh!vYs00x34sBDtoNgAFFck)Q@V6fm~>B;~ffMT6kA4i~K))}@3$Enk7 zox8Tju;*zv;F8bzY+UxNC*YE2T#sf0VzGm|ID%p86ai4zf6_k8^+Ja@{b(8e@46Bk zO_Zh9o*DlRFdaljz=NQm(8AHOjdbm)LGZ>F(>5ZSBUV>o-G#Jo-r=sdd=L-Zd=DP} zzAn;vaarB|`@wff@2VZJt?=~}?i1V3yJ^0{*7ktqdz3^wxJMZvU zl#12GIH2!(KyB06FNU^Z90zo@$1n`4UK%l*ui%<%pYn;H{m(!1G5~*hE=87FxsToz z5#{Hfd+_>;o;LfF80~Uys-nCjoo&G~U##6jr;&+JW8ObESOI`t-O@tQypJlqkn?9W z$L2z`h*%m{DCMBNKM4kb>E8gs2*BnT*-?*CEUDB0!Ai(rHT5niMrI(zW{{xKAo@J} z0QmAa-B5HFyFd){t%f}-!0*5JG*|?RcF;+KA(n$IR01}xV_r-*gw~#`0=w+)#>lB4D-z11mt_S3$C6E#9jevm%J>Qo3#$WHvaiR;pNGH_a%l>WEO+ zzgh^!A<(GcB=rc6hRzMg0o>IpW(61nI2(Z%&VVgz8|#$)v$effiqiO_3-N%m;-x=`eC! z#ga`wf8pru51{KitgXzkw%TBQ zg|%^Nbk$WL#=v|u-2B7?c=OXYFb}c@7CJ&*0Jn`S8_kUqngC;4DI7Vqx$`w&_^p5W zonQOyFE?Ag=UmsW|8=_}V&9e5T==cmKk@qSZNqqAXrp>nEwx?60I2-3@4G3G3;=8M zIWD~Pnn!;A=U(&urIi0(N;&(f-|=W&Ty2l?^%IxRue$n654{=iD_I4g?LRpO4w6+a z`>~Pw$5ihM)qidw6p#AUAEy`k2gGVa-^2k-bhPsIA*XinsA{L&?zDW}e^fDS;Vl2vI7E?#L3aw*V|Wu(gHDJm5L zzlThP1Z+yXxJo-G@TBh!Idx{(MT;A$?obK{p~${t%gkzqJ$oDe;5W`k-IKKRl2w3Z zH$gg3s^JBiG>Cj=j(MjeSR?XuNIm5AH>dfLEooSqoJb%7H9~d>!oqX`38Yv zI_wE3h$S(w#j~d-gFocE2iLDV+x`~KgF$(DW4<>upPVTp*lHu0mPSf8LTL;2T5u;| zG)2^B)(gJ+Ek|(p{xj&Zo1td9fVvNAHn{c(g!$dd*3l91ji>z+deJ~&4Z!6b8hP7r)BT9rN}mto{OWFr+T9G6mTVk%5!kqMWk=1>{~06I}~ zM28A=l`KRpSZoeBvjZyd=Yhk|cs$N~*5~1hCtrw5pZ#=TV-?Z1P&XgKxP2UEJ<4o` z68S74c8P&VIL8J8efeiuea<5wMkq(018HJF2!uE&MZi$pmHe45cp zhej_#Ygao4}J*uzxgk5?A{YNu(pD}16KAFbYo!e3E;>7ugAepE`ZLl zR%dYM5$jB)N*kjwta^uZWab33AHVnb18@Dco4{((u5HADCYFxAP)fHTH(Um7&`-`vr=~BvnHnS6-`W=tf^~s#p zqjZg{JK-%NHwaPlGWrDlCg3h-N!pubWuWty19fNr^avV+q7BK&fq$lPq=+hwr2%RV zl2JX4wC6Fq$`iBZ*#KkY!}LR{$4SYKqVGjwU=T&_LA^jimSh3C%6led9-#0k-`z(! z$s#eGx&jg#6d(*kYgp}RiktV?>?#g!ZJ~v+ds@>8fmSA9l@UJk>$0n5=~P1FPDjmq zXA4;B5GdNJm3o8-M%QFn7$IhtyV`Y=L(KEA4RqENDY0C!Smk>ec-DeD8=^o>fKcFW z7|}3z=HLtG%?T9J`OBwHAZ8p%gQf#9E9jKJ45t$c0Rab{@cM?M@5p>qrIV<9UxFgG zM5Y0soU9CE0v?YvplYY8^_pvQw`1jC68urbn9Pr8aS-5;hUNFxVi-o96X5KA=z5o~ z?>MKbGzkkzxIJ)YeFaat`J@DtYMvvo!29r3BN*LsJh@+To;b>U##*K2fS96S8t0_C zY0fIa@nLTm^iIk65leVZ53CT>_%tS(yC554(>hV05CGE@8Htl(ua#9O1~w}S0ds0~ zJA_rl7+8#f7)WRxT(7w3aEA-`t-|j7I39Zaui{PL{-5xgr+yV)ea#o)kH7w3;cc&f zJ07@o1ok`*W$)vGjZ5Icmac8w;e1I@iA)ax+~I|LKcvav%Hhj!OiN~O7~~W(neplt6v@>>!&+-Mj0ME??0txv5euq$aD*OTB0B%s`L;=It_#CN<3K;s1x!^?jONtnX;JF4a<$XG< zDx+X>FwpM}*}%vHfE-9At-3PnP#iED(X8OvXBId?ew@!Z65KfGDAQ;|2kRifr~$@K zdifc?Es)We4zfskJG9;qtlDX@X~Pf zk&fvdFKn1o-`!*a7AJa4Rr=IrI$c)ZX4u$jjO?o zUs}x2i%Drl%|cjH_rQRUjus<)$5HwL8!IC&Jy>wXdF$vub`S1<-G9ZKzU4>o`X~Ke zy!I(yg5Ue+KZ>{i>U(hCO(%fWtKl2hVw_(L)H!_IM)<(@F#>!@4W3uR?hqSdyNq7g zvITd5YcJP!xS*?2J)AOwp|M{EI>0)VZXFe?D2tP*XKqJ3b|Wsldc+N1`#5~rkG~vW z|B*N1Up)L4eBXBxfqs31y%jXK)3fTiLTNT5V&VL#^l&!oySIM$53l;@-8a8D z;^=4kk-;$xi^XDG1hl`JH;fCObHfs8YKfYwvMLzxG^J^_HqX`q9EgaFde6zVT%C{N z^}g4A&lMl|qhJ2By@%?xUEiC5XQ~%DJ{kcU9hpIH6NRlAeRHKMFDL_%5lAMJ=`f|f zmC%Yc<6;P;wl>jhau1V{vK0Es7z*agNQr6|C7G_%rqi@iWiBHn+MV81gE6V-X&obi zodW|@^p=WolqR6Ce>j1H-FoSx2Y&^!+pZ_BH1t3>e(d=~)&Fs!lz!3l%*| zrcA8Rc@G1lCs*WX61)+ZacsI>-4w&YR;@{UDsT8n?{w>${R!01{N`l)iw3f_j!+QKXg&(*t7wW5v^+bsC4xAGkgg z9UBNBlZuZ}BouV&2EKFXb7l;-O(LqKxJx0};a94Ao^tbgv}ykHLAliUGp#s^91}#z z2{OVZ(8-cVH|A%<0aUUfn;RXz{I8DT@wc5uR7ZpQVoaJ9IaIl(=?XfeVgwWX9S&qD z#Skj%TQlJ8TNH6}dIFmPe964wWXn#PN_~k&&Il8k)+q){ElgECKQxbG0J!$DM2!qt zz)0%{fm2cS1i_1{Q9$t9N!V!lF5IQar8J7^3T{L|^ENhiN9+n2yv3P@6U{I#cz(d; zU-)bsdg@bg+0(DaMbEeaHam-PCopRdqir8Y>1KefB8ou47>F7u!L%3(*gM#qy~?~! zYYdY;%*~^Hz?H#tn#vjtx%P66YQgX7X%ej=Fe3VO{N??DZ~w9H$JN)KhiDZwbT&s~ zl3Z(=qh$4#>kp`U@^sJaDzi z`2vt}Vz2SwiY7HbQLwV0K?BKb0@DHXD~g!ZV1yJlbClUeHVs87v@ijBqXZD{6mM~+ z_y^Bcy%3ntKMtVlmemcxywGICDX-Oc&{mUT z0B;;eo?ht5?8tzbp2)b~rtyc95!tS|`0_Ito1>Fkn-x|^NN>Q1i_Z@;0;4P; zRo)aS3@nxX_Z2C-wJn)3vQ4NS?L z+1ufU8;@YD1}}is3KZ^{lKnTd$P@6S^>wjuE@S5 z1Htu4U!Uv>0gRpuNXDzu4lTwJ!w@L5fla>+H-6&}-?F|1#K`!-_O)^ii&G$V5YXCOeRmY`E> zz`<6=R8z>75GWW-(3KbU6aqS0w*k(7SLW!30WZ8@#Bcn&SK{`&A5ujKZA5EKFHO;Z z;U29u83OJi9aL8DedPA5{`jrG_kTykq3HoW1FuYjbR7kL8AOty)A94#GZ|!!Z2(~C z`VQ`+1!5MAn9kXCP5{8l%EgNsXYcMxStRvu%8OFm(@hI2KnF4EZ1c$&$C5HkqgAFl zetwRNQbwkbmWT4zjK=vn=0N$~t_2T(z4#SzF_*e@ZqUIQwbtqE>>5O=i8$m%4 z4Q^)2JrgyX(W;H(GHNw}7lWvLvP7uHGOX%sXwy4e@*+s5pBaFaZh@x^J3P^kCk101 zN2VlFNai#k8HvIKRDw)OL||0gQ#x5T+-)QC(50~R9V2j#L+tu}a075Y^*`Swuw2fp zhFT8A)pvo<*|1nRbJb`#b*dnojxxIv(x3#_QGh+1!hkjm zh>;Q8#+u{&Lmdw6n_=q%H{s*I@GJPkZ~A_``r0qTFJAp+_|tFsw|Mib{|a}1Z~;4T z1MI+ci1~Sp+IO}QF)*?(h6q(MNDmUSi3TIv#ZC^|fEu7+WMrVt3Z)>RXD*t*FvnqyFaEKhuN{VA#HE)UTL1Ca{@c$3@Pvq9 zmFZ{RWwSEtYANQ@uyL*eZAj6sK!H`vW;2SNYX?JPI*hkb1aj`Ka{>SWZ0)qY@5aow zNY|;9PNIlB!7iqpX*wB3SV@Ng9G)hx&?HpTE?~qDFs~(1PE64!Ehec`B55m%Xfn^0 z#sw^$V}!?hhr~r0*(2EmiNjhOWgzH$CM505XWA}?BSmb}TpJwM_Bw%PNfodAWWyAGKn!+TpWr zK8e$NXNXGO$EXOzi~u9ao(!7}oP?zRCqS2D4WHWfc$++v6{dqkR_>L zDXN&f)Vgrp2W%1-^B(y-Cc!R0#&O|&weER_G*AjG3flIFwmqQsj(w}ZB?sm>|KKX( zLm$S&um5HI`M3QW{K9o#h}S&vEAhX6=oj(MU;O~?|M&pg^8}QA*T7fz!)$@@5ux4? zFl{KkA6JwRpyrYT$nk;#gj|5eSDfasvjEUx<_({J&H4DM8$J(b+KAD)w{xFxF0}R| zbTl>3PT-m^SnMpUtRBDQKmYoVe}6<=c&;PZzb;oPQHNnbsixCm16}PfoAun!Cib-$ zhQ$J1*TG$tQt2CVqn*R+oB#kb+baFxcf;Ej7Z=w^MxQ2QX2uAZMvn`+h<4_YrCjhu zIcP>kDrrlW00Im_Ck{p4K%-%9qsrB&Bu*o~+$91Ed2bnEGuF2Uh{gkKphMc9O>pSs zv{@=Am7s)1EZiyj(o9D`hwD{6?Jp$w1$4A;_#Z`!o4fFWDVHC1i?KYQJmNfbLSphS_k%wIJEE3 z{8!)b^G|8mdK!Rvu9nY~D~}c@{P@+Ecm!q~u)lGWp1S28~`iNt$PtY>iVH9rO1~H7!97 z#8?zLs^(-6Qi%>OEaou*mz`bUzFCnFjZS172GyD}CW>J6 zl7NL~fR3fe$z<(+sN@nsLrJ$zM;RcaL4ZUzQlxlxi6mVNg+m}ukr%rmDu1rK7L(!k zz{+~Vy?3p012y%V&!8e0{n+&66f?qrkOm-v<&aaFAb=JEFvU=;p~i@Vhei1cXfcuw z_M!(7J97QWafJX)U*&BfCD%8pw(4i_t@2)u^ zXig?UCB6F2(EX=Nfr2-Eu8~dQ-h?y)e9nmAao)9OdNI#z;>YM$J297&ZbJ5ESJ2`h zOBkW=2LaUB95$;suvT&DzJf~+tYZ7EZ^K9b^Dp6dU-BJz&6Ur<>!0xw{MnEEI^O%= zK7`Fj_MzMRRJ46h#LyptBe2sp(c1QMFLxCd4aJ;4V??60Ql_y;`&zAo9lsr~_~!4# zeMeY+9^PPL%xEuYPYDaS-X|SG?Xd72oOft`!FT@HxBg&6d`6Z9mQt&Aw546wv;R!b zE|UrR>6g?dUceyKy>lD}8Ue1Lb9SARi88a;cg6ZJZo$peAVo&T8=E8Kf19XS$RL@K zlBA<3C@Nb??@Q-NveAqxysl$3o?bc{qsYGNcu$5{Vi79F1v@ViY{ zJpeeaKfAza5}d(Aqb{lMRPg7!HYYu5W^f;uQKdwGrrdYZeZfLXgreq%rFbpUk;>?% z-oSRfTdfs+-|^>#b2)*F;O`EbJ+^mfkULZ!ttnqLjzjt~mK9byj!>f_3gg%jvUZ)o z3Zri}3kr;-!{e^o#>r!h)FMVjolgCR=7YYG8#@DU;y%?qHrS`1%3LN6^eyg zYf~ggl+Nb}7<%PNOQHJP((v-`XfpDoJ3FG|Qpq%clr2O{M^+$cqfLxQVK};X1Ll|l@S^P}lbg%+I>_NdYqRzEj1j>j!wF8v)A**IswZIXO zdPZZKN`@ z#ORW_zZ@`~j#(HCMX4yI>5L2ZSqOKa3mjT0c--L?taZTVJO2{*y!MyyKfm^S@pD&v z34Y_VzXosokzd7oe)D!beBXKK4n7OMaV@ZZ0Z`X4j@$6IfK`AJKr#f@8c-W>?0)>C zFa5_ja`G(2zYz$X*FnZm>_Ox%qw8o0gcW$(!If8>zyG`bBzf*e==FUOJ2Ab}OfFQfx72*5SY z0l>(Jb^F=J-%ui8=wJctS#P-GqZ=qQ9qi>G|#b$Z1lpJO4SWj*` z8vun>61HeKaA1c<3t9HWIU1Wbp**|^fN3de9Y|Xs_QO;m!DyWKiBO*lGZd%`XIKA(k*6=##Z?G>2^*Pt74TFnM47df^IaA7If0vQJ;LwT|%Alg0h#6Jo5O3?{~ zbha=uAbdtSXKq0lxTjnb!haGfXn9Gnnd315C%p@G6%rOhT9P6_rnE?C{*tPf%|vy#z-8LArZ6bVIY+&Ut>h+l`0}jBF`qxnU#BfgabvwEdn7r z*e-i$SC-W=N`j&hRg}mnByh}efEh4UJmINZID583SB1Vsv-26X4tHIN>T_dhimS|Cv5nESq;O5QAQC8w87L^!UD?$hW(PP^8^G@9q}0mC$!;phO|-+(<;^CqCMp$?a! zdUY63iv*SVZ3(7Kk#%4Kzhsm+fJGHOWb`y{Y~`VbJ&fXcSEWE)0A5RwYb+TLw}eUE1Cg`F--?0x$^6wy#qbBx?@`5nlzJWH6O;=2#!jVCQY`#K&LrEBKw4{xE*w z%ID)(p7}L+>x8<(Q@InJ9OLYb|>ya4Xsw- z3L-dFv=PJ5fEKv&(!+ax^wmG`5*yd9I@ew89?PrFsw0#lRKA~8ZYt>o1BTX` zfG&Yk?K)O$XxX02>zn}qGut||b>Vwz!B$_1g7eF#4Im{nBZkxhFv^}vC9oW(V&EY& zQ(jKgp7QV+A5fWHV3j~1yN!+NK1K#%iQZF8#Jr7ix_U0|_ob+bDs4=ktKAaq8Pt#8 zAjX1^ZYgq-7$kof0Af_DNY%4@8}+>veN|Hv01b}As}(zqhN#X8S}{EL>^4sJh7!gn zP{aZm5;|=fzcw=eJr3-K2hcF)5EFbAz3XIZX-LJw$ns{4s9)q5Br_91bvvsZ*cwxo zl>$Fw>Epu>tOAwq8#0!JG6WH$oZ>i+%L9rkqmZ<*S%uWbNypAUOdeRAD!BTIr?FUc zXf5;aOoe2$nZhy}Joy84PAo~gPllV$uRs9Fz^Kr;9`ryOhjg$Kz6rpNjVk{jzpils zYF8$w>2luuy{v*@`D!ZKBLY?p4(HDWsTxVQcd`RZ; zITiAIVxhFI5Zq_d6fi}_afhoh%ShCbYnEq`0L40iY|S-@9JGBI?TRtzx=s~43>;kc z$0z&2*`l6+&$3Jh=sP0VEGby2Ly;@rGm#Nbq|_dD07W{P02_d5ZIwdcX96m)0;of1 zsRcd)V+;1ZhyjPz8!otbjtf=-XW#iweEer#gWvlH-;GyZ{%pMV`Y*x%{`Q~52VVb1 z{KE^c#KXPe*!dgS-osRC^@3Uru#PDhRbwn!8dgZ47#0hZx@YIIpZTqy`d$F%0FE&;&UkB>Y&EEZz~oqjrm z@W8T(#gbx;pux1VyFWcgiG!=?NSiN0@t+YnXM~V#UXx*PA^TqCfZn*t0rhzoC@DJ0 zPbPmdI(#8I!cqzit0LT-Lo+!@ZDejzc9pYY7zQ~oy>r?i&tCN4%Vv8|7;FD|x)~2# zSzlY`+PwuT0w-$VvlpjUiOC2k0^&Os zfjQ0>^W6+om+ur%w5%VPNx>}x?h#ns2;6z&8v1qqtSb7W;WI!Wi!2Ij!~x!iv>Mgi z5V$c#YYrg5*0p=~^w`)dP*Iqy?rH&&nbC{WA<(h7z)Q<+UP^;xI)FV4#Do}WazLNg z+=MGdlItOVK2?e+*V>pO0_dy*jFhXG3F;F#K^fVO;|QKWZLp!CbKtxqJHVpBD?x8A z%~F=n=`9_u43q&=M6UgVbkatrH@3hCU>gR)G=m{9Sj9E9V&U9x7F3;krh4S?V%I5? zS&{NiAJUMLSC3EdW=u}SGF|w7*ASTpiJCwGPX%ai3AjR~a0;!Wt z(=|Y~$$u8IG?QN*fT9W{Cj5uRU^U8v?}~2iI3ufBlbN_v~TV zdi-ZfbD+wSE|^-bj}rT(A#LNxH5R~P7*J~^NJe1RlM&U_p401`0RRBF_Vb@VE>2(^ zTZ;-tZz&23iKjff^BG9zTEG;wL&{o4+{O(l=S$10dCzKDW6e=2DU?ztwWUx{-y7inlYoytj)sNmdpZv~L5UR=bwkVpr0gEYM!++P z0qJZ4Kye-nw7oFwS?Q=g0lQ2&fCo##mu@!P8v}n!h81$$#rUu^e$-wN043GWxymRi zqnwO@n-jq{QdW}#Cb|B)j46iV0K1%y&(;f>4L{D@BHuY*#p{v5{6Wo<65v(r*=XT~Pej zRqTw8EnA?Q7i_Hs9ynNWXiOy8%yl-lHjQ^t zt-7Z`5Co)V1|JsKa>wb74$r*pIJV{$qmMxC5y+OjjLNxMxn7%c?G&}L5mkPdRvjvM z6m@`rXvH0OW&T`_dp`g#hFa;Y>4TQW(CBr55LFDOm0IvbO3Pfin74rRI%*C?{6X;P z8XK-T?jfG6$@eQtS@7EvxQk(!goiwfgKLJMiUCHbc^I*J?dX&<+K23isj|m(;FFp9 z4HPmbT#o@vsT7sHYCR7F%TtTaW^k8=s1P{N#t=x9PE0_g_a?&3Aj9-MK(bO?O%xlF zU1^ZsXabM?3>iVCDYSP0OrT-b0-LiANA|B^-y6`+9wY9^iuqeN4uv4wk$cEEuHuq^$k~YglMSh7$cx2cHQvY!WuYfR!$5nFA}c8I5$|xHanOam);#x3h%>Xe=0IbaIMv1fn+? z{c5}?(3KIKqI4I)smo}CxocKhK-6c>g`gEL6AkK|Pa5>pZ5TX8?BBn@Z67#tGJLQOr%@|anu3WGE{Sur|)vQAv9978jpW!bBq$(v)Ld7-9`p}r5HR0E|_zCo$E>2Jacs8FKUUiq^OocE;Hr}0p-&z z#S-Ac*6C?gz2@nF`FDtnIJD`}AdT#DQ-jXCjpMXYxMamdfDu9`fKZvx5i(;G1UYpw z3pC2k(s*Esa%r?=ve4QnLq=g+Mgmnvl{BQIs~s1O$y$KuJ`gB9zpoas-ES$F&kR=R zc-zPnK&Os^XKIHRZ=J^dJx@>^8x0e{(*%=kfQ&L7C5^M}j-n=LHB0>*ET;?**fbeD z=wqd@4%(1PW!X~+oB)nPM)&-+4i3YyqjXB%+H_2GGGeW@sWTgwgPg5IHe@k!%w<;v zG62JPtj80ceHLerk%q%GM}c7^_3KUSeppfe1yA7Iol>$J>)}Ou5ok$6 z6D}~4PB&aB0@D0}WTBRoJiSsLd2bkV3F>|vgI%JJ{hHx%~Eiodl59t zNoz7gAdlNV%ZkMi@D;d!vNFMK0(y~aWU}vkcbABcX~huZ!FA`(F(tsDt#qv^(_D?J z7D6(U#^=kmU7*bj20xwBZoDU8Ao~Mjs=}bohI$XE`o+AmPsLc_y#XL7scOZ{RBX;C zQysLwUO)EWt=Ig|xBmXi0UXrJe_CGSI9j%B&oe$;rz_S=lI456GI+lW%} z=`xUj0udp1lQ@S)Y_~&|;SX7s0FS)&z}N!UoVSA03yoXH!%Lbw+yKXjgNs3j2#rg+ zP-`pM4T6BAk~xS3QhYwn8HGxW92998BV>Xl859|6Na{d6hu%xdZoQZcA5co5x4_-E zucNLF@KHHbIZXF-N&}sfda>@Hyk>=jjkuFlAR?zB)BZd zS)>uv!YX>Nd~&i-0z&ENHFk8=98(%>IcVjNm%x!r(gYG+EKz_9nGQtaR)M6ZNIs)1 zvJ!Ma#Q^jTr{^<#&c}}9%o@`q1cWPWe)hKHSp z$wW9x0cLWj)u~m92)OpHnLHy`zZ@|4GNbIw*K-_g z^-FtJ02{E=SIoB>-v5*}g2kedahDrm0M%ktssS)JTy@34ji30X|M2Azas8*WAh7n; zhG79SV;9oKAhcGBtD!S7T5CK^OzYDT=(--P`Lc{^&)IcO0RRBJ;Jbfv7&gnt5oG|_ z*Bk~!_|$}^%gO**4Hq2+89)dO@IUBSOXWi6Aw2xmfj9Nit?e7};rFe>R-OGHL_r1uNt)9^ z2r?Nd;96-Q2@V8cJR>=q*aKfwJmp!NICX43&2>gbTvA#rfn^^9x*BN#(h+k(6zaJ| z^%te0IJOgZ*YB~B691tSBd`sp19j-&rq&QGt5%f$QMv{Qbe)c9);Lgbs19viMHd~; zZd5$s#^Z=WVOBG)9gbu^mIICDm@dkf>zmV)seu6dY4`;E9L<1vF&t@X6O4i}fGcZ& zCwxhii2%2Ycmxl+$`aA3MXmO) z!GMxuK^qcEEoey!wDH-kWQ9b2M(mprq&1g5LBGrW$u-Bckq(J6pmbs>3ik-~d?pP7 z(lIC4a0UTfrW|*6(bjqrI3PIFcxx?LA;U-!Am0igGg8!y$SjcB9}SbjWzJz&}3 zD7u0%0%ZYw{E9W~IlaKP0q8qMQPVwu+V#_^n8}>(EQVs;vCCio2fy@hKAi=DrG@of zH-!rvbIv=1$_#q=_g&Yslo_ntpwJed{s7>z=l+v3i&LlGXtkU{MkcZpwG?=?CBjYd z-(;i}F|a~Mj+bu{F2mWDP6?GI8K%~zWV;wO=JpRo6LdNh@t6cN?xDW@KpO`=XEF`b z7Mt?^j0BrD6E`BUv1oP^*hz#8gH@e`SjyzoGV+QD^qs_jC|C@1kn_&4Z>542Y${cQ zaX_MB4B%9q;q$k4aJ1xsCM=yxs+CTi4q$XgUzs-zBqKw^GCk{bnjX(`D5?qPJ5ltK zMtVx!q%cxO76!l_qnMpx1kRoTwzp@%$XafIK!%2U8BLRNroq%?NxVd%)C3YEgBgIN(dn>K@>YYf;IcW z_W~#iWMKlRl%?oh6@Uxks?6T(Z2*cW|%q&Mx+>! zb4h#0ePIT`sE$uC0OkEdy*eO(#@x5kPuhd6HPk*MX3kk_*~o|A&2^vaOU_Tr!4c>R zwEzYJ3bTSm8wo-cgjDsbnD#Lkk#kwAk@xyF|clrJybb%)H|8=^gyp z3oggO6HJe^odF@;g^M+Xf)&%?kWJ~a_t3uC&;QnsU%zOJ=YQG?0xJ-$SsNJ~HfL@q z0I|+l>7lN+(D-%*<_QeV&viS%a}EH^Y}4$rcUUQ#(FQI$8Ebcy--IYU<06FtP(((D zyo~tMDFcl7Tky!zfbpOXZS+!@Lq|sS{Dd|jH$|;FiA^O}KpI|UU||*6gYNXjQ5nKdWsaVrULBPUS`R<~$##Lg);LdH zsTiHB&lEU>b6(O;2R-ye^?InpSj<_=a~~9Za6Qu&xZWv(jk`?R4uTZ|k809;=ote` zZG;C;=i~-q%dAcsqhghb7XxCK-OBIeI@G>R`x8#vC04^ifV~Eq0e4@uO1tSyYeLa& zrfyAh71|TL?+9-r4(#vGd(|)h`|pZ~D?S|sfePXxgTcP1=(<`#8`!waRc#Y63~fMb z4sT$yw`tFx+v}W9gqe-Da{8g+?Dh!sTsS&tqvRnf>3BuuL7S!)imVvTD=HKMl~t1? zknw>i{z9s~B})*D5J^*UXL0e8N8p2$|EqG!(+(y^}EVM|Sdgm!?T zW^eX1kVciLMh2niABwm#!X?l#oZM*`-0<|v=V&c}T?%KSexTMsbHf~gEzEFuT%Zf% z5uwO3N)1;4VKn*(Mfox~nMxrWl4%h-3dlf1K&mx5W!K4$be5uYiy8w>Mx5VYm1em6 zwpG|J0cC5hLyzRdkN}W#NK_CA2ps9}0Oos9l0F}?ea!I0XC1}nwsNea^1PvLi84NbKq2X4%w*+yuOb0ZDqT&G1TA+oY zF9pX{wg)d*1aJWYn^3QN<0*ok(Xi-h$eD0c6Wq3`d^G!EaDBws(AadJdo+QP%5u3C zmuhu0vPN|}#EJ71yHxN-E?e!hx#*d~;O986I%i-PbCi1`*%sbQ5xnVM0iG!#cF6R1 z(EdhHF0my`K zg$kUQu`8i~jc&o`);rTKlM%e_@%ypw*od(j0GMzG z>TCbt)sNfSI{Ebg_UTnVZ7wr7P}x*X)oc+uTcvO;vU;fv1G=uVe?kYaHAR4?L5uSo zUFRGC0Kk|2=cXh_Hk$%%;Km^LiH zO-G)Tk)Df+RpfVYy~pQVHOJ{4DsW-xWIMohW`T@)wTctP@Y!1fwpfM^H#x3pVEFHV zj27gGj5MPaI=`TuWL93rH=~kp8aWrWRn&FNL&!Mosg=O(H?5=YT`;oWt#H@m z1(t?(@~HZ^$+%~UWSF5VhKPbF1$_k$?scrK0$neIuB}Dz!aooBdFp2WTP4WSWq~RvrbTBIOG#waaQowVX z1!{CN=iwk){w$Z|xeM8xioc)pO4~$G3;+)1`fKHL5KnVHT^$b#Kgei10QU7_1tl!sCFK6Mv4b#{>Xebi-F{ zw^L`|H(&8>K>d#tO@@<3&N_MIMiyO42Sww;bsB&%uPG~|=puJ~z^qce?d*R~XVp=7 z=OoDVe=?4{oKPf9DwHb*!7599$O!6?8zDI>G$!uMy%#B}OI9%;9S{vdf#}8H`!ez) zsGt#1eSH9j_xDUK#B#Hf?p0SlX%vQN*n;EfZ3ia}n3WFhQs&E;a>L4~ie67fBJ)+* zA{b6lUXd}Loc`1dB_o`m({a_6YwntQ_eZdy%-(~JTi>@AT}P0U#w`s#zdLmiyk}^P zG-FyD89h7iQ3_y=?K3kx?Q@Rf)Ty5R%ykX~VDOQpO1ue0jkR{md6%J|au5lWf5dn>mSSt`faPC>Hk)&BN0J*+HLS#Y&&c$j6e0%^_Lq{ryVl0g8RfnDGCsn!pItCT8SlR*~U8noh4x~ zxN_|#At8y8n8b44xMmWd=AP#|)E-Q*8(b4rqF89Zm#MUsdvvl(;MiNOe2$tz&g>w_ zPvks|llCUxf@RC}3k0FL{s{&v&0pHW>0YvfFqjU0szxT1Yi)W#&biW)El=_Ckj zt$D5&q#q9ksa(GWT|c8O9A$6h2D&Oh!2dj_*JAM)41g}Az)Z`-(&Q~v*isu1j*|d4iI1) z*}mr_MpF}`MB0rJPf5q5bctjLcNO6yJcU-1!kq8y-T*~4*>EQWLP)!lZgrjCfQ)8jnDXsPAq5`F!wDcs4wXO4a;>CHX=o#81j8E&0;>f$c)=i* zeqfY1EW%N`g1+x|RgNry5!HNz7^QTGsikZxxAl!Ow44`Gz)%e|Bs?3{@F`PN(Ha(G z14K6$ouj}d&+*Un1HkB%Q9Hp^?OD;0N^*qZ#9GBOK6nggS9>0ztO(TwQX=^H0MZ=stdRM_h}9 zih9xrhm*$Ae~X1mfSA#Da70>bV3U5PR7~%|z(?yy+6He4Hn{b9E(jka)Mo(#neNVj zL~xaly|kIEOyF1#zD#98Wx3R_@H5DCq}H`JifUJeZM^w&F2eqk1NtFZ*Z>f0BqUal zYnUlOuHogP>qU}p^Z4_UkEPJ#TC!I;EvNrW3zUIqplJz7^x_i)8jAXMggp31O-t~G!WTT z2#V588=D&*G8$mcTYj}Un*x9O!qw#387Ho*a^guW*g-uS2&&B;5C=oDpSQFhyB1&eg z+H_!rsXN?mD!SIna>sNknuwzErHs}IZZqQJXPAbeRsu#tQENe0E542C;mj$nBX{-#ps(ZmjEzk? zG8Mu#5HL{7!Fd`d5DIA{5+F?L(HLDhq^_T;E5PVWlU_?j2(+0*hoO=_{yl5wY2*oH zT+WI^L)Cs~MG-bdkL$&-wgc1{VPGko8Bo-E*;`B%0R}$4YrUC(0DsOskf1Vjf}Ka; zOceE(2sj$HqTuqLXHt}6Z~>kPf|>y;nKOtb1EV3BoX^Oa_NHe^$1PSM6zNiR&-=0^ z@sfc-0Ht;arL`ic|6r7>XkUA-B_K+)sr4E;uO&-6^}7k?lZn)x=bx2Rn^vn>DA^>N zbU)yJ1^`o6!a|m)c_1oTH{RE%f6$m`nIN?oipcrOlWhq#lH#~0z~ww-nJC{G>ItF8 zUEYPuzi>_ z=;>QM%7PRTja|~@DX43WMwpQ)DJ_b>xSCmpB1+#=A0Qoo_A0j^jeJp#w^kNnA-Aw7 zcA_#x7gYDrs5ct))|B%E5j&gr&^ScWnJLPXv(L*L4Gq%ZB6t`L_EU888xI~ zFn&+d$#tbBc;dTuz1j=MvJ|PW9mbK-O7RYxI~8Zn&M++G4BUat`6_DRyD;*jabJFC zL?EmnBsAo~8+^`U4Xe@Nvd3*ATxB@MygH30FaC*h5WzVBz2t6#YS6S zio|7#Xanq>pxk#j$I|4@Qf!*z6pHL2p=dHdRt%kT&SVEU4B_mj(R89`8r}$&gN7Us z^ZOjf$?-WPn3T(ueE@AXtN_)R0;6f*+Czv95?BM-bukW^cI5o?-*Up)hTK(kqG(@B zfeeeDkxjLD^R$hSLZ81wC!dbDSTOATm?AED)Nicx2Ov^w_0zf-JCrF*nf&Kfs*ZlWaUUz2u%s)R39MBN_ zjlQ-P4ShFbd8^W~R;24t+Kj?TG0LX4^iF1g!~Yr32q>?JI5}Ip`qzua2|yH|1bkC8 zW(A!N#Ywu~ryl7t0NSYG6fl{PZYO#$WPs8Tv_{9)luIloATKlTA@wWoJUR6Mc(6;Y zEDsw-P$tEDWaRJ8MQ>0_Bk!ZAHKcJE$5DOR^Egk|mecpK`yNye9{`Pkl-2=Y7{+O% z=Rjn%%S{Q?Fr2W8&uRnCI50~_LC=>Sj_*iel8=ml$B}1&>uV=~lLonp4sSxZP!pj% zOQF=|fkqwyQ~F_bV+S94`#zLCBg--cu%NO#`JX9oYnij9CDrriI}yBN34WL18a*zS;k1|Ef1$_h_^kf_eFfORTws9zYVz~&I+L-AjIz-MDQw2>w zFG*9YywRe7dq%&fHJsG~oEEKr3E!Y~6%j0<(?T_?Q(A&wZmh#j5u5;$g(1X-kVdBy z~^r8UH$YZi*cNm3)Q_EKNlDZs_ePjxPE1F2#BU2Mz>5`ru}T7<^~>UgQM1- z09q*%f<(Sgp`q^?>cF zBSHz((Hl{3B=samwfpsmcGJ*@^0ZV)PZ6M;TPRnUx`5{V?y)uY7AQdN zJDz4Ha1f2g+)Uqr1Qs+->7+_ggs%t;dEk*N4G@9S?RswBVM-AIR4w<@@sa^R0w_5) zK#0E>#sXYB22S@%jpU|O?z&_S)CZ6o#o1 zz%Y(L=>m7%wHIA6I0{ggc~?ssSd^lRZJ|L^epO5ZZM&jD<$kRIeE^qUwgos_;hG{l zNHtIYsMLbSmgm9K5SF5MkuheZy3AQqvp|t!-}R#IopY%;D(A_Aj+W0*C~A}OrjcJd zE^ibQGBPJ%C}!yTp6{$RY7$2FXBXIB?Q!V%fNlhO%RQrN3b0Bv4K)9bzN%`EP16ZF zFS0dkhyyb;1QrQA0Kfu6aa@YPj)5z}$0gKi{>N^$uBO5vGVULe7>cJ59OX zfqNp9E@6)h+J#!A+mR2>7S;Jqyp|{YaW2W)>8~b-Xj&B}z(+QM&0IX#C@4W^(i;EzjJGRX6sWFrH%{Quj|xi=c%m^}*CCC(*cU zfDDL6erH#Ueelk=Uij;O^y}Xg5&Lr#{-$140bVlJeD}bt?=cR;w4O4x$~j^8TbQ9W z4-Q{O6zAr8ECE2g==*+SYx|LQ1jR?|sN!etJ)Mb+rD^kFxnUxfCw-+rXz8dFWrX%l zU@}%HMCT!j#tIz|BGiMNpGA?;RTMHUW~qfkPK_200Gv^@^H@j&C?Jy|>#AsAcj|%Y zH@OK-w~|9>Lg91@GHUb!e6%`QjcGF*WO()GT6o4lxZ^?}u(>P0+MIx+>l9_?neQ^x zW~B8)4&9(gs{p2Bl{v1WL?Mc@uui%tPe?Fi=xae&4W)D3dGiKldk1*4Jf~LqagBov zMPx@oVPeK-rg_x5a5d536JR`B@XXIWf}C(4M`(IGImiiew_8bz7K z3dUBkVU9|>1$P;?qHc%@0tG^{h{Q^=Eo63@K-Ji?4}x;YMUIFz0=2L?SAeSbfP{fo zmMNLabObA7xZ#Y8MoyOVmU9UcWXGVwl1TIILtW*n~5-4%u1e8JJQYNj3<{Mns8PGsf zesiWO(K7)ZjV?L+7S;5hKqDBrlwAi(>EB3Q+w0}*Ud@`tb}81hPiYP zMF#KSzS;V*Gxxs$z?z2nZ|v2;^dy7QAbYCy3Z(_T5y%2S-}hQGc`~RYr~X`Cj~M^} zfYpQ7oazr>^Sh;=ooc?A3>O_sB5FC8EXh%{=#7Q8+_XaPvOu+{t*4^%CS|*}9ZQ{p z5jveBKWjmjAi!f8XbfpIe561yRK5gNEWwOXkXpl>qK<`!7K076fB10|otCC5-ODjS-sQ$dlZ1 z3N?b&P-;iI-W;nHxbSg1Y&Iii#flNw6`f9(4nifR5y2BCP4~?A0iTD|sq_-L7BqTX zQ^3&3$S`uJ@NFuM)Mq1t=`4XqQ(!j^oi^xWXTCeBWo6!<}%XoGWT>=5~M+5#bN+8_!SFxtdL7%2ef|ZmE>sIHE(%oti1uoz7{41s}$z$T|(1gF=WfAX?+OK z5a1L((*%AHXaFJ_`dUe48><`8ImmP_(^SO@4AR&X=-C3ttKs(Ov0WWsusDIcdqZmjS^xpV z(c@vyf9ea?9&11J|HoCL7}qfOy$3LiJou+p>7q=`k~}75)y1O2+GKwkxk}Y*c}N zs{)NlmL9pB7yS+$c~LoAB4QX2QE|`5X7JT5M5Gu@)MOE>5?M0IKUd36XJTTE<4(Xv z+Ppar(%Cs#@WL0L!pVmiiKgp~085qftoCfHE0zP9@6DWa(2-G#lAZD7&?OM8Mpc_@ zFili-s6BC!_zsYuR9cQHEh3{H0Q!z+gaa9cN&uG8pc);q$3ELR*9EWz;Od8WP}_*m zk<@8D3JfS!jEBC@=)kIkX%Spc=EhSO!!eAFsjuSbYQc6h3`Qr@3}`T1YK|QlI4%Ir zH{>7~o#(n%{$2BCAfQ6-c`*`rjT(gR@VFk@c^nC|to~B6` zcq^deQ!K%K&o?Ikgw~R49~o^!-UhZyoT}$8VvtJVbC<%ZhUGkSaJb&MmpMc#^##XH z#3F$ja!$Bz&G?l3FFwoe@1UTMf0wo@Q%DJ*`TauWD6EtrHNc;ldSV2~YAMYzmV%8P z;I=Df=nF-G76A*|p_VB)5DA8CLk9;s;A8y^4&WP3p2ll8AHokFJB`mB23(wMY5;v_ zSopE_lXfwltkM@4-I&{ERD-N=J)blzgp< z@MJ6l%hshu)U^kA@QljAB7iXhL#a3j)u{_yk^SKJgfU_=C1E4B}VHiy)9vAJ+F`Lb%2;5{W`OIVh zOw_HbngRe!qQ}-6=iR8OK#?#k*NMz00Y_>Z7{j(a0z13+rY+)!^R~s0cy9fXZ>QVwm?m*#edm;K49#lmdsLxMLHBi)IDm5_J*Zzm`+b*!8+GS0mQt!*pZoyCliy2O#W7WGjA>vVW#OF*d}2dvoP zRkS(j9BqmQ5|j}f%i((NaeXJvgzm{G--E#k!K-7|b+iLPb|k?z*$*8{Y=vW>pM_YF zuCO{l7=$*=K=2;y5*XpE&`GUROrrr;6;I1|(dM@TR>*i0C}uDNF<(U`%sHqLz&rwG zj+?GOh<&GZ7?{9(gwlJ(Ftm~H2cRnyh2Bx;xNduaS08x*KXT?cE^GrnRysU1FSxr@ z{Ie6s@X!dDJFGK2?aJq!?E2a70XU^;`Wt(V7_BguFS_5!5{W&7Dgmg&qOBdxD4In^eKqNC)uZpqRWmAG(u|?OG zNOP14CTJ9QN3jty3dGqM7gYPYvn4LKfYi9T3FV;32q7gI@5 zMv&Za$W6|j%Xc&`nj!~Y)fSeEP7y~N$#8%X@~jxPn&YCj17yGVY~LDcQWI%;vc8_o zNK%qvhBhqty#gcz2hwWn0%<^C97gFBRP$0Ev`X&kL5H zrgc`XHCYlfrA@SMI5s)Qd{(n;;6$pF5iHkV*Hu&#l^g^Y2|x*kXhc}52BkteoH|f& z!$-EUHSYEHpeBZc$WLTYvc<_J9Kh7N|t8UvhP4QC@T z)BGVwU1}pB0%R#Pm+AcJJOY6FN@y>6s7Ha$n}A9-! z2%J4V41r{3mSR~1!6pAbi8oc76#fp^bJ`uIGHR*P!cau(L2bgI^jK)A5IgHIq`Z_K zf`Dltq>*H*)XOL+R)>` z=72wZ?tbh$xnRR1U4}r1f?|$&<-t%#tK(>A_(xkO@L!KSfWNaiizBm&d#j;U!`vJO zM<0Q8b6jGlv4g)2N3OBW8I_mSEpmDloUQzNLzdR`L+I7l280nGYticCZKLXHn}d1**PPNYR(yH@OX!^u&C zIb)d$f~9(dIS( zT4OmAo95)k<=?aXl&7&lQ4l2Ba#5g6%{YqM;Q|s%ImKE<2P7rX@CY6PQg}?Ydses5 zEpRRAUILx1QJk997;UkQVIFw=$4+A?q!uAoqNu!$YmL0O!C)o9E7xGQoOO40)=bSt zEXz7OD>xl&8QjC*1vnpp!P)r71o)~P64$c68yvF)AqGe^z~|x2kRBZcz9;7tfmB(T zrz2+0oeT%N4yJf8v>i?3m01r2%jnFQhHLIvEJixltbP%*l6y5BI8$+$f{l>If@Vli zR0k*(0lZR@me)I|F%^eIpi7`fJ-s*fZ7oNajozMB{f1u za13Osli%kdwvTxly_ddR;>>a0VB5fvi|05sGqy}N-YqP!0FOw1*bT?c@qNc0!GC_} zK^z_eAMIvXG-@HZZGyX5_U=Kec-dmWCu)bMTzu`Z&wa*=f7Wb%uRR9!?~le63g$+Y z_#rso$g~dv!#Hq$W&aEg=&&HmcA4k!ddvZUnZ7_2Ujs zAeLoufu(+cPC}88QFPXv$LV?i#p?7~qyaL~^1%v%e8;B7H{MA3Fy>7iIW(J>||yHF0Sz}qH5s+d00}(WG=vGs)6zJ9MAZ|<2ZGu=V^<Do7otzVE#A)EG*coL0*10(WJ_qj;iUR4#%?z&d;zNq`$)@HqRCI_4xXzzo z&vZ;Jav9Ms$032RNr7Fg0JUHq1()Bqz?qePs`3cX$+-Z8QOm|UbU7e%)o^pqO@`lP z_-W*mZVnuUVZ|y?D8@bOj*IG2i$YM#T5xud)EdzIgv!oj`Lw4b;!P$b%U0!-355A< z4jo>lapWH29s_dR2|zNEHwM{U|HT-Ehu&9>l?+Uq$igVSfGN00FkUPBCq^&;@c_TK zEK^+()cX*K@O`W!D6xrAYyx9UI2MTn$vEkE^iIP#A^^B+59@#`fGI=dn1W{*m;f}{ z60#(@zcDc*IR*u2O%y&Gd|9nzrqq8U!m!61-uCoEIPc*BvkqvWqTKIB z-f~nX@zdzQidC!+j?LI1eJL?Y0-)NlvtTK#Q~;p?jZtgpW<5r48sVkE;`i{MWB?{Z zXpEj_b%FQ3XD>>}?+v98SDAR-cXf8w^HES1y8vCINDB!t}35z zfl`ts;d9a{Dh=d}j57_u`PX>6Pl8N$9(l@K{u0d5PzJ^}$`NqRi%G@bTtY^zB^g31 z)BuF$vPqm}(mHTm(okfyZ-w3F0`wdQ5eCqp$Zge0m1;#hUMBVmAZleJCFj@9ju)-yz@EdVSTZKVKnq!QO&Sb zJ3P=0_}3?o;@@o^#}I-4m%TrYwk^%B!oa!KxA!@>c}?_@kr~;y%1)V53Z;^i0134T zLR}#w1d_0U;en}gF-F;C54%iNQ3I(cY+S=77Z?`?8z_~L=p-Zzg(M`@Wg}&ukr~Q1 z`iR%ucl)#Vw^sd_bM14JAE{BJ29Fo2*dmFD_wGGs?{9zKT64`c*IG|wL~Dsql|_j- zXR#C(JU2+%myC{sX&3+D@BhJg`|I9u5N9~Eg*JJ9UsAllOS>dN@bE>9EqzDVptQ)q zG|dF^lTtdj`MOg8z~((a^51>x^ttmdq+<^9PK!gPv!sNG2boT`98S?(Jd`|KZY&pq zgfDdDg@}1L%SNN31pT}2Np^xim#Rxg)r9N2Ob3@Qp3a4bPvM{Pg>?ROQbmor4h+9Q zdCvM?|fAP;A#<+hfP?sR~s?B~;i7#iRXXg9j&yXRZ z;EE=k(f>FD@A#TioSY{DVnAXGya?=+2LQj9pT$*3sdKBYJEH1z<-oL73jg$++LNGD zUpA$vXH#42kb^bV;}dLBv-#@4sqUqwMy{Z z$gC_ScMDUY@x{B-75^({ zF=Yt~7)=1$xW|*Z2s&RKL9S?}&s<&6_>QV$Cj^!V(6}~rR)Mkse0T$!QSlb!{1qAV z9aWidy)*57eiSU_R8<`lxfQ*_3T*H_5km635FjS3bDu;7FD@FNyNsW~l`nE&xd;9` z&t6Ca5*10xu28Vb{myqUfLI_-pHm=&3&8)SShivg%z)-2(i}YvpSgPnn^j^qU5Y!q~>KPKE4g*ulR)@y7{b0I+-atDYP8UiaU4#&!19 zAoWC}&nqheU7QgYnz{ILt|h?Ig3}_n;CyZnSQ8#ySQ<$L*qI#DoC6UksKSg%ED0(wQ zcC^)qoryzQmW>z`G!dG}@e2gFl<#!dTBj0F$q>>`} zY^szg^nP1wNQFx*&*1|m$g_G0A%p1_zC+HcAY(w=$}A~hrm7ADW+|oTnf)O`y#R`4 z=5uMr1sJWG<h}S4_@l#PUY_@7y0;Yg@};N0 zXnHYQSqzH_NSW04Mv&Ytym;OeKHuC*GFpPI>{SU;Zcl+%F$KdGbUey8)u3w@$0_Ta~LU>ULJslgjU==GxP+ zu*A-Jir957rP9~cgGydrG;m8^vEGV7MqbpP)Y`+UkroskPshj(Z;VJ&NT6!V88s!S zaY*H%UC|=JL(M>-v7tjF;}BgULzL5Vz(`xxz0;`Cfwsn6=qfuVDZM#zl~iCE95aUx zbk_4U^L}awlTn$^d*i*h5wTJncmW6*Fh$4bA9);)Kk-VeE>E!BI(?WeLv$8kkXRx+ zt}oLw2~wSXL-C-yL4!AO&tBmEhc-wKbfk7cxo8?}2JSKIdz_3=MRBa4(0F6Da%BX! z%~PAikO_(sn?@!$&m14)@o~gy8<3$H2${&1939Qur|kt6 zA!LeasPg61I(7h8U$V9j{ez#_%iI~W+EhM|FEdN)mYGbY5X|zdw?+^)w1&A)%WNCI zhtdMkCg;C}ZU}b_05G$B<2U`l)3$o}uiG%(sC+vOwwkvrlw5)(HQMvW;WW`}PzpQf z@y}^sQtH$#EtV9GDQbx5BrzkvQdv@4MDILUA*181(RntOV5J3mvObuR5K%9qGGn6^ z16rejfHn!h=%`Orgrhp%MPQmI3fJTi>O~RtQ+L2<7O+%R1ekMm*VtSQB*|`Q4e)W` zbTd$>=8LMIXRy);Fm)o6P9UYPfP_rmXyjns~R2Mpq@lCMmfKHatWjRXfS9p(+ zhMf#N-KqMo=`|0a<17`qE6*9AKC;hTBM7`?=?zq+!jG>ZLwxs0p0|_}b{HVgR=^r! zg~$?+IY|u+qifawDc5QO58yUa6ivWZ1A1V5U(k7KWlsWh)IkSE>U|4H4UCXGD&@6h zL4-*FMSL_(!JkPJ+t(x}Hm*_7xicjr1-SMASC99el{#rISU`H6XGh?qHgW+T?P>l@ zvWg`DxS^{>|1dEBTx<&3fbIi6`tTl}JKW$6w@&ci9$tgT1~o@O^c`LnzIDL&ENLVZaqCc&Y3c5rUHu7YU8^z@<7UFR1}Q~VwTopxGFVWq-9h1v>2m?*_1H3&UH?d}vI$W$B5vkxN&OfKbytK>^I^v3 zCv)e^cd-;STLct!ikCYD3UILg{`_Rd=Ra|b`|j^}^wC#iXa8(b!&X>F z&_cEb0#l??1w4{Kts`%^ezmBNU|JsAT(HF zDnY-)e6i%?auQ?`loO$$Y|O<%j7(9f(baebiQXqfY6y|h3A*t)3Glclxo_m;^jvOK z*2~=hpfPQuW9^PH0S$ zoNS9TrN9_OB2i30Pu#OP$KQI#i|}86{uz7|PVu1~?!;~#K9c)vrgTLQy)QlqAd<7H zVghg@rA=VUbC(fVjUysv>^-!9_b>hT|JOfhX1^oG0o%~CwbfGAi464K8F+S%%_`+B?qY=;09^_?kYv36fYHJOSWBN#0j z4MWjScEPx3k{Yc4CNs#T$P2=n9&~t7(FB4KM@3JHwo431W5WA&C(RvosFh=#rx_Vk z{6{H=h4f8nfZn^PdrlC8Ttd^BV*WdozE+OeY;hdrbTVk}&!b}uV5;FA5?8tLGkVv- zEVhHe!!{2YtRweE!$`HeM%6m=znim;Cq8?Qo&6ctZa#>xzo}=9s7}fvP9x7JD+q;=BJUd??poq%{N9bp3y(6eyh@{>FNk*^!PXq&*7Ugj>H9kD(9Bl#E z+caTBVvw`W(w#t)4eQzT2tCwa1Z&T+8MJfqc!nR|8q0 zP7vVUF!lyt8Lpi<{?gqyF^?T{CRW)n`N(%52L`dA?tCvi6|59$Ln8|Wz?|ttS|2UD z);fY?tH&#Q>w^#c&u`7ldowjd_j!GB3^nZ;8OU)pVrOR;0E4+{n%MNsAa+o~$n5Bw zUdQIPUU%HWo7vHuzx(_C>Ct27kG0l&ua0Yt&Yg~(rzIt_(XmGgD71k`)h|Tl0`xNc z>b91o>D=U)bqFIgXh`+SgGzxIMU}DIUT$n?VzPpyVx>}6zOn3F6D3V>AVYHTnUYaq zbj}Z;;bgvuL8`vHs3Rzct;25WaZrYhbZo;q2lnz#3UaJTQ;>|}BBgn+HM7J#O#tYK zY)Oa6_`)c9L}H!-kALbIt2MA%o#9iDyad_KF**%Rbb>DWhEiypca&K}S_`e}Lo}3NzsU3lad#vL;0s0+% zmiC$4llCvsoQoC)_&!q(gW!xz3M>dtrH#>|h%w;5hngTEFF4v_NNRsC;zhE1NbcJL zzy$~mjF6#-zKI=x40bG~y{aBsm;?sH*I%E&T$xhf~eaDlibWpmim{V!**C&rD!2%m6UYcI`7CzW3zj z6W;~k^72s6(~GuI0_NbK&2z^*PYfcoUtvu9$s;grlK`AuJ8UuVx97SO0YJX(hko>_ z-tYeJe7(BiQUPm?7E})~#0W*{Za`{s-omtj;;rRih~}g+R&(5u07!u{^7DlqFjW~$ zHF7pVLoXeIflkVdiu$gRu>=^JR%blw?#=@!yUpLJ=tT#s#7r_irhC8_&2{JRFZRQ# zzMNDpBTjzy+yhN1j&tvbwj)PK!CI?ao}v^X2qay^0#=w?RZ2oBfHHE^dBk~$6o5JE3`bhvp%-=BefI{Q90D}Y zbdaIEDh)nGf)SkuOGZ0W(b6`+1oRx4nyX-%qE|WN<^8gWOo*zDnXD2G;I^66Jc|hu zqv5I=02tL%_i-UIUD5*ETs(~Ln)&2J_W=Vs?!I+~m<%WoR)*CoQ?Zz7?rEh}7I!RU z5J5`Z4M>HwZmg_0w*hl%ZznJr@CrAaCEY#OjeEG(vnQPZpQZAd^}WXDO@K{kloJm* zB4u5oa~-;vJBSJM63i;P4hch3i^t3=L7Es`c|}32CaAfT2t8 zqTQt}$$ND%8U|{#OnbE@(5Jwq7w=v9=#T%{_W-#2`7Q<=S1V(~R+Vm+W=X=}h`>CP zVJ%xuz*r!aJNtHDcN_o!7v|_2{*yodPp^OO;B)ETY0Q{g0;;VkbL>Th0gOOWhro;n zbW$&W8fF?8lRm&j^FcH>%27zgSqG{>Sw(dLQtoB!$_Obfyg1=ht5|ayF$aH^2XPxg zq#UBT!PP1@3z`I*r!W%W=d(0Q5mV>Jso!xKkKQ|0}Tq0@7l8evphrwF_o5ZIdImX`Z3avL>zqXIVvk|Rn7?P9TPbsf6$trN&N;ITg zq6ADxs?A;R$s*;Y(V#R+y{9O} zuAU#-D^-imy~lUq_1-SDd5wC8+=4Xd;PZia$_N#Nz>6hNx_JoF#C# zla}Xa@EHgY3225&3zZ>T==Tn9?9^uvRX-Rq9en^xjE#}SXnf!NvoIW z)U61?l!m3uCy!xDiO#?4Gb!!jUPAZC|J@3kne3MKUr67O zN)Pcf#JFj1aZgdfL2)f@8P6}@Yl3_E;+ZQO=f;=Xnn2=WDHx#x`rh2`*Swgj)O$|@ zOv1crcSPR>(g&CiB;AaGNNb|))ievGC#j$zWgi8;ma{A{Uu#H*NPQBt#yeL=fAr^m z>b}f;9oTl@d3(+C?1nIcR0T1`!imKkhXERqOyRBxO* z$vvpOC92d^KhDn)?N^MHjAD(oP84_`Kn#f^`4&{_))F^%SNO`0Uc(GIjFF92lH>!| z4jRD>f!6>>(UveyV7JR@r$lg2gnii?9-lip2rMlUceQ}3ECuAa*D7_tlqG~?i<$dR}HY24H#ZDqU|>LNy2UrW~Q9U619Tz(zAYLN`xw?>Gk(giUS_|{pVL1!uBVxJ8#QSeza z6hNDjmGHM($3^77b&=N_V z);tH!4nBYHjmJLn?*q6;OYpqAGSeCrzhpbg{tL*rk)?lg%rI4948w>%b0F0;a|m7~ z0&nMaM*;v{r{DG0|EFJi_H)yx%!kPaMi!*Vx5nLvCS>bqjWm2Ac1FWIa73ka{52&E zOZPc$RMRU+%?a2d@a@4)Xu_APGC&{YU{sEz#bsV`pktx6kg=tD`r@BwbPnSxK;lk+yOkxkcRW+nM0r91V`_iNj>+SSq@6W2t15O1DxKWjNvjLqf$b z(T5L)X#;%W(PON4*}8STn(?tuybj~~oCdho*aebQ?#6X4XR3v!saE^m0%BYTGeZuJ z`!97o@RBoh)S7RNd?Z61!e`d?_j!hy+8pcMrgRc6Hl`3dfhE^%R)mybE)-&ANbAvX zHPL&ib@9eDN*UgmMdfBWF;i_I}PfXY0(YT@fWM{ZLtAsYQC1F1dIVK_tLr7)a|B^cb%#3qEI=1{33 z(`IyZkyTF0`>-VSZQjriJ9hr)W$eD^Dt6wygYngCv{$W=FJGa(ZU?Kk?V!DF2l$3P ztiJCqtp3zhtp4a#jNf`0?PV*pO#^Ps$kWCVy`zSxbvno|a>6{e%bFnBtAY9qvWb~n z9g(}L8FaRbqVMYL1_(3?Ow)z(cNbSLM#0==CwMrsPF2>{azTnE`hY%7X-0)7&(SMR_#S|)BJ?jOBdNL0vo&NU1L zPyv=VhXCL<0AmnAAS4zADXe0w%E`c$m#$YI|2zNpH)ZDC&ucNDf;-2~gH)}aGRy|3TX?|YNrN=}@sCu5?pe#9BQ3|FxjFjGQo_zLC4 zJ)^PIDpw6(@$nO!>$&n1k1@;k{vp!6-yu_J7$0I%THU zqR)%Uo0EK&EhT@@v04+GHPoq>lPDz&P^ zLbO~8^op#7jFqP*bw(vJwV#TTGua+QdAAgDObD#l7MU}uVA)b$02Pc}$V?=FXcPiI zISg0_qrJ##Sfrl|irZ58XGnnPZa}BeA6ABw>l2=Ne1r84M+qB%o%M`QJo-}jcm^}( z5bJp|g89(}5O56urD6Dv=?JvI#4-l=#C$g3-QW5Yj*dnQ17O+Fb7nai62stVu6(*t z{1ho6l8m#VdP9)SK&@NlU6XaqjJs%rql;=*L{ltL4-JKyXVS4D<|kqqs8RwlK3{5p zQRBNTqoAw6Bx~^Hu;geg3>J=S_w3^xAA1%XPffQYK%%|hIwGLbAp}peB9e@4ZwrDH zU72uC7#x>8@P+R1@!vd&Fa9{>o$Fedy#vQs^P zsdwrDtaK>+a56a@!ZV{IheQqrOaP96e0GD@660If*!ljuvGYTBWA&ALzz{AZK5xm3psbTlC;O`;~;y=Os}J z-1%oFCu^1xv2qU(lt??YeQ~_sLX?YP(zLWk*eKf17N*DouJ)bUsZTXPX&w51gND5X(Eheb*fg006+up8d)n{Ih@Q z=4VeopB7?1DMc0A1Q?sln|I`jk(=2Y%=5kDZ63Su-+f>+>@tx^6^s)qme~1V1Ip% z4}JJ`7}rOt@n)u=?irPL)aI{lZ~zTpbcyiv99%n79kJnoyAt=kgrJW%sP$5$!^n)S zd26JyIdg7StcnAvs)4$<%oO0EQ)~n2c(&bD)GS9%ld7oOW^N<>W|!w)r%ZBNZ1+F zcVWw>5I^(Y+{EG~2xbMGiy46>Rx6f$`r>3EEf22_+6DcM{#k>NT)TmL4apRMqe}Ut zsF&j`utE1MMp1e8ByN%2F#V7F$hgt^yJN z02O$S!-(EFNfcm!HcNbM65yKBCv9+yjZA7A9Bx)y>$Y8Y{9>Eg{O0fe4?cbQWxwkm z`P2^03{8fGIb)T9NtK!q^|iD|&4mWzVV41L9?%NPjNb)_8V*t3J=x|J7u3^*Ud!QR z%F}`$#GEVXJsN68zxDaFfJD)zNZUaJST*LMdxfG(0+sTe{G1GpGfgbcXPP+%w}6SK zV{M581a^W#DGsUOAx@R6bU8yyx;A%;*T&KC)TfVe>-vmwMM^&t*x5b9qn~{_&NDD* zc#&z;F_N2}_ec;`hP0xu))-M$x&e?=DnaGp3h#c;GdQ?LMu2G-DUgFq2MrsI&OB3K z)7;SKu6!^=!^%iX@$aT4G)92dE1F3f$V>v2d7gFOj;0>o>>Xf>zzL%AXkhuyDqo5O zg_te|LJGWdf&Zc&X2r6_r{!Bn{^&;hzhT@Y(4ss&tJEiQe_x;rERk zd5X%ZCwdKqk~6D_wcZmt^%+Q0b1xvyJH^0+=rA)3*^t*0I0M@6x`g$gyb6EUKHBWC z<3O{4X+xbW9zit-a%yn61-U3@+;e@JmDb>U$)tU8r45Kfbza1pDL&Uz)xKljfH{Hm z3o|QB!;>n1tc_GuyFEA=5K*)CK18Ij!n3uFuISag&Ju9ZpEWV>e=?IOV0BDwUJ;PYgs?niKk`*5Jhn4pU`vWrEC9x`S{C`%Oqjh7iy1D?R( zz=1VH<3V<#aEH#5_gg*lOOP`68SDLq&pdL7qvHu^4s$+(!Eku%5}vtn3F8<9Vwr%t zBtj9Q`#@%(B5uPH8TFZtEEdH)!GgJAx;5hW{DEh1c%#9Gk zg2Fq100Bl?hoFImwFh&?E@#PqXY`C@gl_^WCQqBDHqI%qQjXTxYhiH&0#A%$`MWhW zko%25r3`*1foYxl3>w)qL%8AEy=%PdgHPhme&tC{g(BTvCx7C1{1(0n3vpYI%1K{U?T}!O)YZ$-xF8Fus z1G|a5IRgUwWc1`OxskSZqt?>psFW^B+99z24{K-YcW6WC>Rk3FI@4d&yohnUu-~+^ zmZndspv8>c9bx-`G&PO@MOKM6Nt7XJ)mC&%a>LUFDWySQf!K_A{hN-lb9o|i zNj8vi2eQxXz_vtVe2+!BlNrz;B$_7DwHasw@6Ak&VJ=d;io&Z|4=Fs2zLkM9)6co~ zji~nV0+X@ikc{eI2>4wDXJ(ul$6X`G1GbZOGq?v<;aK+$AAyITo#C5FaVMh+*E1Kx z#l67K(UOQ;2B1lGq;qM!d!NOkC3Z4#6g2Ep8YUR-vA}82DGYjN0eUV1UvR%e??H1i zxSovG9enqhiA#Hq>GLz%Wg46unDU~N0$;qCmP)-)jA@wWz6fPqRXl9}8^}Iu@A~pi zBG?Ne(}9By%!ctBuVVcJcf;;#h=W<|h(Mnw!l{WNgIF7v?>oc}738VlV_9W3xC8*E zH}valU?%5R_F=J6I{w(EF{>T1{**rht`nSVuKr@^spuywcH{z+#p#0#Xd-As*jK~!Bpnt;li zVV*WzSDC@}dPVRQne5GYd#~pO000+x^M-Hv;Sap&kNw5}^2TQmA8Tz68;dfd0cKeo z13yMwY`Q{+%xK%djTcElSIXd&p>Cr6eaWG*LcmN?p2}614#9}(QQw&f8;Y7%pL9r( z??lCnwiOlYfR&-)13->mRBPo3okj?#QOPtoY?n;qS=MEn|KoZ*mK{?B=81?DGJw|F zGPNo@4cz6c13vY^Bg|9Bu;Q~ccMJotyEEfcpL{j2bAm{MtTxEXohij4e*@P5q(OZRhza?#jObl$@Axjd zstEXB)nQJCUTK|$C6Y6OaPI%=0#iH;n;ibVS{W3HYU!p*aE9@@@nIGlDu0 zYnUx?7Kzt=?gTe?*(JL~g-(sdj4o3SmGZEle?qOi=oZ!ZAJ|zyGoLRQm_`ciF0QIgQ2p|A$ zjqeHi|K0igdeN9>I`9P0MpF9#fmiREqu~0yWEadl?C6IbN$s5{@YbVd-6A6hkAqENB+VRkZg z)l-Cf&siP_Q5*|==Dm`!skf^1tug&#nvi?_Lx1lofbRzIykh~TIfqm`?lv?`7g_+D zaUafV2hOT3Zi#7Ty^&}kF3xSdo;Lsh0L<*@9e?zPe&(&;^`HIt@niFIVH=qwMcq#G z7nvAFMhSHG+XDqD^WBs$Q<;*1hOUdM3!&Xis(R;%177MCnQ6|o=7&RyXmjH@S{XkG zY*h0VSDxGo`pXD#NCXW*8S7LFO&W`e?)lMlB4rFD$kFl26x2z>xjA;mL=0;{WrHZT zzzoRF`gdm&oAn;>@%P?@HL0Yfi0^$y8xl`FbvMp8D^@EQ4WNnAXOu86%)+wX?%SNX z9B%11%qrbtm~T10@q3@b!P5hUV8Jo6$oJUnbteB3#>`Vl0}U~F3o^%K@UsE_`S60jGCYbm7iIw!Ox>}H}oWx zadyuhzUnuxxn)yS8IhbY33YZ8z~LDJkaP-t*6#!W3wS#2y4vvmpE<<-Rf6B>2^;9jd21|t zooD9b-Kn6i%Svcf!?V0y&?2bMpG39PRDfVp>oPP$o&o*%9P4ks3;W-DmA`u|&Hqv; z!c+&c9BHvPbaDjrd^YncNp{Y1H!Ms9z=$^&AjEC3Oax5gmQR^;>ojx8|*_0DmWw9STi=iZ50oz!1O!-+Mv; zUC#$_Bu)iP^*r^vkX@)X<==D7dvwgJcKOr4@c;bw=UW;eGi|+E4?WU0n+=dab54kj zpa8Y>CapEv9ssLhfPv?3)kbKW-`4B-1_07*|LM2>$^YeFeet_~_#YfRIbCbxkfb+D zh(_gXbQ!~1QX^Ff9UcSGKTitt`PHS4dHQWHfDB+5T{&kS!jv2c%CE&Ng?BM+JSY77 zDofP4r?5!92Z||3-UAH{f48{<6^SaMCC#pqHLeK_R$T%R%-1siJ)g}uGee&Z%_wRD zD*ta76|t>6@v-+FVOaAs62?f$dIJOji!3}(0iM^7yudFxai=^0D~o7ArT^$ z8hJ1hDQdm(^BVbn87{6hpE?=sHzr!#8`+m+luoBaa7IwU_f-)QAgzdiW{&_eV1om5 zAlz~2f!BWO7BH71Vlx(#GjQkU7{nl;bP?rJ1q{ljsEWk|k}VQrYj}DFnHw{72kwm- z-2hVwTScd|@D z%`jDIa4KDVX3GeaUgx;rdR-Q*O~ zWYAPfV-C`RD(wp$m>y&unma{NU9DghsqmoFSR@jm6vo`u2+0i*Gj5C{S_gUy^kl8{ zECni!WFV)+$KHR0{k@T&otyxeVdybncW1)KA9)GJ-BUEID00!L-3S2E0DeG$zdjJq z$S7uF@J59`7}>II8~@de2B>cuUiI=LTz&8yq0+R>KsuxU=&YBg71F9IEdbG=6x;+# zr(po+Z5PBy@SencWRTXZHAo^kn3}z~a-LbQPa-YmzKw7FLIT*z(5sZpoAUDlMqO+{ z89pP5fmc*8%K+~-tTOS2&mH4*HL81KeMe~<_}%9yacrT{W%<0GBK=yPyDM5 z4nBX5VK0%cji3}$Q@R8K5M=MfCV-!ps-eaLe3*_P8{-&O>`K?wCw~%4l;CsEVikG< zIAjlk@q6yV@YO5$QHO0(9S#FwYR&ARRv?1ymDR$VZE}n0;@U9v!hIAdEdUQ`tw(_3 zS1#@ru%)(msv3;X%|&+S8RPfxA7u;(I2lxs!Usz|)h~tVA_W{4X!k3XglcA0O}O}( z5o8h;7EAyTwhd;y&WkHpFoK|ZraCVfd|%P)1B`n}XBH|g^k(pMJoVv!dNnh@FEg*! zQ$8=Qw#usc_vU1%lIc1V!RTi8nJ@cy|FggJ z?mzWk{`kS?51&axgir8fF04nwS3DG`JUOJImS_wKOnp+lG@EV^#Y(YD|ATp=18c2O zxviI15kn?7HBqh(LW!^Hp7s9|&GQ_P4&>itY>j$z|Dvd>tFOSg8Ws8TyUMBY_aTjf zzR^Huh{W}l*ozJaBQI}K%|~Kf8*bg0@tIGYVE+oE5_c!4F@tB|(%u<9_TkqcRvXM2 znCD5Ui6BrgIe?3lKF>Jwy2HTU{)%o&OVI{HcfWoL(LX5cNH^ms9tU#jF6DX~4D0 zl(7{!Qi_})tp}O|m(uX)6u8tV|IbYH=D6Za`IJLRl{NBP2wciBWwB3U7R;pGQl47q z7wL(6EOFQq`+LAge&G~1K9#t11;}m~My^MXc>&9zw2I65TLMtZiD@C7o7|qG%s@yy z=yGT*OXPEe`Xl&qt`Z|0IO@OyYm9&59^f@=*o_%!4o`wWB*gaF5`FhBAfoM~*9@R4 zVF=ekVogh0+Ym#-Eg(@Ha}R=de0O;P^VZfZgF@%RrdRbFsXfX+A=?uIVoX~o>OM`3 zZ`?uNVgN9!DuiWfv=>ar$X4kLg|-xR1cq2Dnkf2gHDXH!0t-3x(1cFqDA#})8zLHzi< z1ONa*z>e8xU;piY>c4o`zxQAN?Q4(Te9~eFW%TI4=Q8%-?sZWu$;dX9pEikT+Q^6; zB0y6Hw>C5&(T)T&wW%wT-a_7@=Sw%Tz#@#!->_xKssI~)m%P$ht(=W(~=v!8t! zXBik8%bJFy;YaBa(>MRMWLkgTWg5TjGdzuzV^GW_4C89epEe+@qwkG)%O`H(4BA7wr(9?g8V@rG zDZdC@@Ozh^arVg1RNG^dxXltbt*OU?qZ#l3I?iS?TQvUM_bHmX`pT0{;~F+GB4WvT zA4(0l^6+#Zfy-tXJaFks!=oQK#e4t3F|Iy1V4evkyfK}GRGLip4G8E7R1eJoNFTCv z+vB>>QSp9I)H!%IO#7f-vGY)}BryS8XNSS{_us{Hd^&S7pvrFPuw^p6)|iae;@IV^ zYyGN^K%LtXk45@O@Qq$|a>iGyF#1`qDx~udLvN7Dre8w~k%@Ia6)XyFM zniW#L6-c0ERZm=GBm+)XWnA^UU+QoSjI%pGN&s*BEVTdFoyP zAdtcHdHJCo|I9!ACs#8!&%35TtC7J+M548ohLUlgxP+g8d_?m7SmTU<^Ye4m(Y>A5 z^J;UG<2W88UOU#saEL!dP2`b21h>F4eyq za;8m(FHp7Iq*@v5E5Z!Ym#*d~3GsVmF_#7ptOc!O$+v8v(V*&?SLKNl?2S(2#qaEW zt3+p1L6vuOLLMSZ)`de;^#I_Nd5T}Yx{viVV^~Xo6^U^d`1Hqb;pAw-uy%M$SOAfn zplFe>3_N$^GM>A>4|r!!fnh+OXACkBTj$TU1xV}DZqx9Ea$k%iwGa)6!+rez?|Tx5 z*9SNPgE<}25^3>s$be{2PvJSx!WHnSTyUxx2aO@umW%*@#R@n`2fzrPe@=&~_o1J! z{sO%8-u1neXQq?l&m^E+E#ETfcYqd}xzkEVF@DmNFyptZyWyUvXY`SCEx6aTmn5uo z@XriJ-N2%Cp>v1w!Z1)TB1Xo&cAnud9SwnQiI%`&pYiZ$m?dayMwZBp^zJ-$%o%8I zm@o9qPk{Ow1pCozAL|96gAQ)f2E5h-M{}U3VRT2HCw}(FZs7dJj7wLxtP!+^e2Zc= z_%Gc5a{zD*9`K;MF^E(eYlvrvMvLDI?|BOD|&y_!)rH#LgeOgw?w*WAn@g z)&Ml7D3*1X>1?3xg!fi$m-#cOW>SjEGua4dc|L)ER_{1@q%=U&@-hX6m9latXlTA2 zuH~9l00kIbfHN}S4S=&Z2H#1-9t8Ti!5cw1K^)hq*gTV1aFD7$P48Gae}Jq@0qg>a zZLEqQ?tucV89akSQQ+E_S_-Bs4KOpT*NM-5@TV`&Vc+t6Y6{e{SytD?Oo^d^VO(7h zs}cat(}XrS87VmCX=bCbGN8BddR_wn0AP;*d;HbE|BwH-zx#jvm;du8KAj)8mQ#09 zWMS-pRykKJ6edfe+}KXdbQnw#Y^0RVkX6^gFo~gzJC=uT=7141MU~}bga#pJqZ~3H%%*qd%4;o3&GzlZ|>P5h4j?tMm zSjspl5;OqQa|6ENJ0HWzaYH((Mh>4XYO%;x{*SA}-;WD48e7vU5_5y8flZ}Dm~Sgo z&JKVq!%-wYl~ zNC!Jy-nz1juY2EhT)Sjwp;97w#^_3;fa@7hA9<@i%C!j4fE!do7_=?3nj(z|e0DbM z8{JqqFk!&G6}1jL9~62S%qVzl&hK=kB_Kav4sX`8Q=KlsCVdBn2<#7z%RZo6qT7rf zi7QtfzxfL%_@$pXf)9zE{f3y?F4YsFhuJKss~MB4{1?IWQl@gqa*(`dZ5qbCI;)xk zpx4CQYYMUu==7j4YrZi74-B~c!}qg8(%~%ajxpt+>Y*^6;{>U5Kum*`cdK(RdR$tW zN|$8;Gvgj`2}cK2r+5>s>|9R*ellV(MbkwmoBA1;B6!6#V`G^#P7|wlUI9)g_&89U zHWm{BbR>Eh&gVetKD2~9>&DV))caSuk~T|o7gUn#H4rCL;I>#Lu~o=bLl&5Mk+GpC>X~Di5A#s(PcdVrlL(85*UrZuj-P z2LRZDfahNO%|G-Hf9UVN|Ig0HFL`es$5BSlOoKTMc$dJBj*iAYI=O?|b?xtIh&GCI5&9)`Y@5z#0NO}RBM)$|MtO|MI5 zWFGw4Zi!dNj3=fMf8xr$_{s4q-gZ2pMPe8X<`W`2KK{N#jC{J7({p6K}SXHW6r&z|5zpE<@S9y`XTpFYF&gBfS%9hU~jqyE1;lMfSDt;Ax-QkcYp~PaUU2MSk>$RfGG%rM9b5R{kvOxRt50N^60nH>$6 z?)&BM`J3 zPoem2nrDO@Dc>QDR2_gm&pfNfzw??bMt{Xak~JRJ6^YPc&db0O8s1DgRQ3T6wCLC% z@X!>PGx6{2-HX3=8=j>~aFKp_<&^`H_zbl|AUmg8kD2%F_E0IwA1%IRlnh>%9B>W(W)%j9#D+AC2U z8_TSxfBFPz}=eq#43+c$Hqq_P%x zunP}JR)%{f<=i1buPcW?tOmU#_0%`A0A$m+pDL}FspZ?6kgG|TdGAE5qKpzDi%OCXR`zp5!ZU^!#9 z89P(pr{A`VN1i>yW4AVV_GHG*(~g5P;MwDjCvJ2+^3*9l@cA?R%!iNglfQNY|Kv9h z@X^noA~JE$u32nT@2!!~k=R_{0LIDZ4Li7e&-!wZyih`wIZz|JTdRHfHwmcm25^ z`A>iMfAly1!r@bwK7M?2a~{^v=Q2h#+HDYJ2Rc?$^aEprGEYKqPNQpTE$b5cL6qsx z8cnGQ?HY5xenC{zJ9EI%iwU4&*NlfZQ8Vc&RFv=FhEnG!Q>0-41~Y8ZaZdu54EWz) zx)=ZFEBE1k1MbUn1U8t{U_N5KJK~uy+`_fbY_NBEAWb)Sl{b<;@5xSsmo9DaiI2Y; z7&h=h&PB)`#%FewB_@&`5si_mo55{d7?yGpY{BW8fHeRbEl@j4eVpkJCGOB5USQ-EqWP93h@g3F$a1P1oB##jY=Ma&4K#d zw+A-Zj~xIu(>Z}(k_}<{gJ+r5BAgsI4ujsSENCXe7(0do$Cn5E?)Tlm;SP|Zez%$g zL#Atu26VMZ&H_-XN?}B=$crWykSNaGFj(R;YE#I`d9*I0u5?JwY^E{f`c6=Um{7%nU!zG_#@!SGW(z z>l?H;?_&JHdx4c9ZmCUgYORxOk2hc5e}cB8z;kq_HZo{O%;*qmecd^k(n`RpAfnDv zYK^s|DEPs^QcXw(m1Y`2{@y{uue@wPKiyz6O`N8hz@*&#G))Ku=FV!GVGQi=3_x={ zdpP6gKX#12@rwuem!CYvs8)@pww?9CbnVIOd+k0Iwd%v@;%(TqB z1mI2Y{~JH@=YQkx{KdCC__|9Ez=k3FIS*|D;q1U%2o#`r#V(*%>H{?N#dxp^aW{2+ z3!!#?H=P=zg6-f8H?|i}V`M;pP~e`M2ToDQ(2NnU8(L1t(P10IxvjCv84nIe*zD}! zFCIRKCkDfd_cxf&8peSW)U0#T*3MqyiAPRxc9Ix(^=xt^5y`xH62b4R15Z5u5Uw4r zVM8Ei)^)Qj;*WrSMe9;nvSA@zKA3N6RhFd=d6z5ze_Bah$WsMnB} zDRx0RSBTl@s_!NXp>qQhbDv+W%gBTJ4{}lC(O#Zk4P)ZBb zh5->XQv`EIyV@{4GhzPcM~I=pR^UBB=`IKa6c{Uga5HK?l6$PqjWyYn3l5*r2I(Bm z0U%h2&mItvkMIOIL0e0v`dERo)ylA#1Oz{Ga=G&wh44=YU~5Jf|N2x*_d_##|5twBfAFV&;3q!$ z=X~d@fAgtFu3zsqP;85d)@VVXS`n4h893TEX0^<$O%BqJnVRla&4Y@XH2!~PGy-fU z!giNf&@v5Xf<3okq%M&vJpx;yrX`{cINvyiVZs|OUB^??UHG$~_$GYY`@a#ne}q@x z^BmSW18ZQKX3Uclp=Y33;MUD^_>h=q1Co(8A3~20U^M~<2Y2Dwn`?Gin`2S+7PSkL z(b6;4CXb>{1)@^VSnJRRV0F~+O@HJm+&U;mpy+kxx3j1+GmXiF3=0j0{vRn@rD(Xu z4NyuYb;yRsGDU!nDm8(QbR)O?5@iKV52;+n%(WHhyoaUh96yhLo1j2Y7>a)!dS0aq z06MxZ4FDtz*OsNT<;~Xp*8L}#b7nIp zHXiXzY$7q+fO!sd7-l$LHaL!ErFQ074!-DQeSy01MX-w?l&;}-m9eW=Rb4S_WGz_& z=DT^ekcs1Pys8D>yarAZ7*c5!ZVlD<2kyQC^pn7Qf9eFk@^_CgopLsAG8!EUkl@CgkY_68zVZaRFD1oCyzt&*~0lU@VE#X%T;~Uo4`RaXK z{sWh>|NVDi?}zWk>ih1(rEk9r>#x2Hd(DV`{|Il1odj9}d%J7w?+ke0${H`a%ki=Y zcJSi6)_BpqJ9z0mJGinl;QlKs+`YTPrQJ2|xx7Ma#z4S%)@V1F&T^xJpA{%A_VGe1 zaI*#$_b~8qXSdcK>M;O<;xNE7;L)*j-_Snv_y5)v0MCn#fC0-{z}bwcV^`CkdDa9{ z0ZjfG+gg`D7<9gG_f_`dcl0GTU{U_|QjQhH>wV#!~b;9i!42>U}WJ7n~Sqw5H7l z<1heX7Aij*mS~3~-t&V`;^=zAxC6`+cV3fFt7vmZ%5rE4MwAXlw)CxZd@{}y4~jVf z*uxxj>}C`frRv6OOfVyTs-&TR*3Xd^mfk_a9TR;ge1OQrU~I&~rO{_CksE4kERT(eB>8zkQezcx7UUTKkKjg^=0q1>)% zf?aTiL4!0AM#s0#0lz#2_8pQdl0nFn+Fy(X9GFiG*a^Jj+x9SCT48guBb_XOY5jX7 zhM~G@lELHWZ3UN=UdhPiXAH)DB(W($DZxur+uM{r2!@;jwgbeDVgA`8#IrMSr2%uW z!IB07asL|96FE~nXq%3h4VDeLnJGm?W^I!RU-?6gQ2hB`~{?5B1V*ktD{K`N4 z`q#ehM-PvV?k@mF}Tk=+PO}n9K^6 zgySeSl!K{Uw>AZmZBTnpj13fk4Fe(rQ#Y*8aqkegI!^fc)7RoBue}++zIicr#v=@I z4r>E$J#`)9zN1ZN@HQc^Mw||qV#P-YL&gd(x%cC^yz@8_cG3~}FaVt$xq3J3>;&HT z{#RhwJwfw9M|az++#n&3(jCnkbN^}Z!7xoyMrTKc%B$uX-W=1x3g7vIPvF+g6^81> z?_6IxTt?Y*C*7Sg`fj2@WfV+Klg*P<0tp#7IYX1vgPgh>QyYuu4K2s zy^v$2fl^Cp2OMhYX=E*k6m<^}6)%uQhC?iazQ>LEP09%A%-kDnGvnC@ckt)`@*{Ze zK1VxeuF!k{jO(1i9O}jQP-Cnse;vKRq$8(*SKoe3$h*9D{Q7wS*#PU90rWJyb4+Xu zm^$E9%^`{!Nyp%t-C)Lj+-K&|LD{4L5Z^)plmgN^P6AbG@&u0c4H8V~mblA+-6yQ_j)VStT0;4%j4g(Loyx}e1vWMg6I@|jyRk57Aa%hUmQB0fhpt?YU$*Ci` zRtWYRut5(l;0EJ4;%j7?Bg~j4y8^^PqW|;>`WT2!!b2^!EqSCy!*Jh-em8)-*Jzgv zehIL>5xEBDO$W|6ASO<@uh<)jDGFT?Sh%XBRLxHaX(5s_kKTXj*uH;bVXGgardXmM(Es40rk zar)Wm+V}p0C;q&<|4ny4)Kn5NBQ ze_CsZsbgnv7dH+MPk-rO{OV7e*}wk+0Qfh2sl(LO%zR)zJ^0p-{p4T$p-2DazkJ}< z=YH{?c6qhB{G!2H+ru!O<2VPbe1qnO&D?>m7NJ9+W#b&|&Os^;kh*t6Y6Hya7}7D@ z42L5zqZ{*y>)gQ<9pNin#s&}W9>W0q`su6i)6c#hKX?2xtcD}3S7$&l^l}5*u*UVr zK7(<0AIQ$qMIG{pV2;rp9ar$$`~DeVyFkt~{4!c*hM0lNmyhti54;_=J`zREv_}D; zOvYmsK`^JwymWMmBoi7j+Y^~H;6U@l=Eh}w%XdFP`ctKf0G%S86`S{5%#j&&LdaC3 z9@WxA(I^d#!Jv_%(jU;F(%}&xC_+o7Z8$J!`&}38&(c0Pz|;gCU;Th`v@&?pG+`XZ z?MPp-16eBQp7Y_yELAuwg<9gmaY-70cBWy;j=AsKp`WW7r)HCv(RK(r_sn zxGQxj)LhBtlvKJI&X!1*be4g}fiS^Kp$$8^p!Y0flL={%^@nOW%r z)zgD2|2|PH3T&%W7N?d>?*S#MRk`9N$NXf6-3_$$fE>VSl^Fyfn?#-_=L<|^tIP>N zdpUYBE)aHcRs(1;e_7cF@ zcy{=F1e>!oDbYKc4-2CJ0j$#OxU;Od&TgvW0%Gw99JMzVpg?`i6Cb{{`P08}?H7C) zf5_dR;1}F^S48Z;?#-|K!>@bgtAF%tbAEpl?LQ79=6PDM=P+`DWnGyB+`GH`c=Fn_ zr@#J7zwy&%cmV+1u1k!-{`vX&ed}R(<2;}Kna}+5zwz3~f9+RS&wS(;cFs?(U2a!b zI}bg$V^cVeV})sBq~fLtSQ*C5rQ6fgJI0oD`dCUkut`Uo4e2u`09RY$YCFbdn=!-i znX?D*zRj!f&#u1;kDT9&_39k!I6@y18BBq-7MM0Oc1B0E0k@uc3}ah!XURyk3++2I z11FnHc=L<@IePBEG*~FyRV+%H{bs%#5ekhpLy;S-38dUoA=NAakU(#-BLc(NRyH+ z(lZI>0%_OGA^jZw$=mc>ktwv!jh4)qH6vhe+L2sLnfy6fV(>I(esX{)39$G4GnYn zl$a*b`3l4%0%s?V*S%|vm%VzW!_B?h20ANC>JaE+$P~FIv=Le!&IGjqTdzr@#73@B1ms7g7MX{gOstg%jLk`?lWX z=E{iiO~~_a|J9%Wxv&1QzwlRH^58>9tC#GY;8k`5_wHQ7?i#Rj3ammyMK&-@&ET^k zTF2TF!w}d6aF{#z{PA6Q`usk8VR`_Mo?XKGHV@-qvxgPVFzy^+g^siVQw!KcWLARgYL&Bbyq|ly1Q4JG4HLDh*5;*wto(Cm*_u|Mb83IF2t3aCDL- zaxfX&JUjrFopl<_eyd~sjy<%utk9p+a3wH`Yo@l!7bAG__{_~ScWVJy@9f65O87n< zQZz%JC2$zX8x!I%5w|9^Q%Bzf`~=7i5K~8l0nj*QSK15)&yF+@oXNO@5<%@Pu)jcn zY{()EOJF@ ztdc(j-$`fRI9+f#9{^C@QZLNNFjdr`QWpZpA%GG&BR7T@zx@Y3`>sFz7rx$icRzFC zN$;pDBKE)RO|SgkSG?jCKQhnr{Rtp7jS}jK5kWvkZAnA#69XzY?5ub3)Q#s(fBhFf z@IngUPPoJjtO4BhJ%9H9_|{+i#It`1t-bN2?Y7K)#MuVs6Obc?O|xS?bnFfrTx~0O zoZ=uy9NP-hW`)TE>(PPiXnu%QJI8!@ zhArI0)$d!8Af)gDoy+D3_=1J7qFEe2VOUfuf?0fn3_bJ}cxvqWE_@lCXStq-a)LdI;n zbkY}Gs2nIpp(3?VX<(1Ql>iR*cJROXYahXl^$uc(r;@q@k`9-1+vpyFW|47BJX55dj-+CwW+1Z(kXc3kgBRSv83o% z>{dNrF&gEl6Jp_9%w<+NZ#^UTVCvpY;HTEewDwi$M%rGVYu`)pMTGf{*Ui5vyYi+PVyagMa2G_-umkAec4N1_9Jtj?@!sR)-LoN(HhOY z%SN+GAo`5Gy-RrR=C#vb{`vR+wE68#0f>-z;ktO4S-AVDyFdAh|F0kaV84_fLOVLY zGTg+~)#q^cm8Y?P=^CzFdII-dehT+oeF9gmJdL)#fm^F5akxIhYX1fYxp1Hq(JO_2u^lSH3^yRCR(HX7mmpMx37=iyE(1rlil< zAVySdYq+v^f-?=&avuN(E?qvwqn~;Ojxk^yXHv0>a4nno_@ZrbqPlmU=?FcV<@ojHYLZ?=~fO`4R8O@HQd-=V_uihXLM#+8fiwd<)&gv*jv}|2L|ArIdrS(i(sv} zy8*%VcV7f5EPvC7S~CRe1CXs@>MYjp0l=LT9nH~uqXPf5qn`kI)R8x5;Cf>7TmaW* zv-~j==rO}>!p%?o!m9WFdH~Ap+?iJ>3`?tWX3h$s zHlhF$(@C^-47^t38ky{9dZD%DZM$9o0Kd)kY=-R&eiz(Z0LUCLcZ##k229-$>6p7? z3II7`io|($L^w7W(Q`m5kLlK!TB}JN$=tLVs{yhi=G;26-e*pcYmPP!@B}9HHz#0b zu5O-Zm^#B{HZ(tmg#$w4ySsr$Km8DnHzQy(rcQdeDDgf|qOD{kjrV8RPBH5tb!(c^ zAAzty->mS;hc|fbTTXC(tgef)d}TDs=@YNWp(!e#g95#jfsJ4tbr+pE2PrkO5i}s) z>NB>~WG3tL-Q|E&0xb;!O3iMlL8GN9pg4?WO0y=gp%@p@qwW%{iGK)nx3Q}AujnQN zZ1D>|Cr#Tcr(dG5azLkvowx4-CtDUGf-W+}A_+{2_Yr>=|3NlGmx51ctDq7e$+uj7;%xV6st{z2mI~|l8 zyEyv5XsE3Rz_st3pFem*YoMr6LyS5P6H@C&$E&<4oHV_30nycQ5G>JTTuR|&&s=mQ z{1a(5^nTr0tG$Rdjs5xwMz^y;%o)9bTbBC+N-^m3+&R*g*@uh!g7*(^WWknhpowuc zAR^J{($X+Wt}im9j-hwz49Iry3~}G{9+1rA0~Ku(;Lz!oXqU`LF=Mk*Z|Payn$KZe z`Apt_h=Jo-)pS&eXCo5k!}2}FEcD*VKBVjmR|{sGkccDzDH~t{B-%}UuW2~C{_K8h z_&u4qU(0eQUOhT?c2+tAL!W45)wK>9b(_kCan$Fm!^F=c z1x?2u=Vt^D!3Z)JweA-6I}Foiz+Jn~!LuRez@?oHo_OLuT)%l0mS>pfz%X3sMhFSq zWC$1uD2i$W5F7whIdK4(MJ={zz)K%G!`r^*299nuMMeOOdH-@g^bjC0Q1r!1Q7oLf ze$i(=X{kbOd%4~;u+eGAAS2ArrQzUrtND_;xXr!GF&C3jMqJHEviip>jRIq%87L>J zZjS^OfI*@{wf%Ibu`I`F=F8-?(CAmbZW#g(tmeS_)Udw3!5B2C04ZGpiBg2CnoE>- zyk-rYb!21pM>*$7)OI;2chT00I(h^}q65dWnwphB>rLk>%2w-BAflC{P5O{Z1&p`D^)Pccx(0tJR{VU{GtC+ragAr#{0fy@PG^+%-R= zwE<3wmZC>F_1Y_;al8OUflzM(t9H~V0id)SZCKt(WKF^h3>wK?@4uX0fFO@TJ5?^E zv;mq<8OvB-f^;4{?ob2YWuLVUJ(RxSQ6j+MfA>s`1NBIpJ)wPf5g`@}0#*vOp>YpD z<)S>63o}OcXbU=wafX~4*OgiurO^P1a@F(++JmTaT`;w0$6Ky-~IqeU}{Bk|JfF)BxwT=`Awx-hJ+kCwM0KUYPnRfZ5 zFWX6AuSeRffjt>ifCIodI84smz?{x7vd=xtFpdK3BsuyKRtY>s12XHLv% z>_s4hdXcigj%vG#GT0wI1vR z(4*5BXuwYyhKq)ys{siIHSu?I0Z=tLk&b{y$Cf?|rf6@P7=dJNbGyuQa;;Qec3K$jQEnoj_R^AGQFlXctXc_HaM0*G@5vnjit1`@n+ZH+!Zl#1N6mU*H_aYw z1T_qeV#$&lHuW0--xa@(01n`IZ?bS)|JJsHmO!FFf5&#tMp8ziJ@)@6P;UI68+zxE zoD`^m(Lw->biEN6P%OyvwM=;QP@fW z6#XhEo55&y5sWb&=EhARXUF}QX1w#8pTpq+4}T^@MD}X0=&&L{KB+tZEV&r^T+(B7 zFa#%zNNaIuFl!wk2T!Lf=ck`%G)H^mMs!WylQeo8D%z?XyXa&j9ls*K&^lD!u2273 zGqO}{x^4Fik`Q;G}9X4p)B?g0>UKw7vp`UHg zUcQG6m9^FW(Ha5Y|Z&n6&b@G#Gv z(L4{{!ZJY4l5-6LeU@|Q8{zs2Xu1)M6{|tOM}S+vve>Lt3Zm6$Vm)VdP_$w<#Z0oJ zoisbOCyQ+ph$dteC{Lykwg8py3n1G;P^-vz0iPieqIwP>vAPO->cbxzZ#Omm|Lx^Y z)emHITjePtC9cfe*&Q}-akDi*v_^+1M+MbpUsT5` zQcL|osC_PE7@IK39(I((o?77t500pIVAiyvTT<4JC((78N;ksYbAt(?O{O?p_DkMOqKLHBNNS~v6 zIA~7@6w*nQ^VNcbK#1-aOZCWhkLpY`mejO?W_jL_X>;{w4}rHfur(|6dnur#Z&G?; zyMJNM20<$GgO{@`rwvTgyhMP|8gZ_HJ};9X!c_eN7u#_`JXo#9HL{$gpJWbD;28qj zqTBg>Ixoqy#xhi`k3d>x@^>{YP}^1Klt7H&U;vOvmG?z#$1DQ{8VGtKn37AC3ww2~ zGzw9f!r@wk(u&1AAdCIjGC}j)fgV`zC2l?btYxn6Xa*qDJp_=5> z)psW&OLIm7fDBU7n6$?6-wp=t(14oi)>lp$TH`37lKgLTK36@FnWqpuA@) z{SbP85+g8@;uu7@b0CbnA(KYf0F3I4MqwEbI3q3f`tH(j%L$|Dc;AC_a6yH7tS?u8PsBSD9QxjH1rvy#~00p z*1+8{Z!`+qIQt<~vrH$c!tlg4S~ljpnGRs|#-VXit4Gy(XwM3WWo-9E3NV@xJkUW3 zIOwID*SrGu9f$y08#P(cG?9H*AxU7#(o}NHS;x-AOkT=9BOoy3+oYL z&zAEg*1)MDpy*8J0oCcShShLin7{_WePc$JhC#*!orXJ1(X1KZ#bA;G8f}labtc`1IPEH-bmCU>&L4cVVdiRyP)w`h62gZ@z0A25K zp@g9G2JXQuR_iujF93iqah;#~fXEjmFhmACMT3jZjSS}HwW-Un87L4kr^seG_5n1f zBH0wBdgJ`>W;L)xw3zb$g9LyVKi{40RwGHTdE-HjnT=Q6*Km6dpZ?6NG5Q8!stIm1 z3{7lAsEx3J^c&L+G-wo9F7M(x&#@% z%G09$VKkTJL}(mo{4yB9r6^1WdvuI+1Rbrh6QDO%e3(&eHDx0DjA!rL$5;R6vpC%y z5Jm@W^p1-&HE10Zh|#b=CVuTrJNVSc4{+BS=!4iC2_nr54yU@iezEox$Py&zjQCCj zz5q-!jXhIVybZ6ki}LIcExa%V#rEhkvOY6N|1Qo?Qv-)4I$A$ZCsPg$q|eJ~68$ZV zK-PW=07kGI$+-+ z7KSMZe(nM+xZM_jgJjv}JnI}RVn>4Dc@Yx|APKBPZH&3*Z1&W}w&)FT&nU|8!Ag|^ ze|jo8B0h7y>)zSei*FfXd1TA5ZF`Lj9dDg^P4`O>=ouK*w>D@U`HAz~F|I~AJx$3| zwN3P@JmJkS%0N_hpoAc{!a@+%WWALPWJ}R`J*k_@yQ2U*wQlauaS}r<~E`@(t z#}Jhmg{qx~lsR1Hj!9kfH`Ef4j?ZYM>OU9>2h2K7PA*~GJ7j+WYs}rpwpN{>Lcecv z(E6U{jDTruv=|2Dyo*=8{0LwEHMekZ!(h%n{pMl|^mBZ8E(VRWn9YDB)RBESgycoA+|j#+ddct1S3)2^w}fdqvQY=&ROV zf>krFTRHBKQ>+9DCzvGIa4sgl|$fp;(IK*K8k73vn0eo2rOuG z!C*Q|B}SFjMF0m7Yo+%YA~%5Q*vS8=y~31TU)BZ-fZU#+E=SH)(>_s!0zX4jKnIQ` z?gH1vFx8+Qm~)z-J_8{Do3cF@^7H(8K6ibW8I(Tbolv8rvy`eRkS>DHT-p!4Ie~^u zo&Tc$i)qkah^m|scr37;^>;cWRXs!-O5l_rz$~4JR$3_pR!|*3_vr!69==mY181gL z^TB;Eo-yv#-e+pXVkTH^jq@h7Pau}AN5|>3k)^u5*9!pPOI!!%=kA&N&C=XyP%@Z5 z&l0o9dGmnrbVcushFhch8~}_8-qr>>eHkk@so|#KrBXOi)-;qfobzU*5~o~Rl}4z< zOon|NR|q)f^COrI>?j9pBfg6c*@uO#DEorN*wrCV4v*W6cKu2EDoZnf*v1es zV;tFz6-gjhPL}UT?2a5B3OMNR2);yzG}5^Qhjf(gbn2m&#@34f{(F--)O=akZ$pKZqIFBQ>JUqBWMxdn~O`LX0APb54w zGCKwEOBl#k4IK#`82z!)HUPyaX{Lco=b-i91{?ft?m@>ea5T4BvQh~A5LeWmxozCz zde71MR(bku=`R57tCZe?sfY_HxYYRr1(d1jl}x`8h-5az$x~xQJY;5fBme+_%xs8C zwQ)TvO*9N6MWMaZ4iz|SWPQhRV6_+Wg+2gx(slFZxpiN!=D8b`_oFf8A&%Y|St!CX zAwM4++3W9V*ogE3Q=gXzIKgrkM$j~9^E^oq#aF{eQWGfxh^3+|VMpUuG6?;(C`!kb?*;^>5X?ygo6m<3iw z$7mo$KK0H)MJXr5Ph~1Z&b(3|ncN)FRlAJsXIUo3p)m?w#BKsl%EmJKC3Wl)*Xcv~ z?$z9A7?=}HCgox7T0`(%FZ+~f8QyU*FmxProO1Yb#FP(QFk^`YEa(P#-!rEoSyAmq z&<0aa2{A;?8^>llg}W797r5Y2Q_Z#+RwFxfZc}JX2P|hi6L7FJ5@Z-6ftY9cOh)*D zt)1}3Ab|1n1<)1Tr+j9v5S=Rr5%CN$LMKyk0o6ldL4!^;e>P@zs|(}>W`ln>PqV<4 zEn1~=_+&@ez{s7!PDsZy3|tcf!G8#-MVEM0pp~DeeW?agu9PSHOEhGkFr6MWGrRAO zP64=^Hz)kM5RjScJV^@$X|*<+88NG+^h`ZO@i4dZdI11@iL0HTo4NZSE0%G)~gjG z8>7acN09ClI52$-RmBN(8WvMzO&XCE32meS>fK}4 z){xckM9ziZ56sg9Q!bZAb=x$>j7@wZ3E}`!^Cf1a1LAu#eHkk-8sLgt#h#Rdtg}7N zBdjOxztw^1LhU_RJDf||V8^OC)^AuL&kTJ?yyQN^OYUmu)({9hu$u4>-*<%1KR4m( zx}gh*HglkBVxP88XzzvAmXtGLn1K$2?@&~%*b$1e_^i57{=1@7zPoy6GF1ionz}Y3 za!FSZXmUfE^AnH>Q_7^zQquRxq5mhxb6 zp7r|>Al@<_T-yqADhP3xeoA(!0H{|GBg~!9q)j9&I}oiI`dxRhzcTc0b8H3FO>M#n zkl0frq$TOSW4&H2wx`*E^J#+%9M)~S?$ianBd#xd<%=@2&oi+t<`kk;tv*E^+_gMp zimtu-xbpx+lsJ#{TEgHG$wa4+5TK)iP;{jUcvubQ4fFXKh()BZN1*qPX`Xpt-4XMQ zj0rH()HK*K%!+anj5g?`3~7Ab7R1}e(wPueCZKRjvYvDVw%fft}?n1 zE?E&8l0;~J0gPfF-QXgKOF5zh?-6q7kijxD!1+uDmmDK0#6`OPG?S>Tf^HQ zJ;u#FhYxZXMx$zwirqTQ8s?h`ymA-qG?3YFcV)NOdD~d6)Ixp?6mr7Wx@F z?{c(so?E8`zI~P(wyFTo8Vd-{^Gq^+tyPYb22zVx;2Az;9`x!$@5<_|L4c%j-;^^J77`<*pOZeP_AA*G z?iWa(5XtX{)__2*bU)($v{(3z`fmjXaZ#v=hMuEGk1J*;cVra+fb`Z9N%pt3hH0M2 za_R85VdQ!tF=(y}RO;QcW3^i01qR>_yLNVVGGjhvB@t;++5tMdlz=Ru$fg{ZP&7|Z z39%SqGXDt78N`$zN+n6qii!DM*P8+UPeJ>dMDaBOGbcmMc%Pw@F`r?~$z`|tC~03_!i zP?4P)>A#WP{OmJHuWt&4T(FpgojJxuh2Ijy^ZBI6Vj+|SB@7e@Rfci6n z;plp=7o8f^yh-h-Bjs@P8S=9*m9;@pXHW9&?s}{NRX0NLTD3Ls+?2=FiI1GUE&ZH$753$3_ePHI1s&Xxi~n7~C+PwLlLAQuigk8VfC*OnmO2?z^#~+7bm+q`fWp*E za)S43g9Zv~_hGD>F+OYK29GJRW_PxwKy}di{+H9tDAdN8<-&-Wss}Wg(K=9mk z9%v+t`T+G`_109UY_M3z@MC`$x6)wX`1LW3F%3G6xF*C%p0eqnGGu7vd{&O=Sd(xM~ zsJwj2oD2ivaD}gb&*Ql3u5WGLLF|Dua?)Wq6e)C>yKiQI$nVENP%a3Po(B zIF+7|qhYFm>%BN2H$bI!u~a1RT{B_~G&s)3#4DdTCVOHj6+PoK`hi44gO3K^Yskik zx8517;o1rCwXfa7SG;148)t#h1{e&NcY#knIpKf!l>^*5oN>=y!U9Nin4DCfsrx8L zRtyCv?6qyDxniDFO+jItz@30ofrOCeA?b0{;EKkdVln22>)khNFzE)MrK>#yMXvlP zHVQI<6nERQ8=Y^<70qXEBmMdwFOiz=s~mQp2|)QfwGX#ZY8vll)<7Zy^)fyvqLb$| z9!@e1-~te95Lg$$Avj=arMWZ$Fl3O`(67<~2ipy21|#UQCD6HQ9IajLmYX|rBCEy> z0IL8HNt+<>52ft3)`|9p_bB0?fU&uNkJ6G&+75oDEt&}{76}|g1?Brg4TDN@2}2M^d|3 zO9acXnI?3Il)0_f3jp9tT>Ja`6M8<8Zj&i$rEQ_XA&q0S2Z}UWMebnzb5=*cz_Nb> zbcS;;AyB<{B7c{ti-t`z;S3N475r6kf;!hDHVQpIhSpj62vSdF4XW# z)lXwAgAG=KSVfpJ(sW>our*S-Tf#H&#?Kz%WDT^b9HXL5ITQ;Zts||$#*W;mMQ!EF zLCwU`dE%Z+BfjU&d$={tIG;8c2g6{%l~u!UJhs8#{*?n9o_1W_Yp?{SUODJ(DJ2D% z6sgVAEc%gVgml<#QEQWOtM=HAf$)L;3P}2V$+365H1Ga56?W$F@qI>ETxY) z!Lyt`pOQ9>&tB)o;xsHw*U5KR;BYa_3!UmYLaG8**WLOM?-CakWB3VyH?0 zGfeY_ofd=dhZ~lwbUUvX0Kk{HGV>hk;S-~;HvwlPwFqdctVP3O7OGkFvmy{PjzR?_ z%y9yQ5CuDTj_{2|sjeh+dB$QGrgQjeg-mun zc}*0{(a}yEf9MAu!@+^0I~}#j8NvWG<@PjvEF}mtd7(J=3rOhz<+pO`p3m;Hy4(1IK%u5M~U|Sw^S+{AdPPLywMO-7vJ3 z47=#yjBWX2CeD1o_rBu_UjN`O4$gqpKxeqJ8TVgZ<5xa?f**hHA)dNE;oco!JwWpb z6qPLu5~JP-<=HQ!5PaYoxaP+B@;Qlj}*s-*g``-oB=+Mb#m?;Nd3VJzwo+&_oNsuNmS%42>70eu)X(l7#{Cj{* z6M-m+5bhn`A|aZ3ZO}3BjOcsa0FNNmvlABsewDta|sj^ z56Hpl9;^H@0klEPRwSSlRhhE_Z?nXqA@IvR&G*lBRdoSh;IjU%b7(4+?26(6?g=+i zJ(c>v0t~nhGr3<(K?;FLN7_KK?r=%Zd}m%Zv~DtJX4C-`BRbC$%)rv^Webua@PUB0 zv%gDOtlM_I006%9wV6-yqp&vpxJp!O8Vv%H)Oqz21T+3Wt^YO2++=?JRu`>{ZEZv8ht4CCd0S? z@Kd;PQ?uDGfYDIxDpC$l3U7iPLpm*3MQ+~s#XZPS&`2?d?J`u(FCh&NMiR{jIor;E z*YlYi37HB4gYpO=!;vXwK&YDlg5A@~xtQKdIVU*9YN25;qoQAq<89lhw~VS1kj$BeO6`V0)Os6%xuegC^Sy>QeDoHLs{`q5`wE(H0BZWAHp83F2zc&E#zL)C ziF=fG%EWUg9j~~5jqiHFh$0H}sM7qU+#( zAnMUSv`1Wfjm(+@()IupiZ)f5)aUSFxgSfo3N`6*2{Dx<gMBO((%iVcxiw*rpdHBUnC zwC-EP9iU1HFJ_|$+ymB3T+E$$*%UeV31(yx=b3XimWas=gAeHFn0v?2_`V}%jKfgq z@U}nS3jp9tTxK?n*B<|Z2Q~>BfJpW5S8lM-K2bh9@l|~%bL5JWqoUlRyBSTAcBDZ? z(cCgTb$}f}%oE1l6}md6wTi}CqeHzwQAhR*22chW1Rtr$y^4_4O>$Q9*u%>x;nL9C3`_-c<)^zCsB*iQ821dk9`@T z3`TdU6a&GC7zf&Iz8g9Ip++zxn7fq|Nwx2Frzs_vk+E~fG)W5mhNs)&@o6A_59VGkXz{oFaGOZ9_b6-UO>9y*F$HBs}Yv>z4q0yOHb_cyeG z8iF)TX*fDJeDhnb;G5ra3FkdTof!UyV8%HK7%F6BFsQy9h(-be?ximZ)5m4;uG=y0JKmLfzlFnpiA z0CsHYb2^hsA@K7QI|JA1I6H^gmZF$+D-&kC{WL5GxdD92mluc zu0yD%AzjhlIzu5=i&3*^cQd9Qq?2Jze47f0V6Gl|;u`&1S_Z4s$CCcwhN`2_ zXA`Rh0v5K6=3dNH8RT5m2+Pv(>}n@2|3L)=yGIcj(M8+^BJtQE@SHYnNs*e-_aNaMJ94u;pGo@eEqjS zgM%Au3`PT5PK`pl>R!d?CYa^H=8zW}c^-UHISn(Zz_E=!ilXEKk`GOgW?jBEA#_piPtlT`l_ec^ zbQ!IRkd~;93gDZ2J9zsiZsKsqF*b(<5K;L~=G2We5uYgnaRTIy!Di*A!FQ92^yXj} zx&&+fn>mioSQ7dNzWge_`OEg&>>$81mezHsiISWl_lDkG1hVsc zOfT7uoe`&*&L`x2N-yC8TV}SU`!(E%PTq>Ar*nkFmPR@~I)@xV?14)(SOC z_A_WoRSinJWvr;Mr>J~sBbn?<1m2D%?7g%-fg&s-~(J(Ul z2m47F)G$c;9v*vjM$*N5*O~zE7Rc<;d^jXWb!T1;NNZ&~WOtMjOjFBuT_uQiRcM&n zHCHTiJFgc2z;AP{U;YZ5Z_a@TSgD|)VHZIZo-)e7HgCo#mkt{!(6Dt>q{rpRlxOTh z(S;WI9TzEY(VifBL>=A*RdWzc_IaVi6O7c&4D3uZZ#-O-I9o|*`mMW?u^9pM64e25W7d1&d#KOtG9WaG zq^Qj}SH2l=wCM;3zVUVY_^!9_vFfSrZ@09`Au_YLl>Fw9h5o=D~fC z({5xo3LHnWF;8m*4NmGqI#dBlQ{yd#x+W&2_EHM4!3buW7&}WaCk^e%MgKuD>e6qb zV81Fh0MYEqR}<*~SbF)BqF*d|)}+9h)dgZs*hH+}D$hKhV|%}5Y{wju1ugvt8ubZ- zH>FmT?lU^ii)=_eACDpTIe&`hiLXFLNBf>WxB>{>Tk_etPIaFOW=tbWz~6}^V4w}) zdu}FhOPZ`!ho4_5wS~Rl8UqPyBgULNtlcoP5dU{J;<7eB;?och8V7V2fXNb(;Ik9Q9m+p_&oEXJyEM z^1@~u?Q7~&p4g5miIj@Y1oMbUMp|a7IoJQm z+Q8KGC^~E1t97pNLmBBQDr<78jHWnDDZw=fjVq31S(Fv}cG9s38mFQw`D+3ROO$4e z{Ff+X`xz0bcBuTm62T>Jb^$j8BGtQqhn({w_&KZ1IbQqZ5l*o}&J@B8Z6GiaaIDX> z=CCG1eW?Mzv4O4F{LaO;pgPKBHDO_-nxf&SS>=*&9QB67bHm$SzQ*@|)jq!VHM>X$ zuAcyBNoO2Akzr^9aMz^)SJsZFk2`+tw@&bne&YZ?@!lKw#g81}$(!dmI|=NKz?B`x z)pf(}z&!ETIO%OxRY4@c7V))i+dB1mCL6^n0_NvuHE{BQTpNrLB^|AD=;eHq>`ls9 z2SQGZ=Z86SRT#(#wYJT9n^E7uuMw*x@Mv<%OzCm&TGK>BIc2W2KuYaxMfJ7EvP!$O z@p#_1Js1Gy!@EAW9Ak>chxR|6Vq)rSKF0I`9c+)jq!VFcAO(EuIZXSO+gs1rY_ThK zzeqA7F98Wwm`bc;F*+QSSu$Vkl73?CW>Cy+Ix-6Uw$ATF(B*EzOU6+TMW zL;~o@mb1A%1wgZ>@2tzr%!kp#$k7ZV(;7WGrg>ueOy#JpHEcHLSgl7yCZ>6V)kw`v z*{Iujy#N4yo9jRPU;TTV`Rx2rhi@z@Z^#UKXnd(lK+`8p`crfYdGKW@ObKRm@R%!Q zUJd0uRohD=lCXg}(KaY+ukyh2&3T<)q>O{9=DyuI$DT$xF`kV0&L4gnYXhd) zFgD0gh;jt`dmFSTm9LMBbf&P0IW2ufH3lJEIVqD9lto{j8(^<*_XbPSymfyIYUT&f z=*n=~lJ_S4Yx?^oa;9~sF>Dm46?lP+Rw~Lvfd!DQSemftKIlY%aUcs*`Uzy!nrlaYwLYW`g^-_s$fHMpe2qF!Dy5#QP9nYwRyTQ6|r$ z51a_PbNS&3XjePt z+gvZdfB!H}Z~audA7)bR+KcA5Qts2>Qy9gKU5;!ysCu`o!=}1*P&-;4e&s=H%xYBy z%n}_bXXwh?`9gJXBi~GJx-6%x*0*NBe4e;#-SFLi{3#qCFrSJfBSGgV>L1&jW>#;5 zq3(}=57CN?15MGbqCX+g6)AQ_1{HB#jIfy#St4>8d(oWMU^+yQnU17UG%zn*QAAPi znWXbkG@Qxcr^HXo^EK9!D@tljihtT(Mq0s=&AGFA2mhWTNC=Q*<`T6e#9YYfnDh?A zX2!wYm+-caUZVkrv8$sT+7kIC062ywfe;hoh#kY`!y62PVM1`yoE$};Sw>`Fl$Al5 z7fm{GU9m5=nXOB9L&u0v#hEzGj zEHI9V-BrWhy5Y(WbtXLw&mDJs=9zQ+$|JY%GatN#fB3!w{G$&X;(z+J>-fj-zlERp zwOjaCj~wHppWon{c;Ei|(h&8JUWigTh}L zc?0C^%QjFK!*fjLLV5#JI>>qE7XYC>Tp~I*mf3QT@Er1-Y@_80MoiAxjARr5cw0piCs`+n?ZqFD$=K+Ab^0=xwBN1-;$;OaI%R2 z;7z>;6ktS8z!G~e|LPf;U$|2l01#W+tdd{?pTO?!4(+)rX6jU~Rx2??hMo0D?N1@X z+kCwM0Dk-H{?(=@GQ^O^JOE4=XyC-}YZc@ocF8({-5BjL^& z1z8cLRnAc-Uut8M@nAb#8CT;v6tlq`yu@=dN;F_a<11=0S{NE_SsOq=1_V$Mj94xV zVu2!(WGKg~1gZY}ye+@vZ|NhW^c9Q5b}>MJ9z2x;)*qM14!{x(Mder(LDf5Aw9W_) z;QG&nv+7L8 zdy&&rjecl&61{KtSbv;kO+hP}06f5&lo*Ra3le_!2qY&IPSr!$^AnDFVR&+znN z#|J)tieLZq89w>M1}Agkbq}u*8@|)3wJ%k-GU-$7jlS;{Sgq%VP$Kr)Tm7zGx?sG`FR08Fh&5eXiZ#>-%3P%Lbg&a4=*t9Lyx+b}$3W_K(A z2+$Tpvia3&wZi6ngVcW$EOzeag=LlR@C2pV+%LEDdI13ZHkX;jyTA2YZuNs3XBJbM zX{=^$jUefFZfqXFl)5zl(a>|}EP6T>rVSVwaEe=k2Yqnn_EHDh-RUGWsmz?z8@G$5 zX7vsP;6*PQ6~nVN^pjou{_lPouYUbGj&7}BO#(DG%(J3x)g%+e(~(f2&T>Oiguq~I zd=&NUM#IIZR0h^$qGbHMIX3eIZ=zCVL>X|i#VQw?xj<9PTCTkuaxj{uy;j5%v%2}Q z?PmRgEvW?Nb3@+=l+nwD{!dUi6&FgUs#KFkS1BL0@f<2wr+aZ{bi9B!S=WT3%+_$Q zp7HJv9O7utVY5oWv_6>yoD6;9+I8Lg;QXFxNZ_*JH-F|D_V=qzEW3);T6UFAHPO|X zI@w}o42*{P7l1kcI>e%k1EZ5^O58Z=I6Mtp*>$}8RlE3(w_m|`f5kq&<&ArI^FwPq ze9sDzf%Cazlfcn=$E{7`XagLb2R7YsJ_AQ*z@{5+ods?jcO0Aqjy8eG3|Dp?58XB3 z+upK|?|tVLeB+nzGP5`DJn7*NC)Oj<2lf7)ifRh^?_rCt6JCM%jH1=oYkE@~i4MQuwY28~}$8gO=nqJAJ1RY&K9zH0_CLJCfX#~f%QP9J*|bN~Oa_vhidWmj1!{*E!%`gV7kI@MRD`l?h?>H7`{ zom~1xL=jN*DuSpe3aIz$gL*+ke*$s=FO58+B3HR|UO}!jLP#VHAtWRuq^~5^rRvma z_Bp%xzBT6<_mB6T>)Yh<`XfjVsjwHusyb)y?^|oGImdX%JKizIN!)VnWqji2oWtXf z4+!fu>u<6Tc=FcYb@2cd{ri?Sw^`0+?Gr~r2t5G zti{#7SMQrkoKQDe7=Vqzuow!8k@_Cpu?jBMVQmB%c zA~l33I}p|L(iZW3H>KbJEsK~!M)kanL~rZepMM>VFs;Bi#>Mo}X&3f;=#>u;uGYF` z8f?G}I^7JbsbU-l*+#WO)`t_YF@RtiQnnF^^N%)s;XnJo-+SiH=X{FU*8O^#kE$y( zPdxpZcYfJzci#2QhX;q(x&kBy1PUs|cJyGdXdfC3o12?BdvW*h)vtKX&j9w9-Ti|f z`W+vs>zD!fU0mC_eg5w4)%WMHah?ZRq8!K}$*_eK$8`QYU=a;vpt0=&J;n_^k|mm^ zQKG@0(*QcCbIv*e9}3)D0>3_LH)%i;n5K&DJMO~0cb>v$eBmQ_?6Cy~cUT5cX>KwZ z`Sw`_{qT0<*rVrE^i?a3aq)t|ITqKtu?1ifPU$q7;KKxgf$r*?Jq1J=&pl^SRf zn4)1=jH1Jp6GW#+8J)D?0n6@`ojG}`sv9yu=kIjFjJZYi%c(-@`EGpBX-Su1jUrw z-A!L7Zpd|23Y{&rCH>yGf5Z%k<#OZsm;s&jpAl#fcxMj^>3_h1Nr?4cO97I|#5i!6 z67)Wi1Ob@w>K#Ut3{%Py7`%}wG8@>-TQvSlS#)t&uULeTkq_!HxDU`w*kOgE)2D3zop9P|HW>)c|Cxd>yhy zt`XR^P8`A&iCQNG75tfTTyS3z`(E+u7y$e(E;Cy_{l$OeZL4#SUu>;K&-v1Lbc&Jm zoOL>^v&~@c($G;lMQ6-gGs4M^!ZYYnWyH)h&%Lh5I~H}*%bYh*S0DGNXK)~wfwno} zgXgwT#>6TEiH7v`G_Y(+1}2RlZ<+rVJ(mboAb6QO-OUk@(@D{p(x|0!h8;}M`O;1S zy_ra_km#VJ106*R%4IW3K5`|g`&Ju@8(N)cAV7yO8(0az`tR^QsU;|?VGhk?ZwhU@ z0Zi(=xaM-6J#Q>KI^S~-txVJZdWXjJWVBm=bUJlr^i|a zCSB@2j?zoEi5dAmJP6 zv^$fL$-H@yYM$Vjz|bYMf}$=q(c!D|4r+}6x77{?6DT}SolR*SSQ-agAvp;oRVqt# zq@|Lwz5jQpt+#V!yOb-0@C*_FJG0l@F#GPC@*-|@G1w(&wGj)O2@@Bj+eagQN-qmFjGWFqwPJHDn zRc6fNz~?3H%;&F_?;WNx!%|RNrM*(O!lph0{q08vyD&ogUe8uaPoZ)BdXO^JN@h?@ zAY`k$4Irq~&G)mML6MMN0{@8uk>{c0Dkw^`4`-K=MUDsgR_~L<47vZ)e03lWP|!Vn`kkB#TZK%(~N>o&}C*Jm_=%J7hq?NH-)nH1Hl;S4L(89Va zzX_K95R|N=_tX#~-nSxISv{JGwX>w1R=CoQvFJ=jTD|`QbC{4}?LwU@Goxu$xMk{V`wYRRJL_cyalOrPlnDq{d zof*)+QVAvZ5b0umJh^%Tyq=q9>Y)@yNtsNCwAKNNn28L8Qcl^+W~FuU&XP3&NE|Vl z*(+rD&O2x@<)u4QmP)&Iu-L&wi#7u^9x*=WFb^ZXt`i=zGBM9cW-Yg|X3S>vpc0lP0 zP#7J^a=5U0v+qAuG;P)<6(KUDIu*1!w>85md$>T41j5Y_i|ij|3=t!beECKHhj zgBQ3N4j$jfH8*ynG5bY2kwAE=FDI;z_z+OTmPuu`=W0U3j{#l{AKQh$M0 z_&Npvzst+a+Ry#ezj$bR=mYQaah#x1pr$TXjIJ8$YT}VJ9$q&N%V_G^%`Q>EG)>y{ zoNg9E#*i_ob>ehEr-7ma6CGCyA_y9~V5*cJjXB~FIC-jKGS#meOXX73W^o#ZQi=w7 z(6EuplwvoSm+XITin3f0T7s-VH%Lecc#eRK{`d66n2n}c|8F26eL)%KykZ9^sdPdq z(mnM0ZZREBs)VeIafW*bUS@ruk*t(b1l_673GlnRLnhdm-#3{C-lRGkuJgpLts|Y( zLH9DCMFpZ^cPMz;+b-hV_6Qrvl7x3q$jgm+=2|PpLNEo$MkjNzh6JkN^5}TZ*#TJ- zCpHZ~|K>{=3%vrYT899n&BwSP--qHJmatmUJdyN!G7r!@>Ch_k8x3 zPC$F`qqzq_zxd9IfHr|sDAkk#Z%v@O>HV~+&g_g{>lM9@0l%YrN0cl86CdRdy!Jxog;V4Z2S^~tMpCI z4r(tv4331O37L5!e{4RQ; z&ER*)>6?iuVE+MwdfuB5^c=md4RADq3j-sR*b? zPd(~3tv{G*;H|GyGv;*G{WCI{=kGZ?zH%P!5sn;yN3Yw)i+}w*+OTFfid4??sdI|n zY!-7G8c3JhoM$y;NjMU>T?ia*Yl7od1AhEXyBG`evmt61Af-WUsm4j7vuDD2KJ|1R zrc$?%5Rk8Zojabri=zLCWJ4PkweB-+hnP1yr*4 zx}c-&6XjBks-S)8#^0feLhp>{mY+R$a9jfN!Ycu+qYn{?h}`YnQW#SvEwagbCS>t}zMTY=ZBTzt;yO={>2`HVOZM zWa+PYB8&`}Z;ps)dDX2?oq&yMW->egtr>qH z?)b`o;}iHYv(=A(-?zVQ&$ zEnVe|#ssdqe2AUHK*?ZtI%5QAq5zS}=pgx&r3~<*kF(PkS=;`sut410NR=zG;poZ`(7BC zD|fXc)}HSy29gbecoxJLqknLBR%@`=g5`%eLMfXYTo5ICg^f}U{TU(>i6jHoSqW}y zeH}q;_IK+Bw}L)QI5X65z|iLVloqB}yqFM{p2gIVi+8W}jLs~r+r4(5HH?nv`=#gR zd(K>p*^#g2oh8#UskKOz;*~x!JajsYKxZv#)cZ1~0|%XR)7p37(Nx*eDiOQts*>tYrR+Mmi^x9OTWIgfUB>|6!@O*J`-7kQ3D5ne zJbUi_0gD!-eHg6?0cVPu?ZP)6jQ+ygR55NW(56a9qx@(b$xoUWgd02i4Ff+@Mt5*B z1Elj6<sh+li}A+FoefGGfj zCmeJvG{$TFft#U#4!yV|#7aT?#E*a^2;}wW=K8Q2WH#s>GDpQg^|h zDFVx(Jr&Z&%#4+3o1u5RqXQ(kTd&QavR{DbErLSD1eNh+&_41)kkHp-W=Z(|heGfg zt+Am`Z8Me5J)2EZxG-rX<^VkYO=A?zQZZ7;wC{r)<2;jVL5 zDH!aI!~}57D7@qv^Lx1g`2PF77Vm?{9Dp;88WrasTH>jn{0SET`(XeV^zk3XS3_pA zxj~YcPue!=P*mbrn^JKASo}!vF4KBNuVVo4VP0l7{op_QM{m1&@6rE=akxB`1r1LZ zHi>dAgVF&+1nmDUkK$!u?{JghGENhu@dvj>P;u+V4pPw?qBhh@+OKaiemO|jIRFc6 zZdbJB0GRGYhtMg@Agpa)m*wT0?ohdr87#SGNE*0)Zw4nbpy4fZdc}d(ST;x|qZ=yG z`Vt=U1S$&ea|mdi(9}Q)U^I-b=9VKtl6v>naPg`UFM8Vn>QLB~5eDkQc*4_|e{Yp^ zt*Jzc5jNu@8eRv~xlZIWE)9m~K2WgT2JFX#!5urJ;oM%skGy^tmkujVZBh>q863kZ zhccUWTRYa}s$v+azaWn<+Bi9o#S~!@#Oc4?XgYE&_Jcq}r;l^)`M|$-v$co~$@+Z< zpeh6;P@M0stHwz(X^p+JBy@T$8mzE}-yrcDkIsDV%mDPkKOKN-52sY_9e_n6g$?ux zmh@N9Jrp1Ky8_V-Oc6je-#i<#-+WNr_ZoQg{Txkc4D|2RQs{eAz#;>9@99;iGo zdZT`Q9WxGUpagx8@d320byiueW9aJ!w8}k)Bx7Uh9NE_rYQOAy?$0kWc#2d8Imlc^N3k z7AP7Qi&^9fa4lV_Qg;9yEC4XGZeFhFbqoN050{yp|A&A7@BZNQp7*>XN>${yUZG5FlB#f?FTGh}9zCJ(VCTo9~Gcd7moS9gwLNFeJR3S*6Bz zhe)^uE}-Jm-V3ZY5*HIF2xKvw+DN?iJqP&dH|}D!3Yr2ek68c_8Pf3ANwuZZ4o zhx=Rv8=w>n$tgXb%Ie&hQk$>Njs!tPDTU6ssK-J7(H>n($VWzvEKKk0n91iWYGjnb z|ISn|elb72rL-3Y4lGS1kWX-bzyOB^V|9_RLIRR+WV86Hj5fuI+@{tDT>4t+*|@m? zfEtD}3`z%T-%XAN$JNjM)M*%Y9>8L;_tBpJ2RT4w1nSiLlXQF7&l6LurnG0RWDn*1 zKg0%Ix$77J{2nedi_iOvkAL?Ue$w;4vF+}DAX_F-;ZSe;gf;-hYs|H>Jje`)##~T` ze5PEPm)>ieN_+#9_Z*bdr4i?*5!!bes!)TT$if}~bz^ooJjwmQ^Uv6hvzK>qgAT(u zS1XWR=n-=V7rbhX8Yu&*Qq_~v;iuX;OMuNGzZd4iltSS0_uSXARXLB-x zI)_L+^?jFdX`{doHSog~or3R+AZ-0PP0s{5Q3k9uxREl%MrUW?I6WF(-6lNyp&fk6 zUEA0_FpS{K*&aEA{Z;Qd#E<{l1w3@F;<^)t!Km)16Gnfd^IoEn4;pc!a51w-&xtZ} zN?U@}j;VJaLCs1jj@6`^apEjG7YImpL+4zxp88^>-VLV8={jSPL1ycBjB4(by0ju4 zpa?LBmd<4rKh^{|`_JAdsfb=P%<$Kq@RP_cQSLaUmT6>j(17#f4AA+A<^fP?7 z{VT;XsH`^BrH?uioil;&(kl&QuVxwrvOn70i9}uTo=pP8{{Hp0`E#;;yeF4xBGtjy;IfBLh(Yk(@=pw+PQNodcIh_W?kU$P5Bzi*{9g~rU4@Eox|K0~>_>T(sdVRC% ztB2W{15Hkb!AkOb6%};=lTufcby25787HIwP^Kb9f~~b73?$gPdIK72W_>HsJ z+jiInK^FAbA@;!%K#{RGLz(k}-2m{tL}O{0b%&@ZDiYWY$HNcop+2 zPyUQQa}lVoGP95B`u~2#)DRIFy~hJUhOjk6V@WNAeoVb~yBWcX3I-e9mR`B*7y$ep zFEdLsJNqL)^{@W-lNUbl1~*@Al#w;JorVlLHK@@KjhYUCD4^C+{Sn%K5Q6j+g^bQG3TaMd5umq~Z zL&lxfUIv}t?FqDGF0e&lRL&Tx{z$d?O|4M~^o$;O^D1#F8rooZ&s!(F^X*Ig$xqzC zQ?A><`2#jpaU^OaEE=vkVY(um6_ z#q|!=5J<{$4%jg`1u{Cwm41Sv%cRi$?uI zb_Pt(V1Ri~XK>H;J(isT(x185x9%K!>a2)4>wBW7=G+LspfTP>ofg3-o7W?|O)OeWNLCjF`{8%Rs%hi(C^)(vOyA!Hekn7lC!}!%p9Nra zT-E6?x<%(-@SrRIOF@+=Mu7q*$mmovX$bpgn4+1Xh=xuYE?1BKQj|xGK6+Im!e{~n zG;H07rrH*F$CHXmpgZQj)A4q?)+N@2jC5~IgHZld;;cI#yoA-rsdy>D<2(!oz4IKY z_9Df)QraCOs0j;mhP*%Ri)`42<8c^jF$@dG&PL*a*Ejsun=0j30$0j zGP19Gh!#IF0_Fo=`L2EZ=xcZJu7_9HEP>c_DrgGjl9X#+{XR3s=pFi*iXm>OkS|xe}q5Piiq@dwL?rIAz4GYsCdafSH z)86s5CQ%VtJ?L4w9b(EMD$l$ZQbC#g9w>MyFcjyWGuK8p!|wgNc-dEd-DB04-(zOy zb)z5kS43oI3HzQN)xeAu77oTt3Z5jI%p{og-q+;{U&jF8fABK1`c+^2g>U|vFZ;Z| zcIo~1zr~O>GZ1aXdS6YnE54>Dxz`y9Lq@=4z_RBs#S8#IMnl=ylwoD$HalXSIvQg3 z4&T}0#HljUSVHVV3pzzpuAGRKj$3ASj#}1*J!>P8NyFF;EHuH7zh`ju7%-Jr(P+?! zFi7goLk4foeG>?DWj$E}eU~{YTzz*pFr;+3M$|vhD48NkcY_(%eZG+-A;WS$J@bsj z`*TCaioFC}k$&&2W?Fy#{QT=M2QHr4#>?Jt9+wx6ia=z62g|MuWKj(IOc`wX3f{Xu zlhGqTn14^E#mw-*1UOZEJy*SKIo|b}6+ZBu31<%z&%SdDU-aw~xOT&FVZUJt=H3Cv zl!5Khab{=0Ll-K3?2Y^QnK$m@>|S7JNL;ne)X%(k8UAA6itKs&%%Vm%OQFLQz?z4_@N!o(B^LGfiFYj&viOYwy=B zo*{?bYSSdd2~a6+3PkjBMK8wB)=MLJCU(sunuidJKn76f8`MtlJ_P=iF0($)*KMv2 zYBf;n1a!fz&I*sS&U=p@dn&@XcUx-TC{5<>2<9-rv=#S~yU!^mbWtp54|qOQS;RM^ z_o1l0w|^FHN3NRywWg_nM*9`5a^$)8wF@w(8C+n!wTjv%-0|^WwAwgz?c0ake6N{J z{o6m9uguIqgq7df1gNJu1~Dl>VwyDc$Jh<94BThR$6WDRfMWpg`*4}r^bh~e-+1HS z`I686yZiUQ_w6vNRwVq(Kx>s$>Kw5Uy>}#@8ikojBaom&ApIssIWE@JrJNAIoCm)} zLm3K+C&tkLZz{=S^wOe=64d`7;{`fZGdikB(&_y^$Of<$xf}UetkoTw6&k8O4pY=7 zorui*Onb3xDk6|jq@XEf{gEPj-FEM@F6Fvt{r>lil0_x=hw0Hz?Se8o8`E=kc7RR; zup<QI%>QFV2RC5!@FKJ;j#M<;hT<&%ZjJnzJ)*i;uE<0 z+5!7Z;PR@Wz|hc81s=|9I7Tmc>jMY)@n7G?&;0sDyz{|BYz@HGJC4nf)dCfaz`d*^ z@FGw+4jg_$M@!bAuc7O`aNmcfVAAPPaLN1NKM9Vz<48FjzCT6oIxp*mG#I$I%Fw%V z@+aLC)k27(>pSbGlv zK(cx3vrOvAzNVotbr1}F+nU*O!k_wwam{~eFO zhHo{q$MgYDh-(;1wAGZ+)=cJVHF52p zz3T7&g+KN!d+&eXox?EJNHsRmGH1#-&IW{=#hug05Il6IpDhDtXd8esj!2DZ>p5a~ zqW8fIiav8(tgt%lk#xenpw@$2mte zGT^+4*#Jh*i_V`%5!6uBOMtJ6(UK__U6i-hdjb*`iMk3r_2CL15@;3G8gf{$pTF8b zcazw`#eCkAsTmpwE&_}9$kgz?1tvHS#1eZZqA}8)f}gpu1-$Fm0>AaEmvH8q1y(ij z$bR6S8#eLBo_7+T`qXV~4vx!9Rvy^UoeJOesm+3+I3Bvx@H21R$G?B=E?)We%UCWG zCr9Aa&VcO^fG4IJm^74U>LpED|4hzEFfltc_KFYsPViQs+9RmSFx-tlYK;b6zOW*lpG=rh{o?s zSnD7~04JU2aK48lsTMxoT2$-C&VxK(>UVIYYK1_LpIa0V@O#$fZ%FoND201<{vsYa zu_T7rYk1}t{l#V3KK+}(!Q0L3qrUs!(Q8^xx!4%Azc}AxYkN!8CPo{PmWa?dG6 z$;IIHp`ZPcyp93D@6#nw;H7W)D_`-SzUhDd{J($U?eG3=Uu;$A#luL~&G}An_?Y#x z=TJUum<>}mLUg7hofN=nSyC~#XlzO%Cw^j^MlWgt6Aj8RI9Aidd|q$$s_*qaAx;Lm zj|`Pvq(O#;p!7&hLZ9wPi#ijwWNwnik%!wr!@)>`PEcQ`2dBa8xlT4+VT)Poxn0#O zbR^9MXMVB&-ujP|)H!X>3{twm>;IzzB0!30uwH@~i5BWID5qZvJN6j}W>OGkyljWIuq_ePMV=Cs-qF3@1cu(G)0ffaC7QU8R& z0R$#%*!IBSR8ybY1}=Oc@roba#mQ?7o9)?`yIb-$K+CFsdwt><^tZ zkhUI~Yg$|`JEQ2%H1VCNYo1sn9#Vk@jpq%GLQcIuzCkrF$^?3keDdM*I=H^KvmU0+ zK*!M2QfvR%MUB)IfQ-w)D8GaD6hmfC@G|dNo<8m+okyR~G2d}(q@A;ma^|+=IvIgU z&bXZKfvhH%#hn!{wbmIVwdkT1f}aHMwFAN0L7U1tBLgv1)KYM`zZoz2s&9IayZ>)y z+aJ{8Jz=ggGTqhBH=7(aY%E6hBXNpbd+BK?Ra3@=_B~(ohkouy`Z@*xzmJy`s~5la zYrf)V|K8Vp@!vXl*W2D|n`4Esv`><6KolthdY-bL&+YWNtPdT~FrY4%*gSC+yZMPd z$PlBDY!1>|!_M|a>@68pg;NDzYhWCigQL;vw_~jW&9zQ5quZI!9I+B~qrv2nby{+zm@=piP_K4%ES#&c6PnDXDhoHXxil(}HQ?S5*|2|Nz_Whq9DJFI zvY4Ie_0423q*KuA<+MMgG$j7Zkm2qp(+my3DJ0(0q!!j(g;EUL=6LClSc231*#F(& zVffGAyNliP6&ojdoj0*g?hK6v#9blUg6Z zhC5Dg8%``nEPTKR&QJKY_pb0`ufK?Y_qt2?sW%K% z8;;YPj;pqe|J-(LFA6r5z9`mCEK2FQbUMVo7r4DN zSjqa%1BIm`v)t69!woTsfrGjW`ua@rJNUOeoft_UV-P80 zJ&LjznXiN+o%ExX5zz+RbL+#n`Q``VNrdiLkN8Xo-S?X0F8HGb0(2j#7-u z^iV1wCBP%aMWgvUeqR8kgN))Fd)z6<4g!$98ISUf+5fE5xXhEA@~F&Rc50EMmiu~k z!`k!bG{mZI=;df#4z^COX&!8n~{stmcZeM0NK_m6`)Zom>i7Bwp7HCkq`=q~S0UFWfX_b1b~#)rXD~ zL)SSJloHtAH=McI@Vw91!R`kG!(!cYfDSh?mH{WXfi@*Rc(LOB7bZM-zTt2gSQJi< zJGBX{R0?3w`*VY5AiN+OBf(k&t7ZtJh%l3e--iN6q8P9k4Wj|4wg#+}|GeYc4P13% zL{vsbT%XPakU}j*YbapS_j2EZVy;Dn^ZoIisV|52NN2qJzU~w)?Ltz6cF+czTCZqB-3lhmxnCYwmAHtR-_m>H< zcgL=U7t2L4U_a{yrr&xj(pkF{`;uxSJ!tTf8Mq0hOX|_=ykfdn7}=Pj-X}bXAkfGF zpjiu@wWyqRG3-2d`T5`RQ@>>9e;L62W~w24f?N@?bMLe6{1bOR>GpqI>vWx)N>tM@ zXof>?x1A~pk0i)ywP9y_8xKAH*uk&8>W%-w3}5T+SBwEUW&l0{m(l_IpZBRB|H`-g z*Z=re@0t$ZxV(JfU>J?epbQvHEpNfLwd2Mn>O}fEy6P8!RW}sF2$&;UKd|iGUCIb# zpspIOI(>+&g)vGRrd(6Y-SM>6I9j+Hb1*W2jAEpsAQ^&w@pBYOfElg1;Yim7xC332 zXWa=Z$Es4GR*8n8$fjs0PWJRj*B*4Cq^byDhH0u?ydxzwZbj{0X-ETP14uK|7&D?# z+t^OYf-?eo{ceJN*E4CP7=cND07mcK=$jnHvN#U67I@K{ck%eCgr}hz?J&70GG2+A~ zFb)P!V1LhBX3p{$U z;;{>fgBACAa7kuLy`O!L(SdOc4>RN(UlwDq%)vmMR<+__4gpF^&S9qIn||L(u@HBGxUF&0qv>&_S>X zjL3NxCAXx$h}YivAOUeqNN zsT7>?H?_~1qS0r~`WgXBWl)~X#MjKe% zF=(zzstvWtE>y9C(=@F`tI+}8mA#Guz(?>hv%`~HTd(=m|L0$S#W#GxC;jZ@cfaRB z-xz9YkDGOxve7_Ilc>BN;qvF)4aJzN-a2(P&?m7aSX-^=#e4%hJG<)MXK-!FIZ7!}oB_0e4ugGGobH5$L zM99;?0O>AD1kPQxz{}q7I1V>QG(8g|B}J^dV)kzQZv!JHRv}P-0jTDl`v(n%t+C*7 zGgcNjx$~Be8?51yGB~ir;J|Y>0td;MTI)`knq#BK!+YGP;8@a#Kw@Ci@Z!lym^G(PWzC-HeNIE_zx#!0;Rt_7a{qy_G} zet{>QDLB1TaAwnSVsl`t=SNU?Si$;MAwBOsLm>S+j`e~NQ?U#*Ib(Ys;_q@NwmM&Tz= zhXepo9L<5{=y>!!`}w)w{4XCUo2R}xb9n0$k^1kKyCZ$gRsmcu0!j%mW!k$wU|fuV z8aw&GJ$I$AEB}pu$SyOR%nr}^U;FVN_|~sI`N;c!Gndn4xMi!2G`SAB4~3nh z08)OUK_iI{BN{MLJ=(jXiCM$o21LQeVueIOt(B2QV}JS-ea@;TDcYURyvex|Xsq+a z93#v*)@G`)k3jSsx|5B79dUX`1XTSX&`_^!ySY=SsPV@|gGr*-PtVF^=^cV9`3S1Z z^N9GVcN3(8a6pY;=4ysU<3Ef&@22KQNzmd(uwgy_Zxa0Jc>p@yWRU{tPiY+79gB4A zz_EEa!B(uBCdQ(H>`X(Z)=9>|(DSk~!gJIgFe4z!2!uHvIShCt8dN)Mj=fAgc?3d$ zECPshY$x!HVZweF(gCn!-TUbij>jKb;^%+p5_Zp4>|Ee2@7=_wKl>y; z?YXD$$xl0pm)>_0FL?4Mp8ljw+p}Z)POs<*tRLR^2 zf?kw${ao+a8SC$;vgQlqx^my8lCF$iC9G>rk+9y6`t0ja&VZv;R=${i))jttkk@}7 zb6*F7bvA|Rz@NY?Q;e3nfYMnD>=>xA>CLzr&$K>z9>f!&bW7diahQz;s5S^|VuM$O`N|vcwDi>^EJ$ z{@I`Wp9}VX^`m{_-~YdBnkJp|{>})BYO4gl14o{Z<3L-iRHSRJ2?R{9^mPmXuE1qx z&9?2qPkr%o|I=^3^2h${SAW`b|J~j@-gW;tSVb|_!p5wk?=gv~X5T>i&duQ&*f@0t zxtgfTWl{|-6SWRlEcW0d4MXWIaYb*|+UTHE-sHyg!!U4&Po#zeDR1vRr&(B;kYFCw z_JZ1RR^A6Nu61rdPZYVMyZ(fJ?efiJI7LrM0P;Lks&=P@eTXoYo% zXpk)dbV1p`sHmw!VHpPak;vS7W0Igyvq{y=$cN>A6ms!E!^lR^PbKyfc`>#VSz?m2s6V;0Pjv<6LQq*E3nZi-k=_Uj<2E? z!zLUr7=Yb5x7&3Tj1*6tG`#gyOZ@T=UBv#`2|K49IVGFWD0|_~cN>lGlTMSou^Yis zOGdy$;qa-8(y`bTI0v;p(?x0JS^<>ZJ5z7Pp$fq#2tL^}Shp$|0K4K3a$1 z&h{?M)%SEkul2qf=91U0!6_7MXhCO(W^&{vCZT()OqLv)AL+r+QwP%SltO#qW=J2f zci{j}e%YT}J@3o@(r=jAcbe@y`b25@``^1<%fkP$|AT1_qmqGYtsxo%8Ta)x%QBQd z5O4ek@Rff!FEdMbKQLRo^>2RlU;VrP`QLrVSKem_Z`ga^`!0`TNk@YRbBiYW4=rdc zic@eUCAlv)Q8qUir6moU4>XQQXHNjoJJV3{9!P8QfYRA>6ZS}IC`TLN&H~wWPu%xJs zdyA9%qDSJ<_X{ITFOEs+p0q?%<*?P}n82{VJE&xh;0;HqYUQ3ILKPZ}FiAX-DkpFQ zKs<|apjtiEin_J+o&lhg5uIQta&_mT`@p=u_1&-P7D&61$^8XU`KI%MOk}5j#hx{3 z6hb9&F^lZ9H^e%XqLi7|&`Z%Q0tN$_6cSS0IKcFMbkqR|@BjiP%*jbaNo`9L<7NVo zzw<1BKtC}vV$l~=fVH3DRJ4m!(E(bFzm!){lXs}-`Z+aJJn3;?e1WoGTd$iWb3jA9qEyb*A9iZgRWU196=H9)YdTFXG2 z8cv?rgAEJj%S%B(d4A1OH$r*kB~>ro^c?`|JV#s|#AKK{>MuI%Q2lWKO9GKZF_tuC zDis4=+%O^301Aq36H_MNv61EYq%DJk4Vf|;*#OO_ z2m>}2fDeIR``JtQl^?l?X+LrLj98`CdTxP{N>hEkSRfMX1cH3egdrlO=m>-5kaT7g zz_rvGYi(O3yD$P|ZnRF_=`an&b?f=~)&ePj04KB287vA%!8%)g-ZWKUrmdOBW`72P z6C--ypKE47?{$Hs115{qog--4t(SPN_sZG{+dP{9=-ZJ18Og)Y!DLD-rpyfitF$he zJrZAQQruXP!=s{v1A9mIXGG@QO3mX;|(`G?~hKO@r~d6MxcC+nZ5amocHgSnI){{ScY`xDD-jU z@Hc2bw5ifYmNj$KZ5QoZa?$7Cx-!=>0QdvC%xq<5Z~OF5c>XuO<(Gc!FMZoreetiI zc;MX+PY*vd`LGQi61n1jhz#cZHJ{$RAY0({&9|Z*9HLl3df?QF2?qy8Hb7J=DPS7N zR1Lhl22@Dh-XnKcO|dB&=$0C#Xpyy$wYLEvWK8Dh?!#%vy9Wjwu2W zhD}f0-yGX$*f4%SGI6aXE@xt)&&&i%;mlF8N8mu3<5C)4G6r@Kn3C;xO{;D#0V}Xb zY;TMx0N(VAm+?#g_7W~WJmJLEj5It)nyJ=R*HXMc%~*wpUi(o@pt91_MjA$OLsD zuy)KTaA-#T1OSv_)S2PCHQiVCXu0o_3|J{JRkB2HfTL%Cz7L85-8ecsj)395Jv+dn zQ}5@oe;%ESnfAAs!~TpZea$>|Qz@3g`%tYT_p4MP&kB$*3}XQwOTVjr9rNeweujZs zjyaz#fWQx%;EOFh_P)z_`saWB>QnyqKYs&Yf62_=@I>kL|GT*&D1@R!!D}Umz{lGVV z?dzXfAAjJ|d*8S3rDPcwa8Z=Kc@1-ZhH1IN_Vw4Hu9j%Iz~)xNG>yuqvXKZa4kNKO z^{fLbgHW8&4Q$=hoC;n>l@88zca^r3x!&23t<8+z;DyGa^!x0Nj}ZbgITV9Qj7Ab22nZlSchDMVH}t*) z9YD}lQY6JM11_D}!pq)t9{Y<82FhWup_gs(*$b^Wsbv}MP#=94kZQ`a_Xw<0-z5`| z1qE*G-S5}~@bn?Ef??H^Cl{sIpXq2e)iSV)#C?l`Cy$B!WR%XoG&llbhO|Iyz&IKP z2j21eL;S+O*u}ek^)iOiaPm4fbTQCrnE?gBP+V0X>*h2Tyq`#*O-dc9_#u=ZrXEFq z(S>8J4;IoyOpOv|Xv|G!MsUWxO=rhV#Qb;}2#(Ew)x@S!jG}>}=2WTo=gQA&F|?0Z zGB>9$l7fuLM6DB_Th20qUG(}sGF50q(`QKd7TPyyWEWcY>4W_HI;S|qc$g4WD(zyN znc+?V<`6ZnNV~5?>NDp3Dkr@d2EL;t*qU19WKHAVbZ5))u7d%@0O~yX5r@w-qapZvxD<;Q;TOJDor zKk$=(^zQ54xqA0+KeGSuL(6fok*@qIvNx0{7%*V_s;hxZOPsiRiPmU@GEAv?)zmBE zG;K%nYQ`v9ty-Bwrgd`VO6id4 z9eOlBM`gj!HzTTUqM%u4En}s&rrij;m=aex7|WJA2+*_Bm-89aUd71>>X zU|JJ0#fC)->~9Zv(jx}|nBO*I6l#jrx;V<5EJvYjM#^}1Bi_5XMSztS3I-0r9DBN& zt0*`;X{MIFbijOvK!VXIq+#c@;lx!VqVEN07-AIe#IxD6Uu%Va2%E<;d0wS4)aqX{2 zw$$dq5%@_mU3A!d6K32iT2|Jb>v*?l7|VbuD$g6p+7y9yihT7B`&l=p8vyEFAfPf& zXiV)J?aKt4VVMCByu;e({j;Bb^v;)m<}bp=ziei|`LRIzAH6a&!w_zkec~$Zfy1>w zLXFp21jccJP;($w1IU2>0k~sYzT@ko>dMS9GtU4x+0dTxQ$PReul&iM_=%_d%xm9u z(lDLz8*U!P6DQ0wVXHl?rbNBCftP;5E76t(qc;isxCv`z^Bhwc(&<-OIPugex{-fI zv6}Ll{pY|avq!fXYCS4_fxCK!cZb?@gpGzgk;sIsV z;!|mjJID`8Dm{9TQvoqKm5L&!wU4V?09&X45)kF#mk(Uc(ps^n=*j z3QS>hy*I%UzlY0AC+9sSGA}3pp3Z`Q%(ZotOuRP|yDG_Qa(-td08DjqD>B9=TCsn2 z1{o9Pf_wDMpE*4`-d}-trr~6xLvi%{^EwZ#l>$0tSp$cMz|K_#cRg=`>z=#;w8Y_g z4lf!?VSe8X7D*?aYX@vbN70`UV^7H2I)}x_xC-_C)4N1A`C_S z?45s}VhjnQb@ol^Djk##-rRT(X=IqDa}##1eeUWr|LKpt(>G51^HR!x0`P&41;O8k zUJ=EiE4R1mj+<2uw}}Q$r)0^KtH(fSoG*<`ug6zAU0G~WRgBt6{nD8C%UpHx`U{gW zbmc;OG}R+5Km$*tut%!ySfGS;{YmD+Ni(x$CUcbCxM#52T(lmNn9AJxp(2COTAi5$ zD5_3Tv1W|Wx>J(P<j1IIjlZF)+-lM0Ek1d$a0ZY;QMUZFpM0oMOv2;a!9iPy}{I=mo+6%M@=AFIJ2Vf zyCYUNmGXhJK3}UpKRYS+?yz}pJ$2GqtqykSw7bTlx1Ltly(53$FW26g&$bgx7`Xqr zEy+}wIy1J;7WTE&@3$}vC4h0nqrY`2KJIJ3?c#l(`)A)|u)k$yZw0XTu~6#w-?}1V z>)!ir{hTM?eeZYeAMD>y%Fy8zOsT(UoX65_M5_&uKy-U!2alY4Z2xty`i-B$F#tHe z{##dOT4rt@92{J|y}i9LP16nIINtEy2OnAd?0@~ulW%^_Z@lQ$yWjJ1pYTT?RsEvJ&qX_@7$>^3*{lUI2XM2RxW2The|enu^d zB#tQTL(PYJ)liS3QjX}TRf=SD78+@NgYubXhFXJ@_eLJPrk?+`Di5c@CX9?aNRhV; zAQ2KE3fRbbu*~V`5fPP-g548_ulV=x#bQc$0`O#hx=kE}gdW+F^>6_UGyNPG`bT#F z0tbC;$|3`=td5fo)Myxez+N_d`rtTc6nu3j$NOa8b{cJJE<)Cw&WTJynj&!|&!N{k!8P4|qr@s1HEt}h68Oou=_ zNI-*g3JfTQoEpZ(0#ln1X>5Z3NKxC z|2dbg>J=r^MJ%V&{+ijIhDgpZ$fJ?A8LSKYw69@&hOP-n@be=`^->QoKMHj>8k-xU z@zEKu4w{`kEn;Q>LXO3$y-}wRNkXpEU9Z=>nMh*@KDrBs<3zTQa8JzAs*@?HWUuF zD9+|Woob}fW8~vU3_7V?Qm{Qb$*wh+0RjK68@tvhbc7szG>#)hfU^q7CC|pvRmOER z9YFex!S&jJt!JcXH*A{7R#gj5XG6eXeXZm;7)=#iJh6#C|Ksn(#xhX^A`+yONja+& zP1J62M->%Khvmv^h#e5!n#r8+`>Nq_I5HXrI3`crxfpSEthj2nj=s9Vw{G{dudMb9 zW`8$R%e)D`Q)FP%3oHZguD}PQV6z1K04RcSm7De&0su%Cd(r4%y%?sJIK12tQ{u#F z$2GT)xaLUyANd9Iz_R^)Re(hj*3w{ z2aeEyD4(sW0pa~QdJH*w69_29XQ~}Sz5Jyf?RUey{(VMS>uGB-i?a0nnSf|d^xgqr zDcCp+sIAR);dG=lU=aiAA#0(I6lsEVGPAtvw zsc$%kd)|E!D>zCCR0mv2 zBn|+!_JxFx0Nr~Wt#IJ87zi}n)YcisoO|>!umWy18OcRpERHb^57or|0So{Za-xxe zUQS-j(8O%8t{((W5-oOzk^vkp6H^VK8n(6**W5nh%uO3Od81+Hv;#E(6l53C(K zLrjcFiKY1c*#V;TDh80|pB*s&e=FRy;|Ta@@R7^3+-vZaoro0y}36*WA3o)=7fr7KZ7tA;K^nvK_NYEN8{plBuVmfy2!+tdt9+M+tTzou&!HI8x6t49HB3;{xY*FYN#7D_;K- zX7+W*0O0ugu&?j?zONjA{4KBe_%aMXY!NrZN#jL`-WCf0F!}+y1EvGY1j?W&-H1-z zUA?TOWN!^H_Pb|vLwcKxI!lGX1F=2;qMy6yNna;p!!$sx4Z|=ZlckFZM%|qm7za|Q zVIcLX2tSl3HUoQ>H>#wWr)A{U!2|=Ibp+MA7D3NdTs6;Xtx5nyaKuQD^r?rTjs}|= z?tY-*(_j6591M=wFd!&?>uX1m+gc^f{IH^Cu@?rW379^pXy({K;+I#zDGiJX7%B{( zxY2N_$?2IWUPX}6lKtX?&M#_(`ygh5?_)5-)O)h`DA9n-b*UPw5CQ`n3m6`c!224o z48vAoZagvw0%pcWdCqR|pi?jDe!E8iuw?v=!;|ozsro3fz3lHkvh@I^$Su zJIWXs#{wI~Fhnq7Zw{264+rWYf#S4khzYoSZi0tn_wk0k{fgBtu)j+MeiX;XhG8h$ z109$ey>&E4Oo8QLpr&I$!`4a1$?FSFoGLhV!-%b`48tNZZY?mi6$;qpupTh5uA*;xw(Pm<%-8Yu%9>H_wv>AzWgg5yX6I+`=BMh z%gXfX%#8=t--HM456P98oA*5Z&j0DITWdUjJie_Vw=m*oS_{N9sBT03RdQ)BgB%CvLs@>MwJ*Z+085O*vQ6@Dv|) zMKSY?MEofS(rO|tI8+A!IyDGe)2Z^|ra>cf1WA&gpASV3q5-;*ft>!Fzg2W^#&W@k zVEz0N2kjjMC<0pN@7EDghZNn}mtjy7BSxqFKBA{R1yJ~JYiF8A)Z8#fM1_|@dW7yU z4VzhTkSlDV;9b`*@K3(uw{ZT{DR>@|0r7yP=zR&wxc)S{EkuuK{oNU*bw^r|c>iSh zU`vdm50??Ra{#VkoH&cO^yqZ10!@71T3>yYX}#w(hB37OMSl!fN%8Y{0Z*=JxM2&4 znuhmIf%DFmraO8cf|3}HPCo3-h`hk13eOolGQ#b`KY#;=TBL-Kj@lBdDPaw8FIY`6 z=cWhgPuw^|pjAj%$oI-pS)dd$J3ero%K&5}TLG~$1SAAC?A-u_DUDFI*DR3EW=Sya zk?By8e>ndfiH*|*r>-lw=H?NnZz@=vboiJ!ycEclp*6!$61C^^!QX?~nt_qlqN!BS z!90CSl@In#m^yQ0vUI-Y${FfE(u}Rd!85_}!)$2`XG>_F1A!=|s!~i*z<>cLV?n#L zhqLbowy!=p-SV<8x$tp+?rV03(>J}tJ-$7&ywl7c190$%&GGjuGdG|7)Z0Got~>Ai z{#xseF{jy-avRuf6oTW$j&xZ~!>|}}?&8J0*S_l4|1SW4^B4deUmyPUV%+dqFMY~) zM%d?>+m_4eMpp>;e716d=5&6HfS~$i4&&(#xtPnb$me!JkU7dcTtrPu1~xVcsq_=d z8;X{nos%4}yQ!(m+7TguhE)AG8xnOR6&V-{ox8hZs_S-}j9OUl-jV~0T5Fts7(8$x zDlXO3#pQ%~n^L!fg0NcoyP1rHeBb~VBq!Eo6j%vd-g4ac+xz&m*F8p7pah~y(XQt= zX%lD+66pj|)))1N(>54(4EUubuq9@~i{pGteD;>%d;kkmUw^6Q`x^0UREePqgoMG2 zjt;4Md=n59C~#w2mKUlcgc7srgJ|8;-}3cwia00LKObn?(Xd7u6~Hy_avA zQaom4EJ|v9ioSVA$N0X8H&49jK3v~skXSZo=tziWZ3t~H#w zy4gdbF=FFbFs+#K>eU_QI=d}l0@M6yu}d@J<+>?@ zFAx!ITqNBA&nWZ$tt56IJizkYL7uwiw&~iJe)h$ee951^ymj-_A1a0)1pL1OxMXIJ zo7rl934chh%-nqHGj98|J8!$^`)iwSO!Y(QA%+(*sTxb(HB%ICIyN>paQ@=Oy;uLr z>yH7z@%4MVHa`xxefmqE`738XH?X4fH`Nf6&nVO#qfAdJkSD{;Mg!= z!}*?z@jkkrU1ZmnQ$Pek?5%0 z;dJV)@r<#K6r($8G=ecNs8gd(A{&9lIAE{^!YY<~hp3kV`@1bqZl0O0ddjEm-TeHg z?A`Y{e{MN!ow>g_et5a8uU;$`mjPTbv;9A;(f)ty%FN9tKjXGfyZhEVzkfAR1lTWk z!!%V4L!X37VC`aE5Q)vrEj)Jq+}>-B8Gz&K_j;ZFMBMR5Ui92w+*|J7<;B6SQ;HZg zv8-qSPpXA0C!*0#_9$B3n@+C^^Q z_wbsnh@2UnZ5Mv2-d|;k{4EV4Izn?F?Y7k$7|o@A*@ac>?@ciP-GO#(K>u#0Hjds; z>rc;Af&qgMSfSy>e!;tLUEp8*(>LRRt2a==ubLe!*rPxB2n0GR4@xl5OOD?|M8#PY zJlrsgB@Y2S%M%MDjg5H-4xcF@VIi1kTz7!%EoL13F(7HDE&;f{O^8jREIcqDEjb6bzYIlmt5hJDLSNS>EPFz@o5}b1W3iL20Ux z!)_TEj--_cfE}9a4eUB!^6bEka*7Le13lNSN+L@54`#n zyZaBFub1BUs$qHVeJA!YZu!QBpV&#up<%IIurY1`;eb_mSzs6lctXQw+(%?-sH+NO zpdPZF^1+3Mx))eAVZhGd^^R7?&6I1%;1IYLVcl;vI z9s@R(Qu7}>{r`_EGdJ&f+MS<%?_GC(@8NQJ<2a63t(F+)66~H5<36Vzis>yk$6_3C zcK71mYhQT`0FJNU!pAz_`wOksJ6L|+^XF8g_B=G5G-rv=O8LqufXq*I zB{_d?c7DbvJ6b~;P@w!{kG`>vO7Nj&X!O|gk7Q7Q*1?GN6ab8rZKwK0VVWW`fK)vx zOFD%9IsEJ%PSXKf0!!E`7ycq~MiX~2%;Z-Y6kV9j-U^f$=J^&Xu(~r-q zsMC6ctyBQlkaRWIMxacy8{F4j1F1XH%ojT_L~p+rHz{bH4b`{q(S~e+QID0o)4U)8g>L3m<#v-KQ_# z|J#1<-EYICM|N?T=2pXt!D1Dth|HGol1WfT7HwlOAWF-{sm&}4&nG?m#W;2Ioj7sB z?J;a!wVPSqUNT<+_ul~UnAx&rW&)d&neC}@&mS5k|NqF<%K)Ep&r|;S;lcimu5#+0 zqRJL13kFIC212#6QCUP_dutnyT{yS*+FyCY{{=e+0LRydd1dDK{Qvppm)vmb>i^RR zJgIjS>t#QT7-`s z<~#EvrFCp}V_emw^Rpw-KZQ%A-j%`>OQB_fKo0oXwK1|ElM%lUhGk1!j>LsD>;tGU z98`e4q{vXU2n?ApE2wB#fMBff0NOw$zonufF)+iA6l0M}52ZVrz+y4O=!TOXIGu^p zL&0VS1^`(cHGuF0XZ<7wHxz-R0|1v>VmBNI1{_3UnRM&qB@(ad%-54M0!H(MI8iOjE@Mp>HKK7d02?Krys zyinCemqdaSs!|H# z?r`ZF7=8EXwK0J^)3vUWxt@0}MPj|8MlGsU#}RhmXquu(Oh#v*wyxb^s*w@8UO_o# zVhzXCCg#6sVfp-W=ycbN%LsBr`zt5cbqQoi8bOWd+c=UsiJ3uRDI`)tyPd%T(`qW72MLK5U z#^J9U+n^)B>IP3>1VwbU1;QK$tubGni4~atZva+VU|BK2u+sWD*nx2~6C0xX7f5WF zVI1gb(+pDps}>l?BlnwvMIFe5V2lA(%ff|CoGeDbR1EvIVh;l@M&J;@5{84uv$IjS z=N8(d5eD-_3t&+k%U~UTjbw_=9gE_4_oJ%GP`B>{kr!147&zFzr`H*U79FF>?SqhA7Ke>)uojh=O*J|JzKJ7*+ktOYIw zwROQzG6Dw}Aw%`{K}Ru^K50;;Q!=9bIY!_^VNEkt$~3eo#}MehM<*B>ZbKD+WnH_0 z&4tvIh*UbAP^YA8axx-&xf4{RB3Bc5p+BPWjmY0Y$IY}j2o|7J2iHu>YU`5)6<5od z7tJ@As^R4I8#q51zV?N;;hz0{)Qt%qN$MVKl2knDE|a1{GAf4c3_OsAnjonh4XZSq zasnVy=(lTj@1e%^J|;&udX_P{lRVaF2-BQr5&V!r{)1P(QJdKj3OkLSUvGcz&*QzyR;1g)IN`u7% zlwAmGN~1ZL!j!NyA!=xyZ@XgGF#z}&xc=FX{L95SKI=A~8+MbwiOqq&sMBuEmew#J`ln9-vYiDtqg6 zda5~5lbCN9#;!;M)O)-$7eQphL)Iv=3w?iRsvk(Y@_qyqy!a6`F2~-5al!Rrly6Ka zNJy57^2#t!#AjLoX&31s9o=?vpD?!C~OqN!+Rs>0}~Gf1J>U|7x8gzOQA!YQ#HnS zZklA)!Icpa%;9ItBO`^O$&WI0q2V#9^iyV_Cf`@n+J@3cJd-yT;Ltc8W}9KOkfkLBX!hWVR!L$lPK%Fy{@f;B^cDJ_fGGFP<4R zm(r>PRS8VfQdX=F5?M#IH1d6JJNGLc%DQAMRQd-+(_P3!|Lt()-`P}!8yu>eFPbr6 zib|2GlmQ(=w3z3KXL3yI?5d=srlYo=M4Nw?(I&yiII!os3zX2g(Sa3bxgY6r0*gr2 zT$94@j*bq%Iw&C=SCp7MB`T%sOhKpiGFY}4aAXC}oF1`R1FMzcPrmea>}`#>Ho)&T zrWxqw=l~b)Kx_CwHf)RoLeBmY8txh#0SBByG&*Z8MQ8YX%wV!OmUOlTH5m$}UgY?D zQ<>}yW7Lh1IuAKV2J1*Q_eqtw@&EMvMh0k99=v}x|4H#4fr0?0SRyxxN42a4g>~=R zAJisj-DeO(0ijz%a|-C1ob?EGsmz9zdPJlKGZp83G8NW=fc8r8e`Oee29$yGAj~v4 z$e4mi5Ojjr0Z|FAJFdvyQhMOKIn0KAbL>gC;SStB7Ce6o_|!$bSzS;^%3+w$$LK9TY8FWD4u@vV_6WOFWxPl=wuXwuV7yx_>T!;Ix zGLB;@?2GG#z3z*0?|jKL=2Z=CL<9grs0mV^Zc<#!sbn$&3;K4tXc@)?DO3ZUtsikP zIMQ;Mff%Fn1RV+zC_Vrx6ATS|;l0Q)%XuJ}vt~rc34{{Z&ePXg)px0*ACRbZf@uxR zy2oT!Isza9jbf(W^?art^|mHpbHw$Tbw+^y7s);a(HiOm+;sN_4yVL4G~BqH@QY2fHttJoq56NjnC64YU?Q$vKNeaz0lbs zNy+n`xHcJr1rkB>UG~<^dg(KCAjom3(n3*wu>$XX00b-y5|j$iG2UkSCZ%8CXVO_0 zHP8u7r!&yj8GEf$3VkFTX(ohQZ z;{DG%3u1jzo1SS^8*fm9dJv+;UFvs5kG-FLAE`@#L#NjJdq)ILUNbNfwZy5z#6ugK z`23e&gI~Jp1n%2i;Y(^P2n+;v2q?HcT$PzvZ5Xvo=*p9U^xbgDdYHk5Hxt6bKDx7uI^O%Lq-+ZiFH@~cg`E)M#k zv32KEy3Cl{^tQ@q+guT>9C}YDM0Q<)Q4gS;bY_p(BtDCnscazB^F2lBI!Co8)Ch=7 zKns>Y_FS85FbyM5es*NaIV$pmM!$yE4oSyl%C9#%*WyJ^jgBbwyLFYg=_x0%+^eui zj14FW+;T4Qlh>cX7rgv7yyAvac>3kQ^_MGRNL(n11u8aH6RzKHsG}pcD_Z0GapzP% zk%}l*P?K{Sytl1YK;Pe4px5#9@6dbDC;R1h2OlZQU7&&Qn$C_+jQRiQ&Q;wMGu85$ zk3Cm_v<#NGwI&?}9dLrI0zwRdu>oO!A0h!TNPD5gJC>_S%!7~x$N;1?5C$W#jN}j` zwZ$D&{@KAM0VN}UVLggV)dQmcnRVu;c6Nd-i6Q2}&4FM;7Zf3bU`mUi3NX!gAg&Nd z7O1Ulz~lvoCkC9o{v;lG=zZASQj`*8`|*C3 zuHXl&QPJqMK#S{69eR)QXz27Wkk|``HnC)F7zgFJ$qq#8 znt^VJF^dQjnCsG!0V`r1s>)#vqg8v0CSHW}r`=)2Q512L3F- z?{Z_Los8OeH@)0Y->W}m=^_n$w8W?pz-B)jdr#u z(@x`iUVbBf@)=j*+wQ#`Prf)|1ThRjyFD%O)~DWzYtIAA!}hzA{~uo;)mH(vKrPtwgVjCK z*|dgY9A#cBgPk%IOsfg4PC&BVGeA|C|@Z6Vu*5CMlE}gZ99(?eT zcIlFu>NIAW*-t${l8Sa~oip!rFYO~>Xq67oz_zFQB0!F>?^8yEfhJ}53=p7R0-$gp zLDr#vcmG~CrjamCO<-IKelu1O5FD%{MS#&3tRP#k$GIY{?h)3Jsv>5M90tFdO?l># zzhp8@5ob?n7}WK!vl04x*Vt4@te2UrMCj#&Fk}WcP8hDaWgCYF6*Uc(hD|Ft911WM z+;$jv*nxk0^GW>ZojdsX+c&YhRdDK3#hI2kv406){<0hK(9Vck4jtD|hHW!!1+X$h z%@F`gGOakm4C#)QCyEtdQP9lSfIzuwLxG8<8C)GAgHdb;1*Uhvkezx1W>5Hh{kb7M z2f-%UA2JgB*8bhr*&GS$Xm*U>PiV?_EU_t)5t4)Day=!`_eBR?uKa(0r*nmaI`DNC z%)oS2s}zB{5fDT){R{{qZJqMs|2pVZo<9Yix~j$qFNLU3j#B`~ z*YD{%|L4EptH14+|J85)(|_|1e)64v^l2}xj{|sg2sEjzGXSg14b-E zwuD=xkr^qQ(UJ8iZ;pPGDcJ-gAa>=W?tuDMeg~VuFdblCxamO)-gCl$oVkoLK*t2p z&~v`MkKB~ePu{fh{OgDxDz{;tT1t93rWOHr3UQ*V-JOwLh~hTGtV%C>uI%?F$HNo? z3HsI;Y1dWY^!1KY*Df$EtERgFfMHWDnD-FasD`aH3@y=Yz-R`TqYQ?f<%EBJ+X;N( z$KQaje)hHa7q^|nFI>BUhK45{EOF1}3D?$&F@OfgsyG&{U@D1e)nLihFKPw^m3$5Z z%R{rLYf70TkYa{tm6a35_2WL6eH${#`t;Z~!IwYJJTN-T)~KK-hUB_B>kPRE1?gJU zSw|3Eo$5?8F%=^|od{wL_^i*fAV8>%&%@}ePk7`zd|3&V0}1D7sd0*)cT6aT8| zQ*9W>0g-`e#XUWa1I4o1W3^QRgIc-Gi{Ws2h;d_)0D|q9uiSME06qpTHT`(V%>LCg z?tS53|D?SWZ~u`C=i1-dJH*Xx!u{ibJ$DqFx{K}q4`vjkz?e5S8T~Gp3pox}2hdS> z@k%$EkqLKo4~(vIRsVVPiF7;!J%V%eoIH&-I{hn95v`$sfCXS_mJ@}jDxo`RO=1%W zC*RcfK!BbDn$#fZq)_vJm_eiXc<>QwLmo z`w3ik%NCZGD|Kth34bj)F%O-g39=<76~BdHH8`#c!)=$A*scxtkH9N$IF0}HzU%QN zFS`z({&6?pTb_Cye(~CEEWO~?OAR+KD{kDc*fOA6U^N&jnEG~u=GqhRLCaHv18^cz z)9$+Pj*$x^U5e-&05oDa)!V@UPQvTJtyc^f4U9Y4pTaziex9$wwT{$x5P%vWupq&q zOk&qM^o?s+>k!OvWXvjQ{Ya46308TSaj&+<@y4w+0u1zMOiV)x{Pca1K(Z$Gtl-mr%+ z+q;bKKl?#^>a>p!EDA2V0ihoCRRpYZoq*B-o%S>;_ia|XGr9rjK)P)x1|dX^*Iy?5JY|)SvIC1p? zw?F$7azBxBJg!JIYh#thz%>pq0(U^AWrkG(EemQmT0O)ytBM=<4EJ1G;$m%h#nlV^ zgQuLrm%Z#}eBQ_1gl~M>HF(8MC$YO#aQCGNPdW&kOw#WwH>@IA+6FQ@ZjPvRUbhI= zx<^hby=3ZWEbO)4K^)YsIf)jum*~gpTpdEnpcpvw0PM~e5$h4ZK}YR9^&)VZ+0zz+ z1pxr2md`zMC-~qLMBcxf<}^TkDvV&IgGMq&O#QgCY%c{Gw7Xd`AeU_FW6ZzRPY5LR zbHd*eBPLO0XF}j)E8Gl=OAT+kXA6s=0GAq8aagdx>0?{`#J+q?bC(@SAX02Vu=H;+ zjtZExKg}?XBc>`K&hB6;N4j#?@uvG2y3|BsfA8{}-dNk}pkcs8H+*0*;JK?MzWv;z z_}jbZa9so*aKm8%HUcOOoN8wrTv8$tXfQ?lNJdwgbXovlWtj6_<^~v*-SYi270*8m zpwT$i*67H6Eyf}W=FTr=Ks2?}G%CEiadu~}er6wxfMir@V;MBDEfcMUsv*|3{9S$9 zg=>ttdP5v=HhbwUh1a=e>v?VCT0~PM?0jG|sp#F1-B~mW6C>-)n%woG)7aQ5s0R!P zkw952*ib1MZ8i-s3b7tFE4&m83rATv%CLbfhBg4pjRC7|iX%@4aNTl=JN7FM2FEX6 zy^U|Z^D2Dti>}9)z34`K`%_Qg=da(!<*f}|9f>C&Ca!CNjS{HEuo^~S80cur02_cD zMxd~DsSk$9IT{+7utEUUoh^_k$@fhmAOEZ~8oy&LZOxQG+7TB}FaxX@7f3vOnT40! zBdkDi=I;{(875F6N6!~5hi=N@ug?kZte0_$rLZpgG-ugf2e&f_9Jm`UTsk`d?PdVue1pf=6YeTlD3D@PDHsryY1N^OJQuA2 z&hlZx$-XDmi0ilv@c8;4z3%_zA1a$W*IyIUYUG&tM2WyM6OWb=t77|Mk`0p7P^*l!gJ01XY{j?xq%%E?AFWVG24Ls66LJZi17x$>-iN+3O}wz^>$Sg)Uo z#L(FV@7)S%xVw<72K)SX10ND{_3uSjop;r>xQsy^0xj5Rr!xfr73pLi^mWG1;onK9 z1EToulnrYk8Z>Xf<-DNJjgZEm3w)BJV5bN;fWyOv8}Hu6EzjKH{D5W78U?PaVU#`~ zvTGCs43bq9nUzo2Bhmn-I?Z$MYZ#gtu$pjn6kIhWuHQ?Xiv?bNW*gsf*GYWE^RLHe zeB3qoJ5Rj|KYL~ykCcL&>V$hQuW-Y1iBq+q)xgRPH3qaWU}Z2g_+SXp_i4#BlG6*r z5q4&6+|c_BL_>zn`iVp$v%&{DODpO`7|Bk4nhQ}yt(%GR53(<=CO?*4VxidsM}Vj) zN)O$G8!!o6rYlm{drx&V%nXDP03ZqWs0ZmY1jrn5A9L?=e6{wFI=jKZ&WBEY%l2gW z&o8|eSMNUA1W)FOZfhk7< z&MTh=ItBnAW7nJi&+k6b5TA)0Pk_NFBRJ>8IWxy&>3HwPCQf_9-#h;pzW>5mya2#^ ze8l5Eq9MVaJt4}paCEO6Wk%y?b}Ckemj;*lb5prlioykGsX2>)rBt0IaCg*Dsf-01 z0?CSduOCmA&X{pXO9UfiQv_yGwD)^N^84HkQ>)7DlT9F-!L^A#G12q~rU(-TB=z1d zx}4sG&ouae)+*cE>ONev1~3nvp%}5avoTyG>aqa=-2R-aaO=~ySi61*v}rvRk#iWF zLQKdmP(U!}6aC+Hr?ZFCnUrel!c1-E+A6Vy1tMc`_zh;Z{($4_33v52zpFaIo#{_^XQ1E&o?Rm{2MUphN;}zTV7N`M z;B^cDKE|%MzUtSvH%<*72ajz?_*I+}>#6`jdPNwA`h0NM!24{(%l9wi`_4Utue#~U<69yR8F{MRdLs) zC9F<(^G3rD-n@f9|H3o)>=$2$FM08k@V)nL;a#UjTz_b|Z5g=cU}74>3YOq|2cHf# z<9D{s70uq%3W|gi6uOnXX2E`{2pIV(5p2d(=bYe+?rBA@uvG2yAB?NFBX2H*x)T4HNXZx49Q^;uyo|gkTnsQuz|qR8s2Y)addoPJH&Ti zIE!yu?&2BCOE?e1yN3Z6r-}^#i&$dJhA}4$2xOapX^EKXocDq$g^RVtFHnwo-gY$Z zRKp7!$WfbS64;UaFl0|T?U0Q&h9bIIk^mZGMsLHwWZS|n}(a7c>;I8@C>ef z(gwyw!Qo-W-sK62hHxYJD!^(rA>;^$qL#j;pk>1_7{ZyNfEPq@RzDOVj1>rxYSc3r z(j3EL3rjal(Xcj`@?QcLpp)N%v}Bsv2? z!D2x+=?c0oa85BWOy~G$rF@c`hL8|oVJd~FW&{qY&Vek~qW2b_Vbug!v0+Lr83;mC z3>H&Rdfx(;t___AL>NvSBwqXcYjE@V70~DuN;tyZ%-X^_3O&A_pjX4xR*W1#oe`NK zRk%R=&}lzvGzy)2dJAqa8?N*|I0gV8Lsw?{b+zI<^LiT{43M zd?@b*K!ILu6;Ros%3i3X*T9>BD!u+Nbij}`mPK}zd-amMCV`#Vx|#rr_*%q^lL#Ou8Fzeq(6$)*3=zY2Hq3T>mas*_eM=b*BN9629x+O)Vu~%`48hT z=gr$e!oo3Z7hHeWHtu=h)wt(*SL3Q1wlEf;?kDPDFI@v84QU9F!IsH-L^ng!ij?5U zjqjf9$$Z-Y3{zw2Qf8neu+Tn%8Kznh0K$PS6r79^Hyu=DOnCLx1>bb{34Gy;uEJ+L z|7Lvs-6!!APuj#o3&UwkJms+B=EDgKBt?Z|0Nyb8fUyP|j6-*#0131(6m_uVT@#E^ z+W}0$v{8cNf9de~K6^T;6ho$gfffM;caC^`fO*+UhK0J0Bk6=-#eW0AMcVU0kTEW5$U;ZkhXhe2$!MmYviEC{LZLqc3tsa^xMrSXYV90cRh|qyN@09|+q(Il~T6 z+*o&?*?Z_43JR8c6CxV6PY<~1o|Cxeg{N`P3(nxCyG~)}L_w^8dH`fKM5R){RSM7| zlkJdAUcEH?U0QxU>Titn45VqRj<394gdnp=k86t85TzMeXh=5)Jk? z)uyhGz58!U_d@W%RDhY!?UqALt-=zcIfkj>H}5%(tM(^U0US%FB(6GnqGh)8Cr_Td z;x*vM*YDr8DC>FIeKIP6w^CEB&%9tYK&ur7;Bd9%G|>S5Aksir{0on-kKFZJulu3x zjm^!Mqt$J5r*d3TO6kHk1?4@^hMWRx;}aIFv$wv1TOh4sa7L78ZGm@hj7SGQ>tGk( zbK!CPtKGBsveg03B=CMWJZuAiz{WslYLU!+slGZTq%%?Gy#+9x@7j5?X^mKlb!wG| zOH~9Rp8U4h^-UWDHZ`%@ZxpD33S+icrtqz{wQ9e!Kc*H**UloR+fFS!Mu`I6i4mCw2X zKY7y*-oGe#(m~)Udlgr$CY)%A0|ySvfP-j2DVQ=)ykOZHQlq1hDnm@L*^c&VOYX0t zK~Y`?G>ss3ka_B2!c>&sR4N#~d{N_jGZ@^P_FI*nq`0drQE8s!Cdnk2BrzmSL$YGw z+GXIEo_{UQoIRWeB)Ri`9=o`^%o=Y4D5W^Qo|so8!VAx93(f>c1y<2ibtI9$mqNjC zDHw*LVN>18T-mGJ)Z^=8;QFDLT>YfYd&eIwC12!T21ctg-im|)%#P8Vn=X~lGyrDo znASV6QRk$elS76!j=N!{h`prYDo>oY#G@#9O%}ZR)FvLS1)~9{GqJS_#3EtAh~G=W zwBqoLio`H5|7!^xwubG26$xpqtEZutffX|V15%JS+JX8wwMKJ{eVTXFF}vGO_BAC#3VL@%KuCq z3HfED!})+}W~2P|q{)o{u-F=a#I)VF3)q064rPg-dEkP)3eD zj%4kkmD2T+dgpr2Vn3|UQvj*XY>6=5S5r&hqLj*5*ba3tL#jHY4UU5hOdF0m8E%Ng zeV6v|%(D&m9aP-1T;UQ5_C0Z7C|J5-BRSK;GLgk;P(6WKU?l;s$caM1M#wW8R)eNF z>MV3r=ic`cpD_eR0fK<_-}lngu2JbYQPVBKGZe|z%SoCE8Hwx9ukaVY@maX@eJixA z7_mSs8g_=AeAOG@{N9Iu_VO2)*>C+p^nyRW{>QJ(+`jKwcYprvx7_v}tJUfTSDElI zu=!84%0XsIAHq0IG=gA!7)R{x?OlG=FTdvBxcN7l+1U^Mj*rxJ%m920T_3pr+%Rr# zTyLcmIylmsq&PL)Ca9<%2GN`50FoX5++m!o%7`f{Ruk*{d-O+#AXRq)0}KnJ(cOpR zemHj1@Z7BU2j?#0`}Qv48+I?@MXN)s7LNDW20my5svA5g4@-&JY{`6f&4!I(z^YXl zVmcfMjC93+r~8W!up`1k9C7|IMyo?nlOX5BK|j)YuC@kC_Vw?8f`6kBQ1mX03_uE0 zQ1nHmJB&?$%qXx62>}UO7{z9CJ_5|)1J@e52Y~OVwuUmSwF7KdODD}6;62r#jzX`6 zO@o#VtHX+egNm|noVs=s_dM@v-1CAnxaaw&aNSK?)M88xdly&gVrUd21&|uEEMJJZ ze?wo7qnZfaPfuMW7hP(4?k6Zk(@QODupKS{cn$1K!0F4t4Tk|=1>U;Yzz^NEjlcTL zYw+nWx(Q$N%xm#OPre%O+jiW%Ox(3U;pS<=RbhYyCQpJiAE0KSkRYB+9&}xI1-Vv27Qmu8? z3M7Io07J6rO3wo5w&(cz7`Xm_&%&Kg{l9@-+^G^g<-4gB zp!z+N18{0ojKhd&n)LgkK0z*%&F|=3&8hfqt-`HfvP8+mwmGhk38fj{H!SeFall*0 z1>WV`C}=nn6HYY4UJ5YFD0F%6LdWlPcT_c! zF*ih|&VZL;u2rM4VI)2jL=9v%wqWk;2sqxDDHVF=j6k}>BVh|e8QDee@Zt)GyA8`r z4TpPdR#Ha({hTY(UTC$la^Q$wB*DF7#nC3Vf;PodF1D~76MGwmCtXS=!8jNr4Uruwt%rFD=a`5yq5vYKnMrm@>#SnqMb?>n`- z#6SA-XW`H;VTluX(rOPcJarwu?i+rzZth(B>*4WL3tPO!%#JkxPtYqOwx0U*yFT~M zJMQ?-+NK+`Nepnrre@ghC{2x^4H>)u#jv+`xcjPKe(etc_!f6R_o3hMk-Clnz{kjy zndOJSaPjPoGgtpqCT?}wG(frQVPpiFjnPkc76v+RD+O(;^DrGtMzoPskW=YQooer$ zK9s`xXlE~Zwy<@z!!-mNYx)(zn+Kv5BpSBUa0(4q1@MqL-Z^gJP2-5)+!%1V85T&K zFvFP|KvAR_Y=lDt-HkFMEjrU4!Rw)quOK}1WW8wGwH0T#!&U^*yP!18j#rN@_8EfWWqCX9;$l*Bj;0zk$+ zBw(ez$Mr`yaDiHx28r6()o)nmLR$cXKvOY;W5B8{QHBME5~vj{S2cFaTMU550LuxO z3YswaSu0D%K5H?nI@($>`^$@9clP8~{0WY9|D^y3HkH{bGneD+%};_l0P*v^Lg z;|6@z5B&N=rPRNGviL=JKhFO@fv> z$S5UFoH~I=&z{?T%`0E`eP-obj{(5(^%tzok|u5!Rzg%7}CD{``=@lDUe z2Xai7@N5{Q?vKJl=o06Q!+_dn6SP1Iv6oVqGMU%M2qBr^GInq$7PU}v-a%PSmSY`A=Jh2`Z5VUDp-9B8f%jD04AN+nCty+y(Y4n)aD zkzC8bAXdqY-&GWqa|!93L+k?j^Ef;2LBNNNlGw`v0CFg}G#FMBkXseE>?K}sx#DRT z4)Kh=3ERuS?uO&M57^%XVwKozjv*6mNT5LxeM40@H;WAfCcqOJYauFGCV@x2{Ahgc znylh*6j*Dpy9)g7Eo7ArXB@G7zsDE-$NS%Az~`FT{hHx%d_6(0h}gRKId^~7Q*OQM zyD#rwzOfIP>Z!Z67HMD_AjyVBkVP6dN1VHGarak$`E}oGX8-sY032T*_VpkB>WgpK z{ouR4Yinot8~|Gpi88Vbu(rTr9H_*1%#jN>A^`y;2%$qW4eX)XzDG(uYC^7Q?f}JJ z+(|+asr;)eCmN*iNg(jE5(!UPR8WL9I54$Dx?^gAMRA<*#8#V-;dpdh;2m(hr3|=# z*u<_ICKwi0aZNL97~o-ScvBNTj>xP)((!DR0ZUXkIBW-Cj<$iU237feh!8atECFN5 z9A_Kw$k4Gea_o+e3V(L$o2vSPPjx=*y#U`Ojx*i@ylB*}JWS}{6|2I;P;>_#ZB04% z)J219nZovU?>C>LtzW!VcAZa((_RC zWX4_-0}K@ewB9Cc7<2xI#cR=-`n-APs43@zWA#DFg z1}mh6ccS7{4eW&D{Al=KS>UZmymMoLcVY_{3UDfctqcqRc3NPFL>mkU$CQE59TjZ< z%KIdHAqazFj#Xn1d6=OLKDSeLbC?C4QubEHT|*!+px>L7@^b})9Af_&2asz`MW^+n z(diiskxH*5mFeaji96K>C!@aI<=4fOVGYIz00BT)}+Nsb{_0j}WT(9EBQc2~sEJ0v_ zK%0e|1we(Nz`-`Gmh6GhoKr60j+jCZ#0l@L~d%6DJ4Y=c3fAq#*%qj0OGa!tU^a^X-NnMNnc7`X^y!^T)}%`{6xyK&$kuY-q&iVFs8zzKbS*wH9nZlLP`S z8cTxYD4^1_p$ybhq#+S>Y8i7Nfh2HpIn2)92-A_d7}%m1E~gz_q0YIOoP58pVHi*w zwP%?Efx#BaE%ZAgSl3dtgM_)7fH0a_qAz)77UeS{`jI?N~3EXb%RX~=BYS}ZV4 zi3;FwV?=Yu*)7A?iBova<9oQ}@&&x$fqmS(J7IST44VZQ9T*ZZsk}A`fLdkW41yeo zMIcv+oi9Iw)uW9y|2lWI1W=vW~8P0(|w~5*=F=sxL~;x04o}F0jSA| z^5{t_*b7q!{rmYpsEGpQWYvsPC_*9}fR7j6a1#%^{y8Q4U_ z2`ea|6FQfMhsF`_9ts{x$HQa62NxS?<|u8#A`=@~uoDy*ZWN$oV%6sy_<)89W(8Ag z7>jeE8&D%K8j!`16W|hyRj>u_s`B{^fjV~$17d1)gu_7Lp`z}gi|0%;3BWb1nnbux zBk&z(=B$aBSIi7;s&edf@S%6tg8B@KL)ng(pG45tMN7RJ0twbNtBKL*(uRoUv>LEs zU^%22YBr4Hz$%JJExh=g z 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 Rse=Fj002ovPDHLkV1is)%U%Eg literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_bee.png b/app/src/main/res/drawable/ic_level_bee.png new file mode 100644 index 0000000000000000000000000000000000000000..aa15ebc3ff35af98ed8ae91a4ef169989bf1bc60 GIT binary patch literal 209421 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�HFfncu35j;!zmdGrC7O5)rNV`Yn)YdxX`k@S07| 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%0Ap`9qt!2HC%UbuLxP{&LSVwb!TE(UYKpLpz_L+$ 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≺?$mP%UMosF30 z&m|QZixV{t!T|V9{nrlH&%fBPuBWYiROC<*`CEbRu8_8v`c!jtR}(5Q-!WHOBdBKR z<6^B*kj{Dt!9tyCEY8iMH$RJ%Y6?-!Xm!Rgy=o0QW0O!-q;`po?|LoL(q=$_y2=P; z#NU2BV)YnPIXEzi?we(f^i)Dr3;}}KLB_zNJp)-80n9`{1dY)^T~#F%1^?_3v2bOO zvI%_C5N>LUk%HONp_pdFz3eVO5?)N_8vtclE9(LUBmw!y8?;o}Ux5MPxm900oBOazXujW1#Dsvko6{DJa0LM^R ztzMrO&L78{M#dWqU?c-mzVB;GSwi-S%;z8(KnlR>4imWp2Euugpk_`l%w(BNS^I)e z$p-*@RxFq>ez8~M?@m~WBla$l`eex6L@n+E2WOLgQ}6~NzJIO0t!B&LXU%~{v#0Ej zMn7^MJoFj-h_lT60q2;PHvpiY<(Gby@WBh_(Y9(uv?LhAXcs0wNIaA53*W`FMbJG2 zUF?s|E7&(NS3#KHqBC>uzuO%s&Ux$#9I!4zG($o(-&MaPd7^3X%-CG0?HPf&69kiG zcAkO|v?Bta{dt9te{&JzZE)QknF&)L@yWamaLs_q*!qOG%mFjDBs-3E6WbV$khkZtE?m`dt)7i8@yZ#TZs@za#oT{~>07@HI#W z$XQU=8Ds5;r=DM8yKxI3Fs93EhSsBC(0~m>z}9Xub_AF#fp#Ek1yE@T^-H60AWYJo zb3#!R$mZ8oM5aigZnfLGRb)_O^jt@h)nfnm=wZ@zEN>;?!OP*N$I61FvV$X~>WS`9r} zP=WtdU{S|Gv1u;hp(osb@$|oc&IMyw`d|?U-^aQWH~x1NlB&v4`%JB!ECwITz%dvZ zzhM=cQq3IaGaDoz1VtxC3qBamz1n;;rzGcriKF>!Q{xSA2*%z73Fy@cP{CLMv?CJ) z^SORb3_~^kYl>**SN>R_PD(b7eHc{0yUtz-=>uw+r=aG4X5}Wy2J<`gf#cfWW-a~h zBFrsUmIabUtj0*RnCcf2ERAwZ*+E+C&US_=g zmn~eo5Lt)W6r<}8amL4#Lkxm#{fx@kzwuHqQPRu>Hz#E#NKT0YpF*CBNdABU^Z{gL z+7l`eDibOnnhFI3qlGayWI9Fw0L;h76dFus@l|(^)(DafC}@|8}^UpCDozdV-r+knoJ$tndAMC0d(ceev7ca@?fCYe&=24 zv(7o|xBDM>&?m$EmQPDwxJveTQm+}{f3dyswB1&I>VoSZH#r%e1&#Y=XC5tj)i@(s z{7mWEPT}VuXcYlP^!mCqTp^#zv9cREf=k`!LH#}>Kg?_C5<;^et(IE#O^tqsmUzJ@?xpeeGq!(OJ z=ziT*GPUw9sTkV@zyw4?K%%V96%aZ}Qe9~%m!Q2_srvJ}u((tWwl0QD7hSJB245pdy#GKp$pyoe^pcqs@mD>65Uhwq!`yYSw zr;BRogDCOyKV`+5UEA2>z&%^%DRAeU(c*fTxv{CLVXJE88Almn&MW!pvf!Q+Wn~z( zi;kG7KJYz>b5>8RwwcH1-@nHzAPu zWM2ijHZ(a_;P2kC4ZT4^YS_ERMr$Wxcy=&yAsTtT$sEr0@ZDS!eux((_OX#-HphI{ zLNDXor>@5O2|ywby;`4QbQcVQRtK6s4GloFyBMpknEe)L%-lb_zQU_MIg9bOG%h7B zMs1d@*?coH4f9J~v}+j6_zHT~&3%h?~l zaLv*$%EP+3{hBD%mo)1uRdGK+_eYSnczG;jEH2JtZgvKX^KKh|789_F~ESAVxh{o zWwFLgPf?q6S5xpb;raMD_H2dh6&^)veH63CHlUI38G>>CSCxMXW=?_u2{DF{Ajc~z zXcOq+BqptaBcM?X*jaPnn$0B4bs$3;ENa(H-7t)oGecTOK`C`2`&`iCiMiRJ2Oe@* z@87=l(ce7qL4WhKVs`#T^8LXN!gddz|5Jg#_is3@v+pj&_JFPlC`y71?gYaXwtu-V z?SBnu_VESqYjq0PGB?1UyKay91%6h=%;Z30+UD0euOei$vVrdy6s^d8ML=aI#?Od? z0X?>@Q_bKK?g9SE0XV@q`>rb3c@1-Gvh%*@8EtJZK~6N~LI^IQ!+i;7frDMr;Qo(h z(&vT)K-U5859_wgC16GZtEU_cxN6SO5KxRqyzNU1Sm;%#MuJ3q<7MU8cuC~hRNHa5fj*DD)VxZGC{alvUYok%aN24&w%xd zEFalQ5ngmC2YIPf&5$n@`1b!q-9S|~dmj7>};gaSpYB%_hCRsAqvXhM%NmI{W^z^n%>FooDCFIPZR zLX`w;e)B6(6+Hwf>Y6`KP-v|vO6F4>ZwGwrcWqpBlVYM37$K}m_-Q^*Suy#0LC3tn^WM*CZWYLdM8gQqWuNA$Dk$EDD@iJhtWaO?VrxnU|j@h2=rKD){ z=Ad(?xrx4pRA@p-O~%P-CR2J;8vOYvcoU3PCZN+iS(HDhB49Mt@T)X&ikTc?%ot6Z zd`BSFH|#&CAYs6oK7!2yhhPu^i`@$Q-|2wvsn0n5`h)Iv=L=+M;~Qn0T=VBhZS=rh z#}C1TJ~u#*S74e!G6s1KbPz1tUUXIL`_!UNgV5%e6hUZ3b%GMpUWlLXWpsle**+FUk|;cNjS7%NJ= z@0k;*y5_r>4Y=6_$8&~?v3#*`@agMi&$9JV_3@g!L=o`1&n@9+S9ehso>JP*k}=IZ zFaA6MkWp8_-`wY(n_u=%ulQ!&yWs_6JD+kxgA1$Rj#d^OG zafE6(JtOZQR7yZ1K|l#bqFyn(#%NlQAxmU`c3&|ORD(X|w{1heyJ!-Y--|`W_|yuF zPpx9WgDVO%(eUqTT7b%;5&EW(vzJ%{?Ta%Pd=ZPk`93rVG$%8?m?_V`6M`ay0%POA z_kSPo;Y%XM#sw246X_-e>Y5%${VJnh3&vUn#;kIP=8RYn1go)eLpG2mY**?cif$4t z4wQaz09pd9Xh&1HBVxdq2>xL-S{SzhfX*nuoX|xqWlY2BnLnbK9t#1Q7+4UDwP0Dg zp#s%R`kpeTbeeAx+ z&h=U6JohJiA8?n8%E6Wku-N&k>~q}U&!yas*fBnQ)r#_iDwqPaA)euI!t{5}oU=4C z9%s84jcNcMin|@KU-zHh{f3|BgKu`5Bl~W$Mgz>}Ltm&m26JGw&c}#RTIqFB<0z{d(iOU6kxq3n!f zV#P{~O)!NErLr>v)M^yuBTn$m?Oy=N$VCU&{mTmx$EzlBaIVcf>`{>hY@#W^mMDr+ z@SUq7e%IOqzu&xo{$kIVIv|X-aqxk=k-DJIA0h%c5JCaXKa+qfMxSkEN@-9g4| zt%z0}wEX8O2z~kv?%vZHYP2LjZ2`AXX^@aK*`YsimxGq?|p2-v_c}2qJRI=+zgN$M5}j!tUhTrUw&>IyWDG+3to5jqd)kWpPhQcOx~yH zpbSw_2oT);(P{#hK~M%`%`c>OzMr<1-ZVzmaB+yAIGvLlw;a{J3Q)eS)}oNo8W2HPh|&k~V` z2*U0PlmZ9^D+p#xu*pc$=282d10H_P|LDreL7RgDen3RfTUx;U*3GC>jTj1Jl6Z-o zTC)xllhdYbEM18o7qS1_yNG%O2rbP1@ax$6qpy-xG4LY76caGT=E;(IVdqn0A!wxn zYo7B_lw+%qWh-j5AtGo=55QL3|Hx-x=T#BO-swJ#jN+rRb3F&EfKX?_wth0xAi>Vs zaZAK(gK*X*JClbYVB@R!nZ`-qtCxuTTyZ{anT&NXh|nl4zEKU_#K6y`L_eq^M&l+8 zB*R`5Org5z+0dW^O`rZobD7e0kOy#2G(Z5(qGTilY@4t3E{ES~;qj-Rdc^^EJ@{MY zVD2->)i3_5$(;Y#cIx3ft+{o6%PAT92Bt6?1_+G$dcyuLHis}!?Ps9zsZ5G~1^vY5 z-h9;#h?aE(#_w)-dEgydVuLjdw7OF7S5ir{`LC$#T zU=Gck!cFwv4+}aWGysAqvih1c0vld^Ml%!vOMT$u&tHkEXMqTIks#;`P1=^x^-|jt z5;zwr)2~&cMat(7$eyA{gX7KFpEQT zM$Fuv69J(Ig7HEVSSQ`i4}b=61}~LnbH-P=e6#(HfI*!Ai9mM0@xVjI@zkToQS~!K z?6Tz_$B;Q~UePe4o&7Df-_6fMh{Arg+2W7jWU_6=J+?fDiZB$eJ^b4h!?O zKJm?e)JET4lK9-ac%U{vD}v1pS`IZM<{5ATilp01KV z6(pPi#lE82GB@R+GdDGzDT*3EHvb;p>M8yhpy7aq0KwhEse~HE+4Muv8K1;#jyMs2U|pEMd2NW6StRGdp!6ZvDYG7#!z6hxwXObT?6Y z0)a9_6AGr;$f&XPz0X4LmP-(N3n&+FLb-S&`m;CU=AV2W?b2qaiJrCR0R((vXbA*= zDJ$ly)Iwmw49K>0(~WkbyBuHUkJzuxfHVt=e&YuV3=6;7vp{?D)XNu?HXe!|nHe#ETwvNI3f= z&s+V|w>@pe#yjuY8q^hZZb^|d%dG|TvupN*s|#Z!#mvU6pu*bV$d(IIqV<<%Rc;V& z)@ZCf&DO(xtE$`!u(TzKfJtmWYUZA6*5A%m5T^HWz)a-BJ*x0rfS?*-YYZtqT6(Sx&4o8x7~fqZMprKn*Q{iWv|$@9vXH} zkP{`~A)>lkB#bvw6pg&4S;w56DJLDkxiT7lR1FmHH&iT*@HQm_;|b}=ej8(p`7sH) z3)`?TJA=AEKqw;3$908rY!cI}w?ok?p*0yoDGJjH25~|}|HkXF@gr|RRnU(oM8Bn5 zXI*N0M6G4Lm_a}Ac3Y>5KJRYl;*Pl zR+7j@kgBEHV6tIT&lTN+WNZMBZt4Yz2J&*IJd_B*}lnQX zd4;iLuzBIy__^S77_du4zw55MFTUkNZ@;KNd&3jQ_k8^SwPco_cVO$r>#p9u-I=M5hK}XjmUMTf65>r3WX!~p-HyJwC5Sv@Pc!dwZ$|f<0MAaFl z;mtY(0=cTUgxM{dQT2N$VqpSQF+Q~t6DwC6m;tgT1XwA9RvWi`@jO(&`Vp#fc(Od7 zpF$9om1sq13YN@}3K>O}TV6fX>kU9Z~P+7uL&-wyZO@~HFip^S64a7<{ zsl9hg-;JvL-S*=J>eLkMGC+qROGoY0C?{uC2(-+^Gz#8a>53pDqp(E5IcM~epo|P! zz{pxT_@kZI7(S({@pW&sVs-$;`3AgJEL{O$EERDApGO_020SyiEk?A8r1v=bzKf4J z2lpz>c5}fd``(OW*XPo}I803{H9r2!LuV5Y9=5l6DI9^o?gcwcl zVtd5>93{~Gp{~pi&pzMmW&_X4Kvsgwf+pr7GGHrY#h@)X?G1AXp++1D67qA(ok3q= z9s&dDw*Lu^jn&Qu&Xr7B5hKg&xrB4(A6&=WTyQuS0l?M;;C;{D4y$8@Kw{ivld+dg z7?+(M1F>|c@TA!cwi3G_`56l)L)#OAXTN6=H_y~iwG=dBxg2ZvYvd73wL)8~@$L`3 z_Ln=Y8~>oB@J{S>Liew6Sz2y?`Zh|1EVt$MCuyo1LcZ*ur{*sHhes}iO&gMS&ef#< zq9HsgNVyXv6p(-r3;V{n47_->#oMq;v#@xCQ-{X76YFAsm=Jp z=Izjlk?vH+Kn3tRo-McnpwP}%fE^G>4A2UYshu$Xiqghyf~Rf)f~U^<|4r;;N#T zJe34Za}Y3jub}ZY5(l9M{P=eEiPkF)l99TG*p=Wyj0FqM5`$%`G89P_gDRohZ>4SURTF2)(x&H!?T?j>cEKHTi@=gxCeih)#xJLW;m56;gm!3TH2$W~+ElbuOF+JL(R@Ur36 zHPGx0UOwC;&CN*`vM4A+Y~}4oKm~xzv>s|&O}LgO$C+%~!UCX(g+*;M0y>CsbSBdp&}!caL9p0Yy!jbxu>DvKar1HDyt{cj zt3s1Bm)xA#FZWF(`$tLP)(3)R!q89vAH1N8t2XulP4Ft|VZ;*PeVSd!*!zIH_CE3D z4}5)x73Dw4t%G;V&JSH$27h;)=2CaLEw}%6yXJxoopsY#9g5ZgKzM3a`I}VtcgQ() z{ANGscTv|ha;lN*ngAmulw}(d1B$XmVHtV-jj=@0ZlQ>=0fr8`04f8?elurkm!V${ z1-io{Dikx@c;JL77dok#vT%(Bm;woypV@@P*=>ligyxLcDzSRqPLRN4&>MR-9{8Ad zVsiB)*60#ma;GiWce0DE0|9cPe~#s7lS~&WH>buB5GtU3*x#Vu>tIMVppG%EmQupx zigCQ)C7(jKyTm>>%pI8_ueczVYGd2L6qja<6#Aj15Qal^i&K zri)FBbAEEosOH!NhcJCj5W%)S>&LbNzZisOLsibTM=#RMXJ+SY<*(eNE>yr&mY$=~ z<|EVmScCwTjBXvUv`}NsSkQai`){gaPJH<6&b#k=$>fR^=jCeSMa4pKo$Pb+t&TZv z4^36&%)@pX+tl0k4+?#58eNmf1mAFwW$WrVm_Oiuq75pV+MnyU@v(pVr_b-W)1FU} z?=NhXlm57}S+~A@^?@Jw`rxTQyu5ls46+*RD?*G-Vsu`Xynn{%8gL>)wTqiGmFl+0 zj4~E@$J1A!yOf6PuKDtMsX2&&K^XJwz^Y+`3FOp(6-~uppb!YM?9F7_g?-L;xe!h0 zM#0~{V;-oOaN2Y6`MdZ+4vS;qfGA0fjkWP9{E|XY#{+8T(=J>N_~@I5#=4=l{}+3T ze>`n9_Frq~By$|Gh%C#f{0`3_6JQJ6*N+z>e~-@(-(&M{yX3N46JGYAZJ3-0OlF-K z9Fh?b=(&p^C6)%F&wcTk3&%d>0pHE@o8DL~#2?F@PFfh5o#l21XrtSGxh=Opx~W30 z_{uX|JMX-DyQu9)YQUqQvWE(GK-N+yeN8Cx)+~WPQ_@O+3I_cpR8@uk(gOPZE*Z0& z5JLggglx4nL)k*7GmiH7I9g+!MgU7D8wgWS*1HB^1~1`eii66;6_6!ZHLWFKXnNxZ zET|$SY}NNt8vKcKF&FCBicylCLnrw zVpE6#ij*Q^YZ~nbJQ!$=F;|``n*c!;mckOrIR9Ih;2RfQY77kfM*zmY6~@r?l47Ca zSnH%%H)d5#0Mt1l3KK*F^ph*fh`LS<$Uvj}3|Lz_8V6-$8g2_BIkk#916%qDD_Q|% zFh8pdGsP3oMG43T;)__A^Ev&bJRJ!E0hO}C0#^d(qv|Ubd%#!=*lXXtaNqkMqK6)N zShZ%ayKO25y&qvP^T~knV#%v+ls%6AZ`bMlb2QcS;*;+F^gU-57GEdoX3C|1KQHYhrjZkPZjgmKR)bxR{sy*`~TNAfB*SA{qqan_K@oq z@;M6Z$Xd~Eh8;$)0_+dXm_ruKFiLae0iF}Jy$}%a&Zn5HR4YOeF;gY{-P;$@E-TO-&^NwyUI`rQI-xA1 zoj*GfHa32T06kc)ME6Oh?BH4oaUlc*qS~aZF*&1(?vmnpC$GZa>`wExX5~17&8b-! z)NTU~@|td2P>Qqdf)V)&J9}9$XbYb3x@{<1ieQW>KT1DKfnccz9CYA*dBeHqY+hN` z-;>;bCAu4b`(N2h%kB2xmI2^$`!6^B>1$Rjwe!B3^1*`eWD(pMka1Cs1Y@o^=p#dp zLWd>Rf;lWJDB#VUQHz8Q7ZN3Jtg?6?E&f7(Y;l=R`t z%A9+xLU3yZ9Jk#ZPTh3|D_S)w9r{J-Afnj+V6+ZB6xtmS;3NwDU^QwT1c@jXx&u7_ z<)6WdiGl}L1Td3QG=Hlgz_z}kvMAfJ0+=q%BxJ1OZCNE_+|19?=c_UD2ch;i4R#O)}k;NOOGk#$a%5UkQfAIj=l-pR?>Cl7vx5wh~ zsvBC5I`H+!p-fK~;Mh7FAfgU8a6=G5An0dl1ZWvHN?Fk^Bccd)UB5oP@uTniq}+JZ zY5$d~C7U;Yf9l1@KJag5a{b-_*;T}LgmN#qnUH6jjB(?aY3CLW#zvAfs|6=T1ib4R zQ|K-#io#9Fq}d!)dE^4OgaJt9nfIV4fGKBSK6?@Za!QEBkWD5-#@~k!AQ8CyR^TNc zm_fTeRDS9eN9^=Ncqw!lKzYGAuxVhw6lQgBmlBg<&IlUlvxCQ9H~xft)lyG!_M=wf zUV9hFeMJcV-2g>uTs9~g9q~~{MhE93eF7}ErlrVf#8*e~jJMBYwrkfb?~eciJ|~2Z zKI_GQ*T4S*?sX}aX3qR%%WNQkcN@E;!@lw`nUS*7(*?S;exz?5&%zG43%Qmj6t2T*yZ|_ zk^ljA*>yXtUNMFv4%-pycijPNR!?JU&01*PM?J`>dVOa=R3IrM^#a12#IOa5%@SmD z&e$x1TQ#RS0s0|^RM&aFRd%k%)Z{hW-~Dd4{xyN&bw7Oc*wY^W^VP{r<_}>4&rux(J zK|39J@XGCrPpM)LvHKDC4%c5Tx1WM$R}nDS!G6zxEo0I=03!w@D1sJv_cN!_?*fE` zY%xaU#Px^y{jonTL#zm7ouL-d>(RabVKp`}C)T8P_82NC+lmW*lkvtc%wpv@`$D3f zpgKf?TQX@(SYCUgWjiXA83csdxQo!0A=ziGvnE9-O@hQGd9^BiJ5>c+mlS6`bQO*{ zARs3|#5{OyPL&7~lwLB9;6O_CuJ8NgYJErX1M3_f>g>uU1 zEiGVaejDn34{9s~6VVFB{=fF#J6^AzQcIYbKkikGjn%zs-Rkkl5mCr&a(?F&} z7^_Y8EMz~bLNG&Fifk$54KjcS*n9*Ct+yw)uR4On@49^k@YfiSn?XC}^00pIopi-H{>t(#indz~45GkoJhK(_f z*^dGA2pK%=bGMBd8GDSCy1T9~mj)i_vD3yL4{3Tl_`}a%T|57rt1jy5!zpn2d~0mG zY7?wEUJS7`2`VrMEytSss1>-RHY$cNIpJ~s1+QEA+!r46RXfjp|M3u9<`wn@vrpS= z+N|=`hG=&v(G+5$8krV8NLq&8{kHcU+S7`GsCmwLM3HnDNmGl<-`$H=MgWUaC6+RB z+lY)1GoyuG1X1QmI)cbp=#V3+j+G~sLIhXIs&XeFG5GQ?Ch^ldo9OTA6h}Y_Tu1HG zaV7`S&Iy$8v{u!IP_@1*!oE4=&9;3r<#~iYbKz^@eN%7dc-M)2c>Z27eClNx%zDwh zzCU!|q4q^~CF3CcJKUG>dAX3fBM+Ezgv)QJ0{?*v-o9<0 z<@?^w6N6WpJpQFw`igDg3Ke*2Lx*yK0{)+5hzG{(nJ zpBU8_rw}I?LanP0)!u%@Nu&wpop7g2a{8*4IRF5)I~71*^ul@Mcsw(_iSgjJojCK& zm!q$z40aw-9BXG0i#*RIH0wMj(;Q0{4&YP&^kOWY(StnAV1msGiz#4G7eb*50b;Vt zkZZ;OjKR9WA-v~pUq)|D=68Z7pDU%_T9<`;H8!Yfm`#+KDd(YWvgB7ffyl;mQjtlm z9jeuRgzLpR`9ddA?->gh%)y5)JQFlAjGU~5mRtrVEA}j2?mK%2fTcSM5J;L39jC=5 zs&2tENX-O^ghWJELfVh9gdu{7BDg%0>SGNpi?5oVn4BP!G04&kS+mXrwAj-c?^(-g(!2y1SoFvcxkWoJa4Gkdi>SWh_{&43O{3BO>D_ zSnJe>n)voFKmU!M%D`u7!Rdc|Jk^@a7ntLwU%0Gqe&rfNW{G2|oHrW&Z9i}N`St`t zoo85wRp37Yl?4#K6Lpw#wH!C@$C>TWCRL<3^@@pxP?6GVvLMY@+O2goKu@{>HT4?#`gNX_5&#& z2(LpBfXO=JeXr=lv-gbP8&ZT~V*{TH!FA3_)I$}`@VrTHovHn-12LE9Q{HzW$548B z|Lg&WFZ_5MeKma_6QPxQn5fL>p7*Bu@h2X87aAj1n^t-?HSD90CvBj>-!H-_El{8h zW+s2_J4$@-CwFg6ubz|C%9n%8WrXOJF!m6T?IA76BV*u^YludD4MGl&uFmDXtt)j6 z0W-o3A%BLy0;&#%Nrd$s%2V=k^s7XjR#3)7h~pSN1Jf{j;S%)EngbhIA)Wvl6JyxE zehr2;Z$h4C62??=#U!S&fXu8M-qdoC?IMxDju;FW3sXvP$rn~)T5lPKfH;bfrORfNmO$5TZsEQ?dMKY;bBl&(ra&6gr>^5rv zpZdbvG1j!AQs|s!pdtncEDnVrC1?l=jTZrrgPKE9m?P&UzXP;b2O=+7Yo^R+a&hGL zYrYbD3=QXa(_3GF`i^0YPv&S$v{0XDpxN+f)pO*{3@**#vJ@`&@VRt9VP=rEI)w`R zZmXyq+RX_8a6X42Lgu7v0YQ7Tl7+P~3|S;e38iuw)>@P+T_}~SFvh^z7$kY6R3F_* z&G8X}cg8zc0eE>_uDr;Y=mXm~-2Sz#*MDGd<~w3N84EhLI_{FP z@MDs<(YLeiziNIo1?L1Z;{)~7)iKAl39T-9g_ z&Pyl2SZKdv4}Ulp)mWF8owWOwQ*$BzBz*H^B3(ecmuXEQnWb~A3jVwRlw zP(l8lerQj-1qwiviDdemCG(AUFCfCX&HChS#8mO@;xOTh@@7%4b;}FhSlBq07niZH zQ6wQ%AEtF#krG*1#Rh^ENER8%vC|i^g#DBxhL5R&1+TykZ$@Kp$nLKG)i*~|6-RX{w$6XC(3243~%ucKC} zAW5W>mLVT=?9r&FIPpdM@wra@|u6W3sbWZ#9hMXtJ z1jk--y(|HF#yIoUN8r$d_7DY*Ag0@)h{b8bdNA)`34I@9L&oR1v5cTm<_&kSq8H|xGFRWwEXL8Kh z#5kABrLmOaYZkxoHJ2ne)bIUsZB+hL46Z!2>-5+D^m8+2_!CXe)7s%hy~=?YDeVvi zj)V{jDbZK=lt0Q5;mg` zkZ&n3urWhd8E{_SKbX?JL!JXx4Wy&`g@Yi{VhWKRb&N9L)xS?qQ&JM9zB{Ci zS}20ihZ_t+qv`RXGx~AR0t0x0_o7y_kwMi>loP{&o?@ae)E= zfDJ!-%L{zOZ(`s?Fqhdg5wV0)m1AKF0pO71=X1bF&Xu(hqBusm+J(4MMVyon#j(7o zG_NfXJQ;w&jb0`NUF<$)vI&z&m|zH^YB5v|(5?cWb0L}<773q*A>^$l#&-^*IXM9v zM=)fN=T59#`g-L>9wx4~5-7Q65`ql5Sq$4-!D(;43|qI?VJyKgA$1unS&WP~uz0}$ zK6%k8*u5`?$t3jTG%O?MuVmOnfEVHzCj0i^+ho*-L@y94xnc)m4`(b|Nf{6P{vq6X z+r3!*&{hm@A4lG7qLEIbT1o)zy$kM4%whh3PHl!nEv29YvXVV?CLXV0t|@l_CbHOl z(QLfyUB{z2*_3;%d0b3ke_ z1!wkPQ9sEz2{er4-#*WQwtbL1-)$1swmVVxfHu*RF=rExAKyXv^3O)lTbBG)g66m? znPb-XmJ%hW&jp26aczOM{cs2+XK4`^2qZ%InmaBA++H|^r&!^Eos%9Pf9*8vH-`Zi z>~Hk#m%FyfcDTl}Q1Vjg3=e`Vid^obNXTn=T$MlRSmZ%qjByEX`rHm()OtSa)hD%1 zc+FWi^w;96vUK?R@`90dz&UxFI~I7_BD^aLJk7CU#i{nNuFB%98J!=OqO*;ZR{{`H z#aRy0ycC9nLEwd0iMl5fm4tDE8Ydwli7OIHwQiKk6(rRf;zUAn!s~SPN?|1)=5(21 zf(KlO{K*Sn-p=}}C4eN6uC3fbRm1l7AXYFg%P=`UiplX2AqM1OY=qwFvyhakfX`LI zV(}EyA`#^=AZziX+t%ZPkNr1#yQ=WSuwdz!;XU5>ju+s>qnE>vOoEIkRvrLU0Sn5L z%#WQ_eK^YY?2kZlWWo<5fT5Fbn@AFnrEsxDROtdo0F_Jl@LMjyhV>iZa!8&OcL;;m zFmRY$JBo#pzc9N8=+ET7uqY?YC{=rK@x`YhuQ#P76-kRO*{0^;LFey~bD~8AdeZjGa0i#+XeC%7l=gQpOvqKKs?^k>8wd|YKIsTeG_IOwNWKNjOmzGaG;9YMj zCHZT8#?NGuP-X}tvfBF?&9hWC{g^Og$M_sD%$Pr`7Z?5Dzy3MyKK$cPB!}^&9xTE9 z(oajVS;}BCs!R!il6&Cwc>sdFkbYSPW_$d~EtcbTPLBWGFYCizbAk_^e8uZ{m?F5f z9}6K%Mlws3ka;KO%?t*`gx@{T#D84VK+fV1$zH0J+mDnH!j?O&RwgBNdQ02aRff7= zV=*0<=Pn#nXV^*+j*!*x{xhW8)Rz*oN9G6@oH>AfX6b!(3=&7Zrr=-*pl zD)cEW@N~!eD^IC#Tzc}B09m&s04fzTGNJxjDnorINjQYL`CgJZ&t zcRqx#eCm6sl$5zl2~km)OuZLHfhGCeS_@<3??I6zZ8^u<&PtN*4Kf$wv!6Q?NcDUH z4Z%v4DpVyRDJ7O!OO;Hhax4Q$x~afgSQ8^Il@LVgVWJ3m ztBIXE29Y)EavTs7ZT3#olsre?XbAD}a_+_&7`9;bI_$48Uh(Nwu*|4CO0&k~J$o#i z{>|_I^jqI0dd5h&O-~feE2HItIeMkcw3aO9x^I(q6Ra zJip;qleQC-k;^#!=;=6eQ41-vH#P>~$r?kU$FCGO$a8H1@zKz07zT04qn=0j>F=BP z?oCaQXH-j!+>;z(c*a5qRWGQFdtE?jKVGXjz$6ckJdZMP<-H}Fls^@OPE~LqkqFxW z;Nbx# zk2-(V1B+U3e8*|cW&0iei&B*Rh$cr?@uIF(#=NL7axU~qno4p@b&|^ zF|jDGPr%hDkWG%mH74L&b);jX$R@^+O^hKO9foU+!__C@8g;oH>>S)AVI#6yF-x#8uw7;R zRI2IZiqW z>G=m@8#EX_!Ejmh1Raie?tw_k6|fC?dtRz*b$=`~7N82CHNl9R^=D307FBqOJe=;g zTJ6G@FMAtGAVfBTjjU`dOs-n3O(eO1LN>K{21eNp!9)q7xQuG|baeO5M6G`sO4S}j zrLyFgBKWlh;-NG`FG)}^hc<7(;D$BGv$T^+&^8`-@XZFY$%!^;G>~EwBEWfvBsOTa zQe5L&q5y5)=eR(VgG!#UWYJS;Ku6sq#)*>xus!Z{&Op_QK81NHpWJW|<~ z61Fh597>i5aJsk_nLJ~=$w$c|{7kLDd#T8^BW32@{Y3=Bp z<}Ay%^|&SE?Lh!LxZGoM(zKfMU%umjw|?uMOD_M9&+oVQ(wCPSTi!+6Mt(@Uo%V-< z{1y10@Pu9z1)e&%=Q}U%FJ<^o=Wr|thM8e)Ed6?|(V?PY+BTty;PMp4L@<#BnMj(L zM+pFcqDTuux9?1M%@P$&@Npl)Ji7sdXbRl|;qyy0X?xGzk%lQbmyM z$Yw$Ux8~>sYZ;kSCHw=1_iAV>8v}zex@|M^JlDLT4Bh=RP^or{$`o5%{*!y~?_awa z-Q6XOP1bS3(fi>;?>-vkW=q;Qk-VroT?=I5lTa_(A#-+Kt}BaDAeUGA0(%xuF{r&o zAkVCffGDU3GHFpegw@H70t;FD&29JM-#>K~dTP?_Uc#VCq}nQijDa@62={~lXdV`k zOjfNH@Z1+3f;YVLMA&)*>>OH+38ZNg>>QlS#ok5VEODGDA(x^Yh7@(!C_xlOFg8Mz zl;pSqVVAoT4oWXiM@1$gz!>DM7A8i9FfqClHWJ$z8A{>{=v)S_*O8}90HlWEqFzbs zJ3_T=FgW7y-IeQc)9P{bl;d`el~ZML`;LiicU}LPi=!;Q(kwb@vmDqH2LtrtWu=R{ z%I19GbwUaPVF~v=5PyV%jBtOHjz}mH=&Drkm0w(QfnC4x3FQDz+;_q3(_eDYN4xry zmoZ}|Y2_=kF0LTNPmZ%gO3}VY9mojn{Dr~joiiu@@_&AHEwvi|jMBVS>G1svM(+Q` zbMg&09Z`1m<;=bpQDTT4nG(UkV*QZAwSUNPT@(|WC5iib<)rKyakSG&d%C*B-#Cl)s+QD+-I}N8&Ti>^X<)Y zedcmB9*+lPfu|qzHC^E83?96%>ydRg9DDyyzw_aP_Uu1kyiQ`Pz>pr4Im3t$26hbZ z9O6<5&S~Bj%gWgr@$~Y}BT8Z+YDo+eC19xXr(q=ML?PrYtkNI*k_{oyD2`F->Ot4Q zG(`FmWr*jOd;%a=wMPy}bLWIG34!TU&jy+y$=q9m5$2V-EYMN+D&S|Agfki$R<3GAE@$x?#|4$&LP@4zy>83SZa68I;Z4wX_BAGq*!*k{imB*q{?70c0a&ttLhWMJ*1d z;6g&g7Y|vEENdaJ*X5ji4x>dlaU7%B%uy{d#xuf~uGxUwAK8iCiUr6@WwOt}Fz`B2 zZ`wS*{kPX%__@CB>6e@NFW=CVC~3hrPt*=|3{jzJa(Qghuu8^~{K)pzyX? zsoaMtv`Q4`khI3I);7QK^B><`t~XwZg)d$!U;Jal!$Y$g_3=~OeJgfL*W7jB-RmCR z@BR(8_quyQlWB%1v51Tl1(KvgN_cJqkrR%j%AKlvZ2}j@D$8-TpU3d~u(;CWZogYF z^>jMtCZCs2u&VA8nZe7SRmIsaNRZcspjz8`-otegaw^9z$0dG*y37N6ClM3}c+TL{ z6wa1Vn*YpJdGDjw#MAe>F=l!It>%wu;llO!{u=+6s#q`Z)I~u6pXNCK^~cY+bM5Bm z4GwPqpo>b&m&~kGPCa}Up0T(aU1dVXVs9eLQUW4*k$W#m*aU*lr6;fC>*>pwAuDAA zkdg49i4u^tl1C`ByBPUGNFTg}n?h#*dBciPFxd!smLe&Y(KCIf_`BIq?HdX!Ad^Fw zaKh`GS=Fv7>XuFnfph{o(duMpY=pEqi6}0CU5?G1;N@q18760(eB%B%@6AWTPBh#5 zU=r0&UhV)x^Ay{;fI>j^^{#nMIb80LH5&i{d6py3S`y}Asl1llztCs36Yg`lLljv= zr3%W`8cO8~q9o}kdtO>jInOYq2)Ew#5I*;bAHg+8Q7TDz-2y-;nrVlTt*ETt!@(kL zIV80zPCD%vocgL40HdQ)wM%l3%Dxp)oQ|J89+diB#7e@JbTzUk@4W2d{dQ{ zkXI(*TiIsFjbv3q(pCdIw{1q=Y=Erf4a%+7a2)|Y%}^iNsp*DVY1}SYU{uQqw(pq0 z6*q0gO%G0@x2DF!M)K5R3rK+2q2BT^oV)kD?UYAOKIuiTr?K^S(QdDA>Zv{{IDYr! z!#!R0g8(W-QZ!{rE0)!RQ6Ga22MPaE5*El#R?l$xb(ejvYV5z!yfZdF9wTS~U}k&v z(aRP!wy*!DF?hb$9@&tgB`FMY^W}JrqZB@mQ;s9N(A#BU4Iy{Fn1TZt@r`4jOIEfb z&>3b1*rQ%baNHSR#?1aIKJ$rFu%KE6`&|12t7n_-w6G!-Q^6v5@veFVm!RH-3O5|pYH#8Fw4Tkp_H z65RO9yYPeWT!*b&wj(J;u$Ev*^8eT|nz?jQC`AU#584wiIrVv1zI+LiEC>6n<5|{D zAJ$0~9V6T@*U35S-}QP=tz6Zs(k88P%_S+`15zRBfys$cjBOv(juBcgLYgK9A=!D_ z1m_uCvni8q90A%(*Ak&xvRJou0$=(0dOWzTh3-<^=^$Z^OuWn}#Rg*&EfD2==4r9s_{FW8>7k+y^@t(P!KD+%qEz zo{y@^GOLHBE*Mkic=-YQKm3ueeeOl3a`?l$?mK|_0>i5h>%z=g%hLLmh4WemK~ENGnUyj0VxYcxA+ejFy?}Lo4Ua+CzD~kKK%OLc)BC=SnKS$F@ejTTG|>WC@$OT3 zQ?{pb3qe#6#}cZ77B7T#x+o$c%pKGlDVpe1KdM3yrYx4(x1H+<$tTJ(A%o4yabzu3 z4j~oJLJmax74MntiDvi;zGeu_UZSh#-U@%C!xXuBaPwt-MzL z$^t2D6varFWY z`1U)N_I&r+4Oi5vbi6T$gIWfts%+#KSjW4NZBhE=q zvZvqDyqDE?-T$s&USWAt)Yo$8Gv)s740gYD_uX{j?Kj`I=RJ4bRefOfrc$e!_2te~ z$|W{YY{c);=UR;{q!b#7Hl(S8di+wTS-J&D zYZO`Eh?#TTDBYuX*4hp4FJ|yIPX*;u@b^jQ`gJ` zlPw1ekG@)rJ?ED3%*8eAv!DwzdSWq5jml`WQozgP8mvW&;x?l!q|?nwB)!& zAR9?oH7bchXsnPXC0;T=$}8MjEB$xlGWurBL{h3~m{JIfC{wJVJ)ML!Z?RKE(oqY^ zh@(ErF+O$KjaasDCQdwR8S+NfRs-6ECCt+rzA>tj7_yT0r$i&Dmw}S1<^V?UHxunb z2$KA+Ly06Qyh8%H9Y5-XIpvcs&yhA8NLvl$t(LTsA~9QLRX!@U9#pz|5XF(?XGT^$ z(VPQZE)$&QzsY#eD&7$84F|@;ph*pJrFW~4&%jg&x~*^~;o7mBgB-Sox5*&OQ;ZL7 zM`L0XfOPy|?_^sfSI;{yCeB)TLL?naq`eqP+b{2N^8+Ke>bG04Wz3MiuuVt&O*M{hslm9Mz7Lg{rT9r-!g>Y6`=oIDZSci#oc`(FCdQ+vAOZ(3s$ z8J*$(?G=hbmIqEl)>2TQp>PHwOX!MAn?CoWOTTmP#=(C&_~3K0$L{S1|myc9sL}AJpBjfMHeFjE1Y*yc{wv+M!pVvq%am7!g_xKk=fIj{fCY?|ILKrCBe$ z`>}ifzeB2=zaQh#$?AA%R@^mvNrJ}EyvE>$lU6^pexLQL?yKGYyL+Rdp>18G^>oho zq@OmP<_V`6!5COW6dSRrieed`1R(e;dsbt5Ph!Mugz%Cl(k|*nh7DADuD1c7E<*!D8AQlpOCRj@iz$BcUWd_lP2c z+_ALxQvbY`1JX1@L){rvJ@tYgd75}NdlM{Hc5m87%To~EToknwlVA+ocD<07=1HlBPmyOfQMloVzW{) z7|toouo8-u$&83_+o}zSdwa0o>~8HOp>5}sj5uvs2ZYJ7qxK284Ap{u*Ni0N9CvH(f1KCjJv`r3`kWLA$wUrv3e@h2R2cg5AOwLJEH%-wSocxL|B%CCCPY@9rMX8DQ;C>v|Y`%XJC z5Om=q*Iz2jMLlJ`CgI+L8Jtn}flr?Ig9Bf3(rbwhe%u6*`2us*C67%1_E)d`aJ6RM z#xUfaj0He$Z&(yaVaSw)7K=HujKz*$qY!ve*u66hly-jchnJl(ec6e>+;#tdE|{5c z=T{>0X*-y;P;0|dvTYEOroxSzJ2kp*>ABu-I5B5E>d2G(s!J#=jhMEJT z&1N;7gl#pOTY!cqHA$AOD#=-O zLsY7OqF7plC1p_*DRlEjn_`#=(nCLomM?L$q=l;t-USXymeg7`Ie$v6r#H)XrQ0)8B-#afi@q9uu!z5AFBa48PkO7E2 z&=`krO~BX+a+F|_Zorga(1MAP`N{GQW8G@%O;!QR>$`SdVP+~wU4g%K6a?^T3?8|u zfBnWspL@e^?mhdeAN}IcN7rv3ut_=Y>8=^--P=Pw_?zKbfD)>pw~BS+Q})8Ra4#EEnRKu2cKFshO* zB_JRJqjn;QN-$9bV`Ehqq`xk}C|A4CJAJk^lMf+e-S$*WRaFuQ65=lwE~=g)s8mYa z!gUKOmEJqg!1&NMOpXpehENiW@?p8=>~(>WwUDPRDe}x~EQC~oG>=w){hF^`(Hr|O(!5vg z*mZw@4!-#A&P$C!H-|DEKs1ppO1n7KFz^vFV$UDTU<@I!~((H-8Hzod$8aH9UKA#2{OO{ zAxN;`E(z`q0R{{1?g{QTz~FUUoA0#daTAO8+h)V|y_ zFHv1RSGrLccYfh5KWM2nWlzJ&uA z{Xg<#LMSe8p9Kzn>eoaaGe4<1TIz79wwyKbR4pgy4Ee_OO^Giu{0hfFXT(lSGBD6w zQ;gWFWv=EI_ z`ZSOPvoBTf@x|K*QTb<$3h}`&%HlA8F1x*z*)N_EBWc^125T&iuFL*LJo+gKCx)BE zTq|s9e)JiVc*Y8X0@l8f<|<3cm^>>EpRG2hr)}JWMRJ52 zWga*P)%DJ3#qAu+vY4wdBVx}s{n5zj773n+ygcZ`N$7BG#wNYZp>Zx_v zLv<|B)%6p5G@eP47QO8c7twhN-JfCqqK*3nYzq`*$gPevmE)~;s7Tqw}$tS zmqFHVpe05#qf%gGQ~!9;_+qJ~i0{Q@+J6H743ZHkg(T+4Ql?sS5;N<0Qo&okbBk?7vMXgAXH3reY50girC^nT`01IFz2Tv)+&uu;o>NIR{Yr#bq?pf-)mn4DjLv_ zoYSvI^QU?9_K({Hl~yah<|>?1IZHi96&l|MWz(G)rG|uKt6L`!J!;0sS-Cpm*;bim zhU2y0SG7qZ`_pM>UzlK4ZJFk~EUz2SkD{Kmh=3!1Ub2%5g9UqvNNY*^qL6>+_Zj_tTz_@9p29jn$xY zOA)Yd<59cwKLc+c1G$`LGuKcoEabMV6?^~q{_n53cl5YgZxKv5w-Y%4>%b;{T+Bha zj=SyUuO)yf6J~vN{ACJFE&Bph&acr;tA?>fh~+GkjZ`6|Ubc9{gHbL*KjLOY91xQ{ zi7zrecn}Et*7(GvF)%nH_K)AZa@!{i_v1akPr5|*$0DSQvZ|6x^SL5NRx2zBr$F|L z_@F_kfSP)4LFS@cGmn=(CQp%CAT10Y6ra;Z7x2*)&JBJ9v)dkf5nE^`wLhSRM$_hjVUY&wyA2j@oQwJ?juW`$q7B+p76iWKHZtVPpYo4|(U`uTXe7sBEd4wjV(g;Vkgvk%t z1O_~5a`&Qz(Vx_X*DYteUmEsFBv@}bZp5V?AAP&dVLUQtMH=HdJ1u7cSZ^?h{I1}( z5E6(aBeU*dD76Z-jyTMEYZ(N)5vb`n>Owy6I{4YQ=w35L=2Q~#i7K@)iYt_XvhRWF zZJVt8w;m=Fw_b9jEQxf91U5}>grp2!{`2W!Df_#jWl->&NQhKOv6pih3lp_`PNasw z@^DnvF4^>S=JJrSUwXw#tI4HjdAX!?_AXDmL}KRS#d}H^B~y!b#CF zO&9c2#V*kiCIcc>3Tfe@iJI}pUx&G9eEzHmYElvrxopmA63J51v#0*hcVRPX$75DA zTLDZI+8FXkG56>Yf56ZQAND5`i|C<^qPI^7P5*wpd@G5pX3QPFrXXFI4r3ldz!L}@ z2Bvf@;}php{~YQc*3vxvi$jK7NI!1%v+uOm9|Iy8n1*y}g-}$jKdDk{y+Tp7&L8Uj z;w(V(S8u2(kIVu)8<`!0qYhEWeJ?{=XLJL4`=LeV?vON?bgk7A0Psr41YPL>5ni!( z3?gx^V{k`=R@Llsw>x-eJAung(&f#B z#HZ&P80xvMRy6m~ z9(mKFRL=Fi!Els|X#nfI-QF}lj#?oLez@#wOiXpQ;7{@jkAF=1Rux?gA9bYnvbL1ZVxra4$2E{&rMIOIo0K?etHMApS-w!^ zLkO*sYx|ho;@(X0i!D#@8`ZfI9!xyB;RiCCnC#Gt@&e`0@(*gM74b~FsihI|Y75lN z?ed;`Twy}v{lmP2zUR}^zjt@vXb>`lxd_RfCbnkLh3Q`-SwVWV9!m^4(9Z)LiPFux zX|h!$+tm#{-^A@3SM1>!UttUl4*K6I3Cwv-NqJrWKu+Iqr69D7|FQmZw?HG`nFRGsmm-~ZeA2lJ_B`A3Pw1QqV5#;M+ zWIB0|wrAazmn*&#kgZgZi}fSYn>=T>w^pI7*vA6~TbW+48MB(=c{^5LS5wjJVMspg z#EeG#oK@uST6eHUV?@8VuaUZejmn^U*-VFQJQLB8XXd=(4PJV%(*~2Gh7;ynSt$p> zS*nG8t5zqzco|1joPPj>=I_0>AHJ)R$>vEgedZb*L0M*-4Z~z4t`A`|%vy4&LexaT z>uplVKuNc&`;5g`YK1-p7N1#{pwI>t5;NY9>^Own+{T>2-umMPWc#+TFka^I=q~WF06G3Q zN{r>x?-+~wFwAiusL15~>A=Q=p05Zs+Aj_|OkyAWBr44b6FX|JhUK@I*yP!HcApvB z3aoR=_|MF{JdToNJ_a6%yiVLopNtLx!T&)OR0xOa%dgE;PR4c4ceC#;&rIWp#q+b47#>syajPTGjpF!Eh&a1$g_?;*i zgF+P8bYg6_J>M+kS-`ttj44}dqsx-y)9v!*_pfQgzA!gvt%u$x?xG`Ym8cq|WVQXUfmq6%%*(^Iq>x~Hf=HX{DUI+c=)4jZsIwMh~U8{_}m5`ePNWz9Kgij&HO zWc=srB8731^VY}I!g_m5AVj*=XL5zrJ$TUz2Zp^A`65+w(Ra8etag3hVfj?Od4=2k zG++4wUG*CKCmIIEVp3E2F-G~e;4i^@`e~bA1uYc(XY1^_R4MQNguY{Lb$l!UTsJ5A`88TYXN+G4ldDpRs z$OJrp9_YIP{tUbN1SnHZO*(SEgI?<)u5b?{LgPV!~xT2`ZXo*VaOs>>_eh)fpSurUw zAhBB(g2#ZF(RggRW1ys@?T6rjth^d97(83M5xIC2|nSbv-)IMiW{>c zO1i^^35HuUg3yI<+GZ!y>rg#g6IhGFo~#jxnD ziTGUZE3SK>-^TOp^Sk#rul@I@6s8`g&~inB#oF$Ms{|gE=lrkxD*@KYP|JK2hlTn}6^vxgJ%DMUVAi`!@*_tIBDINphP;_;C`pJHt*4qu;)ho>7gb+p zDF08c7ul)X>eB|Q!BtV?H@3ti&bNw-40klj9aYPsa&48A=2Fi|gymT6A4KWakPrY| zAM;ulvSben9x?zDEdbBJ(wzK#F#@%!DIgkvp>C>II?`QeQ((!^!%ijKQ@%{Z>!a5i z$;X>D>L^Besu=hDT?A86l0S~sa{J_Q_VIgT`@iqH?}XNF*IiyAGyVG~ThEY*KXW1@ z5%~dr_boi2zEZ|M=Tvb0jErv(?oCx;~I zM_TQ9s(?90PLi&h-;I_gXX-MVb$0e8)BODRNC7-fNJQYyo9^3X%f*h0tZzi<~Z>EA|!3RH;7ypB9S^y zf*I^^6JEp#iUTAIiz+En$JA`1-lj=W2}qLZcC6}yhsw;u5sY1|qZ9XKZ9}GVJBg&@ zc`Y0SP2cUt<0mWmj{N#~Rn||kz!b*nG?6NXrcGisGLTF&h(Iat`c4*S9hqKT155EU z6U?FKo7(K&cC^F7X{J&GItMkM)ppW7h5Vl;lq9N39dCjnF#=B|icy@{4_9});9O*Q z>z349Uri0r3)BlD>p*X!ser-lr!$D( z^YS|I^fRG0R2`c01WF&Hi>%s0o4{7-qq?DpZ z7$DQAZyH%YNKt_nl9=oCQcN5Cd13shIhjLSeyn4|!v973^(u4jBP&7b#qfw$$p;M-5`LC8V-=`KfqN^hljbT(__ z{^QGRG=aCEkNAa#)SEA%HPiq`sPI4EHT>4UpI_BPHXetL?rLd|P+g6v28z$m2_z*v zxRsl=Fa=dB&7>4R^NNebw@6<7Ei{d%qXsaGE{sZLFwR4XF2a}jOP07EUHI&8S(ZO3 zlaK8i@VOMk9+~4;?7bZiSLXbRwh8t|t~cHNgGJ^S@@|t_bXQ2;a~oXoSso#dErvTC zeO`HXpIZxovQIg2_x+iknyV^Sozl$wO4D=HSUBgFx$;sEmiNtj!c@K~CAp*m-r;^# zGaoGXe{a+GD)`laQkT$Vo!@0*HtXZuk=oe}?$zO1P^y3C=q*@U+n6%u2{2*dBA3WS z7=f!(lOc+(?N&6Opx}3hGZ`6~JM)9nW#EWgSEO2Vlb2h& ze5u2ZjhB^yxqyjAau$N-v_zK~B0P?x1zcTpkdB|yH-I1oNp0}N7HN{91O) z6lAXd@~|xeCP-zvJghch_LqbLP26xh5%51%=?mXZuJ?C{?zpRI-aa?|NE@(N(eZi_ zws!v8cM5nO?6+=?>y|r)O3bUHzO5CUc!+ByRN|9W$(lxNvGyUl8r6x+@Q*7$J9=jF zv_}^5dsfBd3|&sM@#E-v4}0Q{i7Km^kb%=9^Fwar;-thMT;#TG$O654V#5@Q!t!aw zvt61F(hMWzP>R9it>%5ImS-e8tvi3z4QG0Hp_B-9rBc3dJsS^5R_^^) zwZd=UKhehyE(AK}YUxU|4c92eloxvz!zTEDc92SDp>$i*P8Zy#5t0;WsLI zhA4{DkqL`BM<{F8L-bOrL$~W*^5?(s>JsmNtC>`Wk?|A$m!{Iv%Ebj}PX0&WSv_s{ zZU@h4jS?_MC5w2CxS7ZLi%r=W3JZ_5F$6ym9vo4xPo%Nm$wAIV!Z|ysZvUGtDUh{} zNLUp=I)hL|Px)9Ngj{NmOrRaWm22K7@TJze)x=<&wl1m9kx+B-gDAo{>Z0?Z;Fuf> zsuy=fHp{GlBp4dyigMtY!4~G*rvIW$a*E!<^mB(zEBwj1*1pb()P&cClLuEc9c~W8 z$Ms`gOm9;n$47uGupuI%)_fHStg@IBuFZ^+vxig9e0^u=F@`L0SxhSvmit~=n;A73 zQQ}4%i{9VQnBOChPf~KSwCj5My4gM8*?oVqY`q^K;ogASIvX};s^o60yViA6&jY?5 zb+-u8vTT(aH05ve3aRH+&&!EeMGi$`a+oJ$WXB}mc^Eov+|P-TdF5BfF~6}jH`<3K z)jsz<483etSb}{_NvWr7W6REZSCpWSf^&l5-xVCQrbm#m*fFh5lN_cCW`Mp?hKt$r3YdJ z=_ds>6Bpi4b*37(1N{<~DMZu1{xa71UX0PSK74Ny$?al((JSJ12+8$%6IWvvI^u_Y z1~h$K?l29>JW6x#c7GU>erXo@va(1n{F59H*Un(P=)2T}r{ZE6P37q{!BvXKAGIm} zT_1=Hq}v#-ELchpBM$pE|sc_alxUD z#!#U?E+sEedoT26C`moqR(^aR> zF?Cq6GHe%1mx;0$pNT(!kHrUO6}_#i&?h^?Vn{C6zf^bB&`dIU2k?Z*g>qq>xe$)w ziQia68?KQks8S%Irz329a>8^`opxX2M7;q=np#hQTiTx zFZx+ygdo`e4v+iwhNOt*P@Un(tLorjl_v7|-=P%C$$RPjs7?xZ@dF=9(uuq-f|Wzx zw|%~|V6Wqj^&uo`UQ4UNRx07MWXNkeA;@>m{NVaFQF zGcKTjwJR#!X2ZB@d?ls!;Bd9?CIN2 z!)iVpNaCrWPV%|hCYG>QHS=1@dZ95Y414O5k#EbXa^=c<-g-5!_)|u)JQC47oB1%o!a|FB#zsH;wgXV+)NPcIc6XD{D>V@_*RW!VRU<8*h-sM zj}^(~t;spBxb7W~_*KZF|3PQaj;!{Pp5UNiQZ()0-*jx^JRPulqa76FCX z=L*-KbYa3d=ioo9A#Zjwl~ghC5WNwq9B`Yu@e29s4nALMTy(FVst}nYm%g(DWNg2! zQyaj=n$H6A-zhn}QrE5*4bFWmJkY}vB3TNGx%5?k$+uuCztwGkOB^F0X zT9jD=Sg5#GqS}*D#G;S4`O(NmdUr> z6(-Bml$!+fHWA!f7!UMz+ySQiiLdpGVUcL`6P_c@jU~eW_HvHIb zlpkW!Y1Oht^83Exk;~@+{qWScA7U*3H6z2#J$y~ny(Gxxkq6_)9mIe>%b!IpI3glu-m5zz%)#Pc;hmidtlpni{H7W~pC_o@pU&cz zCTMB%{ua)V9gXD(s43R9U_N`1Y&JDoG~K*m&G8T#Z2c&|ro1@Q3u<#?ALl%MZjGII zod?QX^NwL-SuFr!1e` z4<$U!b+PmcdIwN1{h!GLBKMO04^=x_Ngxz&+sm2QcX~+tP13*e9mU zc%#bjHRxc;<1opMs_A!Fn?QvJi*jRXZzG<9A;8(`9jk48XJkF= z`l50LOJDR!VAXFYfi4i#kV!Y3iSHtwd0a0QQ2|ctEmB98k)j*QY(F8AfjEn zYWc9ZjIG-Ub6edBZ_4P&r-IW~-9zzS$*1v_!ERR%M^C3!^&P#G?DIUgnl!=^?*m9x z@yX?$Ox3H4-w~fcoZG$sEAi_sq|^eo(JkKLODDc8;U3Fp^`peB45MbtGPDT$o?Uq} ziPZ6j_}~kW<~|klxE(2@FqZ(*tH{74@@xMeK3c5UFlS2(0G?N+p@`d&HSfzvrna3Q zHYJbpASV)|z8`%J_F4?gNTn`%9uK6S4lk+#Vh9xnO&KVaBDUF_Tay*aX6@*fiu~EZ z7g1HZV=0p;>}s#GII&oC&16`P8-D|i`PQ$as)zC#EB$WsIz=7tEXI#D@Pz@ZK?FtHxZWN z{TY1Sd=i*?j;Y+wpaQQm9lqG2lZb=`Ga8=Y8K?|&5W3-u{$6I^X%Ee$pvMveuCaAC z)li|-e7Nyg1>&EaRzI#ay4@UisVw1~b=W`e13*An#hVjh9Okvbk2X7H^Ja03ltZ(r zUvsb3_cr58BgS@nD_Z!9ve6|trX$AAuYSR>(=Q;+nn^b87>V$#l59trT9EF{_Vap!13yRs|CB)QHmgDeA^5 zOYJdTt(;7We_k8Y65pyYZGQS%*8C!uWlj^o(CL8r6!dk;!jxv`MTr&!iPQ#pEF24P z5_5f~sV8D7=PBU$n`dWD*iNZo8XEphWr(UPc)@`?XU(Yd{^%GTJ^;!8301ZWQdB5L zjL_k>vlBw|x@RHr0>#cre&@Eh<;8#(riO zkp&m?{pk_|K03L}o^4%jD4tyX<_{eDaU0Z6^GxlT0fPL>1o*d>Is?$#OhjQCT=(*w z7L~y|JBRP4HoBbApPTEIiAId?PRIt;jS>xG5SBDIo*s8va{~sQy5BhzZYbtGPjX2H z`7NF3Y#yQSV~#JEFg`+z{ckX3K$pa|f+fNFu4QP>-L|Q3`TO;Tfz1hsy^az?$T-q; zL9fjDF9(jR`1yZ*VE--Hf&VSoNFY02fy?TAZotbE2C99!Rfn^qEAX~mD1qkl+~``` z-{4uZFYF$Ys*Ca#_S)l zwW#<}U#SBmZTE2R=tT9F1Ba>Ziviz_%N}ywKR_0~)J^8x9{;pyciwOo`7}OfbAh?3 zs{2u%fTv~B?SERYD>ZBXiPaqiII|MnTSgSURP!Qm@%C8>R`ggs+}lE8rTewW)+s@4uZsH*LFW=I$KKWu-&>ko{l+)y|W-O|wZ z70sc(Du%T+ZIHW05u607mgC6|T-Y+Or{oyVhF4!Yn-JRn%^EwZJ&R<32|7#pMNcrg^D|#u zbzbvhC@kL>qF{#8ezq@hP;J^-qv!sRnd~IpC#uhg31E~rs@^Bz$!gnanv4H;b=nty z?<3uQOUbwLuE}cOSog1P!GA_5HC*n?hL$2`WQJIpS^TSO8q$mzxy&=9MqA2``wI3F z$lYP$UixjgT{4kgqRymf8OB_qVC>HEJAERXyj#|cIV)B0nnRw%)Bs?LA!g>%CH f+lOxRCs0dBc~9j00X6*e2ZEZCmST;(RoMRltJdBv literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_bonobo.png b/app/src/main/res/drawable/ic_level_bonobo.png new file mode 100644 index 0000000000000000000000000000000000000000..d6328c108a09d67ab0115ca241bd63f59e7d81a9 GIT binary patch literal 154112 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�_m$oh+q54gl3G>2BAe})g5}@P6>6Qc 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 QcYtoUZkWL;t~3h=#>?;h4e#UY)xE0wORqXr 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 I#yIHz0ZxtQDF6Tf literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_chaser.png b/app/src/main/res/drawable/ic_level_chaser.png new file mode 100644 index 0000000000000000000000000000000000000000..9ae457b164e680b8ba4be3c9bce2f6ba87dbda34 GIT binary patch literal 86680 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

bD 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 z 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

  • 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∾Gr#%!k1;zDbT!1|2h_3CZTX7U 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 Ef*!zv3IG5A literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_echo.png b/app/src/main/res/drawable/ic_level_echo.png new file mode 100644 index 0000000000000000000000000000000000000000..8e5bd64bea746a907168ef3de12c12b73e4c2aab GIT binary patch literal 103941 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

    }J}vaoQ}~Cp#h+`j)3!D!UO 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_goldfish.png b/app/src/main/res/drawable/ic_level_goldfish.png new file mode 100644 index 0000000000000000000000000000000000000000..e72b0f387f266c8454be1ac7eb6787efab80a82e GIT binary patch literal 108666 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%0DTCcRV2<=4^?a$*6NxXuhWbGFpgZG zK07?f%=yDW8vys~jd*{6X15=v)2@62h>xV3yXhH#H4C-c$LZhho$sZ|UgVZTd9_db z8PfdH1|_PFI{k;9lZ%s&0=o{&jkZ!+rxV&0H~A*DfEp!$j5Nhe=Os>R)=~ zZvZP-o@gtU?+@^={%XK4&+G`Jf4wqJikWCHh$X|XvlvuIg9+}OFy$Jlj9m~RGZnE5 zq`xUGbZ-Zz!orh!7Hd|GYE#g$j!P6%QxnGB)*die40q z3!@d4AE^^ty^@@^4-vKx`iEx9;&lKHce2S?huCli0D$Fq!DZLb(eY6x-AY%V*X+UYi3f<9Coy{gtmBr;vm-ZX~M45w03mk+yn zOzX!|M`dBD{t`|^2qnr$`>vS$<`Z5r9`mIq%j<#6Oz~&WoI(G0FP!Y0`Ef4j@c_@I zS3F6kOQ4q>)@s_;jUo;ABW527G)%A4@~|t>B7Ie4nE(jd+4}s_Wz;aAU$R;3buNF8 z0c+AUy7a6yB-RKkPp6z@aU>N_^)ZVCS|F=ele9TDQ9Di#PMh3Q`zK?7np*feYFVY; z-r8uyt?i`k^*Mtmm+CjxiO^qT5Vi7ZCQRIO*7PBbc(T5=9uXAEUR>bwt9Ly6>GW4W z_=*WHKk$BBAUL^V`}~coHTDBsOa0x&u$$7Fm$Y7~@=~)=RaaMTpT7mb+lXi}Y0p@< z*l-2_5yk$KUVa$$;Io1HW8w(1UErYiGGlFrlJ0-)6un&P1vvePG;J%~%c z{#CIWACy}-x{-uIpLBcf<<6G}IQ6(GVoG`)3)r)pdPAGLw?FNetz&7c0MZsHnvd#h z`W-n)ooVXT+^nP)tVt4+nDuoQ9|Ozu1rc~|FjK$hrC-Az{EHuB=2PzLj_4}^W-gZB z{`04e|Ll9dzS=c>BlY6T5cz5lZ()#FhN-Pw_1X1~*8X~7NezTH@ykEWDl2D2tRZK} z+ZjgAiRk1n-F}va(a74lyGJZ3>-Cl}y$@Z!i7Xw_i+3WVw+C7`X-ezzRzm33$Fw!c zbr(#n6QkjAIab4lq-_D+WJ&+nRBFW-uD5a=>;DHcpLt(<;fQGQVLLa! zwO`QnvE~WPRPoKnx}cckD}eexR;pNEGCzCk>2ouGN<{AmFmkE>KYQODXiZYo`>UQg z=iKzg{WilUHnN#0f*>eS2@eH9BuNwjpC~2-L4k(>pP)Vz1r)?U6afWM7Xc-@u!+ri z*}Px=?!D)nnXdOog|3-<7Yw_=etT;7yJx1my1J^myQ;dUr)LItVJPEuKLTbZ+;qv& z)7RYhgYCAtQxi~;Z{RP+%nXtlU*?jgggS%WwB^Ymtux@wLnw$HQOC=IXyrRDw^KF{ zcSF)aELoawF+JN!fr@4UNNjDp&6zXps;(Zq=_|iXn~wM>5iJ+2yEZU$&F}iblP1@H z{#UVi_&sRzVMM707$o0K==fDCFL^{NYf}2{(Z%R@q5y_u(L-!vcUX4ZaIYG#KvQGe z0un%ahlV>Yp%+SO$BS}zYg(tnFr+^rL@Me)C2&n$g{%kb2@{y`>?kLjmo^@(ulJ%a zJ>HmdKPnR%`qSe<@3Z2Chc3=XuZ*mw=zH@120&On=$Dm3Du(r}lF6xR(~iA2R*(II zPttv!`DUWgB}Al$Q{3^u%r!IL=kqu1`n?^K$qDmywTXcWDuwC5Sf92zx4^FZ9I)}4 zgXf38PedOFaPw^U|Na9$-1axfId5ow?cvWxd;YI6Xj>flT{~c-Jj?_b>ljpY9lKi# zw+@AtCYd7+l}Wmxdx>5o&@n!Gs88U-4O*Z8U5bqCf}%(3N-aRL@i23n($VMFulwxt zFjzR}&NM>bE?_>Z<~Ka$wCQl=E$wJYwNzTAmYLOlpd=TLDRpH{WW8wZWo+apkN=^&@`mi|IkX^a}vazca_51_8%hzdU*3rMvb%V_%cECgP0*TFBr^mpYb* zsoH(?;@tM5mPUVFRn><9TnAv^Z0Udhg4j>@D_~|CpZmV!>5qQ$L%eDJL`t0G^{rf- zHS56bk9!XSP-Z+fvJC~|;1Qf|XZA*Ne6M->HI61+yI}}vK8Xx`8BT{zY(X!eR@Cx) z(^^vdBNw{%yNAZ~fajhyc-EVL8o*U|IkO8&TW4`^0C$R+_xsGyJEtFAky%qa^31$wc4y75CK zXcZJBqtOvj5W2!xB?K^9WG2*mrmJ+%hyDjY?H~U4U_j>*(WFP@4g+RR%)A6(%SwZT zcTLAnoHY5NqpI4pSkd13;oyrE;lo694S*d0_S}{2!3=I6Yy|F?z|31#fAPd$NQ3P^ zMLBPh0cT@Z2e6NBGp2e}sAij8VIAik!_pb-y#%GsTD|Yi1}S6`XyPjj6q)|Aq`f; zvwnfV|Em^lMjA)?(xG<(;7KL;C5`z0`Q;=lQsdr$xU-G9rA z=@^3S`Sytosrj)_x7tANaEnmNXu3HeF)o_XpX}I|(>mparsKr| zK;gxwFx@;L80j9EaZ*`X0Gt=ryf4N?qfg18;37t z#_<4Z)48_T`YS%(X3?3!JweG88fD2j6qf>ivu;}jd;qJUm8!47rx!HY?NxE^jtERqyrM&_oe#|K=DXTJZ< z>EQc)oQQ6n&Aw-FXF=%U`zPeQ=iv5#pZ=C+anBP{&hu31j6(;WnO}2-F(6puG^4h9 zMpzt6IZ;jQxGpeu{IU{Z6bl!Oi(PkYkuBFoV?&TxgVI~$C?wVEldB*^tN>YMX5@yO z`oQ~rwf=>Fd?A4Ih^RGc->tyR_1-t$>%>8I^DknddIXpbCbC`CqM-~%LP9(lqNp=Q zg#|2FbUjj6(Ig+8E-M1-fvJ2w93>Tb@%|JNrCKW=X3UB&U#=@}8bp6-`Qn5mJ?3|S z!b5n6&}X1(FkePt#=agspa>K7*wLq=iI9rV0LSO<0b+uaTkBvu5ULCV)`y?i18a!L z&^lnrY>#714r?rHry$&VZ4V9p2qi!OA+-%MbDP@DSM%fE`lt1YPkIj#T|Wx~W^iY~ ze)$?;1fr$e_`#2V3+))+%#<0OGXdWY0sw02r@Zm%dgI~eaaB+3xLr0oV>deR<*y8CbG-5y)Z*A>lf!zihPpnn&KZ+A?}u9^%0XX~{KJ{*>R)e(uCvA7uvV zyU+EX^or;Z0A~MkgO;%>g^1G^0z%4~0syFdYS@vt-|pixF{GA1{+nB3f=s(X`63yLgwF@}wb=2@L!33Q`w38G8ypO$9#fxKK7 z#~Hh-+=RyrDvw;O^H1wyt>2ljYXw=sv2syZVIAB)rqvKrm^m7@+a$3_1&pp4MWv;bPC=5>;nbsUD_EKU8Y+`maH`=_GgVdg~;%VAR{aZ%&M%{fEg;-!Di~&^?^7Bo`$x z@W$#yX9mHcLU37MOoQzcu)r=jT0#jt4Q!PFHGnCw_v{uc7iLUu&6wPjvG=?T3~U5Q zACb;){K2AOl}mnIE?;YrYvae~@+zN8(@E~>z=w+7+c*)gS#pAE95p03Z9VfTB9a~c zW8+2bKmiL_OpZ?R0>n_wDo6{t0<0Tqu*53n8ZywMpi=_Z2`QyC*)Vs|^n=fNYJ0(Z zUo{H?W^hNt-6Q~@DW32fmtt^_|47WM8CgfO8mTbhvtvCaTdYu-QrbYbXLnXe>M;W# zCR=c_jdG>2j(rg}+gmKsd|dbi3%f<%x5P2$P|6M!t- zrz%yr@Sl$1%Rc`Lyl>w@j`SS{W={CS?>~5Y&4-_oH_ZKC=5#8E2BLMWvCeVf#C2DE zm#6!UZ>F=h=@1ARYaf@}Av+G1*`MM2wYf{n?|W>!hy}CuS2XG~NvE4KH_QKt!BN5RpgU3GmO?g*y9Wk=c zReTm^1K9?6G&o%#+i;~;gKSW{Rf1#&nns492G8w-a-uZNc)4-Y_r^NL&WI6^tgIAM zvg}3#8i>FqZ;WEZjTtTH@@q05I6u#S^~wjf3!{_18$KP(%oYFs2}e$rzwk0%7`&Q+ z69}kNI7k$USXzxY8WKl5?5B`m3aX&eubu8L&o| zaoQQ`FAyV*f=f{R5XZSc^u{!X#L-W0Xt8>A1`S0&rVauD6(R4{fS?0Lqa5{XD(vXB zlPQVhJOvqb`n#6Z;IKWfMCYO|L16s?r|B-PJxD_o8VINM$%WFeLE}kEOP#rl&B&9s zl?^RpnL|f2Sy_4VtTOwTP87lgE$a8G5UITa5fN`(*qT4`lmDyv>R-Q05ji{mi!C7d}WF%oL=Ig4?OwZm+U8YeT7F<F)84iv;dmk^tHp& zr~ml1%&SLyCyfp>SL0V7eQdMuhF?ZKdL9$*36f(>UG*L9Lwt zi^=sZFbF}1Z7Nj0(t^-|>B?ngPw#6AFgZ%Tb8b8r#Rs~IZEChOHu<$KV^!bgkZVQO zAG^0)i54VJQiAeKFT$9LZtZPJLPr3TuBq331jpMA;XuYQBQL;=}rR_W^j%Bf& z-M~yhYKadRZNo=@>S?&-Loa0J!@iT_aR&Pb+}%3R4m|pWe^l*W`9{l}%XlS#2}x&T zGBW@Gw(sWXAl46-_%u)rexwsVfC6;_Qpb) zrRoeujePtvVPxBQ;4G3!*4tZ&E$uedC@3;JAs)ie&Ycrq>Vd%JulFY z<|-YOQc7fdIr=)*OTYvR?cr1{Gbo^&s^E=lo?rE=0c61GQ<>=0GN{aESotaZd8=MX)nFxF=KKSg9f@{0gik`G8 z)oT<+_{jS9LDaAJ$^LV8tD}=95doe&6)#vn)-rZo*wGSUoI>B&ao$UDtzQEM z-B(lMqpamMJr*Rj2T*0XHT5VFY%dxmz0vG~r}zCdkp@XMKmbxpX}W22@bp73eOA8p zf@d@H0pIO!>CE7}8}3#C01>r=Gk@qC`QX$4Au;WhX)}D#*%*}Bo6gwc;PhSA@*LJ7 zETw|U_er_K<$z@W7&4ns+wIPTpmWO<42=-cxg4O&p9Got$?QdEQV?7*RPJ)5yfYK! zwVA2n>C8)L5o$Ex!SWV<*Uvp4z%k$MO-SPWx1KZ}wQp(%{8&)hoP0Xxc2Yr?T;;NW zUl*4h!P)^Rx-JPJSd%#7s$^7-+G><=MQG(z*yJvj;=b(a(TvpJIp+ z(>e=sIX<-P98x|7!IP}c^1QR;NuA_|#;-$FZAwU^s+xZBFOT8vSG*FyfhG6O1!k`J zcaA(^I-0(b5v&g8_yJ=LRF8OjcH(jhK%K}H%N6U;aXx*5;J48twyz})--jz zffRbdQzDhY>n!cyr{9I3RD#-`EKpWhE_^cU70HFX0i*JS?5BL7~OD8|>Z_+C7k_|kvl&a%U@ni^#A=BA&h6V?U=VMtf zjDR|BM!-|?acGxN7)Lm)F({2TW=X2QE(O+*jllopv&u$soYSxcK47v9a3OE9KoR3~M} zbr06;1*D=#y9H#=hU(Zir1e4xsj@VLu|cpe`B=V`H6*WF>6(M`fCA!7%IrAu8+aTr z##guCR{DpZ7Z8A%k%olf5f#uVuVeuu)@Z`+T&E$gBRq;zmT_d`AtD9cQgGq{`YEoh zP@zyUx@#J+=q#4+@UG6;`Bi?rToJY-Hpyv)fSv+skN-r_Ld!}9KAei-i<#+U8LF#{ zB$Gf$6;VZtHB)XWwQ5n+l-RTM z&M>x6TuhC;E(kGhI)KX{w`YT8S}I1R%<7_@U?Ef{<9aNw)fFv*pvXOk8At))U!FNy zia}g%bPilnxsxv8#=EMJh*1p_O)vZW;q7PN{Tp}o34zRI!>0>3znn(&NFG!h zQUal3v;67+1BCXI`+`HJ_b{_s<7+%ae-s}Ekvb1GV(6Q3vx1H;lv7@2QD5XT10VBxYzxNUv z7)estSJMfW(J5JEu&lUWpfp~QmUJa|N2z?>#zR-^YqMF5HN%PD%>pt03ym* zI^>%C=%0Bj_T}3;n}t{mj}J_@JLG1AEz*a~l-$l~PypDWG3C8!L6$Vn4`bb`mV{tw z9mGHgxiaGvGG#VsW<)YdS}av)mr9B=QHrVqH)u?#w=E9%W50C*kRNkroe;>(wD)aK z-j-G`{&B9-lQXatwkOM2gz)3~0;%%~0fJ`ADvHdSIuLLDT6INA-}hP+dKT=J;w7k) z)SzQ4XvqDUy2I`BwkG)Kc$gAsN)gFpusrv_yhSxE=|EtQ0iFQ!CsoMPP@!HjB;YWL zqLPlr1;2xh=>>MB_;J4iST;Qx zQIa&{*GkDLTwxO+=^Fy2kb{ibq6dZrbJnqY@(c663TasdU(yK-+Bg`jeC|zW;Ol?= zR$$*L-|js+Gq`KR-7)|G03uo*{IA!1y4rB$MH$spW^S_M)=Um*U~W#Abx;Co$z>!9 z!D4$tC1pOtD6>!?&Hx?R{IwMblME^@Ka{a&!D7xxXh3-)DC5RKVcDvW;2j~vJ^)-B zOaOC6UcGKh^S7^m0WiJ8UkhYr!uy}PvEKE`$6=mc0MH?c#0zuKxjA72>Li+iEI2Br z-XZ8%el38|<9#)q5TY`x&xmO{8;-SWXbZs)3bjw?mJ0M&->>gCN(3@m-6+DGj{hYf z)xhdy88mRl0CS28dCHhSq5`F=YXst^G@qsxUBrfY_ zMIEXKsl@{F!Y7A=y{e6)!Q{g)K7+6S+UxbSz&mtY&S3wAyKP4yA||5iswe;AYtr_; z*Af%U7szDb+h}(~LozEcfA4m}@O|+6ZMm^XJ`Unw5zIxozcw27>k|?=Y!+IVIDRz< zR^AFa{f>zV* zi|&{~y~BklY$9a@{v@}s+uJeT=gn}NU5sY0Xs2*#X9b85^+rN2 zkLrShKw#+VAP}3RS%CDA_^bnwH-JZjOE1Np4uB`dSbJVTAD!7j=ld{5Icpi zYzSEuu-SwgFEa|Hzdn;#J9U?Ft~jASlf%gbHqH1NKL(_>g`pRKF8k_pWoD$7(2nwk z{GOLQev0Wm?x-cl{FcXznw!sh05*(XpHe!$8l;M9UGh|q5a&zQI_^h;BvD1C1GyGi zq$~jz2IUesu+G37tcZf?sOuJDq!{>RD-mhfEKcf=vp`Gjl=Dzc1Yt$&%!)l%j`m%> zvH=aH;Uk}p!@&G8HFzqN<6ps3y?6NN)vMra6m~U1xu!C!E;T3$srS_kLF)z%!bS;R zjEcE8uOFJ9G$nolSrN+SSsiaA|7@HmqpNipc$(Znib~)jbTohr%JVt^5C5%jZ+2GHRZvsE%axPd`626_y2Zm)SbayAMVxx000otZS+%b ze`}s@x~kD5f?4dx8iyms!V1RUE*=$^zQ&jchK+PCj@FT_fI1~LDh%|FmsK!2&|>O* zWHvA9Yl^6m6-?pSJS7Q&pB+yq2GERNny*v-@<$G@Z@uEhz@9BV^8aPv_dR8}y7IaE zPnXi~a>mI3t+Sb_tXXs*=vSrgwT9v-hW(RPlAt2Kj#<#1Xeck~!Dj)YuAZ}(Ujl%v z&zIwpw;+XoUFeYVd|g>kemK0R57I!bW~^SBfhvVLxz#Us?U=D}VuiM`G~+7%+R;B< z-Wc70tNa!`xsuLBqODGjWLw`}Q$-1)y`FB6Ai9Z~4A-RN1pw?-MgtZN8gHy=o@wJD z#%HCV1Qe!w$S<+Ij%%{Uj$uS3!H?lK1lA9Q7)vowSA7a?EeOb}lHrwDLx(v56{YdY zHAmw^&wL|*(`K6jXYj3H761^n7%W^lc-+h1nRbu2vl{b``5+yzW_!ZD*ee^A;vmIQ zOKJ7Tg6n0w4ud-L0x8e}xNXM-D@{hK0jiR|UmYPB6R#&)uwsZIvU;f)GXPm;!LSSq zgKRUS%IF0d?WVy}{?MBqF~){%|C48q{FOf*OfUTCeKAOHNld3EaNT$0_DgmXGYW&E z$vA;DT*VWOSZ=u&Nn;^&QsR9#SWta-0s?ji#b6+r4%Z7{%$uwOkzX=yl|2H0jBEj# zrsoNx*>2yjF2S6HI`S6j+@T3nm(_`QM6UsbIp?}yMU;m3zoHTU>+kRz5PaCuLW;7gEic|t}X(b?dlUV!h1LTQSf80J65 zss8qEIqWrXc`Y!vYDaC|Uh<)nanT2UXTp;c?x+>I8SJ0%-!|O)6A;nf^w^*OyL#Jc z7gEksj^;$Ifli1^KyI&?+4y9`4aP-nqnGyzg+9S%9zLo804Wi!yLuTneq$L|T(}$O zoV^3zxOOkN22jT)GiM*lGjvL7sU?spvk$vAljBp^a{5V-L9WAj=R~MR1LAW&ux&V9 ze$0ROh+yWk>gfkwbQ*6Qyd_n9T1r(d_EJomsmy-M%&Z^qM5OR9yrE&oBZdq?sM!eCCUD0{unK~n*MJHUoLj_uE=aPpuNyemgCMJD zS%fY-_+^zO^6882VSk35!%(m+*q8MZXItapuF8r~WPf5H#Qw*aEGqCu5*mHF1bM{3 z1k|XIH_Z>*554frdi%9M!^{WI_5;k|_TYBM%-soyC==1u>6yR%E4X#}@{Bffj=t3* z{5W{~1Ke!8Id(M`x|$#$2H9p`%x1j0wjguHq4!uo(*T1yVK^e}-Z{kuXYa)I*DQk* zA=OC?4H1~_*kE&bohfMuKE!|k#TtsO5hG2k$Xpzi$t_n(Gy|M7FdS^oA9>@mX*@o_ zYWU9rGgtg8kGeM>wCSxmRc8>@wN+aJ72yoUCIWzLkg|p#lTQt`iY95LluWj|=g>v0@~2ds7_aW$tbX3l$!&t6MR{8A^vS3Ao zw0`5%DArTPo%|*J_63T=_Hx!z@pa#bU|_no@fQO6{+SChxQYNCNElYogVt5-OQ=}; zekmnVC$%L^38~F!mUyZC;L{%i;0Ks_p%9qC3<}Hw00knN;)I8sUp?SQ-jh~%Cs*po zEnk1x|LDDD6l0-ID>xJ;HKr^hmjx{hUo{A}If)6Q8aU;?n?Z@tPGwbKG_0_5=LF|} zbqB7#axYM`Zh9(9jg-xBhx+w#FtJ({w>x5_L{jC1Sv|bS;6~E~f$#|icyUxsKl7f0 zFgJJXe`V7VGpE(xKIN$C=B3wiMQ0LW;6}1zI2pwKce3R+KBKn3CJUJu;PN!v4Kt7> zD)aV|A1Q5Bl@?cEo&M|FAdcZ4qG+=NCYS5i3u-aTGu@UU>4yqgP-X<&Ve00x8d$ly z1=Y~~9T8XPrVR!QQj&%FNU0h~PB4={uEU={#$VR!SacYGkVi|2!B>Vwat zcNu!_sMQdQ`;-ChR>uqXje-7Q3b>arN8_P(;O18~0fk{m@CwYZ0@)7>3-EnrxEGAwD9(~#&yW|M~a*H(Cv90}&_x~dE z@_*_Z0rIZ@a}L7vs%P>L-$%flJ5Dozh0CCK`z!pEj$6vetpzyl;a&epv(+DahPML6 zcg~|Hu{1*R&1GhU^*8D+-nt;lyE+rn6qC#F%V9EB29ZO(HRqQ=37A~lg35=Hr8kn4 zC(3f*&rub)k>DUw^;iNiFf4lUYW+YSgw3eNebI)2O50Ik2g5$9&;w!HKHO92ck_*Y z? zFVdH+WI>W?ZoaPg({DJDum0En!_3G0Pxk7}VE=?!hX_DKc{CbbSv~$2UsG*gzNX0} zW{>5}Z-Q71UxL+$U%pyqCdjVLmM~H`RgJLDGJ1nphIXOfu4Wu^*aA*Gb(8GX%Q6!s zFb2a4yLL=)-dAqJEw_wOjm$QP!4clW3>s!2+$0HzU{IF)8saYsA|ou9Y8@NvA^-DV z91qMN@vUYV%uM*&?`>MX_OECzlE0H1 zWwT+)xBdfg0}Kx$pe}letQ8Qd?r=EJf%2v|>%NYv2_6H3I($en+scKJw&6wSI^T|LL5~(&r!JE8h{Cg| zSl6#K7^1MTF);3|n7-tnOa^%K+_3q;i_Sn^eL8?mUVH{Km<0f9frzH~!IyoV4}b6{ z2TijVx`9uO8HxXsajpeq2Ec&q_|`NTw05Ik2t=7k+h7$t)tx`N-I3`6a+5J6;H1;H zV8f;XnyJtw${->PhY7b_zl;mc-i4Jhg9eowBOnDoW+&0v*W7}=fHBvb?H55*E=L9+ z@j!d=KOThTn}42}zr|jFt47U7U-yuD^YDLjs*XVNNAtpj^C@+xDGk+|k+yDYcoFn2 z$lT8=_bQvqYwco)Vb*JkT0_GwLJ*1}{8;kR0?3yuALlrBE z*934P8G_D^RI((Yywpzi`cFYonC|V z#6x$wP&S-$U?yDlRcMKxrm;=A4c1*R#E=%};^;l8#K;HY{wkPZsP6RA^OS+I(qA|h ze&Q^zl-E-7my|%mnC>XflAwH;Lui5F5ed{vX~~Cbyccvv{hEKb3=_rwxzZfpz;%l7 zd0$5f6_`^bW!x1cjl@u=N&ry;p8Af@f z)N}N5y-`ObK|o3=HCKG{Ue)EFeB+({A+H(SwP4l}ZU=JCi}=Ss0G&W$zxa{K-@WSp z(5B&`vfEA!G*E1n{K^8JJC|rl6pzDz2SbX{sPN=|IMY8^hMp;lvcRBVm0=P%)C|ls0 z$hro4ZAB2ByZ+W8AHlLC8c_%a)qY7Nz3N>*c3*;+4tj@P=uiZ3){V3&ftrJFssH!ae~qYm z4-xIP;xoAWLchz+KtZGAdrtn~iEqi*e)iE-mF8_h&p_;+oY~zs4(5;n8?9UnKzYL5 z1q$DZ*X2H5V;G7dtA+_T-nfh#uU)}#E~#;q0;G>pbIUmDxFswt4bVaL2s4k6Hs>1#=- zrwfUC8N}(*v1>-z$QhCi#MU#YV(dLTgXT2X%9%rL3B$t)gRKe3a)=bj2nvqQJC$&( z$OI~ac?{Lb?{oLfa-yt7=*~C+gW486o`McO8GOnUF*y2upwR-*Oo4U}x>ONXn~WP zkpRwM&Rie!BbTKY{>dX#N>^JhGpEU`hbPgth4(guQ!1j0Bppa4Q1R+Qk6c$j>n1An z4LFO!JAp#qUb@`f&?5pvHei7ZkL0txK0~F^ET@lQGd8QOl(1Q*Pv>p;!U>i7CsyiXAvC(@tBk{WFjZ*J|3~1DFdv^~y_r zKP?>cyF|28FlTUgh1ni}ZvsTr@?g`&!>7Ie|Ky$ft~b}s=x#tRgDi|z8FETU^B`7} z)o4pFUyPTbb;<>!AqIklKFN0C+{$|T$)|0`;)WrbY1SDCsj(;2!-VDK2Iqfu2bNbG zePvK6`fKfKU?gw}!H0X4a%(eJNs<{{s)m%m_P!x7S%}XV`L&xi=dBxlG9w?I0Na(| zPEhtSsKjAsbUf@PFw?p0Lf5GRWiy(gW{A`AqO9#9n(%U65UqG2MPtA0Gh&Tqfku=g z0Ljddp$^$Ne;&pO|NsA+oTEsn% zT*74RzRe1O08|6Q6_@P6_17+=8cNeMAm;_J7^K3l5ztgO`sGaY5+^V+Pmw7t<}ZKn z`vEKh0RI}&bW3#@s`hbA)e`Jnf*`-h9P8B+5`A@&g93`YG09Sux`R7JO(f-+U>9qh zvq%_IBSpLKrxlPK%~w4V)Q@SF2NYpth3u6tOLs2195MmTPT4fdDhAMFY04NJUIC5u zse)u^$;*<|Va!4I6hz{#z*vdp*}c-%Huh1#2xdm)Wtfv=q?H!c_q+_lr@sx@umDW= zfo1n<7gQ$>krlfRyf`pHcEe`SWH+jlACAFKz7IIybX4OB_1rQMvE!}Ga6R=<>Q@nkh3^bOJj9#ZamB|%D68CSazs? zQiqu*mfh82JaRD_OlYT!jT;9z>GX|4OMR%>1IoZ)n6PW-1Q(vW6Pe{0*_^X%AT&Mz ze@vk_%9m6|fNnSxqfba8{^n|P^M${AE;Ap=SDrNojE+ERpHEDOCFW$C6pMih2l`l= z_+?X|r@0!SIyMM8i#QG`Iy%cQQGsu=RA70KvX%~@G-T*c!0EN5H9{* zqZDhWZh~k~$ANue~1{5qa<3$&Z-x#knEy&p5*YxY{;-5X{Bz<&aWsHNf7i>v4S<}cB0`!3JO z@~r^aGHS6(K2c#cC=5UY0bBA7W7Uz>Ry)KQqm1!*{=Hfh9oz`!fmCh%%TUNtUJ=t5)AiM;xU z213_`5KfFPgF;|e%6E9_JyMaZ&_>p9erv+%jF|+Vp}}a9k1=u1NYz28pZ#uBi}Rpn zr8v7tA2ujL1ZV?{?U{}SbH-aIA|g`Hx+Bn@jymwx0> z+;+jQF!O8`;BE}vo->1Q3e3D^`WHX*qWpzFe+6%O?8Q9hnX3(C2i&U-`({ApMToT- z>ab+PlgwW2lemR=s6=mFe@;s$^0sNtkwuuuCP7YA>+o$3KIqy(XJb~*-Vo`^(@h~r zaOi!;jJ&p&?hykjVETw=Y$j`K}{gILCa>&GC< z9qDm7$gs+p`M^hBJ9ye({RGkA3q&*xm@~MWz_;jbGl;;GlR<~IpeoD93R%CA?)I%~ zm0aT6vwv&Sd*w-1D*RpzqCpqC2Ww-n+sC~<&^B_(m_b8rhiseNdsInuTnLoQ;@kAE zD+r(=WBKd`7z%BIFz?McWh|apgKF)Q+CDNf?>Y7WjObK4sdCxVQzu^ovvqR1V6P~) z^GMHp2P*S7x!>r@h&8%>6i6R^QI)`hISD*l2DdGUr)Zlgh$>m#vPT;Pdzhv|^ciFQ zCP4+P?m_$B7onZ2f&`^NzhA9UmqKhihe(P=p0MD*R>3{uY@um~&KhBWwMDhr!|TO? zUfMGm(~G`xR@!>x^HN&8J`|h5-2~S5pc#BqVCD)tFF1AlOAr3je8BwaiKn%gn=-;} zpq3BwNLC!TehmO+9$(1VWt_l}P0$rz4Lwqp2RE@y^h+jI^&s z^{jUQ^9#~nSRH-j!7jBNQ$ikXLZS+{?cR&ee(@4~^~>kUM~)JsrW%WzHsP3~kHGgm z=tOK@nnPN>6`X-eUO4SWkRm{61XW-Hu;XS--~Tf3!l;O1{G0s7V((&2x6r<2wGe^> z57?cBpTJcCZ7*M$S|1Cc{Cd1tA|p$iBm%b?)ge#1x_Zi=|0ofCm5Ah>%o*Hmpwmxg z@SlU6^9Y~%tw&5g{JKBDmieQIkeDk_m4RHAjiJS7?e zHU4a?1!|Ow!(>oO$Qiisf}I!+Zok>b(~N@;S-`=E%%Pp=ti%Kf973<;oN~>cW6&Xu z96%nPFBfoz0`v`9SATw?POiu=xLw^94lSS}ge82l<1BxQB%NxyDZ$wVb(b)RMK?4A zRxWEX-O+-E5_IKh#@rDV2AiuQmCK?l7Zl`)mAmjlA2l$!yg|EC>K0kF-CJPp@Pul! zzn-#2k5Xr$X#u1rgx}D{-nej`xehhJEv$xnmi;l5vz+&^yo&0PzY03)en4)5vh{+Y z0ZpsVW`MSy!^Kzc!V7=;_4x7yH=s!XssVUzB%3?41h_nIKmT+pZnQec4TOK^)Dr*xY3f zziVtkucA&_1Millm#_bbq0oyfWj2nG2x)t>oL+JH2Wb9)pHC^>(jzc~{T%E8+zkE; zKtvNf@)y1`IQ2(Al2@8NGOie$)wrm65M(RGG8j9K8IV2a!FWJsMsl6YxHlx|3IoYw z27(xM!*iqGSy7akVj|$=)3%^(b@BySrLeLL!f=pq%S|h|=BmA@hdPrqBf?gL{6plB z2{?EPZgumZQtX0BY0Pn%sXD5xXlPZEV!v!<3N94SarCd&BLA!kQLW;1q5)BFm?#o7 zArcZQfdf$r)r@`THfVP<(oiT6^fbOLGQ_M5$s^_1pS=+Gd&G7fNlo(|3#^s(h?d|0&MOi0Ega=h3R~9@76>AfXX%(TwF5xTXqPb0XT9!w z0USL0T=3lwW)1$|0C_c#Zc8tD_uK2yVP_+!2`D3}ap7Rp{Q0zuS|6mvD(D*m9Y?OS zEZA#W>d-jYXm@7e12&pwAjV&v0ILCPfs;<%Qf36YD=50vdO+B_r@^Hc??zSYo&v>T ztHi_tfyN1R*cjxiA4RtK<2R}c`A@U$h($G2EQ+)eg$9=!C+k&)s0ZX3#+B7)%^-=v z>uVkmbY0A=LPr=-m9h7n2AnfcNnJ^w$1j~++f+^Ej&uXWe!+#G*p}@co8c9DBB3A+ zw&-39g38?2g~}h3ApxKk(f+2Dy2sftJo7g&-ntDf1F~fxl>>f|qz@9j?=w1jrs0r<^7{}hfo z{poo9TR#k5I;iY`15DYae$)HvPE?QnB~Vl87c*HmA}GIo60tFrB&d75amlxEO!F*D zTLmdlC<>O}Q)xFnTS&kgNs(9>B>*(2D4+9Z2V%P88MDs?-~C_~0Q@&W&(XdN zFZk16NW1d+#As}GC2s{lM_o{{&%SyioaGOpgy#&Xv(=%>(SVeKf?}y|fjr-$0(mD~ z+(m8}C!VqibzLFrQO1BQ7m9;oR0K??4KBH87wSsgy73mKLo_Ae;0Z7k9xdo75S^PQ zsl4SjdPXTL&zTLwRA)FABv@LI-;0=BaxD|@3^bNdf-q1 z_0`h;R;m*z6eVd7@?>%~m4FRwn_wAeT2!Yz5g083Tq`M~EjZ$XmHuFWzx&j=c=B^z z1Kzp`%o%cCT~vM(VEW`gOFKXObW;4y0ar}uJv9MU9 zvG?wrtkgp!yUj1Uco(W#x{9AD29o^_^BLGID+#>TkB1p$kj3P3{(3Vb!;kll-|w;# zxI`#UET&nyIzU1x7w}-a=Ap*fQIx92R5W5NU(iVPNu5z*paGUntwEJOZx4<%*k0Fx z9GFuw%$=CH3<4^k+0Am0vb9T`izlF3)N8gsgsk$}hCxzQdEW~438GR}oYDsCHl9^h z@GMyw;go<0qk6#8f$<*Q!CLy7{OY$TS|C>geEN%5<0;R318D13WKMEEMb7f5s{id8 zQ=7BFx~re%;S>`xTI5lMFI{sBp75ksU^3VMZd)KTxK)Kn1OhhQ7NB|} zmVY@{$b(U;F8IrXbKdtzW?l-YGuY3eZ%t?LUj!nW(4$}R#p*FX^Nwnzxs|KTW%)0R zXdmxkn3@rUeW0h{%7?slMy_Db+ifYAAvDCX>mavTh8xAgORyUNfa#cV)X^KTY107B zG|VUs%z<#m#TV{GHA-Mx=4T*f0^ef_Og#iaD)uZGC8a}VkSwWi!wB-PW5>#KR2K{= z>eC{U*a2YV5XvyHJVNEXS<$k(F1V?znL zyIyC8PF8=dGNGiYW-y>r*ANI0G1@6`_&t_zzyTw)(=uBXYa|ArK**VK*+skkKp}1c zzQ+V;&75?((Bd5hNIYSDtcA{ms-%X$JyYuwbaVOLfJ?wiO1(On3T2!~0X+dvc8weF zij*?ioh>G}WxyVd5Wp>C!)b%?oLTD9aLI*=PT3%;Ty6?OR0GqSGiWIM1eO3I@B|ng zB7s?fpl?kk)t)p#6u8JQc|E;SX&37Yj@!Agd{-~3l`+zpPXZ>(>Xc*qC}9S;&EO4N z@e|K|Eta=zK}HL%g71o=Au0e}0WIH{va|$n&d7rbAO5GW;O{gBFHW{*S*o7-&xgFzO=CV1I>K0B{F@?gzNKe$_wyD&w$oIrCJ;Y#DGw z(3y_h__Cf`X*(odt~)`v+c-0RY8iCKD7A#SBkQkO1&G1$eE^yzyTloJnsLZs3pnV| zIZUUPAC`a_phTEXTU>d~9#F-oHf3O7Y!pfTmqU;ftx&iZHcA(?vVKL~R6AAAamqAD z@7HnW4qB(mR7&=E3*{|VO zr(Vg+TQ6*w+g87Ij_3@1fNO>)n!P9n$g+J7X?8Cd3OynRARtkhW%-H%l`~(Y7Io-a zGt_D2DdWHc=5g>Lb7)#SV;tft)j*^~*t?^_Z9B$D+gf*4ZqJRr8cQ)*R2*|KMu6CN zU2HGqDcl7cM_NyTpdf<|f*LyiBS547w76j@&o8HQgF=;^)w;5O5ybJID*q1At(!)g}mCx(xW)2+}+u*f-VscSp2*ziKH6(zYl;B&3fpfrs_5{o1?l z1;s$ba+DB7!y+3gCi(`04^a*1?JD#C@4=zK)ZuwrA5=+FED^`NGAx`nJ7jty8h(TYH9xOb|-Hgf>!COspe_2#uq#v=RUBZ65?LY*KthvOpCj z7~pNkgGPgLe6|u}Lv=o46de1o=6kl5S8}rA(GjjsO8#j*8RGOsT-&T6{IY5K_JR_E z$|<)V80s&LhR9$0&}QWP_}ON_y9dkyfIA*maK?{+di3MJ^Siit`PvN5KHCI={v)vyl^X}?I;URI#*c(n>uizjhdiKj~F zH5s(+SVgdBBc>m9t^hE%h)?~)S;&hE<&dJN5JfMQO4-7QWd)vL0fKr`!`Iu4j4yuu za$IxmcH~xgbG;i70IH6SV?rhu+`6jE_bOmOtp z16ziVU$XkFx%_x$?R!>_G0#%DsaYN^$(Ivp^~R0)>QDU`(duT!p22<$vjE@@2HO-! zk9hG%=~-`mFYR2uMP9s9<6#3C!6|sMjea=*s2B(tM` z*$jce{@)HzUFd^>dP5mSMIB~| z)#*f8>;yio&JT(*6#G?&+U^6AI~OSrRbRCz6(@^gTo9$s(w<&GE`&yA0QTJq*N~dLu;t+F@Ee6uUHpacIbCJtA0|i|!LdPfl#{jTpP~l7OJ%G8|#%wz! zXRyD*EC9F@K!bpr2M>GxI|kqP@{iKqW;eKH%JSTt2xa*-7!`T`4KX?j+_sFxg$l>qYZI1N8Cwpmv3QUiH7he3 z+q75;8wu7r#CU0*G9zU*y)YOg)L%<-zSL0LZAtZ6tm|_hM% zEQs*wpX8GUAEp!MAxYh2%8i+^$D!j`Inwnsh3Mc(4q8g}0=S;jWom0U3oHbmIfFRi z;wx`NYo`MmOM$g6#8nAHh;qbyWzvEm$e9gb0uKhb>6$A*qebOU%f-4GKpvwy^i-f} zJXmlsTnFaRL%l#~3%`ZjO6!-lv5anzFF$d-hihX1(nmY>ID{ZL{*ruJd95Bm1-6aX6yV+Q*t%mRQr35X~Y(KYGmzxif9_A#Gp_hD6L1HIMj;2*R5D($^UzO?AEdD~YOQx#?@Yo!b z%F+_*ja1H_>Bk?z-w}d-f%5pp{d3_3#7KJff2t(_5e*0dhJ5^|+7ttW(l5F*LMyL< zjDCB)t}4IXS3Adp_~nf zk`=@#t1mJ1D-Y!?HN3@P=QlW?@Ye}DpmhC~gj(n-L3b$2O+;XBf$?N1U-6O0&GrH8 z|1b*x?nKbfYhF5f@q1o1JmHaNV>M62fy+pgS(wcR0KiU0HOK}>%3 zxS0$Cl4+^V1Z4+&ckBy|V)!F40l6Uz4r;-TeU|`2fZ+9&j9|)?akpKmXFTsDIpuvt=fhGVmKf*Q9DE&aZM6ILnvs|S&wEDU$~H%Cj-CIkjgCEZJApjznhj9x|N zclElX1ifRsuyiJHO=$J>zu*d#Z9+9*ppNgR2hP-?LH8S2{~|r$NMuu7f<`xmj^=cL zAwed9@UbVulUXRZ@QS267oAWj5rTnRZr+J%Am2=ITCOL9b#xq|C{XEJM!(TZ@yr=t zIrj=Q7|3@Vz#xx?tsV4sUJfQg>Y7VuljTm@#%Xw^NEcB=4OWi?cXp90PbWUqLzlk3(`ye z@@K1K9(o@3wM}QL4B%n~h>fK133U#2^jkI=X@BpMNQdesKyp-d#&y)<4EG1|Ra zj}o)^4GhqN9>wf}E07_w2Mo4Av8G3Ib%wX0YXLwBiDq>uDVrG{hidp1nKo)5k### zqYpZAwgQ{d^`gM?Ypr3ynB@w4LWx*cxir&py-ICYm8sYRI3)*Pk?Ha$7n0CFSy|MS zLBks9+Oy`+&JG3I-(eO2d>ep>8lu71(#t;h@^thMoXh*B4I_)O(81|0U2Tj_lGu!E zusycyCw5kihq-wBLlOvd;`g3WVOpLNH)UoLum{yr!j)<-eh*$mBO}q{(UM1zY*TV^m+J^4>K9eU#9`3)rid zo<{J`w+cv^6zg&)%-~5mzrl%{DjL@J{{uM#=SgRWYuZcmNCnV#lKjH6pD&@6%L<9) z6X37KNp3lsnn1{jWIu%M{%5VrK>1@PEG;ZT_Qq)7s=6w|hG@?ffe@rAcsYdVD}vIq z^BXddt0DgBvzLJD3OVa>%P?gau~xqIkV~*j5P57&IIw8M`mod&WVbP?v_)U0Rp?`o zlE_+~>{U?>Zm4s-@a=#G&JOl12txT(pw$KWWe}JKNNt0>_qq+>-H&JH4S~uG_A{6T z0N*AcqAAhfEA`9&`sL}QC!Evl%hL?mWGjlAFz7)Od&`f|v?13R!U+ zqA|2j08y|xY}-PA@ypYBgzs4lfj8Z+E#I4RFcE#Ymp~z<)bt19!#DXdAR}#U3U`^O^rPP z$jiC!wFL-3LlOY^(nkzl3Rq3$Z<*EFt6!EELKwpg{MsX?!jkL2knK`GGJ{4V7>7XL zE)!$R0UP8?K$fOzbe&mxWRLxiWJE1hm=G-$J+KdQ!&I|m&~2?q_eSSWx^$J6LA`$YcJpUI^qMQPOPK+Ir+a{A+$D)v1%oJ|q6S+x%p;)^*{LT$)Sc_lI$gvqT&UpX zro)4*Di8o#UcpPA_XM<)i3G0 zS8@U$3-If&4J@RK?T0i}* zU%*X!_vVVrcY*X7pO0fMMmtV?#1@;`62s*AWC&vT#YqMO=`&ub$sM^mD6^MT30+~s z3ip2F1WXxMHWaHkHqVQ8$B<3_kYvu>ESRiR*qH|b(}+^|?7ZWc!M0c6P#kqBtb;*A zk01a6$SqJUBwsNBuP6VRP6*w@oU}smEvm@KfJqTl?$4vu`C4zR0PxQ1inFFtPWrR_N{#(U*3o=$y`LdFlQkstsgN@&LKWK(z(P6Rnp;_j$J-0K`JaL~-7t%prln`c^=Zf*~8@2tb~S4x)_A zasW`;AikNEXCb2k2T-wGzl@@L8TuL^kaaZ0^M>p4C*>?t&X@>2OZ6&zW0=rh|8<}m zb!kLk0L=ssf7ltoO4LzLUqOb>l8`YP$(tPgU+efRisU`J@e@z`VdT{vwwxk`JqS?z z!2R1v;KT1{{C&d@h|UNtv~&!A35WbPruh&ulV$@K9IL>-!%J3 z(EbJ9UuW>00cNh4`Cz)?!Ur_J^&`KU2REO90WHcL*EX1`4TFdOZVF`JheT~snXSv_ zCiVh)460jrqXQsrWP{kmdRqoTH|jbHD{?0{bac(6VMamZ2>K9?Dwnd z6wn*a*!%Scc@;<_!qO?V=*0}{`V0jq>kl+!?D(J|WOinH%I0E? zW!rt;qaQ@@1gbOkezgVZBZmliHDl?_0XXX+Knz7Hp3!J}8@Y0dvSO0=t#vdW!B~+h zEyA)4QK$#4$e__-sGspC;Fay}SDjzwz0ECnVKWXn;U}q>ou{e81AIbP!M=hRa6$VAxK(PQ~09^F%tGMdi22>{u2AZA$ zt}_qpadQUdS?ZlNOz_Ts16da=e!mmLK=zFpIp}h zNl!=w*3KdWA#++XKa=c>C4J<2~{^U~vAW%A$9feV3J~qAOEp;a^b|AzVXoS@tQ24zxcjE+7G=6f9+o zGq)E}7LfL-qOUY0?A?{|FYnxkYc6asSOBVlwx1SB3=ma=`3-c!o-cgqRUd!wL;viu zPyFhGbIu3Nz7=rShgksdT>wPHM6^mYym0jMfA{+OnZNf|nx^f!9_!Ixz30IU8J+e_ zGRbHaJ0^&3{QbFmnYovxL&bL!VXF;Nm_}-RA_PNaW`%V^w+2BimOCpgV6M%M)i)Z( zpOll83o>yH(eGkC#Sjv7Vlx0%E^k3eoHvo~L8uhR%V*JvkqW<}2H}7i;3+UXr~;-e z$2seauG!6KS7nC3HfRyzCI>|W4XA{IO#m`8Fzr&XJdk{hh>>gsUumgZDu0}BNVdvb zf+yosUfZ);dVCkn3q&uaPN@`-{RJ8-0hvK{h31lf1y!}4fnc8uL~%x(LCqL1eeqK< zT3z*ak$#{GwvJ=W16tN@I|_}RC@kB{hjFUqeR$Gi9)hPn^8RIygZ)z0vkT<&T^PK{kV_l7s@L~)8QI!5L15E5t6GLk9@vVh)@EK+&9A;CU1`|5a zss-Sxb64@N@85@90aYynvv4bYJ~JUF29Q%dqyy##tM~uf&%NOtXaC7_eq+qzU+|IYS-*Q@GtF%o!DXO>#7Wy=HD_N8hLmw5LsHgU6B~+^ zcLSrQ!~AI#>UQMr3|7iXSt+FXYAcz#$KOCWkh0OC7(Yg1ov!H)*$i4(j5S#q04GMf zC!^V&L6urp0@{W#IDPOL(E=jXA-0zqp@t!|=6?lB37S}S)7j#`lz2pUd4-9Il!s_$CqCE4fG49aJa5jeQ?*KE1 zayOt4Jq_9(B_~|yjSn@;>W#^AqdIUFWaX<~1kU-?3eNxcDMkzNi0@d^0#~h=GytMJ zSlCh>eZ%j*`^PSN&(HrJ^W?_#ae5ZjXZ+^nC`TghCsTuf6A0Zek*n9Lg zmym18v00dW4p`CLRr(UN851=Sa;pYf{X=JmxSCPmcFv90lg0q8PjQ6hFh43bw4_CF zqa*1;+q0a8&Fn47gdi}e23D@jpn;-ifTxV5W9yD}6;{lVgn-KL%4SNdJx>V>$JF3S z)FYwU1+>eunqa&LmADgMHzB%o!5OO>m;fFd-JmShDb?agtbE4@D{kRd{<6|_93pTI z$3lBv@PkUkvMf0(g0p8}8&^G3dERj?aNW6bPwMn7(|(AM+A&`7Q$LJ{9eX&i+DOMG zdlF(1N@TRh8Cf6@Z~`N=I>AGayC?qX<8Q%W zFt&MKWJC-{Je|w~3iwP+*wF6gtb|=r2E`W&+e*UIG{fpE=|YE@k@vDVXicLGjP8+8 zEy-asB9|CkG1_7&eg1BS6Xs8B4MP%X2^b!jz>V@o@}|Mcr5Q9(-2@>-1wypAhENfT zr%e^muCVw@oiPhfYMAHrTka6~GN5l0Kh#d9IQdc_4_> zzHJwN=>?C+KmYyjVWGVdRbn-Ly~h&TSAh&HY{B%ie}raUUV$fQtl({j(l6{a5MK?@ zu|Qr@@W>MjA%+H6M-+ICSium%1Ga?O5e^z^L~mPcPL0ss1*68Flo}Oe#fE**|c^yQ>E$O65mKd@uqf_4aOEs{1Lk114QUZ`LJg5RUEJvj4 zj7SA6GFV;4iaVLeCxIt~xuYu7gCq`y1-G4Mw0l~B%_UReH99PkdL6~=u<0-UwUreT zZ%_@yuoJ{HkOo7Aw9z$LbXMmgqz+$RGPa%1FuQI>ZZxp)9HpfJPPYIf6Cv-q9(?gx zK)q0k#CnJUN+3!|<30G7fA~E-|M3q)y?qC&HtRAvgE*B(FFH%5N*tMyL}sMKs0c_q zcHm*h-veL$xA)=Kf9}V?d%q#U5=osBj~X#^hzUHL1E2dbqa2(ZRD-fV&>d0)X!@FmuJfdY>c4 z*ZkX$<$KP(iwQr#z-F><|0c7{y&11q8TVEsw8S{sdGZ~@qzC+jvN{n2ydwy{7zgwA zX7R)-^hdbddt}f_7dIs{Y#}AVMu&)ByY~Z7POM{u-O!R1XjlQ&46z)eyT`1j{Hr$T zWs>Lq#A@ud4uN=@n#dzYuwR$7Njn7=POW73f6HJ>NGV}@t3*~M$Ot+z6CN$B0vpT3 zU|j)MCAxk&GiX>=KM>WYvdEqQ^8x|OZF5Wub;t?C9Wg2Dj}(+Oq=U z7DN?NU4trnoWMw=n?2i%w7d^=>n=R_hy(E9cfSdr`rsRI?}PRrP4^&G(m$L@*0xY~ zL?sN$74m2QAM#x7&+QRK*K*?Tx*v#w<-5BUWw~0|HtXuGJyB!Tm$eC?L6-f4Xp{sG z%8#itW!)&O<(Uc95Lg*E`0U^8!xulXifW|CR-3xDUL#@w4QY3A{&kp`Npf~T7;Qs+ z)nB~-9!=An%FIK{nZaEHyeVh!?FVMAC(qb?3J$A&12x~5i4RIh6^P|CxWQ1^K=&lK zC}y9`P=$bjbylFW5zbn=peRwdIO2dnz=SY5WelDw4f|^|n+}A?!t+?e3N6_wXOhUZ z)DWR3xP=lH2vC`g84f{S&r8%|_c`(oJ+Ul0%pIIC+*Xx3bk@ciWr?XSL&4tJFIDf>$t<)Q;kW%W?*i=<0NTxb$(p?Q!o5(172?YRRP|HXMoQ(98 z{|oHBS4v*};Ao~yxDPQg}+50LM4nX_Cm!rMyQg?`*gRr79 zw7A6xhE@8iB0-N71~d?p&dVrAD?43n5cvshMS6s^RcP&_c@n)!!8A`8FEh^n%qqTd z#T3I4$x4Yn;ghkV!F*8t8VKFTdsU3z0Du|GJM;Jn=Unp7b$#gbQ(C&AOJoM$&2YPI zKZ83Dn3?eD*N*rve(SX9meKEX#it<+MoH&eW|w@6msk!lMrJ5<_EC(A3`Vjq{Mphk zQ*n4&CJth?8FFuChY1)HMkkNKt$G2aZ`W>ov#uY`IbiT+?lUrRF9ai)^SI$I+Z-Re}$Itv5_YF$Io z$I3!ogQ<0(v~jm)8Zws8pUQ`wKuS=O_mNA%{2d1kM;4be3@@9$WMfRatt&`GUW|M28{?bAndqqic7yd#f{g< zd;J9HV<8Dj{JT}wWY*r{!%~)<%ofC+h|*S_yN> z;&uIbF!Z^eVQ4inh>Jz@505~MZ=R}oa`J^7luiUb(R-APY; zbVy(ZQq4&7Kw1R$tuW5}%ql+dN4xR453OLwZ7t@O2o(`h5=ltE&)`)+#=G#}Z$J5$ zJISn@i&YKU$+)dC7=muQ{K}fTjLzUL0J8@BHUcx#-uL{}fuqmA=jrX{;ZG6aUJ0p& zP1HQRhcu0a+g4uF#JuRQ8V>zbxzE)|Zq#1sm;KbXn1f}ty*6hlKtK!BhfhHZR-Y9R z+A^P_GP8n_P+HXGT~d2>^e&4tU%y)l7fF|$O@8Hx84P*JSV8;zDCVLny%U2#3mTJsz1Qxbb7!EQ<8!DtqrU71GmT5QXhDB-_lYNXGw=i~G zH^t4@WbC@FL7RcW98gJQEnIlBD35_vZ6e`RR~3uerJ$*kSs#B{pCa3ID(%6XG2LF_ zgx9_Ns-vIy`bW&q&tEB&W^h-4HN#;BcMdQ!@%x^?W&E#y^Az4R_X`Q_kp!ybu_S3z znCZ}K_ter%HfYOcTft-KtT0T_Wi zHFl^+!BKdWYmp;_NDd5rzUz9|CDpEEow^x78Znm7nd<67R3{-%7z@W$y*C`XKaAqI zBI|)vaA-Z*SUz#=O-q{Q;e?{~oxa05ny`Xe7n6SYcV&$9(4R#*`LV!wXGADvV*t<( z44k39AZvsYnq)z#JWi2x0E2n(HUEL;hgA>H(o1FzUKON{p5>+9{zKGgej^ZA(ZMV=yFC zH9(p5aZwS|K=_tx+0!DSbIg|@N($N|LVGP1r1;^r!>Hv9slVBoaPr%K=c;=>^o0*6 zn!m~`n89~F%pL)J8-SS!fA*YB(|`Wpt=)skS5u4Ut`5LM+uheS?)xy&Zz2)QTz~xY)LTO z!h^fV5L}2p<;wp0X0pJ#m2jTpyW5H&afH+nzvbk$DJ~mJ7CZ#7(1RV{_!A&?1YPHE zIdaLSKHJG2`Otb9(titK4!Qs+i^<{95barSK|brP!2DJ{6GDlZvxfFbGT{u&nOmCv zGW4;6;ajCf%bY*-Lq7+gJ^KS_{{GiMi-Qsv*-+p}yW4hTGj)=HSa?!|5pe03#`x;L zj*)7@Xdb94pwe&lQUdBh#$ZSo&I1ceKs_YXLjogX+5pR|4fZWFR+bsfgpm`lut1n! zVvOb!Ql)%`S9XO%an_wjI6A(&;aRjPx~_zb+r3{)X-lh zMrv^NIWeoTBAY~M5kSYX+h(c5W&>b=Ct@9#g^$8-D6dA)?&U{k3?2g%Lt?*TY<0G! zG#KhUw0?0)X1rtrQ!r~{=$yV7vXr1R8A(edJD%ZzQq3sD)A(w_|F8+Ho@BT?(It7MXWJw;TqtM{SfXfh>GFm)BeD!S6D*`bA?5<522q^ z0+^Eee3jc}ReNObfkNmrZ1qnjDXAii?zypDTsm&&h)3FZGq|h3EC9F@ftd+!f6>O3 z^Z)jT^VZ?3xy5lra&EQ_U^66U)?u0YD-OAnBn8SCSBEKslcFKlLY=@ujk=6^y>><< zjnt9WHG%i)r&8VF8BwcO%Q%Df%A7N2g!NV>P{Ey7WzzIvGm*^jnM+89m?%A3m-S3R z0@6tBpWh-9vb#53)3&0g;PcfL2S_?fZV<{4ZtzkLPXF&J1K>7?pH~aJ| z)p(Bd+VYqXbfBFmL^3u8WxR+mruI@y11Kw`wgw<%VodjB+~cXw*qt)He<#syMV`T3 z1ZDxioe0;z{YCT3=f3A*v}xg&E5>mZQh6CYSOpt!HpT%ntX)4KIqE-xk+2)m1TiZb zI4GXp7H5v|ZoZ9a#jEQIx7@mdE3VmtT{pC#p&%J8f}PT8_1Y$(GU0Lt9fSe5E2IJ| zo}@>msAMKX$GXEb;s4B(rcqKpwR{E8G&-y9OqVqva&kVaE;NfM6nIp{MgF@<&Yh$c z{)>Oqx+5@y21&Tcx|+kX6CEUn4#8%He!!Adtiw6T(xWcGr6DwIw3~k1p%;z}Ih$I8 z15G5TCv@~~$Lng``k$UC2Y{#sFU=vJ|32h*J{kF(j{#{O7;aQKwS74BFO!*|i7_a$ zft10Vfx!|m+621vbC~||6Oq644)ENl9CxjfiY_foiNSP{#YD9f!3^>Z6K=e!L8?R# zDyd_bex*-aA)(d@_H{t{62F4nYYLlgx*E1D<1=)*@_@a@o_W_J@cOf0<-CTfl;dKvdBB7Yf=xZ5%MbiNJ|KDWkpi zE5KL&8o237(9%X=%Td5!2}B7@Qy{mX%=(q5?C-(@vOk6DIbb+1U-R2>E!wZV7x?6F zpuOhbftuy(e%kj1Wc(0`;L25$*3%rw#0YW|P|Xpp{K~`wWT_`$g`rSrYVcz1th^DU za|&k3E3^Q89aR&hib?6mLpcI;B!l@?O20 zcT>YUySxEQFZ(c>-HhBa23z#ah@SH|a58#9kcRK*%IdLLhr|z0ztN!CnZ!nH3=ko0Jr;b>@t^~b1|4uLXf!YH*jIX(P&)=sR>9*{(2eIJ-*_?d zEf<2uV_;Z=2UQ6sReabke+|l9_$WZu*r?|?tD{%6aqYs$kg<6uA+~l5FWQxzo@AtPKJgh+ZOH;{hO4oY5r4v`H8ods_3D z_k7{2i3ZOlqKou%<}C!4l(@)i`N}I09kD=Vr|1-tiO&K+BAaF5QVyRe@76>O{a~IpdVa zZ;;1NHOj^6t`Mj+*rxEpYEpfr-dW>%`} z;dH@9Lf7XOTzAT{vlA&dKttd*gR(viV8}Nf$arAnIssJ$N^*Ej(pfU;@y`(m<+a)p zv_=8Cyi1?Ave3t9n!t>-A>s3XwSv9-8ZQ$y=hw;$DFPcpz>{CS3clLF+b^={*OC$c zMm!s4PBRkjKnc_c0CEPmgvnq-`|yu_?&6JGPJRgyeV&LW{gN~I?uXePfIASFIq`Eh z9)p87zJaJYvqsW0=z1eJ4oDl^opH-OV`QTpViIh_AH)HZ(vm8QGX#n87W<^n!0ojx z{YNCr&KF<06T_NxNj|W~jB1py^P(0sh=ziY)%g>P^Nz+vi#u2`6GK=M*~Q3(*9%z@ zd*_zA4^nEZy6q){r@-iF0;ZZyjOq3kyy_LZeD>qKYQFr{$0GyA%4HdOSptgO%1LYv zRyh9JwJ<3cBBp0}ForS%1msB9^2uLKWoZjuwNY!qA(xM|gun)Z;yRY!;$A)IvOK2{ zl>zTt(wDT2NriA^_KkKXsyhrvRDNTUIe!zCwI7>9X021lLrxX)Ac5y<o=qz9!0#23;<8@bv}D66DzyFEj3OYK?Xx zw9L^8$e2~>RQDR_Ssjk4zxGIiRHxdWZXY^IH7Mz#TQ?5=il+4#)4lUpm{s{zMA8;) z6Q+Zu{NQ)L_u7q{PWl4?U!6JsyDrQEfIA47nfT>r9x&dBXJzCE5~>lS5`%`UHa0jb z1#zA-#>%UJ@-BEmvhgb>g7mqspy=q-ghF3S1OsQrL=2%A1*#G*xp)@_mF$9s8Yu(0 z&e*azhrCxA?&OJKkl9*sFd~l{EkP1oHWJbDtgY7xuo%%8%1wr%Y(kEXGF}2IZ@G#gW6*$uB$DU zpBZUR--grKy6ch{dDRvTiepgiyHYxOgeYD5jO3^`BZBZ@=|PUt$XebCTibGMIY(Zn ztrW|Y9*#^dAYWv(ap14HYS2q4&%3ibcxb<~JPu~9aAtc4T~kV0`e?Vk5gecNYvsZt z70>L5N|3h<4?nS%&4)HDL!WmFTByGw0aky_5ScWM7(jTt#shzXbpi=ijEIeeNMHLe zSnCgY&Xcu|CYC!wZW2}&Hn-pNmmj`->(P(-6RK7}OhmJde|KS+1ps#t@b5loZi36c zH*FX`EmdhtRe^}a2$&&qLlNw#*?r5mF)4N~3_mqK_Sdp){7V@z^kOVDltn0TV4+a!(SOPmROBW6yAQ# zco(4suZu|fxzsYtRT*67GAmV+C^~I``J*b3E|mj7I|e4V*xGTZTSW+x6ip9+@pajC zgb6TrxSstVpR4yE88uUC(l#SWa~I`7oBpLFdly7#?*j6x?}n=Y(htJaQDxymPH5-{ z1N^WZT{}0{46!4HRqS+%^8rj}B|tGP`?a-CDWM%!QxX^AIs=A(Z(gp2xc)=ek&6Cw z^Jv_VsP}SR-lhq@&h5qZMn@J4L4DO;Z3jpo_;6Hxhpt=CL$a1JM0ex7OgwD^qOc%It~e_PFf;=?sUAf7k}FVoy{&zaa?!fH|Y^*dWV6 zyIzoFb~Sg8q=&;1sA5cSXk~^8V?vCl=|GZ=CV-WUW{+*&V^s5uw4uzjgmZPKkkuKf zJMymwyaXp8+#9b&W+ny=<%2H~yeVjd#*5uKKIeFz@XS^`yqx{8?q+7Kh#gN1*R8|Gcm16{g;{8&cBJ1NG zPJuTi!0?t9`hhc}Cq<;48{o*(Ym7z-tOr0_eT5hK$3o6CWhiIShuQ;z>W3sO>42`n zI6smoyoN-!z{2z>9lEP9PnOpzGZQdP81Lcs*jN9|O^+~P9Gd1{F3s+)8gDnY3cu3T(!pl z4T04wxtzV<0HZ@HKa0g*V>5j~4YWHt6HlFg$3M$OdBZ?wvRS^4=z)ZiAc$N@jCQK- zNQs%~vLQ`dgjm}=(C8_Y)!_({kQXkc-qKGzt>ax{*`mxsvLM*s?yIotRLm@IY(OgP z8!G8brgzv;Op#K@flEDoDsVovxQ-qz=OSwhl zgr?HGBDYEEJZR^$a*oJG(>MyeSgH;%KitpD6p$4+Ij=D91vWhF`Ledft@(83=gP481t8kFUj7w@m-K=WXE@>Sa>5{c(6!9mdvXq!sHhD zK+xzw*&86JgsjW0hF*Rc+yJZJkgwSh#P*Jks%2%s50Q}q9d5}CtE5G4BhOvkC=h^} z(A-vD9TRd&gMn%TkOnezBM+U975VAltiA1^-VQ|W8D%!P7DQT+PI{KFj6^Lt()v_7 zV?kvrkAXZ#P|`k@y|}RgwZP3cWK@*}!?wIH zolcy;2DA(vwE9+qkF7#p60|>-EJf&DD?&+D+4OHmM89E7$Ar3K-1|j8+Mf1HAH1O6 zc+kre(mxW>&9hnm{srrW#54F$05cQ6`ALW61Nm1_w`WwT9&r4wz0J;|g8{1{)48%n z{%TP>#!Jv`CTOz&F%0H<7-b`yR3{e2zP=jvLV<`;4G0&1eHU7LJ z7&IBIF5yja+{pJ;LZHk@1B)H)?G0&jstCMCUP~0(`gkJfiL^fHcdQKcR+8*7h{^34 zPQ-tmKi$)kdZ?0D%5-R%=#H=T%3HAB`Fy+>?z%EX-=lp>+nPnWi<+=E-xIQvtbmzf`3I(%5Aa4C=hhe>UfWJ#T9~% zY$09M#So!NUn`hJqr$tbJTQQ112iq+g!|9q5l@@rBkq6SZ?rA_YQ@zTQ%bvMv;O@L zW&yx|6Zo9>EKINXmmi=}^?gWsHkGxECN#G&NWa{`4AdL-886UjSQXEWX=wy>0u#e0D_2MeXxGRsAuSS+^^`=b03t`T zFNd`|X>=co-=Xrn7 zD(rDmpxJkFot^J2uS#-o_>OB;MV^AQkM){T{8H0P&;v1(?yO50C@)4T6wr748F`uU zfG5vk!$OirXqrzx@6IA-v@9(RC}AX<_x@0$lHcx0PxD?@oK6d2<5s-^N;p|fUXRasF!sX@)S z%Mk*gP+YU5Xa=f{@~}2ex}=K`@^XLV3XZhB_7~OyfN7+lD&vK+=DNC7Ypz3q=*rEJ zg=Ta)3OC8$Sn%3HrKL{=pB9<21P$2aP7BCH+1p%DV+0&X>E=0SRqJ&pAA)KF?y#a) zh7X|$l#O;QWTXy~=#E)Fn1eCl`+jU5n>HsjQ-H<($v6bysDI9Ll7 z*sPg42qbZEloL{&aQ*cw*tN6qGwTC)!UZuV6X4hrmM}Mx7v*JUVVKeSi1nfb(C$oduT4gJWIM;r>zgsQQj8)Xg}^27!iws2HNdDA61ee9lU(%M0NgOLwx z8=yE4;lpn2*I8ADN+4wALfZ*ODVHVHoxBQ27R0FownrXDL>!!|j)lpNqa#IBxup&j zfuYY4oE)IRuY;9$VM=|Z@;JIjpyl43s}~4LFvl8rEWF$PoYF6OLU_oJEa2#qYfM(; zJAoYw5Qc+=s=|-R?7Ffar7uZ#aFoi#%8c<2vk$TlX0i%QrWwcGXMi7i-U9CZ;1N<& zfv0jLI2r~Y_J~PURhP{U`Psi=76ANL;q6b|K=sZib6uUDDGfs~E=EI*fF&1yW+T(U zt%WA*&i^={)!$B2_GIVn!~kvbm^X1 zHdIQQ@}iVfdUak}mpWOP{?_mtkkLWwIB#*rMF*-8!SmvQ4ns~5w7n!C4|2*s`Egmb z9K&Aa)B0rhEI>fJ3f%j_^LW^gETAI7WNOa}1;31FWlXEmVOUrs0JdtO=QFTA&j&-l z4I*jsD3Z}k7<=~sb903IJ!T$1{DKWQ?zADGj^9>Pm@=wng6i;7Gts!2&Hndqm<0g; z1zKZFAr>JmaUf<$AVGk?V5Jj?vJ@+4;`3PU zohC#Va#;+cvFXOm=0BvyN-&j>)}^!x0VSdaQO=%MBg{gVP`t5~6oTrwjXu}|21_oI z5IB5bL0OcQ6?3+h4s+Upkfqzb@vqnV>3P*P>8o8@GqVz8RCC6Hrr9Hk8fbR4ayStK z**1#?#}dl zBT=_{U7D=y!O_0u&*-coEmr7+YJ3c8m`J6r(ywKSznoSmf0N<(E3%;<0cckl8#h<@ z!RIdGjE4-7k}Si^*fKgQAj2a->F*`b1MJ%dLf>spVo;K|cqXeEt9vs>qlDw{KZnOZ ze-RIR`VtO0B%xhlI>4A;uZcnXo@6o5B7H*7axbEr6M;@lR|x0Y{A9mO&4y z2m{uqoMuysHtog+sidlnTK`&$kokVQFoU3Z=o#JOtj$-FIR9N!Ty^DMj0Rsm}8{id~zw zMv)Ou?maG9gD$f!`vt_1GJtk()}wsn`{XB{eitBO-Tl#BypjkL#CT@=u`23sPFT!Ni=w{s-QNXK?$# z%(U;fpL%e8?I&K%OZ87AR2yNARE>f!(MGG_7N7@aFm(AYjOUmwzvgV!6Pq)zfg9}= zL1z9tcTREDmHRLp+Bv$4VIGGFlhqc-9Jc{WOO?!aLsyXc)JW+Ow#9}D4L2EM0*)Dn zlkSQ%hEqy)uMBU!ZfIB~m-WLgQkDTEJtx7C#a6}|wY(Dvb!(yoXek(G5w=}zv2tk! zYAKZ`jE!g3;4IExjBp7dg4pFk+svG{zj>gXcyQ%q1cXZluVgG=(RvVK=>Wj1z|t85 zIpxq_KP}pdU{ZT;i)ttmgn)$fb%+rCDX=OK8~?#Q)#r@tuyi3n8<42OiRhgMiTP<}TbSRoA(@)$sqk+akUvUZo+ zt<9~SMehu5r>IVP!Ohj9e&-cL)rW~_xo|&&{SA5}VFv2~UwPJC^QOl?cDi-+yNPim zB_i@^Lohz!MuGwvxi;>^$Q6}~^C?6KW`yNN>}#65 zM|7Dz5XRFM#~r%?3k%}>-MHx=pJfyurde`4D7oVVzzHw~nk8F%Wt8B{M2CzQYr#I46c#{5px~+t!x|(9 z`l3H|pe~nCmP(brDUxJECd-$IoxVG83db>%zOD%kK&(P&AshRa;#HR5k>wU(Myh}` z1bC1<&_r+KGf7>X0h%y)!pOQ2&}p(<3tznzH&=q>nZDAF6;3bu%$0QD>5nBET{_zX zuzy4U3D69Bz|7U;HIF)}-7zx!F!W@y$&`rHZIN5ITsa;6q22-Y_I>%Zq&86}R9?NVqPqndBKNg@FXssf)mK9cm6Ns;z2_sSuDR=hzU;;1z zD*d#r5EAWxXbBzqY= zO+nDLFBC%RcnZ2Z>)x;LZwMlkU+a@aX4X{%jf+AZ`VuHXN`)0Pe?!4KJeR1+`-Ijf z3CdGk)gUcz+&Mj^sc815kGx7#iX_M}&|o015_m7r?qRgMTeQ0}nq7=`S4O*wk#_>v zk%8SAd4<7QMvV7;2S&Eh*hMx znLwP81_`&_x{52WQ0EWmR7H4@;hxY;7$=>)8FNE>j;{v5oK<|JU>3vdqA|mo$tn-a zrZl=~2-J2WdkI{;jNd4%F)fy76k?9iGo5O>$zV(eO{>C+?ob?-$YKGH;M(DS2tiD> z;EA9b7=I&!hEl)zvj}W|bV(JA;&_#|5Rc4iYpOn7ZkDNSwK?glfo!b~s6N_d`LZD+ zypL`UjADSJ^FUH>W*!ZC9G|K+)GoC2m!fRC2clqD#i9Ref|v6Y1Cw7u6Unge13Sxr zH<{H}#!lhXWKt=011cFEqowyI2W#MHYLco8hm7ucF88HC46vd3T~4F&^oGh$s2FzZ zX(T*KrP^i`X+$fb=}JZVQ{+X5jU&qiv#eZz2}BvZZxuNCsoMekK7j3pJ%jxhW&yxA zgHQk2Xn66zoxw|kGZ}dV>N+4mpIe#()d5!%)r^NYvaazEx5vZVw02q%AvZwLg6ND!ji{tB zuur}mCj0VxpoY?b;hr}@&`nW<P0yjXtmHcalUatw62<@I$ zuelqPvEr)|St>03*XdaBVW_2H3_achwh^raEiSv374~JnMxj>1m!b@Kc?nP~M|rd= z99=Gm;+upG5UNqaHCHX; zmYY{G8u%CJ)d|bYe$p^T3j>^b#wMiP79$ePh4HGqSRDfT4m1-uYr5HICV5WEKyD|% z;zNMd6bOcx1&V?1H{73pib{wisbb}vPpfL0w+Im88}D}uO1Zd%Z(&)iK|`fL5v zZ&%nE?3XYL0B#5PPoJ`xHnq=Wq~nQfAGTN;hT1>p892-^h zT1Ay>YS6M~^+gpbTL+(zTf*p&1a5^WgMpf{?|cUIQGh6-RN6hHsn8^?OdP+IVRiOE z_d7Q>%QLcrMdcac%n9YR-Nis99Z~vJ*=OJZX`n3sOOEfyv%Kg$g@7ZleK-jgPsNTR zL6j-oR~9s@^9%T9Lyt8}js!uhL7LSE`=gwzVv1ZvMo;UpXF`QIB?uYBjrmSP7-iiP zV;Q~|!p4FTvH;HpiT9Bb)7lsnT{uH>?e&Vswp+&x7uM#WZlEOm!t3?6)p`+LD+LH? z@06>DzU)>c{4Ibzkj3jt2F<^J?B01X{Ro&hXrkx4tz#WP9YbLQwzy5t zQ#&bR*9NB239pt#BT!~>@=FP50DS$cJ26>pQMvOsJVw(nh!RdYV+#)4Hb6VgJ~JZ7 z;DI$ z^^&q5z=Uy!05!6@3d3%Ug>sO@u+6J>fWY7>quy5QtD2%1Qu@RIXGY#<(Stfr)rh8O zP3D!11L>RWZ6G@Av*yY9oBSi0NI?^5((4jPo zJdqROob(Nrl3aA2jJ64>f*KcqodE#p7~WnTids~)ue1qp-P<>>gr3UhNK&@&uZ#rN zw5YeAjB9<}H;N2>zVBtUjchz=!{n@y;JqHVLYq(if}Z^!!qFM*&oB!Bdce$yU;2cj zr`zV<#K6(XKAUF|wD}MnpPeY170+fkI=pol1F@{VHe?9;{8`4k8cutr34oAM4G24S zOmV^4JHg3L8C8>`)^v4+ap>XmIQjHVs7a?B3g$5EKU*@^<7cFPcmDBTu|TXR&&e)& z26IAn%W_jc;l&r%RR1n*IQFmV`~3K8^UC;KrfMp$U8#PA3!$Ye#2SOd+{khVioLeu zbcM1ReS%qkAz+TC_<~}zjhGu!Z5AtQ&5|3&;&C;2Vulky1vGmy_FdE>jZ`sSsO#)q zbVKpkxe8=*S=6JQz{AH3)LVrQZnhbyyLps9;*4tg?n{W6AJf1~wMqrl?$q ziO~VPd5RA`#YCI8(!J0=|1DvG(rhZpw7aABjeThHch&X4s9jX>yC5P zv(*G|N@Y+Rj24060Ts~dJpfdMyu#RfZVRe{Zq#U7U}5cwAW2CHHM2TvGxnO!lt2}s zp0_sF*0b4cMQCD+jD$KC9g$`T2qmhw zVwMi2XV=V(G$ibsWSslu?HDh&7=%;d2!!dB0j_ZDNgHtdy*D7WvaT1Mf!Pk|aNMPT^~<}}LWr~8GeEaZn4k2r-4!+eOhkJDfQTmb&wlPaOtxN`nWsP& zpJB=<>M~&!iqVUj(3}u0h<3#pDL#e6+=9b5IYma9IV%C@LR6*KrHJ#$Q($y7fd;{- z5(AaIVX^PLMn4qPVX@-3s?0S-$&I2h)FJVedRFM8*w`~8EmhmF5 zhZbO{a0F>T9UF|Ie!DI?-O+FLNSd{dg3q+2d}6J~vMomwOsB@D@T0Gy3PJ$2BbKf= z?%=(QMnW2YXsfTOTN;{V+$RF>T;bslzUGFM@|%e0)>7{b?hY^u03y8ql?U?XgkNyYj*@p5*AM-dF+yPr@E<;87r4$&=6ts+B(m_E%u6P&~%3w zMEF?^K(&qh`LXLr*hi{?>2+B@SFAW%sRc@0;)Rahr9@yLeBK!jys~k6lW=!fU5(LOq6Scad)| zq-Q$x!UH|^Oe#{$= z`5JS5IT1~j+6?X{Fbe<_n0e5g^{$g>K0T0fnip%}qsuIoj3RT0q?SytS#RAs$QUgr zlZCX7J?a?@B0^gc&j0ET?AbBFU{DHh2FBxz0}hfa}#+l&fCh6&Dm$;I_ikGhmw zp30+$xVI=8Ho5nudE>$Uu;lvN3!+rTv0o!5{6^9)uHJFdM-pW%IMxVDWwY4!Z!1d1U3GEbJ;zIx9?^g?()d@vp|SU6C9^3&?D33JeaZ!EKS* z+m3-|4CGa7?6RN4X1neXydM|n$R0Lelyswk(o@%q-vGyju&pUwOq;1oaM3B^{nT_* zZo(L`E~z-C51mLm4)iez`@Ii_PMtzV1JuB(JJ+HezZ13s5tmc`Ilk|g5&o4e7rTr& zEuS?IQC7+LU>Vn?9@DSXS2z*k!e5b<4b>9}ymQRe!+-TA0{spV-Qpx>aJPY3004lQ zY4y*Zb9k;-U&~cGoGRT;<7;v<*wt>ip9Ryw_CQ28rl-8)RkU1PiA34#5dwGdukhB!iiSx}_+s(eOqdQ!$sUTCL z9EogdEj6nnl4}WOtUklCS*y(g)!^$gI=8^+P&snha5?B9jeyB@4QQxUN;65|p>-D> zSgk>JNp|oyH_&|1XhB}vT=pKnJ>M32l^Lxs+$)cO4k*hr21G?(vt8?t%&trFnsOF| zNV48Up50j*PX)Yx^ol@VkL`>%FCLrjPKB$!=!-NRO*hiYQlFDj0tSQCTsF4s3rqR?#ULO@G(EW3a;% z%aSdK;4%|7l#&ndgfMqZh56$Xc&sjw3Eb+bNctRKKxszKLx4h%;6*9RU*nhHvPq0a zs5cddC)q}qG2JOEG~l>l(&vlazN&&}dyd?D^+M{_z)E#w&eRn~@Sv#_G(Cq+YN}Tw z>4^5D8EpNLbo?2999Xd|Ao|w#^NXBT&H{{3kF(p`v!Q*%cqac7iU^{VH3X$ux|2Q% zj0E(zzc0smbLhzxlMPpsm7*uu=26LrEiJDJ%Nbt!sw%hOeG^U(ec6pf^jouM|94-w z+Xn#5Oyf5^`j9-={v2oC#%$Y!5eBZ_vEHy6ScXR11#IAz@vn{*RLX`~pV&GZ&XQhL z36n|2>MEnIE1Y!tCLD9z5-J9AqZ`50X%lQJE3-T{KEq>x!bap&g8(fqGk=zo{m4F8 zVhAP|Beyd9sdr8C;75PvCIIgTusaa$01@p>r#$Oj)jb~a)zn}TU7b(jVNN5I3)iZ$ zE_BgVdjLVdoY&1#dsy#_)iIY6L7CUjdbL z9&2Bx2WyzfdvR7oaA%r~FNU;<1tt?45cfz3XL%6O61r zO)sKZ1NczV^j<|FP4LPqjiz3^1w%)q^6!C|g7INhm<*vx@0%>agH@wR@YnUpkmRQ$ zmsT(3NIz0m0f*jioQ`?IS9SKkX7z3ccMq5a0DSEnUH$p{Vlf>d+o^PL$_Ue28&2{Z z7bKdqF>3?f1{};`av0dUoa~0(!2CDMNX^rXlkc|)M;x<+)9$+&C!DeoqeOBhy~Q48 z8I3eS&y_E;Uz^cu73DWfirfY<{F`A6dwwh*)s2tsB|podH23*m`)JcWJ^|pSZ+379 z5oL@@gIJgQPh^wN#uo zAbb#{Pfl*ldUB!UTivD?WvM5(IAFmHycE?6Fw~jF2`^p{N;FYpizOyTqA_2vMvaQG#AxgaND~4)Ibw1Nm!@jHH7)V+<9%aoW<#>jP->T1O}s32FWOmq&O1C%4TU8WvQ4-law#guX;5VQ}#)ilkqNk zXY$c9h$_Wcr*34lLg;1vCCEt$IU+}~TM^QzmB0upnI#(~#AyY@oD5oDrUjHSJS6lE z_28l0*yv&;;gz3q7+lxF^~A_Z#jr+Wg%zsIJc*tJfOHl@%OCkk8Lhf!&f2_^5YrNF z$!>FT>U1n=>(LNFJSh|N(HBicm2jqYV>sbC#ik%(Vpf)x#e<7`6rxi!)wu`&IW-516w{1uS-B9G?2{8|88b=D=<4nKpYe=I48JJCV>=Uqq`9a8#+oX(aKi@f zx1KvgYwmJBQGIn;``^2A z7FC`)!PT$xqQBCu){C>X z@{Cp`R!bkbFKp4i!muNj;wIU|g6pHc=cE6OL?}NTNT$45=*;Pny)`*+v)dTeOO}}I zA0qE$kw-Wb<5;%i)9%`TfbJ<9u<#MKpF-0i`}TvTXGteVGtk5{7D1{!W=!gsEB_cT zrK*ockUU#y89-o%sy?)F4>;#afZhw>ryB1COB;Kw0l>^Oe9b9q-Lm?{9NK*mZ$dNS zrF}?yod_I@tUa{z9upqxgAAe|)5VgY1T#5cJzWh0^8;z8SC>4l(MK9s&bf=9sj+Ar zNDK)_VvMjxju)rIcp6j)*J7wSLGtA>-mnmQe|FA|Ab&0qZHtk91`yFs9QB|t`1`%? zW7s*|2Hxdn0i|Y~E?Ii95++upSekx3YL~m`^(xL9!h-0pR9%wPQQ%sj_>%M13?^s= zDkqJdT@sUb%_45X7V6to98_?@$i$G-Pw=l$!6=xQR0-|H;cJF)i~0Gl^2t2ST$AnyAk$oUEk z-Ho4j)YQ-PV4(KWF@X_#xBRLeh{2dCPXBg0zXsDJ&9WzSG>>#{B-z4}s0udm&r=sM z)lEX;m_RTgWr|lu*nkQb%TXhn=;qM~y$Am34qAE8c|`OxkNyor#6+}#?(@QbpnXpM zCWUrjJdJ!7BK0{sW}~KLj7h9a!LXHF!)aX3;vgzAg)$}$%2N4R-6MmHzz zl_#J?kPsnZW4o~U>L1H&T2P!Uw40Qf04bX`9=myu7-2r3-I7hgYx1(WFBTi@635~f zuj9JCg%x@ji9dkkBO6kaQzVxp9rGk`JhErSkFD0~0Ns26-My}HI*iD<5g#>0{22-`9bkw2>Hzn z6R_O`snlruBLEH!XxPHt>#R8({M%n=_TL3C(8LS&V(gU$05dzh>tP3m33?_GuSPED z$Am(DbWi$T8bxHHBMNO31bOe4v^9?`tr*18(oQXrG(RIu(*SfzKB}=af{--ijUkG` zuE(Wl+=zpHub?9pS*OD_j-?&g!SN7oXVtnVzTsNHo%fS={{JKpQ6QqLdr$k=+11Y8 zrOedCb$Vvq&!A!R2bFokljI!3u#7h2iwWc`F0_t}Uqr@y{kRK^f2j`R5{%Y+XYi#D zmR@v=id1~;uNYTJnFwv;3l_& zF13)8>t;!sm$o6JM`+IVyMUw>#I~E2pIx@;Uy0mJd`Rwcv_!~m_hDJny5&C}PMV=0{SC`K7KWCWs=W9>@{9Rn~y z#E$VjU-HQNr~WXKC?`moX85UX$o>wE`@O%qgoxfmL>qQ@Y`0+V!`^BDOgEdaepu+c zgNex#Qil@QIe8t8sq)TEch#pl{nM}?M^?)_5_6+dQ_ zNCK9Y{1e(GiF~@>M#uvB{ArTvMhoIpyS@g7;~~OM20iZVTWNCn+W=hu^N#*=5K)WX zewVoiz5W%vZT?CIS|<7G0OtlxETa)PCO0FjkoH;P@m8*Ft%1Pl;l7lO3W zZsyhsV~?cNUOI+a{%lagk|=<8j6(gWcU}e5FDIfa%G7^>VXrd)n3?EJr|#3%IGqTq zU>#bzwsgj9#3=pSHqe<6O7cMjwtgSn+~QMmF>l$hZ_3!jdHT9vjGQTEr;0%+lu;pP zBUwv_l^)h>iB0iwOirc{IgW|)MAF)`33`C!CPFy)i38i}AqW9BkvNxl!qzBcrSuh6CjMqDGvjne;6SQS$UxCN!x&P zjAm;NUU$V5*gS_w@aed#H-%5u+4Ad{We=n|ZY70{~=7-h@sPTBf{G!h|&2 zpwxG&kMQ=HO)a|L)s>M}8nI<^O=*)&Zi$OfCD`Re{w5(bnXX4Nq)48L^pnZPcMB)Z z9U%+|KiT$XjHL}&SycHUkDKT*cQXc3d8PfNWFYG-7+e!WE4!zpH@& zA)X+45|BpfP{-V;jC5%FMueSIFh*GRmaxUKcZAruJA%jbAn8kFkkBE?8tvR^$EiHY zMWUwA(cdzO{aC|V{)`S~7T1ak=q3sxKn*U+iXQo|jvYfUb?R6~hV)xjR|4XRA;65n z)R-8t=u)52pwc|!J|$=74`|h~1N`=DzXJ?D{);Z#6)ausbq2uv-#ubqn(DoXLHk&* zqr3+K(&5a|&)i8z*4lNYla2Ljn0zotQo+D-u}t*IM;Mxs?KjY5(giOX#{Q-NFH-00Hm`afH*R=NhdxdTN;pZjoqUFq>)&Rqpli|qQ2ts-?SY zRY#-Ll#Gq7HL}vAg+Zsm=xAGmI&m@jwM3c8WErMLYc!-%Su?f$3@KuMOf$vmnt3tv z>@l_rYeP}#<|FsKBU*U-Zk5tX$ST$PN|slQD&}33C(#(msZDO$!4fkpn~Wc1UlOz+ zCQqRGMcTx$3DB8@&?3yBb&vnpkICURL=)HkGRt-aOA~vQ0l>_4ed(9)$jkdj6R4NV zC)Pi#{V8^0PXFwTd=vtyJHwn+Wb7gsqHDIs-qlRW$z+WPjvSfhGJ=6Pp(rl$UrZZv zd@qJ(O-GH3q)t)*$)6A$fUR>}Kk;=pIilC-&i^h+za(^1;Pv!-XTROw`KkYd;b^{9 z0q5k(L!d)@;uWB~qxD&$Wy)O3VFHwuzma{AN|Sog2zgxH;>LjN^{_@^?6zNfW`HT3 zs8A=(OA}6wL=}r}jME5mc05^uk+l?r^?A$%2RHD(ONf@gPVh`|`GEMoV2r<*>ZpJt%OT{lw zU1?JuMS3`N`?t{>n?Rm-*WlTOA68@y!w{CUy%@403GI2(;*oV%CCmC}MvvvGvrHm~ zY~!a04r(2M7R^k<{tw=HlV5qzIRJiK*8K~1hrP=H_@^h_fv2Zl&SAK}oTarjLhXdw zF~|BV0I}?W>;e$$kSY{A@mLj;CX$p?>g)_r77|(W(KN+LUd&0HEeDf0&P0=`{VYa` z8I@ivtC6Q3E!nr zGw76*b)*DD9!8jZ$L2A&q}WMaP1O-~4J8|`MqvtcM%}VrZ1t5H3@rKNRUA827Cfgz zWwnOa_M<`4r=zt#Rq3R%vE0V!0j>j3F!c%W$c?&~LTW!u2(c}hpT3gN%TQUM?Zo(F2A>!r+N;N8OazI1$(nQ) zC~`c$no-J7*1ojC%=PHW%kSMDI`Ls* zK7^d!+z}8v6~XBzaz&tvt4an^B}5XEnPIbYqDV4sMj?_}6e1CcWz=8!6e7Ch zS3Qbg=8AcEe0c9Y-!+=Q`nRa6YBIhf=WpI}(+feBK_<`RgK6D7Jw;N`sczI~JTt2t zW4s2HFe-w(L9-~GCS=vCNBvSbQP9i)c^SQP1yBQEL}+$6ggN;z5RZT`^pX}6*o{E- zK#NJLNUdNDz#)tRmffueM$(27{ZayeWgXg-xkgVZ$*7u@Z~0|X$i~NsW5$o96f>$i z=~?KE+Znn%w{XPi3znd+F<@XOkR2W9X5M+-<#{YDLznT!@*we){IhgYdk~jSe~-Rd zCWO?0a{{s-iyebU0wgXq0kr(&p?~_9{ugj(lwJP?KM8xy3;=)O4g2zPyuyL^cTOg< zO=ysgP^^2FZ^8);{|9%VgSHAbxb!!+AHAKCO-JgBw zg%z*8hz6kvAThM!Y>gGyY9s%f9wLV=lGbb2m{5MGOgA?M5+ZuA&!b7OfeDkq#W$3zC}%wI{IzF;>BKJ z05G#}KKp@#v7$PTfgbdDmv!u*(|Ca1sjnX6=e=!o76n^8{U-sU&`_fSF)0%oDg<=% zj(rftLdbfkUe*T@4nl${iI_u-1I;%VI}%4SXDL+{OKBAk8HJdzH@AUx?^}ZMJ=^s4H52r3AaKmBu!acc(>KzY~crT2Ived+B#{0-jsGt{y zC%3U*nReAQ$HFlM{jifNHBF15OD<&pNDAQ@=rJ(wFu2BJ?&2DASM<lZ}32@^*ZXz)`?GuSgm8$1>+>S6xsN))~aTu(O>P$~~2 zX|0%dEL*Zhxb1hDptQ#zj?m5q46kj0%80YpXi0{cHdL`k1rOtqcuKaiTi>Z6Ko~RH zglTeq%{C#DdRVx)Y@trdSIg4Eh=;|s$jTeiJ{@^x@$4ayV#!1q5Ief@S<{Jzh-MM< z(KymnQrZ?yp5lhZ=wh@#bML4=HH6d2+0QRE%LZP~%@x$oIR_3{s) zt}h{?QI^cF6Z8J?`+tQ`|J2!--S={C+eQdYQ^CgSSU1^=)kyLaq;uBjFkY0h+$)e( ziByNR2aB?s!&Igq08#o$L0Ww%!Ja`L2wObnFX>_7qCQ5qdcZSWox)4IvGCgojPFt#lBe8?nfRA(qa~U30_4&x z?FTWzm~hJ2%EtOf*q_pm?HMCU007k0%=)8vqPLP5&`!fGJ56BGFXPFj>#FuCLE==0H2DM9&1A!bX*` z_p|n8Nk;y;v2)Pl27%ITt}==+ce^|UveXb?BpK41;4D85KwuBF4%D{5d<#1Mv;iIe z(C-1GU--WN+XH$>z>Gie-e2@*efvd@54qS6&^tM8yKToTl(V5mQ->JM!1g zPfPtk#j?axrKfem)+{tYd}i5L$!g01sUEW?BCUY{>I3Z#kA=%>EL>S5%oC^%fPL5v zx>3{e%Zx}NF(ZVPV#_C9iVrnVx*PO()CV^`AUIVxTHdHZ8Pp>TZ)(wOl-UWeDkE6i z(F}}njA-y0c`?K2DD+rt+W@CUkkGNRv^w&atPJ9*eWyc<1djPz)lr&lkg_NXEkh+b z%N`mu7FT96G9z#NH$EqGOi1EnjARyK=9-{ov+9lIhujO1$Ckz>MrHtj5YRHi4;XyR zQ%C-k=U+%fFDaY;3VvQJX#;?n9e(iDH8kz-#_T4XDaJG~jy*3542x_+QXTTJX7QVV zu?}lOK(b*y8(=+L16t-WX(J~0)3Dh;QPwGr9UbcsCO%2J#R^J2L7V2- zKj%F+qndmjYFxf2Z6I>a4TvVc?_Th|GhB7Y3lT8vD8^15Wm*PEBfpG~;8bU1RfFtq z`Hb_16wRJAYgKlD7=~m^_jSN%tHa#IH3m0oH>*SX9xti!W*W*I-t3e{cbC1C zHK#Dsi;y}6T5wC?(Cd_|%QHC{FkIhabPL1vvO5PD+J?j^kl*ChQERb1=0{Bx3@xy{ z=0(o98MR@i-&0&r5?8S^sG=5P^jXwxZV2rzt&COC-{Qpf0A&@Y_;#t5C6K2>fDljV z*UHICwm4b`)N)z)7^vF@>@Uau>QF7T;5+@%sCvXZFCwDn6H(dpSMYOVNgDw8!Izc~ zr}0Q?-5Lj`7G9LMc1r26(!JzcbS9r!d%HY$1d>SuR(-7kf=Rn*CJ}PsfY^}}7&bB_V}I6;a#~`Klo<{(nk>mInZxfw8_Di<4|?W6u~@B*RF*f{?BK!xBtHG7_O|2AqKt!Dcw5!l@#+ z_7sbtG!T+J(lqj7S^=24Mgz@^fRoM|`A7WYh153BC!!0A@-O&BFfIv}6y~3`|KYT9 z^hr1z?;Lrgew?HOiDNwfZ-Gn;jB$u{RLR-&V@w7~H%PzE(m~400!1N^`4gM`5zmya z9wF2K79~qqXw&$l!e7#t30YgC6k#6Z7TSj4_P@u-zw~oI0QqMS(dB#cG@@P>beHhC zSH6ya@SfjoR!^*OJR%u^+Kk6fYu3U&nJv)?T9dCDg0h#?4D?1oT_X>q{04w3Aj}bl zH&o!p!FkT6t!+nw8GF_ytg^IOShcHHPLI(MD>ZLU9UA5D?EC-=b3;r|_t5M000LY! z0{lp?0JeyF`IRkM1%mGpCXVsoVa7@xzZ^(-kmySkq=Jkw6=VIu-171$e;MfTO8oM) zvZOQjjEYXyyNz#sFP3rFaKaS}(1rFYd+BCw&z-VnAc$wSSyZ611yC8o@=0Io^E-y1 z2b?pk?seu50rvt`{=cb>x&@0IOLhi;nR^H`N1^ij5jh__Pz(?QN;fx!2~oCk&87$d z=%_(P6-lJ9$uhn4MH7^?atY883f8qHP7*+Nj#|T6+N(aebuan!akpb`6T2!9obbnts~90x zw7EpE)^QNKn9?9LNK@r2mu&e)x+Q#y^FV!jb{?lWt&S?;m5S4LQTbV z>&${CS3)vWwIM_mWd8tQFdAXojyViMK+|OHrm4ZLlf46yn(n1go{?Mv)Q%Xl7dN0P zYiCBFMAi7_6&*FB?0uI)rAPS}Yf8Ly)1LL8XaiXO89kO1TY4R;67M1pwK$e#45^7* z7M73gsYn#6r^S!`Ds#5qd=sf68kOdzLW7k?`L%*bLhSSiuw!8R9NeSMUGVojMDN?C_o$mSKTe9m|YMm$lGb6m_N z0?fe3)2SKFdXI%GYj8uNFnR1OyruvUSia$!QwKnsiG;9_@*ALWGuQ?wnsWt4<51sp5fGD&?!XiSQ{6EsquPG3YY>1VgcOOpDtMTq>>?B(4E zl{lo!Q6Q~{yiA?2Eb_)=OprQuI~LeK?%(G8T~GU_bJdwZeNmbAFZgA#Bn<#&_M^{# zaDQH29Y=&7vSTM`+Pz1Cz$CIU=}nsT?%8$|Fh%*`UmbL!k84J>&kmYISWG@CVu z!XS=Sl+uo;K4!u~tP%+;awE~u89QnW6*dk5v~|G#IUn4}2cPr-BKq&!^E1D{4iHg0 z0bJ`(IqRME6F&BOH&}B;Xs8J+HJo^t)%7l15g*dJGd@Z*4VT{%$NH}Z!aQMc$s|Tw zJ)DmCjlT@J6bGF zvwjiti~Y(13U$%2j*2vTB?tZGUBs6KNCt@1Te8JtFwNIWY}v+$l#bEnWKt)13>-bI zsw6^cSFB5i8al>|2^*r-uDk{TTL(;!{qPQV)T6%)&qBgPi^M^?TxWPJ5+XYy6oo5kWc6U%5e@kukc7#EK?cf%1K6~*<`u)JfzTmm z*YqTayjzkWF;b$S6CDvtNZAax1B0AHSRl~vKYu6P;}1XUocjoXEsOE&uzpH-J?{9> z^Zc1#KcnI!FX9CrQeXsb(~vAr*L_y8*JsJ9a#cAeBo5xXR($o3;T2G;P4Xt0(0P zcACCLkUUyYTZ4yvcr{!|o22PwiNf%ca$(TyMI!_bK&8dghR>XAl*n8ABBJrYAy>5> zdMv!<8cnxIM7EJt(-3-%--+5Bv5zOFc7s~f6d}HAwuvl2HryhLh(w#XN<7Xi9PREA zX3&h6J^LldE@TP;2n`TgU~V#0fBJWaEB8H{a1YXYan{zQaL-!%sl|dH=ljpTiPFe;AAYX zrvn`MT*5}KC{G9(W0PrMLY|@P=U`C9Xt#R|Z>U5G5=#uWje(ZBwHft~N+LmPHLJa> ztz?QP)w@t86RE0;j7w4tRR|{_4CZF zgS<0ETGHMQdrt;=mWOG6D@xXFW0xP7DIFR*sipj_jF3&30gNg%2>m;?)l)vRjwTQO z031F-L^m#lzFM&7V9Ct@Fmu)X;Iac~m0#&xa17Q>&-TSW#E~IEJ1HSu#=<&cV+)tw zgG5L|z|yjgY#DGiwaW4*b0rz5Dzk{|E0nqkh=CKI3L+y#v~g1dbzbh4R=Ko9axBH5+PIgyA(k z46m<1l}=N$DM!e=)}_>=2zg6hn_HG?K8&hS^8*aTFhQJM3`+sbo!mOGfB8~T?D`qR@bII6u=?at^=JQmDNP>uD)RJxBD!Iz^wokr2TRTX!1n8x zx4mtT32n99uHuo7Cdc67j%@9#*6U@oCliM$NM;NW>)q!0ZE`AHa-pMogU}WHd0!{! z-T)RN$Yh?ro50YhDKaC8LyfbG3{l~ksUV=$>C%O@ZT*__FN5oyMbukz>xgnffG(#K zpZH2V@e}7%^DD39hMP1z%akZV`KUZnqfFjp1WYb~hrq%mHQFISdRM>2CAnDIq9>Ve zwga(j{K_iHa$!ApE>&&~#|ThG4S9wn6;puDOgINzvu?YFV2oPE!3V6+J1wkSFk)hn zNl!2sUkCt(Q(*R4`Z`iIWgLxBxiet?>J|&v>BodZrZBUz=0z6@^w}IUei_AG6HQ`8 zUT8T4YGi9fOEc!DK}r2N=Bq?%GOYbQw0u1J3;?fLnjlw{jLNP2^2*Nnq}^Cm&jEzv|OG>F)}_$B_E9^9ZTrX@(3cC?3Dirj8rQaln z1SHt~07%MB(}SB5eWcDPXg%>`G{vbC=yqAw89oaVITz|6$V%ZUbeZ$9+szin^& z+6gpS_nc!edHIHVtiZ@{-KVWn`gK6FzDBdzf$DU+0IF1C6q8*~n zDSNFmBFH92or+KD2FOREI+Jnrbz9*{e1L$-i5?Eze;Q3A;iZjf`%-N~&^$6XOPd4W zrdsfD2zEi~FcOvOObrps5MuH!H83LKowJz)3zYaId{d(?>G8Z;>>azh8LuU{ z64P*gV)`dD*l2Y%=lRWKMjaKQJH_UKzS=^LIVs9$1wHqT((jX8<00`~eFx0>E z*W2loGrmLMKUX7tQJl;vSe#f=GXTu&{k7Mx;i=y0K;&7j{*fNXB4T0>G%pjhoiNDG z(sNuF6}v#vvquSJy*iEFqc@9i$;gN|vBh)5ETatr0ie)LD9%u5J}In5maTm^fJL|C|L28%LtqCm@lAg6=buwO;LYEn?d?p!xYf%vx5<914*gB0olNZ}zH5a*D>sI+8qqqob^xigTra{#>M?e5Z`**Y z)@{|BAho`kaPWc4(Au01n-a@sw1h4*L}DN_9z8%)gvq-&xCsI`;!klTt(h4g^v-~0 zV+(jy?#cmzmfZ@gkJiy-)=a|+Gfe$U+R77qlXN7mbzut~4POc|eLxZxIxL{@Q^=8Y z%->FJNR=c??1Dhjz^t^$4301+k_M|pLLf0{fW*Jl#pQtkIA#R);H`tU_s9?2;7)nL zhX~aRiFy|oXlAhKj2vPJ`?I2ML90WmT}fLQ7(nxaB6>1`jNK{h%ukO~=nNd<8g+{T4aJ?Gyx z`V$`VVE`W`qHT+D$Nw(^A{y327rK+5dq(xVAAHieJKhwAqgKVT+_07lea}F{7+lr^ zw*>eg>^I(;PGYIwIK8jj9INhV_(`Rkqs`W+`9RRIulPmdBCBspoE$J5HMr)wZKym& zgLX7(amc|dFpBCzl#q~>@1mF1)ghEq8<(<3`2LX$m8$WO(zhB&m+xYNnjX{$PP7<=o8Aq2o-zoCEXr!S*pAO9MF-l%(XmelfG!Jdg- z`_Upsc5FWZEH(eGfX?Dsz|1F=0g={7oC--BzwpL6uFm|oO?1K|KLWzrbR*GTx0cAv zo|z9s82w&*{wrS4eE;2RX;p7EIaf=iGN@*RjTJ^4DxlZumCN}pewtWbNqIej<)CF& znPR9}{XrX$Ze)w;$i5UY7DVYw>#|hEy{ZV?whypj;~eTLwdW=T?7#0aEMMLOw=8$n zYnx=`4JylWjDG10l3(wD7S-xjnw}$|0@`f>3)eSj8=$HXNBRUpyTF(}&H=TD&(g8< zr95MqlNlY^j{Yn>67y0#O%j~FlN_6aGYy=lpJf{Jma?)M%xudofEZ?Dw}r;Oxoa{) zA|Q2Uo+e}RL^P~gM5#!`;O#@M4}Z`O{NcY`=<4OK0B|u8&Fw7)dckiV)~yyjn3)zH zIdMmK;)*Y#ZI6gTAQvFHAn8Qb->6GX+nW*|OGCp(j0Lkl9fLzhWO4LvL(8$Qp2><% zR<}iZlte5M2n-OT*)Y$&XP#?= zfTgk~hs;M*m;Cz+MqhjLA2-)rwVaw7tn2;A_?yn%Gl=9fP+CpV4vSMB zqz035m>Ya%G*ZyZfjr^bYqz6q<co)@%$>Gb>nN6hW1x}_!T_jIgT?g!Sg~XCw2`{y+Xu|jLVQ+0$OLyNQ@gpnL*xzHqSF3|G0sF=-YmbiPh(L z;OhW3mHt`qo50f91F+#+E4iM20=HPnV;vhRpfV{T{nx&BYVty#$ZiK(mwLA49LlWtWH&p$0lT6 zO!_YmrXyeUs#GbSoQ)~_^;*v8dBCaVvUx5z|G z0+d}3Jm$%oA2P;JBGwEqMpkBhPK8j@+&X1mVU}OUbb>A`Fu}DgXns}epK#vI^`k#{ zzUxmv-7$X_z=qO43w~2rG6ulHzrSpv>bLg*FqwD3h`b}4ayFwq_I#CLq@CN`)Z&*B zzPUwD*$<>|QK;%QX(B5a@iXE<#hMxp&}TqL3rGS+WtxaR*7g1fd6rQUWM9I@QK(+} z$(!k}4>^~ddjk<&Q-sUzL7#oUr`J7vO&Hx&$0_rC78{T?eX{yDqtS+rc8n8xN<@{L zDjAM7Bnp6aDp=~*(ofUO(9MAWqpAqoX9iez-8R&<14YF{02uw+pRD1G z&jSGj+A(Bz$0yHMFS_(cbksv%2;fYj-bK#2`Lf<$@SDVvFaVgD+~wEygRdrKlkk|N z)y^p&W3$egP05o83>zSTML5KMtk1G($kJ0$;V9mV4(RS*h6uaZwM~HM`5}(HG^*qq z1EgmHgPjRI$xDQx%?)<>N1N_?oTw9d??!o8%ksqFS){%qN{0!7? zm7`WhwrZtWHED%tW!Z05udyz5^dAjH%}0;6nT)skjLjh1bjCWn)2lshylDm-H_oB* zvZ>HwGc#P}aQI;>Fd7EEGr(F%(nCa|RMQAr+FI%txiKQ?atqX}A#3>=t+J;uX>rbt zU}v*cQN<=c#W?6%BYC$_+KnL+oDe!jjLxpvl$;ZnPQA#PyyOODhARAMXbW@XQJqqM z%XjK)4AOKgGFyBl7}|%m%w%;kLmD2vbuYM;^KoqmhoB6CoP1+s@)gtIQCIQ6!L^eFqURBKTE} z7z0*BH6oHp6P*Dmz9Nfbg;nE}klK1~@5Zn&!jmIuTW8}9Z0MiG(XjHKCy*N+$xG-+ z{<*SOW{kzLcPqWtmC=!8u>aPc<-Nnz7%BOa2!u|Exz?dBoQ;%&C(OLl#HlBOl${gIO;b zeI0+&c@47-#A?gJ2vsuMCz~Ug9B9XYU48VRdh+?#;Ez7|5%N<{A)}XJ5_hAhx|qBCGAyD4TMc`cIrBXktFOnDOF!PY}z=B zEn5~)RnksHaY?u)1RQ?oO7v=v5CGP%_KD)QNq)^U(rKyh>Lulo*)J;_Hx3g=4B?k4 zZIZnHnn@~$6=U+d8<3B~$gn_`ZtkDa=LqpCqjznv@h+e9?Y4B{Y% z{7LJPO-+dbktQbX#%xqeDJ7^ajo7INEqivV zBTG`~AP7&GQS}@6nlM^733tY&JL#B5f0Tf;i0He{xpKU(V2{R)w2ykaZbhT(i_t3-@u$k>0sWjO56 z||9zz|~w z$hsP78P z>zKP@0z1CZM@xr~*wq&U^fn^8vfSfeuo$o;3;y#w8uQroC%!mYQ?@mv;)CV7LQN|gaeP+ z0`NNll%ux=iv~-=0AMVT^Kz{!Vy92NI*xnD{;81U+|dM;8UrdNEEN)oAqYC1ip%UEkyMhK3-9>oeL}hxzZ-n7yEfu;756oE)Wv5vGnhYTm*9 zkcbv6i-LkZ9ZSLhpovxNG0McSil$uH*^4S<5sXrK(IgzjVpmO(I>*y##Tau z#W(kuKvzhq5G1o32nfytK|d3^em2m3pS`8``fvS^4!!r8@OTLkU0S9We>#}i&z^tI zooUVF*>LV)hd^HUfk;)P)}pLW^-qvWvHH>3Aqgz*1d2!ZBv@KAW&p6Mcn3J|FlvD- zuh@t-3`20Ry9Tt?#sVq*5?!1m zx@?IFK>xr7VJNLM2m>PIQ7$q9#9+zIgz>+EoC&)+M`ZqS03Y3wgZ0x`9IYcOQw*(k zT}n0?*?F;yelwlzc0!9OCDluTDh5pkG@A)?->xyZq5?a>PsnKr2cW8ksOA?!b&rS7 z(89u?807_v2}{BNVD59v+_KBQr<%b8SwbcpAku)Nl#z!h4)SO}p>KCbL`hI4v0`s( z95CXsJ_*C%(25kC3kZ|P46C!hdIe59=Wjs%DOAz{hRkIlhq;+r2!A6grSteB`)_Qb?sjeKhZ5v?SHQP}4%rKOU znkHb`vObPIW;L86w2gkAIHs#N;HiNr^mCjwNO@;Qs~Qflar4KERzT=dRoWsH_*E5-Qz(s#Qb>xGl`;tf;}Hg#Q@mh zSDo-to@=+85J<4$o;*hxw#&R@^bwGB`rO&X6#%&g)!fOh=@kVJTWf|2TNP{+g{=6A z*a2L_2)7Ia?sVF%c+({pxck50dEO15PDDQ>qU~j)-_H*I{`c#JZ-4qOZdvuL(9*s{ zAPyqDb;3nQmx5TIcDKK6`cg~5lmkewq1A{)`hAC(Kx!MRr|^GQZpHlENRIf4=10>8 z^d~ADbId9|+b`42cHZ6~vjEmc^X8e1NNHo{DPhx5H;K?mCx(%kh5Eo&uKtbuP$Nm$ zk!PyWQ?5~PC<(Ed=W#4sHJ&v0*f)%NWpw5${CC!;?5`HfnNc6Jl1~72IgxqCzN{tz zS&9s*8NLFVTPw_czmK^KdkC`*RLc=VNiP|NW{8pU$ZelTbIjf5;qU_@nzt+q3Kj#b zuPkaXv%?jiIlB4l$A79hXyRxWDiIyjc0NI>qNOuYC_UUng$bK1jCOhvFyrE-Yajq3 zG~}v26&>oIt_uzb!NXO6A2#4y2O-?!@jLw!-*AIldC)%s_#6@40HCZV{+wWDT6pTA zM~+s{yq`So>&W%G0j#=2_)F!ODog5vRiT+{Y!$(F;mhn0t1?OL3h zi@P?0HUMkaF2nRxjdmo5`*sUX?I$)s2vM@bKeb;wnixmYS}dpE7O*nM7)%HaFmc2P z)e0Gq$I-V8Z)4giW=g?0W@%@nWMKtTjNCe~2v(j>@C@0^hrNyk&EKsqD0*~zYMvzn za6R#Dw-QD-dW?2DxLOKE(D+Wsy8c>U8Z+O#j=ZSGzSwK7fd>jR6Y^76F#T z3;+=YKKkLC-0wW$e9X5q>>Ay6oQg+)jMSsF%RJ&_p&%cj*zRbCbowM8<$+DOm{Xit zFh>S~UglZSyVP{Ta8?-{11%`q>|NcRO{^9|QP+p6f5u{l5S<|I^c#4gB_p zIFGv$RQar8x*Ja4JBoup=#c5N?XwK`%E{n1<5FxCZ9AedB*D-Ush^t`HA@9D68qDm6 z!{M>**(d)qg_}=ueN-F>ju^~w%#vggY(7tZ$)V>Wsq^JGg#7eOfE1~)-fY6 zgPlVa2-rT4c5?q=egCIz=7+sxqx1ELXxMxX{r(03Wvc&|05kj9C-hFBgIAo(Ove#8 zYG8sM=Zp2Fb(yqE0?Dzz7$_gWN&rn$o=qKAmBWoU?8N-+2(EH*Bpw2A=;6yS(XY^q zLZ)YR2EiJOjy#iMv-RindFV)Pq_R6Rr8*PcjGl24ROTIfQ`TF^||Z@sfXf8MFJSb8gmR78EQ7boF-R)67CeT}n23Ioow-C`xQT)Fgn3?#jqYqkWZhl9o`wu1XqzG!60ZQWC zM!lKB$*MHE+0XdYGwIa7I>`0V0nCK!?R|Ay6kgEwE{#Zcmq`u!O5 z<&jAE9dU9GG+Ef{rDLjiLo%=#@)p52U2v9SQxQH<9{Qd)cB}K1rF=G%_4*tubhk6% z;-M3yOM+XnLh5MpTv>=94nKo+tPi@LPOSp2ma|`3P^#j0XhI0cN6sifhL zY|~k?s0tM)efaS@V9DzFT`H+{#LDgWj@R{3N}A{`pV{UO<};GkJLj?vY-~TVKHuB* z2W2H+9bT>wqqQ!_H4cT->Asf~q;HIOb>?}x^<}cwU7J+)lZf(zAl4YjC5ZJ0`;kb8>&3DPvCjli>imT?;7%4!kAS*2{Xm~%o;HU! z6*64NFIw&$DHty>O21Fmwiaj2QumLv$0%YFwbOr|!iLNg1cSTy#7DaRdbV|kDlD&! zD<$QW;9K@o7iMfeH^142Gtx#nYSSl5q#-vQ{L&clHKX)R^T-+`OE13yD^*ut+BV`4 z7970>f&ks`rN1JBCE|WrKMBUsk-3Ev7Y5A8KW9`{Jn#>1XL}Q=L&0syMf7t9nRBef;)1i+VDm` zyI*R@X*iIYg7?v)*O+OK#dc~+OvmDO|H;nsS%03h{~1Z3Mqb;rX{CIQ0|`~=6vXDPYgXd> zC*@Q_2}K`jVAg(VxzE)*A_mD7V<+xXKNVK`qOekPKnacBEIf>i-{+0ajp?!(<3H!y z8USLkF&XhSbO|YNC*r~rC(k8G$mi--0R}fh4^v2b96=!YYCWNqZMu|%lkZBSjSDon z&J402maxOWrb2P=SMq1Fuy4y*Qu9_-u781|J@k<9gx$8KwTWj{H14TqI3yb2ElJzH2(Dg zVC2QBk?D}r-(2HZY#9Twi$}MqhlC&_nmz&{kLoS+!j7N($CkFSk9~t$30uQHH;!o{4+0{k~0h zWCfkSVdC8=*uF{#N^2^%YAA5^OMVcnXHntmC?7vX z+Qx6A4mEV2DAL1g$2q(u{7Zb84+ec@Ji=?=*>wp zTIw-9f5v9U0z(B_?|`a23y(nhsYI=4&1rPteG-er#`Y#9 zNbjnL1~Hr))j9QjnZKJ(LYk51~}@Kf(A9Uq-h zywAok!yEv}DBD_mO~KF^ANsa=c%M8xXWzt-3$wzJy4Jb!suui2E&7E^QaI$DhJN}p zUQ|sj@b_G^<+QfUQ3kkN$7ixeZx+lTZjjPswasnelnQ-)*k*kQG$vSm>*7xK;a)fM zcN1Njz-|~lzl)P)nsso5?#zCX8;~EN&cf1iT za?QKi7C8Zx-g6n)PrE;(?H(G1;mx2DPQO#VnsFDqVI#hd-)G)%c^UR{Wsq|tB@Q~l zrK0w6`U>AiM;}C%N(*7~m~xOt6%&HpW~QxyZ;T?*fxQt+KT97TdrZTc1cl$F*vh`k zVe0ftb$q)ywk|4CbBF@lw-<5bnk>@})9YSUR04DKzm=AA3n_8leRQxtT(_?>=-<^0 zF0P1VqY8POhAYif@`QGsxg%Rr5#6Kee3)@UToKY8mhN8dbfVvp>-yd{6Ceo8{`DJU zG9!@uVI*#F9e@aM$^-Zm%P#oZ%Sm2_4lqN4d{uft&3N-P7* zV%*8PnXFs{4@tHw8W*$sO^s!A%6V#iCtA?Ye~Y*4n69T8uuwXBGfFxIas)m%)(Dx5s`RZ^P4I-iCxR@@Z$We^1K zuXiY=^W7k&$L12V(zJjbnt)1lvmhZbP#MR6)ec6j3WHbPEvq7v)Y7Q>>|ZHq zhz1F~QD0WSFMsE7=63=j|D8a=DaGbAN4uC*)EW5;89krp#6J^6_dR&hH~U_w=$XAH z$%w-V_Oim&A>=V5zZSSzeW=@aU~67GH+TV|KtLf7_t7RsNNp6NUTUYFWa8zgm2!WP z(Iy`@y69&xK;soDNb*h1x*Y4JGRl!HQ{C8x(AVejF!!$juSQ)7^&vH@kLxd>n6eBT0<82ZN z-532v)5M}xM#2!#v|cVQ<1#KB`A#bcSTmG-bqVzLx0pRpzxe!yXpgHlF}a z^NZr|_i$^ugF9%9;frC-g%$L$67J0}*vPQAR}a(6r!Tv?(?-=9$i4OE3yON5@m$7Q z$zQ4K29?E^86@`zo29v@#*><`z~?%b?mAB;HZPrLJX_lwaQKZM{gXJidmnb+%adA^ zN%7hY8-XFlC@{zpwM>!-=O*~H7b#3x($kAq$q}%dsE`2eed|ywP$juwSguf`X~3#* znhjdV>a*qcpjDuV4<^m)A=9wQ<`a=Yt)s=2RI}XVRcq%8Q{Ee)md8%P~nc*=K6ugnkeOjn?r=cD&w zgwj6iXW;g5d6+7sfzI>cVx{c`a2b2JWPR`hpIz}o+KA<`!27)Z1qvw!_H6nTDRGvs zG@_+uRDx6D>Q))h1DFb`8Tsy4Sd81ByAbiXkH1ysO@Rb{3Czf=p67m9PpGwhxBZw! zAICLJikyMQase=7Zzpi+C%69>a*w)J|6}@V@d8Uwgs)}2;UX{bOmo(XIqjuT+fE;y zea7GqzKK}gzeN)qGQradPI!t-PhxKg`s_R-JfDRIZ@xqE9|Um&f~fQh?@uD7Z}SB( z8vS*)92GjpK3f4OczFax2%R%4#w%`EXoXXo1w&{J)#?x5`?7R_+!(Cv%%r-8?NSWM zdwGpBl6w#U67Vtmp-*mZmy)J@0kW4%uWpJqbT3t|XJL}#TZ#cK#$zU&>5EU3mFV5C zXp+tQbVT`FH>Cm0a)XZ(IlT$o9Ozcr5j$|=jd-Kat}!Bm(q-aN8irJB1=GcdmbnSc zn1i@`5OKeQoM?tVD|Bd1{nGKf6UFj9%4{xsp?m!KKQ|>z{Gs%T1@Vsb`dWZ`PHc3F z_Bdbntm049?UH=1n&wgLJFF%zac)ZjdQ`oZ5N2w;PjZ@E+&Cp?u5?d0U2Woh5z@+E zDuYk_9IhhYisaWqr@&xBMW0AXO`F4>!B&4TzX@TIP3*Ry>{gpO!p>(Te)Q?HOf_;r zbYPo%ZU4E=2Dr0Kj(%l_lJBT^l!e_t|G6yywBm-Ytr43n30lUnSYjGm2@K4_{AVWy z7Hyt!CFc!_c=7co8Z2Y3!n0>BJW;0F4mN4SZXrY&ufJZF1loALdNBspOXL0&x-F7v zp&FD{JsGm+kR)I91!YIoCGD@6%H+w8qw-kX$79NG!$`n&(+px@UQ5#ku0m;z{jpAL z7YQpNF3I(~eUS83tWGCa*x7F8qO960;|)DC%pcP#ICaM!?(pfFd`?v!4rXwZmoECG zw5@;GoFlhMo9w}?8UBg;CV5FteRSz-a^WTwT2o0y)G}@Bj8~4M7hpVB?xuV2<%(UO zQ;I%24fVt(iiKd(mF|_IF|P?sdyv5)PtQ<}PTeD>h2#%qWBt?7ag-y59s!e3C9=_W zozJ{Ap~#n;^pmrW?4dZ3x2#|JUgpKBDMqf088#EL!TfVrylxFJ$vm zKhM1TnJiExY!;96c5*<7pApKynXTL2Mvz8vxiYi3W^?pA@)syRbQD(RMxXL<_{MKM?p@s z6j4+yrW+q$_c+^rx9nC3j}JkDwo$$`U2q1~)Hz^x|4}|azWlfyi%C7JjVF~1 zOGizR^lp#BU9izTVgUAC^NyO=kODK?LN7pUNpnBY4tKpMK?|5)u}(T9J+bYunD&%;*{OcXOth|TsKI+`0%`2N;Hl%4U>s0)E zZ4aEzh)EqhTZZZmyS4@@XV2Xg%XP{v!fg0r)kc4C^5qnH&-0ewNu z;obWkOCX$d2v7%Dhq zde%(}b$XS2eX6s#e&jiiX73^h-?d_+do|vRk-A_Y-PJjqV~f=^F?LC-qkoB2NdAurl)C;qRy?9_-uU;@HgYyzB$E^Rc#-HQ41pzV3n)kIn18`O4AAw ziO}`Q@X;go$fWX2SzzHbP9(Y&l5H6u#l*3dJ*`=6$&M#&M(4e4hijE-oUgL`M zUVrN?o7=%}K>31o#S4C}#*BYXr5th}G`d>9CXb|*kx#@S5q%zaDTOgsi@5w2j-kgw zrG=^pjnqwJrY_HABHDVKH7kUDkj z9=N|*0N-qUh0jw1TV>IT-vR>{fd3tJw)N4NXVBFu#zJZno-gJ7b$WtJIriJ7+1t)} zpw-8LuUBeIRtARS!HwElj4%yF=s1b|o4|3w0*?oF`&6|BxGlZluiByIWAjH{?Ta~t3goo)Pq+Un?P(OPGXIIHQb79hca|@kvwso@o@J@?3Z9IN1r6W> z(FSq*Z$zeBJXv~vR#2x|F#(l(tX=42+?<(ez^t+`lt>rdCB6M|TK` zYI0;R*YREKI$IFMlOws`!Arqy&m@GRwEIb!r_x;YrnWt?6aiy6!M_^ow?iXpHPuUJ-kK5QYnd`df z*5W_LavJ8n>3-J7*iTPo^PF?3m*ob)rG1?rm25=;y}aai8Mf%(jlxJbdAO+#G-h+n z&YdJK)By`$yEHW(P*=o1fyIWK!jL2ch{g9e?`1PV;;3?F(|sM^RSoKa4E)vgZ^B#c z(q}p_qYY{t`c7z|-H%*V$`9#Jfet=>wzhaAK|0GeCFVw^)$bxaxxu~_?Y-<+f^RTu z@5jB6Bj$~R-;Gb70+`uyM>G<5u(2CL{u47Y^yaMGvpXaw@_y1Kla<*OXyDr8ccIMK z&wZmg_QWvfZ{L%7)2`xX(j`mggc!6Nc7-}Z@e#5MOV>h|pphk$2`iQHVf>VRf!PhS z_+?@HL5<5DnDq!OioaMnt#bFn0=ddK)7Jkn*R8f&9Pq`+zhL2xrpr$#uTT8Za}Lr? zghg3anNz^9Ad3nM4hFl6yff7*Wxwdq@=4;5y>Gh_=6xQd*8aq~l9%i9O7C9`z-C+D z61a=;$-JPaDPNPoUDP|FYCh%PhJPn`+x%w3#Q3GMc5{vkWECw7Dd`S=Fn2f5c&^buX){R|baWfJ#T_RX>H! z!~Y@`Zf>z-t6#bo|A_bkJpYqpYjUoClD)SdHAftp(OgmY(_0asP@NE;^Sl~kwQdS$ z5Q2muAPwN~dUemKaO~`UZT{Kc{+3(j)!pKUy`SWoB;6K)F-b#~F~{Z%m|c$uQdBYD zwuoTz9<=HzYpcCmPWlkL_@q1}to%-+SK4W<3vaDJ@-XA-FeBcs?ZOXo#z2e)LqPfu zoz2UUb2E<~Q4u7ke3-IP6%~-VTEWHT2Y0$2>j_laALon2Mm^EWN@i*p@q7H2usUCU zd~3%QRrxvWV@yXvQogF&t;<}OBdv?)Ue>UI&PSAQ>LPlGrA1ZX?00>GwzP=5=xf;4 zQrKAA1z7yXs9&n`^DVRfVG|;*mHdS})$%f5%S_<`(I%skL1{FTb{mq}IX@^ynt2oL zkDpooKln*GoTSU+a&?Fqd^_ql)@e`&!()oZ2%M$A)BI6d9s3hzxc{o#?uMLw>xfEi zF&r;4J8X7~&Wbi~Q1+Y&Sj2Ojja^UN*nIKl6g9Q%!G1l|jyHZ2zH19GxhNn-JF*5> z=3e!fWQoC+-XT{}M*+pe663k~nKhNJf{vp!+U?{%nLtNq11N!%jBwbEtLwWy`v z@j))fq@IrXZWua^bUNcM!pJAIAfQMriih<8@=gL%N+%WwqhBm=sgm<5K098Y2qG)RVyyq*~-~^EYpvr+ztGN{dg^1mr5`31FB$)S*AFR=kB|w^d3i(MaM0EJt<^W z`@^y3(N9>_1f&0LgZzjI{JNyoCdlUBGj&O$_u=OW!}c)eRpZ#IbJlUvdBkZO1&a=Zw?HScT_A-z%edFGJ6IJ}UEB`` z13>1uz9y){`|8nK{cM$vFQ?|dM^jyXW~i_{Gl}7fJ=B1tiv>%qJ(WBm$W00breocA zSTh0Lx9QCNf^ANTPmprLG7+QLm2EWU*x2CzJ_FA1SkHjz45P3MldkqQWO?4F+u93A zr%I&jl<~E2);`4p$3jh9u6|NSCAQzEQc;)uyUbg|^S7Hp9hD zT1KhdX!jZ{x4dER+Mm|(K7D)(J_DsXl)7H@GZVf3H5*N2l-VAriV{9AS6um`DlcvE z;T;J^)yffqG~@V2+V|paiPpP|{a4KevzLoGMrAmnp1Rju_ju}GeB=PymWRp66f|EU zcN&<{3;JQ;%N}4`dBKMi_o8Q@&DADg9Z>-7CIcQY03Yc?^H2mu2MB@-Lf3HE;eMSf zf8=UB_LmxNR$zl9@1tMqjH2m7yDPG17Zf1U!2LxN@3WQ6e<{d|hr!YSCPis+8HqQr zHHEc30-0pS@2?189bbSqD^+V-H|9qOFis;HSQ&(<2PX6N89khJ^uJq&cGm+*2Y8=C zeIE(COwq?(xj*6tx93oo-w$H(?e7BX-Us$_ z3Fz%d6ZZ3ym((gu;p_bk;ep&oWTElNU>}qh(>T3aSby7 uK)#v|MPoJwuXO)!{htQ@mj)^u*3p=N3EW868`(C%!%|n)hLkH>1pYr_fk6rY literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_gorilla.png b/app/src/main/res/drawable/ic_level_gorilla.png new file mode 100644 index 0000000000000000000000000000000000000000..c0cc0e9121cd47ac921c22e5d665e12ab6657c99 GIT binary patch literal 210639 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

    kBxf?J%B!Q^zJGz zng_5;O!rK0KfUM`|+WBAIC$dFJL;GYZKo9qhZ1zCG98R zM!)cV$o*h|BOCER)0VLxAw;Omf;g5P6i|*smOP0+axx;{VmAYcn;{%ghd>2xt`jU~ z_?+9{dft-#pE~CEe0Uayi)N6XEy2vTMu%Sc%gB>E0hDzuht^R;*%W1|w4%780KM^) zx^BMn;7xh4`Q`4uQ8Vm+Ftf#Q?Us)Y)?WBs$dfzVu_#s`ltw6BMX>7^3mlLD8lTS7 z>aFv$fADwve)DYr#>(*D9L#L-*IxfWJ$iQM+<92eS^U#DM0!p57%=NIZoT?Y9U)1( z2R#LQkqhZX+W**X9__^RQm)x`?x-U>mTW?uEFo;vkzrB9dgdb?m{Pa01(J@qwwG}h zGZv8}3;+z9(*-{716%T$>f?HFJ|bQ=X!8!h-q{2GI&oV6{2*GOXwd z?>zdBkK8%`@O>xn_?d0YW<6F?hqciVqu~IZW@G4(1R~+#&?ytv^>3uPoGgzMAxaO@ z)aEUn4Of=xK?B=l*i$mhcIW8Y?}`?uIPi7k1h{2v?QY|9Zh6xLz}*1${l?Sh!~TR; zTAmLI?mk+ade2+tdGp5&-Hn!XXNor*Q^zU&57g?VW9l#aPwp+PePVRQ%@@|NtU}pN<&9WUWqa2x>-nDba2lL-+Wrhh%DGE?9*xrP2bh&=YkBRzXv71Z9}x2Wu2cRq= zFulbu^0ok)Y?+CX@+;3rQdY-$LI6;;I315z3I>Xo3HrZLmLOL0r=${ zPyE;scz+Oaiu(!*4U&!}63LG$ISiEpdRK(NwCs%>l>w5UQr;_H%?uZw*hU&O&Q}{k zmQ?!WsgwD!fBw+NHwGJDmQs3nZ}#WIvm-pE?>rwEa?V#wPW;OEr!@Wx4&R_sm7-Ed zpjQx`uV@(scC4bf`rX~(kvIQF8Xo&=X7=dCJ}2w$YtyqI_<}rp40Ee;V9z7ODsE=iYQPwx^uXiDs-;wy7(EDrPnfrlZIN_VRr5v6te=%F&s*Jpr>j9sWlN`R*zD6Dx+^ee3`h zx*>B5zyd&e^*?>}Z8P8c&%-pnjhk1(kP3U9S_mqOm{buhvPsONG$WRKBcaf_6F=qn znD`mI4=%B-)Gkn$*K$Zd&)7XX(GmbTSnjWk;;JbPM!2E7;{0#?o!|WbwfEkEniN&u z|Myh)lWv@uI~kZr7{ZXFgNPs*1p^pSf3LpkDk#R+HLq^KfLT{v;~LhmYg`k!iz~Py zBA{f3G&3;q&dv8esk_eak8`TKp9?5T81CHjQRY5RcXd@iUDb6$ovQkDOz{VaXjtyp zm}%tilhFY)N3Dt54oD_$|FUzHgNf(?bKvuLHG5+V{bM+*-$c6HAJ2c<#Sx;PIOint z=W#-o3+CST*!5?o_50sLQDtv{Bk3~=JyG60P0JxCq~NsGrqY~i%k$PpB%h1258;>UMWkuM zBPl8hAzfIZulRK2d@kq^9;sfhN3xDr(#eOSTfOsKC|ky~i6qbAsWzUyZWS2fwq;0} zp&d%GAqUMndmaoQf*4g;NV5z#tPcQ%hMfJ5T$ps+b0*w7e@8)Oka7sRV9&JjGwYW# z6FF0|KtW1ninn~0acVGw5P?Z{;3Ebiijlx0O$YBFU(3~ zK6@`;{!{OHW&R7D&Ri%Go{B!w@aUL8Bm)GbzcKR`$V1C3Q|lz`F(Gv(^_N$hHsWxg zSiM>#81RupbFhxo=PL_Jy-KxbRimD_R(%R@eA*i~UUbImpHU{dk%*@MKx2lGwFBdU zFmtszc*SY#>mOr|mN{K$JAa=FZxiP)T=r1I`>N7_eLHcLWjB=i*S?5|)<51ajt1@Z zw}!7hCv9%|Te!;JjyN9<$jENIaBTW_h~<{HT2a^X-<5jTUPRIvJR&8)dtZ6+_l|k$ zoZ7$_y~h%E;SuHcM98i0o^lD_{p~$~m!(UmBSK%Fzq-a*a|-*Yhnx|tQ0?QhWBRkh zcfA1+`Fzs8K95WR?08gCf^?+0peqW^>^=&Qxp-dyqm?q&t{lLMCA~;>j!I_H74j?! zU$4K1P_PE|{xeOfc(aVW$0t1ydjAeNq~&KnHhVDo4E5P}WG{I!L>b9rY6|wIW)*Uj zTNcYT?8*lsI5UxOSG|+o`^t*HTXD*~xqY7l^AfptnGz|_L4HvfdeSP= zRM1!rJy>{l;nC~iY0nzjGnKl`pJ_+ZPKe#f|Mhd>^6uTsZU;Uc3C^6<(T-dIny_{z7wvxHxVMa@w|%wq;t@#O1h7sB86wM0E2biE&_N`sfXBU4Gp?|MUIcO8-F~90iM0tiasG9y-afsTQvI!+off zWK?5%g%sqMqSkt_`lp|RNb#&+)sw|^3;;~B;cGU$kY)0K@7ZzvOPb~ZH&9H_@jD3R zN`%vn*c0_u+OeK}N4mmiqI|pJ-1O6PkmotQd{JP6tE7-Nv)m%+8HF9+4@14 z$<5|UfeJi^C<8%(DQa6xveF?DA#xE??=jJu#6)`p5nQrI--^jSdRI^E*S|J7a?hiA zY45(CI36UzZ#?;*CP?n8pwiaRh$$kP)Xi!BDk1-;c*&PuviQoazy9amYWZ}6Y{o^* z@Y#}!VWmU;T&OZ>XGQNw_RoXXs~pW#itHHSL7GGHB($CCN!EOPD@A>{0dgems!$z4 zc?{W=DiIEvv;X*aF8q(L5a>P5xt+ygjG0AfWyV9m%n?uAwSRN$#?K?J9U(&jIx+SE zJ$(L3%9)^V=jT0pAG!Fp(!j|V5YZnViLm@@$&`SRYtBgYPTHawK8^x@zKecubNIO1jVyOzGAP3?KbIQHof2;EhOZ(el| zDkLkR70+h1QRw*eYhFhML03HQH0UimmuHoy)i1>249G$NvP5zZk{_fjB2gZ)VFw+X zW#q!Nm^XmQR*L7Ius5b!Nv?>wf^ZGxWnK=sZ#f?lgg*tZKsXpqlm3&ro{J(z&QU0; z!%_{(lnN%jC{qyh2eAsj2i`ZNER8X7L_o^e+1!Cf((?0b^QTq~95lXn-vO-?R-B$L zt}WZ?iT*nx`Y{pR-$27xWNbdwo#(~@v>!=3e7G<(E&SX5)e9Fc{b>nqHG?Q0YY!fe zX;pw?Bg!d0lJJm2A5zF7OP$q@4y9y|^8txT^`N{^1^`EB3^pW~6ndkD>+(91vL+`d z@t(8awdqwSz4BQ^bp5XAzl=wZ2Wf)FbiDVKbojqdO4{{*2F1%r!k@DjWBO|eO1(gkJoO2(^2ony!Pk~&rBK{-%3N# z`U?UW?9;}!>VmWWj-u#mL^RP+;9meUyO)3ODf>B!e(Xx|N@Qy+h@g@VPRrM6fJ37V zTy^UfRAZUkT)4#!0hm{r{-#WV6@G5GR$*jC%c-J%)bTmbKx#c$b$QwO{p;T#A0One zW`v1)iqntY3)OO@UAQO@*>3=(G`%6QCiSMnG(c4{B;#BNi=Z$5-Vk#T4yaH@xL#A~ z1IaxRnpz)0CbkOCH9U=wFM+_G!A@NIj)1Ag6h>M@Jg;j`d;fVyjvTu9$x}~We#%5O z?)hH;-vw}|2HmA<(N8>9J5@ehy!W-e-m~=V`EwS00>q0tE4I+6wBqHF6xu}b@du%< z?)faQLaKt;*T2~V?l_u1|3U?K)U`wqOm3~iMd3(z_j5M@sfR0a4ujjb`};q!;f`9V z_jKpnhLDpnGqH659tK3zisqhl1F^dbM0HtkBfLo2Tlb)Z7ac|Yo8oFZb@x%ev2ESs zxk6wOT{3v6Jm;|QyUHFP^}cy8!>7S5+}S;G=o%jIbD2Z`#00nn>Es=+VCI3&RDT&n z}Md6MLX4zXBe*^SG&qRD;UwJBeOfwFTB9BLq`<8Di{-j^k@;ZkPMDR*M1fbpaIAFy*^mLU0knY46#gA-dZG_}>wt1X^9W$$O*|AnXj{O&KF^*_IU6F#aJgrvhJ&TCmPDED_ z(cR9u4bHjyh-i3M3x5Fk{l+WjxKi{oCO=0Wc2S!v2y0b>K(Z-Mj?{Um4-jSBMd!wY zdW^JrAfyG$CO@o7gT_b56|$y-e1^6YEmA8!X~<$)(gyPC(zji5(VycS;p8Y2W;ogVYy4@LIpWs#gPKEEeSux~Aq2$I$K@Km{MGdOkGxP+cwHq0GpC$3ZtR+W z=F3rfbf(e$HK-?Gelm9BdCAnhZ$MOC;fN!!2$$S`E!u9uk}LdTk`4vT_f;02`g{Oa zKa$_X%;i`A`0NurT3;c;((E2oIAwREw?NF;I$FnXZ{3P=Nz9r2sTUghv^>3KR9sEd zH9WWm50GF31a}DTFlb0{_uvqMySoKn0jRYX~FeuSVvjf@W&FW%8VLND|qsU6Ph(QyDAeh!pt>Hwhr_5 zZQgw!h|F^L;R50$rLZz-L)8b#6 z&e*oS9Rp2F7HIQoMnKE|4yJ!o&h)uH`O4>({HJJNwu=eeSoGT`Bcet9eRM1ETfP`p z3|ZW_e=#D&vKB^lZHK4wIMW5uj^3Ao+LiiOg=Koz?T@+^nrKq_!Tus(15G3}?qVy65KJ+_U;!~Oshs|dwR&$#N8#w&p&MA3 zi9tlyUT+uf*g6_4;P$altK{=i&}N=kYOkquS{NCVkBU7eKS z9VlBrC@fDLTVrYbRo`q44`wzlbnQI#_21NS4+MwycTWRfI8io>7J2-p?&-8-P!TD^ zDQ?w94o^xA^jtoy&l3tJvj3#1PwX=LhBM05nQ`(1gq;Jz7$emVF0ws2$dFcMc}6qm zM`y}HCS2u1AP5Tf_jguO@rAJuobD#?Jlch2<}*Vc-PN)3{ipVOw={`$*H^KH{2wxP7fL>&R3$5 ztJfUtn6K+j>Tu)Va6MPjN*M)io&kCn>8nD5uloLw4oIZ1@WtC-IjKzvTR4Mitvzz9 zVLV3jREmXSnunu1qG??^la7e=t)im@{d`T!PJ%et9Jmmz`);GIZY6rhG~|UQA%*$`%vk7g41Q(AQY_NkJtQ zltY;!E|TOwx)AwOORM3WK%jEr>*rX`95Ax1h)La7+n%D(L-FXkcmq?HlPKZS*9rZO ztyMHDkKqInnjU(`;Kvx>HHiw99+uxr?}guL#eoI6M$WeEPUT;Ck3=&TrmUpUIrH6T zzU>&BZX#@B%_(d#XpW+z!UL1mfh%SAkrcCdy;>ZGAY&5cFxos;FqQoosMUICxvd{t zC6x|z5;4WRA>U1;paTE3HY%4KRUJg-n)S0-2pQ@Ac}&pudPqY4lh?||WH}_^U=3MH z-!j)t8zFH3m&*KN+CTN1{L|d@;0O6g?*g2}Bo1sv@>1E%k1~4!Na+q5Q=36l4lUE0 zs=<_E5z2L|ma$ga$f&wkk7k@@wH#uCwNP+2>KB3yG*uB|Yzm5(w4u6n}oF z!slW{vZzzT9e=l!`>`F*@-#PKMq)R?;n*H6<#ANnjgRwQZrYpMB-tnV(`(E<(B29N))ct}%IvB$mL+?%zG~bI{ z9I7+a`qj8o-UpK{rUBc9%vOJ`_6d6s0N(~#w`n_lxhY!7dxHn#V`oPk1rAnZP{g3r z+n-+AbhhBOCpH29)nVNFBKJ-Z_~sZrYMJH0ji0cpRNlsH%fz6HV-GYZvN(~pfOlr& zIpQdgU0`{8mQ>JaNLpwPZj*9qgukZx|5QAzv)A+8bQw9#Fa{2j z0y9OBB4N8ZGIqe(wdppcpXN`-ztgcRN{E1+KTn5$XvZ|j;Tu9C9e@%vmsWxg74IIK zHY5`|%r-5%J5s9m#PdiPvWSQ|oD7RI;a@jpCs1O#bJqCM5jb{ zgr60iwER3nk{Ny>T5L7mg*)|eu<5CishArFXef8~%Xi1${sD*uGtr+y_~{Dbb=sj# z5k67V@8e7sz8-Q#&^5My|8O@*rTkauyUKd>(CE)y62U^xp_ZqA=_MU$II{&ke!S#A zs#sVAc2%PnYFeVR^Ex*n7&1Rh|b;HJ{K4wa{y(CT9)R*|1Grh*gq|Cp& zQ#;ABaN%Cm+;Sv(dTku!TlcT;*Py(pt5BR28x5G^ivgGxdmB=@%oSqL#B}1 zQm#`k(38Mc7?`VQn)xMnT6f)>>{|*i-xFm><)`hdZ22V$4mY%X<|VhLWHHn#8$}TloYN^Lv!1>t#aoeKUMgU2&BO6_xlsGn z>4TRL?5qi_`v&}be55?E{G7#he?{Q);sAJ!clcd=Lt#{Sy;U*hs^NO^oW{@WL0;=a zfXxKUiyFHrHoXzw_-=;Sk(k;QQ>}WCPa+}M$uQ|NVg*>ME8|x*jY@Un0&@PrLYkK;c-BMUIx5gy zMRwaqDWaNrCO7ui|4m`jI<@CcX~5b>bE`u6@;qrHQC}YaCjOV!)mtpWevg%%J@C!@ z#K&5rb`UzrsQhTRIX>rlO3U?emj$FYXT?}$^ST_eZCQld6nq53CvuOENFuDEPQudI z(Kl8hsiW;|vgUEw4|062^j=Qk{dr*WPO46TueA03n`&@WN<+twyNB_L*{A3yd7rox z_On6{g~=j#5HDVP2t1!JA(JQC_Ie{7{3q}-gVlFs8iEvK?hI6(;6)e81;NeQt8=lC zB}3H^?|Pu4gB7iOvQrcJir%C=LjtqZL=!X{~fTKHzOixia&77=pt~Vm+K?ecw^*`q*M=LR|BcJT9>N zov;IKRQk`826}V7a@A=HlC4y1L~_y6v01T;@@6a)esb$NO&T|9x{9(6rKD-aH|w?N zM+>60KP))Ezu53PDIdYKDrK)QPO5WAHzSj0$*>e5!Ocq355c3w5nEtN$q9vNbM#F>36{m<@aFmI=%K z+`1x5mUv)oEW3%($1R{H=9ii`ssGvy_hvQP*g2!0+K4Zw$f_C63Ea1;X%>~sH0>IY3jz5FDp{hMt<1_Hs-9Tv{qi$04dK<2L}sM*=<~8N z>)oP9$fh|uQ?W!=QWe~@Eitf9j=f$Zd#-g$8(EUI_p085ELwbUT^(?_nbLS#MGM%>5G~Tta)w_7R$^o&g0&LOxCfJG+;Cnes#8Y)+`4`E|1m}FR5r7 z`Iqv@&Qz=dS`}Q(eA}w48;%FsdMD}6)4S~vC09#vjas`^!KtIeecw;w!uW*|)K{a4 zb*}oyaDy}72O+Rnu7eCF{}@|ZS!^|7HedHtVNFlr=FFNL5O#T*Rvw`Sqi4fp%YgVv zPqrjX&)turf4Dnyh6{^i_aj^3;*pvye8Lyv!Gi8`zau~;|HW~WY-oxO(99$>SK+ky z<`gaP2iII#;W!k9YVX`YhCw|ZZs0Rhy2lv3!WRsP?MJbd(?UK$%xxDF)bCe_;tX`m zJAKVXlqsQd=u+5mU%T(anA+^mj|YYsGV5=~+V%ehEP1W-LU1FOvN+FQL;O>Z)>yKZ zd`1txPo9-JwSVaI;KSk2W1M0q+Xx@fu=8W_BlyAg*`%alJj#b8#iIa_yZ{gw~ zqfVN$?xqe_ilik5u9=S3x^1n09CtBJ6U|g&>a&IX!J{Zco^m^6`}v16ge_5ydXSmd zWY52snOJkC{uD9)Xb^jl2nOBC<8QrK=MdeSyDVf~dm(F0`P^IB*DKU9w)~gwTiXGL z4HmYRjK8=VBd9`2vO{R=D;jCek2{U23l+uDgyEPM(G{%)>7MC{)7!6kO5t|%cYj%h z7Gm~^_C6#vl#()nDO^plJY0FowOvmSJN0h+<#`D7OG$x7+_|h)^R9t^1|6avN&DB| zPzGot*h+Nm4%2To1Wz!(O7M_$;C7RjR>%gwLC&PLX--Q8;Yd*_uA_@CLlTA=4$7O~ z9@-~77d5Pm#Ye(|FGc&UbC4JvhsFYFqb|#L)eLeojQwm$1kDD`9@F^O=X>HkVvIl( z|BCi|=@0j5Wpt4QV^Cy{u~mPj`@C3wDG!G?rZZp?T|}c@i_XO9rU3WE6P(oM6)k!w zMMQCEBG?D!l$@p8mR+U4>UnRvWZtwAZP>pcZE{Vu@BPBkl`fc>Z<&Cmp!jUxMrY_X z-#}NRPnaMbm}4FRv~l-|i(bWa3r|CO=R=0x`rkXutZSAgzK{WO$cF~ydgq)~@SxkS zgYWZ{3AE(QF=p?{0UYO>>`}j##BN3sG~x`5e+EOk`VQeI__sC1Q6x5DSqn8kwPNR# ze2#|w%-ZPUuo}%`NRR<*zaDkHY_KA3{jRr01zL5K z3zXZNTTh7{f@K=nTO%J{8F_m^d6Dzqz*|e4XsmkjeXwx$qhtt}aQg~QCrp4o*WmATT{c}^S6<+5GFpTBzP^var`wST6Jwe4*W68OX5h_1qzOR zm*qUec{S0RQu@fqO3AgG+2(u{u;Rb=cSInuc6O#Q6p<$`sOy=mB-wvwtJ?Z`N1&~z zrtQv=zmY9sF30%S$j>hl61}z1ii9m85u`js@(tcJIxa%7id&0Fs0k{Y`_MnpJWfJD z*otrfF$w2{|O%{E=rT+GGFo0QVbiWqHni(uu4*%Q<7sCd=x@M zTJFp{)J)(DgK7yw;1Au4x{l&^oIuxg(S`4Et&NPwSjLq)tp)5xg8usMCC)o1Nj=a* zVk4iec$;;LO8jTKEK%5dvB_mtmxR2t^fwwe4{0V}x}UyfKF#~+wmvMG@q+abwi-co z)4bda0Z&k3bsam2m%I;~y8NA7klnGf`Y5dU*_NSFdRp_R2}@2sSRB(+&MBm!($eoThQc2V^p(~~?=mizRW6V{n?Os8X~l1%V1zSC#5h~W0Ln!C*fnA|*hGpK34 zv+Q8zm~2$u>4UDm*`eCF^3eq7*hF4}ym0zwPTjPYvZ@G}FAg3Dr1xsHNA9C}T<*ao zXJ>w?d1B>@tQT`S8Jy||>xJ4<+X!7(sU!3pT?9uf*vK2!2<~JxT(4Dw$y}$CpvP@w zSXBBn^fvQXueyBow_z9@twA>D`pw3}dRYkDuJ*-&_*ff;lEraI4d|0yJI(7F_2w8# zWOIro!#n;8Io2@ruC?i6{OBBV_AcI)r4}n~m*|qDz#+!hA9))+ER`Kdx`_tDhX^@r zvVH(w*B@*xMhR7&dn^3OlbYU$*qWD{zr)=Cq;R3MqL2=5DM61;KhIZ57DT@`gMI=Y z$1nZKJp5Q4fdrh)Fg)d)_WgqZ;#};XYfvVfzEp_0lhobkhx@c**%5CJo0csszqK?dgYq zugmv(Uy)?uvJ|hF{Pl5N=Gsv$dHXJrXO*2&&n)Ii8J&Qx=%}B}td-S>4=ei~UahsK zbm@j)OTnTS($|K~NY{UA7`8+AL%8lw^_?>&;Dk)bol7pZPIivNxhX8x z&=1CbV(N-5SOs=I{Y2u{@xwAn zhHpP%kMiF~zZhfTuwdoE~QuunnWjl|ox z44jSD3g(E`K?Ea@&-GeN891Y9y^%+kV;@Rkpuv8`tbL(=pE$C|xdQ|20?9ecRyyc>@${%SGpv@ChCw@;D!;&6+C!%3zC znF%h;(d&?KXc67}+TPZyd1f}N#v#M#B%42Cb;%R-Q{_roUZhFVCdZ&1O%7n81xs!c zt;XLSmEq)S+BIr3JWBtWihbPn*DrK1iOU8SuGh%gTPt@^p^*Uo`-cW>_Tzl|oAz}5 z^Kc}WF=BrUe1?L2wc_o6Sj(HTdPayWCKIGPV`HyhYD{+eP~`a~KX)EogS~8vtIq;u zbPPVhmRgUdE*aoHq}ZbR`@Q8$2YN*RJBf@J3ZZk6#}CzS48^I>y`=J;NzH) zgfwiHDPx9i6svn!VC$Qcw0dmQOsGoeXpE|}QnLGkm}8TO4ve7}Dw9q!G_gzcO2H&E zNQ}4I;eY66smTp*;wY_uJ5w4TZUh*nPq@Lm)9C&4X1qEg>pXomhKALdyDpiH^jk`E z8oFL{*dS3HA zR8Bm>cfqgfWm}U>M)yR#{N;m94m9iC0Ix!vqbAQ^HV{n0#o8YYgbevXE}pa zbGSP-e>Dctkr@|BjAFH)V;5zHlWw{iU#o}&>j}@){3S|Gi#8e5M)=!~W zjABP!y|w{npH?mbBg979Mnw0A+6!%4T@ei=)q8!~Lyr&+DHrT%4BZ3^t@D9i!`*?% z`XbNArrM|H18?-PZ(->gxHCh6H^xW&ij*AB`VY4y2aTsG9Q!|Gjl7JheO6D2nzx zF34(22o(|q<=H1z^XHB)x|SOrR2n~|#m6l)Kzb7)l<(?YjvB=t!q|N&W|a$;#!x3K zavv%BZ`^0$CO4Y49F^l&5^TR2 z>++cft1T3a4DeD>Bz&uJ;d8XiVmzd9`-&T_c6`_5+;)liubeLd^X#R5GPy%bImiePMBKW{BOT{G zR~QJ3F}3AggMvdNkK7hNY_g6xRFFP%?k+;M<_7D`0WF>d)NRpEa>R z+uom4gWTBcjAK`N6UtJzqR;ed-!MZ=-gT29Ti;@bG<+)5sXM<9Nh8k+vVqu zpU(snkB?3#YUxkhKzBEkhYE+^wJ2{=7#zt1THweUK2zn=?*afm{ zHn0!w)Hn;M6O5mlw;Cq(ye)9uT4RICdL9*In~-A9pUA#tYC?xTe)pYTR~;Z*w2>;n z3G8&FR`Moicr~=cGurfP*FrkC8>%Q!vKR_{JCCLVMB{?`KwtI3qo62>2R zx-;J+*ekfY9>LaemDM3`-!)gtJLStTPBQQw9uW=utOo-muOO4TwDh_XO{1R zlL(F5kMnXy){HuJnK9dvXG`wrPNwX!K#$12ZO1FI=5OTwd02|fB#8ZcrO%Bam2F?F zf4O4#O0=lGl?R04P_#S>4ti}znw>*l$bMxk)p7pB*_0{m;ddw;BEVb-Q(tKeh9=bQ zQccX%{Maj+inrt%I(6^2_zVzg?5t^14GMtJOABlX!U-WZD*qyB-z2L(%#XDZcpmwy zZ+m&N@fRx-y!AfKQamX*@HUA?+yLmHsIVf=LO0aHp>R^sPhWlGab*^;;75;W%t8;cM^AbkjlxZFYn7x=W#@2NiN|#zc}mt-{5mU5ktXrBA6c6b zC*9E#qKRq;0C@Iu$;px_3yXm9Y~Naei%l4prnBER)~$6(Z^O-sK7wq?vXWj$}`MX0#; zG!*71n8dBL}mDU{3Q+WRW?1QcZ3r z>99lNz;P4KC_vKH3tPgt!}~F+;yu5S%_k9p zP7azNmq}aVYFQ@Zc`J^67brRxI`2~;P%9s&^BVv}k)matm%FTS*GnKpKXWoYyp2GU z(TU+&72(&v4)G7iaZ`6{;a*8&5)3je*JW%; zjPyHqtY)wM#V>MW2c@>T+z{r{>g&+feWO!etvJ;~zyC9Rg`MuPq)7?7Wdh(o3V$0~ zO}uLA9qSv@JzA<5tUqb&$kLhA0#JD+qpgdXNdy^Tx~I!DU|m;WhlBO>KJgq}gpD*# z925kkHV2wI+|{r8cy$-qH0|-mkLP@Z6NEE)0LByv%Y?e&9q4lKF}`g9V_3A*gN)LM z?Jbb;W;^+ee1{C1g!~(9>g09ppi?&(-t$pfYmf`JH5b4y%3N&i`im>0**y{uQlF#Y z&9jRWen$PWyjmznx4tKDm;ysTkNq7*9S&ynL@EUd4iAq_4}RNn^~6AeHq<^{r5jyJ zARA2||DCDo5~=vSP1D(eCUoZ(tLe7FEYr#18_L>Z&ANP@%CwlIAT-JAlC=?2{ghiSydhx(LV7K}GT?ngS zHjWHCv}tr3pImr5+4Q&NihZ1Aza8C(050b|;xtvx;z^4Kpodmxf@w{-lE;uho@GqAUSZ~rfeL5jT zEeDSJeI;4A^lKi*{=&*IXnN_A4Bhef+Tpa}Uu;=Hr^PtH)DT3ahsq+f3D|;|9~2rU ze}w)*%Zi+`0N;~7@IR^u0EF9iFh0GhFZw8a1l*AZ)=So%8WE7S?pjqnUTecZn80hs zO+-eJ1M>dRtB0O3Hu>K?O}uu!gDLb<*vb+*vl#g~68)U8T{Si@a109WMPp7M>V_6= z!rh}>wb$Agt6;{C?Tr5?^w_2Sd?Q01v@HRMYh%EM;$1(6m8S8a^S)eJ- zVCLAW39W3)n|N{ou6jid!Qpi)20FL;WhnDctDo7BG~d$og3sP+wu5v%Ub(ToV7j;f z;`mFAR)(f714WZOhnd57!sST}qy3!um9B|15@?_MaG1A{Y05Rj-T9f2=VC}N`^kNO z-AD1g)>5ln;(T{_4MD^XHyNjK#oTK{c0}AF-o|XS8EiN+T7Lc37I7f1fJWg-^9M8X zYLWTnDWj;I_wg5nmd%;%{iVpG;VJujGgdFT@RU;~VA~_}%2itN(mIkJz@pCJpw_uJrek`5U~V)`qP*CC8`9``ws+F_QdkuGrB{_KI)W+Ajy8E+QUq8RIkBblZQ0TM^dx2@OA@ zlhd*^Un1cagUqA97M{Oet_uUhnVl!BCz;utJ)oc)c4vg2ISm-U&L8H5t8Iue2_QVj zhf1XRGh&MzuY^6GUs<2=I-Ekvm_77MY|f&?%sm?zU}C@|Y&XOJ!MWd)>*>FQAOwv* zkfX+^4OU3UcI!^qJ&1R|ZWOyTmZ6_5an2SO@=GjCKK_eIh$K_xe6k~p1@nbwJZam* z;og!-(XUD+$Yd^UOL=!>4l4ck^{B=2R~q0LvCs7)8SgvZ_q^n|0gv$pwnd1GWFqnT zUx-wE1)2!IWge!pn17FbXDcZY;HB)~mq^F^4xo|#*a)=S&D=2_0 zp68_F_3A}CSQ9OwX5Y;PG<6lsto!Rav0}Ck*+vt3|B|e;zMjgI05gGVfLSVNCT(Hr ztz*3rNj{)#jENowlln5kOOgwNx57O&wuk$7^z#DLT1DHg*`abH)*va5gW5f{nE(fQ z;l#^hd}5)&34&=O;8^LJFG{WHq%Je&_~ z4yZu#T$FXCdB%4yLylzqXR<0?$nL6-t%Xa88B?N8I?9AWI-InC(R_~(V=BP`6fEvY z?uFHv%XWOL2dKo-p|^2L;VKr>t-?0}eu>+i-SlLBQ7%iktkvHPtE1`;9jnR4M&*+_ z0019tT){tl?mT=PMmyl1Gp&i<#)RI<3IAN#uH*Z?r-;{w@k!&w`WWNKCb0qwa2G8t zg1ws15#;p!rbQ=s?iP;Za_D_mdCIVO!Ti9%Z(0dBEX~ua@Y|uDM>fw!^=<9}^(hM^ zE+|-GDe7|XvKa~o7#FgL{f!2N7^@k4XjV}s1Y8lQp}aXH-7fFbccq!3&!4s|E=g|>4F||`s~;AR_xp_l)PatSzS-V;gWrlbe*YL^)pG45+~BxRTa4f;qtx9+sFiLN z`L|KqD_RV;DZqmF_7-?nX-nGE64O(2o&6Tu8+n2>tsHrml27^Zfqj-Lfg+2BTJrLg zGLu7WufwnvI{xE5F0gq$#zt%P;K4GqA8vwvZ$m;Qqd)z+lLu!$8IwpH;)o$(^PxTd z00GsRl|5_=T3U-BlEH?6yuk~nQx~a5xv0exx*@QxNqdIDcwDo25rvY(P>WcXp6&Aq zjF=&go>_KfThv8^ zV%x!3L<9RxHeF>ct}-BV>oEN?1J6ZQPt$c^H1{|+tDC#gH{)Dlk&PN)Od<{>GEayK z&BuNJO90h?7jQ-JIe5C8q2tMNk$(zv^PVuvJZIgs&zA7;2$q6o_c?WIq8$dA=q2=h z2x<$mis*w`)o;a5$bqV~^D~(Do(+6d!&XctI9$I;BxFpHgGcYgGx32#=S!r%gPI{3 zylWqwyhyuj)hgM_SP={mv!9W^0@gH+g^zcXF34^69gj^-f3rV}8DrMPA2#uwgw{Ns z0k%fqvn{Q=SV@OS3C^b%`8zK(#|{ISm)CxMS!&CR@=BhND9bQ*Zbo)U?AYdr8HA0Y zrsyjB36!ZR_Kkw5;2b`uwP(aBIfY?F=CtB$W1ckTX@xoIqd87|9TH+~i`ZH=ax}+d z@f?YuNq6X^$SsMPNzv5+3kN80uNM}3Jo=~*WZkg?)T`wO+TaNpX1|9`iR%g? zfQ!Tx-w3q}UA!Ge8B{=2iuS{+qU`+f`@s`6YtdARFv*d4mC7NyC*RR-<|}om`O*Ls z{hdtD!}NL;e@?W#LJD0U8ACM7j{U;(Yu{6jOWD_ihY9qC8|E9rx5Ob@js}kqp;MW{ zoZkO5xr-3MEvgK@)^0;ZAke3yUTgE_Z(-PHJ^IJ`HJj?+X!y4F5P#4XI(?}Eh%AUXAsM3N)@`$CHJZ4#S40FYPPn_t%mO5j>VM`Q8N8J!jxb;fI zuK}`Csklu^3ISsVj-^{k#SOPe^KM0*2|K)-AyqcU2hNHp$hxr4h{ZK#{O6hu9KMq{ zv1iZLgd-#_Yl_Y8yY(RpmWlDAmHa%j0=}kkKhMJ52(1bc49j<#fMX~z{d}lwzRZ2F zwoPJ8&@nRLqKOrXaWnWgj3OIq2>D1)aK&yYrEZQioafD_i2iLjPQ(0cphc~+0jKhGGeTF1h- zp8-`=xvS%^HiWPovn|n;t7VOy7wwtV1b#X(kr*NjCa1McWLvC*l3%QrsyW^n6tKXQ ze8Io+k&0Y_a&%gvM*w=(cci%!O?c-*evx1Vjb!Tc5;fc1vsDEqu)~}9h%JF3t=I(X zfYjh+94<5Am#r+Or%mLioa(<@?e8jo?iY(wsk5`U#iH?m+!Y+DIVYCT4*0Fl6e}Q5 zjc>Cdq3iDC=F)5A8+78vYF+nDIuK#1+7U6veV~-eYsuqCXDIyHP`Z=nf*Dz}T{_5z z+TH1{U4T#c*FCN&hPf>MIQavDy=dhK>=#81&WGpDrjLTUiAd%A!0>>LEDS2pgderm z*{YD^qD^`p0T1{bvvV^gBL(&!QEtR@LW&zRw(70NH<#?%NOSZ&0Eg6i)sbGS@%D99 z*R}``2%hskjBQ%Z4jQj+SbC;9P-=j`oXG%3KkV?Bg=V-sMiY7`K%&tANFqWJ6BspI zDbm@b?Z@csbYp11{4vt(xjL0@8}UUuoO_k&C97AzZC@AM`J9NIJDTpm1r;8xCih*( zBEdK31vg+%zbli7;5B@(&U#>{;T|go2?TSHNsq^7x;4d>%szB(4PyqkEa^6fWMG{` zTW2C{pEUPgq6sP4n|ay9qzjnayD-y7uAz_%^HsT>tsO5nP&(;LI2>H!(st(apcrFz zAE9&G@-|vGZZE%qz2{ix!5=iKpW!ytxoT|nZ2W8pU95jJM_DdjO-x>=o+x)L@1&7R z*+G{PFEnyrS9y&00cjP#CWS?ccEE-Z`cs*r?YMm9>Pj4~8{;K-mjLOkk zNR@ce|hfe=lV>Y`WSMPV@fLJEo%KQ#uCD)?nIzxI=f5D#1jxcF|*Ya#i&Wrp08 z^@=b#J<7Mi^gqvbrY5p9F6z>~^DPZ|O3X5DX;D4F!rLASvcyK7uIMbhS5)HF4*E6A z!jfHhfL>NpDgvLkosRR3l^dNsH4ZysMkl2l{*7Ndm-BGub-2|XswgqOtpXiFeF#HH z_0s`U)F}4>XmL6Th}eg@CJNH!;ee2B*m2C3zgg*&U$yBZ2ab0>O??kdnZwQYK#=ar z88iF>DpsI#8(68mXpHpvLs1AI3}!nqI5^bzhVCc6dcA_NTZIz4QW-YYrN>RHR$$tah+r^o__U*Wc*Kl z3#rlzEm1?w8b0YMcUL3uh?&+4vc+F#AqX46N&=7HpbTE?s9Mmv;Tv&n;!BS9|F6_9)ndIf zy-mud;MvRKI5`~egK68)fIEMGP8kyG^h|xtoUq7~BKny?S2VfNEjw(sU0}JGwuu)$ ze>NHlf{A#6lW0ziPkvpG9irtvp-+e(rVIu-N64| zo#|mRC5jFZY&iCL@|%gZ1}8cSa&514Y6;2ERFL7C&TkQzSaogh*%p{;kU|JdC6&$k;Lb$p1iWO~?#L z_vYzMZ()nc3M-NzLlUE2fE)}fx=};d*fiMtaoEdJSN9FG3zj;WWd-i&!(SQydWM6X zjim2B{`(hx0wW#3U#cGg(#pZ+Z%7(fkE*#ycq8+>-YadwsIdWKp_C!o?-INGKd5H8 zcPbn3ZCDOwe3j!k9``}`M6WuY_O%${?GtA3f2%}|dL1+ZPwM^y6Y<_X`_fX}FWU+L zc&O`e46>+RFZJX+t6w;#D|-GK=VSnFa>||%D!NQ8{UpHzb3v!IndA5*O5~MPY<(wP zF&chaygk+s4038%Hkm(UVO-?BAKW{Eti%*jA`$WGnb+aZsk>rsn9FxbF2}-_CxxG!T zL;b@@K>|Sn#wkE$3R)Iy_cW&x1I&SjjCdf+Ux18vP&1snJo~BwEUfl8{sjLquQ;|u z7DaA`+dy!v5vs2tVJqjD9F5n0zDYaW%?9SZN9;rw+JaY15AHZTQbl@%^T_cri?mtf z*yNrMvr9lb#zMLOtGuRdPNAZ520#_Zkz1twM>PD6@M!aU4;g&7I;|Sn$B?Zl6Mjjw z7d*tzGf4P}WPdU1wa^ZrzB(tooAclGSx;N^1aq$I3ckuaSk!S3CGyCPqQySbt0Xg> zBGv{tAWWB5dgJ5j1~q}85u8<`?#<@v-Nfb3*#gopB2!4=r4ov~Lj!O1a+80)n4A)( z&%8JmiwDNbaE&5#QDw)HHj%#D)%7A7@=D{Ff(wqj5;-cbtxTsJD9Peb{m9 z4q{>dssLT;SKk&l`14Ta#LdJ?!DAv3efjdJoE)}TAW)rZ@jS9bs2bXHi zEZk?(;<*NkH>|sT2C{noJ6PW;_pQGDZCJ0hY1ZP4L!STHCrnWOIP6R$Rj%hdY)WK{ z5W!bF*B?Z7>bOj(5y%{|hVT`@8tR30qSW2|8R)Ma3=6`JG1?xv z+9UZT6+*-UufkAXvf`l^Ko2ObujqGELd@|0-KA4!R*sD85#=PuyNPEH)6S4^BLIa@ zubEU$&xVNp$2}Ff6BT}7R?lEe#)IQmefTC+qu0V*ZTL1%One^&uCEoAAJ8Ky0Rb8U z2&EhVbQO9wXp>*Va#=7)E`8hFj-Jy|_C{9l|02YsHd z>=)ZA19VE-_$btI%5;ptDqT2m%4c{X7qtM~ND#aSIVsC5UiggmEWlkaKG@>1TZ|x4 zbSCtA%1)`qR1-f&V+Kp?m!IB=-x)v6wS&Fv+w5k1|7So&-FpFYf+Ban6M@d}i5W`# zznWLA-92_YanWuvY3Z`*;hDxLH}53;9nmc5DHCp;50OPl0D^^wQ(H+CV})dZkq4#t z!#n$_W(yX8jx;mwrV?56UF{k>_jr45Pn_S_KqGO@#Oz7-Prxv` z5aIY<4I%ZaLG(#Er~5idmHs+{B+z^LD^v6<_6o_-8WzPsmeYz!0H$*`eJl2FhsLBBJ-X*5@ zW=6eHx1mk#OsE(4E|fTndT2gCc=?Cj<%pZP2g#rdg@LYVJyHa}P6>gjp6?E$Z>}oy z2_l{>=->9f!g&YH$SbUGIYNwk^wlsmHO=al$_%cBrXjM(1=~xesTV2>&w+$EDRj5t zyz?sA;J=iNVCHpMj_~bZ%%{;z4>36Y%*jMCi}hCC(y2;oE@EzUuS*WSHe5~95Q&+n zbF#kHvNOFIGfW|DeyLcB4@;xAVNqx%hykqci=;#jg$)~;#U=4Z0PZwJ1?Ov zb5Gx4zR&t{)h4O3CyB4ATDjrNr~mTQK=0UWp~lR{-br()IK(87aTo@!OTaQC;IcTyV6HrN5W ziDHuxm8$%X0WBslna*9xQeYRR2R`2n{1>wqs{f+;2mB(RA>8TG-R9C|#D*QKe3Cx@ zgbzbsV>g}7+!rgZ^5+n36e8OrCt^0@2PI-2Rt<=evVAS9pCnHlF^Xi{Vs-4Y7yj&n z?2FCYLqZg+5YcZ%p6O?BRkrE3pECPPDn#nRpGKb*c`F1kaA%6XYiRhtJ?8jq8pZtF z8=dT|+KTyeN7fY9OjZPIH!w`npAw?!E6ISpFM?2^F~6MHtg$HJ?$4Qta*5F|66uMd z_>^WdL=}H+r~#zKiQ~#YDNV4w$>3KA&lB_X(_;{(dJ_a?59P3&R|>!WtMx8h@M$3N zGZY~HZ+|6k`cFD}s@Tom-Gk;>W(uzCdp}_vmCPO;+%8NhGx+(x5hp~i$VdO1goPH4 zV=5et86NnalctnmsT^wE*zaw!5@SUjV8d&NP{&Y{TBMi&Qb~Y~WZp5Pl-V2QyFn*< zUqPWl-$CMO1%?8@{x76GW4BL}ogJN3jbI+E`JVI_|5#FVGr5Kpo?jQuDV7EHj2xA! z@MXs1!7wV$NYj!3ynUR-gmJrsh%s{oA^gTce%m*;&|kr@Y3oO zmSJo#L}Tr#B-NF;#uA2_=Vak2t)JO@$V)q1TF4bJOF>R zF0-x{fBtuVaZID0p23(P?8GpVur0hCl%XX)6<22crGN(YL=o_gGV&XX#ub7h+Tjmx zUtGT`?Tg@i(a0%fggTuG&hVe7B1s8=;K8KstFd=wU0(p{M>eC=Vz9%p z=-uoT&~Tk~rT$-=$Pve~dAYx#Rqt+k+&oxzmxZE^D8lY$Q<}KtD+tbAmX(NM?>$lx zlu27%>gESHb=R7aI85$&8-`~VP6j&C3cr-mi;;WL%D@XLFi16RH=Gr#$^wo^0~z_D z!w;Rb@b<#K5k_B6oP4G&sy@l44Ksn}MjW{RbfW(+3#Y`s^me|A%j?i(pk#9s(O|-+ z1I2LvEcK_XD#P&Fjg(M7UqMaK>0WQH%(ZIQG)Gb{Cl7FkRkeL!Xdz)u9a zv56*S?rl&=HF@>2wlGkwi(S-J}F4D{?reyqyFU4RRUExJ01GQepIuBbM9WxDZgv{RKz=w(F!JAmGy>o`q3h zMSa6}eD}d-;1~5j^58J?W8v?TqFlX^0xStzhvb~Cif{mULz#V!d*Jwz0 z0>ct}`}bVde`9oNpXp!JUzqsd*@T4NeRywPNG#Gk`x;(3Nk9CTb*Pm}B@zoVy->=7 z|4ExICrD8qr}|n_;gDzbqZCJp%rf3uoV#OfQQ@%gZ=?b-rvgfm^Pl_@G6|BrD8lwG zDhHaN4Hd{u4Ci6HuJIKwW&)r8uYv@mev8Wcf9+lA zKa_17o-vvs`_>3!8A}=-OCw`9gyan=J25r3<`EM@W0|pJ$yiHKwpWx8$)02^S+i%U zCbBn{>>|dzlb+A-U+~<&`~Gl$xIbLy@4S!mIF9T3ou|zQ`5-an8 z-1MGaX@5LIqU15;VbNxwmjfLZ*?+)D4J7I<>PCnLvq_Du#XV{f^yLOr!MyH}> z+&a6PIbk1^vwA$(>hO1dTmS$pPHw+Y2gl0gIq{n}q^{X?|Ga3bJCoI#qpEr7Nyssh z>XTodI*xy$h2@@?VXuc>9H_uo4HZ%dPgi#f7)gy46!OW`{c7dK^FFiD z>50<%`sg8BxLK=1YjD9o*$~G+SEU9XnO=%zh*@lH?uw4(o_! zlN7v>D>2$+ysjKOi;;5SwRTQJ|CIAvPJKo;JKf^zJ06WIEPx6gKuV9thYCQBky2N* z_skdG&K*7&BFf~$J{^l$mp|faNN%{9s5BPKX~quM){X>j`xnl>y0swFZSh7+Q|s#E zg%;HP)@!angvd63s_Q{gpS_`#bW4SIKH$G4A~RzsYOI;&=r+CbdcYO<$O$!FKD1Jc zYDrR&M8mIf1#DZ;C#GZ`Z2tpDBQCohL)|g`m0tl7-l4ewYHb*2`grq_TSGo2#^>!7 zCg0qw!bCb#ka2!MB~7!kf^*U+*k_Mr;! zvQ!Bo>N|JoG%ES?dA!VbwXi*=oh4;=rt?NlCW{nQ1xff@_F%TSVZi1zP%oH6jcZPv zJ^Csm!ys-zIM<9hboe}~x@a2&n3)RaoEdEU6HeWaNbB3xL?um>pyG{+2BB>V68ZRM za!Bn(Nxvy?;o}$@D@R!fU3w8f%QpZDeH3)ls8sv`-T0<5OnKVi*kUv0YdB=lHf{Ib zP|pJemE-OX>hKy74eoI86?LRGtW^qG|EM%4k~@xsL`EvFRS2dppDXc2*XbR2JyP0v zWglPQn1o-s`o(D3GxZnZ6$gt;AJmzC_hcjqA#_KIkQh*4a8W>@xR9Tz2tiM36XEv) zlv(0NdEc`8C36=n2?eWUNG~Hj-SYOLZxJWkJ20i6`g5rv27fe`3yH-a} z(%1E<;Xf^`d$cB9844DPl0|9x=eRgAe%Dzf2vdcv`-2(si-qq#X{ZPbK7MshgM*DVz+11NFiD6I zp=0k_%1E(jvg_fVWX!FMzsB;1hs|1B~Jj^)%_*9fEyzI;>`vd#r~$A!6A zi6VE9ryH&@?QJHUZFHkn{jXD@#6eJq zRIIQ^hlDd?$J1R6jEGgn%me~${egosWU6O66t$)#0Qv=>7yl=XBu6 zyz(#;)R=z8#6)hLuHe&p7Io9a zuDZ0_&}ye=Aj;dQ;OkBGT3&qIAXPInd~@1&(&`?<7oPv*;;v{ibpE#;%T$JQ{(9kk zZ}d4QwvO2$UgGh%PX8YSo<b!>Ew_s$Ch0aXe=h55dhlCDm zdiozGb{v(&@xRt4lpQx~KuQ-v@)uGpL+ZTlm7u}$9B)AJ9M&+9Bs{bGJh|qlmz?+n zh}ld?Oq;^|kyZN?ZbjRJ7(=$ARyC(n9y&bOgPGE}xm&e^cKe%_IYj$4r>T}2-%5kP$DiFE11d}UpO_ZC+5)+zV(M6I^C1PO^6QoSk<(Fa(#Cv*ZA)V0iYfKU>rLUYj-4g8ej(Ob=W1? zlFNoN^kC*$dksD0%|0UjXB#(u4L&P-Q6D*kOwjwz-kdgOAO1=nWPDdDh+idzMKU?s zh7T|P^b2^e*R$!y#!b(+^!AU1*$~QxwqySeLgOG{MK?S`# z_Akr-zEJOcPxm=M^Y*4dk#L)x43cg$B#r!uER;%M2ei?7D12D2VAhUujhZl8g3{M2 z0&{+7#F{Ge0PXyqsHNZ$b*zoal%9X_Ui;Z1HUR`+qgA|^_1Ca0TX!@k1dY1rQmrf5WluyzLDOlY1%zksq_OOb^ zg8QWnZLVkA9u-`~3Q%omxa`^;>Xcn>;9y(#p*zvknQ(&~EWmg3RKBegs5RK|h!RwS zJ>&pF9^!xjM($V`LmMHodlM!vQOR<_Ajj4N2XChP3zI`k4m!ahh@Ol zXv85dVWB2}cI(M%!xYtZB5DdySj)&+d?!BAfH56V{L) z9_{_Z@{O;_8*E5ayw^C(0XZ}Bs5lTZK5=2|YFpALL~vI3A6wnM%41cp44jUuFLT;b zfBbP4Q7n#5$UGJA)!n|6m>Ku`BVnFM0$cu?5UKXgKJ)G0``-xs{|F@OGxRSQHoEhi SZS(^$uM5T&MrDSW$o~PT%kH57 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_elephant.png b/app/src/main/res/drawable/ic_level_elephant.png new file mode 100644 index 0000000000000000000000000000000000000000..e201f3ab3b1a2f118290af5dba1a9836a0c3c58e GIT binary patch literal 118534 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∾̳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

  • vAN5(O{bk7gJl@ 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�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 AkpKVy literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_high_school_grad.png b/app/src/main/res/drawable/ic_level_high_school_grad.png new file mode 100644 index 0000000000000000000000000000000000000000..18e518197cbcb125ab51ff78fb12a845309684cd GIT binary patch literal 254768 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 nj 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

    mI(xoF zb|A;o8R73Z$3Gd&9HIZpy^`6nizq6sRs%14Eeu(uFSX$6V!Y$DFX67cA3;G^blbFf z3%>vTui)_gI}sOq@x^amh~HlPM??jK*{K94obWt+=$*%cOAFDvPa0p-tarn#KZXI?;pm;KYIo`yINpU3yxyMFc=&j zMn_8#pZelwaMW}6gdJT6BFgqCa2BJIOx7E#MHh77mQuh}V44==&g-tlW#9fG1~zTP zyd_;I#1X7jD~>cjWW+|UwE`EolqY3)f{;u8w%m7jy=Ylx!MU8N>)g%SV1^+eNfL|= zPk;fmbhKjsBcFx+4&4tO-JPh-%%CjWJsoNYQ`dyl2ilPIpWv%Z^Y_#1fBUY zG#^Kd*;5{_edRe#6J#z_8+b+nH79%;e(aq^anSeaqzxr;)-zW{4TI(gk?AF;*uw*uVeC_<1~dnp5(XL@kZ zA;)9&%7sW0pcoOxW@hpGOMir0Zoe1r|G;OksJja(Md;hO1(#p)UF^2VfLj*gWv@IH zqa$_HYO{#q7&Fr|C|62KLMb9Lu&HbZJ2h3ue*5i$@16N^#Dx|-^Eod;%oP+Oi@~u; zjEs%ri=RCWuY1kWpovW&JF86P#-FoJo*S%b0?7JdU1kdui$G;D?!N9O{OTKLU~*&# z3zqdDwXVYtC_~qo4?BDJ1!uJ5jC(d;`a*!h3Vu$_YL?< z04!NVFtFs_hkMYe0NQRo(@b5F_pA?iFN#m5LFh40r{t%1~OX*WJW(?ORwhf!e z{JFaLfOC5GdCB7d#`3)kay(t&eiAwUm%z+scJQuURG5o*aSZu#p^K%-m1r7FI0)*tYbpZ*4| zElnVjJ?aj63ljJMjn$*jnj!gc62O@U$ssP^K9U;hD@pM5rFrl!!lY(6Zf07ETA zRT5lIq$J}ydLI-oYbMMocspoPuT-fDkr9QnNJ$7m;uNHuiO~s6jZdMiy93WS^dRha zrhMYxVlfmswI z351jfEQ{C2L$ek|#=lfw5+JiKBo2a9@l@r@IWe5VqSJ1vAzndbV2}mdsruCDdSjvs z=O6g;i^}u%c!G#z6{{RMc3^D(%g^yohqbnnuD|$LM1^lh#w>7DDjlYt5dpC1o2=sC z!(M~c%ND^}3u|SrJqU5v^PO$~&?pYr zcNcv86Ys^crAzUW7rz!$(*Q*>&cAun{2gE;-{YRI5dF&Fh2(!@@!r0oKl20tW%#t1GrQ zQMG6}Q+W`qya#Ad90!j%nIWqxD)alf`D0@fm>8YJ;uVW=;0q4J9tS-GP0eM@j7(s5 zdIn%1iXvIBK&P#dhz`h{1i$pJ2%)mN>NsQ7$p?MU4RzI1?>%tOOCmXTKjWZcnJYum z`G7!Inv~_09ykpxAaDmibHEX@tm`KwyVez%oM(f;02%p4Q&Bj`6>kWI$bd|QBuP*# z7GYu|OF1f_slN-tS49KFW`S+pgp!nE|_`rllQ-< zYm&NYbh_s(1YTU(k=RXUFJ^wJU0cMBCP@k=VO!OoiO-j&88%`Ms$=y}Pc@?}h>&Vqb?Pm%DLF>kv zuV$E$FFZNADSj%A6RGhRu0e9{zEgaBaHJ+PoPsHWfhZj*QW%av#7JRulOYywjU_|` zL{W@F$$;Yms8W#~C1XMySwtYzXKR?9sbS;5BsP!DVti~2BmJB4{GEF+HLwkj_HD!L zYyvif+1VNS)~yAS6e*{==nw-GA&PW2L$;tOf}sd;A(G%&BE(UIB&j1!6BObS;$i`% zViCn^6NJ*i`MrUq*hq`JJe52PfcvoOH0Jd-A~_a+k~ zpI>p*dv2oEMZ@`!K#m<1VfT>Ze-X@FOg3J1IHjZK!W5PeMa~TN9Xph7`_oSBv+s+r z+s;dn)P)MRZ5zOa7o3G>?9mRI90o-al`bs6u+?sS@MGV_^*7v$C}J36aKJt*@y-AE z5HK|;WDr;IjkA7>)4zExUh|S;@U{Q=Fe>Q~s5T`XZs-nngs;b;)elFm#Na3fnwQ|# z-(QDceD#|!l%Q)t2hzHQiG&C#;Bl zA4ixRnZ(%eD0&txz+uN9fqf5o28!hhW`{;GJ2MLt8ClVO&iFXHg@OWSyt~g(C4`ko zf-!OD@pdlzhF_spFvt-urBC2BBWI<$GQ(C34(B#nkj}Esr0^EH<_T3Q0Hmo!1V*u1 zL|iSyR9aB16c85*7#6D)fqb zX8>T+1WCOvo`BTK8WYB#RH>r1wFSLPmZ7Ds9i2V%QEhHPp;%PKUUC$00-x0RRR%iacrplF+<$;#(-N_<8Rkq ziHlDE57g@x-MwwU8<*O@_Q5XwaFQ3!!>O z0y6g3=X_$;rF0n?kvnF0>l^4dAexw)u18Y7UpbF8Akz)MxFS^ZaZ3X0M5H-D@y7JchgPdI*m^)`u-aV<;5MC>A0_hEOcU zFl10D#Bwbv__9;5Xs=92-HT%eMT~lCFg!Ai72Q?*`*Rjxj|F8s);|RXp=g4zSaq$q zJVh^-7ZcV=Dy;+k{u9!VOf=K%J2BFRvTbsT+RO~<$t)}b@l*gaM?CVt-s#BQKc%>N zR}ks)K*|!rC}1Q=npb15eUHMz`3sPyDNJPW$m4yu{<=%BqH|aRo}7D^EYf-cZeNKd z%Z|jZyDURmw^+Y%3;yz#Ut@8pA0{q}8{3hWVIXCIWIPpMC12gF$P=rcxH`Z9%?t3* zUH9PUU;HLUxAkM*;vU%4N_e9mgLCR z5x_8Z*>7(=|24;~g}B7?Y8K-^MAu@ob< zg!|WQ#vS*s#o7ng;ekgs;nsT|1v8^uZbG356ygZgN?E5gO58@8O8%tnWKvzAR>T?ux+@G`7I^9=Y@;0s;h|ggEKG&qM%YXhaaSE4{0xG8S=H^?g&4mkMOG0MC+5O4uGFOFLiQxxb$IuuB|1iU9USsRT@R| z^H#8E1FXC58QnOE09XwkApkaIaIFrC49YE4n5F{CEmcg6PT{VH`*8c6595)Cp1{p_ zJ%+w*!zh(R87P%xhe^wMF!XAqy2j+fp0Rr*LmU6Z@npd+_~f7TG&- zIT*t1^em<)C(*lTG4|Mhe=J_T+r;puM=tB${ixHbOP{ql4-Cw)qrm+Hay&)A%!YYv zr}XjP{tU&|eT*@&>$HSaq=QNspthZ`|G_Vkb^hxKjA5+n>&K6O^dC5EuNJ?!k93g+ zHj43s3$MqQzi|%U_pTH1){|e20#5_eqw0QkQDa$$F2o;NrT|ka1jCG!>o83VF+4Pd z^H2XK9=zd3EM2`2WPwy73xcmK%Qw6dURS>Nn0xN82gjsJ05nFz$fO7i_K&~-IP|z9 z@T{YsgKBdVriVt6)>2TcgdT{L1;jaiU@%4AGvWwch)fj^BjiOv#D7LgS|=~5D^RZb z_o+?fQj>ZiSleG%Nr!?+Y*|AFWZmoo1~>v!3Qkg_M5vS^n5HI_nu6R#Nfmfip3bELIEw!RYZjt#t@QPOQ!M~h3P3?A7X3rBIC`&6y!E+@v1N1ywYn_8jb0?2FIw zl!3LjVz>U~MVQ%g1{JFdoarqcPiFPmIKmY-uE%@c{YA{5-vI-Xz&fP3=9&vZBWt8P zb;QjUXlemR?J%`*q%&hWH0`XVxsn7{lI!@uNSQ!fgDrNTPE9!fi{HfUS6+ps%jbh) z0;jA~_+;5$avf@DNoj^;AU`v$Gi5I)>h*3vlee zzXH4Lxf-?MF-%QNAu{UroohMjk*6clrFngapULe66*1IhtP%L6WDa%_{hF(G+qX$^ys*G$c+sN{VNXAi6g|Dd(Zn#D(sU54e|MGQ_Ph>VsJXosQzNWR%S%g!?ezDUIycljA7^W+rA{ny&lBkEz&v2w;nl zek))O$b9UM6?nmsuSUXEq_z$sM&ITEod4sm;?P~&vd$RLWqM`Cy+MSO2o%hJZzLP{ zs050+&Yw7iEtFv^OL6J<&cT)Eo{#xUx=<_^g8kt$u9oMt2h~4PN$I>@@S1}b>8H_! z*P;1JCN2sbASMhAjbn0r5(hu;5Ip}?N29%~3saj1U}0rkACM_<#*wQM1gT;~ndRvi zJ19P*WR^fOtIg&TF(kM!BS%L;b7v1^ijd3C5v9~6u=agUN_4D*9|6_YW|(RTFu)!6 zufv~jxCb}ia35}aa2=vj8O5SOQ@M;%v515%Y@&(?iC=~^Vp(-tDR&%0k`#)*+ zY~28ney$DgAeOv~dvw>b8fEPy#4in*<(D)70L5lrfdZ zeRer=JcW_{B6B>Yz|3)d=&pmz*n>Yo+_aL63Eq_+k}RKk#mz%_&-*@wh20%UnGr`t zl#3RBxZ+IE*pT+6tp4hZ0N8hwE=$+hxpLf?G=n*XH4#k9O5Az%pK-zGzJy}6h>p&x zOsUf6Wsi5q{+X;{w=5~8M-GyxoccGct#iFY*9u@(VokAi{Qz1zT5!~fFTsIF94ce` zgCpt*0a(|24{`$sOXT`HdJu4)T#_*mX+Dw!B8xmgy4a0tC!&n-U4CJ0rCGFct}ec= z;?{Sw3m6tQH82J!HdRpStOAyB`vZNr`r2D@{Y`(voeyqAwOT^4R76u#1q6b%5|hDB z5d*ve=iur`bHd}oS0Q!E-dp(By(9lR-1C8+$8a}Y;zlLVr}39u8QC!aQHXSE=;TZt z&2fw~PuvxKqf@%pM79DWSe_JxZmyz{y-ulEw%VhwcY{D#BeE*24V8scU>UWkDXc!^ z*bRrB^tqQ1(LH%EV2&LDS&xw8DF(X= znjnsV$2V-l3!b|-e(;@-gC+-bOgVENz*|8LJ)-{_I0(}tFsw~L&5O{tZV=~v{Notd zycG+V^dL#P~hxwWzjKK^@I7Ns8-ke+;+W@i4Bu>Q=1j8$eVlpt-4n z=4uHHMyd<*_-Sxqo2ncth_72#zB_jH)vN9{k;aB(ftx}A+ad3Io8l<4c~a}&S$|}@oiVa??=@d{!`M1( zsSVS%gdctKtGMqkf5DA=1Bt-;<090(fS2=EjLu_vm= zp0@Ft9BE`BpmPlk(6Rzo{rD&N`L}+6B}+R|ESIzKawUL}DkQ(a3Y&w_*7E7+x(+f* z^&$O};}e*koW+aY_)0wUh0j7dRm0TaFiZpuOLU#Ka|LHiEQFO2jr+?CS#8ky`-2YN zftf*(q#=;FnpHUgOMRT8BI#Z8x(IlwF$f?_U?a0Pz%rk{*wKVarG)icx8ahj@4}z1 zz6&@1?Qs-}gmSrr)|M)m38|I!=#6pv-IH$3r-~N?sVXTVi&Qk=LKiVHrx8NpYkXr_ zDrs3EQdJT?cl#R3)2@x@9{*p#m)vm8OUsPNL>L&J#bLX&PC=vK#V9VV0hybqwhHX;qQ`}{93L6a&@-=9cV*cS<avbjLi$b}ko%>*sy@Xb0{(Z5Hxy?cUi$t|&L{ zPVZ%^puBg-!+!LD-ASXoz8Lo+La@FUmROFddW!i?1^nl0cEy96MrDI0{RxmNt4?vS z`p%srO|uK~4)$E|-|bvzy$Bjj!my~LyLXqZ$9(Yn?*ukqZp_l@xliTD@l?Z;{k(EK z#lXx_ZR6#8Md{R!5mojeg09c2ojxHTA^^bxE7p;=_Pk=9O1CUq>54_qHU*d3FkNrK z4?gw@JbK&TuwT5R zJ01r<=O9cDjiEL*gF+m`!fJfE%AxfTe)4S6D2#duU}Y;|gFu3+{e#3XKeynZ&lH-U+4UE`h6=4;1oOOx zIacb2nZ$o zfaX$w@2>Uo+>ea`A7Ew-VcVu5w6r$iMQ?vC_S%1MjQ97$&eTD1Byy`89NQbhBGa5H zh0+8Wb-I5MjA1i`)H7O;t6tgBvh-?ZL32hA1i&(Z(-h@m4Aa$txCH#}ntO5kE%)N* zm)(L|!YEaXXl<^7z(_eoYGoaMWg;-i>WadBP6^0JI&9snE#+z^iKb|H6~PI^D~S5p zG@$VfI=I~Bfl!9+kL75)eB8IF?FT1{OUK9*AFlw+RYKe~eNZVLAXt4*^{H8W?@ha7 zV5|-c`RFoLMapqY6=z-mmydiG4T-&k?t78@yRd%k zHk@KC6?BsV>GZn`{h1MjQcR}Arkl%J_2o#kDZd9D+ zB-i$bi^E_eLl}CqK}B$~cn^~*dHz`cI_*wnAeLB&?463QXLxuPXPmSLY?2_cYUMk* zH25_9o9 zQ805cS^JY`qty08fR+%EdZeW@b)BH5mOrG&uG2LHz=BN?b?U?gU-%ksyZTR9u~RP+ zPNh>-tJ&%*aoSgA;MD~hr>S#mU zQovZv;G&EFgr8shCp@@jJ(^lt(b8N&WF#!ZduoDaK@f+LiLYd>=^B5SP63eNk4)tW z1O2oDnA09Xu@2fqTDFwzuZK4Sd7y3K>CY7#qE^EwmnMz?E!#GvLLbC->c? zTFQ(RrgatWyy|+K`|;1AXHg4E<&t-?BbX8gWUgWg$b3%MnU&)@NbS@C*ReCe29_<1 zAq@5pqPevLFFEB^*lpk4Fu8dfQe8fnjCAy3EV^0Z&a%xqX~$2Vi6pu9++M6kV@}=a zQimY1Do#YA0DyxjjEO}`fUy>(?l!b^w&3>rH{jR5`4fJ3#hutXJc5>%3R;?*Kmby< z8djmp&FbbtQY-Z!=$R-0O2Gb|iL?zCas$Nc(HIZ-_tIu?*0|F++}F`S{@dlG7P1<} za7v)2@jjuD_2la zFp^ZSyY~`i5Ps9{+i>mW-JZ9l0aTz~c8EzD&>Cws`~DZ?f}iWJ5LBWAP40Ph`93Q?h1<#z2PN%g*p0Tol8b}|NP z0lRk5C4NOy3fdxTALgJ5905ve2R429T&Bc%8C*L7nHCUMb&fLOuDf#w3iI+64HC?O zdy@^01D8)j`Ev@=MWeP1OySJe?+OD#-KG+x=_;n_T|SNZHGVs!+AzYz3YUjRvFDdD?Q+Im-gfIpe9-KtE zT*NEh`xdO;eI+Kg48YnH5la+)xD%Ur5ax8ma4e?qmSc8Fu8V-7LFq(xV5?R+i-O{! z_Tl7bMyb6OmCk0|de2(?>{oxq?=HU)by&2ux1tzFNK>n;5(0!Mi&N0)luq8T?5sXP z<9Tm{p1ZVR1GsnV#=L#~B!MI9hIiu|$E{o7@^!v-9n07BRYe;O;nk;TxPOqcgd{l0a$RF04+V}-&)6aPJK6~C&$q>uLWs6@g(R77myt0dJ*)7 zhqt@|XV=O+a*Y_24jnMYV0v;A6QeVD`MX|^{SVm>&NsPk(VO>L9c< zRZ*!FQLjrMFKZBlT;YTdDnS4_x49y$qEGIrRU^zC@gR8CHxCEn|E`%D2^m`dEY?oy z>>ELq9-prZdUHf*0;^o%MMd~-T+N+iE}=>yCcb~fDP%5Z@g}JPBpGIH6QaROlC^?6 zLqoBu#OeF>9v#THI50eeb57n9lM^$r?n~Fo`T99!L%$X1)J{YZ#x`!?75g4B`}}u* z{h>mo`E=&l8;Po0@_@e_J2J9wKgSLQYwdz$>(xJ`bo$5$rUc6T{frcrEU0Z4T>Opi z;fkN0k5#)aM4F1L8psxpaXnpTgn3%`*XM9T(2=`GG&oI3xt^pL+&F+EUvoT;I^h^h zZyiEXOF*$JU9DK3pXQ_lC5nM7O%H>$4fH}FiA$%Xqr{TURuAUIv#RotQ;?dn=l%1*D0L=d)w;fGnJQ4xsYvr7fZP}|zhA&FVk~KN`cc^g`;n0dBXjj(uO(_TkQ#^UC{|n5?!@UBz<|NJP zDaxC!+W?t)fl%QSCygi%?i+qmxul-*d0P-7jEqg=tT*nC(WyEjGDw*bc?DSCsLI9` zh~o(3g989l^1M?|-@5#Oqi;8qeula5FcHni;prCe-EGq zjsa|1gQ?6z-^M9?^OSd@95Y%vtFURRq~Lo{>F6{+A!Y4UrGJ&bZWT4{r8650LPXl3 z6B)3z*wVKZdmp+#UiS9aAWj&y@d=p72yr#|Tcr%Y6P=5Ucdm2QJUqcQ8kSx$@$wVq ze9n3&=+HS$Q79Kt>S@RH^eoQ%^^N%TCD-85joZ-H+JdI0DmWE#wQLbF%XY$=ulx7O z2vGT}fuy}O+i6iGGcjaRAUMd;5t+29zAtC#v$P9oAe>Q)-93|0epZ$=%N)zzwQWXw zT3*(kSz6bW{vaqXOCo`$`kpkUu2$TT&vrzu@8`)bkj7LP0?5d&hy>l(3XC*K{rBU) z9c}7tx$K~xWH35BjdM@l9h=8$h#~@oD_5#k6-6;7M@KL_F_s?m%J&WK_ma1*H-^5- zT)Ua5vMIOvb39$p@YBn&o&57;1nXK^a&SbX_nZk(3TcCi6ZcA3K%#lPDY@I*{TR)w6Jtzl|n z8ufaDnOXu)Euttwp-@D*Qbf5@K($QEzX>Zb<pNh8-8)*2Wc zWF`ZQ42;8=2(SOdJF#r#VoYq_D%1H$))62zpq)V`d6AmrYN3&=lYS zHUV54Gs((@4GNHzvVhE^)TlbnsjxfOZwva>8Qsjt8rch>f7>K_yNYVhddL9 zAG`~?+S_4bLcKnQfuR&P-F`1_yZH|M^4C{jYSyB&qXotg5^E(6g0%626(SjcwTy-B z1$^#BtFeA;1}2IyGBCgp6BH zOy2c{MWu!NUXWB)9D2z&zgxKGXFtR8T^7M6sVtf6UU1N>&+XuytDLF~}fQQT4 zS~(=Zri9oS6c@B%YPyCW{OmfM|BEZJZG0A;9jz$D1=uuE>r*YwK%ekT>16V!l7g5d z*pVAu^bAQykg@9E!3J5w>Si8-Oz{euq9JwTz2Gb;DpWkebiQsry-TM`lT&_Nn>)?G zU2?f)9(5U>(K`+KH$d*pmCD^BK-!93>PQW;cf2g;qe>gt>E{qJ9d>u$OW-R&KSixE;z5xMV1WtR~IgYmH$eDFof z(S=dO#pZOc30NMtD)4^ zifUI2uK4S{IPb?-;M!XsL`!QGUG1$%QU)_iV5D-Nlf@SUWjmEKOA^e#58KWqV3&b& zb?BvlOXos7AkK@RtmJE+y*f=SdCe(Oj^&Jz1xUKwT+R)Z4MpDWOpg7(eyG4*ah@Qj zrUeL#2nEC(#UiYLJ0XHGgrSiM?6GnYzV)roVCUuYz?18ARZ6$qkSHt+X&^U*MUa3_ zjtp$eLOii?8lU{+S8&yzZ^MG#9x&?+y`ZWr6CSW-U=r8<>TK+B*oy{ZLth8di-7Vb zBFb0u%keLPztctKc&dY$>7+g9t*nx{a>25BD+w0l$TXZHH>cxsm%zFco_ED(_rnff zh(PZ5_ie-SJ$J*2A9@R-*}4Y!MM752@(rW)$*m0_Ig@cNVcss~1Q%=HX^g;ie1b%MaIEe3_`ANL;rO!n=@_44em=t6qKs`?&=Ac-I4V`gvNbE%HR|d*_DKo&*}x1Zf?M5CJ3` z=ztkf6k%*=943nK+K;^zOIPfKiH#dzqDU=rS42j%2&Y#0vGX~k!Sc^`%L}X5AX4_R zoFal)dMN?6Zc%9}qcpz_H{QJ-=bd*cF8|YAXzgf4b5j{<>O8hyvhDUO5R!6=ijyug zyQLb=>^7>9s1>Sv53Akn>*!V%G#ZU53owb&<5s<6SWskOt&DjSG%msoyQuQycszTJ z&i}5L!+ZLyMB(eOf`3ly8D^0+i&ojyIeV8{-ApkG+AfnTYcF|$O8Ep)AN{@Tk6e)q zm}R!Rt~r{g@!Ge21-Cu4 z4vUubqFO1*egaxC`Af2+U?7txil7Z7edYpiGYj0a7EZYlVv7reLa~5i9H9ULrwL}J zr!h7@fswIEjE+uXY-|dn6O*XV)&OP{iV>nh0c<5dW+5|2Xif@$B8{NRk=vS4ZwGRN zbgu?|f1(7qo57HeY@8=o!{=4G@@*4-I?P!Iq1XLZx6xMiA*(Rwn%Dq zv{uTv?&_amb>}dmbP8-_>`01|_vhisUz8oWmVNOS$UHG70#YCzyC1(g|4TUi)9=K( zbz5K}quct)cR~ylOEK=atx8@ zfFBI-d6Rqq^@Pw`Dd3tv{uIsW6Nosxa_l&G_{QHY zI`bWGzHt7M?q`BgK=3ldzTCfH-;Xz36(4}QoedEtMkhfg#z`M}J9?MQ$K=2eB6V03 z1w=*C>-vR!lw6$Jk;#$~lXTe9K{p7fj6o`7-C8s?R}ghJ<9AozjqiN#x48fDP3Y=s zL8VkiJxx`i&>aSK8llm>;h%&vo~$@IlCXXifI-F}0)aso9vR2XbRA6v;HV?_$1Z#B ziNg*%2>U)`H5R;9G>oWFfu#aWp#l^tNG)N_p0u-wP#-J3iZudl20S)+LgfCBWly6d! zIuH;n6Rpc46Top9_w`43(Xnqrb6b<&ozTdJkAO{+m8*8X^Y?$a=IumuPrkl?j(-J& zzvUb|5Ux1)^GmKe>+H)q=e6$X=g9ev*LCiWspY2YFy&ONEbH9IX@V^qhj7%1|ArU5 z{Dm0n+a#g-kU9O(epyWTtSnNJ@D~Z%K|5Lv*+9y5RKXw^wjeS{(-h1ps`J`0ZDM@? zM_1ykA72Kh2p#P$;BW&QzoM?>!a*@E-|%1cMd-(_q-R7Cky(8y;;4w3*%^$D&tht7 z5=T9IKRoA%Bk+=!9D~J++F@(s!0aF}J*pgJq!vbx-MR@u{opK8K)oztaiY`?s?G|juFDqXz%L%7oAEdc(}0j#A<3qNUD(h+ zg#S46QvCXgo6*+Zgr=sd1obhz#TSx6c9fMHUT^s8NF|V)h+qsbIx>yX;W51IMbE(t zj(Z_qe*CjhFg5V>ATTp7c}7N78e%)gqRz(Lg@cu%v_R*X_lg&35FxP)ag>`u)n43k z`vdse*T0Xy+;Ts9=d~hbZFA=k2su8eE8IEUH5L|cPy*$;?D*((KSz~L{;U#V)<7`S zfH@861ldlWK-sjA1))Hgn3%x_-u_yg`j%r5%?^P{+bMgCDza}ZY0riiDc4;~hboT$ z6=4?VP zdX60iA3vgZnX$!dO3lqHbvks=kGif;dSIsnxM*{RaK!Y)G-jvjc^m)>}-MBtn{~vlA8hUC-5(yZT&e{SNvQl5Uh{}R?TyyKgIP1(yaO(q) zqqCzOrE(0L$fz*sG&>ML)&NEnf~<3wf4T8u0~)0fGKc_d8=Am^?h4-g?@XSu$T`saTz78c#ozf@QgrMAFI4}S=FTq_8ZpJ&` z@gekW9YI@rt1NBk%h&4toqDo3HoPL{_6=~dWRFRivS?9|Rru=M#fFA+ml|h$xbzHP zO#t$~-M2%nF-Rsc< zBEWEhq|k!Pu6qo$=itypD+O%7+4SJe~0*-AIld z0q@zTZF&3ro@r@2mt&@X0JdJ2F?F)p zzVmZG5Xl5k>&|cR6I!SGgv)_c09ic_ut^=I<|;~^ZMf+28}Zfuyac1uQ|N4O29uG_ z*f3y$h-Ch^tBpWo3G`wE5zLX-*@q3mk3<;UHjLFP7T`0VIt|Y|;sDr*b->IdD2idM z(Q)Wh>#CzGT0v3|fFoBa#gUfQnjDLT>?D45f}~@^ela9KJQ1)7*p!jB?~I@R^kRJI z<6lEpS34qO#9D@X#R1C$a}+Q6*ZQ>D7@?cOVQz!{J!l<7$;!sv!>oK}bIK%=O?)

    N~>Ls;atSv_b(lL2fw;F~%D*gJ8#Eq2B5EqgRnAu(u8bMPjfFQ#`S;#zSzchX( z{mZ9P{uVj}`e;9Gss&Wcy0sv_ZM(|dNh=0=R>(O-s+@@I%r99zExe`u@Sr%04t?xB zFF11FLpMVAFh=F>OF^{FdM(3Jo=}JqV^smnXjkZ)jSny@UTI-JDsAcU5~Wp%5R}jW zoPG{wxVX&y+b_Q#Enc=(PA~8IiTdcs$lxE7i*H=Bp+A!Ou~lg0FTlY?gGBU$erf!l zPTc>RKREftpZ|9kF}~IElm@T2?n2VyU zX2u0ykz)*mI z34#fb2?1E#S6u`;xhyFXJxMNbOj3t|po)h4u~?XDX^S&SXY%+Rkto%XlSe}TNWs*H zi(2KOEOOX??s;%JLct)j1>!vs$VYRvNXl(wOjrxyd?s z9d$?%p|FZdaL!|S>d{+wzx{W9F?Q*HC2|)CF|}6WSs3CHomW<1{wU}_J2*@n!#OL40-$4LaOgPqwV$N6asNe#T39Y_w%kfYk zF_(ZdX~ThVctPCLdMvAF%ofa0anS4Rg?ZHlv;MNOVo?CJb!pZkPCMAT`{5OU8xWTv zsTEO#iFF&`Io3QP4tot{GIFw<#BP5Cz062gVb0I}W_|RgJ6rPt=P*W0c z;t%H|$*ClOET0(o^Da7m_+hOglsf=dpWE}?3oqI5t1-C-6v&qr zmN9v12}ci2ht=UYics$9`#t5;+xb?? zQxd%1c{QrOUb=&l=z0qLBv+tYf~4%L6QLswG@s6BAzw-viAb`-#jIAdo(s82EICvZ ziIx^iNS=*cq?%H|&X(&frZnC5Xl0Cy3B#4ZNqM{ayjeRc??LccpJk|3V*OD;00W)~ zs}Ju((&;EeYj%4O1^}5y8pk+r?hak4a~l2o51{T^Oqp^&uV2Np; z1C7M_kuI9zQu@p4wDyjrIiGpm0RYUk8DBfqMPDsSz#K^>xf>^o9wv4QkfijNS=Ifu zvVarDZe1_jmnlyht&~Y@?15(aQ!+=SKQZc~8#)6QUH|tu|F*8yZiOy*dEdpCK4aq_ zRm;gLfY8&Z!ZV}OPBA$?r%HmbW!o6GU9cLPwvFN33)Z61U&r!N8~gW6pt;xyA6%lEKpRGRAGPhGw%UY$uaWdMbm0fX_9lr6iD^zs?2} z1?}d9YsBJmx@p+6CIRLNnIW^Bq!EchoGv6Dju;c_GDZZf@0IJ>ML>kyY3Q3)udeK-8Hjx_t=sfg0k-fl~qepiC8rnN| z2}b{p>!&d{e)4pe@guKl44iZE*v}6Q)y`oSg;A-Mkd)#;7cgPnreT!pB{Y}1IC^jj z^RvrXwYCqd*AKya#*u?ln4ew(5y8cAqqDH*j+u}A)+@hVF62`Vye_+|z9Vw(kDQ}^ znR(ql5@bVG?}X^4y@bhaVr4>e?JTaEGNZYj%FwXHMOYmOVka6^7%qITfEfgY=`wte}S`jvh0g5e> zCNcJ$e^Fp;8CG!%ibU{iOra<+sn~|a4*ODQN_t$2jMIcjvcv?GjZ%SbB=0*NBtc?L zV&Rz&B>zZz`kW~M>!m$oE~N=AfO0IkXt10y{anVWI|xt!+|WiLM4*6^_c(6_b^^}#B}whv+Bb!)Nn zySHJ>bsNw-))SO!Xbw4UO24(ko&h-SSu^%YTF&-Z{{i5x*9|rXHx2*Z>a~5hlXDJa z%78FD+M7Q}K)t5~M}+B93s_uO#>Dt6#*faT(O1F7t;2|&!-=D_NYhMX!%3q(`PJWB z`ttAm0N?T0WZrMIe9IL)ndJk!P~)WgdWPR1zKXD3;HaDxRcJ(jLNON+@~phBMz@{) z?Ny^gs+MJP<3AA;b0barYvuZx2))E^DqPJ@{DyT*GoXA!_%rsTnw$(KCGuBmp=0VZN9N3 z9{_j1W>*rA_P%!G)}fa>I1SJXZ)RDBf#EumBnt7|$&(8JfOad@z7rPamoY!Pj7lZJ zs&)NfW}G-OqdAof7nk}M_kZA*IzRoKZ~8DtD^D5lx&v_Ck<#-)^nK7QQQ>!)?Oe!C z12PqC)=9J&RFUySyK7Zs0cf>+P;gx!?MZA+7|Gt1mN~=|%xnh;hZelX!GQI3b3t>V z%)IPHBnDh8C!#Xvne8&9{Ad*D&oVY0t_fp^cVyW4wR;dTf#N8P*?Y^nXKMz+dHg6sB|;IutFqlGt0(o(#-mx?O9iD)mjvKtEHgNm~g8kdG7|&#?7F6^f48tMw$sEV-PYtUV$^+j~s4J$hn?awLMv zkTc?fC!pOVRhVLZ7eU2bVR>#~T`!`+3M%D9fH1hW1(#As=u<{*poXnCZNQp~M&wu> zJ7`e*n`19yV8>M_E0x+mY9(NR;!We1t=l^K!yqaLW7mLB6LeRv>ko4x7FP>NB5_l( zwi%sv7es`fMg_fnRV*#FvD|D655fVQZf`&I&L8_$<6lo1@VfZ9znu;(%I`yRs(Nwta>n@eo!J5oR@WODqp6Fku+KvT&$Sg??aa9QFBy&~Fz-h~ikg zFPF7WjSOSCJ|M#EESJdWDD@b?*p*}^Hrg0q+junQCjwLKuUx0b3iNWzH9#S?p#Wk+ zc%WeE$T+1w3E4@ih3%*k8p!*>f@1*!>nk%*jY*F6w$JomAfInC8*Y`p~T?gZM|;W1E16Y(;?zJODjMN+(d`ASQ_Nk)9wL z{G;63k}C2QNtW5x`T_C#r9DUasRhEoDtyYMkg9?}o@(d3IZ)15^HxZff{h4{X*v}Q zl^hcq6=%`JwuqpXg7ih}^o$IQ?O*#c$P4rNOfvbw06Vdg0K!9;UKZLmfs#$z2KYhR za@yx4%8!hqLOe|CmY(ZS^&QJp_g)z=3|oMUObL*TltV(MDhy>?bH%Lf(1)o62R(?w2!$m&+hjrFLV@n(j|F@|b#J2mM%=0vhOwa=CWtoXI! zIS|%gy#`<)>t<-TQ?%Ovra)Q0DfT@)j;WJ#n4Fl!%+w-|ADPCU2ajWMt`%|&orW#q zN{p>HZ$hn6(J-gZEobOiv-#BMt}EZ~He9<50AKj6ZEJ?tt^3n*Ik_NcckPd`g@s@w zzC1MAi@t%HbetGR4^Cltq*r2M$^(n@%h>|Jb~^A&Cx*LAR2H3$4yer%e4CIN7B6~_KWq4y~7FtUXJu~Ju#@2KKV{-jmEG`AV zh>)sghrAM8yC7gXNu+0K9h^_qbzp4hk(F~f+F2?fwJ1zTMTVqr7QA+P@rMYg^u>bp zs?+r{3bj!5)KN!--sU_;4<8Mn6eLb}HF?ii=xgA}rgJ4lA-KyzOlylstVtq?<4Agf zj={oPIuG);^o1-4UrbHWF0c?*N00}_eNj27l@%pX{yo&1khfH5r4pM}=_iLHr=`I> zi(WpJXChnSC9%xHT&O}bmLOFy63^6B3uf$|Ns)R+HI7g(>+#G*-K2jBRb=Eq(e=v< zfwB665tMooK>2Hab_oX`od7eCBr(=(7{uo7V;EcAhd6dPeqHv3%Z^+h zG+n?ziBDxeJe#X3O#{jw z0N_0^-_9`KWiUI`V!}X41Vn=J(l-+t%PnIzi_zLsLD4LI14`>FNZbrIMhSZw4I~)n zJn}$p9og!pWqCP*%Q76=x&;{`C5B0!Ac6_6{f@$J0@#>|04OLc-B>MDc}B*?YNZ0K z?y?AnQ@~JifX%|ueq^Z$mW~^R^or9gPlADrWzI`|)mT#+yljmLAgZ5%B$EWHw73u} z@?Or#x0|A%!qZF{r&@9d(*+|Xd4~mbR|uCGG=Wj{cbU`xy1lD<(7&+{$__|M5i&hQ zF^U{EZW}>Qqk=eg=_ExfKr22C*Xyd0J{~{|;aSsw0tU|MIr4?XMTw2bf8I;dE9s3aa@m8SowVatBp*t<6D^Ne zO@g6{L&lPT==4MbS&5RK3!`Z)#avQ?xU6d3Km|>j7Epti4T% zptRC+{8`!)!6tM|CG0={0x&d3v(5pPnt%=wuzJHFBIh(A zS`NQtW(*AVVAIwS0F1-?Cy{oG3C4g+9M)a23fu*H*I%@!GPvPih;B^RufO1up^=_9 zMvnVXxcbjz#b%Avik074QfgueLyU~|Vr)&nJm&~YOC9WcWE`hX&ZAN-p{G$3o)Jb1 zv}`S>sIK0oEqrt3tOl=(Zmq6~BL4s2QITbFG5d2I5-SNhQNq+LWLHULbrr0*A_MBj zvT!IuYHnZ6e`9`^L?-T}6IAxFE~;3}AC_1h(8POO(~XC~5stRO8zq z8ATrr(BOCIU!?H}Ncw|o6DV__t^%|N2o7UM4x-#z4rv;~NLnWmD9vze?MAd}JzxON z%o6Px9+I0aa_qQR%7V6w3W|+ex??g#f`irXxg#IN|VUW*Jp^j36_um<_ZAR z=b)>al0dBe7pfx4aahN%@h-D`NzVNe>qExEW~r(5F5gR?%Na1$^6&tLYcY~Y(qO!< zYKH%0xH3lVkSI%a#nm0&c=a01HBFuv#8jAx-0(Dc_b%*C(Rf{hD3L!tAl1^`MtHojIGz%U?0fdM>=`)G_PdmPnGAz3xc0f8{p@)%zh*P%CdSlc5)EwZg334Ny! z&k~nbV=_`zD6BClXrDcc8||rt;~Tc%(ep3H?h7x%zMbde_@*rwU%LSltJb4c?*$@< z`Kcuw^JTGEV!2igA+eDFV$2MWVa>q?ZcW}#6|pS-K8z2z|ts_P9l2GWHw zg|{3binM~vmGfh8h5G?Sv0%Cnb@RZvNkw@A}C!Wbk5QB+XYUubi~TLv(=SuL2ri_%VWse?4l z&}paW@2{cV>SA$W8AOD|g*MWR(bHQ&|$n#p7)c#^&7wQ7l*W=Z@5?w&${w~7nIIR3I8u5x1N>L zth1i=Tq~!-pz#~evia5oCyofsZieYLquFI-$|%)XG;Ap%^j9NP9gwYvvB+fE#D_qB z5G?75bW1-ZS*emGW#B6lT}*dGi(NdFV7MYe>~-_ANsradx=C6B%woZbHDXOVjj~JU z2teu`4s73vquaKFSguF2-Z>_CBK@2sQ8RL&G{ekf6Vs=b&|K)EF<3!QZyD8UjNbkV zG7z>u`~cP-ctnqq)}&djxG40-)T~U+gv3V4Uz|DiK%rx;|miV5Chk)DuE0;3(t|Ru8IYi?^9&hq7Q4xK>F|X1lKQ| z?4X;;T-~y%hBzXy0uz*n1ccPuS0Iq_NNkn?RC_Aea>E93*8^|Jquv8)H^afb6Cfg# zN-;KU9l`!b#^E!MH1&ughjVty{kM(?2lk#sZ*K)dqrC#0+OGF0qS`R0t(m5ysO*54 zTn^aA%2K3{Y!-5G$7TEy`VdV{PUB+wGXSJrkC~|@EHAf_bux6ispNt&&`l%W`GPmS zf8CDrUru8;KJHOGUrz~LJ)6qiyO10ntNcC@zs^Mzv6|c#&k&&@J=s#;VMvUJ$-z0` z(0qntiz((i9%VJj40mkMo`KX8N{-QAacGnrhV@@#P*R4lta=eL9|D`goCxN&BZqG0 z@#zy?L?i%t-Kr7*Nvak8lun2lE&^eU&BFdVCNa|i$(qk^KLT2nUfg^2)o4}q)Lq+W zDP2^2&{&0DJqD$f_nDsJ;4wS3j8o%FSYGTPNgVnI>S$C5FM8l#!JNv%h|yguW{o$o zE>;N0m{lfmDj}YIkb{K95=};h;q~2sL_#N-a}^S!n_`qQfjqZjk7+J}jtD6OpC9jl z!MJW!2`h}dyn9-&f{K17%@nq3Ddr~s;vb8=zPZ;9AR*{2ld`E4)2?k+_%VK+m2Q6EQzA~_nbtn zUdFmjLo#357xr?ffOE0xK>;6~R*){^xB#|+*fM^#1cl5-JS%~S`fKhXz!pRRaF%g( z%L~6$Ip;+`R2|#3w@|@1T(rfrtNin=^^2mo`*BA!68KaFNG4QV8K>4#q=a@vm})T| znC_yh+iXgXkiq#jLHgfJ)T zikBmY6U_{}XT_h`(ulFC5eFtR!C~l_yaeL|HtP38!b+n3grSKXh=K7{8}QJsU2q!f zGU2s9!YE>$#7QhC#Reb*JWDJt#P0~`v@=YdT*CZh6RnQNb)9is-aIM@A7ESs+^K*{ zuuwX!F&?wFt-HzO>_}C z!Zl;1urdad%~jEhDRY#b=(YDecaDBA$K)?c|Z z0U2Zcu2tw;+gJex0uZJ!^<4mm_Dv$|reJ2QUO#|1b~tiy8tgryI6_Zv1q<`b$Wo7L zt%UWPN0e^@I)S|$?H$LF@PL?m$}c)bC9xw}RSaoKYL!YSrAp`I8SA~%T@X^AJ_w2P zI>#uDU2&xUvRA*7`Y->~=^Mho(Q?+syxw&iqB7HeV{*?Rh!1G4LSTN%FL;FtOGLn) zxeQ-B)y3Mn!-k$17Y--b)*oYSPmI+yhqd(x>v|kE_a)fc7h^+Dgx-=vRn_rQrUKx^ z%{;m6ad06;>VYHzdJ>0})gBT~4;F}Nq=*Rj&!p(GfZ`>?i86zV7ul+!JTJjmWf=V~ zNWV?3{Yw!Zy5uSxIBz>*mM;v1%smJIqV!=epy$ZJ!^`n4&LPXP&=2PbE+X{yl`*uc zj=q5s7AkdYoE%344SbUTR;1^di56FjE`XShPoFoeu}#OJ9vhP_#3^uDpYvkMLFc9L zU9bW)eq~Ap!D0}hkxlV(qQ{0FNo1C((@Sx+&(>P#p3XsNQh%^<9A5BP?26^QeXxW? zw{@W~ZKRFqD70<;89@Kq2F7-d$O4XzLllJzApq?xh=ATk1vAr2U@#WuTd35^7+cc^ zB8R2LHkO+mWT{8Fl3?A&AyKY2U~RRv+{MCN8?~Mazzj!G0XWq_5P~c4hFK6^4InJf z3aIP2tQzG@vMpks;T$6wJipm@`A^;9?p=H@ZQfi^*WX+@>%i;wwbd(Koc*dJ*8qtn z6F|#M;L{iiU@WIV1i~dF5k{&J>WMHftA?=PKI_%*O!8hW0{Y8@H9avlHzEv_3B9o- zleROF%f&8mbjjoRQig6u=qWkGI#-IT!qiS~X5KyTL13({MXyRrN4yUVTK}ggRwR|zvd;vrPXo~Q$S|G-xrAmTQUkxYM zZN$LD6iS_CwYKCL)8?#Jm@P0+(S+5y7}7u(tIh)qjEXX9Zn(;u(^bG+`19{k7=zJP zYL!NfH9P}Hn;GJWu(od5X*qpF40C`Ha$ByGmHaJ>=}awq%y&H^0yYnnkc4E`(*Vx~ zuCyZ!o|h^mY`Sh;P<&#U=)IU0XAG;k%4?BBtzO3b>@vW>(n1Ra!q8X)!=pXu?XRM5 zpoY=a{YAVAWqz)O{f|zfS}&uwQ5GOli&oNnv@aUxilP`$w>&7r5QkKY&g*Hx+LZB; zSahn8B8RBHrqy@(PyA6dGxsO%^5>j>e%Lov&MNSF*KIpXiJ$x#xac_$?=29YL!OD{ z_7pX{+>Bg}P0N@YU@m}WwJXTDNNN)1SFNG5U5N;dGGTQs!lp)yk*WYy2F79+SWFp* z7E;W#C6-o;1;7Lp2+fo+-js>Gd_=a2K$(Of49TpFYDt~?u7MTX;2ptvkCSUR<7-!5 zjV#fCv-XuVXGR1j&oeWIG(oq$lZJ?nR7f=B;q)jNXbu{fCH@gdII(^s`sU_QTbP#y z<$tY585EYZs4)v&Ikf>#v=fsCm|eJ%-{$(XRs8671}T3Kk1cp*y!bm zu=%=mNUEhkck3@fj_n~0i!f{vM8=$yVpMA-%+EGK@)3v|_= zmYZE1*f)(V^@t;ffuU-CZrx)DAS;hzSxF&MC2Zjv`<`XMjtV<4!si;^iIc4V>Ysae zTg+qdTeYO6hk{4N12SuJBoUXMI1 zz$O+_-X|?KMGoU@)`B@k|EW_#P$%>bi=TNKk;H_o+r{u`FIX2L z3}iz`6nt#4#OM#T%q-&`3X;ZKna@I870e)t;MwuOl|TE%q%!z=H+20`t?1iQ&KmG~ z*KM~&Xy5nKE{bji;6xyeJUV;!j|zL3)G+DlmZ`NafmVbMNYf9*54ZQcXjaeaik+6* zql{#X*;^v4sf&x*R}zMuTJ|`x?6H3?!+b~LE44^gy1WO<5h2#QOuaHjB<9+R6-U7i zF^4+U2JX53S(qCdlv|(mDS60(u;%($-xV~#=(IfISai47{d+oK6;6?2r)ddcj7Ctk z5I_=NoEsX#(8-f1cl3rVK_mH5m&wBfX(7tbv=_mUxg@im4AiyA7*s~{?gq(Le31D^ zzDH7Mr+u-yQ)l!LCC#gRjrF_ts2yo^n4 zOe}`80*DNl0Q9YGVAalHQIJ8Y7$_FnSAMW@Ij1o?5{Ki zVP>X@rNuTD=9-wDZen75F{I>_N`yFyFtWN&hOI6l2y%l}VL`(dw4{9jUztDUMH#UC zh`!+`v{4S9j5t_)P=TW@^b1M4V z#FA>;U;zZsGXb=i%Nfu0|FsV=I$O4;ZA^ zYzZ&P38kWxHP%3cBqmIrT0*;(p{KVbCpj>~soUn9xlkf(B&Z+)U0_%fB!Dr#emzzl zIfgjvK(cN1d8NP6C6KB3gYtU#NZTj^MG=Gm4HY;AnEYd%U=^BBj|iRBCC`iXczDsH z7CWq}ML|%duL#0u;4i;hf3$uQItz&99T}*Iq8qBmD;6bKU2!F+7DBbRgpJp%4avr4 z)ri8hl|L=TW5AUbfG7$zFaZYYJ!K3I)!_kj+9}dhjw4S~k9NC@_OhHJ;yt6Rr}%E# zKAMlknk0$4$@s-$vjYS~pB7hpbDqih!>SRXAtLndc*&mn=4ZY#8M^u_;el^sDNyUo z6$a>iw^o0KO8yVPh=n-^3y)Y&SBgvwpRgQ%sC6VPK?&-kwBG9v~4$V?JnN ztyk+5x|+x=?rCU~J<6RFSA6>8NW7fSWI`ksq*yvOeFh@h92^lcrIi7q(c6ZW|D)f7 z3d{Xckx?Z~xAq~IwEVM<2fi@T!K#|Wd42K9$8^r^_Z55w`Q0oNp_S#6<$OjYd{?WL zBmp@LIOieKRoZiI-V_d-EY<;QI{=8#M`t;-6Zk*)WLSzKQ^mlM_fJrk7iStYL(}+a$*qndKWM3VQiSFdA6B7>~-TU56W2 z{L~Lq&jsIdO2ofa@?M<5@}XPLDYxUp|3Z##0aSQcR>uIHp`taU%F~#{67`H3%#tzY zdAv!dpe0wLmYB+BfoX$MOQ_2^hb*(0Q9duEt7EooZ*Mvh_E6&oDa%26kt38MfV{`l zz$m`D>uRu`dK&tw{n8PIoH7fn%hxi7VE!A8G>aPmjvSmrx07MxmVpox(q&3`J>em= zr533$qbUsO0hm!=T*T%7dM5~(O@YZENG(IJ$*o3LskcB+v$(=s3N39qbVyjK*X`An z3CsB$Ay7)@nbFFCyCza>?uoFuk;mo?m_#rwPfip;6uA|b5|gH(K-*@s=nEV9dunA3 zz)8pR9*OI``I+lc?W@TA=;xuY#oq#Xq&*8`K*1Bx7?WB+3ccH zA}|w1R`=*R^!Xf!LX~m5;5O#P$t=B(9P>M=LAIkTTcyM^RvG|_bmNA-FTyJ zp!)U~MTaw6x^(n%7rBc86CjyXf)E($4#;7GP?8Cwb73>Ie2RQ>j2ZL~=~u46Tm;p2 z1=CpON9yvN!Lw|>^~%sP(FUd(tI+L9!7){h?Y)}ua>0wXFQ=+H$Yrai`bKg0b?BOjSih+s!=p7k@YQilYo@jkK!sKXLB?cP zE6Esxpr~cmZ1iFGg_o&yAcbLcmW2dU9AfDSjpPy5yCQ93?0fmlVk{=aq_jW~N(DV_ zGxS=Bu2Y>OV8)CNGwO-;&wxv6_nJ22?RIQHwg^e{h;(s6hYy))>0D+O85o^3RYIAI zr-JSot1lcyZJ;X3PPd>@z;&@`y_Y*ZgfM>Z6N|OJDW- z=$-t>Cla`DHpIO6jyv2#CqDmOfLvv!9-tK4&}*BpNfR3NzoP4B%+Jhn^|}I(2xl%7 zuqAk9Zd)0%LQYaDYz{*lj4b#p!YzEvAvQtAtftLO2(@l;ztp`79LJdJ8^zbIy$;T& zdWF5YzboD4oJnPw-vj{GXZ_a^!L!7&0KFtvVWw1#Fg#Ynu|xAXb#e&0h+Y7YTdRc$A zCUpD+k=H(mRY&V-)4yA(VQCQK}E4)H4L; zI-+tvfHHim3r;fy8(9I(`O=Qc5t`TvTd5RVr$ZkHHuhoF`NKLM>98!GC~fpv=VFks zr*OB1Gh{&q0Mydd@9cevUFvDNsx(fG&trPBi6|l@388X;W|CBz z!dzKfPWg&uO5~dYk4QfqoNnlLaZjiJsyF&VbbF z)6U87IVD6GeWoyKbk_c<0x|2)=xRR)2~sE0XPNHNbI7_Ge236jvlcz;FF<8@9crUP z7}~NC^|1|bZX-sNi zu7x89XTZ#;R2-`H64q@T4zV_l;G%^D!FCDcMX)1sHUB zU&P#c;gEG0jWwGvdfCkw*t`{E7oLZtcM#NB0Q(f=VriMB6=~8mO<~dtUrPscevAin zR#^9x&QG`S@i*O$DALproivMX)@q3y5a=Z*Y}+lHkyJ}E-w^jyR<4T;=Y8{;9zPWN zDsw=}H*&nU(#_m+h_YbM=yo&g+cSYI1(F0Pmt$-?XH@t!%X0n;d}hFF`CLvz6FN(3 z{S{C75Kzn8B*!2|*1PLxK3G|E&X2p^Yfk0^dt%EOcN@QNQ|AW}x$o7aXX7G3H>MKg zln5g{D+2~iRp3R_>UlUvh-}Pg6DFU@yJopTtvIRB5*>}j6dW`IU8>FFL8bv^ZbhiA zdlqAGF5g$@*x~MLZa}kE3H3-F0-ok71ou#ZQUE;98?yEYIX#Fd1YYyc6Vc(RA8Z*!<`h#p$#9 z?HOmlyq){G*K94Ko8D%4VI0UZ9VqJ5B` z?U&+v27vN&sg{7L2Qv@f2XbsM65b-nxmLu4jaRQlZJ?S1rn#d)=mgS~WglVUu<@KxM3#gdnF4cq!mco*?5@ap5301JKbj<@ z-UX?9Dg3H^@m+3Q{F?h~tIz#e*LU4Mqt=sAM0KB`!gt)^P^K|*6giF80Fce1DzLh! z28Qg07orL^ZE{8Xs8B1V87f@1G8fzuVFw~AXh98vYvQ0KU55A+Aqa&0m)9-Y$aqx2 z&3N9xDk`kxWsJS&UWmm;uhgS1o%NeYTd^z9ApU@Xr*%b`t&l=M%3QjjVC~u1pule~ zniN90lHh{NR-;x+u;+nOm_F51#1*lWz_4^LiX!>kIl#%0*i69j4ePPcJCqZhsWXF_v6`r_;*fdCAlmx_Dj^x~GVNF?7`pq;=tv~Lofwrp2QVu!UGhmj<5 znhA^yUN+HtJ+}-HYp%#E+EoqSi?wEoMe30pK?2~pi=OQ-JzQOT$H#Y#l4?`qX9=yyh)69gQ{3XNdkGH&p47pZGKUZa+0iiXiTHSVMwpzfR<5GZw;@CC3?upz}KfWaK$%g?w8K8gX-n3lQ; zQ2-fXG8vz_L4{nL0HPw6>@}dS&jg?f=>S4I$vv~6tqO)(Z-NPg{=q6btrQc-7ErCl zsMg9lt}uu|X9HD0;(=+of=aWA`uwasXZ=&xQwXKAX4W6+SY4P+fNR)v%PVm8&%FsF z+czO{GF$pa&H*_qgkk`aPe%SD6F^Z6CPt?@ht|S0mZrziJariJ#~#7_@kcR#>`^S7 z*oV&29GDocQ~^1;-agdF(w|bbiuKRD5#4qLbC2E+a*T*#oOjC>L`gngn@5nXIoO=) zJcNN5opR*~NC<*MDuaQC)a@K$a$+7+6N>-{amk_9Q^u;b{ox!g%il9PGbF4cWOC9e z5xxRgO0RWx!FJ+>($f(k8aQ{ZaoLakf37k2PekAP@iyN~c^npa^2&Q(RJ#Pe`#FNE zLESnsaDc9Is32Q0+A`F`Gq{gNv1%dE|4kdURz)7o|k- z^LJRe!fxzAs7HZ}3CFhX#G~h(3(n+Z17jG|Y|c4kX{wfhGOBi-)v5wCaPQ0Gd^rK+Uvq02qWSmlnZf+@GPYkhjB35CG*ZwJ(pp79dyr<|U-ik40!Rx& z5T*mrdTjonndd(BfG3Pzc?&Li`D;+Al_hAuqOD?)Q9t%)Yg4V+D1lGAXw8hHwKR+F z;taY=bMn2qKFo5)Sro;HYrRN%2NA_3P?R7kRZwjV={y)9NqeRwK)}gI4&W<)`Fq%W zX%$18`@?fZV1innfV%eu`g6hJ3E)&17Q<3Uax0$*Se$F)$iZoN&v20j=(mj)l&-k# zwx7uAH$`aVWjk^^(pV{xKA(YHqzc}YEg|aP+-_X*(|-}8eaE+QjPtiz3bX#?m-oH6 z_eYVo-vUP^p9#>A>N$oFE+2bibh*C|W|5(zx>+JLYHsbXZbuE~?S$|+5#`7bmnQjE;~RYn(=m+{b7$If9Q4CaP?JiEG~(FVv#*_ zVGmUVOIp9zy^QU}X*8#fqcwL5zS9DejL|uVs8m5*?LkuOM^ddLE>#g%>xkl#fP+t^ z4OrcIe^(R(A8j{HJ?3}66W!_EU?F~P$%I$rouYCU`dfB;ZuJ{48fX}B2tUd`#siO@ zlCBbvB!rDyMi7_8LvcW|X7%wQ-`NV8 zSs-G9D}(4M5-3cT6{%Z*(1PERh^LyZEpa^uk z86LR%IC}dkIA_O*Xm_<3$VtwYF*UQ$-?2yBZsDp=eOxa7DD+zJJxrLq=NSVVFUJ*c z_+?bpP#au@sL~7a z9;CTd!Z||A6|<*Jhjv516aHc*?``qOzhY_MM`S@m=_vtuOY4zmVN zfGuah+AF^sSN!Z7WeW?`a0X#8Qg}>CU^bggQV0m%s5g6#@VHM#Upcpz49xw%!TgvMF0KWgKpZjRJ zXXMA-$W6x!&784fEOJK5du}biJ1Wsj00j_IQyO9=iFQEFY!C*?Es~-&LSeEkIPXX{ z*oN;k?%*5&mgGm`Cb}q(Nrd)P@<+V#b%A^&BkKYk_6L zsvD`xKq8FL+$`35!1=Z!Ho#F3AQb`=4pP@R?PS>Vh%k4xlHi;jLx|!?!9~U=7|1fr z0)QGw7{dY{hxX23Ze|(hU%FbXPo=jg5>*J1q^U@s8NG9Jxb&`1i-n_gvgR6rB}sR~ z4Y%W>A9@9x^SWz7`V$6c#eQeVA_qCN7p5_PY%kgi(_m&K^#-Z~t56$UgQQ#sxLe=} zEmZj3>U1%(ZVR0y3E;P8Pa$nDfwNSA!hl4%j5$xosP(Tx(l?CWp*4A8blw_#+QHm| z??8L@KnQqC4}?xpA$>*?L3NuC49KLDPUS!fBJp%;?hJYsPXAB^YA^;wl zUG}K21R+&77cj5Fgx?kl#M+tZAH)6EUMsgKt0iekpvE*-e-0qhXCffWvI1i>qA1bZ zfRxz^E`SsffP?#HF*DTyh_G$PAbNV_%yJPP6B4@}h6)A213*r*eo`{t~PqJTP5lRjL0px|eKViO;Xla*v!`JFN%5u69UeEp4B z=qq}!Ei9o^ zI88u6f+0-ny(N`O2N;0sv@m|(Aq-uz6>*#dfe_l5cFq^%JP4P3;^XLVFN(DU^Zpop z>n_9fzx3;fdJt*5iOS$=^sU~CO3wh~$O@Y3HJ>KQ;%t|6)RB1%dUB=CA~Wl>)9{Fu{9;lmZ* zJG7?vVeY|qfU_=C_X0rRYe`p-SXI6VBrcm->B~!P9NIsHcH1LK2&J;a`YppKl@e)^ zAc{$qFsU4ftk|KGx!Y)RVs4{#S^(D4jUtp*Uo~Fe@qMq2hd%ONqF;NQNjr1pai`(Q zD*t?I`Q34hml*FE2&iELs2MA#4nVtGKnduCu@7cFsl{Rw2w3nxcgN)9f&A((%kB;? zpcdJa=nC#!5h#QiOxO*4i0tGDpqbS0`R6t$B)bbAZ*(?B*~|G6t)HQ*#xFQS9x3NOA+C@-LK+* z?isrFI-{^gS~j>Z~Qs>M+XCVJbsb+=yY0` zJ@f#UXD3h{7(?Is^H8qT1+)knAS@J}?{2$^g_DP{IB`gyHK5N>>gh+hF@#EE7?r+Z z2{8u1E>>iHEBG%EAH)aKcY=1d<7n%&Vo|hy~}=k`v`q?7#4qrCP-O zTV@8Xdczy3fAQ@^PweqF-%L590sEJ2Pi`lNokW^33?rhMyLlXe)VhL#)9JiLx;@A& z6457W5?g#qU$noSlT73AxdNPUQ_g@P&xJIgsSOh}!P0`V1>hqPrbpIdW^7DBz*bYO zzw)kZpUJg(cL7e>E+SZyGpzxmxOM=T(AO`Crt@=c%uFw1bajuur~On~ zF%(#}Jy96)og-kN8^2K7W>mLuo%+W_Nv;V80D8|V4E6`ZAS%dC2aQmYc3o(|aPGI)v zBbYh#AiB+Y_$)(QsiN99g4)<744-o;8e^ML?Hxo?sfL`qB0a(fg%8(e*4hGPf-K*BG&|COOSIbRl+0jlQ9N067 z=5iN4V^r%AMpyTtw^7x)3#;@d2To`cfRUhkYpq|pkYYpCV7_!;V#Cz4Zf@Yp*Zr~^ zZ2!-*5x8*1!E0N58%5YjEJT*w>t5VF11q({OfW@I)!iyA0h?PGfPf%^6{*W*Zc+eA z!9M{C10=gyNb1RX(E#E!3(#C9VF%@T1<;J~=tUQ!S*-%Bf!6{k6GZc}YFw?v8Uz<( zYLLB-F0xZrr4I(W_KwwS-;n}QPhSPyG{e$D2i>m6z)(#al98;CUfsh;YDfrufn}6% zYke;sKH-rKj>w~GX&F821dK+#4>xYvj#3n(I<_9%TS9%y#n}10??&t%3tVC(uuzi- zlY8$$bLtodH(!jwP3I$u6S0aZH?|l+=2I-3I)<4e4`cSg{bkm3&7VSd zX&zZ;8J*Koy|$Llm9-aQw&| zrY4u*GoV(B(CDvVWUMbJG_#ILdB$p#?~EU919x$CQRiJ<#}(FExv@NOLRIT7c0}!SW%}o1k^FY_+A3 zB&l*HLKF4~N_)_yeJV^UTL4w98R>_m1}FnrEKBcUWM+V3eB${pg3D4d(*t8FfUyD| z7jK1;4EJF5n8jBx^S}#7wc*@A+(Ed;NH71J8=~2F1Qk- zt2dbB2oq@kpx)Nhf%~yMH;IvRFGr=;&}X$HTGFh8xg&e9IB{5%QI?|8KZc%F8&Mlr zmFIC;J4KL}FXZzmL2G^z?dBZP5Z4;046H&@siV?6h`3sp z@hblT4)9&wo2Up|Y*y#ohLL3*On>!%AX^%juT2TtJUWNj=_U^CokFLZp<0d6)0<$^ zIU{*pTCK$~p%#^k99WOn$>W;20bul)KIHs>)L_W{l!bFu?|HP7G&&)tsAYt9vcfq-$T(TBN-W0*U66rKpZ1EV%I`9wLw z?D#>n=BKdgg6mK!Rg?j8Isib%9w+brEILcG@L-gB2Qj?;a`de|2c>dtg-e>#N9WUt za$7ic6bmO0Vdl{NSU7nAoy8e+mgbRlTQVnc36;KKREO50cWeU&Hta;-y7N%&?MJ2B z5KEBdK*s!!D96BmHmNoSVQ}Fc<%Q~+tKhp!$mS1g@|!9)0$R&m?0@(a(oC+f>uJPT zyKzuXVbwWjwXnr#5(Q<}uOwt^EKg}*q-0IikRtsf5D-OK?`5z3WVwIM&%3c_o$(~p z|ET0VbOy@*dGY$Kt~+rT#WXB3r|zFFZ7az|09j%(xxnj6o4H5oLIy@D;Fra$tXNDT zjGn_^3X&GYUkRG|^MxB_?5nV`TLRXTBOCC@l~*ED%SHfBTpwG2VD(WYFe~j^Kgl$z zj*pz3Mxf(VCN$v`s|V6&<5GJ@-vt4!R*DDjJ&E%!7(uO;#B7t4s)g9dhB!wtWzbPLo$tJ}ujFWrf5tA)nMDr~yw z8c5_$zR$80Glw6>z^0vYfvbKVI;it9b?8AXjvqj&-iQ8;J5bf5cvxu$$o#SlmsYA?vgN zir^eTaS4=Jo|_W?aSDUbntTXz5B_htms=I#17A6YRx3pmJM{F#*sx^?)mkYiYuHUa zumuO{ErkvI#&hzo_gUai1Vt+S5|=UMo(q5U%kk>Vez-Dx&BH5ud3Kh^r|6SZj(y;* zwJ-d|>;610yB{f9HTI7QyfCMbom5L$8by((@>RH85c9xuUWc)xOuVfy<_xAf4N!n_ z&LPV(4age^X^kvrlC!$5V0ruahOOAQ^CD#A!?o%L49?}7a2Z7)RF^}?OiudXv%+er z_lV+H++(GO0I`6!*W*m=>@%}uWkpaJcJkB`W~W-%dY+!a1u@Qi#+u-mvju^WW*L6+ z#uwtefkAkm;rJKcg3jbuAYIMHTLde?`se>C%H^KZs4cf99lY;zSe%|fy>A$sFS#DE zx;ye^H9LWBdl6};i*#uk-R2^)v>n`d4xaUp>NXnx3g3uzT;2NOdrMnyePwy@vU~Fv&+d|Q=@}{?dgy$zO<~SaNfmoPufnGGOMge=P?u zr*#=)h9Int-P)5r0=w@&g`F3T>H>+J?vQ12BaJ=7DlE^vU>9!Pej$)`k#$<|KEtW6 z{vA4#Uj@YDlQ~jrwf~|Y!O*tn04xA&g*Aot;Ju$mYi=5)auw?@dj`r$DeSw1#=aiQ znE59R1^3e)Vi%#iyolK&52HOdDIb#VVn|9TH-=Fi7(=aZM1aN=;NumFkogpyr8%@0 zr_o-RLE4-{+Gz`qg&31$-AB%W%5{|MeLxf;N-E$iL$|dE7njg8vJsVfL#a^YY@K%^ zFbF5U_I}*`f8PuC8G3qR42|_*&DsG#4=r?ZMvy2~z1UWGPXtDI8X!$1c6u32&eUd4 zs*A}PD(kL4SUvY;ua1YW{N&k`g!&(qe`DsJymHTi<(SQ79vcI zuEj%_UxAFxrvU(oUzxQcpq9I80gTnMGMi=;k)s8m6@+KY1EFrrcws0SWFaM?JKs9~8>Pj3d6|3Fe8?F^GVE2am}b&d7v&)} z?Ny+3vh8mXZiy*L4wF(yWhB@51rRDQVi6--)gFBD##`i7U6HdKF-8s);@;|!&zh7d zjA=lYyS6Jp62%<_@-Au8E!j?laQ>5iZyjV{xNi`zxaL-T_<=9rz9R=vPIBqlamve-;r79$AN8-hW zW1ZO}>N~g9d&!UeMzWl}nKs|pD)!;2P#%{hp6v3a-}#X(hwuES_a$Y2A)B=%M$XD0 zqg`!gz!vzxED>F{*Axc>85Fh^8R!TQ=D=vyhNM3TLovjn5S%nlGax7)45yz%I!%rM z4}A947b1x$RX0TFgJ}84}A%ors!XH z4u&_K3p=kO7wquEX+KM8E=*(c;V+`TdMgGu?GOuSg-cj?-bF~$E?RS^&^&bn?S-lQ z{4Ga_s||52ht?t~RfFaDm{RDD@X3ln0);olB`$WO0A4GK#zp{mPn@+T{meao?KoQ^ zJL^Pv#Q0I$4oXhkN?YhDDo2TT3fM7caP`&Qfvev5SI&2S=}aCd_^p%`lbSL?-MEP1xP9E@nd zlmndno-59xmV+^mE_nmM$+7i#=(5Y@nlOrxY0j4p1*9=0sFh{)OPgK-^}4kqWyS^T zx8kO)7hu!adN}qVPBGU>@wP916bHtSBB2;ea%4^9VnEY0^7In{arTT?-S7gOQz>Eo z@B`>J=aE!;Q0gB;soIPB$T~nzR)EaJN&v7zqQTQN#qm%5H*^*b>s&FC@&ML9?~f%& zED{D77 zpBb(?((Swab^ny~4*eW8F4y4TQ?IO`|Cua@KKPddcmKsN|4kGxzgT1HVRDUqSgjue z8unSR&WfeT>uhl{bst$#gP^XTStaU^ia^PCmeOEkaux(PCey&VEE41( zUx&Hj5y0twO0!!`9!Rzb2_voqG7uqdwXpf2-B>-|#Pk31ttdH3pfnj_0GV_6)ZPd2 z!LNN@#;jH<3P1}@hE3BHS8UyhAGq`yP?nfW#7WmH+@`-ly={UUK{u?|Iw&{r~IIbnZaH44q5qi_C#2L{it?8HlOn zr4357kxJRXwZHf;KCZvMy86b0`sGuyoKEI5TJC%E&u-cM(Z6|TQt4h!EM2pBPtIKG zvJ{ws)QvQL65z7feA)HbJ~Rqa*Yz7`fR%5U)ykZq(^|yQ z|Mv@^Y#xXcxcUxkyy@ovwgm*8Qxq*KE?usD4Z)BEoYwDjJ?#U<26)}gU#3*w}#`x^DAoYRb@ygvIB1e3qri(vI}QEU3(bq6kr3Leewj%YCEGq~4!`QD1oU z|0b>D|0=oVfj1?dW%S7vpLEJ{97z_ZeE(H%`b@cZ=qEA!tVfcALb*3#AP^1vpMUt4=ZJ{+kg|yR#Pcvl8(-^=1?Rfj6HT>lEIrLrjdRdKh z4slXJeR!<|@;wTHqGBHiUGH)1fxFONm_e!5i?tVAjZ#ty-&vYv_^gA@(k!~ICHQU|S!W4pa~^3&^1jIS ztwP_m>W%M0kUcz+0}+5MOA(iVPLRR_Nf|xU(-@jQg=D!2sy49oInTz(j;#{Vw{ZpVcIex10m`+$mGTf~)1C_s zPCn6rX!4w`&i=bPm}CVkZ7pMY?j+iCr;xUmkhYh@N~tM{D2l+@6n^0E_u$ge8T|B3 z*P&9XBcm7u2DummTP{JZF?f0_TBNt02*-DS1xwQ>5Jd^rUi1u9tF;2?p*Si)Rm;NU zQOq2;AN7&-Xsp?SQl(epcPpsy@00=|a?K{hbp)SfXfMrTdHMv>rD<@QO1cUerL7K< zJ~8z3ywCEj#;z<=UgMpBSgEW@rqVP6x~I3?w<>EN{1-UtL&9D+1}t z7$K!V2WEW7keh-9aG>Ujys2zdh!fkT`UiHlkLc^|ZYu%J5yo;UC+f}QkO z1{1@f>4Aw>2{(TKtr*$94cs*=K})b8eV-!s5(HbeCq)ni&UCg#IlTqjzZaX?@jsWQ{oz;pDytFn9bQK!nvhuRvpP^tACJ zuYrJ><4dw^AO%<7ZRx{`1v6|M-!Y9{I!ver@68!yBEGdt~Lv9FsD$ z%5q^0F?BBFN2xU;45Y!*0u$NyC^CzdTq}x+Ut|#0l#85sNmoD>C{;XJK@E_bvkfqh zbP{}Wx(`QNF_?kDzA|2Y+f}&!k`3Tg_QtJ*Ny8c0WE>?G^li8hrAj@w5JIbk63C^o z!PA8e(26A;WqJBImL`v)y)YeODoL$@^1v7>Jp(BBjllU#lgxx_;cxbs>3ICiTi%P+ zy=DCFt6vPqve4k!qdhl;Qmt378#}EFr+3^%m^!u}r}o_s1~9mB2S(SQ13C38S71;8 zkp%~%nDj|X;pgJVP@oAQB)@l-=Fprvj`qSNIBn~GNaHb~leA$udID7Xt?sNS+-9|6 zXnEs>DSJ#ING=+wqLFrhQct}ZwGU?PQ+vzo+odQesYRM!r~;BWTK$~wo~Uho{!dZ= zW&h_p#p1H^Z;|M;Pgz5llMi)T5D=m$t4}EOloYZj0JhG7{n(O1%vcBVbP9=s$4n$ zrsd!IsYb>k3z@yBk!P>)>P0UN1wTKc8S;@*4otlp0L&^isoThZyY zfH-iP)N21!*qSpZu{6FPo#lBzV|{U{iu&+6)WEsJ`yVHZ*2CQ_u@CBFa2%ju3gSs{>~_; zbI(~@{GJb$v3|>%10VU|_aFM?2XCG~c<;5$%Vpy)*)*Lm6^rIWU5EnUIMkl zPb->Vv5KsvSh>B+V(HA!p2YD7z6=JV+&h5v7ha1v2z9Q+3NxnzQd9hKz5>ay(Tfv@ zusn54TsgCLHSZ5B8@icg>rYUYijmTUh7$4!g*;Pm&uyqh3fa5z<72&ufb~`(5#Ij6 z-F}iAU;eq*{_rc;o_FhBKJtY=^wox&M?UwGbn3w?$d%7U+&fj@{=)wo4boo`T|O7u z`wl8A==fAAe(s^6#mVD4ANj!hzI*1r&pmr_eBU{sPCYJxLVUqo3d#2rp;N1fNcTsQ z=D}FvpEA&6g1aj$Dh0NJ>t&XgXIoWgu?IYXvk3Lkjm`dTSL|DV!?W&Qb?FuV)SjN) zUs?aG{Y2!MnGSyKBOCwQZ@>B19)0+s7bT^nPu|x$y~ob&tMU3*JOhJ073ojV)CLMB z81h^1>T^-;A5%fov6z4b$(8pfAH4_d`Du7~lxok1!@;kB@7YtF#`enjtGnM(>QwH7bQzPim>6*XQEoE7y4$U_~Pl`3FW%2 zMJ$f*M|hccZZ6CZJAN=$qol;bO&-c9Kxxe|-zx1aMn@i{qf4)kkY&E03L}NEke5bjJ z#bWIAlq}5bcyf1rxwG`_BcFcXMN<#$xxG7kaBO<-y|v79rBV}fOc!oo4wc26pbTT$ zk(DEZ22^1pQkYN+%$N}xQoU*QdnKe6(eSyY;rC)CpSRZ$h&F!~#y%CH>X z{-Fo(;m*Q|M;_ytX_S|k`DJjMLBJXpSp#aBR=xcKCC;x=4YpF zI`GkV?>c$!p1O-#7d5Aj>}Vc6T<)eG)Ln9ji6{mUF-crTnM#>XgjAUg%B&f~doX9j zoUx~PkFEG(rI%maZC!Y*Xl$?WW7-goYE`u6Lb&p*yN zeeWz7tU@chL;wDmnL6El`t;-b&F}mAJKst76evHwG0F~{eTQn{OK*BH-nLO0X`C{^xJuR}0T~7e z+y_f zb?Dri&Lh<4GP@cgGsEQ^mZg+GF~AE1+;)KFii@Tjpw{$IUk&hIhZgapnI%}t?It0k z`X!fM@)!5~;qTwc#`n0U`}K}Dy^iY%L}XFrK2>pTDYln7-Fx*Ze9BVBv z6l>G3bCR&UrIi$8umR~v;+%0Vv!yUbB!7@tRD08l-)5h1R zi#u}5tPMb@wS3eY9$IdIxfK`7D=k!NE*2_nELK+0Tn!+J;CYb}_1g91TqU9!QEng! zxb-)G{n&@Ezvvo1cGVeC1@->|>zcgY3Zx1+0oc!g{krv_O_f##sUVGzGJXI%?W99y zwOh2*ZnMd2yVKGM0NyD{y&dH8;hwwhyZ^R-{^nD+rqa%6ClaKLE0TokE?TT zD`>~$rC)GuWJCn+q)^&)fvP~N8si>K;JHIzYiZ5&%b@1r5dgojjIiB=@LTX3%er`? zT6x-ZqD)nzn=DL++Q^~Ds0Oc&QSB-|sa!5I2p(5RNEdriU#X(9ya+}dLPi+av<(}! zoUg9mvf-|rM055Cqzu(~sOxJnhaxeiE?Bvbo%`@+;?mGNm@yF%Y@5SM+lYb)jh2s@ zxjN>TTUc(i(OmUWt+sLWWDSeeHiA$fowngvYWY2a&QUa{VE{;_-zXKU8so9(o2s@m zaLdA{@A<^Py?5utNBGDG7CHl6-#F!|BsiTw^n&yG&piH9Pd@&4pJOuG#W`2m0h$)1 zBy1Qf;f~+F3Z-mHnY|9mn-BQP2&GaHl29C(M6Q24PP5R_r8=*9YuC$@gZ(>8x;{!-1i7Ijf zfK}H;z19R6AcATt@gj}pyiRiv5&OY+p4@rQJzx0jvFWM3 zPRh1p%Yq_^l+E$Gx9r13=Z>hFX7OfYFvfrYK*A~XqqJdX$2IKOiLw-K!FQYR8%ywN z^N@k3{2`|5l&K#o2@+E1+Ni1rrdQ}u@%3W)s zGdt=(O-(k=7^?LqnoSqnvOz>B=5y%pFR2t5B2{O?kb@qNxsN8flyscUPTPpW2(wE~ zOwTniyR?d#6DycHQA4HXLQ3T_+Ln%ib;;uHTOPN?_gOtNLqz&V2gVJBI+z)flBxvs zsuu!8$meX7OC|J``;jU3M%Q2e{%5bh;ypL<@+C8CJ6zvL$msnyYT{doJ}U>WIDN@X38nysMJsa85V|Ba_?ygIdrLsQF`Uv_ci z=rWGaHy|V-m$73tYR+kHsv((}1ocmKDQc(gdmkH{3P;9>A_3nI!0i+<&Vs&Twz+xo zTsK$fiL&{;ESLLgB%*`cHVqyeJ8O7x>z>P77Pz#~f@sV}R*0AQh7X+V^!V;TLSAPO zq&%Gd@{r!D)%-Y3JhA;5)uxC_5tD$b zfu|O#FfJa0nz;}YmnJIcZOl}zJ;kI*b*joN>vJmJS;GV|sVRc{pY2j9G(B%nUx@08 zK`_GC|NRJ_`PLE4F11uS8m0*3tl=J9a^Xf?d)Xuk84C{|coEM$e-tUliuF+ZZy+Wo zJth;o1F6&mRVWbds*gaZv2HkP5XIi!uv8wbcs`vF6s?r|``TArx?67EHW~E~4lNXN z#n)}tJ|rTVP1!Q=y*8z7CxF8}G|*-f7yFDclZu$&e}RO&&QQ1~o}akw5AOQJ!SBEP zA=|Nfm0=r2pp5Z1KJ-3Zv1ikp`5-0>f(QehHqa?;Lpr0pTM!vnEY>7i!E_oF@x-cy z>GDI+wf+qm0N{+nvX%QM!4O0Ok|d-gtW;f8>n?;;*AfW=NFtkYFwkE_p^!!{Wr6E? zsFDaT{BQw(`ql43L_(cfa}WUiX+w=Y3wuhG&hBvMd_>H^4Xvo+igHlJ4l(=r+cHH!{7lLVH?>un^ z5+R~cFB)T9OJn&;b^vCQy8Z&lblgahnIbH+t8t`My>z8oDh&^{hKI#!3(E~3v$Hi+ zYHcjm+NjoC2q6(hCZk=sjmC{Miqa5}5Q^Z^X&d>hgRN%|Vsi5UzW(%U2((*hSgZRI zx(QYY2|p0Rv8v2mg-ZDxm{V1cvf z5MyE*)u>Gy$BD6q#1lV~xG{0#eo{!t>kJ3c0qd#1uU`7lgP*@+wbk64vMg>C5_HTeU1GGx_JR#FmDDGOH0fshf7%{K7H%nBA) zT+~`^)az}`EwAGELJOql<)v)p#;w&w3dRdH31^xnH8FOA^N0ya`@69_j830=lR1J^ zd>#x0#w`5Gul~}>pZoc%4p^z4f8mxqR$!v(%9_XtOCW9g)UZ4@<%ewFzOGu^2~I~O z0RTf3dTNfOi8X=Z zX)T5exTU76ghXgIJzHUBu{d!1tyf_8mLd41 z+x9WL>|&v^ib~T*y%}Kocm;=NR^WOeqEI5`sGO>}PyJhqwXWAmZ;X>JwFH84JJ%kg z1Nu7NCiO=Jb%-u3$N*cf+~fx#TrUD=MEPu1jEs+Y10$nRy;{M_;*ztpxa=^CamTjA z$oRN7vGHtw?`3;lx$^Rh4-jAdhr;O9OEF(3IHQq}*E$2ytEmHzK7Hwz{`@Z=4%_Y) zl@_HQvr#TLT(tu-lBl&jR4OeTJyFBLiVNG}Ng2x5E^JJ0 z-xk{G{JhQCi||h#4^usySno!g*?uRN?G#cSra3NQ<=gM z;+eXQRboLqqOiRR;n$g$YGBh|KOv$733;t!)a!@(_uqc^?|u8Z|M+M+WfzSMVpn2yrw(s1tVzNo5G-ziK|&D0_ak_I2+kP|lzPS3*ihIrFyiNOIlsTZKN{%EHa1QS zOr5*y{6mhNJ?iAks}7H3-U{n1aA#dFTFBZ#m5tOrJOSXw8_k&s01|Ra@ODVZYn_8= zI`haEAN|FzeEF|F&LDTHA`N<}Eg+U*>Wdyh3W5|wkq|`85>CpN!-HjP-m+0-iUZ4z zjUz;KthXmu``~r^52B?$L%DwR=TcQl=EL%Ha@C9E{i>ub)+G z5}Y1L$m?AIBI3_J_1Lz1@Bfo8EX~bbA|*L}JsFhBLzFEPTefA*@N~L5*jos9oVP{p zx?pEJlg}T?<(pgNg^SycM+QNuM98FO)4KzfI&4*9_TPG~G4rvwQSoGu_DM)Ycm=owu(FhPO@2@)ho zkRU;V1PKx(NRS{wf&>W?BuJ1TL4pJc5+q2FAVGoz2@)hokRU;V1PKxV0R9`Gd<$YE S@C&;D00002n9KDB=~Re0000WN z!T>;REW(=s)K?qMUP8kO06^~h?*bdND>DWFK8qzqg_YfP&pJHv_SIAlUp2fwC+rWu zDJB=OP@xV1g2{!zhlqn>Vs`ww@}C;!o7%E-R+`pV^m+4%NehUVDw~XEZOZeeNO4h3 z6b?LKN#NpYX;fV7){nC`H%{Mc7hbZJJk|yDx_q;>p0p&_y(YQ4Hb2gfD=srQ@8*=` z`S1Tf+)!|b-#3qdr8%A_$Cs2UvY=K#DYgL~+A?I5nCPXSjXeLk$_bSJ*Jog97Yq=z zb{klpa`944wBGzm{1Ef&_!sbHX^n8|w(}6m?i>F>ZkG{X%4DR3*Qb})i3Ot~BjA5s ze@Br}5!<|~+xGIk^FkRCQPx9T6x;f zx6+JsuEn{<0<|Ba*+UZ}Bh6ckoHzv!8!ycnd`H|Oq6OytCOub9=MVsTc}1WCqNkqz z^Ue3?cMGO(#Ubr1>T{-b9W})+PF`=xjI^Hni*`{JS&$_imvyB%(aP+8SCWUhy!@|K zr>T>}g4*f2Wg$T`M+zWV$z^`9RNreFGAK!Snjzxf7d-afR~@eiIbO5|T=rHbG3g=j#$n$Cr`?1^^_s#Wju=Z&## zEgc`FoT*}eqK5W9&c8-32&t&zG3r#Mxx)E;6cl<`LNrQ7sH4d*jviAG4jWk428JWx z8nW;3tDyiq?+2VluBz=*e=KM0TS@gvC4m3jY^sig&r{?Ve4^YD_WQ2aL2P|Co- zge8N73u!9Xi)p8>y+;`N=ZHneg}w`Dxraa@dA+hC&~ryD@9CNMc0?Gb_|xxYP%7)5 zkm5LbS$`EqKsM5LuQ+|JCvo3gr??7MyxeDLWWq%{=CfII7h{ZSCrxqx3h*-(9cVffEuKGNYiVCGTk0BK?Q& z+~s~)@J%bIp6GFTgLG;Z=Ud0CT9*-V*FA`KK#g5+hAs)8_WSgRP;XwfApk|DDa5Ht zcdL6DNk&*qsNBa6(hUNjIYnCJ)b;*wAg%jEhwCdLsvZ4hlO19mfGenPg=>=lmkN2>AKtW`EUuOm$wffZHnE-)`_&I3?%e z+K~liKc(O}9tkEluYoubh`wT?ayc78Ii4%{m_P&m?4Bad^*OrJj#Q>CJPA!^D#3w- z@9$7*cZYde+CqTqW?HGBBAK5FlsdaZTT&}sFKYM6v2Pv6R-L<<%5Drw^J4P!XTVa{ z$UFAxVZT=~N9NS^m&#rC_j#UaD<{KRQc}(H*BxFh<~SmHWUiYUlJh39*RV6Xgo7$} z1EHco%#po`0LIT?F+rRa?_6uTH5$&3q0w2F&m9}mn`Z&5|FGu2oy|XqYrFoi zS@oS?!Z$;wip)tUSi3xflDyGC-7 zfN^d5*r6^QovE%JO+-TuFja}#u6`I#g9DS~a>=z{W=)wkqBpKj5$n$N@xzn|um6n} zKu%6m$3(t)|0f=lQwSP=fBia6y#7O1L@J-Y<_jVQ_DzQ3tn3Ens7|~$q@HqDXy3|` zlSMg+D-Pvo4+|feJg2o_p>?he%5%l4 z=q2NAadDV}R_*({8B0!Ql7$afM11fN4a*?ZdRTR@u}I5alhAwSCRdQ8N{HL%M5n6;p}Z6VdrRcbw)b_PzMxF% z$Db#5|FUC2TO6h>7;*!fh>UwBumpTT7lp}hy1fsXoxt|1z)jHQ8_)~_2Y51-c@8Xv zNwW1M9e?fI<5nZ`^}fATEZxi&V@MPwE126k_9DD8bM!yHiL7&eh)ZS zy{~S}eJvjZRpl0g-ZxH;!AMk+n+0FrLde9it90DWefJwuN*9aFBFtH=Qqt_pDfd9H z7v=tOY1Z&x$RE&Z0qWEkM7PBLP>)Cf%aZ_MS7yOm@DTsbThBiM{Mi0(@6^@2jW!Ya3?XWo zoBnr86|zy=;&IgJA9!;1X zY4BEqG^;S2NjxqrvqvL;Gv^_rCk-QO-~BbYQzv2n^8gB$>^FUNBv}RlR^0jwA);wa z>ErhE_q+r-rs5eMz#Zhh;$LJvLK9A8$M3GT_!_drS&&55{HlLn%m3p`V(+=qoLTM? zu7B`CO!31sfYOArh>i%65@oOS`_LdfqTA6#9-AY^AySlLtih>|H=CW{JgeF(&Dk!UDXzMVv*W0EW{zA733(EDr2qtk!_odbQQ*` z4^+*F;XYK>w{1)cyrTi`95F>~IJ{&B5~$2pJp^_-WsMtUAcV(LTX}x|tuLBk_TzZ8 z)A!RH_>NrZsbCtuX>rFjX(d&n;ST9>o!h$rljjRL9AUZ{CHeY+l{A2x2l5i?8?>uT z>opdTy)W5i{mBLE2A-}=KD^_+Y3#m=^!AYYMq~GWZKpgR^(t|c^YK}fne+K}uq&TT z`?yZbs7$%ZAj$ZP-HpG_Gg)VLrw)IejQ z$~DyJ$MmRCiIr_#N!ir(tx2^l>I-UO6&L|o0YxAdZjZ%IzVCdh33R`7S(SS7xT zN{~k#xvj6W`MH^;V*wbwNn|*-g!S6PZ83|kMSLM&87Qvp{*9p$XDe)1XD4cE3$aLR zLg^47jUH~g*45ee_x&Q_%X6rcH-f)?w|9a76%$>>)LJYkChX!?|Z6yNLFqEQ%@>NSwb<-fvXGs zzy=a!c>6!^Xh5i{vT9gwW)^pQe`0?oXhROz7@U}a{R@&IMZRjLq!|ZS6!=)kmq>MA z`hw}u|6sbPQtxx+9r0EWi1aF3U;7xc7wRwdGruMD-?uqv$DdQ!1vMd*W41AkxK%l#BHMU&0PjWaDud5ei91e&_D8MhxrNpmL%-arq_|2p8))DBe4iD-A`7o zDw?zG4dF3TI-fy=Q}P!r7P?Ih6(UV*qF^Wap~!X`FpUPZ`#gCoU+j{ydoIL(0rcd2 zn0?u_cutf3M?l!dE#L6InbYU$ZKjEln-I7CoS*d@YJpGA%3cmZ%Mq3KK7U zAH1Z-Q^TM_BEHfRJdoXLvzaFDjaFEB6)|6(c-Y_bj3CNpcC8E)wNCtHCMf@zi9ylJ za_#r+Znt7xG8Wb46DL#t&=swfb*dmgzN1R5`=~ zvPr`P+;k4q?DOI{K?UsGy}S8}xDFF)@A^B%lA{a4o~ zdpQfPVA#q^d{+*Ld?FY%e<7vePR0DWg1Ly{in^snzyFg=XZUYgCTICiLSZi)>RgeP zN5>!13U#jn{Xy?CWCcbEAAQL+3|_=H73D(p~CBzOvavE#xe?X>Is~m8L1pHs@fqe~wr~sm?0;LgaCk z7HJa@@7jn3;WAT>2zUeGWDSCUXo?Ma;6(n@`U-wZ18O`!xov;=96&wk&qIN-tdzeVK(@%x3$1!3 zPG{8J2}LP8*5J)c+qc1){}b4h+7AhVQ3*AzF{}?}iH&P)VfQ*JHt*2Y?6sowpADe` zLDAxU267fjNt3Ycq z^)E(A2T^GBzV-al%=KLzMkl^5zn0+$buH(KELP<((Xis%6;al`f;z7~s4b%RZ6$c~xZr^r(df*lF=u_}u9_2-%$4I2AE z2vZo(o;PWACp)pxBJvhoP5p=oA%JOGR<-sCRC9}7pR@Z8iR5s6Vnt~`ZX$$9+GNf^n`MkK;M`Oy>a0*4BVq~eH zBiQwh?DjjCqazOm&4iyS^^Z|uzhG`L)ppLgaiv{{Mb>4(T1N3v;|;v@?TgzFH{12E zGW^~!K#5@wXtVr4Q2QZoZWGVP7=8|q0Mj$Yyk|@|vB&qQ=e6@(sN-}O(CW5I$AMq- zZan!}6)ldSMY^N6<`n($WYEbp#n5D2?Ds5(z1!$ zn$};>73u%2)iM6(q{_haGRQ>*GqNm}D)uFYw03l@=mZaf5PhrHKVhoE zs*fzG>jQK=TK#My*ZGL%qunj2tvG)daoPT{CFOHke*@-Y0KBJ}I$*o2pp=Oe`a-s1 z$s|^rbqFQeIMF!xS4O;P8CqbiCa#WY)L#m)*_-)JHrs>84g#B2f3!B88e$=KJ%6Iw zN@X;uZ}IXz1$ZY{)_FMAUMsBs8{hEiCW~C5V@%utbj?n{=ZwXog*{vb4Nc7AF;ZD9 z5%w8Q&NINL9@RPWPY6tSDSHIJG-?BXL=o1_jXbH$nIX`;?gE#L%}s>KFyi6ud7G69 zCOA%;T1wKG2Si)vI2dzYp7RoU%~r7k=l;bogY@pV$P#Zl504e!n}4K6NlZ}w zT?YjC*G_oizrG8WA{|W{u6>No)5W`p`f_&>{u>+mxh*@QI07tiNByKL=1^vOdpCdW zxHq83!x#WNz=k#J9DZUtEg{O=W6 zOuHB5=mBO_jo%>kXK9l(m~u6i%OR?Y0Xx=XP5#X)=Z5z`EUi{ic+n068?XIBlwBoh zyTavY3z99fT&pJM*%qvzxtHJCQNBgI3OP#yw>%b9KU9V;ZexF*VW*kc!t!d)6BbP{jnfc6;F>Zl zq^m2|U8LT+yyTdrstFt z_d0B60I!Bn;ZsR(p2bPF9WNqp2kPo+9Gu{A>Yg#XK9r!m6GrmEb`s z7Q_1)IpkFyNcopqXr0fJ-kp~ObIJxz($?WJ&$Xmd{8&ktL=F9Ms-pd$kWLyw40gYg zaaFsexjKXQ+=LmA^ln{OHkKOJ@VTSL$64Xv=k;;*6iU}iM7Jg*r1y3l=m3S!$G!ig zv5gTko9}l5!*3PDxbrgI)z%$fug%qd*C-oq)*dZlee&byLp*3%)93Gf8$*hhN3IU=_34+7}#A3t|U+4kGc6uWezZ2=ATe7L)%GED~}zU&B0E zFEmn!*@E$kDqN8nO^I=%JpNx&*zu)Rq0TFvnY0v8YxsSvdZiu6XHAPaczN(n{VF_N z7P6f|-+~j1d>BJqcQSm^jD(|15P~^Om+aKi`IrWcbeu#-Ne1=AGl!YZ>O~eX^4fZ zdUNp)|39Hm_}!FG#JrtVN`f^`!LM~?mvu{KH!8m(vrCVDp22@}tPI{Vz}>afp{!~u z0+e~O3+_a=B2)SJCtout3zu5--c^L)(PjY zKN{s4Vz{y6bP1s(O4X%LPwbJO&qZwcg+Ng(0+*BIeaS&J(feNcVyF4ljAp6)LQ#}| z61XPfkcbvaBllJlsGvWN?|B1=#U=)#Hdj%Ui(Z6|#x{MewEFSwTsLfi@q<4d1N?1; zOLX*w83Xh#LN2BvWT#pwMba1Q>O}@o-m$eZtNY(hh4>=m&Mj3bNlt_6Sq2e5lewUu z43#4XZ;Go}^!zLJ!F&f=wf$j3ae5SWN0i@R(pxrKDwe8ho3hM8)0Hs_co7$LMYWpE zxaV~prh>tm5uJOZzSB98Iqk+W(FZ0PrLZstQ2Ba@cp7SNFqQ_?9Gr&Gj2`&)OP!Mf;@ks`t6 zz2+er0BgXTRBGyVZ)IFtC>IJ7=$h1o znOLrIg64rDpna>;nAO!m(&oD@ z9S{V%MPA8y_y)AR?Hv5vEl;Vo(;GwPB;`r5?xp+D-=ll*@B{g+SH={xJuf-KUr4m! zpRSsL8^naq9jPZxgxEyFOvYTfh?vVE+CESsfy@q*+a7G<*(^bpmM(Q;u&pP;wZhcZ4QogZW{4XzmIpSmQZ;z_`s>rlJD;nWH!X% zB0jYSaUVTN^`f=j`EwD7n~Mg)oh7SS6}aERI{y8^>e^5JuNgZ(-+0Nv6UU*sN*Q6+ zzHE4@j{n?X#dG?ppeJD4uUwLdbea1%%o;X(a;RP`Vl~GGbvDQ-53gk0_;M`s)d8av znzliZ59OP3^lId*JW@l)c=u5x9AVBak#eJ0D2#dYC+e~%>)wD7s^M|1% zeXPCNq-z^kIOqJXS&yW!ba{>)E!WH6)2a)C2}S(AHnjPa*1d$vF2B7M<$B>Sf83QebWxM!W5<2)|m+PSw{a=Li{1ZKlak& zJ4oR~cD>jb$yzeV7gpCHY?hwA4R-8rI10L{;jUmCr5H8L6pteEIeeIzxIQ*FC}wN* zH~zf}flX!MaZ4>tEu~nVAs*rynZ1S^C4jb)&=}reQP9?Mlw#XFD82IlqP^T))AapJ z%yBroxSlW^RYA!(!ufo{hWVJTLV!{s9sBr%@;TG$@-}IGeX+y+{$mn{YcR=5&(4k> z^y`;txaW8O$2Ihm#PjpnV3m7*o5}##^s!=j^uT|lxr6<8qel?pon-H7hosT}L z%b^@NnMCNAr1r27>yK2ydzcRNwgiBaY#ZLU9wk4Bn?~y5NslnEFEzgKY2mIR%;I&^ zUb5A3f4o6^28zf9wPNTZxc$K}4yml^Z+co zOg_PE+ndK7FZTsBGe(usW}|Fp1-hmd?zBYJ;CK$bXMH2@T#Bf0Js1sUL!H zF>p{&=^7~(8&<}<$u^gfYQ`%T|mbAI$+&6&B) z*jum*e!Q+WI_K&th!Uk_+`;0NMBz4+vljw8@z*2Idb6jc$jl*)_q;5B>EAvMe4C6$z{WEDdpN_eDrtw$zC zZf5Qh#8Y$@PN`Pck5}t&wp%;w5A~%NL)KM^?qgkELl09!AW&AZ<7M?9{n!SHd_R)= zvgLhmrboj(LKYt2Nlc1J=b3zLXdY2q~F>Q<5=^G2bOP=OL{@W$5J^=t2n@5=UO4#V}C-g-j&m0uzolpAvXvGhsKa^>4N{oFK?DOcLOr+``h!i>qMqt;9 zsw^}92Dq}6U;!1%VD3%mhH3uV4U)FGnQFSdAtts5($FkJ1-9S@A(y>(V`VE2q!v8B zE3w%KXA*1is0}`nO;zK!Id~qPa#TG{ZANoJMm+wzn5C;+tNp|nSL-@C+}~mJfUu7Z zcmKQe`HdyEvMCCVrnc~nB~4Fw!5Y-Lux75E)R*UeDU2B zqYiEbUCFh+)~}2aq4_MHd|_8EN>w}I>pRv)2g^e1(YVLY9ysiWHhoIu@cs(Q63N{> zvtx&OsDS0bi3%QS{O)HmiS7w#?T;sl_2!|fA6iB2HKa*eM!7~GV=)+-I0;h=M_D{>9bC2^ zwom~Go6JYs#22}kB;nU~x!}<*V=SF&+dsMMM31g4LF_vWRDOenPxI_a!47AY5 zokF~eD=L}R%+x&jDV(A>pI;tMT;oCX-D4;mMo+NlI}W)xTkCib(m0CzO$*<-6$lrV z0Da>%L)KVX2KC=W!6l1`cD<|zAc5FdHMN@aOE0(m#}hw`(R`B`MHq zP{Vne3Ro(Nk}|8Cc z&av^zVLi)3*r(1Iyj-tQ;}YXdf>RYprhlgQ96p_5|0bvFrjLC<&n=r6ozW zx8h#`TZmsyS;eIt5}?-h+q&!9nSg^qVPwjGZ_kzjlGBlv(z>rYMQhOu0~)3AThkL0 z#t>-~avx5V(v3rYvn2<(_|PK*f!VU9=;E`*`r2lhzwnCP|P-sos*b@lG{oL?;$hk1o@PmJhP$d!^FT;M zFSE&+ekYkJsW5|?C~FJfH3fM2MN&%jX6S~Ox!KbtdCNf3k{Tcl7BMl%a*f=%5ejLf zawgD}TnL}}-;eaDxmTJ!4Z2^jJWtWDkXt zb-X|09C3syvE>)pX&4|u2;`C)%Yu6|;?Z%yRF5N?125Zl$Qp2sk?coVj*GX|W9p`2 zYdebx+6uagTE_+O2+$dJtR8i})J%d5E?NY08Y-y(=say;^e6f(ga62x zRLSJw%${ziUniJku^QawW}!NC?61OR8%R{VkWA4jY~j4D(DUME&}Mej+^2GxrGf}g z-%17r%W{hG>c+)D&-jn3$cdWaDiicFvAuw`~7}s=CIX!G#^n7e*G?u>~YswiCtDqe3uQ z^=f0HFSZerF0qC{R}M->>B**y0vk!T!Jz}|H!fUYzj4@>4*6fT+hJhS{9T@p{Oj(O zFiahBhF@J0!^z+H*4rp3m@P;2+e#;*Kp2z}`}tD;K=8RT-B0Cvg%-=0>oYnU77Mf+ z!x;IOr6~V#=qA6D}cCA-pb*V(VK|>5XD(Vpc2G{L>Kt zWCzV3{LM7;LZu;Wj6ds4?(3!cFidPnA)z`IuX{IfvYAvMK8*fu<1wX#oo-DF%&=!2 z8rhku;`dd2zT;0;YKs8%GQk16nGlwx-=yXMsF}g!O$A$CDmthq!3tVo!_eP-uK?M& zQ>z>70k!p21x--Rp-)U7I}mT4UACI8C=d%~8>m(KR4#l2$gT zOQ|d$zEDxT15h()aovQn&r@MmT*2K<(!J^r7AF?fA{EbmzT(VeUK43d(9Dr{^XmxWwyEdWB33;ieqI^&Zj@~!F>Woqg(IuQJr&)JW@Sxmp(0hy z66;yxlZO~(JFWzprpw*rhokBDwBrDi;z+upV(+IvR99ANpPn6;KASAhOZe4%A7|4P zR9!k%76Knso2i7{@4M5>$ATrlUj}VJC_nGs$Sv66xZx7;4R`{A5PI)pt>b89D0NwF zk>hymg@FA+`o1~8YuB7ruv3!V-Y+CiG(txT7W7<%kq;m^4`s(KZL^?HrhCb9YDMK@ z`rR;bUSue5#2U>qn`p2Ja`~t>PWZ;FoXQb@H1xjIrdR+a*l&eWx3|OO`fVCB%6GG* zL+5q?7x7PEdDK06WhDAgaB#Obv|ZTKbUxZQRTw9#({$1*4?; z;MVvRj!A=kZ#T)QWHVUdFneV&*$n8fvS_QoFGT4L09b+~#!Va__aLcU4#_Hc3@1gDuoB)PnBwR z5~k%qX`;rV5FE~mO`Vog2(6+bHiQL~dl!Xf8YunAlAiBGtN0@#Id#7n<_C|Madm0? z=#)}a&`Y0N*ercAGUILKTdcQsddJXFFT);)Hd!5n2fN_5z_Z!mSFx&|t5!3_-`8fv z_LM#g8-{Z{UpB=$p!BN~6B0(2$m#)$aXWglutq3Iv0l+4k*xF(TG7nhg($23AX=Kaw3YINtGnpyJPDZkmYN_z<6+N5@SWdyyI{L_OVMT)iu%w;S(06)-u&ONZDeM` zxQsTlz8q2m23Jjn`&c6xrBYd?;O|O3@>z7*Q|G*UXI`>Xd-{>y&M%$H4dV}6Hk7e1 zB8kkBjcZXooVc%zl>K1RX_srnFi`YHtnSBMOQWLIs6VYn3_$N;DjHv{x?C$jF|e@t zj1;DB9xYrp0ddKO{v532u{Rz8W^MtXYE>+WovCl)$D9b?+e_nppu?L)P8Yq^Gr2a{ z6GmTG&tQJaj?i1TbDD=e%$cbE4L63hZ{FCJw%-WW8X99KbIosZ+~gnb(i23*c&|a_ zDr-NKqSx``YnlpO9%(SdY4rq0k$XnvPi(9-WS@+$6mhU(UBJ?AgA=%Oo~)E4d9lV- zPT8}i7|_N40B^{kwLqi~Q79;2;+ndR?|E?N#h8f;tvM!?dUh9~-R=(sE0)rEi@RR0 z@)_z197X{lfeO}$r12B1V=Febf6@h*Wyj;JZq{!%@6DE`po;ZfO|QENcJ7FL{joMh zN#h37UxzWc)#P>9j)|zlWyVok=&Xqdu6&ixC9-5yLY6Xrfj0Z0r!W=Yt(VqV)LP(Z zC~K5c^XbyYy$%DTBmK#xux9>VeJt9Nl;f#5#cVm|jOX+v{H5p#i$pBA;=OAO?Rl&Gvbg1t3-v{Lyz5Ussm#o<;x#3jH$2EG;Bo%u5kUMKNHZ- zL;_n6sV8J9sPeksab5{js`0oOh`C&Dp>EL8j3Idu+kU?p?G6#tf>@RA1Z2~iTo}GG zkk_&;8&jjKPzDHp<<)=5kpB^a^QLfPBVLt4E}5-ds}#iFHo~LF{^g-}+oecXh#ORd zMP{j>{r%k!qx{|A0co9j_(aDV*%(d;<%2Y#HKHt=<0E5VD@aL%U)31a)R1lfDZxKH3-+lWt&}UCv4xezPh;c3o@I-yPZo^-lY- zJ+3)ppf9swtpa>W=E#RMw0XqkuOuWkAZ-L3TkWElVXS-eJRL4&-1Cd`GR#+A{u=YB zeeI*QH#4I?12P5j(oG^S>rg{D5e%Q3%hx%<^q;T~nGVDbKGDqJB3_LOaKhjvQE<45 zUj`G}?ovkNaz-9gz<`eS&@4Rg!fIm-oLTF%ik_>&=>1M$Gv@u6ZKts=^KFu93S#kM zaPF8YKKW22ThlMWs=eR=aVK5jy`k59G;$a>@e!_;<1OcDoxgdv!<1x-8c~(i!v(ey zWdL7-+5)o5iBPkR0$WuqRR=M@VXyE&0seT@>y8r5C z^Y}H=y*hl`j{|0ZO~W)aay+NK&dUSQ?To_;`;#;caz5I61eWMBPb4ALa-F=TH7gfd ze;8Qokn?fFYZO~}d06y}YPFtv8=8ly#N@uzn0(Dm@;Z)$^Pr_l?w;D!(jh4hk_xL* zg+Exx*{fGm)tW{oHbWQJTy9c)>%Y}kE~_Hu(sivR7~+Q3M7t_`Jjyr#5~Tq~g(T}RCzq~L9^%wew6zSuAE|Jd(2KJVe&i9hPrA<$hB z&4OpVYnQgFsvH4%ApIZx3lL$7Rn=Nsk!Krx*0J^Rd}K;Lf+}JRN_n|WM{v%QJIcus z$))5Mw@RLvBE(AG_-z^HkA8X5h5~x`)3U>YazR;oSK)4(rYfDVW!^Nu(wyLp-_4(Fn zOuYnRS}KGnt1rN*oV~zTAVZx{lWOGo3yH1)QIH~xmc&ALPJ`lcLX%0=-m6#9qtsr|C223vz$Z`NIQ=eM)C`_V4;G8gt_q$ZkE-f4e< zThmylT{-@3(pa`K6#s87@A)(sK_@6n)7C=Qg`TFm%NsP$5kpSH7BmE@tW7%(orjef zlJNrlpv$Tw2GvZuQx#aOUeNUe(GTbr8ysNUqw7; z28t@nxGWs~^$v+0TxkP#A+1J;i!D~(ff=EuHefo*jp?T8qT1`MdF*jazkVS5LZ>yU z$dt!gnfi;Q#fk8SDD1Wd(nW5Pj`@qg!RVl|G)QP&(52_~Z87#i<0;BtB_U%9cz9`Y-L znz!XErX6tH#nzDmN}WIm;<6B!&Bb4}KM>MiPDC?xOjt#ks-VqavbI_07xAF6oZsl~ zmMBY`@7B=w=OdhcYcR9n{&;E)Kg(s z`}O+U`8-VG{NDt(0?}6-riS>ZpPHHWX7tF#$)#=Rpx~$Ct5yP7A!5ne zM=ilELFrsS&p-I(R(F6VCk#h3W!#TCC>%XbW2Q0X#in&C5vhPHTP;Unh*~<>p4&^K zWo0fGXLz!=`B4)y9jq=F&Epg(!^$qmMn590=6 zDca^WT+q!aVnqF?*1^`HX3*j5IH%qjaVuXEB-2+wbEBl4_N?B?#|%uB^`O{Xamt1@ zI|U#z8{XqD!jxOOUaF(q5gyR*9W{_9dpga1F3vyBl;*%>@8vYHc$u4l8rTBR4zC$q zcQJ^}jR8}NO@?2Ysu9zC!7e+OQTperB@M<$82`uVM!$~0Ea(3BG5U}1dGthlKMV;_ zAWyW1|V^^<+!D+;%jYj%9ts{mdn@OK2K!!&54sezW zP;`odF4Qg@rVhnT>(s6bxn>e$vgJWV=U7f2u;PSlMeB{7VfP~QfOSYw5|gDhdyF<4 zH>+k|yeVu=G)u*ypB-ks0Z!0IRd8&s5jtimB$sKI1gGONWoHK#^z|<7_Lq9udq;Y9 zHP;{X7caL;rpH&O(Z4CJM7;Idup)3{tMi5#nl6#<%;5c`BuSce#Q#&LzDg>VR+AJ> z`{BF3iOg?l86py5HDnWK#6<0Wn8UHwh?r(uSe5LJv+<(Q&CoVbo&QZ^mS(@OwQF<5 zCU7t{L!4Y%8xf55%j!9(#u-)M#%#6d{XqrkF{Z%xEI`Y_n$$;q z0|sS42158EB+O?Xz4YST7-yAX*p`i0j?&6=x=>=V{`j{Pl!g9oS^@V%h@ZeJayEtJ zKk!XwE$-9a5`;30RXLq7EDFw=HeJLx6YQ^YRajRM#Hq!$bcBk#SMOELH3>QuSO}6b z&(d2<(_8mZemjBT2eW2Lgg6{X0_ue1R-J=4;_K0iM($?6>?3R^iYH!dD+9?whVQUn z_+@wTUv-Qpm_AA(NQ%tDTGFHn3dp>xKhh95giX_zexSlUfT>=TUpq!JipYHK#HeE_ zvmm^h{+HaSw*=|s6;eFRr5;m!va9A#Amr!=E(F4r4NX* zLQPxDD#D2t)fxT4X#?Pk%4e(z&%Jo$BiMXzD`=^DUEK#h2grZeI@84Ke@)8V2SRPw zoarAz1!opIu`a3mh%ae7mmte12uX^lr*&h=YZ$t%2SO@6xbxeU1*Qv{5@KWIwd)Au zF~U(@SdPzZ{~&mOWEfjN>haGExveIwYuOHon-dX#&jOE;R@xh1)r~fp{|1Kh09!tX z^E0p%2^7}o$_&>e7-vlN*^)=Djwrs`&2P89HD}foPodTId=92-)l)jN!ATpZL3QSZ zx{09|Zi{TFH@<)7Ki(L4;T(JXHTiM>oBXtI3j~2Dp1)um2R>PP9rVMC_;8-j7$Dku zE?rn}vPy_3HQcsV_Q9?|1Kn+a+bLJmTBtyXYLIyUq{G-&%vRPUn%n_+$-no-jSOZ* z)L#-j;T&oO>J1srW&~T0c6nSl zA2{cl)Y;q-=~k-&h?&y$*n60p44JU_g}umGKEw{^sa0Q;alQ$rK76di4p{~(-rD&VhLm+lZrti<(K-i)eoK zTfXL}VTqYY+Bvratt6C&`BJOb$aL2RaSW}8{w`VFuLQyBpWoC!cgaE(s0((kH9sJUJ-hREwH+ytah$r@+>@og zvG2{3G=7`qG|txGB{!LLXf^{bqAIvSDEAuMK&V%YxJ+u8-u~4U%sDLi3{y+@l7miuQ9C9}d8%^VR`b zZ~x3bUowCMgw{f$C3+A-&j4F#W`cn|ARS^A1^ORk#@=9ThY2_EQ2BGRyzpx184n^( zU~D*K;~{Y}hq5gZh6!zRfQnwC%?B_WSLccpo3iCTg*E)TO+Y^iK z4p^J4mfryn4ayo-k!dP#aW;JYM|dUR>?K^&q&#(>f>2FR=dvb>p~9%Te`=;=#*mo? zm|t!HO}aE^9~$x$5WzNmD*OXeifYZ=*f&!|3`?pqnp&jUT73|6A(%_tBpG7TV+ALc9LGl&x2R z-i)LbWOy-}mLX4}9HUwO25Om5y&#aO`Zh+Pb2ZyL>Kxrr25~=Z2Nt0&`X$z91GsKb z&fxK>@^?&}T4<1Q<23=q#_rOGWDmAXmRO&X#|9u44CoQ<)jA3T7@dU2fAcciClbvd zeBB`|IH)#uH0{ZIrc7I<7PWH%I^j#B%7UG;m#khyrGV0Gb11Qv&ha~?cG+XQiR zFJ{KJGYDM3oSzoY5-6=8MXeg2#BQ+p>4X=*Ke;bna$%VlGUP@W?8|P6 z!i3D&AKiBWPyO?UxR4ZIGW9mq%URnq1ZkFMU!$ISdVr}H0QNA6h_;p1^ol^Z+8M(I z+&tNu*6qG^=Ytl}jWMSH{+TA_Y$+Hkilj7iTRZoZj=?%8scAYEkmxne15`1tCv_KT z4%_K?&4`-4cuoRxhMdscKpL6$$vU-sn7Z{J*;)TSrpKR0+5Tf{8AE=MHM{U6J0K_G z0j%3D;Dmk*k3<@2YhOww22sv&im-A_E`4D8+8IX2k>=NiGajL25D=0A?b$x&b~; z7Z_$_0)gPcliQWEFC8;=;i0GrIaQ%dVYHIb614yvOhZxj4Qv{CEVFw4g_CW1yEWEM zq1}Na&se2yXWtGM?;)6##3sd_p$b}*!Tt<81>X{r`m50%{I+#`ui<1hty3{h0Ndh5X~!I^ZJ zO`~pgeG;%K=t3jsHr|x*;CLOUcqQ^9p*eJdb{?B!C+gfu1P(rEOl?xs*V6yIjN_e(}+QRZ;>}}h#o^|h55wn8W zJt5%PgR~3EQ;Q=BVE1csQuKJsp(m{&X+WKtZ@wzFKfAaPZ*Lcd2bwPJ7MDek5R`qR zh0n(B0*(I93k$YFnm}98G+e8yBO82AJw3qG3jlkYswQ@zszp@O0dH^^)k=~9wchQT znlT(B7YEeYa;KS!GcyB36B3NcV*KCl1{_#bEdsw|Y+|k3)8eQ4+2=x<-bb_aPf6)2 zq$HAfw6>c6T0&hk=d+b$EsAKeGQeINAW4SlpR;@ScafUS&IfC}+Q2jb9==Q3Zsl|hc{{F9hIdyM=xf({Td`Qx=Zi)k5n5cA;TMS!W`RPfX(s>CrJMKwedlMpzsR zhb|paJXWCMfos+n`>1W7mKTN3y4BW}qmktT-J$q)hG{$TJeHQDGNn%B3($LJY25PR-hj8K}GBdXy z0)uOcI#*Q2pDQ?*w&twOs#vsu#S3)WpM$iBY4(Z@F?j@dUTDl$p9F2}d|ERGc>i2u z29H&sx|KjkVY*kPdcmH0mvX~bFESc5)CL>Bin((XmR5yZ-@S{h+BnSGZ15VZZZQ$+ zgEJw5Zp^i_*PtL9@Q^QBU~)=GIo2`+m)R~-Og^-LNUM)vAA80_j!JxUzujVF4>F;% zt}90#JfLlD_u>M_s1ZaeDbIve6(2_keBKwqEm>l(P1y2v^zR2Ad2eNu?XHv(dJ@(y zAG3Vv7&f6v){AWCCX)n<#YmuCF)QC=zE=3Yk9}zUWM*k|nV{=)HKALl)5`e5ZM8x5 z)YAh_y#TPcsZQHwTdAs^+iu$E9E10ODC)hC#)hk*i8%`j<{KK3frNb))&ROlY-gm- zb~Q9<*L0k{npWwIHuzaEywGr!A?$vP;r^fUbhfGWC$xTM=I|JgF?VY%Ovr}jgpO`~ ztWm7Tn7{QkS>FTe#D2tR#I=1(U$Z$BcZ|mvRV_EadvvrF*ZVxGN6(`c;3n=45C?O6 zSftBY-|b)_A!oA^RE_f)989oh*Q3gHU%kR$(6GB>nyX@4xt3ks|X(NJ%TH zIqBk4Pdz>0)C&N6n{?NXuRE7o1%Nn=}SB=d>gkvjI=% z^TxTY@#d~A`)${X8W*;B0yEo#fnNv;8h}fK*4xReKSR-pb4%0m%m+W$N3njIAYc{m zR7~5$^j(jdFlS&-`H zWjD*){P=id-P|IAKU-`7;AL}B5J{}=Z&*IiFvu<-VOb4HW*(+O_)4N6-!nzfzaO9kZW*ZB-R4!n~m@E zePtF6`!?9Ug0#wTIkS4*67>Y6#NMsyrqWFRA+UC9>~rXT6B7zuh(WF3 zrR|YQNm@Ye>ji+G_6qd^z#b+MsqDzEsues}+((TueFaFSDW&o$MD|&M9Wf>y_t>At zxTFIzV^sdXzh{3K;F&=@*k61S{I4@6V9zq(G3INW57Y~}q?(aDBrkmjsf}|`Ov5_; z*#S20%XJ288kd2bs<|zU=|>M7XycU#Q0++CPCK^f|EdO1oee_7a>vCV7mrm8Jgox` zE`Gh3)@#?2#CA=ZwLB>Q15BE_Q_-R9Uic=Eo3j9 zyR<0Wds_>G0QB(dn^0D3brXgIRE#GXP}-Xwv*7pXiNcjnU*_bU28P}H8UopD&sAFv zmtwGWi~>n6@YojU5V_lAS{060jy!CE(%PJEoq$6Z4N#3JeG_<6ofRQ6fy)Ns+acsV zYumFGx+sr%;cPb1_I>c6#*8o+B-UC_5(KjXe;?uMgovz0z=K%kgI1uWEsRalNH7`W(cyZdEZw&Kgn7 z46ot$#X2Rbh*yh~EEcKn=O(D}e4BGWFTilfwNbALAYnZSfhGh7_g&W$@USmh;KHkh zoLYxG00zp&-4i>sMqI!VHz;`VA+uc=99nnP+(+tb8m=V2UxtEgwOnw`7$z=MR@~Q~ zC|10HEGCGc$*m4_k@OzqVEys;ZO%L{!WMu!ZMo!{hOOfYNjc}j0kZ4!5{uKVbGK_v zs0&MrnV0N3>rPkvYW}$2*tcCkqVH!5X0&XPMwD}&v7fv$VDa(=Xw3=(m{3>Ubr2Jc zr!`8NWu?U9B34FhP3@N;l98NS5xE-+;q0lW2b_8V;0z$GRkbUIVu0gVVN9qNYRV|b z5iG~4GhTNL)if7#1I$3dpwEB-zdrD@%RB%xA;;sL!I>c8j4r@B{`USE7+QJU)ZR(6 z@B5K@1iCuy4kBd+RU)`XjSn)IaSY%5zTLIe9wu%&mNW}ctZwQS*TSoH+D2Uss9mu% z5(AK0t;FpNFlWz?OEtNcEn<}dqYSVu%S?NA5Y(ujAU@8NP_3O0ySo?fPY7b`%4L_2 zx$?*^t$eQsxS3$& z{kq?MYR#Hxd{6XH|(y%C65`S>tU1e_3*pwKNk+?)}dQ3Y`yJX z7lyjngV}W<Lp_q&l*A-0B(ISSvvNO?QIi|)XfmqM{~6lv#x}A zdz^N5?6+#|QtXV`I!FT5E5GUV6P+&-F^$w{jth&O zVB;*yQEd*$>g3gn9@N z?z8tEgM+7c!-t_Bgk}c;nRYt^2oq+a`!QEDFpRcCe8!}UhzqW<0sQazb%_d*-XDAB?0_O-PpD@J`W}T4Y!Wm= zorI4+=1vjj3O=a~NX6^^$G$?$x*}#RF$a^K17Y*vshooY1vt^W0D9Uh)C&N6oW|pk z*()LJoW{iM4NxVK&^&e~+a&zaS{7 z;}pVV?9c8n&wanDP)5}HX$EUQ2NUUbptxy#o&g8I*l^tap#gd`bA7lW;#y^`&^=FEGvjiKTS|w-u)a5L}zkO~A zQA{&6(D3yDOEFYi8!5`@6nxQh_c7i-V6xqM1pZ9OVO|gsPeChwkWH+=4+FeBaa^Ag zQY%NUXkgd!gEw=Z-3Qx?$mGK*=! zr#Qx6-Ie6e0jzCoAE>%j!q+s!MO#OkdrP_WHaY>q9uk78C`gV#zuCU9PrV=AMzDew zVm_Cy--2a!h?-?b5G!r0YM&1G*Ob!6OoZ&Irw5jL0bq~Q_MrupR*I_WnU1&}NSle< zn54GvhcxsQsPHp85V;oSvcYLUX}I88sRZK9*!4_vc19L$xS3lz=B$v4g+Av3sRddj zO_5xnnV_EIPd!1}_d>MpqS9JP!0MI^2c$69cVkF)1n)fsJdAHIl{Hcq&C z)=TO}Fx70A=p*86Plc_&YEWpuqp?zg_Bnii|~PPyPQVzxNb={X-8$PF{u+E9PPUwLcIxU+geAphWkwOf55DP`nehFW30jJ$ zX!?EF9?*ES+NkXwcbRnV7dIp%vxLMN`LfufW4zto^T5ZLbNn;$iC3)ZgFt19j4o85 zuLIE2o}pd<*yFTt_c&MRDOztwbqsdqUdMdZ4+S#IfXDVb=L`Vq zv_o&-*_mByN~!U*_&`k&>eAoh{kW)r9T^w-T;3lhs7?@e$Z1Mi_?J*B#cI$x-we}i z^vK(;6SUnQWPWW>{!BW*MUCo|rZ4nxIOk#Ay{mWu# zV>Ax{{=Ttz?JN~`vo}2l5Lo45_skf~C2`P8{v2!A0vv4;kyg>-3lkcC%!>~}WNuwz zzr-5)`hy3GiUs&tS2IT*+A!Umafs@57m_H0ku?%pb&M5kk5zZg(7A^&@Ql9uZ?Xwu z)l)C3r84-Ywa!P(L9BQ;Ftxf5v+qQ_?dz`d*)QHVzrVv@7wUW#to}o^IJ?bbDSVv1 zFXNdI0;T_5W+PS)$V8K+Mh^B>D7zxkTL6066VwX;dz|#5FRQfW6iUt1)9Uye)WwCB zN(Q~zBb3Ys83A~XzkXnlgK20`;;+^Gsiwghcp0;F);n|Uc3`Dll{o>-^rU!TP5&^KSsVm}A?zud~28)BMBTFh}#kfdA0Y2>mg$&kUfnR!h+ED0!Pw(+mSx zIu{8BVpLD(a|-=h!ad;Cb45C~XWxmL%L)XIS_e*Ddvi_LQ0+d|>gA$spLJOZ*0Pn1k_uALyaMFO zY&1Rf^uSW=)}Hn#>8TH&Gx@daU!e!{KT71Wsx$fyDQApVwUX0wkcI1!I`I#!YF%(n z!6V0F9U1JPQ(7RDhd&kYzUAM*K4T7nMR_x%2dcOEvlz*VM zV4#YICBTIMd@jT!jZVNYB%ejbhv4KNNi>ST4xvK)upRL}cWW5;OCWqV<%kPlhMQ2$ zLJ@9?&aJFsDT!W;M?6*`Mqy<^??#rq!F8r^p(tU4h~g`3D9WAifiTPs;B_257GTzk zb|TuHn_s`y?u-C9^M2bUuDz-U%1QFTO)oZNG3Aa$)^Z9-K@8!oyJ}xew?tT{4d@J< zywBb*mclonF5jE%AlXFqs=wpM2V zPLFLcYlsP`)t^I(Ga!gfM6F$Jh&^6CwvIVj!6(~0^ng+?0PJy6)tyOg-Y1fFQfPp|cnJ_N&=G}NK26n;1u|hJTTL5^f6n}8 zuw~3Qz{OMJjQ_gD0B5!iN@m^{lm*(|zhvk5Kc%d{3~fIQX$U!aF1{kQ8W?yH8Ur@( zz2Iqp&NcmDA_)f13S^AR|!qr+Olr@4pTvEnOoDCcat$XOoi$*BTd(=|w0CHJANRBeNmcXY zh5H`P`SQnF%LTd1^PjDrF)IV>+HTVoi4#7_sTmm%wRp++wv3q~Di>`ML>zNMX z0AhU);0q*4$xY;*D%joc{fOr6y=1;x#iI7>+@S4p$11Zr=v2|9$YO$#wY|PkxaaoD z)*UT7o0XldO50YeqF0ri6N3>fEM-Rf63b^doONzuWnZRFE1a)JJb;IP*LEF{SiSY6_$jwBHaDCDR+Eu%JI7kTN{<( zB8(O+NHI0m`Kn5)&=#l#+FhYmJ5llAB_l4na>&xYL_Jy1U695X*#+(B1OBy%d9&(( zR`@CAdwwt3O#5F|At`xxO1a_(ZqGOVCdZ$W=jr^w(RA>*f!%GO-kmuY0iUQJ_hk-$x?9S5_k9r;zvRBT+);|DsF zD5zv)a50n3m!msxN1Bm=eh3ntGKN^X*PO0o{psQfOe8=&70}%s9SB6fx}PB^xX=>K zIv93}@C>6?7+1wE71P+{&Ida{Qi!L9+@rv$PdEsu{rrvjBO_9am0#y2en;V-0TnMxZi?P4N4AukK7Uk5vaOhk?CpI3NI}i2&56Q{}yS&wr5LN|2cc!FA z|Hy6fh=2Jska6?1U>C#(x2ht>EWfn&_TT<(ac!57%Q4-a*m5SrdfSC z=%>*-2Cc3b&w`nZjag8Y7=N1q#r($TG{PAY&w~*HDlOU^0lkB|{t`;vH2-i{SjX9? z8UUM;ZSs6NnGGQko->sd9T*t}) zYZ!d3AEkwqAs}(|_ z>&k`Kj=A#jBlLJnYI8Sc$({xoi|@~gzpQ-&DkX%tSrMYy!p?!2cm{%BBfbFD(*n&e zuLgPwDd+B}U6ncE(J6u_t@+5hu$J+u?mkA%X&zYUl9tpE29;V9>Ffa?e(M&uzk8dd zgLYVv6+m)9$lX>k?Xg$8W$%Qq|NE>pjWC_S_6a!m@)1`&VNA2D=(doCbtWZan=-~~ zkDGlDVl8Jg;q#hpKAV#TzW9~5rYpYb$s%&=++{uW^nj7G!JhUq>4P7sRH;%UE8JPK z8pAf9u`^IAS~q|V1EkP)1@~2^kP^CkRoxHWp@0~B4lWNKEMYB>!^3p*gt93UjyP9!1(OgM9umA z#V)m`TrkkMuk+`6PIpSAL&_&^X?eq|)_M1TJ;lz}E-MFMyaW>Ed&O$!cm31(e#MlF zgN6$@exa%br!|AZ$~kb)EnEDzm!07DI}7=sB5koW!Z`t{n<(*RaUn{?QO-7m|B5|e z^B@l9COq2p-7T2F(76{d% zY%jr^e&skvKfTS;*;b^d`e}|S37X;vUfUCb#Zai%i-=gvAe%dTz6g|RXDck91?$Il zc+;<)@_S9FLUhiB<|yndBB(0cWk#dl7ytig=(dqbv59%y?g3u4^S@v zoC);gmsYkXTWXPg9f_;!cA_30X>C#Ib@G>pEOgAvZd3z75BRhHLiMevpD%A$&a45( z;4Cm~9w_`q|5MFY+jW3;Mob5o>d^6lIpF%M$z$G8G0W*prgaCXDTKQZBTFW=;zPwcR?qKsAyIcjLl z;ze?zudWeWH8=-a^|%5L%$q$Mst0ezbk<2FWnuZS@X5FD@aEs%WO^86s%Xllkh)2G zzN@y3(T`B7t!8~#0tf-YC-U?xfSB!>=Bzqv$KLb3Bwm!Ln&8q|XVlk$uyCZAX+GA? z{_3v9D+ZcI9n)a#uQ$SGE3!)ep<7^ z;Qc6BLgS1cdWT$NG`GMESYwjZBmXh}-C3Kh57t(^C+a@$mBgJVl|Oyyaqjx`Hv116 zhc7Y5{si+ChXuyx!>Lp7T}Yw0Dc-NuqF}ZW)cxinbae=7QAP`uoGWkq z4Fzc8b0>I^pifq4%BspyN&MAsY;e{QOJz*rg_Dw9*rhsZWKh_1eIB7o)plc1Eg(u_7k zRO_jyy+FMHa0bxv<80T#+S{AjZi(w?;(J+Hk{JsQ|c;fc+gzJTzI;;!OKR8)wQH-T4&F!k3c{{4ByQrTYCc1DgN45Mclq zrq)QqlF+Pir0{;3#luuG@utn~VQq9d+kSZ`ScDdz>?XyE15M9Ky!8*Z`N&^vvj1#j z<6ZYWHXva!0m{t0EMRr>!^NPOi^Ka)w%-YJw;;BXgb)IDo`Z`))j_R_vUXVbi(lU0 z_(8XZSchi_-5o=0uN4zCy1ye9GmJf*px`fDH5QretJod32Hm#sk@~+_1K&2x&3*To zlkFwzqXMeQydu>EudeS!*c>*z>vz{#I|QXvND-_!n{Q3FhjO=sLUz|dMra!QHy8?| z0W<>`G(r~pJ;)a00B%i5GfP>M1kuW12uo}5)>oh8o}KE?^wC6re2>lgmvF-e;=!I~ zH5n9PbT@4GCjs`fXQ&qd&H&oKpRG1s{C1?-0%ug!nXPNS8XQS+*FXc4o6xirYSU?L zs?IgulhL|H-uiQD8JU}*Q@7(e_M`w119y9# zs`~lrrdXK|dS=pB#Vj6Pi`{v%)rjvJjrM%b#KzjGZfc)XE2ox(H@`Xygy87&6-FGymZFw$-^^?J zW*su}Is=C9zSlyEuM{eN#S9TML2M;ojjfP&hys~1vI6BbfRWU&U? zR@q*M&Ev|+W6G%$!uoy6_6cG4l+bPo+9nbMQf-h)X1XD4tqU7RmGxuF_PR3NvVPb5H(O#2ZC8! z#?Q^PZcP33=XwgC0C5UiY7uE6T}qk$1!em;5gAdn+WGQ{8KaDcxJKoTS{Kyw@4=TekqygllXtir?EEb;aZ!kIOsn~wR6fjOWz0nu|CXVrC$LdcrmQ$ELW;829ryQtyU z+TW-B4rxZ|-bKPn5G9JchoHdj0N(U_r&w9GdsQK4Yj0-@cD8N3R@V}%=QgaJn^@YP zS=}d$7aJQ}R&F33%VH&aDrp~D2 zrIEAvl-wgTrQ-uO!=SvhN#^4Fz%c~P02E!f$#{;n=& z_MMklJ+I-wIho}pp;-*gw^}4a8z5^I3sHfll1f4cewtr}?d_J04Q2f<*tolJ>S)V} z;{{Yn17TrB$&CpxDZ%65>Wxn zIafEFd!%8sWY@A~mJXfTp0PdY<93ULHE(Vk1=G}BI@0QvG56EUIK!eslcV==;=Et0s|!y-8G)^y;5=1a({4!h38+i(j@R!{rc-KbfG;gfc9oqi z7>yG9&PyD;u;J{B8kScwwLscZ%8tcT%rIpuQFg$U@@gTPF-EES)8+E+>X- z4VF;O)*B?V_0}H-I!1G%Y}B zm~OlP$(wVGJ&u}H2TBi(5;{QxF=iQl{g5sK$kpGPfsoy6W^C{0{Mem&$E+9_Iz#v2 z#V8a=WB8+2o+6KwCMkn)V*fdrLzfOXa`AvP0G$Y&D%1i^Hn3H^Kv6XxdGrm(9}}#s zFpxdoEH1NydVD;A-HyJo4z+mSM+sShoME!14058J@@$E@`RE26mXgyy>Dmp!Am(kp zmDyYxnp-nbd}t;(sgKbDEN5WaO|-qRmriz#mv4^O?t-v>+MLYx7j}@2Bx@%*SbK`# z{T|hg1a)Bs6K+gUmcob$F4(B-mSTPL^9+(! zs!}=f4Ij-3b(;K&%O67lxOi+i#%V{w>q`bMg#= zD8V~p?ADOQ5}3)^;}5#ptNs`aWx9Sk7oTag9Y3GD$!8!0ig_U+fYqQZCKtMsS2tA1QYq8A!zJJL`sPV5{bwnqyJx-Xsiy~) z%rV^4o+lA0yJywoY_;u-VHrac=h3Q|i5AQZEQVgOmpKp!W^Z-W>m2v?F=Zz2Pdv5H zp6Abr&rsLw#d~XHbM4n9ac$LrzY`|>hY4JQ3>0aS`}*h55HnSaSHHv8aaLhZO)~L5 zQEd&?=SP{jbj&*7O>_d3TMay)J~mq1XXg=EJJzA-pU;1iZrwW}Y_3XQw}-poSi9Dz zIHW494K7f2`_`KCF5ACIRj?_K?xH^B)wg7sR;I-S2^ki2QP7o2IeSVue~MfCRgB?x`m^VZQLLIA3N=%6OOiEodV(ce`VH~E zJv3X9DU&uljnOO?MGJK&p(Fg7&)qxXy`N6pvM!vuFLUZx;+|te?l@Mt z_rAojO<{X#Ckd)Rj@&;{R9xhfiunFk7j#vJE|^xD23A+LIJ}tZ6<1z-N4s#@ufFr` zfB8qZ+;Ypwg@uLktYi+g+%m1=H zD}7gLSHZ?omo$1ezp{>mj6wOqUm zON&a9f=-ooGm$qlX{yv#C<9A7OyVww*0L!`N^0G0;S(Yl_$mgnF=@40yn;`d7b1$4 z_T`$rv^OFPqT5sc+SfL~yjz{vFx{%T;1XE_v1TqH*nV@1k<1Blb88$zql=%mRWxD% zY&?+-lSq_OyAu*Qprqx@qzZ4nx$y3HuW-xF4R86VaBNFh8V`}w(hLfD0D}yJoDnq} zTCJ6wps1xQ#<*e}=H4<=A4kFjM#0@d2&E`OIe;{`Tg|UF$=dR2YqfCSd|j zYRH2`tt|s7q@m@Gr)2$Xym)Vk{<&)+i%`^mSGzU=jR>u~My6GfR@o^TZ40FiDXp+Q zF{{EAhYQzTuAFsV%l@;JYaTM?QRi>6G-@bY6+I5JJtWmBZAvsl_x&gFEC*Z5)1k`2 zNPR6`qwZWPKDTC)w=so4VQUm7_u0Wc5@z@`6CUHW2_V*sF3pr#TIW2NtC|&|D-Px4 zz3$`?Q9s^SO`tI2h3)q`6)1&tP|($uqdNos;O$F%>?6vb{?(Y1ZDwIySXdC6K|-oh zQ(;n*tz@;ze^smsVXT|mFT#=H@5~FICMbmP7Xp+BUK+{1of&9raaV>VKKd862vStE zB+{fAUws4?JLC=QJFGy|T*9QMrRmv{Z|v^Q&iPB)zScDoyF zTwT<5X!{B36pPp%Ptj$i9;{@958m4Fj*l;L+h-E*`|yBw-!>p2EDWa%#xNcTIT;An zwpszVlBu~(IZ~MqUHUXo6RH2?z8SI~O)5k`<=`UA!&6~!YI0cIfQ^t#xCJU3Apkzob1tnwd zofNe&Lcp|vc;D?0>8wyDm|E6{TefP#3)| zH{I`R-_u?vJ@w&pwtw@{znWKhIyH?`@(O&+6y)Ijgq9UAs3fjKR=*W#?>23`cve7| zZ&N|4nKG4x<`Kvm^~CpDgggneM$R4*0!RQr0EJ5RptE?s)wb_q0$fujMfQQUSjBwY zmYv`hg=u1<6&(q>S{be-Zapfz?!5y(^RW?cde@LU*9)UTLz7y@3y_+MRG}?4De9Vf zOouV*SuS|=p}IBX+pgxQzs2M708uLrmbEoSu0JpLPxPjVqch8 z6&CyuB)if1X@533ozM{TqyEDOsX&Ta1d6}s+I#r&ef+1-iwk=(BUO-8pk|~=v=nqB zp$7~3$do^O?;@{%^AfLl>ySYf7M7B5c1wJ|H=0$8_qJgcI!YQ;YE`LT@>lhf6A&`Qls-pwg*Y@9l| zabRu#M}OQs2d0w)$9x_E-G`{<036%bo-xEWk@Q1A{)3M5UGBh0@Z;-$5_S9 z#4aep!d0PyGGeDZ@b2u z2h`jhUJS`<1K8*tIy}J6+D}0B!;8e{J14VDY-|gY^~{6LQ@;93clgF=EA_Zg!Fm-X{%+(CR7hIIPlZx^cK(&BBt3I)3Fk%nueq%)1LTVYF+>>Bu7XC2QN?Sd~E(X!Q4c> zTyZcpXYisk?b}=v0h_{f3TaYE=O*NE%lmH0y!I`t{QhebC)zQC5$szmR1w zi&Ibs&(O@g9B@?&607dfopmOFSIs={+E)kI@$GP?ZJL<_q{lcI_?vY=oWZL%TG+fZ~$-w-a*~0+28RLlK{=JXfW%`#A$d4V?CUSbNs#=kznNZSg;%*M? zzW94K=2&0rzD-K(4a-z;A;ARzynkI8?D@SH^Fw4x#2oswgqbiX7W5lOKPO4lwoqzq zpZ)Bwde2K<@(bSpe5Q{J=;`lE@vZOa3?lvWZ@O^$$v=L5UDYcRc3!S@{ClSHfb()^ zs)|xdB~fU`-;Infgz41GzT%8oT54KA>L%@}e`icIIe@F1#4!Z2KizuZK;Lmje>Q5& zmM|X&m~<#6)FLpfu&*Vr32(cl;ZOf;l|T6NhEp}Oyi{3UoU*$+Vwx*b6GaOtc?zFG z&Q{pRg3!!tt`0<|g_&>=T40c(B(VtcSxkhD!^RsG{7xI0eJ&2baU^j!aNjy zW@RXfNciOag<5}PE*P?ESPQ}w5T*nhO(TUmO=x35kO?IZm5nW!?j-)j*KY9L&)H<@ z-o#*2poz7#`7qFqaao)8=lmX;pO3jE_VtS?^{}|P`y4(!PQ{uEfuU<4M1k(wGEK-O z6JCF7;iq17E_WUi7FG*d5}K4M1=`$|H>kxAQF0qgxNuB9@s@o!_FP}1WRiy38!nLe zUiH}!=-y8jCW>ICfo-j$|2~)1T@Kx(`X3^ZA31X|#kzaeL7bf+a{^$@*J%NoahnUJ zDrY3Z-ALS0p$)7-EWT4eywR+y!%oPw!w|joa@Pesks#HtQ z%M~VLYO3fCkP6d_rpO5X%ik>U#y2kWCvP7zT!ekAg`6vs*0m!%{mr|fUA007SRZdF zSRJ{Gp@TWss4A62Hov~L>Y%6O2HL5TvQlefDR`(ceXsv+>1Htl78$4{i!n&%H%B35 zC2OKo117RitH+3o$2Sy9IkSpBW>54uds2c@JP1_< zO^HFR6e$eSfJ&ii@@xz!3bfGHOjV^6D4G$JqUK(*l-rgxz}9e($uc#oL!(G)8DLhY z(a4T0E>w1FL#mcdGXWZ4P%G*QG>U8a_?7~%gW-Z;_nCS&M(k)CXiABDK7Yq#ePjJE z5qVxp=?rXunNk(V4UH;FrA#t1 zQtII;ZB6{ndlq=hn-}(LTY)?k;+5Ps~kSJWqGZzuz$e8eY;$+mN>LeIj~e&98}VD%5ape7DJw*SZ#o| z!gMlVV^=vbX}IH9;WI}^+;gljJu%|;&kMKR(eS?8rof2hp%sZ5E(${tYW8WUR=Xe} zkSzF+h?&6VoYbA`Z0p>8>FgazaQwde^tRh>`Si;2zNhx*4fOQ)rEZ_~bmow%3V-_5 zmrQQ`vp48!daxgt;ssZnQFJE*y1z3tF#FWNqD*M^{UWtJim*nlpNGwtP|`T6+nBy# zQpHRV@LeO!<#($<28vqYA%9BU5o*)Y98q=`l;3#c8n1u-fVY2U#PVRuXf>lionU7W zh@+iT#dGc546Y&`3}uWkiTU^qXuKaG0?qdmIux4Ehqv7QieyXiQ%y|U%I-t}pFm*0 zXeUb15tHo}5#_AK30Gd2x!`=^;Gx2BIAt`RG8hWWi^74$meEpT*udfvw9_f$3Pl@s zYUbot<&L}H)X9cZ?U0j4;q$j=K6ESGxnEzKAf7ad}&QrgCjTXv{-hz^;{ zLD<(wJs3`H?X=iT=7DhEy_v87@+rUg9Y@iRjgj%x=E5e*<*j+)aW-!{X92-$@pqz# z3z+Df;5IV=SVJyI)M|x|>``LX`mUPtO)psCt?wJNyjIZG3QJjzi`C=D*SFitCI$Lz zKqE>@g^kV3&TgjeC^tT|aP74duDZN(!)04sd?=$$OS?TF?H1T6$Rr^}DRqEOC+@Py zkYkUV*lDL&+GDG#1)jEEm9c_04LWW~14R}Sb=)GuOpEgI`^LQcmc$*mEVDKG3jX9z zUdQJ?e-ESanAO!4sun+IU>2WX787?#%zb}j*3B(o>%FjLwK1`u)HkNOBNXUqPL|3Eli< zgrPx80d0JHxYisnI%7ez2zG-Ei|TJRBU-5YDjcf({#zD!-5d7vmJciA>>2z~`%ag+xuzXkuqlId2Vq@8!oha+@MeHWx;U@B#;& z`}?b1yS9~{+i~*}#AyPF0DeTVhK0fQpfxAZHt^srp8i9J`0Qsgx@fMHS_>&9Gp~ER z!YsmHI)8f3_Lz-zWos+*W!DuR_4qBGb>lAQA5iLgMNVd9OW0ARNtM)iKT{=FXlY2P zP$j{1CM+kQ`ax9^gZ3PMb>Em27iz@zeorny-hvv&DF6^b5J+anpMCW5o)On4t_KB-d9tG zi(PGVTthQouxr!K^*gN}@lyenQWMfD_3SBWU&EW<)9_#4w9Fs8ZNzA)vbtQTrBK}Q z*(r$*@($hhnMb;J5YzEIe}68spu?FtGk@1nZ0s3h>Qimm-CSaKqverTOu6Bj!a3(m zdD7L}TybuK+M+uGy9rJ~-8J*Hh!ymaWPW*Es6s(g%!8*y`YD6iPo49!O0#rHyUBW4 z)r1_uKw^sdk^%NrWLeOGP{_RP6T)A=58nOWMgHnzL&gi0Lap0>6v}RSXi2F)P4N$0_8mQTTQA)P- zNX6n3w4jpBl0i?Ps!L}!J+s@}3U<&P!g*@Tt$ps#N z@gN&8!9hp1+S*Pc(#&C_vD3`cc`0#_!f8-}pX{-nq!0 z^v}&3N z#~`jGb-)>LI0J;R3}mblngvps!PViyp3!O3bIdOb6rmK5sZv*j;W-oj^3wzU^XvEV z`)?8ki?A?m$V^dnL#{{Jn>KG6W;{>2XLan}NRoq=F+Pj952Z7-{n*CVnupJkF|+k_ zN03H%-k0t0%*SqU-9<{-RnmGx-B6e`kd!=1s24ekwqp*$+-w}!UK=pT?0vxxh_QJ# zbGaQO8<|<*P9X_WXL@os;!cRM)sZSp3ZznL)|7e{Xl{AKM;7>#H?Q%BZ_bQH6IPaC zr({yHzyXP>jxHF*IC3&zM(o^zd+yA}XFBIQCWJ}woKK-smvNCj;Z>?Fua8dh`-e&$U}y!wv^n|v^s@`Rs-sr@xctzFIwCw%t3?*2oq|wFXII(- z@S8U+^XlIi^XX%W!)waakxB7Ggy!bOI$?%mw4y1oaV+!h-@TKwKR;kFvcN_yLS9gG zu|-xOHJOtW;nPQjkKU2E=Xk^R2~f$@?FJR4-7QcD6t&XHSy~t-(y$?oTaFwmJnWK9 z9(EoKcHvl)xbj*1Ie3o3R4FNUa+WCWIgfL4Y`ox<)t)SY`QeRLtA%L5Zwd|eVVtJQ4B z+GdqVh4uG3rkZ@Mz33B?&?M-+mHfTOX{w!~sihVqm8!LQ?l*p8diUSFhf0jwTQ&J4 zr137jwbaU42M@Gwc*E=8zi;3EZyOGWAL$Pc>gn%Gy#R0qld2|t*;NmnuHOE-l(>W> zGGE6$Kr-Mea7*k5U^Uev3Y?m#9`Iz>&w}gf)XbZl-Lff(Uw_*IzxjJ>+<8)2UTPVS zmC00TB_onZY6*5p-0bUGn8BeJ(6KBwi?;8g_=CaW;N{i#+^nitnOu#sela$0J^A>X zRN37g^T)q(Czoz1gNgZm#jh_8u2N^3Totb?;H7uXwCi9Re&NnE>+|92wPXzDRVh0Y z*tN7W$}ZwH-pN9mCKxv8*v=e~#i6C{DORzM?78OZ0!2oO)x=kUT%cyt)Jv)`QR*O( zFI3+2i3NW6XIEICRvJ%Ln+b6d z+NWE*_11bu{DD|qpgS|&r+4o9R^G(cZtqjnuBw*osgo8_AIY?PTS9dta@$7}k2oDY z;!a3v(56A8#Ul9{kQp>CAZyp5mwlOh(Z|p|KZfnIPz59!Gk>W z=}&L|=9RDdVO>=(1->z@1URMt3ysgzlx~%julmYiqfg%d-`N!Jr7HbM$BjC`>^9jo z7~?GdssdsrYISpH3>8@$v^763hYIbY@E>37^Rds)@~umH%+0sV&16QcYbWmiOcUj5 zJH{mzv{o)r84qY8V6SM~6JslZdlLiow#wvucEL0v1L;Js3hdhv`SJ&Ma>9*DRZTEa z7ia|2@~x|JX24igFD6%ezGz&a_J)f2y%A)P$Sdo_`6J+{2a~p(LVeU}$j0MLGRPKP zr_=~7Y569?{!3_f{gmp)AChkPJlYGyxjwBzpz+Fv78qGD$8J|11JI=FBe#JzB&y?t zSG;?UfBEnNTQ_Bz)KZ6NpA%5O-d3=MR|$j+`}g(u^Ox=8)9>$b!4-Xab)xP?W@j6# zQIG>EXS>X%2tebiyWKd%wN`ti6E(_)fvVlS7!p+whE3?+v!iH2RN3DcV3Y!BEpyiC ziI4ujJ?Kw*gxcLms%UVZd9<4WB?j`2A=L?wL(Y8xVYUbBS6js(5hT>zcx_B(sZlbL zS~Ns*|8PQ@q51l|$QS<$aZ5mA0_~AK#=_2#_*!^y=EOHnq*&m(!(@VPqg1E9lzi7e zC0efSD(Hm@Lsh-qkw+f2dDG&Cu--I?hbho~tvx^z;h_(GNc+0iz3%%G!V7`#P45Dj z(*Kpl-`y$QDoIsm+SeU@|9r^)f0dLDLuzMi1=}Xf*v|9|gO$!lEE6`y$f$uh-x7{g z&cCS7hd(vL2fox}ZYi-eXTIE&4BOP1eQDO(weE@-03OAU`FRUy7*@FYR|Z^4?E0lF z1#CFN6}}@4PhyL z2JC}DWYgl1Hdmx%i(xahUV~V0salu;sO99_IkPR)i7I>(N3B5Z*bsEH>UU*AuJe1b zAH*8GbXx_Xgm-$1zPB!ntx0A6oeU37q`^=SoEnqbT?nu!_lSOc8dxrV6@pvK%STA8jiti7gr z4F0O>ZVP~Mop!Pq7-zctf3R!^@p)t`5I|5NwV6{7g-4t+ps!YAz?Y-@-P$lvSO1?s z(nVeyKsao9bbk;f<%sN2sw1C6^_&Zl2mU|gu%n5~7a^mokTd`)B=#M=YY$xy7IGPT zsLUXtvI;+=UFh2XB8MJMe$<<(o_aoPygy-YOQ_sRp*D`PZe^^+^sJtx0G1vZ_ba!T zA)k879`^0=`Uc6ahIZ-6bI3s}8(I~F`T5K!RcMAPBm--c672b07EvuA6F*nDx5864 z$7jLDRK^*`Qk)421apl@w<#TP77|GuwJGrNzg|YK$!L{Kib!_WRP3x(BO$CDOMLtn zsP6GpLUT1CtsvE$CCjOrI{`HllG^TjF9zB!fSBbXL#Ux$LDzmlxZT5uPx((`J{cKS zL{SJ9FldY7Qqg4A3=|6rT;Tc1%O*QiHPch-nKtAbDtH7E1gbQeCBS3#o3QBYB!l@ zK?ebrlyrRNjX#*);hBsZOsPQ!5CZjy8}~jP$;i~ zo9*!cx5D6m=BH&|cX&4zT71wkm?K=h0-P~(|G0zo@}S~n&)H9NJ!talh$nP36DHhT z>zA;2Ucp$;S09s)1Ar=!_a>@^2O`h<2H{SRg>)66-ECklJ@*eMi}=@U|78bo@?m&zNa1`*)7N}^E@Jf^1hi^Ma!ZJfp4`5VN%d@*mv}{rdfHRMUmp~p5s%&v~ zfuUGW?5|SM&m#W2CGzwrTwZp znqK}hrJt9k0>G~TiOBx2;q-UNnqH?_a#poE=Yla;d&(Y;k!Dn({eT|ZazQWhytiy( z`@^>Lns+atRc6!Dh&otyfLO3N!BYi0m=ud_b_Jf?miO#^!y04Mrd6xui5CWr`!=zt zZL>%?<8?;d@#9J0A``^HK<)D;C@B4&GFL12JZ?x`d61qz=Hih3XTx`aWXNQr@g zkS*&#glcsY@i8Ap?)O5%=qgD2APKaMEl|;fea(>o!3qN*?q)&kir!%T5G~Dbygvqr zVYCa?o$%m)Al&6Og#8UE+J9J9zI{S%ElS6VSU{m$eX5+fV_xIEuiDS9eZiv6)m$vy zYGgdf&MMxO9mL%Q-P)D?!~_A;@U5Vc?W={W1u0->BQlWn*R@E8wiXt%VN=iI`)mRI zWQDdBp8wbZN3H~7Z8t#XU_w)t5xExF)1tre9;!P(23fxdsVYJq8JMTmwC5_JnrKG@ zQeLCY%QR^~s{>R=C~arf&s~6t3vHS`g;NP}9^L;F;ys>AIP*_nzk3U$wfKyQY=Lr? z?TEVNAy{xCSqK{{wm>sru;)&9xc#+Fn;UU?#m=V*XCi?ZD{@v1cIi)% zR;Dzi|1(VmfL{R;k=%R6$FF0Ld`Ke)DJFllTIwm<^{CoHyCre($PxeW^*PRX%61;{ z2OId(k1Gy6M2Y=O(^g=2)|iro`ySOI)eUSs)ymEM0HH(VQklt`Q&fKH}B|g07lNDBC$#Y`rsUw7HM=j)SFhxMBa%T=3Hk z{OGbx92}kq^QY5PN0VeTIS=eiim!!9Qa&;@tnJm%>_ASt2l0+CA@0wl=tZAg5m!4& zK2H~x6?5k})74&&aNQ^UeQIEXouu4s+`ReV+S*!*Rb}h1bQTpW!=yB+MI;IgCRT4s zQ~JNrQ~>yup^XQ7TTgs{7|G=%Nl0t??L#vQ%dst=J<#JRuiD5dPdJ2s{qP*As#shy z=9N>RDrQWDEWw0^Y=BZ?2Ha%n!0KgU3#n-+cDad>!G-5ii)11GPo;7om=^n?^8!s|aBx zK>A{a!2oW|6I~Qer?9PU+VO39=w6R+(h_78X8%LAiS&to1-(VLh zAz11sLJoo6-c|HbA44{YWdV?^F9E46W@Hp*S=F=o+kg5RXPx~>wjO#WcRcrzJmNQh zn+HGQDV%!N1K6FWtn4jMSsPauwtmDEqq{q=LB51sG`Huhetnh%Lb!R2d_w|{hz_k1Rx5|~|3+8jVL zRq#UUVo}uEn&kk$_07;93&^7YoP$l*scZNJiWCQz0v-l3nynuQg?T}+i+JoYVc28> zLLG%*_(_`#bc36Vl_C%rlMQ081%cgrdhGb%b?A=DO7V)@l1l~qVo>PjVDSKA9M*)F zoCraYR>-}(P(A8jNUN6+V$Z7LxgXa+)Yj1&^)aDnZXoo~>TtBTm9KvJJAC6?-(hWa zg`GFvNWT^~Zaad7`At0V0l&r>rymJxR}ta>p=WUw4$@hpl?P4%>f;%{?@7eoMQBKt zT_AW$qs3u#3by|U9^{#}G`!#~OMK~vv$So|R*PF_T&T#v*)@23!leY;v*=cARcKma zFtB)nDk>@2ny9biOfOLPpsIwnbt{yQtBY)(5M#tJ7Rj(@pYXl+?dOmip{gzOLexM$ z?i-SS^8oZ$mY{0&cJ8#rsz^@RgsvLOZ*(dalzv`23`|8{&|Na5OHT&n-u$buA(B_Om zthjI5{j!t*CJ#93ipDquctByN**MbV`Q{nxa7k- zkt-{xOiP+roKAx)aSJ8~`0GAh4G9?uv42P8(f^7rUuJdo)diZLAq_?O%t%PI(kJwf z;~nq*6z_QFhxy)jf5^gyIbu~aJJTmbOUuieSzTL0v(m4Hm%jAHJnwfNi;ga*)}gDi zz6HTMN&}cXi_v?26X{=usFJ(td2Y8COqfw@KeMe;v#xx#A9>2}Z((lHeAdMZQ2Mao zvTP}9m2Rc!oh=ywY3^y#9dEK-094QEk`wMTna2!Exo9W1V#i_2bujlDt2Dq z(>XG;5-~Q>Z zkiqxJGGl?Foe=BmoE2Clj}ApY@BrGaJ)#GB;%}P;pomnHL9mK60X^xZROkL-t5W?` zkiP>~v+5t7ar$XztLEPNdSmI0K2)$V%_Ht}_YtSuw&7uCj#!*)Nb8EMSxMPYHD>aii~Kmj zeV($7rHv3JxgKxA3K(dclCMNj&N&9&@+W(UH&rO+cemR1Wp;kz)ilQ7preMFC`u(Q zd2~DEsqch?m-@vvhQu8cb_U;3h9o0$?*u+_-naO}Kll?g_n4jSlSN5wSx2*|Se^OO zX`rfw)zuM|w7llEujNq>IT=RRo7vp`>I6Kxyh6iP+IK$ySz4!DH&no-^SArl1iuWY zg?w7eu@5?&4Vx0Js@+o{m6t9yZPi*T>tq7k{sV!N4{3Sk;~VaOy8|3H9~iAeSgr_b zfGSDMWTUMjL9G&Bm64@Pvy`}Dzwm-rZ|4VBWcvMp=Elw-<`%+J`be29fv4WH<x1a^??oz$cj-d&1nu+e6S640w zB2xiiNdjSU4qsq{LHks;sK~DC985^wL%+VZN1?EcTmp0eZzz9I^>L_)@X+{^==_A3ppB~ zieyA18ZsdT)A*#NoeBK)rx$q7*J?tJH}hAkW+X(iw!|#7WS(@+h?hTZfGpdwE|v>3 zT$u3VB21@s8sz!qIZ1nGi`cZd z#L94$C`y!y9LnW9rd0>E06i@Nmsl@V5DqS{an8AS;Y06z1G4@@DybYW3Qz^mhP*$} ze)18>);Tm~VzAhYv99Ts8^6^r19`FK#qZn1=fB;fb?ZkF{RF#}&i*!}t7Bm2&Wd;Z z-5wr%a!a~e?7C)AVr{SpYM#t7Ro<=Ey^j;ruVXi@5wP1WlHJDW`gvo2GvGmc^Ere(O7=aPQOMx3xPG{fmH}1Fbrt5DEgVE4GXWv0l zMPlIEYp!btgSBsq$YVnY*V{K^N>lp3k+ak({VI^EhRwNJsC&H)Y9Zssgk8+DAUgBe z7JsgRSvFuSATM?@tk91Ao!xX^M1vqouTI3E3OZ$-%Vp9L=Y$KsXq<{h5j3YN_*X;ABkL zg#ZVu+`{~!5!Tc$_3>wnMHlcd_-)n!RbL>IMbock__bFcaWBy8Os@7p2Szt>7<>m( ztoiA6+xYc+Jc954xRRwtH}|OT@TcgS-N;vNShV0w+f%W+G-MBjklht$-yyL!ut3jP zZdUZR#a$s19MDyH#v@kvjZGu;Iwgig>_L%}Dh{aE2zyCqS(i}C@s}o!b zfA;*ntgiUL)aEV@%j%gS>%$q&IdMR0Bbf-r5_RlvLQfExDF+v#l2T&V>e2k>BcIIn zLk~gQ)`I2SN(ClE*=%h!!F~1qzMW|^DFq;?5+ri{_1E&OXa4~*dn{;U;+1+U>YuIy zI=Y^4*7MPIvr4G>RJy$@6%VDWS?S-aeOFoeVWk3&P}So#GaEt_{0eHTqUlzLU}p$H zGury_r!=LXi>3m=uMqvlZ~VrF*=-vhno_$I{6>02+|213t4DeV5i6!65MuB=^>Tp> zhz0_g)Ic6VXfrc0ky=Xfj4<*4d)F8n+gSv;z0N%^J<9M-(NgSt*J}Utlq1VUz;L zY;MtYE4^>n@8GGf!FQPjW>yA|z844;$blK^(;o)SI%v~rc_k0rM(2s@0IA{fof~<` zgCEa&R{F6|70tB}C0d}Dgf9C5zv<6M<-&n$_gKLnBofH%TUq774|y892Z!3d4Bofo z7ST*htK_pEN0ehNH(m`WilM_S01kRy%qNNP*gLMVHkc=7XtIkJ#k6Ag_js`(OT#hnCxQ7prH~z{pm09ne#6un@H`SE<564MY{}l{B7i5i$?sM8^}x1`2E}-_r5?JMIL|mmVfyD{ap9a z9bEFh8~KN)tnm0viTRxYy|M=f45X``U9{%-YvAYO$=N|r0QEcN3qy4UOMyDVhFVE& zwwn5rCTg3Io7o{Z%As2f5IS;gxEq7mKa*=BUe!HWm{|hpStptaIg^>?ZSVXd7higvAz=~pd@S~hy;k}uCrp4W9+i)~1N?tQSWHRT zvUM{rdeI-F{ZnjXCf3xyL2l043&%Ye5ULXt0oi5}huYLz%;gP_-b(?21VKpzOH z@%V;`b+vsm3&J6X9Fj!BE(<}O(v*HanhF5FBJ{xzelYeoEN#xprVOz#L1R(=uef?> z2;of5m}yd|qtc7Y+7J#L6xI$155HsPHNU^i73b~e2k+j&-#m6Vk2@q$-=O4c`miiW zZD36?sRltqu>K2=bS7wTdyyVYJ+d*Fik8K+R#gvtuWOFo+)|S)fXk#4W2E9W13~}- zTQ*s$S(&Ew_p_iiX5Lav;~~OYLpc4hh_0iWY?*ulh9M4uDySs1e+-X%-0!ky|0+3| zzge^8$BECOQy9GhU#Du8w#z;$U` zHMdL)@%&HUcoD-YNgTcil|~d3v`l!g_F{-E&WP1J44{(9E31UFo{ltETAO0~oi#Ja zhw%r0@|P@ZsBbn7!LvZ5tcS0!XSkRkV5x(Ompt@^EsleL2@HebI;(39Z+Y8i$t5n+ zpTx5BZHjBx6OO+dc{SM$+rAdI-)0TM12w_iUo3#^z5=uq{RvS)M$M2aSgiyp!jz9U z07o5t)JRpYm|p)orCUN%0pM4J-u!oex3Dz7tVsX3m1lz1l!~ zeJ!(N?<}`FOnJ$ZhFtjWJzV_0UHtu%mwD8d5i^%6`HGrwuutd-RTa@_=6JzCCKtx$ z7KAR{y3~tzG7ZSIRpX{UJ{gl&Mi-?L;h+EYZCrF!O-@CXv3CN9b#9^xp+SJuFpcI!;EZ9yU5Qy#?3RNJ)cD$xO7djV%0c(jhvGaiYt;d3a zh>!+};}5kZ5lNnYTJ{D~%8;}J+DaqUx*{jt$D}n|0DCwt@Q?rcL6#Obkw&dAs5gYI zy@&~-F4@?@^7||7d*N#~QLx9z{!)}G1U4)#@aot66U>}u^$5g;P^7zTNXW?X_aF?C z2{c~$&(4i~C(N~AYpy7wk#xn!O^sJXM1n|QZEfK0I%~qeuDhvO@ zDgE3u6##xk=!@U|?uMC}_;ARJR#v?An(E2Ss5z5!rWPT@$l9v1Z?{m5lqcS;<$Zs1 zfSsSZk$1m*FV8!3nQb>I)zuYoztFD(y&1J?XOhiyn-x>~4P8VakX=J7N@wBh_P%jG z2l);Z#$fE8Fd?Vh107yt{d#(25tt_Dp?N^+pTvt_@`o(U%^84^J#elF8a_BxH|^VavtK@B z!I;)`xeN#Kak^ig5_p-F&6_v#M=$*&Qgwuzn;qB@V$6gS&p}2txugJg>tm=#(WZ!WF=SR?7J(cU$x1{yYD=>7Lrcz;3ts*SH?`yR1rPw&Sara%Vj7>FXQYvAB=V8>3l=P50J`J5Gg^8S5%{~fz{ z`9qeuTU6ptgt#M6YoM;I&>U{$%$=_uXL#zh2-h_P;<4c zw}iv*i{$GGE@+Y=jan}F&K2Y=;?iQMIFon*_;IEVk z05HF>z!$&pU(h?;4m>t*i)0K2_<0=`PXiHx7bzOIVC!b5&$lrvx}m1|$%i2X5s!S> zwP&|k$$Sy*oG7ZoU~NEM&7@IP?VH8`OzD=;Q~>xDpqIb=<<%jF9C_&aAk~5rYp7!2 z;6Y)>?wX@!GQabXb-w(To7nsL8+qgN_Ve_Uhiu-J;o6$m0yCM=H_oeI+GM94IWyIX z3VcO#bH1y=Kj{p59NCYx=^CMkX^*NF6)zY{mQugqRt0C9s+n_7$_!J_x^nM@;!NB% zeGzCMHV{|M&>hn@!+UtEOp7;1X~; z0NYQo0z}2~Rj6d**y?}?Rf;etR68#9b+yG@T^;z|xzK2Xv_2J1IQ}^8i%hQqp3*I% zsQ~aRK(BbkD>n4|y@#&1Y&ftlkoQL(c9#MF@@LE3_^})L%s=hp56)TP_+35nPx^#C zN+duJM686bCSg?klg`L3PuiHJL3sgxW2=R~N-(g>ogvrxE)(_N-3nm*zL;zMv7&f^ zYyQSp1xP_S;n0?5Jwff*CpHohAtD6#Jgg??;i5=(D00oO112s0VB@cCn~}rr40*r% z%q_5RJXiw;6@`?!>Z;xBUs+~-y)_|7EKp0u1O^dn-?Vr-A;|Pa0|bYju8X3X7Emfr zlr^*1h`>AF`Cha>#O@lf#=Wv#M2|R|NU}SK%A%^};5&}k{)sTx&yXt%hI1jyhvbf! zz-n7_!ig;`d*(>ze-~iFhu+B+f_PSc=?f`}vhOK@tbr4b5^@tf7|+%>dyW1SVAMjc zDny|jDzf!3pn^~|{X`oVx%{FFnVIPmykL_Q^NMTs;`GX-YpYO$C5o37T2B{ZV`G`^QgMng7w-_wbVs+{oWO zYQRI5TH;laaGl*dU(YGI=bA*$gycEV+3q|KY7ExQyv2O(k=&RtVBl;_R>Y#$EjQoH z!Nm_OVpY$?`6mu`-n0Wo0XI5ODG!(5qGWolrHAz$sEl_T6CX)HgFp`4u+k$)wBR<+ zN-)kl!Qw^i`d!b-kD~;ek3xqlXm<20pr+%9bJ2j-v%K%4pJ%3?wVZg>5@zS#1vAmc zXzSLkSf_x7E-0-74POhFjK=G$won$mZeyLBo8`J|_K;c!&Fml)dPqAYR~tag`clZs z4!dBY8FHi-vZV}~^x^wy?vEl1G;QJzC#*xVpfd?&&oR-Z2r}7)2tOP6bZi~Rft~&^ zDGO&EIb@_2F=O{f_* zC)E$e;dyEEdtSP}?fGY?YU|EGzOtrTQ>q9tIuo7%1-r4WupncE#svB_ zj5Tc2WCc8@UsQ>{4(fFeR6sR*G{0S0t9fklFIuUUX|`wWEdxFYHJ|+4SBcRA^6b*3 zU~8cbVdE*|q%^Y|+b+2IyP%JvWGdRSH`c3-)mi3oPpvJ^qURz!mLhm}cI??Xb(zPV{5>v2 zbzEr5+VsU&E25}v;Hb@BvCk)`rDlH$RI`yw_eR>JNZ&0p!Vb#meWEQNPfr zoZ)iOl`W%zse1!Z6+$o7M%?JihS9R2m+U1bp3=+BO`W-eGA8UC#Oqh6!<)QrNn__N@ zE-1q0XydX*Y^6%SE*J<7u|i!{1{M;ngfRxJibA`J%x;CIRQI!1R7*OfyJ%3ZJ`f32 zi{%Uy`Nn+kL?w{8=b1h9U}J)kM6VOzqMDefQaZ7DI{2xL*Y?`yl}!ji6b%Y%k-MD< zIhl_;1gpnjiw8o>_b-ps8!|FTmQt59NOBP=0R0lNVP{gzI;3u@x5@@%7gY&jG=bEf zv3<5@%h@!bAMa5a7A}~jwk1hGsLaprleXh)9DTsF-zC40TQd9J1H&mzf9+AhF|3wJi*K$y?$xwg+tFH?;@9(MIG zK%*?L3AZ_Y1zE0aKfE?Ua9ngpx)0v=#HVY0J6IL6I7zb{h*0rIY| zA~ft?KEV9^jDIo4f;b9;wNy{o_`krk2+)*n5lsbvTQgnr=|z?5QJT|I(cm3# zjUP?&CXAtByr?rtb^?Oe>K9dued~a;LkRobakA53O53hI6|JTGD4#J1DADjm>Gf2% z4n5qDYLA;sUKJs8*W(7Pjw;L*?4MB#l+~n?i?0@#H#0Wb%&_8?iqbz~ny|g(l~snL zaXZEDp8Y);ODKl#8BGO5yi}_g=%}|}Zd=Sn+wZhU8%K7*s`FEKU~R!`+1eZU#if?-UecqE{#+TeS1qh0GgyzDd+a(r zAGhF~LW|JlDR(itjNtS?t9<6+I@e?_OyU-CyeCaNc@e~L_ z7!B9C^PSJIqD0uZZ9lW`=@NPO_bq7A*GRRj*SM{6u53>BQrH;DyT8nLF8CI?ZAooO zx%KgTcE&>={$OP|{(4PmN63wq}3`-dUvj5_CST}(x#;_%r zYr8PB@?o=Q8{1K}6gYpT~_#N%tntLC%5EkuU?sWHcvVE8+3^Zx~Q0s8qf}773 zwrtxDO^Zlt0qi2CAy<7E?1C7qxKXzcjzhr%BDkN>D9 z^#y6x?0ROCiVWac;f&MHW@T+?09m%qHF`U5-lv~86Ee%9__~+dAl(AsK_lRSrkxPs z=eLf+{Cp%RG0(yn z6{}uW(v18!C;+GaPj^Z@$PIB*y!FvBG8luLBTEMk{&^D?ZmwBbyQP>*>C4+wA!;V> zthn7d>x_m5TEW}O+5F0yp%)uI^P@Q=W{bcN9_IEljT!^C_H)02-IqYM2x2DPZfqL7 z@>~&D8qPiEY;v0|HLbff(DUaD;5e|FOi%#J_QKxqzk-9cuVS$nWFK4sF1%7=Y8xJM z|6fDXs+l*6z@Y&N^XP#~A(qJg@^5J$G8LEJ&||h=qd{qXAfAl>pMU!z*f89Lm;)#?4WKFn##Em|4!I%p^VAN%3p&JX-74m z{@$mM**S|PiEbqVRE3#-&50+S*a&*9+Jzren$j(zsQ_>*CB5kfv&{AHq^h&Ux@b($ z8Gi=BOQPaxMhRr{R5ciD|D9ISF>Ak}e8N3Yn4qeBldAvFZN3T zPkSp|`z17NoETtvj)|{`Lc51!PCkj1P_$_uq zgN-#v;FI5|2-}m_2>=k+VkcB|%r7q@R+MM$M!%YN2t<3PU_lXk1SB;)=`jyuZ8(G| z1e2N&AYeBYmI6zb!Qg#$ZHz0_iTYaE(>E&-D`k9Gq`E)CBOi8ea=Q-+J#WATv$iGV z0jYJ+)v~eT>78C0cYDhhJ~zvJU#MIIE`t;Ty*iMRa`v%`^b^F+Zec(a%nfmKfGyp5 z@S?AIX9e-Of)`7$20)Z_RgafEcZ~xFg+w6HT6}>hDQ6bv18@7hlCSzSO??P7&E12c`nRlx{Ii1%O*Ag`a+{r?s4n($h2skHW+XfJ*_r5(wo0 zQ8Z0s%*F;)JqjIHN{Yq6KmY$_N-xkRC9>Y~@6G(s!JhS_{(5!{D#) zKX8CYJ^Ine=tf^0&rk>ft%Y>?SE**~GNjV8)oTDW(+m^C(BoTILy&CgZ+;sf4vwQX z@#uRbn*ElSpS9H1^T(0}l8U&nXph{$J7lLWoL4*+P z4EQKqhPAO<%!pChm*5hqsxTM~c4Bs-A6ueyW`sNE$)5m>b*w zA{dn{9kalNpk&`J9V$E4=eX%WYu~-(wGnW^I0$Xq@Y}!r^d{ByP7#^90H$<{X(|BR z3Q1KZ^qGk>RZraZ9^AwT1}FvW3`bnwE?j%UR10|JJ=4rAu+23%^~?ch>ei0`DaOW1 zJF2dciXnQjF58Go-)25Gkh3;QKwT~$b+2_Ono&0JjRJXB%|q_n(2fG5Y(Ds$9I(Y= z0s6Dbf1JNS?2ibpk#@LmDe|4rVsj6q`9AXf_mJx2Ku6uPM)nEA3Wd=%JoDMlWo32E zg6e|3ZeXXS^$tvIp*#-5*D+;F?Zf_rU>bT6wgk-g3?vm|RZ|Ce!2Rwt9>;{{9qO&f z4L_uvE&bWPDF*f-K&m6}`0tuca}A@`?|Ci)oon}N%aMEk#zEvJ(@sNI=if;tt0TJ` zsertnACu-xi!b}DVpaNVVH|!{kzOMFq~ia*ct3mh(^(u8Gs&w6D^1|DKUgAN{&7^c z`at|V#~yif8GrE?f5^(}3MndTPr*Jb~%tw5-o0+sK}i1?(_RB%(gTd zOt6z+uC*Za>Y5Pibks3N9qg+%HyiMjru1{tQ~k+)&N*!e}U%W-ZyOW zK?=~0kd?~_gMECDk}56AaPG%F)0r#nr)M_W+2$l z&@Fy9Fni}x92|f(bt&m}Mzjyv=CT^56$Qa784X zCnC!>iz!X%meEuIxHZ!M{^_DD^d2qREJ}85%fZDMmowxp7r#V9my2UuS53(ov2$bx zTbaN{1v6#3W`{>g<65zO#F$%YXABAUZvi*;z(i}?K(jl6_PA+=1$b=8J`kajz_};2 zv`wJyC!`$%tIgLm%Wq#+v8M{OqXxY4pcvZN!{WtXJU&1rkT(YM*ItMAx1;K&f^J;) ztPqgUC#_x1D_`}u99$XMl5|3VgN$FHgloDAeg*Bgtuj|UGTfdUN3fSi=lXpPJ>*cH z`s4>gZhS#}8iG{4AuL7$*Kh&=5)2M&9=S4zheesOsW$uxqMm zBD)Uu_>cb{(*E$B5EsbQ(7G3>5?|t8!IJmr*7(HcGO}MqCE(7;7SI(;xsk7`? z*>pdLejDXep7bd0eb=o7EfSUsKM1*Pp}&pxD{nxz*q zI}u ziC4dE6Pp%WD_@UTr9(;#hH_v~^V^SFMRx@YrW1uUvF~bwlkrBnm}38iNuQ5P1GfL; zfIu6#|5pT^T8UBEd}H9>U$w@{L5su43L;9ATV^*!UioiJ*ls{{r5gj9h@r>f z8+Y;H54@WlJ9kl4=Hjq3Xh9+-0GAPugJ4YvDDT_fHWQ&uEoa{LbYB1J=M$T~XtWHA zF3=MYSx47}aMgKeunLqW28`P&Ycg4QDFh+;KE&<9+ulFVrUff`jEqf28K|njf#ucw z%x67g1=usK063*z6io$yTOqCAxG#jdo~_i%^&rtr*4fM8y7pIU@~f4ng>i6HVPVoK zyJpZ7XM*_ktOb7y>!!SBcxXQ<=FS2NC5FKBvRwn5Q06DJLemrNIcvBJ9#hlQ#Sn(9 z5OygKeZWEX9}Fa~E?3|M2?T|H-SW2oSRfytAO(fd4<3Hi$CR#r$uV%lT+dQE|ew6dv>6^zKh1-?g0uUqX_GRiW{Zk)8DKJ zZh}`Z5ECG`R6#juYs+cdhRBRsKxPSo^Ko@Q{a3}#)p)OMt_4Wdg@7Uu+Q$rjO-S)L zh&CV+=n=X1kt;m$0S%)Dni1sOG81ZgLs-+mAHAnf`2H)%^T%0$Tx@O4Qlid7&OIaW zpP&B(v@IdF&^Vn^a7wM{UT{90Nlz*RfQ!g35bSLWjxy@Kp3zYI4CJ8w4Q#Y#j$R_ zT@4m1U_45Z2q6|QHekwG(FQbSl42=y>S=YT-7QkXetxH)q$78 zlSE|4XK8obXm`1L9Rv&D@_`$AAzHI-<~lz7(f4v-|6W4Q7CG-jSIQ#$R9w@vF*>I& zpkPDC;1V>Nj{2xaJb>pt^KR5Eqw0a4=Cd#__uTR1&;22?WyXLdx3=Pe?jopsc;+wv zZ37!O`aJ<^5${FA3hPu|aMk8Y^ymfV8uXcsrt3qdvZcb)<_ZPe4e=3zMiRQRk`8D9lZY4f5ltg z_p!mMnSx8OG!2>JY_g?qdAEUlQME2V%PH9TFoTdW6t&YB1^*2?AkhIpEkyeoe zBAGBJ$ea)sBVkDh8zN~IhCx{wW)7@m_UvxhcjJgX*S74wdc=+^N8EJfh#i*?x#^0A z-8Z%D-@*v z5+EbxCoAyLFVCAl->WU+dFZGTBW#+_JnnWQdc$DZ7sXW5#Uq%|W0X2ApKQ9SW2nc8 z6rs&ESQic`K&=LXCD1K-kcVg{_90&nAAi+;?s8JiYTKiZ*)lyc%+F<>@ekX$^zt`S z?cPfY9#ya9L*8nzxZZ_d-~zAygKS=|zLel65j;$)G8> zX)2^vxf*!;=jOVg$8tc61FEiT*4794_g?stgCg}cB6cdLG^JkzmG9=1ZY7j2`Jcu1 zEBASpY?7Dd)Z5&wjTo#c>jx6ezQpQkA`P;o)p;cZHzxmJ;38USJR6cjNL=ebnMB;Grd+!0; zXOQGz?0NWRuw1@CTey5*ASbJBA<={`lfp6y;hw*K?#kQV`i}QhRrTj0 zvb(f2r77J~vNJuUTMb?HqN5L6Yi|7ad@$cD)wwSMRBAWZ24k>=@fbO?FW1wWy|f_G zm{E!OLDd(GNhtc8WmHNBzDuYr5Mop|IHs}Lw&em7hFf5YtpxCZt*dwc%+RsX_2 zzTwSm-nQfK&q;XMGyta z84ZHYor?U&W61GJl6pF)ngO8FOd|p5CtmxF1>X3fIqDv+#~Z|E1w^R=95UDPrGMT} zzPgWK(%x7wGYbXTiuc&GOMxE;ZTJ5dz&F^kJu7mOh)D|;JmHz2(&QC z)E%*`5BK}~;>BG9(!)PN+$2b}g^-jc7OVh6kzX=Y^Xy(boL9g0&Aj_v@1jkCSl9IW zed?;FR|VQp%gX91u@d&~-_PS7`B0wyJ5T0Lw>uivE+)pFfq|zZnsGu=Y0&x82p@b7 zDSe+dwgioCUbeAE0;yFlSg3i>vo^AIvzf26o9i_QAqk;^JqMLfzi}^T9|(kACi?j> zu(o}-rIZQF2`&tF@=pi!Wi0>$vGP|D5M-P(X@9y{QXbQBaHRSTi=z~%Pp)|8>m&d9 zl^K>cLz9#Pt1T~iY|HQ6c|RQfXH<835Ml4d#D%`~S1`P5*yfb=0LxcIa4|@U;ddwMyu1Li@*X`IXo3iBElrgZp>0>&EL@Zw72X_RrcvViD1w1ogmX_+-uC-@2s>*a6NuzoYD1K?!V=Wyb1ln8nQw=Bc7{rv zqCcClDu4!r0&4D-gqrZ^r>g9?lo}0QCtoDc3^U>I%twD*^PE>MuyrY;O~u{;y#23Q z?z?fB-slYC!(K@h_MxK&s>)1KrEfI>67irH!a`);-#m(>;58gOEjv=`}`e&*dzH8e@!_y8x|F^07TeK>bd73n()atC|Jc+qa%np^8?T z7uPzio&ffHf>4=BIE|oLgDNNshxOTZYLA&sk-VZXu+AhJD0l%_BtsyPwBpli70>;P zC1w`^Ngm;E;AGL>N(J1szvgrQxQpA9sMHH46^>oNyZjlf4~w5@NjsJ5*Z-Dy>fK>* zjR%sAQyPk<2kxp*?u*U|&Fc^rNMR#Xv*gqgWu1`rk(&WA_K~VjZWE!3Xr7ounMyl^ z4Yy_VsTU*5UxmukJtGD{Udw(o$jIrLdq3w;_8d&CC&NK&%Z0R*sQQ7m1Ca|qvWE?q z24XLb=Ue9C`&nW%#&V;BTY1fev`*hw1Jyuqpe?C)CStt=OsKI86MMhS z5jh1O`jUu8>)OSwH4YNdHMsEdFdlpQhV7c7jAt1cODr+xbEhYnbMSQ z8To0Q(yf7V&a)RjIy|g@M0i6$50RkQwc~DTEZSLigKc5ZLF`)lfB`Z^12%3~wD!~_3u6PN9X2tDe$HS6!B1cVZUuy0@F{C6JUq`fUQnKsl! z8WW%kB>$@x(E|ldmXOAN&omod+ zkss5%1LT0_0eSW;`0%qx`U9whAns*Xh%t~GNW+TJZC7~Ua}VRX{TYeH8sgfnh^2F8 z<>0}{hyHnmUmvX#dM>t=A$RAYjJ@o!Jrsfqc4EMd+8#zP!X#3mO`_F6kVIGv=t7HB zkq|RC4Jv+mW5qSQVAnwbtr-oJH1Z2_#H>wyQM3vy^n}@^5vLvlCm*`Z);WP=GOu{` zq5R{&RxEC5X-1KI{<`q)Kf8(i%|x{-q&xgBa@G^6ssRkHBQS(mk)`LZ3$p}>wn!;a z-K;}hqrIcZ)kfl;D`~&;R=D;*k*xwDdLZe{D|6MAcj3qP^Odi8{Gav@dlxOp6)zpNs#%9%930vV0uR4m;&qSSi|mg+ zS07Fh@N9|4+N)=6C~oa3V@3&DS-yVC$XtVNjmWI<(`%Lgxwg;Mm(Fv^#Vud|am9gA zV5VnTB(d^Xi=gIqFH%<$sMS*+6QRwFlA`n&H82`xPB=uk&)tWdd~(Y>KQzOxWkt2( zh=q!GzTqH;?p%dcAs!sU#@i82do=NcbIAQALRv%P2&j-`)+w!eNSH+i`)IEC7WI|? z4cC2+whG9SxC_OE9kj$Z&9s`~4FxlW`vDl%{lxshr&@-3sWUzd8G` z=8_-2JAHx;rt9{bxg_mG@2n)^w-^`NSbkz)dcmOz7UKsP5XTAxS#t6`|QC`4G>BWyc!mP3yWgalax!GjqQG$)!F zc*pk__^Wp;F*iFh;UZf@Ze6u@-N?}nBIo_vZq8VZ&?dk7))=>Yq-|bBD=VgOQBoy@ z^^6?s5zc-I-06vg^{b)TiG*1bm^5{uZ)??+Tl97?LBluCpw-t&*U@?_!Y1@fucp1? z!=yv!i0#nVw=!*B?6$skw&kY_$`hY=BnR>ub*vE`o8+~4*)v2*9KKoj&wtttKdp#S zP%q|W5%c4f60aC&MtRF^*OCn&3M2EAq^$|vsC?t{9$)^(Jm2_EkN>$eGc(htV#NGH zBveWulgu<^f|)3itSFTQ4P=7a-2h4=5PcuA34|$Hl><>A(WlXZi$nrBn43d^5Hicl@Y1Ki z3+}m#-o73=uEW7_Q+oJ&p5H(05uX;3^_zWxrZlBnK+cw?bZej=J$&Y6=6EC-Xm-mVYpKday3){f2p z)~}7fi{|&|&AQ;Sh>XDzV0ZwkUf|eYpQYcc3F`^1O2l|Ezj~XafZk@n{a?71YxmXU zWVz%)>|z+}%b!mXVq(t$c+aa2aQ`FM(Vcx_uxfNTNQa5QM(`lDEM!fjV5yF>oRD?k ztlyq+F03C#^?yAH8(Yl4gyui&dSiAq3H3)(=ap?@SP^^tG?D|*S>Xg0dJS|O-` zh7u7Xj1)aidH*-(dC{xq*}P>4se;N&+NuS#Yc{RAu9el51uppDm2A4KPpE|)Gm@+t zqm;dHYmAxsZKcN+4A4;~FMu4?@R1AV_|z9R^4b3esg&87hPhrK6YTR@Nn-IGDnRxu z3~_--)iWLJmdQ$?6?-j+7ln$DQy>NtTAQ2*YIiOOnTnP{j?8MH4Vg%0I0}S1@$wg} z@btURGTOCFy-#R+La0o*sLH;vK>lCF=<)Dlv$a=Pj&c%%^QoiKQLdF|u~DdLf`OE9_3k#loTrI{FmA|`6%~ofU`#JpHjFPUsEE*F@T(P{%;76ET5APX}!S z#Owj9nWTZLT(;AU9o9nLrPu+5c@tV zmOh)@r6QwD*1++{jQGso9Y8LQNNv`RED455<1x>QRkwCin$j(#iErYR ze%a}>r*Q1i_X}Sl>9HXS39I=Zy{@`f(KUTV##R2HnEyLtv;CaV`b6Da?pk9EUN{KA z;{nuov;E!aMb@fdZUT=Fv-CCB!n0j9xNO?!{(zSGn;zInpHCl zwMR%h8Q_~R(A6_25!49lQTbtCdC=3gvgPnVJ4%Q|k7clVsVE@_12s`bLs+T=lF-W&atp96V-js z;tQmvO^XOQWmF@3_9f2yw-xTJBYN3P`l@bOkOH9wxDwO@`>b|-MMVyYlp|lC%RKSf zhf>cs%=9uT6+pM2W;Jmt=Sl3G3DOAyUBC9B&LvgOlzOZ~_RFlab42(#C{twu|H~UX zX-N{Q2!o-rwhkw34?OB2t339e4ad!|lMeQgeM)LD|GwDW1RAjb%sSh>7d}4C_I+u| zR524a2ze1ky~KZhuh02kU*JFfYldDgv$!GArszV9$KJSA#o|(ItSMR6#HoiV=e_m- zauI~S&%uR{m|NnuCtuA2|Mfv4@>3Cy0-e&7ZXrztfLjrL=@gFL{-F3JUC+lNc6pDb z+D!m@SLnwB?XtNER83GwT8fd=aZJIvaV1tu-%|Ds)Ww*Qie2=ByA-Toi!u61?XCn6 zc8+`*m#9ri8LdJUgoW)jOGnpiJiJ211Oe8q@5$1sTG}bYbrOm)pRth{Q(doxudmPW z_!rEuaf`Lx<_YCC2-(C;I=0YdFAu>ar+~nx*A4NsKhhkU0a@XQ)mHS z5*jSuyd@jBiTUbdGenccEJQ%t4834`Re@GLG!5-G!l>jXx|IPFE?U#T!-?yB_)ClY z*}p6@s9Wkf(lkOpB-@8#bwLa&J+R`y?pfaZPd9SUD$+}tR{c_%&csjW>QM2*P99vE zMUWh5lQK9qbKJwXvUM8<{J|OsW#e7QwD5}wmx7xm49>=QZB{7TXM@Nx7Tk5?0h<24 zox|}n$jz+)MX)IQV#0%60V!=pDxvNPYb%MBwH_OKiE~eDIqme!=_jpo*JBcgZfdRk zZ_4D>&Pxb^5HUAM46GlB{9vc@?JH`oz9jIK?=EuHO+qy*%*>7G$4E+v6oe|6JD>Qu8`n~%nZ#=X8ytI1EBnaWfOw4*}Tu>&pb~m*v6Xkx3wN=coUVvWk0Ig#7 zcc$8v&GoiRzc>iyf;)CqpqWcsEXAvZ#Z8fg!)vx4-=~@tbO34HRLCI3@?c}^D3~Qd zWbAh6c)tIz(y=}kgq(%EkoerLn&0~4jcncG;O!uheU7#WN=|}=1XP3w`*vmSa$4qh zp0LIP@34mMSMp5;<`P}FG80Fq#g#QevbV25B%6&Gad6HtfHdY_(cqRBA-h{b0MQ!F zf}{rBF6frbThCwM^>1F_zn0LXlk~Gl&zd|&ZIV2EQbymHJN|A=5Sv9USV#o^7;rEzok&Y=sXwvXOm0Y*O*>gZpr0l^DY;Q}WULP7T($QBs5zBXibwnrk7y>L_&#jG{K zq~DK1bQ*EcP+EBoESBMRjsLd%1kXFiGEM%^~}Q5wr*Vu ziU!NlC|5Xv3lnY)6YOq|g9jrIxZ8lYz3>2fMFl;(+Srb=rSWJig8bRnS5H3wi6ZjN zX*u92{i4WO>6CuiNmb*wA5`Cd!%69*nmNib!M*O*;!haxPr}J~QUr zrGlWLS_x{h{wLe$1PR61cV(YVBc)lhTLEVm0t-j>Svop0yCEVi&}=-=DGp<9Ka1|ltl;I04%5!dbo@5gV* z+jjt@sd?-@R(bgS*SXh;iP1=qWrbBMTGOl4{KP>?Sqxy(IG8YpV3#2UGs_dytH+rZ zt^#?K(WXZW)U!&vt)bc=eDQ}pKJocEK6rkgxw*vrhD@74)B@OSf6et{Ddlz`L}~`3 zmbDe-ytlX9H5`B@l7&NpsYzs!v$ic%we;l4ryi&krFC$GuKzNgE|LsTA_gy+p-;!HBtT0vk zVN6!S_&Q!QL;L%f>Aygp-Fyd#2?R2E+nrhoRudkiV~}drd9xBkW726PwCj+QGP@92 zJgR2t@S2$gyVXqwN*-BBVebxtl9Spst6iUTn!kuYTePR_)`3YYh2IWnT4$M~!-Hsv zm}4~4^3Am#Pk7NH3mZMU+${~be_inLshgCueLN^swbE!{c_lMAn7G%O6?eJoI`_ZJ z8n-*FB_yj=*>=0Gedm~NdhvMh}dtsHQhGD%=#NPOgtEk|Fums)0#ji;kqPe&HE zpj&T4+;TWNv)yho%nicOE^f#p$Op`=lClX2y+~Uh#&134&-lT`J6IXCT@8n_Z{pIS zrE;3v$F|md4B}~Mr zO)J9xFs3B|kWzwIY1V{1RHPCXHdV|WQL*W;n%-QniiB%kMp(tm)HBEH- zhZ1L?0&2|JG+lt=3Md!3_~*Lu+aFqF8w`jt!VTM6p7{HRanpeTu~(xS$YSu%gxe#U z+uSum1J@XYlmv+_wFC|hVKk^{n#{(Tiqno7amsO-rR|Bi#St6lGxPI-r8?2;2kMwv zS?_Uh1Z%4e2M=ThgFdVK;rbhEzH^y!-JXis9`t9GelJr=Wau#iWU-hGCR{ak9y%|v zYNo3DtgQ_=^Y$n3fq#A&bv}XWsN;}PCg=*%tXX=Zt^vVI*xCh55WBkhW*!-XEdg?z z=T)!$Ja7E>4>A*b=4$A){PFJLb@%J-vz2Sg%A$I1`cBCmf0zT17o@SB|C(j{mdwyE4id>@5GaiohVE;Gczt^nMp=k45NU{Hnh=o$gI36m zjZ2f27S3WhW6|s02eDX*DkOS6sDim7GLW-r@j2LnnNmBhE$FFDL3Mq>3D8eI5?>st)+AudjBgA2wCfzFiyx3FJ2My(=0X@Q4?& zaejl<8DJdTX&`Th$%HyzHZj3bUC1hyg7M;(^>sHu2@?!nSul7uf@cVrP-mueC;_TW z2!n#O4d>qd&b;GIe?(lr-mDyPL<*a@`1-&zp8hA?v}3OoK`K^=PS2mHtKmN;vthd7 zPgpp7_^piSgu&m8caM;<^gjnqv-d(q~GuUXeYw(pLu98rZ_3A%4> zx%%C;e~0+jA%s1?dQ+OxEu!)@oYF5j<(#*C`=Rl#=8xy80Twhn=Bs!il`#Nj6=HA! z0kaPHC2yARj1oN{s?ADTw?I7<`n|yXAvN=d1r|0}^yh2ZCc!X6W9IWx$Hla$F;Cad zH$6UCV<@$U$~bXTY+7drQx$(`RdLd zzyFsT*qbBsGfI;(NdmP89GK6xWI;@hvCPA&4;Jf+!q`lWEk>~*bnz0|?_;p2OK0r{ zkd8v#V%cZMR6x(#we}M>|C+$w{i~dF*E9Hs*Zegn9r#C3Zjra9w5dg{fiY;6tTEu+NW z_Z=QDXZd@4Mr^Og>zxrQ2_T6B2ljKpw?EI38!jh=+AIgYT3bc^Wb z+-6F@w3Kt+cEQ8qtLBamkC&Y01y3z1QPB<#h53U=-KIHl>Sm=X0c}O z(7?jRinR}gOn>~y<5uoWdg9eHf%4(u8y0VjZ3D#y;8JqAA9-T=PP1?XjMJK^1*{_ zTu$nF0eW9n^>k8OxNZ&oEfl*|&;&&Lka%!hp<)4w0xK&6 z{`n2BytniqJ4fxG_4Y}=+1Gu_JY65jID^fRCACivc=x%4U zgalv}AO)q_->mnZzvBxc8=o_+1~{c(6#3U}O26!sbKdfuhlRhKKR!GyWH!L~Vjt5W z%mt7}(0V*qKq3H-QDLf zfkvAE8xwoyGq3&72HyOkSr#_HTwfTqt*?PWO}VJWeC7s@#k5@{ka2pX1)-T~yg;q3 z2{OJ75T%QJS9ODL0Z5-;*;l)PE)lCpMA&z5joF!&zxcC1;Au~O5Ml5mBvnXNnYr8J zBgR<{7(BbcBEAnr5WBgs;DG8@jG{RkuxC;;M3(NrgCG7}F8=8iP*0O=sBMdgzM9tFk<+noGqY<9A;95H(AgfeP`dfSk-O_A5X zZxe5Rzmlq&#YLN2&Ng|)gdWpi-EyJsPI0q-7hI{H3*L>(fIO&2l@-QsoWJ`D-b`E& z1JPJVqC^I316Ed-IrZdYc+T^l#SkGCY06OV?HOd!dTG)Z7Q1H(G1ReEj zW-G$R9&usKvPEh;)B(^@Kw?5-YeA^3K&nVlNNX8}itYz(deoJoAtBjRc-3qbCF#;u zd;M;Y*)}~BER2xsaIcOKkB~`G4S=06= z0}7p|`Ny4omo`dTVtJ;-Cy0%q#D1xat+t_jJ{toaH{Sgi|E^{pS05KH+mx{uAX0y$ z6EHAS^=JffF_Vr=ocHY>pZ(k-AOA*8uWFf{&(w8|s##Suc&eYLl8I(g1eHkC1PL?- zBqtj;LL`~H00SY9Te+E=X?iD#y=LME&3(V%7+g zj$9}%2agF4gvIrB?abjZakAM`4ig6QQ{0*B%ArzorayJtp@bQluXMLv1);10G3EX=F` ztpBZyHSkGR)vL_u*VvuEz6`(1E~aI9p0jI%9p=8%YXkMaQ-(o^22K~y&0uf2{X0Q@0)o( zBcwLjT4yXmJqV%G^a3IYC3bfrWU;_S5rx#E{fg8EmRAzPgZsGMsq@_TL67E?5!3q6&hAho;3e^R_D2M%?One}OUt5CgbGg| z9Z%5O$tDz-q-RbOd&33U*3TjZ=fA1vk zaz1T*t$?prNfWPd@-tdm!3VQ4IKyRp>u38(u`KV2U$E_f~w3MJe-+4b2MZ@ku z-D~rezpRBx>7baT{k>q-4$Ge9m{{YsJn_lT=eys(l)3p?D>oc4;m`X-nHawTn;0Ta zoF4;f6Yk2{^fORKCUzxr9V>S1+{Gt9{vZ6>ZHH7O%Wll&EOkrMof*VZD9iUkRLQik za5Cwg4}qltWGi4{3i|kSWt82>ydaYuCl_)k!ju=V$^l(aWX57J)(*C;k01>dsfAt- zdb2Rww|Irzw6G%N7R1Usc6+KjhpY9Ac76a^{NoV9F6(VdQ@Um3$977$23q@5j;T&r z_%GFPd~lUq+-pc-mIdlPx47V^nQyTzFS}mQ0_R-i^}@}>B?4!Hfr%XK@-a7M+T-SL z$1lbyIInKfFHln;-a9b{T?X4h(3qo|7WOm4?u3R30C9lmtPa^*a{=LIOxhb1+@zny z%;{pa;|V4r+54G1s%Wy(t3Wm=EGBeDKoh(7)LgN5j-T#GtPNp(9kSG{Bd`X&eqer4 z*}g$J?(l|f3yH&|VWz3bn{JOD`&4x4bmH1>kUfN|MkHGAIh!SgV8Mx+#+ByEYLsA2 z0i>k833P6VqP5!n0l0=uw>DyX>Vb-7HEsKgBsH*SF`h`oqYUbZ{zN_uL*f%S6O58 zu%UWuVyPcmGB=b?xGaJp(vU9y3Hp;aK&-5PFH)qP@KDZo(d7LMb}=F@6#EGd+X8#` zwOsqnA^WavX%d9KmHUy(+Q}JoWPSB2VQG8CmQ!jDKe~rRV7Z0$7MZEhUBl(@yxnh; zxbQdAIsjApMN#?gP3cxZ`Hh>7O1<{HTnzyVwS$6d?G{0ADN~&rqO?6}!e>06 z!t0F{n}1zYJ@?+z?1~k^$;L3YN*Jj6G#w}eW6n0ul2LBI`wEhi{giBhl(7KCKsvvm zKv47XOD2a%N>FJ_ySqhZPeJbRY~pFZPS7=Ucr~IuB-TC$MeR;n-esmk(b!S&VS9Q&<9lQAWC*H%|ZU?a)jL&FymMs9$ zR>XT9H}3(PJ|k%%C3N8=MsK?pVM|TOF6fGVi*h-i{yhN`4(xSn$G$tDIj|Dp!t<7C z+r;dGr}VijZ6%${;ToUjQd6NB!f;ubT@bdP-s6Nb=Lo}==BB}Z`Q3y6*pr#piO7Cm zmMKl?7SUJ{o6;{m$uZ|Nd01VGgjNazbH-*5m>E@!D^2iF2MI$r``sTfVDMnT?pZq) z#j&6i^DHi9IJ+*UrSUnuAS4q6a`Jt)MYgr@ zSO~EkamP@59#1zbYcVlryvpx5HBxO3WxZ{gx)Fd)zLPzGOtQKR1;ktf4kAQd<*egw z;DYabf^*L~i?zYXE=WR2np~Lh-4!em)aMjD0MG;!6C7Gx;Yw|g(2Jnuc+ zyt`kNB{IY)l~I(B7*k(=+Sn%hh>R5dJYRjN5<=TC-w;h$Hy;IkukA6&>W z*ZWm9*`%g4rCUx@0pQj|=e~F#?cnPv<~6h08eAF+Hm0dKSeKtJD2N*KF$P=Mp#y^& zIEn))I9T}Kg#jW3L>;`vm{@619V`OgPwB{+q%r8i^qe`nYoTL`*3IPTZpK8tF&{r3 zy>6d3#yvJ*h*)7F#el`G>b21t11>YM6;ux#uv~s;+8DPlBP+PqNi1N(jd+xJv_5ks zmYK0@L_GSLq^JE4-0Ow3c?S%x1+76U!+>1eEC$-vv@O0Zz3-NoI{~nT$Ls>hw8%>zr3&2|^YKEsGsHpmQYy_G!fr_y9L;m9}FX63k z|9cMZTLEgf=9oD}C<267T#3mfHcEGG1PAD>Hr5zxmY4VN=}*0byPcL1T|!FNk`z39~oZ8T57b4sGoP8D5VbcW-1cGNaP?$aiEZeSU7rf8&Kmb4HhyU;FJv zs-{9m5X_L%rHB&LKH#5I{QK3NZ49ngq zZQE^bi0AKnTpFq#fMtv=h?wS>ZH$`jR>0IGuPtBvvfh@uh9t(iJDxeom5UZues@qa zh0j2ySOu(Ew;q%=!D1!Mj6I>@x$u%5+qyZ67u4wnI@aj2_ZuY;6X=Z@z0IExp7nL) z%=-{le+;^tD)eovR%F1^+PcO}3+xtAF^#^UjL)fbEH0%;0k#qskdp}wE?6j@G2oL? zEOTUxn4MJPqGWL`jK^qWa)9=J)j{8Sb*(xIvF;VJKTJD-{eGO{92B4!~m$<~D!TPJ+KMLm*L-Tcv= zU7xK88q}^xKJrv_U==V;Zpy|Y3(!l6T`3RvwZ-78W=j_KwA|ql3!HS%IS%f@tTFC> zv9bAg$tFGCTYn4jK+UYQBSDiebK;%bkm?;k>mQoZlx{Ii1%O)-iAXD}@y4KSleHb2 zVzHaXRGEzJ_n*d`phWLm^n5Yl1`Sx&xPQv?o57iV0a$CuK2uJOKWB`#0PEN~Py~uL zng2HQ1vUtAQzUMzNIhkQu)3~E z+GhuvQV_nB5q9M1rfbhzALT-Y@}HuTvFiL8LSl5o2tDcd=s)KI!pXNGtX_)bAyUsF zt*?)W-4qiX`J|MIb)RxUNAJikjq%S-XzK=Qbe03Nx+ofB7YkvtcV~|H8Nl}oJiDND zWgwX)cN#7PyKjO?ca8~8KxZ{5js$YFxC<3R9C7H(<$UQ2Z{iPr|Jm%?v(Lw1lT`P8 zcj~rUx#tjUK7mM^;fO6ueCf*{;i#=wKyF=puoOx>c0)BI>cNp^yKz@d@XD9n;+7w_ zMlsv>Cu};^EL0PM;^Y~$^~FzxQ7L(B;B5ko)Pn5G9I_brjpuA&X?u^szOltX#KsuA zn2d7jz13{vR)O9O^qRo-Z5!JrvTG^;Oz9U%Qvu*sM!NmTMn)_nWGxl_jMW+A!+o}{ z`3Yl<3Y_`Uaew?(13S;NR%eXXu7NCSpr9TZZ8zOHayW)&#Zts_Mk*m}fNDv|J!RLf zhO56f_08j65JZ#0$;IGs0j@Plx*%6S5Sg0y=R|i zIRJ^EmibUX(Ciyy(bCS4i;X_UvL~98$4yukMu>Ch+E4hM-#UYDfBj<|dFUde;VMC` zfR$01TXA^+Auwvzx$B*7!u|IYIbe7`=bbfs$y0$?Chd`HeBel zncG?rdx$pVM$zcPLJ>@SzsFe#o|z&(|FK+Q=c+8d0z2XKJJy`@ltpNT(VBsNR&OIS zJ`?487|jNQ3OPe_Ff)JZ(Ya>0EMgZHPiacO2r9>RO1BcqH+*&5=!5tFTegMANe=U- zRan6kGeWus)A{BLcXH;fUZ&N`o;lMoMpq*5JDvy5#l)h{)fiQI1ra2f*;-}-G6$M6 z`**Y)xGuA{t7UyPK@I&mAyj1?Hr|{76*e8w1)wtOo*cDCTG_q zJ8%w`nPC|O1v-lsI)2Vyb=Q!MPZ+Nq!OiND#wP7fJg`q2tOXDk2vliPrrLA@Z+hF8 zdD)-5f-Tz)fvhBxAM6%Jg-QbZ5A5TWulfs~@x;5r>gB{xn?t?acTfWAY+#+G#)o42 zMzQkvYsETHz`1+F<3##L(!B4X?R8&jNXi3;=1@8vvG=4IFX%Sr}T| zA&$+{ol71M;)BA;ogq6XFYyhSfMf5QrkDLSn}cgun6MM@TiqzYX;-@5EUutvr^Sbx z&5eR8(pJd&k;rd-fpE;xguyjPwO|2+nq3q35HuBp=%d8v5q}2!K{dJX=4;^iVt}Kj z?fYy6+?;I1Yrxztg1ZKSr302D;)-wQdJx3#OD-LhwZhT~l`caPWYPTWCDg@b5WS~CYOgk7MIvCi{~CmxSII0Rbt2E!XkC$YMAB7M+wR+E*i^i$$%NOg+1qM5J zS~Ty8l{bw#c-23z#o)k=R!ACh%-p4X_H*xMG#pTestYz>uW4Dpwh(}7|Pq2b+l&2A638pSv!#CW?vB>nJoem z>|~06w!EHQs?MmX`&kG#CClnp&{P1pm63=jkNooiD`^+fwuY&u+__F-=j? zq<|2X1lRAIKaSgc{LA8V|-Hjh!aVW2S%O(8vt1sZ?ul+W!dHZGj z;IhNWbElE(c`utA%v|jG`Hmt68wFgm*!a|>HH*G?lu-x34xP&D{zNC&xLcq+;-IRU z$t5k&`z>t=Ze{uZu=n2avSwAC_jm36JXLkl&7u2-&XLaDVB5qtkpuw&2?h`lOz5C6 zA|jxG0y3Zk6%`R>Kw84U5M)F_$*JjXx}kIKd;8{l@~Nt4@Adw%)_$tmnR&ysDy=%4*_v3lMQA9lC)2!D6B3GFURv$jMK~6Y9ws-LVQLVMi5&L( zTzKKBCY*UMMt0GIOWjZ%ITx z0WA4D6PnPsg~oa8gzhDzdU$>Rznt((VS9cd$VNjf-%VA7h`N8aFx#@z4zI12A{5}T zzjLzuV`c+sEwlfIA%|}nu(qmn*D0|R$SGUa0YG$9 z{7jgzx%;_5O@l9c;(%xm++$Zvvo5K81+vx04Q6Ff&qyd>>{ays?jH{Gf)~A#ZrvdS zAyhSY+<6Bp^H-yXKS!uKZPto)R)E*3{1O~!OJHIypk3xtgqSkwvW&$?pV5?%^=C5p zvrAy}j7hVUIgQSefT!G6qyDh5*F8M*KcAHQYu*+2Zlz%5czbS5;RZv#y%0QXATxHzni`N&|977XwiaYOOoqXHgc zKShm6y4TWPE1Fqy^W^%9Gy`|u+Hl2xTj0u%EOF@0K4Ds!+NgvGd1%Zm7l&jn{$DYW zDWL_~gac!ome;Hj$b*V=o-{|bkdPP=4PL*%##Fec7Qeo@ddIj1UpR8okQk6d9paC@j3(=*J>%rG~zo_GA!`#ItCOZnRm-$w54Hj9Z5Ud1gA ztv2dY_Dhot226XmHL4tAqQRb;)xYqGpRGEOjNy{@7Qd988}#E(jrZnpY2^ST=w!iv1`;p}YP=h-TgJv!)bRLpj6V zuh>G^zFJ)jlhcZDDHhjwP&n=E9;ZBHmZhV1rUF8&0>dUYbN9P+zv{|h0{#>FcGE-v zxEGR$%;XS?#O1dG~QOYk-?&4hl2M%t;B;J|X5-k2G@WDc0N>guHnNP?wCS{vE+u>IDXc5G#XeR&bD z)@aM4wjK7f2v_2LQgZ7{Yok`k4#2)SNm*`x z6hfy}+RY?yqixTa*>T!6D0gC*itT+%8I@&%_{JleY~Cm$jib6Sxb-TS2_EEWZkIB8 zTTlDZTA4h+vIKitPi4pKGudn)_IpX1(9p_6SulZpHM4E2aL&Uvu)F|66`BNF@Bj3L zTIBsOwcrg;XhPpMng{^*Qj*OVA7&5UG++2WGP1S?Pjgy13fu2D#i_2*3a_h)?EN*)6f8@P)5 zzQ^VQAesn6$j3bfrl(PjZc!=1MmD$k^me}R#V;{4J!ATD7V~)oP|YOw6N|eG+G~sz z*3DpU8y~q#T(+Lzg?8*WpMd=+H~6_PA9V@OHT2eM;{6KQGXp#@PTlVV=6dlBx2bvB zhIeawBWBT2+lN*=_O&c)PH|ndW^uDjn7Mt8s_ya0fBdp*^44a5IONQ8?gx3`% zXD(|Z-oN<#+kGzGyLHEf9~0)<+1q>BTqW%qs#jX+#}~9d|X5({{IPm z+i4;I+jh>SWD!#+1{dWl~*VQPT2qj1J!=h${^g)U^%{4s43f6j3N zuz*49N1%nVXriu_`3Ks;ig-T`O!kSw_$>;&;8*(q<|P<0?hI0q7XqCh zehD%-(%3!pRy@Y~*JPiYUjXW@CNzlu zhl8zyjW3Z$leL}^6VB8GF_GZ@ZwEY|zpu8N)J>|8(IR3iWD{?9K=HT&Z>|IzmTGye z%cPYKj9Qn)xX@DeCNmuNX{5)|#Xc!zvf5g%t*)|R{V{|zv}UkoLKn6)?*A_Sed( zD~lt(C$=`DAWU068}r63!mhJsSZuZowqEk2n}NfV0zeb`PS8XExR;WMs9g9=ED~`Jpn zAZS6**|Pg}ZQ228%lQ_-DxBD$A&im;O+(9G_g&O5O+9O&q+z>hoMA(K-gD5wU4HGK z&!I?MMa$I8>f$2RRE=t8aekh^dB+==ovG+ZZQ5=a0fQI3 zqbql&W|&h-kQ3E1|Z(nt8SS{GbFcYJ*tbvxN+}CRqM< z#%&CFtO{Ewz+gN!U_i7uugq=jaKRI&h=&yo7H=RFka0XHrqIG5DVSTBqWfAg-*^E{ zS8CgzE;FFn>c~6mb!}^O?}51!Xc=#ifO;K(Tn6UmTp@cPTtl93;DR4Vh6`wj)|q_> zLbUvUiOAqCUh}%&<>njj;D;XiK(4ytA9=*38+q;Ty^O`x1#8tK=IuIUMKuv};@BO> z@Wdzn4FB?tXhC{;07Xl6GkV4&{exLYMhju{Gt;*L;Rtlgf;pJ^cB|L|mP>&wR>UV& zfZts}QZ#=L7=*HD_IdGcY)yQ<@pMpc)7CtbH9%*Y&wTL;L?S{&BvOT%VanX^%;Sh5 zqQOKq8|>(`_{cmS!9RokD|bb)TBsc;zd_f|LGa<*9%fCj{$$oZ^BP!Jw`G?{Gqdw< z>*GR?T|#JrHf9mC5Cq#R@wN5k@V<*6=Z6(LxOQ1p=}plnRNc(*`ei-u=YM07ruh=E z>K~fWgubmb5diMRBqDkF!M}ZH)RW#7XXI#SbL8+5;hO)x$Tc5dV0F1+W`nt*4G)4b zsuC3ECQQ@3Tb%Isoaq`?8jd(V+Ux0S>@*ia0uxqj;O>Vm9gqEL*jbA27-%ZS@GXt2 zqS~;_0_8fr7FZ3Oa36L?BqOQe$v=8F%lrR{Kl#I-XFXRC2CF>wN6+Wn`<>y}`C5H< zk>KtL0SV*`TefZHF^~CiK66z~?#_{2izeHRjpATa7R~_O|H!2lKr*l&cW<;ncBIUd8m(6j{`K z1&p0ag+o;bMdRK+1=sEzFtkNCUx(~gicu$oCZRhoCFG;+ zTdQ#XXtI5+LSW0rb)>$4)NbH#Q1od3BJdR~ zmm<6x`j$<#wNjrajP^+Ucas#!%_7a}R?_9KL+e0JqrD8?k*$TTqa7nVJhp#6!_qxA zM{ui+lyps7>hhKi$-f`Ax$So%(~u7<`GTh&k(~cbM2`3q6PnPsohAany_`fOcTRuS z?StNhZ>ZME!KxNgqpmSxj4K#ZRLoSFk~6iUO#;z16k}p0AQZqXyfetij~}dzK7uk> zf_2CAIQMaL)boDXkaJRXrO32<)0*uahaEL$=)ANQJhEFGik8_jSoi0*09x8$G-eYH z4BVVWL$G!VQ@38+t&weQidJ66Ckn%rfF5%m+CMPH#EogUNQC-V$xZaw70cF-5~bpl zV~0Hd=bu4;ZPhhD@4v+^6Q+hi*uHfmzxKjc@Qj~-Eo_cW!Hy|8ot)>~(6^l?0>FKML}cx}Kl{uVhx@i&PbEX?xGUR1UL6!d zw7(6=&E#&N=#}xph?y14K*Z~kJ4iZ@RE4U7<->5|CDR;tZkKehf!YGqOam$nxhs}` zbpv5B*NX`Zg=HJa``@bOS1#|VGkx)T0Ih)F=3;*zF$lAMTE1+Yw_t)#Qk)-KkM_YJ zfgBXkifZd_3#u&bsY@qgO?otgRjv!s&A%2jCm|Bn4)d~?KcDq;J-StgoUAodb$w1) zOhyuzo|)rcK6?chUic_J`IP~wdjbt>Hb&drvHX1nihIDBt&TKgwMX(IP1u2gyQEY6sAO2i9dxC*`3?4jK&X=9l z(v`)UC>j!J9>POjvKS?PSfqD&V*a1dcakOozN%Zy{|J>jHo&KJDn`X%xgp?da z9bin;HFH0PtKckE-24q#z?}oBTA?*#a7FL(i0Y+-!nseFW&KPIYZf3i0t9cXFh*x% z#T;G8v`-!LsT;^>(bzE|KrpS!`Zv(9M1-+&tA(qo^-Brb@&H6{to>o_xezh-cCmbj z3V{JKwaFGSHKz5dWe?ah1;~qv3L`O`mp1N#o_qgw~dzgM$BI8NHy zJ5EQbSW6X8{i$E!C!h6d?p!#NThngy@P00~yI7OWj1-NP&op6TFQqL|iAHlMwt zlxz96j*9!iJw2@?sg?KrKw0)kD@5QK28!ln{RZ36q-)63S-k6mH*)G3kLHG3ZX;CD z1x`ClSrc2fY~jgId=57p+D>AQjHLsj7O-g+7MqWayX`%;;(95##3AZ1$@0%>iP zmF@%hp~pOjuYCD-e*8yPy&zSv8UaOM@{>|LW$N=&8xCNCaRGW6%jY+jgb7XJw@fMp z@zsRIRQ4!iMhP>kg>-D@>}T!)`LDpd^**5qeP?JQ0Nh7NL$GVItQ8Ofa8&U}PmWt-6%=b@ZU%V8umG*+6F{8WVRwC=9txkt=-9 zHOT_S>P)+J1+>-x^R-IGOYj!*ym<#Kbq&nk_qJ3_IPf;qBhsx;2MlN4)^~AnxM|)0 zE6g9%z|H+5A^}3lv#0e@7Z9+z_1;J*$^QFtL;lc+zf@ePO_xQ%`J79V@N<|trqjd}gXv!L?Ulr^Vk^ONU4lRy@OJo*{$d0khx%La~f@?#z4-AG_{2* zZ{NlPFL@ld+Q|-7DOwVaJWGp_VR@w@&OUqGs*p*(07{rL{I3xK&l%0{r;(6f7*F(n%;fG z!^qlIzsr1_e}M)3l~VJg*9`oLesih4+-mVbVDYeW;sw)eKdnPPn$2IE1r5dQY-ZiU zmvNvlR%fQ!f;ad0=|zMbQH)_a8BaA0&vM?4d6u9+)C}-#IoR?XE<^}LPj_%Afajxf zrfiyf;n?;=4-e=(<72RP7sQU$+E>#QEhWNz!)g;1V!3a(ZA6O@1mxU@xd(98d5|!zg=^8&lq?)z+&?#BBQOMn8hHJ%7G?8Nm8<8D~mjJ24B7MR$lj-H}dJv zeuKGnGXTWUb(6UwS;%qZRst(#9Ao6@;ykCHvXhtp){D6GVdq2tE?B(-k(v-=D+pNT zf$fQ%A+PZdXi6k$ptpm5+Rck!@@n3B*+<#3X$yxBCqDGXRW2E<5PE`$T_LO#fwt^J zIS8Y}S}a6(pk-^E@Hyln5Z>dtGRH#ddu01h70L7WOVx8f^Nk?!=^}F7L;#r3cbdvE zozQ)RRJA(rl@FcstrtDxZR^fmx zbxdc-LyYT<6}AzV60&+9rA%-coBw0xPS?)tW3Fj>Ub-_`vZb@(mGc;TKeTCj&Tvax z4$3&>7XhP;#hAC7z7_jDM0?&%*@R-&4(QPadFp?o%6CK6fgH!Anlf+4#1=Hm`uSY% z@v4wx=CfDTJnr#7%hoNMy+p9DQ7$>nH z0z>73vy}I~;2>eY74&gCkc%MxeJKKlm%}VeFh1;Z2JgAcMKH06jlYKrV`?3sIhm+- zFcY5i!F_S}54{A!dqW7zWmP6Lq3;xpxbuYWGo-4Wy&rttCAa+9Oa5f)L_HlLNDJ~K zc2qPOQ&L7c9-dfdnkTF+E9*9PIORur*YqXK%s(9-Mjn!7)KZi*QkZNDH&KN_tS%!i0c4pNWrs8(}&j z^o(iyU|XhM#^z%%V}QF1>`nVuis@Kr;w-Oz{Xg=TfBjynI$CO-lo_?lH;UKrAhcF{ z7OQ$#Re?N&<&`CbAy0YAbsR$LGN+?CP z@%0c33RE$-zKEb{jT{t>ThZ>Z96YML{VzYjyWjn84jx*fH`QaRH${KY_egnn5!k_K z*RTjqcF=rp3OsrsVUsi6Zim5YpVhTKYb#64c7)TGYVLo~5oL!(l>mWVRN*@K<~3+*}ibxlYPPS`7e2G*~8xnDtC`be;5g zhK$ANxiEQ;bLT(X1398194mI~u!M@-`GG;_$$$GVg!EjI-mR11zX|<&&^=G)gzht> zs_Sq4>o@%D-Vgr9i>8jr$0{nKf&@#`GT=85CA#0exC9(H4M!=c}Rx7F&4uio1q7akaa zjlJ#G12wG=@lN~_8vD4S{e+zVTZCP^2%!Vfsw$0h=Q5sFBxo1Xw8?gP%IDljp)+Ul z&>wmx2lg${*JRP)Wi3iRKJLqRD~y(Qisq@1P$EjV>M>{<)>cO?{@+}`0z(_ z!3C%D@E?94z0MlBStaNIhV#f^6%9i)2@*}@6OHb&@U+5^Y#qWnsMizf2=Q1hzw$ah z{_)Ro*?a$vJNM5s-I-=~wnvj~4+Rs}N}NUkQZOq{fwv-%saIyq*e{+GRoi!LN%Fi;?EJ!c^ImLV)-BWoy)@o3dY9U z4nt%lYzd}qYesX!?ep8X_`y$O!}?7$O}Q}0_oD#6&B}$JBDDB8G>~&+wFd-(2d9Y! zI@1-ai)%D#$kO5p>o<0I$i?^P#M4e^-MU#$Kjk=1Jbou9p0J(i*=b_Tq_Og}{eHv2 zBLlAa=8ar+^|x3!vcNT0UBy5C%U7A6>e1=+=uLGQ4u%Gl$pR*$2+6ZEayIq8WQdGT z&`5wO^YdRupAd^vY0VEBNPgFV3PcH{WK{%Bi1Fj0N);ig?Ne33;^L6gc11q+NBgO- zoI&RLcGb0K6OMy@D`L8QYQk6hM|*JWTi^nM1w;!Sh~q_{)F!@R_Y?E(d4N+0vad7Kv@_ z2&4)uAI_X`!8F@Wt4K%3)9ehaN66;?sE*llt)&97 z)NAbr4AdRyTNj9rQDi)}Lj5{i^=gRLwhCmFPhUR66Q1;Rwrt&C0hMCGbrJ&E@0@SV z<6;r*#bPotoBP<^ypZvz{A54t%5vP5KyH*_Go(N0gJznhAtwu>8w~nnjl?PtM5wDk ztSVxxnVy-Va^uEu*tjNJ;L`ugYV{_t^`U&iP2Tu;wU}aXb4Z&(l3OcK2SzW*Kw_63~SNoi_X+6LC?3yQ@b0_JJAu-Cx?@-Q_pBWpkkqOE6 zcR4SpkJHbZ4av@*o%6C9tnKu}S#TF&cgx;0lcs4=a~8EuJPH)d_1VQo85 z_;Vv>Z0(gCZ73){8m~zY3Q^HRLVWh82}|EZLbq+NXpQDCc2j>5RgzgotO$<{#=0FB zpv*Fm;xzAk?=`&Qm2aRsJwr~zd)(WQ$1*n5Z6*|OD%xZlp;p$x)7gUg@}*b~T`46uaOl3o!~+*Rm>BmRDF_>GPoPKaXcT^GA8oPdts`pPWuyU)%J2sMfEw*qZ6J zScAu9dm%&k?D=Ix+oE z=-->n);FR1EQv_!cICR$e)~^fvEjkL_NC!%aTTH$B5}YFSUITdJZqYB9=D!qIgqov z37prdm{z5(eNmWY%Q%gZ8{j%}IJMwk#uTj0lpQ4;5RAz>V{L8p23W1ODWwOCmM_e= zU`)XrZ`6z9jPmUZP6-}-s17C0=xwA$D;1=H(DVt~w@Pw~U(RC-;6u0ZBWCVag*fio zuy@O1764H-Fbji4p7r$m^XNxD2yObP8u*t-JY<3}zP{x*Rj-O?4_JTJV+oj)Xwd~C z0!47cEDVCD1ZGGnlZQ%^5>3jal-j6#3fQWGWTLpx;jt4%08(2PUmF=!7IZ6&NzIBoNpX1x<;ywH1yWIn46>JU@Kt_w&-<`cK?-+ZXug2Y!bq zK6op#cq1}UqIUfJ8mXUg#;y`BL!&j*+tT{zZJypj`B%#(d&Y#B{k<2#Tq>i6%-VFY z(dNhg`k>4m`=?M{GXehz{YOywE==e?PO4g|>RETc`%SOE`LBNc`{&NknVhmT%P>7# zbJ7n^5mu~jx!ojZ8jor+X6PFCJs7C}E8tat{PLJkKJPwl_w(C03;&t9t58?aR*ESrn}Ij zMPjoDnjs-}khNuUZv%tNo<%)dp_K){;zCbZQ%d_{f`O3zK7!Hw?0pA#f5?{K+xu74 ze#RfRc82I;g`EFeYw_Y2{SOiOPa-mj`k&B$2pM0P(DwwXYBkWo83#V`-rv08b-!@w z-1fEYC)~diH=Hy>URnViyX)RLqJfYhm*C;eCAxb|Feq%U2~I!&5s~H z038NP zxpX0{9hHMo!JT#-4zMlU2OuRwvRaf#Xzz&D5#X^Yi}2i87R@$xLV)(21clE zOn>CN7Ig+r5pZnKCj2yLh*XCXJm*t{#hV})03u@m?(?%hy$vUEJ=b*jVhizMsr_TQ z_I7>o(R?xwfA}*wxVUO-*%lpixN@!3OzGnas9GT(S0+`Jip+dp=!D35vzb$S6;pL4 zLBi zEG{i^nV?eumVN6?5JUeboqzS{qJ{a#N83T_$}xc&>lZ>wsCGPvOjVj zjS2rTI_)kAz^E0sU}W`-n}ySI{JGEHB%yvj@aYi3B@P1lTKeid=LLmRd=#+Zghwba=#>A1-a?i7!C7~ij1oqA;&;H!Oxc>Mz z1Aihqdoe&(O`(C`qk%Em<1K*sF%*k4Ai z)?c`#gMNDhodB&#)fi`HWL~`|w=+<&PZbT%NVR~unlRx!*e?9B{sngdls5c^wF1H+ z*zxwEAv(H5MoSBl*ZP~AxBNf zFaYtM+=i@(nUMug7YuCg-Ni>g{0^pi6~W`)5itE&$SrQz>#cYoLMIAKtAS^pIOOy9 zU*MunX06|0*iP`=FAH0S|U1p{h>Y>t=OcbRGRw&2Z8G%q&XrrW+z)N?|^T`Je z*&rR(urx_2=WG15WEZ3Wjl$}n&rkp4W65i`QN`MXyDC_QgdG$Uh(ece^kzaD+MbFD zj%J{7>rat8d_7(6aH*_}!+rmDcd1c2{h5|KeiA`*%2dgnvtL3Gl<>o%;iQ>V8!8QBRUMQ#522kp_TO);Gmya88+GRf; z?Jm}b0jjrMra9J)WeE6t9xXq-`IBfphc+wTo@s&>FjMm&2*G0tg4)2f6@YwSBCIxn|9ncH7acQTaarh) z2xLOGs($z-L*z`5jHDq#CNvE(W$N5ery=No;jm8}G#uZVa@_P5L?a0+99rNI7oG}4duD?P2cxwtb^&|F7f;NDeEX5zJnqMS zj+G|UG()?)J`~gcNG{5vgjjR;e4oWf3iC&YX3EZ<4N&48T<|b3bK%5=iR^-u1Rblum<*Z(ov z5pzXoZF4S1u$&irb+njnDKg=*oNwDx+wP*_d(WP!V1Fse3mNIY0r4^abv2y)*v})? zuZzee|xBmX!wP-jv}@VoLcj~U5#VFq{Y8&{S`28pTqhc>A@Z|(4xPCu#eH6 zEkZ*1kf)oegH);Ek4Jc;3~>u#|-r9%r}qhrLPSj zG&$M43)recR)S<=w(F+{{hFWJIOIbQ8*u2b5bL@fqtbd%SYGM#oM%6sW_e#Z5+m^U z_yJVO-QA>by&IkC*zJzV#&4(3_rV1;DQBw$_@S+fh;qL1z4Dj@U*0yzPZ6@1)*l1N zzBS^*FI$z9pYXW}_)qA&ktPDbgjxzA^hMeZw-4HX*{uo` zvpfzuo{R6^bn7pa;_Zx;J1ziVF$^jY2uRB0VP+7P$hUoURJ6#$1V?RI8wF^gq)L`q zmT~(U0IDwhV1sqh0Pr%t(&N~5`}yoYzK2~qHlt1B$?`wP(r3n8(VrDz0{#>FuB3?oFrj;pshGNn@<)OxRwq|3+G>F>2GY9Yk98?@U)g-2ZO< zmxe}dxqe#)&}x2TBlAEzmu7Iwg#MP>HHj=%k{7RxsG69q6Mt~S zG}YXYVa7Cf3FKs2KGDN8J(f{K>@EPm2uQ?>_XG!e&4l2fsl}y`{r19y0JK0$zoM)S zS2=sbHfpKcmJE0xt)Ab>_X zvF7_P+{Mmgx&-OjS#!6Gg8LLQA=C`6`51X)g-`=l+zP(|(gIX%hl;Q$xT~m~%W{VN z2qERXmE-B32@puOE*YA=iu~9ISLC$Ed@c}PC?emSfd7QP8)+f{Oz3|i&k|Vd$jnvU zN4)I$Jo%$P9s1{dvN@{zwCW|h>uscY7Dm`IQMUr9s{0CDE5iV#XipXoSE}^oQ8a!5 z`H?bi=4cE!3x4C32Ti~z@pT4LrE*?dMb6%7>)My2ukKQ4Z`fm0+{kJmnCcfq%!&{i zBpoK*_!*Fn`HKC%1h6?P>g9P|(=Xs8VmTlAp!C1{T9$%(%{w4QFrXdMXAvK;WT$yUnO#-N&s!7eLOwQPzY5pB%$ z9~~^s1>pNFewTm?NvJYx2AsA27>1?1vI-qh?pi)V9csVP&&CjB%wp26om&VLLJFLg zhrIK`6%H>eLo$sf4lf+#mw)-^sn)(_YcrNo2_BFsLY_W>>iYL19m^09M%sI+GtqYK zecOL76xxu?_wQ$>z4u@|FjWlrGm#K0xJxxY@xv?Oq#yY_6Y!tVcR5W2fC>F?Nkmcz zvwQ2~F8xw?))#*zT=MEybEtb;S_^4p9yUIz;3im{p|%o%vtI*mZT;ge248>4O72FsqC>020meV1kMF=N}or&CWh!IrDk8 zLO%a`WcCaz?W$vvij+>v2u&bx5ugnk^S9ceL5a}!HcVXcbsdQUF$BWW*ZIUp-ozsx z_5jva2MCq*nLTy_Wu}G~UzxZjK}th32iq4hOF_!1y^gmCWmbhxktpPBRtM9t&7_Zd zRJ_>U1hM@RccC;nGt5Iyncl|Q(1PhQ!XP!QHG|e-Bz~_z@!PAHj22ab_&NiUBM+U0 zAKf%00G&E=?B<$BJ>vd^T<&+UHeuw>$-0KDtK(va_-Q~B9XFILB0`Y93lwF&r7=)0XJ0>Fg+k0c^P5xKRx z=-2-)KL3`t$5UT$IPS@6nNALpt-0PgX#q|L4#PFSYu-^=Fn592!^Xd}wti;Q#>z!4 z4x247yQXZMoQx@fRt3<I_TMCVptJi+NNbgh);nFJbeuDtEZAJv;b`nA;>^V=9Gq zY&Ff~trpMcYmk}kRBY_bStVbEUIz~Jm#L+LASAz?FtwK$jm}8cKq`fJB-3A2UU`mk zXdc#P_S;-$$5@UewA4r+E}3VwM`8lez%vYfd>< zm_?xMM>$VEVxKfr!+@@yo8_0T+Fx%w|AQbent=a=?hP~%04DTrA}?C9q;#%L5Blvx zOTV%=$K%gO)-R!JnJ|Q`(Y45Es(B8k`FfdQ)ogBcXQtzzZZ3Y)dDR)O;iUnfxe4sq zqQsBiG6#4nmI0)Ju)&mx8Xm~z+PML+lNu$a9!iG8uulbYZQ(ujEi617$}~ z`NW0G43=s%Hbl4WTg*U0LUaMG#9+7Ne9&&<0k70vL;?}=Ny;5{I_|`_X!d@;Qo3KXB;aV zok{!mkiYUf(2GcJ?fy2}qUDniqRp>tnfjU0@_TWSlqm^W5(tDUA$t=%;5Ebez+e5A zNO+a1ep*BhO^Wu<4^l}uDs$Vre>ySh7Ph4$U``OD)F%kmRMb?=|)_` z7jvD6b*z51FzWBOLRd751bAAeyE(E_1+yrW2^kpMNOP?C*3mr#6)xDgn?WAB_+V?^ zq~hW*BsR-}Erh)snO0ah>w#=~<%Hr;LO zFRmrqCtT39@mrr|4~qb2&-hyD5Dk&IFRDK7-79k9Bd^XOy|AXf99W%{_npwaiCPvk zq5D3mYWS5my=(R_{^IY~tsYp7b7$`E$?WWfu?j!YotZi#_PTWyhLVOUB&g8P2}lR% zNT5TIn3IZXw)*B;Go?z?X-G-Phj;UmN4<-m-~I`hpRs!N(W>Iv{Q_o6FV*JS;66h) z2S<-o_s<%z8v|w>@LNsV{&GWlTX|^Q!cf{M0bGuDtv*|5ghK@+T*s9npp0F(V>cX- zq>n63QJ?**=$Q|Iv~0lbcioq*z#x(8SRp4V6EHGHH;yXgHbs3G6kRAGhtyf90 zEW$xq^XS(?s|OHfwb#tY4-x_)R@}O9nEAm97i~G7wf-t0TI~UmOdwdv;4+9Y*(d~v zN$AwV@Ig;v`k4;~8jCH!&y;^y5VToC2VI6AdmeEv+I7gbfIhpD1nRDuA_)4w_c#Oo z$M`xUk@5ML`I*NVu{PSJ!WbnhYKrW3kPlB$Nk`{dW=p7)!7 zuURTA~0fME&nRXi#nw+VsU@2doM{n2G zjDC@o-HZ+u$u-&;kb*+Cz_O9X?Vx6Vje)VH ztr_?h&^J&T*V+uKO9j6oIF!GPy^C}FqQRRvxFB6Z&Cc#$iqTg?anSXW#HJ#;rs~=* z2iB0s|5un^HCI3m5ZwZy*i2Q5LfXbe7zzagc(vFBz)J~RE`H991^%h^Z8LJqg12jd zZUM~+>h*m7%EZt7-1BLMW*)Cq%qk-_TXW`vm-N}Nm>6mxR}fN({?7*TSy3`UVrxVp zn;oPT%-j;w#z*8)P-lrFfIzp3EcE+KMYFYM^`RI1_GfS*qg`tcY7DE1>PgR`_tGLUxXkWu@+})jc3b*(uU#1Qn3C3BlpDMAppJ0+n#u+L zX;psc_pTSIUJv}Ui0qyC`zLg7r4g5#(0zhbRetRam-XKG#=qWF@7}#}!Lw*$uDw%CwH}R)VcD~6x=CBj^=cmT2Z z1#=5oKfVM0vj|Z>0^8y?&O(D-D1_F8rR^#I$eZ_8r~L3|X!2{N)45?{@}JPXoyxaw zLicid`DK@N{@`UF+FWhlJ=57Xec{x)sb8&v>>Tu)^;u-Dio~Q!EUFhH0Hlq$cOZ69 zX}-k&CzP?hbP>jkVm$guF{(w18BAu~UFo2p2RHi76@ z3b*pexHee8TRmdX0}6etD#`Nkj|Ak2?<0nrQKn3DN5_HylRqS*0zxK**jU9X)|KKj z9_{Brir!YMDciVE&!hLfEmn^-91!Mq@%Nv;ljr{8Zy>QprvhyRjl$tI_`3`GTv887 zS&%H`k_lj;hd!pVDOd$Sx0EFH(zg;w*@EMWFjw}cG^86=nft=Wks~)l^m{2NLeanqFixLB`q1+bxeF!P?UKQQO^U!~YhHp)%i$T} zcR3G!;LuP}9UPFi{6Iha#JjGOIQx1CpPFd>6S}XEv(E|L8%b5e@eldU_4^k0u3vxF zDW}BH{ngHNbw+9ib2-cATBK4@nye6%%Il%$)KEo>fF>(=)VKkCB1)u54OL~JrAZ0J z{~d+Ym@ps$%`g!wW6C0yCYN;xRA}8$H63z2Wd6`*9=YjyUiqYVvwLZQuv`&J`CCIb zW5sH~WF|0;v9C`@^jYz9#m&2{dIqHjh!J zgfF~5@9W_Lg-Ad{pR7IloXRh}@YQ_mqn~5*mKpku&Fkp0^3pRSzqEOgl>uZGD%Xs& z3mdo)Sk|amjC|>R&Adup8#-rmEk7ymsa0;YXDvapd|q9wQj{oI`QSlDF8D!aUho7$ z9-yfR8l~`$T2Z3|OQbKpkUUi(8Z0HW-NqvHj@HU|(OoVsSo%0s1peTn2>zc8WiZcO)0JW}R@Kh{HYbY* z2$h+QLkLz_#?$G$ArZrn{d;%tqYkxZj2z|Mi?Bbe5DR1cFx=l-!t$0gJ^50k;AK zUv3v@vafcqxu_R3vKt?joH8N$jfBYrNt>X@l7!&r#uhngrs~uTuQ|-7PyYicU5kWi z7fXDp1Vjhux(mo}eg?zwZ-O=)OkIAt&_RPO2*Rf8HymzV@ZNw;g}hjx+Pr)UW59PYN0~L7o#N zXbfo6n7LUkI7@<%a%xSWifi*Jw?LM%QdJcagr;eT;xPa?kQS5d*v)drOh-Va$z23s zpxoX;uYS32Mzms34+*hi@vfab{@AN|@uS|uY4sik`)24dAa#|H16cxLbS)2*!|I%W zTtB7-13)Zde-ybsdb2g?i$$E9@;5#|^Uurw1gZ`>ZC?CHfp2}x?I@GG1p?KfIrQo8 zLi25eP$S8-R+F(tTvNQQ|awJ>0VoIWtH~ z+;|pmfBPqR*(+a12sPcAInuD9*L3-ti`O_g4T)+I`qqaFcfORi;4Y+jRz(3>Mg|v~ zS+I!z;ISFy{E@BQ;K1Js3ht%}By>Iye(~3sdDt#gAY`waST=`%)EgLn`R|bZA0U_8 z3JaAn`k(F483~BRqGXXEHZJad zkr)2VKl6i|Zlbw+nyT@e>O5UcG2x>WdMVoN2%BvjE|d5_+*4E5QRTWa7lH%216gbQ zC}wK6D5&j&&(GWv6d|DCp8s7k4=g|e!4?^ejq9i4=O|-l@Ft&F|&4fAChOHf*5kb~rq*yyTS3 z3wExtxRR+5+e?oPD1xB6|KA!O?Mq3QH2cj+P_remXNs%9;!JGrBGJnoTbx5Rh%~#; zVfHn@Olam2O_q7$S5S)zIjy0(o%DexlQ(tk`dAA#WsjGAQHi<|3!O0=S)>qbf>zcVZ+*yBdjhjv9h#G8bpFD z5W2wK$8x{TLw^0I|CuMBdNsPY2mP8*7p>0$vS@W`VC%ma;EAQ8wOVxn^znmUDgusW z0<<_*u%dlp)SqeCO7VKMZ;!Qaa)t$(S&jb)l90oZ_}D*3rUU4}N9X;P634CZF=sZ{(wr&knf(#)y1Jcww=$^$JUjOI3?#+L})bu(6 zHOFtPc<)I|%w#2JA&^O4T~O7nJSt-;7rsTl4J80mq*UVbmCBICo=1x?WbaF`?1(%J zt09iwl^CKap+O)e>fQ{)wG|HEejEMeC8XOSR2758 zMYf-E8lAa0hJyj(dDE&z({#p}vqfpQn!HEE7r}$_x8<~l5b5-$X!R>t{=Rf$w)2RqNX?h+71}@);9A%B_nAc0~`icn`rX3a%gLJb-FF z+B=c=yzkSz>5tyRZF`qMGrxVodY(NsPc!JDG9cH020|lL0z(=L$h4b;%w15-`iu-0 zW%vp%kXT@9KnZ?Dv37t}p*is^HvHiqpa-uacz`Ls6)FkQiqzf8@Uw3w9{v}I!6N^2 zYzsjlHs7q-98j%WM-ds4bBAy^B|ZCvhvE;u{07PLS|V47$lVjIe?s3Y^S=@LX7051bYRtCM3HZnvy5)frIYM)$9@Q?gK8|z1!)KfTaU> zGk;(oL50xk+GRFACUswKDBzIIvXGNqAJ>yeGheZ8bqmjZ+-G^w4}XTvej!NBFxSMC z$r^~7(P-l|P1nXD!GjvZn1(%?j!Opx!N-8xr{U1yf`;R4`>(^WA^X#anv3>Eby~T}`ZpKK0NF6cHOM zIDiRPs+K#CyPvF-uxBjz5X*U$oXJtBNDQf9s-e1a1%1);nSIK`k@>rjy1j?k^92$b z6$w4^{&||uzJSo{Sn8?!O_CFGdpH|ho zL}W0D@So845={hv?*dX)dEP7jZ0f)MkFTG!;k4s^F@*RdBD$+l=|&ML{{7$pSM)ht zJ1-h-PGmEXg*^tTDj8Zd54^+ zB-3APm|oe*3m*Ape(CXFrnk_i+TSIFjD`qtR0*%FP74AK`i_YX(Ds?4nz{knUez%T z8#g6;96)(;gtHF(rD5NdfCu1}W<{_>b@N|`L4fYL#K-&ry811kiPRL$ zd4_^-2T}wxx4yLF^T>8BvO^1J1@!H+mf_&Rp4qcMuq%U8(cU}9vewzm+u!j)-gnuD zIpOdf{O+-ltuv8f2GPdy?6cUmshAZdSb1Uf@Qc<`;noKW7f`6X&@`l557WEkk<`EO z^MrLv$Z*wCQ?no*aH@(~Z$ck!c98z=Nes6{x@vpTE=n=I_)k@{7=^l`I?|A)&Kl~a zuf97T|AUu{G`|D&^&+w|0saYnFH&Js6Z#J#RgEV<_*Zw%Z(sM|sVy5{sB42$2r^rR zD2+nE>Z;==epMw_70qzi7UWTD$4s$7=yW<9xc+)pmX_#DPgyXZw}B=?Qg)qxKC26h zgsK`{#N!pgXR)&XOQhc?neKB1-Ze&7iDrrqY8ygc#r{TJ7mA1&a4SC2I^z$sEmY^0(7obw}MS^-<0{g`@=FTO5mM0 z;nDZ4dxPX50}44plS#FZJI8Q%IK^e}{1{t5_emaj{Wqv)di17*dUF?mSXHR1-w#ms zcqH^8=F8V+h#Vf04y@9B#KY> z5c8NI=VxiOZc3I&wFEhBOX1_maF8=w;lxR8k{b>RESsmgPhHIC#TN zRC9CoS&s{l7-&{knA^IIbvt)6SYAdXwm{M5#|LAk<8}501OE`sB%4vXQ`4+19A*D4 zHxol;rdU-=5iI|UUYkBU2wCGTfFc2M(+UbAkjPY8p_0&Ck(&WA*39&K95dJBPcMEa z8}2+zm`xn}{nN~@kK}~}IS~AYI|H^-^vA|8j9br(dEUU%{KC?@B?^eB6cyILC`H@! zGRUP$p}pnv!vVQy<^`lnE1sekgVG!wQty5Y`G@{9vUoLto|&`7Bn_8WtP52Keh2vW zb#GaUWyt;Om=!?;6G9vi+qPRl$l8L@de~wWA*onr+(Oa`Ngp4Kvz<&U#YPjUduh?*78eTHBWz+BGl=G0TEXV=jT283Ahucf`zM@#A&9>i8a(~ys> zN~hBSl)JCLj+_#)?s_2?huV^MI0hUo!chG4{t5Tho0r=`vqY?`lBuazm&y5f9(&?9 zdF$!#XV0N7b?l=e43-nIj%+_`ij61KYMO@}3df#vK0z~0$5-}uF z7Lqhn1agGbSMrLo@#G%c&+Z!hE&;*P8MCJbx}@Rp0tV6}<=k!lYFQ8jhj1;R>3(^y zBk!x*YRZVUAz~F210xGT5fDrsE0RaTlk1RBBZt=D>}M0c?`L578UkHUrHk&D@HH!I zXQLaD;z5JO-XUf2!PD(*@;)C*d1GS%K0?HAuOY8}#<<*-$cHs2xSttBvtn`P{ zfNfPpP``*qyhu(eW_t%|6vS`pvr2r5l9`@e&%PV3V|C#uovA4rkK{M))PN`s8+Kf9 zA^nwQ^Ygcn`vw&$dFo)cQmqC61|p?ItNC&hcYpI5;7-B7dr+%7ZQD)Q0fadf^WP~gh^_ELa`7I+Gt<9KcE1h2Dzpx|Edct6y~K`-2ex+x z*#1}nS){G(XTXaUMZ(<*Mc8QpKbs8Ta{@tvWr0{4M}lNQsAwd|?CGfXya|vtJ~Z3K zOA7eeQAXJasAp!BF{_g1&Ln;0WrVdakg6e~!N%ZnR6vpWlwr#nm%MmE&wuVx6uBPs z4G_O2BKszO{s~R!e@zns;NOWJ_OO>%*G#RQGrN1+A2h?^_r(xro7_lFN?ltpAAb3b z<$((!LQ2^R@3c|*5k={AyX?90a$aXG<}7>BEh54NACL;6v1uF!Qw938Vl{$<`V!t0-FKzOok9pj#YJk5ei09&?G5!IZJN zdqTxsTeWRK9`up*=d<#j7tu{$BX=Vq3|S3=3|HxC#bBk$apvJm@#3fL3uip#@|@CT zF?Oy3mPO={hz!O$ozR3P^si_l0Q`H#w7logp{LK-bIv#t=yTA?vnoWy9{>3|80L+Wkp0 zRj^_{!9l)Y6(Yv7OMoFtcY2n+S6@jJiaS8C7zKlt;zzbP1uRlKV@~%_BRM0(dGgXe z*VwxT+!~mDZ4iZKYKk!Z5Z-m+TX=vTW_7qi%#gwmw5CaedqmwQH7&5< zZi`n%Lmt9lRaw8Q$Fb*j?Xse^3XiqVK4sz6Cf6^e3kN2~FtV zMq^xKLf;X(=(+W-(~i9$PS3oh$?5!{Qfmn|%aBr{Q`dIwjpy2@5}fC^@r4j+hC_O@ zQ_SDFhlTz7iBrAyea(J58<194*?Ro(bk=R884eK#@6;p{4%CXKL=OTqASv+VN~>lI zD!k&Wgx<7S6|(vE9pVfqk_G$)FAhYk388|OL$I=+G;9dn8M~K&5iSHxWC`xpHm$qN zBjo|TCa`wWv0Sq84*q=lGvsv;Rs*?CqZK z4__bCxC<0M8J~CJ>Zftl^S5(r)Znhoet{%@r-L zXG9(FeOx9uv=xiIFaN!Le9WvuYg+KLCoA)S=vnR!4GUplW`8kN6kUK$9lwSlg|7DBYPE_Fs1`{goABw_{p-h-hvs zm@F%KZH4WppGno}(d5Q10}6KePhrBP@|)n=o-<(8WY&lTp{m$(_2tCgv}1x<7*Gou zG?T6C-8mCGGw5IuT{=iiD`X;4b=_R-rfMmd>snPi=l!5!Wn8_;%^)gu5I8DyPB_Ti z>8t$l!Mk|i#={&=ktQ|pgMN2G5fRPgW)0bJ2F+FfMEc5WVS5+N zYvioF;qY<%)t)U3rD3YKN_VwGHMOAEyiMlMKV|oO&cEoQzkK~0Uw7*q%umYrPG~~^ zcA5wP-zmE2x%IBoPP!mWhqtQgc{ynvgOx`$AjX339Q+Y8ty_+~75A}VE~Pg+$KG## zgOnSGx)DPU7=R3xmf3O6`38Q$wblX#t$uI68&VVmHjPsRn$*ypn&z&rUrwBxgOqG& z4p>$@-|uwSM5w1>xCZmrLzp24^R1ht+rjp2QD1h z6D@4UNSGhMuqNH_XQ~)JR z7|o@$gQ`_-%pR8^;^)sSFDls+^-HXP2dD~mwg{*Wka{DUr)fU=n`pisnW_mXlbgU5 z^!TxxPiALzgrU~dVlfY?5$f)8zV6TOx0t36-WFEp|LN@GHhtiwuYUDykA3ii4|^Oy z8R>*3G@<_m6^%QMa+5rmDig4aWk!|k9QyocTWF}6}mEVesYjBlhn%E;YeRTd-W9an;w7+PDe@Y=1pRZLRG%yZgrGLR=3KTRq zgjluJ3PptwE&UM@dMUsVj(h&y$k%KBa{ZNTSxc-1vwS4Y?agzjft9u70u-(RkCpT- zf>EoI2G`JsFjzBl`nqE~tUIx0ZgYh;g7z~yRH&?2Pz%TfC|zAHQU3n!J#Od|_4OCm zip8x1(Jcc~ZmVl0h|yQHt#h9&hCfDPlgS5%giU84=RXTM^?}ge3v2sqZgmY>*{zYm zvmUaY8&S(jF#nEvIAa0*kyh^$@jY~5z;B8ab%57gE&*tTrILjpm?^=mAkqq;;&l&Y z-8twN-a)?VFUiLUp^3hnLQ+V*A;*6GEKZ$SK~)$I10f2U5;7w!eQ_&yT~{YM^-9ou zG#|P1&f_<9-t~Y7Jm??)^p9S3WOjD;$iylzp$Yx3X(9l8+v#D|F+ct2^F{dMD(Ly4 zigilncb8HH&yC?=x#2}KZFwz1ZidWk*vMU9`!Y>!#dk#P5|tKUL>MkCvHPO?GwAmT z(X?|)r91ym0;XZ>DC?SW%`;`X(^K4W`B#avvsR*4M>+c=^K^$wAk1G+)&Q}G4pvF7 zDaN)Ot$~{LZ_@uKBh zI80zATJWI3j@@^!?q<%8O9sjgs=mGeT~Z-~#yC)n;&>DHIY_qjEYw`<{Yft>+mRB2EsW(~7yWOo;3ND)F7!rBm) z61w|R@~J;aee#3I!!=~E2W8vq+tn&3Yp2cweQPQwRLbs_TA5BXK4_AxxUq0`Q?QehmAO7jB7oWFdQDoiG zNlM^^CNv`dR!->KLJxa+wPkyKZZ#GEBuc(Osp?8x$;z}9_d>MvEki2E$)d&`m&qwH zHMgESzy4)%RYSpmG3$V$G)qhDy6F2DuC1E3B^JS57`kcXevyzD6^bRr%Mn0TnVMV2 z9bfw*p*Lk|hb4l&1j&|wohCOjXEI8O^-?Nwn4Q2&thRR??i2~E>D`t=HF?(#F?gsK2uSXVU7Rn{hLIaSI5V8#>c7+;!#G z3Ehqf3IN%H^0ET4rpgT*xgM=%Xof4qdfHOF+(%tf{Iv9yvt|Wd5P74z^mmULwipfi_0J()fCd%hRQmm z(AJU;|tU2*i*TUcGS z%X)%X6hEG3CNa<~Ewk&Kb4eJ$wpIBYu&iC{+knQYAWZ;LrZYXqo~y4QM-xs2zp+oO zG_S-d;_}_d+5vK$ag7|3gSCkmiby2oq3PM0iB)B_0u--rV8x4YcY_22-%^DTzqi1G z1^tFSFGE}wCj@~gq=Oxf|MA=COhH{KD*`KVBd<94Eq;7>H~YFZGHhs~5OOBD@81dm z8i=(}>R4-VW3Lu#NxLVl&)x(FL69&iKol#3_q3{{K1|J3%lIj%eQ+Bn=~PjRQ%+S~cCXRS>azKYAh1vO%2b4v+bQNro~4T7#a z0o`&T^~Mv>4Vz)(4w&A8bY{&R5V~kyMRG&dh9I$sL*`$J(N-l!5Xk)j9KIdhe*<#p zCiK8(VexLXuE?{&$6f>&pW{g8asj{v)COdx&$i3Y+@jw{?}P zUw0m1>!O#-b}?8zu+-(3s?!_f)unyuz@F>Q+_mWyANu$QZa#kN)&nBqr4}bNq3<1< z2mt?&q^hxd;d4$q=AzSHn}__61g1^%bp{;*DJOzd9-?kqAzB0k2bO5n*@g@A9J=#1 zr0!T@AmfJaYt7`fHMX8|DphwH%?;VLXUoMeU@|I1Q=YSKjrpoVr`O})ZMV>0T>%M% zRx`DfztChj{0*eH0nL!bq5&!UM5)0 z+)pb2IO-Lp(A_3k#58(o$al|i-ixoHfA=(lt}vqw`#MwX7$#nI^hQq43oJS=OkJwYN#rifJ_r!}k7KN!GZ0qHN<>8S!p1ycgG_;u3? zGC(yFJZ8WGQ;L*RCO@_css`j!4aZz{KThcO$w1C_nUw8`+WLn`mLaPLr?~y^cM)dR zP*0~+?E7ZLoy-NJDjGu=()9Oqjvl!D@sD}nYyR@BZ@pDS4o_kPCiJ~T69M4=fmAhY zI_r76W-dATcXE@SK&;kPAXZ?JlfrG)y7h4A0XHzK)4IQ|INvS z8Uqg@1Y`Ch8IsbCT~7X~8{tUJpkwvrtDM=R>$tQ(&uiAcNi%?cOvId#C^QM8M+~Z# zObCw{q~yq(85$SN3MiXUXE6yyzzZV8st66Hq6dE;vEaa}6G)4h{u<03*JI0Z73gSQ z)~^G1>CbC71TpPZT42P4mGR)fF)GUr*0%lXAM`P~Wa_$hG`JhS=s>fv5fv~kJ!zvalQE~%EYT@i} zozAX$jTnXGZiBLSNrf0P!z|2fT;tlepHAuwfj~-)Ww>|^2U|zG5fV{ElZMz?V`<^8 z9dY?zUjFLe{llj}?ol_2$l4@@a6;b;6#n%K6Z*H)qkifYv%PbVeZ1!I@DRc}$&EBk zGEfW9G?}cB-2WUT&D(~8aT7C}H`6q! zWu%I@#%vmTTRl)*ix&6QV!NHywD0{l-$LkhE%GgA0~~~57_xS!vh{-X>^w8Gy1#=2 ztN*UrnC9Bpg)fTL2EZ*H7Its1Suq|H5>iU-cyw%x{*qNE!~_=;DvHLNExteu#6+^S zDUp>$Vg9=Hq-ua@rpk#SnPc(-U!Mv*Xx)SP@cQlS)JQEAAqib^&>Eg3 zkTRjMID*iaVMSH!`7DGKh#HAn5wt@Hl?%Q8vz$)>83X?U^d){X`2L8;X^6nBN$6>Z z6apzF1p7Xj@L{W$Gene?gB{Lz`fUvN^(+oVqPOoA9MuHb5V94I3Q=-yrgVDtvA}@!Kz+-MaB@P1Br?gs7go zE|~gn+Ojy~QKDGAe#@0MQ+g!Oot@^+%fE(pyIx+`edF19V~9c(16xl!lfmjL_{K@m zRz2;nD0L;TU)=0&zIn4sOwG-5`&Yk&Oq-w)vXI0r41-Ly)ZwHjeHI#sojwdJZg|fL zq)tL=2gY0gDw$uo1uwh5K!TO|%|ct&HWx)31G%E%r<^@M+!(ZfzyraIiWWSsX(O3* z_blhV=qmb0ricL&ib{v14V4IMRLs)h4U1QEMt_whQU8qP2in@$TDSKbjBDHF3nI3* ztxRTHYC=R-(m>DwNG(int(e+cF}t;<>IU*K+f9i>_W-%I!I~{8at_cV3%~WL7W`;t z^U>=?B(cZF9`L|7d&4wyYsTF(Za4_VBICl4%U3RZxy8o!)#~)S03sCAi9e%W7|Gi5 zQU>5DuSKY_kGkpq9`jTaKKyLjtjd|SN&#;^x|KgYxQUK5L{DFgRYgt-RVyB4H#J)N zVP`tC=N~pRzjqF)2dLkDVHaFkAuEe9@jVZIlVt>vDm91izWvhkPx|2BzyELFCL%XY zTmloiFVl#VOz7WCsv2j%@0ZTlc)>}3p@Zfkpl&b8al|NEd=RmqzoONPMKMQ5lNc+G z-f=stOAG$KF-HjwI#q<_6?T2!B`nP!p$cX_5OM!>G*!?F$Y5>Q4LJmXRNMywolb|t zx8Kg{%98VP({@E5uXLE3N}TrePq1{`W@0@g6Uj|x_SgZpe&hreZs;MK*Q_v(>!dkn zs=A_S8e*^<{$f%#;m6|zTIO#+-r6sMU3R2x41oEzv)Z^t>_)^YSm0Tyq!sH&eLokdAQ7?*dG4*Ja&;5v=Z1>P;#t((B&u$Ki6*2Z5yCLi z-L%3Le{=?6%bH*IG&-+RuDj$@ZObJW{dOAaPYb%v0^>&D?_3aE11Bq?ipF@=w2ss?R8>vWUt|9b z*Acrt4^}c}iCV4yyt>M+2VBhB;(|q5TNb%9N{cJ7UR^zPEiMGpvRhNJDzS>}x%x`N z)C`i62?+^?%d_k_Z4bv^{6&uJ-%9K@q+uXk!RjLO{xP zOQ2Ga&ZF!MluGr#7^2;F7(7tXgYrt<0TYxGF`AYp4on4@bIQbE0g+kVufJzKr#%9;qVs-xuSjS){{lS`01z~1K zhjqInGn;C&BCI8J;CmK|o1&m8rX3sH8W71?1iUTp=qCbhK>>G%s1#SdH)*jQxX*t4 ztd%}ZU~yrg*xDWJ%#sm2tx(KoKbo!?S6p5Q!7Vys=cn{hepP&2-oCvOuxbILAivNG zCDvyVCj6MYVBu#8`x{lL1|0v@`?F*H0*z*njONO%P(`q`uCohhIYZS+9K2#9`@cDd z)E2vfLZitl9(aG2o=UN!fkrY3a@II(R!{2nzw(tY{L>3Moz6EVLcoOXi{xBmLjP8J z*fU<A>vCJvQv_ zz*K<648uI~X|(zGHZ$7<|5_C=Et)fC6|l47E{Fnltxd$*v;W)Q1*|CG+kV0eTZTAinBKg`H~!1{gl!8p zdl#%M{?C3-$=qZkH-gViEHE=PO@DV7eC;b={)gw!bUIf}gn$X%*Ju*x@_#{>U8eEc z8xNe^>2+U$aGYB7RIB|S38Z0#j)78Po@G2>?hjQZHKh}>+Gh|`mP>243j)ROH=~OH-&g8QsySb0R20g-8rn@{~ z*Z1@LofFws*=(Cd7%pY%TG)2>I?j09W_JJZdNypS(4~wV971D(Xd)KpAZpsBP1^(A z3`Y#497MtV>9#Cx84?rt?0>d`qbiIhOtx#7OEVUHiKi}F_eHlBLX6l-xry9?*MjzZ zoUVD>R#?Nrm=(Z=*v`oUI?cVHMc9pQg|MmFSaSOZ?QqLWWglILFwNiB#Yd@F+(_2M z6!2$vuV-`D1}YiLR4D?X2NMc*iB*Wf&W~oQDD)S*9Q)8cBpZd%{91NDvR@KT^Z9)^ePtZgF_`jfMz4YlDdnfOBUXuo= zS0PkE%nw^dV@N4wPd#!?DOluxO4%<0vVg7-gvGskNV#z!ANQ|<2WT%+Osh(I#!TepfGk*C z+7Y$Sh@TZ)P_Pv-ptYyO&V-cUL5qh_Rac?2Imt&uL$xFf7?_r#Nt6=K7%)pIrh`A^ znHwf^6!(G$ffkE_>*zM(A`BG4$%U38=&AKNNP$@OdFk!D*wkx0(?p4NW$P%#3WVQ# zF$%a;eEbC>)nT+S>hMk>`qO3?%|PyQvWmqO$-$ zn4X(u&o{nK<+tty>~f%zk~ExOWZPNi&|g~eV6>5@le40j#$)%c8}}-uYD0*K3XS7y zN=h28v9df*9TWNR9NSMi%t=rDB+Cak!StG4r;A@59M$}v#Z--&J41}2XFxQO#at3A z2fLj1^qZLK7!%Gelt{DyM7(71IPG5{sn{^prx%xb$=;nj?5g|osb-qc9h$2F zNLDDo%qOk3=vV4uH685BWZ4QX8yY~03u?Zd2FPBO&{xPFGNA^C^HRh~Tla@qR?woU zw^&-F1Z&%0$HfuF&!V?uXj!Tw+FBGqQ~}8*(B!NHk8!Yhm=(d=u>qHJQu+=NE76Nu zAt1HE7|3TInD0xl*H!IWVGTe`y!+@@_6%zzdl_RjAqq^OX)_7LzJp-rO;JJ>tPF5c znzhW<3+HJTrp#p#0k6zyG`98_;8R>jVpT60W_Tp-ZqJzYt+%f0t8! z_9nX2NHp+i8V5+f1Sn@?{NkXewlu_85o09fOlp!bUm%96jqon{-Wl^do0ja=>q^k1 z1SBLDu3e9G6IrdWP0?P9?_CwD5Uk1_cBg@6t1L)L470FF`m9z9{M;=k@T1>6k1wYl zS`Xd#Ug|m+s0y*Ib70mT-*^X2ic!2Mn&Ls4Eo}Lq+Rs=Y>O!5hQ4W&B6q*y@g zTT-Cg<0%wL!ojNICAaKieWy?DRRrz15>H{@y)vJY${1s8-E9&qgGGV78rXEkVG;?l zmD`Td1%UU&XP2$;~lohAan|AACB z-n4M=p^s@RlqZ*m)%S%A`F|+GX3rdFJpP}kHZL() z>LIm~Q}8}){MpUy#^CK(j2Lw$)+SU~9FxR4W4yt3_{V zeQw$pt5^tDeNfec^r~u9Bq=4UbZCHC%(a-1-~%&@iCG&68BGD{^;x=h&P~#mGKhM9 zxtp4kn~_@=LNR5#>qc`VXl6qkusDQgWQ?5UQuQLPPhSUfmwm((?$$+m|a405i zu!?pvuEAoLA^HETUpFXd0Z6OzXKTbr16EvWvY^9uAx4OL4@`!8z9x2-TQs({^|%xN ztcr025wilAg~HF61Fm{sRw&QfY1SMaKvnI&?g>rkUPu!G;Qv6U zKI$c#dMEFEz7CpGG=&&~F@DKPRYhYwZl*5UoN0*$$hZd6>Ge2p{k3$aXN-Y5cQ$4g zU^rm&si!emUGqREuaH;3E1Fq3qvVuGjYsG^hqtKg)cQc{=^pcU+(kZe4Cg)VzY{`( z5FI}E-! z0AV0y1(6C6dkUcAfmsE-s#~^fh}PtbSz1uWVhYUED`M%1C6G<0Gkd?ZiRsOK6TqC& zmz2q3J~yxcN`PPxAQOWUVrC$jC>e6i=H7stn?6sx`gopl?b&>7YL?s^f+kY({mW+f zH!w92u{a0!=@+oYrlhzj-?d|t8;c<4!i^)VS^7=TaGke^7uH@;i}4JMk{#f+2E=0x z49xB0*0x`@EcUDfwdAn*o&I&^Y$SN`V5*- z3B-E9Ywy^_J{Ay-NEFgYIR}pwDfeQ?nDAkO=_nmG`W+HUA#?(DFVUUz3$t(mSKKm` zb1S4n5du6uBYQkYHmggH%Ia;?Fr4jd-nQ|=cmB)U-u#=F{pS61&fPN12~FtUL=yqv z|A$nyT4>VA-BABv6lQ{PJg=;0eqVJ)9>T~MFGR9hX<9O*l*moP%F&}9JmqE3oT)d< zD{MdaJXRMLkSbX9KJnOrjH8AzepO2~ENv8qDhLV4b%Vyt^4?pik4|yHbKgs9I?l;U znO@U?le&pGR_4Ztrqv;qPSy%3h%0t(4#rKbVy=KJAe9Aco%-mzY34h2vi#zhHp?NK zUpvG|8Yb`CfE?G%3aFQ2H}+mh8?^BR3FIcV!E4#$6JiHe4)kcUY4SO_uUV5_(xX;N z_8x6jcAa5a+pJ1VHBA9=Nn`@sr&qZ>^m*b}ck<|OozFiF){$o#8o@s67Zqjkf;BMa z3MhN%z$p%3E-;Ls)-+pjmxVZRn|t5R9tCW%{T!LCea(v1p$JY`J%kXvr+c^ntR2OK zMiVr!v+3sm7feJ;fS}LF&%K%E-4dZ%#1fx>X~Hyjd(SK|0kLwkYL$d^%nExxww>;}s&nk|yDohDr{4aS-}&3$c~H)IO3MWp6PnPygeC&O z{|{}s@Y&lsJJ-KVRd;C+kzl6sT$o5UFv(e6+jQpV*Yk>lOm}9M{nuVgn3*yS%Y(wQ zDhvi}*truj)Rmb-W65cju^sYigJvB_RwRc}pd2m)1eDozU5gzPpll>OcpPf z>b`zQ27(wk8&fpMF`>qp?O06#d&1@yJO+=FRwY7EVc1uuPn&1`?g2EGqhCg*9snjl zlad8}rDW-3#hntx7S+wJCTy6{V2s(?Ld^GDrY^xF)`yv}u3_<8>yZF;r}*W~Y@YD| zMK@>XT)@@)D=rx^_kpTue|0c{Y1k+`*7Z4*S9#t|J2?Bw3wg_t9rULYQV(dF%5&z; zHj~|zVz_PEq$%RAK8w9+-Ke`>?8O4ozVPk*ZLj=!x6q8w0maq_1Gxg~zP)DJ#^xiD zk>+03QZa!@On6mF%!ieewy~ALSjPqQjY@xRnGpwX`=G^5cvgu5O%}d5oaLF<9LM&~ z(9WX=S4J<4VNN4^`D(JHQD|=w3h*0pNc_pHi)K z>y}+rU7rcsNliBYt@{ZjjQpX-KLb%*n>DAiDZwfX7UwMuumq2(X}htqprrM?c0;yw z!su1W&>~bAOq&KX!VoWhMns?LCvA!{HshD<@-EoAuQ zz*Rum&O^YG7 zH&?6!_Lqy9cJK{{UEsikrq(5c7YA}dsO+nf?Y6$0_)6HsQ?5LP-7~8U!_b8cJ99aC z7Qy(M6i0~I+`;NIxXs1(%*S8$F+^dwQnB^?MRK;Wri|6^aF>Za;_HC9;1CZO^oo>4 z*ywCnW$!1q5@#CHAXUd~-Fo()fBG+8^BaHu>))rhOoV_5-Fs*v0Q_(0Dc}FJ&7JKV zUzn3_4q^bkt*(*Pv$Gty`DWr&*WPo+8AKQ?EO5-(=Q3Dc z^>&pe`|WheYWEkQutGxKzXlID^8!I?V+v%JkDkJrk9sL-Z9PG15WA!W#IA8Ircn<@ z1H6o?Mb4WBWC3^PbGOe}mP3PLHS1VMkFZ{ULmfAVA%Z_X{ zEfCb+vS#eu6vMWdJmUgx*+<(GE$<=b2Jt+96EsZl%E`u=354#D4=iry30EJ-&bdVf z0dnryIVtX_VyTJ&f(Zn64sBd+*s-y>MaNgtPRCez-@&r5>HY_4j?^XyMrhL5_n`=Q z-dgbUkbOM(z9bsxW)5Aqp1P|L8ziS{+m7vL|MlhXdE@V0`MZ~>>h#1NFrj+`O$31d z1*vLWn%%LZ*QqYbs=bu6MQS@kQnh??FrTfez1D(R`RYrczi`w6%>1?LzQ>#rTTVEh zrWvAGU3GQAKrvIbV!?e`m8NOjI)EUtX>XG{b zS!^Dv7I>)Qcd6IGwJl4>lM=a~l3geyhCYIs`-@g)5N+UOsb*$6PARkDv;{iqK5Yju zW3(QCCx(W}1s`=QK+Diez?PckZdMl)Cd7jZvjb-cCZIT6K(}FS?=-=y;1#Qf?UlfjRrlk`*PqS1 zm$owODs%_Fj{zkRa`qrRzYbRd*;Q_fnQ$C00IVSD<%b=}+cPNkIY(#zzt6#ifP(79 z$p9{mFfLH}@hvi$_f_^<%l>0~(7KQO$Y-%w3K36Z6g6vs1X2=m6W`__fL znFz$n+#Vu!M#aAm*(+h1aG<7@mpyTC#?Op;K&HtEc4f7ttR|*559v$^ z;wggS6#_N+di&*CBN4&{tRj5*K5G)fRKtO9%|WUN)W|SZ$L!d4&RakH$A9?7kG}Co zfOQigU_#&RG!X#)7j*1Her3~^9h-k;kecm+NOY&SX=w&_u?mC`Naj3t?ZbSA#yW&f zugm@$Za_MfYkX!6&8mc~%x&G#1|nt8ZO&db&H&Ydr7aLC+WRECO%4!=RH3q}XUn@d z_WrMDtr6-98qG9mX!prG_{Qk-P!KO7Bw`i?+~0A3zRg|7ebvFr2ZQyKavEKvRNNoV*sHp7b8^`UbC;m5S^8Qj zLY&GR{?-gsO4DS9DFNKCjxpkzHRuk7r$XI`8XmCCw^Y^+^JQBuKJ#j-(O53uA$D4nAU0{_2(v zajQ%V-36)2Uiq49vYNJ9z(z zOd=tnL8<|7Uf9L=edP@9N=KRP_G$27NHqbb6}(&^RXb$1&XuvN>=FNX3TydZqF$TB z+q47fS6dJm91iTb_z-!uBIHa|kM#FA0DLt~P<3~epL^UYB&uWradybz&mF_;MynB# zV}LBxF(>Z4-|xNu)xZDlFTD40sya6j0w(m`OcMd%Uy-WDwYu7oyPXGBS*8(anlV4| z*yT1^mD=l&7n7mo;+rOsnjxC)SyfEC%tEuW!uB)Iq`$gojMY`V7H|Vr23Ih@q+1L^ z3<%~o*JLH_QdWjXPGZLeuO&AtR5JYk*!%N%-LkAI5FK-_y}#4lbKB@6G9xp{#?;Kj zq_F{clv<_ME0F@NDiy2B=BLkBg_i!562XPMo3+-SbIdWvoQqU`vWd^y zk`598f-QGr5Nw#DUl>*L2yMB$8xUkL$8RV~6mr@EC`|@aIrR}hYXj4@1=nA+z^4QT z>3Ng$0)3j=`7)a1<&+0EULzvV``DEz<}OO?qhp>40?Z(4dO_O+o`3sg>|JKvck>4G zMzF@S(8*StTw=KOs8oo7jh5=~Tm$-SlD*)qO8+qEARDT|5OCbK_=tn&@Wu@Mk$-!P zr~cKe@F{P5E&l4w$8h_g!8TiTA6SMX$8NJZugKOYrYjY`R-x7teLACM{=mSWudcjq zSkytWH~g$N9!kJhVgK$AUg*cme$DTB@Z`ZqKQ|})jh=p~wOww%^87Tsj1(dQ zlY0G|i&kw8Zxfz=>st^>N}MV4hRA{a{e3*}-hA|Sb0idDH9dG(;uSC0X0%UNvzM|g+j8@9ER-?us2BWhK z3irn7EP)IU;Z(YHIdpEIZiLi#Az%&6q0^zmWAc2Xs zMooj}5u)=O6oG3m44=4GSC(Y;-(-@Y&3{I611?BAFkji?-+t9cV4J7tHm$u6i20-g z5zyk;X!M8_26@A&k`jvxDeGb0+k zI4+L=jE)Ni;M|d!?R_7NM|^+p6CHNs4yo;#lkZChK$@JNXUDxUI-(q_b90_HIZp4~ z0qrdfMrNYly^9B5_6nSxozZ9+cM&8_OY4!5=n~-#g{G#@xf{?IjICoi+r#n0--rDh z?*jTB;9I1kbT>z;|i!2Z<*<^$={6X^Sur-kaUS8}e>sPZZ50|Y2AWH@{R zPM_ZJ7M&$*>AWwmJ^*rBZUlC`eu=)$<%4DXU1g7Cd&EeD*cv1j^(N?%+{XdzG8}MZ zpOEg@_J*@;IGP$B-oK0E{X6*fJHYRG>qB_i555M!@<(2a&w1u?{KK;=$fJRFsiW_8 zjHz?`=j!(mjrH!ybOD(HZ4WF}enWx{bOMn>-!vcx(z!jd#X#B+PcEmM3CAESFdWLN zGpd*3J|Z!)Ba>yRIWNflGki~6$7j6vDLnblKMH^3?Kkk29(ernZM4~ujiS`486tq; z+#!=dn*A+8J4x~h3KtA5FM&txOu1s9v0KkEn5J2QDY(Z#WWqerZyn&lU;17w&mY06 z8>SJk@m;O70=TY?;GyPvM;j!XH+<*~55O;vZpQ(`B*$D7W6BX!{d$j%sZAdi z0X3g+dhfrqev?FRFkiu#%Vth{^K9Y$A~q#tR6jOBO$(j0pp zc;HoEg0quL@SwAzb1hnz4#?%S#-IbRa<+pf2VQ*>S6_LDY=|7C(W5XuqE3jFhNwYE?5YCRf2V*%jCD>{_D2+T<%@?ZB_fhl z26Af68%2^yM{7wcoq{=FN+7M{tWUTT6YebgxY`WA;?fyjeDFLz_VO)!!lj#-;jli? zZ4c9!RW?eNf}k>)(;swt<_QFq^lWQHJ&9Su!x2r+)B~ALh9MTDO$ba#Utr0GN#3|` zg_&Uq!<+jN{_)KteBaHh_^!Kq*i2`5cUu%}o8Q zFOG}jXaBeW06H?$_J00ve%Zsn^mX5u8Lw1*6H-0)Gf9w|A`TiMprWP`1I;HO0`t)& zyz5{73$#mz$WCLJ2E^Tac=5;nBAnf0*`K>1WXzy0dF9Lq1S-!?9Y7|4&IT^qlgoJO z7yn6|+`a8hNTTqrK4-7M*Yszz^T;e zWKS3o5|ogNU;kZmVU04w`q{dc0GOeZ+-z=V#`mBYpii-ZSMW+>pHqQ*3)nb3il9F_}glHjog z&SJu?IKX>)!yC>H@t)`R@z&ELeDA#pw`{`31}^y-j;1qA=I9D^dmotPFjULVI5#lrMb2%$L;xs9O)tEHy-bw~4gyl28k#ZP<6^;F^XQgnhaKcUd*LxHvA3pXK8M0OVMGh=&ps^kp!b z9jeb~ejQ~F*8Fwl)FH?EfggPnY=575^ax;dTzUL)>>VD{iHu!$vCwyS=P8F)0z2KL z1zG@ipML@`|F}PjyU$;Tc~_8JQBhZ!ThOJcJkQ&N=pAjE$SgoPdk5SbdhgtpSS3*( zmRn8coHI2RL#Yo0Jk?Z3KQ~ljiL`EO6D&HOfA10A^WE3s2Rfl5Dj0XG8_C8-B}`js zdNB*lHBMQ;qoTBAq_(bPp5K}wZccdZr~epEpWWjQ!jb4BxQ9bI;$lMTVa14~I?;_z z5g>(cH5i&7eXmk81*Qrtx)H2U&`I3^jNW7@2XE{Wq&rwJ!H%{3s)CB;Ksbgi<{xe{Zm|<1Ktv|Cvpi`Ynag4yb2v-X*e^(f`+@> z1HARb@xI}B9}bXl4}0!tb`N_2?9W^5xdWJy7#Q-(W&@EkT#bGvo6vKtju%NVl{J2# zxG{~ux3wk^OdzeA3{H|Um%^PdnT{i*;ETccL+>G|!|*C2m5HOiqZk3h=`F{*zx6TL zL0>OXZ(*$=LFASFT9=noLy-wI58%!|UiG`*i0#cIIe&eg85r0+=a0YZ9Uu6j-}2}F z(?+-cK9!>Ce1IvH0dJ;R8O zOvlC(w{N}zPkhv81DO&=k+SVE&}`a)iJDn?rOLGuV31!Y{a<{cHE|`ak_@Y#zRg{4nDz2M(#~gB=pfNkC%A)~JnG z#dqkMKDzFKg~0Dh^9Uf#mfvbbXLgZ z200kW!KR#leMn9e$x*j#aPK&|#q<8NKeG#IDXM>PD>L=3H9?xmLxW<7t`Fj*t)t`s2_(PEqLxtS6~ynOnPuJ zMKWDxNc2cQdSLJ6pZvL>{JEL=^D>hIcX3=CKa0l&008i+PyMVLo684(U_^fa0c^Ky zjmyX_0Ev`L!Xr}-J)kHCq$nc-r_VnRGcdnh#;r9RUcC-$4Os#rFvmEmEX~x0H-k0$ z2}IB+TN*}p93DJ_&G8Q+Z6BFU``z#8e<0yD!EGl<zRzHoB~R4 zSkIN513pRtoG7-Qb70_BEt9-^0@&*~dHO(6S#aCq0(55TSUf59LAia+#O03N?+5_EC=Y#%Rp0Fasf?sq=@z;x~Sm1eey3^Z@rLY9V0 zVHu!^&rHr2EP*N-cG}y+oezExzQ^r%4T*8K#f_()!uI4Iqq#CB;I_CS^>*Yy_OU9( z0UDvS1U3Wx^g+DnHD88tb{#QJloL*sXR&0B_ru6bu9f#8D%l(J>mkQrX6R#)Q)lxP zr07^9Sm9IBPPsERFh-YnjX_LnbzM@g2}V(@ER$h};nJfgKyPT1!Gey&8>#RpK^N$( zAwyh-9;RqmwD;}<6fkB6;A9jO?!so^Qugd}JwKm3JD-QS$y% z;!H+}96N8$N{4O7)Eb(;JBof*w4W)JyBu_m5Gx?3FAc%!taA5E%{a#dEgaK`!C4;x zvsg>~(n~q^(L=vJmT|rLY*x<3 zL?Hr-+G!XWsWS2>wM?7QT7$QS)8}syGk~h%)*O46j%7sX%tB6qk&hf181aszI51W6 zhhgZqUW~^-`U`OD<_#LloROZ|SAfcPH&Zzt9SMO1xQR;V?Q6HvUl+0sXT8g4E?Y12W)K;Os*i_(7GFIl;;piqe45`|4zS=X}uFYB%G`f1~;m z)Z8-#*<(Lm*j%NerXjQ7npx7K*?#?uPpP;27n)*m!2RX)kI0Pn;2Ektxh z$<$qp5$Fq3Rj_~?Fp_-=5@Mi&0M;ECozG`(=$)HB)w@uXcgS&5j7P^GYJHu?#!S%q z<157NbrC@4;=y#IIw2L!&M?v4CL zWWq<<<1c>f;m`itpZ9y-|NMu3!9{<7i{oeWc)&o=d)lUKJa#VB%(vNgS zj3OKr(a;)K-+D7{N1Dktx_!IdIe^nGZoKT}SWZqcQY~d=K&-K8NI3^OKwd9cY7N6c z-yY-oQ(sT|+E|0`po7RVMIn|#k!p7iHu?Pl6WOP!%=!>)o z=CpNkY3J47XdlF&Ry{|XOM-_`jz!^y(#8W1K!04SUk4C=yQwaPJTo5cymloW5^C70azUmZGE4BbpGebIX*3a7hqnlU$=Fk6> z&&L^FmYFYjJA85c>>MxXg_oJr{K}vIm?N(tl3|YQco`*VyHFZD35jH+$}o;GX#Bby zsQ%||#%BM3j!98$gaC&AEN9arm@lNMVoiU}m@mH{#}EE1dN40Afx=9!F5O%q4K|?$PMhc7fGYnhk7AI z;_62{k8yjSl>o`IJj=xBiy}>4-;Iu1QS)YovpX}g`)qn>w!`C)KsP^YQ8xcD`Z9LfHih+Bq-tYFxA7C zf@_ypC$tk^CdYHx5@fkg>+@s;=FLoSEYWPrc>@%?nmb$(d{RHZ0*{LN8R%CVZZZwE zRrWe{TCZH^)DG}_dRLP-RXPleL_Yzp{rsC4&(8=;cyjCwtVmerSL?snA~S<~b&M1c zngbtt^CcWyHVpMIU}{1oqN*4|7%Uw<$L2l#{U7=H-}t9~duHCa&;wi?KO4sj8UTFK zXMge4qie^%wQrYeO%Y}DrlvUTf=A0JIuSHt2pXA++RJhE?HLVt48+L^9(cvev7DZg z@-!NMQoAK4s&X{m51r(I+l)2^`Z&O&ulgG}JG%xS1D;euGlf7W#+)~G2&5ZbG$-@B zRz^1h(^32s}fohCYchkld|UI0nK{TMz9X6>W1yD=Dy>VN7ho&v zZD05-O0$`EIJun-9xC$@H!{+0|&dXmnBKG!%5=u3YSLb_z@rx9L6H!)9*};J3@P5d^5y8W>nA zTBLf|z&&M8pM3}qzv^$`@4Uo6?ot{h}dIy@zAt=WbqwUq0-5kG;bIJb=p~Ol z`9J^Z-}E^EUU5+xcyatpA1_z{keSorM?Co$499v~ch1JjDeve`H-Z6orxB^BvpKq= zPb28ZI61|QC!fOh^pv!1z5Bc_x3?|hT81ol257sTarneP!{h_=Oy|I8Zb-DHhy-*P zW3VJHB9IUp0EmianN>ycQU+$oBiT4@ak7&yi|YMs)15UwlQaiobb=&B^Yvew znzjStW>>s>01+6OTmaP^su460>@Wq!sYvv`APX=U7g6ua8o-y5-X}T8OjV*(*(aYX z1aNs`(&)`=>t~L2In~yb!(YdRE11BP>)$7K$Bc676LlNgTaFvAzKJ}U0qw#`AhiP% z1u{};CzFnWYqr2xVm=;t?k!hva7cz?bg?jG8!SBD5 zcOKw}E{==iXXbdp0)W^3_RqcM*N%SscH6JT;L9p|0b9jbj5g+KAmhw;XDEjZ)^3aM z<({SHXqyRpmyUTdl`uh38$aggIZ!wl!E!L< zInk666ab7ySugEK)uQ8EEwlUxnD$^V`k~~#DH?PX)y?x^1sHNf&ghrXE-69z2OhDBfHL|@U8Jf5c*{FBpqPXLfCd80if%d9 z1b5}o%~XPkhNY|fVS;-xXe3)j*}8VGmeM6y)6RwkBq9bktBSxp&z#3Wr#>|{ZL0Rr zRl$(Oga{Owz*!EK+A$rWHPqCghl4>tqIp76K-W~dr-$Kp2NMOM&VXqK;tD!yg4lWw zd0!(4U}`~{f%*aU;DEqaNXS|5tZQQ`Xim()lEnz5Ij+3y4wgF(SBa&Sz*ZnDu>)2F z>>Q&Vt3h_5O^Ms@yad}nqfVinn`fw61XcYb&|niDdib%!Kkya*`zIb@@0FR!NxC>L zj-P?!1q%RP{~bSgw0C&v<0qdE+*v}$zVAfokts#9Vd;EfM=JV(I^ik8_D0mE)rbM4doym@W3f-X>g~*=6!N3QiMUr@~lYo?NnjBFQ7>x)z4`&`eQes3mpauFp z8uKxjxA#W&CP9bAM^&^JVlkY6ZCM5*S>wJ2RNs>|84|Pc>%08|a)`;0qp6=y&g*l& z`FBV#i5g!yMLJrg02E=nJGvZLAJmZ)NJw?6Gp)xy)L_cl0|2I82kOK)m8eckNDOWn zO)!&8@thNd5=a)e#PKwfm{fDcHOzl=Z4{W}=iLos+3kU`rifs0qaZX!@~t^X=`#(- z>&=@D-zxzVGB?8DndqZ)b0xK#-4a@%C6iIVRPYz_@=PwxhAnDd??HmFD` zE{4+bAR$nh7y*ns6UJ!B!8XBq``M~n0^Dh0wTvaJWOAI^$-F%A|NZ-a>2pqj7hMPf zFOHw7;{^!-GIKh9<&%%K7?%dZYm*UgCHOKJm|IWf%u@|}GUbFwmNLi3DpBqeK@xVHAAGtT8a=M1DfbM$ArL)gNQx|3Ac1}R1pCu@gBdt!MR*eI_Lm>Oih|@!Og+fj{ zr|?d-fn9UIAedp!oEPLep))E6S767^QP!EsW=F9DFqyr z=FpU-bOUScz0yW7Jxkq}BKVqT-X?uY)cy`gz$oN|0aN36)8QK%L22t_C;Ly(RDeKZ zW+21C^0ZyVIs875q0(3BDUi|zXs)?wR-zffIH!jI zh3~-Ffik1;*1&Sg?cEKoyzDlXlX;z2QyL;c79}fnLp}hBDih>q62>i;4?C6*>~o_m zF+RqM)b+arEo5knI009#9&bMX@BZnZhjIGLGxLy7b#YuAKfT8b5&-<>&;F{b`v=o+ zjT~29lyWN93{iULsYH{}iv%(Q(=?%Jhrj^P!Myw!TRig7AB%qH9*0(?LUhP%`E)^wK)HVjTOT*!{Q%*(}P3p=i z8ynMvqVS3qT@F8)S0^Z`Vev$VUN-?C~rp!P)+~Ve2E@9eRAAsvdDL)8Uaa&<(ehjQe zx%}wm2mat+`^^6pz!Mj}0WOZ8iQ@&i$iDh-e)G}6^{c-uhaFnIz?JLNXGT!CL+1yW zwrFvub09bXjjDc|nHbwGEx&_x#VXmN!ISb@d)+4n4gPju**=WNfBxS>+VRmQb;24oB(C(hjV8i|H@fR&wK1Wd=nYp~9Hw`{zX zxl?n|)6R3!08@D#+r<8(XUKF?&1IP31RnxCsnWNVS!Y-03g~ z{%V{XpeVQ;(mJL9SEPiGZbqS{8J6B*Zm1SJKCwT(n^SBEo{L(M>bFlYR)RJHo{EaA zna{3P-i)5p%n;h`a@j60cbuJ`qBROYA;ux1zDpKhWvp(43`|OurLAajgPr1R+CUPoucL+w5P#cPW($I)3pz#7X1(5L^pxyr)27 zBpVtDRj%(90gu+48+>oz&ijur?RNshRU@L5+e)vQ%1_Bo7!vyjd+lrf>EC+t19v{~ zDF7rQx;QS5pT6S&#y~m01qT2!vmHM1zysOxl6g9fuM9+zqANq3GDdXxEbSViU(MNV zjQ`R3o1C^u1gHO@&(k@lSYR+ve7DECrrhk|YLOIrQBBS!}j9gus5?iV4S`&1B zrh7Ng0r9p9_z*k{2>fW8-3(!DGGwlb3OUf`jTH@I7}yDqpeUg=>YUS52`eLW0Vz4l zgys_5h0=`G4h0Aj#_Ev>%(K9PGyN5{F2tbaIyk`8W;#Pv9LVj%5@@;xuS(X2|4Az@&1*xr4`EUN7*I&bOSOQ(qsmT#wrMXp}XKcmlaLiW{ zIHNHnC=qyBBP2#)bUgGBWyp(cKqliTT?;Xg>Njr?8(@hX4UrvL{qxP>$&p}`%KK}^ zXB(p!n(_qY$PJlt*jAuOC1L9`3h-!r%-HjRb5&!^d+(i5H6Y+`t);ho9( z%h{1F6Wy=Jb6$?>{KQ(?M<$C4o8#Bm)1YpnX-^2P8#q}tGwOFNscUd&Gp4$Bs49j! zp9H{0QKN5R0G1QSm8VV+X9RJXyq{v5QmTL62cIoD)W{^0r7^jE0 z_Tqnzvs(vUl42+-(o3)~RwZ#uJf-RbDd_GHw9M;ivWnKt;W}-<9qU01}TG zBU_py{+mYlyeeCc8KT|G(RpKO-HM3L=>n9;b>o(>aKqsPClouLkH~=4q1ySJyz%Gd z6x_h^lVJwv)L;Y@2%~(02}YF=m7f9>o6Tl*G$|*rV>}FQz!3FbRSTqzsYeL)aUe#~8Wt!7q#-Ga z-=WF~X(l9qoYf@A%=iV+v%58TV;kRcR4{1<&K=Cf*Yj1hEo}<#g3QXQNl+(0OI6Z< z>rdyf+Np6;c_G+xm>`i`7jqp$fRO-Z$dST1ZfSgnUGEH=TZvWCAd#tQ2n5DG$JJLp zk2u+=e}?J3;6P?3xI47*c~f&<;0;)#{WcG5Z_WT366`C%_khn=&s^^^P$j#GSb!J3 z^zoz5{OiB(SMF{19=*^4TpT~0#|vt4Wu~3XhkLeZ*8}EFJ;Q0KXcYLGmIE2ALze+$ zJ6e8}5s|(pT`Uh$@m+B0we~9a;zL5tpAjoXUb)^IQyI+By6-@Rp&`a@%hNT;UQa5z_gn;64wP7jn;~&5 z#2kP|l4C0;t&VFpbMJ(yIrH)^x_700D?iOY6C87+cOhk3Wtm15I1)SI9ft{qM32rW zS%AfzEJVtog#>?e=Dbz`i*j5XuWHi6z70%sEa##;e$Q1#Nq`^+1g40Zz#yv&1X?(A znrGev9lcT$NS3x`vJ`dIJDhVo^i*q#gb%ulTnSPI=CsODt9#VC*H@KV$mCYS2I(%& zof>dfq{MD*l3CzCLM@g}<%~$KU6yRBQ)PY8IX)1>VA7Nj=+wIf0#g&KkOb_2#ED?H z$ta-}C5uZhqjmW#-lT_Qi2={8S$=C;;#+KlWpr zYcGG|70B3cnU;zG_=02SsKA#LifA%v2wV+spk2@SZ${_L>Fof5i}IwsB3&snhiRg^ zK2MMF_$$8xXEz^HH?s-J?aC05Xg1NHo{MfH0?yD5F+##LIV;$%@<364MYW_zt9gl> zWeJobV8-uc#@hUbj;kCLMR{aDI40#V+sd3M5|jbni4AEO-5vdm;>tFqB5_4-Nr#ph z;La^_Tm@7ND#7D;m>io`swU|1t)54~B%yf##dZchdsL2Dm?gCxY_TpdHr=WDD;-4T z-s^tcrJi^7{dYxra)jl~y1-2DUE(?3fAa!*lvcW{byYjxiQ(-i&oK41a(CUE;bhwu%zRVHuq;ooCLgY+f!a7g52 z7=4RJ9=U$$kAKZ){nr34Sb&S;r|oz_Ev!%fLx1bae)IpS_q;X~Syml%84ifPWY65+N&)bm z)F;49G%yXn>3fX8sw7Vl`|Ma${jfRU*t_g3^XwqI0&O+~GA1=9DG{0JGod!N1ygvh z#7tQ%fbN^DjRcEgOj6rALy@~_OdPhBoB?Wc4DP33Ri;Ry0y%2#C8#US2nsxEV|SQ2YeC&TiQLbsBXv^X0nFfo$N?;fsCL~jSd<}Fxqq&flD>Z zDJtHuYCPzuv|gZQJf#EBxMrqw6R2NR|Ub&{!6kH$;hUVY&L;vuR_uYEmZv=3K z7rZzwj-T4&1qA@!{%?Nl;PBGH>nvlxfiGY=t2U9+G=uhOSBYFI=P2hkO;pB*sMs=I zW~^Ud6?$R=Y#rfb7dLbm2JYQ_2#>t_Yp|SNVU*n&MYguv(TUqcz6&e2qz!6Wmt=nA-Xk!OuW_yv-CHS7asw!6=<{ zVM0-8MbF8dRgR@7oQ9UqlR;WIz>+RTvV2N|oMJ_w$!}MLY{}@CIr>0! zmPf`&OoyEyA$T3gq_d1o-xQCTvJITy zI`1?|$*&|(nz>EyVw6Y6WGV@a2x!YMVF9@eHMJ zG8i3K)k%TQ7_rX92yRIo^yFx*!JFF5t`vNgv9f}twT3oL7=x6(30Od%ArL48#ozP# zr0>Vzw!-zi#oA=BJ+`4loLmc|Djk%LAge*JJhU+ru@waCGw)%HwOb{;z%j33Xl%tN7Hj|EGvv0d?+CxdcZ)2D=DJc#3Lv0L8czeP z!7|WKCqyq1qaiy>CF{G;+G|=vrTv*;=$Y8e8~;1s^|g;Yb8_>Of#)vz0$dzF<;M#K z0DSgWe#@oHH}?O_-uoq_HsMij+^p)n%c*H+GSJA;z)RqC{xizanw*ZMC{%6Q0#`(6 zV7)P@7T-CId~!$&F@4A8d`J^hP<<*2=i<^55my*hGj9Cx*kO zQ`MTw(a7;tk9}{<7e|4KGMKHQ_fBV}oP2AI<0XL=D&ii7y#w}XPor~kV^u(|Vn;@z zy|WJ7C93S5&0iR?(m~ZYWU6+)oKu!l;#j2Srm5$?C29Am(J8sf=@)Ho{QfjiAHaFx zCQWq8bh3P2?f7Vh9)YQGGo8!?s#BxHo^Wb3OrR%X2t;UnH21tZpKtUkU*qIk?sn&M z=@E=evYtX>20Y_M4!n$|0}5$Od3AH|-mV2W4Q* z$aD~pF%?sTYSqZ57z!ED0!QQD?MMgCQ6gYd!lF@vX{3FI`cr*M=1hIeG zYSNw3i858)`b?};`k{&UN8XQ1buI_KR;^CCfd$& zj@kkg27u*gND6zh=uxn>EmU@AZfwU3!?c;G9dJf+DXKF%qwig*7dJ84-n)tiUh+-Y z-rZoMj&-gkGS*m@6%tw@jeF5|_GnL)iq&^a4!TO%Na1Q5TSY;%?YwuWtc=c^k(w(K zcF@*QKvqEGJUvWDO+7O$b0jdS=Q^q8a{h_QkFiqtgU&?s_V1r!=%>UknKpwN)D`c+?F-?v8L9RY;q8)VF?bT!xB33AMusRDNa ztx4nER9>CCyJEg`Hy}1|Lc=8FF$g@0$dzFmB$NWF=gg_>E$ndBDQ1Cnp=)C zlBL$h&Oj^o3pMr`(bp(Gh1M(gnu;7z#t{G%f%?Q|GOj3W48X>W8$a(`aeDU(d@?Ls zI+@CgX0kNP6h&Fv{auzHQ)7?)Wm)L_RfA62pN7aKwwf9RV+Cq5DNf6zIB_V-0O-JS z6rD^uo?}2`)Ko8DE`;Y4wX2`I4474G*<|Eex`r_V7J-b89Dwf+^wVG-JZS(K}8*I(vLqs*bTxMW&hi?{GI7m3fwfrN=UsG~5I zN}9x=r9sW4W+BDgj2M{ast8e?zVE7AQtMU&3fFi}PG@UQ3Oz!a4Uj1qL+J?V1k$+C zQl|18s}tusv8L2gRL=lbLNx8TiRASn#I{wwoP!VdlrBTgH&qoQP{B@&>WrvzKsQz> zFaqbj!vrLZ=?0cgl2JK&>22VYDFQPJKuhx?{HQg?F|q>f<>1ZXQ{wDHGcb1oALlz| zCg!K+2*!DdP?yPF^QnvhkAeB9`Pclbzx`N5|I~{;0xpi9%HstA0Dkjlf7O-a1OJVH zT|sRbTTzIdCJhZ==+Qf1j_BoN7-E^}bL-|j^>32^fJU;(akR$Y!+?1nxOe+u99{qJ zm0j5EF*iFpg;l0V5fBBKyZm>k)QJu#u$ecCy6JH1S!8P2IK~1n0u|FvZZxKJ3RIda z>J?oNJxV#A(4O=(jx<{G{eX5fqrsN5J{OH5lcGn}fj5W7p3$K<-e+ioo!YW>b#ySe zop-#krZINTkN}0(C*2G+sPV~w;h2xA2R_GXXkK07&-Kt}QaO+SnH`qQ5gZzTw)P0% zeJtBWMxG93)j_CoBcUZE3Y^cPjiBU|%z)k(GDTw`oeqqH&a?$rDxD@Bo~Ud&pwR{T z64R!06Dz&Psrzv;C+;-{l@1}Juqz|wIGsIzfXxBNJQXBFwUSoFPevjJ!2#2Ebq;|$ zpO8!9(!t)9FZg?Z>VL@0hccyvyf`k7pXBj^003Y86@T~8FJ1a&8F5I%CZ`8d-vDVu zfK)bf<0ZJF6XT~UC^XE|gpm{hQW(c_sNT7M0CfZnKtmwW&kpdwJ$L21Ab6r$z^_wFFQH2#NE!HVIa`7_1Bm z>7cb6NvFm8c0}~Gj{&b-F15x+YY9;K9oOD@hgtrb?-1XmJ}TWtDnGS0%*!Ejp+!ir z2ZAxz+Qh0MAVB540GYcjnYmX$u^F5%((HpEKwuLf3+BdoXM}GsX032|bvNg1;Z3I; zL+@!Sbs@$GVryVb;~^8cg80O+5sJu5iI2qStou&U%avDVN`Mi8mD7=$ z9%-s#kOK)uh+_mhjDbmd($jp#h=6OW+2r6bg40-x0s?AYg4H;R{;%Aw83q!~CmJf3 z0|nMJ0NuvU;Q2&WV~oxk`Qe!MbPaH9-D|64xw~X{wM+sD%U~adOj7-o7k7#3%3+DY zKp3z%=7R-e8OXj9Z32MBISMzDpONw%QlGo&bp`U-~WW)>x4pJri5`8pk^! zKr&CF(|2CGiD_yR(*UV88Zj8viUzmlaOLVV6VMKOEF+cv1nM9di8f8@)4=;Gr_B3N z>PP7=Z-#_4D{}H2C=SVp(k5uG%#hp=L+evO%p^n&cK?IKq1;KZ))*h$&Cth!T*0&) zs-}TWk#?d}0w|^jm?mIKZkl!s8q0TiPXNWJtvUKq0!->?_&cV~#!!b%B*w`;j-R@X zJYyOl>-{$)kmRC4=1!c*_p(wRj-ig8*@2-h*=$%`Yy;QVG)+ur30xPbH>L3+X$R5* zo1^*K7kdK?0N89Ed*T&i^!=2A*uj?y$|n<`*N%8}fR zJTo_1p#vd(4h#>p14ee%7-iD|mLnon>~h=?9I4VyG6cIkeWqIG$_W5Fwt@N$GAl4% zr@os=G~?&S;114YwBt!=86m-0UMu{-=8)d6M`##w%!Xy-HA*`4B+UA6JRS=f+Gp& zyZn#Bn`10kn^I0P>wwk28yZdT(v>hu68K{UB(-V zR_Rc+lO9pQ3TRN9-~`JWb96KqtZnH)))a&o2Z^&7;PN|W0vDzo_s;18>Uk=%;;khe zemA(Waw7)Ewwx!yADtx~I-dp1Jj*G_!Ry}!rV1+MOsMHPswLZ3rh9RdI++3%~9p0DNg}T1xpJDP2ppeDbfj)-6C1B+oA`|mG@pp+8 z;8w&t2K!aeNou#gNqcE1n&lSLjDo#d5;tGRhx5bp7yFT#L#y=(f-Zo7a1548vVx-W z`dY&U#8ifA08+aq@;(J_jQ3BCU4cV^S=Y{w8dHQJ7vSjOGmI08Qh8rw%B(ztYt^8#yaKfXz&sVxE!n;3TaOX zykxNHqf9>tBPz8PnCu40pQJYFlsMaDDWJcWbK!HBvy;OxmId7dh5J4{J!wb7GOl zZORXq6Dwy5&_M&F$8j#T;sPROqHmMW&vG=SUi94vu}1Fbs$Dnj-C)MtJ<*Bg8pb@b z`V~kiM7;L4p7ad|ti>T;uKpHW0ugSmSyd za>R7rm4-5kFBRF3&h3iboDFw0@g@cV$=(wIz0>Fj1g4`c_zDxu^8R?U=YbgC1Favu zKlO8)6Wiw|WaARynqlg0bOD8C$S_O-5$>)X3wdv54m3mNz_KiO?2*SefBBpK$}8r1 zesN|_TD}*@#qkq5?t1`my3EsNe>$Gr*jL1r-U}$ zeHo(5@gWhtQU`QC%*EGOSG3Mv??v@SbS2^WvvL;at30MFff(ANIV!SedLTu$G968g zgWQRnigM}6XxTvL9Hj+F*1u;^^_a(n!16g&5*z}9)yjpC53=DxSJr?asfxORJ;V&3fG$66C<@0neaJrdTR!(Q;@3> zfsrjVcfMx=+)N`>+CtzR6b3e>&-!u~KlY&?e(?L=`Y%5{Gq3Za7sti%6Fcr}0FasO z%Bx;{1&N7eTxu~2QNcy!SNqv>w6)0*qq^HwbRkDgN6Wlx6Mb!#SbD%4jmFvO5gvZ^ zH=;lPASUZH96&Ucz7L;_=UIKXt2vP~e& zqn5?Fe?v$RY0k6_qUKW0YrUop^~VP^*0qj|aEx;=r>1pT=VwzRAfx7C2PHTz?1#_F z2(CBY5ZAgJD;>;uuMvT1;=T?@I_yl1i9jg_TTH;v9BQoS&`UTdKrFTfv;iw?=P9k8?a=u-bMB5n0=ys05D*9^wB2{{=zr?*^ga-hb|feT^v7|Us{4U>xOpa zpJAFOq)!w9>9ecI$!PE@3P(~hL}RsUcC(uQP*kXBgbt11BWZ!v8o20b-KZRU+BupV zbkg-}a~dv2ZMM>|qcdvd_vip7^PQ4gJzJ-#trRG!T6!(selm*cqH41tPQjk*+F+){ zT<4u6D#9(0u(k)5Bd=!$9W#tkIZN9dhYxPCoG^9J{G1ys8rYb_wqidNDVoO53jl(K zzStY+vk5!5krKNy4)snzIXzdon1Bk)ziPjEMuG`N_#or4I=xH+fyU37#Fv05emP68 z9J^@u%DcN53(gzIDQm+eS1w)-5Rjv61S_scR%n3Z>tY0qVndESzwhQsGjLk8;>0BJ z%I?n1ptM(ksh2@T&0N31v=p#g*PvsE?=%A@F=91%V*diAG*EzpV1d;O1dTNc5!_D$ zr7dvqT}ngrhQo)?5T`C+aX#-~OGu#DXg})ruKhLO!1nnKtPN@^R(*;p7@Xt9@vkkX zIj`mnDy9OZ0-XlO7Q?>#N5A`__dWOCPrKME_~Q7<9QQW>`0HPN+zt+Yox_ex+?O&8 z%q!BFW>(}%!{t)Bo0p?k4m)Y=6VehWUyh{lZ|;aDgEBUF;IV&!@%#fyD+JoSqf^Up z0;*w-s!!(6Q^KaT9jc@3Jf^3rW*lauvw8Qt=Qbf#O2~D= zvB-1Ob*<|-*Wd@zI7B1@tZpcP)6`nmo3_mcog>dlv1qNUbuPdrQMK+&Y?fkUx5s(PFxXw&54L9Y9*=*AzZDN1>}`Z;2iQ#k_Vi30xQ-& zB!Ji&4j$PePuRyJx%fmfl%p;?BIYRr7^?C}04*@K6Ivs^Z&rX?42wVnfk?4$Jjmw} z3>wG|jOaiBvF*6_&;!Sx_qCt@NoovqU)%AEf?d^wGzyY5jn$JKC#^r2XQa&E@^i;-+&OE)Y7mOD*@sD6H5s&4f`7@}CK zcAo#yVbnPA9@M!l85J^pp_@bXKYCYF<1dn@cjbuRk7 zz!B73#&wUqFLW?sC;*B0jICxV-cWUIEq)uFHS2d47AF}UYLrcfaGTmTR$ zkRl++4w3o{@d2Mz9rm)A7O-CdUlD;1==~9Z(T~U$sA`6+l>l1o1a<`A>O^UBYCFKEYFVA?)7L#>d5>j`3&>N)tjonuJ23TY$2ZJMV` zXNXQl0LDHK+#z$vIG6x1?~(Jq=JFHhC#EU}F-AcEM8L>*aUI91h%iG}sc+;!h&`LU z!8|cF!{%V$zv=bg@JNsN)tPzG80g~o2_5$>0LV<+yZ-nz`81CVncN+6ha$ezmcCG3 zy;s{(eIr$8ToH3otvj@CSUNk9B@D475C^#Y_;({uufTI)@@ePfK*JN~BRYxCT(#(Z z;qGlTw$dp`_{Upiq}R@EZ@MbqMd_1XWCY8d&uA=bi{iCSte%6{pa>G$@4$>suQgRd zWU5&ZKVKzGP+6D>oRG$+V>MC3S-l3VQLHru#_5LFlw-}{7Q>mKqn(O^CZLF*<7ZS^ z5wHJJ)S?F9jevG2)oRVp*KrF`CIesw%+!9x8R7vhKFi$hrfEwh$2<+%w2^I>h z1_%gE)dgGzkDv008ErmtOveW$7EL<_u9Pc^MIu@dpi> zX~P;>J$aH{)N7!kzFuxKMv?PGCr&DI;NI=)c=*Y0MPIHUk{b#|GCy37#9a}QL~f}r zgUg~VbVIRFiSCRMAn#1|;i92!jY|1>8t9#aH~kJOeH6u^cx(5#G)`^R5YS-}6qp$m z;FTjk-ysleO!{EDp0k|1dQN=r!rYPh!Wl`(KS;|*)6Tvir?hcvi zo1i&GGU{XLm-6E&0iVvyHKL7i=LtiW4RjdqqHcBW|7pr2rM#I=Y13c%2APTa^4xHBN7;33I-~v zjI|VX2c$w^zO{z2uq`$RBuW3PDq|908c-W#a1BS5>k4@l%h8-#k!FVFo?&x!EASxU zq;bw^LxOpGOKirR(p)G8$St+r98u@dWdEL%BbBiV_I1U8)?NzLb&dCz`>X z&(@M5f)JAFmhR$OI)!|SXQd6Fq5u~&I=^C!8 z=GshKx)$(|Ee4(M2=!j7>kx)Mfmz|7SLG5TNMGytFDo*K#?wHNoNM<7OuyS zo*))O^D>$O4QupIO~)9;#>f~~;~YyuEwgn8I*3+gv@C}zkzi((5puI2-7J|0dSe)P z?dAlJEBL8B6wXx(0DM*yma1~dq~nSlDodmzbaw)+<`}&z)xbG`b_7hZMchwdg+D;8 z0{}P&`bvjE=R{f>S(*;cQ2`1-O|8V>)cNWSsI`hD&?^><;E2M&W}@5y45A zk)i-<9T?Burp7IUtFo0Vfc6A$YWhN>K*u|JSC=r}<1|x* zG|g<6+8RMfDZv4CbW7$hM^9|#SuZ1*y_LpeXxbt{(zqx+E!TqoB;ECLya< zsKllmC(X5-B-bXL)iiUvXgYXy&}`GB@#DQv$SE4W=8>}p2rwIfwW1*Tdv|R`UA;2o zTT#GW&c996CZI&1#^;YJwX3vMGHT{F$QsJ?`F=2^5D{qJc5G1sfaB~Wap{Ru#K|na zq1H(O2d>SO-hg9Cv0wB7^9ivu_N(9ka%>9p2-FNQcBYDy9*f?)ivGoTsZ5h;0@{%q z4_@2+^?&fCA7N$>WoG3dE{==iKk2w{0l;3*=FN|R@KV_WtkG?16cdW%cI-g49jz9+ zGWuU3f zKDy{)QKm)f0}??sI*HLc^$d+-BulWhFkF$XM2-Rt0C$Qb#lF)HFf!(OdLL^9$dby! z06brkWLXVsdaFH^9@8 zcPCta$t|%AbWXD3YZOXKoZq8^P;Ore_oCbx>6Y7I3LqjdPjs^GP0u1Puxc)0-#mET)+UTDTAydb z-mHBfB+lfx?sD?lKT@eZu?yh5*7n3z^N-T|)O;#JFTfIziXVxCNA4ldsNs>%CNMMF z57*o!YVC7A_>QYf=iqwFUgNscJ-9L5P}epG3>#4@+TgA5b%kPM~_+2qtx^6j=5Tss{O0pZT75BZZQgh z1t==#Ap@?>f5zw-XP0r~#ovN{=NgSpSDsJ~t)i>Yu5q-h%!h$?YoBs{go2)3HoquPX$8o5Zwh%SX`OE}t;x$PH8_Wk{ zIQFh=m1|b2g;+q*uAH6Ip}TR+IS(cVMimK~bIuj}Gr+V<9ZVoe3=>z$S{1<*kGl#()Epi97~1hn+ne@Y`TgCSn|iT!5eQ${ z7<6;)MU4m0fIb5A1jN|G-UDwzE)&{J)v%w79%BsA$ug{!FI{&uV=s9mErrP`n#zh& zyW{ca>S`FwP+I8{)X*rDcP{`@d!et6G#TYEs)kCNG-`@sOZ>I6CyIm!E-Hef zqt4tl2Xa?Q9%wMx+Sak$n_wFnWV(|bqq1{eU}b=u8$ZiWTRHILMk}0S0S7m1j@W12 znK@aj6#yDumN=4)U`j}I_PG?1HF6mAbxB5|@77O&I9*v3KAi~D8C+W<3+(NjX*H!` zbjNdKsG1KcB9e=P;@VPKe>nf7z2&?Q^K_h{<-d()bSBa z#|%9W*7=~5G-v0_wMmsgG2aP!H)vi2aGO)~SKy$pTLTC4-cb(?iX4LFgsUe_?vNQd z_^woH!I=gji6vG9JJwF$<~w2p8kx$mOFu%52|rAL#T7P2U~-`CC2WvkGFHec2q->C z3m~z+2Lz)IG$3tY4#zM)8yP3900km7xm+d$Y$2UTo!eSf#BiN({R0>V_@4j6ANfZQ zK6`re;{Y7!q!-7<@qc>UmjK{%{>s-M?d>1@YM@=J7Ynsz?Ku_n)EG@o)4V#$iag8a z7hMTJktsi8;P046ZHSn#fBp3scduib0=@5ER$q7dVhC!D3hmY!X>vF8=y2@CeSyiMqx`N5(Y>GW-_8#l;N7$Y906vzxf*BT?x+9ZWLzf@vB3ig;YEoW|^;Y=B= zkTd4<$l=Q=rZ#~IrAY!}Kpn2*6mMH~mt1;K&jAU@EJ z#8i#l%Bywjs^H=KP^^UB%`Oc|vhs!B)m(5&`Tl|;)4Kl%rElu@vLj?W$lwftr_mB4 z7d-I5)$4!e8~^;LXXe8fEWpL_pL*Pv0N@{e`@f#2!@b8bCBx+yY@jjCtC$T%hkC=Z zY-zS-0Sq(}G!Qh}MEU{lvKy>PkAdv`&Dp&NapOhbj#y?4IGO`Fbe_@-n7aFo1lBwt z4N5Z#pf>Xi0ube>6=lH;rY?YHi8L|-6%A#QqKv35eXCgujS~+VMUzn)!4gA*Bce<7 zUsVBgie^AU+q$m6$XJa4D#}R#Gg5RJb(e$iWWRN2qoiq`01uo!zk$sTfDVt(!ibyB zP>ohls75Vu<=}Qy_W6j2f5vUcjaT2na!Pek( zW}yy&38jCO!U*+lVCsU;0*xQ9$MIa#4X$&`@i!O64XxiOT3lW;xpszhB?(7H7lYL3jmm>Sqv86zg4^|{RXc|fXlUZzFJ_cAPr)zpbfF?oR|~I z3K4!*&%SNgJ3isMTdk$mS%4r-K$7f<-cO~rMpf)+J|nsAOyISipKFWnw>Q0`Be-Wr zDm^ApQ|sMeXpv|M9A3XVeZ_bD%@>*3$7JSy-RZ?~as0=Q`w{@0e&~Zf?fWFc4Q9*% z#^{Rl^#Yj;229OSXasjTRmka8r#Aj+ttiBaA9sHMQ=MaSXJzVRu+ zoj2_gC&0oh@~Y(|%nhmha1&T@i6%4E)1Yo%Yr@40H8ty@6XEqqYtw1Dv+{)08K=lh z_t&T|AV3vBl5Z#Q;Mj%$Pwi=MuCZQqAriupIAGM<+FI$bIz9cptKrWIqLMde(zr~u z=8F+2c1Z7xX&pEO5cHn!fSFQ(+PW8dJ{yMp8)r0?Nfv88uXASje|l$Y9TYfBM(ccS z#72Orw~(NZi$N*I^?l_SP16k1&Wx_UA=E`^<05ldo3Xuf2HUp>zU-fT#qS6304MI^ zxH$gf$9)F?GSlZ5KXz=RHLo0OR6RS5YIV(H&Xdu{7!)iyXsKz8WyBR3nA7ow9M%Z# zIM?sq!1brT4QF=`;o7~o2NMS+Ent))p`MrrfDsIJ0g4igsR0^3I%3kHj2kkUL(L?; z2;v9kt03a z7>0}$%#lV%>YKpn2WPY?6g{eGO+lrkVYS?eoj69Uw#Zb+KLMB_M>q6L`G;41NIh4_*)u`@%nvWO~m})FiefGJ2le;*UFM$>yKw5m=YME|L?4~=RGS)AswG5u8&gW8zghO?rSAxivni!9Ms3er z^CGpr)(GDN0b8YdfO5oK^XvEd)LN&!egfkCIZiOc+3AG68>bj24LMeHP^adclL*m2 zq`OIqAD!(I#VA(VjPHTD!-ATPl(q<|$^pH|fdo|DQ;+J6nhK6TkYhn}!^4kUoBq~! ze8r1;$5WX(>kcoDi{n3d+;;%r-S2+)-tqOLS6GZa=1fT?4@ID^oG}cH24v_`#-M~m zKnd39=-}YK;`KS@il;VVjKF69EtvKUV=0TkvqbD7Ha{1^F!GQQXuF7NnkRHcCUowk z(#wFk^0|Pqbnl#ak6WA;D?rCWHiGxeTq~99J~j2juQA{~wuu|d>~R1Mc2xbQVS<7Aha3$WUGJRtHRH>OKL<{skO|;C-8s z1#yS2y{{0Bm6#V*mnT(6jMVCYoMRUW2hE{==iKXBZ40N^kEleZkYxBucS?Qnp`XvCn{ zPBfvn3CKhbzDz64YJ9ng#6^LNDg?lqb%uW{J=yyP*I)eY=%)`N(a|Q+mIjzQ@R=#k zDl0?7&XThXMKNGqc1RfJP3?8YP~N_=?C)HycY`zfg^|_;qpmVWG+3JAAb>D$+*~A5 zwbsDs3nDuWO3F4+1FCMIV-&s2 zCkOO+rhIXwi)gq-(XWPF(+Ghb=@)9(NT>|1=GnB-Q6B;5Tqq~m*r*3`_H+j2d+DGG z=(&2x7p)H4<+r(vxsI`FJM>HjZM;MPTp)_MXgS8D1MXX@@4YpFBwmYPf%n%tbv9ac z)Rt&qtVC~MKAr%lKv=)djAC4O*G5}nOkiXi1YoO%KU3pS8|#RT2mv>QaXq+zy`1GV z&(eF;%n{fSK(W-YRrIe<)jXQ?0ee>mEM|nWp%a-JgPX*jddEyoyyh`7-~%vef6@rX zQh->66bml7=;PSay0arxL2zf_i7x*%P7hQ=?jVIpGwK9@)%u3}fj!O^Ug?nNuMn|N~Jh4ul z^Uu<%)^yHteCs^W;HJP!RFs}dLx_DDrKLz2?gSFX{S@R_nO@nY8nPU3DE}-c5;55L zNY1Vt5^3a}<3Rz%N{xtZDxko|JglIg)8<4}$(xH#cawTwYlx1YjuZk!U2U=5T^bK? z@qynlQP)$O)G$b6B#OF3jikN_Scb-;=8-^#Y*l@~fJ>X0hBBo{2vE*3YkF=rsUmny zX%S$0--I9v*f90Md(Q+G^#`bfpqKWd`Ha2e1!Hk0>9m;^;{Y)n~i<*zyABz?=E-$djOZ$ zhq^c}j(^W_-vNMU-}%;du)p`fJXwoe^m6HSXQMwPm^WtBL}NEO%c?>zV~NZFI)#TX;C&oskH*y=ty014hjS92i+SLOExkXhj+jilf-Ky}l=VL+6kX zZ%Ky?QI-HBL8x4;Y;`dhwJD8JpUwLT8fiKLMTn&fkU_5K&s=(n#?E({1SM9^pi(2c ztEe#+_34defhW)G1N*_;_=i#NG^Dj_W0a6l=DLqAAi}xAxl$>P!odEKVc1{^o&#-? zP)$I?l>2sL?fi%!Len!a;^afn&N>FlZdw+*Wlx1!$_) zFi{4g@m4#A1o-rrPn`WfSF{fiUQ_Z{Pb!dD-tWIbSP3%nF=jvpViLi2X zEDcoIssIus=+sPM8Qku;fSkF(Ky3pZAanj>aEu6klrjLo^Z|h>Qyc`prJ65Y0#h+! zJCY84$hksbi$Il`1{m426tFH_6%v`I08yd-lc8W_0~@*f?W$-SfxnlK*ti8oKDFn z8YNdglb1`tKx*qbNOM&O)ZL(qIH)Vt&^1>poLyoJ>d* zN5^jN93xJ&fP~T&Ah@jM)12PCt6398eT9+8@R{+Ntu^Wrz*mjcD(Xow*a0vtF*mle z<~ySl+E52aRj#y|&(<1%na>|Vz(&?$;+_uzq-J~>IL~5o5(w|GNtHV8SQZK++r;^a zwLw_{7FwsYO6>`(Yg=c?4)I!=TWEeUDKQcHCD0AT#~y zjHl zmcFB~A^MRu@MX+Okfl8c2n7IVhq*H7smMAtLDjj94z@yGDT)PPRtGH5Vr7IyubQ(| zEk`ORK|sK0hXxvJi&0$mGL`6#HnG>KLcHDXICD=rW z#j-y-Q-Eb-sXT4XPxA?*%ZSHd6Bq+LSvD8ykw5NCxcchnkP8iH^{_XmBZ7u5QXAN) z$G#ab&kX^p{OKH|xUVs&s4;h2)kcJ7kU%Rl5uMQ^pNEwn#{7jG7S_}Y&(1M2FnS~# zBB0_`Il&w;)CYhDUtcx?ys8u_%A0HqStL4h{^6~y{UKaAZg)pt1_hFOZwM?nR@LAp z2V3xR$3Cqu2~?p9nC5eL_Bg3vZR=%iQoaEKLt?| zi8j+HxxUZm5@iqWQ_iL*RddWcpvA9L2Ax%#=m1vZTOz7rK;)=0s`r4Lt#ZW7J2KK@ zN5y&uo@Xe^J}>UCgYIGnQQXa^-IusF3nK)BA}3i`#hxj>Qg1o`zRoiS-^v-hZObi z%Bh=iTwM%OW?-6kYc$22B&dOC6G1_1)A}p`*SV#()m9$d1ZtWpF-C|EF-UAGV7#sa zrY6wHSdGCQ8zb2xW1a=xK%kRcKnRsk_N4>ToOom8U(bmw-H66iRVB4n^zfLf@l^t` zIOd}cTQzlL4GdyGWMAqz%#53Fxe;80V9J8?ngYx*n4ZbxiZPx-c80$wYCpz60PHKF zcd3i9$?7{|25W)2B_4e2>gKO~%U^vtfCnzbfEUMq=(w*I#?XU$3z@X@#&do?41{Kd$21g{0^~KE$G;6@g12}r_DTh@Fztrt_`4BD+z})}0&hSh0sj z%}Smb_HLXZy8tM#W4ItTpx8ZdOcTj2q4VHY(4g&b0S2;2Tx)I8u8Nx5O0PgHq8aDj z_2*FZ@9Per5`!jy(Kr`d!}q`AUtGI=^4xC(aIs6^#qsYw?kfQBC13n4`_u8kYn$0V zz-?itiP2;kalU1Y0`gqXaWgh8VU9WZ8B??;gbmP|_t>JJ?O}8EZGdeNqwv4--ZFS) zqe;C>h$p&uNL`&lI+~pUjdW}BQvh`DqGfdpV-O@nBt|TB&}Af4HdO4uRFt97ffv2Y zYbdwKzp<*oOA|nFf#i7=m?0C`E}fClnp>_7dv;EW6eSR&nx7B|oIdZErb%?LqV)9{ zQ*ChRI_Y|36m>or`yUiF%pMAX<@Nz?y!IxR6Fx75kLV|4_&IzZMnSuP4==cL#O$WW z`!biqQk0)+sY~!B>K8Tb5|IILV>%KN&hD`C~HeyG8_Dzz@i*L zRA)H~FXUiBv7~YB)O7&q5(e}53AKW*2h#Hc0%4=-%|-KrQSo|B0Z_ADExh2KdQH$F zbI>_jrkZu&M=YKMd|hKmGE?oh582YzTKTnj!Fx8Zmu3)e#e-=8I7;= zZX6pf0j0S@TUi@maKvahygtzTuH`UEuUh|FW1&V-VmfRB=8XZ)-~a{;^$eJ%Dm|9Q zMWBUZN#0S!fGQP%VgrI2oe1qCQ4PSE-wH?oU0yS zbe@XVNP#kEPU}h$lq;f`+YGM_UzC1mz)l2fx!W`$)!ES%b#k($Zdc!T1LvN>v;&~x+me(m85%Z# z;{9nIDn&sjQ_e=wAQ1_gGartm(>8&?<_%5X=5jM29rL8R_qNle^rFX;W8&3fSv&3J znxE$QRQjXx-5gG?KQb8tf%P7U;wRwZ+>x&4`_UBH!hlKo2Cf~wq30Uku(BcHKB1Rp zMjaf<9sPTE4#*gnJPonA3y-9BoxwbGTgR#5D+9ay6JvQ?{oQBd_WDZ<8 zzUp85yu$TB`e>kTI-*Kp&B@5Qnl17?WPVWJP4PjqCW9~m)~5#+f_k)NXKX)x>W>P4Vq z$cS+xAin2h02D#VC^%>+B1F+E%3NCxCrijeO6p8)J*@6{eJpE!m{kA-Oi_(SGAXND z?_r2daJ1@xrayb{NF%cm$-H%DpzQ;9-gOymKM+g88!2hieYyJcGa@WU&kH6!shpG? z0SH+7oe7V8>@!%NRf8Ap8{eh^SQ;YKOI>C z1kuJBfB<3En4bd>DfR_Wg@&;f{ro!NT45v(P#aMoF10Hh$6pIY<6QF|;M_1cbeIKt zCrG2y;TPQ-K_dv9LSj1JUZ@T~5z*yi)P2qjZ6XK^u@|WHf#!-S9-T^}Tc*W0Cjp=@ zrLAEat$I|{bGft_91sCMmChyTILWF|(?hKQ#fs*v-q}Uj0tc0FE^y-@kg!#U z6RS~*Q0s1%CLka{HpW>{RHyN4^iW=R<)fmME$O zQFZj|$#_!~iVlf7gN{0bk#CHkXciRo5hxLfaw~3v1}+1Qo6|o-~0P0I-R@4W^?31p6ScB7;3DxE?r<^`3B!*>GyU+Huy!o(WKA zv5ZPhK_!_fHh}3tzQYyu>y1Yy(DY*ZIWe(;>9ZX$B&fP}?ZNr0zT?ZE1n@*=Rzl(8 zxHy3O2><|?E??O^oXCl)_nqM{WACcHC8bv7adL>zX91*MV65~fUnstJ6Amu@5aMhP zJ-2*08x7DHNyjEbQ!jl=0Ue?zAxCc#{8Y{uY8Pvu;f$c6G-p{Fzz%}tP)x$X+O&sJ z2pvgN?!WFkgXd3>DIoA+E8gleW-=@Q0TT^c4N9)YPPeyv4p(lnwl}phZo7Olnj0bL1`ROaG?o>e2bEi(x6*~MiweOTJQU;l9kha>*a-O^oNMOc!aBl0IVoU^zvetrzGIA#}Eg>MsQmtRLgCs?k z0(XOky)*~Z9qu3*X?#ATxwh0Zf|W?7lFT^@Cc#{mHbHFH7$F*-|1Nh{&t~Sx>Vu%( z7!lMM)OrE^wm8EoiLT{|_*{xk@jg(_gzLztBP#B|k7vQLO#02!4b5{feFuGwn>~MAW z$-z09rsBRQzGOj%Ko!E{Cm~)iV8lB}inS2SY(UG<0sx{u_S8+Zfth{Q{I0K6OOg+l8 zA~q`hn_B$#F#uOI1D5Pn0~=QpnTjG1CE%j*qQ#(5&I~j&u^_wrY-^-+*^r2K%1z^A zrKslThqg~%4W>%zDwk^3kW0te%>%Ty$jB*QtZ_+2W~TAW+-;4UywMd*2_kV$@6CAZ z7e9yPIqC=8I9CIFZl+hH@CK>U?AnS|yRa<_#h;9^c<@g-8hTDeqZ~tmD6l_4Q$Kqo zLX{20DmAa@o(^$p6Cl6^Iazl#5K2=01@w<(v|BM9fg2CsIQX;Q@Mk_Az~u`u;KgzNxNiW!SA5MsJ;c2C2|yl}!ORSG zrlSFAE|oo1K$vFkE=S|6u5Rk6RupP$6l#HlC?Yr59KRiHbZpv&24k?C3|7WXo5Uyr zqod&~Y*15>J?~^(M%`8042ipX-^#Jjhu(Vo1Uuq$(=Z!Lyp&G` z;*OqK)>5??KRI~EZmDBMN?BxPv0}L+Tlv1IXBGn#MDGm$VJMR z&%}93xXg7LbqV%rkV5GO1^*oLAcF(Z>{^|2*dMM#SwVpE z@t{AV(`0B1nBEEPV8?YT=db@F2Fa-gMzsPEnNT{3?`{V7yWrYqw?QxQr5ri5LnLoT zo>||mDRi+5eOcD@1mAUyuXF`Sz~>UjCPL4^O`Qa$^p5GlfCboGVsK!=70K;Xdw*4CZg`Uy$Hj3U z0f4uD|Lgbm4h~-d*j~z*(UFP%)_WO>;v#_&orYEp1xXPeY)A9O06av!VaCz5*CWoZ z01likbcR;D*i~+?8B$T>L=OR%O(DF+T>?WoY(`x~`814> za=1)1BM=^j5&6)YK>Wb3tj~hloCd(Fj4~5L8jNC0psEYvxN0%X>o2`?eS|a@ z0kmn}jhP%G9iV_Vk@${jNUpVYKs9za2a?TpHlR{Nk-+|8Ds|?t!MR!2z0S$^LHd=& z(JpTh9Y~YLV4YhI-iS(3NkbvVqdCQwLqNc)Lm@z>P>c+jE0AGOvm^sqx3U?1J8*pM z`1+swmcR7B0J!K3cyX-9eFFea?+wGo4{6I(2BZiLGEQ`+e9@<7Ff>M^YOIq_#X~QNmBU1Tb z8OU?a%#461#GEkdrZbzQ{7>bF0ST2Xap!#-D$=Fg9_rany0~(}jPMu+3C!s4wTJs^ zus^hqM}PT`W4V1qhhao}t*CGTKR4#pG0IhO9FcSo5p+h$U(gT>49UFH|AF((C^s-| z&bRbs8RfI>5E&ZU`v9UjR)`w<7*j-FlSckiW4?C5b{V=VBUL zri^$kf=1EzZUh1`uxP8?(UXqlyz^IGd_}z}2LyGuGdI3Jx+fULoF-@ME|8$2f~idc zJc{H2v`LOFl$+1mpF*P9A=b>;sLS=|>I~ISqXdW$KuGo8NVNm@^ZhM!uiROgm8DifG= zbuT0k;W$UA+*5#&Q>BU%t?}Loj6!`IXd@b83LIa%y7`9h|H@bO-XF`%5k2?GX5;-Q$!_NFhtQ#Z9-R*7dM8S2~m4lT>|-{LSVqmkf%r3KYkA!jyz+3 z0myZ^TEzB{0R=mlxica$1Lo#vX_%V>xnTB&$$?Gd1|`iW1iwi7SlbzskftH7$ZzSL zkq~6WAfHB;^TPi5wAV@zIOmf26=2>hxb)zb%~g^Sck@ZW zLq?Jl$w;{Nfe@W+%JCYlxc)51%=|Z(2Y~>ANU;WvzAOSq6q}hb7hBGlPOy^r_TY7FMIHsboPlr zj!`4ml1UdrV8OBB5bYvl-V15!%tS1_=XCIh|XtP z`k<4CC@1MSMo0u{d?)5PkxpjbFcg1UJD!tf&)1acWFd8HZZY88Z)3Y4|LSKpYfhEcOb1CFyyQuMkte@ z#6`_d(@e)kN{p;c65x5UW_mv(Vr7$noxm0XEUvu{IHo((R-ndJhD)Hun_I!UQgM9$ zHEzjwC?nC}n2!b!6<`!_)LBN5Q82cCP6YaBfG0c?8QfBMbe2zs0u!#4vPpE@A(m-< z7TpV3LRC1l3Jf@>00p&BDl0QFw+ZgtO9YX4@R0`(KL2a~Z#-SOadKJcO4# z_T?CtKL~(=ENcm00?*#uphe)9UOB{*m)?gf#}l4tck!~#Jv`P753~jD5-SZL_L#pM z0ptQ~&G5m#hc}&F#_jC*@v{jZS|)txWWu|)*YHDk8hTrBXn|&d%X??oI8zYYm@x)m zo^YidK#qdF_bmZ;wd-Z0BN`Yww;1Y4UIrU9NHpM#^6STC@E8@*(OC_xC~v62iIsC2 zhP}&Myz?JCftxoS=`%M~>CfXOdynAh?T2t{c^+-=2$LV8F9G*t6Q{O^7>nq8_43bw z^hAH(F<$o>KZ1MDPHNIbLr5PdidNMbjLwyIkTXa{ViZ-<5mcwS8U+;PtrOEJ$k8cM zb7yor2KOAO=-wruEH>?#J39A|gqxt$wM zMbw`2ymzw3ninUq&; zfN8Mm4Pd+<7{A}#S+}8T1T((7{2W2y0LxtsbfBybVb#Pm%_~UYmx@i&>vidUC&YzwjVYpE0f*j=yYIb)&jV5fYiQYJ_|q2T ztq$)2LqqSzO*uTM05Hx_K*7?zlf`S=0mGFe_I_m?!<3FSx|Bg;OzIsXt?^&f=7SF2a#w0PL9-Fk(eAc zcyrWvte%^G!kD*jje9YyrFJ#{N=2*@nM9)8U677HjS=N$nlRQeqT^!+K}Gj&t5e!J zIWaF1tO5{~PtckYd5xisiORn@oz+-t?`7+&dP08>b%x{f@&u{g2|Q8VOR+cnC?yfx z8M7;Y?o}b8d-D>eIvq`Bz}0HF))TuW@*Zj`QcCrD7}DAVXkB1JZz$iF!QCA_9SO2W z0H0w5chTG~3;TPlSJAadaS=!jY9F{JxHfEUcg*#`@6ekUXvC0SCk)$LhxoVO`~d9I zq6l3bJ;8HD=dO$nN7%rD&3O55dOJ?1*(Rm;#0c%c)NWCe zwc3Ggrh9h4zQ6+SpPxOwb31?MC;pxv`;1@r>A&7=^F~|q2p7i-@whJlz_0qOzxbjz zyz#wXkE6ZUZRWieYo4!m+|pwjUj#c>zr4O^pv6yP?w(TlfMdewiG$^x==qhnck41X z`x8tRgeP|rU;io3;}=fAbQEaIB5RO9Gx(aPZ%7N|y5S4pNZJ=srk<=G$QbK=d(wz@ zG_+td9h(760pDzKbJ@ptJ%0&5c;_;{|L!6F%#;z6RSg|Yox-S8^RP7e{Q{$ztB%y>zL=;wT#_egi)tEpD&B05Ch;v z7lV$8OaOAL(00wG4KRuJ2vP)GX+6#{_2OJR|}dD%pc$I1TL%wd>zWXM$wzKSN?JDd0o-K>gKvD&};fhEsxj#S*8h?}1r?cTbmdKKk3;&DYc(>L>tu~A~aQiLCz|je8I8NgxUUTW= zaWC!w-Z8ns6G#u-jOXx7e=i<5cnrVp`lsRdKKcjnTQ2`k_(glK#KG8NIlYD00@q%2 zn*eMA04lquHeuN=a%S|ouCc4W{8MV0CWPt~|UtZ3@>I2R2X=s>C12Y;@d zxrrV|lCmE|y(KFDEEd~g*xTC^Gr@CIG@0_&ncM`4zS>|Q6GBZxU6+w}jSZcDspX}x zZ))KyA|REzqC+e|N!DY43`+`>0P8N&0K^ik=?taxoT9>^Ju?z?j)2PUKu`gRSR*!g@d_NJ3go-+kX)EV>nmEVWKg80pxw>GS@gav8H%*B25L^STO*|*G z4yb?CLrO@Rfq8FJ1IDxl3})1$L=1wUtPQ_7_nT<~2ItAmae8)wcin#X@moIl*8kef zE}dUe7sm_lxGw;}`+wxEHXj^KFjzz|mOa;{ul|#L(m^k=(#Q4ktL-L|FHAo>!_;o! zbb1uyu|E%6UWQjlh({R{mk7!4$daAUO&jieZ}o{nd*od#Zc>7()6AN_RvKOX;m z`1t)_f}i(_86Uv=(GTum@_`J;*e2!)^cX#0z41RJEO@`9lqKME?v7_>ups3M0NLrh zy2`M6XK5d`4P+n~dGqJ3Ifq0}x9EJ@Y1X}uVBP&1v4d-2Y7Nb*YJtv%lzq^d1^-;5 z-DD(~N;4GLLU5f&^*kttS9x)5C_9Y`RHMF0plv5mmkf(E4zSU7MtaCq&| z|I(L!(WMI^;KgxY005i*nH3rnzL@%nj5Q@z6|vF$@DSy! zcbSHn#wo$hft8DfA~yp&l9?qYH%yHoefE89PA2?@OV8u4z2x8GM_>DW`23fA5FdH4 zhv!Z%XY~jy@FKvj6+ek!a^Z(affw(_I*H7|auAPw$bnJ-dyM zzxrR{W;`R{z}?I;Q<1QvCwCc~8Y8OKCY)ix2jYYH5T3(Jk6(n>zU#N)zx$Ri!!P>I zKZ1j2Uy4)v0Ji%d!09&7Yy-;~$OeQd4{n&78lx!Eib(X%$jN7=M$XM#Q@?yyZq}R| z@NnHoNT||Mms*}qj-o9#1!8nMwMGUd64S&U4t?ne^|5DUYov)QN4`eTH0YrYd3|)Q zE0g{}PN7m-@(Of1wV_mjN|k(4J5Z|pq0W7D*aS)hzxA_fJ~Y(Ro{R!TnQh&cR;74a z=UfX~!3J$x>x@ptyiKiPk!X_dY&lE54;IF>h@2i7t3)%$GPrvpKd-DnBzq2IMd%t1 zt>f((J5yGgry_D&Q4c>~X#^f(<(k1~1qTB5EUV?*)N^wlX*&+C^>yud;~YdJMvVy! z2vu2Vj{u=4Rw`JNM#0uHOfnW+M_F@jv@c%eqezt~JA99=gu4auD$A6gc;>PEywCW; zGdq(?^5S^G9zW*+KxW$B(L9+qU(tMt-4vCj8iPPJzc9n7=m~s5LD$O{NFuM+8ahb# zVhp(LV`=wrYVW|^y^q5*e;re4G!9u+kv3uc*q64O@))>3PHG#&d@CWBl6rHvZ~M-i#ml=r`l{J@Pb`lLI_+ zHnZfalg1wzz+jGenkQ1>5=$|HQmJJKmXydyjdG^R73B@weA`v{u_3Zy8ip4gJ_*Cb zKI|s?6HpI-Qn4<<9fr!lM3HZ7!s*m;Yx4}A_V)n>y!Oq%9l!e9zZ4(y&;JBo`t&bB z#K7~1@4>SFJX&tnNH&uBem5Ha$qg{>2|=w`MU0|}lE#+8Kso_{&)MYMO`xZMAEX7K z3od`c9C*z%`|z_V4v;W05AKE#>l6t@+JCJGsLL2UkF?j!~tQtofWGv||`SMnDvf^)2gGNtJHlnVJ0tAX0%+&pi zMuX>6l&WumS41We{{%;b!Egqj5*8cm-%I?i8_(khKK2dxvRAzaFFgc4xa=`MYe08i zJtNRIGnUwGE@T?Z`a2^{MQBOK1T$=o63_qeG4k*fW1QfZU;Quf?Afz$H&Xtpn3jtm z&|0HF=B$~9AfOx3xmz4&GCJLGXFQF&m*0mr1|ECcuf(tT?mvM~`bS@em%aJFK^z30 zJ@^3b?cD?#xFHe-07sW7(&Xp?M)YaS+ec6ZKRR>pYviwJyK?D_&S-3FLm4f!bMwn} z2LsQKTm@~U`Zb@<@5NwuK6b|Any^(3uGZ3ubc;&Pr0C9!&(Vx=^a!3SRkBEbLgs~~ zlAHo^B~b32qPh^9fwh7{pw>i_E9V|T*2blAfRO=-p>jdx*CPh+yEdniu7Hls*Ian- zbZS;gd@d(37J(7$x8X_$AjOc#Nf%gv@me8`0vA=K2n0&B4}>e<{rKQ9gH5guUS@u7;}GqX2CQvM>F_JTT?Vk6FSP*XG>IvvoB=eSF*bp; zGu*xNBK*piejUc$X>EqXwxzTeJdcbeXm}|61H8I?@q_C<(Bkl)fXbLxwXY&8T73X4 z>Ed^bY2b61egsf^kTKv0c+jDERQXmS?#=jwc7m^Y>09wnKk}{kmr<93KcM1;|3cC`@YZKu=_MwEd1}-+7D(Ahvh$s^iySSQk4Gta`{GSPAVQXiYdn zj0hZ)O_;o4Y7;CB)|p~}1G8^1I$+VzZHs63KY(ZVejE?H|JC^TfAWX%>;KVTz(@VF z{{_b%d?!id&?fsnd;dr0qY6dDqo&~2FFlOh&(vc2A7g*n!rt}b0Qpz<*1_E;21p+eooiTXM zdSB8AR$zvCYO98qrG~ZUMAw6<0lpNRiy8w2$PVhK)`fAg&ibd2mv|Xhvs1_ zv8})tz_#ASpm+j}_R1o#WMB#4z0V!vv!8q~zV;JtzGB3eWV zk`YA#MNkkL!~lp5Vz;qT5imA_GzQSGwWY-bqNt#)HmF2Vu=NKjEff?`6jTnkZryxO z+H1`@zCYe~ti6l&_dRVt&-XO9>MXc*&e?l~x#pZBy(3{3Yql_~9xGfH7$Rxm2ofG7b= z+Pbq0a#vU{fYT+2SyV_kInZ}KYuN+^gTMncrCLI8e;T$4Lzhxm%*tdLj_mIc1h6rV zBj3xF>ZWH*ZZBDyDQHp&F~tycv!248FA79Z&_fNdf+z@SiRYwC9HEz)PN^WB7A@TbccPqjnw1FGp`;QR%bZgQ!)vV|y|xr12;gm);#)tpJl zRAbQRY>nfE?m>UMSO80SAR@5m+=^C-hSZV$3Lq$-%fmTnQo2$vAbE2S116|nC`wQ< zBRZqFo7$ld$2c@tS8)8)ZhYCUhL1k#3VhS*IyOGLfnWTgd&ZL<|F}cN>rYwNeaPL9 z?BxIN9JnJW0H40;)XdE9F~&G^CsC4sl>02-txKq+k27R3L+MiVgX%L`Vq_{H;er}? z)DBTbT(N&vH2Li<7trduT3x{&RyF@is2r9sd>8CX)kg12NbNveo-3Nke=nR)ZZ!PLT|bYH-|thnUun2$z6&wZZ=Y73 z%MxRCwhUV0{TmueKj7#U`%(58+SXw_bnjQ={P5QirOS&*PH@SbU&2=22Lq$ZM(qhD#l$War&&!Vm>>D^A0@*U-!XRn zeH-?ixI0eIuEWu_L)hxbTw7Bpq5;2XEf3-}>R9r<<4Fg)+LTZA+ZxMk2A!I=NMSDI%L79>!=G4?ojfG4?6P5eF z6!t@iU@p74tDsJjLLgvlp$)?@%sC%YI4D#_XISL)GXPX^0fMjzwR4Yi&nw8%>7Gk8 z$+U+kOc|t$0LCl}ZH$WOoVAv}B%(<5mQ82AhXfK#S$Pkf~5V2CB z;eJmAgGiG0S8Etc#TXTX_o!Pl{LX`}#ar%rCHBu9%?oB&!{-0|^VmNA`4eVap9HYU zjk9y?9CrW(;GaKzMOV6V3Ecar>5F6$8k2-0+SDtfqx^cbHrdcy8^#;ug~Fq54-{o+}m(y zeHQ|RXA_o;s4QI5vC^V>L5vl%y%k3<-;V%rkM2_RGe?I`h=U+lV^br8e6rRzAY z87$?D`sVvD0w5C(PcGV(o=kBV)VE+n*A=wVFmD3_9UQ9&Y~aM~R-9hF1*<17#3MfS zJbdH3e-F=i|1aTzm;W2g*7xE>cMI0bDF6-bGsHl@Kc$+Ocj25j5aM<kVtZ$$I zH+J?TDr1vLszN;y{su{23B84tD1}nBBOry&BGkwJx zL<-vg07behu+!b9fHgBm1nH_Nrl5`thOZ5RgI+78!B_qtlyWC={bmK!rCN z*PKFM*0RRgb*!dWmWuZnY_f{Yq~z6JqwHq34_78pya1w62@YV`bnLo#18u95a@{G*g@K--eLFRM3QVbeO-jBg5Y~;g z2KWrRZW1*}|4al29F|Z63T9*7a5pl6r95#Sf2`7- zv|x+?nWe7QLnEX>C>8+*G!^Vx9@s2-t~ab;Nsfj_)ySy1r=si32HFOaG97F5S);l0h;^AjM0VlSP3SMnw`f6U(mBRS|3n0-l8-?W1s_Xlr=0Oy< z#hK6D7j{cD7=zw|k>+OXy6C}@t7Yub*$O4o(4khQNLdu16r93I9Nu*ePIM=*|L8sN z$p85gJnda?#Ft+2T3y*;h+?tAa++urWFuCQ7~YuL@(4ek%D(I zo>)>)YGZAKIw~V(xuh%%or)B>rGGxNHmFEWieV#4G|HFm3ZkUNow<66BrWb0nMuJ- zuYZ|t$=(4F9g=?eEKUvk9v}iHgdvO}Gqk-qzm{G9Kw1f*V0=%GueQu|Q4yj7xE1tk z6|R)qgxI37dT3}Ze7j)Z`ExWhG;@H7e~fXM=$0vB zXZB;M>;z8kx*2;;U5p1``D{G-ul@_3{^!4qFa5;x zap1^3aD4R^+_vXNZ1^Ttx)s!!1P2_&fQpLN3ec36WwbD>EIPg;-_wwmea;Ol`UMEf zb9_dHMRN?$LQG|st`rK57sN75#AD z7~E!3X52w7QhUmbJFP1n)6*j0r9%YkA29t>ZVv+o5=}8Kd`3p{PZ=g)yvsz#c~4|q z4QqKo3Pe+^Nr)z~gqqO>!+G$+yo`-w{cOS@GTroOH*^NLa0wa7+zkmMMzwm7UE{H5Duyfq$k278Y_}pg?Tdb_C zQmRR47h2?m94UxfLX@EJNtTMB^;icMqyc2rH^G1nwWu*k)!dgSWd&HrCItzWj zj>n$;mAGZ=7|a_R^+3L9!!+jftw+Xg$UQ-;InQOf8JRMDrKNM!HllRhBrKD8x(d^1 z!f4%935_L-7AX*%0%u_{0$w|8tscj*{nz90?0OtHac|u3li!YK{`s5nSptO}KTD;zQG^wuBeYbt86-#}f<=ZjcPtJhQ$B(zwGw845y}@bVS=`;PytF5 zZ2{#M3fXAz(j%r=mL>GdX#H0DJ5U>o5>XkD;sH>I#zFzgYKyt<;f$3)q>?Y?T6BY{ zbTj8J6@{+2x=NB(qH^vL(LafG>HkRgCt(E32>8gAL#gXiv>;}Z}51fI2e5}5bsY~-4V>u^_V54VOE z1+l9u-Dlo>VZ-a6q~!c1*fBNp(ucZB_+rXdjgnZ8Yc z)RF-_30H~}!ZLaq6j)XRPq^@N80HR_QsJ`ZniL2#2H>URKA9vks7zE!CJ!hL)do2_8%0?i!_J!&f{#lfTZz~eviV|e;s{w|*QKVFH8Zg?0PDvqq(h|PWjUVs8+PIL-V3<{HC z>dqK?KM4@-L5@Gu4^u{FUVcn5ArzKGpBBP2G@ohV@@=^<65;av*eFb4P$fDc1F7&T z$ZZN>ltPkws47Cg)e(^EiIpq0?-VZ(W4d)JTW&*fFA9JIz|M$ffPzE0{z{G1n&&$t z-AFr7%nYXY520)n>YVEUdp(Q_f=og*73ONKF_<({_cUuU@-ZHO&nip`02HG@B!u)_ z2VnOF1KK9gT*{{S1RFDH{}E0B8UqAdt?0bKRJk$$R<8um^%Wwpq;Ogh-k921vF6QsaP0P_*ej~%e9{@{fXaW+?Y=eV;UXS@P{%`G6h5@u-f zK_dC78;1EJ)ir{`K?VYeTo5GluZ0wdfwGX$!h&egurXi5rFZ=lW+!_zmC_a(I9Uba zD`ZS5%tH_bCdtmjDA4mc^nWJv;eX8}48@r9*A(8Sa|mmb^#*9wCNpfoF{Izpq#%S| zz=JnUlmsa>^*!W{2;;e>o1;JNc>86S<6ABT%GMg%VA%4&`sen-)+!!+$-QxGI08e@ zXSIf580eOfWtoZCDI5`ou@SD%c`tp3D#d_st)c5@)AtmJv{oa4Kt<;rqsEtHU@0u$ zn$}p2Ho@G9)ieVv3X1m#I9hYGA<)Ji1qBTqV&*95F&c1u*Uh+X?P?4|!(DFpay;R$ zUxlar#c$vt|L{W0PTdnHS8m0LgSTSdMtCi76!cxsi1NXhjv4Cjpa9eqss^GK4HWXl z3tV+A0@?(*kCEk+L8~*p1tHi!T~7e&IO=_ghP9^DJIyAq5potv-&1S}Pg2U@l-8&Y zfx!)G&Z159n@g!HMGA37`;+yg>wyrt_PoZ*^(6uYKp8x;igSMk_av1aoj(aepbjHy zGzJ=iaV3($Q_Mny;(NTn9O!yxLXh^@ZLiiqt%2FD5oj!|6=P+wBgH*1z^}vJi%(*E zeFh|gxRm9?DGD^XsNkG;262i%1$kA60jGx*^xJ#!mdkFy@80jzxOiYKk1_*7WweQ? zEE@`95_+aJz1xAlv=6`OLezR$M9h}X-Z}21$CM zR!Ng(C?*-%8dbu=U8!gK%uVdW4D-|H%2n1xcrH@m>x1PvgknoQHAOHF$_U1?%H!Atbbzx~^kE9|-_h zTIuv7PXTKR7-O)eS`SCSl!xC&T8pmvotU*dx~^wsxZoUTj(J9`L-Me5mGl*(CX7xi zY}Eak`bY&OR3N5!Plm5~>bwJ*p~7)$&tV+fbsctXT!2S?^m%yJyM6~xdgp6#;f;^N zwr}Cs?i;aDkE0+E91J{kj0)YfrElL4?xD;y7 zeirmYP5muG>q&QkHiwD6q}Xu1IS+g-(P+mw0V>Me=aIb^q)?kSGt>7pF~QHr));gN zLmTT(X^tD{Q`#@18V+Gziq+Ae24~a^o5U ztZSHu;qdxCyy|YZ;(t8oqj+39fqrWSD_oZ*#fh}YRWiQJ^q$k=OG&aCsE7Z@IdSqc zKNPWXu9kD>xDy{|z5)OMXjYW#%wR92(8%W;P!zU`@}v(sR3>yu{_^|`5^55lGV9F( z+gmI6^7F4j>kPFD3S2hogVp!YD6IH&WeC84M&?TPMaGmwN-0dj)-7nTLtV^d#Q=-+ zp|sBPuqjs|{r(h?l6yLdOrkAWS-h+I2#6_>NhWuag(e>_uQQD22d?_~*%;0%_~b9$ z11rOB%x~IxA!Csh%~DnA*qj3>2ye{vE0F1?Kw0*&Mq2DbIvRa2T4QDq zjN_Ng2yNhd#pKG$wMu%+ zw$A~@!6-nH`Isf6LU&*=-}$Ce(2{f1J*8yU_F|`GQNM_GK z8;E#Jj3`vKEg20!UncKC%{>6jdLX*v*li=c0%ISOQ08wbEK^`5Gt!4*<}xe9fJmSu zY5MJ2T`)=BN&-A|4-igwAp{0rs$3{#KumEO4lpSg`L)?18-VtM@{4tqHI6?O0X;!C z5Mw{Mh4+5qAXYpu96X6nzv&!oT>N=F8c)YDI}QYuuTmVfj#9+ZN@O7#DnRs)1~@K4 z({iB*wl*jzPU}0$D$lW)8{8QM&v}qAtC>--B>XfkzRsc;)Hn_(OF8vvsYU>O>4g9g zW%90Lk(i7>umqcyxbsXoO_!2z)W8aIXzw<5l>i519 z7hL-&%-bBtS8m1WwNrwOLpk?cw^X{Kr2B-G-x3y&gbAczmBKYmGz%GU2Pu~s6symW z3WTyOI;HB-x@B5flOnBchX9c&`p(&+7m&5CAlg)r8F#}VL_SBfCd7filQz03vY&lC z77Awy%tfKD2%#ik%mQDDltaNynlNXtfjZJaKoH5WjJc>4O^`a-BKJ_~vZsNbXRPo? zYn%RkC{_>-bXHI>P`P30NWPoKoG6G%DQywxG)FgWoP+0{RdMA*{{cU6@Fv!+Xoap# zcT}N4q(mtt`k#vsL_xU~SS2(tjkWI^aMhoj6XWR@N5lc1wR7BAk27BZ*t^R+fL+ys z-LVMwFGOEc8Baum8JlpV-;_Q8RYh~2Pe^*fECcj`8XE4u?-YMut5~TL#wi-r$uIvw zf}dLWBJ$o$Oe(-89z2N_Kgi(t;JiP-H)9|h+1rw~&l{3Aq|zg+fY)S!p`}A(;SLbv z$a(?_YJ%8FPKN;t7Yhv03@w0bx6i^n3P#(5va%ohFI>fe?f?v1s#?clN1ZCq5l|5` zmk%03IOvL@FgI0p4KcAslu9`nSS4#=cZl}29AdX zhFAg5z*_ib3M?!ILuF87YqUOFtEl4uG+-Q@Jr^pi_8JXctO0EfD>GQ@&}v}AkK)L# ztFh&C-0j9E;;TORIy~duZ^py_={vFamV4n;If9e@5mbz@3fMN&TYV0c>hRIvgWOlm zV8O;lXh5+Jr0l62AE}sBQt_B#eva*e> zFx+}_559H(9G`u}NAS|~u13Gv0kuOvC~hMftg&im2KsSA^kB`6AyaZwmm*DLQ7enJ ziqC4h;zO_ea?I!FM#Pyf19p!8TESo-AjSFa;O_2$0kB|)zwbM6d+;S zQo2(FEh4i_GYgEZqBx^>(F`&4c=#osM_VtjV9QcT?IqzVXfZ^569W@7O{)bG%vq)v ziWpWPpEw6ENrIkOSqg4h08!~_P(FjgGG9U0+5#%ha}ddr z173j-f9?XzdL|Xw+`CA4TGH=|SEpDmEQ8|j-9HID% zi2)N5PixXZ;g(>Fm5xD;g++C+r2M$gfaoyC7BVHu)2N__y6Rx@%4ZCW<2pj zKacaTeHfxP9NB*e!|DlOR#01qXbucy@-;Y~)+mr_8{mZktE#nilR$`IVH;PF9|asU zUs51KR;w91&NV4ZtqLW`wzv|uxk9F5KgikziMR+_r%Q?(*&MLWmB+8R8wqf8D)L>K zX`d2pK>($rB3P8WkL)c$uRz8b!p$%Y1IHnRhZhj7aRr`ot1r-@^r@Q#R%SEJn-t>+ zn3L9EKr;p3C0)!5_T65kOZ0r5RSbhV|yS<@nk7_Pty9%p*RAm!5My z`t=!5xp!$D@ZB4h(9B$+iNrO}h{@o(ch%}H7ov?M~2*tLOG#oVyI1)OvK zQDECqtcr_?xI!0;xdBKF9S{@A9Og-sNB+tf0Se({M7mvo)^;p}3iK#Ul?x}fK%eIX zrSn;QuK*%b?POWd`N%=Y$4qt!GR2UB6VqK50@xecTEpLb{35LGKRy+iX|r|QqkSpn z7!*ZM3zSj(^1UjDpRNE1nNg7+1x%#^R~t*OMr0Zl*VK&@ook&Xg^N4Ju>RK$A$K%f)Ej0lW%Q0gO<6L#d&+C`!q zY=YDq0}!{?j$?h_=h24KxcjwVhp+nEpT{%b`CE9zKfDA74&4jev*S3i_ZDoeZelJs zifglkgsJmI z16DTn&Hw(Fz6rqDJB5MnyvG@>07OJVnVs!!r6HgyBr*diyGoItZnEN-D^6icUuA#< zoq=ht{9#PuGf>A7b#ouSWZ(6$aEu68trU{7^dopbgo#C|=n6>>Fj+<*15UDwSP*DU z0n0B)&q@4gZGaYCgnal*FeGm%#*p{t9j4O1yq|<1r$#-_#q2fSn2-$#3}Z?dU`&HL zFygaU?!(Xpx~RZ>3y)ZNG>()b=zIlcD?%F-h zBGCe+>yQ<7Ss~Ct8yP}tsGybP0ZX)QdbdPk=beTpX_nAt>N`|y9J+l$Vc$+_Z~uwj#_)7M=hB3Va9!C zli9-ihnj>zdsbh>L{~{!8jvjiW#b?Kz#7~u+M1Q_qyP21i0uahSXta<=eRQ+XS4zU zpsU;Md_?wcLrQdn0fxXhjOgSuHa9Z2gun$iQl=#gD4r}|qlN0acZQ+%c<2S!VjB*N z4(<)%kdWZ@B4sJNH0B;vqLctrfir&A6Tq3644rK*k$P0eF0uuIoA9VMH;E zUF*0P9cAp{N;Pxr0_F`~SJ7IJ(>Q?>YuDqr--3gOFT*4L@%!<#_xv*Md&RRc9|I?M z-Gc410gMLQUV+bh*y!+WV=O^*X!D9b3an9qWsoebW-2g~=uuToOfHZri;|_Y>F3V^ zH;lD#bv|S;A{0oMYNaN0D$GMGR@n{aEM2T7L+(uZ)b5i{n{GY?i~rO*a-F5{L@H?{ z3<*@B575WPJ=ii%0DLBcP8DgdTT}%Aa@PaRMie#o0$8)bq5);V+S(jtYX+1+x6*KW zEV%aA0o>nvy!*?p!@C~vaXe-16k>~taTf~qpAjLyWg^Vf{g(ab#9t04NO~oLCmKM*D|4&B)5Wyg*mW;QF$z%!K$OvOXy%00y zPw`Ucb?$~aDy~1a8{69>V&oj$XWzY0(a>857*q0cypev`MqjZzd(iU*2+y0+vmncU z8Hv#=B9zCDWPS#iGrpkfS^S6ZONEB}fYvw}B`eCgf+j;&V$*uLdc?Qva%aq5fY!%S z$1|3Q&MJ}IZftB+$I2XUS>0@4!&xjED{n+bZ5ebI>OEmpLQLtbrs|f(I~ENpJ!WME zFkoY49mi*fap2Is@x%|l5>I{4f5C$;e?H3mJluBhYOJpw!H7U-E3jJOrJ?jHx!VeZ z$`lY=ya+&JfFt8c)I&h{ylFqVNeENgpfv_yQhDlhJp(((k@@uj3fhQ3*Jr0Z-IStx zQqK4Z&rehU#`(_uRJsnXCPt=S2rhw_$}B?2Uhp27!C^{o3qCa3NoiQIlVNHpCzudOxKDA?ck^~1k*kAAg( z;7(znJLhpmD*$FzT9g9~R)T@#fSCVO>_p{LnI8`T>i(B0JQ7j93{_&${f|(%O2pa> zT?4}C2c)1;)P5Eh0g(l2=+x)~B=i*M3AI7Vl8L8@AgfA&PcZEUF%dp8kpK$bytg;@SpVB=4#0QMfnkRE#?5&2xnG0Z zhQksNv}jEhG;b&dRO?iMZLDV>yFplj#jxCI6tq0T?sibXdgz(cfYp2mV9z6J#$<{oHtJ8?Fq{aMvg*PT@m!Rdw>_YLDI0_H{SceBnxDi=_9 zO3}FxB{wOGZREalx;H3{tK2;XWNirvUo6#5FgRKRq(ktUZUxa9aBGiK7ZhBuRq=*< z-i#|B@lSZk**9Qq=m5-6O2Eq~n4h!>1#j{lX`BFbgG{c&(8sxd^ys7|aN4Im9&*h< z$}%6Li}SP0@)<|icO5k9(4)cm?pf4>X_~nZaQL9aYT7)a%FOnuhF$rEV z0NUl$)@ffztCs-dSS8S)a-n)aOw1sy_56$iD1{a=-sC2_LHfY?O4IXm{GogD5`J3C z0AF)__NrazeFk5txa;f^?2aD2&v>rpe}atN)%lFicUdodXO@a>P1cMv05N^Jxkf;y zlqs;w$>_VT2mxSE_XsL-AwRTCNI=Xzz-V$aQ(0UP`c=Mq@s0s=E@cT)P9(L>pp-Ex z8Sb*Ev*1k&hNCFb-k^X-p3ONN^W9l351>L+rTmN|iw!XwfpHXBoCs#*0M|WL?+4g>1_L*nlX@Bu1Jo){v#l3EL0=8lc8|5~@i;DWN6>}JS z+Ow}t?j#C$lTz0jeeqO$NK*O~D%(d-n^-7aV+vo(wdx9>aUrOb1OW5UIx{n&DubYO z49xS6-Tfi}j{$I?#0-D;{J+PaUG^D#b$>PKJYlV}gX#f*C2*liWuiq-Xgw``EOK`#SV;Wl39ss2N@2_Ugp`ATxFxX)LfeX}=U~KF zLVRV450I-u)=l2aHJ-dS53wY81Uy#I_HE(DYt9GuZDPK48jm{vYjNxR2=Ctr#Crgp zcdYD&WJGCE^4(2VO|VoTpq8is20}sbILFU-GLuCrhL}n~&FFMvIbAckagupzUCD5X zlDJR^rb83)VB211E`%5{OCT@BjDQG0&LMXkpVg$$aQ%2LTkI}kJW`=Z$ax&-^Y*ep zOANd>eex8>+!CC>h(H?yZ7hg^JsR5BQ0fXIdZ5kVwO}mkIJWO9Y}y7cyzbHXnh*Ru zzVgGb#Rb=XIZn-vVC+s|Hmt(8X7DmYjD{EkT}X&3=#ud(niC-^228Fr1m6*wvqda{ z_S-aeX_`*u1E3XeS^P;BYEuCs%4aDXvFP^6`*LQ8PB^-r*&5t4oOe+sOsRj=r)Uf` zrILnF7DUj>=Mx#os7#?+17q!go*5@-6H-Lx0iA0T-zc7;_Bc5lFabQ&444KBOYyiZBRvHYgIO_W6&c)~6 z{*s+m!FRsnj8*_5!d6Sy1xQt43EMLY+It2cMV0{tEeMt>r6xYqQH+P(*T_t=zzc=M zFjRQ$aPj_)$$D@As40Xc6vXTy!*NM|@=y_#Wa6|pC^H!qPUdNlKVDXHOi-+>NW%p8 zOP5c6%3mfSF5#D-r-fl03)&JRlA^)ebJjQ_jw+utw~DcDV`Y!wuRpa1K*52sf(yC} z;MT*k?Q95e2-dETpj(9FWW;~z2(5Q|PYP{XbpQjFqGf#qDNjKrHl3$ff%LP}0;e)j zgX_7Nvqg{}fT{H?4=EYS5eI;x{CI%i2V2fk0J>`ShZZ!Ta=~1&sYX5p9%0=ofyVV% z_{E2j>1N|FO#3LrxLpbhujBuk()cJGDc+`(H)AElJjPb#YX?f1VQlL-weJQD!zM1e z{$Y65d*6ure*T+rV%K48?A=DQ1~_2eqglqq$UV{cJdTh52$xHt@ow5%3BBj+hWZes zBG4%v5kg~thT29TU2syi=!%fwltSHvk}Sr+b&P0}`@xJmm+lA6m%9A1cOK&w+}P|V z@0V6{fC^f=irgGlShy&g1DSVd9++?Rc;x+WLmcZ#FUH1XhEzOLD3cy6l@}@8`Cn2U zPi)Co@;#UIaSDCLj08X6{fs;?(f|^&7>dJ{)F+G3-CC_^=dE=1*RQ*KLwnQ?3UKE- z&S(XIM=55ohz8Vz(z(l{Hdz46n?H#R09efoPOGu>otXb}fEe4@4&HF~>^N)$NwqCO zg_0xFbFc*EORDm}6MqCGusI&xM2tHLe$wg1N9(V$d%#SQ$Fj~O6+*(YN>q@WZQSs?Y zhhaX4!!QO=I>PQSGHTATEJ!iwi~-P#%V!^q2@s0YGF43V-6Q1lR4#cymSAwsk{N@m z#+TRPM>NE^DE*r#g@I!kl+H%WN;($k2hX`}wNiM<{ZW>iQz=$trJqq@lch$uoRRR_ zt@7^*fiV8v5lddptY-inmcra8!(3L&8l2&qstPBYa6P<2K3f;w`xikArip}Qjm zDBTMlRBR_jtTrlAq7T~bT+>N06QPhsjL4nn(>S2%ca!TPQi!Y9gTaX|)qpie*H`fj zz-$|BnBmb6I?T$9TrG`V7P{z?;}G#{Onh^t1ZVb5C}x4n$e(GLYwgn=1&uY8KEv&; z50{IN0fw9>jvy6NgVzCV^NMru=|A}1E!)~@5_Bgz&S(W-eSO_(ZI-S zHxq$OM545>Ms5KtL53kqlm8sm4Bk81;MhOg;x!Ryo{~}om_*)4$V7%&qkppc7P1CN zfiXeKDY)~?R1S3Si5XKQ@R|B7&(B8~VR!@3pnQH=i_^W45G+43!&E`gbdF&WmCt8^ zDRy;)HDGIHh8Wgy*}nUtl?ovJt{RLpWvMk*;`3yFL5A0Lz1$WIu7j0;f#(WB&WJE!gBHL$7lBf@|CLixfH2 z3I-G%F2OhnY-5%K=Ydh?E@f`0Oq)xg8Q^~G`hFT)nbHjt1>)!45e3P4uc}Rv$U!ti z$trrKAdCX7pdf6-U=2|#t}7pd9lHPz{>vZ6)_5AF1W=fx-q0`(14g+<##-t20?^D< zO1MF#B(%<)LqhJXwn#t!LP@u!xq~d@N%0OTEh*HHN-P5q0cQBrTH#iBzK|W>SICjj z7f3lt0ofIzP$oeb(S(#xM1}&1$AMJ_ttczS4Bi8d0!LtFT*c<`4v)OgF~H~AN4Xog zUqxaZ14lURlL%Vs{49fqnO=z8t8({HVOi8x;2frFkk4D7BUDh33InKIgxsPuEI2VG zI>fo9v%mSpyRJrmubqs5JI`@OD*(H9?~c~xE~mvf3VIDOAEb36fsBMyMF1qA4A_#@ zrnI3}X$5&TY(|GYyEkC9Oi*?D${9pugyolr4h`($CZ+^2Hw2+Nr0fTYT_im*$2=h! zpxGjrEQLif0U+J`N%;CKnP)x*$~neTB|?x9g`P!afnzd_#X!bgt6{Ji4xQc)bl2nI z`yYebhNCFxhz{sI7|qRKILN|kdgL1zC@>OAPUxTMa>=L* zeeIwSDC$DjGTjR-8bm#0i8-q$eMGjcpF;WpUu5v_Ir_QJ~wI;@}?1q?R}l~JfV;z(GGyT-IO zoH){v^E`f3nF^s9Z{hmL$`Z=$)j=Yb$Bu1{O8c7lQXH~$YHyHHH%=F+xBZz9G zd%-}ZDuWA~p2=PlRH$22)F_M!ZjFkJZR3geIfgO1#U;Gz2;gDsx}7Vy#tt;0~do(dL>lRF6u z2}T3PN+w#A;zxfz=uZcgH5je0WM=M;G6g!Sp^NdE1_RWc4uu&A6%@SgV)kZ;R^``D zp{+S_m-V)IV+t(>CU$*K|8HZBfZ{!B9i>okrpzD}DCdw(d^it4YiweKFvcLbAsoDK zaQ2>77Fx zRH#+5*`i^#LKjaoLp@dSRgXFh+_HkfI9|g4DhzhJy|5HVF&PG$KPd%~v^o*tbO%wO z-j64cuC!&z3MNJ)B_WYQO^fK0>PY_0+s@8inT;R#r3YZ_@3zw__|9>h(F%Z>MHuEm zsuN7gXz(UWfqCqt5I6p2Vi+-L@gU)vF*msho^>|Q@Y)bDqekA09kl{e<*rOEnid6X9XDq=cA! zh+;Zspdg$+N|8p_#vF$2!^iPu=RX{qbq*haKwxZSKIZhFMr3(Y4xn>a6*u0q?>ZEt zaJ3~tn=qzn?jooFSu*Yb`qH7QR{&vVLb~*8a9$m%ey4d)VV^#I27x);S-6PrnOO>g zg#kr_7g^$f%g7;a!Khp|k#)2vGJG5T8=2Qw2Dpt)2DY(NpqVFi|JUZ+uft%+?fp=eq`ArS=z;VpZ zK8iT!Ft%4t!7zhw8GsH&o(Bpbn|fckIf^^c7d_t;)6nF?;yzsj5LLy8j3@y_1FRRq%%IkqAa`A_x&jCxdNLk58{q)F zYuH>b_}WJuLfcH#ELCRShcqsdY>PdzIECkNo%C_Kl*AYETp)P{f14!#(pr-z<+yY3 zi!}<%{Xz7I*J^-mw6gW#^V>~-^|FXKZ@T%;afdz5Xayi5S{<>0Vy#6Jbhv036Co;+ zC6vMhFt}RD0!frq4x*AtnhMca7^3Uou?^HU-p^>sBL)Es~huPG1XQN z2&zT^m5o&{Ja__Yd!B@ib`nkb?u?tD-#YIlhXoLsgRe0b$5_Y3b;N9@HR0Tn@fR~> zL1S8$YK^O4xxVWbfrEN>C`y{eW+?nz1z;960+_y*uy7t!6crSfjI%YgQGRBXjV&6} zFrSN&3s$Zb;F~gLBEV)peFs*t)jo{iSz^>F?4l8cLPqy%k8=G2ecz+DjHzHZyi(Li zDQ}kxp#4E>nDaxWmqB;)VXm464(kG4nc<<2If(cF{Ws!!zwD)W;5&Z+>#u(v4*dRe zu>T_u#O|980(%?AbC03zI>vZ{#^AuHd@rVPrjpGy1ZefU0tq?M5P>LtwF%Wx9R%KV z;o^#>ihe@ci0A=Op`lcgniNLHb5OZ}F^Dtd+M_#wbmi(d;p&D+g@pXTrB9j{gf+Mo zc&F8^fDhYv;3eDeKKFR8Badk*Kt(?yh?+!9E=hi&=jiVcP3sP%ncUx8KHXP`)_vju z$t-~BOR#`nMG!2mAXi3PahA7``zU}g>OCp@ebXOj?G81#LT zSXfFG5$HO#j8!U8D6ow5x$vQ-qEOt~@CS~;WDRbQ0W-ig9B2nuy6KOTT3LkQqS^OH5Z;2(?Yo{Q1AC z?r_HGqfnRv_!>qPaOp~BaY*P)a{~4d&{#6yE|CMym~&>#Fe-@9REURyL z(v7}`RN@*M?~#6Z>1QxtYkQjwf&h3cIB{Yd5Bl;|?6T|eozFiDzw^iU$DhCdvAExZ zFT}}zxD4n2)st}cuYU(FdCm9YF2Db8G5gd#F!mL3U<0MiSS-h9Fsnexdi118t{3y{ zO&icG*P5T1vCTHe$$iIA9-a#c#?} z&=^6Y3N`jI-bjmmdeMeCcziH}?mH@xc=J1D>%|2U%+ z003i!9R^~ob%d2Kvckj0;2`{ zpYuXpFUl0FNh5qAIKs#vLJ9)$d=Yf!TBn32u}3I%3$h-Kgip#BBPoQGQw@OeS;=Uq zG%UX3wJ9|CC#?j*l@eSqvNZltP&^Q`9=p2ZuwLzS>nPtn6vx1KFy(SnSS?To!rKxI z8b{V=sCAT!WRZuD00M?mIy41c@)1l)Gm{nASU#6Qh#Y^&>SLfF?`H}co1k4ufSeYS z;3%b=+Qm*&pdZ->z@hcg9-4X;fI_WS!u$~p4NNNx&@JRDR#X(>PT|j#MOyz{m9Cp1 zR0OBVl1l_2heqpDa|=v`dpa+Qc;_B;)xO`HZ=>saSShGuL&J#c51qo(|INAdRU=U5 zCvn$3r}1B2cNzZtgO9`POXs+4`zCZ3Y```gXMOZRxagOkhYNr0`B*u=2U`b^BVx|6 zR94J`++3w&t%7OZm6GR9iZPV}PFDrT%(=;cLelM`I-<;G?#$)ABNqyl0MScRZHPkU zogYeJLI#1->SuLNTE<=15e+nh4Gp$iF*7IE@YJun1vp&b;v-xO?z=1i#%;*?BoT(z znLoLVxr#~bxq}w0z#!x3R_v$2QvkZ8z;Ksk3di}(D0 z?prJFw}S%Qv5zxe0l?U9hWQAS&k(X6B-j>EHw8lJ7y&+6W?~KiiIkjEHy;~Xo1+!S zEM^!+0@VHH+F+|@G;TVss;)!4WF0`RXfc|&`gTta> zVq&#c)RsPIrdDylveFxsv#PSaAs8KEz!~5skv0iaJ}>?Le8(*7JGMq)qX7M`mp~3k zLE=kO7>Wdpx#wIK23e$_Oa4$M{@ z4}RzYbR;KOD=_rvI)}~YxOn$E{^0i?iP!!5Bk=i~kE1IA?AgM2;3VqG2KM~PH{g=j ze>d9xb+mBAtV2}^T&@|5ZBghalA<{VBlKPHJIsYz(3L+QTm!wSuo?dnh3t*QjdwIJxOFp^Qh>5mMCUJo~S^Sia5D~r{4b<-078=6lOkv zbh@l-L&1_V-wmP@BtPJFe18#p(y$3pkTRgVktz!L#e(t|!?4K}C?eKR^14Oc0aFlb zfF+@alOH_K5C7c{M#N4=z#aHF;}w8ztcO~((HaSkf+5IojaA0Tbjf&Apmff>YHH>R zAc_>K{JnGzi#3!QFx$lDd>>*)0ZO4Hdd_P_=8*)g&x{;e!AA>XUnnPO5kOx|+(3Vl zAtfsz5FoY^gn9FK-ir^l+M|TSMOg3-aB;f6l4j@o6Ko5Dr@vx^E@(WUR%5f zf)~>>eWqDrn^>M(D+A@AYz#B?7+A_CfKZ8Ch1wcAFSI^e5Y^Bcg<=NG6ph&gAxl_! zakM(h#X*ItH7SfrF*Q(W@WQlGpSsk6u@Y4Uh^E3dd^5%_sJ(3?^Je@D5ee=!-oH5K z&#>6DE~j>D6*VflSqCaEjzhOJJno4HQN}q?7(Wr#p@ze}!DoP1w^hP@|o-mkm}w)Zq*1j}JlZc;e}q3&Acb9V>8G|r;*T+VMy5PrH{ ztS~^bA>gH>yP(RAqpXHniFB|Yh=hKG_K6UZtOUB06%Z2oP@y3M*sU_>s}hZ99*ETu z?L>#~cwxza9x*A1h9y)_G$^|rsQexPLP+1Vx5QJ3Tm+R3{W>v}NkNbj521DG za@4cFkg;nQNa@n}^4&o#h2y4svz*h<#`nGUJ^(J>$q2aP9$&am&a|V&snf^JTFneR zgNQ>-RERVNbIe`b5#+_KF`7R&KLiCgm92FcY9VCV&p?1XNNVs3S8AIjA?l!<5cCgB z{$)Ok#Fh|lq*bUm9HdYo+h2@tf=j12Aa_X1AOm?I3q_WP20(p5b3=v*UV}^{l65pG zA4`^l7z6@n))3tmY-YHyy8#dVlJ{fYR$v8)p$CHHXWg04Phlej1Y|sf^{EsPEXWi! z@i+-V*zNtLo&wtq0L#8kj8N+wNWZ=O^4VbyRDQw$LojY2Sbn&8LGcbDB?Gb)>89YC zq&p(ydybI80s}I=j@pHk8!DH`lEXQVTuh-GN<{iG>C6b-+xTX7JcslPW{IAHi|p@G(5#>MJNRqH#>vHfOhl$^x>KN2Dex&6jxif_D=>zL)k7Op0Bk~A*cfQsHuy?l z<4tKDcZp1{2lK!YrPO%*vJdwbbN;$8~IRI2V3VaV<&%aIlf_y>yO*92P z%Z%4#{1NF#t^tl>>F?W-yXJkN6xEyGea?9EKYmX{9MFY3#~tiAqZI%%Yp2&wY@wl9 zGiK1sl7z|HjnsI_h+JBJ7I884drv}O`Vt|-^dVXpyfxHeFNw&h$wvm@O;(o3vq?)& z#+QsAI$tn5Ej!RXp|ZkBocdKvkmsh~ydfB*mxL_FF%fYgBcd>yKBnN&ZCeTqFmHL{ z0n_;lBg>oqS_4DwCq8{=d!70!>NpT4&xu*4$@>oj2>CJT%?Do)r%{ zr%+5pTGch1OX>TJeL!0G`a1%c^*yht?EYtZCfAD3XhB8Ngx0t@Jm>=Sw9-QXl-mVf zHu2(bJdOvhZo_-JIPyKFj1nyf)p%L|%ZFfl0Hn)QC?n$pG(Fmf$nW*pV#*fE4n!l< zcM2l5q~#RufQ%BJ$T{HWfN`|Z;CETuh4=pSV*p$f5t*K|bKHTBGg<)v0Bjc))pH60 zMh6orgy_U1o_CkrmDGCF+e{mJk+H&fmErK*0#Q~0OQWz<;L6<)0uj0nv7 z6~+xTpqnZ2FPLH$Rr9BNHVOXFy4O*RncN*F7nRE@w&JMcI4M3k*Hjv~*4fJ<00sd% ztyeE}TZNh%Edm^K9<_=RG7;RP+^a+fTsifqz|mt3U;p%rVB4pNaOJ)Og?R4I2nW_y z@Qy#c5f`1chJc|}&Ox+>!3LlejJxKrHV{S!CiKnK^k@=z4&FaIA;QqciYi6dOp)yF zlaJdwx$k1J*NHN5ZkfdczGq8onfopeQ`=@!X?iu2SQW_NBV_-TYcP9T!onw)1$a&^Z4n^Zm}lxAu02J<8Dy`UcY$L|8Lg96+Ek278YIR9=JV0&Y8DlkJv zywJH#5OE6%#G;zsb*w0$WoGibO$}$nd|`&c)MFqFS8pGHtpcbF4l?o#@kjoW-nS&{ z$(@;m&rfN!H?oYBv*aPPHV6Uh2wfwqjDL~gz!rCfEcxl3TZ1X;xPdSw??EDu;9bcy z2u;Q^Gf7L5Hzf-ZH0=QE+Yc2FJnKrl;MsqOQ-{yRI3LmV9r~`rScmDEmYvza`6?ZQ zzP7dpG8%Nf7AQXs4 zYg)>W8HQniNl>;?74D2a^rotV<`S$_HK|A}Hij5I*Qc1HM&n{(kP*!%9j}nP!x!1PGOW5V#xYGv3VLr$V0S>t^l_lIfZY2!6j%Tg{1{) zg8pgl1rB-}M-LZ#>eC}O$88iR7co$YDrhJTz@BwP>0yHO+t?7`Ja-+HKE7u#O;*Ax z1)<9qPgfB4^)L!#Qr1Lr-e1h;lPed4;8(mM^H8%4pC z=8k@7c=CNtV%IG_w!9MpmC8AvOQFv#XC}9yG)Hb#DL(nmgjTqxwJ$k#3g^YNkS>z; zDcnVy#?MGPa$kY(q`NNoge`cEDJ?X_7jDm^0`1&xx4q{-J~4)2r#j#r@HpcYfagB@ zanZJFZ9|RL$Ye~p-1He!_jPAXIcw}wFi^r|BV(fJ&JVYC96 zn4=gF!gS^$2q)ob9t#K#SfCc-K`=K42IbYkz{X@G8IhhsAPF^#q>W#tV0QBW~6jne?@br zTZslN3j-M_7@FRfdr4q!p+XSgK5#cGsV+#H8x*BDHa9jE`#>w&VR+z!4xlSXSwBN~ zu!Dh%bU|@bw7$oi-gGt2KM1sHsLfEoJzmVvMUSnsP9lZ^w2?|;?qRJlEmXx@2#rvf z2uyCc77D0Lcawy4lj7}A0W9q!sMPNm3<894pO_iOVUP<3Q*8|*Yutym5*^X@({)^H zSLaBGcDH8RSXpiG+OTV+xFotLq-{c%D4dPNlca~xd)$uBB&YdIJxkx`y(W&5mO98U zU;v;%U%v)OiJG37iU%~``Uz9DW$Jb$V<9KtgP^u6F(Kay}2Ki8E7Fn<%p+tcY7zHyEDox@HM4|OJHphDF z(MrWw9o7JKE}aOE!j0NEMVc6YkZ?oM^&&eY(@Cu$;aP?th>{~@`O%6?M%wtmi9sMJ z)F4`i&avtKvWOy?%R-27L}Ywq7h*p=P0W;Uldg@B)gBRuGGKn|9{kudUyHk*bt}d# z!?5jOc^Tfj)dqlW0lr5#+8(_9&4;jmzrngf`IFCS0Yt(4o}Y(rtspwC zPlSs0fbji9e?ixqPvVUg9&^noyhx`_`?jJ1LdTjQ|JoQ#=&Vw~q3gM=anCRiZ?S{9 z$GJYH{gjq|8`CnUa=^VIHB(rmE*mz9$(jFkKX+E0beH4%zt&u-W#z2lyV+ccx6~hHy?0W{ofu*EdZSto((Fj@aFsAuY>5{8p@=1gJ z_w_E}bx?{A{0D7;1kRTr`{{DlfF|UF3EyZ)Fc@~$#faCkH^}x$vr&mza z8vs%^0YjBFPWM-ZI}1DIE_d~GSeeZjFOfxqK*gzuZs^XVGGVUtLeXwjB}euKQA~v? zPC$r31Qn##xCc}CN2qcrNka-E5sKmk-Wt#u!k8(*H3HWov^2(P+#JPOio#T#hobd{PnXO;a`TM#S>vbTd6wg#TLWLwq!H(S8-0ccnf~k-Q zMesxn0W};chH(Vi?h)^~_8xFlV3t-eVYP{1rC^9n#b~ChKkbK#WPh@cFzm zAgC7U-<75=)-FK%FaHsg11B-x+|QD*prvPN(aIN`%2$Bh*XSEp@s%l9Pp_|NdX9m@ee#XBikc;L zW!*-TCFF*2U|}9Y^KPs;K=bMOEktd45A**!O_zNFRABjP8aIDv^~Jm-j;{1@mD< zL`<;wN-;d@F?#`Q0sWFfYYs$a%5Y!Cp56G}-?;{Nzo4LxfJsq~%Je=rUT=TrKkpoF$TjV9Qi6z zP~2U&p>ru5pNfs#B&EJFk*;HMc;p>tPP z#&^Er!2s^Mg96-fjx$~X0I)T08u#~KGF;um-0tp!6)%0d$Z(%<=J23iVG5t?LR z5kOzIfGgMV+yCJQahJPXgY}JFC^4X6Kx5eM zmdt34tCAd-dLi^2i@p#RKp2b2q>v}?lW*A+4Kxx8sJzftKFq&$Vp6P!wlnCiD+rnxSqh~_7+w$ ztx&N6w;tQV*FWnV#MU-__L3Kfrac`9RMLa5;eGEr0)(TYu>+w~2{Z)SIKz0!F?1UR zK*gy0a9qkDNtj(q61NZOueJ)3rIbwxH7ePh6B)l+gJtVjDWaOw{Kt~ejD4VshZozV zASezaDnhNPtFloNed0RtJ&cJOqJbO>X&sfyi2=HPB8??M&hxo_=*|F?c>vN>@*&cM z=GTMc70pVO*Pi2V4&%Bd(q}^KOp9tS`=O^d7A>$Wu3(Y2lJgRvk@dXQi-GNWB{B- zs48w!R$8Db@7|m~^H$keF95EG*3coCy8**60A?&?6F{iJ4TUoy=!D$URZ`T1su+cF z)SwSv^#i(+2!`$>$Qj1>M6kgT=X_}|1@~zvn__Gg-tk!g*d1|-=Kve@lny6O9|sJ~ zehEiE3*2^e8(;g>i(sgL_1dS9U=qsY1wQNWo4GAqZm_uLSnDu-a)0?d~Rccnm6{eNY1Xu|?2Jdu`sx)-=+p|}giL-1!v zc{Af05lJGwmrmAyXiw$-N$L;}aiIu&-%1`sTSLN~`!_(vBOoFc3({`Uy+s2iVGm^q z7_T9%(yC7-63RB1l>ekUjW;PWjPVM5o-~7rALLJsEqPv^qmv?0E@eoO`#Ai(mDS-- zU;c0am+qhdcZ}nVR{#Lu4KI7n=KSdCPgJw*jO3r-Jfn3)YlBQNDwTs)MI^G?s4&PH zEc8K7C~hOM+;Ynd>wST5J5Z_!m4r-tYoclX4p}k!mMwopz$T_GD<7bOGF=D#A{rH6 zLgY2%3lrhGnIJnU2}or_F#wC(>3&Jzd=S5r6`M>$3WFgn1HMNx5xN-qIJCeL?PBz~|!P{OA+F-BU2Fs6-mJv$9Xu-cpj(5tCVK-O%;)El5y zTFnuP&^MwFo%WceawZrWAe7Gg(EZRF0|PD7`4p`Vxw2BR?E9V;uTmLv@4K;%!Z^~M zFpMgXY>NLF3}5}Ub5QCQiaAV5l!2B%C#s+gK%HVOeK-V+Uq%xBN~ z2}GHa#;6E#ZFz4NcglVe^wH~d(F5HKj&T^_?&zh+7$}SlqDRe{Exn3y(KVj{#d7Xl zP45z|O8w@3u!ZpgAt8%Wj)nlMXmaoH9wZ~plm17Lf%{dDo9NoWIhYhP$Ze4CjzBYG z+HGQo$N%PncFj9?Vgc?T#~nfe0C4=GHN0tNcC2K*clnS5gi^^=7>E@jGBy$+gJ~^` zb;yEhRmFAy7_HO}J#4m#-~ao|P`eqLu{v224wB*U*D31Uke&QUT#s*24J-p|!*aCMIB zyr7gaH3xEMzW=C>l(2=;(n47Wnb}}`l56b|L}R>@b(i~CT3SdkF!|BPfh~hGSj^3E za^oacR%TK#Dq3r}@zzZ|<5}my=If|65RERFTye|k@`~GT3*2~f#rigt6F26|x8jIk zW1f1?&!F2ZXf_hKHV_G`0hnNTECuz+dgm;2Jrm7>#u1T9kLalJUY$}knZ7I6jMfcJ z2pX9Fm`iS|2+6%bV}OW&aSvNIP14+ETm|T+0RlrE8B3rHlbrXE5}ZJVb`JOOMDF@B z02CugB?Z{D`2rz1pYN|*m?4BPQR|K%CdD*7v{WVIy$wh+vt;o#Tu>?hp!qna%J0fV*FD>cpwjt=5dSK`0Q*Wc|B4 zpav=F3ZOwYv33cSg%FkJZz9O<;1PW2gZF_Q+(y)H5}?fAm+qW|B$q-YaR=|8R4O`M zB3AMHrJs=kJinh9bTWp;b$L;a6+s1qr!WYJEFuXy2x+PeaXybcFy|nd0svE*88{{~ zEm|pr(AHPbhJZzdHDexuBJe5rxqng!QQ_gfcJHS5u|xqRu=q34 z9U=(sg-xuu4Y~cJN!g|XWLUUjV1(M6=8bE;2-f5pr*doPl;=yjAu?0iDmt9PIQ9sW zl0OOF06;es1vfWue!oQJu*TBKFbePFIUFVxU(#NVNB;lh1(CsjLTmEYTE&T?g`iL| z*W3rl(QtX5Cg*@D`aq;nDyoP}Gvtz*4P@mIh)8awCIdG3Y0C2EjCb9}b|gNkUC@t%AGW3TZrmhS&eyw+-jd|0 z3be=!1Rm5Q7kq|FgaUM@cUh!2@(~=PwFe&|O{AF7$dxK1sH!O)R}}H8PKH90zd-=M}GLfK%NtG%b+!K30D5f%k-`iL~h33LaM?h`$T@y z#l86;jR#^nlbd+~`$5Xb#6p5Dh*Vy92Qd+zK$c-ZYldbGBO2Ta_FP->wqN)*9PBo6 zd;q#qQES4Ii)$ffL?~OzhG0%Nx_L67uDD~YOc6uE@e-np^++b2!jnw3)yg2TpfbgH zG{acODMKKGz`BmsDc4r@2nq}5K*DesIEHb|$Z-mT)*1>Ij&1^{08ZFHf^`lS(73Tu zr7{2#(r0iM8Gle6n>JFS0ii-hMS-7P*Wu*)Npz)01zYY04A>n~MI9fL zhEQBiOxa1og0RyaD&-WU((R8@XPQ z3Pk?noZe2MibZh3^3bOEDCAFFF4qmu6^#H0FQ{WP-~7b+?Xz$D5db@}0B7)Vhfx5` zZ2pGVe9xyhKYz_30F|;Ltw$)DIrELlB+?>)3e3P$1190PQ6O~AA~X>VqdWY-QT*y# zAB~l}ts@#s0#mCeokat}GCE(vOawIXwj_2)QIHix!YA2H`~l!ibxlI40p85rVJ!;+ zXA5NhjtDXjLG=xbN?^$__-KhkYE^-FzWdx(!;Nb@5I_X=Hu3kl$6zPXgP_F%FgS5~iwhWx)(f=@5;1 z-8p{#qw-++xl_1Ofgsx95}>Uy8leU)=a4JMGEGr!e`{+frGv?G<$SVceQ{PH1Zagv zqYs;k2?dBLjWL4mjkM$q>3%0hm5fQ8*U=6b_ zurdSge&0Qlpv$eA^Tc^?sB3F@>+fBU3l8+G>0q1_RPMlnZIn|7ar)sOL)%{EeAGao zs%j(s?X`{!hD<+pkR~TfIG7=kN>9ry4prbYP$_~LqKZD+QXd8>g`A&MKAX%~ry?i9 zuwdMTxifW7C{GibgviVkYPZZ(AYX`j40fMqqn+GV04OQQwQso)3!%=(L^ksx6nRxZzQAPbHc~~xsMl0 zC;34`J+GhHU;o^f)QZb?P=GV{xFab5ao6+rANi{LUiv$&`0>d=4qzN)2@6ubT`*hr zr#A)VfC3G3bJT^lQAjXQ%`vLsTb$3OiFm=TNxP)kkV3Khd0GI?Tt@#|ErQcR@ z1R6`FrmEW0+M3yp==IIhhAkovWuJ;EF;fjjZCt=1i$1NFGevwRr zjEdKgVN!7GxndY@j;53=9*(eWm{+tzJ-++VZ^kSB{mn}yIIjzCwu%bEXq_n{i zU_^dewxKz61*BC~>C47GbXPQ%7&f|I(tS{CBZOZw@H74Xs=gz^CA;LQh&v*OJym>8M%Tz_L6tIKEoxwg7m(g4MN-1}n-;$U-nuC?d4y z8gP2+G@$(NRvT&n>zje6J?DJ1?QQO*7`YFpcanl*K$H&ef6sBCR@9CNRqi!3Ly1+? zJ-1?ebrTWW+MkT2Xpof~1~aB~B7{OkZcy$gz|nObg}fry`O?f_A;QyCbSQoLj0d1R z6CFy(W!FW3ib6E*2fAuxVNXGvTxWv==J3*Kzk`j0hNb=jEBmm%wE|rHo$y8?aZpHe zH`o*eo9}A+oyWrRpLUS;>oT2V67(`k_;wP)JR_%$c`f-Nk-5w&;%;0#-;zx8U&a-R zZ!K=jJqPV;-h+I>t%F6wuzlru@tL>(NJN~cD|e1F?6|`y003ZSr+?w6Uijx*pTG8+ z@S-HYKtE#vmQu*zAxqE;)2GIfmMQfB`ob7TK*AzJm3B}HnicdH-i(+3%2%MfXd6*` z7_#sRNOH?sIXM7@rYprxeal5zl6?yCbSe`o;-%{`2~szIgy?x{vtQR#K;m^NQS!se0hHbe*I^^7q_nO z#?S&*=qiXYP+FQW3&@w*01#860@o_5#*LMMd?q(RD3GgZUURooAxOoK?9)rSSNO<~ zprubZ<4AJu0P}>j`QE0rY)W&?$n>bR+(Yupvzj6F4%wAYid$%`<49{ep>j8(8yV16 zYr1oYOyxv}QNY1~SwF*x_0#Ce3;^RLW>#?Hp>;g>dFKPeHU(6O*#isNf1RiO z97ZcVS_X-#0wAQ21rL5vGWEs6BC@vCaXg^YyJ^ zW!vCS{;?RYX|?sLnPC8TBmk?-tTFz}^-j9Z&!^w>Sfa52ma0K7}03=1~IJLca)9&(u`i(h*^_dCFK3k}7hz|UTt*@s?rzgp`~EWjCh+|d+( zc8`nCz2PhFdiLuv%nun_m{CAD6fK=*e$WSKkd@mq9S%Ti=;Ujp50Zsc%z&r{uYs{T zKEAaFe|GIX5sghse1hg7Dxr{c5p9506RlTTr6%}~T7jSghvzyoNZt0q)d=0Cp;WC zXCtT#EF(%Fp%aUrIrfBiy=ab?1PvK_ss#F6u)G)cqR26s8|ug^jBc#>H$l`Ivr9-M zb1mL608zrhoahvpGZ}Vq7861M#X4HtjSYxuYYdo+ig7+7)FH3$I`n10S!eY)_afE3 zSoRCM<~BFd%0B$zZyd(C`)6<)V67qCU{JJv9f1?OapeC01fO^C#vR+n%(o}~xU=99 z6*r!$ANC8&74&6AJ1E_u;&Z?l?H`Kyv4Y-;H zaZZz-GNyoKi^qXVI^Tt@o3}B-I*ZnwvsIq_+H38$dO9V%A>bCbi-qCVkPvo0W7fMtVG0#Y zf|mphWVzE&Fmh`9WFjF3LQ-A07-%7rX*y^LKvq<~0+y<#!Hm#)1_p|OA&nCQ@2PJl z2Bp*>*L)c`M!pEgL-y&L9mc{zwlV^rncDJJFK-9;TUe+>z4JwoaAZn$+f=V+>$w|iO z$|lG)iN+wzkQIvnx;`6CQOLH+y;$5?PS@DvhSxLQ5Sg(OjZE5eg~){YE)sf5IV_!G z0Rouy9gdwkfv#tBrD#Bnz{!n@XFTU3U~5h#Mm#-?_oIL@)M3O8H&@(n^GR$Db2wPT zAGM;j5g37$;utPE4C_@HQR$5)G^N&tuJ{yqNdeBd2<{yUZU_kpb!u$da&2UHz|zs0 zrwd2D10+;a@H6{hA#79G&Eh{)AQDXpM5y+I)^U<~rn#ykW-Hy4t6!9=8EB|cTkrL{ z{*mALX5iv?x2`)Ctp;g5_j=OHB6yFU$Ay6B{>%r1=t~M?lLFmDIilNi6;0RV)1;^* z;e~#sQcK#HNS}lv9wa1@S4?B$P<=D+^bI?zU7)0(P|LViz%9wzqgQHTU8%l7W+7iwC0@k!)dJ;YMrB7 z>6vHj0katn@7=_!-u6`}d*&FeCzBUp8!Hn}mK+J25&B7tBrc)*$u}msD_^1+sae)I zgSm#l@hX1lj-aE z&>Db)rP8+;R~@rFu;w=vBISkGMg+tP8}49IDtLd_+O#?qJVo6gOy&pkUro1nq+pEIo}1g|W>tq}V}9n0bi6 zmJqKLrmk@$4JkIm%%?7mR2cbv7l3zd4s=(*ySLlZf9|!oW#jM0u5MQw`7RQY5S?U< zh6O)JI^al2rLY79lHzm&^#I^~v`0Z#1tzhb@5IlNS8&>-G=lt%3MA))t}>ex?4(iC zTtxOeobHk5@wb4XL`CzP&aEGR(+_XO)+IYAz?pU2;S>OH(~qzGfv^3{16SAnsB3nj zMner+tn>{BT*3PcDx!tQylkQbnX^2V3l@RU$`TPpgRh*xFa6Q|aNSwEV8bSOwgaGr zpVUCI$iEmIMukHJmCOz@kyRm%WXP|Y(sEL8Te3tl2t{En~WQf5|mcF3qqbW7pzPT=ozG1Y6&N|%lvKjX7n*-4U!47zUpl?~5=sT3z8s7Y->#(v~ z5Ef{aetqkK7LJGk-Ns%V|I*8u?ijT0qotCw5J0Zhy-h8sYh^P51K+7O#uKzqCCw$p zfQ_3JH>1?TuJ}|8i9(!gEJE=Z6Rl~@;ix0m%Y+CZ^b<(MJkCdf_KrJgt8xUolGvW#aKCiL?4!vv7}kWykMVq_IIzj=L+y7 z0J}AUo#PBR?vM%q0GRDR{@>s9%D0s3uKn1oU!5EIzO-BtmANapNWywaaAvR-tsYtr z5e+E4in!3q9=*eOk7Ib@&pZvdo2=fkv6zUW$|0ef$Q@xhQd06N3KaS8WGxU{mVu(C zE<8<;rG!Y{DH&Gs0Di`cZHa&*`J! zzgR9Xk_@UfTI|c?4GYv*fsF;{9NNThzxu_v&jUV(&)sr9`dPr*HV{ye8$k}zmneK0 zOxN`k8Uea`T)F%hASf@B(J*RkjjKp5MF#B^QHd2JMC0Oz@sf>Rr((RUs9 z5!lxH*vUDb_MA)Ln_J3`6JrM$!`8*O zur;wUWwZ2DhN@5sq6$52UY;A?OU(o!M4Fp$aBJHGFjFCGo(`k7LScrT2O2H^kM-i0^* z&7)9vHMF93uWCO!5wVyQjnP;LN(pv;pN}(pYfkx@}s!<3)qTKzG{^)cSfR%nsb7lsn>Lsfb zGXpZs58|GT#Xw|H8&0nqKO>W6gQ?K`VTrk#vll?}`=%NI2#%wawB+fMFw;Iscvc+) zbH`+4djv4Hk?)u81FcIZ1)%c+E8H`)8F1s_Ej;_1_f1WBO!r9v%cX9JwSqr*%hkB( z+_gzDY|&6FRoZy~Wpg(+9{y3-`d)M(TGfUDt+76T1YJo62ECT9li)KnWM2na+Gapw z>EU$KnDO)ChG8mfBzFe5-l_b$)}%OFP1C}cd&rCS#6scVL#0S+|3LIn-0AOc=}J){ zsl_fvMXL@!Zf0~im~G4+{o)V$k$SZQ!$c#~-b!MEv^D+x1#U8WmH4D-UIK~@NIpQi znw&h^Z`>~nWg7^k0H>c$4?xl^8>P{>;4>%1UxY+`W3fj9sT=?>p*1at2%XgmKKd(n zX>I)4h}gpi?Hph1#~oGy010S(;Zq**@$dWQ$Gr5`&s_gW?_-2~e5Dk1t}~1y^PtDd z03*oiYqg>8J8I>vA?k>3b%tn+)P`IFRvo_Q1YZ8;$KVrfAKCzvY8ZSZ;R2!>G26+0 zl~zsTO{jt{(Jy2W;&5p(Cu2zB7k$%5C}uX9`4aG!-R6>zCrX|y+`Lczq~5_#CM5>a zgwmI(b0WtDOz$jqwYY9#z$*R%z`TerNr0LoIs<%UJ^5Ql+&8Yqe|y!x#n*iK2XNI* z_d?%BL{s3Lxne3<@y(!G0Ieawi2RU?Am=Cyldm2Yit<;m7AJPHuw1@ho)VC`DxtCm}_jvME(?v=#jQ|2To|VB?!S+zZ;QqC}uOu^YGE z?F#k=NC~X>tCd|JOJVRW6&S`szzD%Jid+J`&=oKVKq;INbbl1hV=AyPO#W#Tol^PH zzKfvZ3nOZm`>|5tl6;#4EcXGCz}7f#gu>;{{@z~egSk}Ju)lu7F zVB|BvxrZ4HL7!uy1A_ZC1X4-kGt6v(tSNKCgiIKK5XxeC1I z&c7yuKXk8DQl`I`uhRnz!B){`u4TEfP&5%D~dHVbSrCUT7Ak>GDG>(Mao{XemT!+ zlR}^eOzcU5HLb*q3&?v*h)-uNThmGS(*76Bfu@5&jACLv=_=55VmC{JnLa1;<@;x5 zX5NFZ&--*{a1X?FJ-+4PZ^ava`a3YxibJRN0N5hD%+&zEHKM>JvS3g?x`tq&ud`*e zeh~Vmz~>nWskhcJ%m>XE+W=?qUZ!$F?gLjn0vISbr0nq7ymzhi@t5N0JGv<{z>xPT zL}E%-qT`xI(1e?m!)$D%v3PMfSofgsS8(LSG4%b6y%o9+bu`>~bih--ZV!CUra+M5 zXF1Uj@d^7sm%c2jI(oJD3*{~@jq>B14bMFdK(w@%vn$Y~TP?mtw2>HxKLm{_ zF2y*1CXOB3%QJS4FXrP8uK?)SeA$bi@u63L$JhMK$*XVutXZkdMHZt1^ZsjV7}dI! z)|VK)ENcrxx4N2GK8Z4YvR*LXX!!iTif6v|x#%z5Vz)qmR+LiwN$|3mMYPF9Oyx}Z zJQ7{{mRT&2gln=C7aGC>Nk{?RBxLzdj9&j-!UUi%8Ixg^M4!T43`vZZkJ2w3Fn=f@ zaAIt?`<{REzj_#lEY2jza$-_>y%Z1SRXYG|^ti{yI^OW|m*VB${>!-O_|~&L!tT-&Mx&Q77P976l4=G1ciXz+kOm)p7y2MzOYb;AVW;54_Tj z)$3bH3Nxt@K_$x=q0gN+-A?}#{YZHv9a7kGE=3!LN%5ZkMiLbPx_qZZtBAnpyrf12 zoCc(bXry^V1E0g6i+>t9kg*v#<~qXn_xs29{^+;HS-UUUK>@z_k2}QznOT_GsqcOM zQ~u($&wawHPF#J{XG%94UCnZeO2|5btz9D)LO_~!Rpq|f$_m;rN^oU`ID-0JDTp%Q z12^r$5B=GbP!4P_Xf?+IG2S%PB_yEVNsRd!EuOTj41}6_ABDhAYCMUVdW#eSMXf_Z z39?|OXC%+yrMkDCZITm~mfHe4<%Jr1Kn@L#YhoUGesYcFizW0I3~k9onT#qjPRc_A zys_}eXuvJI@ZhzN;g5gjMR?33{t;K-b}76yG;8o6oK2rEBLq30^pOJW(ig2MRg6J% zNeXVJvcE)q#>#X&u7|UK005T{-wIPjL!Am4pqKZ`=Lo7#w}N#DS^O#R$m|`nenw%` z7&O-;=!!Y}5p-o@{#8hoXAoiw%vCa%^Jy3wU09EL!a>wQt0R|!A>AKDsD`ltb%wwF zyCc}#8c@KpxD6xB0WZt~u#NrLyys`t3X7|10LJ;ij)j$Nk3&{#9UFkmo}iVFV6O&f z9LC7er{GIq>>uCV+vmSTBGXF6X9n5A;809dAFDjP_yfJpc} zi14IAP$OW?437Q_gWb$*UcTa$AG7{}@3yg=YWg}!CWSpTUK9N>>Yr!jyDw-(0yyad zvc4nfD3y8Atw9PkFe!EmI$ZoW-D3PJXK1mO2oMdNiW-rg1F48Dt`5+pW8uJ_>h1F1 zxJ%T{=K<532fLCblQAIxMrIZ;!o))Wdr#vHfBg`=^|}WDongCF6bqKYb*Onz@@SLFKFJ6Y zRU;`bg!O{g7-?TjWGTf>L~4m3=qHJGiE)_VU(@r&cIaWq><2=GjGdCe*7=5f9-lQ0 zK8Gj^hW45S?_`bfLBSc*^QlPa6&SoH7E>I66H+%A+_zDD8!H~b4IN(eu;0KR{l{;{ z?(+`e`rFP0Fv4Ph`G7V8Q8+)Lf=ql`&Mn8?nj*|4R44yyq;ENxP1q>NnhMX*_e@Zj z?@6JTR_|2M2TaQof-0si0a-fKv7z*=l}{^~=X1^|*!ial+ZekamQolCpa4KK$NKs@ zN+~GL>VW76+;HoNr#^KLY`%?f`K2M3lFNGYhHh5y*5A7x=bzO9-cT*j>d1SA!NRdI zj)+S?g&}sS8>Y%0PkSjN@F`paK-VeNGUt1&%xs9XJbAtsXPio=a4Pd6g)l@a5ljUP zx#v2~1Hifrb)ZilMt49e2t<0yG`GuL zK;jHDJN4b)^rR2`;V*puOZHrQ-R15!)>eU5F|X+tV^s1&u*z4cK&EbGMrcgY&deDH zvkMIHsOZkS0WW;rSKtG~0rXZdjDb=FO)9i%A&5kdw(#?X?nkOzoXvlhjmjqfbrN+7 zS&CQ&3^%;=?m4f;>wfshv4z0(r}m*h0<|`H6ZG1652ML0 zM!P5o1@((a2Aq~Dt=NjbXZ-;RcqpfRkb3~KyfqKtz8LE$MoXoxDN}+`_jE0Iag5u{ z=dX>G2Rmv$2;obdH(IF_fZ4EyMT=?#R{I{uPM*;7IJaHtaQf6Xp8m{>rFe*e2beM^ zR*q_j*((0%Ew|#}?w*L2suMEhj`OwW^x3%O(H};Cyoaqgm$=AR4_e_lhea)bQ}IIZ zT$nKqfP>UNSZ-;oy=#K769NOJjAx@HeO8sR(}HM=seCXM1i42Pyhjuv139(FA}fA! z{I#j4gp>%nYq)PL8p0v~A7oVA?l7}zE0GiEjDX zv>nk_%;U=UyR3{N&x@~G|X({36H$b-+$n3ul|AajvfD4*&YW6 z&=*3!IuQt!ke#3}!#Gx~?cOT}LczxJqGT9`0vmxk^ssv#!#Di+cjE8HgXlU#9s7v} zn_&`NLi#f2~ z<9_1}_??%(1V8w^H{kQf&c&(u47+C|S`>H-!sp6fC=wEctMgq0br>h6H>Hv(kZl+V zubV+AhM}L$*i6d6j0UX*Bj72hUD5S@N8t!44nzCNU?@Ga4Kf>GRN2{L1zpK9v?@pw zV$jp_b9b!IH_`PSAp5idsKXrJ_^k7RVc=?ud2n+W z$c(=L6oA<&`$Cp_QR-)at_@c@uR-_Lk;-LuW6b?r3fF-5APAtF| z?{TMH7&F^C_rTr{|HB`@`n$j8qP-tEeaq34R$6q04O_JL1@TjA8w}AZR`>4%RHctd zfZXxX*z>+LL|1{aVC`;K;2U1~Jp4c10mNEEg#2f1S%W8mr8Tx-D~SOpuQ`P=r6qNg zjA}}f4w@653`fF-&*WVLSY#WB5iNwiETf6AS)LW3g5xTm%QV9bCL>(B%&<6&{39(u z&0)Tt&Sajmc)rQ64$3KxC9lzW;LZ)f%y0+WF>Pah^$cIR`(yZv*E}DO|H{9`$F9B% z<^$Z+YhKC>1T(uTJDL&ZXL9uIm5^2|8^}-!@qHykhhb!(V8jyqon?nfV8bw=xMQe{ zcK43Vvy_6q?^WNPP zoV^H4`#scCfSDqs7se>iYk-V35Fcnw>7f&CloW@X{}KX_hnXEMFZjbZ_=#Pg4!056 z2ACQJz@4voCQ=7Lf?qT!tY7R0klS&gRAtFtDF`54n*o6Z8klrxsu-E`sF5m$htJMu z#guhmx2qSCs7)$Q92S*@2o`|yE?}cMj=t->dg!0O3BbO5+RpLCb=+wc0FX%MX7xabmKzLojj@Z!}?tVzCgBlHk)aSF?{G zq?*i{K|9lBI>@!tIxu}ivCpwJ5Q5aqOv*ztBXJ5oSHh4ds~emc26EJ5T*>UFpragA zzMjTLCM^G~n4pI-UCBChGoZ5oZg9Nt{%^&5UjKAlbe9`&{h@ncPpKF&V8j4NV4Ty{ z(F7N_VDXw3!6rqZfMr@)K2BZqq=C4yM`{c8j1cp70J<&W%MO^l4D)%fV?{5b-R3Us+Xm|eo*VZ`1Qo_A0nhnVY(vu0lAvyl zsM4qi#h9esqGdLf+y)>md&U63f{01_r#;hP2<1}=ErBfm;=v+8yRRA_`SPE%BlGJTT2#U25N)MeOPR`Xi3&(>Qpycr ztVXCWL2ADfElFv}bERlcKSfTAS&~sOWfgG%p@9&|N_WLV(MZ~z&f~)+{Db@5j3w8> z64T|}z5D8We(K*u#Kk)(z!&Fnr(YB^8_n!9FZjmCz3MHmdEs~MyXoeCg5k7>#aKrQ zH2?-OF&I!*der#{bAuN{ouFd&cAs*14G0@CZWrK7uEN)U&-3wj-9?10)0ztsVaq~v zz{HU99>^SO3G@^KNuw-=`ZP-#@f_Bt!#Wy79WiiZHZ34ZdQHc+c$n@s|x$N{ZTA&D}gVhi(gk768&V6_Ic zk+}f1HtIwY?xmA5R1ClZ;YjNo5PYwqT;_5Kcy0tPDEF`26iraaaW=Y<8d%;44#ffzAvX@UP=4>OyuJpB7U z8W%j}&#@J!5G>N9MW$d~x=BcgLzeim0-0N#`$S4`P%+{Ral9$8LrXXfa0>7Pl?$yu zjO$JIqI;zRCPXWjBmMrS>$Hq~CR=>+JGqsj&fO1x;F7rd&%Qk(&dQ1k8mx6__qh&V_mXGggX2E13mCA47$P#do_;?RC)G5qBBy%skf z-j9vby8+(>s=+N_QGiDOH5nLt!gIV?S&?hx#h7DX6df%l$XE@Io=OCLuH(pxkS2l7 zqBo0mFI_^-k3uCHSW}6pAtKOXHj*vO+1hSTj}t%pyOUTM-5o zyoRv~*q1_9h5U4Vk6|2%E;P+oi|Ek(?6?oE! zxF{+z<=o387``uUgM0^&IwKVWDgPQ)&ijI1VgfC+6QplR;V>y0s+p0r82O@#LkNI; zLf_`I^PUhw;BeFn%HHuWf9h!f?i~>fP}w=YXpS8PVCj%c;8X8-!w>%W&wlqaUxur$ z`{cMa4sI1_p|-8`53j7OA%dSFVanDp4uc4RR%KT^^s|PDil{TJ-v1Un`BmSHU;gL2 zqdUN=;z_7knb4*-vVv)oJ%purA@efAnvmw7);>*g`HIQq>C4RAby*0uRQb$Q(G8Z0 z1fMGsmmpU5f`Q_7$|g{7qEHRGOn9AUR!nRuBAmk}GZVAQ^Y!s`*fLWTQ|HKdCkh)` zE*du#6n<{utPgN_75B5xOO>A5VVLCah=Q;DlH!k zwXvdI3*sXU0WSq(V=L*}XtB2dO6fR8BU;2YQNUj`48w?7r;GtX=%MI-nEd=8%+L3u zFFP$X_5`5NVuFNY{d53xK#ae`w|@J@h^=)*bW@Fo6r4at$p?I81@C&tt=K)IOC#KX zXz05Ry^xUZhu3p9*8K=T{69=QCDd}8lb?JEYt`r15o8c2q|hjp)o!|MU0Ft zivTd({ssQ!!_4Z6?fvZR8-C(tcC&w$+r_!gNfuHvxwzyfO^P}4A)?C^(z^F_jwg*R zE9=uB^e%EAOhP>M?!1@we&|`ewUnjc?_8KATGa#^<7;!}xQ8rIBD}UMFCG8qul)EX zHZS_Z+6gi}Rx1Xz}rK}!h%lU56wS0DoNS~+aHf_dehgV-lL(-9ix!8?BboA9JZd=OXNaz3n%C^jNW4M;v;ln z8*Bjk2#LnHVE}z%OWSxsV4R64rLHgrRL-&Aq1;je$3$fBKeDVDCe%M*au$qkku%Uj)>KKpPl3X{;{I~{0m2>3hwIr zfBdDNe8G3V;}>51TNkYlR}DvwZ52b*v0--BS!i1u0Dy5|3DP?GK2vz9IE;uZ!qD8& zVubHKig(>|0UrND--RRhteDRYRtCZHq@*c`4z!|Z`Nbqakrspqo4Mu55*8Y{B_~K` zh-EmK#2X^?WJ3X20+ZFqzsXR@WFlo+S};MzQpJEN@cGOp0d7-Z*y8yM%biSx<4>U> zZkL+q=?FGRtd zk=`*1VwWHfmJoKZUNudV50t6(7~zAOwE!{_@s;|rn%>QL!UF+<<=@IpABFgH_6 zo9Y52auUj~cXyPoL)R6Y-rRsW?}ujCZNP&cz7GfX1iD^jezgyC4!DjETkG-mKf4-t zIeRyd`SptNfCX$`P_{d4eAyL<;|Dq0h4Ba8EA4Tz)QJQ@<79xJTmgJ6fS__S?Nhoj zY73N}6&EL~)TM|Tg>zGeK~g9^E)wW|Mnhnbx&Pk!Ay%KRSx+`_kODmdvo3`k+jaV^nB#Dt<)qHs%pLkbRz zo-h*K5=xTiEeM=^WI`GM$fek{e+_a`jwXb{69Q$B_YoU-7WZe&%m~=SQFa>Tmg~cMVtHd_!G7J#?!p@Cv4I z6&3=rP|8pc%7@Z+NSP8u7Qj#ut3AfLi7R&>#Y4XPyYP{9(NDMq_QkE`t!`l(FJAqFZlR zJF<;eKIirL&7b&Tpv-a8@%@-N&|^Sr%x$*xK_g&|>4SA-4SRrrfo7^)S1J7TK+b6n zE3IlXc&CnpU>$pTd^A(sJMNu?s!7RW^!!-aQE+o>11Ov?cZaox&mF0F!Sl~XnOCNr zMwMBY-3mERtu-{v@YnA;hA4qjg?4}l6dKT02Fwm0z-^ECDEckdv2fKjV5I!g97muy z_peC-Eb8>vlokmoe8faDt!!a|^TnwEhiVFN-r3Evs*7S;_od4!8i|->a3-q?f_DPs z?y^LqAw`l zx+X316s!`mtSP{8otrIlAUff*4cx!<@R$+L8gQPlHxOIZrW`;lgs zc}0kq0M;5TSR@L&OII%cm3!3Keine8MnPXB$G>V5-x&`xYwmu;di$sEdirC(_p0~( z{C7R`OYZvN^-q2F(BNLXZk1#u3S?9=-2qb|T{ML9$h`%C6<}aPnp!(-o_`cic*WP_ z*FW|U#NF00j)mHLBZ((ZhzL-wq^*#|tFy!yC@2@qC27?#$s>NSaC1(KLbCgRVN6r_ z`D9`7hGdpvTv^VPBO{YpVrmP<5~yOP0Vx)WppUkI9H&R?xuM`MDk7ZQNahHBMr)BU zX{J2Ez>07nteL_h+|i1`ssqPXaOsI#@y73YDSrBeug8t2_T#qAPB9Oe>A^WDh23Dh zu$F(8iZwGpaCTQZ%{wPKEiKL)1J<(flxeOQ_n|dcz-d#-U$OFOtveMII=Oxty?Wl8 z1G5#w>C+Wo{gi`<7<65dd1AC=)V|u|*M9v5TzuXxY|a~6Q5s(am4?DOw6jiO=r>p* zK?bXteDPdH2?~}f=00GqeUk<2?qEoR=A%~njTOg$FlGWs;6oJ{-B|M13@BYk!4Fmq zG-nVYWP#?^;~rt!Dd$tlK^Dw`kgCc)lIE-!xg0bb1e*XOy3{#4hK4nWr2f?WR#ae6hGh6AI)v{umM3vMM)x++E{!J8tlfx-v+87dR3 zXGvyFf2Mr9pOELyAVH3|FM6b5Ev>9&4piDf+%*0eF zl=vda?3PStr)4oQAwjXAew9*)KlPl}7%xC>W}xqw`Rf#1d~PeeiLF$`;SLYk{c-%s zt6qS|KlY=z=Fr91wX($$w%7)wyo3}Yj+sIRK|voa&_co`g&R004pTrNP&z{VP^n>? z+SD>&F6XONmZIgF$CSfvW?0|ak|M;sd20in_RRgTZKekXGEI*27YP?Ppw9N{Pf`KhNy9NDA!*g5_$9ys3>+Lqf?#nH?sh&~jv5uwyB^&v1bz%>_QkVF!s zxEKowG4PF%{yEhxEiKJeQN8`XD`-(Mj3YXCxD^tz0oNZ2Jo}mFBj($1WkF2Jo;hbg z`QuYL*8j-vD@s{@`Atk)p~6I718++2sCS4 zpPX7VDjy1}G>9g1ZwL15voL{}SV7+# zYE(Sv;d{u`1AsY#m3?U~)*za)vWj1S%MG~X+*OPUqPyK*0%70zg*VgU-X5@BM+PLe zs#pgG_?1#9XlLwu&_LmCSs)08npqCxIH_SR7AcYWyb1Y`f(0mm7PQ(+$5ir|jCNzb zxw<5pcAI%&P-QCI!BkxCY5DsjSTRs@6{`Kv1dj{u`2Vu^=kc~>Red-79doX=_i1k5 zRMoA%ilVe=B#4TFiemQ|HApl>Gzu7v8oQ|2N27@vqY;e6E*e1t3eu{G5B7+lf*^fg zMfFv;Zhud|_nLD&fBeQ=`;hnjeBRIdq-ZXliPk-5pS4#r*PNsIjo%m}R-@K)vIOq- zf0EFyOrtwLke=`ZKV%PVf6&#J9CD)}hVkuDhF71AyFpQmwt%&U+uzz>ltHxnu(lbR zQ_%KAK=+M<5vP%XrRP`X&2Hm4_D{R)$VpmM421Z8B6g*|QvZ8Xfm{D3~w43kdUqA12c=CV!M&=LMB3j1C4zSqxrj4o{7X?8AWso3`7;0Ih z1CHW7HfsCS;`{MjQur2|J^r>^IedtAtt}QTqr%(Q;{5utdE*jB5-6d}t&xgEzKWm5 zV~AVv>bscQk^7G%qGHo=eB86{JDw$;ODM%IbVD(ekd$%4$kVoJ@@Ver`M00{T%PqK z-^2UQT#LDr6SyVtj`<*xT?<=S7lovn$PL`)hWo}i|I^I?# zJ51LOaq&~$h@D-e z?YW0+XnVHF0t1NB%vA`4_RL~m>ckPIY10<_)oU|KtM+5tlU}2Umk0=2Q@T+rm2}zU zz|QYK^DAbvy>`JL?XhP7JP0Ey37+hGd&4(;^_P6p`~UV8U;SUd>#JUU#o71W(Vw|< zJN2EHqCzvpjV@}-w+)&QIjt$Z`H=B4p+9tvzdTcU#J7Aue?K|OFm-Hh*gRom=C)9y zg54YZw}6}-#dWpiMdp)?2uTs!)0;4ipPS4vf-D$b=)!r{4^2L`ljv`8PchohO(_QM z5LcF*X-j-yi*w-;S?*8^7OT3kSVf$Sa@Af(@?44iV7c{i@DbLhE^_?c z9ikf}sO_-sFL(geDM{TzTQlbI2LE3SGdo|t{%2-}3%9|Iyd{ z+zL6e8QP0`)_oI@v$KdOh9}hwiueo~=b;%} zx}c?|Y{E=(v^BzeQ7U4=x*1D%^}OhZzm{uGoaFSyCCn-ri?YEgj^oh`2jq3uc6rx) zj1~Px;VYP1v2mxAFeEgk@_w7t2D-lI!p52q8#4+p?TkX=+Ut9)3u`cHM*w4Qg<_RD zUE&oldw{EtsM{Xq^303U8huE(73L@IrkhO|Ql)bn$r5Hs?T#ZeV<;lmwf7+-4w5N_ z&I0bwmdIT^ON5-*mO){t66Jlz^ZO#a z<;?&LWmgA!37V-go2pZ<>Q{$9{(&!Y_Z#<01b_6#o&oS-7-lxe5a{3VZ@&7= z{_Pw8{Ka4O{9pJFuXxK zJs2$%(hiL0Lg%-*2YsVGgHq!f>{@-saL*Dy@r?h>V?OO2oIHP=njj;d2V}b32{x`n z5Xv-1HX;~}jj!vwEB;!BqWcaQyjI1%Mb3&j^U5q5@K|0v^VW9dUq1C}*j^Xu)S{zh zv#i=XstG2}t6ug1mKjqlYgHCPs&i^BEUh2l+-Lng>Eb@UBLh$lzV5k3xm>4EdG!~lLBICdr z4f93#Z`b-Y89(DZ$9`@1n!;#k`@!Skr1N#&8eeJ(Tl-4$)eNffa?NlKqhs8XuJ@+z zDYeg46BovmxXYkNwdCS9Wu z0Yh51=a1@sDTIDYS(CsPIZ>Ga9T(OvFzHorD4}Y2cb(qhtG?zMeC8u$E5+rS|4>)S zjKBKRHI`Qr+tGKR$!B+{-eF5lT3=%0rdugEU5m>jmbk~f)~LFubU(rE^3)Y3kRp%g zweVD9Hs#${a@WX*@nUw(J*GWSeL)0NIpkIuFxE&C9A1ZLwVY%$m0CwKAWi`Sp7!z(;5782}%F5s1J8z}s)R?#dtkjbHqaPd@X$Kl$nJ zeahqCb^P@EPILdA#rqDo2_CVyWCOJtxg=^G$fY9>g&D^FLu>r%g(W`sRS)Amea|p; z3SdRbP{mUWE0X(`!X;;qcDLC1#Q_hTK`c)04Y*JKD+b(Q3zxteFalnZ2t&H zL|nIq*8w&{`%(-|ckdEtfk-qmQbQybLP}wR2o{B+mCuDc3~e$YyjPd4^%IzUqh?4FBm!HMWLo@4WbXl5FWiA z!9+|X;_>0}>*Z>#HE7?=D1)l;X?=x3>Ji=wL$eGrJX$Qj4$(T$`D3E%N-?mCD(WxHxWMl6Ipvlx|c=PhMbFLO1NHF z+?eEv3~eVR$5W5d8K+)(#n#Ec`K~<_;G;A441kZ|2(sWA;C+*>`_&)+!SDRaTi^Vu z|MV<*A;UjBoU9rXI|HDK0wFj=I zTT-ueyfP0KZV6AJHdr-GfVQcnq}$zTQ%kYOCJv~V_%2BBdW%b^g>fLg7Q)9(DlR<5 z95HMi8W(gVfJOnaP{xGUU#p--r-cl3OfxQY8ifYD-J70-%C5pRaTR%;InYFT>iwsf&z(A77#-&FjD2eK6-VTE~(wMr6l1W#jmKl)<)hx{Y6T# z)`I1vOomu7US$z`m4TF_jzOHGy_N@MC^c~MuF01^`@6Ys`<K5?^=5ZzFT`cWIa?Uj9>-ctXyYp3s*NDSLA%0tpU7fOwD*sU znXzQKSL$WcrT)+V!>77$?x6r5g|TML z<@28Tl}~ub6<h!%yCEE)7;ZEzxM{guL>?lieXPK!FbUo~R^q;^vL9mo)Di?k zi*v=j=UzrnvP5q4+qC9`ILvIY8^8GN_V922(X_#xmZ)Ofw-wm7pVp*4)0%8LSIS?% zYftDHw}p|*F6FP~JX#hyuQ3{3<2gJg(%bvguWBN`>twqx>@31@5a^~187(2hNLJ4M z%@uzC-|e9QABC}J0DKgOnRz;%)>c+l?y$ap!@-05fBeV){kMJD``+-fFMHYl{OO7VueGYduj@DA$g?Go1rkuX&D~v3EIN<(df~4)csGNkAl(S_ax!B z>tkj)(mFr5!cYFt4{`f_H&D}dgA#O96+tj%-D#+$AXiAa4`sju?(eb+2ocR%LYw2j z#?}_|`JniD%5AUdWTX>ZC(&`Gpba%!0vx)XO- zwZN1_AoL2!?8DgCerNj&|H~UZ-TeDryLBhhNaHLVNc<~ls?w?3J_=^jnJejOi-&UQ!xjRFYh z=P`~SLb$P~7ctlnIwS7c1c8J_I}=2q5f}{*j}td9uw@v8BnUAfLDLj!6B_N@I&&B> z&0|ba%qNubZb!_+lS`&T$1&2h@{L8#)?yV@=pK!PjoekO?D%#Tn=* zTxX5(6qk}ritTL0TWkcZFj#O%g|bt)xM{rWJ=^Te3dx-^Poxe=6|XQ11Jm<|IQ^Kv zrwmi-L~CRyA|Mto6b}kOtJM&5Cu2)AN4c{4uX3fvnKTPDZGCvZ^DFZY<`chQ{$-!vCw^67*6B4(PC2VhEQTE?WsqO z)$?EuGxL3Br~9Y9?$`2#qwn#QRd~RBpEz28jpw76Hd#uEXo*Bw3ZrW5tPH+;XlU#2tc zjgQ3GGXOpYM+*_8lrD817u@(kLB89P$lIo%R`6a&j$ZPueFK)gaJB`HQ# zO^lEOh<_2sVB$Q~B7|fFx@(bv(#qj_@K-D`MD@nDHb2}_)6A+(ryuYq{-+;Kr*>`~ zGSy6TsRiB)CoR*aW-aDU2kk});_t4N)zFwWdF@nf-0c^4|DA9cDI5DV;L2 z+rIEq9{sB4|LV{DU?~^xoX)4Ub`4T@H5M(#_MtmDdh1tk_?8bcIe$4%`nLbXb6)?& zbOUWUO>W9qB@I03i48{VYJb=zFjM{ z{HWlQ>3VYR8_T?%K7?O*@lwN!vo(RJ+ZmOvCW%@I+;uyRPG-3q--(Wqp;H4E zYI_D6LKYYMFby-Cbr1XMH~C}!{qyX?aLN_y(%LoI<>EeQuZ|^+$9Es=7cKH;w3)@1 zV^3-S#yNMD3|4`tFoJhO{DI!>n(p{HjH~!P-qt7s#$hQqN;+P0#lVWy^*3BmZhhtV zZTZ&aAI1>N-q0qU9o$9h>DgEyHekHg}>yS}CSiS5s* zI786VPy_v*qAajPZV082C-OoT28qXa%?YnvX=wUc_uwuMEyPNo5Tkwx-UBj5O2E_B zh;yO*7fxVYV|-|c6sR`DMt6BT?l7D2S)cS;mVAS1gE$2W8v~HDYT>7xNhT(JO9#YY zKFsMmrRWg`Sl9JjSi3;Zok9h{FF1J`zV_)S$n))>GUk9)+p}b#GM^g{+zt1ga%QuN z??Qj9ix$P5Gub)DxlegJUVE^fTp;HtrUPV)ZgJ7CA$NlL)eTS=RtaNO{qtR+pk$`H z7DL3RBQ(%5GO7nr)M7oQ04YWisf-_?2YTOLs|*Wk_5TI;yDJS)YgPtD-}hQ$UZaC! z6wisZTU(1|bd6-o0VV|G^je>f>KyvwqWd87ysWHj?Pb6Nsg0 zENTHPzR+wXj}DcKJ)-r#fXCV%Yug1A-LDxK?z_;mw!x|lhSrK4AK|z-iH!Z$F(lz5 zF^~#&MK>w0`OmlXrGMBS3haO=DdbEb^xQ&gvPmE#)^<(yw& z$qz7emF-!_)H;@zFYulJ>09`B&;Mq2uG@i$u~Rb)39E@}P-~FRLXygQT=KcNo$d^P~6Tc?VDOm6(N|j=@9FrdJ z&nyftt&DgddbaWNP#7v9+;|asyD|czkWjp9t-)5zClOVBMaHXw@GJ3NlZq8Zm_GOd z9w?O7*D#N21}$r#t%-pAwH{Slf=DSGhN3w{A*7)W)Y8TJ`tT1kt7dlR^k2R5C+hlT z{{YM#&5fb`6d;*?w@~7-W~GQ@JqL&7LyhuSw_1)1c;Di*Pp zzv9qw2a!hIeixClDG5m1#<0`zl+XHO?m2%P&q}qk6e*Fel)rfqw~J6}$r5EKcw7EC2dmAA$Lr44Yc?z8fS=IBT9Meb0-3`wk8tSW+cC%^Z}9 zrJk-g#^}6DMV|ml5z07$3Qnyf+?{@#@#TVrt26sbQ+U!3{}8wBJ483F>`& zGb5v4iXpyi<|K=%WKkuihJasuTUTqThRGscA0nmQ$9RE-*a!hA!9}wXA}%a}=UB8o zwG={cr?PJu9{H6=m~U2Yf5Sy?{j+s;dLvDoBdd^2iSnNFNjXLk6PUv&j_ zYg>ZV;znay+FaH7ocFzNleP6J+cS00YuO)|k$qs^LEf0K_6fJac1NAH2X2C1HS$YU zFMv`8F!4cDj7Y@3<`G)dTc|j7P`zTUk5IZ8!@NLB(Me8{WVs0C<}w|7#jTV)N#{m504Sb5EweF6$@%gc%i2n zicV8BNI75)meeO8h0;E2Lc8fPZ<4QFx5eq>(1l_H8(n13GQ;DJ~X|A z893Eoz?ofhlD;M^w*o(UQD!Z!?_(W(wJUDxVVr`92`k(oZiBv?!n-UUgh8*QE;s@a z8nIB&UG8w4++~Pb2b!m0Tx(;opT_tnhcYKn6!9ziz9+?fNdYPi(W1377M%iP&WKQl zlv6{f;{MIZmYEL~H|T~=H}er1X13ma{=fgDA$`JY@wDYic+@*;29on3>$Lsa44$?w z5((K5S|jcF{LgfBat_0bH|J9q_|D_6&eaZS2P;{j@L1tX6HHIv88a7r5!Jf5J(-hld=x794hJ zu!U;@ly_@GVkm|W;I_(jSFQ1qKYTo&_sr*T&vjGC1@mY`lVbCxX7Fpd$lH_t@wI0}MIl^H-N9m`}@;!RgjIHXrpi()x15_XB+y^XsKV#H3d!qD^A+ z=nat*-6G|3*C?ebmhZBrvWa*Y7LUBmh|O0o^73oM_`@^J-Gox*(a(nguVplr6zSJm z%q>0ET}Fd8Kum3M;pVb}YO#iid{y?fL-uS*%aj~oI3AQJHM-7C-d{r_xd z^LyRBcr9Qk1yze9jID7?j!KphtkSyE(*$C(TOoTxlVS>Ttm$Upj;nTe2rrgyoK<^O zYd(cBVJ0%^_=PY8h_$Qr5CnnF&F=W!%iJ%1v%4Q|m)IK*{@61BE}`M>wr^$Ma-}vv z4I`6#m`%@f@QzQxGHjI{uDR@5E@=PPLw;l`U4&y?pW4{#Rad z_haCAWhjtqRc?9pC~Ye%UbR%{W-P$fGW07ax?z>%Y_j4rh^8?pCZk4X)KazR(nBDC$<UDJ z99hUoH30g)laXLP)>&xKa&3xCF9WX;Y6zm4lpG^DP?-p2!SisPtDyk37NHfbZvjMr z>LZH)0GL@}a@qU*vw!&KIM4mc=ZH#~IzUeqhVi)O^<9X$)_liFeX(C;_(UpfTS=pV z7v~I)NnA$%Nyy;GH8s2TVcY-aGAd=HYUulMpQeLam(Te@Tk*gB*~bBg_EG{rd}Gf5 zxP-?0-~ax}!O6kvhvI!sv1@9b5Igno)fp*PghQpZm41LKuaEV0{UV*xDhO^^-Nv zAf$$VG}SMlDKA||dHg!Z*veOZbO^Z|=M13|-m(Sx%%hh6=#|I0<>|#;NgoQV9!1Q3V@4K<8F-leuqNX^_8tJf-yDTrQ>YXIP2+#@}wKXw%pb8O5 z+1Qwe-*_Um2;Q$A{cI~ z+2+O%ekNN7?*%X8Cb!hN@)<$^0BANzL_t)swYAMPmtV!zmtDnHl#4A@JH2>irw2+8 z%*gZ{Kfb|zXL>&4=|9B_Z+k3$?FK^)NIEN)txesUu4o%KIUras;_WmMxl7pW`qycl zmXGU#({mC)L}}_h18imoFD@_x`~vsgrm1f zbXq#qx%G3A+ny+OU^Sbr?Cu;O#IjY-5 zoZB+^#u3&({jXR$e?U_eH49Q+@Fp5;R8fmv-Fg^pve^W`o5Bb3!lBDSDvjgRO;54^ z)MbV;C#8;TMyYc^hJn|Bw4+|Xh378itvNTqq5zT3tM!(WjFd(ut+gne5g7ou5T6F? zr=*g~<}gIlDsNQ=Q2{KKW|o4i6{yt*1}*oG@Gvu9w&nZsm;Tt#+3DF`ZmCL18`??D zcn+hd)p4*;vb(ontY1A|%iPdjYsPw8Ujed(p&O6wEhQ#)n#Fn^<$w-rq*J}O7W-!m z3$(pp!5ttQ)P!x_d8nR$&(q!gP~7s~c#y}Q0dNV8XZ_)`mVN4R1UGE3x1HqQf7AtFhY z#x9mX@m+AQM+%s}Coj*^B32*LB^c0g-n2`gxfH%<;M|Ode)a)&)^w)nigD+gHrOh4 zgqjua(9a^7=^h3gNE8y8LK$GF;U(9sShb-Fc}P%OghEttO&?DuQ!cDsq|1Ws!RV}T z@L=Mmhpyr@Vpa&?ro513cQ3sB#UEteY0lVj^LFD#ZHkP-hY+iE@B@a~Q(e+QE z7VVbAz8Io~b}UO>UrMaqM=Y+O5eT221!o4$7W0avRQM(z3Hm@e9F1ndT?sH>HM|^f(=3H^~GOoSi8s_tX zA!4*vr98Wwaa5Vki?Mp3(yyH2YoGbOeCKaGgY6S@YML=iI$sm+AU&jXJ8$^SJ6 zqS~Gg4dE)`+p57?Xw&L-ED+?8hu;(ptvqbItm~x75<I<9mjbw!Yh-Y$;!* zen|+Wlu2eRuNX(KT?!=z%ZC!T{^Ucd#Af!lVBl+uFz6=hPG}ago=Ibcl?@s!Drisy3)fdb+%-8cM+r zF1TJOQ{>Vc5Uh<2;^fLo@NIsL5T zx+_m{+g+FQgr_~5-+Ipz=q}%e&4i~843dZE9Rwc1^r37~;h=H$e$C;)XLq&0XqPBkZU4$~nafYD;K@hss zar)d@x~@}!Bd_FKx$pjMzW(cuVDous`cR$(K_aAgErlVk@)v*lKwu%@rLt4znzN+P zOFqBM#;3lGyuObqz2+h(@aU+w%X@T#G6dXVD)6IgOIb99nk_2?<26bVD}+E}Rvl35rMirj62@hU(#h^liE_QQM#v$`EY}iYjU+=*x}_mV30!DHtGUqLgC0?D za5P8;rDv8>G*`9gd4da}|G5tgdVr78Fta*&$d}%2D>wgc&Hcqto6?=yR60-_rF~1U zkJ#q%_m;Jx-&+B&UHd3DkDKOIX{*{yLS|xP>AnF=_0dNV8>3%HbWXTeBE}^@%`T#e-=QBA!Ig9%YamuP7 z)bOt4AxiP)PLSKqY{udJ2YKi<55bEzT%UUhSWDD8SL`{f5BhYNaove~cBA3L3;80-RQ6zd^puJ&9a%b_=p5 zvZ4c?EDCuRDumPoOEXf~g*b#a61%}%mE-D}fg2ycpY1h$p#o=4&e+;gDcbhDqlc6r zl|sq`)*J7<^+xtDNvT@uBz&_TP;q!5Jm+?8>D==(R(<`E$85Z zBvU3usli7vC{b6ziA53KuE>YFMs=ZEH9j+hOnB5ANWodC(cnmHQ5gshV2M(klzLoj z&X4xE=$Bvql6-MEqc~aYy>U;)L(1lfb=s`qumpDTc;X=gNeEP6RQ$0I-J`{|zD~>P zz+*j*AeNAmcq`uG`>}rThD=22sJkrcAgDsZz2K=|@;hGrDA-=w{os4!!5Mo7z$G%= zJ*`}}x>B5EM8&+EINxn>^?jeLQm14Uj~U@*4Jj*a&KkrwcX@={JKJ1y*;VXc-N)9> zHmOtHjg&K<1oPIKnR}vQ?4Qh7>dx`>@BeQ8-E+T#t*Z;QDO1mr*pZcm}eB|Cwp zysUxp5&(KYrF9{fUZ2H(EKmXuBS5DZg-siJ;y7OrzK9UWXlz8T^mu;zP$-zR%Lqxv z(mvzBQ5iF#!IljHp?1^)-AdtoA9xf;mQLYiSSY12&Kg0E$cxuZ z2>DpsT4&Nv=sKlzq}+4&0~>tBQ!mH2H}%X#e^dBD&suAhPF-E%rN4bQhmS$BE`+I2 z4`U!z!)ArGPksxt4UzI{54pwJqjH~dF&Ygm(J++O^#gUW!|M$Gu@rb&wc_M%R6)|(OF_P%*Rxx5cDOG$H5PtK*k+o0r4D_QENeWF6fEKD>|E5n4+Cth6?Qh9Qbjb=Gqt$2L+S9P z!t3AlaAr1xFv8sAVawBPoCB#ZGh-+N{iNs2#j}_hrN|fRy>eka@ua6LlS+eV!)vN) zf&@xT80H=4?sx9IdtiH3m=~4QO-XtA)hgIPzjm05kN-QSYpZ084ACb*Mw<8$QtG7& z_HR=QP9FOONF%#zjd_s7O5N4#AnFFR?-E8?Gm2753}wI&dgT@fL9o_~3(2yWCwJ&_ zAI3pbA*Sz{7MT=J61g%3zapW}B6r?{@aIv+I3+bIYRG~}rLn5w_hd${=JTG91q1+A zuRovivEQD+tL|QV+aG`V0$J{@HeHj0dj6DP35*g3`qvtQ> zH2I`zzT_3=wJ__pxcbgdV{3AbTB4~>%7EhGt$w?i+R(boL(C~Lo6RL4qW-!&%!WBP zUvnLY4;*59woU50D9TbpkxSf`sWx;nx*aNt7~* z^O@dHJ9izT!l27Q%cg=qwaAd|x^D5F0=gD)Gr|N&5n0r^h}png4U6VWmznrQo@9TA9-$9rf>#TrZ}_Gmi-D(bP&WI&ueFoIamk`uMh z&eITbo_R3X9 zAK>(v{XFhz&*Fu5dAOVC3a^ zA>zfl3Jvm)e&YfS^tpwgBGSYp*(8kI!UGO3)k$!{Ir_+DW?N2m!`)baU`CqA^VK{` zX_k3ndT8JUfB7#saqIz%L>VHKQsgCfeMgP?R0TR2VJR68oI69;=A{C;%R67 zWxf;f@T|nG@OahsSXJwocD(qv?_=M}G~}yd^~7e+$??rqHXi$C`UkF{c7;*~k+$Mh z2nC6@yRk-+MF+lsmqo5LQa0xEft0ccc1`J2G5(z(+9ka|BF8>{Q9+mw84b7pYL~h1HtQGBtDoD9yfml34ZiY%ICTIL^ZCsMwA)`icQ! z(2&y3R9pxa(7EfzC>{t#DAQUCrNA^T`OIeHYW%2=CqK8;`TQK!%Wl$M?2>qg%}0+B z2k5idb&;wo?gJxfuj({H*U;QMGKO>#{i{>z;;!u-|Ayix)_@sU)K&MTq0v@hdiCG9_}l-;&`2L_5GjD#r`y%B?+=32v>%_1X*h7 zK%sC_i-8)Wx73s{rgW)!86d%IzQgLu3J;9}LOa`Yx=72SR=S+R^K-fkv(mBu&_&Ly zt?;?u^mF{x{WmbZe2cm7(3J|=u_*Q}aiF3+y5D9Dgs~C=dDP`W0%%IVX%H*0d_~Xw zAK2lx*K9Cfc9_KRV}&w3qXbJ+B;lp(Qd%)l5{ZjRQL&>^S=yh+`|T#q#%UGKF)z3! zs%QHBTm0AG{(i2$;x2|PMcqIS2-Kbh(Jp792(=WpX4?uZd!>}ZP~ps4<|$7hTC3AO17w+hn}w~CCunM)g{O|YmVc5RZpb(-KAK}62;4i%t%oQIgqj2 z6q3%P_p9PF9%Y7eRz{3Sq%uzA`Ge)CTo>IAlk4v(>3gNrNKdO#)1b1{O_})QV*&vH zVEN&*;`M#WnW?+7=C2veqmg9VU((SFj)3-`7OE0vnspZ3h}KFtLTox)7`NJ-?uRh;gto+)0&y{StRzS^n-7O!bB_b?Adfu*;8GbqW;ylMv0CO_ zJaB>QZu?BO`gLYiaPr`a@7JO(VO`e~vK#>SO07jDU0aLSV0O2B=vpg%5TjD+n9m31 zWyY~XN4WmPHEi!}%hLkp^8zU#QrCv<9Bg~w`lEO9AO73Z`TFPlJL*FV^Umo=xVO4s zO<**_pzcz45k+5`lnB_}JiKz3CJk|qtyix9C#$Sp(eeI2y~xR1cSr|&9T-ZCP`=Vs z!2?*FY!qY>D~N-GKUjgS%E7BAltFb5at~{#25d>+O=(U^&fnelIR5Hgk7i$T$}mt} zr*^^vjp}$7Ec^K|kaJ?vFLCPJX{M7d^4t@tbM88|#W#NaP^RC1t79@QDWWo?Y1j)+iK{Q z$2`RrTg*ckjEi*{UcDQ*lVYD?2|5u+-D2;_3RtW=6E_6nJG#hdkj8Hi^)|d3o($`A z+ky~fv2{;jS~NqQr0%5EEWrd;wCMK6gEsaIfJ^m~~#rxueuguDEcsTC192 zB(j;R`=Na|n{7jt=Pz%_qBx5-8No`|CYI&yE}@{bI|*w;f&hnGuDgkSOUumWgW`sR zQ+){bwvz`ZEq5f(9N&MQ3ujmP!e{&%w=Ey1c&p$R9%PUe9i?RHHUd)grkn{^{X=A! zn(>Uh0LRw~Cmy!KzM~yG=XQASpI^j|_X=r*5FC|FD-RnYN@r*%Z_-klsD+2?%-MfD zGv8VKdGo>mQ+cw(yywjRRetDKewc?IzK7x+iDhzYQCn4hS@HW2wmH$|%rKurs%)1z z9$s|y%B0VH#;5ONb)`Y6i#cfTOmADp+~57(26>p{LnV7Abw!?i5z>-VqO9-Z!Y%&* zbJgx|sg*Ti_EPAoflp3jXTBWstoLF#l`dzx@aUWJRS_T6=WnwM(Sso8VBIUHFPT{Q zjTqY2qVA{R!xl!5jGr3ZgIaXF&YBTVFN`-G=0-&}-AVyj76$D>5; zj5N)hdH*&x$)n-pK>~1>u@+y@I*h%lSJrqbaow2wgtK<{jP*Naq!ks3YDR?Z>SLjm zCNs{eVI|=<7;MEg_r`-Y_6&eaVEnHCZa#4I#DSq~Kl zam312^PYf7Yh{S^tcJ>2AOJ)hx*-TH_UjIYY5-uy=Jqzn4j$#2%TBO8+kq(1q7u4^ z?NljqW1wS(SmMWy-p!Z%yC3C`&pn*Fe}`di)WLA;6qAiqx)ElS*a~6QeqKP*f`X+) zJ?_g5%G#XkK4U*y7ol4!yzBSQ;fJSUp@-m?-fUNhDsgcRT}x8PFlr5<8FGH#p-i1Y zohzn4-+@BG%apAvjBowvU*MLjZ=*0l7X1!e`wyMtx6w|3}L#!P}T zxpChEoBXq{IE-K1z&!6_ohgkFOQalZ_T_!N_;>E)#O0Zp8wIFC5{DsGhM`bxfFozI zen!bNh^lyPZYWwymIN>;9;|yR;bphulbM?5ECRV>6~4U7z)C@!^Qb8x7XIjPj$XHi zAtEC!LJF1^SrXO^w?^vI`Q6JARt~ZAF{1oq4AnPI<}wT(ggY~_?X{|45SwwfjV#%E7(|CwCn~QPniic_Cto21Bi6%iMg;O;m?@sW_D~Ncg(L&U{Xnjgm97 z;ymK&+xgL7_$I5z+*dQvJdS)d4!33R%b3ivu@) z)g z;i>=e*VwmufmsbtxRc@peYbi+MfQv?CrV)5=EkJ&IDO$PUGBzvT$;dz&BT{K>4Y}v z*bf1`4oZD=VY$^Sc`5PgKUkxibl~c4S4SdWVlwGrZHcu{|10YG{g|l>VT!zMOA#ul zbdv*MFM9k}=AFU@Vs7CiljJHTDdE zOJKa>FaL6BD8nav@nx&d#_|Ooa`&gP(VxYs)Ka8$qMT{pDUTWg(yuMxCiZ`lL#=n2rQ|KRhk-XJun>Vj;ml2>V=^6C5ruC(kUFLSUNc2j_FaJ^1aXJ#Qq1!S#j!= zL>ly{z-X8t?07hl;2JTlkdrYRLV8CD{%x;3`6~`%+h^5b7^jBvH0uZ&m7YJtAN}41 z_ASBYmSFH2Rr!37P*2HO*;?Y3?iYeW z5a+zQiUw7ul!2U-Eg!0X6z-{oZaiua1mXf}AzZx?`iz~OSTuLm$4en}I^oV^AEl2XPGt=pGQR(Po zU~GNb_c~iP_sGLDTAaSE`Q~D`eH4aNQ?>CYOCA+@6V}7p?c1b%s*~WRFya`ik8_CH zA|$|Q?>JOTEToVc^i#cq?Nc*sS$k3nA86erP3r}Rnw)C5o6SB}LM|UqW6uD%1jbw6 z_L}8MH~rMyr=>h3CYwFe^~;!)_lF5>>*1H$`d@BFor=g zt?QLSXj%2vYj}6G{S4v~IBd^n9Nc$+o36Q@VLq3$oQz>mJlm|7Fc~VfX0AJO7k~Tu zNArxI`5w4_4Te@EBvRRS0ev6RPasm#n!swuhvXRlHFww;xb{<5nO_X0GjVQz(OOkYjM2iKs|>dzaN z7Vo7gznn8UXU<$W&!nG%iEW>8?!M1?`q!VJ?D*)Gr7F)>0f=^kMxFG$@{jK4s>8j? z_nU}{c#r`r%!h4uuDy#K@!D)AHnulG-kv)IZzE;af+2;gJ^?L5K;%J-dJRJvNIA)v zaHs2fwaw8j3ToGxMwFuw0^14Av=$8^0gjWSJ78ntyUXBXjA`rrxk=$Q!$8e^BE%5S zrQ6W=YAC68&6dLG@ptQ#oQoImF){r5C(V-$cUa2v zagU5fvVI;Hxjq>8mbOkaf`v*sQs||Ft#h+DR&%)6J35C4c3&fUf<%jsiJ!a~>VZ7Y zH;Uk=aSz5aY0Jf8O_YI@Yc=`{?(2JDfCqW(8332UnA0y!yK8-@eM!#cXCB4o!84E~ zaFJS}>nGp^Y6H;PX4esI8)B-EHg3(`Lc)w%MB+*&Pj*c6GMz!OdLW71HZKEps66zV zhj3tdKeO3P2!Kf$$}jF1fc4obOVbVRyYnE=_}QO;8#b}+C2H;&$b3k}Z*OdUNv61a z{T#-D*U<@$=P|4^>iWRt4_{#z1l^v$XU4@1$6Af|2$#5rw=>2=HJ28O95-sJSQg1~ zxh`>{X8!uzKj%kY^;6t(2(l#< zPb@7bR`(k>-dLikTc)ab`}oczxQ#jtSU=&#++* zuu>VQs(@!vrZ_SWYOQK}Yf|uy!Tq6vUGwK2?VwGg&{ppYXy6r#y$-nqOw)BE*`H#$OQ>*1;V=ONpU9V;NPm}ou zATnPIok>fF(IkzlpR~VZ^L?mpHPr5CGKGt`&B#k)={2KEd#4$WGQP|r)Dy-eZ4Jdf z(hHLTUT0BLB8+8yXII$3V@>7``u%fCy3=f*$~^9k2W{*b0GGnZB)UA!d73tsHaT(T zlh{macyUSuIkjn8HMC5ZTN+h!YYEbus@8?v45hElH^%&l_-E7+knGTB7FEMajq91x zqugL?w#||K2f6;r>)6`b!lF8!{0T_aph`*fOK|F*$~XSZk7Czd#C9rqh-(Eq$dTZX z(%1b;u;`gA5aH3eL4psARN%6QE;C<~+*#fSAAHS4^5I@a!+4eEN$MV(lB=Po%qm?q zyclW6InoXMzn?F`^b*Gy^7Fi&jWbPtx~ zou?ea88P5F;V^+ThaIm=0=#8p1kk0*Kz{Sj)|pA`k=|USt$csiopouxf7J1lrIkcX)B; z!yKyfi8tI#Df1BeI=4I$)fw-7pzjO!+&AHSpZ^Wm@fmJK# zB?OKW8bwkCUz>CJ!&aHkq|o!KasLOlAU7Y>aFGY}|E<(3;SE;9Eio7{I48R$zTvIU z<-+tP4)$B*yb5N_hv@95iPF7Wia2y0JzUA&W)wJ+uIJ2!vrPJ4`Op=n$+`2?oTq)= zaS`y63@li*$#pZ#LRqe?@RApv;qoIBJX$Ld6(2Q|iBb|fH@+9S}F zPQ#L3vbYtxliW3PS?dqYa;teG<6KbD4>4duYrDVy1>O{}@rxZZP9@LHxaq*eJ* zdw)?lDxuJkMfOLn21UFGt(uTIW(o<7E41ywb`jlMCF*woR@Ku3gR-^g2QYGOcC8`( z$*{wpGE3Dy0I0Lp-gwZ)o&j(PjDt+6Y`c45I-ky4%yp99e~~KU_nNJ#fCLAY8@aaQZ%dC*_m?uxmtED!wcn;*vS{KMzbbwj|m@&rQl3k7i6Z(&Ht+h~T2d)NxQj;iy@ z6%U&--*8ffoSnPhwTbO(1!ugqBOH}Zjr>T>fsCQPWc<*K|M}8?%dr!Xmei!g+^I#( z=FUQCf|Q9tsRKD`;Jdrp{_bj$(@%QNuV0V{mc_tNIq}#}?O2@_a>O?DjCwyJ;hBhS zrLw)Ac-!0880Lj+jjb1T7b8Xlq+LUpGWRre#5wLn)IZJ_6m>ig~yt2ia`!jF(wPU>NMW4Xt>2n*H zy*j1zDl@y&%s!@wfB*ZKKIwnW>RNrEz|i);2ls-2)S(Ozw-%f_XCr`urv*=7haD?^OpFZp?#QAqKkNRt)Yl; zx*UqH#Z!|E2r~(IZ-O}3*&taC`N-VFq@;jp>2$#l9jdcFX6o!;bMeC2U$a~_{*9;|uPmKCpche^-#fASq+s4gHWG4;FRKGqeZ95 zM8c{E0TlIwNU*eTlj*^Mty2?jd(lJqhhKg;_q_fZSYBc2%F2a{>le-J#b$QuV-52E z|2FLCW7l$;{z0;C&AsBOA%1A$VxFP^0;G7K?GQA7gb@{$#Yx$j?L=6i*$c5};;j0x zwke8#!#X!}h;rOD91Kuq-}rsqSe!!Z$5Umvh^I$BwZL?^6yCw5HuemFOJMx+H~rk% z*Zu4p{@Y`ZKJmV*-})K8KAfa@!m3D2Ng8Oh@-4hf_l8K<$m^HFYc&8oTmnPTeTp;fTw8Cst8SRrL=iCQ(VBcct zdwWd%Chr-G9C*i9X8g}rJ)O%Bo@HKTOcWmihL-V#g^~+FHilj*DwuiWL<#i3ioMf4@ zlUaM%dq}5`${=bXndD-AR}n%5m8)0}7+ypsY|kg##mQO746b!iYt-0}RLWKbutw^s z5nK|>cqtJ=iZBFF%AC|tiAlxaUvMDZ^pG68ni3K=x8Zh z)KRbw9K%YGIlb-TidkfixMO)rnjS2*KYVJ>`~UEaJp2`sIAz&IGA_Q1`4Z}Hfc}Lxmmx&o$7w1^Sj=f1hL!M;t9+HE5CJ(TF zU>~o1?U#^xk2!I=)Kkhp%2CY5_3Zk2Q5tnYIuj}&R6?#9WxGY_0D41;3zLzQ7rN`uD-rfWyI@R_e8&6cTo(08d=q%7(^ z>zviY`!>V!A{}EPB!bl0g#L&e$$Pg@_%alvz!lz*VVS!uB_5UiQc`ManHL5x41?Bf z3SL2(m+%;+{A-0WZ^(eq79zAzheDZ0h+&@b3~6PD`gZWw^PeQ>@)wIgPnK09y z*K0LwK9FvB@_Hiuv6-oR)!uke$0f0_|FI7hk?8baB_Iu%5e(pQ)t2QXTpi2Euf}y%%j24Q%86XxN z%bHT~xJS=&sI>(vMoKd~C^NjzA5rWMw-{vQt_nq8u&HKrno>vB!5Q$O>Wf*Xp z@*U!&^0G?xKuxkxfhg5{cI`ZUKgFz4=aqhvx&7o0Pk;Jl*iOL_AyO|gj4^{$qHjW; z^4#CPo8t#F9nLU7*Ba$mBBzXX6`yV}TUirFV@u7UY-|Cob%F(1)HR>A1lr&(La2$6 zZy>8GMJ;_7R9qtkO!FxN)bUnnSi^-5Xr5YW;0k47H0CkQtYTfOTVX;5iqHo$RjL#s zB*QRSCQTAcmlY<5c9={G^OMWm{YN+OmS^9>JAU~Q-1Zk&vbHuQ9~tP6Y(bvsT?KMh zTm;8t3$ok!bDMpI>o27?v}?C~{krGt|I{pR$Z3`Vwb-_yxZ8-BJcMC@Uj2Mao;t|z zvLu6{9jRbWd`A{Wpl14hLPohZs@6y9JGRdi8HNRNr*#sRqt;ql{9Miq@Yt_gqu48f zJp|P|huOUF3D-T8lzN7U z%ez4}#|PtW@41o}{_PjyQ^#r!?;i1!!&`+QJ0>Z}P?hQ&2NF6dkxa4brTxN#t3zqo z#4f?r?i1A4per54lq&F=J3fc^-tj2vc8`@_235|~L7^1&L1;)wh(wboTO-DqqFzF) z$k=rg&Rx7f-*uEZbbY3GW95)@<3oECSm^Yg96VL3>3Ka5)Y*)>+VKZ3Jjeb69o3wi z5`$M#?+mHxozGU;cVl`i)pf5u!chPWQMN<}Lq5#@M;97=F9 za6$MM9Vz8WDx5^14%8M}Qrd=D;{pt1%klnOoJCFpY>oYS7=hvNo^|eRIJ4Fv0!ZRT+*Ic>TDH%06?|JtY z8#}PQJ!qaAv9CI*YL5ET6D~aLjd<-z-jDB6j#*Rm#!z*yGGd%A=ddDGET{b}#Gr*v zGzZm75KoOdZ$In$Ig5PPeojgAo>K=c9jrQD)vCCbKys=xxI=a(E0ug`lcgiu)XALn z^O;j`KFsYeyq>rH^e6DvXWz{GUVaVtzh{XZADCRR0S9N)97T$xdY~09!ZFK2ufiAt zrINZu``hqj&z?KmSxQ#`;R}E44>KFO$N$7#)oys7)im=K0+70wDG={JOfh9qgfZ^Xy(6bwtW77f6l$};EX*3;1U{J+k*(4}siMvMu6d1jJg#sd;A0#co z@~x7xn$xCpjqrDP=*<`~mB8JZ z?Qm%SL2kbGMz*#$MO++=GGwm3?hgLVkA4?-9^a486U7Zr5i5k~TOJEo=>7<8N~p*{ z@Z{8{+)QckT^Fz>5^%M8xGYAgOAHmbVvFy1)=zTX@ducf3DZ)bi?p-U%Eqd{Xcc#49iPP<9nH;j=N89^R#Ci!MC>s$(y(YL`T7RyNcURR(RQq zPjX`a1Pi#oz4u|RlFOdv%rCz{nauD!$aAlaL>CG#;;%BW6t}mW7|IaO)G|giSGCH> zutcm0{hlo=n<5#x>!QP<487b%od%S1?qet*x(u4bWKMr@PJd*Z{&1mRp2ONQ=ihdS zJAeNK@A{RScCc5B}B}bPQm&vzN@{W#z2x2jc2qlGh#n9nPSl=Vjdx&1l?-JOO&dPb73&|4(lga zcde&S`0@uJy#iSK(8t>w57yW-04|Z??sjsuW{B#5tu3*klEOqPTq_Zr zqAci8Di3?e!*EZ`t&pY@e0$2xNABh6&-{L7*A}cgmKFpsP&~L91WiRYBSs=GI+y{o zZQZM7W3rS50~it4G>G`KZO_Qptn=N^`!Q_ZGh}((SXDyaXiT&k@+$2M3Zv-SjPol3 zpo}1kRJ+aXElL^ax>J1%tAYGvQfdfCE3Bldjv&5AErnXDlz7w|AZcC|2aXPh6^41#@wcpY zxvuv=-x?RS>IHTSU9Z zaJDbV*rh-%#_E;J)U6?4eTkH25_#*Z5gOmZ=(c8D#7;<-*uGFm6Ql0H^05hZd(ihx z|L=h1fpmI?J@IGOlXb6-s*9K4TevjFo&j))3^Vil=I4iDKGb;~pf2*BJu3Lsr~qgI z@i|i9?qb~MtWZHMiuaFRf4B*)9(c~JVq3tz$kK1@Z9~^iNr*s5P-rQJ(bm;bJ@`6S z7!2lj2p~(Q*2Tca<_0%hbq&Y%A7g84i@8C~6Aq^xzT(Gz0IuDk&i6r!xf^1#CtZI` z5jH6{kYsb5JTbO6La@(a-;o~QDwxmklF8O%Gh;qX@f)`J#-IBoPMx}nm2M!{O0E@B zM=pY=4e*%H+6<~-zT*pIrAA>PBRVS@oVjq0rAe=}xWSpE%H5}C{Hw1!O5ReX)6s;8 zxn95=P}9Kc{}LvhF|SY&lwG{ymasYWePO!Uv-VH^o}uWB?xw5;&*a*v$Pfu1Dhx7Y z+PwK(Tmh@#^GGeNj?W8L4f90TXXpkd%X5|v?XYrq#`LmH4xSk3_Ejhy^RrVfzHc9= z{^oM-dik}y^H(3rTc2|aZ~6I0@{ZrQnOlGFI!?X)Fl!Gih~SKcF>A z?HFc|JVQ|k0+PJPWRO*+8A~EKhFTx@#hCUgvf-GA9!n&p1T;cq4qlC7(}jr@FDr|q zFO6YlzG8O2f7L7gbA90GyM0myXAZU_d7y*BlV2=2cgGG)IQ7;ICMzo6TeqEq*Y&Uy z#83<4!4(2CA^wsPt?z})NS4761*eu18~4xXCQg|ftC#oKysdP}DXW!C&v51ESG)d8 z?wV77-OTpj{}1EXGXO53@q^#{<+HmVICs}1Gj}VJ&`tS**x4SbRYe}0h*mPPhoLBj zZ_xJ&YnrKPc<#gxuq+n0l=HxRu5!MOG44%RAm}fJ)n9it9`S&qL4|di&{e&6eOU&J zezBD3yN>OxZC0nt+<5i%^f|Gyv&GOC{9@(FKk`h5hi<@5GjxPS8)2A`Vm@?t3hnA% z7%F96sSZ2EICND9vkLU23fo(T9hmXn=~X=S$6iPs2KJ>LiYwg`%Yv;N@&V*d5V&IL zl7x;R=bSSoLM>7-ihFlm$Aya*$+=hOyliySo-&*BgfCcCS=w5ZVPFW$@aO>ONMJ9m z@RFC^!?8mG2HNxHoS{~#IXktobJhL$#*~~@kSBFvjHQbAa|Y(*zLHid-9E!s3f+Mn zrpLC)N4J?CoiV+9#^l%zlY=|tRY4{@+s4+}j`iD?IrFBY-0|uw`M?XWE(x-*4poFS?Nr{>c^G|F$EXzH`FHmQj|r$%i)Sk8O|+Zo!JWM;4qim;-ol{NyoajEDGWZ%OKqizTZkh(PLFqHA|L2o?J87cmMBH*BHkjV!VC&ukh`_@ z^`o#z8o5-4nU#L!*n9H7_=TSs?&gEFOVw)**FEO3J#?TRUSW2zQih^pN(uUDCih0_ z0^N(RKoATg^lzwtgGPf1;u;QVnwX!PlRF~=X=Z<-qGwCMG=d%#Ti~N7d6NLjTh&1(J&`-30w0m?!NaF%U#87iP=ixrO*B`_PsOVeZsm{_z3m4Pw{&c zxxv-KcPkt3`HKrI?SrkY#ACjAKYlt<_U(`lPr38rexCEfZ{dA+-on*a-cOxpN&@C$ z!I!G4iKP@QM+snp*c9FB=4GJkdOc%gWaPA{xlpU-D#V<$c;~0N$IZGhL_B6cXPjZq`u>& zPxIIOyKk#U{8}$$_1MsUvp@hbume4J{pDG@r63Z|j3W=<$MO_auQV5tR_E4!kC2$A zIDWQfT{PpOGIu!tj&(f2%4N&!zoNrx@GuN4JATiAJ>^w9>FUq^Ycu;6GrM&U{{Qff zJpWW!K-q(lB^5DT_b{7&eWlGbZdgR83nB{&_d{kmL5HYT9sxd zK^=lS$VL0|0oGaPzWYux+nG`8aem|3Kg)IH6nj;9P z){gSV;~P;BNj(!3)>se|n^JNYs^qaYiRzJhb9y)WPJ^_B80Dl)k>qjQx%>Q;|Ld1N z@adoO>0hw2lJ1BvUsA)}ldrEIuczPi6|+}-{H_|k5bi|vr=V2$*B(x&OYPR8`dEWY_GvJpLYa5KR}KQ zm+aKjGxC@G_KX|8^i5{@Tg~k4d#QgP{;_8OTw)^_$y4C^jkTSpJnP5*@GJiEF{6)-jZUE(eRdYNI#L zSJnPPKA1>^P0+T~pc+{NIJk*fUW!nPp%D&E=SitmG7N8`>YU3f%k0dydEoSUZacY; zr+vk%`R;H06NbCy_}K&0c_q0j+?iEus93kdTHVLlH(cPdE^%)82(Q2L3H;e#J&rr> zzJWu_>s)bogN<3lmc5lB4FyxGiqcrrlubq*1}v&7*0C(Hw7wLz{w;yHBv+-n)#X** zbNhRlF0YWI-oa82r!VgCXRp77yrnuP3aTJ6>rP5idTvmr%Y4Uo-@*OwoG~kj!DOgu zF2mE!g;I>ylt0JPGAYvjMuRU2`5C?PNDOzBHkTr`Q;hg17}PvFuaI-_Iu_iMcy%%w z8>!SCs~$wWICnG=%9cbjY@UDIUziYBuu*oC%f@hy3#J!KU#WwRh^UOVrTPJg5Gw>q zI^7lDPgTOfM80!?fBvFvyYY+Olq`LRnZ0dK`F~`_o&j)) z4tGz$0k*dfZO!vF&-#zQ|F2*B2OoUmE!RBs%2R${c86{OabvZ^GA!C1v0$G29?l*$F|wY66$=+7U^uG3rxNo_5PF z5TvYYcPZmO=iJ35?mY>g@o9h0;~)PbuH1hWE9pKCPG<~JRWMhJgn+6vu~JC68+#&HAPb5cw|j4%Yx{hWdExH#eb0P8 z6PtcMU@0*l=G=e&6qByUQl^xF`KIwtziO55`Zufi5JFaVNC;dRQh?z4!-u)$rnm5k zS9Q!#?_bY?XO&gZv5!^$e)wxncH3C=Vel}lY7}>>MP+%1C=k`|+gh<9BKxpCUkl}g z; zd~Z4?_VoUqdtY~+ZmCjtGM9hq0odGvC8KOOHhZY2ullWv-N8q`!BYA@;2nF)|06f{ z41kY=;mTFMY`(Mk1vfnObARfwH+;nv*RI}dn_OUX*k+oi@<;=cmqu5-Gqjj+>*m3m z!Uv_5giR>~wAk+k5%1LkYC*a_cX)N?MQw0LlrfM4GZ_TXJPE zZTIf*w{O0V)g4Hk(j!I6OyGlXSWmdkaXMc7r-f(#_`Mw74_(U4>s*M8sTX7Q!r^p? zm-+87sfQJBmoKLG>mEjhlxRXQz1sgSLNeyjj@n+u@QfjezB27_w=DUQIYt?DlifD>2JbH03c3(qlx~kXo7_Kp5O2!k% z8b~s9Sli^=|J9e?{vZFt_g?Y_KpXC!-2D*j9I3VcwBf$L`lgG2`$spdzvlJF>du>& zF8j>RRu5%{vlUAU7b?sZNQ!CxJ#2#o{1b>($O$vUyUNBXSpVP}^Bv=w&)QEN3cgk0 zY<2t8f4AK|;m7VVo4m@*ei`_{p7Q_5j$KQCZ(Pd5-R-eo__f!+vzz#m`Sn?S&cdQPO zRw&uA?Vfp*z)jwh^9-*Evw=!S$1d+QMT=5X>E6@|7)6}~LDo_nB}$gI6tlLI3>DJp zvRLNxVPJJ>mG|8BK9+<0mvYBa?{w1%FL=piq>XKP*@mj5;L+Q-Mg%_LOG|w1Gj3=5 z{>t{OD$8JmxFd5T8(ZZ(Z%F?@@|BqDX4S}W(f#ZAoa6m!{m4kDDgd?H%WfX~ZfVgR zL48@o(}w6YWnfV^p_JgAv@eEkZd?x;8ZF$=l)a5cNh4c&OFe5(F`_c@o^&c*J1P94 zR~tr2D5zQi*B&V0RqLP@g?ucGSvMy|W2Q>MW&_{+q$k||te^am&$W*e1E7rv3oN^D z9)aZ>cFNATmKT5SWBdB@w^q9~8ALjEf z0ACuYFgwdN(`)&ZgHPbv{yHuWYi#-&lWvN4@``G!?8Sfuu}cuI0AW|;RLey!+ZeZR zg+RovmM3RP=S^9VtJCtW7fN0ujF7Q9p_D}zDR#JG)TJ~cSa_bH4CIw8V&)>?%ue7Z)lABbKE$w;ZA)Ip(&VNeQQD4ANq6E^T7p;&6= z?lbqY)K4ixg|6e`g&n^2na6qRmo7=ThCxBAqaVUG<;pNrwkL;q?8D#64c9JF3Y02X z+=91|EU_=G^4j4~SkFsNSuLILTNL zRN(Fq2F}9J*cIz<{|SR3r*5o0F`^2)LJL7x2;%B^SL!U7RI9=fS<}6S0kc@UDd2rQ zi$Wk41&~_mpSy}fwYBD@U~zw7e8cBF{PySkx1amCGXQpvKoE~v*?9QuS0DRhzVGfw zSvRcWnDSJ#7RH59qXq+#9jUtP*6PqZ%nE1UT{!*LRlnx3$A^`NK76elziy*{*gxCm z#AkoNEd36%;qRDCE|}SwJ+J?xH}(vGkEgM8_?qQMJnj`<>Z34nvI-?*oiWTWU}@ly z%a7zS2R@gjy39pC%}ljaLfRYdiwbZFrLkol0JIprloSmfZvP7pKj$7oI7>jcxUIMY zd5k5-IRien_}mom7wgR_a>9084p#^C9Xz69)v_x=OA}U zM8{f`ein7>^_=ZKKQwhr&lCykVbF*{?)o5*6~pLK$K7Y{8;NJxbo_0%54_{HoA7g6 zq)t5@jJl{yD0~%94mt7bFPQP$zkCnV6{Q-E>d>OEV>PBW;Z^me^nN@-x2+gUpcdiv z*Z8+7&^Cun$?6@n&(M9e+Q}Ya8J#v1`L1k*6d{nh$f++49Y6+-Vmk5r*g9EhlipGw zW5o1_vC<4h-GDsxco$(b5y$-RCvXpAFXmsSVf;BlU8a-X^J5gkAK(^rt@JBypI#N_YVmc=OtSNP)3`v6N` znA3%UA!20pK_zOziPy8ZTYVN85w$Ao#L**(QzC`yDC3}okV+snweEuXLup$p?$dJi+xiH%)B)Q1 zvhYNS@5yo;Ln=D4Zpd5AI@s!#GMTtfEf)USBTn4$JJ0RljZrRFu!#g0m;u2#N9G3(}$Hp3!kv88IQ%!WCq&!47?`ufQecb{=y z@V_qSmg_4yParpgCtOsI=LJePtB0H` zA5rY;FTS^?XbEGV_s*1P*qPx#5}8H>&U4oJ;mLt z*HJ+<*j?8R4|0q}hY&Yq9k^GDJJ~F9yn_`Uh(Jj6k?fXIi$8~FAKp4vvD8tALhfV` zgdUSf5AK2%eFMLnffI4#B*wd0APX)Y3WJwOD_+*a7>?n+_N~gu*z_t!Y#6Es6{E84Z^BUXA?!rh{vI z)TWG<0e82 zCL=@7DFfAu)2*&>z3trh4}bZ4|2pUV=P4yMYxqYp7DPcm1oT>I^k$aay_(s~C1{2{ zFaOdUyMkqV<5C^&Zqoz%Cn@*)ETvQtBb>D8>n>fq@RnL}kBT(bq&o!Ne%`us8^3nn zf8#gL{t|a>zn25uVGi^MFe}VQPfm)URKw$(wHAC(h=8au;BJ&bP`;4ZFi1QKv9!-p z^r%mUM>n@LvceaTbSd&|N0%bP1ymUohDdQ>%0ad~A{R<$3Me}29z->R&^N8qp9~tW zRV;CL)jG&2!W&IdsSU5@uT`dt=l25U%xht5w#_{9?FX-HY)|-?UwZ`Bcd)MALraI0 z!onS@?ssx%i5I=#ehw^kSgS}slH4-MU|KtFt?!~stGfTJ%nJ`fp9~?r_uRZ~*Lh?_ zEVvDB`hU%5paSu~77Fmj%5Sfs{U@?QJW!D?D>ac&{(3Jy5+yADpC?@qA7 zGNqPSIz>tta11xa@y%2k#nN&6Stk*;OqbOF_;g#I?ss{Av-{2X^nypl{??xv%X&0DG6G` zo3XKyl;=ub<@Rzb)QPAJCIyG-ep72oDp!70(42B755#hqDamajH5z2tx7Ba8yygZ4i@#-0K2aWKB= z2mZ^-@}a|zD_&M;RpcCbvb2IVk%Bi0?eKsCB#1m7l3T#is)p9v72NBEmtA~0zi|JL z@|p{O#MGu--X8-eyyB)9BGwvSXH%B$QsQlRl!k3yr0y|(4gyz$b%$CM>&-a?vrLs* zN_cyER7V*IG_SQ*`YxV7;9_uwQYf|JUa20j{93T8j)+~CnGbWifW6Bg1z2hsGY?AC z-B%Dmt$rbL&Exs9bzIyykCEu2nq6;+&wAV;_AeDIDWgFePjjTyst7%#OkJMv{Fj{L z#1X~*J#~;29w{-073YC+hFR)JS(A~hb#Ifm4N`3SS01*R=F(mBW=QLr1@*F_1}0_i zCI#LMB}cHj6tavB84)^BZE2k2J;eLom8Ichcqox9Y0gd0$1YxgLN2?C(nJ_0Wu>fE zFM1b2#%u=AsG&@0kzLmXuRz{CM99foDP>tM7Uh#`Ev%ng@2hd*A0q;=H$MKyo&oT2 zF#g9c{OoF-?*IJkX%&|slo8ONZV5K8HBzaRR@Zfk#haOkc^(zi8P9;$b9_r69OfkAgVv)KbPe_%#%| zA@5f3v=9#IQhnbna^b5;a?LB>oNbZFBnq=(8zXby12g{RS09GWfs|B~NhU++P)ieafJ+z{S-fEKLU3b&TGF=3UMqFqW~^BCHBypHs%lqpeoi3abx zQtMi%M+RKdeOmiBP=LrTa9eIdeI8?1e#&Q#2`aL_bDS~x1lILM3FHurib58yw|M!_!V02v3UrC>rC}jxGP$_pFx!O&5n;F&R*_%7LZ?Leu%UX5k zEi6!?IZG4h?oR4-e+{B;dbGG=*dS72*Aze~eNb875+uH67GUfEy2UK_mNY=5mS_g+1ST^?o0QR$WU51Mi_QVD(TyxcX26HC%<@&-QT=&%_~XG zVnO^6Go2%imP5S1sG`?y-P`&J{BmJ(Jx`>9&fYUtZz7-8p2xK%UlBAQod4(2a z+%|JT|EVs%ODuWB7Z4gDqGY9(L5N3*j)|uIkaMT!9Gg|eI*B#r4ryYknjJu<+1}V2 zA6H|~0Jy}5yXSh~rh}w9O=PP>g%NsR#A$`=hIiIHz7(wdPVDxkC`DwGM+iaCBaxzt z8WGR+)YEe%ca?Qsc>1~g%02&u5AM8^1N}bs*}+hf;T^ipF$_Z(2vPT)2q%|-rkg+5 z&}SDk-#lMchZ&XLL1Dj_=aA(R~kNr{v4PIb=G z2xCNf;v`QqAu?M^(pJ^yRGgh*jv9*L3k^vr(jlYXzY*b(fKO6xnJ1{`bjoRab8BU5Yimzd z?v0PTvA3u%@$qB7_>0Tk(S47vJ9Wjq(Dl*(+{F^lLAnZcgN5?8sBhouzNf6%vt_k+ zm2z&LxL{>-SL&EaO{bbgRx6dnL1y_NufOnSe)axe;1#Ey&-(m4$Ggi}>6RHv)UWRn zUDxX#%!0HPTHBFkFe$~5+TqIVTENLA&R=B|B#fMU&aPdc>pINjHs*SpZ>g1TtQ?pe;MVd^vMpo5h$lsl^_VlF08h>l z<8B5*Yr3Oc&JQ6wT9EAo#RKk4x=8c%R`F4WS_{|cK%~ecHLtxfp(}#eiSU6c6}PH_ zp>PAX$8`UVv?@bJ(7eEzI4%^uxCb&8pz#v)xynO_F&rTWWtb4fq{IgpNtH$Kv8|`v zPwauS7nV#X-5Y!3<7(^~0GIgq@$dVY{oXJAGwbt#8j4#=O&+qGyzr0!2)Mnp5~@0n z4?_rcLU=+RtGFpH-(tWZvI<^HwJQn>4ra8M<;8vSa(3D-oopG_fLz$RM*^V{qTglm7tnX&f z3`3v`x)`NYhGC8?+zrXd*%%^+T^}_}M9y@dI?i7>OP6JcVMb5l#v4|-{9qP0B4X$I zQanr}^;KtHcX<0-w#jM2W^qU`l*j-u!)w7&js3IvZ15`N$(Es&RgX%5mas0V;7*%6 zO#F)oe^^e`LGMud*A}F@Kw)a|2IM_UY`AV)=QUF%NmI&k4;J4cV(^4 z4MA9yk+Lu%nxghvaT8CY85wi%c;GFh;U>O9t%Wj(fGBdIo|z!B)o9TRBJ1TW zmV8ReE@C`2i#Qi3ra@OQ1cXTvCE&TQC`G7Lz$428STJ74)VQ_{|C zB;_q2_C@g@5+s|GCKF!#yJxxjGVwF2SGoveBts1U)NyxtAIatY69_`rcQP;n;VHu) zuXf~E1gCX`RjBTmCmRWc!3PPl zB%o5wE%(2{5ROok;1B3khSG2K0)nhrhC%Pn!^ny0P&#Z7C((PVK^`2DhW74VCW=Kn z=VlCBGCO_h%*2=W41m4y@i+DifJ=C|yRmx35;jaQW#+meFTW}M@TNSJzK7>(S*dB} z@~YyX1uSk-Qi```waF#Q)`U?(D3n&9he($TZHWQdD^@dIx}1$}%AcQmJYmrf$KhVq=ki%((2zM!k3N=_9T;jf(4?HJ7eQQ;p?7y zG(6!*kCXmEDl~pJ!)pi2OT6MG=UM6!W|=;Bn)6+;?St&+1AZIXmgI)xSZgX2X@xBu z0=oS+f3_>;?cP!;BO8D~7$OqW?zfRh^>TvjXR3MN9!-a0jy)N zk8!{6@X9kU;}`DvQU2`wE0~vo%a)GQg;I7Pqe_1A-lUO+R!qjEuo@d(9r2_HOZ8US zXf%L^s#3kp+15P=6pq3TLJ0!akH4Fx=zX9#{V)t93nK*a0xYTv=9HNYb6pcD)}G8i z{b$RhdDNaKteZx7i+LBkEdu77|7MGBn%SPs$7~6&Ei+E2$9mmhJ)Or9Lei9}LNdyS zr+KxzJov^ZkYd!_nCTwspm&{;N*W7w(f5-XWti(dM+Swr(2NI-5@ekWY9X531?29-&6j35ev-nl zD9++T>k}{WR+@K&((MEZn|$v`8x(vj0ogpRW?*=A%%WXyFyu`VKhoo*aOkRNYAJ|l zRMKQ0U3VpS%{O`31JCCKGT{SoTsPMjx7KqQm@O2-~Z$DTzRZx?uDEZ!!Q?lF^r0AiF@k@ zuwfsGP9AK#Po&^1)`7>pD0Z)m2$2wX4Od7&2!Niyx=JAv4V1)xXti(@W^v>_n+5V< z;1LFj6`;9{DuO8@3R+vi-KctBis&>BN_#(z04O8CU0ev6HH-$2P@=^%S<-v*B9d!6 zM|-yR?qygkkTIRlB^Kj8jKbQ*3rwfeJtJUmeB6ya1K<)K_uu-y<-D@`32r_inVQmg z#iFxY8I(US&X)3kM<#w0Dm4LSF5P9YZu>tWu{ z2gr2NpphnL()bYu3TWTsSzYg?l}vUQ`K`TEp&BKS7D4Qwe}x1D=`V~P{ToI}D9?ua zxGf4ki4!2h1R$X`766UX{6a~mu~fB@lfoV?f2D<)fB-W{Q=Fy(X`&0`b6t3kb%#Iz@B zu`A>dvEC@l+G5Z;JHgsk%r|$(nEMKUe&MhA?20=`UkirphaCIsd_S z*EMvuR@kVYCJ>*@7?_XiS@<+$Bnx3wj?0Df>|3GEM@R2u0gSb9#?X7lu>Jh^h%B88aRR z12w`MRj5fjUURHaNK@>&>&Exy)s+$ADz~h7y`Cq<^Ly|O{-5^FCO2vzh{9jB+h!y{ zNUV|zO1CNsG_lM; zEYg?uq=nk0Vqaw&1p2C12bk!m`hC)wc)`S5zL&;_hkM?AyW`XPkrIW46WN1;806!b zQ7r#TvTd89Te&FCa;WVvNouX?ryU=XTfGF%Zjr86WdFlevm5s{kr@bmE(bDi0m zbpA_p)}Gwn&g7G34Ma8DJQSTXqSZ{Y7s|_5+`s?9)tg!Sv=bGGxHpxcwuLYCGqt}q zQkx?&vND-X>636wgM);e`kD_phnGMtzp2;`+ZP!_8v?j?m(RwP1P4B@-ZhJ=o~ z1SnDw1c7%H6ELj4XEY`~mm!LXoR}0C#sBG+&@o#gJmqk|T=?aqYP%5nu4?*vd zx`@jBbkBN74|(#v=_3OYLFtX(f421uUn9cW)`uPTJnSD%dnEg=Hr|5(0000g0@9&?uAMESw z`_Y**=bD*o;(Sq4kwZrzK>+{&=@Ns_gaBKvd}beD3(#FdP7+Z4^UVS5 z1I|W5Spop4i$i@fhlhP5yUOdk0{|F(|9-$Bmr_dr;I-(zw1k$A$=_#hXrQh-YpmFh z8v&Qs25w2D@8Xh>DfolDNUF#J!f7V@0T4=Q-mTyD-m`J%S9;euN=D_cpwJm<>4Q*u zGD-QcPk0*gk5?C|?l+mI6qmvdHJ7`%aJZDn4jW0g*`2x>JPzM{t*v?T)C*-}NO!Vk|&b?vX zY2i@8vYS7%<7wS-LfY~Lrt#6`Wd*=1V-W#845o$EuVuu57?ME5`1ZJ`Pzr&$n&(?n zX@&Ku^Ijb(l6KV);S6YPxRaPq2-zc3u(jdoNAg-%bjX}F5;ttWqJR5&FwuEa+|!-9 zv#HK^_RAKw_XG}%Yjp5HaaK0P*Um;lz6JH;R?E|M-_byOBgX$SavkxdE&e-$C=VER z7ls_I?VC?FIq|oh$2`BQgokB$5&1WGpB~5{#2du>yBkS!c5!67MZZiQfrcG>6d8+Y znb=dM(^YZ%@Z9#Z`&sW#az6fyI_aX`3y5x~80%hM4eVL%X6TmjHa&Z$cyP{I4k8)f z+bV;uBfY3F0nUQRa&~1?G1f3_L>}Zy<~y(BR-Rc;)+X>){s|@Ah$LPpyAJm?cJ&WlP)&pBH((Q0GITSO1@vl8kT5 zUa0@nng5?UaTD9={yz8ezHSx9{R}$8PEF1EGNM-FBH4u=b$cXWNV zTN@ToWtlKOP+WhGTUE#OXKNA;Ok-pI%kcwjoys?VeXScuIE`ah-{2A)yLcE2VXJY ziyDUbX=Kwti!M*e~GZ^R0^1K}&SY}9R-g-{}$dq{<_Lns?k7rf)WW`n%- zuq)|xmzyoc!<=!~v3l;2%2O3rz$Q6i)*_E-+}n+l-CVJIyvh5{5m`DwpwFGUofW_q zJFggoHvF_g=L33!dwVkLFtfV$81SxxwWy({x&r1MnuQ;VnT25>6Z*2!dCB&?%@DL7 zDkjl<#oj_;o|?pwOfIe%-F$YF;16O&2T^Ybnhj76leG5vE^^bES&ED45pHaWO;Iv@x#mIdFbMaRz4$pZs4utqRqP2K;O%ug z9bflP0%>~$7#{gjZ-U(-PJ>?AiqBIY)32ja#Z{MywrrkFF%_Mk@pwJuGONb+uL-{+=EWdo zXg;Z+Cjj0>#58-fJPnj=gKb_+ZyT3`tNcj+-9pKKxTGFlO$xrZaj{sPx!ucdMkt*b ztC7%|jFNx=qeW7|y<97oSh3!$qZZOoH0!dgTWpouirm+Qr_T|cv^Azz(tu_$BW~#U z%FJzx6XL0Xx-MLxG1Ni-BE|}L#4k>bT=mSqqZIlh|cE!1L7N& zosl`rA={VXS$*l#ke(l2Bw#B+aWlh&Vt^U@5tX{zxRp3RAr@_V)}pQN^g~UyvyJH8 z?WK0`^=oZNd%Ht!u*@c0wj*l_u1fXs0@h+u!zkw*_SGDi^1=g+;Qf839C%ehUn@=B_txM_7wC8YGdK6r{R_G4=PvM>@}>{s zmQRqJ!?m7r9JL8F zt1vx`<^spj^By-bCA zR&`hSnu?C&mLRI``e}NRP-mlSQ#YS>};0J<8V0EuImeJ?IIYHoC#|(efK8C<0nGKM|E?Z7}PrNMe;i>JO z=nG%qZNzJT=j)g3W9+VHj;K`3sj1RCaeV#sj8i(cBFA`B5)_P<+uFIP=Es*w;el~4 z_J0xIS>pdNrpTfEKelWk_&c$8H4g2Tmj47P+c)ApI+P`Tj5#O)RGRqXQmDFtLs`0|fUNS6L%6RSw|3rWpGae;%ul&50c%%v6L zWZB(m-rw%ql)%GCrN6<$kyEBbHud?9?F&q`G&{34_6rDE{@i*%}z|mfJ004E0N|K9(7`7Ni-1c09XyQca14SZgc;G9CI1`DPfp&jD?<#w=bm~aT{ZNOG zQqF0mQWPy{7{mak2s+*DAlK~nIBku8kbLRIRKqS=h%g1M78v%yt*;8UGIrERp{$%Hl?-t}=p${x9s`Zgy{da=itah01Hi zu5{hc4A5!?BnVGYkaSTIt4Isr4J>V=ang%7JwKZ6tS;jbIfYc^U~Y3Kn>OKb=GS#4 zs_!Ah%T1msS%f*Ui*X;0$HGrFfna(=E%+a$QCET=H#IXnxn1_Uz3rTFn=Q(jZ&Zi_ zFxD!sz(ZNQRBDU?+4y9oI>!#@#yWTqyO<-?!yUxIr$+4fWb%%OW(2>Kv^$k>3Gya- zgINcIF(`NJPhppF-Ov9RAc6RQNT7Ykbu>Z1T7SQsZGL;V;PUXBLS$(E#<9OFNJJt> zJQt@kFtmLR_3s5%!F-QI#$*zd6!>Db){QbZR;cRB>j)F!GDOOl%kV7wTQbK}45{ z1=J=7a3r$q)95$-j~fF1v*4`saptTlqp;+)xz&TX+?3O&Sk>*0+W8UzIi&8KFgj~% zzaySn)Zv(E5SJ`QIXqjl5ZKuLZ*or?1BpZ@d>>D_{6$2 z=Z`NLf!Iwi0YV4O!N6PLOR(=jd-qJuvG8_l-c>CEU?Wtt>*LFin(t<2VTrCO2He-n zC!0}FkD=M=wIFydA3jiUTQ1-Z@W4u5TlSZHziGVZ`5mAGr}f`1aP~U>FcuBtj{@Fe zDA41&Q_acVlFad^l}DicinI1xu-O>a8QOv^((`;y@L;Vh)Jh&{>R@$V z6CfW=>pBm~X}=UX`pGG%CkhoTKvQkb+Pb<8!btbe%m|zwFIM_T*|RwQr!$V$$KlmD zfNSOH>sj39Xm>#9=?nBdZ;q+b9~sgn#L&HyXZbz<<$D>M|K z;xX%rldjQHBw{C+qiv4*&!(Ec_yoPgmZ?&t(+a&JRtN4p|MGOnkqbtjV&Om$cge=M zHy82S%NK`-wpu`ac*S{ssde}fy)j_`v_6#64{%HC2hbOWu6ssed!tyYVtfaO$E-qB zH#GCS?<{$2lrTLDtJ3_vw``o8?=^8vTRZ};3UB`Ks{V9vSiamUr~>f=%)ae0{Idze z|JlT{d^AG#;d98V-Q(J2;jh3wCo)x0;2UA@v!6S2X)M73Dne#RLt)_|tnUg+oD~$$ zQu8Un1wN0U09oLbg726h#C|&80i~w^Z;u=PYu#3Ca)`72h^~lBWqz)+S$*on!7ts^wUQ*UU1{z*Pnh_uYq=nc3;QbNxi_f#*i7* zD;_5^Jbp7Z*u9gi}}P^Q&}s3HdI5UU_OxRnJ5y0N}V&*6IH1%O|24_D>Xfr)Syb zvKCbCfgvti72Db*%Borccsc!1OVIjWNup?k8Uhv)fTfSv$L0p-=R@+lCHowe+wUoe z!8nE|m#izht$P+hM{j@BoB(4Dod*Bq$3*`lGw-v9)~!tgN9s+l>Bd?o#mu@MGfTJ#vnn>4+P-B$J3MG8U@^Y=34jwTjwE{#kUr8c>Gy9HWY<890jrL^4;{;tq z?NembaXN($Pwc~iD)7>O!Z9vGSq~;(Oc%mI+CPWt0$C9OE`*Cvtna41{&v$7Ii)kd z_h&a*1l^&SEu#@lP?{ZY5+sMmCyNh1KbN6&O69wQc9e)2gD+Km5q$N-3D628ZJrYd zCmRI%Cd}PJrA347R0r)4oy{(|wOmAJmm+Pg+YLSDxjoMAbBjzEsiOpZOSm~iqeG9vu z+43h)_23iQaaJ*=uopqH*RbKd^5+PFKs7CL?Wf4M;N^+#ueO#cHRH(%(V-gMYefsE z8^5GP^_OE#_A3I1Fgpdl-HE**^KS`qEw2`UVn~d0F)pM2`8Mm1w;a{?kJQg!#ad!q zj9z~H_FO-8H;ijsaY6P_3QIzx$i5X{KvAlgyQZb{EZs=!aQ~m8>7f_0+j%?}awKU)~gcR-8z!hG(~PfG6QW z$-LL+v!AuitIs=4w4n(3_Uci;7uIcGnDQ&+eA=~AZ?vy05dL<5L=G8jHW#(|710n} zNYIV^2L44`p!l;FT&I@r?iSE!n{J9l9q~do561HEsKGW;hntG%ip&1QrukwKo7gw68(1I2(j@X? zBy=A9%CPJ5Dg$Wu85GYVx4j}$j(EK0gH`L4PjYI#PkFnq=we5X_C%KigTKb?#!56% zn~S=Huz}gZa7>>!nAm5ziWn$!Eqbzw&h}A#tV5|oG{u>x!U6Hu{;^B}sAs8DQt`r$ zoxesPv}bfJ1WS(4+Gx-=wB3+MUQvv5=!qE>CCKhHb3caM8YBl&+F~4w`O0f)nS!H$2wIJlJprl35g%R|5|B7 zABsAEyF>=I#s5pqPtv0tknC6~HDJG)LxlsaWradZp~Zq%WSoxW*C?gb#7e1-xJQ*G zXS9XVljV%bT`xu^&R-Sy5!g$}xPFl5%>rc^7KUe>uU9GkZ|zP=5xq7e>2i`>UW0>! z8)|(pY6F~v{92~HaZ+-fVXo8;4|v5tx5*=P(K5^T#2Vl@j2FDK zn5iw!HdO;@xJgBQ;B?AZru88mV_S!B^J6GK8dQseI3uh$)aa>0P<$L9D%s@p?q?Sb z66EDPNIQd)joLd}0V#bU_8MA{xBkj3;`LS3#G@KAWY*Ge#cO6Jht(bM${WFngjT6^ z6{N1+GqJuuZ9=QL>odN-@;)v*yRJF|WN&;AyLoiQ%AD-ymMBYP7~6KVls1#k{xF zzRBRIemN&4$bnu>h&ll67orlU5{+g5^yoF-r|4YzJ`wo6=fk%YWNyUHuUp>VsmY%O z0fdcqA+pV0XS$D@AnEH;_^s=fd!Wz(6&YP#J_RnAJ}k z%>BlBa4y8t$MjuICnxP!z6rsP)x}^Wy`uC{F4pibko4ZZ;!8FE}eG(@;8nnYIK=>AIA zsd7mS7dhVTU8_vn-(kJ=ACo%d9^@xay03_<9J!k#p)4d*`#SF%yC5{*3UFLGj#l_e<$Pz+VLB;wO+oXxac1f3mw+^L^3>P z%e6FW^_sp#0qU!)GE92rWm2-ZC6a2_i`O%{0|K^aSHr$&+l_WPyHS5z_PRvLUOV`* z7HR$o{9FD(8&)%{pz+SVM9uX^G`jVUyS_i!Gy9V?UT4W*n9+@irxwe|2ORNeQHB4` zvk#%PL~+2?!mDOGg2U^@#6s@_Xm?F)2CLA~Te9X=b{Y-~O`fkE`FaHXoC}p9#WD(mg11w5`H7g4Q}Jaxu~^eM?r}*aX5MN<3g8o40kOb;>ReZPPn6P zDfL`-jlmePE_J44IxOpBfgvMKTl4c>eqXokoPhdJ)IKF3Jq}&2>|!!8^!3h!IqjWDFY zfs$Ba*!ZhKG|$<)O!)9ZnjERWEJ~OY!_u;}^1~Z#&jT*o{yYU6Gk?5;Dfbaf0JoC{ zkNjZRqMG$8+r>%9;a|`=N^$BfnyQ~Vu@92ICEw6sj?}_K=iU-S@bl}B>7^3L@#E4G zM7G(3k?~)d47K%fLF{p={qCw`z3Kiq4)T~_Ef0^T4hBd)f!aX;xTFhmNOj3)@lwk3 zv-uM2U0srt3d1{(DHRT34`$XL9E|M)*S1`ExWjG?BixS(gj)^W4`a?d?Q6&z^}IAw`>9G#@G$s~(RuT2 zWLv#%->#7r4iK7icM%G+WvDGnKqTPF;RI^X0r*IvoT~d4@*Vuu3O`2V=_%e%%=of7IPP}j^lN*oa zU0AA3*K-c87pP+PLO~Dr>3#Qr-^=h)G0tDKDpFxks@pzUJsju`d|H{Sd3kB5JsV?R zSzH-}XE<_oJwCSz4cpx;Y%w4{2t-&FJuyfhR*3vCvMTrTIbv;Yp7m~>*Tk2dnZhDu3O{lfbuON6 zI30b{9kKHQ1&-=cE%ss-01x8YmiQG<59zxCC36=@h5Q{aPMmVl|pHTKeztPf$ZUslQP9H z&4n}jYc127eo8c^I?#0rFwz$yKL2NV%Xbl8eJ-Y4;49oPKmzd;Q-!1LSDM>{kV$w< zQS;K)R*I8C-ZaaXQI}4bSy1gf75N4{0dM<#4palUz1hOpGLgyP(;IblLu8RP-G8q2 zXdin%`1L_)0Xll^pAHXXQ1+ugA2tZz-c^I`vaJZz2<{?@f!s$k?GJNkA9UBeeh)}i zdRx16cX&^HiQ@C^g%h{P*bt(F&QID12e@X2Jf+xdsd^qTbu(S4jncTdlE?PT_bcUO zI>xK}zSA$`Oc^_^M!7ex2M`s-W7B9*P%dS^8Ae`nu{0ageP#{5{T+rY?Cq0Xp;up2)__rPfb$py$&&}*kL%V9U>p3g-~ASv34%+Jj1cw_1&8!= zph{x#BLTEyddEQqBsk?m<(SoAuW~!MWxS&Jgw3n|w-yDgB?t_}ZyQUD<*;UVg_Y1- zMnA08^Q&$K7qr5g#^PyGzU|K!HnXi6RYD5#Jn44&8V{JJh~>vaCeUQg>REnAy6%zF zL(4geKPakA@?74?yacOz#ikk!_;O8o^S-%1MAnz;Mwkeo4>vL;jhFrL= zvC<=gn}OD{NFG1MmTB|>eg3ocmFRRuy5B=MCAV%51-ED993!=-0g*Pu3@O5p&67|A z>!oU2?gE8|!o>UNmEpAL@P4UiEri+Nw=Uj3Ipl(tB`?Qxjz?iZtBxnA|1QV9BqP@v zmXvzK2ol@N^`A=~7oYMNotzKG!HD3kUD40`)SH_jAUIUBB;88y(aGZgM!8c3BBHR6 zO9Vd~xlfo6(>QuZ#^JA7IjfdP1+uxYwmXe3 zON}4ppX^PY8phvMqJcXrez7xxw0?oMf5dV^E>f81*nZx6=FT4s#CO~t@fcYBzNok$ z=&GnM=WVkw3tTto`b8@GE!Jn-ePYmtmpX5HB4hLn7W8&iPS);QCxsU=pH^$k0=DCP zbJmJUiEnRp6*?@ZE=S$7fwYOf<1R;2GSIN{7mZHgap5=Lsm*ZY z^Es8WbLwth3om39m(#1y{z$bL`)g|;juQ{+l3kReYi~m? zs;DVJzKxiTZoRS`hQK+T=}4-tZ>*-|X}P{IG76WmrsNAYW_?IXb0J%Ie`{7AopdCF zT24m%L0Pf?^prM;lP3_8Uyu+X=GD8u|#6)nR03!Hq@xCF1`*fe!kCa*M(1U(~OSl zn?kFt_%=G(5o_KY>chG!D=<4SKL~kPb+nBfW&5HwqK1Gyq{@MmQPO}d6;$EHU&>Ns zG$Nr6mNHrIj1}tGNb=g&3?A5B%7n=BiM558I>2lN^W$wo@L{#LoZwl>{_ZK_6)J); z&<1T)$FB0lGCKqJ$9zHl-LZS z$$JPQQe(**=H`OR=k$k}+qyepg`DF5u3l!%1p3u@VZ={<*w%95Y-~r#n1=-OlUusJ z&k0w?{zejwZ8faPcgA%|A84$*nRFZ(A!RTNW!rR4lzHEtfhQxmJ^eu{HFw^t>Q6tH zXhQ7sh$(RQr}IC6;i8|n!@RNe_DNw(+&5Ru?_jnGyAz!V@mn*eM=nzFA*3Z9S)!gQ2+jz*G-WMvq(q$XZGcG3DeIbDGJPvR7V?b_e^+b# zopk$3_%9?yQ5p2)Y$wE>ccR};E3)s zpp>Cu5fg9*lnW~O-%Y0LAl~thCAp=_K2`hmTWp2M5Oo<|uQ`U+yy}y z&lIv^&v;&jb|z380svqZzly$b6Hd$xU151(Jfyff;-Do$B=KIUX@i)X^~xQ0>cVuF zi`vz&Ja#xmT>~CGi;>h*I2LJ98oVc7Gk~2b2xsfIl#R+hr{u&-JA3#5&-dwVjQzny1(@?;j>>`5x zM@cstVZ`&tbY2|t2}b3y{RpB_L`31JapQLYgjTa!5fIymroEDOBYt zZB(m7oO7r^I9K-3JupMPac+{2SSD7#Pkg5==CkR!rmDp(#E8+tud$9hfJmyC9uf^7 zAFNDP$KP3zDLhpyt7aYhsiW;QZ}pz#R8ffhCJVr73&WxdAKBoO%k2KL9L#|e2Ax&s zcy%qbpS)PF3Y(&t2SPT3K%qrFq?b$WRnR$Pl)(;A*u^*TEs@t9l&3qv5MMY>P_jXs zuDDS&(gncpU?B4CM)EMICwP#WAa$QO2C##z3KGw$)Lo)G%Vmjvk~i6Ai%E|QuvXC( zLi)r!Q~FI^{R9rh;n( zmT^aqI<%D%*++63TSXbiaEK0X{a{Rzd2hW-Y!@_^7`Hn8DN9856!)TO=FX$~lxIt0^)+4Z!#7WV285BG8ORP%s3 zB-o}O`E(LnO2@#K@yIyv+!;Rw5Lq^cmke|h(1_x7lL#55BnKq|x5ySmCk9aA@U2Rr zKmCGsbvlef66)TRnBz%q3cZBIF2YYf>3-YlAqvb>*GgmX;)m6V9C8W!2et2ETN&p^)1sg^THuj#QkFg!9j*q1nFTTQ$)UO@PUH z-o^B<_cbBYn_G&U<~LLn;AYy<4RcThV4jAQ*y1l~33h>v8L|E}IsWi%$}tu`SDSif zkIiSkUAEkcb3L?l1?%0^nKg@xMX|HlgIS7`6V!l3*vYd0oord<#ChTQ*3juTi`>Co z?up&8ZDJf;7PU1-a?5qgG{!*s^C#egxG8;PgHAe$n!M z92AsLV>0|z`CunNjnN2{g1T}hsO^+dVWF5B7NoWLmPWC)2R!NuYtV8HA}tHDO9&i@ zgowTOs#JtJavRLbeI`uN75k$zQ@K*t4>cyKnbZ{P}L1O%rHWJvje%wLJJgM!Sc=DJIW zHI{JW2Wzi`@S$3_Ks}P*2mrKuXVHAs9qj-Ks1krrg|GByqVC%}Wv2`KpWO{HT3~ET z?lbqdBsiraL0LQs3L1eW%z~WnEZ{{hXT#I(#A)1rCou0W*c6~XWDQGMNz0pnwy93b zMQeOZou7ZDGw4#duSz1X{%~TokPBD2HgP(isGn(wD(1dY7z7+4hM%ib;VG4P`C%Rr z$gWm*ccWGZ{kdFyj&%}&oer^4Vt#*F;Y9SN;?$oly14^7p~{n_cnk-Z(`oAO0{

      `#<$O2-QqGQXb%%1O1B1ySgLKrl#o(K{Vxb&={_W zBg{yhR9$;L)iMPezO&r7<~P2NH8G=VLOK;zaYZwGeK!w5J!8cT=_K}4Hz%*X&f<{F zi$Vnw5_;GXAA&e0DTTng=~Kt!#zuy!_if>lA4GQD{$F$7g|yW_!ks*zS$ORu!nlg+ zJ~f{Gld4w>*DQt>;+XA%j<`Cwd-zQbpRX@SFXSVTG7#a&+IAjm=!#&fbS5iVB&1(L zymaqWKNq7?opiM8(pFr{Fs&xo(PcB&+%tszC`RKW4QX7;xeO~DBXw@0n`KILXXZM> z7#}Djx|rESCZIG3SD?iBU7=uH-ODFsrYAmP&D5_xVT2c(Cd5SJnuB1g!J7)h0waox zBhv)r?y%f}!mcsbb9=_(LC2DF_2^>zL#aP`>`6eSDHdkuzR#+`pobX5=4(Jq*WABB znRSAXw+%tlE^8bVEoYb-B&&VQabr|$45o^a5OH{{v&BN)9j7@;8mlPoD9sV7xad&k zGl`;PZ8`WmBO%w$+X4+_p!Na$2X;!1H|U|^IfjswkS8K^_<8?Snn}ay$V9%ws5r?{ zAKgrodBorOrd{W1`FEVj3~Q*9@Ddf?nHDuM2@Em7-@0GkJFy7&MtJ=c*8S$$i7#-J zTBmV$67KnykxqY@*RxMK%DU+5@K9e+e{NZgep7TQ73d~pl%pD#p3_{^7A0>>_h5GI z)2Ejup^Yt@S6)ba!@o18{CCEWAHDltCf{&)A0OqyX27~g&+a8!Q(vc+Gtu(MGg`G( zH#EpTM=2nW^;P#!9#N;X;rRmv7~MH6BLDa_UUVT8Zb`Ug7P59Abp*70{q0YJkuqd3 zx|`51gTZOJ@0JOz-QTR*=Ww?(J<=RXG1Htmnq)ci%z|R>-ny_(FG<4WhlsF%eqU+CKT= zfZlPq{QZHOm27zKgOpZB+Ijz;v-Wpnag|zbvEGyB)j99Z%iEQC726{qNnk}OdV}ox zN7$^0*keT3*dAdHz|k>o=S5=}jvsT9H=Mqcv+9sd!C}7BAK`2V&i^AFE^Rv z`vN=`@2qK#g-?l}R(RNCw76PYN{g);GyN*<226E&zulXJx!!g4w1J8EM6tzULVwq3^V7rkvb$noQgO=v;YfYz%{ z#-dx3yWKyT_Afa1nq(xXjP2iTG9HeS^>u=Dw)38NM8M8mTE6%jVD67pF4?94Gv{St z)|a_QbBo(J(1Jk`tTB}(3ma0pVxjRqJ!?f=TO7K4oe%IUpbU43h(p$@)p*hPF6z^+ zar2&9X&HRvL&$ z3YfBk)8`2`K}+yc=>*ZI>;zN`hi~pxH%Xc>hBpa{Rj}(m97cXfn>R^fOjG~vlty64 z;Di@I!i~j3e%gyLs3>qM&90qv9g`YGqHW)C>8ElU6W3>?R-;y4H?tolCMPqW`k-31* znNm<;V%(^8$bzSyGWv%HT&FL$7X|RHRK%3q>(B=)=2=;^G9pq(Hv0D7ZYAasDJS;S z2_6EFgM6id*-)_T%LMXTA?P{^Ve!$rJiI|+9*Vggsh=GKu4R`C?6lW4LisrXT1dwDH852EmNbZ82gF;;_2Bf()xWsd4G1JJ)%nUmfs z{iagY4o^FiL#I6M$>wr-C}`xhtzESyDD$z4tP(bY?t=0kA^5ZsxSjSoWn5Rg6YQtb z%<~7^HMR$p#f02CMC9O8_b6808ay0m<4t?A;Mf=uK`8NFM~d75iVuSk^JMZ`9%4M^ z&!#&sSY@+Qzx!s5RQFrdA?_b>a&BG6FNSbDY^pf}bc~ZJL|n6mjW%2(dh}}*pGE`3 z@nx{e#t+?rtWCNbroH=zeE2B84VBaOb1#H^XY?QP{-O$9H+C_rK7*Pj*oTXq3w>(d ze`MmU989uw;&jwY`=wWU#Ck+f?zYb@4Q;X;`m&_GWSN{*%-CO(ZYXysYxw+>8{Dz@ zySm%BI2xcN@FOkjoVKjg2-`r=^Du%2zTY}CIOIEoPawED z1+iiq^xmfRXJiQW9jfXaf&4JNT9&@cv%Xc>u~(3H6C#`vBn|uAcOq_D+!a`HsOIsB zQ~j!_y5!A{l5am^lWMMFh3@b#6o(ox~Cpk`1up~)$2p>giz4>>giN5h$QewDSD;sy2n!cZT9iPZFR1+ zK}Vdvm>4Qfilk?W*LdBt65#I=l`H^Fd2%LWQJ(;zNF+)2n#M_!`iy>@X#*RpET@f8 zceQbkVQT)jR1sM@xoE9Xr#l+catywJHN++o4#`zNjT%zqXcr}%LjZ9W9X*@}ioq%U zhFpW8OQL4=gbNFZN;<7LVq6#EVTx40#nfnJ2+A?>qO}tM#LP=Bld|Q?13p-;bR>Rr zKW5$pojpvEy$n@m4u0u;+3{VxDM9;;ebc-)Hw_PLkLDm@Nm z{VT0CM)f^I1TD)${moPKnt+6ai5>?*?Fdrd4BVbc)W;N1^`wVJljkV{AL4opUhI~V0S34%j8&XHmJGeNZbVe0#8&B zq058q`)AF~Rcx44n}uZ1r}Nqd&;mk$1x3Iy)xv|-*$9ukgAEu_6!XeqxR7SS=gXij zreaoyF0RkK*0tQT#&h$1=NMEV+9*n*V6v2j{Y9N(E*h!7!cTEA(8#Uw#g+X+y01RI zm?qshwa&gn3n6n&pxjNfafGk2Fp~PAKG`rDg9KIn>_zQ#IoGS{+f{ImC9ijmz5o#R z_9g3+b$BqW&P4-zou%0AfpgQbGbg%sL#g=8kH>?XJWW@droqc-!SM4dN~zjrAp%w) zyPqx7DUhkHQ??gX9uk@qRvD5nY2+0j@?UC(4wzC*B5Z5|s>GVcJ1g`v=j?kOIiOj(b8r7{bvIElk9IVy;L8;7j+6WY~>wzHZ+TT1S3!M^w8f z0#P+bHME695;naL<|ReE#tRF(z(1RFdJkuPV~TA|BL)0pj{YSxcfzyqqIyouJ`6^R zv}1=kq=gi;M>Xd}E@Le`iseJweMaWYwI7)3QmoIVoR9#+6^}QYITZe%S=J8V8H$X@ z=SruQCFk~GAStHlemG2dnR$HHB8dyejJ2rr*@(=y5w-ngFg-~>Zy>>Sj7Bt@nPz9* zAyv$vp!1z`f106FsBZ=z5*epabf<)mNfqjkLusy4mv%D>C_S{Ex#&bdL>0Z*#&SHt zI4jKk>M@QR|BC>Cn_klwAMZZ2oqg#A-E`ZC-ZmPU+|)L+L>WSocW39j@)tv1ezsol z48|m#1luJD|31bk{J!=1$c@FlNZpja8%@A(ibj=T`$4PY%rE4vFZdPTLUl0wZ~%Rn z41a2Qsz#-2T#pUC{Ozyt+LpXe%8>Ui_uy$#4veYO-}_8S*P=KVk}axIU* zbrnI=fw_9U){9K{JV1G1EDkKsNv7w*fH~(OIbp#Qi2a4p%9LAlEMHfcQsUY<9X6%y zdR053au++)8~ccEw)qoMLwLqTv;u#j9^PjzU(|Y1*ZI?ZxcOZQwwh>I8pV!J=I+L` z;MrVSPqjaBJeu_-jS~92Uu-!Urw0nr7`>oTFagGZTKr)6JhZd{Mk%(n_t*&41 zW-nMzj{=Z~f9?0J=q8}L{;d^B0pcGoz^!ooN%gdwwk}f~OxLR!^rulhMfYvuvfLXJfRDx(b z?6!sfGA-DiBFWEK_gW2*GD{1k^-mz6K^i{6M>}*(;C?{MTtF#~$Z$X}ZyBR1yW(5fs7NT5gxQGSZk-Ruy`bxI3Gh}Bx9OP! zI;is5ctIyrmz{@5WB@`Z}`BXvw{g5$J4GT&B>_dTqkvhdszt!~<;n7$uIZC7V5r$C zB*vN19$Yr9tZ?ESv^eGrHhe`tb$x_e0IY$)XyiE^?OMRkP$G?!Fcs#F@{jd1!w&E0 ziK-DBf<)qyEDf&cYEpLa$q{aBzUZEiq_mmyngdafTi2y&+>O~FjjK?nAb9>~Dd>zb z@N`o&RM&7`$qbdURof{p;zKK^wu0f7@30B8bTW+(8aC(X=H`xE5MbjtnogL)YpI*^ zk-+D~H&TPf)VIqz>!+U@I|fKv?`?JZ*)s5tGdj_>|1_!Q)_7a&$%AN7<`V=eQV zccT+{aLr$o4^|oW=eW z%T4gSZDs$S2RUoN5Vk`nZb4zv;m4ivg(%Gyne@h47aaqaC&*zOIojF1r@#OleICKp^8K6=?g|Lm_#G|#}vmABq z3&-8`B;3V2(77l)`)6cs;oZN52Vl$)e4xDB6qUrMS9f-{itvG@5L?-^DqWx`Gx=Mg zh@MBdKVQCd`7r)Hp$K;gWDW>qYwuwculba^-HKZ}Vap8(>{t}vU%XCc8W`;@pByX< zt74S97%)qg|24uN{}-i}D~^h=?XUb~kKh~O7vH414;v&{qCvz2 zW+cdK5N>n}Ok!RVmm!+&M{Yo~i#n{Q1m7s}kBE5lwLi2r%dEeK7m5*_G)4*gsA$|+ zz0Lh;$OeyYCT>RMcb);sI2e`Ttt_-PAw4M}M2fmv)pCB*%L$OgAJo>@7?;FKyMRUE zAT}gTVl22$VpR{@#69%8r`3@5ZVFy+OC`Q3{&U7kCrc4dWUUqi$a>*0;HCvi`!WK+ zQB)_-{eoR*N`Qlb*|(ec#$u^I0PJ-UW#%1#AMl5=f@*l?5Bz=zp}sb(m0HRBxZa9~P(ML=R=$vNP~ zPhC7YT;hvKymw<^vUc-(r<%lBaWitJ$+T0{>>C0fG2)YVQyPfiaqz;J7^c3T9qL$2 z8hpS9x4d(0=+j0B$}rY4!iWkt%K#TEYjihUoezY58qxuD4CZ%zi1<+6iyeXQbU66o zY(n}y%H`ZQ^b}!toIXMJX^F@h$RQ1;%;X zX~Y${OcW)bD5-H;Q@h57QS*-j7C9gyF0JV-oFWw6R0w!TiumO#%iydJ$mTSvs*MZU5O?Zzeg-BxFa<~rQbEg|OecF{#{+CYFr z@l@BI9vnTdb^yLQGOjp(UsH=E(WHWXly@vZ*;^JPnXvQ^s3@3BbK%Kp^Y#hzZeNd5 zwbvisii9}gg+*o-s^q!N{Q%iqG7l**_@G3m-}X{i8q%eUP1VFQQ?cH$^(8mvdh)D@ z1NxDNR(hpLe>C)G(nh+J6+c66A*a?HTY0x=GsKE0zU}`3*gz-0l(6S5$L6%>#{p~| z7--b!8>eOfG`dO1-IsCQhaQW$m6Hrvm&FeXReCWJ^8>@NIuNHU7NpW zB9HC?oc6b{{t!IR6|k<`8DNiLo1VP?6lEIIC|98p#i)x5W6K3#GC0U@VANoUMX?Ug zG%_3nXWouj3@WZ4$bjADoiIBRo;g>pwnNdHklkP$k!u41+;{_|o@@F3|3ajwd)L$*EuQ`s(7D`?i^Y7axzc?uxM zetXBPC#O2)6&9c)AD)Ac@$F%!{T&gIxMC;W>K6+0zR=jYfWyDC|)h}QNak>ump852yT`Nia4eciDbO&{v+OH9$I(Kk%Z0BCfh z$=#Q*?;js-b1S#CaO?Sk-n4OXlp8^lI?$P>=sYPo4BnYmW5b5abYut^27{rT?=Fog zuS;O4GUx?@^%XD^Fl)Y8#s)Qi9UeB$LzjXDMyUQunOBB{$N>0OgZ5RN#v`uwak19MG@>lI8s14zK8WUz*2cSBlHmwaPSU9XCm<2279pd7h(H7v8 zH^QcS02@WL0t7sXO&^LZ`79bcJ03KafKBTHphW4C@LMIZzs<2Uz}QP^`bJdeQ5COts zEuspsrLSgLTlnHZoNF+6tEKrvjD=JKo)Qh~0*XAy!0=qgONN<8gn*UAjsv#cqQ-~< zgzU_E`0`!hC%qJy?B)~$h2}Nj$uKMh@uPFh=sS;qh5?rH0UP~SsSTV)H;UYSjIaF89WdH{yOg?E0xpFJD#Q}L%=F@=goioi zVa{LPz0y$8a;|zt!Mbt2mVY6ADR5GVmfG2^^3WAIU|m4GPvAap)}@BX>om?!>ts3A z=N|bYBmWAF61O9cfXP1Olm7}fKCXD3n%74;yI*o){T6MHQUd@0@Q|1Q-SF30EfC@O zQf`#NmXyDM!7UAtFT5{__>FRi|82@&eGcv%<`FqC^uQ61gD*V^83-qYZjeJ|A~FI(f2Wh8p*wQ-WG-6clZ zia(8e8M^w*ejUb$csEXQux&tPZ0H%wnK42fuqg~3(C=TuS6_W^0PT3-M*k&h20)`5 zMeY}D&#Pa38em71P$r}dsk9t}_pDGW2*#Bj9+Vxbt$cM^l_BBG6fSXR0#x|FfGI1g!~@VkbPNkO%Qn8@&+uJsuFI(8Pz%$j1!bf%S@4vq@d_Fs zm62ETP%2}YI#jBbztU=KB=)1mmf38>qeF%#VDo_C`14V5X&>RVz_ExpTzp4wn&LCl zqQGJaR8`9Bl}`@(`!ZSx=yEodSDvPf1@NqStpP9t7{(u@Mz6kfQFV!sA{7?TV-cX5 z8;cXo9q1N;lYS4Ft`597tps`KB??n}^1(eVkzSS81XCsmEbSMD}}5wfyk$JsBG0G9z%OasC#`UaK~2y zK8ZSvA^Jk%U2Ttd3hfUf(zhwSsnK9A{igq+7bxW_P= zPIy%?0M;3$hD5>$s3HNbKA^!-H-DxSzc1l|oIERUuus(x749?yfoe?fyH!R* zsZDa`=Tw2d=V9?(Enj)xD%&|-P{5qei-p6oOB&%e`^{_^H`Dm*3kIxoz_t;vZ3N#s zf^X~K+Y@|SLf(?#Tf2C^wS#X-@Esknr302n@Wl?kWU%=Jj680k)NjRmnCH$@e}Z55 z2M=-gqujkZV53o^|D1|mY1HT&CI9j--y!e(yT7;b;(ZJl1yTs8^_hPmrA#l~QXDd4 z7(8Twf>ZH2D&?wo^Z)^ZgOoMXA_IN35DY3C6=2Altd)BOK&sC4rTQ$RqK*m_9#sy? zclQ+6_a6B~*d6}=yf`Q7u_TW%@(pYAMZBUnanW4?JD++A9`Jw%;0GW5D7f{oybeo} z6?hvXJ^!I;>}rJu#MwY`h)_hs%^bG>LiiVd7&gCU08xd=k!SspG6rgc5mg<|v81Z2 z^#XdYq@@atg?bFtXY^(FHVK}{U+X#MOihRxi_yudoSFOX>C$T0X zCFC62E|VF&WB-o<>kR00`H#a!9WV#vl@Zb?!RHNWJ^^zb(ozDJN5Fi>bP3au9rNXU zw>Q7OU!Hr{T;9G13!Z@mtO9^9_yRCBvsHIrHM5DC?m=$!oldj*rctA>liYpmpFZs& z7)}4$;K$E+Txmq0R4A0Ir3>gX?F^D&@D7!vC|?W!V;GJSt^uGZXyvaB2N@(({7zm_ zgBQ!F*b6YAQ&o%gOGb%rQ07uf8X=a`NjZ3s+T+l2I((7ZN3)%gt!Rz z726KLJpAnp!`ga>m;Bkw@XA-b3fJx2h4E+}ODo&MBR3gV@yFeuo z>c{YNKmSa8*LR%`V1pMB1(44ONA)}Tk!;Aj))nY^24J=b`{IuS>tBjn1qHBdR{`K6 zTNwcAGu2OUmNBLi_rUR$9q265xextsiauy;ViVBIFyMl}#E5~?8LG1h)PAlLSRNr? za1i+eyOFP1hb<-89Q!eOIgPjoj`gX(OL?-UI;I2p904|7k2DZqnbYE)QhicReJImkV-I12G2Zj2+`nJY0oTbFB06A@&Eqc z8F>ElUyQl=MJy~XVKV7q04yc+9-b%48UQxOqfw)A2lT-H1H15$huj}8Ipa@o;vJ3# zunw~kIg7M9@CRNQD@BI2k;7VyfW3YpaL!|Z@%GBwmV8lp@|3Cijjtuw;d9*?dPbsL zX8OfdM>U00#)kTWhDFVLB%H0r9lmvpe8DR6yRHG&GHg+i7%#R$h#_uk3|S91Edsfu z*VVtSdXmMtNN^+$$Kkw&Xp<)Z=;3{o$>dzoX~1agnA#LwUhCWsx#x+yXG{!^1e?0s zLCcu?eqk9o_W|~nqAZJY%@V~H zMn$&RMUbolq6}nn?BBl!fAP{6 z6y+=@Ci(4P@IKmJFGvI$F{VjJg9! zW}p?3<*tutK+3RQmp;kBP3&jRP=HZ`E{qFD2Krd8>Akt9G)c?8ifKBO*87dT+PNL_ zemYvd7RTTJz1{J*f7kfu{@-;zzik!39y8l$QG#1G4I`;hqpy>4&Rg;MJ3j-S|Cc2{ zVzYvae^NpM`)Uy&q=cy`4OHS%$nv_YN=2K~!UkY207)Yv_x!GUDx-nLM43uc*GYw6 zKP%G;@(>ZcYD=Mk?eu7OcKA`x1a9}t2&Hch-+L(H0DRE+5nq*FEzej!6xudS^9cX; z@1MfsAO90r*>X$(@(?TtQK>w7vW^UM@btlO7A+Z4GUPs&=Lre>_wT|pp7B)t(I5Rj z(C;U(M=56Vs>ze07p3AE#*2*logYTJ=$Wv&bE z7AdlCOc}_8M}I-*SXIq{`c;J`Mao!*ei9bOht_Gp!yrgpn-jbm+}s_hPmTlqe%qh+ z_p9A;r=B%E@y@TF`0FU;g@oT^h>9o63O4!(9RaNi3v!FObhwg%6@#`-GmfB$>n zAK&>_px-kXD&W>Z3vCAWAs&;JF+$*tw30Q3`UQfhrXiLR@)aAHzVS+65lG44jJXfXH`$KN{IVhS zIwK-f8s8Q>iN1Bov(Tnp9Tv}k;62{u zxX+}o|TQAFXw}rn~y_30LLE{L-tsANjQp%+K2u09KnJ zaPz0l0jfrgz9zZ*V#ewNF`io*)&qrd07CJ`&%O!;gMjYo`bx5dWNWWpij7Hua#&8J zk^98E0U)=QnpOWwA$ku!%b_6!h^W^!ZTd+_hnc1@YVZ_4o7#yCO!vcX`|~hgqsLAF zBp>0yNByyE48>zFRg1kDa`YJEgCG7le&(lt0b92o0VE(hy|xrb@n+AkPIJQb6hnYz z7#DSo0}s(8dVL7MvXt=ov(CdW{?fBx-7@Ewhc*adlxJvP)L`(~q!S2!avU3`p!S<( z4s@!123b4?cb+-508Kl@`-s>mauRhZY89f@$`ONSgSlDC{i1K{Zr5$S{9dEC|JLv2 z-+08EeBW39o4X(1&Lz0{Q!@Y>eS>uVR-5d5qGjJYfM2bYYsD*o=6fSJT4>oa*C#>i%CMkYs!Jb&sK|hs3ck%?&swn2yEpbKr&w7+#c?9tiWpFCh(hh;p z7>*8Dc@SV7%u?W&=4Q)5J#{{j{O3p);**I0^nH&jzq%VweBw`IW&4q#>{-8iY&V0> z{V$>1P~L6?Vg&y=(_`1PMP)mA&d50o3CUzUzkoNs@gMNs_k9#d^A+Di8~`2wR6vN{ zY>11u3t9)vp8_AR#Qg|}ll@Bg+8NDp-W4G5cXo#dP`N_$US1Trv7^`@8k06_>^b`u z)p$|2Bkp_1(}c+%UIIU`0gMRPl#w}*EYY3TNQndnP0-Kwt~-AM0Nlw77gScMig8ee zVdh#BeJ_0qwkrxKTS>d&cj&1yusotdD8IiUYM}H$7%VYnW9$Oae-XWKq)`M042G04 z;NIDh`KWI4v3pK`>3%PmUi_ICxv$@;838wMY6d`~ubbT6?ChUdwDJ7OfX@NC%beZ< zQYhG5otG}fBP9-oTp>NJDFiL7liR}boSL;LSpmMZaAB?j0oIfFSAbCBqB2BSA5d)< zR6A;L7nm?@Ms+>_8{!~X@!8gg2f&sySAx+YDpD)leo)4y=S+`bp_Y4(G+M!vp7b=# z&F>&sMw=palq(4Up{(WUhsa`XR|*~ouy?Q>^zoecs6L<(2LQQ;$-pZyb*7a8q3>29smaKw$^@f3 zh9R;r2KuWuF!_^9V9Uc;P*Da)X180_Zxt6&9iuP$PXS*bqA0vuO2%+_;W1?ZPN~ET zN0?%fH%@!B_}SHR@i4a{znY~e0V^%{-xMbnV4T`sD0o}VUpcVjEiHvFV zz7W$Iy&V8Z<3VAY14$k!%W(|Hyv_gtn2uhS6u*>T4a7hN3iZwfkF?JBruL|8{S&c{ zd!C+f;&4NiZH`W6f6f%y;LC%f?2RHDNKm7~9Mg#O4+r;W3CvO@w{$n)30hmvb zR~`nR9vEb3G!m3vg_W&+>_3e!}As{4+)3u{)HjiV) z%z>Pdopov4^RKhMh!E)&FM)E71HPACoHa%%llT@DN7N|VXNlK7YmETwHH08Wxi{N! z)%J}SKKl_^Mw<$_8IyixjT-%@OA#Rz3YR9KtWp>C#)kourfyf z;oayzz8hGq_Vt6nm@tg%lqgG$7q&EU7l3niNo{Z_CQ=@#X*yS-kn=Rda_VL98Rr3n ze4}rMa^g$@jxe={S;Gd3_sSFA{9qs?#59q3Q!~{SQ55-CK10;0-?e3=-Y|8*uIzS? z-@5)H>+CPgY;Tm%=;lO~x!kDHe?pi1>WYuX4}njY1`SN*D-y7{l(Q6`lr%qsnnkZs zDPsmZXP;U8^IRDW;36d!(of?UVr}DMgdl)ayr^CQmPdK?PT?Mh2?0@#Km(X<2f)8o zXc;JL3vBCmA^8y6kK|JSgX~P+s0E+l!SlM^A_51H@Tyn67JK)t!7)Wj#LbVCrGvZ}5m7QOV}o@|C}j*KMp!V6O?8hOuw{(( zf4L6*$M?V%493j?5l)Y>t8jRTkLM`}I4#2JmIq)@#Y5){lkb$oz{Ovo^kN%ePfv*;U>0Q+FPDY~J>aUKfq!|D zs0;(u16?j8ux8%Eca_!>fC=*Gn6ge_fV@zxgTJo7`W)V#dmJJ(c$*2?M|k7e~Vy2<`|G^$c3YxGv5yjchyt5&qx5$ zLPA;sF3%b7J2T^rZ_W6l_pMAuC!cm{J0$4lOU(di^mWnRz1ZTDy^k|n*cw2K%BvR8 zQ~Oa#l+Q+>1%V)I-WJl79El$Pl)sc&DR{@syki-{hT(7+=asMpl#Sk>_=(5VlH`HU z0J>QM3g*wCfrEi(x_-&ZFPeKf})@9)%p^Bxo907Go}w zNBg5ZlyfzrV+8&sCC33vcGfivju4Y})6iIR86%E}9taJ5s80(mWB5jN!Fz{|09(x1 zpMZZmKjT$z>G6O6yvN`Cwd4G=dR%;^`xDQ2#jeHWZT|pZKTB?OGoxkzH2S(|>(-si z=yyIk=jlpOtn$!6u=PqiB3^}pu@XKm%Fy&5DP?L$fne>ehxQs2e)-OYgk*u5EC8W| zI^~%WB%EQ;lBf3EJoprzWF-_oJJ=y;g6Kx$53bGE{@k_m#@BD+wt z{O%E|eZw2xg3*}XwvuX&o^3FSxmMPow-~jB@Z!HILck8>9Nu?$vQb{lClkCY&yT(* zrjrRK(+%w0y{`iGh>(OhITtQD6P1SP7-kvo7bWEo(yziCQ&uUT^cP2QZkA?+)VJRd|?-)32 zGRlsN=o5{}_)qC2?n+f4BhD0#{rAScFs(hXVN6Bt6hE~b&&&A}EXrZAE>>qBxyCa; zXT*54I5s$rGmhMz09!F!Gj+WCQ-&A6%JGudWqjgO8S95Kwl4rHiy5mMj{80Dd8>DR z{EvTPJhn^Cj0Bwa0VB9iiI(bhklceYi$`LN8Y=s5| z1Z+6^w`f?Ut+JFP%yhs z15sCP^3s+euLD3vN>R5A z0f!?K6cl?7&t9?+w}ZEyQVJ!{b}ND)LnpiH;YJZ&wP(gdd0hU8$7T<FwvqpvZ1OxAdmS&hZ;`?_c3Jym7ATmtY<6X~+@o(Knqg zHHr>MmXICDIid*AFs#I;H6#uiRvgC33HaS`VW6q8M#GP54w4zVIYZi-an)+ZzkCLG z@yjw^`6l3kFHNyL=Qv`~F<;&OohJ#md)T9ZY6d`~uZKoh zJ^yyrb#t|c1UR=^@pGj}q~t&)3Q#*$KobBX#mCPE0(qjxCaqSLiQ1D3wHo>O4m>~x z7`#1|6h94R^K!=92TspPDv7>Xulaf~U;*7%a%R-lKGivM6m` z7LC6x2^)WL8Pe(`)&i7F0}D0p*|>+_xuhQ9EvFUWiwsnH*abNK%@VZ_5jQ9y$^SrUoNf$5N|5Fb~aGg7YLf zupI@2hGUw&^6H0V&hmZ=ZxGc?{j$BB9}=n|!S-F+FrXjf{DakAB=n`Gru~EDaHeaC;*hY7`OG|Lk^#YtZY7GW0djX^MEs6m+|MX zcYNu*jQNpc+d@W1gCm*6y;X>5gPeh69maRP|K#cK|F_SZrRM_pWLx}q^QUG2H2P0z zn;%;8)hizX_)-BBr*bLENSd0T6)6Zeb5M9rkIm~vTA=c!!c#HEGK~sTnoEEHMiksQ zL1`5qs;@E*3L+_wyho)KD=b$JjQl|$BE`&St}+o33EL9$sq~Ia_JyV`Dg~}>e?xgf zoOl+iuzPf)E({0@zT^1b;86$FgnZVLltW9Xem8i%dvI}J3}9=tn{`!J=3@fI~04XDfw zC6bBy$+f6(lweyNXJ27>%|8Ht^lHcFK0C$8fg_fp-Om10mk!fehCBk`3F&SRo;>6I zA3QVn{%kY*SW0P~O>J~Dre**%`p;?4+s9^pyg9~2yPK4a0JLbC>b&(qAr0@Sr~?&> zcRUya1ZUwJsKMMBdS^MMzF2S-BUymsyj+OLD-Bivge(BVeFa)ePFhEjB7!A@1uz(wv82ub&#;_gC&yyK0R!Ik3CAD4!tpO3>TzhltK;4~OLvpX!VHSRYOmhSz)=`-K|zR#!m(X+?n@n_6zV_>$?&6%13(CBND zyW7TPf4YFV`T2sD)f$ z!FVLW1!mP^FY!WtOITFx(2>N!aS^F3P6XD+}qhVW~<$WWbxry~2xAOyi4CEB8T zhf0}tONWhDUW#sYoxsnKyXMP101fnROZf<1jep^WZVC90k7sOI(GYX=wBaUG;Es0; zc^T!K$^uCiXc57QCj@v8!z_LRA*0A&O~0s#rL5qQW?2}Q97Y<(aQ0x-XXk1t#f zyz)&MfA(6(MHgnQjDfik(DyNBQVLNB=q1)9+m*LZPS=2AzwZYpzwn-a{d{u!6|?c@ zTG;=VMa=+c^fk%d=Q6mMvV{5hIZVsGek}@1FvL-`0O$QZc&a}GK!UcYMF_Yf5W}6(f%qI} z3`Ce8#pjLoSt3BiR5l!jKCk1Lqi+*Y2%%jOC>Nhahp}Q^g!|na$Qx0&0by)ZS7AH*3+#Ul*XVo6fm1tK`J;_q#L2Q~ zoB(0WghdjslZ7E`JPSqdlbwT?N*Tn}uTrn5w&5v_yt$!12Vj;ko}0sDGDX+LRyOlE;VrN(w(x~W zqx{&`rvN{@Dgi+3639BL*4RJHt8(0-nRS5Chdv&{y(iE_(Nd!4{RM_`i3iEJ2ybCN_7#* zh-;6dKCSSNzU=#43@m8TTW7fB5@5>``Lk%#`nqFj!SL80Fyz(fQ%_;+#PE;)RwO`8 z(+~;cBA%5)f!Ghw5aaN68Wvu}W3W7&-Wa#~0lo#;ZHBjhFyRkh=J@>Q9ZTc*mp!5u zfR`O3rXfMul*OQAEg3L{VedZVhrReEyC3^UfA#^uo@r(+?0*ZTW&kw$n&iH7$+7E! z?jGm=YyMgq1B0>}J_vNFB&Dfb-guRtN~YZKwz-_Bgc^u|TOKg2$~VR@p;h3TCQz9c zJQR;n<>;T1u}*ZHo~Ul9EBt{PSzyTeJA+NGfOm{g5FnCq6*~|hj<{l1^VfqYBb7>!0)Ti?Jv?s?Cs7hwAaaEtu>sK4qDLu^Hy9*9-?s8+YvU>waGA~-A;@Q4m6 z3Kf&@d`Etk#+bf)C;TgGVK?L=>7kfnD{>sE|5MEECq_-2izLk)9UOZP0S68OYwN(u z67awWCVcP13~3|I|5rP7YGpFOQk?jwsDo7j22GWq3i(@#MVpB`PU=e#%TI{QWjr}j zj-SzJTgDZK9Itt^<1b(5xZ?62$E-L;BS*3rao}A;>Yt9~r>wKt`l(K)8C8n@+mfRWm)BYQQwtk z0+N!pqVk-|T=7RKf6i%3IR~X#uTFIWOr-i)9(;&4B&Kmtt6b04%Cx_?d=4gpiq^&*T5%SJxREjk#!k*LAr4 z?T^4mKk^BegYn4919*H zV+7oBpdlXBg^Xm2QJmR;zBi0-bL!;3z4>p?JN7R3ctJ|(LuPiZl|8tPZi%E{ZKFnq zCA<3f%xyepPB%cxs8-5F@nQg0m+q&cRd~K+Q$ZMj2Nobud+5%B+yktQE51u!h0+bk zDc%{irC|V5?*|VY2v-Swk7_N0yxF1=#f!k7e3qhQn6Pd*Fu9gSL8Ne1Q)yO%!{o7g z26#t+JanBE;O6Me@qh!K!pDlGLP+g!9$`^po?pYQNSiey^16R z*q6m{Y-gN67mMarR}bMwe)w^K_i_ILTk0U7XnYhAI;`gbN*?{`NWh`bRrBNZp;CD` znNf0A|EU|mJ}wYM!*A4~zkD722d)7Y;%opJS#g;T;>1RpIqFa6vyk0k7T+=Yl{XxD zV(8Zm`5=Ie0RK26K;?0vE8^;94N3irp9t4`lsZ(AM}7{O(mLa5i9n1O2Vjo0?D*W} zjz4`R@Ya9Im`pO3=PWL@Gz3ph&M3m{+yP-gS1q{+ag!(7!jmbm_3jT`d-kV4{n^`{ ze(z_cl>X7ou4&+Z%co`lG`c}@ck{hpU9vQeL*r+T?WHoCQNj%2XB{*SY9MMIr(qEP z8OTDBmFLQbO&ZX^kUX_16=0zx(C7C+-NEYzHK2j#&tvu-s1ajBH+ioj2Ic1>ql4u^ zG1*Ye@G)$<3(yt20HD?L7V?PP%*&>mab>s`%30!kdygObp~oQmno0vKKwM#ed8ox0 zh=M{)o{{^$h*jR8(JPOwZW);diF1o#;e++%zDG(4sY}?{IDn@--rHe(5+HKky z4H2R&#_yi zGsEtK@H_qF)A#)B2mkHEX>sM506vjYI%s8YX`@>*H3Oj0*P=1zw%!iiXcQW6^P)d# zv+A$*(@T5B3qI4WZ&G-gfR$lTXhwbq^+}@#X@g^jI zfL^~0mItNhJ4=*>G%O7QcOXsR-3ZwCZ^LPUnnzY(oeEaf2kwzKdWBZ;l#=1z_c|Rb zTUO9@aS)OL=o$Wn$9jU`j%9D?D5fxBu0r8o)20rq8 zABLlj-ij2lh#{`eb_G7D#)u}w7D7fiat~}=O0Z|z(r@Y`4CA91f>pm+3ink4afdID zF@5D_=(a_qD9hkVvf;>Il6;4#R=kn5P>%r=Bc@DMIEDp+<=>!DWf#UFOwsR_V$#1X z+RPzSl-2(%#Te)^hWd@;20%COupJqnywLH&zv%Iie+QOF87uSAzNB(B?12~)IW{?H zy<L2&gmtX!PfA-2ZBul>vpw0K+%BUFtjlLEwTHb$O zxGxr^3~Gy7@d-=~1VcVA3aCDswOR-W410|9jE{>}DjzhTA7Npa7K09waWW9zEZhJa zvnVo>10>=r!^JRhCFd= zoo5G97<^t1#jMT*NYT$leu@gHKRnu1&M8<1K7M|O7yp^z!~gDB8Ub@7NA8EdR8lqB zY&h#G)}=CCAN4uA%Gn&}4w3!iBl`dT-uHg#-cR}Y-!rop0Jxyt>UZm-W&kw$TC|v_ z`yL3S#ZZ5wqKNrS$}?Vas(`>==b732PXj@ZGQlFWAOBUxf~O%rL9c**@iwEr0oVed zWos0VZj*Ofyh{O1X%_*cWF{y%!ARR6on;Y_%ogB#-Us(l38%+mx+*QSPhN}hKv1c@ zaHUN!^mxv*o{5xtq^^T=6*miIJ9+AyymoHEi)uVh2`s<_Mh_yr&H#weG=a$~BaR~J z-SN1ThsIhdp8WtY zEr68{lXqMV9NLJBd)W4Pt3I$e+PF5J5cd!`Pb(~T3;QWC(yjJ+32w0*t!t=QU|D~eg~_E_JsjNK8nEutqxbY(JzKfN0)ovZCGeoTHbLRARON3D6<$pD8|Ua zeLHc+pZ-4}uTkDSNJjJgPK3`2_s8PG5T%SBphpMW_fG={r79U(82X{eTii0S_W*pPbdey!?&OaP^CGsQp^;!Y=GBcMcR{s4S%z8(5|EvUAgIlJn1>kz({zK! zNqnATl|KNaQN(%%qTE^t%fKlU!VkPf=8gb z3nIS9&<(>lrP$(`I$)9$j=0Z*HlFjzPknCtDW^Oez=r_rYxDiLUTOwFqZ=e&`)5Np zUg1RL@Isz+s1s?!3dJggEkJ-Y57Rjd%1)z!tMr}UjrCC>4h!=L00J_BGYoMNyV9sW ztLBfH6v3x!QKRYt=;En8h`&h@0_H7grHtvN@`ggQ3>z%~JKq)c6mOLLa6i7}q9E{0 zxlni;oIg&;nBr%i@>6)g{qKqCWCK1O4l05v{2ua&#eo65*}49~5Jrd#B|_GQXs19t zj0>RSakUu+&xX}Q`*6k?FT@Ea+y-VH(1%>Yk0zfS1B0O>?;AXuAj6WOJNTKh62Gh) zDMp!qkOJ2Dajz%Go<8fuonsnG5!bhb+VJ(9}q^9wLXK6;kAX&5^bP=UtWXl2=Xfz7O@7?;LX@ z$E43Xtr$s%SaX=h=8rhBaWGIcIvl<8pu-e%{h6~S&H%=NRru|H^d}Df?E60Qv2MKd z%rVBFNGYv0@V|9aGXNUhAgy2i4;|1YQ#{o{g$#OT)IjboSz!`kU5OgUXViz7M=phF;1U?7*NXA4MS^abakNUoc;b~9*X(YtKI>Bc|HHzuM zZGu3o#c;%U&~yXf@Z15{z8OBh%qRlKK8+>H@yFSss%R|QA=Wjt`)8YM4&0a)S%Kc;&X z#AozN@(f!6F5H#y(!T=U{k|R}bIf%>=C;jbyrhTCAJG=-6?pUEmTZ75kWHjT^ZaZ7`zzn@F1P7(%9e? zX=s5&idFvdlMLlP^$4BIEupe^0$nB$*6&kCO~z-X9!*?s;w5!);)&6%Nd$nINCNW- zT#&f$TuNKOk71&h05C%(zh2bkJ6E-bw)XYw(BJ(mbfdXA4E zsx<)d*Ad9!NI3Hgm*5c(e-yTCKL*eiLudZzzqqc~bCFx@Gyq@`@*Z#^!u4uR7#8ul z_l)Uuio4(SM10`=?*j7vFuI6Ba@+&V)esSVvC{FA33EiAEZnn$m|Q;`^g zdKm}m&+PE+V@zLl1$^&%RB5r;)IG+4WsCIy>PP4HIkM=8SWJ%$%dxFb{D-V97Uj+K zaY$+CmFhp9Bg{YQit!NLsS1Z^h@v%?0b2sDxX$s9?=$S&@7OXI>12DR6kGM`;ag_X z4l_&*Lolrdd-q|}h4p}Uz}jjz{oz-??#rkBx1ap$iFI#U04{Cw{ogs%A^?qUh&uSn z(T))>d*2LvwPy{2sSfFpQ%7a41A3fF6aok>@RB-ZUKt6-&t`*RQM_Cl3vQtu(}+ey zr5&aGQ2o`HdddM9ymBo@1nYHF_14eWmJ)SfyUK2d9yYgv?&>oDn`avs@GYMspP7J% zd%Vkv{*Yl+Iz!Hmdz^j(-to3KVfU`9!lTXNQ~6^a8Hh!OnVz~<$CvH%P&)#dT-^po z_KeB;I_`U~yWj)w{YSX3#x4fLYW2t(GFKQKsQO(Zajty#xa7#MeRC{iG+yYV#znRK z;$@9Nd8u%|1DH$jf87PYE^ZUFBwHbj#;7jlxh?V19{nZX#`FFyGkqlrScLU+#&BR0 z*@zSVq6gJZ*KPzDBOiRFkiYtlYhC)@VGE9Hd&ghD196>SOAd*<9R zhDd@T@@B?ErS*(|RlnLJ)Ce`oxqPxFZE0*z>Y_dZWjqt_%!|ash*bUB`|RaotXW_VF7!OL1?# zR=}$;b9AYLrEa)qAOwf~`*!20Kl23q^Sj>y*c#8pkG}U(HoHJZO+7ZE0daVcML$?t zfn9k9e7p$Dsq*yMPX*N|L-GjcB1=ScC0{qe^dq~0c`mE#19&x@k_~o9$affb4)&2} z78!H**%2ox$`H#@o{nCI!taUlGlVQkx5X5W_fc_)hH#c6{}dCn`<1q@(t*v49*WR^H;Q4IEc$;vC$~G^=fJZ*{;7}L z?miEChK=l_X12SX?Dw5V%>Zb0Lo{!e?+W;Q0Uqgf0kRY~q`0NX>tSWX!Yz2DNvMWi z=0BDJf?p?q!eA66zAxY)pj4TNo9R+~Dw?wJ$nV7{sN$+68o>024FE^&CxD^5TaoVWPC*0&DT$#wm9C+?qy24glySq~wq~qcDe?IrC@B2OH z%sywWv)9F$23h^5wjOJUspsm^%QqS@t$wqJt-d66UwXaou!$cP>W=287lJd#coq25 z6FPDckL5L8zW4Y*zuLCbza%;~+&*r9@i6+INGZgUwm^Q7BMi>FQ#ARMAoU}8k+HQv zGWdP*Wg1WA*Vx31;Kkpod7xG0Ow&xv9$}_RLPQ7iRys|}tRZF4-OWaZZ;pSJDtD9H zW8c+e`^R?k-}w-m?a!-!Xy|n0(G;}W5LPR|VVBPqyNPM7i7IQNiLFc##1-?nh*05= zO`#h*WDl1~^Dvv<(fr{C(!uQ~Y*_&hlS7 zU98U$4OAQA9s=w9D{G1yl$!fN`54j&%Czp)gr>9u_!^QzK2FvUjIePmvG{3It1Z7nd+cis! z*4v2Lcs^QFl5cb36`7`AnfU36H12Tb?MatQzRbe8~)@7bX7mTN>$m4>1|=ZkYFjxHE=rrhzYAsF`+8hqN)R3rnOjtWOAwrm;^L z)Iw9g$H*FaS{lLe@9=?Pn%YFdyL!npG@3&D=bi z7kSHmP?}8`Gul&KvF&z@@vZ-#{KgJ;T6ww7auM;T0j-yjyF$@xCw4`vM=|b}=HN#% zij%qJBAn$X%;#{L)xcny6We}~V_JNlqzJ!!3T{zLpkGm6KXcp;H|))44>#v8zkHbE z5dEj`jVLLn-7y1r8foK%lu5niq!0boQRoAz&Ov#=Z%XDMMS&{kA<%T56>2~CBl|lk zfYMne?0|Ax_z#-45XP=LNcI?rMg5o3KoE!5K$snuiKzECW`1O?Q(9Dq9cEKj7exHF z;`YiyJa9%D;O2EbTZ@8V*F1S*7Atqq_dC*94_1B$cORbV@;6%_W(S?VXvt?` zFr!roOLmEV!Ye{K0%xJ?zULu7q+XNjdY3N{uWKTwq;2ePQcACVigyuS_`!GgHIe79 zt6R(7rLD*_3(Pf5g$8C)`6|Gxjou-=+zvvfCadVNRCby|K<~IP02Mr-4iY#K6kCK~ zYgpa7ITP^F@$1@lM@b4^)40n8Q4f-a2<<(U zJYa2-`(sC$QI`Ss3_z_n(jhmZm8$P?5F>ymld-&;vM z9lhQ(3TH?DD+r}SkrzAiDp2uT692j2@^y@>hI`4|FYm{#joq|mvaQbwdb3RHr*S$g z0enA8N~TZwPQgCKf+)D4@6IbFQ+EF6B$tvd98H4^FiC=aUdyjJ*@*l24*LI!GPtNl zL`L}p_m6x2GH6YKh8FHg)&8NpR_kgrg$IHw7!oymRCME}<*p1%x~v$rQf0${5TvVE_^}1w-p!Pixv) z%wFUWY&^QQVrshsQDr$|3Rl3qVRGEc z1QFcSaup}#9H5{dkRMk1tJ@0Hv~(1jT3eJ(*utb}`bJj#%@A?K&56^O-kp+|ls3-S zVZ;1Tl1hQsCTYr=q>L4#Rygp&(TLlV%@8qJh~IGSpQ7kA8<<6d%1MkH;=z5SPqo$J zcV}@i_Ghb&$Zh}G0{kKu`k#c=4Aey%F#(E9|08f(an{+0m3-sHAOQ1QY0@?L3;1;; z*-#jfhdQma%#CHxY@7?YM9z)^bUJeZ-}gr3TmK?D7E6@e(Ut08lPH;_yP!K(f`t`> zfhmAEIhe54xA;9ZQ2CwGe20otk_U&`6()v}Hi?q(fkz)ia0NbXz(-}HTTqJ!Uf#zv&FRtev4ggwe+sz%bxy#YZayfW6X&x zsJd@jK6k&_SgSfq;$f!Ckysg{1&bu}D)%*&6J_YZYyEh?xrX$XUx@ra<$J@*$Vi~0 z6g@$*4O3A7-%jmF2l^>^_MbjA3h--we>6-zR-up(!QWsVE4Ua@wKP=G*Oe9c)~^6( ziw8eq#7NqUT%xI5R>vYb$dM+k6Tx!kS|B04(C>p1^$B4N%@S;G-% zE7xQ^3m>n~uXZmx(_W2yQIwN{m}Ko!0uY24JF)jRq@56VF9iU7%rwB%_*lWqT}#7x z9G~tiJJfG9^F)5Asb6B6zhhn->1;EaYDcFZwmGEtUH#MQY{*X=`lcby5;HK9Bfg0% zVS8BP zd9!=wOoEMk9WHRIz4GjEv;oxfo({l8PvD6HP)- z{&l=B^!~3<4S(vw$=gJ^Xr}*(QU#P6z0(r1ZHond*?r|>#4vT#ECUV3t~$5&MIb96 z&WO69uMITMK|Lrdrsk*$>d?nQJIB6T_LvoGD+CNkD$9S3*rk=`(T)J-CFq)ZbNrl` znrplM{$<1eSOFF-v_2%>L$acMqk2Y=7)?t(p%i+8mMvlyEAjM}4@oB#5sGOS?Tm4* z539(tr+J^amu)$ZbNDIhXb$JI0%i3N#vR*B=I$urmDn@ z!nl*31OA;tCf(tX)6in%;=F!i*IOLgeex{`n757r@VuV@V-BLg{zXx^>mlK9ZuO5K zrSl(A0sS8A`~k(bsrhCGmFBu<<7IT zB3ixo#69}MS{EfL4)UXHV#kn9DP8nsC<5F!?+m~6Epi06pf$Vu{|E?Q*J45R46uIsXJ(*Gb$jn(*;Iz?o< zT0dxct5yWS^)BP`mP_uiNMhs5SRN&e^vm7Vq37LQDD;4$?Jg1eqy^m*C)~Ys3V3r< zNcIiVb{2n}N3lUkw7f6pkuWUL4c=>_g=xDQFhrDZclnu>7&ZAxm<6oA=d7XPDa24Y zCnu?tolnWcBo}d;55!8qwp{lw_vqpN8~qM*jW6^$+Az2bxppU*s2H==#zkz$;fDi1 zsOgR7Uv)l-<=Ygw;ZOyw?(J7w=-a5YH#xg^+E%U-#ZaV^XmyCI4EDQ1NwI3QXbbdr z`<_OtZn9(qwR;S^lWtX}bhr$PaYBPXS3F1F^x-|bb>2K#LiCDPnvozvziL-jTzXaW zpWMIIpeI4lt*c{n29XRa~p z&uP~)qKH0zWaHV6R9nn+U=+@oe&x3e>FM9k>f9dq3c>@9Wy?n zZ3m_qB+ha!iTXIikx!3@x@_O0n!F4YO*8(UQiQjFa=pkI=~L;oQ#R0I{9e9q1hcE$ zJ_^RzMZPi+@qQTrLk?*Z4h!Qh9Vel-b>z2PAAt%8xEC^@& z4?bT*vb;Wrwye0Iiu3pvQtCTj4a5%%8!k8}ru}bcfBK)UxCn97{i1uNHg(#@J4%qhP{(stSSq}0NO&Med42jMvimipkOU1V&G2-!rW z$jfUSk)DnBI0P3?at5Qf4eak8H<)26K5tDPyyX-#N{B2=$e1}3Da%93y4kv<$6Bv; zpeCB{$7w!NYxq#aQjG3ukHBy1;T3JYj*pM{^_(&Sxh&GB=4bhcu^vCE_VXYMe&GU4?ul zo;%6(E~Xat>Z)ZK>7lKQ;#S@b8VeGGTj##Q(ZTtued1VH<`NI@5H^g>2z_Kqp&$K8 zseQ5S2MHr`;G5RFPsz4&GVM^_ZQN?NVHbFBx8uX<$=PrUaBD@{6j-VfU01BL=qkm9 z5%gL^>HpPG=v)7Tt-LxDzM^1rZEhx3TL4~uqkPQt(i53{sdMgktL&_Xy3 zHwF6*jjK6eM z`g&ru4&l&1jL9+s(Zpwv$NP(!t^`K;VLVbVi=L1zJ`t|nlL^+ZF$Vz~PZp%lx9pzY zyQNXAm+%bWRH>a`d>OfP4qLhO3qa3?9T&h35tZ-mAnu(j`q;%YhTRccyF$F3RJJy{d9y3(-Ha}18B-nr3268Q z?Bbbi!okyOLE2=M?YvTSTLWTxr6o{i{8lBC^u21b&)QxB=b8OFK!h(~g`9fQkF#>Z z;<~_?JPdLw!4p?rDE8&_YJaTk02tW(@bzUDB1-!+o#Cj#;QYoKuzpCPAoNM8@+%c) z%QgBprKPlw4BOi(Q*@6iq8M-UKJ8lrG=*$ipGwa1@wMnJWVv#W;8J|r8$JOR%bLXU zpuR`%<+V7u3HbpQ%#|UOR1hE52SSX~I}P_o!&|A?e2=~`&}Y$v_vEu%%NuFDPf}iH z(-;thCSf^>P?ftj8LOtn>F>7PJxR< z-QriHS0XBH@Bo(?b~}xMfxN3l6aW5;<;GMpueWCOBloD*l_;f7VNe5Krk#7c&@#Vq z3$PR^HLe23jfl8$yv=t0mzjM8GCTkE>uQ^zxnihB$T;U4U{JHAnGKj0gB=nEtQP#9do|Eev(v-mL42sO%jfBtZ0T$FhAG-RV?6cE}rnddo^N+lk z31!S4VLsWOE9+i#XOVM81vUwJ6)fjpX{8{4nfQ`t8DzS_Jy$3uy+0eCSjnzw`-H`| zU&TI8JxBZAYgzdeF+ ziXHW_X&RJCr?ywPzN^BNB;J?lU)V8eMWm<<`r(_qlG(eZdC=dvn?0V1`YRn*PvF{K z5X=i=`5Rt+fFA2^*9Jw+*Aug#5i^4WD1AjRcsOO5nXVTGe=|;egc#Gd3PVxaMu1a3 z{f545XLnwmm_F!Ye+ZnCyjMazhu)Z(Ei+e~Ryt7( zkg54|y_4je%#OT7!zUbH0KC3lYkZ7*)fhQ@lnm3I7V_csJ@fmyZ*;=h2Wca%zyH-W zKpl7IVgIF2SDqlPq)!E-j0Z!GO_Q_G`_t?Qz(>Maq`R@akB>I~G_#`Fdd8)EQ`243 zF4~_C=|axU%=wIBofLZ=!^00MoXJMa3u- zGZ|uUmCNf$S1Lc%UmuaJFq~@y&ndM5p~+hgZ}zNwvt2c3P<3iJ%dy?9G6ta!BY;y9 z$s!uu$B%)%9SUI|`D6f{)Y9lUu@WclnJiMXTQo)wV(8)z9hH}qkfUdYIKmCS&^QDd znh?N;oY=wQ$47UbZa^ZF#0W489ygH(u7tI|TvnoGp^9JnDnQo2>1%_&B@!ixtTds= z+y>8i?d-h-e@RhcR6jt51||)%ln^rw4EAWO6BqW)z&;IG7IXCHIP!Lo_dRZ((o1t6 z+1igPzgUw8MVEH*g|8p+g3$fdCUrn+k}0r>FeLvU@RR9YB)T0GUt22@^9f`OB|fB+ zsvWE-?S2mJzj&_8;M+Sb^I^k;IO5`JYX&AIyoPU#u>Z6W$=@L#^WyQx33j~9Wk+&Rq%iWqP=Qa6q_8^AJ}6~p}}j*}mhyi4BJ9HB3=Bh*FCkAMYL zRAuKD=;_ZEoecfUwmz$kDQ!$_kS47yJs2$xk;U~EfPO^?xSy_cvu>Qr!}Hxw@mv?; z>LWu=VAC+YNj72^qc}@kPnasN>dX2k-dye#nMOg1u=Z-MPs&7->c={ZeFKU4JU(!) z`pO47^`rsXC`Ao`**rMB4Ykx9mJhAMs_oDU^pYM_57^hVaC2AWI5px6R=MfG^hLQ_PphoEgg%I) z+3Mjka5oUxqa^Q0RR1iN5>haq;r>|&7$i9oe$C8w9%Q10J|L6*al@(Xfll?~8QBg- z`PhWxAff35Rlyay`~7LV?ox=wuEQx)3=wS&V^A=T>3#(*d_I?{w^Byx-jJLT)Sjqq zOsh!D5tE-UMuZJGe~=p&fT|D06-`FtOFBa5bUSavG2GX&!1Yt{@{~5H)88nR;!Bj7 z?u*BtorxnuJz?QPVZ;giCqk#+d0%o$SONNt9y#3oEy{B2QmN(aWsG|^Ut0!D-UsB6wTU#9}xEEj27Zu zF0$QEngv+s9N?vaM&$fA`5x}NLHP)`LI0{wmTSbZFBDoWjF6Ymky7u;5FSdcQ0m{@ zOgN-(C)}t^{MmKhCJ6kO8t;a$lg)F4btVD;Xd}#e^~sAvymxCPT>Fxn`h`bAoQSBi zn(|dlG;9e!speSAP1wO@#|j)VAX1NVB7*QZ z|H6^+3_~YZz^OQR`-j;x$8YAAO`H>>&-Tp3cZ2!hjm2a3!sFdBSGF9#%nXP9tM)u> zi}95{Gd!xUx@X9ST`%H?;>WN5a%PZ5w2g}i1c;{;$x>KN8=tQ^t=fJ)eaeWMVPX*A zeJj15a~vw`-dzLGA!P??skeO_gLM#3jO87fJCb64D2nww{Wg*~*SLs=pnyfqur^iH zY|6+yt1qiREEQ-Imq_o*f2 z$+O31K2NJY20<0t&KJK9u8Q^7wyZusa7VJD`T|vfS zXUmi=9cGUHHEJO<=TgzT$PR{96|v6-*j2XaeLPuqI2|oQrok-}>M3=Dh80hIPg?xF z>v0-uzVH87?DMM*^m6tdu81d3F7d0LZUQL5=twN)n78%W@38S1sjtJO?{K(ruVbN( za0&RCYN%?mrQh;pWP~GZMO&EI>sfU4Vy?2p8!ykRwAPRV0LILVuP+?MaBLGK#fMlp zqS7EEiX0Nb@6p}2Do87_&NJ|1CMKy69cw<2dA?`kvi(ic%bK0>l4ftC^gZ1&H#TPg zkh+ieJO zF{(D495Q<53Q>239MDp#f!os9t`NB3q_kayD+v?v=-AwE3;JS0kWLOEyI@>hGjK5S zLM}NMArm=)uQ6IjaE}){a;2qo2t7VwCNlDRbq!kPlMAAX&jop?N-xtx6{rh();V|d zBhX?8x?T|PZ;O>N7D`r+6Ynp;z;L~#^qRb1hbg6?zFo1kTX2FEO;00q3ksOwR6y0)+b*d*MDPprL9 z0CG&wzvC{Mzu7k_BHmd4>yP;3n@UEA1htgbq8z{pgtbpeA|xQk`lyhZiz0BvsKWiE zDK_WOEh=s42zoy({blbnj1F5f%{=EPWJJHl`;|#2FVbuZubx?z8p#?$n!=r4d?jbQ zCLl(mrl5cK2VmJ1dp!F4VNkLEe`0 zA46@qq5Ii;?8m7W9*QlOJ#dAvLrpE@GShb?-ahc_OL2tK&^Mcr`*~bJ z4f+6gPU!XnR)4O$lRZ%_xA|>JgZ)M`f5rOH=yJ46dQVztU2crGG&O(>`NGt?1~eDD z)M(<>UA9CMV{f-rUu6vJvj*b>N+KE-&TGpOI%=2{uIM_AcJ@OD_`C( zH{A78*}u1~{~onW=3gwk1iJA7zc!kUA#ESy4-5?(34WB|av&#~^Puuzm46f7&5H-T z;!0qAGb?aC5vNUFVly9-M0bpRzyV27>bR?CV=?JD`l;Lp9%BeQm!)=n5%8>9ZYxf&*X9vRBS(USvv~yhEeMq(6?R$vHwbI_02OO&-Q?0 zH(*HuwBy*9kBBh~9IDCioF2OJRnqfv_4G!&DmWY16)Pm3`3~Y*(_*v{L$Y_xn_z4k z(cDg*i?{fqk_W#57H(F5INg0v?Li5aN6Ld{E4~8i3a??NfR=a*bZc);b~#2j3zbu0uDlhd$IGs}qIT!>F5_qe9t7GJhKpW+ccl-_Xd_Im$saFJ|uYmLm28eTKJ8%`S~J61YsVUD5bO0RD*f` z_qRfIrDdU!#|T(EG}0pE$qa^I@@9_o&aTTp^a!bb)8Ly+#yS?-SR3hj-SrN+@#-y; z;qz6n2}j@HpJt3M0y1s#^e$!$RY+7JQHUsU#U$^Ro-gBkIl)q7#E5Q{Me3H5&EMNy zZmji%y^L_bb_Xig1$24B5M{f24*15ggre4z9NTlA_J_AB^@)+Oq&NYK_pF308FeSO zcMfjLVh!5#KzJiEPKWOiE_7}{;P(>JQIjKQ!}%=ABmMn@WvKa2%UmmKR1HVZz3N%86+7J{9_pz)+ju26ur-slcZ?=o{=JF zz8rn`-M-&b22~$|gzQ`vF~{wlw>~0SkVyQBr2YF&j$HNak;B1Al}gth}cT`GgIY3eZSDt&|P8FyRnXW%h)J-Rw94%S=S3s`6|3v zboTXwVhMf_yZqU%&o6a}?MN;x@s1T8Ou&eMJROA5=*ohesQGn+tBy?D6fCVD*GsT( z=D_Qp@9t>tblEE)s%=k%zeM@?BZ?sY(r}}xD#;ryJAdNM`ffQ$tAzy1elB>?I>nt% zAdqIr7sYN><~yom@qXJtdld$U1a>tcu*)QP$z5>J+l+=pJBM z8`c%h6t27r_K|omt+=;noT(t!kGh!;SssTXz9M{jb zU^15b_pFoIa=x5sWh`ZfEMxn}L?k$mtljaPCQ-ONj@t&0z06Z=BqUtOG9PH3Gv=5) zNuKQiX1Cz&((wnSR_-BE9@BASC3F zKGlC`NZ(e%1gJ?X3nGmZEX3_*CMml5-NvqGbL`*^32VY5HpA}UB1pA1ON~Ok;SpaI z9oB3x-QmGS7eNRMK{7S1Twz@vJIoPNBU5@b_#u{)le~lW*XG@o#bDM&KsDi?GDF@r zYLmWuU0`jhCwn_+-ZioB1cF%#Z;i#G$h9n$|GI0{|&Ob~~xn&deUff9A?~$`q zbO+npBrGA8B$gl0rP`k?TN}RCHz@5xaa?3&k|sfpB9d#oL6BABM)bTT3voIhWI7@D zC%|ZkQ*Dg}@X+a!5p#2P>mZOb)j1b^Ir`qZ!Oraa(gSwnC`G6dxX@nV%nV9lZg;|i zvrd8jZ)=N@2nG9OJ;_Cp(KlDWUR{zwFDzDjd^+#r;tET+6mvS@-XNMJb}U1WR#yoV zE|}BCqj2gzfTj{@$kEq9;-`CJLH&0Lo3LZ&-a3dPoyn_?F)@XRoO;#Rb@wt?+ujS!Dq+!q;9EG>1xg%tqJjnKkM5AcWmAg!_0o(7h2K18l_W6WVFXO#a2CV=CE^%dLoDYG{0?4aH(`c(C8XR4Iypq^i;%0$s@8z2vH$>W)g^`{>T8XJkw4 z?0|np5UO4gmImD6Y5V#W+f0$wM6I1v)4~VNpX1x6(B`zDq_=F_BLr#dhDqe_$gblT zX9~EsudSoy_^MfUPSs-Q@WRXgQThEf;3gDUnM5ZtT;-g+a9v1xD1%<>K-LT0r^~BE zxy*GD-gTai8bc>shq%gkaHAr32`4DI;rtkU8b`jp$Eo_&C>h%y{d2m#Xd@S~L!#2= z8J--O4IuCvV(Nl`2%{^UCA7Z1*QVki9en4j|193ZcUi!uJMe2iQ*c`i@iweE}`EMb&& znYGDZada=nbwT-K**E7fghh~i_66szF1I$rtBWVWUQ2>ntSaqXSR|`_hu~aF^#Sc~ zCRHL6-0)UG~s_oAn8V(N2%Mm#{PH5_ZkLHDG*o+~;hWhO#Tmz2tkq2khwKxO}U zl#6GDe!heyTZJfl-*?&cs*WuHL>jyhj;&y9{PXIhNZ{!q|w& z+mZ45Kx)v;LzHQ|f!=us2F-ZX< zdrb~ExHFX3yUgLWEh9|)_ciABdF;gn@H&dTn$%_r}-A*&D zEicQbbCf^}r3t^Z|Am@Kupyuzx1v~%SY~@_G@aOG>ROb^SAnJz|9FC4^R9R$(NFZX zibO{Ag(W{c*1HH`V|P`{WpO12-zJvTcPzfR&+r%+FzvbH<6Tph( z)?6?&`LaNzPxy2){CgNQrOl1~aK97{x(!g5G9gA~O|9l2mMir;phy)x6gZry&38di z?cA!ssKk&)iRpIbp}!xHSeSJ$1eO~6N3aVwVyP^&kjWEfxX0(@!qI!I(SOMP>EZD| z-+ABb4Y?sUcryIB5kj_iHq`EFqUkup^CCW>|36(Up^<|>pcbYnjH zPB@p$=g10}OqR@vuEN|Z2aVXIpPOAu^IL994z*pLC4&*Hw0YXQ8@^8Dz|-aYwPq8{ z7^fw8q{8SNLq{{NrgKCRW^0cg?o?ojuUVwk^;T?_vSlp}!G5#lr0MYC=HxFB^i z9#@!>lBVl`!mI2`pIXq2T6O{G1|W(iBX$vAhKNpm;-eD*DtOn|y}PH6SfbV4Poqpb z-%U3hN0>s-k_1M56jm8aKnyy#aE{(l zO3`LJSP{4P-DE4PU2}ZiFD^xdesdo$3VdV!c1)eLPv5e4%qTuDA@Szte7@ol5g7_Y zLflmS;fk!faXMcjcTHO~ov5%JjeM?c83%K=NrRUKeg6X!K`%|^EF6vw2~aAK(i*7z zWtDz3a@inL{v5IxUr$Up5Z5bfBuI+Z*TCsLBn$UOYV2xdYeSH?kmx7G$!^hHWZqPb zGWteJg>XO)ML9qqexR$ozLnPYyD*wohBru2?v5sa8I{5tdnYB!bc*Uitkkh>z!6SL zd3i#P^&{uXd*t2knTbcX-gU4gRTAax%bipq0ip=u{?VJ-B{aUfLw=4o7^jVgjDYK- ze!dBrtT;L_G*{)vuq|22^E^hr{c^a_G@)Y3Y;LX{Wwk~stiO19rFoAYYXzb5s_{-} zbw~aAdp#!aNOkSMkxzF*LH!S6&%GtE3>(5*-jn=scW(6Ug%a<*QN;7_R@?q3!-ZV& zhceco*x-+8VN~^B;)7>Tg7BTO($9gubkYS$%HKE45~U3Wu;2(6s)i`7@q;5)+M0ir zX6F`v+w50dsT*ML&#<$$^{Vtw#Ml{MAKwJh5aJ>UbFN_#dq)X=Me8Frpa`yxJ?yrC z)e@q3{&T$woC7#vOc(>|(dXNO^$ndMyIPq+R1}-!r93jZ)LP@>1r$&Y=CiA3|4J+4 z4ybp9Huw4xRwluzu!c~;LuyNEj7nMWlK>fCioHTAQJR1^FTh7m+r~1W0nW++)W8ik_d68&Wc2jcQ zv~-PF$%QpaDSQ5w5DTI5?Mf51A*0qDhCvf~;-(J*8C73N(X1>0*sBfFUAbg5M#8GQweM}ioD(6u zBEI4%!>4|zUhUVei8VyMiNu7+^vEe=Hz-riVH0$TS) zwXIPzRz6u$5tH#HGIT+SDYP{LyN24ADq4itk1B zvefQ!VOi?C8;u0IFy^hj{Q_mAwN->L?QGi-dPd{~KeV5tM<^DqkGDE)XkFh(0r??DxcX=!u|4@0(7;$(@ZAfx__jMbzZD)o^x*)qH-DWE})@wAG`#gQsd zOxwQxYXCl3Z0Pq;M7!8uLNN6_(G6o*Kv~xBjfOYpU|t^1{7F=s*_7hYKd>Rsy=Ytm zfrQWkcKGjHaa_;I;`Qug_KG!cGX?8?pXF|Q36WChmA8J8AZwJ zSH;_?P5(kYo?9@M zM9A-ioAmSCJ9~o?>y-H+vm)CVMj5L4aGa7gPn?iI8#suAUF}^-*c1o@u?j4)!`m|5 zp$}54ZwkhsO%{bOvPOaQ1G`T!Z8aN(XS2K!{u(;dbCeVn8e3CyS>YJFA2{v8WM$yF zV~uZtM%Dl`9`CKR2d7%yFI^-X&qWQy4NcC-8kj^X*XE3v=RUNwW~ocN?~->hinrq^+oDRvvDrkZ80W1|%-Z9y`6Kb}ruEzitWNqMs>FarRf2=)vEoH4^ey z8-&Tr8t0C39DdIkHyH2cO8THNb=5KPdgXlv-R8IWW6*7h`Ba@O?#1?hl4oO?p(Xuc z(3Ofp0_aUSlG&yvp^=TeXK@8ZnY1=Q+u`Nxjd(4Y&d7X_Uc8!}s=Pnb)E_y9b70;XJ6^~eBkL4J)%VTY2 zCmEKxa#Pv=D;ulh`T_s#k?&l~UGA|ncnwnl3zDtLmG@RzQLn;7U5fDw&q#k(di}9Ii)1oshZ^y<3_dK{gS1wU?0dFIYsf~}ME)pNdF)Tm{8Vha$e zp)>b#zk{FZztdFwn`FMm!Ik|Jhy)Th1e0%t9hIP&Q602{eJ5f6>`Hykf6iahx^=p; z!VJBICd^nQI52Kwfs)}=oAe$-OhY@k3Ck@iGlSB5a|cg9 z1~*Km-+~c1cvX&(mQteqn-xk92l8&g7_=6;N-n%jR!hGwE)1&b<=g!|OcY?{*Gfpb zSg@i(6265q_yuSnM1ZBFh=oK8;e^hxOg&D|v|o)+bs8oj@SvmYNCL6#Jx2^-b~C!| zMe{eoEIA-(LZT#oR~5`s;)W&kV+icu9UF|ZAtDV&spOM+cxzEBj9!>bB47mf?!Ffn zeMMZPRlG;dl3-Te1)(!q`V$U(@?XEGKF{Y|*5jxqJRfman*&o+k9K9V7rz50DMX5zo_k zY=Shje#x3KSZ80G@pYT*${x?`UQt{O+HjDj(svE^2QI4BLKA#=W>XO=2Icu1pdNaS zz}+G<`0XV>FcK%VPYwRPY64qAGJ{4zr{|Z1`+9taNu3@2)v8~T$mLj*Dt51jPj@;9 zEuj;`tgN#QdimQ&+uIVcOGq_TK!mZG4&9)_a*s4D^lu+dMf(==EE9=pje#Gl_Wsmj| z`V%Ng#Z;YGftuPA%yjIkpZ4Nw2?6>p(rDycc{HIeFxPy%O2WaA)rLs7T_Sh1upk+x zKIWAk^xlDW;EImN(qX8aqP&BFk+&>RRVbCYY|vFDQfT4-0nk7%zqSVOEW1TJBxm*u z5YrqLG1W72VPY#gokgHEC*a0N|L}aO(;ouga+a+B$!rjy2XFP^1P1QML-O39LTm7Cv&2S?lQT1alhjVfAd3s+tzkJ$XuuQ(9@K{4ir!}UA>DWmOJR`!=kR#j8#xiwfGz*o7 z21#OrVR3TTdGGm#|MS}Cod2Llzs}4~^43J3rZhzWCi(}HnN?tR3(oqQ-^XI(cxV~{ z_YQz)ARx^uubQBd)4H|+Dq+g+pvDu3)!3S6AVAV+@X(U6<%-}00*Da=LBPpw8>m&a z{y?B_aTa}`L0XNjb~@`2z_o>J0;wHhXajhz%`vbkD=V;Hzj?IXZ?*gvtUq=vmz1JE^W+&l$Y zJYEn~!fW>$TP7oIAIAp%-U8}LU^s6ByT9ZP?0)KDlszMGd;k`drx|<%Mi{PKTg6Eo zb=)|o9S4hZjbxy(X&m}tbMovXi>ZOx`tgrG^nZQXGyeO=#>QvWT31=*M4zU#^r%iW z(Osp80vx~6-~7N=L=?ay3Lq?L3b$oQfUNKIcIC-C0nX8Xt3U%aasrx;V${4@6KX-6 zfQadoS^O-0PXMRzd7-BX1fPYVZV)PT?=*X+4XA{HYHxb<+&ggF4&Ivk$m?pWw{ht3^Z`qFRgs;O#>JSq37MoRX3>*)TfLHm}Ik~jaC`OP+K|g z?_2}W48F8J0N$^)?iUZdH>>cCg2m6@0IcW~z>u@^pCj3XS?o$=h`D(OVLYuTSh9_@ z8D9m2FCV`nl_UcI>y>hL6ZNOEa}d}CM~_RT0WtYClA{|`Rp(vRKM?Nx2x^Rcv0Og z3ZV~vcX{%xU+o46x>6f5^k@t<(R&B~#&b)n zjH~+F(3Xw1;qVQ|aOH8#zV0@xea;Eku8MMe1#rXOSzk8OW^oXKvysb3DyywEuC>P~ zE;pNMtd7|*&W^tKs)zml_kZW}-2IB_prB7*(g>euqJJ>C`{2IyQ2fm!e*?qzL#%DY z4n-P?^gC_ylgEeb0qPQg3OhXg_C1wfW=!vC2Z8F9Lbk55T@eQXw!jX&Mq@(c^rAfj zjQHUk_K^1MV~F?3x&uY8XlLlW5aa~KES91T`Yt0uZPEQ5WrJy& zp~Fk!-DVw8OnoGt0Iv&}(%8`Z$&wtK5hxU5CAlu&QGU3}DY9Zf-Rj6?G9ua5nx+6; zhL!HC{pxSPch9l)*LTAH^cZYk+>7-gv2x$s_@bU{7X@I0>}Y9)S%7+b(U3>KHed(u z3xUaMWw{m!0KJHa!`2A!?vAn>fE&iESMl<{S>S_rZewi@tj&U>WSd0u0lopz`#M@a zE}oWB#4rvc=GbvN_GLf&bHDSbZ}@jVWM&@;V}7DfC(q3Jt-3h;9~T6*OXo1v0J0}};+bd5iq_e)`$7%o>`&P1wL>m`i*8QZAs zdkyR}0w_QFg28sb@_?QsrzU$Od5RCUOX2s_XObB_O+&D{_C-b%`v~;xH3npWf!~Lr z8xRtj5z#^jsSNSWc1L1gs~G{7uENlfa&piq#q4 z2fzRdXhxO6P`O1>y(&@9=Z0~NI;xp(Zq07{`rrM-m)`G*Px@IiyLH+g_~}LMF_~zh ze+)OvK#pkdci}{+8-rDb|T3PxV)2e~6FOg7I%Z1lw;|e9++U98lK1*(z<(o(#tpt)X$n zwnx+;`c*II2^*v@!~+obWMGg7&xQ)u6SO8ck1n<-D>B4Og{nnxrtEPXJLkL zo)Nbk36pNmdb}0c;aIR+G>em^J~-m^!Rn~7d9@xt^8p|EPj7we50_nM{8lODL~p@F zpX!vKtcfQ2M^UYH6(`^RdH$ZKzQ|V2xWwQk;-&;&DLN3i;)}FjMvCsy%DZc6^QXK? z{&oT__}M%~=2;3wr+N9x{Za};M`6sv?`F)C3z3 z5+foS8#0vIQN+1VD|Z2SU*FN{XM2{W4U|s6%5uUb#(4F0usJt%lmX*kJ8)Zptt004 zd9Fab2Otc)fcSV3Pl+yyJ^uwjH3EOtvcF(4HMtED8hWmFJNe6jA`AJ;5s%x3T55#& zQQ)=0Rt&b=Fm5?Mcq4G_haJ~nZ@A^Q5e~!J%&|H*4CdHQw#;CN(Z%ht)qusKjPr** z=H1`<=YRgqbKCVd)1tsnAL7$7(L{F-)mqQ?kNoHl+U+m-1`P9kRzO8BaLQgP!9&0z zFSCtGYTE`bRQ^#@0*otpIW0{dH#w77*J20 zgx`4EvW>J3_~C-_su^$!zzWx1XwCn?G2kI1UsM#${cDYY_*a<{3T0w?v9LtO^#cZ= zYVW`C&C^MI-p(j+I3oce$5==hhKIx97-k0FZLkU)Jznv?4;eo6VZ-}BQsLFHXU#C5 zMSaeC3Sz1N4xBLCeE4^M|DXTMANld`G_wy)>j6GJs6CbwO>}n2v+wX`At0bfC6H*|X|6|Lsql8wvK?F-=!++L=i(ni zTJpd;>VjS<^Eaag9f(?G>AQmm3aP%_IPXSIYn$?k_nlD{bRaJ@woKk;_K1~%0BY9j zQT>5bEJM>8i8Tn#bnWA`PyA%#NC;P$$K{?P84Sknl%;WnKX^b9&}C|~egfi>jM&Cf zVpl;i_@N{4I}f$uWdoXpA+Wfmz~3?eqr+B%CpY%>!018+ygFs7yi>C##({dEKcI~3ix&$HiX@=hT!H~ zfUB-fL4Y77U%E%zz+CsccSeod4S*#; z2g{KAXK72ELdaD1+Ba_=3j~`d&U_7EjO8T&YM`0I(v}b*DqvXzJOWWGv+Xz#I;99h zGjhZdWwHdK9*gjde2iP%jga^j0vhG1wG}dM0Nzi>3WElhOAc%w#5-kNw5U)g5BFgI}L-N#NG&~BrksFS5 z&?oWSJYad>sXib3c0HBf5KP%AQ{&D7fYFE)mRDkvaAZtri(KL#GBVQdb}#i$6PcnU z+1Sa&vEIxl)XwCZHzR@lBI8c{T3Q0%WUBijhtKEmcV7#i#XA7Ri;-2cw2{I9UorS8 z!}zy`^3eicbzmNA1iVG4R8`a!i~bNsL5=SUj1&V5e4&qdKO|6K?%GP2-Y38c+I>@B zwFjgz9OoHu4T5CI=t}Tv0OI7w3dd~4V5``}w!53TR}!vATD4?m`u&BDXZLyiFF@)i{VND8l! zl)OUK_}D1{dEo%uM=qA5m#cbP6hJ_tXhbSU;L_NV@?|(%9y$`}ZYDSJtVj&4MFN$)XGo5U{x;$!5Zs0HOOz;9^Bo2~7d zW+)x$;N2ht`>XL_lsjE;m;@fzn&HN@N~7QEtJZe}J*P~X43tlK0WSsq-Vec7mTf=> zF_o+sS!=^@9x_{e#DEVCz;VDfV;=^8RbuR%bP3c>Tr&emjWCS!K zU^Orz$QtK{bu?O`;&hJnvz^6&Z%9Jtt3f z_S0=s(~@1HF7g7{B2Ma?T~IMRc^meW1#lsNEdw^d+yF2HIG5-LYsNXeD0AAhFv^)3xn+yu(?NJ`bR(1Gh!HLVCF|J+m zsM~?{WW`PNsY;UpFws3mX0~Ov?=5)XFaKuUJaQ+%6-&~vMy-{%ca^+#Pl{ejR+N5g zCAlIV{~M1_x{dm=#BP z&;qlkZ)5nJ5q>t{+XcQspdJLN;>DsX8~X%$1R%>8G4NEt8tsu-z}Htt3;D)D%F)M2 zI0evnv{;AW=mrM3 zCSvJO8?MdLeNAf=f~X4=myjr}_-FYp6tuJjQ@@3b%qkM!P~G`={%Q@tO=8n}2K9w= zKbrHB8T(tv%yc?&u}!n&Ihl*YyT&ITJaWt(pO_r1)4T4sV^gb18^PV%v5hN5k zRUYjf7r^_1Cj%-pPA~)!!&H{O^Iipkn|z~oFbf1=dkD0ZbNH~nMxZY--_d@y%@;I~ zm;?m<2AWJ?#e?J`8437RevT|iE=;TPyrfn9T)V)nbxZQl`y5);NnYv))z$iQ$6`kJ zZdeRVuSQ7L?HFJYy%?#RQWiLWdlM^Ove(IyrN=&V?cFBIW(f~xp*8t=j-k)U-g_1+kEYX0A3H^ zrik3h`kLrdnetOK(M0zcx%=F={jqq@XTK2R^^dT!5-)i-f{+w;1DqWol1}fa3{BAwxkxnG6I`4vDw4S|b3KpXysGUuXiR!SXz@7XE=C z>=}VTFlSUm?JynYBar05M3NH=^Gg@vOumLO)(mZ!5q@4R#ygTj9CeJdPo@5(^2(MPY$=!Ul%ZeKCG%?z7U+RZk?|y6klLK(g;XCbj$2-O?*b_2+{b{g4Db)#fVzl?cB=x(hNE~?MGGXT zkj!spH8(riAz<0g`mAzg{wjcZtO>v|zz+|=?FDwoU`GnZtp)6aV=*sYRu>po3d+n4 zvp9lybPHp|xz~RHY!L?r6*u^H0ggH90$xUJj|b1)7|ws}$#U-fxA2h9sKaM}r7z|y zCugW{SlHs1=C*!4fI9)4n1KJ&llqe~(M0zGx%(a;Z~S8a+b2EOO1;di4$CeWfvbJj zxd2k^0zWE!*FU*y{4MM<0UhE(18!>nRz^;%xoUdAMW^e@!zR!+fMj|@+m;nzBrq0Y zBtt~#0O#wBX&@K@waFm1m&Gx#s$cD3exVRlCffn@JVK`?Fa2@hrBF<~W%*bDayyz< z#*B=DB>r{{G?u`f1ZsaByJ6NkNo`9!A=)1DPYXSVIH_-`4dk!$>QQcqogCx4KNy}k z_scV7=Q%aG-Ak-the5E^dn8ymo(}q%sEzlDCb~C>hXfs{N8k9>cJ)_0+g5j9 zWX0n>Cjt`n+`{>+cgcHYY`GY`Zo`^eDzp(YE&6!~EiWh|VR%9zdC5&S zYNpmk^!#mqJv0%na+tmu7s?|ZD4$~KtOn;g0xkk=K#f!;3&{pft5er{mTyb1u)aKij-8a)R;zK5zqVsNLC0w6Kv4y1FSWIsB) zrY%vC5uo4L@tMTaY#El{yV8JT<)}UJ*IsV-|MLIGZ1vhtWM*z=A1&uTlmN^x6_SUK4Rj%r)H6j5`-R{uIuCl#*_|6E143fh8CZj=Z7U+Utn9u`iLm{A} zqfA9NKz3{k3;D@AwkWsexHV;KEpf`I`!tXmit(Q0()vTFsz2~RCdrcdOvZ`&6*Oc7 z-sDYNBpU+rFHaFEyO*?GFrr4jy$RpiZh2*ARe9h!pg>VtN@x01nzAF{~%C0iX=p&Q+2L~BqxQ)L=BRH=0J|il;>xOf_{)P3T=fBWT-FdrX2o=2q+P32mm>hD~ zp*!f>+jw1I+|s7dzOgKM_OJ+3*Q~v%-R04P+TXx62-(F`IXUXU`il${ze66Q+d@Hv1qdK1hD9!+6)AG+D+Z`UblRC-3|0sD-p@Wde9kZa4sha4)4@9v-4`?&02AG( z#1Q7q<@~SxZM)=W-{Ffpgf7dV15dz6<=-wR4-rW7!*b6Q+s&?^${2YLe*j5aBQ9^W z0h53-l|Kl$Mak1vjM<4Ui14@}ueukqh@YCKF9gOaT434|1MQGl87V|Bt-c3Xo~9O( zEc97r{P3C^yw+q?C|_eFt%O6Atpn~sW2^0cASt`k=xJ*fyc<9bso4g7*OZ18_LcgX z(HSAQkiEp8-*E)hyxTEMCYj21Xdb+piey*poayOemr2tSIA=eK?8+2?fh`Y3cZ2VK z)Mk0w|9LZDFE!h9+Z4v1=)R!I0GQ}Lr=*7i)(P;>6;Bi1co3GcsdIJNSd1( zw`pkIqo>=Hw=b6|ja-<>3d}jr-+-Oq;sizG_A;kOn#-~s9;(Rz5Cwnn?syP{Sx?jd zTx6)cuKHDkzC<07jSCocxmB5rBJpQTfV z4VIkvr^rb&uFzGH(KvAOSc%Mz-bSU1FD!#RRtIJV+H-#*4`+m@ z4I?#XahgaqlxQC{<3X(Oy6ST<{kCDShi;cA|JmCO!*k5+gVPHAiS8?!41kI5b8>gX z;Xm8sZ~y#@?Z}_b_c^SkF_cOG*2IDwrhELhYhSm-aXr*JkrkS-ni-zusMOU z%sO}#OKu$!Vx+v_!nwA4EB*|MBIw+H@@g!{S(Lz2d&XR$dL)BE^5Azau5%}nRmQcQ zGIYkFv%_gakD{o4eX97%{%{&FfZW+$Hgf;Sh?A^T77?^9gp|v?&Aj}rVhRlbFyaEX zWu!b>xg;y_+mE1H4fc&qRa=-vtbyWys+KX}6g!({wCyAs7&lfZfZ=I4&|t8b_33$F zsO5@# zIZwddG%9~fxdYsO=Urn9G@+wX8K?Cc+FbzR(&9SdPH7VOH20DBEBfQ({O8VzWTA(S z+!YTX_!gc?t83z)kt(eq))#ZE< zk;U|aSy={r6Hn|MGv22WAww?9ueFo%cTjd?N6)y~uT{1WMB~Ex#7m9ia_cR(hwY`R z#g5oz5kNGpN>mhe>jtjbR4o`%z(&J>&1g+R4JR53x^E0fsXL5iqZr1~V6%rT>?!}>JBD2seGh;)o7q;A$wU*~N5o-1(M0zi zx%&)PfAvLv5mHq{Lxk*A;1KUoSnLwS>5$#qw#7X(8 z5LQN1wB757`oSB3mEH~NK9ezkUZw0mHC;AUWaw-`cAN|WHp9Hn?l^-z?I0mmQ{7O8 zM=r`2{^2`-1JA;2_SdD9X~q9Urv>d)4HMnV#M8Y(9e#?h1dg`ewC->IXAi|tegwAu z7?klWgUtd%1Xu!eNru2(2#UJVG%*3bY47BTN@EAI_B>0(G!0ymQQ%zkR|84BlsF!j z_4+t2y?;G;Rrp-|rutglaz&FXDNojUPpH!~FM~WmvmM!MX?eO4i3FBSemlyPOa;tH z;M+*vz1&}=Rg9d+Bp15Ut?yW0?iUHl(C;}79_3YNKlior8h`6BBPW8-=kWJ`1Qp9s zb#+B6io*r8+a&TO)|~cF5}iIL_dI^PJnawPZe{IR?z6W{;6Ksn zL>jLX-Am-|#oc$~)SLI?{r}e-037*LdM~%T52rrx z{0mkN{p9D_%Dx{k_=5mjHH_hxHSMYI1O^C5IA8Aan&rCf9KsA)>r}Xw##2~Y8d}G~ zDK?w{&Yg4btQ%k^dgD57xAjit#__y&EP*x9J!Odhoh~SE31J*b4%ska8VDrGYquri zQ{^tTiD+n)rEceR;5{K9Qk^>gzyQ>(zNSEH1e&a5XgJ#~z!vJJ_Kb{-7!9o@nPJ&D zK)S_fk(U8}>+QgiBmHb8idd9d*6-zu$=)(VH@6)DWV0o=9$aw^F_N316o>l&?0Mpr zecm6u&C1Gmo7vw^VgHFvH%dcyqI;5f{{0Hx`;7bJ#9x02eDSrI4QIk@MLt$pH|bz$5Y7T9>hD#($39tjcfjWUMFQ_ca^#*}wF*0{b3%{?k^!iB3z>FrMfhqS)j9;r;%B&-)6Wm;VT#U0&R0;g!_x zFwq@xFK|@8|9z-+`}hg7JvZRO?|qG(_np54;94`=INhfP+6K%I07F8_f59 zmHTi>L7kyUGZUajE%GC%G(e(4ckK9`wJ>Ga0F!5LX|RbKfcQ2X@KKm$M!@b5)yK$t_-^1mbb#jN+y|?rM5^YJKEOT z$TIoS^J|fy(>PO9g{S|uxq4*^9^84J;u5N|4FeZ+wn$9sPkH#6Zr4;K&5Yp=zycz){$d% z*Q4HV5B~L^z;O0onc1zUkpvdI)XM~_}Wc7!C({u^vMAMModmf-(eTd_aHM1Lsr-Pb3Uu$U9>Cg7Q#484@yN zbTAT)w%p#aaxPzc_9Z{bmHfGk4eR6HEY=njwpB6~-!c-^$7KdTejN42TO%-%fIEvE zNKKQCNis`a%IhklRhh&KjZO_E7!69mkMG^`&-wZH4;MY-CBWwIo2^}UIzFEhO_V7; z4inwox^}lIQ(_o%Q8E zW48MK)5*hd_W>XJo(uhsS3DiF)$ee(%gbOZp@FG2!=UN$Re5+w8oAA9W5;LmgasPS zs9+f`gFMistJn`?Ax}k=#_4E^0wy znx?6gtw7$%TTRRK^B8G`?m%GmlaE-u?|NW`Y?DPbTSKJt_OY}iR;F!bu_>OK7}8|| z2PzC!46rM={E4r4%dqc?X9IYrnH@XbBXko@gf^xpx<|S zR+=u4b%%QrH>sfrmc=n{n-AMZj{5oE{$||&zdhT`-gP=GFmm^~zx^RsU~&5oVA%H* zpq^`PLnwQJvclBK+XfZ7z&UGS2i-TiV(wYJm?N+vRN9UTy9V(=GHV0H59-WK%E0+1Mq!cQthd) zexH@uzc;h1rj`B^{Zk@oqlxYT@~gl73=H^p=GzCB!n9el6uB)Jp|Q&Sr#!M|4Oi&wF%d_tKft04>sl|jDSu@M4fSdT)q@gfMUgnNO(y%W#-hLC!1kHX0G{?cCt<^%1IOP#f&WDR z)MzpQ?jdq_!ySLM*KOY=W@RN56&0J5Zu5?)iJ-`U0Eili${#S;;3zQI%HB2Gde>v{ zH=prBU)=hI0M59#jR1Ea{QX~j$#~5(zYV+3d#MfOaaL@P4aNGQ>T0jFw7fsIQK9Fi z{Ml?chiAOoz00G^qG{`@^vMNm#6@i8T*yXwhESP?k3kiH%h+%gPUC<)n-GEb8Y+@s zlPk%Ee*?qkuJqa96KJcAl~D`@brkNeK;_~(W`)gTjfja~@Vn|Kzp1+5FTW-aeOzjO zU-B`wyDs>h#+CZ39h#IXs2tbLP|*^3rcq=ekJQ3Nk?@4Pa>diiz4;8d_C{dXCLheg z>YUZNx`NG+JtekfSGEzAXL!=_5dwd$-&EHdhwyOwt6=Yael^r%z@BNof1-bKG#LQ* z9Iazz_zb{zhnAwoF;J_33Rj+tJRP|jN!c2D{IMz43M*@KltT~ow?FB>`}U1rS@ZmV}XD=wL=Y1dQ_@Dxtho_hphY3(2jF9$~As}E$X$1g~CPvr5ZRNS- z#?|lwmL_C*qy%4h+9sD!0O&8FY5l{rG9L6-3370jukR#N6a)Ry(p&G4`%#Iw*wBnT z01hHru19GN@mtN*ZV@fGlbahT%(f~okxQ4FF+x6F(-r74Z~b9?JbG~1L7ads*$;|V zaLymm$I7n{ms`pvS9 zqR~**b*P)yfcm%pd40U@Ri6dmz`gbCO*GNnMUw$=kI}9BP#0fi1^c?vmExnKlY(wa zFMTTHTIF5op1di95+7$X!|?~!zkTwvP;YuVfc^KRB64@DxBbpuf5U;#oDC~4#jxwi zUboJIxio(yEa+;wd8O!Wc7lIi5f6!nuAIuV00MwvX(e=nJ0lJH%U-$@nA~YR?LY=F zJ!E9?UP`xwRq8|c@S-g@IeGG+S8VC^!7hFVf++!1^Yc-7ylGG68JWpPKNRtrh>O zEjnbw9Deg{sK<^k7a@CrpRVG%IHNgYKiPjkHwJP(r+o!JW$sMRd+kwW6Uthh<1ha0 z<@o6De!+bag_~%ie+*3qz&%8M^D9>!vnw$A>XK5++oN17$f;ReN|$rA&d{r9>D}%u zW(HU(1Ip$lc*hq#+c$51io5T+yZD6>3&-I8(}o2mSyv6~T~NC0~M?JMgxkOzge4bC}rD+GGA zEf>>JLxm=h3n`rPkfEVE1)PmndE!Q%_=(^nzH&926-F$GVB)`}m0^@3 zH_=4*1Wg9OJw;o8TVQ3y%&mDj5ZI86id0In#UCv+O`#TYD$+u&)8^NufD6j346x&u zd8-0r$&^1e$!o(hDgb?cxoP#3M->Q!34Fnx+9lLr9Ys+E9?=W1eD8Dj zav#O7&_-M9Oa>AWCmTotEGJJY%LSmEAD8^{YWjROg42)!BCXEbk4!9oK;N+@UMXvk zzb325+?t|3mNB4ouIVfyv}BgsDfww}U@lWMn*+Dq0Y7{MKI=s_)}Vf*tq2aAY;Vc7 z)KJm2)(Bqb3K@lU_*zm4Pg`2f~?$rDX<`qE?o+ymt9 zW=F4EHIv)g5GQFRD(0q9vSyM3MN-O1nS1+3a+r@WU{?K(EAZ~8J{Q1K?+!)e?pAAE z^|ze=Xl%d##kPLnD-C|3p$tt~d!YucG+fwT@##!s)S5sCgJz@1V4zGSCzFi0Ak1`6 zfC8cdlE$VyouCXEP)Y~RwetrkbI8buI$WqCo?1WU{A_D5vV4qgv9!ID?NfWQL8S7* z>m~7)!PJcIY(hfqBJs=*e_NhL!1DNM+Xj_~Bp$&cFnoJ=rlDvR29rM_%_}T>YXSarei%`@GjO(L|>wO$NX{L*}-!*^Ad;Lspb(uA!N&|h$ zps;R~%m(;;fX@nS9%nLPAZV8vFwGYF#rx48}yBHv^q>Qxw?eJ5mbVQCu0WL4=G*i9g9!Mgpe;pa@P(4a9pZm{#^J zSZ5Og8FZqiss`8wo+_xmRKJ2*SLW~=Z$&+Hs0AJ@S3}!H2M!v$T;kHQ3Wfe{h&*kh zfjE(H=bK69^tRfBUUw_RhO{Vql!=_rn+Zo&WPIP}aW1Q6Ffte3Z+8P(7+Ad6o(;fk z1-8Bl>|KSe?+U=$=9&zFeluX$R+VYuk!`EB_fh3>xdK?PL>Yl65p3KBERO6=9UmX% zcvVy=MJrl6$cy^gDloE~ zVE}Hp1>@$4&axg4b$J3|r?_g`zprh561zNi4O34n08HZyQpq+;LoYX3Ww6;z)>dho zjRj^8KWzWRci?aUinv6c;Jxc+l^?-p=^k?=-Uye6nv6boarp`Hlzq;a7dX zt?vIq_~Kj(wCb7>(uVSYwIUqkt8~w`dC&;%Qlz8R-@G`*1 z1#s*H{P+fN@;I;Kr(@4|ZT53g4x~u4eFK$AA+X@Z%@pUW0`>i|Xq%S>BFfbF-7tV0_f% zlV`&K1o+k(iY$+lc2iOyAzLo z+lyd}7nHL9@AXF9edh0a`jz#>RX=X4yFb%V_nCpO?8-fpO(g#X=0IovFP}xn$BxlCm~I^GkOvU2=qv2s%}vzfo3K-x z@QqWfm;J1@i2`)8Bk$d1hia&a6*jjG=WHOTIWi=6*hF;^k62;Xn7T)gg8_b`Z21?y z{x9ZdJ?5K%wU12i2AJq{BtEGV-JRs_#c%kYhxtvv`I@q_e*Zo%PNi3+Ad@#8Ihz7* z3bB+p5;l8u(qi)Tvi5@%dVC)j+qJAe;RATkE56NU_E&$`ai#7)_rH1YBYiyn0-LWq z25xI+ZcX_+wQJM3h|eNGmtv>3Ez+LyOl8clZKyz5;ad^KMQGA^Q(btLUcD>XVFs@i zICK=a<1p$t0<(@gvK^uhR!4SKhS<(x&cM)k$>5>%YWg-{2lk_!dsehvnQGio0%FcTYj5SWskqjC)Biw83uQ$GKxCtqhZ~UGc>*!;r>fHat8nDC200lt= zY<&v0VeIoLDqFl5`K}I!!-`N;&x1OJ;~9wGit8JHo5xgyCiur~_^B=U<^tH-gl%l1 zE*7xu8e-IuzY<3;xy|FtCX=|;Mb0sz$4NupWf*vfMyxp~o>{U7M}yBEadUb4+kVQ3 zWI_M{|MW>jK~!KE?A2y=k}OO#(P=|F9*>Fc4sv(%qyPJXe)Tu~QCZ!6acC2HVbUgY zJE)Yg6NLl-2^#i0RlM;@|IAlr zFRrrcv%GyiXim3LAf-=I-njLo9H246uvNg{`lrlO5Tw4dhfF-OMG1 z*pDDsDq^7aLvN;0o=S#!C{G&~3B;QLfnJxfE~inVh6=Prx$R}fZH?9il@qo$%Fw7i z`lN9HjceWKHRX4RK42{y9{a*P*3_|c=(U}tzG`?e`~9&@B3t@;3k^r z-lC+5Cb~Px{m=vIUtjzuW%Zm(`w_HUwp?@;drKV3rBXr5%MpS#WlfhxfE$^Ta?N|x zLvuL_P|UG;{1!a&T|ZzeXZ`k0Z=_!H+EpC-s>h?8_5Wf%Jludd(pS^~MW~s9L*J9K zme=P=drDDegv}aQO5GipapicK!3TriekXAIAyib9m5!k<(WUQMVLQl@#6he8D8h_O zVn2hzj(m>JHWZmJfNcRdcmQ_x8L$OC>ZpZR7y%L2>c?1e(U@3@b&KiL zXww=D<~ITC5S9wCd|tp#^pgeD##Zh$@KXYkp{8~!J^6`()3{0f4c*ol&tqvvKBFO| zw613-jXf3Ewk#sbtDHs{EIw<6FGkeECsFP^4By@kad3;FiZO~wP~FxWsPFViYU5;Q z07ORSvDL%)$`Aakt?vD)QqH)u=bUJw`=0U>Jki}qero@SvVLcUkD(ce7)y$sK#4q; zitg<-w7wK|&5SI@F*zvFw|H!sfHliYu31-F0QV{PTEpYj2Z zFdqs2Qr;}PX+QGi1RW%Pl}Sow%$b7*nADPNd1ZK(YwUQu_4j4aYJ(D;f~BEUJmKHzSuXu{yUxl z?0fKZHo!!u8%YCCba&GlPS&-D{k55$l%5JQ9y3M|Xi8FwoEiwyoAT_OfRKyO8 z@&y_#aORQr<7cH(H+p#{e&veOONGkfNqo26hQ<3n2tRTsFi%Cx0hM#BqQ$HA9ffMT zqhqZ(@owZjIgMVczyQubF~6vj z?<`c}<@#kPv^J5Kri%Py*SqMtsl3!yXEenanQBo9rYn@Q6~wt*4lK4|Wrp&=3xJEx zg)Mkk=MJ)g-N&X`>hsnt9(N%z8O5XFjiDBN^!G3JkN)v<+)tf%cb?8U(M11Pnhbz@ zj*btr)jxo591qVaDKOKKv;x+o=vo@<9+%1U8sMhmQhjE*R%syGi4zeBDSq$#`iCwW!QnAv}6k-y>1? zctJ##T!tC^_B&DE_d(QSM`LXu!5+jn=32rfNcjq16D~DQRJDu;1xje2I7Owh9Lac~ z7)oA3|Z$i4n7XdKhZM9@khz!w%)f-#5W3C^dJ@pes(%OJ{r*I3e# zzb?RaG*`EBy1`kNtAA;9sDYJy8jZoi_vET>0d4Cbj@jxkaH73gY^hwN^y)-mqWBtV zY?$?qQT=)r+C7aSjVJbvfsvDB%+y$n*!BW$k0|Twu!lSVHmtP11}M^GV~Bgbfwt(@rr0yDS7(|Xpb4i!+o5i>Fw4iK?SDZE;dbR)w@y@?|BXlNrk9++`hgXUIB2k0 zUqCpf)lbSt5Rg{}DqlzE!Klc^_9!iBEVCEY%5cDE1MJQtsJGo7tElBavN*M*d1x66 zbjGF9Tls4G6JYPo$ipr!?`Z6K$&+yLE^n|Po5KWj7r@RNA4a!1;6PQxG$oaO&=S) zcodV0ZT1r}3JJ_})eSGuaknK=7YJX8RgGGKBpLz@-zfei9HN*quT}x<*@treSrGw% z04;6V%RsjTu=M7a?rS{cMWTs;C16g>3bmFlYeheW6+({$&i<7V>a=iFcQaUY%&;1) zauzWkQU%uHiRH_KZ`Vfd4iS?ot7mD#m3*A?GPXO9k=7>huc-^8wWoc0>A3+T1M>m( zrd#31j`uYodZbuH8wZJ&#MhGo3}zG{PD-p-+*1D4yPpl*@~TqKKhaB=XrlXu=;KUu zPmtMxO{_iOYM^W~4j(t9CGuxO5fQ<;Fkj8vqBvKsbk1o3frk(-dqaqO4g+ij=7kE8 zVO}83+4J|3QdWpq8jy7<%<7=`s)dQvo)#hLU?b*ey)NL_UXOaijqqU+EO5RRhSHfsBxG84eE!KDy{C&qzj;2=RUztTq~y%8eSV<5y3ZSq zw9%eIatUhQg+FMFs!mN`X?$8Y7Q~aha*;Yy<6dk?R=gDy?R1@Oz)QU>y-u6uYjC&+ zPumNW^Ui|p+1-}gNOVms>2YH2n0=rf0R?v`si5aMLJKW&qU(m6@R{Slx4?m2MfYS8j8HQR^gEw&jt6RGFd03=S*w zB7xZF?L6aNb=UNr`2Z2(rP5(3aaO@<-8UgO0!e!!#dKyMjD zI8caeusWnQJXvRrFR(Ltqoy{iey!lw9KH7`6IWWKCHBrTGe6F9$XD!qVOC2EB{gVT zCvt(Uvmq9;FBhBxTiq2!I_xDeQ7V6d4!jB&XR_R!Zod)JnhVQUB z3|(ACM-U_bSiPgaW2a?qAdtiaVv=`duH@xHr}!Aeix!Wl$KHFuuK%rXa^E<2 ziULe@U(;j&+=FChZs$DnPP5r-9P?vtN#QnylVgVH3RU+%o{BIX0gSFZU1dm->Q9PM z1+h%0CX?b9%9+a3-`EjR%p1M8lIro~jt~6q1|Px;t~cHU%xWa{bl3{LthP3dEM|4z z^mP72O0VWgF_YRte6b9!liX33v-uEqB?l8&UUMdFRz%#?S8P`+58dXfCr-joo?7C) zfu9R}*dSRqPLF!2|Gk5sISoEGm^=m(w1~iZpzAfAAgG0YLN@j{2%4?W6JLfXqbB2| zO#o zt-$sOyYxcTExx{52Bg?!(O^@Y*RZ1tjO+ol!}io+e8*2+RO|e+0IajLi6**FXfgoq zc{+;W%$FOs?`W@ZYYHnV)~4*}LMY@3Y8{tSluk`9iCGWhyU~M^)?qygt+s3YY#PnF zOD)B^1n%gbp~|kH0um5lEE2z!QAIziXa?W3I7rBtPa z6Lv{Fx@HW`x^P5IrZeoCCQy^H?Cpsk=RIC-=|1MVvwhYN;IkQkn{NZ=ItM0O5XtHQ zE5g7ifeMyeNr4mzf#X0Pzvl5l5FN=tw4igYaRkKo%5*A63kQvP+xLuks<$LT?HGH_ zSfCNwI-i1bbv(;ZXXyEGMjb%Q&X`W^(KsGbdxAm!R>!Aj%lK-G+$N20b)1Uu5yK_t z1DX+$7}*U@QMd8TCcx6QB=%s(;fLRHz>dE4Tis8c$&x3U=suyz0Qd)zyIZYwwH`Zm zPOZ0JRO^Y0YOQD2T32&u&&)<#@zUFDapZ&W60z3?y3{5@A}KY;vQhqVsB}su|}=vR#ZV{W`&D1&q}b6>(dl073qA2decp)H+~eDvps5-*k{rr zc6iSd{wRSbUGFRl%9rNwl}4EAU|mWNiZdx^4ow~RVwd-CuX=B^6F)990Xl>~kkt|rJqfgQs8FY0<)ZtJ^ut)=q z1Mhi)+0K^(SX+f1*dInfdTf>q+C-XdkfG_`$D0+v-7u_U?r(eE{eiXnyKB?oL=)Zn zq$hBqyFl(f_>KSf1>?=X{_p`eezn)NE6lbleDyt8f6#B)IbVG>&i(eI01lbiSZm!^ z-~JijR&d9&;dU@iBvWBI_KmK9nRR)kvSoft2-~z8 ze>*xLwR_|Z{IDJ$_04VgM{WX!G4yZJsRBnS##SYZF9g=M+(5Xj7-_X6Y%AxKyt5^$Sk6`DlyHXraLm<3#zoTVIZi)#sFb`)*_Ii6**N zDLu^-eKO?k!{)pG{exCEe(xtR?0*!j9)$U7IQ?bQefx-Q9Xo0(4|=`b@7XWKSzrD^ zcOP-vFFnma`~yE@D|^m2m~{nX)Eev!Ps*!ZtW<`c7B^9=SV9~iDSS^_DSKQ(zvRN2 zj0o~#B`wy{5V5%C1OY`I2G+N_0>AlI;P82456{}f||NA(s)2ijpmDKg|vrnySqWQZhTBMB`v&fViR#JO|b zX>4+fYE7L8T2e*;cN!W+p&;Ii-i+U#Ej#kwj3f~mH+`3Zq+4o70&@)pJqOL$;Jr5B zWCuro_~;lvczxJi9DB-zY#2&hd|X<$wB9wCJL9pqrdk(wVd%pSiQ&$yA3ugX0w8EcfoK0R`xvzcJtTNYrpB2x8MB@-!%e{ zt!IDTIW|9Q%YD|Nt7(knj+($(0L^eJsL)ZUaX7!)6ddBa%Ox>-XBmyNp&_r0%GE%H zEn|XOtMV9Ih5xg$Q22dT;2*dSe&i@Bb+no$9iLavOVg#+G{?66b=@1s&a-LxzM=(C zeflmjiV58kURlRI)zNT;@=+7@ValgGDI#scYyAdAC2ZNwY{%3?DTk5mM4KqSPl)0G)@wji$8#4q4Xo4m3FE9sk5uzLm-*)ny1AQy4l7# zg=VxOHFq>-NCr!TDc&kLoPRbj_I^d_a;r=ViAcK+ zN$Syp9vCUxHyyxjZ~kVplLvari6*-DXfgoq0=fGNR(D-tv(A@z; zX_KA@PmJB+I4ZqS=~5DHiojU5S-h;LF#0YASbc~g8wSD?m09{G2;nW1k7bSW`WmYnBH>AWmze$fNZ%Z3C{nPas~owa*Ge{p@#L zZvxTkHu1m)gC2S@j=#!IB0mtaYfS)nAP zh1nLjp-(JBhMTM@2}OClTRujBbI@3|Zb>0oHVTm#KgmMuXJlFJdhQ@~qR|LRR#H(^ z!umo)$MS9l=e#|5-BL*3cuj_Ji*8}LjWRR_$$)P^L^6n>0YP5k0zcI*?Nq?BoDq?N za@H9@Ep1q6JVRZ_W@pJL8fGl6(E!`N{}T)axf^Pt z(~~9x;4aZ@6^2K^YrN7^u7De#em>w%ZP3hqDTXbSTV4zdXYe}nn^cA}>$yoQnVTXK zQ9)+q3GpEi(0T2JbINi*_z5XcBw&&9+lgEr#TKBx|9arW@$jex-n4s)QMYQP6goR9 zRv_QJbWcka*hY8S8(GZB_ECL6*YnQu8(D9%fVwq}JgCVsL|Rv-GMloeEu}iFkhenq ziN!^Avpt@8trhUC1^4L7Xwx`hL*>0!dC3%t4Gdun-BVX6yIDjzy%^Rt34&t)rF;L* zPH+iD{XcfEUgb)dvTk5K8o-9SFS;P3k^BDoJ2Sdx#HRA}Ja{xs}q;aG1;70qJ&2L5m#{fVvR|jxp z|9Jgtz6RL%Cp`_|?!yl~?|J9^@ta=v_$wcH!GFMb=t=Irwlm#Crx$6oPxMKV4XAbo zP=~Gzk-P^gPxr1o5cB2@DEt_JO&B^r20~Cl%L9~B_B;olUFt;6yaIL8cX?ck01h4a z0-|dxQ%aTInbT{MLf7|N;qSj5)i;Ax76mH52AuM&DFPD!Qs?K;sX*O@byS?fr)JBL zmH5K^HDRbklSP#4=cSrf?>kG%g^p7613#Bnd!$M=r)KK)sBK0r4zuXDf0nBlfqWjoa`!}P7bykhv zF?I<+(F9d0qlH35-1F8J7H5V0i4WHAT9~(p?``UfJQ|;sk$?^KsS>9=AX#hRu;UDz z22(y6R=l8o7#()z8S!ZGagy{w@megsX=Q1{gtN)YWCfV7`hXAo{<*;HVt3a`QU9dq zs;jP=fB%2~&sVIkmmgeTTYK60XCC;EM~>Y5TmTnMQGnB%CIjFulAC+;J{)|aEuQw8 z6onL@FZlEuFfy%E*)%Uh-LS*0(4!-z?$j{SJWa78Ewg7?hOY383a^x|Je!xra!i;& zEj6(6Qh@mkz8Hb`Uk9I!(KN9skS1%Dj;(-BN>Rn?(+T#islqNExDthtJ$ z5VAD5_)pUW`UA(A8m@VH7gGb=l0{GJFdpp-s7zZKHpTE}0j387G zqeW`~ETRTBj$s7ku_iI_@zx_NvD%I?5LFp4GvMY|9T>;q>jCUnl79;1?&bBbfBk{i zyzUP^<9_E}@N>J?SD(4HwYcnp3(q}p^2Emd#_`lc0YtQPqSKNl1K=*v+Gu8n;5N1= zAE2V)Um<9wTR}pKthA}Da)`0zQF>~UW^YKr?IeY7l{g_&Q*_cqNgFL`E0SR;zi*y` zUwZ@UD#0E6OgJTF*P^e~=T4S&Ki4a^nod?;R-eTxY-)U}ZkDCGocGLo8s!mosrg3U zAh9}if5)aK>I(9swRNe?7C}&YL+?w;i==k>@e}S(STQ@Tn%` zvFQv-SR}3vU_7>74!`lUfK$83@M%x(K70Ppzwm*7{?@rB@n#D1@7pFw3jF-Y)Twn2c!sW+=*&C*jxL2%iZB($f%xt>rU*bVV%90Ty zXBKRurklm4sREXp%2Yzz+-4)3Ik|kjh>% zCcH=8G}sI@vio`&z7c>1m7Xd7R{Nb%5JP%KO5?BWSr-TG(S<~~g9`e1Z!$B)>$!JX z@%R1uF88&Se+nUUcc1^KAOF7|K5lHhaM!N&?{N1A88Ell`Gmduc4H{B`R3-ai{ho& z6P>O!831>UPS%x6|I#r#843&ish85odx}3sA?6Th%wc-d29^8BbdIQ$wTj?xQ^Y{v zA>}7TO1~jx%lt(~0eR0nnekmkRQP3pA3p`Z{-f;?Hltm^W{bVTYa;1s%}RI{)eanp zHnCd$DUVd4JaURk^-7FQ|Fd}xmLsN;7^@a}s~lEe6V|%g%6plA*>%F;x=r?pua!z( z`C2oY*VnrR+ly#Zl{Lc!aMk;F2o%*foMWkDtmtnHS$do)kb*wn(K<{BrLt)-v~iQl za*e5Uo&2|JjX%KDaCJ~yiO;g#)7iM}B(N?4ttb9W;~l;IMb=iK5xwZbM;bs);EA8Y zWB0Q>l_nCzpq23fK93rhCYczp7~yB{>o$d^lDatBctY>?XjZyl0Blx(+g`VZ5tpCN z9<#gK8?Jl9`g4BlzdiPxGtPYJ%G%l!iwy@2RvZ-u!$s$viS0#&6`PHV?ep3qsEJNX znhb!uKxVdCe0;ChQ=6zIfs~YEUK#DnAiPrg2*Y>5wac!?#fF1}0ei!X_lHj+^!5C$Y%YwO8~l}fkNWfW^x>_G5Wv~G-L4w3`& zt2u3~C|FbgUu^ZhZ(vBEwvt-N3=)vDac%3w2>3QDPK|4a1Zf;*Kxd;og+;)|ReI3+ zt#RdQyaY|5yCasxYdrz)m021%6hNzwJjEdByBol<-;mYWKBmC%%kJGRaG~a@ztu#O$Rs|nI@cp-@Noq0yn3GxC%)o1 zu#ZKYR^;yG_y6)Q&-mXj|D&g!d-fSGE`vSVhPvt&ulTOjv9Yy<%P+YfHcxG!R?LeH z7jA5PbnTx)RO8c?CIjFukeOAx|8tJncyi0(E?pQ;IkiAD`K4Gm_L~x7CYyDg-q1k` zOV^V25J|^@h5+a>wR+`ArL>JtdYSqSDnZug?!aL1<0s)a-;6r%fD7qdFj~!PV%yR6 zGssSxrS=}7ZY0|#u_^#B1oRB#A~iKTi4sqeQs;|pZB0&f0o|c=O=sun45ih2w^V@A zHMa(ad-D#CDG6Y-hH21V{L3J41Xb>pB_Uk+P zP5`exjIKHwrOr}=!1&KUO}1h{?VyppBpZ#Vp5GD1m94MGmDIHSs5`50Zdzyo3KnJ6Bl5Q9>-GIFd%_;z zv|9(@?&X(W@rv``_Ljf=`g0DP@e@NSSC(Ozxm!Fl1`Ne;?D$Dse*g1Bg?SyU*oDWB zAG`8&j%s|m(_{eLMe>y|*n;i8)?wRCc}VdzB}8T7pf-?3;BRRRDiLsxeUxR%o5`Mx z;53(&6q7tgDKUkLL68@JkQY_Col6TB5nH!To`m0cbIkdxe0?ec+MK;mkWJww%&>H@ zV4GrAao%;Yf*?)b3bQ~x%xYW(h$z-}Nupshb%v7cshq4ijc84Xd&aslE=g=DX=NKs z_tX30)vXe<@-Bgb+PCH0zs`Fg!!WJ`5HqzO;M4k)!fFlHwUL0xzXsr}!~xhC3k0<| zPnO%jxgHsb(CU1)ymc-c+CnCbDghCZ%ISw0$DhWi#$FnWO$(_*(|`hnt@2R0GQV4) zZMTCu#K&aJ=oyRWEYh(P#IxiC4wg11SVtvaZ5yq@%z^DK;J}{VRmz*1W|6#6^AmKP zT~l^>IeGKD_5+LipHABW-F-bCnXY4F@qSJ#W1K=)_?Xsg~_v2q>zIC*Ncv66Xv@BgpX@;y> zl$Hv|jrxaPoVHJuxEEQZ_@zXNB2IFxFg6)<$Q)#gHcM+d|24Lm&)CA&JkFXJh>5%| zmSi*_@mv$0sf@;x%94WbNrK2X3e!kN=thLGEln37o+?v0?$;TGo%5cn+8T9uT41Y=teBRC1810 zIl#!T?m3NE(|&&)G3BJeQ~#48fEi$e!Dqn9>t28Mul(*GKIiDs+b=yGjs|x3*>ivDxexQQ{ruf) zyS~xk7rOfZLoE1o$1u!L%7E>~0uQ_VQfzH(0_x?8^>KUqQ2-8}4(*xfV`=J?yG|#! z&iSUl^2Lc`6?17ZDh?@7AsCg16q}Tklx#~cB_kvxQaQg%s{lQw4Sh=Ct6ZKECl?$- z9P|Z>O7BBVT9*<>sDAi{aNxk{V^%4h>a4!8s*C7=-ZGIr0pQYEHPZ|^g*a@D%8$ut2RWwzgRgYjkmQ%pi69hf|p``NIP?3z& zCOwwp>30*j$`IddQ%jVM37ve%yz1~uKvsTZRKhY(>R6B$wh7`rMKVk>qpXZzU-+4y zM;RqncuhiQ^T5NJW-~yW8Q2`8K5yALu9{(qsL!eci-NQFUA=Pitv5X3r+?w+zU}A! z*UvrZzC2F%s;jP=|CgWq;YY0R+WVqmK0Fx%4meO?&S4T$h9if}$x|D+; zy3x&0_W^h)+G?VSPAAe6JkcjfW>)71zTl9pT=GGTDh$bak`5RO$Qffc~=2mK? zX$rTtIYtz{Stn_coX?2XG8&-JKRPPY5NRi_Iaj?I`J5Hh58eP+m3jjj2=!)|^}YY@ z-AR>=A~CRa!KQG9Q?|{?OU-HZBqa$DOeI?Muzrg+3vZ;u)4jNn>XRr0$l{B9sJpz< zhQczY=zhL#YLD8Xx|NS@lB20;gUa#BHwZb{a0lhCxl!DtBTQ@Eo>H6WxQo0ezY8gseB#OFA++l^ndWH4xOKuq_JGjL2( zaOyCxtg9qrhmCGRw%#!vm4XLFH#9%B)E*9uHo%;NAf;9Rj1{(b51>GWTE#H|W7kNe zyryyL>6wR{9h~31fB(My&pdqc)c^RApL*U?U-zchU0iG3cW-*o?|Rp}R$ldge)lnF z9XR-s`O5GafUkRXGqZTd2N2`a;(;mVn6J!naR2^zRW%%y?HcR2d-U;%?!J3RH4~i% zbgvDnPbD(5!}Xl6{S|BKq%66e7y__8|>0jX*s7rOK zEjq}%?qPYIn({$WT=BurqUNz~Dc%OKax$5&708A({hf@KrnFPkpn7*E)qdms*535p zSWm_cO`n)#mh!2-)~B%U@q(G;A?to?KnS?Kb+B1FdGET$o)%;Mmr}2J4M3=-13c(a?gS>1BQIUc)*o>Xv9{VmqVY>IjAhZBd9VDX2 zbj{n~M(-FSN>?o`Ol@c#2O2NB!MtMycCY5;0X;yWvCaAd&lk< zfwlSY#Dn|yy!0>L^oCcy@MSOg)@!f5_VQZm?t3~S@Y>hDcJ(*@_bVTF_Q8Wc3*b@i zn3qye45+oDkXZu&i**3oW5q)*y%<|tTYLr#W(5X=6q(Osic zi-XU4qYwLTa~mS&<#L0iM3YO{lw<9Rt0}3rRz5zOw%DOXU;(_cxNKTgn zrR_Xu*UjL^PQZ^H3&lm%((I9}NM%o`DG4i@t`vAm@zJw3P`9G%>0E9jHbwea;#@Kq zz^2HS8AAuR>1t0r?x?3JUIBEP23Ea5Ph;LA*2bBZ?zxd4)}t`2f z4VzcY43bH$ZLT#0O2*rGD)hKC{>Vs?*RKYtY~L~7gh(U2a<#sxQT(mCmm0~uDzbG9 z*y-vx-6M}++3hE-KC|BLR*t|n0lFD5)3#Tp@yOd8;E=}z8WHXK4x^$taPzHj zMvNQaC+sLqOR)$v9njcyHbFX*NrAkMtn_jl8=1WtO;vqG3kAup^Si{N{LVU>^3{pR zEK~frfPdiiJf+LehM8T5by0#mBw9K}RSqJq5(2;f=-85>4H$y#Ij#R>AjhA1T7CDMNi?SM2b#cRnZ z0@M_CN^a*;8uFnP`7$s_(NFATO?g1ql2vAw?y+1eG_+*!lx8r%J)W`V)-$8=4}g~f zE7pP$CMmO+HfFfiq)L3Cy~I4@2wb@OUToEaFt6D5Ex>$c@Pm8z?|t|!cii@4Kl8s{ z{J&oP2d{Zjt@VC)*KPrKx8MBD-&}v=tKas7a}J*U(_Y6%p!lo|F@DNWP-%?TaYSJY zD;!n|*49^W)){+Ih7!-SSHK)*K$*>KF`innuv8~H&1fv!}hN4qcn6Lwf~9&?Bn=+3sGW0J9aeM&a!dL(=;U_E*tfCQq|_y9pzBr8Y< zJn2+Bu!7w16xwLxf*m6Rqm`}Bqt_e>$x}=nxC2;h!O#1Tz~V3fgSX=$nLZflysIda zaLEs39MGsRr+`FP&DX z{498VtyR;+n6ftUWWL0S#4-T;%SSO|h<#?jxQKN*gW0e;pPjRJ_ns$Q^P%^>>?dFJ zf?s;WoB!f7-Tgdw&jaNyk-OU~U-`=2S6~1BC!Trcz84t$;cl2&%-_e~IEMF+7_SaT z8D=myY;7&@$Om1DQ>RX{SvjvS4ePWsnfPWyFS)I@4*VzMp@aJvw z$Q{r#=#?w4!3ku|zb2IQ8m|Ke6{bKrG*?Gl7!|(C^|;mmB7aZHUT(A}MOe~01C~>d z9*b&u$-V1hDJZ!t!U$v0Qd-SfN{Vi&sR@S^F=&Pcn`vaT+Q(7!i4`zi3!&1xq7x^{ z0a}ic@eL6L0Rx`eNk6tWRgPD2KyrNNo|N4#=GX%2;KKFGruk zV7bu`c}heJb0eLNBe088+}7>-W*BN%JKIC{8mCQ64tT)|ZbJbupaO-f?Z;6I>*lK~ zD;MrwU;XUYz3Gj=^fSNkk{5j7BOiEVt@Z4?Y6!Tyz3z3d+x_m3y#HzY_nq-Puk~Rt z%nAxBUnW(oz_=*X02DWPb&QK`6a!9fY~axkeIUj$8etZiEykYHrrn+an5F?vL)!7g zPjpwv%#PcEFMlm|eb(E&j+;H0r};s-gQgr*C{lJi+=IN@S)Q6nVI@VO)8JYdGXHU5 zQp*!cr5g~Tc>T!nuFt6B#Ht~!trGYXZ(J{TBkKwj}5R>ccMP%Rlxcc zz+waCoG(GW;J?DQk3|`fz+{ks1tdWm=VkPg9`W2dL;}-7*3{;uw5-SZoK)S|Sj}st?ZkB;giu-HaD=ik6D{C;5bWLk_mBrjgV<0nBQ z1f>pSoo#+y#)0Kz)^i%gO87J z_sIY_&1f>o$As6ZgLaAtBlMu`DjKF4HHjBSuV>8Y&KgS@A*r5cA&?Sd^yF|*xW8S zd-V{u#*lZd9yS{QcgIi$xC3PvUx_MSuejzz@B7~8zTn4y^>uG}{g=7> z1s`u(;LrZ-&t|Xuqu+Vh8E5Q&L4`kTW&b#bWDCg*MIU<}}i7O;u2XNV#J1EKsi3>a1 ztl1fg*wyY7`jp{fEZ>kETP7+M!0JjbwB480!Rsaf(jII^tzq=hXmNR z%nv)IkbfCJ5_oXY)5`h++b6?DgUn(;#TG|)LJRM(Jk1p$9WyC8wSlNIDO;xufS%4u z3q+vCC5gX@q>EWYy^UKH3jhaZhf(LdU^ZYV1Bw}DTxc?mVbpl7@ER-eM<3xZ)X~f8 z%IX>W_Uw7oUtaZw=l#@6|HqHN;~npKXsxvYue;Cw;PrpS%FYWD z-E}gvYG&8j!++zyIQG2Hy@cj6YJ>J9P!kj?Fey9~c-=zX_hi&9ZnbKPjhe%Z>9tNk zu4oDG6QB|kvhh;ZKv0<#SX%+cSf$&@$ZEnM%i2l0k~*(257!7a1qSDwfBLCK=i?^J zC2P(1N?2iODTG^(9Fx7K`=w+cCo#1<<56o5!P?ah)~7OB8uWHSid(YDzthuGh-EIo z*A1qZ-6foMmy1%27kbhqVE0Dc(w7c=uxJR;nUJVJE~9h%MeJ{AONPoRHmhY z<|;=bPJN4R9a!?Am>i75kU3{*%}I{7=2) zr=N7_)S*jit@r!U|M3%#IrrQ%f7F4`E;g(h;!S=rryuRA&hR}CBx_zhcO?M8i4&*r zm@6;CIF9XkaCa0f0yK;6^8&MC+uIwv{;nyBiS8Sk41l|d%xoK2e`mSu7k|t*PJF~i zudWr>(k}8)oDV7tuvxrZbg>0o_(Sl$pNHz(fH@r87_Y}h3dljQj}zRi$g7D5u4|i& z=JI~xp6%Tor^v}MlWw!_WST|Y&f;53XnVLYM6JvUEh#-Xu*GS@VI@tkrgYBb4q*7* zS&yNwZ<81$0@+4czZ;TcD6)hdNEWgM%Y@TFw_E_oh%KVkw)uHyhb}<@a^NkML!BZ z@P(Z7Cl4I6&c&o12MyRh48P?0z^ z5V!IarWcs2UVe9`E6nQ>7-ivz&-Prftb8^@lO+dCU37y>4+0FR23uW;CQ8huk2N4I zfe?#)4w`KTz^h}={B~@PE2xW*ffn4k2e=ye>TblMykRJ?GKBZ-BPvFixxwo0eY^Mk zGtBH4Uhtw9z2@b=`^w)cW-lMg@DxYg<-Xwley}gXQY}NlSVy=!DrGZDCIGySxZvD_ zvG~sn#zlcv3dd*V+5w=VqLjfFc+9#BCeK+ zN)1Wj8DKtxk6XaXnXm`_9Lx{GN5!>SgwTa~0;Q#hs8!%ytGM=33xTpS3m3%p?`s|k zxoQ#8c#fm)rUzAm^e&6iarW71DvU}WKLMOL3Cve|8S<==@s0PIjl}YS&bkZ{>2;Ic zBi@9aj5ZkYMrDgVOI{jMU23}wh*WgLP6aWG6g)UxE#>Z=SEvl)eCxUjVDCDxO^>)C zDg|fqEOn?21z`iXWT_=-Jc(He0R;IbVWyKeo4w`&__zT(=Ud=se-%)-m^#Waa~O>j zeL8|ivl*~Bg7NZ~!1sJMu-NW`HFmZP(NcQdnn!Pgf$dahsZ)%+JNm$sVSw6EmVl_H zw|a(bIG`_t1)mG!!ZmG|gvBe3O%|!-2M+vXI6-J0b=zE9b`$6~erWG;z2?q!`WgXd zj@8*o3@{Wp1`gsVFM4FG71bT?+-EeOcN#Q50>wp4xf{a;&8fxX7crpZa-xO-+ z%cCISvZ0cp(I_bNeq}t=3haLx>iIvgJV&F3YA!g=g6kn+ch2<`*!CgR%YFfM*Q3&T z{X#upom|A#9}cKa}zjz6xcWsx?uMnV1?7%QBKrrVl(Rm>2}WNyHg(%z+K{EU0$R00&5fSqGO^n zz3{G8&NK~6ggZ$F#^dy*%s`$aL27^Pe1dIi_mb#^!^Hrb&tNm|KX+LkVobFO)Dn6~ z2(3V#DCul4zz{WPWl%9g0{3J@fRF!(y7nme16}~D$KY^yTkO{vatJr#zH{t3!h^Q5 zfY(F7<-dt>{*Z3znNcta?3)}@yPL3NVQKe+uIr6~5-hJ9C>stYW1S;+F2Fc&+1#4j zPNT|{(P@zJ&p80{z!DjFDwIXY$t!%A#h6On+QzY}l+7S>8Z=z0a}x{lryu znVONR?9jA;q7Qmm3h%OfKrmE{xzdYlFrE{7-sOrA>bjez=(_Ciw(9<>s6A6EqEF zPXJ@}(6KtE+r@|GukI6f7OyA~OYG3TwUXrBt8p~suNCQrtQ@8uGU>u05 zPoE7nSzh(1OZQ3$%32#amfH`CKr#fo2yr+rakP(-!7=lK>IFcdw;xu+Y&Kw4hUl*$ zj)bn}5xC%f{n6uCWUmgdBe(K_3;Jq1wa-wJw+_DTFBn!+VzD7mP_P*N|Igl^hTEE4 zXMy0m;@fAqbIz&ER4P*`<)q1yWg|~*Jm5hL2Fep%HZ-^?y6EEJX(-@n=%T2ms=I6o z3aX508r&EtPvuGSK+Dz5L*t?C<^h9UHXa37mMzOlW!`(wywCo=SpDOD--tK~e+!?R z+L3wg-uwGvSg|5vO|fDHKI7eQ#o77{#aEWACVr7Xs%jW6h`6Rh^fq0#v=spU7fcZ` z0Kq^$zXSLwJn~2Wc)sy({8+4SpOSEi0A&DG8p!_Bh&&hR5+TYX;F-S;>^&($H>jf3 z6vg|$rXF0_1fX{+5#_n35syELxb-0N)_quJ;Curd90GUl zi0RKmU^LNX)WEgt-EwU@8)~mH)edUAU&YD1%DWux-9XbrC_|9PfwYIu2I8BdZH;gG zPrh|&v&$b_}S)dC3?Af;5sKi9==u zBUMDb3lL+cRKC7SI5d)K0rD#H#qUC$j~l`ahM)%&5GI1Ryy=k`A9PM!l?%426DheI zqQ3nH7y{m=oB$m>0(}6}Onv-53IxJQcn^N&Hb+Xx(f9(A$n2ySoRFYU|AM~j^V8)PUuATV}r7YFvw5n_#TCU(u7QpyM86;?Gb?`7o44+<6SQ@ z?tem^Y{v&VehDrNJ!!b!3ILZg4O4QP{+CD*F-OEt$3tKBC+l(}V!4au+3x|CU2#4UAQOClhX_4aZNE=f%a9Avi`LY~1WcSPisNh;K5zqdkW@?$V8r??UGLo1TC^G_36 zqr&-G9yB_2vFk&*P}`xrX?iAJS(uT!$sHFf%kmHK1a8%Nq49-;NA2J^W zY*1o_D3i|lGjgY$_96}uJHf|+Wv@c?D6w&a=t zqi+d&YXBy);P*zCL&Q`KHc`M$k!^&j= zfF)4wzah<4$ZO2V-#PYyl$m9vy4B(EKKIap29Vx2Nn}S(rl$5lu3y3O+;<@3Vc~E= z)?l!iY6K3~zrxSJePys?Jd18ZFAyc^@OjaoZLmE5KIC!@*f73@VbKgwBZ4vX&PY#m zW(x^32_d#|G5rnODru-xJ|*dy(}n7SECnIl6~D99K$AMbNnGXJh%)$O$cnVohU!Sp z%O;N)okN!`XJm9ar7p?29A}twg-IGZnL0h{xkXdy6o_mw0J2I*Q{OUyGObVwkMk8d z2Sy33rd2ax@dzOu`T}Tv1WT3BPy*}qIX>kb&to$y;E>AEGG&2~_Y}|xQI)B$S(nJn z)ixN=+7_&N zQ2bLCAEDmcL&ifxr$HNsb&))g0483>RI!hmvz+Y`)6R-f_8g@zfe=&AWLV&($`T+E zGJ?WUO}^u0LOl96&pawPtyY+q+62Cu6{)gQnXuFabFFyC^Ut8pGpz$jp_1K|FN6?A ze-X}&KwkiKk;LwRfo-}3X)6HydrYzf{A|RvKbdd;!EeHSU-hA!U!Jk5G-E0xXFvf( zyeSX>vLdd&33$^tA~&xLBll`9B+)-bT{4FQ@>-}Seu=(^3pq1I0=pB=fB9vUeO2#O z+lZnx=LNWS11N*TAVTz9g;F58k|@+b3}yq@iq%E%+V*#ns&$PjMKsMzO@q`%gT>6) z4A~0eAlM{Gr)*GhRjuRZr~0(nw&^m;)A)vP5mq9TLSA{~eqbItiWDbs#Tc%RGx1cz zP1{vI{-ZnsWMq7=E<2wBkNpYMYrmCFq9JWHB|Lx*V}YQ;ERC>Q06{3stKcG?Z%wpm zBPB&0r`~f-YnPDrxEmh(2D%|>`KBfjPBmnt+c!CIT?sEzcse$*wf(ESc zIpPqI#Xthb2+x>joZvR|EcN0c0;NC~P~qi_zD3o9V-Ry?O4PcC5|yTZ0Cirp|BvQe zmx=_K36v5j)5N<104&KtAtR>`N7WU^wf4RL*-Sn92_4Qf3KpeIxO;Sr&;HbRU^CC^ zc4&l&H=i0vbqBHzLHz-Mq+HUE8g0|1NLvBm-*eLGfDcYF{WtNZ|MJh|(|_-$mKx_+ zHq`7P;!?S=GPTeHKyI+y{2bu%KZ~4CrAeA_f=e(#3e+@}kyuL2b^dl_$3#qr>uX|j zeAb8+WMD8|Or6!gcD?a}Mh`D6Z!=j)Vo38lYD-b{TS^2OPp@ZWw(bqgpe@^Us?(H5 zTMHsoR>Ze6DbYK%V?L7YpNopQ(bxEdcoxK0+(pCdAsNlTas3)F?dZk8G1Cm)m4uj= zABusQ$>cC7jq$1Dt-QC1g!APLxb@o*kN!~v)(Fs?Y^za#*^6$Pb6qs$vQ6&s8+Mw7 zqYRo}4hU5kSb$n*1bqc!bsv^z{{c_6RBPe3lN*bA7D8sVsmT2vac9%N1}PyEz1~~R zM#{oa+|gljOoI?M&e37Qqz7Ep3bpM);Y6lKy+HLa3T1xg;kNu!wL_ED!_Lg>+#sf1 zWKa&N3G7TdS|d%KUl|n0i6;1h)oKO00|!m{1DXhS#awIK@2^Xu&V3w~T1kJ9c*`?S zHPb$8v4w-*lMT0N$#z(ls0vVWoVON$OP00*z;8m*-1UlnQGj`E`RfpnksNB3! z-3=FAIc&twph~b98GH!U7En6L>jgvnIK)@fG=N?{Eiiyr&d2K>AmejqR9AD>gO0L! zPrvPt42Wn9%M}ldGd(gFhq)6c0ev zGfg%Rh$lmO??*Vb<42@SQ7Rw8YZ>bMcO{SGX48dU&nM{n=(Fpt*l$w;0R`0n&VV}Y z19hU)-$dBwc}5AI`=83hJN5GfMC#+Y!_vZHIkRbhD9Qx*j!^mP!125sgjqLT|^WXt2AH zZpYnnd3~OpUNpg4sdJ|EyLgr065<8Jqp<-CD~5xF&k{&SpZQBz5CRZa_CeYwRc{*2 z)5?|BN{dV)DWrKo{d?SB88l$1F_?F9K14i)eEz$T^FcG!x&VI~XfkVicS8aKq9~Lr z=qT8FWeJSoY2iRP8ed45;9mzU>l$(W8Pw;$2YLQ-54T$(Mr+AS+%s8@lVIp0#8nOM zI0zU9J&K$Ir(Q4gEM3kM!`lmPNBP|mPmp5nt|N!gqB!4l0Z@+<{X6m1zk4nkjGUCY z>;N^f%#88R$bW&dnh19!=5_&xobHOY0kjY^vjywPOiU9aPev3v41(J`Sr^Ja(}d8a zKcRp^8Nk!8e+YX!JDA3!pzW{6f@o7Wi65RYNknp+q9!79YXP`yX)6HyCZ~uv$&7y< ziQ9A|*22;{v5wdG+32iQ>H+5Gz72KtWap43m?nZO_^R)wP>O~l^B|k6z^Y(5JZbPv zqKgn+t_yJeRwrITpe|GaD^qG3W{v~ji%IbUOn)s9gcLz<3u|xQ%5Ce0+tV`yaC|8L zIPr=U%--A2AumS4EdGK)xbR;?r{4|mA_hfKf3T8n-aP~H=!1RlJKUK6gt-usvnpzy zoGb_dB`S10ryPbKMsoP4``s(Kx2Eh^hG&xex zc;cui%f8AY(1ZtX#0$S+k|?;L$qM6J6Uq4#KrW0YaK2$a4}k>1fQ$-5in!>cYW!oG zaE2?G)VG?zs;syLhd@jdj*i!O`ia+5!>^THOVSLQ<@*jjDm8va4wNM$fD(l;31yx( z0SW=DX~LbOV|?DHzYFX2V7ZdOLG%z8-bUor#P&n3h@{X}I4@(N6W}&oqO=tNev?x~ zByhY&$swK@7M3gu~ksx~2kq0+({R=~_WWrQ%JCvj16DZK4)gNUk=1&!lF zKj>Qjg|3Yt4TO)tU97Y9U7vMqQ+%bt_o{l>Ayr?2ymAe(zpsL?ModW3F>-p4mnImb z{5Fau3LzoKMh0X#%lSF-x$nRPB9B(2;p$fr@diJ}ft1-+`?%_{n7IZyScbhxon7~K z)x~5#7HCXr%*c9%y!Bg<&-@+W?B!;L?t?Q(l15p>lX2&4MM8(1RT^Gg&`CkD0uqMY zUZ|pB9NYK2I9bO`)lzAXj)){0o6xB$JajJZH8na7(*LvK@cb%bHDQW^smSv`fz7<& z==co(;g|e&{O&LK9Q<#-{L8S+Gopkp-r(Pd)lDZd|+8^0oOZVT78#WCMpzuaBs_VE?3$P#$`ySrvPH% zdJ!R#(@mq#New1Zc>zd5gzpUVbKin`w&`Z%#%N4+Ot84<5jJy{E){qNv56J~jrmdod2$>1{C6UE@8i+CYN<$81;ZNP97~0dmUdTy z+8jg2l5r4!gg-2-sGKjPf!L~@#aJd$Ko@XiqAoP|X9j9L2X1^8<~RIR;OrI6O^r;M z#34Pwj3;RRsuK}ijn2yGIshk(od-Q3fHu%=i2%dkz526dkhveK%ag#uMlwEjN)8`g zc{JBxuq~^&_B!lF1lzftkE2vFZu&qL9G#rtu}2@mpZbr!22VbE3s}x@Wt#DazTzu! z`{1ZWWelzDniQN;kpn3tNSu=sAsI7aEiq|L2Wln`j!yAgKkc13J3UqS=K(FCPXSMj zK*E9W9PDjow%|mFf`W)u#O^i@z~xF?0pJp(vxvxyy^%H1l*hl!l=)E$N*uzatayrTa;rScT_Cg?YMtSH%ffHb6t}Y+EYrfTvl@A0!=)3x^;Z`Jy;+b?mY>G2*c12sM9tH z9R+@?#BwgSKoY{{Tz~4Mw42D}KT>fPH=r93KHI@qhyIQyV!T`fP>|2`Bz; zOK~{gVBs}*%F4c3xJeQ50llq^R#U8iWnQ5?d>^n81LB+BsD-hxWefSTdKK#E2&QAvOd;_G<)2xF;X@))cOC;e#Liu#> zLYvToH3gw97`LIZ2(=Rskm8n}Oydv~=E<`)T{k?h+=ZbJu5KK1s9DPrB@!>KAH}WJ zg1bj2c1*r#d5xBv2~7A#NyP2}c|sEY}jh!rrX zC_XRkq_t_Yv}Z=uu?;IF^;or%r zq9R8JyU`onOJF+RgaN@}V%xMZ9L|%0Ps5=L4%cc&DbV*He86glm*B$+w<_G>Du$-tNYup|r zBOHBFg!cV0t_KUig0qfdjq&f9~0Insgn%qGwUE+6AGSq=qA46xBm_tADuF) zpBkAap3=yyygFE0K0snx>0}Ck0HX>P09W_-@YLgvG)qHAinn_ByU0I*Z`{XWj1;7Z zC5+>3x=d*+09=Z+4E@1s5^?WV+O)NS{h1iIInAuyZ`Ef{!# zQIrx$*h#)`+XyO~0h}F9*n8ozAtDjFhHpePU|i|YsF6wNIuf&}Z4F973~+;-o zq(zExb39K^Px01gp2VlV<3*gDt(#S+1ikf3p+5kHFFNTV#GEz$rA&DCsmGhk3cJW{ z1%zh@l@ia9Ox^@(w2PW*A5MF zTuRcfOl)I8E{E7W@t+}Yem=v%+6#Q7P*oMQ<)|-nV!HoYV|va~t4!--cK;1@ut6x^ zW(C+FDmzmn7@~3Vp0?!|x}Es&4*98L#@KxCD#F5wc&D$6Z|!)ZyKceKc&%ZywLpC_ zu^!uLl_`pw`&AP-ekrj3w$~xnl0Zxptt}c~SO#;lF`|a;@aN9Jb$C*!V@1!FE2z(X z2T*S#6*OvO*bR7#1`6Q7afybfP}XKDcUkZA+90eO-^>i8U^lCQ&GE^~TEEN?ns<6* zCSn%qY9djVW7KE90rlEvBI|}nNSbOr42qdGBs`35X6=%jvxjb0B*1#6vTahJtL`z5 zPceY5O!WiU%*ZjTlO<5`@btNVWpk6O(}LXpG}PbuGbj(g6?qO!x~oB(GZNT*w5|*7 zjnO7B&l}8}4c_yP=kek*PhveUh*GfB#1utd|MUd_=oet8y%Ghd>kU5pJ@3HD=~=hd zcr60FZ7?_nB__roNM0^vrZ39W@tg7oK|)s+< zM-F3-%PAbzhQCa(!7fuT!#?w2|5kQc$2 z%ng@z92A~X)`bk6G#Jr7NW&HuoGOqfYhb4j-G!y>deBg=H4?}vkaq(0#Xp1mf)5}f zFx43`Nq}r7fAs?)lfMEq1t)4EG0&UEgx60Ywpn1O-}y7}amWR0bwL z1(v$tZO^`;nfqBpIi<5UV}xz0r<;KD+PC0s;_Fl7gBO zo>HQROZ5H%mhQ{|0F`C(_$B1?--%^<7?5RqsXzoZ_JoLVR%D%#IqR}%Yuqy7YwYD7 z$lpF?0{Mi9(b#z+(k5WzPu~BnD@GsyRMy=XNu@Qrnbvj0Fbppl%CZ31ybQeX9f;Ml zz*6M%(CY%>B0=`k{}$f9!e0OIri0qP5X0(pL*Lc2V+SGw;-w0cvang^vIfhYy*b4BYDeojtK z@E?59XW{DpKDT2up4QSceNht-5jZ_N$7g-YJ8*V-ruMp|?y1-2)L?;d%?O|TkY7OZ zISmYfh)CUrYUFLxB}iKV;F2U-0Axnh!frx>^yGo{co#45*4mpPvqSUv+{mWK~FXiv*xZg=jRb_g@XWj$r6_ zoE`z2v%r;4dIDHm!*nBRJyl@}0Wgq?fp3W;f)~FSxfUR5c2h-G(vsAfr&v-88_t;(g&X@m7aYUz-JhMq7d}&5?1cS*IC3!6IXE-NYvcmnRL-wzr}b zdXMWV=b|f8U49o6Fdt%h%lnadi2Of>Ev%~jAT#BVmwXXUg#!+D>m}b+A)u`V4Y-+m zn-rDS8Vh9U@lt&|6Y}U#$kcnNJA)y@bE#%QZdRy!pMv~7{{r>FcL8=k52GazxxYNXWmp8g>!^hD5#b5WGamP|E{;ZiFW|B z{_$8}Dj%Of^GLr-5v}Qcg)BorrwKr0W}a_-04`VB3ILZRnHbX}murNYm$f-LT0zuA z#LKn;K$>upSp@8`m5AjC`PT12mPdMd6EZ%a3h4v-p`mcqRr+>QvptnfRp1+ zhl_7sD?SG+H;Tm}r0g^o%D0 zK-99!p)%sbflmJsgHWR1Ca`0kC=^!KXA~H&zWp)8Y=8#|B-QE2jwn)aH5@t%X@V=@ zo8>@EDL|kjkjo4_{J%wg;CJxUM`PH^Q}qdTHX!wrNF+12Rw5XsDsw`3jCr4IrPsWRdT*95)L3xxaAc%J3Yl8_|h-L@#*Q%eFg-wKgQX5#;3jW z1+353EL_O=n~7i10U<#!B4oEA@+lx_+bO_Vlm2sxap))_tVN5n(y_24ko6q(h3^9Lrns+&qKRXfx+{B-ckg%|lRl!}lNRI~IItnSyHVPJ^y9mJra>n3_xhEmL}L3E-U3E^|-g6U0qu zVuWx#qE_<|X(2!l)03$>gT~2Q1BTJP)|dc2AGpm^k52l1LSqW83-iJN;!a@t%)f)_ zQ@##){t6OuaP-I|njnxMB8$xQ6v}8_Y1ytuwGgT;kxAH+$0#{|%p(;;!ekJaDaj)O#lb#69F#!CjI&os zg4^_)oVEhMB}jXFdl{HAgJ!@+4Mbr;p1U8XRlq0T2vq-`;8p1-r@+Yp zaBzpmrXh=hQ$hz8OeOvu7V-rJSpzi!Ss8wCo;Z{1LdH=ySM3EP;@Kn>cJb>ee4!;<9!3ADsO&`MR!oJZvY8?XF%SsR=$ePcoqP) zB4dM$H=sWIO~7(UACDyg(8C&;jLQ!qDkce$79K^*5%jQR?ZXwm`pu7vj)F!+$ox;- zWsCe4!MR3T01JdPQZufG;G%u#REStfAkJg!gCJ4AfXsr5tC*kr7U1L@SlHhVwg#;A zVbJC+P}Sw)rCGuik)XBEgcSR2h}l` zD~HGkOu@iE=ktQk{N%Ud?DV|P7vYOE#X+4Uu*tl^`9V|^@B5d&|4%u9f*E}cRv9~S zHV*AJ{pP2w0B|YN85bS`5fi0q5kitu5?oX|?l8$L*T`iwKL9d&uFgik5r{G&%08AC z-;b>4(yT;OSf#WneXh@N?H!LH&qRnU?6|Rm=lyNIV5)rLu#W z#hO<;a%JXq6L{-)qRxkErVD^J_jW%JQQ!m_Y(u0#jBes*RbtrSyhGDQxzBHpepaAP zns-(|_k>VPcvv{-d&(KKaM&YTax=TnoT(UMjQdv1-t~cj|)ngGZx3KP@Gu|WjU&j~yuRaBb$HyEy0GnmO zyWjRKm5MeXUW6L^tPO8$+xAGb699Gb{Hi=5AZ5jQXe>yb&Do~QlC}cCrAYh!k|QVV zi->|j^LUPEM4U9QNAGJ|4{IZl92Rdx09PJHKL0-8>`)9y2j`m#gT@)BogG|z?lI)L zn~OtrLp0VjLrMT*rSB7&ed9lZ&8`L*>H%ZUkndUPQoU}kCJ=Rn<@90feeO47_r2ea zYhV2%*nj4KhvhDnHhVmqkB0t`WauY{5=suq)Xz`3ow3;fXKUb8@9(@KfnjFQM8!-& zO<>yD$Mv^A0j$r7G{ZlN60)#7L3V^o)CVQZCkh@QzzVO}1Q(b-qOL4TI@i#STl$9o2lOhMlSH}ey(;%Eg z8HBf$1PUPq0FIC7lAzx~5CI*H%yVFR_^T0L^Z~4B?xTF;z04&Rb7vJ;cy^@ByqU1SnKCJj{x&&z}09=|>t+zK5T>C=~1cH&j0wy#f zoQ;?ypfkE5P0XvC#|aBc1+f1{)VF>=&#*b7&B&a%a)Ao$Ja8RX-|!IXIVoIf!J8(T zRzQ5ObXwJtwP)y~y(1lAac!5YtCUU5dnO{ea2tF zjj#M6Oz~S#&qVelkc@W{SSTrAn{(y1#n~xM{PQ_)buB@`rC70-Fp&wAvX5);d_8b_ zPF##ulo0-aE=(nW%Bxd3M*ee$1)P5aT$V{@mS=a6FMJ1L|Dg*GpFA}J1$9yTt!e>l z^Q&=g#cufYo-IN5!#?kR{{r&GZ$qBFEMO$SBKl`&pj&?g_?RyxEJR3vGq$S6!yEa7LCp`VhaP10OZ{CX7i~Xmcsq3Mx=a z!P)5=t4VuOZBXs3r{6(bB%_Yv^M1=G;lT$U#QJ>3yWjdOuV|LA1(qh9jXjJ$0rV?M z(2_O9q^-$r#h{=zq)4pFPVNGmtrOtoN?QTo5~PUxlP+akfvNr6t`$McQpA9zhEInL zWgf^mkmSt7OMg}2Me8~0-qWbhehcdHZJ9J{Cvbok^8#!(*nR9iTzmFW%xgLXnI75i z&2&>Vgrs2jJv;vXK*OA`5%(YgEd%Y23{0DX)%+B8f9LmN_cOj0S!bZ0W2tlyTb6U+ z+LO5QrT;JNzWcw!=75e)F%@2UAZ5Cdf6?L`{PrMt{X0p=DBwsCnRfPZ12Sm~wH7X~{pJt|S~L1he|jc?G=lghlhd4&;81nBR00%IrHMy4J^-0)+cE%j zO|9A%4j58aX9V1blv5ngZ?(e)_1e3Er~ek}$!*0?&}KZ5GIYRr7oN>+`|MK~N{v}f z4tm?(P+g;irA)xxBlbyKS_oi?Jrq8D`P)z)4G znkA_j+6QZkr;jZS>&==Q15N9f@TYk$H(-thYrygGDZcazKMlX_)8B#h`MGe#_L`vP z@ohNb{IOZzP1UR&EfVISDI9`5(j6_}NL;;!^j!dW^ev#h=7fyl z1v%fvmA8EbZhZ9zfh(Vf<*xYh$fE`GGF*lzxky^oMWF!69g?zt1=rv81et#`XUJp^ z6YWj_>D}G&&pqcc5R;Gs;nx~$BtMr^ED!w=lv}?YnH%9*4sqiiYoG~>$bRWfW&*)D z{*YGfy_fX-(R|_9kvWs#YY;6mXzl^rkLG@{7_?JFV_bk3y@XQZ9_CYuM^96-;AJK1 zhszC4in2g>LM4E#GwOq%2R!|Cz~)H!ko5!}6Q>~l!;+w3_gL86WHVIJnN*FbvsS`V z?;apmGUKz$h+Lse?*zX1hk@%)VpC7&^;ejcr{esBFW&^9@n}M*t%4B zxldgOBrhVu;*JcDDy}87VJ8CA#7I>W={;H#&xEKh zbcDyehnitQK`iHpn{NZ2|5o_~cws{fZXlF(#_H-WZhq=B2<$Pks_CC;u5w>cp2XY6 zyqU5P=r*+X~NYn`EKlg z?%xCM-fSk<^nLB2Ed}v{2w+-uzBh$cF(8+~?#*ks`HshE_J`sjgLvj=Wk(t_kjcTF z4+{#Gjt0h`5OIyR9J9{ItDglt`KOV&)>APJad=OGL}=Wp&8L}57%q*!nxRMb)EI(K zj&O=`^z3)idE4;3(0kmiw~qt`3boT46q+pfL37bHw2;G`AcR|1hjiN%_}Uzn6(j&) zIY)iu%aM=$F<@S60KKJ!zW?vev@sJ<1W50cw@qfB?=u3yb-9|5AG^zF&Jh&H)`8{z z--YJx6322;x5FdY|3!y%3*gPN@*n`fij&+4A;AoU|b|RBz}~~y-xW)0TQpeAg{a&_4&UKoNG_j z+Rz1p2|6;>ikqMOH1?i)1dIK8#W1VC4@9gfl%k_4g{YGW5p^U=2J)a_=WYK5uKm6r z1Fk=cn&*g#jEbbs@Czf-R*0d3EE8fm!Oj~#7gzt#FCzE92+J`L3jruY`wX8;a7z;I z3IVnNdk@^e)fXNGPG@F<5Z^jsT&r^tV)|lg9we8m-dlFQ5x4Z*j=eXcKKo55^?N z|73jW)rGM^bcRpP-32>blwxw;AkNPCDg$v0)VKU4;4}Xp$mN*0sT_;3To=lt^~c5) zuTQ@tGIY})FbHa5%q4Jgdg_dthN25dAgIZ^R$PeR;0fiEM0%!rIadrLtxfDWT6-+5 zF$Ft8^eXBgOS5lTvrN0kol0!eWl38B;1Z3osX8=k2)qKk*>0y!m0^+zh02 z?Y%iFgo3;qh`~Xk!L2b32byum&HN-t1W?Q4sL#D0G2ca|BI!w}6NyD2Xi#vc!GH-? ztm*jYTiVp0(7f>J0go*>7)eUq=13PJMa-Mmx`R&Fm5G4V&g1 zA)5Ukagmz$Rq-0U_B~EQb{k9R$f$9g=`8{IVMzQ&jD8Q^mY@*Eb=3%mQnu|3B)6nk zH#51f$ej1~uYZ*LciVKC(pCVt9BEx^{g;6_YZOj2qY;H>^OT1)NGV8wxhET;KpY~j z(THc~Ln2A-(`}GmoFg9i?Wj-w1z>ZE%pI+E?W>vyI0Rn;aX#bf)3(n$a! z+O8}yn2=T8Wzr1PNKyyu3i;eOBbOuo6igb;)*WlYd?v!}F%2;I3(TwgZXj*4uG{l9`LT*AP((*g_Q6Y0M+>wc@AXfyd?;)oJ1IZKiF(6ib z{yurJ(Qs!#*l%yXjePbS5j(ok&f^inZ|W#W6QtdDw_Vv@xUiDs-HU&gei)ca-gkId+|h+c7mjN_9VLX2-?oESxRscN5JX&v{@MF`(R6r zQ=k7FFOLU90Moc9p~?bQa$b1;W}6fG9V}Cm(IgvQVA)vKAPbb7q6lDJ%I?ootlp-} zl(quEB}fr*UZ&}TK-oZq()7qCT@xV4vv(-nKaz`>t%tqO*97&Va+`G?s1^#2?=-vN^3RRF0!XoQf*%E*ucj=sY4;v`nAztizlB)!D7FaG=3 z|NL*pa(D%y04dPXMl69?c5vfUpTh2qJ)RT9z!1{rd#T$tC%0e+ZcsQfF^|#l%mSLe zgZ;yNiskw50pbcWITpq58e3P^hG|eAkt^`dcX>Jzl^^OmLC`*bPaHRWXN>@8PHsI+K4)8eYKJ&tMvZHJLt6sN<{0(G z_XD`UkB`?+Yt>~vwi*kqFV1;w9kj9%9`1ge+f>&-8~C071m((OZH~4%;4+fDjGs0} zS~tc*KyB(*09}BQ;GMG8InVm^jFvER-hpZBYct(*?!ZSXGZ{5djGvePc<+CJC^$}7 z`fZL86C8-VE<7PXp^)X>1AlRyh_VLoa}lw2mTkHmX)6F+j?Ro&xhx0w(~T_)=W|{r?2LIE#LP?WXPM8i^M=pE)&KCPft}ByPBKySTHU&i z8^7f#OlfV?#4MUtMuHm>1`MRB?y%=?xT~YiaXk7v^#?2D<~EjR|1M(pk+xM+$)d%> zs11g-#W2wp7fu0@9A5z>IMEq$N}y?f#1&_R9SFVm&pNu`NUMT=@LjP$02DFoFyqh| zu$R5P&NMhfv&y`lRhLx`ut_KYyoJT@^hFRH(zYR?a4G=mIr1&u?n|86HEK*O^m(69!Fl zh^K*UA?b9W0+^Q#DuO2X%5|8E+{Y<8T>Yze*(e7E1huU8bUe6YR!Q_iOOWNoHZ&TENx%3{*s!HUR!jX7X6XHeH(JDYs3($?5dYhn|^s%0G;PH%1gO;%wLb!gN7e zBZ-Fg<{BaEjM4;gT*%GT=Qj#u!%3j!og&~! zq|R3Bd|jEStt{urqnA;i_*&r6F9((*y5Wm~v3+W9)I57_gjL@|#MD|-LqXqzZbWs! zBeabYtNU^O(|;ZFKl}68f8q7md3X=8UUw#s>_^8$gc}4SHWb0%P95waPOxaxtF@9M?652}-<8o?RGKsz96q&jc)C}2; zM8$%@N@gA2DbZ(AYn1;6dQcdUsn{}NZBr1paY2gh_zKx*T^QOJ^^y_Kf+Hjl43P;9 z191WNdHph0zwp}-JJ*HK%6X>akU~;pSOQY@*oQ&;L{q`?>vvGz_?K}0)R$tK4-jRi z`{e{Z?icmF_0?63SLPZQYM0Ddg7^rJaMLF-v9Ug1{~O5l{ZnU_qI3zO@Yc}$9{s(@JVlljow-yet0y6{ z|3HIVd?1XcM*Fnys!V2f9X@8HCIsSazKz|teGRVvfuF+a>V)OQK~c~d0!R$`7o8!n zNwp!3j)T?4Y9!pO(`b=IGasQo@<))jz67YVOxYAZ$Ry452@lV6YoA`DnawZXVrYZ&xhqPr6!dC?c7)+?m z-8M1;eK^)8#zH(Qe}HfiDeXU?Hfw@r4r2ciwTVR4mrKfL{7?VFl?c3+PO3Qg(xD}g4+GDFiAo+=VP-Oo}A z&Q4BIqR3+7ycRw+XWIPLTMJojj*vk&r@g|^nau|P-Ad#99t9v#7xM84!Iqqne9bxt z$AT!U3gDm^_Y69(n%)kY4ev10ScLLK>h$;(S=gNJr8{(`Do+J}D4aynV9HZ{N8}ldq2x9LM zKrzZqJVRAWydjeoQ4WyVlYWVKN#J3Avq9EIEk=D4{^$fJ&vC&Qb&ZOfz$g7POxHdW zx#>smdYv+Hh6E1PM}Q#fhPGOao2CI9CJSsmOeRX7*=& z6owj;ch%-$>T3wR2AhPXY)n&pOatn)1)ATJM zTAgV}GW!;ce-d_Cmq8S>^jEC|!+{K*c=t_%h8+o9dlT^HZ$Zqjw0^oSrr>i20&35o zEde0%5#%TRW5oV*VDO73MY8{1I~tFn2I4gevh*#JCNQL8UnC@`X}z}!sDZaNgv7GU znCk*=1oW*i&UfOD7|`7Dc)AYF5lR{yvqlrDE|?0h8}!S^d z91_lsTCv*Ms}V78BLQB%v=sm@N#d2j*knTby@|02xfd#>d29RRZ(Z_lR6a=*ScXJ9 zWlrv#z}j4D|J;HD%Qa#(A0uDc@=y$LjBA@xInBVZX zk>_{RmM(x1PPm| z77E8G0%Wc-!!`<^#2J(aqY$Z2&z+VZoFBCQw85Z2ne3nIB2($3#5vP3;`zi5$y(z% zDrhd`Z~v&;TzHHy(Dw$26vFL(nz3e86h$MjVIHUjr6%gl&qO}?ml5j&&RxOAe*|xx z`Q2j`1-Wdn?7s)~9sfug|Evr^9Zlh^)Ih-eozX<}NCZoVhrcZC4=KnTA) zQayU6ts_KWsdMh`+*oh5|I3-S0>Gt7`*R{b761=1SBB^$ljq{|n&#s3f)+s$5egBY zMt}4zsqd1w>T&vfv-i9+MN7#fssfc%B(k1he(nd5xOq|I??9=YBJJ1S$>*rc3il{)*nX2EubE&f0HZ`MQ8p^@ZtidZN4{dBIO$pA#JkIOkJJ^Ui>y%8>HTm zX!oiSG|N-C(<6Ndc?pF&>VlzV@$vzk=R(VE- ztNc8I$zz6O3T*p=z)N|09wb|Xf_N$pbE4xjXDQyLS%ahK4{O1Xrkzx+s+1}GP zvuH%IQwOg{F2{keD<7E#SHE?S2s*B%F9-@CR;Xr8ZZ~G^x(<6wwK?!QnX2K9La~}ed3+&(};UH~-OcECoE)rqxW0UE?=3^rR zA*34FjKYh!uVko3>X6) zuQbkCjWyQbMK{W)4mI%nNehnS)LT&MdHS3uW7Jy>3vp4xf?dap@meiRD851J^hHX5 zjXcBh^j`pOemZZaVxew9VRICyPG14u^tX_Y|1rdJGW41CH;r33NN{^36WZ@rkrt$j zmK9!p=lI(Cz&Y>0Ko$;InCp@3-tF-%g-&bnnltUF zrE#pjH-|ssfkMlGJB?|BTXQKQPD)w*XhfV0nYZbZq^$sOdD028{C^QRX`8MXC2e1R zL&u?Nr!kOtn(mTDkqCuqX`cfDrxIj_NUbhYgwtC9&2%j~kQFsaYs9@K_o43xZ!<(aQXzVUA$=aZ&sw|!#QHH;6d>2Orvn;^pX*@Pp{9a)LgkIsM#u(<=g z`ELWe&+wk;P@fxPEU2evsBd{cmK&dqk{gY0A9hVD#!6^tw)3W%HL6rNgL%{C0Ws-5 zPVAz8`RkgiFB^ zg+fkEL_2xVCadNM=U_nhc>pM@y%PXG3Lg61rc0K#0>C9n5pj;FA4JV_E;^C(;38{; z68!E9U07JO!^AM4^Wy$(fug_HdezrJh4AnuHMnZ2?fTOaa@OyYdD|n2Z+@Rx%bb z$)V4U^ff9yAj0@5{3lQ_L@sV}yP5HlOb zmgms}IiH|D_Z>i9ZSWg$x$Gm~{y$;ae-Q;60JWcDX!DhAb%#Ess+$c%Ba+GOCBfYK zTs1b#sN^pk4bR=|yd1U8s0)RD&H?sH2Hz0JnBNy!$aV!i+B2lvkP@1OQ4S){=*v0_3glQ`PT#^(K%kFgLE|3cuUm|nS z1u7zO-lMdZ18O(@7+|AMe6Ixx=xn&joxaCJ6JQ3ow+s<+5h1rb{?W9*2KF9Bebe`& zu3w?ETn3P9Tc?!sKA*;>l=}8lK z*e41CT)Az^s%{Ag5}cSM*n6G{_Z?PSg0xN1=8y$2kGESW6sjaZxK87PBe@8$y3IhUHHk^s;fw-dt%=xCJ}JsA-fDC2x{!I~JFAo*w(A7_GE zLC6n4B&lo8WJ+!qB07Mgn&pDL`Xun&_n~fX1DiWo9{6LZZ+V~UqW8O_kCD{qSeTf) z{^z^Kz(h1-;&W*_O%$=3WkORVT$sE}-7lFq5o1#yto%>|Bk44uW&4t4l*df4)C1go z_)pxf60$^o@OHw9Yr&51-Ja zV}2PD8b0883g+ufssd3p=NAbh&Xb5~A`Uf{hR!oCHBZp)Jz)DwxrX`qZ^g7e1@_*9 z`nDfz@%+UWJ8p#^!b$wLEwg5+>P~(fC+8D1+SZ^{$;shhgm zxq8+m&uzMFX)6F+s+4n}d?X|0l()8tKG!oDG@1t0iAYG}h>b|irbQm*US)Ylr@R77EbOy;jAKZBvXVVM# z=Q|(3@!=KB37sx*M}%1AM?FD4{GT9ieG#u*ZcwO50ZLhQ0ZUpr$9iOv$_z2FftO@5 z+8q0+alv3Ea0SANaqWl11N%NQds?0Zr#!|3wn(^m0M!>z$q&FlR7kLL-}q1OYkMF( zcQksA))ps1@dEUmAF3fMVI3plwXs*kKtLxG&;){lL|lCq%M0Iw`r@|%%UxML*e{mi zXEp(mc;G|hf$*~{!#WbYvQMerhH>^=>zT~nNKqRu7r=VGW|P|X30Bl`U6i+QJ0+3B z_YOf=_%Q4;`4eAktHD+j^{;T-fR%B5aQ&G6NU+vF>>Xi@nwz~VH-C8>0{HT#tpIR| zQpDBc%=kwo%CU(U#MG&64%%hv-fa;cXD4a1wxfmH2pYO6wOj1kxoZ+kE#6LHxVQ(R zYx)K(SmhaT^OJ$AZ$_Ov!LB;0<#wCNUPP}M1VvODtloERnvq+jnOl$ziN69t1~xz& zkU#^=4|qed3P;9Lqg1;8N;UN1BOUUm|0|9 zfcy{CFP~O`ggDj2{&|pwHd^#Rjb2!WM<8O7`QLMrxaoozujH+%lROf9_=SD|#xqiZ zg#^E0?wB^6VX{^qS`&nbb7hfFiRUJ(P+e9?B2FU8_5{EsPFn%sa;0OG{6~n;#o~As zu_H0`iVK;ENi-z{=mxU{7dy2;GmDVvvdS?}N0CfaQXa*m(^}MQIqR&t2oq_|#G8TZ zM%oFrgQ}3Mjk&>$wF?!rD3aiiSSWai%nKy?z3*yROr9yCv>W77j2#1x8ewz)8na23 zE!^gCnA(5?>o^}x^Z+o=3y#+t)R-~l2D|t*{Ki9Hi(i|64=|r1>q4J~*aZ?;rl)~t z{t~bpQ*cR!aAx-{hy(%?2{${`?q`o?UiH?3v@{frC!gE#tx;n2osM5ZR7I;!QYmGXD8oTOJ{%mIi}gPq-4T#P;qm zGX*`@B?mjO9+oA}Qn0%(%vQ0PH&`l<&~u%0T+)^=2_0dfWW;?^;A5TIuV>CSCft(K zc3s-Splt@h%Gt^kogMs%|^*1 z1#u%l{3KBzS%DavJ;@(txXuW84x7_NDIrbR=RSRv zbtVTU)1<(mcqK!0X;v-VN{eOt`V0U%0!QlzX8}i)p?hu9x>%4c@RWonwzO68B*At1!ClhzCit!)ftrJzuw?_gfeZPr)S zWFUaF3#Npi5&p8m$;q)UbkbwNLo1f*kTBFN4*@;1aLpbi>|CtVH5zMZeljBk-|mON zWU%Oez`YHw1OD}S3M{oEYsJp$%AA?M3Sb)q=#r+b0C34t?%mu3>S4`j@jc1BL_m^e zScr&|c4=Y53z=qHewB7xcpD!z0_*03_74(xw17L_dJv%r@5n>>JHzSbS(UT)DNBTf z2kI8i%PhY7*bJI&3M?^65@UVROwjt#C|)6RCQLG$gSg@U{IoDYKAbJ8o0&{Pv|DXv znSipw$3A`sD=FWl6dtiEft`8>CwrfSAG`8{_|VI zA_%g7sJ!B2GN72Vtmr>MTcDG8RwgI zvwEmP;#BjAc;T32HNL!l*`mhQ8mQ;y*i3ScusPPxqsIa0UC%7ksDcuK zx@@p}<>s>9-T`o_(^deubZLJL#Lq2cIpp$bNJjkq>mG_nF+gD8BE5kkU=zN#>Vt3Gy9VTk#ytjAjrM+zk;7gsh0>I@<$C>3H zX2dZa@Ad_$Vx4tGit7OzE!i?EcyccJogEo1Aa=2pWg&oO-1qF|w zAmQ;1bwQnNP{{ngUY}7YvTzIbvlKc5rnP(v5ej>Zq|bx}6b~I=aa_DzRstx~N^PS1 z1i4SWGtD}}bz=PY`9t`)HB!oS98vz?5pm>hZPVpTTLIvbrHD8K%1@%!vmBYcNC4@N z7pcfX*mGQaaay4M9+Nz`TO#!dnVi{*2`vc&$)ZY$Xjs~(b-{H};^zx}G|f#+#%6uh zWk#Fca|Z|IEDORo?EDytEaa+ z(oGVO1euJrLs29FtQg^qafp}-9{U5(C?Kt>nMy}uD9v0NX(LO;77RI=nb<-SMdh>6 z$lz(6;Aw@9D+(`=HknChC1zG1%nSwFTq{n_&Ka>S6e?Bl*GwsNf%DAaV@gtMJ51B+&ICLHb-i`(gYuzu*dHrZt1i-BW@>l!O6oW2Lp*;P#bg zND7`z?{BM*V*1qLdD4N_tHGI7`~MVx^pvJEqmwD2xzy)2*Nd$&8be!KH12-Jd7!z_ z1P2e9@(K><-TLgbeILNk7KG{({1g&sp+L~H-|L?9LA5lvEacOlgaegrkAIqW`dS}9 zGP&jEb;6m&E@)f>iKWii-Mg`gh>u3Zb_?JVr>y{R3De%*t#xAaq0HQ9)i=7ymF5LV z!boz-d`SG;Cg0@ZCxH@?k~W<%VGt2u=C*gtJw*{z0Er@IE=@`T1&LBM$7XxbY431TVQ zvTa)z>VxAZAn5lI;JNbzP?x!}lZdvnt0xu)Eqv(|h;Y#?P8!>hS=YMgJuL{dD(GcP zT?>W;ISMxXD^Lez$p9gc5XHfb&=v)>1x3_$lR9g4YXGMepc@bSbIo%z!DIvBI+e$B zqdoKad8lt)=3>s2u;%d=tQM}lMzRveo-5w6fd#2Z93LM^Q}=d4?_0EdYFu*+T5E>O z)*cqs>JpjY34)Xbjshxag#<16y7al(Rwk`LJ_0EC8cf1nUFPM=wfk;w0{~tAv=sm@ zXF3e*d_Mw*jgX2Eio0;ZRcP@uPXKfdGjUY}6IQ{+Ndnc6Ly1x~28m?A7)WDInDE*c zz{Hv6R?=1xl-h|D)1diDNa@-Lnu4Kzo#6qLp^$vjw#OvgfXm4(69627yL*Y~iM`vSp6H5`dVp*24xm?g(xgwcKz z+yb!=1DSZ{G6)*PKN-2kLiG|2>}zA1ZkN-qCkr<4I7Ms2zr5|jYC1zt?QKpq zMS+CGoGCkS&%HZasxuODY}g2|XRQaeXd#S(hlO>7@FFNf3|~!mpPpfi0_t=Grm}lj z%I-gih{K*^n=WJ83ILZdMZ`&F{1BoZlW}li_w^>mSIl7jPMVpsi5Ae5ss~)D%-2le zj2Pxc-25Hl&x|u^$O+2g-PuPUaG66NFJy#P(fW(D_oeaYo zPi=epg4Wv>X7D0(?yGtvf+(V=bJYzp_3Py9obAF4fc=`Qtqj2H9=*jNFCvm;9D-Br zApF$C(`H!w+r-p@SA!RVYshDR1!Khx}|Z0$3xTOW2=m#^08gw zL}Q-d-aP?qIOQij zr$?P%6lWs123RK~c=peRA8=6omBF_f(CmlgX9`hy{R2@`JyymkjQ&oVPH#N{U;G4rDNy)*1iWYCxq zP3morP)yOBfOVP)s{tgLrnUh9nwy=61fnzJ#>hbCmijaCF@tE7!{6E2PJ~t0P!-Sw z1evMXA>yHs7#FE{WLTWiCeJ2R!3=t5X0Ou}_HPs#-Iv=3XIA1d&ofF)s606jRA4F- zPR}=Z@{tGH8Ef|1LI;@*QpO1jMMQCLOnwrCPTC#^T4nTK5O!!hm~;UYJjNV7jcglp zKu5M%sT&h~i%jLC+1SVW2v1d;-m)R-=xoLHnrX3|@a-{1QXtTLCgbh?AZ=Wvq1$gn zwXsiW?nBL&@7;Id%>CB>yZ~(7?ekSH8on(Av5m0c5zNH-#ri!>fdQ8TMhLpLMuzqQ zI@(9*xM>p@0!v+Re!gxd_$65*grHu1GRLk|6DsYq64I&~ut*Kxubk{$}(|qeux3Y`hbV5D5q|yOF6$t81`kO2Z(5 zWtLH!Q#S~tzBYBqzX&r(e5uJh{yCd8qa|UNZ47roj|lLkeYIeoAC0T z1MEx;_%ls1XJ=xWN!OOT;PHpgUpn31w{xK5DKp`e8o?(@d=dBntMg>SYYW+2V9nU$M}z&y~!KFF#F ze|;Om0v4z!}neQkzEiojPwPe@E$1* zf6<8$!&8+bq2ron_|24o)Ha*j<&B4$S6bV{sB>IuJ-d4Kp`XsoQ&qH0mpE+&fXkZ> zkgM+k>Vb)i87mjNnKwj5K=YjzI3P1;as^ z3#@i_@0K!sb41*AQ`>ZT(^deuq$wg!u`~TsWS-I-$_so*h`V{7#7qoFW;yDx(iTi? zy$2m6&Iw(kDk7>z8_{DcqS+*IEzv|sLZpA>AjfhHCL)=E0cAMif|5@F);Z&BUV* z-bXFB5o}l0{Q-y);Rwk+@WomdT7NP4$8n4sZ53?Rxx9tHCX92ZyzVDchY6Z(7H|tY(duAzsdBOwwe$OIHOH%koi`e?J6sYtxE{ozHE%7{0CN5l znp%C};ws7UJUrqx+SS``!SQ3_x+s*n2(JS9bU~U85KQ9HZMr`CW7w?Ewa77He&faX zXSEeI?1-2sQ)$;UGp{?A$U0+p@A_G0{tSS%vTV~OPFn%slBS5LJ3F@yBXA5vZO&bM z+b#n^a*?)jD1h!yHwj8JCsPCw=$c&SnbcrNQ>AS{rvX@jUN#cZh_>5kjMOAf1k=Qb z#LR?7@Mdi_P?Kc2CP=s*AK`;66sn538mA&LtM(Oe`{?Z^TPNUtV?l}pFu)k;AHREw z-PKBsC`zBL1zB;nneo)?9zcN1v&BiTWX1rsx|$Tp+$V3X+q1e^9@JkmZOC-nlD^yG zVoN{AUIRtM59N4q5CV+aXZZCDW=`t6v1Q8%am~5H07gWpp>5MbIP=_S%u`MAtA*75 z`@(Z~(OUsdwKJ%;-(%+LZkq8DA;gQ`5to`Hm3J4kf_w>p^REde!Qajln(x$v+d^qo z*pV;1CNB7Nuw#7Ae>^^{CNR$%%$p78S<|$8znqWjHQE|U00k4#>@_ZiKU!d5OI-w@ zEjg&K7p8-lKD>>g^6bB00#pyBkpx;$rn+pFt2bVE2f%t8|Nq`dTLIuwr~MOT{CEJT zTyQ1|B>Z%KuPC_s)dZrNLGsW!8EJ0%6eNHa+q=~<>Rx&-cK#E6=KV@nav0$ul zQWFx=frtjEVKy#6uV;~M3Iifc{6dWs*4m}%ko1$f`iN7fOfFyBGipqoDYoVZf(Z#h zp&&@56x_ahfHIMZ8>UH?g_^;=e}zvq0|P`Hh2{vIlkUT&XllfZMvTPUY|cd6f(dJq z!xpriK#dU1?3=Xw1Z(BkvhyL07K#nP9GoXkZN69l@;vC7k(xfK=!{UGh(f~Cm_+Np z=H07c(o6XPfWn`e!f+)r%M4H_0~5j8vG?XxB_OLv_^u1hZ_QywZmWMIs_&3NnGVmQ@+~LL-rSMk+vF zPxG@0P-7m}M5SR-T=0c5q$HtsW4PlWKw@nsYa&EODrYchMS(N z

      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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_novelist.png b/app/src/main/res/drawable/ic_level_novelist.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b63dafc79eaa2c70eb152a9c55972ff039e06c GIT binary patch literal 250862 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

      LZ=P8dMQ3gvD^55S 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 bleScVu3F&y>tom70@QXg^mGU*IIH?E`NVgd literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_oracle.png b/app/src/main/res/drawable/ic_level_oracle.png new file mode 100644 index 0000000000000000000000000000000000000000..6bc930c8dcb7c780436d85bf97d05030556d1509 GIT binary patch literal 239076 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 TV=Fca;cb-UK7yei%)a~&oOJa< literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_parrot.png b/app/src/main/res/drawable/ic_level_parrot.png new file mode 100644 index 0000000000000000000000000000000000000000..5d758517b248db8af64b908d7c6db4f8545257bb GIT binary patch literal 211640 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

      <>y*jm;DyD-t*GQa*Sh@UY3 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
      ;{NDTno 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 G!T$$=^hsO* literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_parrotlet.png b/app/src/main/res/drawable/ic_level_parrotlet.png new file mode 100644 index 0000000000000000000000000000000000000000..78656485e31e8b93947d1bdf4b1ed4a5d1ff7b7a GIT binary patch literal 91563 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 CE3@PP literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_pigeon.png b/app/src/main/res/drawable/ic_level_pigeon.png new file mode 100644 index 0000000000000000000000000000000000000000..454eff9e3cf3a6ea41a757793f327a2e65d33469 GIT binary patch literal 197519 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�N-< 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

      ZLzclsP&>rZKYvtmC!;c$@J`2Sx;q& z(vJ;6x4-xeE&^Nsf_}#nVBzm)O$XjZ0Q@qDM*s{(hZ5(YO%d552W)ayZ|Sz37FI;C zfcTl)*)nzRbu=Q|TSc310@z^ZMs#-`sP3>^LBv9gEgId{>K6D1a4%LmGVP*i&N%Qo z$coVB&yCPpl?uxW-h9yXTY~LTVBLP|=@<0NzU52w+%vaWjjSNDAqANnk_+#6kH{>_ ze(t5-^z4CZ=N^Ppm&PjutA{UB{?w<}uI||Y?bD$`<3u~S($ip@X zaRTsRJ?c7{K}lKj@m`Jy#Xvc%rKzwgr}c#)jw~1$!jxS$@x~D{V^j^!4@pw9?xYW=u#Wt$oe>^VU^bEmPxt zS928flKEuLISsK%bJd+T^w9Gs+V57ig=2?91RkF4hpt?{c;BD=um94olXUI|c!jld z1>hyxzVoebJ-u+Ue8n#Mw$DrVn}wX^oLcMZZPA#ivC^NAptdWh zYI53IMR%*{`SOd}r!3Tq5_2AlEyco%t*TyOuB|9rYy1pwHd|j=k@#jJcou0_EvV3! zL4`Oh?eJR_+jS~ywz>X-b(vs*k}oHtBl(BZ9P4+M+(x2`yYPBgv1kgt@ePmZ!sSyf zeNnVfU%GaEaa;)CKPzQz+T~%Yd@9vu)7?u`r+2%)^<8h)gU?;o3m5OIM=0A7P%{ng zA3wC{1{RbX($-Nn_?jz7dYzy(4pe(XFSN@_YV!3SXRYTfpq5aeY{_EXvIfoX2WyKW z5=p1K-B%fo#`ic-@%Tp=1Oavwu<3MB+zlR6v$gLqg6XA7E8k<{ZXlA@uc5PZx=Sf9 z{ooFovw}eDG(gXlnD=t8F(ZdyL)krnqU!yyy%)@0F(tSxxNppzcG0!F*A#PytH-QS zDAd(-{{vV1pZ@c2do&`>4+(mOwQ~jFCD<~vKmF1DXI?rv`S&yQ>eduX|06~M6{TxPiUz9})16!z0*`Eyg6D`|7hN&xc;vh`jR zxdYfXg#@K3Oog)uem;ommU`ytoBFnI`$|3g+)aSkw7J9{se82^YD?D`D0UT~rX6#* z8(mK?cl73u-KVd6&ug^Tl=_C*%4zq6=Z*cARNu3;-ny$AI*SDFMXeT0QHWwTG9ZWP z?VA5N(*c8?8-tmgO|b1}Tk%RxtV~%6u(lTp&0G}~&ma^7$>Xu>g^mK2>~*MgfEHkf z!D+7JUt@8cMJdn0Jy96wXKPI{$=xSFk?&SPAQYY2i>y7YK<#MT+A+-hNWX`EEabJDvncENi?RR|mUq5F7URmv2 z0eFeE%#7dv9e?qW`>tI4ZFA1gk+fv8QW*%NG3+O`0F)ffTeNi|CZW*Fg0K*?fNhRM zo?~FOIZe+J7U5xh*_s3P=A2O4KGh6^*Z$Nr{lAI%BjMB#=m5Jd{Cbuxrn0QCyxo~V z@Rn6p3W@3%SI@&{)mVtuQLH8o=$9?5y3cU+#2RZfYNvy1F1}+10|8n&??&GHGYYKe)iVnMBMg8?Ej_P~K7609T)V8cplCD) z7uG&nc8lg11_6L|=?jZ7q%rqeL+X*bcVREZ)Gz$NYxJs5UL}RFvrj@y8kG?pnCFte zeT!5_0g^;;S&blF8PaTy#JYIb0aOKs;v587u_GVhp!>|p{+Z6K!1}NF4-_o!T5C{I z{bf-*t(1?p^)7&RM_BVsfu5wa)_)U+P}F^_ENWwcByF(_t6g#F_XKS>?e0REVeGi3 z3dGqcb4)Eq=QorR0OMgxpGo$2tXzjTfFzmmx!Y5(`Q$Z?CTZ7*o0wJ-9FW<1*J~et z;Pj9ESKs@2nR)d*81R+T&J}={So`kpe%ponu3!AxruK~?U6KV|ll|oO1F8;QL6RxT z!aoX{D{BUqFG8)XjI?zCT}q@d(dU3R^kFqi+ALw?N@c9S5T34z7j&V5Nc4E#-DYc;ddqmfa(3qh+?VcWe z?xKFt``)07XI=Y~duoz;vIddRGCKr=3OJHA0y&JL3n>5#zdCRF~m72P4 z+*!0=R<%4F>#b5QG_;PX-4gM`KmL)cbLvYo^8%weZ!h^JJbwJhzQ;x-ORszN!`hwfpxK>Kp-7$W&kX)k%dTsTb@PL>yrImY zZbl*}M>zN1HJ8v?+|w7o|51J6M_#RaeXq3-^`kYcy*iZyYdW?e0%_A43RhXmqx4k& z2MfR)HC_PEuYdMrq!}uHJ_>k~l?*F!n-UPROX{F_P`pZ@Ru>TkGnN9U&mzCzl$ z0`L-PnHj(5zx@7(AH4tizqOy^vm$c=Lk(850?{m_i^di&I7glqP!&{ERCARTb+DAd z2~f5;2n1uuzS{7U41{I%NKIpK_pl6_RlFsLrmtrrCjI}Wf}!zC0daX&Tm1DIAa7xM z1QsPv5svoX2G5vPw57)F^f(zPj^i4dK{Z^%ozM9_YLg|agT!8>98@2}%2UzA?jRJd zT^z|gMi7k0Gr0+hk2Rt?9HuPCq_Q02sPS|CwELz25PvkVMwd|xo_X%3zV@qrfo|X1 zyLWuQa?KYjGSQmWb)}CEG*ykkdqcy%=;Q?3yQf1ZXVNcz&l~mV(^vJv>8j{QmcCh` zsi`q=?a&U^aj`3lV;UI2p>WX#e3<}iU1McaVU0y7I0e4i0NRX#gCi9IeeSg$gA&ke z5wBtS@2zx(gF9hla3_UWXVPHZg)yCbVz$fgn-m0jMxzp-w+Y<={8dr@iHn3Y0$7{w z_?IeJ#QwBP!8eN_2(iYjbUebQF!7Xf9~4WrsO#2l>eZjTq8TaK6%r9zGqtYtgRvlc z9(v&V$$$G7e&mf8FY5BS8{n1E&J}={Nc+z3eCz2W4_^GTHS-ts)FrI;Bg=C;G^eP@ zBN}mHZIy(ILS_SafvIL$Kem1Yv0HR}lm(Pn>8$|3@dOBD2m3Yin-H!D3ST2D6DdDC zbr8@hiw=P3$n33c)|#M|Ygo|U?sw`iUb_`!i1RnGtmFf7=zy;wenJ93dM_V)9jGGB z467H+ef2j2>sV2gxx+2upn%NEm7i8rTuyiU+vh4Y2mIBXrm){e_$o7svUMmqep~RgBnZb6>OXq$D})VzonE- zw@%OW8Baf`U-a(R>f*hf&Xz%;ofrU7#&!-utMax^#Y+hVuv{3CBFZo&&m|kft_>dx z+^leV+K(DcSM3G93ZTjRa{HbLf~;*2W^BU2nNilc-#skw1Cs*t!^4RKsQWONTkvbS z2PVMW`@(ZFwgAL(H-%81TWbW0wq{oib1eh0OOkD-n-UyuUP@bnHqEGJsnkN)tX`bAmv1{)0A2#^ zyTALp`*Z#5O}mqmf4@b0m3j|Ob}I{%)9gy{m>lGP7J@}9YL+h@V+v~v*^r>6RMwGF zGed1@w#cT2tB-YqS<&S$iaD?qhom_GWC`37Zdg=Uq(yW66SzN$k&$jU-vzV5eYK@y*I6AXZpNf@H*uR zsB$n5eS)EJ;GC5!z>@m`im*C!lDUv0o%-lFiZOJ%-_zYb^!XotNT2tS2Q-u#I|pXA z!)?Iu-+MV;q$GqK zsOhzb%HO`>%!b3a@cmmERVt_7NwYz79BMmEpD-u~3u=-fvpv^w4JlGdy|i2#sos_? z?j|4jRuce$l9+C1ZXZ94rc^E3meihl4<4G&y|6eci2m z%0(e_8FkZTf$DoiNYfxG{T1)?IzYm%d3a+`6mi-T4|QFr_?2>&hxY>lG(7&3m7B`^NGoQw zR<*Z0Jyq!Tu+jaH=HEw%y9+ zDy@$$Q8%ID3#`!R+)`yzschEXy|!Z>6z=Gq_!QIh#4-p4WP8a`W~aD!bm`W~&=-C5 zAw7F?re6JKAbxLgK}9sPMlOEULl4|{Y4?49}@x1BHG&vX0E?|kd& zW;$4mr8U!i{33Twsp2T5GySp zk$}=V_C9{K`XkM0rbGwuY^{@f?XOC(37G_|sj#A27~G|!{7qncF6KO}&zz~SMTv#SbHkQrS-PR3^ACzx^9`rn8xKEtL(2|onxL~Z zC;;H;ebjoOoRq@0S;Z(Ka~hZ=?RF>H@6QyH+OkLnht`^Io}B6aXD{gMe(F_v`1Up3 zK7~Dq4uBVvQpYnBa)5F*LDdb|SpepRy-?OaeXT9q%m%2|rkdA{$a(fF_YIjRP^)!4 zS|>RGk3DA=N|N&EJEfS_bIN+3xEE?3(JRb^`1w<%a00lQhkHlha^c;r>s+rBbq4^Dv;<*yh`6Ya&fgR!10g>q_ehZvwKm2t0-b`ur zk+cKHETFnk=zx$m*M+T`W`S)hcILs~8VZA_sm+;M+Onk%)_CRTr(Fb_a%6#q(sXb) zK&KWMV=Zax9hQ7qZKIAsR=~)F>~kf6Z>gd|QH7dp0gCI2tpU)i9Bj`=f#IW2nuQro zJG5k{F9~HlLn3gSF&0qQTIWnX|H3VO(HFi!XZQAG&-*0567*`GgHkx$`ofq(6xP9_ zbwG`xDJ0xWeXm_6`n4UB7nyGosb=a!@9s4Kk z$|@xwRRN)XrqdD`ptnl>@ft^sk=z?Cu29HYIPc%FK!cYI17PBs$$D?hg4Ac*E9F#A z`8~==-Mn~5U;f@lbm!{IcO-RJifkKugw;RB)S7jU1$#T^&;t)&x%yq-^Vfb^W?nnY z%z1k`wsQsG=c#38{GLDgKR){4jf=l)%=L5Bw1ids%+y?u4=q7R&tag*Y4-q30aT@> zivY(45&?!4GoJ(lS?*eBU;!YIHnVaQ%q38z)SOsar9{X=vw{o}5LlDFFOtdvbJxl* zZ}3fF{Z+?vg4_|rGK2+ST@C0~z4Jr-0~iXJRviO`Z1vBFr8I!8C~{e#<8JYszDPmg zPt9fPw&Gd^dclAc7>p`NW6N=y<&a_m@DMuXYSGr$vcgIckd>1y_*3+^RlwSocVE+I zmL>>bj35B-?!CRf_zT{sXP$jQtwZ_GG1L~*$wyRs7;IscswfQsVXD-`&Y0$$nz?GR zRbOi#*--|@R4&rZWv?&%*n|4g4?nKlrS?l|m!TY9FI&ejNmKNVc!gbUf+*lY+=mZJ|*%kxno$QrOF|)$xZO77u15tS)Ht^rnmq$AhE(PZk-2@pm5H2<@O4Sw@UFAXoXA%r>zm0F(?bk))x$7a=Kc` zfQYcEpDAr?>6%jCYQZBQ!;#|_qX@{dxNR+j1zq|PSR{vMO&s^eN%y!Yi)yy;Gqt%Z zqAY1&2kkGV)t$_`9wjN00IhPJ$i7~#!}{r^NC_ccseJX^@_CPe^+Ys3LOxwgD8hFz zC){0&pnT!R{cSB$E{szyi8?#M42H_G^JfKQ1;VOvC)b4)ikVc5Y_03s)l0g1^@>uV zF;^G13H5FeDSvOUCQI)cD{hzG*@s~ksIah#>#z@s`3UXTGw$g+_ZOBE-R}3ajIOVE z*JJv;k368WJ~U3GHYv?i^PlN}7b}#2p_m-+>6`;a)z78_LLmzjymb7FyK2k4_94J6 z)k%|JF!SpD?=`HAPJB$l_8j@y(*cyQNEK->WkS8Dcps{`Pj8hTh@vaIjas0zD|iQL zSaN(z&_S5E3W98*nZtb`1-MyxW{tQ{vyO45Gu^m(K@UHFN&6tEaM=Fyr{xwf zR|2SnGM^uO%={iY)&*t^kj1zoAOVCHO=CdS0+fzmk3w>QN488ch>mDS3y3LzFw@c3 zjt*8D42#B|Q#pz~fYrddu=Rgzxs+_}4KTE|GbYrfr4STv78>&zRRkR{Ru;?_xJ6$S zK33O?&}Qv0U}#{&AHLGjLUL|iY~zR{Y;rlL3KT^kHoDd)-?*? z-GSbi8^A(5e*;=;5svDfzNUAoGcxAFP3HUNt$X^cH$M(oHE3q)5(KH3y(z~*!NDib zch_|f@R(^*0t#ae?RL9uZ0QzJUT>Y$!cKbK-P5T{e4erC{q`&Q`kk%BghpB-=JXw?Q zHfmNVw*W!UTvSl4{~R-M(@)H!cc`8#E05k*8e^ik6w~8+5(MJ%-Kc;}vmZQ|bz)rd zVNEbsr^LtCuca z{%`*L+rB~4`4Pb{<94n9{5-V(^pE}E)rarD^eboNXS9d~G^q36`FRs;7W^u(G-#I~ zl7*&ZTG@cYbyyo?tkfX)VLCH-1{S7$(}=5$8IYr(6$oF2tz26`QQ+g>QT;E$>{0|u zdDsf%*!r^7tulOql(Mh_l1k^TGsxr-hk6FV7>E7Vh%#Hs238$gQxzkT1Qa$4)bPzK zfQ+yCZY_wApVNY$>k;T?I;@yXDN$ zIU<8TR6kvxv)n1AL|VWrb#`{9&;Fd(>elVM3Q4PL4^)5F{R)6e>dQ{+O1fYK6#!fL zmbaYq$tjNO%JV%RD5R;et~xzE^}aJ}VpmJX(5=%mUAuRxuY2d~^_f3?UALB1V^}2B2oeQeysz1z`V&=UZ|q>t2129)oXW~VockrW z%nBFqfVwyM<{_FIVRNYFRThcz5Tpc9YXd-8$fX029C}>c!dj04dZ*J_Fhji}T(~E~ z2F5@Z#D2t9xzGOQNxpdXMfT^T;9wn>waoVsebDNrZ=H9U_GxfrSGu?ORRNwrr*Xxl_UDT~hca&{P`yowf4zH=% z5pP%4rj$?7mFl;`?@8@Df8J`Z)tX1!f>(W)jfs%NJ{wm4?6;|vFV>~T%bw=FW#9Ae z(9Dkb_p*Y{AQ2^TU>(|Qdg1Clea-t`ujen^ zRrlVGNc#XOj*_TBj;zHWuAY#8qKk=>)U!Bq~J!b)4zU^EA_{Z2XGycQ> z_xC+^|FtXs?wIq9n(CBfbxnL%ABzCgqBMD1<0FxDP{a=C+XRz+l88Z5%7BiL+ocZx z8yoJV!Nb+>90`ntSi%7Tv{_mf%0(YW7R7H0m?s+?HY&j2U@235v(G!7w$|&ELJL{> zym;5wvyeadxtj`UNujeu1{li{P6T>Y{VN5dyTqz*APK9p_r;$dgnxz@!5Cu%+q+N~Og(<2d*X_*S@@n+jBGt!v@y$w#2mV$psbdhmg( z>Za(q2PIz-@_^#Vp|(`;X(=5jA+~D?#ahTHX|*SsvJQ1>D0$OkP;)?@gIjCS zrxk3rNHGj{OWCc3g2%q^yRHl?Fh0t90dr-LbNI zbTVNChaDA@5FJ{+7COba>-`eZFX|yJi*);B)h~Yg8+F$9D3y~qmmW>>yz*}N5t90j zb38aFp*vH;3c;xTD&-i;uB$)(_7DA2nR(U2KW{IycCG;YV{C7G+Y=WafAG>*jm)oX z*)GT>cNJLa2m$=(nb7eOSiu#2pT0gFRHS-=Erck`Tkun$AuJ46lZy@5?Z*aAph9gC zWu{0;EXvWwyZ{0U+T`XBMra)grU_FZ3tg3PmeaU=WpYEwW0Vkt1lPspGLQv!wV6{b z>%4bEql3?C&?y5zNHd3~BgAR+JCDoXCY{f;<-grqem(#V*jX_8{#bPu+;zRdWkM~m zR${G9HxwT5yKVRYLdkW2tmc*Kfjrl1+yRG!G&dj>0BY*qy;W~~F#dT+J;V+Md?z&saiwcgI=1f_b(uO2rkVeP_k+;)cUk2xF$)i;oYy%(5gAB-Ui2av$x8f!TnowTxvDOs(|P{lrwd5 zvfI*b_jBm6`|n%+?Dzl3gAsA!nLKYVvv#fk{9|gF+28WcAODPtyWQ^$wZ}3ts_+Ug z*i^2r3U)AB_^tsyY@JsC5n|7lmW5IYr?l2CmE^H2Ah{l3C|@WR02Oix9BOe0Fbc~j zt|2OX4hKOw$PUYPlVkkf#u6iG%MGykGi6_>0bS0^o)%7&i7kE?Yj_j7C4rOsVr>bb zT^dWxfN5cgEQAQE6}HBpBPdBsu%O562OWy}6!3d3T(^C!1VS2L&LekDWB)*BS790hrRO`qI;C(mjIl~~3snpV!Fg5=ohH}RDO22=R_%5B zWa_b}uj?D$^;&)A&pf2NIkfL6nXTMUf%{}6>nUeJ)cPq|W6v^uF8VwUY#Lz9+Eok% z@5WS9DmtZ)i=nEqDwy*EXO)}5;N48`Gk^6J?<;oOB6=)AqG+PMPokEwn4_x+vwAH06$H&5x!A@wlzrw!a;H!Fxo z!rI#?WCNq$W`kO8XSXBZc*)Z#f=Czgq$6yFTAN1@kx#A&MdE`;B7k5Kr3f5b4Q3JO z5faJ*mcTcxn^rKYZOSXnuMZ}pY#0>1V=I^{8JrJ*h`M*7D;kM?LQ_5{Z!+pBL?F|00E2AT(Br7^eX{jrEnM=UX%kal%;eKSFOF}``>eX z#U|9g5CFix-Iqad)}}a2PU2&(Q@u&|-*-j(l}K{Hs{FiNW1U)-uGT~AN)aclO{pzj zo5?zjEsg`rxJtVhVJfGX-v(SQZUx;zG?boy<$u}mvR|i$x3MzZSq{Ufc4;dQ{yg49Xgcn zRbA^A>Ag`JAD{A9nz>=;DKVzEJ(1}Yye&0QMtZ4SPn$v^0pKD~62;n){FTbsLicv7 zuHQP*SHJgFdSSVz+41qqDUS@&`}}CH!CX+hD;ft!bq55d(`VW81XtRLqEzaMCqH>3 zGk?tsFT8MrL7cajQ#)4x{xP(_^|$`k?un;9@tGG+mT!vGWknvMfCCGbm;GQZAXM#d zleU+?z&LEJsVo5tsj|?fi}nb74BZpV{-zPbYoYcg?77+8XO?0|HAGw`zxM`%tVM$^)pE?>QvjZjCe;|R{!^(*_J{ZTbWVK>(nq67 zBc|>w(#2aR`o?#?USIXTSLxEdt~>2aGg4ilIS6{hQcj9Jg;g-0!We?tvVL)xX!mP# z9XZdQb1B@X&Khh=9haF=tM|{hED#UBZ@z!Xdo7&K7cRG5Mt~I;Tow*YEk!+0CX~{e zQ*H6u&L+8-(XHKHzu-d;=@)$TVcosRDVrM$ksKzLLe}hdRD#UFmD8N15MpnyEA<6X zco|Ct3`gKLY`ts04qZImU3}Y*zUQm1UcGvLI^fH&ohtx8$1OACtv~U^qxWCE{O>9C zY7_b@s}7(Kt)|E2U_QW@-yu+p4i+X8Y}+nT*z#@&9>8$xg#|hw2S}DLxWE$N=cc}2 zxeYc&g2?GPsmj+3WNBaJbQ)MVFFhTkS1|%93mFYr4skyH9%OW(1Whg5+6pbJ) z<^fPf_(FxFl^not-5<)=mXI#Wxh!wS%p?WB=JUaLOTjATfqy!3dQ-$IS{y;Y8H0uC z265I41*F_Hy*2#zo^r-%#m*mcPu5c|4i#oH>VDfJy?&*a6`;;BwYVzaqYvNE%%R>F zwPm5AU|#^x>K1ER)9Yh5mn_JzHcY?{sQ ziL(Ui)WYVyTaSpFpM9p{i-f+zcm3xQl>%C9E zpFFPCo$o18z7G4S6v)uh7h-raq+E6HWa!eq>l=Ua^}4d(>2^Qc42sN-BG_RwGGTSb zu)*Q^7-LEerAdBwwe^wD))fY)x6bumlLxL}Zr}TsAHAHJyR1n*Z!ep6t^oWTw-0^j zL#HRFSHHBk_@azBiLJcv0o=-ZhzMm8eH-@oTjCg(4}zj(9aetv<$nLB42+wup{!hd z0b+4`|vsAx|7hY?OEGgVD>Gbl_? zf@I*UzY&y2mcIS55`ksYmCFD-=A(7$1VqvD!JHsivE@{i*y?#qj>6Ub@Q(&=1c|k> z<=eQ__3T-n0ua_Q0diZ|&FdXo_5tw%MYFPm(7SvSp5Mn05mzK!V$bIo_R6x1ki0%+#{% z4*Bfv19QyH_%`fH%`fxKzL^eqRc}fWPY@$?^TJ)-T!vor>{Wf!J71?S`rrea>(tpP zL4)$11pEQ!zF67z^EcnNT*%2vUw5IToLI-{Nd6F%e6uoF{q$~?w$jN}BDx~`?Mru` zTG$s~_wk9ISxPUnz){NXFUlulY0lu&Zs^X5^m$J_s4sZpVcpv8m62LH3J6;6*%ojc zem8USK91FgTsfGyDR3G2kfrpzb1*y`%nGM$r$4elFs7*US{oF z0r)v=nHhij2jBhbYgaG)PDzhg400$D3 zml0L~l<7o+Mou3^s|xTkt-BcMW@DzK=_3Gq7y}D-k0FI_Q1p11vS$y_g_&df?y_+Bkax&dQh2V;GdG2- zB$E4h4O_#-vL92gf6XJheRuC5Fsd4=IW{AX*HfEf5)o2RvbOcbN+Nv>&*|!C_TCgT zwRC@$wuYNeBivj{>8t^-mkS2jv!T{}1oUu?dtcY0OM9NXkE!P`+|%iPr!V{PWBR)H zyhd;Q#0_bN?w#DDuE8oT*_CS=#6ud>$4zrzs#db*c6_-avEMHVg|(D+um9FE6jNGV z%*wBmuXS1A7l(%lo? zSynZ1{YWw~&?E`cMH%(p2wwEv$xcf4TPc&cFI-PTFoq%6$+lQVROxHK2WRWlhd=hz zwcgu5BkBBbpqE)YR{(wv+YkNFyRKZjcKWS3^%<#HD%EHm)39g2G>{><37#vEtgHYi zSk706ssmtCq}7E?-I@{yZ0zT&0K6pi3*RpG7s>^G$V_VtvH&|aI?I9)z>*^9FdX0~ zr|})jMU)xKGXqQSy`rIb6c{5(w$P`LJO&AarG(EsbX2dv5_P&d89`)RU;PI+u>P8Z ze-z5U?VDB5;}TV;mIU^gDzmPhJmt_G%Pwt=hu>lcXD`@d7b-Ep z-%t!%qbecO=6RSDI$D-RXQxAVW7UnD7xdNddtATp-LKW7H?Qb!PrYz*k3hzmnnC7C zYfT}>Bc~IhsIWFLPKd|aTPO{z5&nGt&XzJMf>7h(_p&*Cu#|9_Jz?(&=E`C?!X=Ou z3U%$;q8_PbG@YGH-99p&F09Bu)V>BvmAPEZiHDW5*~EQ=-#j#(lq0HIlwdPqR5kwA7E@Z;t; z=3GLv0mWi$LiJE*zl45`FJv$e5%_f!Ak|&heNNmIhhRzsIqPxo{Ua>78Q_>|0U)Co z0p?>)*E?WVp=<$OXl)BzGa^X%Vm54n+m{}4u6{8n%#394K>1=^O%1E7BD{TlCSxyZ zJ4>ms;4j}Z0c88tasTIo>S`?2N$~_43dMg6*cpIyBZjyUe#*7Wy&9 z9_6byy|CQV+EcH7>YBdceXr8jeBjl({``sdCsVhVGp)O+<_V?Hjx=%rgc;r_taJ6Z z#)8s$Q60GuL$c!kMy7oh~Q14O&A<8&dkfo;rl8FJ1eyz2v~mXzU+?Q>C#VYJJhLE2_Dk z!`QEy6XmY8ZboM?_b$Z^yCB`TcCG#3|MU}AFJ3&ylb2gNU$CE}_NTt@N3PtscKU5I z^;(f-X2Dh#o$2eKut= z42!B{^agqdaLV-A0K#%aD3*Xc0POK+8_=ao{I^l4>9HS!RE zIiu3=5O~{(YChY3I$a4X-knPTOz!7Q1mMA{v@n-hj9~oJzEZh_Zn~>!3$%c|6blI_ z?dAh^+G8e_+rr;ZAAB=rm1@PpZmnrG%RuY`)H;-Wu|Bo{ox|UJVq<#$ z_11Oa!lIJ}Wiu3-b2w(B0>GGOEMV59`pFK6O+lmX0sFaE>gTNQ8#q1w)&sz4&e6}Z zFkwm7mHHB_5p&&w_d?>c)6>&!-_!R{YHGL|<$m2O`XY^?y@u{A#G<_E6A$Sd-t{_t z<4?RspYidlQfs<(aj&tUq_tRl?m-|FlMI9KxdRsxgf8>KtzW&mc%fGHI?Rr@P&7jR2ZzM7b@M7UF z-he~^mFhG9ULl2P>@g7TO~Ue(Z22QtG5|@QVR39FV!G@o{!9b1>;q>crMd81Q_{^q ztFl}T7`PxT&}{vOYZ6odl8{mLxQ(Ju)7;%r>)l|(JQ&~_;+1~zOc~@P0HqWncWP4v zW=>@bjJsrvab$U=6^`OC>UX7#glcVS`D&f2hX4RTD}1K>n%~#j`GYLRW$Pmp1J=CP z!DFK@e6^J#=o{7iZwkeZQL-)@1y8p&iDcBFi6zz5kAeKN<@7=BymyhlE z?~{jZrEOb;GF@LGO3A?u!8n+g8dI~&s9ZJE=Q@lrv@AZYvWi`8Ys}v34aEn=5PyBG z!{W5h9+cL$j;g(2EAGZ!J-@rF+ZTs!+`ObO{=g&p#<#ylU;Keb_0V&dwT`J174vrSJQJk9_>Xl)g~X1$uPeUJmVC z0r)v+|Mb83Z$EHB``@~b{Tnp1qcIby4&YQIv8UfbZ53#QfVb#8yx~HG8w4bTrNLgd zcCq5?I|daC(&@k=6}2oZHsh33Qw>oQuuwVZ_v#K8Gjd0u~4+HTDHupOPU0= zZ6CO{yDHj!v(O8?%zzX)d3*)NTeFjS^|8b)?9b$vRvu6?hU*f@Qxpm;r%fS%uH_oD z4bTloYi4UWsF6;8sO8YM$>V}jF2F1LT|s;pm4N&d!Cx#}u|eFb**#E}Z`+s)?-MHz zHR5tD;8JnlT-W{L#T|9-Lh6gD`o?LI-RqbVE*UYW3S2bB0-Wql*mi+ZRck-eG;`K& zWszDZTO)!x0L|w<^j^V@{0T>;A9mKk=RStxHd354DE5B=oy<}-$C`xm>BD;}y#}+T z?)6o-Pl>yD%_lGG7ry6Fef@i0r7wTaBYOR(?$ed^L}RAzoDALD?X{1oIrkdDiu55x zHuVfa@LK_yDXr3yO);fDtWY=peea~{&T^((7gp^xbm45LH~-AT`l|Q5THpBY*XXl8 zdR>?HJKfn0jU~xy@m}bzPp}TkSNDd(RPRPKmt;QLJK=SS^ht_l9y!+96Kv(MEzEPd z<>o;78Dpg^v{G&1-RL_~NOPoeUG?;{FI(Rbc=?b;inm7Q3!8p^WF_JeiKRlw9ipz|jB1@8q!PXa)klKVj>)0kk(nSJ>2gMrK`0`RNdPm_qLJNxT_x( zZ5>2M+oA+)>U-NQxUb~&EJvCJ_m<>Z2CxdHuo#!OdvOY$0TVR=foLI$l^p!eepHpR zAkX(CsH&bRTZm=N5_3`R4nH@&#*=vqG&QprH8+mg2#?W9z;t=tP-tw{C}SRTYH>gs zcV?0zq@_3g*n6JPd*1g^EIc19)Ek~4K+?>|aLMU#jrhLk>};>yZqeDjy-rVe8hZy| zcECxctjNkt)zI%odC#-9j1u>7zL-W&-X->h=L|)LNoFolzDk*5?ip-r-3RBOD65pv z7V3#*o+--SMpMhw0f|K;87R0N$a0;TYKM)DAfx%ckUQ3^7rKJwE~ zkMH@Tzx5q&dc&jN)>?bwaP#x_Qf`|pJ#Rld?N|KEzy0x_c<;yl=&$;=Z~o@b{hT*l zAkdEAA;#P+kf*K64NMwoNwUR?RE&*M*G36*eKo*?7c>f#4EP0^b+}C?mUvl@vZY0yFyTp(l~on`%_QsC)3?_H%(i)Ul)u zs~TUYpFz*nf-CWx8&sV2fDhCxNI#TW&BUiX6Tf=RNgmBnG|xfxCTlLaM=*(?XdpNd zs$O>kj^q#hL5<6#vOnheq3uf>$Ye5>gI}D?4Cr4A?7H4Uz4lzi5`65F&*`uKt#@m; z>xxN7=SbGm<%6fDdgBcE>L*I14^OJyXCRmB#A9KWGUxjJZP9)`+xih^dRnIXveP>D zn}Ss9mPzp0OrJdIIj#M*IB>1jpxXuDt)=M#M$^hE@d}f*3=l1%t3}g(UFqAjVo`3G z42@jXvZ=Sw*+^YfS7cM0LoF9&V_w!arB!M{QJpzB_E;I3ZE7E>nX6`Nu4zD_pb#5; zO)4hNiQ*fMMF?l0v>=NkI(0MZeWk=Qd$)IL7|4fxMWtx&_v(GoSXbDWa{pO@JSbMB z`dV@59Y%3r@$dJ07#1HsltCKmvV@*`?v{Sjzwk{T{OA9vula`7+K0W==j|olj&$eq z_K(^!bN99%e)}6AeDJ<6_{1kad3xdG0{-p-Z(;dtKL-?M&Z*W-TNlk+plOTWoa*0o z4`Ja-W)=vvDzM;XwVfTYMZ||3=x3-^S!IeX%DMcTC14LeLcpqk3c+ljrme{W-VODd z1E#_Od@h9I5m@-}hdyEQa(_UK|8ecXLxQ5iSDTdB@{~0-D`G*2i-qgMl&Dm$7=wu2 zDbvAmT;X1B)d4G4ow0?jd|4@(Q3?!JQi0a=u(lPbECT~uQS@>6GFLi%3?M(m1GI{o zmt3xyDWCxW%x^>T0&03DVAvOG)lbonat}nKzC%Q69VjnjlD-y= zadx`~2+&+K#?*d2V+=u-#wzBr_G@chYOpMQ*L0_^I@|4a`()_mg}rVrXL`Qh(d~9m zw|Dn+Yq#oFzo%QvUeEVCx^rRG&A6+xM!?~WfuFreGp5#<8ZNv9TQ&XeQqU(IGcyyH zOs(lUR__}!A5M0=jj;*`tcH9FqTlbnTegfDlsU#Z?Ork|={-p~Z~DS@yWQfwjVmT1 z)ED;qwJR6&&i8*b&N1cX)y@~|XR&?jul@E1Z#?wC@0fFaHY%T>^_}U^$S&8s{Q7R5#m69#`BV|Q^ ztmIe&UsRCq#ae+`N8UAkiYyi4N0iN_6G^|>Adei-n%_UIC~xE=>mjaCMW#~J8&DGpL7L65Qqmd``M8d_C#7~#HaL&s@cu+fOY7>51GrEk z6U*C5SxrN)AQWS+FL3Q)z#_ zfxv-G;XtYa4ToxN{`I2VspE~{M(_tfVjynzxg)?$%Ue*lvetq-&si2{ferXnW+{MN z;7fn`3lNO7A3X52mY7!Q1s1aD^f?5IsZi6d3Is1>@b?WE(5AMw9SGR^!D0n@Wn0-@ zagO(NeFe$1xd+I)V1Y%{np9u851p?-M+7JR3XQp1k+H8{I=D_eXUwnX+`&{mI7BC{ zfNX1KC7>9XdS=nCWqGB{6nR%LSq`|QbDQs*m;vZ-g|HTNSVv+!jNjqK3beaQa+xq&*LKrK(#5$1MxF6kgBD@YpRFF5&8?AOF;Ii=@{`;vwhlCEv~! zfS;xIb-(mqzW=e$c*AeXIUgD`pgS~kz^p9D5}Yku>s$u#@}~z{zf9L+C?liJU<4 zVj2#wEVICVVeH(a+ifuGrUlae-qO1EV|5gHLy7X(Q8qXYP{QJ$VrggKBlhMoBT%Ok zPPNYTM}wA5Q_Rdw_`oMK2cyoP@OXl`;^$gN=AqTu^;Tv>6rD)rm|u@n8Rje zV9u$L#4z-ZGNb^2*LB4Q-x%%8f#TFSn}O#t4#|i8_^_T(Q#$@&&bd{E?7eG@y>fEq zL)xVfk`}XR)9e$)vG@$;!Y+~st$SikB8ZQuERu}W^UvS9B ze&0ZX8u3aC!?JcaWyOOxc!XqMq(9DrJ(z+q$#ITSHVhC2{_ZOHVif`m0uZ5sv7jr( z&0ocuwt~P3XjR@7g+ZIL#(lPogSw|IXoE^nbJiLemWz55-mcqLc;ZCdyd`>1P47RR>|rRlP6Foi%z=G#!0!E~pK0Qm za{~@pfsji0xgPnL()76qp08p%vH?(G_MlK4usZnDx6eIJQp&6ZBo<$>Hqf{LMrJzp z0)-C2Z$$QZCenLbj}pkG4CQfu)BUogMxY&*-Ufbl2P~Vi6OvLh%2Gu+$%*v_0G8!R z-wJREG^3vx{5}nE+{yO8114J+M+Z+%_{;G1OUDPD1eJzeBaD}M=?gB8Ww+C^Sm_Ys z3)iB@qV)61o#1*6Vhb=H@5L!=Rqktnw$k(AxEYDl?OcJG=ajo@v!GLL>00-D?@>x) zXAq;%!VHNd#ZjQHm8?*+f4<&ll#b>!#IpFKHH|6l*S&g3YcYA=hN^wwy?~pEeHMOh zDRyJxnt@q!b^y1akFBbU)-=_;+2v&At2bf*m|IwosvbCnELu9p|MsPC@gK`>w<%B= zzH_FQC3f%q;KyFuTAZH>_%dnd3cx>N%gpwXPd@$F>E(;xnh}?^`F^Fp`Qz`>)ytQm zCzTxKS?_6w>N{xtL@}dTTez7Dm#rQNAy^hm&Lh)!yM_qhIadpVqIaPeHy1(&7z?O+ zbSy-qk?+X&67+G!w?zXPWe|mOMmQR5#SiW>}pk?{* zp76|cPWo=yX#Gu!S{RkZmM*!xVX>8kFxU!mQwrw2`H&Vr4MAFY*j6&qmZcI)Pjc#6 z+IMW48lKe_l^KT2blMizgsog|%-$&LH*+d|lAq*ibZKkR7U6W|MCK4mw-}#Nnv`T9 zOk2CHb&lzsxQUL(F%2wRpjz`-Lt93`I#%tLzR^cntj$cxO5!0Ch2vu*oYm617MB5T zRn^Z*5E=lF#cDO(U8${c6o2CPW!np_`H&&pX48t{vg5?NF{$y-J|;j9CWrVFl<9*D zr?yiaToeYwN``mB&S8hD~*dxDgy|+HrGFr4w$xo%0 z)2?^F?*kisVk@Zd6fpEC7;@?ykTv1P1lKvuM}q ze9`yadF7_AF>LLhw&m3lKVQy)fU>Zwexc;p_dBO+4rrr{%gT@t(gk2;-AV^{MG3I7 zOp9&@uBn1I1_fxMnOg7mGpDI=0TwL?tFFKb>iz?8PdeBY?4O5#)70_S4Q3RdMsCbN~b-!+kOWI;qCuL1RFllp;+p-m*0j$~1 ztPc_Q1uzFDqc7Aos5$Q4HR?Uj#Z|vTHz!9x zm-|B@?fSxg9VlpHUDf+;lLssW!HMbg&gQ-%PZ-y3VT`5xstQZ_pREbE;>5r}uFP%D zROyFaQCX2Lm)GSh7ve)7`&5hY3wYjM^6gv!_(y1&*+2Hd54`5$m5aYTl~=G5u{bkR z58Z#i{(s;5m-OI`>zgGNwq%>nP)D%yhNa^L5D?-un}>SzB_ZqjhO-^PPj=lVcvXx* z1@(lmj*$qqgbifLP6*TA#ZtJ#yyVs}vaD2V9dn}Wv! z*FsM2Q@-dBOo!*81;J2Bq}QhOC>aM4>E%LT9=R`b#jG%g)ALF{ZRt#`p{(Btum!x! zqGo*oXy3PC{W4z&*9xu@d&KL&cL85Y2B*m2P(fngPHE<>H&rdH%xtz>py2toCJsi;&;<2 zeR1R#;s0?-Of(#?6^dKf9RTQ~VA5|C(7x0Ol9Z{fa@)&NOhGAs(tcf0TwCaD-8%rX zYmC+J3k9$un8XlDaX7A}Ttq3rx&ExqBuLZhu^lqSyRp4T7`d!*O_BY>F##8-{q>t-dZ-V3r4P#lyf z7_FhmUfk{Usb_E2)<17AgLbX}{3Eol`&GZ?{#Sj*>;8>Bn7>DW2O1~}7JeE2?Tw?Ms=S;2G__*7P-g<1g#ns&oF^ z->EQj#&5%LrwWnT;m`=DS|5`kPHLxbHV z38*cNBZB+V?YmFyb|`@Bu%hT7%VgVPAuruZCW=RN#*ntWm1VV4Wsm(1QPP`(_R7uB z*qg06x7_g!_>-&BAM;2jr~^>04mp0Kl&bx`y)U=IVnDC=X}5H>h577l(Hv9z{h4;V z9sAy~9Q97Xv~eP&BrPu2J7@A)qQEw@PjRdy+LAASyr%cYlot0vqR7#@!UQz0iG0Mh zyuM^wOl5?2%c35xm9X&c43ZlZuI0bZN$rsVGeVCXTN4ff_O7Vsh4lcQSxSNRfJuLr zWmm7jp?H#&w3M{lEqdzd7a}v4tg2(@?IqpL6@Y)pmYMA*|MpKja`E!TuZd`vu>O&B z(?K)qI`qiH59&|-+5bV;uU!K?4P4P&OOd&f)v-4_XTyXtbC&A<0wrImL@sswt_dS7DlK46+zpJE<3_h8xL14!RH9K*fs6^J7>g_a$q zwdWi@q0eP_=a43u2CZ|H@R+b*t%cTgYL21BvL+mZvRhnWDmdO5cY=}I?8KTJliZwQ zi4x6w#L&F20wra?uC4~keP)t?|b4>f##)P+?uA|E?E~-}Bj0 zR)N8;z$y~Ut+kGcZS6b?K%3Dv4LCwBR51}04O`g_VKpuAs^7lD_9v>kTlJ;N6PvIv zunU7*3hOMKqdje97P$8A@mevFNn)OQKd{rz!oi1I)`ep;#=6?i z?G{ZDfD!(A9^U)Heh7O)sydw&qh(ho1s*KVxuTd*`=ZvSQHQ@1gvfYPC#NS?P*C99 zMS}mp{4LfY9P?7|S_FZi)9$;JpDhRc`BUOUsDQT^RGIT8Db@R;W$Emdb(L)WlkviQ zvF<3ItvBtC6sl-0`eS;2mfIs5u^=m@e|aBJAeT-$=Nv=LM=5hZvmz0=8*G$BWB=^; z?AKUSgucjNJUKSh5ZdjR#+N&=QW%~hphUxS1WjBZ=5ab$vTg1O#sr%p+1mx9z7(R#MP|}vZb42b? zU$E+j$C`2w;fkd^%Do}88fIoTSCHiF2fIuRx(q9|uKR5d0KU%hXgUbC)#NStxXbIvCoaMRz?oufv2q}xh0?Vv`JzLHamcIkp=!2Dy#7d}shbSMK zIWz`U&7xRy!eDb}cWX!U999zjpgS~H7KpQ8j? zsEhp-cGILgz@7js4`5+%?O5bBztN<#wT_s@+E2M8v#r@;bgHn8Hn#-6;B0m;MJPK; z0!kTR*1B1UDz)p>)#U_BAL|oPY%O#)_DUZ#l#{+l?5Vcv8mr?+g7<-blXlk@-o4#! z5%mx7l{bT6IxTKly7p&#HCN5@mSX=TaSt`^y-~oYE@FNe?_vE>(E7rmIdh=MjQ~%*GzGBvP%L2PF$ofbf<_~6!yTH`ug>eX z&lL;UMNky@<86Ia)H_y3Zq{O$_B9$>aFa&XWFNeh1}tU!wvVjh5P^b#nU#$K77@6` zzbeY#N{JPOoCG(is?mwM`v^_oKXY&g`^9_jq>Z5>iAU#_IT6h@*Dav?!htYUk=t!~ z^rY+A`Z4k%Jn@6#cED=cHBo<`Y zlB?^AErE(>{sDIf1{(0U>x*9v_Ec87<)+xMCdFbjgH}_J`sTSMDqr04F=l*;gs%-joeM)*KcKZznPuctOwrGR^(W#BIT| z=yy0UZw%AU1_hLggHixk+Cr*lG`_DCLe73*44HYbKttV;T`0_10XIOv+*JPoT@;Yi0SHl$=o!o7@762^ z>mH_BQ3gB*z6bLN_>QBhhiTt_Gf3BbmvTVoYCo9`Fx#*!T`%0cqs9JRS%^#0?qmmO z1ZyX;o^n(>CG~h#-*vTx2z80$f7@kXKtz$J7TC!oUbdT*TOXKFvn z9dAC+EMU|hObij8IFAflL^Lwp6)xRv`Yj^#M0 z^1zCeVIXHlz%&sf5oW5E1&h2doJ`nS(>hlQ8HvJTQ?jB20GB~f%n@@E3Zd{V3vn0C z=Pob{<-?aG>IRg8Jtr&~`@u@A*S`6kgY_%6r(Oc54|@I99DNSmA57SJdx^Jm1>hf` zWoG*~|KmUS_@(Ptf4!pJXcIsw3Qo3shJCaMdQY)~+n)HDPv|ec<*(_&g_A81OjS;F z1Hywf7q(ohVcFDY2K>o)B5YkH758Lo6MREh$$)|Qph2S}0kP%|>3H~B?F00^t3TD> z)~qnpvn`a3UlyYFFN--#NlMR>DPai#OaP$&b3j)nO2=UgQ!NO(;#n^qAHvDjy1RzZ z^;JGof!|_zZbGyyDpSeR>j0Q~o{Pnuw)Xi4-*M1j%?pfx=hEHUK)>cPte7|^05*tL ze*E05R=!t(lJ1FQ0F}_Sun-Fb@yEAldg1mxg7>!Lk+H~U1)hde`IZn41(+CRtuujg zb71|dN$O284eAER)(@;j3L1Y|x~XcPC13Mc%Blet2IUZaU%`^iK6X`UZO1oAPAx38 zE_hewic6^l^fz$_C<(`I7YZuTld|$l`QhkDD|LQ1*>AOe-fw1GR6yy^6u4ec;!ym@ z7?M*DGfAPFg9CrkSpbZeI{(V4u_qfq{yI2xRICT#qhykc_<6(uSnJB?s!`_4C+x4;Tubv+X{PJk$i}VlB{?zyV$d!j* z{qQee$9Pq0cDd+BB0rT`FT{~gH1YZ2yG&iaa!G&o`~I??`qa~g4X#71BVePfLR%1$ zAHoj^#4U2!I)*9tRvP(66Z$|8D+g(iD4-7qlGQItu<`pe8u-Zt;%Ohd>&s844_1Gg zeaNcsTfm1Yd6XET^!Vn}N>d_hH(xwfJ_0pGkXzBqbFMH7Wu0unfjl$9E&v03>6u z;S34!v*&9IuJc@Hr7OyXhRg=!Rzj8aDnK#LYOGMuBU712b1AbIz1Euk0u&|40baA-XtNICLr>9cQ)^kjzClX3O8i940MA(NY^i!XO z(-6ZfM~%H|=X>THFEf=5hNd~&X3l}to9w|R6l*NsdJnxGcBd8F)H(ruYA_#F?N2i6 zWxu@q&doUpy0an_8)d)X&#w~CRh6;X;&!~se%-6}uDxIyl{>!FOPP< zNPnL#GvnX-SO4t?uRrj>zmyR-04w}=u#dbPdq)D#)AQ1wkZ2W4h{yz2(8z~CR1fZvo#;vRagI7ej9ss^YZP^N&tMx&ZNhb;HoZ0%0>GKhn2?nsyb@Ep-HFebuk=J{?@ac2@&j&z z0a#^&QE5J?r}dyy27S5z+dR3x!@A$A1+@WMgqCI(2AgYJyHW&F1)gQe?wR}ah*;0|ySw$l zd3#B>a|Ph#w1bbg*QDWEb3^t43Itq=W}<~!$1J^I+g z`u5-RpKFel7tDY!)8frwQUPB44!S>W(MbqlegsTX2OzC@035H}Ti_)?l!;}82`RbW zKry`ub|CCsL!d0`Zi_bzND`6D6=X-h3`UYm!eZG+gftI+Oi}?m=|%1{&*%5KS-hsv z-Rk$-*gXtbf>KfntPNQ870*coPEkazJUOCvzN;b<|A2MMJ-9k7khupBg8rv3DyrYr z{K7$P2y7NI5?Zy!lLl855!jrpQ{`-dQ4*PPrQHCbgQ6i@`=NvK!`d8E7-vjcBaalU z+p0*(@^Hu2o1()+HG|c3;B6+>Z$@%q$f<7wjPGkc#lw&1lJU++BBo zj)lhR+8It`4J#wP6L=?Yw*x3UpfQ@(IVrVl%RD4k9CQqU6%?2p>haUJ#u*2$d$9O` zCs`S6-ZSNXiiH%xijfHM4)V&Uj~ow0Lv}?_pJdFb=5=3J+&rzb#ddCkyCx z3_bkl!}?wS$$y~_eE11nxpa{TUL7pBW(%Oel;4_4&$Qq#i}r|44xWL9W((in-y~dO zt;lEC*J*s3{Gq>9Km?$vxB_TT{@bi91sMQVP70LhSxAGQ@Ff>Z!Dq#0Y`*RqM>+s0 zLXN@Oeix>Y>9!@U=cx+)Fz@b2cnrzdRLa6|AY!F0`ntK*EpT5gd{t}UXO*?ae^$C! z4gWvC@2vyI4(6*sN4Zu2|E?%(toN{z)ruNE8Vr%<1@c&}{n%F<^4>hW;!UBu_s*0f zb>=d=6^%0sLRQ#dL!wd~x7dNQ<}0|*@7m0bm0)bF z=&Z$Qp zc}U;!Xa21I`|tnDdhF4MHEbczig1pi7LN{QG4K$)XGkz`D53Q-=+AWYF%r{9S+i-^H)AW|TlwvZWDrDOsG$hpvzParg~r4=z*N!Ui4 z2H{5i14&v}e9kCL;&~R%r3|H|Z1q7Fz%T}Y$DGcI-vU9aJgk@1{|A7C(gy*hh}F1t zcQ41Op~x8=!a;&oKQyCi-vjam{Po*=T(+{H)>oM(fj~-G~kRSUkWtW0e@rXBI->}Bo;ty(lIf>A&t6;A!%c2NQ z8AOS(0m60z`-LLLUKv^zTne>sTkjiFk!t+j0g4fnXvUDi7HHd=l_Jc0wY1Kh2Miv2 zSXyVQx9-86x0iZ5R{;J#+J`>$p=;M3yz(nkdA$b_!v(~W5PE*8rhTh&u#a4fB@{{r zcWuJo#agaiy{fNB*bu1_JF5(se$g}AqDMhm41ie`x zk7Z+_ZU!Q=tXQlstQah)!!Wq-Ts=o#mvBUWVzw!4sipF{Hww$7Emv>vQg&6rWmf9=CgUnAe$J_7*Eyotw12U0>{YuZ;JodkskN5m z0KSNDbla8RPy!Gyd6Og|f+dFQ#c zub^;R!~K&i0!o<`Qi~I1j=X!<(|g`t((POU`1@!-_K}-c`?C8LEtae6m|9Htm9XBq z8d*i<&T&-SBPsGSlc?IXP(|o8bqlxMZjnwF{g&VL`}F6&?=R`$2k+-ll`Vh_u;B;5 zYXfQ_i13AC)gg%tJQav0qM#+HLEmfxYZbjZD-HmufN(F$yT*Q?cvG@p+5l);u!Kq2 zVk+8_j}J8q+{?|!j;-g#OPRw6o>MZ;8mjVZS&=^%@T;Rb?f<)|D;Rc0`gc@3sas`@ZAw%< zErcM?$@nbEnMcNzR@6>+JAL%2XS7?&igyrY^32}x-=jGBK8^9z0u0xb@AfT2ZR4*# z%y(|3W}}gxK)+DXP`I|OOihc9m7O8YfH8|!2N2=9X{~F@)~%nkEQ{8&L2zM+xkGDE z?~QavSHtW6UY!|$we3AlyuOwm>WzX`W3XpXP^kPz*aQ1!&dIp}R&tB^iU^(U&$KLE zJC{^$R;==fVXF9^ZQg?Uz_rC*OC^;M%c`&amfH?=eF1qL4r?Kw(3hLS))lVHkdl_& z&Mpam*UF<*hKE^=O<4-3j*9tR?3M`>-WH*Zp3&O4aKRloZ!hU~t^oXRw9JglCnr~4 z^~eMF&xGGc93sd|$g1-HtI&x2LfgU&Nh-RuLurng+82PUDd*7Rk3Xy*d-wbFum1M` zP(SoH{-*A`@0u=Nx~O%3M(R=`s<_`l0H*+r)&QJLk)v$@jtGq^I24?;hS0E;UBGQW zzRU(-y)r&P%%4q!K%EIttVc<84_%59T8H_74z<;rHb3~b7}f;*Y{|)#eF-%k1vxeQ z*0~ChrO)Y4SRNS&B^0Hw<=q@1PG7k>0uxX~beDhC{WN&USr8jzV5KYMnmOJn%zsMg zN79y^fwHr;2pEL|@UY@iJI>(A8i?BW7WSo3lAh@Z@gqRWlunk=ho5|ovlw2a0P<`s zWOxWs&R1;2;)ZR4sr2){a-A06pb^IY+N=N~f8fhBl=+nd?%3 zQJSFadj!4l`y{V>xm2c=SoVB!4!{ZJ8_9zI@FbPT@1f&t_fxcAS3iH}psxN)NZLah7 zl5Xb;!2d@35C8D@T>jW6p8C44|EjON^6azE0)z@vUasArrA^z&sr0>i3v6MQK%A3P z#afV-HRsgGRZ`Qs-)pxtJ^aW6ddpw`QT^86^&jgy{_F2i&d{TeKBW7ubFA=wT@k$L z14Uq9H3tHO_rELcvY?6{Kphs~1b`WgvjWtbB?zaDF;@Ct0eM+0gGc00NB-YdHs9l# zjb=_PL4Gd_DF-mAXvxD|2?NZ}H;4p+39zkm*JX>Fwb%p|U)uW5&rrB{P8@A+I-g*+ zg9SZjZhm2I!N0=+ceyEVwrUF`n@gtpzbOPi77~&F^T^$jM@kV&WCd)MN`%BN0w{z6 z7EvehSpZuZlU*`~1NMbM>FJxd6^&r65KN9rISLdItW&4)nYEG`h-J6fI4mUyYd`Gv zXh-Y-ikPQG#2HAeU&yfs+n}6FZ)LXiCUBK?oWfck!zW=%#I%S#)f&HRp1Wn~(!@I6 zoni&6p-`3Ll}Tp8Oj1&D4LD7)6phY(rf{*f*3?}JnLT2*!eFQ*wQ}7L_1z9-$u5=F zn)(UMU>pS-4iS}KbH0u}1(A{ig<7k49Hy$68ku=RIcB0GoIcvCDk02)#0iYu27@xy zc0Q(9WCI{e4lXp5Kf5=4EVQ?XMx_G^mj#9mM@h z*MId_e#wpf*_lq3#dJRaSG4T(%M%T&26`6(R)B?Y<|P_F{SToHH6MYMls>=x!s&_b zzwbUh`SGXpAO9DBME}R%`n&Z1`p*Aa?|J`+bh6v&q5JRGgAd%$wJVo&>EfxDrK@*a z7)qU<>~!_gMLlx=1G;+os+u^gBui1r!^=K|fI&cGp$?C$*|Nkk$Lc^eRd(363H$E5)013RId+OGz@VhqY3@1FrhG^i5d&EEy60U-VZHh3=3Bf5$p+aSsJ z6;w3UZk;CO7>fv7IX1(>mT?K<76?H)$2G0|yy52$`&Pl=z4% z_M?I>w|)id3~%NA)I!;?aHFyTJcJa!^s%mzPb`ckT{t~Gq}>r83FBdkdOA2U%hj|6 z&k=wbjZ-(hF}C7ds{P!EXW;E6*b%m(C~)83|3#oM<0rT4A{|*D+-t17hr+%GD2q8U zV-c;+J8*VF4~0KX!U@;qm|OFMPk=^P!(cd$#qG_K6Ok1~${LJ7$t+xGYybt9Svh5J6AS5r>)} zmqMv&{~t<34=j;eckbxs&D+}bMfX2&L-*gfuKR9W)Ag%Yb>ZZK`hviI=IQ73nS$?=%N_e)-3$EuI^zRJACd`zpW1`1ixfNJ)G)R z%uca7SgqWwBGM1{=J%OC&_}lT9TP%txX}8FuU|bkzQ;Cp-&7*Xeshi(OfyZl4^6b6Igi~p%vJ63Nd&37 z^XPl@?YQNdclH!()?3qltD%pgDuXS3Ls6Q}1}J7J?M_OkKSoGNiBj2@MRQ#heG$i%qX3}%S{ZGnBKtPmyw$!% zmGi4%g?JMjiekx{lnR~f7QOpJPu_jocYXW!pY8g;b|vEDzWsT7iMDeF;D4p@UQ-` ze&DaZO+WG8_v(|+Jg1Y>Q$6t5Lps~z^DAMNvNc-9Yw{u&4Dq7#Zz#_KHB+K8Kpr7j zLM^X8|d(OI+3#YJp zHz8a~mMzIK5&i{!bxj3fMouY*PIjU9e&iFncIgxbAWE$;eeH~l%(;!Dg$w?e`puk* zg{XAs_VSsV2@`8ja}o^@?gkDlc8;s=JG(C&D*y-r{K_h)?5Rqh{AUFKp+H{05NkG- zjg+`F^D#-8aMV3kyUbj)3hXP(y5rtxy=nS6EhvX8NAE9S;D!vt+@?JF!5Ip*7||TS=;BAs z%tu&pX2uDItap+9g^Q29e0WJ~Z8NJjf@O&HOV&-4dET|zd)&J8BLCHSd#Sc_1>k?7 zefK-wadO}Nmp^MN-xl>Zw+Jh6gI?H|CJod^Ii<`#`3 zUQ0Tq1&u9Iz{6+QhsdLr>FDF^2&-FI?eszABeuJuNw&xd7z?u&Dh0y;qY7Bl!P1n_ z4N9o$i0-XWKpn3Tf<-98uQzi zu3g0lZ0taDeE}m%Bf>mItU^X|M6kkOEu#J3{Iw)I(tITyH}mHQa3nMc4t2XsT@KsF{WVEaj={ zg@k?n>~HUziQK57Na>&yo)hYh`fnsf`28_!)caAkM8&DN!lL(A2zGMbURl7{ukPh{k5NbXo>ipbLPWoKz`=gXZ0I@?LVt0 zpL~+QvpJx1WdWan@!UWVVOiE%np!0I3#uHNGSyv)>tuJbfkd-apz%8F zZ2=D%1-3|SjWwT5UcwAo9bu@HdK?aS3FjdbE(Xw2;g7k7dbD4B+9D|{)2FG;BnV2X zXz2t1d@t7ZP`yw#qO=)57S>1L#_dV~BJ@a&vXWwYILbv5M9MQK%watz3=9Zpeg#$S zO=YEw_2u`y9~2kkg%uL_-HKYRhk`P#_x3~2-n;`4jln5zzJa^6xg&H51z0 z$HiyY6X;5ysFZ|xHi`@p!QaWQsd3Gk?^22y<+|;!XLh;A9K}#Ir3*5txoV{Y@P_MX z%&dxz>lP=_%jYinR6h27TROly2m*|B^#6nvNC)di2vu<=>3wGA!ir+}^v6=#D^4ZC zftvFBkiv-Y9L7RsL$j>fl!a1ani(eFYYr5I-kNqN%PQ%~h*(+0^Y&71=L*2zqrK%V zZ&}`O{{yd@Ip3trT{w^`T2ot^zWOV_%mF~Ws1ojgqRN!`H^UZVrcua3njB-lAFTlr zLYS_5f&-&~Cl3__1&nTyyjVB{boK6vUE<{>I@utg)X8qA_kZXKUA}lhz;dN@p|CU` z`k|w`_%CAd3}zq&e!p_yLS16f%EA#=0+dSScCubYPm^tckS!{7W=f7Rm`)KZYqf&3 zA`pb#aT5`yZa1ZZZjKekMKUNCLK;Y05CF(&Y(@81Znpbe6=A=p&zaMwd<& zEgkDNrj<-v{wOPSv%91<&tXzo6F`grH1BN#NcBNMhQv&24=jDza`TtP7PsY(HIO^1_{6OZ5W zrr5Q`>lmT7TQv7p-W>VAt5xzMG_vQc-Y7df zkD})#NsjoPBHH_-PkvIn-Htwt)D!^Jw*C?2Eu|u-T@?mRA+)gSk&3Va0P&mvWy--` zzBfY6peVpPvx@N0(@G^O4Tns69g$>3`VOfrkghggL0a zz@K6YUL;A1&YyliT!9e~cZ|gtQ1;;f!Ujl>aZsA;eTc?9&f##?6zdesqpYa3?z;45 z2I>ZF!9t%iNq3`*WFpv|fYRd!O2jv`*s=@QTY#W!Y0LAT)`j`#5G>1jce7DeO04j= z=vKsh8@nnLc9|JqM^4EW`Skqvg+sGak{XH(83T69C3O~h@3_%KFlQ#!A2T@BF_>KM zJJwR73L%TlIFHTwW!8RMNQu@G@xU3c%mhGP7wv9&8a` zo}r5p0tkT#t@g}w&+9k*+J8dZslmXUs-@yA&0W0C;_fHzxfG6 z%dXOE3?M!suYjR6?~r}urk<4+(#>UL5sUa;?GruQpXt`ETN{nXJ6vgc2)f=8ma@ws z4RT@WUlu7=mSsSJfGu%9Tr!Alpy~PuSYd~Igkuk6t52I4E?+w?2-41``WBd0Pz}f; zln!Xmti{2FV#`k=SgVTW_!7ogHuDy2STz!Gv80j$HAU%j5sFb6rdAjVY?PBen$;oY zj_C1b0gg%{AIcOcJXHuOjzD$mtklB_Sgog-2ia29gq68);Z*N?;uBiB`&maV2a}Kg z9V(wS1H@Voc(&{oWlIM;)VgEguPea7vkfNA8=xK7fMx|^n`hJMYytLvS*%%=0Y$6^ z3ZZHLbbrixv1Y6b^JuqF5STV5IJ8(XZ_cJkAEjIC=b7clAovni59OYi0!Q!<)8Pum z!hVX*ySFSAI7#2guLm$Ag3`RfE^QHtrBUOc#g^00diz*qaY`U#rN5*C`T(yWFmHN1 zS$ihuR_v*Fmm;>JIp?~`99#i*Pl&z1VG$`U&GK!v;^W|0E3{E8r8om(j@0#Q7gtH2 zI(GrQJleSe@OQQE`N1E(dhPm^UpaF=pj1SI#-(AYjxqIRU+{T)^pOX*lDfSS*tD23 zleE$FVQWhpUf};5!$o}jtC{#`l~}MLs`+srg8VpIR@n7N!ESX5T8^@S++!rF=A624 zda8H7|HIqwb3&odb@hFC!6g7kC8XkTziJ_b6wPBrg^VknA? z`{PeP4_H+fyf#HwtL9ifh0o(irIt>eeQor$6(n2f-4*?C$CRSwGvtL*7>(===AHPA zR?qj*xhSdx(Uq0WULl8H;d!$)UI3OdxF!ll?e0Q8Pp#Wx5RV60m>lRFv1&i3te) zmRY9)|4>tF(#X{P*RD-TFIW>lZ!ht7t^gdh%#3%x{}T^hIBCB+L)W8sa^hvjWJq!h z{*zBVrGMu)|DW{i)6Z-XvVbN6zW_qA;WQ7afYGSrS60IIr-bfuBnWL)r_1;bXA6W= zvkIW+I9O&m2b7%sdC1|=eb=w+t#A9Ax^eBA`-p3xF9_t#3FxsFm?E>xRWeTqt*v^S z#YIxB&A$RvY_$|n$vCB>f-@Sm9dasnj^1FJy!T=Hmb=l1!aZUPfRosF{fmCGr3OLv@xNK@%b#0Be=5x+E7|Dvr zHh1>lnyO_#Ah>Z6&;u0ouMoSbB0!k^@jSvBz5`d2d>v1_pzp@GnAXAKy^gs4e>%`zlxP+qN zJc4+S7;q8tW2=iQ1)22))&Bh9?I>`Jd{T!{==&p>~n7! zDoa{nn?f;YMXyI_cjEIB#F{ZDC{uk|a6!zeC}md#y1dtAz3+C56r{t-*NsdyGez4o z<$gtIIQuA)KKHhuSToru6zm3`SFQxJnA|tCTXveZ1J?as58ihqz%>z@G6mkthW(l87TnTZszN3b7asUJeX<_xnDiOBYWL z{$yJafDl5z1g>vwx*KJsjySFWxdK3Brxg*i2eVS#!soyr`F2qb$dn+~|L{D+9P>rD z6mot0E$Vub?-j)qnD(|}5O!@W4%7lr+~+z_$E*OKbKP(tnGED%q0f92UG86)5|603 z2e--kHuqsBH0<=XRYth_4I5%5Nwv?I$MiGO>)s^xSFMkgyXv1Y0Oe^;UAuUqzxm#e zX=#o44{>iYMA(y?Vx>}G5)Qz4TIp@QyIQ3|ccjmwkEwO68}(j_O&CnG0f5c<>7IHQ z%3*&Luq2ah#j*U<+_Z5kLpc55@03*sT{nbZO~}WEavpQoEC`6qOUZef52}ND7T)Ju_XE zQmI&6%6L1d>Totd__%Rv+}m7*;}=>p8(`%zlNbYBGgHyKh9+Z(1AD@KWSQW(+=7mo z`b=q^D=CMOx^p)5s)w)X?)g!GFPnC*035ad@_+bq4_>=;@!wF+2g;M2&d;6}$`Mt< zlo#&W)yw(~|J<+CGtWG$r8SMYDwP^J@SnM8$ncrj_3}jHrBsR_9;fWh6(4zT2&+Uw zL20{gII@|bs;mg%UirvaHUt@(qHbk%rIw}Xo$vYp(c7wGBmQFuYX&qqKr1Xf=HM`v zoCb48k{=Wgq@qIYg#S9nq2mD zkk=3ULLjAtTkFW$AjVnvJQU(Mw zqPq5wy!UJGq|bgYP~5IdBI2VnpK_lh)AltvNx)cCWyw0_u{o{G>yILhqL5xMx#&?I z*TPTsc0Y2n^&QnT#dg3YH=+HfD<@`?cFWG|ibA{WoE0!RNphyN>~NnE?a%#(Ga;b< zcLadC%q~nry%Y8FGA4=+5kqixwo1;~S8p0gor7MiUV(g_z2N^O-#47oUwg-Mr9^Q_ zryJKk96H3!wC>}3ePpq6s)v=Dt@JW3M;NDIL-QcD;1DD(G=T8(>DHaQdc$K6q%K_G z_vh^;-_8{Px6E7~xpDEaIr6dSZ7F|afq#p>S;1)0sZ{9R-7|g37k|FK`K!NN&p&_D z=|y~Z)?p&T7s!hWU0p)8tdz0tdAZw*DcndY9cZO3@T>a9y?S2|T-D#A6_dayUi_VM zrmkPRrvLu?en1c1cYU)qk%WK};Div9DykR(gaw8LUVmFIZPyX(rpC4(Vpk649HTXQXmb@kycO@LX%Axp%E)THYx9O}?JD3Bd<04Xal z5fbqrCdMcsn$l8R~&bSj>lDp;VjPG>vRG1nahwYx0x$>|CGugnNDPq0J0 zLsZpl9L8mah4-r7agk=(#AMf&ZR{ob%(JC~QlL_9s|b-@anXX{I-daOi9*RWL&W!N z{W}P<-sQe<2vc-h^waN%-Efdte%Cgo5q6`uu657pqxE03(0)DR9#e{T$jp(PeGpP# z7&~%`PM1Qi2u%kC_ujQ%*L?FEUbUWXoBO=I)Z4iN;P&0$_jm3)-JSlX2t5$x2Mzn? zB8VookdJ_Z3r)=k-Mo2Azx-RjSzq}@pRYSF+;R@LM5O+D6xhRy#7kMJZvy0&1yHi^ zkYpQ|vZ)1BNTjlqcqiwe#Bf<_FS>VG|9-h!3w`LPKc;(UXZHC4$XQrqOb5&lzzJq! zm8-zxDELkV#-<4IEpN8pCY+j@BcLr;ZGGS)b!E0Xfi3`*F;mfx=N=(Br>(0xNGW(4 zxNIS=T0;gFf$-$o#9G{35r8^{Y^)pz7r~}jg@Mg|k-t*{5{j5P!SeH*=N#l>UN(c=;&dI?wsV8g|m+OjZy@AnYwQ3TQM1uCU5_RjlJX^ok%Q*)!r z?e>v$vfDW*&4GVj^fWkeXpotP|Czo24!13<%7pQE%(?bH`J8)hzPB<3MJ%EcB!h~y zs3>MzrLhf-2{55ZgBS=ct!>se)3&KqFrZ+o7|0olB2xtwZjR@kxYwNH_s9E=xpw*V z@Atu^Bq?|4U;Vm9apcQ6vbR8N4e3HA#totyY9R*EDKXk7d- z6Btyg9Kn37JGMXa{LPt*AM(SU0ejrB+~Zy=ilc!it_h8i)=84AY0QhxX+Yu`18gG! zLn4x91z_d&^CEa2bp#8s-xIipO(lk$n-6}^`uX|5=l8}AVj0AuZTwvW}!a#R=ui>6fhvP)In za&`d@$KJiG_>;eUBUY9c*?%b$gDM{J$xRr!eDQ2n^qoOu6blljvdmqSKdn*z6LP~r zR-!t8(p&j#2bFOxLv(YvTs+#vLNtJMy5=Mv5{lT19@tnHDi+?z&bVs-n~5<|JNY%T z2>hnrXB7A@3raUlu^(}F_>I}FB!wFHxXB`PTBhN5HD!B1V;st6nk_PcINqbNgTo8y zb$42cwN{)sbBT2z+%YrGD7`?L1;`v`CB~y_?g%8}oqR73s!|+>ss#=;AOw6k`3hF; z+OshQG8vX3q-g|$rB-B>oJOKDVgamh`*4j$1U?_hzIY{bWI#KbIF?HV7&s{9MljA- z17sBlh;)Q*VSpd4Trm~kSrg444nwt=NVN3HoLEaB6nar$uB)vsmx{^lg;1U&R(Isj z-1C+*AU9i*m7f*WUj?PE17(O%b(^!4bs}Zb`4?g+lF_xn*p#YDiX0dR7lOAv z$F{mh5DNDxR5cP{U4zBBZrgwl0oaZ^cdyUxYZm|j_{izg3;S2*zF?=H?CZL0PK^s7 zkUBSvN${7j#6ac4&l66cyMSjt1<1zXo%YxgU z7L@^z@~5DcV5Vt?NzXiFm(mEznD?mtVt6StRAo%#)n%RMF2xvw!oWUi1?dKLV{mIg zN4ZiFg(7X}hR-!jBL)gz{mAF?9s}ns8fQt$MUSLV9V|0Gmwl^+3g1LSw+S=$kz)~u z<*;&LC{zkp0;6zYaJ-C)SW3HyDagry2rO;wQgC4ep9QcKi!whqgMWDM$FQ<6i%G4R z8;>xlJy2u)3?+YC+uOQfTuLd5Nsv1#XVnL2@8tM%y>U%)O;jXPsoAzJhW-P3sw`X7oPmD1~6EK^Zj@>qlMkBs9sSbeRM5-5M7%-1N zjkqQN?Lz??GHo1F_e!(h2sVMcrV<8#Fau8q1l#Ojx5KUDI{Sdb!Dpu^Vifp7z&xq$ z0rv&R`>LY{HT%qt{|}X%W>Ooza4Fuk;B@bXk~%n^c>5GW;ULzW>WmdoY%F<>!g z*6z3Dw1`3QVH%T^!ynHz;E|fkM#IdQdKo2%<=RPR0Er)FM#L?-W4KGu@fw@jS7c>3 zq@0128^c$%W>{2+nFSmd1|q`gPO&UEUeC{}z-a8LSSP3|b&ZOYI%LynkUcXXIu%CR z+MeLr!+W=o@j)}&O#`@0u6sNHaQAM{+{}?t?hfXhGhJ^&)u9L?_$m&;5!D^Lj!G{q zvJM*?+qmNB5&ZOzy%1+lotBj3#srw>OQ9;^CciOhM=4lv6Bd=OwJ9sRD7~;*!J^4i zVj5VMRavJ_@p9)uD18|YBYE4q-`74XwWk7-C0ZjrQ2#+HhQMU7j!D<5AWr}qRbM0J z%5mhMRDcE@C!1A;P%KGOHbN+8ghd}$vmz|o7+)~2)GL-k5^92QZc;&v&2E(1afDjb0k`F;Ve7b@~_fAH@HG^?(Uf;V8lsUkR^ zu})Gv8F6o=@C{h1nT+ag1_Cmzn9nCWVmKseWDoV+6cMSzPD(j$CsG z>-KXVwB|a_eRUmXB{0mPBuIft%7`(jpaQCuV@7|y;uf0UdaBOF6u9ENC7x#xV-;Ym zQYl89LYG-ICtMn?DE*umbsu|@z{HSr_>^ni*ILo#j>V(Q0K<1Q?m;rYxG5U>zM?=)m}^sV9m)LvTGY$KmVp;crlTQ&+fy@U1PW%4xZlXT_b zg9q``zw(;uAt(@iL7Wj0)4e%7-k$E8(4_yhFlOoy|aj%rVUBcl13*pFoZM;&94} z59?OIh=3vNcD`rm`!EvhUj!Vo-B3G{+QvB$*wa_SvNi?5@fCWeIrc6u;2+=jNzBiV z7$1@eUOJO9b%K)wu3t+DUG8YjwXxCo#PP!^{NaJh2y!g(;35Q@qA_6m)#JcIN-wJ= zPU+*k!@=j5+A7oWB^;l4fIDYiS$@jQVO{$!<>n?pFg%=|=2~Mv_MQSpQW0&;-oj2@eiW&w2@U8Fi0&piNa8m9Nb6|73 z#{;iFg53f@m)CWV1_17E@BjE6OY@_dCz|;@WUxp#020;|91+Do1lxsxPV$2e%8LRb zbqTj0JBe@l>aW0yp7$L%ckVp;oxYv)21T5Quz}HwN?o7>e`Mj1)&}|sO9N9cMAScX znzN`tC?E-;yj$QQeScJl6fP%EpTj#paI+|H3KO`5yJ&Mq6dsZC5a3}uDX1X&*i-`6 zWHAR*kfwr{An+2((Tyo)9QUB-L-+_8aWb0nWdEgz^$c2i{4kl6czmu$us0HSCIyx< zE9*(Qw)xdfA-MT3B`W)H9jVb)HN?;5_q6gm%H|}3D|f5xkO7csiI;H zYk7*j;*E4+n2IoIv^5q4np7?XXbvY^kPMx5&ANB3qX3bXlpYu3t94!7QB{nH%8TQ{ z|Ax#5%L2qLkDV+=FBXD~k=~pl>tJfEjS8DA3G?#_sMzS2e#mQEmh{8I48) zr`+#QtO0fTPTlJwrNUS0iI;71c(5pDyzgW-C6?P z0wPu5h5MQ*l*tT}$wc6f^IU50H(YaQ;;|@qugl`PM*{!=qdm(@H^Ax&9LX^VtV-Lqz6Q|B%XEJHRjCw-P z62+h753Ewgknb(d4=?h$r(|$2FPZ^Re0N{^L3km2oU)o-0vC>zrA7SL*ZeV7R+cfD z^a27*pMt1e0}U~LM4=MOgl-2~0$zh66%!yuLC{nrjQM#=5{U9ev*#4vp#Tl?scN#E z@|6E+tRfE~qMAsPYyKq2yvp4G2ar@CNXhi>I>nLs+En&@NBp0INL6Jn)P+q#t}h3p;<*R}9xcJaw7CfWYwm#9=Q_V5 zk5tS@AlOVPjhTmW4cKM?Apv-@;s@IMIkIi9+KF)%$VlsuU}t{(zGZY<7;Kv(AY=Z$*n+fM5LMH|?Ft_MND<*CIc*hES2>FbWzje+gnK zkxoTET!CN?Dv%n!VJRkeT0D20IE6<&{1N!oSHBcbeDuR{>hxJ`Zf;6}NGT}Zz;Z%g zdkTG7U@iN=ozeZW@Ea8e(AohNA*6UsLI*m8q*ht1vOx~)U&YH_^>euLio@u2Mgc9l zunt4%=nx*Nw9tuCL;@pDLNTR;(ofpGZ~`03Opa-@DyhXJJgHczONOxo=z|O)Jt%4l zT-j1oXcEp;F0{mW#t_?wE^+Q;X(mg}jT4gI03=iK6|g;_!1%wx$|u-}{Cbs`ZEhKz zd7v{I`dVNy{-LM@%))AA8^VGH1N7vZHz?rDI01BF(2A_?sKxQg+fJakgn3G=0vC^! zm6|o~)KMCjlu)bQ4Z2*aDkP@HdWcDg{s&uOR6bb|c4{7=l*M5T!RHCs1>htGGN4w1 z0hO1Hm=w55=1O6?6mHdcC(-Vvx(Z3Iu84t2&Q-!c6x134kt)QMQq~y`!{_|YuvQ2* zoQE3)Xp|err$9k!Ac6aq?mX7$HvvW}X06$jkUQeow!dH)jaama7snC;&;@i~(T&9M ziapf^yYj%MUcg*ZjBY@O+&~=r+{L*D0;0xNkg`cUZonhRmh4hCrkvjI+9Ml)y&b@& z8oPU42G>0r0Gv8~W`1UNbbm`W!{10KOZbIyB0H&}3LT*cY6vXQq8tRCL}0TFO#wZ9 zKf$pRr}6kleJ+0Or(cR^fAurbZ|~sb$&;b};9gO7Ce8Xz%Bkn`l(!p!We%B;6cWK! z@HsB4TYs0(buhBHFB4kE$*?);@tQw)E%q!dGC)t|i>X*8wdE6a{U(8mfI?9%P+=5; zBBpAU(j#RCC`G^?g{73PQ?LSHTd5ISpE%$ZFcvJ~ID~*URM$y#kQE*66D{k`07wWh znFJgK8Sjx?1r!)%22}5x-;|$#;7@;Z$;fyQg*q#%(TwZOh-n~@ zs8!>`TlKC1bhyRQ!fed!DC2*==VRErvcLee;>huC0RWTF*W*;a7DJ#q`WkN6Uf?{1 zmim-q4sWrf%hQDbRh*Sg^0IQ01=7#Mb3zZ2*ML6ZUSLM0bt*TyO_ZXx&{lXVTQQb1=NaKML! z(wMR+2QA8-bEx!UjbWErLm{GGQe>7y!=0m^J04c##(>G{?5`ze`w*BIMlp`6s@P&w zXeVeN@_m+qS<@K7nIW2KBoQdE-xU>?HYd2xm3!CC@CE?uS}eQQWpKsLzQvep=wM$zs@+SA1XxctbHU!wAXE+zD};*R5| zaQNUM{N#&XfLFcv2XVh^uf*B&7jXK_Sp{#&f{e1CQczv)ny;AcYjRD(P{Byx`zY)? z76@vBP&vLm&y63CI=t<@@54=>_&DZ9BjqO3SLzu2f)pMsDne>>pb%YW8n~?9s>4#4 zmKBlJq`*@ez(CN^RaPP@;7Y|r_~oapU3V!N9hO5MKHG^<4xmtT(8{r-peT+Q{ktK= z-KDtLk6L)PIX{>70sst^6NB=N_ok*mK*gzaJu((#JSeiMY$$K#yVr9mtf2#k3g7M1-arO*2sd&LDtmLlC%xmf~6It|dZuervUSz)5e>E7U2bglmc z4EzrF(P%W%xaz(D91sW<6PR>jA}x6p`XM4BLm(iVlnn#93rkgf46WIu*aA;LfzutJ z`E^811XkxvitO*YPA7{J^?0HD`F(6v{*2nM^1M zf*=ef9M(`BtWPRzy^pO_!4OEWRbL0T2fm^Z0|l z6v8oC<5|>bvzX$YNhyBKsu|iB;}m0Q!p3>1`R`M@o>w7El-Vmyz2b#YdLo6+l3sww~^MPI89c~U!5q|XW5 zr6dKQHQtni=74FJ?1&dC$+m7{e?Z^Y*dek8RLYqkN`O^Lu8Qfg6bLttC+72L?ee>7 zlA`ay1tNcTWE^mHDH%%7AVSEUH|cwUU9PRH(#Ot)%{mT= z>x_Nl_?j$icUPQ+fVB@5`=VvZ2(D@=7>&lL&O?3J7a-->M230dRM_ z=J3HKgWp))XC%qEi6Ec4XxSt|Zwk(1&TY_b^8JAVBa~sQ`7LwJq<{@X(4j==&sQK) z%GliA!ts-*F*`Sdulmxb#?Y0E2M2;q$yP(h`G_sE;x8(FJAQvzkyR{Ph&JQ+bXM3`4HTA_%g#U4uKoU zvQ*SE0hNLiTMY#VBDl{@j}R@M(v#<=-J8Ol8QQJ<=6(ha?~GK;Nrfh6WuH6i}wYqvFyUk>X-7;gF^mePkgh z`CjF2F*DTC^F46XzG889gty#u3+Gvi4i1cUj)a2+o}fDS(p#;+E@c~^nNc}$e$`Gm zT^I74psfL}Ete7sh0VSU3X7vo%RK45Q7@mYjTV>oOcEP|DAuHX!mmXRJGEM^D)v*E z?;n<~we`YM$$;1f^(Vjz$4x1$Qt}?Y2Ijk-=F#*>c-M3}%4+7XN0CbsM_ecid;>G2;G|o?1+PC-1%&;iC zh6r5N1uQl#gRvZ7^|XfiC8{1lng?j!kF4$vn%B=%qtZP1vJ@;8g82S zTy1HLgpT(O1DM1Y0`{;G}ZQSePAS z+$Ek1uW>OWjZDQiJVVWH^OQAzT(?72Ke{IroR<=F{do`!I31in($S%y21?vP@aa-k zwP*~u`dcxe06SzlnC8cr60sDDjIV{Iv}1n-aN!)qqKNqtU`+-qj8Td8?{ecnYYhr$ zwZi)3s9~B&zXlO(fuUFtNAmrRNlT%!^7nc zV%l%iB^W?B#3XR9a8L2q(`-t}2i`)iE7mZ-pB1PQ`-6W9go1Ncs^g(ITy^G=55D#l z+44<4_G3S`n+0$gUH3=^;8*_Q5BL4nAN|F1_b>0+%ilN!s&fN5eR4Yr%4~geVYl%BZ~}y(9V`hW&>Q;dlPvPw`K0emf5B-$yG< zKGhIl@&EXPhK+*1KmbL*wb+p)Vdorg$WnJHc8>rq37Oi0!ZaQ2U218tQ%u z`_i*$lm}>we?p-tm`lCa*l=zgKwlkQGQ9I+w}Dw`6xchH9`kb@+zeUkGsY>_nF$!i z8syJ_fxr+}S)s5g&ZF`vQ0FYR5+2k=YUnyC{rPkRT?J1lCoD4 zix?q-2vvH!mWpmP!p>yUis--yDnY#s#6A-1z=h^0vSLSFr&Px{3YqP(sOhgY8J#e# zKb{T1SOb8jR4v^9;Tm8ThVE3I3s&bN(0~yD1#pS|-gOy$t(+Sf3lFZCih4Q zOe}zs8pY_%1yIFmSgSt}haD9xudd*)|M9K(h2Qu+96fSS7OE^a5WKht(k z8u0+`fW@Ik&HCVXLcqF&l*AJ&o`tXq&>(!9+D)JPAD zE6|rLD+Ap=^a(REI{fpr$SEMJlNB=1-_CR_MM^7Mf(o1SN+2kO0WOZ*(TxBFK_*$? zrU8j{q-E1$J4@wv7iUNK^S9oF11k$C`Vs+Zhxyr&8Yy3IrKKL@OGP{|0)5YN(3T=# zk8@-4ZIkJc#jJIUs$j)L*B9GMW`K1oB8NRJQ;o|sBP63UPI-hA0JF#ygWY1}IEKN# z@H^vi$B=z7cAOl(KWU8;^of~LSzGQIQR7nNDN)HexUXSA73lEkSOEd->IBqf!m|Pl z3S87Wb@0WU6P6U~z0wi~3?&?G z62t`ALuy9kFgu4TK}3p_LWs}jz@(H_T!-h4bG(KU zvsAzoJ7nPnmP9v8?lKM0!#B@)0H}1)a2UZ_P8t1V!rw)&3@}-inky$bQWq7w+Lv+E|E?i z;xBkZMX3eF9XEaQPFk#TRk>HpkE6n!#I`dkJWc|P_A^k9KhKOASHkARx=x&5fyvyB zI3EdAZ<$~O3Jr*bkRlbXMwGb*K!7h|DP`Gho`~_OVh^C?<=zt1M zv63FgmOGjI7a*&YjC4J~_g0Wa5f8|K0@IzzR2zv4l#B$|KvGJaJ1{dIYb;e*C^H>2 zRAQAo$dC!TB4E&Y=71^a(LujFu?bnKoI6xhjAq8%)h%9yFryZNV8-ik&J2_>qppM3 zqA}N4B?fhJ9O#lUfpHdt;)0Kgr2*O??lC8xW@-l9`>KPR$?V0C0DE z#|LlTv%IwMSobvF_XY3%;LR$MBP%gd&9wb`rBji5BWezoVEVE~yHUu{@}t~HMxjF5 zjKZV3EE8uj5`v3CX}JRFLSZ<7&Gk*(?}qCz*_i-^o3)gl*1am-m7Xp*Q}ANfk$Es3 ztC}pM*3xppqd*YB#&Gf&eZ11y-3T)?BmBV2{uAE%j(6km;REO=6F_u6O~?Tl(NeL& zed40tAuSP9v#cBrlavE=ieXroe5(GH!ql(KR7eHgYTH~ z)jG$CR$apK+$>)E&o^Q3(gKxJ;X6wKR+r~cf}t*PGuK}dI7KLnL`uF&ace0ypi;FM zs0aj5)fNVLN{~#uCp0Dq#iq&kL>HHS)tO{r0095=Nkl<{LiXO+n1JH_T00MOSDV--LCk}(abOQPpFP8`+&Tt((i)K-Z8r;Y%KZn;dnn^;@G zRq?V{!6euFi-QHBBw@`IOCVs8Ql~l&kv&4zfZqclyvYrqF%Nbs$^Bx+c9`T+^o4*^ zYp;ZRlJ1k(QqBp{{&ZD$f5`&va#8x9{jgg^iLf58iX{M8tZ z$5>vPM`e&U6}Z3-#YiYD{)Math3d2rDwTFm(4a-4i=ZfmO(}=q^UY)-1r4tZi&`R( zi^7oa;4`vPx=cCkweqkaSB^N{?9O*ZMLUq$QOBt0EQ0m;aCfFfQCaZkh&^B$nKCqV zXi!%5$kNBDfC3)v&5q0oX&@06ZVI6H!tYhb`SlHa;?C2YH_^HbpaW(`^0ON)JQy0t zEya-%O9Oi??b)@;wUGH7_J^*Rq*#Pl*Id&Cp*b_g!sIK4#)Ci0u2xVX*8zK*Gkx9A znrI(E>{}IpYZN+v?o!62DBw}^n-sK{m8u81jJT``R3g?VCI$CeN{p2d+f{977o2f1W~A^rc7T^M#3o2g8wh?} znH<%_-NW|hB&O1!)J$ec#Ga{oxI2Lk`=x+B%`w>puK$S1;N0*Xy;D}11IN!^#1}p4 zf!i7QBmhPV?_QVHb&mo7U-)HTzIU{;@~suNTC~x+(FlM0PjAI|G?Jo{5|_}SV5P6j zrmXQA)O6z6>ca1XFacz}DVIC^&_;z2mXiZRAX`{d)+7X=U?S>-ghL1Sqw7Y1Q8|Q? zXDXV|I;9v=V#(XS?~!vtH=d!=bJEA5L92=lk&>2Dt`rVk*U62*HZRW2B6S%*{Nq23 z-}>)=ilwD_EHBMt()Ut+6t1;OL4v}lN+358DnU$z5DJG1#f*w5n1I&TDdodsTG`dU zI)$C_`8+x~W$mL4yaNiWmS|xQtJrV60jXkYChVyU`LBxr@Ck3wX^N-;LFUF`q40M|EIvZiK$j zpKOqoC@>ewhU|;OjlOA)p8$l$Hkqtl&>}RGkDpHkRFA&a3RB!m05w7n6hAd-~uA5UvD-rb1;Le(jQd+ zqX>)>s1eK&)bjhy$UR39j=>a_(SIfg;7jnBs}D)-RmEj{Rc$bIvVZWo~wi znc3NL_0j!j0qpGh|1Zz$9s>Z}J=Mjf)w%iED^lt@s|8*i^YgR#gV(+u%gYP2v>{~B ztaVXjnH$V2gUU?wucS7E!D2Lxo86ttCwz~TJI2WBc&?P2gH)nPcj5P@i!!leru-5|kSkjG<1gF8Gk zqWR#V1GxS82|VvbKZV!);p?z4KaT@@_n>%ferEPo%27f}>R&%gL#emyD`lP;&2I{^ z5N3){j(CYuu(G&_QhID`ZV&*$0SQ=IMxqL2*^z08ATo}FgXUhe6J{)Eq)2v1F%oo8 zDE76;Lg(X?MP;=i)=IDlZ#!2p$-S6XHU;O0*s!^Sr2*8^0{ zU1rS1^8AZSx%0yK!L2!ZqxU#rm>~F0OcRf!Nnp0w2 zUiiK>_9-(^Hg}1x1p&L17@J|nH5-a9m;p0_!REG-QY1H}y(tArkjC+JS8NPNQ4iw2 zuBGT0>HzX+sfMwBQ>Qu#Vs*S|pNb`mJ!p#F_v+|I9G7G~X1R^?l%ggxr~pds0gh9W z|G&zmrM4>X;j#RuQjtend08<`1WH3&y(kdA|>?+M2aUE#@r52}ZiV3J>e}Di8 zbR{M;Y;N!15jR}3R=xg}nXR!0yVvD*-D3d2&;IsnmsbxQ`l^0svSLnJ9H4+cbl?Df z_Sas61N-+=^GyrzP*93!cZi}7s}dB{6q@o=a?2?FY>Gw(HAWINH~q!_~I{o3eKE8Hx-F*s1qurLD+`o;6W!8rcDd+_poAKl97D^Vo45SY5%&;sV?&`cfre_-r&kKF2Do z92amThuHKxA~r{h~NQ%Pi<`&eia_ zLzAnyp*EoKmWmcoBN#DFqk#fFhO?~~(Bckj8%cpxns26JPTd4rvsJ;L0SYO1{Vr`a zOXy3%-sJ`S;hWxz)ulN=a}IOHULav+hQ)PqVpKT9RwMx)2>cbrzEtJlLv($W(q`KT zDxz(z+M&i6;E}pe;2D`Ry(LAT#bChTj5g)>^bfcK$ckA)*D*-V%uuGv(wf)-HGp?& z?x#=iq@+0rFR{HW60CoYuWqO4?xZ7W|M;>wY{XX}Re+e%S zwA3-2DFX9gxNzYjp8d67j%%*EvRTnQ3TMiclM)Ce1NrN-Dv%{nn;yGO+QL*t&k}?7 zm>M^vR1v{PfLLS@P*4Pk;7Ds!oNEkXiuDO0&chIKFm zmByMg<6hwEYpapKM*xXzN2I;7?WONosHi%S=u*ka(AT1Bi)35E9ft@o1^avwLZZ?^-d@+zQ-k$?d=_0+StIk3m0+h_(>c;bs9H+lhZ;q{y^ccb;9X2O!^+b^13%;@A4w8J;hvj z<&nqN99iLexmvi64KS4~=GtH%;yZUyu_k2+mTA_~kb+}i8U%E>{^hGq98-7RPk^O$ zE7m0d2iKtD08~SPBg6ISv2In10dbavDF4(>_tQF-H6CD|wI&E^TGYR@6f*PqW2_03 zQ)0GH>e2ud)iyPWfT-<7ts#N0*bAMq0g_JkGtezmYh_9uc)z=zA*D|lQl-F|1`Fr@ zWq;*Haibr8Q>gz_R*Mm5HT5Mm`r+%a>p?S!2qT#{?uZg*fq*90hU^^ zvEAdE!~1q#`8{9preyZ)l+rPd!0vUqU0mUJ^XsY4{LX!MURry}Xgq#)?z$x^0|mx7 zt#X55)OFZgTfze>1TSONQF~mHrj*7Y{c+A1?W}`dE#3DcpP>e=^Kmw7e-+_U4wO1s0Fd)V%d{MKa zMhyk+83HW=%_vY4qRZTYoZu=c3^2<9VKpoMAqa_>QgB-hYg+rEDdlhz2pqa@h-qbi zwNA7q%~Zro;GvC3%8do0OOFGu=8Cp&Bc<`w_!$PUB$hFv^R3;h_zsPqb1_W;eV2u= z+7i<;N-h<5C^Lj(8uK@dJ6RLUh7WxFB!2$+&ph#%hur780Q^--X;VYGdtGLiNYT6Z z^)GMzm!-w!#iw>%UI^n7_e&(7dgKmY4EbZ{S$w3N6j1quLa?U9Yq-=$V0 zV=Zz1h|l(nDo7@vj7B5Oj1x#f-p~9M-qp!OGb)uTBx`&%`2&_ zX;JXh{QNvtR+e$-(0&{`cmP*kaTr$|K8S+{_v6T+L)g1_FZS$N#-5cGjK?EX%Ru6h zs0>V`r8Vk0l)m7qBZr$(0u=Zsw*p`~(wULhE(=@onQaXhfP^w+^-vBA6v-b?T9tl_Srw5?c~0OBQVd3zf2nopKV0v;!tIH7V2M9nIlqYt=fv!s^y_9hTtWg7^Q!I$VxF?iK z=LoBFu)fpOnE>&uuvWQ>v{oW^AohhS^@Tn(C|y(T1<3l2X+pE;*?t(Aslag&5NFz( z+#_23x)0&*LKK6dwe3!eJS72qV|7m1&fM$OVVz1&>m7{|6sU4#Qg9$S_thQV0wMW( z#=G#nRjwkBOrqSu6--#2``dJ|R=k&Mnqy-g@fT`Si&M~gjsDe&E;HykiwT6r&A~VX zGeg%UT-w-yRmWoDpE0zjAXb+-oq?|Rp}M%O;@A=i2J6-z03AbklfZb7EJ zg)lvK>J)ze&;An2%L`Jv-2BxPVK0go^5s<>IO7rufYO^PH@QXBc}ggyXS_hBh1S3T zq_~ob(ZoSLp^Fs74$3#A+~Me<1Ni*MKL#6Ho5)7x3zI@}QrBi^MM}b=2!)iC`c+E7 zsAHx85K@(l0qLA}wK}TPtO3=2E^A?Mc zGgJG*%0yU30v?k|#oXL1Jn9KZc)~doR7O-vQRdhMq!55geSk$Yx2)M@FjHz^xDcj% z&LNz;oZ(V@2*DqIZ7CNs1>H$G0?{4*5TRR;LP{(mN3bQ~zqwQJj+<}6>}<#R*La3+ z+N@%J+)2@kaSGC^`TQAI0uOpbYc4ZlKa@n@4=x~+>71mL*&oIV#JI%CkaQFAUGbW5 zAJyteT?h9<|8!6l)z z-50EF^?2H&@4MrMPXSopP5-;Rue&_}c>1%xZ{KKk?)iQ3eJHf(T9FqdZgNX3BkL3% z_ZX|V95~i5h{VV{{2H>7!3N10oc<*9t(iJiiQxlIQw2xpBC*02VpwduEFCm3xnDAXy03 zLLiW#0@v8Y`c=Jzsx{3O$gBPA;QVR*_2D`Y=yx6AZP31TLzffIUD(FS)93LupZ_^$ z4EQeq&gjv**JXO$tpR|$Tb-HNGdDN$05hMljyb-i6dvHAd}3=wE{KXPXUs3o<4x~) zFaGGYe}nz|R#+MqRD@J46iDt4h{o@$PEHHTQHst$p+OpbP%J_B#RhlK+N1E%GmPe7 zAbA%83Ae(D6KC+UANgMN+uN|9dv*4C_-<3g6eumsoz{EGgFB+iS~jEgY$}FAWoiJ@ z02~zXM{vRW*(@pZDj*U^wJI7NQr^QDP>{hT=-5F59|>*;0QuZ4j?}HpWiA35RW)y; zZ+uL!8MMYKhgrdxlD&clP$am6AfmX0rVqZ|tU3?|F%m|KJ*C8T(Of)tWdk((oL^0R z01nsMb02`Ek#Hc`sgC*CS^V|eZbHgH=@lpn>iQ^ZQ%l93#Tl-fXt>hKVDejonFOI2 zlIUy*fM8mQ%Aig3XpP4BSy5WlBW_FXA?Pw@= zugmn3IePcJZrhk&I&uEuSBz)IPlNk{)Cwi6%6__o!cvNzOde_O)Meau=W)F6rjOu@ zKmYMKe{oIsQW%6EF{wU)LEu1EJtVAXNrbYYbrgzW`VX@KG=zZlNI!zCMEN7B1nB#} zc<~~h^`%e4pTF+)m|a?=AgdLlZq&*MbE8X%iQbL_YY0x*3YQbrOwrvEG6pIW4wrnT z@}H9dpyG2C904E8F$y<T_bZrk^u@ACUnNm7&`$}o*1Idcg2 z@!2}|wdi~XDqjk9`nqXNvUUKlc4-5zd)tSxI6Fh@5<{?8yld2T*t0Z7sS40jOa%L* ze#Kf>K;RHpCvVsdy0=$mOfl0NH2(%9CjRf9=obylAZSUovgN zyX;v$kIm3J(yb|ihoKk@0J$@4?>N>rcd*k}JnfP9JNtPLz5YKZv$yU7fXn~VYPfq| zzxnIGyJvO(-e<#oHRsF_C^MMoQ&2aNBDJXiq@2+A6XcXIJ2S?`OB;CJi(Zb!g*nWR zX8{Ednk>A=BqUMDQi!ywhjPHoLn2GSUGI&G473hW-E9-MQolTF9I}MGR#AsQP95$z zej2a($rt1Fv16iPhti@c=OMjK$9uZdIuC*Gko=?J&lfeMz9gK@G z%{<4S@2Ogk<}7c#vNVVP`q%HkzQuW_(b0@VH)hRvWLkuKmu67TAyKA zSLgW_u^vsObm{X~?FUVYbN~>nhx%Y)sYU=LG!`b-Aj;hq9{U?)mlF+`>+(w`Jsyum+&7g}$jD%B7-UxC^X8tKV)wMJOn_^+^iB_#13_dkKvkfd@f}pe6cq$b4lxxvgvU0RQk0|Il4|^?i;QaL~*$1KgyL0`+>Ngi$n`1hFf4sj4H5Rgk)8^mziPIjqv7o zz89;jE6qpkC63}9g3&mvp&0b+ro>$Wo@X7z>#5`wl&O4iSMXR>HUOz&MPX}>t8%{K zq=Rd97QzWCSWE|l%LZlY!5&rmn^za-@jGvLCsr0_1zbY8$!%ba!mqVraef9+R5>j` z1+)g8n?oUl<*%`AbrNC?kTswh7_8Ww5<0oaXf*RPk{k^9GzB@j;vLvr?JLEdaGlEq zp|y~7h5^Tdd^?Yt<>!p+;F@o)gQ@YB&Vo5qR{`v+@x9SjK&5|kCVN2b#&-ymgmrJm zxF82pZnKm*3QHKrUY3SbTV-(zj5t_Ffoo2Cwps7|fbK-OI%JS!(eAE&7l6)G$ANUe zah@v2l`aBo#~&U>@fv`3DVgIH^nvp7>yFnt?eM^4&&V65%;@#V`X9X zpU30z+1=p3yT^661pv=~@h`3}9NPPBr7wHAoB^2Xk3&j8|F~+S>(>Aj94F;(Mr-$q zD-Pie|NLe=??+#OOKa;ma9}ShqiOF^Ea_EKR{b>POon!@vK*`{NMA;1IFRtM~|I~|c=ENy&{CEdj7{kd*x(axu%oE9K?deCfIB`zOO%^=;^*Ve+sd@aI|Dyn%8Y5X{4jwVgd#J3E8FnTU z?Ck8|mQUZ_EKw>{*MBs=tE!?k1uAOZLzyZDg5%0@an3{oH?DVw!h{XE(ynJZ_#Rg$ zOq6t*8n00NVVSwR03moKV0JXZJ3ewNPMy6V|14bs$%tq;E)}UuIJjp4lfI}#FW*;` zGRGPZ3ANYQgi>`rgMC9&X0&>PqGzpuSS!`3jA|&0%zjn@53d#3IG+I=3Do%bVce$5 z@M;bSK&ZrF3@(lFNlC$mT$F%<2CF~=1ZMbMIr*f-Qgd#zEv#f1r(JTb7&x|GDy?II z9zbo&nL(^#1O|41K(xx$<4%?$85smb6ohe%;yV!L;YITDD#MCAY~w-tZ|T)Z=pz20=%Ml z&lCI!>kG6%7HL$(4R#Nb;va6*> zR;nV`i?;)6qPUI*yjk54%fc5?*@Z%21h|4VYsF4q@Yiqq2n(Ituh#N?b@fLd_#-KV+>f>9eusNOpe7YY2BqIPZ5-TI7Wl*@ZuDP%1uF#&! zKr&j>b!u&}PXY_7*$}~c(3o=z4fEA|2q52CUcF) z4aPMaZ3(|f7#MASHDEj}%v+#uQrtqsX3*XsFyAQ!7uUBjN(tjGVP$@%f9!*WT)@G7s~B}1`chDeeD|`D0B*KY3rgRk z8;|Lqb-=+&Y{eO^OU1`_g<_y=0H3cVy&zW-<@Sk7t64dQ&`kXUuiN5bK z>P8Jz&==3=P{7N=H2ShfqYgS>i#{HzgrUF@CPKp!5Z&&t1T0ZaYSiuc9+DCtH6?)$?U_LVvfcNb!`Kl(nX` zV$}@5!kq3JsZ5O%`%7^ffsd-{r(!r3whz;%k5;*{42=@6S33YZO5?t}9C+Y$u8 z%$%V737om)8aq&dYIkKVENgwGC@&n~g0D=Gs}CynSl1~t9)!~(2G0c4p!F&Y0bzhz zE0SCe=hu`~WCiEew(xaN`<(Nh^Ka~0|97vet);uuHFxEsuei^HZ~SjL=f?sVS#r3` zzbO_VEE`DxK;k>1~yiYD5D| zxg;L*4fl#GjvmG@|JHxU2X6i-_Uze1KqAYq8?l<6r8oeD75!WXjYJyZFjg^SLE-Z6 zU6+UFIH^R|2T-hlCG~-5$5aiGN}kVvEXls_X;BL3us=L(2~zMJa|S?Fujsmr3+K+` zm;cjCamTS!Z7$K2IROpA=LrgV1BAY&q%`HD#&QV8G!-Cf&+;x&% zr8P`tLZxj19(1_U;nfBF-2eDz3VKUGanvMG71G){H`|jQ_qlQvJAL@Q`MkJHb4-Q6 z*17V`OW_!E*kddPU`CM1^4QZfcUZc;YV?~xS*^0SHCClmbU87fJrPW&079;NxZvqt zs+EYqtI}M#u45`RVgxcOZ_PC(1svU$f(IB-nKa%3(7Xir(RhfRsYOMNn$-_ZtVhfM z+MaZ0E2`$wwN(!^3IbN;a~t_PKHn2ajw4ecfS9l-gVEMG5h$g z|NriD4HDySa=Cln^UyE8@!t2k_RqZfHOb8Sp66fFQWfPbOPLlBg#~HcG!--@6W0u- z?|J%`D(+RMFiy(hcJJYyz;gzHb8DBdy}boX3A5ud7UsqnkH^^FDcIcFK)rYxKl@*P z24~NnM>4=bYO)07D8b@Vps~S&(yf((pR#I55oEQuDJ#2H>|I^K2X6i-e)+e44@Zt1 zmO>;TDt(*_FF`Eo?S6MD5>c}$QHYu;O)9Lf z#F&QAu_R(^DhyCvRf_qhC3CBGPqJZuE%}ra`o3b%!Yr2N#}w)z*>!|$fU`tQ7@9!OV@-yLdEhV)8i_iT{dOmt z&{swvHfnjrcg|{lNvqKC`W{)>C4c;;{Ie zYX)R5rk5eNFTqK3DYPvu*NRi&TM{zx7Tu^dsj-MX*;e`#T#o~HEWx4xlv6=dz9@4c zhZ`i6aR8O6DKJwvhBtEk$d!ZuDC{THo>*tm!V0?VoLil1R)8?4#4|YJ_gW-o3Fp?f zu+wu*7q9RFJmx{yTzt{L`!~OC*?uymbT;0!dtLsQOw+s1_3vNs(v^dI_kVL=>RvP0 zWYS|a8a3(?QudJbD7nXtXR@kQc9Vrd_=ViXx!erOVYIHnlM@u=jzLBe7JHVLaOmIx z*0*0>#b{<0?uOa98EjnI#Lv9?r*Z1^8Oj+z{?4c~-sBiJcqqDmMe5O3 zx<10fNCI7mXl?y3#uY}II9ULLLHWZ#H-XLsaHq1WI#g#g9^w5reFSfR*ZZ*;X@MZk z4X8Masy+s=N*Zf`3Y%6jT?<)N;Y`XXfB~07MG{?|1)gF}#doSe6ggha2WX&1@FRtP z!puy@`)@gpn?HRL<8c-^aKI{ZH=@;R6!b-@kt>Tc12B|QfpI;X=5K(KWU8RR#c5`T zQ@{x#sO8vm0kVWGOC3|eRi&VrYCX8~oQ#whA7WtoDU}-ISaPR;LI@}(swjwhj`cQJ z>v1qpq}X!osgoJEVsOBVKzlGv><9OY=E`gUm|90vmi%4-m?T$~$6D4}uhizq97eHk z!xg{~aJh##;#^DdO$QWjz&7$SV+;WhZpSGk;Cv4EhCqs{w!{`|eN;Qz+nnpoK?!dG z*mMlJ$;hF+)7WOi&ZJ^vN5!nFL9f`o?k1O()ZOE9cl+vZ z{Jx`C-*Ekp!u@EnWGouO?c!3H#K%(VEzO9VmpSBNCCU0N5@H@3KBzug9YHaMRi3*} zIn@+;u6p;DfKw;W;D^8WTj7<8AhxYs%ltdEIh}Su)@gN=2o!4Jmk(uVW{mtGUQVz1Vq_X)kBx>F=Q>D zC(s~EjLI#MI#-qf`z(vfoeY5b9YLCC?~RIe1E4d}&WlTnc+0!qhwHAr3I`AD#iW<; zROC2?x2*ZZ$bM%>Lo2j7byu6F*nw$*3t3XN#gGWRBnIaNkTJ;e5->9<(PW&fWEmIN zH}Qvm_ipT2nv-G{xX2kr85HhO|Gi>$c^Z|fzh zH9AZIrV->Q-?yqNaedS9$aoTQ-3PRMs*$cXsng6>S>H? zU4*+1Tmv3$msK6(W=H}O;n&AdM63Z5g1Tg6NZ2MZE$RdB_fz z*WOrbzqcD%aut&)+KB8d({p0cQ*6-^^GXZYz{vNA-cC7TveTn#6UGLQyyuj&6fb?I zrJqm;NjX+8=#pV`a~n^7>?3h-|9(J%-c(MuQ_0dnnNxW-fn#CaOStKvpd1J{r_bQw54jP)@XD9q;OYuaojOHZEP@{`iVRVSMX+S)WzmL(Ddi6- z_##TU6dm;{MH2!QpnwKwVUr>b%bS3M!W)2CgTAQDZ&0|EbI})qt5SFjb16K?WM_MV zg9rEFSAX{p@S%@>63dJ83gD!YH|Tv~*+puae(xN#=AIzp0rUffsRoPl>Jr#d36Fha zfLvIjdX7{p{oPc&wX)LMZ~W!kaB%Mm%uV$Q9HY?)4#z0x*3Q14ptxht{FtSwWyQzX z(JwDBryBHC>WfV!txn}k1;T6wF${`5@JMkBB`Uzc?{Ur6LjOJ$p1^4+&z|2S8^pK^ z?g#x&04LTn*N}YRv3`sIBOaYhCvU2rK+@6HP$41eRW^bEUF$UVj0M}pfWf2`Sc_PK zSbGrr1cAL!#tj&;Z3G((Vx&uspn_w_*$z;|ep27E;E{j{w=28~gh?JnAsz-EyT+G$ ziT6`MHyHykII(K)av^K(!VN*d5ylKbKdFS249Cx`v)r|_cvH%TPu_OYpZ~Q_J&{uP zb7ppiqqBS6ovynT1MoNRyyf8B%D$K9obCsxEL}^}2}_-uhlpABw+e%FBbLoDDPngD zLf3JrvI9`$PRK&t2~4}P5J17}LxNd;(XzRTAN=lb#o2QgrD!5JjX_QTg+ikR8w(%` zFgCkXu zuFDKO8&N6D&&}dp@4X3I>+5*jqaKb6YwJj@{Q`VC0nQ8S&r9UeI#+;UER5o06Uy7b$n{LjKTY9ffG5pv?lP5BrGV*U3ao6*B^&T4EHdiaF!e=0tLU2O4Qz z1}F(y-VKK6BL_1p?!+;;i()}qVxQbwZ(1yox~l$j4@LW8eyejY$3JLtO82`!tcE#U zS?rhA?O^)D+WVpT<(g?@002f=ap##eSo9C7nUNCich$k|Z~8Zneyf@NcQae#!*;K` z({;CD0NmZ~y!Gtj!s6_8*_c06OKFF{gkYu>DW4$>Dbcr|az^PZ`Z`!3Nfo_#C=S^H z*YTN9U>g8b^b~fKtixtDFs;UcW5-V5#Xs;pxbyfam;?iTro)CcS^1<)+16-#Qs5sX zLqc>?Zc?#T3G%)H0;7PJU_s)hm+Zv(OY3j|Kl0t*h9CLvZ$q|(GpEnP;zYGd3k!g# zOS(9^JVLFCZkHwNqP87OOLV7iI;#K)F9$%NGzdKY)_c}$hujquQ0#22wDe=JOx9~K z^QE#vTPb8N9EO#ZWxV}^H{(UG{4dzIcclTAxV$jfi%JFz6x1ujI&I89*vJ|{2>fDm z%SfpqhS#Ic1eb)nw`z9)aA^N3ZolJp{N(Sx0sB`L;4n-kEU!EOP0nldHCX~`!s_BI z$3}zI#z9K0x7`+RQ{SwaIfuCm2#9t2iHc{5fAoNLnwmQAU0ER6$2i&#M4 zMehR<)W>J%lwg^(J5TtG@zTHqNP_BmWV#Hr8X8atAd_Tx2df7GDZ?-qZpx5o0Fp{M zfTu9C#*<^nxDpyHoFy_s2=|ZE<;FG4x$i9D*trcdLWwal?gmugQ=dM87k={>o`T`k zyQlu$eXqL>190>akC^|!M{fDT@p%3jFf10Q)lR|0&6>hu@UY?>eN|Qn(bT6db0{Hnt{6Ipd3;`UE`gF`t7Ir_SIbAO9p! z9rLp@3@CEbDS0~Tx9d<<)P$B~^o3<%36Lnjaz~4rjSULEAdl$F9cMy|43iM#@u?|k zj3o$}$w3#5iOP3~cCH-j9MrH}8fFQ9^t!*n6^9St!4JG2&Rb*9G_t^d*NPqKxN#wNf2fusJ%d&YZ!YQ6Z7*BKjA~22?I# z-LvDvLT!pSeD?#uNGXn19xkq9uFJ0LG*5=EQ*fcPs-~H-GF>nL?#&vvshArL6+9-- z988~^s$XD=_6KEvX&znsI~jBB+a(YXe)kFjkF2&(cCgwX$DI8!=s+U%9mW<1C?^>= zwg2M%DaDTE+{PSM{atHZTbS!I(+%QrQ~Oi>gn)$BVpTjx$ONxsT27wZWK2cJwA|hq z912T#=)Di^eBBp4>V0PRTPdaU!vO7Gcc*K5e_qzt+}<0ny!WF%?+jy{HM3zlec^Z^RshUSy`m3BLtugLa*s}7zJ%Mpn%l1sQKJdQyqwlvLK~c7yw4W4#@XCWwAHF&`KQ3 zeKYE?c3}-&N_ft{{YpIGKG);K>9Z)MVBB?0uyWYjUj}Qw6Wv?YACMiOFIq}d{dZ~= z)KXDP#mvkY`}gj_M?Q5M{@~AEhvUc3;PBN~VEMqkQOY( z{n0&`lmHl^@C1-Fr-OnNb*`8O6HxF_!W!3Tc#NYvsbkXap(N$zk^3jsICT#1_bR4A zbt{avF(BVP*CLMOAyP`TFOVwpYigq_MBBFgAae=R%~ppV}5QPbS-z6c7UudAzU*_;xw#l*3@1s8TXmc`qpfoYpO^ z`Tzw4SqYs169J2?0#C6gMwtgHao^TDvKV4r%_}iSP)F zz~I9gk^KY{rSFw>GXxA;l($w%sVu+%Ms7Y*>L>K23*EU%u@iIzAt$AeXrd9@$dN3e>AgiNh#f~-t1m?!;5S9GQYm= z+g`H&y`T8h%Vy_hzR|jFk%D^gy-|S>)w^g!Oa-&mLgB{yLI5b(D5+{)(6idyHl=t= zDHx4MQa~C~cbqzP20#7MAH>?`CT2%tZnB_=smG@*wL!p0%K%d3Og9T_hwqKg*(m;% z{T(Puwo#YH1X7;#%gS2O=iXR{ptGg-By^US7ce^>LxUhB! z8=IThne=cSq%`U>7UmbRyf}vgd-vk#kwZ9i@Bj|&TgB4C0w#Trwe?Hb+NQD}bsgUN z&UfRV-}yd_x>2i(U?9B^f|E*t)2+*y5#7p!n=-BN9`s4#FwGF8&p4IwQ z3cB2B?*(nHy>^$q$2YrNg*9S@rU4!t7U`9-@4z+^T&QoH5CA$GAlkzPN+6W!7Krh) zDX?N!THkIQcJS z(WM1zYwOtD*u>JxGOoGe2=0CD)wueqqu9S^4`%0PFz&{%1dO^dCX;Pk+SsHGah5#bq_|ry+MC6c*0~(jJWTj zG;)$gbf6n$Z0{7@>*yYo;!~7=aL^(A2PLCla>_Kmq3Gh-0bHr%LV2f9FMPCUbJr5^ z!dmu4ls7>cn-of%_fhwS@*zkdddefY%w$5l+zqS;Atp_ok3hUooUtaOLZd-743r_l zIo3jDw5zOK#ywbOrU-rE1asW`ihY;{$W!keKGUPYHOP|#<(iNz3FgnV@eGV*uvow0 zu2YOmfP2@z*Ur&G)^8+F;tJdmdOm*H+T0ExVxcBzo=3@W{MS z1gJ=BL-64<8>}wrx+Xk<)R7LZrPpC3RG?JEDvVPrg`(=)*ILk*9yi`_1HS5+PsgRT z^=4Hy;VUIJT|wU^B?*+Cv3_$AIwJp zUCzT0NEqvndpdR|jS#bN@5DT6T<*fyalYULvR&6Hh5-a84D3fT;P~lv^@&v$5iT~p zwo4huPoFJs{`DXFKuY#aX7*t-3!mEVbvL~(`z(Mr{QbucEgnAba-iJM(HY--TilRR zZjhXi4>GBUM<^6Xc!ctR(aIz>n^0;n0{VWO2~b^?=?2TTpY-^l@A?*;J$C_^%3(JP z>axkNrZ-_!RBW!4Cir{$2h|@vMrq{XdrXac^VahoNoE)fVQ3=%s+BkPvhYU&e5ZuUBFdmJtFgJ&}`8g~s zEMQ@77V~qnn46u!!s0w;#$$}T5iA)d{e*MofaOkyyBMri%q^~9`N$3E`z?&Ru35}+ z-F2SzcLl6gcU*O71-;xk{7;s$z?%nc-74#GUQ&QePy+-D(zK+WMXOgpAOS7~9&0nJ zGA3M#(IR+_>gA&wk~Dt zF1lKRuTupq0}F=4W&pT(DTGOdLp9qYRmtQINX8%|LTAHxW+aP}O6T~U$MLcs{2ttK z>=fmVlxhkAo(xr%Ob7^eCK%qJ(Y3K*I{KZ=0~JQHB;Z6U-^|cg z$DuuQ*xH^n%hk+yq%x-3*{sYdE7(BAszntRC;yc4*35fl1-Y1yWKkZN4guEU=M7nP zD=MgrQ)ZA~lyo+5-Z{_Iu8tUQ#d4@_0a-9A&#IalCS_f<50h)Zs81>7_RI*5b2y-i zerzV|*rP&ge=3MH_633sFa*&`C3)>T9$kOF!)reY2sM327(4vt^wDYK~mZ&Z$_6A?l`dqm?3AD116y635aey zqPrW7aA0|1=UGpA$VU?JHZ$AeK4OmvNuir%x$<4E0!4kV0x%Nt?gTSY3!aK9{NF)6bL`=0R%1#Gx+C2>%#k-& zkZ~n6rN)&px4a)Khp$7O?7(Fy0}gjGNzgM0oPwU_p9Wx*4g2;iaEy~7r4Es{%C+RJ z-&`+zUKsh#!2wk3pepJd2=Fx2gSTYx!a1kH=UO*z1(JQ~ur2>D8`Q-{v0;4T>Ey7}XW zI1G1M`dRKW#%>6_>3v)${FA^j)&SpN0fHJH=a@lzIT@990M%qnJ8TUH!CqVQjb-7x zOk_)3Yzs3i?c|g*kIs zUO)1qKe@89vgZq7w&>dQNmQyupix98%VLh=K(#Oum%E(e21YA|cQPfWlpd+eEjPO% z{uY5v3UYIM3t#YrN8^g4M+2BsAVDYM(X5v;k*t&;q`=fhmSBW44QTjT6~Kaxm9?0X zj>R=mvY96xIOyZ6;VVo=`dEqwFnA4%K7=n{kVLJ=_W%mQP@L`%8=!vXutseF91@_l zgztEYh9=b^t1VKeDB!YX>|0&MLm&76##iXM1sofm)gWO8psFyF!BBhp#7kv>VCbZ7 zq=qULOvBCgM6lx&{c4onaLrv)u%Mt$#)Ezm3@G$ZlNPT)onT@0FjkLThkkooM-M|Z zH3f5k3@SR#e_Kxg`rdK$&@y%=g|Q}(8bN~?n zP$*cI$YuSC;jE6JtqnvxCKs1k>~8^PF z5J3na_6+-wm7xK#4sFb0zQK8sAmCg&`_8Ef#wiAsmy0E0C#Dz;^#hUO7a$&v+m2tr zNaeLTkKA8|q0hBACfhssf=Ax}(gUu$;*9`4wj1?-&$=#K0O0Q9Jy%?RT^^-XM@@lQ ziw+QhsNkGQc~Kkia|+9jL05n*5lZ;5+~Gj(5-qRljOZ5ncNZ#mM`wnezQ^@fU5RHr z{R^&iab|}WX}L32kB%AQw17j=A?6+Ss;h4 zat1Ip>rILTt7_-S>%Ru4Vey-3P!>8O9EJRSXQ}v zut#LHSPPyOak8vpRa{r7qNBq#5N-{{ln^*dsa39G6AnXr(1ug6XHHhm=5Bjg-Z}1aTB+*aT2O}mOF#(L^}#9uuo>JwkVfEw4X{y zAWD`$pC244zq7uvfrmfzLHLJ%dNXF{7!XKZJG75c+p?Z?pHJ0yFb-Ht=`5nXEi5!} zJaa_&tN&aNoMDawpObS&-xr>RFjb7FnxX7$;=sKgjBY$5#W1iMRf;IAbq-}%X4I>_ zvplQ8ad7Vfsxl=QBOs05mWXMc@Y#&T5P;NNKtm2LMWsV(9YABRIS$2UVw0j@0LPMr zbY#gI8|-pd(6vKrnSeG{E&oiaR}c*$QxYx@v0|EscqT`leROUhu9?Ec7-JjjI@Vq? z#pfXUJb-IvO7MMVEQ}QEh=qnKB0E6vj$lLJv9-lwY`89{cok%;VBi>lm^KfYG;AiI z%3V|0o}teKmZoPLxGn>*mY^5)9(N#*GBSWm8$HgiZDEvo9!SaphYDB>u$N>UojiNN zf8ZOx=#B^9`{?%pcuz`c*ZRMQU6gc}+2!u`{rUhe~UQhvw8;BG)MT*MtF(P-`eMS_WYaxs#`*yphN>M!u&AW)vtIgcb#SQH4W* zu}>7hd{2NClTvUACFo!g3PYt#N#RuaYiVUuAOrO-Oh61st+HaKVhFq{Pg--BQpS<} zd+~%ve=c^mw(-)F%t(PWKHJAK8b-+-ME7_row6k*%sl zr`^fQ4ojV^3Y9+u4zgIbJ}hgErCGQZ2~=_-pbmBnD&S<`{F@YQo0R4*h*~2O5OP7f zD_Ah_vZ^s=p@>=;*cVI-;ydOzb$$~U*0;(23HN&inKFS(0#ddhr;O{59^Cr!CqLxv z06wr=?)RQ~U6uggO>g?p!qNNP=Slt6&K?J>QS3sxDbXKFi3pe+n(n})FQ|nSGB-Yz zwP_=}YvUUzsPznH7cjuiy&{i09J~D(e&WU7htJ$`9Nl!DcnfBtPy!f`2grJfjtFq1 zrgTG1Ly^R$v@Z$|TFz3mPT}cJdRh;p;Fi0h(_u0u;g!O&fP$$i1!w`Y8>l>aIU7xi z)u~8LHTFR{J@rmXtRic*76F|QszIkpkO3@DYG(4SQjkSSQ&iHQ>zmv7+GjljdsmiG zRb!s*q4I;N@JZqcdZ8^W{O+P)seqW)NyVIKg2jAg&P&(vB)9P6x;sXr5y!YPizMPO zQetV_E{|~V`iH^92v9#Wu&XE_lhT;Vg%&-jYu0G*k#oYNuQ&XbQ7<(jLUhKz%-$k|STNKR{G%!oMHo^}ryI2vn?@dWgj zYvIEy&qII_G(#~Ebf+mBfRCUe(?v4t{;!}skx$?h5qnhbG%BM z2En9tOBNxNtUhq3@{V&D%$l1p`VWDbqM%Y#f~Ha_V{+;m4Z@fRM?ytkSST!M&zGJS zIrk(4Kn8X%_Ed9M1i*_vC_n{4bNU(T3Py*l+qq57uGo^63-}8mK>EUH&9ARRsc|Y z9jv1>!Ce7JtQJV&+N=w?04S|^K+y3!kK;#P@LX(f_jjo$o*J#K-5OdUtZdoFj*zQL z&l@yq>xY|+1DC5642t46W%V=xB6>V5(^{zr^xWbuYgUxGD>zYYW{7~QyBXUG305jl zjg9>KVL?Ndj#2HR?^#nmcNwLIRXwdRs8V=5LB(W3UwyoDdhC)VoH%(J|MB~ui;<2h zB`d>ufHAd+0&_S^-XoqsRsS5+G%=@r&!czEWLXt`S97meNWcvJq^IB%15@?;GTFj- zVFjyK-ydGKH58Q0qfv%w-I%OJj(`H#oPPFN3-X8nWp->>m>Ee)3XCG=L2(FD<_z`< z#T{#4Xg4iJf{^xm@cYJPr}a`>(HcyH3N5Ho3aT?;5U5BUPj8H+TAf94pt&QXz}qd+ z$~N`A_VQ~x^W>odMqUI|&=xkIr{Xl+e_Yp8q5>95bL4xuev*JZ0ZLHass$0joB{MT z2plrTgqU$|O~sfD1egTM!5VPf7>LNVn9OKl8~f2%qj)!1s{(K;W7YZR+GENf5<#4U zE-uFBaBl_e&pk&*F_~l17u6#<3paTgXrQqWvQlQ==)y6T$@V1;1FO03WN2KrmQmq zEhh>YTK~1Oik_L{?Ai19j%R-z_O2{}?;ot9qQhtC^FvcqMx9GQBIQkgrK}W4MoZu~ z1s%dofqFI-ja^YC%_%WcW)Kx$DJvi9ue1?ILxM9g1(IV&VHQG|mYfdM31RD0BK!(# z*oO&Moo#=&|Uhsa0_v9=e zE3H>V9Rk7+zzpsY1up9l1Zq2zf~yX$g6Z@Ft)58y3?M6%lB)8Vaqi9K+5+gG*W5$j zNk%Zh^~Hyp%Ppg^;C^5ZI)S7ZBh{rK_F!KOqPW2$q6HhMB*m(bTx-1_EL|=EeUJZC zL_| z-EbdFCKHJUNGuL1ZG1NOK3@*e=(32akiUU|!}vKOUZFjMR+Edtpu2(!+7J+q@1om5 zRctO*YL$(_#_-Vb^^EFb|)6*X4zI};g@7|&7iVhQ6$E|%!4d?-=hMc zMS&wK8wyPJGRo?b0Sfk|0y)Dc+t`2Yjp%0QQ2PlPr8ssvS(|Y4${GcR!5Y`tn$e=q zUBaYyTzAFlK-(L^3c-{P{>cee9UezI=R7rM!y2P&BN!I~S2G1&fPFR1bIO^S63Lh* zcbAj$6dw@*t>B(AJp=L1*h4Yb;ChNinQ=S}1l;b9)CF6{wPHFlS6$#5j#K#b=*CQd z3eb>L+d=DG0Ges8G4BIQ6l)<2We5-t3f^F1%~Dbvf%dP98BCVYN9}|NR&*jSf-xRa z#GpgYHNZ6)>llfJ$g1W8a?=%oeF7f>6VtvkOGt6@XHFPp!=0xuVQa#pwKdgb-;~vW zsWeCgvjIak!)NY1?XP+1bMBa1n0;Y3d)IE--#z=ftQY`yx4-?fzg?MGUV1_`%v(1i z;&$dAcM2Y2Za5WqSh8U)gwTlJQ9z{@B*P7*4XpwyUMsq;!^Xu6__C)x1rK}h1F^Na zDYPDYkd}x`XoOY3Q~4x|qHR(_>Xago`OcgSj;Q>nXNi@l)!{l|hTTg%AYH#8RZC$I zF$kf2lLEDper6gL6%wB{SSq0i;e&PP&Nio%QJjonC>R2(U9f1y7tji?4syGw_XH`3&4~$ML}uYfJ;+qL-n(_EHM+h=qYPpzI=O z(lORTe1>TEq<9TdrUX^B6j-e|a^KHwC2DhKs#OivNrJs8muxzFf@cIk3XaNv!@ROM z%efOcg)>Df0#SKtoYtvxK8sUHG^Livd@y!pNPkPpgs>@=Ce~guD*ga$!SsN3Dq@Pr z<_I`T(bn+agYgK{PT#i!Op`OCbP- zQfnd5UY&r%#Efa_GZvu5RY?AL+&}EiQYyMGVS8tSPu+2zvP*8w0Lp!>7|0TP^n{CVdTxFBsfaU%+LUZ zl_%eLGS<)!HiI|tJ2@wuy>JOPTz@b8!mIuxX1WgN&YfeBT#S`i7O&yEHT09B<9E3> z`U!(135*CHs4B!tIF!mqA>8k5VsXzw9Jt{T=(l&&Y`G7zqREXh5HKn*SJXB@bdys; zEj_Z#T1#XN4z12B27x*#SeRCq!KH-RV6LZ#50Jv++BPKPG01ndG8t)Za;L;vi1kio z#JNq0g>TH%zC!=M8R&jWd|tA!uNfHXjY(32n@<|dEYSoeGu4nFXiJGlHFMlUX$E^& znHCu!&)80P*DPs`B-U2oNt9eOUDmpjTZn8JpKstZV=W}rmN3hWDeDAy5w#lx>Y|@i z*a4JSs=5jYq};(0gFC~b=hBaKTQU+fE>vz?3|rEs%2_4I)$gt|oISsZ)8{rZGt;3K zJ~P(5yCWrFqVq8bTzMs^-Ce@f`}Xu-_q0cS#LRXB|8_6na&rN^=Jg*ubl}jDS0Uy5 znjuR~Ne~Z~ECnMsXZVo^rK#^HX)xzTvPP%z6uKIgMFrL_Uc?tY>2Y}SV;_Z!mo}R9 z23ZGYY>9gaKS%+}{*lHHI#n;CLf3BqDd<{|bBE%NQP(vk9yF*^lMm0I3SMLL!+PMA zWW6F8g%EumFew`fLyB{~ihnauv8a!&q8;@7XtcnBS=fycbHIp)7RuLWD1TX_0Y9*-ODbuHfc{+n>|;u_}XXX&$U{gTz#=0u|(#aX<< zT>wjpGL#1W`Hs?WWAD*>V}9>ZOg1mIn1H0U6LUYjBB)oi-iP(e6h>L8eZ{p$SJ5jP z+{GeHuN60qfs~-hV(gOA_mbQdY730>Ukb}1J7`VDk};i9$k>f=c`1y;*>QJbwThH6WUg_-lz4gu?tX;W9~F21T_P=j{;WghT2k*+_o?``y*!d z_Fd|K_d+vyE`!V6Q%$yac46ikgO3QGBhZJIM((<{DIhC`f1wos39F!n+qM>CK>E^A zLUF*bxp4_ke(a<01y6n)E^cl%OUFUVn$P6>AY}kH4Uq6}`NEE7fk4zAf6x0J;hQC8 zSxTY8R$!J_1_UL!1VRMlOzJO$n@c#mJNnAQKB&YcU_j3S#g#xzV;Sg1aaRCble58` z=pZ5uLKCcQ2sA!Y0NxY`mzq20%JqYb31Or+^Qbl7u#OS(R1VBN zSN_QJ@dMBOcUW0m#Icj7vAMa~f~wq=H!i;@oQFUq0Uxu&sH#)Gp7*_-s|D$ zW|pwCwLxLs9Mg&o2p}oYg2q6lRzQbQ@ANH42Er8wmsr9%*bp0H8IX)cdqmC0Iz_0J zNOP;KR>|xPDI5d3=4X$eH4e3J%EDY)->d3OfJ{x|IHZn@3FM~^Rv|1`XnX<1m{b=d zC4eNr24gu|D4-B>yD;WL*)J<(4K@XErVBC* z@}hkIjjahjee68fZ6!m;dK&zm8P`IdN_j@ga-V?!KLN*1oWm=>_nB*ZmKOg8z}t4I z|J^ID%Z33sxjnn*`1$p3?Z)FL0+3c;4oE4W95Pswk zloee!!rIzJJoXU}!Gd?+#WZUBH`++`GJKq5hfgf1v-1JF>IQt+~J z8lr^&;vg0Nj+e$LQHWAX57sSYq3bbCcoMX6sCh^e0Y{fRDH(p>qkk~0Z*C)7##0~v zNIc^Uo`fq7AI7ocCvn@cli1qY!nhlw%ULN>Vuu<{PRqQ8qPB|C?_g>5FcuEqi;Ro` zHp-2yuuO|~l$m|fm{eoTM^?o^E)zrQ28EI>VR>;Di?bsXjYTM0mvw32c)JuHT^h1B zO+dC*m6T=sd9SEwom*kbLVjx`HN@dbuThUeQsp-o0&al)C zRP0_D7l8op;5{)WuC?9wJ#y}lGYj}oUI>sm)BVB)k&{VIa4iD@YpOrN?G)gI3{I^5 zWC`QWaP0ItHn%5?*MQt?0)CVQY)6+lKLKdW12_V7cleb8ec|L0}WKfuhiKdG=Nlt7(*@taLp@;eD$8830+(mIwGmXsF7 zw$!S8|1tz;!5m&FfSK(;Uvvmgb&YL`o1FLY8w1rE;}Dn0f*O>b0WC^j)|xZkBFeJ^ z1XB)E&>mkGAaHeM5wkOMIC(?GxMbYVdK{*f6 z>spUuWFTgQqoV)2N?7Zh0*(g97ofsVT04v>Vf#&tOzekHie`pM-(!?JMcMQBLGP!a z)u+B6c(v$oCMrWcUy8TwQL#7iyehyd&T6VHOlRZT9Y9MBOFQ;KWN7q#i}0sXC&PdU zw8Su9FpZD^yjMpxu^}dmoEQ(lV9H@lYxLL_?TuuH(u=v8$~bC!(h{ocm}1ov2p5Wh z*+u=N7l=!+#65a(V-u&(ZDD4HAPxZ%Ih2jXBlBq}0lp#ko{5>%*%)gV*7`U8(hJ_7 zbNY4w?>942Y`fR)#Z~>;e|_v@ADj97fBQq9zwgkY{|fjKqy+OSxUT~?ItEp_(^?EP zPWoAXJJ7ExjVeo?2ay=`U3YA6ZR6oLJ^)|+WlzW13v05#lpYnrW?GRqVKD?E1t(s; zief|)Y^hnx4W|qOGb|!ajfq~T(wh>l0sypk7)Qr1#HvG%GKZCJ#v#ohu+owG$ytwK6-HLy(_D{Z!>=m7pb2_z;d z+5j-IULb{O+C;9k%dr&;6#I&CkTAtOv{(hGPywcnuWpcQ7(0l<&&JFQ&e^b^+e;8@ zTR#@ZiSrxSnN)NgfU2`8YC)F>%;4%9)ORP7>8d>fINTFDBbfQ*9cSw6Ui}>(yYBGb z=bG7@cgy|mUjO=D(kU}Vhl^jq+G*tg$6TxixF4A zP03F~i8EK2pQV&hdMVE)D3qfw0aoQ7EtSf5THu9nPV(K_lvNgrE0kvSiYpH8$DjP= z-{SZG@K5ktzy5Q$aPB;ks7ESuj+;w}L&_lzQ=v7;acv+#HPg)oiB?qxH$WC_5W=ny z0_sg#K1G7u8^F?|rp9)_6cofM8A_q@V064Qn6F7*^_>&f=BbxI7*Y&-7iaOCuYU(l zp1*|Ug;`{!ItE=FC1*LO07S8J?iE;CD@I*z^f2d4v~U78w+n8#YE?(cil%n}USQUt z)?O*C@*RVHuPx|Kmb?^T3MyP*j`?t9ON7tcz_H+n>A3+i;};Gt9A~A&$Ob_oJJO|Y z$ZwAzIWc0^GHA4L^ajq~l#&B~ju->?%3xQOt%lYs*FLT6VXn0^^mwiV0kO6wI9|+( z2%ty+RBO@R7w|X0BHQoiIZiG|kFX7V01YH+^OnVyI|LSWp?d@g_kd>+){uM|*04L6_;f3GyMW?>> zi8sE|%zk6H;Lq;$zq$q|)o1DD?rH5@IWV`ha6OWZTqSO~1z3SCe6V3jb0c!oltO_@ ztF;7=Mj@3`tGNyU8*A%$^dlaEuYcAvaQ6I~tPWKS467hXsDl39umR$C<^&fmx{xxA zZK=-M+(}Z$r|JZ_(^`yxwG>pLKh5fo>B?}qXal;&FLn6-_meEOel)3>tH!yb#Vq4*0=DJzxxL4 z^aXpDW`P7A_9Mm5$bB%tl#PKQ{H~b=f^dg#WJ3X#DyduT!NS1XN z)u6Ok>CHJ0Dr8keMVHbyu*bE;v8vJ6pw+pMI9Kw=b1cZ>R9TP}WDcra8Ek9#rWN1@ zR*CG=aP|P_os33Gd@%3(>t`mAb=&%B0yaPnj`bW+y5g+?=#5rep~@XB~shf0%eO6z+;K1-N$HDa-gfU}LAp zqaSqL_Ln~K#`getEr5$d2X?RBYq&o9g8-MWT)pMksqf0;{J4}b3-A;!Zi0XHT??P* zV2us}MOL}2CF&BY95chk^XKv8$3Gfh^7N9ZdA#6z{yol}yNI0gK<&%N9Ts`ezZ8Z;zfJK3RP>R1RcPrOPC*L{I@s0 z3-9>IXRx|F&mc7c69fJCKoqcvU^B7|p@5o23r7*d6muN3^`sOW-n)dknUR(P`y4SA zNp2Kc`GpMy$F9@4^zn`m@bNQrHUZzK&jot)xdwUx?VN+==l-g4zr{NAI<*!xek_Hn zeIlmDIXFPLiUMGXfw061i?r0WXevh`7GM;of{8`K0IuSB4o4?ui)%tGS9Db6f6X1; zs6$^1j-S4St!OU{Ps(~`DQbFo|%1g zx7Ppe_5bgRCHh%;xw|c2`RIG!@W{`3ZSDK}86_Ppi4eXKl^!R=1syISim((r70?M^ zzZo}k%D8y(5}y9#&%+ZR_ZVDS+ZY6$L|V|wF8YwEeVtO)UC7X4_j#W+_lU+ur#Y6MR4mgwIkyHwRS8r#M?Wdpzq){TefTqY{abIw z>hc`f0|2PB!s!N)0+g$wIwQ?p3YtJd{%g(8wAD&+Y$&K$m>XgL@&Y_8bGZ+i&su?R zW>U7``bw#53=`Li02fGgF|LKcGBQCpWCRD*hq!Pg=6pFT<4Bs!Dku+ z8~+zUhoqnh9%Em5Wxe`f0H8J}Lvv$sa@imkwtfR%t=5_4#93D1}+vm=efW&=f<~V(R z9UGey0whK7v+seZ0(5IFSweE~i~|Ae;a!~eoEZC%E#c1NXY1>J_PcI9yl3f0EZbk0 z*~Zkc>|VRqU9M(JeKualj~}1kd&QB*qf8E%S)zZ97JJuqR5aCTS;`Wn)k-?k1r)kb zr;S33#H2{OZj95X&fsgF@r8K8V;_x+m)3c|ggy*9SuO;H1gHcBWE}-%Xprs!+bG#I zC^|3=$&7i)p~RzKZ0}I=6`@?%5c!9xY%G+B&Y*Wm16L5*kpuhi4{v@OzUzfQj@}$| z3-d?-Ru<;*$cI0O?+M?sKoMN3t-seEKy`2Ffs zR)&b0=QC)@P^O0xF(6DFj)B|-Fo81B&b7!_8*K=|YlfVF-YaIh5ymqee(sO|3IFh( zPvF3wMdo%J!Bfht&KA1VC68-ZbW)CHGMFRs+Qmpn5xe~J#S3Oe9S$zfQxQ6|OH829 z;@R?1bGgw6T~(=%j0W@kP0T{d0zoCLaE>|Gn!$}R2iDU204Qyfr}s^*E3F#?OUcIG zNJ@3%dSZ!WX#S~!K&30Dg9=qj3sh|F90CJ8#kvaM&HH(eKm&9tWBALXowCQtzA&@K z1JH1nb1#~4E=?AHO3b~FfIkduK&(vzkX35}CNLIblUMek`d?nL8$TMK$hZQUNVD#}NOYj7EPs+GU87EGh#CJXC8*t4vS7B>w3$O$dzmzA{Lr_Yg zhh}J2LE3 znX~xWU->QMoUyntj~!W_C+<9spZSRw;nMm#a@RFs?LN36qMt$IwiP1f2BY8!7K93) zt&{YmRV0uCQ28+yoZo52j{fHg=pz8)Gm;c+`-bkJf*(e`2~Jsw(N_LkfRwR3Kf+(X z?W1__$3BC7D+>&?inXC-Nr{ukaL01x=l>^qeV>X{+c5znDh!P zlba&eDZqG-EUPwP6O8Nue-lcM_W`8U;lv#c^Abl zar)v0p7%9RTK~$YKK%7&_QPg&%Wl5^?)86lebzDn?w(J4`i_H(3rj~jvyL>`P@>fg zKrJnb*c7o0XV6p#YHvc5k+POqb?eSM?!=3~|GBv4>MOCmy~Wb1vcAlS&Ji>sWXVd< zlD1?7a3}^UM{ZP!Bnl1*`YJk^ZL099ih7XXF)AW!et!94r@(}?75mRYf~!zY&KXx6 z-jCn=)4#+kfA&|gyk`kBv$L2eoos7!3t#+2Pk@6t>1JdAO5w94hhZSAVX{8?8%jw7 zDEtwA=SYzPoVA4;D?wc>r6IaIo>AEejgsVUQSEzKmNh_~6b1wm^d%~y#2`+90v-*R zac=hQS;D99JdL0F-8bSBx1YqmW!Bw?4M9`1(CCukQO<1Fw31Fb#Vsp_BtQsYNL{A2 z=TvP3qrlaNmoe!%zl|CW08tCfb>LAIfYACz9V|ZAp;lZM>@$HBF9Ig5fzr44n7~X? zFrsVSRFCS8T+`L5prbn_$`W(txZDEJL3F#*z2LPXcZwmoD}W>f!X*;|04cVhxjmG28X(8utUguA zz>G%`^T7g6wJK;a+#1d`SH*xqL4)HiV`F=QTaTT?`88Fg%)q2CbnnEO8)gAxVE}R> zBf+d1GE=esJ-|iZtKwrW`p(ejL2<+w^RwtDg`4z4^Z#o^-~t-@g_LMzp(DQFF7#+Jmdb_G zEn{IdN#TdkukP5hG=~do8~D}Ny#=4R{S=lL=fxBab6R>9aVk}@7NS@Ik{Z>iD3W4F zrsvib#0OA05;gL(z5>@CUBP7H$ejY%1RRDwQ%SL(v99!)#-c9;T~?Xe%0YAizZ5B$ z2Bh4{5>%j=%Vkk3#^bRf?PcvtsdLQ4$cV;H&HX`e8uvhTE71J?%H~kp*>8Rxa}799 z2CJCXZZJT1bsZt@Y3nTZTg+{3fFdE-KbqKv2tJH;Ca}}k0fD_}6ThW_=jX{py9>xd zAi^3m!q|iWDDdIj5i)Rmm?c9u%GlhR;P}}!tZz>+Rt5?8F0(2O;dYCDYcFU{p|uWE z7D-}Yvl(lcFivHd)4o<5*}FXXPcQhY_b0ROGP4iu2L0_`|GU?)3qQ-Qm1`b#?KKa1 z=wFVK-JdZ^%%QC+-I)|o9M%0OVOdMw6qU^2vy9$l!N9S#b_uWek3WEm>+9l1LvTp3 zG+`?XLB33>Mk#Jw2KGR5kjgo!+E=nxu*AVi zWq@PSJN7OwU~OX)Kl`h{gG(EmSXy4Bu%H})gEalIW5@A|AN@Y;6vsGAVKyFq5N=7z z-(9f@5?-e4ie!=d9zlQXFTY2DY8V(1*F!`3PM;ej5(T%jC+!@fp6n55M%~Bz^Z+nz?{W6 zD-|)A3#|^#jkag(b17q}jt7fYao=`1f`GY)h#?-I?^S{h8-}AgAdM2t({K@EkYqCL*ColHxk;({XW8whavCxhme5ipfbWXK(h z290ON*uT1r-}=Kp!|(m+UtwWs9;4BC5PH!R7`8Sx@Fh=u60W=E8ZsMdBFBrCO9{WQ zgi9!YsLUv)taS?I5X=NBp(F{)hS-TT?ZcEM-CCCw?7tsdRhjxr25q54ixC|r;HJRZPt2xV{3*&y0(P(Y==HjD=V2f;So zfO-~ysF1~ZA6SBm>pM7hdJQ|1UTb`qFS0TMfzkdri=w?-z(OD-tbJ%NTLk~riew#w zCV4l`o?9z_^r~;ad0}qm`DXUcUFE-f{hwZ+l>p$~AKBh-bF(i-t`F@}H*!E5fqw?A z2nFU)5mA`506T5{Q8&iP6DRT2U-AWb)-%5tr_Y`f;^)RJHBM6F&(z03-7>9gG@|v@ zp4x;9w<3&Iw0@Fc5(QdVg)AhRNvTjA4J-l`Ex*LTKnaru8XWM7BL@%QE$?^_UjFmH zhV4ng{Oqh=DutF3g?-}l7iQ=1oPYZ)T)4PKMFbNKIViV;aH9}Dc#NaYTA*@b+d^>! zP3*F8a$@zf3N-(A(@jzW0GWgEXGVXigeg#)LP5ArLZ}Z>?Ir**KRbij(Fm`9%guP* zKffQfRxFIiDqNG>7{grw;DaKDLAm2iV>DXX1YANf#5^}Zpp-U%26SHwuH3hTE+>xD zRDXlX8CW0H3(&-KDQdleW6SSJNhSV08Wc(mVug~b4aPc&?*@p0)&WdW_E5%&Kvh+g zJZb4E#seDYsh=Y*CHlj)5G)AU2`c|g>sQ}*W3)SUw#xO!T(AUi5q^DJDfUk3P1dP{{btDOW2w0OaTchSiX}RG^kjZiNdGC;6|LH7-g;WePQl- zWuTbLs)Phr(euIrfYah8ozF;PGv=r#rDBCjlKy~!^z5O1`*8EeKZ##^%^$*3!qWVl zlqKo>WXyR_QlPo(aO%Vf{L-s_3@1*VMb~vK4;$7fJKijh>4iXWAYBp`VoOI07YNNz z0s$$GDOUj>FJZ3dalFIIq;HpPQ5**4AS{Q_l>bxKtI1+soEZUT_?x$X81MV|ZP>T6 z$h`Q<_w@>hgWN#0WTVd}3y|P0CGc!yh+fwBqU}tH8z}xRcPP%2_#9*)j_zN=c%1c} z!Rl@P+g7B7_mqCfG4}}a)4kM$21~4|?`nFC9iKZDSf}*?MbG!8=fOjvxb=N!%pF{c z$2I45SORSixIkgd2PcI}8ku{ru?#UUu?L`ekfL^Hiepyhjv4z#f4Al$lj5!(iaK7a z)9Q*EOXPIAdXZm3cnoziICRZcw1jZi61IEPia7>3a(V|{A} z=PqtwYo}n`bug>!Q({~~HzJF~MNLo=ioNtjGOYCmNym~K2xz>Wz{qh-F!Yi-8Nj4e z%#J&J;p$}K#~%K`YhRs!-!`*z)=GEoUc1--{`FbM06gGnPn&zs2R`*=%iS}( zWQ)~Bp@NmPNFP?x>DurqlPV2RU}o^Xz-z&O{;?m%_Rd7)WmpbjmGPZsS-LPci>=iR z5H*V_MICfw%RLW&c%tG9!9-efDEQ%Q_l%v7@+S&&o1(c6RW}pZhiZ z^V{EvJ*#_=l3_d=v2t1xn5n~wgefPSI&m65^u7OHb?@clPu31bqIEscq%oH6ibSsZ zeOMyFT(samTAC&$5f*M(?NmS^?9?z_W`HH0n&*l`LmFHnp%4LY=dhPrvAi$~!10%F z`4C?BFCWCtq{qVSco5p5aFfxJno=-fjgsaLN>!Fy3##LoKrV?|E8QbTh9o7H(S_4B zQ7Uj`-xB6$bh2P`*RVY?X3(Ft2HhTMgDyAL&@PTCE$IN70j`+x#})=KgNc1oJWI-% z?y|O~rFc2GQi|XRPtBD?$eD5X=~Y>k@@j1ph^<4+SOL zMgcMiBKnYJl~huNNi;jc!s4y6C=}Qy!7>E4Q2+-!P)fy~2VG%JXu!FumxI+T4)gGg6)bh_Klb+PG#yw}l_N3tG zffdYknO36W7MQi*1M{J=X-WyMR5Ol2_@)u}D$66uJp~256;bP@G7WHg4H7?be8v5@ zHkiP2*c}Y0h0$dMr`4@-@~A*3ty-(|P#kwYOS$&kYuuv| zpc{RKKzCmYy4)#PR4$5XWg7cKbL9fp@vbDcp;sLQ1el1(dIOT8?;{4K0bwJ1krUJJ zQf48ft(}7N7dNpz>0wHpC5YsncAYWOb#dSmpU=68eWA4%hxn*3jB5cHz!*jYL1_R2 zcC8}i4t*(@8IN%5Z72QJ&;QDcPx{;&-e_(wHnUIcM*Qzy|4%MSjn9tD-P55Pzw|-Z z+;Gk7N-5XCtC?jT^*UIn1`3W^2j19nf;n*d_;Eb%JHHjzTzM4d&#y7^7sgWp-AS=a z2sH&1%3OkwCxwyHWV=FeP*Ko&)MxT%hDAyL{XhUpA4%|0Sn9>YeX4CxOU26aJo>)k zzy0Z7;oa}M35O5v(qd0Tn680`HH02W+2$lrEil}P~h3W)uRaCX&JTw9AggB4->7w6xKi3%);h)<& zprGz+#r~yvEG^DzE{iT zl)G20UQzjGLlGR#zve>NjxQi^%_(D2i+tEr=yXvtj)nV6YeoUM+%M5ir{XpCIzBT| z*PV)X6}>B57;R50u7lQfxZ{R>6~Hq!(7_VVwNd!SIfzaHFmNoxVz+Rm2#~nDz+gho zJX!L>`W7y(Z3A$ON6K;lfwDo&LuINliz-EF>VZ|`d)QXa2p3OOGpw~Dbp$GX&w2_q zju4iNX!8ePlnkG`^NhdZJHPb87k%E1Zv^mCGyB-C^54DwpI)C;E`Sf+j@7lD_5Wa9 zejFULut88$ph!R#`YizkV;Qi$wS`eic=eCH5M~M6D!B<`>RfCnXmf`3TfvQMrgSQ) z?yw$0;mKa3tatuSNjZbS3ICp~s;WDxp64}$grte{=hF9BSzd&tgx~!AKgI9<@$1m{ zJr)-iP@)FBVhQ?E6*xA43Mw~Rj+3=@{KSi%hdYm-mSx26QY=e6MUd1~WOSOg`lkVf z^SOZ$sEjC>Ol=6EMX)fmi=Rc+HNKBu)EELlJH&-^F*6=vadw28Z@B}ndE>kA;aiSl zW~RgJxZ`(}UYU#_&87TJ83>`Ip?(n{h#{I%OwkUh`_>O{!3cxWbjW{S9lbja?_I#s z{H$UKL>-$}j!|i|gHrwhD2DF02Bb`@zUz_(hQc49;vX)~zgJrL!6Xg+<$8^*7J?)8 z83GY>dGP(Dt`(1=xk}AHP1k{ggP4-$NT7pfE3mCp+ybHw?jf!7aL2^j=e%=V;;aCz zDnNmxkzyP3M0QDSSL3{rr3f~FaX5_i=u0mkLD3c#GK;ne`yPo zogU*+r+!d*lMx|+19XhIri<<+F@Iu^s+0b2@2%_y-ANo%7aQoHdj%Q^ck*>ftYw!C zpE-8cU;f-@o`2e79{Bo{(#y>3|7$+yDNp$;@5}w&khqbR zQlm4@DVQiUT!QoD$#ZzxlRgj6`jV&Nj^n2=78RM~XQnVEl~0+YV@#>_+D4@%G5FpB z(YuTKYmvlLm#g-_|^ z*ISY$3Va=b9J%LI6guZznFeQ0p2W|+;w3nB_CfXj)<~ysH1XHmR3in_=Xfa{RQd*v$#oERO{_(w^#D{J}foa(Bwvo;lgNc}`aNWej`(5%y#YvWPe)#)05C3qRESvYZ* zI~oXKBe<5ls-RA|oD^gkil6&zSYHsWZvq}r)ky6iSHAfB(W|C9WYv?2aK;pe0@WowpfQ!A z2!_Ikenw#&`cQQ+3o5DLU=NZ6KhPqyV@wH#;;jTzlj4{gkFYQ|gAafDINtQ0kK*jw zCiX8aV5jstA&-&UwFOPGy#ZdVwVj1>s(jnE_OQgmqD&gEhQ(ZmIWJz|Edrd+bWzlh za*e+ArQp!&5@yDk7Mp10od19Ay?4B2WpzIOtoPmfoLi^&8HS-q8Ki?Eiin8VP{iJ1 zC0|Xkn;4BH#ui&N_7+QQ!IENZKQ-3a8w#Qb3@{8+@11++)^pB&-}U?BS!W1?``xQN>sf0BbUR(Va1B2XcZ-X@YBojx&Qnx zTz|t2ShZq>MGRi9=JN;`MJmWZS5rI^-7qu4NGW4#auQE{!XvO@{RWbaLVu#5j|ojm zNRx)a*2l?G<|G8aS7WF{31NF=Rx3Kt5YSMOq{j8Of7x+K661LwK$U1*myHi&ZoY$W z{`6}6;Fs59s9j)mxQ(h(K$HepNr(!85gV^JLn3pp-ZR}f3^4>$RaGnT5F(M8p3N(; z&jn+i`?I$IlxrJ|yk_TgMc?UGIArZIv`Ur$_Fo$QD+G5A&48QpC{{*VRTUjpaBswd zaByJ|KA$}eo7m3FwtmT4I*VOnM3I7Zo#Xx^ zVJ$k3z!3*?x*XnDGw!Kk(<`Y_F1{ol*~6oBxFa|i<-@vMCIqq4#Tq5x`te<}2tOMa z2i$v(Pn&guf^Bb$@=*#JOi2 z^Ka6{Yoy&6|3+?k>FcsvQB*aIuRr7Hqwak2r=fZ{3FM}D_=)=eB?$KH-ixO{`EfYr zh{G^>VAfi!lE_0H#nz;5l$}WBj?R8#|yxqY7bNJdhGUo9=6H1;Zl zXj954TP>_zwH({7-+_Pm{FiXq6~DmP=s1Rlhx^Lf&hOE`L&ZU;Z0ech#x(Z)CbD8- zaRCoF_wKm!X(wTBb^(Z%E2j5hO4n}`RA?SS8*AU;a`0Ky3L0+g1LMbRC_u1AI1WD# zIu%s-L>n03G2&k`(ncr>{OngZ;2S@^8WYoVSh;kJb=fJArR}YSso`nJBiqvQLP(n9 zbh!$lD3Ggu8&!|y{2n|)7K`}R+x~(m2Gcg7hWRnj7)mXl-sx31V$;g{*$x_Dzb4HJ zB34D+7FfiBZ*!D9Vsw;(n~KCbH7C)ZyIOk74Sp2dgl$5{mJu%@X#ZY69RT~B?*ljd z_7|Shz7yHfhe+g`%fDjlZ z^IaPVkGWJ3H76vijW#i*Xg%kD@da}>m$TZ}-?NJc6Z(3#=0@AtS+SSlwd6ahsj08RMS4HNn8 zfAO$=cRl&2PYLjPo9x#Z|3+?cF-?E#%0GSfJ4;^riZ@<7zH-S6VklN1XZB{vd>VC82;>ukH!82vo)mVEN(*^8MP|k7bg!n9INJn*Y(DljSI=#o*)w59WZuO zL^M9$Q=Tv?6|9*&sEuTW3YIS&Ls=B~(l@_@&wlA^=yW<*v3z-*ug3p>H7I zwdm@jWxcr(l|NG}RN%Gpa>M2MY;$C?0^_4Y7%mE2b>nV)^Cwqh+pbBB4!1Er+~$3n zb7jk0o47i99DsC5@FH`Z4VL)KFlcPetnn6n4b2GJXNodfM?8am&5(M92aN)y+snAa zrWL5X7l5r7|3hQPG!@YaXTZaZi^IJ!76z%)No2m>*#5SDZV+gkX_S54Gla}@c&lhL z-O``n$4BU7H#@)DprSyhkO+fA+_uJ`Q!R;e0BDct@p?)M^%?0j=DJ#<&vVH&ly7_C zW;t|mo`IipfO{h5@4=kx;J*;2QT$mkJ;#>V02^s_x;@M-bTPZwMaqEYj8@BmkFcdOMCd#y11KE$F+&j}lQpHT`hJ~V_EJmaa@J2^$g62*)_pZw_hkB&?NBqHYu zK{!=Rt?^GvncdNp4oDc_95|bca4U1W{56e?Ku{${sw2ZK6h*{!J16kn%df*#J9eX0 z78oCDGx|Y>DytLBQb8>DOk+xJgFAjOBf|&a#-5O=nc_O4cIPD2ef@cy3@ULtH37Yf zo!m(FvTL#Ds+J1rWyMjOR-l`ltR)teQjv2%@L8D&0TJGd zf5vROIVd)K%+|7Y;P^__>+OgT^$TyjC?c-EaU%WG%b&dMs4Z*X8&p3mB0HL~zK#5E z3U~9ZD5_enKK{OE9(KgxAIg$9L9NaraJ_UbPt5^1Xw5KWRzll%cOGwskdDZeUEG~3# z`E`5n{mZYxjr(U&M8VRLws9)h>NiA#kYfRL*jjjOfsyw_crP_%OlUr5gV8~QDlino z=EMh6?!_WM5w8%PT@;wgQunbj?aI-V(d2QTWS!oq(N6ptQ zRTkOu{Mi}@IjX^^vp@6+mX>fRIoQNLzfV?ASd<6)y@I0I0PYTXX}dEX|;W3_sg?Th#UyNWJr>T zFcp!3g>HrU#V!^WIy9bEeE{PPBp=;v&(l$bx*BA_Da?t^LX~YFd#?|7{4D*X#;>WJ z7;8w?cXarkp?1tk^o=o~s`}|F7y{|%=dq|$T=;!pa%#5v(953qi$m70dU+K2GJwg( z_&4&uE&ZK%E6GRx?MrK4{MvW?!|0L~7a+vpc0mO-JvEI@8#m%P|L2b|H{U_0*Ma9u z9UaJSv|t9Ne%Wniwpg?}pbW(f5|Mm+!L!4(R6uHx4fDFuMy50WmolS(70Z?)mIZ!( z#Z~ysm%oZ%U9$}>a61o!0O$L5CIV^ zP9MPEzw)oKediv;5U79#*3_X*`)R-vVmRV!=8s=2OktTFQ4jwoZ3>+ekARjeTZ*OQ z5v%lOi_FUQFGV^KuKP+1^`h)&fbH^44M98&fHESA#+6o~wNuqaUKD9)S@ z8`8q`ilsw5dbZGA_m$8VbdTi4yW(eri0050huSzIlMAFI}1VJnc9I|>0RqF2n zGm(H3AJxjnvZoIQ44XLWV)w=cq$6X721YIvuh7Uub@;T51Zl`esCfX!g107>QXji- zxE%ozp+Qxfj}U|l>kdpdC|_Ytgr^70u~zM)1ASZW-}g!xzaKsim?P=$8NcEG=MD(p zA%P-`aQv{PjwAq!3q4dhW1*X{u-IcHU69aMSe-pb=rZrGYJ1AMRnloN!l(O@ZFFo(2DPX=j(aT9v#?C*gd+#l>&U4uH9)y>BDG54qJHfT6?hwfWfNj{IDL92261nW<^C z%NCyc_($OILpEa1

      Lzn{xFsx11P*z7WaeB035nHq6B%&0 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_level_professor.png b/app/src/main/res/drawable/ic_level_professor.png new file mode 100644 index 0000000000000000000000000000000000000000..30cf8ca84bfe1f333e98b7889ac5b2a141639c1a GIT binary patch literal 261516 zcmd3N^jPCDIpCaIcbAV>F$t{ZjcqDQR&Q*c+fjBuP*JGe-Bm8y3uwm|Wp0POWR}}FM z^Fb4ltoZr2|LN`S>g7IQF=S(+Zn30%4^E4SKug^EXvlFc!D(Lk{(md_C47I}E~O}qzTNLFdCqWB zoqZM+m?DRN-eY^4c?#`|2~m()`Dd}U0{n)nGGiEmmKbHsg?#f*3xTDGgXQGs;k9RQ zc@ljr5FSm9NDV8qAI;!WkwV+#zsoQIh=tCkyk;2csQ+}eed6gffic^kUPU9^Ka5~1 zDThNvFZ<13Zf_Yf_UWO4<-r2^#JhgRdL`)3EB|a^qy_a^NJhK9wmrPDeZnBAfxC;* zKE9+NGdm!q^RNaV6*P4-Bt$s!WLB{gKMDf_6C)pp*YKMtd%_j)&zkot=))r0xVX{E z06W5Ks=+ZaJnagd96ORgCb9<+e!Y3-cOlkd0o(Ks{QiQR|79RT{#${_^V}lApFl9v zP0NESH+zkB>%wyM-_{igK1chOdZ>B9UiTql+8w|02D~ct06cb^zwPI(JaBJpOZ`}x z0!sXR2M-104;nGuHSJ!Bi%N#&DUm`V*>_vN#XT#bAeRqnr~<$b;>vV@$lw zvlr{l85HC3WN{%NXe6)z5b{P2*7u$`@L>sS-Q`oll#uDK>QT&hvFyb^5Y?xVM8e`1 zJg$qg#<>5}Ctn)8b;HYM(Dh(9(<7CfB-23_TN4Aj^zl*9Wzn5EF=nIpLPIwNl~b0Z zTIhpVe?JlMHuHIYnq^qo_b{n!A1Adm$TV#~FHR=AxqTchdGc(V@JC4++U}o-I$F^A zI{(pE^SjbQ*cl)Igrv`YuC1U=)D%oSgW|)*cnjM#9yn}rlDsy~Lq)KCk@3pj>z4WZ z^=L7Zv;1=(W!Xqr<*`nvSb^1=; z3xoQK{iDX>qW8E9Rp_bbIi^4M#zy}UPDI4rf^)9$^ClNm1I8(PzW|ARDE=7T{$m(d z{M}=5OE1GoK4_{2YI=0&AZrEbrUt!;mi%@zUVp)584*yKDxvWYYpH57fAzmvmmtr< z;siieY`YNX*^&g5h_Z(?MxU!e`|YkeEH!VqJ*ZtG?H^f`R{8t ziZQ>B_Rn-FKuU0z#}4X^$J$dxyjXO{A1gmo<-%RJGr45^x8|auyc8XHH46;-hw4$} z6|Wl!iWm-lY3f4t-W$j~#*-pR0%7U~f-#|B)leXqxv%0Aypn9)tit3DwS9DvncyyN znXFRu#>-VbaNyv=6#dC`d@e)kKYkln($R&YFR?V{>+Mm$S19^go>1n1u=4TkWKB#a zDv-f)6cp$5bmal;}K=Lw#jni$9N`TU+l+#w?;9ZsLuT&MF*$8510rBxHb!JwVCl9cMBE;mZWeT}}WgU-(@ zZC@Usw-8TfvO1f}G%1FGxVL74n_ zh6m(I+oj^$@j$?Ejo3rz4^!D`R-f&Yb&MgI++(RvLI0@pmJl4e;}MglOxrZ6SZHGC^}^EyOy zFF?kF?*fVD`mnM1dA6SAKTnx8J?qiYca&Va2)>H}&9g?Af+8^;;zgZY?1!UF4|-0X z-?YU%MB2xKT2Kx)JueI%3=*g{C$H_`JwfmfY-PPt&ccK8#=Bot_wTtK(XB79*6u#q z5w3$MFeE%u){{>%V^*3fD+j-{nMM>m#G3|(hreZqsnum`#m2QYj$Eezc=9nIvXK}j zVyvp7Yv(HGF{E|NG~>wb1jAAFO_9S#47~18xU_?Gi5HJ$1n$<{v<{jt`X)Fc!#~q0j6UCXzA_Pk*lc<;k?G38eHerqqzlB(t5&aBUV}6plk;qwxNUJ z9&bh4Ub1rl38iO+*tzll=rQ)LO1ec*7zOLUZbeLxu-tYV01AMZ?Bv>tKt+)})HmED zVm}(XW4DN@`>*!i3+qp3)io|h2$n{SwcjpDd`&a?TquSWDI06>yG~>Du7T>HY8&Zi zWQAJ$JZrx>@@WP`bjT_|>{FzRVE&Ucv^_A8mN-x*g4%~KkxweW0e^F2C{68t_1+{O z*>=CRpwmN@939Dbpf6!z5D1X-vM)x)5jS5hL)*s@FbRg}f4Ry?;;i)E+|kjYN}gD& z#mxmsiXb>X5=2X0g8&brzCwsO={;8ROdhM6DzHCZCb_t$a+avOYBJ3f5AfXYk(q+r zQPk!ZBZ>gB1Cji)kp3>C**Vv}kWWu%=}$~^Od5{k>)~80ZU4yOX@k+@f_L~3=AORa z_t{B0$|MA(oC5`+HetU%%gTm!MHc9|*O^`v`7ZtaK`g0#fmj%K{e~NusR*EGF1d|7+ zkg~Ex0%C5x_FDp0i9J<4{s_D7zV;< zmMu?7oM-*RPYxTEX>-NZg6SUPWEPEYCHX3mQHdaHmjF2i&bixtG?)$##4KB2)*U{K z+GSC1pf_6i`z!JIyz^|`IIrIITVYKvm5!h@RR`7+Gd)FlgaalhXv~}t6B{$yAwj~y z#}zexAJ+Wgi{$xdnZGFG>(zgGnusCJ9C{Yh=@F~4Y*03tzyl|A6$A!935H-W1EV$b zXXFlIKlQ@*gh#Ik&J$#|;0XMki@-)i#MtM*xujUE*sR0US-B>+*KOB_GT1XYbEKHY z?=~xw)K*;cPJ8O^rr(i${n;!Xx@K4)`n1b{o!sNC0>EmR^#}pEGB>9&SZ*U`%R_!` z+J_zST3fgvKhL&GJ=8!WY*ks_$cQ%gp6ED-6_EUuTE&I#@bBqzAcTGJqg7jWpGvT- zkeT_cddo3y%T8M2Wvlj6joYB3l>r789!KBw{w&6*3I`48>tqN_HyO#+hoht%OCrXG zehL&4#4QzL=>iVRPJ}jp|9-!7D|1<4i`pABGuZyW4DojK=Kd-#mqTa9xhMAr!E zGAo455`pZ1JEIH+($`5E_X&cGXHBCYYf?q-y&gRCG6vDJUv;l52IcYaT>5+AT8-*4 z;2G)m$Mt+!S__D2pA&`U{4lCC&d@KHVXlzA2nv~>|ACb>j79Py!sJ`3Z+NMF{Z3f# zt0F12l21B1RX7{p-#C1-Zl{SJ|M_PF0D3f4{9wA%ZXZc((v%e)oq9ZSS{IWSU3K&ErYQ(upXe(c-WT z*|Fj2Jdqn*^ zo#GMuot|#+Z!=(z$+!m?i#2bo#ne&Ewyp{rm&{fM$RChvsI|L1l9y93#bTCCer_bS zz&M-{6ojy-UhLIEqITcf%ItRYMq0v>`id8ZTidSI-ggr@dv`aEG`?o@5?}hXq07Xi zs2`=OODy_PjG13xn-@b1n}!C11lQA9L*{Jz!37;{?)1fzKfUER?V2$}kv!Di^fsr( zy_Wl#Uo>tC0V*WR`t4@-py18Dh7vmj1t~XMxCxkhgen=5hjm2vaC&{}9hN>!!-o&OWxoY>xD&hq5^)v0@@`1h(>Dab5ucu|c%P!uj_;>F@eVmk zZ~q}qM!w&yq=2TveRmBlo2pt?yZWcUnm%igCWCOv6DCy&s;IW_PRC4>V9F`eb8S%28k@*z~ z<`6PQj441JFEkbR!i+{G`{eIir2k%CEBisq1=Fu^!Q=1WaE%)LC&U2}8O^&%bB&iN z$ub!_;xC8lztS$TP2PS2j}Z#M4>iHV(V%(!lsnlYUy8y_|6Av){uR`MSGmlg37n-C z{ahcvsqLzAm$>cX(Y>vo>)s>M&X@Y!{D~jZU2Q^>c1~tPHoG&RDt>>PKLwnJwa>k- zQ)#%X?{CU=J8;Ln*{_-OiMA^5E2E{tOBUO9N(5&MjyR~(AZW%B5}7`a@-q$AII@x1 zf^S-HE^`6j zv_fYdrpExgMJRqfqh(Z4!}Z>szW)(H&GMPhP`2k%!ldN#+s(1KnSrG@|FMPJ6kgs? zyOvhi5}J11?6!X|04l|)X+;5G-L9WZbkpHTq`YKmMw^fNTs+D;x`-r>F3%(*fwt6p z&rarguhe8v9Ebb?TItbwe_c%>#b=>|aMeZ@ccU*o*cOkiiLaNCXqG^%!>9KqKE1r< zbBo4ex1&mRzTwf7<0CG>Ah9>V{xpvq5QL%$JH)MG;8#>0A|o!3d-#hO3uTgBB9|qe zY8eizyf7P{xg0s}jhb4FN6TGm21VA2&oSHGjc^vzm9ZP7_PA0OM_1VID1I2L@LW7eVc;ktRC0!px5PV%Zl#B@j5H&czc8Vx+`iaN zOTE^GKD%pigT+X+d30_deoz5mXY1|gLEqq~>{^d+85Ln-&A4 zysvZkz6DIGP|SVgY1<)Eo{MM~ePoD{c3ard+3_`@ab?}qyRF3eRuM>NlZF7g79Xu^GNj#ds=l+^mYoGNmq7UlD^H z>jk*~M`3q|>op$s`*?ZeeOf>a3+(ps;bKFQn854|I`Y*MW147cEb408jTDf4P&UsF zL5<0r|3aPmU4I_D-#_nWi}%k~7BTvl+L719TyzF;sf8MNS(dfKf^hhE3Nxo&tfG9& zclfACg7h}tsKhpnGfFbB=>FO7D;M&X^9k)^|AUOi?^m`W@I!@Oll!6s^+nk9HXBaJ z6hj^@ag7M`Yn5JI1y&QB2c2)=G%tkJpcQB8*S%JD`$(l>{@-a zyjGfu!dTFNV$NO}q(|G0k|Le|D+uyMk5nD27KlxA;acI4Amz5oJnBCfR@;0Wh7`hS zKn$p$Z%V`$WRTrtY%`U9F2HWF%*h*ru3#SbN2Kl1Ou|ENeH!zQFANl?Jch|Np`Y0y zLclGr!vUH50S!~bS3B2ByOULyKF}q~2M?|rWvstw-;3IX67%$mx6uq*Fle{X05oig86wjFdiNTXWk>Dq2;TzCJVcWZY0cU>L13+0r~ zMkmunODtj?pq8*RR#m*v+pzB0K7^uIifRzHI2pMd!a+Q=^WvjUg*Er5ZRGL&<;H+; zmG_w2%1N29apl4Viro=PbR2Nxk{naFSnp!djp$7!)6w9x$gXgc3QDn+kF^E?eP7f_ zmD@n5En1#_6mKsF)`SA9Kl}m2`?izq-AZj1t#qx$Q<*j1mVx5ierZ(SYDFQ!y(ImA zAx{#vJv4p;@f3k1!``ccZAb!>?~}j+w8Hr&K7Q|KuZBb1FKtTx3>F?H;ye311&B zkwh2GMyh)3oFzo7REfaR$;QR{j^2)9{Ak_R?{wbI3Idtam_JUjr!A|>Qf?J1fVV$K zKH6)vH`pXqWz1UmL13G6f7cNubMc+a>fN@QmDro$A0^z2I`jivKXVqZJE0oyk4lAluYM>hXCsoynG!iwMYEPCJcDVy!cSm4~4 zbLy)_aHoK5NWfdU(#Kg?n}l8MMEfKm+ZW~|A=UnN>K9}G{&92T5!k}Khj>LD9NWkpDzG2BNI`|nWttQ{t>!xuxB$lIigU{jnM-g$KQ`yp*7 z7jU0-{#&QJt-TZI*QbOQ=HG3*G#D>8iZbjez;~wV(Y0VYiK5tAZoVC4MsFBcG@%{h zH2jKa3SrbGD$?dVYTcWQij?vD<95F)kVLSh^y~^wFWU0A^C}IA-uqql!{G>e3F93u z6UPb809g=%3auWm0pYAAu?1jbsZg`gKl>CjQ;4p`_r9mU@{nm*4>Q4i2RU5ccJF4= zIatEZyFcsCzrm*8nOhtrd|6W*77q(F(*-`b%m=z)=rXp#GX9iDoEcQib6WWcKvr3q zq$z!+j;-6^fHp6qL5!;raltL1htF3jCl3-wigC=DhIRxR@yIk6eHbAcpeg`lU{A+} zQWp$AAqE@&ZfXm-bhUt3Tp>~1+lmQN zl;PB47(k#IpT-sO5vxIr7N@H-AFC&?gR<4^Q!WD%%n7pq^X&r?HuRZ-$=~H!uO|IB zToae~=sZQJ(glGOcZGo#Mb<3O%FT}w|C6`yn@HoThc0VP#x9L2w?%Bh^P|``BJn!a zF&`{FC?(c^c>vft71Ju0ldt5S>HcHudB zub*vql;yXtCV|uem}1Vsc5=^vc>7{L9F{ntuL}#H1zqjJ>_JHtU6JL&LRdbUx(Ro` z+M1kT-4DZ*H?U9cUIED5YA0Rj@&(s^uhy2OuZ|!bWO)*pz4uzofjMco5%cSFP;{iO zF-#rP;yjXm3p+7Ug^h7I_gt4`7DtC`+APsBR_t9GnE!(qP_a*7b=j6rE~kTZvVc9^ z=sRl2Oaa3x@-&c-4O>S^k^5jNndvA7>^r-VXniSUMzoU`|F!4@w=Cs@Bz*W8a;k`@gnr z&GpsWS0`ojshsTj8FBi5RAjiA&AAA^_1ka7jLUpMWs_QPCu+wTP^Jx91IwZuAaavt z<|oBJdb81KDy=)m_m92TpCu8ThHbOVOlGNbusua{z7wZ2WMhr&QiT|S)bJkFjw_H) zc`!m0w-N!K1BFVJQ0O}^i|$hv({r@*`PwN#(%Ghf+W^{E{$^*wHvg{YZfI+MdVh2p zf`0BQ{#Yy_Lxsq|l8L{->2K)@D9=&7*`VnyUgu033xzbMTuvlmU@o@+U=3Mhs4kWf`P0%6+t=CWiALU8o z!qlcu4{c0hcHcI)-60k9!T9LWa5?(DZ1D~5HWK@Vsp&&5$lEX~Xo6gtpRd3@CJak; zJ8HcZnUQk0u(?=(o+(Exc6%0W`%uI-XJ?E8SDJl8{4FCj^}^)jAcix9r?7%d#VQ{CooDjX^~36tk;_YP%x8!6*G+V)U5_tK}ok#bQ~KP~ZiD;2%W$ikurX zu1)VxhJSn&c`x}a^ym=+RuJ0E3H2bUTf-6$gbQj9!^TKVZu-xV!$t70uheDKRMgT@A^|F3+QYF<50Jt z*U@)tYF5`h+XLsjvx_va>Qo8khnWQ~IrOmQUaUk~+;fvibs9z_r&K6oklt2lLf`DX zsnu(8-oE0!KeGFp?XZo71Ou8{mnY-@04^43PO?T*K=k?>>B#=%^0_r zkww!nS+;pP%373q17sBj*(8BT5U%95WbG%z)J4$a?nv2!2@nRu4aGV^q$2CEhp>#- z6 zwOXU~SeX;AN6F8Pkz$s~n|aH9DAIQfFlU4TY;1NI%+0FwJ5sqn=-1eN6*t^|dO#0j z`905HT|-@r6}dBKE7COeMvxt2Z`fuAJFGj0wpH0Pdxb za1U?orT{wfD>W$}sbLJyTMFgMJyu@3cps~S$hv+;_`3Aqw>x_QbF@1Uh+0Uo_99Qm zH^bu_$A}`q^*a6vKiXt!Y8Dhm@8{e%Ue{iht~AyC=aC3b)0V%;_=eLj$EcE%`P7mw zFtcr#{Rndp*7Vxi2<#nteLr5}@bH1_B%G6WUwfsq{9RsoQzzV2qmj>@@Qgd!YkKe~ zV5r6>zklI292z6^U5?<@3qiUaCk&zMw)7RZUscW2KZ0mbI3_r>mfHHl;8@+@#G+ST zK|?kaQ1&g#%OmvV#$FseU}W@uMt?T%Y={9OAWF}G0i|f!${ZPPx_`g6Ng@*Lkj=eJH*KiLH(bL@yp@bD?lHxPBr-bkE zaq=q#l0Q&m(b<(GgoZDQMTx?}Z z<~)YseOkot&(L0O|AMBxE^@dPDROkNkdtw;@_39Q6QE?FPWI7~WcyZ)U_l4IYRMHZ zesM?)8)vywzWBK07)9mYPsk-A$!h&fecDB|lio$@b)rYrA5}fd{M?oVFdN zzAepf;Srhh*usk2Boh1xY^S*aflwN{abSdP(L+fTg{_83<;ek@q_v1*(38zrT1W^a zG-#_?$iV33g;_NsvKApBtW!Ajv2}xiDXwg|4`z3;#Md--MMm;>(eI@ryMpa#iCUuT z`&aI1@W*aQh3yHryD6`t%-2rv!H{l9rpqer29iy`vNxJVz3sjE>;-S;NT>ZGZV0N0rM!IMXBhGF`Aw9+@0LD=!)(q(7Cqd&5>cT< zG9xd~#^!mnvHa(jcpE#dq|P5ey8uor> zTv{;jBQv(Wy3b2t@toS#azrMy)c$IX4t^4P?6>Ylb@8-BU0W&fl|}p^Nhw5)gz6!fFZ?h&L}a_N0W3Cv}yr5Qv%ugh2z^(?W?tFR;XhneYg^#+}_7$}@9j+OS) zKAnLhzzERH8xFcH5G5t2k9ms>uT@dbA31)gu&kjc07DzfA5m_vA~9JXlhd0_D#k=Q zFA-=*!q8K&GuNMNLBTR~?Z)$jr8e$+q(=;!StCa^uB^JB#%gdG*{O%v`Z{7-|3{k9 zK1@OVA{=xY>~7okY%pdeg`b=L-}ESI8x0c<*a)Fgv^v3E(vXR*9zLmxg`-Sm_#Qkm zW2W}DZ){&mm~)2X)INwjFq-TOSBuv7pgwiz(0L^jnk8*W8j!eLICv&T`{i74b}^=rV$x2e?cHuQwC!CcEx&-KWY_VN78=QARDLt8RTf@rK*VFT6Z-Fiy#~NNE77P(=~$ocZ)~5YF^d$ zylKe1@DmUtPGphhyO(YiC&t;tJZ+!QW7Zu}*+)j1Hy0Epl@~i1cFQ1 zU*ge1qstM4A3c0Dc}f7{+d$LUssomj*jGt-J_1aE^r0> z>=2Q;>&fUAe;rq4aNEAzHCM$^{dpuEhmT8^P`>1833gYXMdV!zn)@S>yVeicJIs_mOD=8_uA#nvnG zK6=@YloXs87{T_2XQSv%Hs=(-Kgj5^nuPC9;1U0xza{2C&`RGo_AEKdGecbE(zp5gXP z5t>fm6(R!Tv79s(+FobEOnshz@U!G)*4s0`OAyVf8jzmA@^91R=4>HpaV>7Rb)H=| zo1P=cWc!P7K$u532}`6{2Dfq7V;axMp|o4*CIXKIMK3hj@c9?t0lE)qrMs&PF}k*W ztIr-oYESVLU{_8$TOg6>{_$`KUqL{7Slr7QHc8D_Gvzg67_IpzG%S0+yHTd}W^nqM z63YDTL_%!b@XF7VSQVs(~?o+rG)=iT?27ZHv;?(shH`zz@rQJj{xrnr1G? zPW}gj(g9|!#eU9-%S@IQ`y&$e@Sm>R4-=t9jE`qWyGYd5?&!|&$elUDy+~--z4={y zM;(yz+6JIW!3_w;Qi=Kbs(?KoKgBw#BVVK2K|(52wQso*2ut}`PCllVs$F^QyH4$W zKBpM@T8DIyxj439!w}2lribA>y>`lha|q#RQ#Rg;5L4A9%8BUFTJq(k&VoUo7+lLPiRD zgjrfsHq6IiCVVLL*9q7k!pAmBFRfoJX6qhJ`ajr8zCx-YsNXa6 zIjzh$Iw?=~8VhuogBuZ`n9fGc(**%}@l68`?KN|#&-d6Q6W|nN+^$d%$Q@nut4K@` zLQy6h>Qg#04gHagi#pzDys0bd_;Z#n@xjc`{<#K|S9Il)yLPT&6GuXoNnCfgQY_Zo zf(%$q#54{aPq+E=P$Vow#Q75wC ziXP_KfdvJ1YeeK$_3z@!J)0$81tKQ3pbEU0nULybndzu;?H$@<3T3V zRKNYE3d_S2>9~=I@T$8dXGZwN_B{%#rGJ-9IYWZs|%?RSDKYi`K zX1G}E6tNLuKxRfrol(pty!RV30o=EtMxes2XD_~$XgK};tC8s*gNT+mVx)-%TA05! zfe@eO$LGrv_26m>l4rg!(opex=zw zcQ(NO`B)jx;-L!j*>|S=1V{UmO?Pw@b}eSTX+WR5`WzH67&o@CjGIX(s{BP4jel-G8*j9pF z5ZPKB4SB9#KJF^XR|Dctr1Hl<~t4L(+ zL4(SP>1gqVg2jPCOV2JEN!1M8+S7~%0o-YdrUGsAu2PzAy+4@K_k@6LJ4+uNqq z-kk~~_stvE+e>6GpTp_@?R^1jO;a%WE$@!%7uptQ+jMZd7aK3@cs6YV3pZ?v zw4Oup(@&wx?!c3#&L6bLjR=y#$TyQaSI0RduPir)gG&v9$L73q>EhPR5&4xqvQhH+ zIM)dFuE(NUEWA;2ZJ;1~`Pyc$JSjAm5Qph`HjvBx+ zcYOw9!i9pl+>WaUVK2ePKV%J4R5^%pL=>teBg#Q`HdT?1;nMX%Aj?wYEK|Ku?<^xX zQdtvKkhq4fO!L!na;2Zv)CT*T1yfEitEQ}`kC#lWBF{mf0L*940;hi6`x##jSAA{-}Y zKg&c-dNRx!J9Bu_wMxG1aL~!-H{f6*Www)jAumIzqshCBFxcMLKU(7nB!0pFp=#3Q z{Z^q1h^NI&JzD>Xl}afg2I=~CN>03(UC_w2>x4&dPQ%|nD*?Umz6l;UYciYZv@$y4 z-?jq=c7!;ZiAr*9`|_~$XtPGAl2~)xF?>4TGi^gR?jta1=qP0fkGh{rjS$bn-|XE{ zyGQc3EE5!&#>! zU#a+)W&r}5N#f=;zvKZb+(64)8VpJv7+#h)NBUni($a%nMei)_*?7NrD-x6Hb$g0m z?9s>Oa+efwqh5M1O4#MnvP zBz#R%Q;0!@t?LnH)|37`GRYel`&7a@%5en$cwISTUy(Typ&FhTo9f8;!>zKjGGuVB zE~Q5E$rOiKO`9V<@Tdq(V-4K#gcQR_RE9p}_WC|byTOZ6NYI^(!Y56fif?_)?Q69c z@fe3lplNmd`R^+OII7c#=C?q+bK;Z_FN5H9Xwz*t zUM01Q|inFd{>K`qF^2@-QTB=*Ml4{9E#_`mSPk>*4+DjS}%N(ZXv`DzozI*Kg>|!!IbT04E zM}cu^pSlg^vWb$|3Lbk*Dn|AU++36pg1@k<%DP*;(=vjU)W}STT0`C_24uglcJCg` zFc*Gv2qW3b@X z)Tc-S4qD<_^-;W=DUjnef0OsOglRd0|9*n+=cyEPdB!?e`(fMIy{KBnqSU{%!%S=1 z`y#@`b8ma)zOhcd%E--mLszywsv$^hXNn_K^Mws&zrjFymS*x z*jwBc(U#p(4b+e+`j-A-@h`kSLuZta54<6mPYb3mfBkXiqB|6i)me|m+LvxNf>UGPTA>hmT^xtSSOD-rifkS#vq_t@ecs)|U z3|Ai2k?_ISJ5mj^9xsk_(^g``Z)DD&B;lToKE&npv%G~k&9%e|07{(ce{t-y@y!sG z?#0SUApqAy95jux!-VPI3W_DC?GgLYpavFJ8b29ohuq}Rq*6C|>@!qc(sKxPxsVP| z@3AWIix1nXOS9RgwZ+P+zn!DJnSIANZr*JHcOT9H}HXC&-LBF+R)bJl?e8hnH5Yb~tGc-M4KuOxAtrhdA!|wA}3GC~>Zr$1Zsk zO607MYkELKQ^jrR+_7#tfBvht{#MczP8}j*(qCWJ_>>`Bd=OG4@zPRfvnNqQx+{_Qb zh0bgyiD&xM`U>qoN?!^MFGNTre2H|tc*PcS44lQK4Fqo32ddnmeLY-O;uerg?$cb( zcY6`iehaDk+~=P@S;Q~p3wLf9h~&>|Scj@tEawYmX-u<>_)M7%&TsQX(<52lO-&8l zb3Y^|Y>^00>C*zY5kt}H_2C`Q1mYRxkPkoUUd$D5;8;&7KGG;i5&UPvT^;^AKuJzvAG+7ct21 zI8%*P9%FIQISS&@(i#304=fRcg_D$a*%y7)Wd`n$lVjXcI=uPeMzZp|HPi{i(Qx`d z04^Z6^BM{dO;N%|u_?DJS>Y-b2(Wg%0Byj4Ilb|6 zt;I_rVz|G4@W0~Xi`Fgd`Y0zNYB!;Fz+-wf-q!Ir|6PHe+CHeoY0HEb0@)5~4M$@9 zx!KID`>3f9wdfXUGFvs|-wUEG;qB>@Ml#C=TNJR&wEzx8=Xw_fxXgW(+6~w&5XNTB zgzN-nwZ;=Jq;jbO+BSIRzh>=R_x;d~FMjZ$x>065^MpBWG}JCSHN=!uR>&y?Mtif+ph@}HqB8}7>I5ttSstz*2^{$`Dz+3_WK1IvO6 z*dyX2Jgx{jZiun<7S3$EQRI@d-rF1RN6x24OZ&!TuG0p)M+j{Aly z7Cjys|6U(UkFrp`rV@uDjaGRh1A5FWCdSg`nFB*mbbN*KRn7#Tr;MS>TLK z6X+CzK}}_EcCER8BMr394+Kl!cwS#r5DKn=;4FS0o927!84SzG*64J)sH%#j%FMj4 zpU~%Ph00zX6>p4<2>UEZ6hhWTM24l8Brw&{xN$Trb;CBKxwsjh%=Z4y0d_F(#ofF}C66=N)8*aQ~^#1%@n@s8P&EV;(NC(&F zmgGD>_mI=U>We`&V5Lk^G|pxS)_cMlclq-X6*ET#?8X@_)f3$Dv$f@V#b21$vJ{_H z2Z_Cx>M-q?YdZY??tXm<0isALRdpzfph=5n`GD0uiDjY+RZWUP5#wSAaj~ka8adZh zfBEKW>EQe0AYGEAn18^}KD|2riO-$~j-GD`g?Fv^(rD!l7S(NG*QFbd`siz4{Klzu z>(0%pU5t3zYSBTEKu-j?tGzu=c(&#-?N`d%ZvG8m6RGfQW#~4j!WM zvt~d5o52|LUK9lz-&n;$w#W${Nm*(D#x#eOf%!dC%208xf}f1WG(<4yw^pT-W1Ox! zX9NHfVWe*7vk^GUqCm=Is+T2C7gR$Q{8?iNsH&QTL8a5lCBk5k z#?Gw@k&9Sxo`Ti4tEFPxF?CK&Sr$g3vxY*R({EB@T$?d4^%m{4%G!u;91|L65j1dp zU9(Cf`Fo{dbPTb5m04@gE}+J+w;ilPdP)dGa|ugXsW}&PPHo)_GlF%U5X)#}Tx-1@ z*|f=>Jey$D)qqZ^ITpbXkI{AHP7D9Pb8f6jS#y@i(1|Dvjq}gDzG$i>JPnoQ9 z1DW;2As`_`kbuk$D8X{mPVj?6)`B{@k#Z$&d41)EHk-vw>qM?>z5JChC7+iH%z`a{ z=LR096F}uCK~U9+jBqP8gc0b(>a`tWFG@Ze35}zzXZcWKrE$UYwD$Wb0adC|nsOo> zJv2@Zr)RKBo9Qx(hS+Y`G$bIvcoDE`uErI&?#J|a7sssZqEiN>+8hqyHT+%q|2_KV z|8lnR2!xltT{AfpMuroCW+V3b%5bD+gjlIIF~Q2gf;EnzG4qs8Vim`TvR0wPq3X(; zP|~6NSA>dSGVPE+|AhYmwaODLYj@gQx*l1@{~d6K5&0}n!@*qw`(>e$G9ZCCT9u) zI>E82@>bp${tj2-PcaQD_t zQK>`CmaAvDXdc=`mHu-OGlYdj^Wv!uQ|dy+*DV8X*|&@k1d|;a@+bwWxr$s$BxP z0W4Qz$_1v7#mJ#veklg``nm~*S`e{vjs^{NR`M2tU4vzZHc#$=+B14Or?Mzo?A!|H zBZO#BwJKs!8WP2|ujU95e&#qvuLQBWR2t)9!yA?<($NgTIVx-$oRt+CMYOfkPZG4UAK_kzSQAJ?S3g!PgWngMU=UpemF!72wFNn<+6`ZCzu2Q&QQ#6SPp&_A`*K(JJdrx9{P zQl;}+6a_T#8PwLhuLrf@MT{pwr_^{)hB&2E@wr71VnOE>F-we#_42~LYH4w&mXrT* z!h;|3k+UBA>f2;yW`D~WxMQVt0PbW_RZ*Q=ebKW{|AWx!{JI30$tm$l``{{37j%7%RWBzU(RSTG@#B?tDNq8^surjyXSt zno=Z`&OMkt&u;hdmaM!?reaWwTtG93&W5rG|oV$q&=8XPrL0!zaLlG$MJXb`f^qkxg7Mc^by4x_7JDV3av^U_Gs z*h7J=31v~DPBqH1gOpP9y;Rqb$dlF7qOlkRRU$c3BsBfonV&YkhRq4bWZ2R*G;6}f zI|Rfis0Y?a$i{5ARxCXbhYWQ`p=baYy)hbOXiG=Q8Yh_{Dy-VW34}TGggFr!xY|#S z43^_A0#Y?>r>x$5XcTg`zWT1H_`XD=vKeMJNV4w%7QK!fQiX&fl&BIL0yUW}SoMWw zsFez4b0WDGowQ1XfDb{UXDmu+VuLLKpCOsE)a@`|UKRzG>lzD7HFoY@z|tULsmiEo zMU@gsiz*NZDpl0BEQ16TF<`tan4T!HZn}qF5i#Bo#3<-?B0^GrCtLZbaZA`ykcb-J zh31*#N&}t}(VbK$6rFc8{6tFW5D zHAxcst8^*9l1Kgp>Jn1eQL>s&u%#2%O zpp7-|J@66O)+d{C&Q0eyj#;v3TfGXQ(?K;Dpezauy!P85cV9m_(`dPaB#}^WGKa76 zF!*BNsxacFkvd6WBjFGpVKz$NswpgL6tf(T2rz;M03rb?C1^4}gXNbiWAqE$DRx6- z6%mebi2dDQdI@x}#0-A(Tn(w!9Ere^IPNEN?38HM{q~$irfe zvm;#DdNugm(t)*--pu{y$f2(j>M^zrH@Zxg5a#Qp{?0sD`1I_?ODkP8L-yuKAC@KI;qb`O`N|u3U4frizI(s$fL(uyY!L1&uV7JWolz z+ZeA9jEQVY9-em%LlTb~Y)J04SRT${bBnC~y2843hXft^10R$3F{2JpiSgXCN@ z_UeX&Fg?uR7o*N-!&GM}Cj2=g$$Z%$?O?8U zm~+gBYd91Eb!El>c1TdRR1cSkoxfp@vLiWaaCKRf$f>r}0O!P`W%_5s6jS4Th@e{* z*nMyjSKhP_GaW%$cogj^72D%x{DZh7>*P2^u(KqB5&VYRL-{!cf{gG%GWkFQ1(s?- zr&nV0%5lt0lqdq5Ag4Mvy)nd6dgK9d9)mT@@;x*}K79U%<4dQW)dpgf5HKEtn$yoz zkLeCWr6A^jcsj+_EZ@_D4+{cFiuLC;=g_|&BiYOWi-Z31ZMrd3Pn^702h<*%-m z@f&UvIqQEtLA90tS6nBzau-O>H;!F?(OVz!jemd3E5}x@I#yK!>%*-(3K(_JP?^yx z0#Y?B32Hofv$WhefrKYh=xRzYtF?nQOBKA7=aBkl-;5Z6KE>LY@;XWrZku)VGYS|# z!3?`a^YEYTS%XIyo@aG~UreFrU__B8BrTK%nbjas!&*3LcqpGu9*E;SRycdakcs4+&O`Z|F&1M&)DHF%G8EO zyfBhiGR5tr!QfGK&g^|4if9M{=iZPH<@E_0`?GkN-LQ!h-pKly!A)3N*&=I7APEhtT)eNTTgzphRF3sgv z--5E>dg4*cOm&Ezs_4#!zzwcHggI4W#e?=fp&^gj+7^DCPh}3bJLd`ntJJ9KWJp28 zniW%6Gdqq>$Vi!Jg8nz8Mpe6q8Dj;J7OD($xXnta8qY;7crc{UD>{PhnGi{2hUuql zDVx##6bb3@Jpxmq)Ma#%iC%F(`o1RuSs+7HLbeQOalLL7rLfvA$)f+_; zTnSQ{JCA`%h|sP_mNrJrcaNkLJc5i(6w2Ru#OY3xN3>#*rieXzrjqm{b>XD0CIYd1 zKbR91JHx*0bebCcGJl11|e8( zel&8UW58TIrO06<7`bA*Jh zn9Zd}lD<%AyPH*(IdPV9u^hE2cd-t9ow9^lr$>QBfp%U&(u`m&t9^`v2#Uyc7kmv{ zqa+AWWjACrm>~!cl>&_zz{lh(E2_+Yb3C}tq%nTO{sK`1s=yWB-Oh+#Se3&eGIT0% zy#(vYAuzwfDlXszR{K32a{fM;qXh-W*s3ouf(*ipcTRk_WatnNViKeTXpESh9><#L zF^u;j26f`^E#h{EGuU;A^cd&E${ur~qgmIL5p?PNi|uD`H%)k-QNC~^Hs>ld%g6vC zF-JKY`sDk{OAuW@Nhnx9se+;`hiSABkaJRG^q1%6Z<<)S>J#_+`4_!z%l)2sjfk{p z!0nXb?r!BS5!G!$^#vRL^Hsm}d%Lgw+EdE$-YR4fDkO_Sg;Aw~n;c@^y9fX(9*^<~ zVEL{O&u z8JWuPAd_hO8N&!h%vjQ(^S;51Y;HIT9+-{rAF`cxmX$XZvDyeP%v1j0Iwd=yU@nqF}?y9@b8l znC?Xs5lD%Q{cP-h=T&q%5tm(kt2rNrd|AJYI@O4Vkf^fh5nxWB64vLy(pmLc@$`Tj zNk@%xJRPBf2}|)JD8d5Vf|DI6_!uBs13NM&^XSH zgyjaIg!Qjb%_w5Wh@I}J^4=KvyaygW|J?Tu?NeW{Pk_Cva&7uL7#$1ob2%i?(X;)S zH0Pjc|NPF~A76RosTVxLf!NGj3dIS_xZ( z-fV0%#=|#ejAR6>vK&y8+IP5t1F_o18R1>c*mzWB#w6Rj678^5i1kBo#3QSbvm&3< z00A1eV2*<|qERRymYal~W|u7D^7k-Ul-=#DcfCC`L|Iv3Pn`{cflAY2HF~ojLuE`& z5+1kQrqaIv%t5dr0C^HN?)J-Iy%rk97w9n5b;aKOrVRNVek&MXAU7xl$(yieR%LB@ zHWY$UmKpGoa}~%@7!nAUyjO!E-@=iRU|4mLvmuAJ zAH^IMNAH?S3)?ROL%ULq)L%xmT;+^h7bTW*(#39Ptj?j--qehCy5m)+JMpdQ4adCp z?4S7Q&xYe4-RCB2<$n_H)K>0tQPrsZ?Z^M~i_ZI#LDfI6C}bihNEtnnwoM4Iw9UO| zGe?Z12*n0V54iIn;6{oeqN-~YfnE9-F_T~5P%`)1kTcLId&_?^3iW(DVLn(y;s@V& zH2{?rzaNdE&xnUmZBwFTo1E|=6#_evF}$Nuiv}&5WQ7=s&KIpJpCg+ildQvFoml7H zEN>;`$s6-|cu!ZzR5lQEL@XVUy!EX`9ULi({Qa5CS;z+UGXKn82Cj%3!x$~MYDO7m zwAIk^P!J8scB&hl8iUit(kq#B)1(88OHmC5O*H{?x`w_0z(|CZ65mCwu?*YDl6;uW z*b1Da#ne%iDipCaH)zO}@KX>)0EqWGpd*;9w*YL-4h;gI2P3GIh?j#B+Vyz^h%jW> zvC0B`_R5_Yq=at4@>Dnez0#^IyqwI&mT%+3=qQ>ZDV>q|K}MAW7HY*(MPpS6Pz0E< z1*#h8*9l|20_$gbST`MUVBZ|aO}S>7df*Cy(i9_D7sD__Ww?jv_&F)m9iM2ZOc7Z* zV}sSK6|OBh5C9#jtmI*2OUpT_&-I7$p%}%(P&DiCcVMx`sudI1x@H;*MZZdj=Df4- z2g#l(XYv#pw8~RGd_Ld*Oe2gSJxbzbh>?ar@$e+IMqDB=lCDAe3TPT&u($-RmU2;c zmM7L6xv=WUla^h-sFrZ#*rPELP8it$@ii#{Nss;aWov?Sf-TY$9- z?Wu&fPkgVm@*@ycjf44{PWs>rAMtVt`Joyx7K9O{EBR67?Fy4kYs_07n!_gAhv$eb zKTprwl&^J!qY@(V4DkFsc>~#x7c~cfx?>oX0-i%0A`c>bUPh?kJGf(Dh9w9$zZ-f# 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

      7t6RiW)|jf(S@JDU`Pd#-=EH0 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ƨ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

    e~zahPHMyQ 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 z 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ȎhZhd1*1nX0!k0FD?3qJE$E17Mp$rpf*2ww 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 z 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�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 z

  • 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 VyEqIf?mGYg002ovPDHLkV1k?*^t=E7 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_intro_help.png b/app/src/main/res/drawable/ic_intro_help.png new file mode 100644 index 0000000000000000000000000000000000000000..db3ee70761ceccbcde299591682d8a5f322094ce GIT binary patch literal 60544 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 z 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_intro_robot.png b/app/src/main/res/drawable/ic_intro_robot.png new file mode 100644 index 0000000000000000000000000000000000000000..e057d9d7d1992d9005bf468dd25db3b4b3534e33 GIT binary patch literal 70738 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%0ANEZ-FdgmX(V|la0$)ybx4jAnKUn@HJ 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 wY9tB}TZ(Z@uvJVP_s;Q#;t literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_intro_track_progress.png b/app/src/main/res/drawable/ic_intro_track_progress.png new file mode 100644 index 0000000000000000000000000000000000000000..b6a212b09e0986e3520cac6c6a50c3215b751e0e GIT binary patch literal 62293 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