From 0df3c0589df1909ea4aaa8b47511331d13375f39 Mon Sep 17 00:00:00 2001 From: DAPAH Carole <akofa.dapah@etu.unistra.fr> Date: Wed, 2 Apr 2025 11:44:11 +0200 Subject: [PATCH] Ajout du tp4 --- Lab4/{EXO1 => }/.gitignore | 0 Lab4/EXO1/.idea/.gitignore | 3 - Lab4/EXO1/.idea/.name | 1 - Lab4/EXO1/.idea/compiler.xml | 6 - Lab4/EXO1/.idea/deploymentTargetSelector.xml | 10 - Lab4/EXO1/.idea/gradle.xml | 18 - Lab4/EXO1/.idea/kotlinc.xml | 6 - Lab4/EXO1/.idea/migrations.xml | 10 - Lab4/EXO1/.idea/misc.xml | 10 - Lab4/EXO1/.idea/other.xml | 549 ------------------ Lab4/EXO1/.idea/vcs.xml | 6 - .../example/deezersearch/DeezerApiService.kt | 10 - .../deezersearch/DeezerSearchResponse.kt | 25 - .../example/deezersearch/DeezerViewModel.kt | 51 -- .../com/example/deezersearch/TrackAdapter.kt | 33 -- Lab4/EXO1/app/src/main/res/values/strings.xml | 3 - Lab4/{EXO1 => }/app/.gitignore | 0 Lab4/{EXO1 => }/app/build.gradle.kts | 17 +- Lab4/{EXO1 => }/app/proguard-rules.pro | 0 .../deezersearch/ExampleInstrumentedTest.kt | 0 .../app/src/main/AndroidManifest.xml | 1 + .../com/example/deezersearch/MainActivity.kt | 27 +- .../deezersearch/adapter/TrackAdapter.kt | 41 ++ .../model/DeezerSearchResponse.kt | 25 + .../network/DeezerApiInterface.kt | 10 + .../deezersearch/network/RetrofitInstance.kt | 15 + .../deezersearch/viewmodel/TracksViewModel.kt | 25 + .../res/drawable/ic_launcher_background.xml | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../main/res/drawable/placeholder_image.png} | Bin .../app/src/main/res/layout/activity_main.xml | 10 +- Lab4/app/src/main/res/layout/track_item.xml | 53 ++ .../main/res/mipmap-anydpi/ic_launcher.xml | 0 .../res/mipmap-anydpi/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin .../res/mipmap-hdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin .../res/mipmap-mdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin .../app/src/main/res/values-night/themes.xml | 0 .../app/src/main/res/values/colors.xml | 0 Lab4/app/src/main/res/values/strings.xml | 6 + .../app/src/main/res/values/themes.xml | 0 .../app/src/main/res/xml/backup_rules.xml | 0 .../main/res/xml/data_extraction_rules.xml | 0 .../example/deezersearch/ExampleUnitTest.kt | 0 Lab4/{EXO1 => }/build.gradle.kts | 0 Lab4/{EXO1 => }/gradle.properties | 0 Lab4/{EXO1 => }/gradle/libs.versions.toml | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 2 +- Lab4/{EXO1 => }/gradlew | 0 Lab4/{EXO1 => }/gradlew.bat | 0 Lab4/img/placeholder_image.png | Bin 0 -> 45887 bytes Lab4/{EXO1 => }/settings.gradle.kts | 0 60 files changed, 207 insertions(+), 766 deletions(-) rename Lab4/{EXO1 => }/.gitignore (100%) delete mode 100644 Lab4/EXO1/.idea/.gitignore delete mode 100644 Lab4/EXO1/.idea/.name delete mode 100644 Lab4/EXO1/.idea/compiler.xml delete mode 100644 Lab4/EXO1/.idea/deploymentTargetSelector.xml delete mode 100644 Lab4/EXO1/.idea/gradle.xml delete mode 100644 Lab4/EXO1/.idea/kotlinc.xml delete mode 100644 Lab4/EXO1/.idea/migrations.xml delete mode 100644 Lab4/EXO1/.idea/misc.xml delete mode 100644 Lab4/EXO1/.idea/other.xml delete mode 100644 Lab4/EXO1/.idea/vcs.xml delete mode 100644 Lab4/EXO1/app/src/main/java/com/example/deezersearch/DeezerApiService.kt delete mode 100644 Lab4/EXO1/app/src/main/java/com/example/deezersearch/DeezerSearchResponse.kt delete mode 100644 Lab4/EXO1/app/src/main/java/com/example/deezersearch/DeezerViewModel.kt delete mode 100644 Lab4/EXO1/app/src/main/java/com/example/deezersearch/TrackAdapter.kt delete mode 100644 Lab4/EXO1/app/src/main/res/values/strings.xml rename Lab4/{EXO1 => }/app/.gitignore (100%) rename Lab4/{EXO1 => }/app/build.gradle.kts (80%) rename Lab4/{EXO1 => }/app/proguard-rules.pro (100%) rename Lab4/{EXO1 => }/app/src/androidTest/java/com/example/deezersearch/ExampleInstrumentedTest.kt (100%) rename Lab4/{EXO1 => }/app/src/main/AndroidManifest.xml (93%) rename Lab4/{EXO1 => }/app/src/main/java/com/example/deezersearch/MainActivity.kt (51%) create mode 100644 Lab4/app/src/main/java/com/example/deezersearch/adapter/TrackAdapter.kt create mode 100644 Lab4/app/src/main/java/com/example/deezersearch/model/DeezerSearchResponse.kt create mode 100644 Lab4/app/src/main/java/com/example/deezersearch/network/DeezerApiInterface.kt create mode 100644 Lab4/app/src/main/java/com/example/deezersearch/network/RetrofitInstance.kt create mode 100644 Lab4/app/src/main/java/com/example/deezersearch/viewmodel/TracksViewModel.kt rename Lab4/{EXO1 => }/app/src/main/res/drawable/ic_launcher_background.xml (100%) rename Lab4/{EXO1 => }/app/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename Lab4/{img/track_item.png => app/src/main/res/drawable/placeholder_image.png} (100%) rename Lab4/{EXO1 => }/app/src/main/res/layout/activity_main.xml (80%) create mode 100644 Lab4/app/src/main/res/layout/track_item.xml rename Lab4/{EXO1 => }/app/src/main/res/mipmap-anydpi/ic_launcher.xml (100%) rename Lab4/{EXO1 => }/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml (100%) rename Lab4/{EXO1 => }/app/src/main/res/mipmap-hdpi/ic_launcher.webp (100%) rename Lab4/{EXO1 => }/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp (100%) rename Lab4/{EXO1 => }/app/src/main/res/mipmap-mdpi/ic_launcher.webp (100%) rename Lab4/{EXO1 => }/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp (100%) rename Lab4/{EXO1 => }/app/src/main/res/mipmap-xhdpi/ic_launcher.webp (100%) rename Lab4/{EXO1 => }/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp (100%) rename Lab4/{EXO1 => }/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp (100%) rename Lab4/{EXO1 => }/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp (100%) rename Lab4/{EXO1 => }/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp (100%) rename Lab4/{EXO1 => }/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp (100%) rename Lab4/{EXO1 => }/app/src/main/res/values-night/themes.xml (100%) rename Lab4/{EXO1 => }/app/src/main/res/values/colors.xml (100%) create mode 100644 Lab4/app/src/main/res/values/strings.xml rename Lab4/{EXO1 => }/app/src/main/res/values/themes.xml (100%) rename Lab4/{EXO1 => }/app/src/main/res/xml/backup_rules.xml (100%) rename Lab4/{EXO1 => }/app/src/main/res/xml/data_extraction_rules.xml (100%) rename Lab4/{EXO1 => }/app/src/test/java/com/example/deezersearch/ExampleUnitTest.kt (100%) rename Lab4/{EXO1 => }/build.gradle.kts (100%) rename Lab4/{EXO1 => }/gradle.properties (100%) rename Lab4/{EXO1 => }/gradle/libs.versions.toml (100%) rename Lab4/{EXO1 => }/gradle/wrapper/gradle-wrapper.jar (100%) rename Lab4/{EXO1 => }/gradle/wrapper/gradle-wrapper.properties (86%) rename Lab4/{EXO1 => }/gradlew (100%) rename Lab4/{EXO1 => }/gradlew.bat (100%) create mode 100644 Lab4/img/placeholder_image.png rename Lab4/{EXO1 => }/settings.gradle.kts (100%) diff --git a/Lab4/EXO1/.gitignore b/Lab4/.gitignore similarity index 100% rename from Lab4/EXO1/.gitignore rename to Lab4/.gitignore diff --git a/Lab4/EXO1/.idea/.gitignore b/Lab4/EXO1/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/Lab4/EXO1/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/Lab4/EXO1/.idea/.name b/Lab4/EXO1/.idea/.name deleted file mode 100644 index c1c77b9..0000000 --- a/Lab4/EXO1/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -Deezersearch \ No newline at end of file diff --git a/Lab4/EXO1/.idea/compiler.xml b/Lab4/EXO1/.idea/compiler.xml deleted file mode 100644 index b589d56..0000000 --- a/Lab4/EXO1/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="CompilerConfiguration"> - <bytecodeTargetLevel target="17" /> - </component> -</project> \ No newline at end of file diff --git a/Lab4/EXO1/.idea/deploymentTargetSelector.xml b/Lab4/EXO1/.idea/deploymentTargetSelector.xml deleted file mode 100644 index b268ef3..0000000 --- a/Lab4/EXO1/.idea/deploymentTargetSelector.xml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="deploymentTargetSelector"> - <selectionStates> - <SelectionState runConfigName="app"> - <option name="selectionMode" value="DROPDOWN" /> - </SelectionState> - </selectionStates> - </component> -</project> \ No newline at end of file diff --git a/Lab4/EXO1/.idea/gradle.xml b/Lab4/EXO1/.idea/gradle.xml deleted file mode 100644 index 32522c1..0000000 --- a/Lab4/EXO1/.idea/gradle.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="GradleSettings"> - <option name="linkedExternalProjectsSettings"> - <GradleProjectSettings> - <option name="externalProjectPath" value="$PROJECT_DIR$" /> - <option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" /> - <option name="modules"> - <set> - <option value="$PROJECT_DIR$" /> - <option value="$PROJECT_DIR$/app" /> - </set> - </option> - <option name="resolveExternalAnnotations" value="false" /> - </GradleProjectSettings> - </option> - </component> -</project> \ No newline at end of file diff --git a/Lab4/EXO1/.idea/kotlinc.xml b/Lab4/EXO1/.idea/kotlinc.xml deleted file mode 100644 index fdf8d99..0000000 --- a/Lab4/EXO1/.idea/kotlinc.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="KotlinJpsPluginSettings"> - <option name="version" value="1.9.0" /> - </component> -</project> \ No newline at end of file diff --git a/Lab4/EXO1/.idea/migrations.xml b/Lab4/EXO1/.idea/migrations.xml deleted file mode 100644 index f8051a6..0000000 --- a/Lab4/EXO1/.idea/migrations.xml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ProjectMigrations"> - <option name="MigrateToGradleLocalJavaHome"> - <set> - <option value="$PROJECT_DIR$" /> - </set> - </option> - </component> -</project> \ No newline at end of file diff --git a/Lab4/EXO1/.idea/misc.xml b/Lab4/EXO1/.idea/misc.xml deleted file mode 100644 index 0ad17cb..0000000 --- a/Lab4/EXO1/.idea/misc.xml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ExternalStorageConfigurationManager" enabled="true" /> - <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK"> - <output url="file://$PROJECT_DIR$/build/classes" /> - </component> - <component name="ProjectType"> - <option name="id" value="Android" /> - </component> -</project> \ No newline at end of file diff --git a/Lab4/EXO1/.idea/other.xml b/Lab4/EXO1/.idea/other.xml deleted file mode 100644 index 22069ff..0000000 --- a/Lab4/EXO1/.idea/other.xml +++ /dev/null @@ -1,549 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="direct_access_persist.xml"> - <option name="deviceSelectionList"> - <list> - <PersistentDeviceSelectionData> - <option name="api" value="27" /> - <option name="brand" value="DOCOMO" /> - <option name="codename" value="F01L" /> - <option name="id" value="F01L" /> - <option name="manufacturer" value="FUJITSU" /> - <option name="name" value="F-01L" /> - <option name="screenDensity" value="360" /> - <option name="screenX" value="720" /> - <option name="screenY" value="1280" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="OnePlus" /> - <option name="codename" value="OP5552L1" /> - <option name="id" value="OP5552L1" /> - <option name="manufacturer" value="OnePlus" /> - <option name="name" value="CPH2415" /> - <option name="screenDensity" value="480" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2412" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="OPPO" /> - <option name="codename" value="OP573DL1" /> - <option name="id" value="OP573DL1" /> - <option name="manufacturer" value="OPPO" /> - <option name="name" value="CPH2557" /> - <option name="screenDensity" value="480" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2400" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="28" /> - <option name="brand" value="DOCOMO" /> - <option name="codename" value="SH-01L" /> - <option name="id" value="SH-01L" /> - <option name="manufacturer" value="SHARP" /> - <option name="name" value="AQUOS sense2 SH-01L" /> - <option name="screenDensity" value="480" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2160" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="Lenovo" /> - <option name="codename" value="TB370FU" /> - <option name="id" value="TB370FU" /> - <option name="manufacturer" value="Lenovo" /> - <option name="name" value="Tab P12" /> - <option name="screenDensity" value="340" /> - <option name="screenX" value="1840" /> - <option name="screenY" value="2944" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="a15" /> - <option name="id" value="a15" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="A15" /> - <option name="screenDensity" value="450" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2340" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="a35x" /> - <option name="id" value="a35x" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="A35" /> - <option name="screenDensity" value="450" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2340" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="31" /> - <option name="brand" value="samsung" /> - <option name="codename" value="a51" /> - <option name="id" value="a51" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy A51" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2400" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="google" /> - <option name="codename" value="akita" /> - <option name="id" value="akita" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 8a" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2400" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="motorola" /> - <option name="codename" value="arcfox" /> - <option name="id" value="arcfox" /> - <option name="manufacturer" value="Motorola" /> - <option name="name" value="razr plus 2024" /> - <option name="screenDensity" value="360" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="1272" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="33" /> - <option name="brand" value="motorola" /> - <option name="codename" value="austin" /> - <option name="id" value="austin" /> - <option name="manufacturer" value="Motorola" /> - <option name="name" value="moto g 5G (2022)" /> - <option name="screenDensity" value="280" /> - <option name="screenX" value="720" /> - <option name="screenY" value="1600" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="33" /> - <option name="brand" value="samsung" /> - <option name="codename" value="b0q" /> - <option name="id" value="b0q" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy S22 Ultra" /> - <option name="screenDensity" value="600" /> - <option name="screenX" value="1440" /> - <option name="screenY" value="3088" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="32" /> - <option name="brand" value="google" /> - <option name="codename" value="bluejay" /> - <option name="id" value="bluejay" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 6a" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2400" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="google" /> - <option name="codename" value="caiman" /> - <option name="id" value="caiman" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 9 Pro" /> - <option name="screenDensity" value="360" /> - <option name="screenX" value="960" /> - <option name="screenY" value="2142" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="google" /> - <option name="codename" value="comet" /> - <option name="id" value="comet" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 9 Pro Fold" /> - <option name="screenDensity" value="390" /> - <option name="screenX" value="2076" /> - <option name="screenY" value="2152" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="29" /> - <option name="brand" value="samsung" /> - <option name="codename" value="crownqlteue" /> - <option name="id" value="crownqlteue" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy Note9" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="2220" /> - <option name="screenY" value="1080" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="dm2q" /> - <option name="id" value="dm2q" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="S23 Plus" /> - <option name="screenDensity" value="450" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2340" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="dm3q" /> - <option name="id" value="dm3q" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy S23 Ultra" /> - <option name="screenDensity" value="600" /> - <option name="screenX" value="1440" /> - <option name="screenY" value="3088" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="e1q" /> - <option name="id" value="e1q" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy S24" /> - <option name="screenDensity" value="480" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2340" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="e3q" /> - <option name="id" value="e3q" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy S24 Ultra" /> - <option name="screenDensity" value="450" /> - <option name="screenX" value="1440" /> - <option name="screenY" value="3120" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="33" /> - <option name="brand" value="google" /> - <option name="codename" value="eos" /> - <option name="id" value="eos" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Eos" /> - <option name="screenDensity" value="320" /> - <option name="screenX" value="384" /> - <option name="screenY" value="384" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="33" /> - <option name="brand" value="google" /> - <option name="codename" value="felix" /> - <option name="id" value="felix" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel Fold" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="2208" /> - <option name="screenY" value="1840" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="google" /> - <option name="codename" value="felix" /> - <option name="id" value="felix" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel Fold" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="2208" /> - <option name="screenY" value="1840" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="33" /> - <option name="brand" value="google" /> - <option name="codename" value="felix_camera" /> - <option name="id" value="felix_camera" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel Fold (Camera-enabled)" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="2208" /> - <option name="screenY" value="1840" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="motorola" /> - <option name="codename" value="fogona" /> - <option name="id" value="fogona" /> - <option name="manufacturer" value="Motorola" /> - <option name="name" value="moto g play - 2024" /> - <option name="screenDensity" value="280" /> - <option name="screenX" value="720" /> - <option name="screenY" value="1600" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="g0q" /> - <option name="id" value="g0q" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="SM-S906U1" /> - <option name="screenDensity" value="450" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2340" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="gta9pwifi" /> - <option name="id" value="gta9pwifi" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="SM-X210" /> - <option name="screenDensity" value="240" /> - <option name="screenX" value="1200" /> - <option name="screenY" value="1920" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="gts7xllite" /> - <option name="id" value="gts7xllite" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="SM-T738U" /> - <option name="screenDensity" value="340" /> - <option name="screenX" value="1600" /> - <option name="screenY" value="2560" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="33" /> - <option name="brand" value="samsung" /> - <option name="codename" value="gts8uwifi" /> - <option name="id" value="gts8uwifi" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy Tab S8 Ultra" /> - <option name="screenDensity" value="320" /> - <option name="screenX" value="1848" /> - <option name="screenY" value="2960" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="gts8wifi" /> - <option name="id" value="gts8wifi" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy Tab S8" /> - <option name="screenDensity" value="274" /> - <option name="screenX" value="1600" /> - <option name="screenY" value="2560" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="gts9fe" /> - <option name="id" value="gts9fe" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy Tab S9 FE 5G" /> - <option name="screenDensity" value="280" /> - <option name="screenX" value="1440" /> - <option name="screenY" value="2304" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="google" /> - <option name="codename" value="husky" /> - <option name="id" value="husky" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 8 Pro" /> - <option name="screenDensity" value="390" /> - <option name="screenX" value="1008" /> - <option name="screenY" value="2244" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="30" /> - <option name="brand" value="motorola" /> - <option name="codename" value="java" /> - <option name="id" value="java" /> - <option name="manufacturer" value="Motorola" /> - <option name="name" value="G20" /> - <option name="screenDensity" value="280" /> - <option name="screenX" value="720" /> - <option name="screenY" value="1600" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="google" /> - <option name="codename" value="komodo" /> - <option name="id" value="komodo" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 9 Pro XL" /> - <option name="screenDensity" value="360" /> - <option name="screenX" value="1008" /> - <option name="screenY" value="2244" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="33" /> - <option name="brand" value="google" /> - <option name="codename" value="lynx" /> - <option name="id" value="lynx" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 7a" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2400" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="33" /> - <option name="brand" value="motorola" /> - <option name="codename" value="maui" /> - <option name="id" value="maui" /> - <option name="manufacturer" value="Motorola" /> - <option name="name" value="moto g play - 2023" /> - <option name="screenDensity" value="280" /> - <option name="screenX" value="720" /> - <option name="screenY" value="1600" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="o1q" /> - <option name="id" value="o1q" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy S21" /> - <option name="screenDensity" value="421" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2400" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="31" /> - <option name="brand" value="google" /> - <option name="codename" value="oriole" /> - <option name="id" value="oriole" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 6" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2400" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="33" /> - <option name="brand" value="google" /> - <option name="codename" value="panther" /> - <option name="id" value="panther" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 7" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2400" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="q5q" /> - <option name="id" value="q5q" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy Z Fold5" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="1812" /> - <option name="screenY" value="2176" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="q6q" /> - <option name="id" value="q6q" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy Z Fold6" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="1856" /> - <option name="screenY" value="2160" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="30" /> - <option name="brand" value="google" /> - <option name="codename" value="r11" /> - <option name="id" value="r11" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel Watch" /> - <option name="screenDensity" value="320" /> - <option name="screenX" value="384" /> - <option name="screenY" value="384" /> - <option name="type" value="WEAR_OS" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="r11q" /> - <option name="id" value="r11q" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="SM-S711U" /> - <option name="screenDensity" value="450" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2340" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="30" /> - <option name="brand" value="google" /> - <option name="codename" value="redfin" /> - <option name="id" value="redfin" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 5" /> - <option name="screenDensity" value="440" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2340" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="google" /> - <option name="codename" value="shiba" /> - <option name="id" value="shiba" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 8" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2400" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="samsung" /> - <option name="codename" value="t2q" /> - <option name="id" value="t2q" /> - <option name="manufacturer" value="Samsung" /> - <option name="name" value="Galaxy S21 Plus" /> - <option name="screenDensity" value="394" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2400" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="33" /> - <option name="brand" value="google" /> - <option name="codename" value="tangorpro" /> - <option name="id" value="tangorpro" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel Tablet" /> - <option name="screenDensity" value="320" /> - <option name="screenX" value="1600" /> - <option name="screenY" value="2560" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="34" /> - <option name="brand" value="google" /> - <option name="codename" value="tokay" /> - <option name="id" value="tokay" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 9" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2424" /> - </PersistentDeviceSelectionData> - <PersistentDeviceSelectionData> - <option name="api" value="35" /> - <option name="brand" value="google" /> - <option name="codename" value="tokay" /> - <option name="id" value="tokay" /> - <option name="manufacturer" value="Google" /> - <option name="name" value="Pixel 9" /> - <option name="screenDensity" value="420" /> - <option name="screenX" value="1080" /> - <option name="screenY" value="2424" /> - </PersistentDeviceSelectionData> - </list> - </option> - </component> -</project> \ No newline at end of file diff --git a/Lab4/EXO1/.idea/vcs.xml b/Lab4/EXO1/.idea/vcs.xml deleted file mode 100644 index b2bdec2..0000000 --- a/Lab4/EXO1/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="VcsDirectoryMappings"> - <mapping directory="$PROJECT_DIR$/../.." vcs="Git" /> - </component> -</project> \ No newline at end of file diff --git a/Lab4/EXO1/app/src/main/java/com/example/deezersearch/DeezerApiService.kt b/Lab4/EXO1/app/src/main/java/com/example/deezersearch/DeezerApiService.kt deleted file mode 100644 index c8584b6..0000000 --- a/Lab4/EXO1/app/src/main/java/com/example/deezersearch/DeezerApiService.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.example.deezersearch - -import retrofit2.Call -import retrofit2.http.GET -import retrofit2.http.Query - -interface DeezerApiService { - @GET("search") - fun searchTracks(@Query("q") query: String): Call<DeezerSearchResponse> -} diff --git a/Lab4/EXO1/app/src/main/java/com/example/deezersearch/DeezerSearchResponse.kt b/Lab4/EXO1/app/src/main/java/com/example/deezersearch/DeezerSearchResponse.kt deleted file mode 100644 index b33f935..0000000 --- a/Lab4/EXO1/app/src/main/java/com/example/deezersearch/DeezerSearchResponse.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.example.deezersearch - -data class DeezerSearchResponse( - val data : List<Track> -) -data class Track( - val id:String, - val title: String, - val duration:String, - val artist:Artist, - val album: Album -) - -data class Album( - val id:String, - val title:String, - val cover:String, - val tracks:List<Track> -) - -data class Artist( - val id:String, - val name:String, - val picture:String -) diff --git a/Lab4/EXO1/app/src/main/java/com/example/deezersearch/DeezerViewModel.kt b/Lab4/EXO1/app/src/main/java/com/example/deezersearch/DeezerViewModel.kt deleted file mode 100644 index f762e68..0000000 --- a/Lab4/EXO1/app/src/main/java/com/example/deezersearch/DeezerViewModel.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.example.deezersearch - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response -import retrofit2.Retrofit -import retrofit2.converter.gson.GsonConverterFactory - -class DeezerViewModel : ViewModel() { - // LiveData pour les résultats des morceaux - private val _tracks = MutableLiveData<List<Track>>() - val tracks: LiveData<List<Track>> get() = _tracks - - private val api: DeezerApiService - - init { - // Initialisation de Retrofit avec le converter Gson - val retrofit = Retrofit.Builder() - .baseUrl("https://api.deezer.com/") - .addConverterFactory(GsonConverterFactory.create()) - .build() - - // Création de l'implémentation de l'interface DeezerApiService - api = retrofit.create(DeezerApiService::class.java) - } - - // Fonction de recherche - fun search(query: String) { - api.searchTracks(query).enqueue(object : Callback<DeezerSearchResponse> { - override fun onResponse( - call: Call<DeezerSearchResponse>, - response: Response<DeezerSearchResponse> - ) { - if (response.isSuccessful) { - // Mise à jour des LiveData avec les morceaux reçus - _tracks.value = response.body()?.data ?: emptyList() - } else { - _tracks.value = emptyList() - } - } - - override fun onFailure(call: Call<DeezerSearchResponse>, t: Throwable) { - // En cas d'erreur réseau - _tracks.value = emptyList() - } - }) - } -} diff --git a/Lab4/EXO1/app/src/main/java/com/example/deezersearch/TrackAdapter.kt b/Lab4/EXO1/app/src/main/java/com/example/deezersearch/TrackAdapter.kt deleted file mode 100644 index 26d482b..0000000 --- a/Lab4/EXO1/app/src/main/java/com/example/deezersearch/TrackAdapter.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.example.deezersearch - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView - -class TrackAdapter(private var trackList: List<Track>) : - RecyclerView.Adapter<TrackAdapter.TrackViewHolder>() { - - inner class TrackViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val titleText: TextView = itemView.findViewById(android.R.id.text1) - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TrackViewHolder { - val view = LayoutInflater.from(parent.context) - .inflate(android.R.layout.simple_list_item_1, parent, false) - return TrackViewHolder(view) - } - - override fun onBindViewHolder(holder: TrackViewHolder, position: Int) { - val track = trackList[position] - holder.titleText.text = "${track.title} - ${track.artist.name}" - } - - override fun getItemCount(): Int = trackList.size - - fun updateTracks(newTracks: List<Track>) { - trackList = newTracks - notifyDataSetChanged() - } -} diff --git a/Lab4/EXO1/app/src/main/res/values/strings.xml b/Lab4/EXO1/app/src/main/res/values/strings.xml deleted file mode 100644 index e982761..0000000 --- a/Lab4/EXO1/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ -<resources> - <string name="app_name">Deezersearch</string> -</resources> \ No newline at end of file diff --git a/Lab4/EXO1/app/.gitignore b/Lab4/app/.gitignore similarity index 100% rename from Lab4/EXO1/app/.gitignore rename to Lab4/app/.gitignore diff --git a/Lab4/EXO1/app/build.gradle.kts b/Lab4/app/build.gradle.kts similarity index 80% rename from Lab4/EXO1/app/build.gradle.kts rename to Lab4/app/build.gradle.kts index 75cf4c8..dd6489a 100644 --- a/Lab4/EXO1/app/build.gradle.kts +++ b/Lab4/app/build.gradle.kts @@ -1,6 +1,8 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.jetbrains.kotlin.android) + id("kotlin-kapt") + } android { @@ -36,6 +38,7 @@ android { } dependencies { + implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) implementation(libs.material) @@ -44,12 +47,12 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) - - // Retrofit & Gson converter - implementation("com.squareup.retrofit2:retrofit:2.9.0") - implementation("com.squareup.retrofit2:converter-gson:2.9.0") - - // ViewModel & LiveData + implementation("com.squareup.retrofit2:retrofit:2.11.0") + implementation("com.squareup.retrofit2:converter-gson:2.11.0") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3") implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1") implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.1") -} + implementation("com.github.bumptech.glide:glide:4.16.0") + kapt("com.github.bumptech.glide:compiler:4.16.0") + +} \ No newline at end of file diff --git a/Lab4/EXO1/app/proguard-rules.pro b/Lab4/app/proguard-rules.pro similarity index 100% rename from Lab4/EXO1/app/proguard-rules.pro rename to Lab4/app/proguard-rules.pro diff --git a/Lab4/EXO1/app/src/androidTest/java/com/example/deezersearch/ExampleInstrumentedTest.kt b/Lab4/app/src/androidTest/java/com/example/deezersearch/ExampleInstrumentedTest.kt similarity index 100% rename from Lab4/EXO1/app/src/androidTest/java/com/example/deezersearch/ExampleInstrumentedTest.kt rename to Lab4/app/src/androidTest/java/com/example/deezersearch/ExampleInstrumentedTest.kt diff --git a/Lab4/EXO1/app/src/main/AndroidManifest.xml b/Lab4/app/src/main/AndroidManifest.xml similarity index 93% rename from Lab4/EXO1/app/src/main/AndroidManifest.xml rename to Lab4/app/src/main/AndroidManifest.xml index ab75ab5..7157ba3 100644 --- a/Lab4/EXO1/app/src/main/AndroidManifest.xml +++ b/Lab4/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> + <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" diff --git a/Lab4/EXO1/app/src/main/java/com/example/deezersearch/MainActivity.kt b/Lab4/app/src/main/java/com/example/deezersearch/MainActivity.kt similarity index 51% rename from Lab4/EXO1/app/src/main/java/com/example/deezersearch/MainActivity.kt rename to Lab4/app/src/main/java/com/example/deezersearch/MainActivity.kt index 06fea37..32135e2 100644 --- a/Lab4/EXO1/app/src/main/java/com/example/deezersearch/MainActivity.kt +++ b/Lab4/app/src/main/java/com/example/deezersearch/MainActivity.kt @@ -5,12 +5,15 @@ import android.widget.Button import android.widget.EditText import androidx.activity.ComponentActivity import androidx.activity.viewModels -import androidx.recyclerview.widget.LinearLayoutManager +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.example.deezersearch.adapter.TrackAdapter +import com.example.deezersearch.viewmodel.TracksViewModel class MainActivity : ComponentActivity() { - private val viewModel: DeezerViewModel by viewModels() - private lateinit var adapter: TrackAdapter + + private val viewModel: TracksViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -20,17 +23,19 @@ class MainActivity : ComponentActivity() { val searchButton: Button = findViewById(R.id.search_button) val recyclerView: RecyclerView = findViewById(R.id.recycler_view) - adapter = TrackAdapter(emptyList()) - recyclerView.layoutManager = LinearLayoutManager(this) - recyclerView.adapter = adapter + recyclerView.layoutManager = GridLayoutManager(this, 2) - searchButton.setOnClickListener { - val query = searchInput.text.toString() - viewModel.search(query) + val observer = Observer<com.example.deezersearch.model.DeezerSearchResponse> { response -> + recyclerView.adapter = TrackAdapter(response.data) } - viewModel.tracks.observe(this) { tracks -> - adapter.updateTracks(tracks) + viewModel.data.observe(this, observer) + + searchButton.setOnClickListener { + val query = searchInput.text.toString().trim() + if (query.isNotEmpty()) { + viewModel.searchTracks(query) + } } } } diff --git a/Lab4/app/src/main/java/com/example/deezersearch/adapter/TrackAdapter.kt b/Lab4/app/src/main/java/com/example/deezersearch/adapter/TrackAdapter.kt new file mode 100644 index 0000000..448fb86 --- /dev/null +++ b/Lab4/app/src/main/java/com/example/deezersearch/adapter/TrackAdapter.kt @@ -0,0 +1,41 @@ +package com.example.deezersearch.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.example.deezersearch.R +import com.example.deezersearch.model.Track + +class TrackAdapter(private val tracks: List<Track>) : + RecyclerView.Adapter<TrackAdapter.TrackViewHolder>() { + + inner class TrackViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val albumTitleTextView: TextView = itemView.findViewById(R.id.albumTitleTextView) + val songTitleTextView: TextView = itemView.findViewById(R.id.songTitleTextView) + val artistNameTextView: TextView = itemView.findViewById(R.id.artistNameTextView) + val coverImageView: ImageView = itemView.findViewById(R.id.coverImageView) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TrackViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.track_item, parent, false) + return TrackViewHolder(view) + } + + override fun onBindViewHolder(holder: TrackViewHolder, position: Int) { + val track = tracks[position] + holder.albumTitleTextView.text = track.album.title + holder.songTitleTextView.text = track.title + holder.artistNameTextView.text = track.artist.name + + Glide.with(holder.itemView.context) + .load(track.album.cover) + .placeholder(R.drawable.placeholder_image) + .into(holder.coverImageView) + } + + override fun getItemCount(): Int = tracks.size +} diff --git a/Lab4/app/src/main/java/com/example/deezersearch/model/DeezerSearchResponse.kt b/Lab4/app/src/main/java/com/example/deezersearch/model/DeezerSearchResponse.kt new file mode 100644 index 0000000..6a650e1 --- /dev/null +++ b/Lab4/app/src/main/java/com/example/deezersearch/model/DeezerSearchResponse.kt @@ -0,0 +1,25 @@ +package com.example.deezersearch.model + +data class DeezerSearchResponse( + val data: List<Track> +) + +data class Track( + val id: String, + val title: String, + val duration: String, + val artist: Artist, + val album: Album +) + +data class Artist( + val id: String, + val name: String, + val picture: String +) + +data class Album( + val id: String, + val title: String, + val cover: String +) diff --git a/Lab4/app/src/main/java/com/example/deezersearch/network/DeezerApiInterface.kt b/Lab4/app/src/main/java/com/example/deezersearch/network/DeezerApiInterface.kt new file mode 100644 index 0000000..31c1416 --- /dev/null +++ b/Lab4/app/src/main/java/com/example/deezersearch/network/DeezerApiInterface.kt @@ -0,0 +1,10 @@ +package com.example.deezersearch.network + +import com.example.deezersearch.model.DeezerSearchResponse +import retrofit2.http.GET +import retrofit2.http.Query + +interface DeezerApiInterface { + @GET("search") + suspend fun searchTracks(@Query("q") query: String): DeezerSearchResponse +} diff --git a/Lab4/app/src/main/java/com/example/deezersearch/network/RetrofitInstance.kt b/Lab4/app/src/main/java/com/example/deezersearch/network/RetrofitInstance.kt new file mode 100644 index 0000000..9a1bfa9 --- /dev/null +++ b/Lab4/app/src/main/java/com/example/deezersearch/network/RetrofitInstance.kt @@ -0,0 +1,15 @@ +package com.example.deezersearch.network + +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +object RetrofitInstance { + private const val BASE_URL = "https://api.deezer.com/" + + fun getInstance(): Retrofit { + return Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } +} diff --git a/Lab4/app/src/main/java/com/example/deezersearch/viewmodel/TracksViewModel.kt b/Lab4/app/src/main/java/com/example/deezersearch/viewmodel/TracksViewModel.kt new file mode 100644 index 0000000..5c00e30 --- /dev/null +++ b/Lab4/app/src/main/java/com/example/deezersearch/viewmodel/TracksViewModel.kt @@ -0,0 +1,25 @@ +package com.example.deezersearch.viewmodel + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.example.deezersearch.model.DeezerSearchResponse +import com.example.deezersearch.network.DeezerApiInterface +import com.example.deezersearch.network.RetrofitInstance +import kotlinx.coroutines.launch + +class TracksViewModel : ViewModel() { + val data = MutableLiveData<DeezerSearchResponse>() + private val api = RetrofitInstance.getInstance().create(DeezerApiInterface::class.java) + + fun searchTracks(query: String) { + viewModelScope.launch { + try { + val response = api.searchTracks(query) + data.value = response + } catch (e: Exception) { + data.value = DeezerSearchResponse(emptyList()) + } + } + } +} diff --git a/Lab4/EXO1/app/src/main/res/drawable/ic_launcher_background.xml b/Lab4/app/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from Lab4/EXO1/app/src/main/res/drawable/ic_launcher_background.xml rename to Lab4/app/src/main/res/drawable/ic_launcher_background.xml diff --git a/Lab4/EXO1/app/src/main/res/drawable/ic_launcher_foreground.xml b/Lab4/app/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from Lab4/EXO1/app/src/main/res/drawable/ic_launcher_foreground.xml rename to Lab4/app/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/Lab4/img/track_item.png b/Lab4/app/src/main/res/drawable/placeholder_image.png similarity index 100% rename from Lab4/img/track_item.png rename to Lab4/app/src/main/res/drawable/placeholder_image.png diff --git a/Lab4/EXO1/app/src/main/res/layout/activity_main.xml b/Lab4/app/src/main/res/layout/activity_main.xml similarity index 80% rename from Lab4/EXO1/app/src/main/res/layout/activity_main.xml rename to Lab4/app/src/main/res/layout/activity_main.xml index 1d44f97..85e4068 100644 --- a/Lab4/EXO1/app/src/main/res/layout/activity_main.xml +++ b/Lab4/app/src/main/res/layout/activity_main.xml @@ -4,20 +4,18 @@ android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp" - android:gravity="center_horizontal" - android:background="#FFF5FAF8"> + android:gravity="center_horizontal"> <TextView - android:text="Lab4: request Deezer Api" + android:text="Lab 4: Deezer API Search" android:textSize="20sp" - android:textStyle="bold" android:layout_marginBottom="16dp" android:layout_width="wrap_content" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content"/> <EditText android:id="@+id/search_input" - android:hint="Enter your search" + android:hint="Enter artist name" android:layout_width="match_parent" android:layout_height="wrap_content" /> diff --git a/Lab4/app/src/main/res/layout/track_item.xml b/Lab4/app/src/main/res/layout/track_item.xml new file mode 100644 index 0000000..9b5e1b5 --- /dev/null +++ b/Lab4/app/src/main/res/layout/track_item.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_margin="8dp" + android:elevation="4dp" + android:foreground="?attr/selectableItemBackground"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:padding="8dp"> + + <ImageView + android:id="@+id/coverImageView" + android:layout_width="100dp" + android:layout_height="100dp" + android:scaleType="centerCrop" + android:contentDescription="@string/cover_image" /> + + <LinearLayout + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" + android:orientation="vertical" + android:paddingStart="8dp"> + + <TextView + android:id="@+id/albumTitleTextView" + android:textStyle="bold" + android:textSize="16sp" + android:textColor="#000000" + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> + + <TextView + android:id="@+id/songTitleTextView" + android:textSize="14sp" + android:textColor="#333333" + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> + + <TextView + android:id="@+id/artistNameTextView" + android:textSize="14sp" + android:textStyle="italic" + android:textColor="#666666" + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> + </LinearLayout> + </LinearLayout> +</androidx.cardview.widget.CardView> diff --git a/Lab4/EXO1/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/Lab4/app/src/main/res/mipmap-anydpi/ic_launcher.xml similarity index 100% rename from Lab4/EXO1/app/src/main/res/mipmap-anydpi/ic_launcher.xml rename to Lab4/app/src/main/res/mipmap-anydpi/ic_launcher.xml diff --git a/Lab4/EXO1/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/Lab4/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml similarity index 100% rename from Lab4/EXO1/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml rename to Lab4/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml diff --git a/Lab4/EXO1/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/Lab4/app/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from Lab4/EXO1/app/src/main/res/mipmap-hdpi/ic_launcher.webp rename to Lab4/app/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/Lab4/EXO1/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/Lab4/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from Lab4/EXO1/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to Lab4/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/Lab4/EXO1/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/Lab4/app/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from Lab4/EXO1/app/src/main/res/mipmap-mdpi/ic_launcher.webp rename to Lab4/app/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/Lab4/EXO1/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/Lab4/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from Lab4/EXO1/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to Lab4/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/Lab4/EXO1/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/Lab4/app/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from Lab4/EXO1/app/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to Lab4/app/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/Lab4/EXO1/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/Lab4/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from Lab4/EXO1/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to Lab4/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/Lab4/EXO1/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/Lab4/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from Lab4/EXO1/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to Lab4/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/Lab4/EXO1/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/Lab4/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from Lab4/EXO1/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to Lab4/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/Lab4/EXO1/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/Lab4/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from Lab4/EXO1/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to Lab4/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/Lab4/EXO1/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/Lab4/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from Lab4/EXO1/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to Lab4/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/Lab4/EXO1/app/src/main/res/values-night/themes.xml b/Lab4/app/src/main/res/values-night/themes.xml similarity index 100% rename from Lab4/EXO1/app/src/main/res/values-night/themes.xml rename to Lab4/app/src/main/res/values-night/themes.xml diff --git a/Lab4/EXO1/app/src/main/res/values/colors.xml b/Lab4/app/src/main/res/values/colors.xml similarity index 100% rename from Lab4/EXO1/app/src/main/res/values/colors.xml rename to Lab4/app/src/main/res/values/colors.xml diff --git a/Lab4/app/src/main/res/values/strings.xml b/Lab4/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..703ee78 --- /dev/null +++ b/Lab4/app/src/main/res/values/strings.xml @@ -0,0 +1,6 @@ +<resources> + <string name="app_name">DeezerSearch</string> + <string name="cover_image">Album cover image</string> + <string name="search">Search</string> + <string name="hint_search">Enter your search</string> +</resources> diff --git a/Lab4/EXO1/app/src/main/res/values/themes.xml b/Lab4/app/src/main/res/values/themes.xml similarity index 100% rename from Lab4/EXO1/app/src/main/res/values/themes.xml rename to Lab4/app/src/main/res/values/themes.xml diff --git a/Lab4/EXO1/app/src/main/res/xml/backup_rules.xml b/Lab4/app/src/main/res/xml/backup_rules.xml similarity index 100% rename from Lab4/EXO1/app/src/main/res/xml/backup_rules.xml rename to Lab4/app/src/main/res/xml/backup_rules.xml diff --git a/Lab4/EXO1/app/src/main/res/xml/data_extraction_rules.xml b/Lab4/app/src/main/res/xml/data_extraction_rules.xml similarity index 100% rename from Lab4/EXO1/app/src/main/res/xml/data_extraction_rules.xml rename to Lab4/app/src/main/res/xml/data_extraction_rules.xml diff --git a/Lab4/EXO1/app/src/test/java/com/example/deezersearch/ExampleUnitTest.kt b/Lab4/app/src/test/java/com/example/deezersearch/ExampleUnitTest.kt similarity index 100% rename from Lab4/EXO1/app/src/test/java/com/example/deezersearch/ExampleUnitTest.kt rename to Lab4/app/src/test/java/com/example/deezersearch/ExampleUnitTest.kt diff --git a/Lab4/EXO1/build.gradle.kts b/Lab4/build.gradle.kts similarity index 100% rename from Lab4/EXO1/build.gradle.kts rename to Lab4/build.gradle.kts diff --git a/Lab4/EXO1/gradle.properties b/Lab4/gradle.properties similarity index 100% rename from Lab4/EXO1/gradle.properties rename to Lab4/gradle.properties diff --git a/Lab4/EXO1/gradle/libs.versions.toml b/Lab4/gradle/libs.versions.toml similarity index 100% rename from Lab4/EXO1/gradle/libs.versions.toml rename to Lab4/gradle/libs.versions.toml diff --git a/Lab4/EXO1/gradle/wrapper/gradle-wrapper.jar b/Lab4/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from Lab4/EXO1/gradle/wrapper/gradle-wrapper.jar rename to Lab4/gradle/wrapper/gradle-wrapper.jar diff --git a/Lab4/EXO1/gradle/wrapper/gradle-wrapper.properties b/Lab4/gradle/wrapper/gradle-wrapper.properties similarity index 86% rename from Lab4/EXO1/gradle/wrapper/gradle-wrapper.properties rename to Lab4/gradle/wrapper/gradle-wrapper.properties index 4ea2bb4..2d07dea 100644 --- a/Lab4/EXO1/gradle/wrapper/gradle-wrapper.properties +++ b/Lab4/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -#Wed Apr 02 10:06:33 CEST 2025 +#Wed Apr 02 10:56:24 CEST 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip diff --git a/Lab4/EXO1/gradlew b/Lab4/gradlew similarity index 100% rename from Lab4/EXO1/gradlew rename to Lab4/gradlew diff --git a/Lab4/EXO1/gradlew.bat b/Lab4/gradlew.bat similarity index 100% rename from Lab4/EXO1/gradlew.bat rename to Lab4/gradlew.bat diff --git a/Lab4/img/placeholder_image.png b/Lab4/img/placeholder_image.png new file mode 100644 index 0000000000000000000000000000000000000000..cdc0de0f7d37d47a1ac4722913b5a51dee7629ec GIT binary patch literal 45887 zcmZ^~1yr3o(=dv=ySr;~hXR}8R*Jj3yBBwNZ*eJF+$rwv?(Q46fA^gC|GxL$yY91A zNQg|5naN~kGCM*^K@u5(009gP3|U$V@D&UU-0N?Gg8|jx{z!@k14H_3DK4%gEiO)` z<YaGVX=4foCKZvQ4y&OujFYRK82?!eo{WqdNE0pvPevV#^VzEjJrV3@A08Zon~8Ey z!w(~H!d8a-B}=!yiTtG(BT-RJTtv5hd4!|ZY9ISf`-|6yJdO`O=ZmopcQ7T99_%P* zC1fxsiKoPL1OG2yoe+ZNkU#xEwdjURckuKyQv3Fe_q%D$o42PsBw5{kd63*`-rGlm z#SOHlAXq$I`0S%+yG}SN#CP@UzC<6eaP|!!t4@tjL+BL@JhDDSQ(p0a3KL%WfQJ#= z9it_*CWs&T1N$=UU_W$21q;5Xfpb~-q6tJiilKv@AcgxnIn&;fD}*e;tb~)N9&^n4 zO$|S0nXSarq-C)MV>>6{rhpmd@`ee#eaH=du(a^ah?1(+l$*+k8JReTdbXtq@yUhG zlU-mJNdUxtL0`j?>)WBS$qXll_A#C*i|dgP9v~fwo%J2U1dH0hImXk`Qs@kq6d?xj zqV-}2DqtQs?~pA7dHf_}{iJ63TbiBk%Q0f5Vp@%+%sY`f#RKE*-RDf=$*(6}6Ic$( z&v=!eI9Sk)5c+VS{{+K@TcQaZm=1>0+YVrv)ltIOQqACLzT%(_!U1~T5qy7<>0)3N z)U%F{6K1nE(yI(bDDAvGWjK;Yz8X{tRtfs?;-1xg?u#UyL*JtgL7fO;g@gMxMtq7B zzGIxiPulnN&K6nAE0K*^R6jTl#n;2Wfn=1{9;mUeAxKWjA{8Q>%Q6ucsnQpLYvw3k zfOWk!`kB`t2&^0ItHx}%Nj!A$c?WXGmBKV8RP$#D_U~Z4bQwM95jQ00?E`^gSF`|# zcplCP{S8Ji==cx*K87k3GTjYrGSUR(T(NA#Kc7+B(?%pCLffgo)5fE}_X^;ukwo*r zs%d_79l|bOA|bMG%Y5NKO86;kA&o=@gC-s>3ea8yd+6!7a`3ndn#VWaAql#Dv{Uqu zIU*CJ(4lp~uv5gqk@kypVmb<b79G(kd`m}ML$GSyd2i<V7B<q%Vh2X#fO`}c@**}_ z6>rM8n`#<zopirxcGWwpw33iBMCXaO9A|TTE0sw+?kXjbdP;g*5YA;ww|Vw6H}CDY z|Bx_gqoIhl5n?UmlI9te8;L+57Z{8ik#*lnO#!=LeQWNJ`r?l!JWs)8CCNur{~$%R z)M3FAtrC(F*2qqu9?oR}f*RVW64_w<j3*?VR|+^hBJ@c|sNUt_WoWSF2Z`%vFHGhS zJF-^W&6X#Buq|I71B0zAcNQQo*vs1Xz5VmV@~7<*aqRET@`7cBpL@3J5WzdC=e8AQ zVF$X2mb#yKA$hi-Uq6$<K_`%*Pz6PNdX{URpf+Gghd&6wP=ZMfP&FW4f@}OvY{0XG zO3;n&fRPQ3+hgiLycSYXg4hn`yG8sMO$G=5lfnf+$|lN$?%juPNFgjmh7sFGHY~-E z7!Zy|&yJZ9mrTAt#Baj!HRwz{Gd^j^vk<Z+MiAf?zc@sTB|fiYI|tVwCYdjn91{A| z@d%0&GA9rxzyAos1z9WRLhN)p=|}>|zY@{;`GxI!nNe#x{lRxOHg24VB7@^}sH~V2 zBWw*WwJ@&ULm%wZKCjw1Ui6Y(q&4uWEi^%r!)=wT<wqkQ;!eowLG9~`NAY&lk1szk zkl^p36d}Um0YhYR)X8WJaI0`(a3$M%Clu|J7!j=i>wJN=sNp`Q9i$zj9j_gd9e5+y zYqr`v0L5|Ane;}X6h>OIA_I9P^*IGGtuDE1f^cbRd3q^t1yosKY52FuZw%ku%8683 z@^9q!IW&W8r0=OD6QA~u_lou^_snjnop7HxB$ABeuZ#PX>*#Ljtm#~nXOq2?dCJSn z&B{s2r_06WTgt7!J(TCF_?A8^%gc@{#8h(Y$(J_*Y};1g8&<9COTU$4&&OqojhC?e zTu@R}CRGxdI^vWh2pcFF|EW52VySMyIzN1pdct%UaT0QZeF8hjTJ~TS&-IIQi9jc2 znIMHgo`8qznd>;SfRmETnG4tYVotDnxl&@LZU$j)#~Rz(cACHFE<JX7{Md#+PB^bK z#V>QCNPezy;lRS&GR^XG!EW(lc6!EfT6!v@Sf$MQTZszpY{Sg{(ZLbR{Cc&w_`~d{ z0>fX1fre3`^T=)NXB`_3LLx!|dSx3V9j9J-K>X)`=jG?oJ3`<k;TDV=%ruM&GB;i} z_YrZG(3&-`y~pv@Tkj=aeyCe0TPO!o6J8_!Jt00JG+{){0znS@3D*MGJ;wyQo~6%N z^I)*ujxhzNrlr%`9-nwvkI~+zg-=@ezQv)%<i%fS$BWO4^TvOT?~F%|-KVefl%#Wv z&yK5SHl;skrfWnuq+2RmI}Rq=4A+m<>)3iO+;pTgsOHZ@RKQf&SqoXmy8d*nyb~fU zkEtHV%CgF`ZUkr-+cutit&X~t=2Ykw>lUq3d(Ul*>sfSdbQ(h$1`onbho7MH5YG{5 zpg^NEpr8`F6892E5fKvU$JXOzusb~s{if{VYvJGLwRLS3kg@)DRGP0mUZ5wi%6FU1 zm{T279E(CAWbU$iq|S2B0+EKy(xh`-Wvq+a+}P~r>g=A>Jl}HHtleDFs@}3`V#QIA z9+hz@2uJcx;w%{J;RAHJ9eY^2d`e3TQg2*TsJ>uZForU2jP*RTJs7{+I9osNy^_9L z-kUwPJ{i5My!YKRzZiU2J$Q&V9UU<`H|hYo-=sZ~-uO@6n@k$z!F59fLdrm{KsG?^ zLM}oJ!?7cdz?CDPAi5#vqWe$;qha9G3GUGhhWGByIXsK4i<^fuhL(l&hgKqbW7*-d zz}u5V#Uc~88J%^&jlwAd#Hqsf09E1bq^87N)F%#{Z2SzZ?9Y~CrRf=L=EldhNk;Ai zol&=O+63-A8#H<Zn~6ViKMDV&+4eR1Y~*QVJ~LFPDUF+ioES13LtmI2oNP<~whJ*> zNwCPZ;p#K|NQn81RxZoIFTbZRJ3^ASOmRnnKVC*kUT!_(IfQVy^5DM2ai)Cc*~4bT zY6G#8)StRba*LS`S5WprfmQKx;%Y)8VLItJOEY1a(FAc3Uf(pt#CFUpk2s@4$eWCo z&0Mic#?HzvNlG@E*(%3I&~s%ErM9CPu*TQ#JW@{YoA_zCQIN`BOwYKJ`!&HnX+_FE zL73@^zLe?l6PMvhfMw<^V0NW=RbHR-P18_m+n(bJza5{ML*9HM>&XGfdf{Ms=&XL3 z*?H^`Yw|dgP|$r)aHRdrvkR9GI|a8RCy%$QWvSG|?s`{0(7%lNXNr`J9m|zgjU#!d zQge;(^pS)$t}o+$njW1qLj~PSU3$~wpXvfX-P_adL?HFK?0Tx5#uptLEjQzq%NyeT z%>9u4IQ3{<<*vlqI+y)b)g-l?YKO9==FB>+)>dcv$IO8S9P6~ow>lQ*^*fo55h2x3 z)u{4~>ci@;x*mJ+^)Cf6ri3E47<R1<d>+oe4XUpFI6J9<%!*AkHbO6iw@sP0Fsmbt zzUwS28!eP(lGZWa^5Y7<IkMK%T9&qxRo87Smnci?8iz_vo^cnsbsYxPE|<5yWiNJT zsH>Y!-#vd^{Mhd)7YB+L-ATOxpF2axLMI0H24ah+ic`(155&WWQSC*Hyb5nhC#H)A z=>{X?kcn6YH~htX@*hkFh6kCGv@UXG_+2ZxS{vS6mX4jx11GZiNBO;9vmaV04}~Uq zbPe<@nvdLSJI5Q&r!K3yNUhwhtGo96%C74M_YY#(hzF}4_4quwwoWpvv#oKfC3P;F z(fxN9#;<t<?62)zHz!)&P851_CfyG=DAyP}svWy_0=9!rL~K5mW{(#<frj0^jgqx- z7s3ZZe%Dl&!)aAJC37X%lXAK9E&}eP$M7dDuRd$HRk%C2dET<`bFaToipEES{GZ<D z7t-by?__SQw(fR#p6wgETs>E3NasJcbT8T_FJ(oJ{Fkm1p03YI`V=RH72m|3>kcZ; z7Z2<WH!qO)P>{k~FsfeF!Gf^m6=ApT+`vkQ!KSvKqS+N3-;;0wj%F#8S9vu%(R8eK zU~@em4@Y{B?#`IsJG8g25l<@OV96p8K4-&zmW(4Q4>IR^YWb=bennJ6|7@*gNASoa z;dt;$evzk5rs4`N()0l_@aE%8R&2ZtGASZWHKfht<-r(0WjHV>Z~`!BPzfBAguw~_ zr~Cz+4h-_2dI&JEFiS9~|MXD+<$phrRr1f6e{;yhP%v0f4F)KA{DAnsy}`YHK>lwT z)CMN1A}%cr%2kY=Oik^aE$m&=7x@%H74QyHn$BQgIMja=xb#=5D-iqz%WoPk8uD`d z#`d->h9>q#rYs(|4u9c*33~8@ingXMhGZVLHg?YZ9zqoV^xy}T|5me7kp0ue#af6$ zLtcqY+}_EQjGN^X%O?t91Tr!*K_?S4{;z;9{}~SYPl&?8#l?Z2mDSzdoyDDl#oo!B zm5q;&kM$EfD?2+gs0XvNr=5$T2eX|s<-b7wFC2iWv$2z<gNvoT9ob*FhDP?TE<zL( ze<%8%@85NrdRYGNOm@!y*%oMntbbcr*;qcY{ts->P{F^o{7RM{rZ$=YOIr}mKywIl z@bC)$)Bpd|^1n0w*GP^3-;w{-^8X&G>TK#HZf^^k(na`x$@QOU|GV)&0|i<C?)<+n z@h_VHsRiL#7(tNre`qF*AWWd11tKGnB|z~TC<igwKVJvvFC8fT%|S`^#(tuR1`O;o zm^482n+N!rF027j|FZAmrOU~BoyjONVRS8cmYH0{F?I5H%b#iSMxVfu@UqePpWtcc zrliF%#2lr_`V1h7o2Ig2dYav})zYfoFIPJnBB@UmTIbJm%szK^bgVBg^Zd5&^t~PD zX@o|^0a%|BUS(z31;`+PhkO?!TZYpSIF;EuFe#|5g+~>B{9N~&bm|Ek7kjsPH!f)N zl6JroudP>O>D+C}hWmUHY|sqtt=hhMd8tGg8v+F4^9)+^MP@}K#v3H+T3)@6>X*-= ze&7n(Zbm+UF27wG9sko0`ZcV7yP~K2_RA&X;O3jjGLv`%6ABMS;yIY;=(-&TNy6G+ z1(UH-j7;u^E|{P9D;BmE__|1kJj%S);pm{`#I_=3Sq9>Jf@=KUz6icQ=E=2=bdNRG z)SyX{x^hNFMk(=?BB)}ku4BH{rBpbMp1UK-70&50LSaD^Q#i~QrC9*F?A~Am-_0d} z!%%IdrEnsG&tY^-4AF5%_O0jlCVKk&MQBQ(sW_p`bnj)6Dt~>ac;4fIBY!rI<HLD^ zeiFibTR|pddkM`-)JI4u5c^F2X$!r1JF`Mr?Q3vmCbP%mb{LEx$uQK9!e%JiYzK(f z<@a2!=gbv;9k=o7L{Hz8G|-qIXj5p9>oJRzB0R9jF)_`T8{XIq(tscJg;=zCPV9mt zijx;9V!*C!E`f+NbxnHE`Vqj11NeA0e_;ATM!XAymT!YA1}w>TLRcel_W_9Pj#MQ5 zH}E%R9&(X59HEH!4ev|kQY!R-x*7ItCx(a(V%X_wy(Vz=*JmE-_Vy7O&|;L}j^JMJ zTdmnj>+!P6rbP<P251^IlT%W*3zHNA7f;VM3-s%3sLeJ@VT_ZsAQ?D7Jo8z6E7aP| za4BBqmu?e@zt5R+hztfg9V_c#J!VNy+WzVCso8KHcJs5B1W>w9-}En9`_P&#@8|Kj zztMVead5Yc=Nl<O7t3eCR8OvQO#4gb=ee#U4>Jdh$p5n@w16ysSL9IC%0HP6M$;8& zaKkoOVnEtFpE_>5)!nfr)nDK7)ysO8Ow_)Q$o@qsdVJ4PWF3ahicS#h#Ya#ebp#wz z6<+kLf)FxFT7h|tA7&7;uETZFe{Wmx@n!R8ylB%2A%VkUjyr=!V)*C%Et%IxAgT4W ztrwC?ds#8gp{|QG25WWQR}f=hLGVMMZgNSYcSy&GhQ9-66~o5uPM72SFxPV@GOEHi z3R{(y8K7V|A>!72VIz%j-g3Ism7S87@yZ!09G>y1yjVDA3M9Im#`#}?Ga19}o&PLe z3C;p;?V)XRhO!VTi+kR|>{sTelrb~5LMyll-d&{bP!JQ@r!w_YGeC*4U#olmWeGN@ zi{>Y<Xaa7mip5|3lnkYsUswC5$i*E8j?KxeqVCW1T8`R^njg!p6ScrnGXCK^G^mUA zeVDUP?OK%2VWeJ40f_*p@-VgCF^)+96+uMYQAvdck96?A^umK%^F57;JVO4I_(~7( zU(hrsCxU;F1CFX!ZyTJkCh0(><op8_jHGB$UR8pR+ioS=`?5t_6a+O?6?IhxC{%^t z7J!Mb!1rPP|3LfolrP-@g4Ep|ayo}(rAgYD8#%yUibu$6oi1OI2FSn)VzD1W5Rpf# z1qo}mAa?Ip*)ImM5D)`g0@wk?5<81Q;Z-y}7*NU&0MY&k8$zbw65GZxCprF0*Hzo) zbyUXhoe>S<LeLmGC=Ai9+|7;XX-by|nT9JVilIB7UubW9=6OK|yi30qV<?_;!Br*y z61PMAGrI4kL)0OY1n~MtVXX3Bu_O5zy~7iY766nf;HjqgHh~Zj5c_@RXxthc-V!*{ zG1DHY#K#B)!w)fXI?#?o2B>~L8t--gd@u&)8U96Jy;c5R=Bgbozs9-Z7JOy$Bo93L zJB8ORgFXoA63UP4ka}ATa8*hV?YYL35m&Fn>gY_|TEw1J54mqIkPl^rXrIuO0QO`F zuam*ydX~W9YOvG2BLn3>CRT~H%ztci+V5_L-OdE0b?|ar#zhF*C+K9NoY^d-xFXBH z<kQ>q-f&qPJTx1+!_^`_Nur}bDes_kuhzpS%p>AEx1*mD6qJS$R=SZoC!IpN9YZb2 zOYy4u?P5Q|bX)W18&(#?S2%^K!JI?gDGreR;PkpJ{~EplXSHDbi*R4hQct2#&^(kC zTOiwwr%sS0dfgIfH+GMV0Hs@e*>v$*U?+Ju7Vz}rE0bmijx`UDk*_#MuE)9VuX1>@ zK4CGn>Ii_?$|3gy<|$eCYY~UzPaN@_JKj<kOc+T5wk6_zvOGxZ(?97=4v50K9nj;3 zxDed9CxP5dI=G^c0*KOXZV-mNO)bGI2^(;9)r7Yvis5=s(^+BF5>DJuSU8e!x-T+c zX}4Ew$eYj6vmIv~mu%M*999CaymOX}cdGEdsmbZ#jPe7#+zc)R^mlsq32PmWt$wX3 ziJL7lyY>BYjOlCZFdmk~uysl$mx16(WFC<wvcu>qL3uH+><ws9p5cu<{1B~jY$@W3 zMopXl*+?DveLWx~tH9&AV0;PVz7~n<qckgzyc2l|Ej26YgVG7Pz-J(3t|SE=L{hzT zx_ll~?a@7(MJYvGZ2*d+fbP(J@by#&kMU&AV7Db|_xb&wLn})C1gZRF2OD(4_cjY` zJ3lLME5Z}>pPa@DJ1>Cx6yGq|mIUN<Arp8v=TNkHB=<-F#bV#rczaZ4L#;a$!cME} zokS7e;C*?%WH*4E6B)&fN?(CH#DMh4><t`f3DuGR9HuOF^x+9jI>mx77$$a&sF(v6 zV62|6YbtSr39#poVKFxN#S)4IJTi<Lv|q{HYnv@4c(`{e8syXOj`XLePUh8$Yp;<% zFHR)sYEg<D1NK<OJd3d<8qIXLj|k7s;K{QvI(zPn>Q7hKwg@GIgC{$YE~`<uHh9#2 zPHzt$j%F&crV1w&pITc;Z6vPnBfqshFCxIv#cZ@|q2<SE7pVII4^#np&NwKT?~x-v zXu>$8_f+oJh$ZFM39+gDh`hG2OkRQ?k?MBM!l;OY=z!=p7Eo3GJJ3Fl=UPyK<RtU! ze8lXZ_M-+D0@r;ju10&Zl*Yg{Tbj7@FP{^~(FOFhn&D5yQQDhJ!R;#x?^uJzR($&| zBnTZYo_!j4xc=cV2i*L>>)2kc<{LFAXPyhJ@Ox6pcAxn<H0<;zZNG#{Eb?~*3<Y3W zw~ice`#$0SjyvgBgM`dHo(U_LuGK0}xpXnX;oNm}MlvEv?$Oab>AX3({Y1`-Jli=c zI~cCR<XeIq697jeQWr}i%+d)hRe~)GlE73<w`JiQ?d2e@A!$4~_~ls}K87LTstO&d zmb(4J*R6+@RWJ%_J$9=8Yk1jagDQ(!yT&jwxq#otrTbMJk1%!?pPJhfmb&b&w~f1u zFwi?ktp?3JZLWtJ15<XyagRmCyTbp^TZ4vtKI|X`a3c0m%KWF{l01y=LAhII#9w(e zB_Dp2^2J_Hf-0MXSxsb+&|H_B*gK9iLdbnJqmY#)F=D#TVZF5&&hBL~%VR&N8k6PA zM;=<wyJv-?;Wk3DauG(@RPIdh%c)DgJKQv4&uLE9!CQf=$*TA4F}?epcO9A%fp1;> z8aFBVb2FFMzGN5k_qRsL*>q_oPSy2fV!QSmF(UsZEF=cjn5eTx<`RuMH>UNO@Qk>w zK>K6%3<b+<d&(*X{b&SOwx3Ng1B>hNoeDsrJcoLhR*8)8d6_ghR>5hQ;4@92u&Fs( zu|Qc&M|h$;|F-Fc`o60%Nv9ZaByK~{Cn=kw!??6z(`7!S`D#v_%U$Xk+y2rEZxY(H zm?3@gWCdo-@5a@q&H`RhmM8BPj^^OkplZLY5?waa7cU-!S#BI(B&s(DT%UWhR~u9w z1m`o4on8W_s=ETdZUs>wY05J)=n^{+tqk7~v`LEpJ)y^)*dj+hLrb@;tgIC*P}K$} zdD+C+B4rZx2q&F(*B^pm@q_dk+usxN((f6%2r1FWN0VwhH!&&X=oW*-(8i9riuDbq z<&`DWckHsRSE7~DtHlzP`B}vs$?!g4KU;fiipG5Wtr&jNPc`mA-SM+}_l_gC)`P7v zE^(c@equ04$)y5cmf(g*@0dAi`#d$KOJ$JNOO7>A;Zol$ix_z|{py`Cna-|YKDgP+ znm9&OWFl_u_gwJN|Dw+{L)+=*AGq(29yV15UGb^H1v{I3BdeyPxTgubL%!8=U*TBL zID)FvdBg10Sqt0A=S<4@(+D~jGPz)v2V#}KK;S^C+6aGk2%->FkYnq!91G|!S7gaO zcgFnBu|NOG;hkj{GZ(>?xJU&xJtsheyG|nF_hcCTV^CfY#xvL+Cg3wzlh6mtLFXMG z$E@##z(J<oW?y-l1FSigU(9UO2_L%6>W#bY^y()Hk;ugfhF}41-c>i6P24`A+5RzJ z%*XmJ=7B%YOux2YAv&_+qv}sTttfoc_Wk_Xa~%lYPNIPQ_uLD8pUV>&#d<G&Y)?w| zmdTe@%xK2UZMNq|aH{j7^8Q&Ir*1nidFcgHY4m2MbOShX{5a|_jSX+yxE|og?0D6Y ziz}j49PV9eSAcaFRDGejb{5uH4IC8y)&G0bA+7IZTVl^vtZ0w?N4T)3hTDWRy01Cl z>*M;su;`z!7>Q&X$r8s0s9hacv_$L~Bfa<QQ26Q?lIxGSzp5<_?lVjiWQM{Z>?z;X z?(kh7VxiVFTMaphbn3nF(#~`ts@v!KG6(|EebfjCJpHvo2_7xZ9@g*&GaC4#|G5S5 zss3s>icS(1I<k>QfPqr^KbXK+pYxwIOum=&$v6jtH%Cj#;rsYIS$}|Sc>}PF+-yLH z%c`WkHbo~lBjYfK;6vvzycq;_ft=0`343#Q-eS(c7FygNN=!GgO8u(E{4ic^Mt;b- zhu>`(caMj@Hxrb`Ahw>96mmYF|Cucz4LRCfI7%V)&8xZCF}Xh2n)A6{z7WT_$#mRc zYu>JN=4Eu#W+hs_-A-&se=2z@wf-@+M(B1b{`7qK?JM(3HHNxS72^wrar-L<<u!Lc zYR|sIRwMm5uc;XNiz*-4wE`=Jz0T`LK-1#ZeuF}LLt)5*@8(I3|EIcp)#Sw(&pXP0 zb+@L|?Eahtwf1e6<vY=cb8K|Oe%O!C%J+><5WOwCu}^thm#kfB8pW2LoUmrHIJ=x) zvmQoNc2Ydt-k71L^Sd#(p?`{c<^=M23=;f|bgi*C^0WgyNAaR1qhb^l>EF%mk`)V} zGVcD0^yhDXMf&=oT*d&6thL2&pH>m31brf%IM++Z-mAQ>*F3X^Mv;eG(+bCh>=OJ{ zU+-zg)x3m_RhBA^ySdWI1k$W!D-9ruH{%8$E3CM4HoPMHDF(VHet3(sa8n_=dizqi zJoEG8cM|c^(cg0ub|7VP6Zw<$QV!ZQV@xMccvBOB<@xZ4%nDTL#@_rJpBu_&l#24c zU3Z;G-ND#7l(}U1f$Y57KUp3=0nI8X!2tNM_`JLicm-yw1v`&dNLP*3y*_a9OvjID z=ppynY(<^gV*<h9Fx=>w{@Y$;=H{D_`Nw>kyqxC8vr*H+chyK(aFFI6^z||p{XYl1 z15&fzAWK)xK2iPIwkSpKpmp3*?7m62_X@6rwCs4kPV5_1W=scbSI+ekEW$Qi!^m0C zCq0sD5hJYr=CIS6B9dmS4?33gbjdEy3wfMr_wo=^u1b%i3NyhQQADx!aOt#Tm-(^B z@^-ti3Q2O%)nZT5sWsvD+&@ZC*6M1$P%t?WthO(j<UWvh*$VUIN9rp><gtH>o&I!n z%M_;L4i?|xVv*cO_3hS`n$%!Z$6yh*se2z`r-$+lPoIWEM_#V}q8DhD*+%hwG;cke z#_I^~#B9Db!hPmalM$rjIY|J`3@e0|DdwkKXC~m4-ja#xPr5vJS@FIlidW1BP}+Hb z5gxq=q0K@ax;J-t3DF2D#htv8<qEZgU!Mv*FJ*;9jfFf8;$}JYkKUEWNzt;Jh=B30 z2!oY}ccO0HIarASsyUxYrp|!BW47&G%Zf?Q`7oAyKiu&ZguECCC`7Y8PE|CzT8dSM zVFnhhK4{jIuaRj)mcC<#a&9e#B`ePymr$urM0Ip!2i4y$ZdYhELc{ZsLtdF3e|dAU zHq-rL2{a=|gqt3$oMsex_FxQDY&PpJ>2Asd<n2Zqye)qGA=UFCjB9`7nm_S7v)BnK zC5?5KuwpBC<j{F{f!ui0q`&zC?qu^})Kly5s~Xkt88Pen;Dn5#P8|PUccJs9^%x_y z@C@s(n3WEg849lQ-l}LN;aFT+w$EcnqsJ5`#Q7j>5`H1b_0w&)m12QpbNuxDCvei? zmSb~w7I8$yLVC5Pkvf=g)9O!B-n`Y_Pm^q0!a|B?TQ=zh5|9NcmiT1h)!wXVMWbCF zx;1o@o!WIU+tU0{)Wr7CpeXeQnRH~UgZ(zPBjIsYhFY_w<H&ceZ{6uTo5;xHl(<H^ zQPE>-FZGMu3sAOPe@-4q@r>d?btn4|;xB3sA^cyJnV#P9&rYkTR*0Asa$8UGXKRER zVK03;1D*Q2iK4NEe2g||qE~9*MDTlKc~TPLGxWSicgfC?tL?ixNJG&sN&>boRwC!` z89_=f!T&uRy6VBfIH6|4&eU`<mTkgSBKIeN%O8vKIOX>OXm{gcH)X#~UUqZa+CqmY zB@&RE?S?SU&X8T*HAK$sy?d><2^a3F?FT4Hxu>ge^<M&>2IlcS_FZT36ZU-nQD%L+ zRkDuDLpYAaX@&*44kUB44khRJe3!2a4L<W`Jj|A~^J-zN1rAF3hOm$K&Jz&lM#DBa z?X2~ZIzd+~o+JljRv1eFeXY(`g*4IM+_sP3C7B&k8e<t@^`H3diumH0P@HZNl=(bS zO_{$odKEwWVoCc;j&CqX4+(dJzihTQ!pF6%Px1mV0>}CHWuX-!kH*D?$n(_+eA^<o zOsL?k<A*57&nLJYlXTJUva+)wz9}q6ElL-CvfZ(ziNBjwz5JmuFvJW1dR^O=me@Ey z$rAFllymLZ=|jY4I+e~G$p@&8ehU}2ivbyjgA8I(>Xbp%JD9dYjB=$yj6A5~C1<_N z62QrCU6tBEwV=TLgzF_QlmeaS88g8qsR4AC`CLLs7J86<S+4Wfz8s9Ic4$4K(E83E zWwkj6W#X`umKAgIb|3RF!T#KA9@;?Zb$T~i=tiivP`{P!U)7JR{g^uBh=YhT3*^oR zDShGC)3kw=+*8uBdN|0nR|OX4d~eXuMA7R>`}LXlS#Vp!eE0BL!2LH|JGyJJq<K^3 z%rqR^p6Dmnr8Nf8t3FI~gXs>6=e{h3c5~334XIUto0wJu6AiGuqhcl2Y=Oq(&midV z!QVQrp1(ATk8=AR;;B+DZD!C8v?ZQ+HHVDQv+y&R&jGnGyp{gBb76mx3XL<{+Nwus z-^|Flh<J4?=2x$Hqb?EQq@<5o&#vyh8r%)y9oWH$gJ}wf97o)4tbB@nxg{XLq1Z+u zs#DkFIp9+KD_A!%J2SB_$)k$FRr)Ua&#&{H9@e)R$L2XVbM4rY{6!jk_*jPY${5Kl zyR+mI=*%bW`U>)bTMVM-qC@m05|<pXrfJc~6g27cFQJAS^^F(Wxv%MbNq7Z%$&xSY zF%iluU<9YrR=Kw#(4(3vwJI(Q&4K3wYS{wr&^X)<`&hv+!KT%qYZWE~Z5ov>MsL?8 zv3=cERR1ZLFj(%0Vbc)_Aq<s}?B3uZombq|!xM<>LwWj+$M{~ykJeMzrbcFQxVi^c zDp53@wTSR9Zc<4*YQ$`=xW?iBSg`E(h7~vrPQPXr^BAm2k%|yc(B*EOEn$2)P;9C< zkcTVz@MYHG6J?!Ex@l#r4h{LM&UpLuC*tZQlbL36v+B=C)>*ct(6wtW<JDc}I<&Ui zw!v<t#uzis-iY*vNQ_%9?sGv?Hv7DLjlE?~vk=#xwcywl(|`<y`Ck;z6H8W%Xw!*l z(#nm%reJqo0}<Z0<(x~W&%RBLFt>1*>}&cB5V0;Nzcm-&gzUMM|76_H(fD+9;wO~e zt$TZ~He*dc;I!mU%7!0tXcxq3UidV-sE@e#|0tcg)f<tF6YD8W5NZlW68<wV(KhxQ zzscck$!di6IL*f6If_8ezYN-N+@D)_lf5afedeesPEp?v`|l+_X(Qq#EJ!dM#Wk4` z;VU{%afm=0PWqPKi?aQL-FV;Ho)L#$rwgaIe>&AGTmO~1c)y`|KPvNaR{ui*`NFRx zV&7cX41jpP1ed%hFDaP#B>(rMS%;4l00Nt$a+x{v-oI6^`YI>K<$V8hG7{ZPTUn0r zO3SdzoDJk=vxcu?)DN|ZwJz4qqb0{^tOxKVSmAe8-PXDmPiDt@RLG+Hwo6g_Wm9-T za!l~qXT4dSjYUuX$|edGUy>Y8j0wKls(D}&`-5F%De?}?_tJTH5+Z<{i7{9E3Ubr< z(g1)NzoxB6!6PTzJvB<0%+qEgZgdC8&8L1Or}SXp#(t@3v*+^@@Zch{97&Srl$!7~ zgVxhb@VrO`xePDq{}JVrIwD?Lx7o>wWsVXyRAFm%>_{uNxJwP)HV0gEvWLI!c2L%o zo=9k30>k4OiM^u1WpUe_w>z!FjW%DnDbG-*m?d$K_(_vuH&Z~WY6Hz*Rn?Roq4KHT zxlW-*7ira)qMh0lI6%HzR3?$N#q2Ja9hA-urL_I4A2J0o;oM}ZhSNJFX=h|6rAw;@ z2K7Borb8EpAt8R?I1g(&OFb;|s6{Fa=b&3KS|#uI6@SF~g^M9jROAPKmS^?bbpTW0 zQRwVKFb87SpE$mNkqI!P<Ma~{o>$i7A04o1l}x2dKo)I#YC77qdG?oTbTU^@=GPie zGHq&eLLsi35tss}8M|zcq+F;pCZ^xE<IVO*=A}+-OkxCL<ns?lv{`JYstWltIP}su z>}8{pmcRo;Rsd<!mpo5DAPPv;OeE3wouz|vyv%|;44-M~GzlYC;x(eW%-L9)yM)!7 z(ZyucO5544wceH$2irrgWU(1Mp0xY3DjQULpA{;kCUBOrC@=6Sv7H_u0`_*~>hyb= zirv)gC@Z2Kv1u`kLF;a#{S{m=LPqlJYVFd|aahZv0ly^TNBW9!$dPH~vSeTRhdt(M z?bx1z{U+#D<Dj7oTn5NaHyHLOx4-Eg*cj-w%31fyhu8VB7wvg|$&6yB4QHO>8)ezT zr4zvLwj!23?y+|+JN4(g`8FqMvMOM6Rc-Co6CT~S*aGM#j4^G2l8+Jr#p?h|)1mo< z$7ZSs;FA(iN*ezXlWXF6I~B(^jA=CW8(0?^#CfjX1eSE6C)!Khv0C?6jw4{s9C7r= z31>0hN8hYmsmkJLJvoHC=9LKpL2ep?s!SsZg;8euFHet-4$r)m!f!|`EcUF|Idu*m zXlW?V7-9P`TUZ=?$e}EK<8=~7c;}Ch*<P0)R|jGGw+pjP7$Ds3F!OA11Ruf1l6D01 z8Dy`#-P+*oBJb>a;R@S1Q4XnZ0DT2_Do-wAqbO)g(8OsJcL)_)CC|<-NW3@fqe72e zPx_Xr^>>ojRy4w)teYZhCJ|RJM8qbVDX$h=K6;?lU)3JSWPdkd6u4nc6G~BiI2)h~ zRo3ea2=G<m4UIVUkf7|Ynr+RuLO>M+fJ@(JZjbouWaA5Z%y>LTMlOxabZ5&S{QfMQ z)+4_Z=u_cnpw)wstx|)cHxSrl75OYU^t_$ofQ?dsPTF%aKF;g=+~9F4&XQ3YzEM7( zTIWO!03KIO&*lzREu)|1C@K;PBdx?Ubuee<+l_5n3}*f)eQ-){2h(27l=X{>u)?vO zuGyv|;LCQZZr?|PckGhmh)eD?#_W&ZVt;iyB8Z;M51u@r5S^;W@AsW-f8eX(LAah& z<|E<@8~^c|TF{{SM2it&@XY0WHKcMo;}l~IE@27muqP180Wqk->yZ%EFLBEnwHe2i z2|RMKBg1!N+G8F^IXlPh5O*E{bSGYzn$@4kPZHEaglt&viHRU)oS6<&I<grs<dby} zHKb(rvt%wiex+=0bYUm2hJE)fNjQ24>`fbYW86=0I;MVcJGP1z*gLB~PX|d9wUpvl zN<iL|A8=*J7>=6i7PI1vO+wHAGt##vVRo0=7s*OY!mJLsAqXmTmTx`atijZ3LbSyu zUKpdQ{@bF<L+EsP;-`Arov|M9+wo^##of!mHzv4u9h;0$%%@{_EMk*lnOCSd$d_Z~ z={%uLI&ZkC_gJVVHSNMtmf`ur#-Q};TYZ0r*L9!}`-5?F&MGAsm|JqgE1~<|WGWqI z!@x{i$Hid6P8As0RMluaD3-obRUdD1O4Kwj$GD2ZYCTQ?>NN`m-NC5aU|^JLXEh!p zqqZheJz>|4(=w)xFjAS<zL!CtvMv86Xgh$&wxW5<rI+UaO70<W?S@1Ee)b7_<Hk{^ zVuK|iqqW0~3ge5e3R(~?38W*DQQXvdt=g+7=)I;P5pBAp;tQ*6_42Wp=Qf!qZ=1go zl$r8{tBALjvY?BtHP$JGf=@GB<oDk38gOo5z^f=>X%ZSlEv%k%SE}>O>2_p^rF6Qn zz5;i|M%>y6!d`L;hYeIh<da2Y2xIe!JIjY1>8?kWWri{TdTdhAeL-ELf%ywUwla1g zkCZ*JCCXQW7F&{P{Fj-DC7eRzv(ocH6f6HAZTDJRNB@e=xIm$}P-cI;Y-#~Cb4#6p zF?GJ?7b^9&^C{=6yBXDWQj=-@WRMrP{~uGXq=K{~NO9w0?tu1%!skiB=4*sQ>r|KE zSPVJrMj5h^GNbPVB?WLam@xvL<?@!jesmm(=b1RVn&M|b-Dnh>$sZ5jx)fk|A8&aA zq3G0*^84^up}S=zl@qH|KA|HzE_=oaCUM>a6Y>|23_N(IFAq)F@Rn2r!u)1VHo-BB za-LHiqu@iCE(k>RYrQs7Gx>X0eP6NseYb71Id*xx29uVC>4mgf)H7kb(0m78rlXi$ z#ORf%$PY31NIj?ah{)M$C;q%n_UFheu&OOI7^oT})*(7=O*(aNWBjqNV2WU{aDLgk z+3!tJi7p*wZMnu1UKfj8;a2?A*p$oECH>`wet3v8_swW_I;pgZBueBdSnv;flB1Rw z`_@=&EE936leC(c3|qzTbAlD<wl~Qkxy90uQ4eAG@rfnApf5<fZ*6E8<KM;VxT|_} z>Q7y=vX(`L<RRLSYkQ@SV;Xsga%~=+5b+PgAjfrN)$*7YQLG_P?4kzT$d*T<wV1El zfEPro*AmvX?$Ti19y}BRE2VD?ki`mmny<j3Hw#EI_MntSOE;6=u3Pe}6xG{`DF42g z!H{!dJ4d&$b^@wQxW@{6-|wXQE|lE!r>0VzQQwF``mf+#m?|n*el>9E*cLNTGRXl0 zRt3js;a5XxRGcxIz_%y1_H3vNIBV9qrxv@%H-+YqqkYYTUYwL>`nq$|*V|uABP37Z z&2^lKwhZ`Tb&jx8><8Kb0|d{ImAc}1pB3i5=C2NDqBFf&kzZu{p+AM0{<QZ{A&YF4 zLezS?M>qV`gbd93F!N>9qL+lXlrZg9J%zrj>qD5TK&9_k;JZ;-<7}9FR|5(;zF9lu zOdAflFUPuf>Fnj)Iw_yk)+QNy@<J|UWy$BW(j4+D9RhosW>MpH1w$Ktx$2JTv`UuU zYM`&Cbqw0-4$Mr<#hOBa9GiyTHM3c=C)z=LsSWs~$jqYIp2PBw4~+I12_2T64Ea3B zT1XWN-;ZWh3-XeQ`}91iI1@_+y(4JIFT~6li;0DyS~w3)MHy~FzYP9?hB>x)I?+PK zFPcs11B*U>2G3|@$rXGZ74m}7p)N?rzw>{mHJx)#U29$8zL~FLf_0U-SwQc(ne6K8 zz}5e=x#xkCE**(BGa_-CRG!p~#@!vXcuJu$ZD7s|$I8mwDt@E#GBfZyCmADrpbvQc z<cD-XxVZ41^itn5p;3))BD5sc*B}wZwim{MexF<`Za*KNbQ^OsQc_rDWqSI)6gM+t zViQzJ?H1}I!|pWQMg5`QQU`gccTf0w*TR#S*Ac<T5VIlZ@Q)2M%R(X~JubhqF2Wkk zwrn(f!^V-@WcMj1azP=F|7Z9J0xE+u(UQ3hcwM$&ZJ2Z0aNXcKbFyF^Epf0#51t21 z9Q8+(tNaRXL<w#m+Ww7`tjHU}gU;(HNwqBznMqSKOXQ`NuEy-20CRfCB(sdHarrOg za?h`OYee5_-gl)bs^<>(3M{&2w}$A$IJy$O`(}8`Zg%Ov1r847vokK*_B97hd?D*b ziLxE8AILITZgg+HX<a7a_kEEM7j}L-lJ<Dg(by}j`?O~A3nkT^r#ZxOU+tic&C!J0 zjc7vswQ?}y;Rhj~<fD~6VJD_w8xgqTu>wI$xN5pZ<P3xUv!)S%6+p8dd9);Zl;2d> zA0xrcGJeA~l4im8%gIL!FxkWddF|lH_Ge$<r^6<xb6!}E-ZL4wm;dzyY>?`3rhJ?e z$c=XyF>I4hYZr9J%$tzfVlgj7jV^?;S_y_3`c&5S;8O3|CAqFJcZmGu>H2rsJzS5& z3=S;HuDr6<g{;U6KY0}B354CHnft8A`BW@Cw1Y?=jaWZTjGxr{?lJ=Hjr&1t2i4Sb zd+iqMQSw~!xp2H%b7+;wvXYq7#?F5)FWvRlSEy@1t8fqGAgKrs4i{eM^b#=tO~Sz& zD5@aCri<30QJYx;X}er*M2oW80k-dXjahCvPXU7m4-?{9qnI6fmhhtdjk{gYtJBK9 zFssUGUPr=ndC~gpkvqLV!uUGvXT|H+hH6#->(^L~8^eV#^BKQz6alRFKRsowDZy2Q zJI#s{D6md88Fw_sVmOL_!yy8L|N87_C*pEb&w)KI+Ozc+v1ABo0|Q?iK__e}L61|@ zF0lgd9mjJvrIVgY>n&X<q3bdu`CRDhNi5Gyf76B(kFH5U51GS|O~5|0+t?<>`?`Ys z#PNwo#l<P&w0mcXk{yYlclP&R$|^=*W67xe)nqx1@r=7%{;-wWALyX65i#Zdb>3rB z0rG17fFV8n*=jlBz&<y7*%fYA8<|I5!#tle-r)E1b5sj~IS6f^&re+iR&au_IskR~ z0gVfCYVp?N6O5gxk3BEc6E1Z*F*DzbDLcvx04x5NvePF&2LhY<uo)43pS{Wz4~pi? z%a4BQu2y*&W{D=3zxLss3FkDa+RgwSOd&@89L-aoL;Y;)^;15tQ<_dRerjdQg66#@ zHam5Jj0H4dfs7aGE3}Tp{F-I+MZaD7x@27;A*Jk3IL|n^#5t`%miDj4y(9732XI9a zGThUM<|CDD#YBjUN4;B4!|@$=UPAa9c}-iy*$&$_jsB<Vsi3D>k`fR%<Zyb`)+sPF z6wF~yuQBY4CKs~=tEOA`ZtvbI3DL<C>TsZL>>Uyr{a~E*GpDpZ%3aq=98R=rW$1{u z;tVGCC=iaM9{0;<=xtn3kfwcJI+wBWm<%4iI`d*byC7<$u2gSC!ei%n*;n8EQ=g|B zm0B}zE!|(h^LzVWRU(E|Xth3Wa!oqgK52LUpusBchhV6mpNL_#SaO=@cB9|wX5)qC zfrB2)E37`0IvcH)<By-eT?|rPC_~VZD1F-C63-6jn``q`H@F*_i&O5?C4e)%5;_VV zwDKX&uW^<lqf?ct1lWi7PSI8>@*EQxo{R@w_f;w7g`;(J)mbct(jyAw&tta*C82_u zjMBvMq}xc6LJ`32d^-P6`<c=Oc;?*WNxxeOHiFE0Siol*J|o%kB-<PpGatrk6Y>o_ z+?c^~f1!#N8{GT_9OumEu}d^0@d?v|TZ~_C9<*>Ah%0+b#*@d@;e(Bv^v%6N-ZW>{ zQ3M@EYsL&|V6-7SJ#Da1-Q6&&k@2!E3K2gWY#ZumU{YZoOya(qweE;LVH=`Tu?|cY zPUDYrcy5(eOMN={ytZHPj}JJcLe5_IFjoF{{&rakz;^uF{T!9aLY|3$)ZLl9@mAzG z;aiGT!5E0jN+9j?wLZw7@v1@XWg-U1V<G4WLI-=um*}$Yw9}2K5;RTokt5j-k`z-k z6U*1bFw+RV8hT6c--13Hl4@X^@0L3*7IInHhdbmCm4B3s!JS4kW!Fp`HYyVd*R$h0 zD~Y<8%j@OxSX*eVfxvor^<=4P-xr1o!qDpVx-&K?d<6v~B!1BUW0|w~0ZFu&Rh)bA zQke}cS_sf^J%oKfFtGOOehv<OdQ!UgkJU<+>q^5wF%7DNuRptE4|lm0GG1TH`ur=a zGg){i+^B~iwiCsR3Etixy~E%r^Aq%j(4?WR#y;|3D2-e9yf<-FYpWSXhbt)<$Y-5a z;_z~a0CF#o`hw%y@iwjn*dQRVJPVSxNTLj=)=N|_3sW86RUie2R=5K;L^<$a)M>ss z!V0tkjMsq&RYk_=xU%>kOGI_MMFgnau*Mzo_UxR;+3!?dw$~~2C6sAD;|h`y@48)R z)-|%1Wj=L@wh>3Iz?|6N{B=rKWJgmyW0*tHrtv?;ODLz44nV`AhKi?#V^|Ng!pL7* zW!Ny*PP`4uN!A;&Hn;4gpxNsiuTy<ZN82PLGD&){qIfLrR}9}5snDqZ?2pm0g|iLj zxv}i-kgAQ+wm#?X!)~U+_HHr9sqO9PEdh)Wbd4a+0+}08U-S>)ry3G-$*?NTiPYh{ zf_@te3v@(3XW`}3^J@K)(qt&uqJ2m*u$)(+y;MB@5(iDmcn%R)Jt^T_7?9f8_tEs_ zL@__Di6|p`k>7+9Aue4$O%|RkVTFqPv!BCjh{xgRrR7;+=k75Ia?!MVnB3+A;@^j! zk|@$Qlw2C3uV=l@KZS{!%tbeqWrB$IB>Gzxx3A>Wi-ktt$k$y$B?J|5xFxSnQi<FI z7x00niupXB;P>|(&rD$IWI_qszTVSwNb7xEX%l&!uzpnw^<eqcZnq;^<_`L?5{Q;> zJ<x8^qmf(D;*rYex9!Kog2%3E&A*7ABz54cQWmRcVgeH7a1!a_;;OgnLX=sOEWnq= zMp6;-(`pe1_ly&Mk4`7g9AU-F`0L4d#*ouSx(R9!cCnp|TIKzvS^|h_9E?Is_Q655 z`z>@l!{$Gz66|%7@HHJ@(cc)>@g5`T3<~6~T*+W>c}Dd#N2u=Tu>q{@8+)T-J#m+T zgY-kZngV4OQS5p~;@?#hL=Mp0_{*x}E@Xa$cM6z1cZ!hbE8@oZ@%M(1)<=<g$4P(S z*F=1)wYZCA!;I(JH`jRHZ*r;5P8d4&6;`v58?y234#nkeX(6d(l1xW%I`v>IBl9YN z>P#~4P0=5(W)I@SW~#vK@YvXk%^cyW!m27Y{ysBa0*cH4r-5(#SD)*T^SifzRS@`r z7NYswS|Z&|Z(9d9yW8u1lB02Z{?KebP(=STm8|;t1cw%fXQp}s0<-k1G*G_3h)&oL z#WHt0T4nCok|mE5;zsfVta8PQeZgkpZ}_4Ydj2G@$a9u^<Mvw6=(za!4&O_OZmem= zls#r~V+dtrlU4p>p#+UmQRi=Y>gh14%O{byf_o#%QM7yi#Ge{0dg8dFY_QppMHM`E z{^&dH`4rE*0Vn;28R9@6u9STU-EA_G+{_s90bHw#l#Xtyb4B<Rb;HrCS<7if#Rv&j zuqwEfYtk=GNWm)P>Mp<je8cF_n4O?3=~d@a&RU$VHF<lGZ%ya$^W?~Ve}HK9ztKLa zFwM$R2XrA*Nv|fLO>65Gqz%(QRmMDC)u9h9z;u5#6s4}T^GZoTL&Oaf8{Zps+>Dm} zdM_A;53yBk{Z<-NxDh9q0$`0MAnByMLG7T}pN1uQA3S}0!sgLP+$*XDJ(H`)`RLG6 z7fx%h#O2~d2C<e2@CJEUK0A1{YS41C0A}9FAbLL3FNGjc$I~+s+Y&BR3j+t$mX+-> zc}C}olQD#P!jY-~7pV4fPdeM4mwpku6WP+>!<if=f1SCL5g_CCaaxwF?9GYrdXBFw zuh2*@<u3Vmdy-^rs}TiB>uyUf3ir9YvW=c$_p?NR;A|DT{XiMjGu&p4jcL)4(9U8_ zOAEIn!fbn!a8IqdQ!cc5q&6EpD7H_HJ^CnM)ZKN5{YyDfO~ho)qYSH^<5t9>S}|HE z-GW56hn4P$IC)|6(UX_y=v}Y-6;iY8m!cZs?`a#4cp`%CIGc~ZIILTQ$o>t+Jr54w zxFHZCyh<|vX87?Zpk&<M7N=HQznwa|Yh1s})&0Znh<rTr`1jkERYYmVO0rCT8V_Ms zFZhF>d3RfHK(c+Xi3;Y`c@d8=#k9VyCg`27!*fzvjG&|8?a1_<^y=)`bg6BrHA!r& zLWa^jzx(MymIwBFP@UT<9j^<xSuzI=8zOD>P&s_jHR|SE1mX`Y=|5u4#o2HlO9hWH zw`nSzLU%=r(!fLgUiL!2?>Y|0*`P-Sb3o#QZn&`V>k)PC5TbdSvHL(PeltkX!3ISN z0K0ZLnAi0gFw9MyimJUA4hna6h^sQJ@)ymRE_smOb7H3g#T;@{lc^+t^a1M_xZ`yB zX^*$JEO^22I*e}JG%)}hjoLEkxQ<q7#EdKkCMv+?<sw}^Zod1aKgF7HY(5XhrrTEu zAWoWHvV{FcQYMH`^$KXGKOSBY&a%Di*s2G1hBIcmM`G%aaBbx9r^A|YzQ;r<Z}N0= zd3ChXt)F=dw(rK0(XjL85LDw<XoDhk;tsbj*4aQI$f@@Qhi_3Xw>K?8pIGd{w1G1y zU*&*CHKEc#w^+bNo7?x7X<6S-E%!n=xjFtr+#~V**~amag`Vr#gFPBiR=~dpUyU4) zhwcXyJ68xjdU<#XVhcbFLOlZH>x)Lc*J5b_1H0rJK6(kN#wMPSx3M&9zs7#E27ZMZ z>_j5%xK$=%OR)RIWh|xk(5ehzW$w>TW&<c{{cOM*=q*v(E)5`@l(VPCA@`ymBUKle zvUr$5r{hxlmE3~>xLkg~(*h3Gat4Z9wg36W0tx_6Td-1)2|uc=nqHL#mYk~xZpzDb zTsHE}W1CmuP&}J2O4cwWR(NjpX+9T{n!)F9zBn|yCzz6i9I0SV-xl$R{3Lx-t&eyd zuoiVyu>?xnKWlSf<xj?Y0Bu^71wzktVjfWJ&9rg!FTgXI0Kh!%wrexy#V3L-oQ_H_ zs8?8Blr|1mV;t7bC;C{v2N_{pL;25jE3-fUMvtJAKO<ci&{jIrn2GKy`M4M%)=^}q zvn%}{roJkwj;@K41QG}k++8lgAwY0<hv4q+?(XjH4#C~s9ddDZxwyN{&G*l&H81_p zFWr4kovK|`dsnAr3+0$s;}(oo!Mb0@M3n*yqZn0t^KBeC<m{i%Y+b{}8cNe@eqB^f z+pV?2oBzP*{F3mG1WpzZnoVSvIes)fsBxH*JGMN~t9IjC?>GhiQ07ll${QnhNtUG% zZU$fS50Aqs*bER(H&AehN{Lr^c^)w6I!@KGC+iGvl)!07Be)l=ya+0K5)r3J$^IRd zCYT;aLeFwzPQ8&y3s|2EW(%_lK*jx86PC?X6zjCZ9C~m8l@isd13NSA?Sx6-b?v5p zYj1a!gO-^8B1sk1<ze~!9D(GuhSNF!1{MJzJOTY&EkPt~cNkWu1Z+7NB<^aydy^c{ zJT_wUJ4*|fZE-`3saYZMv*&?LKV-TaMb@*JCa`YX@$C^XXf;-CRAg=i#!i074eao0 zhw_lVf>t-L_jVD6CIh+#uww2ilJEC_S*;2P(LX%O;a_?eq>MF~-o5FNE5}*`;6EEo z5<k51+ER>)0-jN!asA^U#)j~Nest-nG5_;(#*FbG7oKNPw$4k^Or<%2P4}CgdQ0#! zx=-l|Lau+y(bIeuaTh2eQ40bE9pMh22Gl|NNXWWl$DZZzA5#$e+x`mdkQ22Xs$;%$ zGs6TU2M-P~ExO#|_N$ZuB0CB+TJ`Wg8Fkz|?{vJKnT2OOsB*`N)Hl@s{<RHB+4ubx zz==_<lYkBe(Muxb8_Meb6$RBH>w~QXZ(jnDxN{&sLi<%i=Ny}^6kBFMyZ=K!V34K3 zN#KPGAxM56wRWw)#<?dLiSZPSsA>sSc9tu(QHKSDn`^Y)rY~og3snMcPW@IUcJC!V zcIfx&X}wgsSoRT;P5YC?;Cwyw$``J?T=>sMasIPW8%WBWu3PkWnE|@EYTH8)t!M6v zH!hL}z@2)a%`C<#k$>vI>T;)DIXxM2E}!+%R+<YUTl}zZBPL;_OS=uDoxr}hh!))F z5`hzcHxWVcQubyjD>;?*N8Cm1-xx-a@iJ@Q>o)=7(Td&r&lTr>pSE-+p~!P5&CH^- zQGbiAFa(aT8o@PI_@i3;cDho$bo@+mzp?%6b<odtM6R-{1IKd;-QeN#4J_ywt}0<d zC3$uPg6ivT<h-{0I$WTGIh1$a^{9Jl)VcNI*t<0nL6Dw}?iTfsI*mU8pV#SLsMW$j zZnKQWdW1YU%ORTla2lo?T=|PSIr)Fq?rbeB<4t<ns+<2cV8i|+kjrB7K3AM-!e`h+ zl#Ft0ZEejy1?A|fYx8AOO0wP-D%A^zX`kCD3`F}_Ip(wP`MU1iiq_!($GI&WIrpIq zW4KptRg;OELVDW?16G2Iy;CMpN_F;~5@6KB@TrAz?7VO3sxg(?&%WEp<pqlb8K7EM zYKBs!{Ook1O&=(;<`li@ZHix%eu*EGceklP+)B_Tu6%xX8?Pe)T9hgA(|L-1z{==| zdxXY!ts{l%FKP1%cnJoOJQo&Z5MUbvfa8ugbqu?5zw`sO;r8xJpQvq_*J+)4iTX!3 z`h@6t*85m)SXXOW23P6VtI)%=ag0MPFYvlhJ)t$BQd%_90oxN<4?q58&FbnJ`*q3E zW8hO`j`H8C@B2}%>ye|y5TFW1-yl&&670W0q^K}Xi527CV<cM_3JBGf?t13AF%wiE zvSDkjXpV1`3DK(t;yb&RWWsMoD?HVi$z(nsEv`j}WPAHLU||IdJOSZOA?d)F37kfB z!doXP$M6A{>;O*d!71}4Yqwo#+OOZDCyKQ<WuI*&)Dw%sw3|VL8SgK_NZOUtA_=2Z zjY(nJ+Gdt0m#4QD+aqN%?heS)#c)*}-+i)QK69dA(i>Zstfb)n)@JqMxB0($VP^}o zYyB%$-SoSyvEAg1bLqsa?{WZ!zKMxB2}~1pxLZc@kLT#-HzTi5{^_+u28!KOLo4-k z(6^8lK9M@FOF|C(srW4Y^JK3CO!f~|55Ye+);(@aHvJAan|lWQ@y#_s1)*KL^>Gt6 z*b=wD7R7N25V)}De6%OR8Khh}B|M{AN{=lf!y5pok|%pfEJCszB!pg@ScBt@1W>09 zY|_8aDrIhGY)JrHV$Lkr(OoFf9b<((Nc-UyHlCNn#afRRmSzp!8Y*B?Xb{++9~A&k ze500ZbX*;vf%2z#d{q9H9!%DF&-g<Od&ycmL$JGs5+p#4`IBPm(Eigz%vs{SGj(z! zJo+dZwc{yJYC8vMt=AFX?F#-?a)u>BVzwJDiDuYX>Es)T7D29yjQwh+{9@}7t}3rK z0n50QP5qyKrVR{7pMbcw`$>wrmm4p!1Hvhmn=?k7;V3TLGNVs8!x;9?`Cu+ZllRA* zSe5|=T!!B?_LQq&5ApcN585I`;EC0*W2gRyfSWCx4&1w!4TQfdOMU&RH=vtTr*ZCq zndjih>o#%qgv}qM#Ltm81+3>YQ`qbUG3?1`^oW0(gy@w!G8W#u-h)z=fDj=x6xl-l z3}e8H95d4O2I77aCgEB#Q<GD7@-8cVVIlEHf!}B4RcDDU%`?H^m=c%c&{{r3`r(_y z)W)#LYg|F}*J3EShb{Q`%ZQiEz_GLwNA%fE^H$S;@wXssLxg1WsHOm-xjG}5&Jbl! z00}wLo^_{erkY_6JtAUO)SjVwY-fahvJiJSn&cJ+dC7|A!y+U9v5Z*~mHrtAm3%!^ zdq^@0b3#{}1y-gb49A<tvI+@rhXmWi{M&MD_bfluFK(QAa3VzAgc<U$&s+?Yytz+N z(i<t{ZmWeIJTUVp)7*A{EwsnJcU;ViuQx@l&35<ebSo*$6Q<V<RiX!gSENI=vbpuL zJ4&wt-W3^1QaQpXhs~@A7wBS*^~ncA)8IjLYDrM{2IHs`!fpl=8<VSTXfLkhVB2JI zt#`BXM1J{QJ4s}dAZpM0|7G`HxI)g4uio$_57HgVc~Ly;N$`QrrswXNigPfSUYS7# zhJ8vag}=z2tuDzfCnKZkOPRx6PViL;cTVLHltr+f<jWJSWI*nsZK$2V>r?doP=u_& zids>|Xax+7vW`zq($|dV45qJnOEdbJR-VpLap?C{U>==0e<;rlxRBIA(IV-Z5gzu^ zqoZzoy8ccc(;Q@`Brj4kd$H}`_i$B^@7wg(bunh{zFu;)8u080W{Dz@ez#c=Ok@%< z>RS!Zg{z)h0``RQ?w}ITI~8#PEgnN(`xpQWs_IWFm;E<e6gg7m*=LOr!Pt9`ibsJ3 zf7kkIptW8%@DEDY{<X<&nKD2IElJV(Y=H~~Pts6+La4iOfw;C(PwJ61^ZG6AU*^4` z*YwmCt|8RyAXo)MyBws2pPY@zH!@n)=gBqHfml~SLGp>m^PSKUzcH)=VNmumj}a8G zxtrK}9L~6WHK-!%fxp2O{*=AQHU*(XV)wxCQhB27o^I`Kz~_(i;3~dz8y{>JxIKk< z`@fn#WYgLVtm0`G?kR%X9qawjODQi!y8Xl?i3()!W5zbzoWoYrr<cQD1uMf>+6U#W zrm!!=1axYobFrS!4jKdJ=o#u)OXaw33G!dxv{%ukPYT;sa$u;m_$i;;_*?LAcD%nM zE{}gU3j#LnRH3wfPvfTc@o%Kjt*d1hd(&>dUStui4fm10B~1AyCXXUcn3ECEyS$2^ z?_7~kIbWP*aOczDF>5V5%(*rF1BfW_^OPS_{NsAKYoL4Map|}jnCA)BVnT?@cmJ<0 zEXnn3g+w9<ziC6&0S}j<2z|B`ga=f%Y8gKt38I}Fu?So${i&M5U&BS$v>d0~zP#D> zibIG)-u#lc`UY^r9;?`_!=c`MtHbwbEZG`pA``9bkM(I}|K^#ISJ0kSRmyJ;V#$Gf zPgXx2V9grSqz_c!HWd!FAIGQf^tJsN7`&qH`S674dK|}_Z+C~Yw}h`*lfJ*jrkBb; zNdmCo;2o5HKFbBwP(p$-4Z>q{dl)5X?p>U-$6WRFTuCZNV&)7q!%&A+e(4#u$esM` zgPNW4+o%!T*l?}Zy3@t4(m$iWpsO5q`&fy*)2rG`5)pS>PgPM9xWzsZ-TbP7rnE~= z;sW{|Z&R0}KPnp<i_Az#xO7xy7PvEy-LGr5%SNe0vMS={RF_nLhv?YV1p$Fx_iq-! ziBqSJro=vmM$??$QN{&GbU0ks5#bulS;#+cx+7iD5!~D*X2P`JB3)e%mzRZezHApe z)?;&(LmqOZR;Ra!jl;f3<(1_G*6`isk96x*JbANgdp%=AnV;0?E!$V<w6;y-mAgrp zVG^%feCn`tby&-T;dtvP?y$fj+XA2GX6Tbzl?`{Pt3{&4dH*X<&hcpc0(7p)_qgW7 zZXbo1qv^$KI(Jf~;`3m1aL{;zAa<XrS&d)_`K#fFk;8R4DjQ!SLozze8HcyOjZo0q zM6lWYw6K7>-xS4DRburWpMXBO)>#yQh@Fu78zf}cfJ~+hZEs3EE<_;CF*u%#XQhiP z9H{(qM&G?uE4a-d(BvLMq!BL)Ro?YNK;5n3pOoVr{czA(xGxRazKCCs)ODUjICuiq zpK6jKUg(S&zly5~PsPce(P4Y$ed08>>D7(?tf>kNtq6r58TMwemh95t%DQ||ay3A& zWp=lVNLi%F21m89Js&XP@2CtI(MZcP%qhi=HTB9B<r<Gzq+|~u1;$(DC3WmYfmMUj zN0yAzsn^4S6|_s-)1$<{-S5nVuyckb2l(@IK5|;<X)#Pgs}k~t+}F5I%qyODEZCOR zuy*n6Oy-Vy7KaF@WXK~17Q0A~9b@m6+6a$4HPdOF3^$q|)sDXQVf(3sYF{9>aR5<X zz-+d(J#DWSj*Tya<-bV5!sm>|$p1CorenIkvvFAVWGMu0zg$dbnHgp`t_!Sb=ufi9 zwVBxfhdt_uNIgLYr|-S+uT3^-&}w>gCzFH&A{d((z0+7eARe9m{KcY-^B9X4;gooQ z0NkDXx%FBHcFcw&=>m;<Wb)8~_TtJ3;MrDFh~5a<hN^2k&<xM^w1>dFr%14CSQQg` zlYNH{wXI_8@fLPyf4X{TR|j}9vb>7L?$2)?52nE)x`5j<cLf)L83E&s-<J&tA7Sqr z4LRR3iFL$98bBV>w}2;D6SyB3OYEF%LRlGb6~lmZp-<tqV4|;1bPkB~kpA8&xADtn z#|IC=NB1hSmHB}or54?>=jnaduno{939h}#l&LJUk*(d59bqq@nNe^tyfn@Lq2Qom z2f}d&OKscxAH@+4G92_}Xhx1R-*7@zy=1{t^+kLB*9l6j^#BjLgI0xV26yD>7r97> z8TaVQ3G{s)jn7v~D=EBkN5yZgLro)y@<VOU>K$(bOsO9OsOdH>1qyeg3@db9(Wa}O z+_4_<4Z3T3Fctx|*V3Eh8mqEHUmhv#uKP9fA}??_MKJZIMriA3>|WKZJ_OoGvFJ%{ z<mLCOHj>*`yO}L;u9yxgdr%|J21GYPRv1z6;GZPNhv%B;7uVIxqH+DzQp9=rk-bv3 z07fR@woez17p}6JoA94C16j6C$Lf*4iGLhP3zMWJ-SlPPh7ROXN(QM|^qQxQG+P)D z+fskz18wLv42YhVp$YmpWv7Z7NG#wTrR25q;IoeRS)UdToC@6b9NWsL3Rgt_%*Zty z(!5DiN}=GVG{Q1L(+>ZhEElbseJIo#Z~4?uB%Awrp*h%YqaOF_oN6Jb>0MxReC`mh z?XwGK8da1x=hp2N`9BfobHiPM4RpL|h2X;)u9{K6%GqS0bXIH={W?~pfI$*uRe)CI z(j=i!l8UXEua>)SW%Z2o;VCl;Ice8>_2K2pt`Gm)(4?XMIu4q|Ld8eNXKUcRl63&S za_ojcj<RgN2U-7nFop2di}JH|063q`8t0=y-eNW+Qr|E?WyDRf&UX%p*fgUQWg8i_ zh`zV(i)$_a87f&c!r=ECO2(Tbb4E_Yb)DjKW+QHF+U&&a*^D4OXKG2pxsZC-TJ$9s zr9z@n60clwA^eIhYyFHnZl#1P0<V#m8oNpr*(zf-KS$0(3iI~Vhh6edK|;&PnC>u> z#64=4;_YD{`<ojwQse9ip$f=P+8G<F9pAp2R9d_89}PYp+S|oyY@j_U{oKn!QrYSA z(sN#OS+^&Jy|$Or+4N<1u$DF6{_3gSUj`jW=%v9u&a`X$Qrn*wVlRo){_8_Z;`+Dn z-?d%c3L-txB+kHq2!WCO6p=awMsQPq3;?*A#LU?~%J7azcfxHDB$?wr?K>9~B@){t z61Ue>us|A*2qqTFkA{6}YKngp*u!uAuu6#S6v+iR5j!tCdtfQ|9Qg~1g&hV3O*|fM z1=etTjWevxMkYg4kA3=$c!>3=sYw~JiJLB9`eQjntU-;yopv;k=HQU{sC|i;ZOJdt ze<ETy@Cn=aDKOE<i?)(;rxuBDR#gpOW@>heeI}))g(^K^Kf$0tn)dNUMUJN2Bm@<H zXiT)O2s(kkV}=-(;97;JCBAlBXhU2(-V@Bel_I0TFN@{A7<BCloG4022n&?iLEXP_ zPTr*4o30CVopMsq^6SX7oMVjz*{BHRbgX;|{{AZ;^HK;7pWVo(1vWe(tjOp(T(pf? zIyW=<_5I5ywAp?UR=)%{H~<aLh{N+wtoF{Ck%4CV4KHZfw|kZ;>_5A8ZgP`%O!CYE z8UnIY-xEOT6lN7PRU#u(YWV<Cw*WIU>z(Qb3g&XHP{kLVmk=TP0jlmR1)AR_NSz|j z`r9W%{He(;Q5#~`8c3-1EV*nAX<2@#+9;iiv~b0?YCRZJFxIg7VSsF5`v<qcttav< z=or-Nh(NI+{dwrH6i-<GYt33vfxxvrHvt&_3%&<}#IKzxaX&~Jwp3UHFH>Y&9d#*2 zIs|acBzW9I3KOdChk9O8_KaEr{Yip3W%L<Cc_tVG^|PW*nd1G59Fql({R?8d#?KZ; zw8vgDsOdzjz|pR*(EA^~Jr@Y)evQ}8<sF$hCXDUgsi+};LL8R%%>tND{^WG1EgsGn zUGPQp5c)TtJR>!kM%z(YW={75-Mi!2cNl1O<_I2%2p+V05F~u(Ux911e8g3;Ta;6& z1qwq*B*vLhQG0aw6|vGcr&EA2^fyfom~UkVi9>>QGc>jbga@nq7=pS|_Vj`Xyxb_J z6DNT&31jMz$d;v;7QFD?)0Ix2t<!g9;u}?O1)R4l!Rss)k6E7m1xZDmk#jT_KgM$? zR6E7$F{^tVPRciHWH%?cwo7i~S0PsesHh)2Y`_IvQdCfu>pd9}j!ywkeg(MKg7#N% zfWsr&=i;O;J0%(~`ao1Tl+M`BfI^@B$cW$as=m@07PiytE@aiZROB$g9H#}f^eY8< z#qhX!Qs&ov>{wpXWegfsBxw^~_g#@&S-0Q$6a>r|g9T(|MnA}u)e&c+Qg((AZ$6Jq zH}%sV6o`+~92I-n1+8tkZ}Yl7M{{ofxDgJC1^`d8R0c2O*dAueuM%*rg`I@S=sGVy zpUr)_=n8@UcuyR9LBPDyH=)0!n$#K*uh0>%qb;Nm9}y3X=UuZ$E!Od<#~2o^vfoM^ zeS8dfsPSBu$4hPh)GC9*yXZMNUR*Q=d5rVf^!t^x|64>%R@n%hj5C`4a)c8dez5g? zgz&W0LdcKx*im5?`|u`uz_fuI&T6IgsH6>%@`va+4ucQ7%I|_mw0+!2M=tejhKP+= zIUy<r8p}AVuS&|-?amfn@53W1Rm3*vL(E^8c1i3hD-DdE_FZd_8!!BWh9P5yBd{^w zp^^f|YK+e~xE_1nyy#NKa=(8fes-AR2{91m*Vhax3orBIyXAm*3ZP<eT@?2eKA276 zFXcQE@%I!L%6_{}$MT&x#r<Iil*mZvnONFL7K7R6MdbEZ$#z589@_?RrS-!lDkAin zVe0rrShwQKuKSRmf9!7l^c)bYSZzU`?zpt!vcLJx=5sI)1Iz~m!8*u`HY?cYb$f^U z9h+(;s8P1M0wt_;zRKlzfV}a1fJGf&k@k2HjS`W*x$izZQCveYjOs*q>Og(bykTY? zk5X1|jY^CWg0;U<O##gSENhR2hmhh~E1r=!p}tX9L?w&)&@S*IE<_u#|AJG+%BGxX zPT>0+;6n$iJ8C?}v_>mLt=d4YF<E!Ov&(vBxFE?+`+T3A+0>o#0b_@2NDo!z#CE-G z?ek&*o*$+O`1X}i>?EJd`G~&Qz}Bsl<XL;6|6T_7uMqu3m*B%vL_|FN0c0gF-zp?E zw>N5g1MX4q>8}~wgROFSK)O#ixJ@7GN!*MA)3me5`_7>LHuzelv90#>Wy#<e*>!85 z^)jXXyr=x4BW5_;GdQ4}K#KDf36J}Zuj6v_%cJ8}vndIKbaoA#ef`^#szO9awkuA7 z2>hTos<W_}8G~}AM#xijcNnxy7Xt6w<m8e|^VKQjsk*nGx;RQ!LO7?$3ogSC$&KVp ziitbZ4VF9jA{wK_=)O@0uqb}pO|UTlvN_SV5Z3G|96CmfOXfYykhDF@JmPW)(;8m? z-38AfSFwP0pl?d_t1k0XVA{7Miv=es5r)vkvzvk%HaDEkxa!zeI?N**%%S(G>8M1> zuh#o6*rDk8F7nsuZot8C5NAMA;l=-y7H72%3gv`OAYx0$H2wJmgr+!aN3}kgxBH6l z8jNOPvHsIJ!kH*L#2xiky-C<L#uH`r0Xz_(Hu<Oe(SGw<*e-nsOo1qTKN)7G<P(|y zhu0fzwwD=?b>}IHCg-8GrMYEKwf8%!Yu#(hRaHB~%OS6@mjlGfVr6f9(fHMh=!c-5 zG6sfMGt>>i2P)6=H5^(}qW=AbcTCZE3W?BoS8J8FfgUEb8sf-mr~ofy&%W#L%tJv^ z6*pMhzly=8Mtn+KHbPy<Z(3Y_`2h3UW9Ixr20c9o7Ew$iT)XkaX87|wnptCZXiDJg zQvrp!KMCh((V+R_CJYH9(O7i3bjc#E`x(}OmZCaBa|-`Pq;@|<ZA#A9JPQMaS_F}i zOw1*!5NtI`>_Vm`iQBmbAp(b+%H#C36tE~2f@(BJ;MODyy+kDEoA)jLB`N#Q%x~c$ z4ox&4jAT}%>wl+L{2-!>arcp`I}RR1OGNq@fhWZdTHlucsty?-etggAc+X}zP-nMC zqw9KS!F!n1`OD|5f0Io6IG9#q5TiA;oqu9I(BCZI)~e4^#0h==GHLnhd2jiPVQ4aI zadId+Aed+iW;gz%YS=`FMt>7~;r4DZ+Z!e0<oNQ@fnN9AN4wB-HV~<DHkcM3PRhO> z7{!E3%jWu<>Fd77@5GCF81>iV!IUhmSebi(n_UvxBw2o|vb;TVMD_!57DnD|g&V6D z@>5c`Tr#qVNxaPSst98Ci>5wO?I+18dxDQZ-Br}id#w=_&pTloeJaXBJQNg54|d^~ zyp#{DMU4E#s$s?vp7(y<r%?3Fr*TyQkNgxyEakVT?)1t|Im(AIZRG)H8Pt42h$~QY z0E9+<|Itt^_rqi?7MlPhei5!3pfJ65p#%fkZ1Mqm^u+Zc#Bo-+Uf>7Igx9%|=k0NZ zrmGQCa5PSUj^=~L>p75jH#GopD1*?m=jYcR9*;9WN$WOr#EnPXF$SC6H+r67cy&&= zZne-mjbpb{#n+elMK)a}Kjk+4s<j$Fi?5=WBoExq!xujz>|DT6$Ft*d%))igM)vP6 zd1!L-4=Ah%(VOVJ={G2S?ou|sry<euwNkfXm`(9BQ)Msc{1~$nL;JDYNP3~PkU~nj zRFch5)@aoi9KGx2;!x-qufM)ToamExKfe0ER-tloI^5$BBPd#U-=-(g;(rRu9-y)z z6{s4Ou-AG*&1Y>Y!n3cwUKgvQ-G!bZ9!m{bV5sBL2S#{0%vSppg>FDlkAnF;2ENG% zxPI|=s7pT+B5k`(hKI`&9CsU_8Pa-NhMx9;3El7FZ<On?@~#RjuO_`OkGF3hdS`t> z6xC%zwTGIa8SF5efrVaIvUEMy^W|4B(1b%nL&}Nh2U|mu^u0IqosmyA9e$|MT(HoD zKfkzad=PEC>Jv-AUfWH@ME7@jNcSmB^MrIyd0{kbc`)zivj3r>95CW#N0jCM_?+!_ z&K}i(Q+g)JdrV}e^t*}O)Rt+?9)G0R!YFoty6Z#0dCyh48dE><D<*M!L=yE3yqBEV zEqtPs#in39<_XV0^QTFYLwt$A*AKd=E$S)Mgd0wc{a_I~ViNeL;?ATqM<D5+T-}VD z=NS@s#+15|rmOXl`nN6^GV-Iq&z^87m@48czBEM{8P#u%U~ty}_*cqE`vb&v9otJQ z3-cgt?^s((YRbtf%3yTCBFBgjAL;g%d^>b1*o+@Rah~uvgN#pwq<_DwZm7}tD>ZIs zbOrP4?=i-<_G{z18V`bP8?vcsp3ySjQIK-67-^!3;Y>n=HjCQwvN~5G(c4XcbmiRS zk;`<~K(Dy0HiGfjKkbsKVaW#^D45mK>slBd$W+PLb<1Dam)g1fvm9DI^EM|t#CLWE z`}cH3cEk&iJ2Q!KxU1=zOpVk8OL?(d?k=VI02#Tjblq1M<?~UlCY3R8`3k$_KwO`% zX=5d^UWqtfu?zLq+mhr38ZXQ2t(T7z5jTd3g69gM-Cm-FDg1_oKh-tVn@~E}0v=~R zp3A6{MCg0cVuO{)bAcw&gkG3pGb`7#k_I5}mz&}DM$dK%X+mf5Wv3(KqYRsbOp>MM zTy#{=hK9!o8D_5$9zTT_m9{WsZrW#xx1H{{M^c*iM^vl2nfMN3c)uR(G=LX0tvVvK z@*rzx5ab_5NftcANDTE9k~CLP9O*WKp{_D-bOG*U=EAf=p;qX0bN`u;g%>xDMRRUZ z>9<~Ek(asK`%vT3@St=Bd4Ihpy4PG&rf_>9edPQUMC@4fx)PR2Mi^uX5M&l;dATNd zAVU<+j_)Cp=+1-K<4DpxLol@);LjYD*)wQ?1+a-N<*!Rul64zM?ErwY6Y=W=P>|xJ z#7wPNe4RMs7-02moD%<!>g{zq9(C641U3_xNey8nfRayG<9&N}mB>bU9cz?=&==eJ zpa+NEcPguHsgvGiS-+O<s4&fJu<4(IIEUTeXL~fQqr)ikxTYw^dLwqLhtm02I^l6E zJ3>h}Sj%L*ojv>>Nk**_zhwrL+>^hKRo(MD5J8cluF7FY?QXx&K4rE;F~?Foxv}Y* z4b`sruteGQOL*v8^Xc}rz>e8}{>UhZ^EA++RSyE0Wl4x`-P=>CTR^D6PwekAPjT!j z3h_Kak7a2zBnwR~giY3f^Q8Dd-2PY51XI^Ssc@7O3A@U~wCWuldTJZmN1o8>g&NSQ zDc;;+5K#~pGdEXq%IT~jQG7cC1+{vM$e&ZZf&4@9Z;M8<<PGGG><dKhf-H<vDc55* z`SZ|4H+!VTo7Jc(T8?qx6ZQw-GbDNYfd~Qd@gX172Obanze%oVTF|~|!VB-l4n(vy zfk9+qQxq^1B*wo7d_SSf-JVal9G1G6aL~V(9J<+monz8Pz+%Xy_#-J3?z@+n(!zdm zI`z?&ewOEwYGmSU!qVlxd~{S*RrT(EP_ClW>Ao)}E^cSF)&%MDw$1-*4=wnoBY_=< zKI-bi>Z&7~=E(TSz|<GXpMWli{*079xm}lC0dZBf;;AexK^3~BlR!P^G5eN2k_l#) z3blw0NSPs~9G?&wd~n@no7DFFi1c!#JA2^5$AOdJ?E;m8?lVEl3!UR}Y@nTrY+v{L zy@}&lV&oHVWv}0ySL)NGW`m4nfC}LYCxPcR_UqHs>gD5ycHbmwb)U`oJHBR>{OkQa z=ihc0ddsys?A7M;o>aK$VK{o}VK0{t3|XF^-ySyJR0{E>2CrpH^k;ZCdbX`_YYqB2 z9Pxj`nt3$qZ@xFOb(kZ-N|F|GVfNwag(hmiz`=pXEK`PO7Kzb^_gReBZHL07yj{mX zTwdBHbT=qwSNCtb)ken0qa<=<U7rh;S~}<`O3~yS=nLF)xk@Yel(L@m54714N@$%w z{0wQOCvcH?bIp9fMn?AYIB&tnUuon&_6u-58vF>V$d0Prs?uuPImoaUu@h(DXp$AN zm#;fySDg-TVH3M;e<;~G(Ak{rv7_Smyb%I?$B!OqX>oV0e)UVrC!&Vq#GvabT##u9 zr6^5$p-3XUOlTCly#m&XaoS>4(`l0eFr&)pI$(0VI5A5Q2_jo>4h+`VO$_)hcv^Nh zJTC9Y>35piF9t93$P0wTD2<lwg@%WS8CeLdG|0B%Ue0^#(8qsX#Y<kL3={O%?Nc)x z?t<OsVt21!zv$K2&9v@L;V5XmgwR{F9@fVVB%8|QL*R_R6kyh@8JxfK`SsU}bf()b zVXf1Z%2GS;cLq7W6PC%Jm!~>gv!%_wl!a45`IsB1b%>&NcHd^~!>^t&FcFN~w~(Z0 z^Ice>1VBcHW>ZPKuiNpCl46B`=NXh`%;1(E($Y_P&w>KvZa2@CfvKvjg7-!bA`t-( zy3F!iAy01fKCfrhaZ8M!L}zCh&X!FClqN;gtW}7gDHV!GT-u?+DpztnQqIv)-}Kxd z7T=GfzapZQ))_5ko38rgT81&pSEKld3*4ruv2{FpXadK=er$IXq{}i(-g?R))Pht( zg)e@jRYbxIB?cFak2qZI9yf+21ivIKJNzwhV5DoerO|eC;z(z;3cjl2{^R4L={@Ph zrWE>q3N#_Eufft_wTZtz$kWPLNOhbSs!;Dld06wteSe$yrRh4wp87r}sUJny1C0FT zd42AY`tu5>;UqPZ)c=jp+l94DTD&)#6#C~~bGLxqiVRK8)90bJYa|w$$FCkP7ebzv zQ0mPxJzKSl1_yJzIQisPL2yUHLTpI1)0I6(J=co5M|9-j5@O-jlDwMgpAX3LR#Cqt z(8re#m!+JwJhILD20pK9Dk|;~TYCuZHG$T@rwQNc8AXBd)ZN<+;kjV_kE@ZX(cU@o zoQBP0YZcT_C~r}$8x%2lXp`wIqTShViJ&mEmJvd)sZOk-+Psrv<(p+C*EWr|QGtkg zI6HOE+Si_}_~znKZ7~Y2&kBd0N_yM@9$T(Q!FzRPK$MAbJEBcwKY3!C5=Sjk(gL|t z8UcP04A|?sL36smTQlOO>QLSWmVFz;!o3KA#9LUr`~smsQ3*)-@SRryG>pAG3RdW# z)+Y)os#wM>TXsn#Z2YK&GfpDLuF^QE^aj&#)7ljekqFNPfHckN=hFB@`T-1ra{-~k zkzZ9}Xl;9IB+%D;qGJ6dQqc(@wdpstFRmU*s-U`@z>xtL3H*j^@q16T(Yol?=~%DY zH5)~=rJr*`BtRyhelsgu6{A|n@Dk~_l3PV(^77v2lQ*B=`Q&`WViLFLzEt5QuQggA z_vhtMX;U@+s<xI4!{6bawN$Is?*swq$$V@@%JP%yw;hA>6WI@>5<zq06v!4Sbb~t$ zC}<(Vy=33D<@o(#4QVokpGL+f__|bM$OL4_NET9H*y9cR3;n{8>=DWN<1a}A_kv#W z^||W(D8|Oo<EI7n^tw!6gKWcS_*=<EBK<L}R!H)!JcJ^?XwfXf#yI90L_%T?*ofBd zA=3{2`k~(xF-4c$uBf>3twrKSxFF`&0}*qqMR@R8cpo+Ob?gZ&=1j6+1+I>MEt8s| zH%UG@f+d=(wKQNn|FDrH@RSy%dFWe9P870u_Jbbt*NKOe7aw||O(9x$f3!U`Bp@q7 zR2RHne1WR1v__NY3vmgKMP>3MV~;2uuW6h$tkF*vw>!;Ss~^f`BbbeG=Gh>vNB0d_ zgOnR@@sRQqx?cZCTekj!FPKM0q3BW(bwoO$N-!B<F>#*iO3|Qxkb~}D?j^I(Y~@lU zFEBGsBU+xA)I^RU+|}B<O7-E(3@!ymJcftHSd^@3G|MP?p0GT0?VK=Y%5`|r+8#(> z6RTYbN3*s^QoLm*H<SjI7&75ig@oojQN(u<^F@=!Tg=Pgr-#We7QEz*V7y(IY1Na8 z&`ff8DkHn@*95DCKt45&i{8@|`zYn9HzPI8x^3Gq<bKo&EB3HMyAr&znWj?zL=~Dx zTQ1+AKuK;@Iw!pdkeZ6%tq}$<lRY7HBVosbOBwKnJ&-64RPtC3Wc^x=i#T*$^qtyH z;|?DhUSyVzd++yh^<YA&we{~dJ7c5V!)b?DJaP=(($&uu%PX*Uqllfw9oB(7frW;D z<p|=IB7#jH8@!+CzI11IesarqN^lYj0`RkvF+$fe9MpB(FqM{il7xLzNhY)Yne&<i z*-)c~gL)HNv$kKW>9SEg_;TrU)~wI>nbw*0h=5cPL)+PCd9M+6aK_6S$j?<<IO2-b znwsY1sKeJp1}rN{^Qq83e|xp4{@I*%dZ^qqIi4obdUD{gYRK`fF3%FSwtwzlLzI9w z!)aU>n*Fo2{D>~(CC6hY2Q*&^cV9x#Gfv-WdVP|!MfA5(5<;65JR{obF&>R0%bse7 z(=oo&h!?DBZfhJ}3FnGUh}O$E828P##HFq~uu!|f@Otvt`)QQTh7{@ZjB02Su|KKo z3#A+oHr+>@{Jc(^ycOTXD8u(4Ai>rZuQ*9r_`cj$@HnZ$=!`^XpHS`j-Ep&Fm{2Jn z5m>L3{{XG}bOl7sU(Y2r1(p`5l3=J^nwU1jyir#CxNbqpa>D9wqDQGtSh>t|*)*_1 z^`fLzLGGD;8O9wMN#yTSCvqo2KA`H$qE+4w7cz5yoUg60WR<cu$iS$=TO;~DlVnpw z+?kq9f#+|<rC2Sba~}lLtHCF<`RA8Aq3&=PtMCkE0a8{E{|~#8*mH_X=Cp7U-mPnE zYaW^EUM;{gDVx>m=Tdzu<S(7pLTzaZ3aG`N{p0Pt7xdL6+#wr8uZGMsT{j_y)gZKP z>rPlyb+n$|Z4_cB>RMVx^BBv*2+^q)l?Q!`Vy6bX&hF<4#k7%G1kvc??N+mCmZ}WI ztMz!$+X4tTg3wDiHDsJf;ZVkk!Co~UK2?}x9S8+|-7ox+gbh}vwT{__W=YY=Z_{Ta z^P<LRbV7I=6P&{tqaemk2x8TG5wGT}OEy{oHCVmhH#d8L6P{0|J}e8sbXS*cu%?b0 z^?EYlVg9}t6Vhc`V(|1#e=uV4_hmOKvt7=7`;Z4cZ_L6sS|MXp-sjR|Q627I<2lm# zD!k9vsfv$biBfQ<r*uG9F98z9OuEximz_}fTlRtSeoDr$jHy9%S+*iYoM2D8lU1b^ z95}=v;(EYWvbb7%-xUk&r+Pkv870?c2*j2&Zn_tkV5_WZA$m~OL-S(Xk9Sa`_-!-U zYhbws=A$>kjxm$n5KrN0?N?`uS|^0dRg8&KiQ8VGdQUZp+x@G{lLX1vEPA$52pbtO zj04Ouj4BqnuUx^LqwS}|R2fpQ02wa4AA@Cms;}gYs0irIv7JWPsgxArdjQIKoVU=* zL~DO}Q*_u;wd#y;Dlr@Ibi20E5%h#s4BF>a^~&CX<koAa?Hiu^-xQBpTwYAd#=p=d zyIyO<&r9>pRq_$n6TXLnaN9+EP8t42(c`hgJ8$QhG>H~Uc{BXzsGW*=3ys-twh|}U z-5_6v4Z7u(j2P(X1DuXpgjdY4J=H1<R2IT(*mbes=iiAK680ReVuW8f-;G@>b#=d( zYqV`=C4i=1#w`SH8~*?$xzEMW@@?WQa6Fn9qaa&_$sWg>J+2mp#26sBl>NIeSz0{H zfFb8`|1+O*4<q4A&Vj`4G8Kkm?M!%gG3dm=AkEB2k}Ju~87G|#E&s`>AFjKmE@|JE z0lE2OCdD2_kaEk|SWRadLO4DL*X-uU3hPAfTb{(vx0-3LiWV5$m*p%Owp#VSzJbW* zb3KZ<UU;X$Q`;7UiDU4pza2ZFw$XnI+qeKFf%k?GigU#=4{Nm)Yqt6n)=rHzo6Wdc z$0snp2uVHbe2*{MlDCum>n2(b6}0_eUy80G-PNZ<08ux}cw()8rc`E~8*#cogINsc zADu5ylnQ4a>xtnN%CT7ycCsBYG+_`&&PtBFjYR8(n}eFO#+=sH-hZ*6JXa8>Rst4T zMN@0wyfJ5bn5e)D@`)O#f~qm~+3+=9M<RDTWJ*Q=@32~hDGU`cdaU6Ey4i7{D*pZl zU-Bwye~v#TskmiIq~q-~`<JX;;riwkWFHws{p^({kQv1Xm(8d1)Hf#B@By*~2)VaI z1@usNj>X;4?4xT_O;>v$aYw@nS?`3<(9N%FCCWy<tO6mzwnJ<rV7Z76Fd%k0dWW4U zPlYlYM-)2*GJpOBIU!><2<_mIwSV@dZ9G!qYT+uP0D#($CTTddr{utpo0h0ZjnUcQ z!#G-TumdFgu-v2EdNZ5799R%2g&XD#Ez=<)&{1W62t+U3?aw~Bns)QJ0zTXBEzDT% zn{SAS$*M&0I9~qGBH9VPiemgAeX{UfEd=7>>tRb36BIx}a#Zf;a>TD1%}#<}S0vGd z<LAQ?zA0p82RZ8l5v}@uH<3>frWZ6`IQ750gVIW_9%a-51pzfH0C#WvpC7cAW0A~| zb$PuV-YI3;ta%>Z0Qb8B#2;Py%Q~!V7(N{JWa>(+P%W{LQFcw3?ZO{9?k$ksV@H6T zmJoU!_^G#Z^kRJ#+Mbc(!BE(;oG!ErlQOG_u9{pVLY^n6cMrBIW!h)(0FzdqeS5=k zdw;qx3wn#!r!d{!vEqMgTPZ{cYZ>H2e~j-3EhEV{jS*)p8)2S44|we#r0Ymdh@_8k zOjK9d3#P;dA8pK|A6`J0mJVskoueZ;xYDLD@8RMo*L}Z`E2qP_M!s9iz%Q=f6gn=3 zlSa5|WO>RxCd0adC2q+DO5BG(leo`=-k>yESmZGrWz6?`3QSlBm$lO2XjMK$Wz<xD z?Cu2J3VGT$WGvluVXwtoJC7bqB&_Tgv?BRTlDn_Z?ZGMxZ*C9mQ(w+NBI@_{L`a2( zrzcxy*1^u77e!1`DGx8oJh+nP;&if-^uFN5id3H``F*1Ah*VYK$tGAt*?k7IsJNF^ z8PUf}7stNsmTJ`kx~<X{gR?H(lpbIeI5FvZb5r#*<9bE~m~$lh`>zb6Xvthp-%TY^ zgVLsD`txIWg~xK?EdJ)Z=x|$XTH|SVPtkC?Rv5QAkwDFz90-9FFR;S2-$3Od+ux>~ zJ$C>0b=fG=SQBLWLRI0btOEiXG=ka*m*&5R{2hv2sU=zWzIDT1UTV}uCNWYf$lyei zh#`Sl<aS2xZZel_V?dy-`+CZ4Fcb!@NGbny0S(xWNy6UZO&e{wN^(}|dcK%!Q?4WX z$J$69>`HHb=Of}b?Mp<*h6a+Z?CY*PiJPWSz(q$G>1ZLa5pA$7TI16(Sr!=L@re~x zH0u`P0zob`nt<E$p1-M|;Vp>mjw}*SET&I_HzY2&*wJ~t-izG6-azYM*;nI!ZK8-X zx<#neifZuk*lTMzW&Yyti{eFO`X!l_C?9-Ce%hY3ibJ71!!s1IKkgJ8GKt|@sc4?2 zy)FGHnN{)8)`NfV@*&D3qluK7O3`Q|1~N5<+wP1F2-I3v?i#y{e9R>~Cgh}qbZa?9 zsm&&_veOUDe9sZ|s{pop90??j_-{w5mqAwh`E)84AmTCkOcMdYV|uzxmB@2q{REfT zrNoF>81Y!YQw&xLs*^C#^;wyXU-{y1>?hJ(4LqH^J3rR`(NH_1IU2G8I+!F1IzAWE z-A0*22B%9hQ?9op*{uNS3Oyegy4<&gnV|h#aB;wUTwC}DiT&kX@1srW`f(|C%zGAg z5pU}IzQjLQO)mZ~n*ZJQ@EiqvVt6zZ=n5pa-5GCxCdnhx!TEF*S?V7|??+{q`_~Wm zAuCvb*h@Xd`DjSX?`K04MNf;e%z$K}wB!zZmwoS=!i_fT+`+@yl3(-3Ga}wf=P+u% zTbJssCe{yEZPo!bTbi-q<O_u@nkjk>Fc;^MxvMS_B=|6q1QHCf`a%}*(GDLg&sp*b zD}-c?1pw=kxj-;!NGGinFGxbn)871zX9V}Ra~s@K+Az)YPcy+k+d7G{AyW)WrqX5d zl<XzNMYuyRI?tmfsZSHX43uUMjA5IEb<{OOE4cLstF_1iFIcw9xwm$z%nRPj!CqsS z@SjH}e1#_FBDR-dqdUTlVA43)ZBtmq2_yeYjV`X4X3=yfpe_z4$m3=N9yMoAk|iT0 zMJ3>H^;&w)SJSx`-ee))rnk4*_ln2mdZdIR+|VI}{wqHvnf*bGim_-h){aO?UACOE z6z0=9A<XA8Ahf@-uABI+x5e$TC?QtM`#we;5_S)<6uMGo)VCe~r`SMQQ`GUa>Q4aT zyfk)()O2^oJ^(>9eZEP-jJW&vT~zEgwmE=Oy*4Xd?`0{c^>Fr`hLoU*C>@11YaPsM zuM;n^79dYvU$ivJ*Bln-GkAx8QN&P(3RQdG4)@BpbLMXi3@0S~WgZGzkOt@?too0M z2}euDig2Z_Xe3ieQIN0WwP(PjH7Et<0o}0H)G^58l<L+PR$}&H4wNUwSoJ9ADEn|f z+~IK#rcl{WA2%eFXxwp55*H-025pUv^-tulbZ4-bdtcr0RFYBN>|&v;LQuT^=E7_9 z4{??Zgb|CA4Bti!Dv^_uti<#fk_p&<Y;3~TJ9s<-+{-IN<6>bB$<PWE8Xgy*t5=4T z6j5iQ6flgITlSzkJ|0m=CdcmGc$J9VWt_)&S`d#`n@Lz{1<xx3&nk<NNOFY;Icy>S zxo5!#q7F$G?}r_ERMhi<(lZh}rA=GSbzY$BL9A_GM-gWFYn_c;*W)}PR$yeo@)BLG zwUkS)<~H8fujzs83|&!hwD`h|X(QVR)4%C-oOlBlPJ$O$?7$U`OP>U5zJ<Jgbmb-9 z>I?&EZMhZVLTgp(a)o^{sXBqysagYcZ6QQO+)wkM^6z><Ut<5EcxD2xAhzIBK2@{8 z2~YF~$*Bq}>b&sbX2Ee7%=Cf4h=}4C00G;sGyD)x@XJzHs?Y^zZO0D;ayn@m0RdIh ziuvCXtcjWSO!ZeI=qe<d6&I*+wY(T!rIO0~@dW(OO_O4q?K)!yL~LdfiMw7tegZWr zoz?;n=4x^Og<<@zdHOVcyV5`@h*2IXE=LJFW%<%T{^;TTH;phOIsiFFYdbX29H98z zi_y<~`@LzYmaVAoB%ynWQY_ximnj3Ypz#*Z^Jo<vV{6z?SCVzeKjmcXFEhgVN*L?= zMGjkym1vRYX$D9wJ(DV1jC}@ogwr0$%)@zH-lxbvVE&SF95>b+6ocXg@>Txl-iayH zM#MvTDgY?Rdcs(-0J^j@t;cncb0|9895?cqUlbXz<tRjEsmU>Du2<R=T`9P5nWhe{ zAOj;T#*4D(h={B<tRLXMzqZUzHNF0`)vzx`f##yrWh0EVq2ujOHT}^KsY{L;Yt-u) z0s(&OuM*)#3`qNTx!mPtXoW&L=yR`}<p2Er2Jdgd^zvU40taHhB)*v{la!;g51<Bi zF*RqcKs6&;gsY|@qSJ5uDtZ5j)Sfb(QkI$ejs0>QjTnl9kp;IiBbZd){aeut(;vEv zFS2cM9!V=`=$Lx*&6~Rk<k^As6~Y|ATl$BrRsg}9YNF6DuyxN^<bCP3;k_5XWDsrn z70oz4#+S=;b>Q(k!v`D@@Sg$h-OT@x(|W)k=TSXiDD`OXvR6I>2PLe+!>#af)17>U zkK?2!BaZK<t0K_qTo}|n(ko|UUm3JyTb}y)1bt6rNp>IN<^(O=l=8L_H*`w}9d!Dk zGdHAKnwx$nVPcpJ^x&6l$)~KAPq%3KxXi)6?(2aF<|v)dzz~E@9GWx|c#}X_zi<4a zVxXNJd3ivH<-U=l=eWC3qnM*-l8FPu0gy@^hPUl^g~tODc?d^;VG2>em+Na*@oGNh z)UuU6(hd>}j9?TyYU!s(1It*k%vF^)8UwW9<8dzd70Te&J*S-QM7v0sR-1F3jNQI- zE=&Yb7GZDe>^<icjpX@FT%ad&AUG=jUt4kdW2ncC(kWRyIM$xgH4annZ}gQc|1(F> z;cj1YoIsWSr;rF&c`8mwF{LDHRbCm~k@4vv6>tY4J}rk-sw3=l^jXNA^?~$RveuF? zZZRM7iH#<YXp1V=?(;%g>#unysDCji@IP1w_8aDfhUN^0V!@iaf25`&(XG;v>DTvk zx-j5NCm4L+uQE0Fg+#xNBT=#o&&4^AxfhI{pGdi|zl*aDOXz87qLdg<4^1vLTI2J$ zpZlQbs~r!SXIL6-2+MocuJNnOQO@iq(bvsS;gw9l{8%36#s+GgSNn@pylNenwE6p* z-{yIs{C_5p6(7VOR1+k*E<}%8{7Kg+aE}%i{DXzW5rMP8@p>;sKhwv!(1Ht&u;m84 zF5@NTb0<Lo7P_pCE~M8}><dYukvp~)E6!*<9vW%nWv#Jf){tKeA;K}s*>M4p@f2ty z*_KD9hBfdk>gmVa|6)a(sM!C|fX0KQF`q~AZiP-d(0V+_P%4YJBJrJjXP<Q2C0}yJ zRyo5Mgrr6yI<P+*k|HBK^Zna~8Wn2dpQ6LPonG7$q93xxxe^zC2A>8=n$gCE5%$n` zL;9cCcEaQMmDG>%0%AFY(IOt;4LB6S;~}ilaiBg+fImGFeCcn}OOz@|=eiJo?fJ_0 zp7zz(Q6mt6@v2O#0rCpDPG33f&%S+R$;Rd7+m9SkZ{%^W@wU6i?RGRY<3n66?)n;- z5I9NOLbg6J#`AZ-cF&cQjWA|5?`jviH_c5XFt}Vtg$o5K{ddB2$lB93rS~J-Ne8H( z!!vS^vPk`-;}pe)>s0D+^^-p-g{WQ`OYuc>YS#T}ePv>ji$Vh|uM02Ivo$pF^Ybx3 z=k|c=kx)7}alohNW#G39)#q?NB&6Tf8AQIS{K)@&Z#4wodL<0SXXcQ97G3k7_fxMU z$%TRP1>b<s{gTT3AMoUJWNruFeFTT?TW>*h+acdy|J(qU4mUsYZ>U!xzE0~`s501P zF)(n@`LcD3Cd`Kn1OA)JZSUZ$b~;KY{`YldC^SEHLB22^$G^}*xBqGY{HCMfd<LT6 z7yau6`FRF3AH(B_C?Kf}g~R#ZZrecoL-~Rs)yWm$SM&x4&<pb4N+ZQWI$!?&?+HBr zo-jN|#qgiE^q1a5|0GPb1oKCP&{8NS2@{-~fN_QIEbaf^25do^TxUgbAlzKSP8S%V z@8%Xhptf}+q%D`s@vf0^VjpaN#rwHKn=bHLbftWc2NAySUQA+UOKukta0RAld(FQh z?LFuwr|ri0^CF<iYW1BAiHL4zxBEo6Y<Ll_I-fdz_@=78Bc9Ger|2+lWP<;-hcl7> z#w;sRI-rEO>s~l9%%u7U;B9YH|7x(xHT1@{-_?FG#JcGnGtXPSeI5%~=vNnOFRZYB z)uh_?jWK{EWd8ZE-MATuW~|0FGN94aG-=Y>ZL1bMKqE1Q-=s*g9oBC&N#W4-25=z| zX*pyVs%$2|i5xq&L`vq}mX`^uwn)qxaZn||#9)2UbpE)vw=iFw%V8yRVz_%~>mEDq zJw<pTNU=xO`mxa+=y5)m2RWqm3qzyXx;OX^_iwq24Z!6%GV|23;_b-<kH;P@C7Liq zN^NPsJ<*LVK3V%+tyQvI!3T_xAK2QQzxCu-BjR{zO3@%#Z-%Pr_(bhfD-%(ZBc8BY z_u~*BA>hZy=IHnyOlFX9aNuZhxD3@1D(5z|Kx}%xV^_5wsf0#F^~aH#Ewwp7lN9vT zdM~4N++L4|S}nl8xj*#Yb+>&d4MylyGl?FGMC2VPwp#sL@8M!-WVExD*N^qLg#H>1 z7Fed_PZQz-C4L={*=>rf&TJEHQI!=sU+z6nPA}D;W-vsmbR9x<cQlXd<?%2OWH7vw z(!6O+*H8AO-fSL4DjL%wKHRDDKK5yr$}VJ8ATlyi$gZ|x&v0q9v)f5P5>Hxkw~aI& z4~xa{Pw%uo62`W*l$g1*NP_C!pp1}201okYKLs3dmaoS9RFvJ~o_JHdhnkjaE#GjP zEU8pdmQqbK6W9JvPhTAn#rM5UDJTsJ64D{kol7o_prC-XG*Z&Aq=LW_(j~BT$pTW+ zAl)n_DcxO5hwm((@9*W0{bQM(xpU^+bDrlpXYPHV|I1!pH@Blc>2dk$4a4~|Oa4Ag ztbRwH{e1Ov;8C1F?i=Ez7tUgH=O4;QDkr2F*cP0}xQ}LR%jg$+#rox=KI>^?R*u=F za$>MSd2gp{9~a6ZEri*8{DHP%)2sfn#d@GkP3ZD&Z#E+gK7glIf2Zej*cuWV7S=Xo z=zZ8%T(+2XO)LGc*_Y>fr>>$fyv)L2AaA>a76ne9DIxJ$Xh8l?;>zkMHKgu5;0Bd6 z@||CSHj<X5c8~er$*N^tKP+$$Z^F4vrxsg7ZD;T}^#$6$<n@=E_iC!uLoi5!dfX4B zLc_~yXKt9<+8B<euN||!lZHZVNkaG)GNM9gZWz^Rg{X@y5^`M>GCrfXE0|6O3)Y_B zg%Cd{59#M>L}T~6c_ci~^GN@fLpNLCmD#`rJMT`rN4W}F<Nlu<s?l$jnTW%&sDDk^ zN209N_Th24^StHdB0if$SEoDSYpVXz1_rqjhsKLi|I))IIQ2iQByw6WG=uX0dSb@r z(c?vhb~K&Ohtq%{bo`8%AjoOkZdtQJRkR{$>*BNx!t~GfyHF^!m22y^@pfX?^YqW; zr@7O~)S2_GKcq>ok^`(@zGP97S1<04qWpW@^p+Qw0!3_*)=!k=sF;gi<AdCu-JKy6 zomN(RFSd)PYuC5gk9rj|Om_ASYi}x4Kb<D%EboXen09#|WakJZJ{n8~>IBUfhdEJB z|1b%a+TR3CFAQ`>vHJtt+8O4ea|45&3x8(wdm;6RhHs4jr$al$z<W^e;->%o<~T3K zt5ktj4_vaxfzD3xe7K^a$=5H#BGut0ee-H*CT9gwpf6F9ch77m?;_O7E3h-fu=IuP zyV%E!d6{lI$&Hsi&i_XKyV;PsxIH-NWCzfRq?cc=*XX~(rS?~4cFWZ|OAG(}G$X=% zknsm^!Edp`I)3*I4#_mbrvQX6?cl%_J5wbWA&`4?bae4y?Paco#pMsn^r-@r)`rJ) z^>9t`-^u9L(D2As)v^}OxocC7_l-|9B+m$a&enu42KQPz3M!ks<To+`flYE(%KdLB zZ2gQv3i8!EA(u<l)+4e*-lYG$)<sX+Khltg&-$O@P7|~<68;S@+wcqdn`W0wBNFtd zBJ|Xl_KtCgN*J9=hpWB2($WlR(_U_N?r?(~Q`!AnNq9oW)v-Z4^t&p_sJ$evtW}F! zz1y(nP80sm08e5M@0?p0j7Uu6he}9EA#OI=_^Yj90Xd2UDjLjWDJdzT5fQRkl|ADD z6MlATPtt}+n10!WkNaK^7rC(R&NXPf82RdH(?M+tb@`*MEm36Vy=u9p)K0h45XRv` zcbXYf@uC>`MPMK{A%o1}K!3kncP_zHlT}T*z_d#bqF1I{J^iOGf~H)refVX0LJu#2 zjcx^=Q_QfK`)25E(RCj7=;IKuUwG`iG^tG*BO_xpOH<gha^!S%&)}d!O<es_z^V;P zq)dze6LfFJv_Ckq>x*0HZX5@wCa|a|l(a(pJB-Dnojrc%Vb8{JUg9WK1QDE6zox4T zpDLHe=>;8yYFY4v$A>pr0<U?kC#s-ZPmk-Es??$t#Ac$;{aRyd%ROBF1gYi;Q?h~> zLwur~Uu!a)v*Np|`M`OpgH`1Y*Wm9N4uTl@#mDBnqg~opT@WzP;bF!<77rtra~hl< zD#*{7Pj%;m<&hPh$lGlH0$hrgi$2@+oxgQ*-Zy(1gp3yRKJ>@yx($A$3Q?5MZkXre znmN7){8G1gS}Y5p4;ad-?Bhb?#N0ZJ|DDp-<~C515`VisXuwViQ)ux#lD#=kAz$rY zZ8N6vdiLPKgA32~f@F5vjJvZT{Xs&g_CYJ-*65h~5~JvZnt7&Ha2kj9D#>53{#T~N z!n|1GRzn6H`nN778hs0YEy62V9?P7OQrL7JuPH3NQc-C$qSyY|l%o*Y#!}9Ji;Eki zW*V_JS!yp%f7<j+(iBUxSwkj1`c<Xns|Yd}vsf7iJ{K-ToR~GJ<Fq4A+`S`zP=EL> zPJWK=xW2qQ@#lFW@9-cph3_BC;+S(`!*J2#$Hzezskq7oxUG-=Jf8fOVALIx^ZrXw zkC^P@1JfAyor$OVLXHZoBdHz-(-y8)u(+5M3rgxX>A6|!TZ`mp&kcSJO7<i3##_T* z-$g5Y>uyA_i-VAk>oeNVJw-K3h%LUoDScbht<3spgqH7=BSxWGi6=ZVT=ADcV!T7B zRha|pqr0V0@=*lYPCBkg^WiRk?Y||dtlA!^zQgSUSlU&5{8BSbUXG?s=%rn7*y_c6 z1mVDx{HCMWA^VFF>~AS8KywyJfV?rS0EFOo>;OmVAmkiPHnGC}F@1x-!_8JgiN!}+ zczmN~S~U2*aK;ATkxyLDOP}djwuNS6KC0vDHQrPU3&=s~{sv#RBO_Sqr@vIhbN;Rf zjmF#khT6?++^-ipJ$HAy4Ni=HzLV*ux4ux<80#Q{2>Bu2ue@el9a6Nuc%7p}tB>E1 zhj)6leqG^loIii|vi|0&jylirV8emm3uh%blH?n(Deo--Lh_#kEcJ}q$a7!Rj;!LY zo%SxEAR|3k$%aR(^X1+|Noq`}duXYI%etCeb4rS6C=s97&Tb{|Zq?Y~fYv`j2a}F8 zGY)ob4)UPOfwny1rLS&o<v+|eJk-^@M#eF%*}HmkmE(9^4|^~C<|Wj8uWY_ar<TnH zsdk&SStMmwBMG#_o{+M2$!pFE^$hgIHN?>96v;twF7rQRGHpD8hU0Tk)v1=H=@t;b z1qvj_N+h@OY+9?=^q@0sd+@h?2fu?GBi&$<vVBxf-XAY12z}kzF{V<#l3dW{?;DH5 zjgeQ#b(|69B2IA&B5uBynhv9%h4yB0!j*8mJ7PgT7d-W@dtoK1!jH<IhBFa=c*y7- zCfuISsXrJ6FLn3w^#g&)GMTB^5)EkULNX@H;t<PFhD6i4V8z<F%PEtT5H64JbR=zW z==}*2NmxhOslWu8lp2iFj1Tj@QcjXXCP`%-m}BK2kos~;Hd>`D3w&mMMUP57&1H^; z{Dz1Zb$;bU;wAepywqckMU8R#B5TrEEqJC&JS%fP-!2(e=;*%Iwf-aoGi3Nm0q@^W zm<J0lc!DI8kD4PQ)w&@uU&vG)T@N#5vaieJH@H}rhClm?&@F5fWI!Gxr2c)0h@$3O zdG5tP{%0*0m59U)8?YALv?if2fzemUseO>TY*r6i5w<4pcEp=aI==Q%=6)XkRv*^{ z^uDSbMW?%D+)r=kvBUo$m#}Fwb9A)^Q)_tm+KJ0wPde&GjUk?~&EqyiPSDgV63xWU zjc@yt%2&{5rD``vm|zysBM8U$EuVt~S9_g(KZyOp{q932t;^8H$YVW>=Hgm_7v>S) zYS|~L%tsT;I3v;WZ?7XdYeX)JS%}OH#0IdVM}jZ1&mWPtEFSmc1O;I9?wovg`(QOq zm}+2u+cW3d*AS=kjMJN5D~ftePNkyfbAj~_eVhv)Aq!*oiSb|WYhD^T*~f3PcjebB zVlZ4?Wsc~OM?Z9t^xtF%2@1DRvrUOrHQf<XV2>hF&U^b%`gyjuKB?2+zy!YLH<p8A z*&a}A_1cTEq#n8&7J0gH6sHmkx|fD2Q8bOglX>jM{e$#@QSDnxb-%l{B+td>Yaah4 z2E6#vJ4XM@28xRT74a{=*aVA5-86!vjfMDB`o_q!?z>YFzsvB{5tYA;-NwF#DXJES z9}Ah;Fq#2kN@ZM#Wkn0U1KJ(QbT&<0?J^=(bIr|eQk+EHulr*uBHm@!EEcvOSQrVn ztBX>UwcKD#^mTAu*|$jC;v4WUIaiU8k5ce$SpzSiya3v6D_bt`<mKgSJ#X@oPfqRN z2Gx276#V9<@8A)R5#S`)?ckLC^JcRWJxm!CF(uRlKBgu#dmX~(Z}RjDkFxSTjN+Y2 zoR#Dji8Q`xs>eT$3L0qOg^AcrGj7>1IpgQiT-l9@v#1>pGpoii5Pd|6H6fp*!DW=b zn>0ZHZxwLI0)(?UVLH0V=F$e8U;-A-_W)y-jl9>jK9KlgMkvyX{jM@cQB-`C%+Q*U z2h@WJ^zV<ukOszu_7h`(^1c>8SO47*#kUot1tBe2k3|?!1Q|2<mBwp;T$?av8VR>5 zAa%V^%w8%u#DNXq`<(PB-FXpJ!zj7u(dcx*7ihZZmOxVgXXJc`3|n|S^NHQJ2ZN7C z-2=`urvVO~2^@sF15;^AUx>EQzV~XGCe;VmI5-hxU&9XVuS~hpokjUTp3EUwqe?w) zSKF-BL=UgF(_>wnAuI62TvX&$SOCLtElO(`1~~!}gdfsCbN}GqT@<~IHZ)up+_NoX zKsogM_O*NLfbu+_8|?a-NqFuMW|}6#!%x85{F0@(XfaH7pxO7_=shQ^{;`cFaEo2{ z!W+ze5&W+sE?+2kl{uGlQoHG{e#bm!FQeRdN2o&p+Rg0<`|=f+JT+n8<>c|FiOo03 z;v3=;w@9rQu?d0mkR47nm;?o(<VCa%o<kkrxa*hyD6$vIy-@-%tOhXB`1^a&%^DEh zf~7rgwyZ$aPCce02Ci2cvQym6H+<@}ywup{38@Dg+`j|-d}D?iMfHAtjGS+REUsus zwkP9qMX%jx=Rm<)cC)3NDrxE*u@=K!-=2rJNS)Qv-#-61;(hoBUp|wU9%W`2upft` z6eRXA<L)v!#^^=!>+e~vV@%DDoKKvIsYn^=9m5Cpir<hdq_G)%b2$ocYcqY%`s78d z8+%Spj(n1b61WrR{V^Pkx16^ttRO8eF@@RIa$>KVb1-s?7UfqjQF6*#k^ZL&*@VBN z{8;y|+U3?B<IH16>CrYaR5Jm`6bj?K0D{h&2TDlspiNplL;C@u68Q`I#t1T$KIBG# z&U`ftiVXl(;LIU3bi4OgYd9(@)U#@2pX=uouo$-iN#toSpX-CKUt!-nL-%Qzah3Iz zqu3>{Zig2_I<fB#<?Pf1;B_KW;pD~&3c+q-dOcU2gPnElDge5MNTB(Mx$lNL%+*s| zd>6F;<_Efd*JufUP|?he0eDj;&bS8F^71loAtEyj3L^tqHS>vD*pHYVL2ES4&Et=L zmrL$Abt<;dUS0pZ_)Y5vz;&K!7nhTtzSlz4Q<y)e*msVmIIlJft<(5SlsdsJE*t8N zM_p7Cm17=&1yEB65`ZRn)hnzfBp68^?zaf#fG}S{4#Cx7_t*ENm(Ffk3Z`OOjlfO# zh%C0y-YLlN+kO}1_ZI63I?9OsIMJIWnU??8LaZu$vOb7u{Qdr)ud%iXG2F8crX(qP zm3vi?ryEB$uYkD*{EQl%aqjPn(MXZ;LV06RqwjM64JJgo#0J^h+pDCcbcpurL;FKg zyhw2di{*D2lD-n%->5~u++Lr1OA2@4t22Gb6fs?iFU<JL_dc@3g|0|7iOYHdp0e>o zd>xivp9MTZd;)ZmrZqRMBA{c-NZ5X+N@imy{lnnL*=k#I0$NEQ*`Hlev{84r*WSkx z=YL%m?Sxsbg693M_h4r1I;9<x#{PSk1`9$;r4w)g?>R;W20Y6%-%h@jDe+t6m`45^ zY7j&~%yl!Ms!CuWLyGqLZ0}?U(uN>qRqs${O<(Qhx1SLJq#7^DonYWu3aDZ2f{mF0 zum2;ukrt?>F4`GQRx%JtC2YDrkirUv^Adx4Pk$7biV+YBMfgm|3DOTX9~l3;B7aCg z9g54{IE<G`wDOc)d$Hl5`9$|LvC}cV`|Ahm%h|a9sg0B<YnR2+f=Uk9OKUNzwoAaV zUT4!*F-b{Qdt&=dzy(S!i_4m?MDT9rjy7|mvaJxX+SORq2-o&5lh!W}bSuoEA)9Q0 zbMCYDFowxe!*Bpp{5?sb0{Vs)hY7=^b7TU*#+*_Rl3|M^LzeK+pd`%5Q4F1^A1?%1 zvaJ|JOglnXGB?MINWTl&Z%-qfLXk*Ugq7_|B|=gzf@7P{<TqNC<HG#vQrg3Y-E6R9 zR^9>NXN!?&&}Kb9Bq@uUbeU08V}ECBAokIa_(7($cJy%qCFzKkc2>t)Iv21JByw+d zvhup0yQKrrJU|&G_zez@_+1dfj+Z0))>|mW)|1hM^(x?Yb7gt?)1;w?7yJ?vn;_GE z_7`1w%p%)!ySe&5*WcG&=)j299$LQ(bh!`$K{8I|Zxh_uHljQ>TQlY5<t&6rFU^-1 zxvK5hzxKuk&oy{pbK2x*XEXfV-QBfwAp{8RnJ31`nAPBSLF>uVbPE5>cSAd$q#@H4 z7Ci`r@W!W4$kjLvg<|aziEf<|J&V%4S6$j5__@<c7scM(m0G{=T)o>wxAQ@XevMGz zq;_Dr*NNrseA6tR0U@OT4yXPv@WFf&Xk&GCHNZ#^&R^}r;-5<;DZboYF{QsE%|}JK zJb2A8AHObu%6PXjzm<gF0U7XQfS=cSRmr7>DPBYJvIB2mw4SM#)42KXK<=qL-e;oQ zksQTHA$t$}Re8~e(k0)qI(AO#0Y3+Q7qBti2A4hYCKBpXwaV}nQU{&BbxGSmB=ch0 zWp36hJx_PYP(xDAH2XHtJK5gqyGY;tM88~5bsVm?)fvP2iC)e+krZk0@#7EQbEnzQ zL?Aam6?1LF=G!y<u~6QZa|t>|Ho565Ty)~0w<}Rn4g~KMkal3DL!W#*kw((~Y;&;k zH+(1yDmKvKJj*Uqfm40#8u#Ilr7LQ>-fwuuZ;1yyaI1aTwdB<%qZzMvJ2B3PcZTgh zwTipNK*ESl3bkyjcA1?-ZeuoK;Yr=*#IJklA&F8)B5!`Ef)UrbSRSnp$mt{{o7+Cd z?M}yi7x!@Z>V>=yvYc2-$alv%tZdQnA`1S&6#j0;vf;Vd3I5(#b46&Y_ybv_D`_rs zo$HpS*~sY2g0HqQhu@xyAI^IpJouAs<!e)?C0r08$C*A^t$#p`muJyrg`m;OI6+7) zm^q!?^xcdH${-UZ-Wo>2D#*PBl$Dj?^(oQSo=2u*`YLK_9bOyhR^}WujMFajfqJK4 zxj2T`=fporQ4oUZ$OQqKToKo3x;mXS7M`a=KF*3a>17>HD*|~JNQc6}cSqf{RIk$4 zhP5pE;@M!f(Vj{_;sw7j&mD@n66g6jGSBNo(SYDl3eA_mk)RCjmYZW|F;Q>Ir;%?C zbL+v##4;%=-~|`zS%6X<Z5~k<)2(Z-^zo7k?W3Z2<~}f;AT76>TjCm;D^VFXv%l<v z2Sm~O6&3+)_SAYV?Z>~Cf47A3V!Lca*&DwZnd!WbCI7V(N(m%-@IYaAJ7?hVbj&uj z-I9Utg1AVX8WO8gnBUdbgksLvY?L=ay!|+HHm$fjoFdBPkH|&eBgZp^Ff7Dpk79Hy z?v1=8qvK}gTU0f~jR>8@_qQK%eu7qxTuZy$JZPysBvt19j-OW=UjWF9^b{&fcfoKq zrY??emF|{UpcJf>xkjs!ZN+Ul_4C8}_ubA<zY`+U5)>jSzw!@>v|ojCH(y{Ftk!0~ zO$vq8zQ-JS`e(8^BeIoLL*m0i-YgKAUMmvQjbQI8A}GF31hDs}W2qvZvX5-9#QU;8 z7jwmNY`)A_ge=`{lYr#7J}pkFjQ7>pO_K;@7u?+p@FR3PQ$55-PDGg5x=zbAeOa!I zZ<fi|EQR&YU4f;lX%NukZC;eagMh?vkVFfrp4E43s+RSTG_H}o3})AwE?EH1%uJ%f zto<G2{p-kyFi~E^9!A*&5;V`Ys`=)Eku0)aZZnqeyh7?u4Y%)?TDXFv0_tmFVxG}g zbbiP*bMqv%n>tRtTV&C{yXyncvAP=+hTbgF3Z&zZ4Rcs;9ILmhdA&#T*^I3=8Nc6R z8Lh7w<5f6!^Hh*7oi5Tjn?t@r>P<y%J?Ywr8S2#6I9RzOT8{a}&#gZ59fhdZb?Eqz zL4Nb(OWf|Ih*ZXs{(xU_0P}y17^Z5N1~n3{k}i4lc09c3s8UjR!Kczn%6C`Pq{o9r zMJ34yQe<Vh3uRIJBb@Cx-zd6YyF%cSabqS=R2_E&eC^c5)BgSw&m5#Q?TO{NST-(; zRlhTx&@fRiENlyvQ^!Rxfa2`!CPhmylkMfu*cZRcwImRi=h=)4C8)%~7M(bj*N{nc zHXiUzEAB5ebWA?%5$M=KoH|nKrv*tkQX1a{ivDIYP%#+AZSY!3&M}spP?C(eEKdMJ z`OeXaRbbyCLHuAS;lU{wjChy=duwR!M8cwXnno*K7m3f2Augx*>31T(KU?R~r7a4t z*GC1UZ?d1}Y+y0yxsko$yZPPr6_>qHHJCE<tt@*C6odiE<^clAfCl?mh5BAxqLOU9 z6(1j8@?b~chv_r0juOkY*UjJPP}sT4*ehW#1Eb67`h%^pg4AdNRtCsAYcHvI|JTu% zfwd<o`WJ87fn|4_ywCZ<?<405&J?s+Qwq|r0XqldreirX6n}HlwPx1qXg$gBzw;tJ z<N)k|*$UN-kAN!#ugdj?;^Q+)>P4dMC}ezUu<P(;Vm(vZ<TQJKiXXYjRy;hp5L@NB zptkGA>#kt|Ml>>cLkM|8DZMSo<|P!^Gb->6ZKhR+bAj1;iV0vXAYjF-KO2dG#-iQM zUapkAcvDbtW-A|OE~&yZ?#q^=>*QRU!Eenr!gD0i?;Drlq4M|H{)%YYHlpKUFd1|2 zY=yxf`lZ?0nyX)z{f9axF%{xn!{LS?tgd>k?{rIJdKS75ir<*Zt%Iha8}D)9hayKm zZKv!a;L7H3+^CE~dSurk_)>WuFWd6{pYfipUmrCZfo(LI$=0n_x?u!?&E+v`x6@SU z;_GM5&l2Jz1-i{bvHRD8gkvSJYo~wDP-$P+)!&1E!vA7TwHuZDWx%Qt#dP!&&hU6L zUo+*;%WsLf&YVN5Jp%Pcyy}es;JQr);I8xjC|IR|Adrsla|$hxQ-raW6@m8{{Ao%j z-lFg=I)h1Q^UI^nr;@;|M}hCF&uI5Nh#+i6$L<GhO=0yttj=^oK^T?W&4f*=^CbBL zBh)om|GUO~m}YOU)&vvtyqMXz3uSWxvUWLVf$*G3^49l-)VPq;sNwhhKWhJb`z)eZ z2(-h20G5@=&CRW?%~HM}hJ5B7L-f=S{CbbA{nSkhUTZnz1QuH`P39j5X1x=<C=+H- z>BZ)`oIfoYEpSdQDZU?QEAM#UZ7Vv01blV=hx{{es;m<OBtcgfzc$(CK2bJ(MDB+a zn-PgU%tC#9c;jntdzfIjP&!gP8F@O6MA7&spC1MV%<U*Zo6$kKO;7L5z<~vbHGhhA zQXjCw<4&8daE7a)xOIo=#4`UGlgJJ*rFQbNiXfz`uH1AkI{8^!B4eGwT<E+=#Oct_ zrUdx}yt7wW4HCgy)gjuJmp5u<48aoliZQn|6clmiLz~|cJ<#QFu1WV|)?i-iDJ*Gx zI`$PwRJ+%s$EXbF#2}qr)AmGX+s%v^^ymP<Z9-0nI;`jI=yBuLF?{RSVNcn&OWgV% z?#64W%K)&f-<NSJ`AA;ViUZ<p>f=rU7joL;ZrJ6MJ9Akd;N4lBIk}u+Nz^fL`YIX{ zUU4xda`95}{N6EM6Jwy0-e${(e>&<UPkq3p<cXA6%znbe!S%RJUaEHLA^AyZlqMDw zrb>6VH(Nt(*~qQJv0FF%qeg$e(KyA*B=im-2z<G>e{_r!^rcfl87O$b@$GKTW5KIW zJNsNZiwf{RA_l;wkdHu{CuBHN#xjqdYsJcVEwmqz?mlB<iEdNMbh=lwaAhDO0X`=g zHJuI=1qjU`38ZSCy`oWhGv2Q@I{`#U)oNQ>*99L!0yxKO`v>^ov#c;+FFG(P1Gp54 z>otxi)bWT+;#cecf-@#{iyt(e;I;Y#5qOOfV~6I&=}){f9C*sFiE`2=EwQY3gRn2@ zVBhq1h^Dsb<-BHi*-gUUNzx|!%Yu5a<A<(!u$dlbF@uC#3lP{ZqJWw4Sj(Wudu@NN zAyWMn$t{q+2CvHIla|r;Hb-*s>9vYCX7aTejtHoP1~`TW?S)9v0;=t%`Esmgsqjm^ z`(#u;-WgD*fgT7kGzv|68rC`IO&`3vU;=Z+4(<%suRBeAZi+%d2;Xr;Q89Mx4f7R% z&Qs(E*bJRazS}Mw8whC{v?M~WMLqjz2%*<tU>}Z-EV+<uoiZaB5ve${fdKCcu-ETB z)h)#P91se_l8ar&7>~D1<alo?u+hiWwgS+O&S|R*donCm84C*wisKcG@$nY_n<K@_ z&}xe%{?VBS<OU{PXiEE4re5|Ww9E{!N&sfcU1(#<@G++l(nw6{-Zm1HcyWae!qCX; zEZ-v?vap^i9VczFs;60RpHJvJrszr=P^V)yz`4l@txN-ZyTZ%|uYZJY)_GpNw@SAl zqb_)2J|{)~!m2EI1>^esfN)hvpbSMwW&iUMCJ()msvhNB0NJ$zuojPAKWHbCu{Xt; zfYZ4TBz237qxj8y#KOu-wU@e<7kbuYGsfalFORGmo-EO~qC}5nd=zJf1&}O($pVRv zR+IcVb+KMN&(Sa|5Sw86QYP~tx^^s=A){^V=Jds({MPz$Kew>?Z7Viy@;qLN*L)3k z_J(hU%aCZkhiQwykZ#q!msI1y`GUXHi_v)W*Z*Ds3?~pA0H*y3Fk2T$G*2@Ir#XoP z=a8W7#IxlZxHB%U%;zRFGy-naO0K-?89X1plrJy%UEAB%Z1{GB5<lZJ$C)zAOi;1? zqmBeHpQ$Kcj=ZX{Lf8D|)lQky;i8OLNff1EpAxg3=M>r$>7(OBeTO2a?3!(&LIs3T z4^YzZG3^QtZ+d<P_snQCMk#%nIB$c{ppqt15HbY>iCzz2K-2Md<*RtGHbD1spW6;c zUy1pSC2<=&`0O^Z%drK=V!OGJ2>1Uay{)nt>q~D_R@O20tsbf2^mm)sxH&;!2cG+! z3<^(GSg6*yTr2_f7cLCeXbhz~2&|nZb;`$noy2AMvSS=(T!YdpofuzRWY?JF#LF%- zPitw?jf`d&tPi1U<%e_C;}|x$Kk)6Zaa?dn-}Wj{bDFiUp&)?)7}9C3Dik(xi`*Im zdDY3-CgEeAdc=ykecY!KcjqX)1n6G-hBPx2wl<h1I<|4-On!9r`d#GwOP1H+FirBK z+;MYdE$#O{8=1luv}f6y=y~@U1$fsMCv=lN+)b`6KLp3(+4h#P&(YWNq3$SJN6V38 zem56mC|G0gJ6L1+7jSuyo3%IKpVOH<zncY#K1zkmGC_<2!5T$u(Qn7Vj)LFp1fUl3 zHh_|3`MM^1<vzzgLBR`3(4*u;F-|p=$ITCo+1fv?a|k*Op{<#4Hrb1ex!&Deb}^4q zxqlqe%2(sXOkjejw>^&Ev{}-u$+zkUNUh~xzNRv*j9jYv!n1>g1y3?!m;XJ=r~iSM zsxQj>c-}m=6C82_^W^zpr(WiyX9v&vCz}<cXo7=8r}|DBwE!t9B19P=x-q7kW;8EG zv}DCp4T!xsA*UQhjkSL*3T+phx}Tpa0Ncc9g)LK~ok^oOI)I$tp{AR<QMM}6+yhaH zu%M3_Kf!#@c}xN*z`11VMZsLjRZ}G<#?*Fs369Kq%S-~0(br=IjuKj#V1&!2bFYkw z(38erz7Oc?&0$Vm6xAw7YMo5(#<`QiY$BXpVqU3kDb0?(c&@~=j;@%vzRf&ye8_Cn z&M&}MUto}7pc8`xAtXaRF^rLugY!+^kziR<=1Uj4#K2M}AISVqUK7HA3}rQ@58D@M zTYVJeRc&lrRko8uwMrGlKOfQ*%OdSwcSTT`^_gMHW%$;cjN-@8$Wk}LZKNQ$))40M z@)dEXtPo-<_2nf13MD&bKjmGK2s+)FOoeK9#9<*|xKvsyhM&I)>$;7i)JJP-Ksp3k zu}gS50WQVUF(?1`T1i$r+fBnaJrZ5ery)-nH-YrKh;0I9z8Vuh3GYdThqUda3eap0 zQ{4((BGeTYl2o&k*aW7M0&={l_mNgU#&L*SR)6kOg3p+6I5riHF&J?YN<pQL%fH-7 zj%_X4kO-n1qQ3{MVZWh7bR#;wQ7{q$V<!7PZYEm2L?#E4#<I_Pu}>aFX>%5wk1^z} z4FU@!bUYp#wJ=Itc^)6J7LAqSX?WoBp4%wUEhj0`4Igs$^Ze*?BLkayr>oxBD0~wB zqTC2hyR#dKegM_P!-h{65_2bZU$2V7i#?Y8j8dPS`027B%;Y{eDm5X-5ck1E7w2ut zW(mgjsJL<rQy;L#u*5Djk=Kxnjp7Xh!xD;F08^fqj)-VPXI;^FHh^~=!>U_zDAT9I zLvJMh`?KAMCY-+KQa6WzdhOM>Kap1`hco-nz*{tzT~v<ax@#CsMA-VuNW6Y&udm#C zm+=Z0*~JVcUfaw6<uGdw)bVFIWjkO*h=OTB&0}nrt*`B1(~U)DZ1bj5pEwy*EC#9^ z0mRmyz>Xkx6``s_<(mn#ayK<pA0qHf)o`%DNH@bAM>RtAgLn66(;uMF*Ciuk=?G`H zT<X}Al&v~~xrd_tV=54XqmhG<J4p`7*M5bDez~?nhC?a;Tkyl_ZPs#YQUWy}{(^<? z@c*gRS5RrwVxi6XJnv30qE{@@UyOBk*mzC_@A*Kd6g;>4DebM_=0W>1=32<inqq_e z0^G(0xiej63Uuii2~Uu#{x{6mSbuS*u+3IhmU(|7GD%5qQyrU&rv4AQGh)@d?k~5{ zf|?v^3qw%E>K>~H0>o~mBb(NhAsogIK3Yo``Pgq_)Ql0~wNcV%mG~-(HhuT)QzVia zWrtlH*ZpydI982BioA+-cMHlU?rhdxeo3*FCYPmy=i=^IPshkO^^$p-3~Uq4u;z*B z10lSeYX3pxQ0anI^{yxw*tlpCAL<7Pvuh?M$)DfkD5N~iu8n?}L<m<|R?{velJ8H) zjnjoX+19S_&Q#mJ8n}{%!j6uw0imq%Yom@$MQIjF4ggZUIaaJV3sod6*elNu8S%88 z`Dzy$4&~uv!d=8l0c4CW{-QouS%v+>=M6W<{jWNd9lb(JWg-^#*^Rs{)|_L}+DZ8* z24k63U-p-F|M#dr;kfP&kH{et^pNoyyF2N6BMfz4NZnlhSd?8-B)pf~DAEK~X?@mL z7$_s8<fLr<)?>dQD?zGc=j)IP1EHwgA#!iLs^ydg{hSTn#Qv3eeDwZ2K}5CnG*P)) z;-HvrrT3oOxc$BPDPN+L?YF=lUM(j>;xrt!0!HNTE28?*VhihPfvqK7INy7J1UlVn zMTC<m)YQ}jI)*BM?HS+~fVfZ9wh_cm!fVWAnb`iboyiGuqr20q=ZvSE20~|{S)nYC zkkMGSLaLM&_bCM76Hz@@U(Uwr=v4eKY7grYZAOo`nvLjeD{5S}Ge8JpQ5+&Th@4Z; zoWrX0kIM0Uy_>D*jnZlp<dpAPY1v>7YT<O4*x_jWHjPP5cAYmL7&3w*U2*zrq6jp7 zr_>oO86ORrZa(xd5EKv}|HMU7s*>JhMeaSce6z&a&5aGS<n9eXl@z{6YhE)EjwmY1 zuf(Ivy@c^}%8b6Rv`i6H!^V4N0>7m7zagd$$_wIi-_>P|`ZPS&4BG<2d+VQ!%^11j z)QM^jv5hpBh<7ajDmFJaPi|+j6{6wD06kzSB@s03z>%9_@)x33t6H4S{FznmefKjf z^DDsdA^#;s0U=bqqKNhu5HMtR(kCQ<+<P>drwW?6L}6A}53WfoT9N1cmJv1}GHxRS zuI0Q3LLdhb6O}<&kOQ$Z&<QnCpg{{Xf)b|++4D_{@~94`<C>T0mbblZ)4hs_?k-H3 zxYVvQp#IyS4kLB@uLSh)n{<QwUIZ;jv|KY1#)Oz$Yz>Twk2n9dmt}2ZqeaMisjn@5 z>bkufZ(dk=O^K6dH2|=INIbcw4AQdX!kw|ESf(cbe}0uwVv>2OK|xq@XUGyM2(oZX zX4tugl|;%=N|ffeQSiA*DX7fhzRWiKnm99?&t{a#j0oU>a<K(SSy|Q?EzNRO0Ve-g zAx{784YkJK(e!fCviTPK;dWj$RD|KtUa-7Qt#&J~Go?_bPal!H?_cwo9?%O4{@J{% z+AQgiKxQpeSoAxsJk+N7k1}UwF%JKFrElOd=N1|f2LBrc)8;*OVGn4kc`zuW!J@aH zXoXwt(k$dSZ`U(Vo~cbkQju3S=3F4Jp)=sva(h<$@QWc)ti;KC%rff5H8*%yPz7OB zxzn-<{J#)I$%tW3GP_t0tkkpYZd4?%K}b%*l1D-S(F^*B-u*CO1~kXO`6|8A5NLI_ z|I5sITyqSl)l+$E2)?Z^z2M^X4bAPWCmrAxFUaWOl{;=m_luEFChmWJyn`Km26)f+ z;4gta5{hy6a3YczSn1|8u1xrw08kf9!|7C3WYX&A?;@b&v{T_>vLg5~x}9$)HwV*h z78X4*IK!~6(+Z{^Dagx9VG!L^;ieQK(9UTM4q6@T3b-y@JMq~sa6nv*{F|Ra$mpv` zb4*TF@3~F>|H%(6A)N~>U;0ou9tATOb)1)AjJm)Gy4#IcRcahRQ9i8dQ|@wYM+y@4 zJ9`pvx)JP-$_0Zk)GM+l@h!;v`>aHLug?TA%Lh~sC~dVlAEl2*B_yp?pnpIFM3VGZ zKXmm{``>LnK&Ko6NMn}=5GI*M&gZ?$WZNtYF%`;l@#Km#zMk#R%__Y_<`=zq6Jix8 zUGWR<rtZ27etGprzxh}qgHnq;B~sOco<xfDQ3eSAU>G;8q~8d=pSjmtW0j9}2UVJW zjYWwPErZ!u6oHU}P*(K$%8-)CA~v(R<E{Y<E0sUa7eq9k1^*V8a*Vi4?)Fw|6)*Dx zUL^nk06oKS{X5$gH&SAXH+8fi<$20y_Ms-5p!>`<Ohjw~PgUh^7{`LZ$59#!z25^Q z?EZI*($EI~7W8LcU0YquO{1PjU`7HeJN_6-x<f&Q8e$w=7rK|D&zsK2>D!01v||0q zK&(n5ZZQzCQwN<QA1<ftj`v><Lq9PhPm*bLe2~{!Ere?!dh3cyw%>pyD0|9Pf^)Lm zG|u~Ee6guumRc5~)yekdtNqxqMYEA96YBR^K>jy22GdpRt@;^}k7%}W<+hd18>bi> zdX<haLc%DX60C-YK1Zn2Tg%+*Pkn^dh$!N&6`q-k!MM~D+`k`YW~&^+3HHR2S$?Y@ z|6S@)?td3Pueej#@E;AY#0h;X$45x6oPH4hC#81p)v=|&pXFzgrq4?MVVBoZL_d4} e(#CE)zm>B3XGki_ae|2k{3*+;gG*&izWhHV#J>Ol literal 0 HcmV?d00001 diff --git a/Lab4/EXO1/settings.gradle.kts b/Lab4/settings.gradle.kts similarity index 100% rename from Lab4/EXO1/settings.gradle.kts rename to Lab4/settings.gradle.kts -- GitLab