From d7b0481abd873c94b7508c3586bc4620e3c39b4c Mon Sep 17 00:00:00 2001 From: lihongwei Date: Tue, 26 Nov 2024 14:55:38 +0800 Subject: [PATCH] =?UTF-8?q?V1.0.0=EF=BC=881=EF=BC=89=EF=BC=8C=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=90=8D=E6=94=B9=E4=B8=BAMobile=20Keyboard=EF=BC=8C?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/VibeKeyboard.jks | Bin 0 -> 2556 bytes app/build.gradle.kts | 7 +- app/keystore.properties | 6 + app/proguard-rules.pro | 17 ++- app/src/main/AndroidManifest.xml | 6 +- .../Activity/CategoryActivity.java | 5 +- .../Activity/DownloadActivity.java | 20 ++- .../vibekeyboard/Activity/MainActivity.java | 21 +-- .../vibekeyboard/Activity/SearchActivity.java | 2 + .../vibekeyboard/Activity/SplashActivity.java | 20 +-- .../vibekeyboard/Activity/WriteActivity.java | 21 +++ .../Adapter/CategoryRecyclerViewAdapter.java | 8 +- .../Adapter/DownlaodRecyclerViewAdapter.java | 7 +- .../Adapter/FavoriteRecyclerViewAdapter.java | 8 +- .../Adapter/HomeRecyclerViewAdapter.java | 8 +- .../Adapter/HomeViewPager2Adapter.java | 14 +- .../Adapter/SearchRecyclerViewAdapter.java | 8 +- .../com/key/vibekeyboard/AppApplication.java | 2 + .../Dialog/PermissionRequestDialog.java | 49 ++++-- .../Dialog/RecommendedDialog.java | 10 +- .../Fragment/FavoriteFragment.java | 72 +++++---- .../vibekeyboard/Fragment/HomeFragment.java | 70 ++++++++- .../Keyboard/CustomViewConfig.java | 13 +- .../Keyboard/KeyboardService.java | 32 ++-- .../com/key/vibekeyboard/Room/MyDatabase.java | 4 +- .../com/key/vibekeyboard/Utils/Mytool.java | 50 +++++- app/src/main/res/drawable/all.xml | 30 ++++ .../main/res/drawable/circle_indicator.xml | 8 + .../drawable/circle_indicator_selected.xml | 8 + app/src/main/res/drawable/collection.xml | 27 ++++ .../main/res/drawable/collection_select.xml | 27 ++++ .../main/res/drawable/edit_text_border.xml | 8 + app/src/main/res/drawable/home.xml | 25 +++ app/src/main/res/drawable/home_select.xml | 25 +++ app/src/main/res/drawable/setting.xml | 18 +++ app/src/main/res/drawable/setting_select.xml | 18 +++ .../main/res/drawable/un_rounded_corners.xml | 2 +- app/src/main/res/layout/activity_category.xml | 18 ++- app/src/main/res/layout/activity_download.xml | 30 ++-- app/src/main/res/layout/activity_search.xml | 41 ++++- app/src/main/res/layout/activity_splash.xml | 10 +- app/src/main/res/layout/activity_write.xml | 45 ++++++ .../main/res/layout/category_tab_custom.xml | 1 + app/src/main/res/layout/dialog_permission.xml | 143 ++++++++++-------- .../main/res/layout/dialog_recommended.xml | 19 ++- app/src/main/res/layout/fragment_category.xml | 1 - app/src/main/res/layout/fragment_favorite.xml | 33 +++- app/src/main/res/layout/fragment_home.xml | 40 +++-- app/src/main/res/layout/fragment_setting.xml | 7 +- .../main/res/layout/home_recycler_item.xml | 3 +- .../main/res/layout/home_viewpager2_item.xml | 5 +- .../main/res/mipmap-hdpi/favorite_back.png | Bin 0 -> 95263 bytes app/src/main/res/values/strings.xml | 16 +- 53 files changed, 848 insertions(+), 240 deletions(-) create mode 100644 app/VibeKeyboard.jks create mode 100644 app/keystore.properties create mode 100644 app/src/main/java/com/key/vibekeyboard/Activity/WriteActivity.java create mode 100644 app/src/main/res/drawable/all.xml create mode 100644 app/src/main/res/drawable/circle_indicator.xml create mode 100644 app/src/main/res/drawable/circle_indicator_selected.xml create mode 100644 app/src/main/res/drawable/collection.xml create mode 100644 app/src/main/res/drawable/collection_select.xml create mode 100644 app/src/main/res/drawable/edit_text_border.xml create mode 100644 app/src/main/res/drawable/home.xml create mode 100644 app/src/main/res/drawable/home_select.xml create mode 100644 app/src/main/res/drawable/setting.xml create mode 100644 app/src/main/res/drawable/setting_select.xml create mode 100644 app/src/main/res/layout/activity_write.xml create mode 100644 app/src/main/res/mipmap-hdpi/favorite_back.png diff --git a/app/VibeKeyboard.jks b/app/VibeKeyboard.jks new file mode 100644 index 0000000000000000000000000000000000000000..65fcc44ded43ab51b414207bc8c1e6e2fc45e194 GIT binary patch literal 2556 zcma)8XH=655=}xv?}j3_fFK|sUntTPDFz{c5NG~pX_8s5ZU%Nl%%-lP3=il5j0D)l_0;T~746kV!E{AG{?y!LAz*z)_ z1So+a_JocE2(ae=YQf$?39#}Ly7(jtXqo<2F*AZ8Sp=BM33&~$|D%Ah049L^Kad#^ zgTlj@S`2S|$(sqkA@xdANFtO5B{}tECDBtu07`)N0K+88!t4FBDjXe0_#K0+mRo&+qmc|rJhqGH@UZ*! zk^51};_{vLBhmTA6c>sUp4b*-z!5sENuamMRkD+CxV2omnz2lP!Cbe((2xApjbQ)5*D z);B1i#)E2-YFRyXz^6o9|vXL3z*i(ap6=_!gUeY}^P9&O?8jv%(O7Z=p>MSabgeG9sD;o5QIvv;Oo zjz`sSL6d`OxAGOK!I!Fy!@}=au9iq(JHODRjM%{xzG2&>3>#M&)3KEo4@*l#zq{;Q zeH;*QNOjs&+(XH54jO1G6VEF$-Pn?#J*eFHw5%62voy6~n%no_|zw_Y*kgki`9R`*;FSE{=!-vX8PvA9wX z9sIYZNbWojN$eg5UFLx4jn=3rP_tiVA1vH;E%Nt|aNDZZzn4l`9@+jDQ>+kkey*JM zt}yTy?`pz^C5e0>{Q#{PJfUc>&l*!0Ql~A^s=Bx$CSBhmR#mRq=25CQt9w>^dJHS8 z0F9;+{m$b;vXd4#i1rnEEG#$HZ>KnaD|44G`=gSBgwANTf zfQ{DV=u*;FsNk7EkD&u8N!=Y|fp90EUPDu5vkKmWX%`}V!lbSnr_G&_$kP2uF-D@G5s@#g$U9*o9EcxGnlFOX=P zyHOC@m=p*%0TtO)uN`F2{p4pp?Aw0!;-`~gnLL==?CKJ)CrXXEMg+f?Ursc$Dk}OA z7f0Rx{-OfMVfk*S-|S*Wq`Q+mp&qJ5J=Wv+z{nV3rj`Z3%DJBZs9cTw6dJxSx!ESp z%Bkol<=lXgJy14|Zln%X>SYg}4sFenTK&<#7d7rC`hq;1qIdTq$8pm~@u=8nRTeUn z^0k94Be$bED~m8O3zHnq!)*)EA(cf`a?Ng}svAFP@cjG5EeXlmeu{rly7%?hY0p@e z-1wf`vhx=aQ_j{iz9Z4OpOT#MiLYJ4xSJ_|i4fxb);CbPAjWC za7vh6f4+7so}bh=TekDdRFV9{4cAvpsG=|o3A8W){g0Fz4f}JBvJtBLnBTt(=8Pww zii{!+0m(mh$pA+RoJW9gAV-i5$PVOm5?oF`j~UzP?EUTow{cg_7vU1nWBRLs z(n{U@0XvWCW{gZ&N5DgFY`n!Z!U)+SAvFVLb{%BB)Qn$^(Bn>8?#+}SH0ioEdL44U zq?$6l7^07t&gB`f#q7$!j8>{v2LG}_dqZg-B{I0bboOe(Tiy-JD=}Sep0eIRgiJSo ztUT>>=w@p2%ChtqabPuAB}=EWQe(g=oJJnmP$9%=E<0K~;b4_{^>__8jEd6yA(7R) zCeb-CB(kE*iCrC~$Sm;qDmff-JDpLKZUL#({c-h%L4(6asQ(-d6bSu_tQz+|f?mK1}VBQ`h_+P_Hl zUvkLa=CPT*z*v~35>ekA%j~adjokOW;G4te z!|Gv9q@a!BC#M$dH0(fy6LKkIZ-N^|6}SF2=$)wTHJ*7E6ez}SQt?v?7ZUt>Ds zglqX5t#>djCbpc%GW`q}l+)I7j~!QsU-h4bO;ksTa%q>mMq7B_0u-0)!#W@lDIqU= zmP$p=$PH|C;h3vXO7g)6Ti-A36geIY>^Eg2+8K2@j0U$t0w)D$pt#Rp9nVme$HjH_ z3Jty3Fs948@VCWXlIpHlNKljg#M;3owZW!VLLyZ%(7$chYl*%YU^^o?{%Wjd_u9gb z4djD%N@=8b2J?is@hzYupDJ(SiZ}kQq$iWn+|DO-m%?ZGbW-kj zq)u8k@yR9gOzEOZ9cNit;a)RNE2p|%_2D3sFmyl9P_f; +} +-keep class com.key.vibekeyboard.Room.MyDatabase { *; } +-keep class com.key.vibekeyboard.Room.WallpaperInfo { *; } +-keep class com.key.vibekeyboard.Room.WallpaperInfoDao { *; } +-keep class com.key.vibekeyboard.Room.Category { *; } +-keep class com.omicronapplications.** { *; } +-keep class net.sf.sevenzipjbinding.** { *; } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4feab5b..9f463e3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,10 +16,12 @@ android:supportsRtl="true" android:theme="@style/Theme.KeyboardDemo" tools:targetApi="31"> + - + android:exported="false" /> diff --git a/app/src/main/java/com/key/vibekeyboard/Activity/CategoryActivity.java b/app/src/main/java/com/key/vibekeyboard/Activity/CategoryActivity.java index dfd6eca..589e42e 100644 --- a/app/src/main/java/com/key/vibekeyboard/Activity/CategoryActivity.java +++ b/app/src/main/java/com/key/vibekeyboard/Activity/CategoryActivity.java @@ -54,7 +54,10 @@ public class CategoryActivity extends AppCompatActivity { TextView textView = customView.findViewById(R.id.category_tab_custom_title); Category category = categories.get(position); String dir = category.getClassName(); - textView.setText(dir.substring(dir.lastIndexOf("_") + 1)); + String text = dir.substring(dir.lastIndexOf("_") + 1); + text = text.substring(0, 1).toUpperCase() + text.substring(1); // 首字母大写 + textView.setText(text); + }).attach(); diff --git a/app/src/main/java/com/key/vibekeyboard/Activity/DownloadActivity.java b/app/src/main/java/com/key/vibekeyboard/Activity/DownloadActivity.java index fff7922..7c467d5 100644 --- a/app/src/main/java/com/key/vibekeyboard/Activity/DownloadActivity.java +++ b/app/src/main/java/com/key/vibekeyboard/Activity/DownloadActivity.java @@ -1,6 +1,7 @@ package com.key.vibekeyboard.Activity; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import android.view.View; @@ -61,7 +62,6 @@ public class DownloadActivity extends AppCompatActivity { binding = null; } - private void initData() { Intent intent = getIntent(); WallpaperInfo wallpaperInfo = intent.getParcelableExtra("wallpaperInfo"); @@ -79,6 +79,8 @@ public class DownloadActivity extends AppCompatActivity { Log.d("DownloadActivity", "wallpaperInfo: " + wallpaperInfo); + binding.downloadTitle.setText(wallpaperInfo.title); + DownlaodRecyclerViewAdapter adapter = new DownlaodRecyclerViewAdapter(this, wallpaperInfo, list); binding.downloadRecycler.setAdapter(adapter); binding.downloadRecycler.setLayoutManager(new GridLayoutManager(this, 2)); @@ -114,8 +116,8 @@ public class DownloadActivity extends AppCompatActivity { if (wallpaperInfo.getPreview() != null) { // 应用圆角变换 RequestOptions options = new RequestOptions() - .placeholder(R.drawable.ic_launcher_background) - .error(R.drawable.ic_launcher_background) + .placeholder(R.mipmap.splash) + .error(R.mipmap.splash) .transform(new CenterCrop()) .transform(new RoundedCorners(16)); // 设置圆角度数 @@ -124,7 +126,7 @@ public class DownloadActivity extends AppCompatActivity { .apply(options) .into(binding.downloadImage); } else { - binding.downloadImage.setImageResource(R.drawable.ic_launcher_foreground); + binding.downloadImage.setImageResource(R.mipmap.splash); } unzipPath = getCacheDir() + "/" + name; @@ -170,7 +172,14 @@ public class DownloadActivity extends AppCompatActivity { if (successful) { Mytool.unZip(this, unzipPath, resource, (successful1, resDirPath) -> { if (successful1) { + // 将路径存储到 SharedPreferences + SharedPreferences sharedPreferences = getSharedPreferences("keyboard_prefs", MODE_PRIVATE); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putString("wallpaper_path", resDirPath); + editor.apply(); // 使用 apply() 异步保存 + StaticValue.PATH = resDirPath; + if (otherdata != null) { otherdata.setPath(resDirPath); otherdata.setDownloaded(true); @@ -182,10 +191,13 @@ public class DownloadActivity extends AppCompatActivity { Toast.makeText(DownloadActivity.this, "Decompression failure", Toast.LENGTH_SHORT).show(); }); } + // 解压完成,隐藏进度条 runOnUiThread(() -> { progressBar.setVisibility(View.GONE); view.setVisibility(View.GONE); + Intent intent = new Intent(DownloadActivity.this, WriteActivity.class); + startActivity(intent); }); }); } else { diff --git a/app/src/main/java/com/key/vibekeyboard/Activity/MainActivity.java b/app/src/main/java/com/key/vibekeyboard/Activity/MainActivity.java index c79e952..3b05b7b 100644 --- a/app/src/main/java/com/key/vibekeyboard/Activity/MainActivity.java +++ b/app/src/main/java/com/key/vibekeyboard/Activity/MainActivity.java @@ -11,6 +11,7 @@ import com.key.vibekeyboard.Adapter.MainViewpager2Adapter; import com.key.vibekeyboard.AppApplication; import com.key.vibekeyboard.Dialog.PermissionRequestDialog; import com.key.vibekeyboard.Dialog.RecommendedDialog; +import com.key.vibekeyboard.R; import com.key.vibekeyboard.Room.Category; import com.key.vibekeyboard.Room.WallpaperInfo; import com.key.vibekeyboard.Utils.Mytool; @@ -52,7 +53,7 @@ public class MainActivity extends AppCompatActivity { showPermissionDialog(); // 否则显示权限请求对话框 } - binding.mainViewpager.setUserInputEnabled(false);//禁止页面左右滑动 +// binding.mainViewpager.setUserInputEnabled(false);//禁止页面左右滑动 // 初始化 TabLayout(标签栏) tabLayout(); @@ -83,11 +84,11 @@ public class MainActivity extends AppCompatActivity { // 设置默认的图标,未选中状态的图标 if (position == 0) { - tabBinding.iconCustom.setImageResource(android.R.drawable.ic_menu_camera); // 第一个 Tab 图标 + tabBinding.iconCustom.setImageResource(R.drawable.home_select); // 第一个 Tab 图标 } else if (position == 1) { - tabBinding.iconCustom.setImageResource(android.R.drawable.ic_menu_agenda); // 第二个 Tab 图标 + tabBinding.iconCustom.setImageResource(R.drawable.collection); // 第二个 Tab 图标 } else { - tabBinding.iconCustom.setImageResource(android.R.drawable.ic_menu_preferences); // 第三个 Tab 图标 + tabBinding.iconCustom.setImageResource(R.drawable.setting); // 第三个 Tab 图标 } }).attach(); // 绑定 TabLayout 和 ViewPager @@ -99,11 +100,11 @@ public class MainActivity extends AppCompatActivity { MainTabCustomBinding tabBinding = MainTabCustomBinding.bind(Objects.requireNonNull(tab.getCustomView())); int position = tab.getPosition(); if (position == 0) { - tabBinding.iconCustom.setImageResource(android.R.drawable.ic_menu_camera); // 选中状态的图标 + tabBinding.iconCustom.setImageResource(R.drawable.home_select); // 选中状态的图标 } else if (position == 1) { - tabBinding.iconCustom.setImageResource(android.R.drawable.ic_menu_compass); // 第二个 Tab 选中图标 + tabBinding.iconCustom.setImageResource(R.drawable.collection_select); // 第二个 Tab 选中图标 } else { - tabBinding.iconCustom.setImageResource(android.R.drawable.ic_menu_rotate); // 第三个 Tab 选中图标 + tabBinding.iconCustom.setImageResource(R.drawable.setting_select); // 第三个 Tab 选中图标 } } @@ -113,11 +114,11 @@ public class MainActivity extends AppCompatActivity { MainTabCustomBinding tabBinding = MainTabCustomBinding.bind(Objects.requireNonNull(tab.getCustomView())); int position = tab.getPosition(); if (position == 0) { - tabBinding.iconCustom.setImageResource(android.R.drawable.ic_menu_gallery); // 未选中状态的图标 + tabBinding.iconCustom.setImageResource(R.drawable.home); // 未选中状态的图标 } else if (position == 1) { - tabBinding.iconCustom.setImageResource(android.R.drawable.ic_menu_agenda); // 第二个 Tab 未选中图标 + tabBinding.iconCustom.setImageResource(R.drawable.collection); // 第二个 Tab 未选中图标 } else { - tabBinding.iconCustom.setImageResource(android.R.drawable.ic_menu_preferences); // 第三个 Tab 未选中图标 + tabBinding.iconCustom.setImageResource(R.drawable.setting); // 第三个 Tab 未选中图标 } } diff --git a/app/src/main/java/com/key/vibekeyboard/Activity/SearchActivity.java b/app/src/main/java/com/key/vibekeyboard/Activity/SearchActivity.java index 94b6e9b..3c27254 100644 --- a/app/src/main/java/com/key/vibekeyboard/Activity/SearchActivity.java +++ b/app/src/main/java/com/key/vibekeyboard/Activity/SearchActivity.java @@ -40,6 +40,8 @@ public class SearchActivity extends AppCompatActivity { binding.recyclerView.setAdapter(adapter); + binding.back.setOnClickListener(v -> finish()); + // 监听输入框内容变化 binding.searchEditText.addTextChangedListener(new TextWatcher() { @Override diff --git a/app/src/main/java/com/key/vibekeyboard/Activity/SplashActivity.java b/app/src/main/java/com/key/vibekeyboard/Activity/SplashActivity.java index 51000e8..95067bd 100644 --- a/app/src/main/java/com/key/vibekeyboard/Activity/SplashActivity.java +++ b/app/src/main/java/com/key/vibekeyboard/Activity/SplashActivity.java @@ -7,27 +7,32 @@ import android.widget.ProgressBar; import androidx.appcompat.app.AppCompatActivity; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.resource.bitmap.RoundedCorners; +import com.key.vibekeyboard.R; import com.key.vibekeyboard.databinding.ActivitySplashBinding; public class SplashActivity extends AppCompatActivity { private ActivitySplashBinding binding; - private static final long TOTAL_TIME = 110; + private static final long TOTAL_TIME = 3000; private CountDownTimer countDownTimer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // 初始化 ViewBinding binding = ActivitySplashBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); - // 获取进度条引用 ProgressBar progressBar = binding.progressBar; - // 初始化倒计时 + Glide.with(this) + .load(R.mipmap.ic_launcher_foreground) + .transform(new RoundedCorners(16)) + .into(binding.splashImage); + countDownTimer = new CountDownTimer(TOTAL_TIME, 100) { // 每100ms更新一次 @Override public void onTick(long millisUntilFinished) { @@ -38,29 +43,24 @@ public class SplashActivity extends AppCompatActivity { @Override public void onFinish() { - // 确保进度条更新至满值 progressBar.setProgress(100); - // 跳转到主界面 startMain(); } }; - // 开始倒计时 countDownTimer.start(); } - // 跳转到主界面的方法 private void startMain() { Intent intent = new Intent(SplashActivity.this, MainActivity.class); startActivity(intent); - finish(); // 结束当前 Activity + finish(); } @Override protected void onDestroy() { super.onDestroy(); - // 取消倒计时,防止内存泄漏 if (countDownTimer != null) { countDownTimer.cancel(); } diff --git a/app/src/main/java/com/key/vibekeyboard/Activity/WriteActivity.java b/app/src/main/java/com/key/vibekeyboard/Activity/WriteActivity.java new file mode 100644 index 0000000..5c82d62 --- /dev/null +++ b/app/src/main/java/com/key/vibekeyboard/Activity/WriteActivity.java @@ -0,0 +1,21 @@ +package com.key.vibekeyboard.Activity; + +import android.os.Bundle; + +import androidx.appcompat.app.AppCompatActivity; + +import com.key.vibekeyboard.databinding.ActivityWriteBinding; + +public class WriteActivity extends AppCompatActivity { + + private ActivityWriteBinding binding; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityWriteBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + binding.back.setOnClickListener(v -> finish()); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/key/vibekeyboard/Adapter/CategoryRecyclerViewAdapter.java b/app/src/main/java/com/key/vibekeyboard/Adapter/CategoryRecyclerViewAdapter.java index 2ece9d4..d9ccebf 100644 --- a/app/src/main/java/com/key/vibekeyboard/Adapter/CategoryRecyclerViewAdapter.java +++ b/app/src/main/java/com/key/vibekeyboard/Adapter/CategoryRecyclerViewAdapter.java @@ -46,13 +46,15 @@ public class CategoryRecyclerViewAdapter extends RecyclerView.Adapter limitedList = list.subList(0, Math.min(20, list.size())); + if (wallpaperInfo != null) { holder.imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, DownloadActivity.class); intent.putExtra("wallpaperInfo", wallpaperInfo); // wallpaperInfo 已经实现了 Parcelable - intent.putParcelableArrayListExtra("list", new ArrayList<>(list)); // list 中的 WallpaperInfo 对象实现了 Parcelable + intent.putParcelableArrayListExtra("list", new ArrayList<>(limitedList)); // list 中的 WallpaperInfo 对象实现了 Parcelable context.startActivity(intent); } }); @@ -63,8 +65,8 @@ public class CategoryRecyclerViewAdapter extends RecyclerView.Adapter limitedList = list.subList(0, Math.min(20, list.size())); holder.imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(downloadActivity, DownloadActivity.class); intent.putExtra("wallpaperInfo", wallpaperInfo1); // wallpaperInfo 已经实现了 Parcelable - intent.putParcelableArrayListExtra("list", new ArrayList<>(list)); // list 中的 WallpaperInfo 对象实现了 Parcelable + intent.putParcelableArrayListExtra("list", new ArrayList<>(limitedList)); // list 中的 WallpaperInfo 对象实现了 Parcelable downloadActivity.startActivity(intent); } }); // 应用圆角变换 RequestOptions options = new RequestOptions() - .placeholder(R.drawable.ic_launcher_background) - .error(R.drawable.ic_launcher_background) + .placeholder(R.mipmap.splash) + .error(R.mipmap.splash) .transform(new CenterCrop()) .transform(new RoundedCorners(16)); // 设置圆角度数 diff --git a/app/src/main/java/com/key/vibekeyboard/Adapter/FavoriteRecyclerViewAdapter.java b/app/src/main/java/com/key/vibekeyboard/Adapter/FavoriteRecyclerViewAdapter.java index e5cf876..2fc80b0 100644 --- a/app/src/main/java/com/key/vibekeyboard/Adapter/FavoriteRecyclerViewAdapter.java +++ b/app/src/main/java/com/key/vibekeyboard/Adapter/FavoriteRecyclerViewAdapter.java @@ -47,13 +47,15 @@ public class FavoriteRecyclerViewAdapter extends RecyclerView.Adapter limitedList = list.subList(0, Math.min(20, list.size())); + if (wallpaperInfo != null) { holder.imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, DownloadActivity.class); intent.putExtra("wallpaperInfo", wallpaperInfo); // wallpaperInfo 已经实现了 Parcelable - intent.putParcelableArrayListExtra("list", new ArrayList<>(list)); // list 中的 WallpaperInfo 对象实现了 Parcelable + intent.putParcelableArrayListExtra("list", new ArrayList<>(limitedList)); // list 中的 WallpaperInfo 对象实现了 Parcelable context.startActivity(intent); } }); @@ -61,8 +63,8 @@ public class FavoriteRecyclerViewAdapter extends RecyclerView.Adapter limitedList = list.subList(0, Math.min(20, list.size())); + holder.imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, DownloadActivity.class); intent.putExtra("wallpaperInfo", wallpaperInfo); // wallpaperInfo 已经实现了 Parcelable - intent.putParcelableArrayListExtra("list", new ArrayList<>(list)); // list 中的 WallpaperInfo 对象实现了 Parcelable + intent.putParcelableArrayListExtra("list", new ArrayList<>(limitedList)); // list 中的 WallpaperInfo 对象实现了 Parcelable context.startActivity(intent); } }); @@ -60,8 +62,8 @@ public class HomeRecyclerViewAdapter extends RecyclerView.Adapter { @@ -46,23 +47,26 @@ public class HomeViewPager2Adapter extends RecyclerView.Adapter list = category.getList(); WallpaperInfo categoryWallpaperInfo = category.getList().get(position); - WallpaperInfo wallpaperInfo = category.getList().get(0); // 假设只使用列表的第一个壁纸 + Random random = new Random(); + int randomIndex = random.nextInt(20); + WallpaperInfo wallpaperInfo = category.getList().get(randomIndex); + + List limitedList = list.subList(0, Math.min(20, list.size())); holder.imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, DownloadActivity.class); intent.putExtra("wallpaperInfo", wallpaperInfo); - intent.putParcelableArrayListExtra("list", new ArrayList<>(list)); + intent.putParcelableArrayListExtra("list", new ArrayList<>(limitedList)); context.startActivity(intent); } }); - // 应用圆角变换 RequestOptions options = new RequestOptions() - .placeholder(R.drawable.ic_launcher_background) - .error(R.drawable.ic_launcher_background) + .placeholder(R.mipmap.splash) + .error(R.mipmap.splash) .transform(new CenterCrop()) .transform(new RoundedCorners(16)); // 设置圆角度数 diff --git a/app/src/main/java/com/key/vibekeyboard/Adapter/SearchRecyclerViewAdapter.java b/app/src/main/java/com/key/vibekeyboard/Adapter/SearchRecyclerViewAdapter.java index d8858a1..663dd70 100644 --- a/app/src/main/java/com/key/vibekeyboard/Adapter/SearchRecyclerViewAdapter.java +++ b/app/src/main/java/com/key/vibekeyboard/Adapter/SearchRecyclerViewAdapter.java @@ -42,19 +42,21 @@ public class SearchRecyclerViewAdapter extends RecyclerView.Adapter limitedList = wallpaperList.subList(0, Math.min(20, wallpaperList.size())); + holder.imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, DownloadActivity.class); intent.putExtra("wallpaperInfo", wallpaperInfo); // wallpaperInfo 已经实现了 Parcelable - intent.putParcelableArrayListExtra("list", new ArrayList<>(wallpaperList)); // list 中的 WallpaperInfo 对象实现了 Parcelable + intent.putParcelableArrayListExtra("list", new ArrayList<>(limitedList)); // list 中的 WallpaperInfo 对象实现了 Parcelable context.startActivity(intent); } }); // 应用圆角变换 RequestOptions options = new RequestOptions() - .placeholder(R.drawable.ic_launcher_background) - .error(R.drawable.ic_launcher_background) + .placeholder(R.mipmap.splash) + .error(R.mipmap.splash) .transform(new CenterCrop()) .transform(new RoundedCorners(16)); // 设置圆角度数 diff --git a/app/src/main/java/com/key/vibekeyboard/AppApplication.java b/app/src/main/java/com/key/vibekeyboard/AppApplication.java index 162de7b..99ffe82 100644 --- a/app/src/main/java/com/key/vibekeyboard/AppApplication.java +++ b/app/src/main/java/com/key/vibekeyboard/AppApplication.java @@ -18,6 +18,8 @@ public class AppApplication extends Application { public static AppApplication instance; public static List categories; + public static final int DB_Version = 1; + public static final String DB_Name = "image_database"; @Override public void onCreate() { super.onCreate(); diff --git a/app/src/main/java/com/key/vibekeyboard/Dialog/PermissionRequestDialog.java b/app/src/main/java/com/key/vibekeyboard/Dialog/PermissionRequestDialog.java index f4b9c5c..1844322 100644 --- a/app/src/main/java/com/key/vibekeyboard/Dialog/PermissionRequestDialog.java +++ b/app/src/main/java/com/key/vibekeyboard/Dialog/PermissionRequestDialog.java @@ -3,7 +3,10 @@ package com.key.vibekeyboard.Dialog; import android.app.Dialog; import android.content.Context; import android.content.Intent; +import android.database.ContentObserver; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; @@ -16,7 +19,10 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.DialogFragment; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.key.vibekeyboard.AppApplication; +import com.key.vibekeyboard.R; import com.key.vibekeyboard.Utils.Mytool; import com.key.vibekeyboard.databinding.DialogPermissionBinding; @@ -24,11 +30,11 @@ public class PermissionRequestDialog extends DialogFragment { private DialogPermissionBinding binding; private InputMethodManager methodManager; + private ContentObserver inputMethodObserver; // 用于监听输入法变化 @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - } @Override @@ -42,25 +48,23 @@ public class PermissionRequestDialog extends DialogFragment { public void onResume() { super.onResume(); Dialog dialog = getDialog(); - setCancelable(true); // 设置为false对话框不可点击外面取消 + setCancelable(true); if (dialog != null && dialog.getWindow() != null) { Window window = dialog.getWindow(); - // 设置宽度为屏幕的 90%,高度自适应内容 window.setLayout((int) (getResources().getDisplayMetrics().widthPixels * 0.9), WindowManager.LayoutParams.WRAP_CONTENT); } - // 每次对话框显示时调用 update() update(); } - @Override - public void onPause() { - super.onPause(); - } - public void init() { methodManager = (InputMethodManager) AppApplication.instance.getSystemService(Context.INPUT_METHOD_SERVICE); + Glide.with(requireContext()) + .load(R.mipmap.ic_launcher_foreground) + .transform(new RoundedCorners(16)) + .into(binding.imageView); + binding.firstIconTextLayout.setOnClickListener(v -> { Intent intent = new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS); startActivity(intent); @@ -70,9 +74,25 @@ public class PermissionRequestDialog extends DialogFragment { methodManager.showInputMethodPicker(); }); - binding.imageView.setOnClickListener(v -> { - dismiss(); - }); + binding.imageView.setOnClickListener(v -> dismiss()); + + // 注册ContentObserver监听输入法变化 + inputMethodObserver = new ContentObserver(new Handler(Looper.getMainLooper())) { + @Override + public void onChange(boolean selfChange) { + super.onChange(selfChange); + if (Mytool.isStep1() && Mytool.isStep2()) { + dismiss(); // 条件满足,关闭对话框 + } + } + }; + + // 注册观察输入法变化 + requireContext().getContentResolver().registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.DEFAULT_INPUT_METHOD), + false, + inputMethodObserver + ); } public void update() { @@ -93,8 +113,9 @@ public class PermissionRequestDialog extends DialogFragment { @Override public void onDestroy() { super.onDestroy(); + if (inputMethodObserver != null) { + requireContext().getContentResolver().unregisterContentObserver(inputMethodObserver); + } binding = null; } } - - diff --git a/app/src/main/java/com/key/vibekeyboard/Dialog/RecommendedDialog.java b/app/src/main/java/com/key/vibekeyboard/Dialog/RecommendedDialog.java index dc429d6..a7d7d47 100644 --- a/app/src/main/java/com/key/vibekeyboard/Dialog/RecommendedDialog.java +++ b/app/src/main/java/com/key/vibekeyboard/Dialog/RecommendedDialog.java @@ -62,6 +62,8 @@ public class RecommendedDialog extends DialogFragment { int randomIndex = random.nextInt(list.size()); wallpaperInfo = list.get(randomIndex); // 获取随机的壁纸信息 + List limitedList = list.subList(0, Math.min(20, list.size())); + // 加载图像 loadImage(); @@ -73,7 +75,7 @@ public class RecommendedDialog extends DialogFragment { // 将选中的壁纸信息传递给下一个 Activity intent.putExtra("wallpaperInfo", wallpaperInfo); // wallpaperInfo 已经实现了 Parcelable // 将壁纸列表传递给下一个 Activity - intent.putParcelableArrayListExtra("list", new ArrayList<>(list)); // list 中的 WallpaperInfo 对象实现了 Parcelable + intent.putParcelableArrayListExtra("list", new ArrayList<>(limitedList)); // list 中的 WallpaperInfo 对象实现了 Parcelable dismiss(); // 关闭当前对话框 requireContext().startActivity(intent); // 启动下载界面 } @@ -86,8 +88,8 @@ public class RecommendedDialog extends DialogFragment { if (wallpaperInfo.getPreview() != null && !wallpaperInfo.getPreview().isEmpty()) { // 设置图像的加载选项 RequestOptions options = new RequestOptions() - .placeholder(R.drawable.ic_launcher_foreground) // 图片加载中的占位图 - .error(R.drawable.ic_launcher_foreground) // 图片加载失败时的备用图 + .placeholder(R.mipmap.splash) + .error(R.mipmap.splash) .transform(new CenterCrop()) // 中心裁剪,保证图片填满控件 .transform(new RoundedCorners(16)); // 设置圆角,16px @@ -99,7 +101,7 @@ public class RecommendedDialog extends DialogFragment { .into(binding.imageView); // 设置到 ImageView 上显示 } else { // 如果预览图 URL 为空,显示默认图像 - binding.imageView.setImageResource(R.drawable.ic_launcher_background); // 默认图像 + binding.imageView.setImageResource(R.mipmap.splash); // 默认图像 } } diff --git a/app/src/main/java/com/key/vibekeyboard/Fragment/FavoriteFragment.java b/app/src/main/java/com/key/vibekeyboard/Fragment/FavoriteFragment.java index d35bf35..f2e7f5a 100644 --- a/app/src/main/java/com/key/vibekeyboard/Fragment/FavoriteFragment.java +++ b/app/src/main/java/com/key/vibekeyboard/Fragment/FavoriteFragment.java @@ -17,48 +17,54 @@ import com.key.vibekeyboard.Utils.ItemDecoration; import com.key.vibekeyboard.ViewModel.FavoriteViewModel; import com.key.vibekeyboard.databinding.FragmentFavoriteBinding; +import java.util.ArrayList; import java.util.List; - public class FavoriteFragment extends Fragment { +public class FavoriteFragment extends Fragment { - private FragmentFavoriteBinding binding; - private FavoriteRecyclerViewAdapter adapter; + private FragmentFavoriteBinding binding; + private FavoriteRecyclerViewAdapter adapter; + private final List wallpaperInfoList = new ArrayList<>(); - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - binding = FragmentFavoriteBinding.inflate(inflater, container, false); + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentFavoriteBinding.inflate(inflater, container, false); - // 初始化 RecyclerView 和 LayoutManager - binding.favoriteRecyclerview.setLayoutManager(new GridLayoutManager(getContext(), 2)); - binding.favoriteRecyclerview.addItemDecoration(new ItemDecoration(16, 19, 10)); + adapter = new FavoriteRecyclerViewAdapter(requireContext(), wallpaperInfoList); + binding.favoriteRecyclerview.setAdapter(adapter); - // 获取 ViewModel 实例 - FavoriteViewModel favoriteViewModel = new ViewModelProvider(this).get(FavoriteViewModel.class); + // 初始化 RecyclerView 和 LayoutManager + binding.favoriteRecyclerview.setLayoutManager(new GridLayoutManager(getContext(), 2)); + binding.favoriteRecyclerview.addItemDecoration(new ItemDecoration(16, 19, 10)); - // 监听 LiveData 的变化并更新 RecyclerView - favoriteViewModel.getFavoriteList().observe(getViewLifecycleOwner(), new Observer>() { - @Override - public void onChanged(List wallpaperInfoList) { - // 更新 RecyclerView 的 Adapter - if (adapter == null) { - adapter = new FavoriteRecyclerViewAdapter(requireContext(), wallpaperInfoList); - binding.favoriteRecyclerview.setAdapter(adapter); - } else { - // 更新现有 Adapter 数据 - adapter.updateList(wallpaperInfoList); - } + // 获取 ViewModel 实例 + FavoriteViewModel favoriteViewModel = new ViewModelProvider(this).get(FavoriteViewModel.class); + + // 监听 LiveData 的变化并更新 RecyclerView + favoriteViewModel.getFavoriteList().observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List wallpaperInfoList) { + + if (wallpaperInfoList.isEmpty()) { + binding.backgroundImage.setVisibility(View.VISIBLE); + binding.backgroundText.setVisibility(View.VISIBLE); + } else { + binding.backgroundImage.setVisibility(View.GONE); + binding.backgroundText.setVisibility(View.GONE); } - }); + adapter.updateList(wallpaperInfoList); + } + }); - return binding.getRoot(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - binding = null; - } + return binding.getRoot(); } + @Override + public void onDestroy() { + super.onDestroy(); + binding = null; + } +} + diff --git a/app/src/main/java/com/key/vibekeyboard/Fragment/HomeFragment.java b/app/src/main/java/com/key/vibekeyboard/Fragment/HomeFragment.java index eda9878..dbcb5b2 100644 --- a/app/src/main/java/com/key/vibekeyboard/Fragment/HomeFragment.java +++ b/app/src/main/java/com/key/vibekeyboard/Fragment/HomeFragment.java @@ -12,11 +12,15 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.ImageView; +import android.widget.LinearLayout; import com.key.vibekeyboard.Activity.CategoryActivity; import com.key.vibekeyboard.Activity.SearchActivity; import com.key.vibekeyboard.Adapter.HomeRecyclerViewAdapter; import com.key.vibekeyboard.Adapter.HomeViewPager2Adapter; +import com.key.vibekeyboard.R; import com.key.vibekeyboard.Room.Category; import com.key.vibekeyboard.Utils.ItemDecoration; import com.key.vibekeyboard.Utils.Mytool; @@ -29,6 +33,7 @@ public class HomeFragment extends Fragment { private FragmentHomeBinding binding; private HomeViewPager2Adapter homeViewPager2Adapter; + private List categories; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, @@ -45,12 +50,13 @@ public class HomeFragment extends Fragment { public void initData() { // 解析Json - List categories = Mytool.parseJsonToList("keyboard.json"); + categories = Mytool.parseJsonToList("keyboard.json"); Log.d("dsd", "size" + categories.size()); // 设置ViewPager2 homeViewPager2Adapter = new HomeViewPager2Adapter(requireContext(), categories); binding.homeViewPager.setAdapter(homeViewPager2Adapter); + setupIndicators(categories.size()); // 设置RecyclerView binding.homeRecycler.setLayoutManager(new GridLayoutManager(getContext(), 2)); @@ -91,8 +97,22 @@ public class HomeFragment extends Fragment { } }); + binding.homeViewPager.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + // 移除布局监听器,避免重复执行 + binding.homeViewPager.getViewTreeObserver().removeOnGlobalLayoutListener(this); + // 动态生成圆点指示器 + setupIndicators(categories.size()); + // 初始设置选中的圆点 + updateIndicators(0); + } + }); + // 设置自动轮播功能 autoSlideImages(); + + setupViewPagerListener(); } // 自动轮播图片 @@ -118,6 +138,54 @@ public class HomeFragment extends Fragment { }, delay); } + private void setupViewPagerListener() { + binding.homeViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + + updateIndicators(position); // 更新圆点 + + } + }); + + } + + private void setupIndicators(int count) { + LinearLayout indicatorLayout = binding.indicatorLayout; + indicatorLayout.removeAllViews(); // 清空原有的圆点 + + for (int i = 0; i < count; i++) { + ImageView indicator = new ImageView(getContext()); + indicator.setImageResource(R.drawable.circle_indicator); // 默认圆点 + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + params.setMargins(8, 0, 8, 0); // 设置圆点间距 + indicator.setLayoutParams(params); + indicatorLayout.addView(indicator); + } + + // 延迟设置选中的圆点 + indicatorLayout.post(() -> updateIndicators(0)); // 设置第一个圆点为选中状态 + } + + private void updateIndicators(int position) { + LinearLayout indicatorLayout = binding.indicatorLayout; + int childCount = indicatorLayout.getChildCount(); + + for (int i = 0; i < childCount; i++) { + ImageView indicator = (ImageView) indicatorLayout.getChildAt(i); + if (i == position) { + indicator.setImageResource(R.drawable.circle_indicator_selected); // 当前页选中的圆点 + } else { + indicator.setImageResource(R.drawable.circle_indicator); // 默认圆点 + } + } + + // 强制更新布局,确保圆点大小正确 + indicatorLayout.requestLayout(); + } + @Override public void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/key/vibekeyboard/Keyboard/CustomViewConfig.java b/app/src/main/java/com/key/vibekeyboard/Keyboard/CustomViewConfig.java index fdfe0f3..fb05adc 100644 --- a/app/src/main/java/com/key/vibekeyboard/Keyboard/CustomViewConfig.java +++ b/app/src/main/java/com/key/vibekeyboard/Keyboard/CustomViewConfig.java @@ -1,10 +1,14 @@ package com.key.vibekeyboard.Keyboard; +import static android.content.Context.MODE_PRIVATE; + import android.content.Context; +import android.content.SharedPreferences; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.util.Log; import android.util.Xml; import androidx.core.content.ContextCompat; @@ -113,6 +117,7 @@ public class CustomViewConfig { return null; } BitmapDrawable bitmapDrawable = new BitmapDrawable(context.getResources(), BitmapFactory.decodeFile(filePath)); + Log.d("custom", "filePath" + filePath); return bitmapDrawable; } @@ -162,7 +167,7 @@ public class CustomViewConfig { } public void updateConfig(Context con) { - String resDirPath = StaticValue.PATH; + String resDirPath = getSavedWallpaperPath(AppApplication.getContext()); if (!resDirPath.isEmpty()) { updateKeyColor(resDirPath); BG = getBackGround(con, resDirPath); @@ -175,5 +180,11 @@ public class CustomViewConfig { } } + public String getSavedWallpaperPath(Context context) { + // 读取 SharedPreferences 中保存的路径 + SharedPreferences sharedPreferences = context.getSharedPreferences("keyboard_prefs", MODE_PRIVATE); + return sharedPreferences.getString("wallpaper_path", ""); // 如果没有保存,返回空字符串 + } + } diff --git a/app/src/main/java/com/key/vibekeyboard/Keyboard/KeyboardService.java b/app/src/main/java/com/key/vibekeyboard/Keyboard/KeyboardService.java index 358c6f5..896d1b7 100644 --- a/app/src/main/java/com/key/vibekeyboard/Keyboard/KeyboardService.java +++ b/app/src/main/java/com/key/vibekeyboard/Keyboard/KeyboardService.java @@ -33,6 +33,9 @@ public class KeyboardService extends InputMethodService implements KeyboardView. // 加载主键盘视图布局文件 View inputView = LayoutInflater.from(this).inflate(R.layout.keyboard_view, null, false); myKeyboard = inputView.findViewById(R.id.keyboardView); // 绑定键盘视图 + + setBackground(); + myKeyboard.setKeyboard(new MyKeyboard.KeyBoard(this, ViewXmls[0])); // 设置默认键盘布局 myKeyboard.setOnKeyboardActionListener(this); // 设置键盘操作监听器 // myKeyboard.setPreviewEnabled(false); // 可选项,禁用按键预览 @@ -43,6 +46,10 @@ public class KeyboardService extends InputMethodService implements KeyboardView. @Override public void onWindowShown() { super.onWindowShown(); + setBackground(); + } + + private void setBackground(){ curImeAction = getImeAction(getCurrentInputEditorInfo().imeOptions); // 获取当前的输入法动作类型 myKeyboard.updateConfigView(this, curImeAction); // 更新键盘配置视图 myKeyboard.invalidate(); // 刷新键盘视图 @@ -54,18 +61,6 @@ public class KeyboardService extends InputMethodService implements KeyboardView. return i; } - // 键被按下时调用 - @Override - public void onPress(int primaryCode) { - - } - - // 键被释放时调用 - @Override - public void onRelease(int primaryCode) { - - } - // 键盘按键被按下时调用 @Override public void onKey(int primaryCode, int[] keyCodes) { @@ -125,6 +120,19 @@ public class KeyboardService extends InputMethodService implements KeyboardView. myKeyboard.setKeyboard(new MyKeyboard.KeyBoard(this, ViewXmls[i])); // 设置新的键盘布局 } + // 键被按下时调用 + @Override + public void onPress(int primaryCode) { + + } + + // 键被释放时调用 + @Override + public void onRelease(int primaryCode) { + + } + + @Override public void onText(CharSequence text) { // 文本输入时调用(未实现) diff --git a/app/src/main/java/com/key/vibekeyboard/Room/MyDatabase.java b/app/src/main/java/com/key/vibekeyboard/Room/MyDatabase.java index dbff1d4..4871635 100644 --- a/app/src/main/java/com/key/vibekeyboard/Room/MyDatabase.java +++ b/app/src/main/java/com/key/vibekeyboard/Room/MyDatabase.java @@ -7,7 +7,7 @@ import androidx.room.RoomDatabase; import com.key.vibekeyboard.AppApplication; -@Database(entities = {WallpaperInfo.class}, version = 1, exportSchema = false) +@Database(entities = {WallpaperInfo.class}, version = AppApplication.DB_Version, exportSchema = false) public abstract class MyDatabase extends RoomDatabase { public abstract WallpaperInfoDao wallpaperInfoDao(); @@ -17,7 +17,7 @@ public abstract class MyDatabase extends RoomDatabase { public static MyDatabase getInstance() { if (INSTANCE == null) { synchronized (MyDatabase.class) { - INSTANCE = Room.databaseBuilder(AppApplication.getContext(), MyDatabase.class, "Database").build(); + INSTANCE = Room.databaseBuilder(AppApplication.getContext(), MyDatabase.class, AppApplication.DB_Name).build(); } } return INSTANCE; diff --git a/app/src/main/java/com/key/vibekeyboard/Utils/Mytool.java b/app/src/main/java/com/key/vibekeyboard/Utils/Mytool.java index 3d4a84d..030f407 100644 --- a/app/src/main/java/com/key/vibekeyboard/Utils/Mytool.java +++ b/app/src/main/java/com/key/vibekeyboard/Utils/Mytool.java @@ -8,6 +8,7 @@ import android.graphics.drawable.Drawable; import android.inputmethodservice.Keyboard; import android.os.Build; import android.provider.Settings; +import android.util.Log; import android.util.TypedValue; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; @@ -44,9 +45,11 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.OutputStream; import java.io.RandomAccessFile; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -178,26 +181,42 @@ public class Mytool { Toast.makeText(context, context.getString(R.string.app_name), Toast.LENGTH_SHORT).show(); } else { String itemFilePath = ""; + + // 使用应用的外部文件目录来存储解压后的文件 + File externalDir = context.getExternalFilesDir(null); + if (externalDir == null) { + externalDir = context.getFilesDir(); // 如果外部存储不可用,则回退到内部存储 + } + + String extractPath = new File(externalDir, "ExtractedFiles").getAbsolutePath(); // 定义一个专门的文件夹存储解压文件 + RandomAccessFile accessFile = new RandomAccessFile(resource, "r"); RandomAccessFileInStream inStream = new RandomAccessFileInStream(accessFile); IInArchive iInArchive = SevenZip.openInArchive(ArchiveFormat.SEVEN_ZIP, inStream); ISimpleInArchiveItem[] archiveItems = iInArchive.getSimpleInterface().getArchiveItems(); + // 解压每一个文件 for (int d = 0; d < archiveItems.length; d++) { ISimpleInArchiveItem simple = archiveItems[d]; - File file = new File(urlpath, simple.getPath()); + File file = new File(extractPath, simple.getPath()); // 将解压路径设置为外部存储目录 if (!simple.isFolder()) { // 如果不是文件夹,解压文件 RandomAccessFileOutStream outStream = new RandomAccessFileOutStream(new RandomAccessFile(file, "rw")); simple.extractSlow(outStream); itemFilePath = file.getPath(); // 记录解压后的文件路径 + Log.d("--------", "path: " + itemFilePath); } else { boolean mkdirs = file.mkdirs(); // 创建文件夹 } } + inStream.close(); iInArchive.close(); + + // 截取资源路径 int res = itemFilePath.indexOf("res"); String substring = itemFilePath.substring(0, res + 3); // 截取资源路径 + Log.d("--------", "substring: " + substring); + callback.onUnzipCall(true, substring); // 调用回调函数 } } @@ -227,7 +246,23 @@ public class Mytool { public boolean onResourceReady(@NonNull File resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) { // 下载成功时的回调 try { - callback.onDownloadCall(true, resource); // 调用回调方法,传递成功状态和下载的文件 + // 使用外部存储目录或内部存储目录 + File externalDir = context.getExternalFilesDir(null); + if (externalDir == null) { + externalDir = context.getFilesDir(); // 如果外部存储不可用,则回退到内部存储 + } + + // 将下载文件保存到外部存储的特定文件夹 + File downloadDir = new File(externalDir, "DownloadedFiles"); + if (!downloadDir.exists()) { + downloadDir.mkdirs(); // 创建目录 + } + + File destinationFile = new File(downloadDir, resource.getName()); + copyFile(resource, destinationFile); // 使用FileUtils来复制文件 + + callback.onDownloadCall(true, destinationFile); // 调用回调方法,传递成功状态和保存后的文件路径 + Log.d("--------", "resource: " + destinationFile); } catch (FileNotFoundException e) { throw new RuntimeException(e); // 如果捕获到FileNotFoundException异常,抛出运行时异常 } catch (IOException e) { @@ -238,6 +273,17 @@ public class Mytool { }).preload(); // 预加载文件 } + public static void copyFile(File sourceFile, File destinationFile) throws IOException { + try (InputStream in = new FileInputStream(sourceFile); + OutputStream out = new FileOutputStream(destinationFile)) { + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = in.read(buffer)) != -1) { + out.write(buffer, 0, bytesRead); + } + } + } + // 将文件内容转换为字符串 public static String fileToString(File file) throws IOException { FileInputStream fileInputStream = new FileInputStream(file); diff --git a/app/src/main/res/drawable/all.xml b/app/src/main/res/drawable/all.xml new file mode 100644 index 0000000..c39dd5f --- /dev/null +++ b/app/src/main/res/drawable/all.xml @@ -0,0 +1,30 @@ + + + + + + diff --git a/app/src/main/res/drawable/circle_indicator.xml b/app/src/main/res/drawable/circle_indicator.xml new file mode 100644 index 0000000..59ad4e9 --- /dev/null +++ b/app/src/main/res/drawable/circle_indicator.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/drawable/circle_indicator_selected.xml b/app/src/main/res/drawable/circle_indicator_selected.xml new file mode 100644 index 0000000..941c09d --- /dev/null +++ b/app/src/main/res/drawable/circle_indicator_selected.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/drawable/collection.xml b/app/src/main/res/drawable/collection.xml new file mode 100644 index 0000000..38315b6 --- /dev/null +++ b/app/src/main/res/drawable/collection.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/app/src/main/res/drawable/collection_select.xml b/app/src/main/res/drawable/collection_select.xml new file mode 100644 index 0000000..566ac09 --- /dev/null +++ b/app/src/main/res/drawable/collection_select.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/app/src/main/res/drawable/edit_text_border.xml b/app/src/main/res/drawable/edit_text_border.xml new file mode 100644 index 0000000..ea785cc --- /dev/null +++ b/app/src/main/res/drawable/edit_text_border.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/drawable/home.xml b/app/src/main/res/drawable/home.xml new file mode 100644 index 0000000..732d2b3 --- /dev/null +++ b/app/src/main/res/drawable/home.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/app/src/main/res/drawable/home_select.xml b/app/src/main/res/drawable/home_select.xml new file mode 100644 index 0000000..f86bfe5 --- /dev/null +++ b/app/src/main/res/drawable/home_select.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/app/src/main/res/drawable/setting.xml b/app/src/main/res/drawable/setting.xml new file mode 100644 index 0000000..f2330b9 --- /dev/null +++ b/app/src/main/res/drawable/setting.xml @@ -0,0 +1,18 @@ + + + + diff --git a/app/src/main/res/drawable/setting_select.xml b/app/src/main/res/drawable/setting_select.xml new file mode 100644 index 0000000..9660add --- /dev/null +++ b/app/src/main/res/drawable/setting_select.xml @@ -0,0 +1,18 @@ + + + + diff --git a/app/src/main/res/drawable/un_rounded_corners.xml b/app/src/main/res/drawable/un_rounded_corners.xml index 3922d39..e5fe793 100644 --- a/app/src/main/res/drawable/un_rounded_corners.xml +++ b/app/src/main/res/drawable/un_rounded_corners.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_category.xml b/app/src/main/res/layout/activity_category.xml index 7c6ff13..23d2e0f 100644 --- a/app/src/main/res/layout/activity_category.xml +++ b/app/src/main/res/layout/activity_category.xml @@ -11,18 +11,21 @@ android:id="@+id/category_back" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="11dp" - android:src="@android:drawable/ic_menu_revert" + android:layout_marginStart="15dp" + android:src="@drawable/back" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="@+id/category_title" + app:layout_constraintBottom_toBottomOf="@+id/category_title"/> @@ -31,10 +34,11 @@ android:id="@+id/category_search" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="11dp" + android:layout_marginEnd="15dp" android:src="@android:drawable/ic_menu_search" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="@+id/category_title" + app:layout_constraintBottom_toBottomOf="@+id/category_title" /> @@ -21,8 +22,10 @@ android:id="@+id/download_title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="11dp" + android:layout_marginTop="26dp" + android:gravity="center" android:text="love kiteen" + android:textSize="24sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -31,7 +34,8 @@ android:id="@+id/download_favorite" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="11dp" + android:layout_marginTop="26dp" + android:layout_marginEnd="15dp" android:src="@android:drawable/btn_star" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -40,14 +44,16 @@ android:id="@+id/download_image" android:layout_width="match_parent" android:layout_height="150dp" + android:layout_marginTop="15dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/download_back" /> + app:layout_constraintTop_toBottomOf="@+id/download_title" /> @@ -80,7 +87,8 @@ android:layout_marginStart="12dp" android:layout_marginTop="16dp" android:gravity="center" - android:text="Simple Keyboard" + android:text="@string/app_name" + android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/download_download" /> @@ -89,8 +97,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" + android:layout_marginEnd="5dp" android:gravity="center" - android:text="View All" + android:text="@string/view_all" + android:textStyle="bold" app:layout_constraintEnd_toStartOf="@+id/download_all" app:layout_constraintTop_toBottomOf="@+id/download_download" /> @@ -100,7 +110,7 @@ android:layout_height="wrap_content" android:layout_marginTop="16dp" android:layout_marginEnd="12dp" - android:src="@android:drawable/ic_menu_sort_by_size" + android:src="@drawable/all" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/download_download" /> @@ -127,9 +137,9 @@ android:id="@+id/view" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="#80000000" android:clickable="true" android:focusable="true" - android:background="#80000000" android:visibility="gone" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index 00bd9cc..1cbe121 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -1,16 +1,49 @@ - + + + + + android:layout_marginTop="15dp" + android:hint="@string/search" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/search_title" /> - + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/searchEditText" /> + diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml index 1785151..609e287 100644 --- a/app/src/main/res/layout/activity_splash.xml +++ b/app/src/main/res/layout/activity_splash.xml @@ -10,19 +10,21 @@ + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.388" /> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/category_tab_custom.xml b/app/src/main/res/layout/category_tab_custom.xml index 3f25072..9bbcd20 100644 --- a/app/src/main/res/layout/category_tab_custom.xml +++ b/app/src/main/res/layout/category_tab_custom.xml @@ -12,6 +12,7 @@ android:paddingTop="10dp" android:paddingEnd="12dp" android:paddingBottom="10dp" + android:textStyle="bold" android:textColor="@color/black" android:textSize="17sp" /> diff --git a/app/src/main/res/layout/dialog_permission.xml b/app/src/main/res/layout/dialog_permission.xml index 6d21320..4ca4086 100644 --- a/app/src/main/res/layout/dialog_permission.xml +++ b/app/src/main/res/layout/dialog_permission.xml @@ -3,77 +3,92 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#f0f0f0"> + android:background="#00BCD4"> - + - + - + - + - - + + - + - + - - + + + + + + + + diff --git a/app/src/main/res/layout/dialog_recommended.xml b/app/src/main/res/layout/dialog_recommended.xml index 32c2e11..6e9ef2e 100644 --- a/app/src/main/res/layout/dialog_recommended.xml +++ b/app/src/main/res/layout/dialog_recommended.xml @@ -3,24 +3,29 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/black"> + android:padding="5dp" + android:background="#00BCD4"> + android:src="@mipmap/splash" + app:layout_constraintTop_toTopOf="parent" /> @@ -22,7 +24,30 @@ android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginTop="20dp" - app:layout_constraintTop_toBottomOf="@+id/favorite_title" - app:layout_constraintBottom_toBottomOf="parent"/> + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@+id/favorite_title" /> + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 7c10027..180ee12 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -11,9 +11,11 @@ android:id="@+id/home_title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="11dp" + android:layout_marginTop="26dp" android:gravity="center" - android:text="Simple Keyboard" + android:text="@string/app_name" + android:textSize="24sp" + android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -22,21 +24,34 @@ android:id="@+id/home_search" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="11dp" + android:layout_marginEnd="15dp" android:src="@android:drawable/ic_menu_search" + app:layout_constraintBottom_toBottomOf="@+id/home_title" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="@+id/home_title" /> + + @@ -54,7 +70,9 @@ android:layout_height="wrap_content" android:layout_marginTop="16dp" android:gravity="center" - android:text="View All" + android:text="@string/view_all" + android:layout_marginEnd="5dp" + android:textStyle="bold" app:layout_constraintEnd_toStartOf="@+id/home_all" app:layout_constraintTop_toBottomOf="@+id/home_viewPager" /> @@ -62,9 +80,9 @@ android:id="@+id/home_all" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginEnd="12dp" android:layout_marginTop="16dp" - android:src="@android:drawable/ic_menu_sort_by_size" + android:layout_marginEnd="12dp" + android:src="@drawable/all" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/home_viewPager" /> @@ -73,7 +91,7 @@ android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginTop="12dp" - app:layout_constraintTop_toBottomOf="@+id/home_text1" - app:layout_constraintBottom_toBottomOf="parent"/> + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@+id/home_text1" /> diff --git a/app/src/main/res/layout/fragment_setting.xml b/app/src/main/res/layout/fragment_setting.xml index fe5961f..c56eaf0 100644 --- a/app/src/main/res/layout/fragment_setting.xml +++ b/app/src/main/res/layout/fragment_setting.xml @@ -24,7 +24,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" - android:text="Setting" + android:textStyle="bold" + android:text="@string/setting" android:textSize="24sp" /> @@ -55,7 +56,7 @@ android:layout_gravity="center_vertical" android:layout_marginStart="16dp" android:layout_weight="1" - android:text="Version" + android:text="@string/version" android:textSize="16sp" /> + android:layout_height="match_parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/home_viewpager2_item.xml b/app/src/main/res/layout/home_viewpager2_item.xml index c85bda2..752c313 100644 --- a/app/src/main/res/layout/home_viewpager2_item.xml +++ b/app/src/main/res/layout/home_viewpager2_item.xml @@ -1,12 +1,13 @@ + android:layout_height="match_parent" + android:padding="10dp"> + android:scaleType="fitXY" /> \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/favorite_back.png b/app/src/main/res/mipmap-hdpi/favorite_back.png new file mode 100644 index 0000000000000000000000000000000000000000..16b46dce08d08922097f4a0fd783ca7187d0e6f1 GIT binary patch literal 95263 zcmeEs)mt0P6K?R}l;TjF;#L7F5ZsFuN-2dvfl}OxyL)kWZ=n#}A$W0@qABh!A;ix2 zJAcKwI2XJ7%HFUR68@+0V;E8TZy|P8 zHF5(0IHdkJaFo);&Hhv3xaq0L18OE&4*wJIt>xay0RVLgq$qQO|F#;{6y@~2a8A&~ ze|eS+SV^E&N4eMUq<H7+Hl2Po+q45)DR18zigvNTtdY*x3^8MUTo`wsoi=TX# z4kdaqpY*EFt_}W^S#7It&)R~Ll$mTw|Nr#=ZSemT4%**FiOs%GJMdVO@xEjL>jI#W5uuwJvsvHmjP!vA#QS-)`9L>ajhN^W!aY^f=*3fg|h2&vN6juiZ-S zO{U_DdAX2R{NNn@l=d1XYwS^_hfCY$Zits!oKnM%bd6W!H=kgewvON4$nj;jeO4*A zvr8E0I?0UwPa2Y@puh{<0sL6SYE)LXb%?CZu||1D*Ustq z7ujStTn}E2hwLZ3NI9AzjU{D6US$0_!Z>Hhk`U`e~`VLq&?MC)gQls8EKv4kKme7tjy$xn+&%Sq-c4l`gyT&^U=ujr-hFf zs3SkedXkRkQ2bcrRkSA6hqUf^z8X?nKiuVz5cZkN_PZf_xf3m?*q=a$D7 zbxaH;|GM@_x{sbk_~ zto#NK)l*MJu@hSMRt{XN{WY$NIUL*18Lk;Crj{lqe^suh?_4oI{&=(mqD|n?eaXPh zX^aAV&237m)Q52v7?y$4^!fpO<~L`*z051Y8fcFU!)w`RgZ)K)S-L|1CeL1bZFDtG zz7~{TleQ`lP=T6V2n-17iAQ@mny;fG^*<61wMqh~0{> z82wo>j$MH*xi`e_TD%!U6r6};V6ko;Z=fE{jvIl;gp=Kfb*RVYneVxYS!o5=jCR-N zSyPpr{n@FsORlZY4DE3a!~|0AX|LyR(e-V&JIz~C?6Afi&{ZCqch>z?w4x5@Kt)>q zoTBJ5gUJmY6$OxI4>o6cqIRYIEA4{$=~5pnHFOk{+EQd2Ye->Xpuat^sgp4aPoH_Zu(euC3TP=4yQv z%_;Ih{H_7F1wYtki&jkn8v%dA(j6&73=R-3ko&Is3Zy`ztC64&u99B$#$Uas4m3gd zKb|z0nSP;v-ilmwxv1hpEMZSL zKF{}$yU~Bzj`a3?2S!~TLtekg%JbkvQ!oAXy;YV*bh^*~v8nrA>EW>=`7j+e1QtE7 zYq7S3vJuj@|HHb+zb*bP2LwtJyX*i}=gHYeJagZxUTr*AKMR`1!B$bZ7vc>PPr$PW zi9}zF!8X8?fgM{93Hd+o&akH-<6K0!?>TFv9%Ya+JL<*U6UWx;cY)i;8tL|zzP+iH z``S9_1;&Hti#i3RO7Gjiux(@KrK4(GfbzfV{=D)Q!@>00gGY3-wetTth;(NhmN&^H z+LrlczMI`V;;BsJiUzk!#IJO|E91mc3bi6`r9XA|zr3$Qb>+A<#SbPBk0@EPUI%_Sy3N zPr4vT81`_R!8f`<;=gyFQ@G&*VL^&F3B-fh+^ce(t4D!El zioe40S3ClOniR2TInd*ys;cTKkiPbLW{~M;;lsVd`d6POay)vQod^`juuHJvK1(Jl1^zpG8K&YUNLOHrhWhEI6@9!W=s4BAzQlW z$by>|5%k@z4HzOwyA~Ghh&zwEi6(jMD1iRiH&`c(7n5>l*pQ>W<`Q(DD7kE(^HjpT6$2Gf4^=%t9;8p1)K|;z z7XK%QU%F9Y;#|5G9$nxAhqfUlyM5Niu^C!iR2ZH)kpKFzQ|oDV74$M@d_d`h8S4T{7x!+*GoveF?wKe?D~SZfHAZsHzfL3U3~K z0LYWZpg%Fm;c{yz<4nhrZD})vO{?cGjz1Ri*30vh9sq%!!w}1Ch;ZzE3dj|^>LE63 zCFj|7mBtLd&YgPLdYoen>sbCrmn~`73M}TI043qIb-h{YTdiLX-XP!DT+tr?}6@pIT4OZFEuQ zNyDA62sShrDz3$d+MNN01rpyZN(NwcFE%EQ-y$C@=9(ZmlL&zoFm;oHtQ(BvE`t5c z_vq6=sbNsWqVwYj>D}oHfHa8h=bc89DMv>7n5-!0uq+kpFdsh`V;#fEqim%8S*;mh zrvX=~_l*d_jrU=M=ExLJ`|&4o$;hkjKX;y(2@Bs25cWRlIVJQ;CBQOc$aJeBrM;SR z;V!g7i$xk09?6>nYo_oqZ)*7|?s;{_9N@ZBl7{_zP1=usN9ky$*!GT#bwm2anN$I3 zsw~5Pm)ZbPD#f>dS8&(A)M06)143q>{4dBS?PoqN_NStD8?XyB&(2g-J5RLjT3yQ4 z9mdc7zwGxV$h?O6uWAH5obif{Vz5;4viBfa*!5_KgsJx``P8cXEl=c8lT)S$;^~SV zPVGwoS`@d?o*>rLY*0r*#>N~lm|wJVXSN5lIyNLH;K$=2l#TwvQ07m^AndH>(9~1D zr5eBk;_fjRn<xxJ7Y#mK0tz3U1MV#+-cq zoo$23bmQomg7g9E>j0L-L+YPu{)w(5L&DU%0HU$?yo?Y!Dm;L)2|JA8=IR{a@~Vv2 z!wXX&`l18mUsD8X-G!mnBgJRIQU66c(rIQVsQ&|^;L^LLTJpB4+4f=RWle#04bK`g z?pdTPnq-;`B?QE^)ljUeX);7P9?<-v&-?`aHOQPM&4Byr1rz(TBg=2J%)1!?%ied4 zc)um+sDTb21#NJE8nM9N=Cwf#pN6Y-GYy2<&rXZHm$Vx05wA|sEpynTb2RbLb2bpq z%^d7Pddak@?JnEB2Kt5k=Ew)SOa=h*!f%UVNJCL{F{F$YxB4xWG9p!4@uRo4S=L^6 ziZRnZurO*~Fb)vaDyzxy?jo)*qMl5ni|;U!pw%%(b`<)^Pw@OmU708>hvnIAe_0-d z6rw=;e*C}8umL#$_q({HM2!dzDOnY~c%=Mb85MAq(~WL_oWcce)mkuYEh?O<_RJw~ z^-gr;Sqs@d6!nn{B9ML71)UchuVE+m`;6PSK^1g+B$X_CfK$J=65d@A@(6gARg`!} zc=3~lP_R#Sxl+oSbNv)mBnBKKZr-QG?um$E(ftV^)Yueenau~lg)W;;fMQm))>{Kk zUfL-_^4cFIE{7zTcRMR!PsR8u5a(7axHOS6s|JM^?{TQ&y9@D5NV+|NjjEyJ-MlJXBX7L)tCeUZWpw%iBvf!1>>WH``6ff|Q)_ z`}oBS06kuuWV8HYB)~4$sWcb%}tk=>X?8!d(`6!0xk$GwCEajT_(um<_&uh57!5qW|a6s1Ux>y~NQ(>;t z#36Nu`>TK}NnKR#Q9V&6&6|hE^HfPkI6nF8cCtIpHZc|1RU`u* ztcYgvd9aaa4)eFbI%Q-4P8^JoMk~}NQr1o)9{Tj<#mf?D?AUD)+ zQJciGG- zoCt?UXj~lW9eyZKH@2o{yPhX-!a{G_vg_-?Np~@lb^Ab^fW5wb> z!R{oF^Fx2gN+WqgJ}IU|T~(!ZP@8>{W;i*Vu}x&24Q3b;VvQw`@X?hU3rzLDA1cg1 zzqIuf3EU~6m$`&HVWQdYz2lISMA2e;%APQnKRfN#GUw&njfe=Yl&14a4?2}RaoGhC zlBkHF+h~RW##TbbD|Wu1IJNV~__Snr#r!`xQo*=fWxKmsF6=hk?BgVaG%Ergax;RA zlLO$g9gq9SxMA{%0zL)yKJ_4d)fc8`Nd3hl38)6)swn$5@nid?krH*~HU3kH4#JHdh2^Au&NjIM&Oxm*%hDRY(2Gmn$u()%5K(^M)cQ8@%LpJB|HCiI&dtAsPtbyq z);WPr4r(oi9mwNqadxO=zUODT1?dwr@ z4K?|Af=0p~n(`;~?s?X(BaH(yRoVM|aA zej4eQon|22^~O8wmhH@OtncSnBYxh;3bRB(1NttkthGL7R{EpAoJpsIc1DNN9IJeS zW?@I6_)3ET|BObY$wSRFioW!1^aCRD*50=);M(1~2G*n2ugA~@D0~B`*KrOMsT;Q% z$N5P4=)jTpb&KC|PR(+0(~^_fgK!GsiqTOfY$cz)={i^g%KerJ*F~UvnE~=4RKn^X zsYc)SbM`&?(P~(6k(e?LA0x2pF9DY>u9y`*pP^Qin0{1MNVOQ1-lZ|X9-nrC(qaTvL+5CsRZ})ugBt z|B^D_;d@*a$Pg=k0qP4!5WAkPb7(2VT!#Z)9czNpofaKsDLiJikLBcs(i)Ornkr)d zwA(cQaDNEn4^L}1bB|E>OOmD3Psh&c%Y6gZXt!o<6+QWcSwrtnqC2qH5qa<*V6Vey zG3t%~J~6kbg9T9;eFwikJ__Iu=b~C>OHLGbtDKc(QuK}dLL_4UmQ1#TCRZBA z=v}5Mp&$dg=bfe#N@p^(j!M`a-KPXf^)uL8X zmzF-y86JkX$I@4ce&iSApU;9f5UMX|vTsOzx@dK3O1ord< zb&|vOu@fr^en@Y5dzxUIW5)eD@F05%WZ;0xI}E|bfjW}^+a$?DdwS8SxV5D6RGk};N z`ZCx84|5PdRs+(`x{x+?^*4XIF~*K$|A+N}?>hko98do^EH+Iqa9;xZ@XWc`KQ zKUAv1P*q&GR+JF2ec@oeRaYES&7&p{bE%PtSzc}%(dgi0W~EZ6Wo6l9i`1Rvqwz8w zozLHiDELfjPhLxIv+s73I*m?`dXf6YN3+$hAIb4zPmxs=)sUHt@x_|fwyd}Nk$LCP zKXZPWjYD&pXCBWk<6#e7p844|Sm+aA0Nv@?RD02MxFr61F~Er|9S8r_?G005r(AxF zF?V0lvdeohCHodiRf`>1pT)*nqn?wODh$g_U5#Ej1aAOr&Of(3MHn34 z-n7BcS>TI-#l6Xb4P+6ev_qs?L9?va|E&=3xPy`LyhlxeQmb~Rif@p#cMo(fEg&(n z$QX-R+Ya`KBFf1Kz<@Iw#I%SgGFlZUoAse?h(nTk_Fcav_IH{oA1S%?nBe#|K0Q*Rs z+VQK?8$O*9SFi1Go@iVAzTxnOpupuJ{o(GI65IPW`}IV?~`0}`STzNJ%Dr` z0^ecJEIqviJ@)4dGWgP?W9Q5T>ZF2%sIpnj_57GVva?GJH4w@aS^|=<{ye@}W*{7m z50)U~vFeJ-(eof%%K$u5Uj9YqA*QVGx!#)YvN~t9;ev}Ss0b(&>BszZ=?&;v&b;Vr z_nU$1?n{KI?^F)V{rt}bO;O0rQW4BZ zHKeNsKIgj*yIM2n?@T(E>mh@4ve|+iIX(kZaH=++1lQROmea%e(3q*j#aFeClV#PhMMyP*+_0;@8Et@ zL;c$Sn)~OLDIImtgO2kSqc!w@MR1Sza80zS0^Gly%2B!SrGDubos9Nfrc`(^dqZE- zt3B!cr>i=5jNhegf9Wv1WsRCe!6z+|SGf0uAFQqf$4ua0ROj5;zydNq*O3W+x^J1U z>(v|}b|nf?eN8nfL~bm!Xe+dIeCm)5-9?>+v$fs*fu5ImG0n_Xs(39O?wjsMgkvV@ zmSD=KPZ3?O`bH3^kh@62$a4a{#~((LR=8m!dM^lvBi_7mwj1~37(dc2;H^jEg?lG< zHU&=`(#ot+PF$-=3fx-_^@5Ft`0oWR%0>Xq`9&|L^1J;-~orkM4mD$M>5;)EN^VGsEIdvmBw6K^O!#aMSp>1`&m z{w@7Y(21KG+lMv!-A1a24{g;xPkBcB|1su|Toi>A@If-&9F|hGjvtitm*yn9cOaen z4NfuvljLdXjr;s6+RW@ItlxTzspoDH7p!Syp=It2CFX%1)oGLF^pg}8iIe+8Hk}!N zX&)&QJ{!BQj)=}L#+Ah>{1WxE(?%-%v>=5!wS&szSM6-|j*0@NXE4%R-CUF-UPxs0 zQ0Esg-5NMXz{=?)v_(Kgru%lSt^IAIL{|6K^uyjlWKAUq1w~I{(d_x$|Eost{xNmi zeco+Vm5qXa)##p>ASfpg-zv>K8`psfG&T#$Q;CY2heS@o;-xc@O zEdcHIT1fFB>Zyw1`Dzs-6_VG>-0IRIlYq99?4(|}KaO;G3cB$uSA_Z+2t@q>gUjnB^~ z6b_V>XLrESgeZ|)=Wm~>Cl5~)w^08bkf9M6r~g*OVd1Oy#q9jW}pHBG4B$U^d79&M`;N z|2W6=?uZD4y2B#-;U;?;6M;u|-KXWoS|)H4<4iy7_g+I!<{h-5-WH}ujC>lmP>O%( z?!P>cGmHYTywM}(0NC-hc%-6Us;LnCt$s$n#^0%o+OLDEbX#Fy?n>JE3DXe^iNcV- z4jW%apuoWUD}Gc=&^Ip#8E=4k%g+MbAjB`*D5om&*LjO6`|l*4=79aKuVHuZ&oL7w zZwC+gDZ`xFuaAHD?ZvkQV3ptd^Pb{UeJ&@!J;H0x{Siw-imw=(sTliLgc7oI<)ULg zIo&~&_JrZ8aX)f&clSX^>4~VFn(^QVxH7SNOcG;Qax&!w%QFfA5!$|DmWl(>Z3RK; zr#!7JYW7QSQZu)^)M9q=tfJW3r(J#7$XPW7AQ3~$pa z|H1Qho>sZ2RKU&jibhS>r2~8oK5r^}ol4mE#;MKfR0Fh48|YhAge881R9Q>pTX9nm z^!7`A`&{2K0jTh{&X6xcag(+{O(>|YzjW5w%PP$+oJ!cTW4LD@1Y_nan9JL+`$itB z{}7^ENTUIYG+XpaB?C0hMp`o~M=;~c(=J7jPR0Em%x8SW-pr>jW3H-rk*C;JEYki) z=l9RoFLN}(J`?Us4gn(*qCW85c|DKo;9C&-w`lA3&O=dPr`d|cEwbZ}D_$oSHgQWl{h4Gc*0N;))H$*?t*pk4b# zC6h9UlXWfU~Hc+Q<|*`AzLg^Qy{r#Yw;y=BBG zXh(K85ze|tkIFgTt>aRhrSb>hs^bN8tE4c;*Bf*4|4Z$#IvY|=^$FwSt0Ez-wij0` zLCvm56j4u67f^!^Ka_bbGBgb&M|wqFN8r0;Ya2W=sr#T^5O^~^R0n~cLQtCt&||}9 zm!5f%7{mjYWcS_u!yYI{_(JbQbP*5GtWv(WFQrBR0pm_x1?Be@RMha{Q4jd}zC*KEKd}LnX1|+l^bOoDqLV z2J&Y_v+}`034g$Td7rw4{Gh2>vbP0bC#^IG+Tz&Q2it%giKlN_4fVIKip~7Y^g6PD zrqZfir@#Gp5k6^$j8!Q~#Kxs~+GS)SAwiLIsHrPVpj5;404QK60sF7RMfN%Z^xzKm z+)0n01H0KbV-#-vym>qe-no*){h`n1M_#um6a|F(ePnok$P~2G0xB)ijq;YICbgih zW%L9tzn6w`=kSdNB*WClXVkG5pKpcgrCXlSm6FAjSKOT%2rGl{<BtChnQvdr!B82pZbpNU;a2Ioie@d!Jdf>?2G&}T z`{hAjka)0`;=ASwHlMDO`-7|hj!MAM@#0jMi|r{_i&K_l!EIpTu+o%ZT}L}9K%o@P zC$Gsk3Xoy?bbD)r!Kr3nwGCIlVcz(nynQxj0gA6&dBaS^vp>* zyl_F$B;YUATlQ$#+hJcciJEJ1^puBq}D%3UO8WW_q*hD~~;nc5^SUr+Y0V40Pi!Kzfyu;mS#jrXln4GC?d%vWwZYa z)+Z!*+@@;P_IUKU%)I&rh0KAVeAH!8!2?-`jOCP@HzOc zSM-neQJ)_?KVW0~F(hW#*#RY9E)fJCaCwvVMb|Dh(2Y%PBCf>OS)*l49) zKs=_aiaPKa4iL{JtoRc=Gd{LdCH#A9&)kZzrh6$hNJ1V= z|53YyfBXC-yPHL>oHsK9Tg2o*tHG!(E!MW2m$Y}&INm?CTNY73gWDC3ODGWf=8v^N zSkxJdG=3Jn=G72@qq_avD!^re;044V^mXbjDT~L~tIh46z%Dv3co8c@eLj04xsy7a zD*eN~0fz`J%KmlfoY3H*Y2{3r-g2zFQq)j&msD0?r?GHzb6fY_Lsiw|z_ZU-o_x-m zR7NIrw9~_6MnSG)SC+@#pH2`?z@R!nK+A26d9YG zsKlh@*(6Cd#Qp9TqEE763az*8E%N;%?W9&8%uBa2#TH={+PH0;>9f2e;IF|E>*iak zJmq>aMc#@s971+2!=&wU{prNtr?@5fR>Dsf7FR5GErk5LRzDS5n2$cI_ zS=0-?_`Ja7caIu3!D-*O z{}KLucWDkaOYT!dOT=yrIu=usS_6dVhR=50{-t&4xQGWVAK;3}H9y$7c?F-o!IB+| z2C^L-UH7E<_B{VQq+N{@*iDdIU38-~!nON4k=%ka zXhh{Vn~AmJ!iv4asdwPEQo*G$_UH-pq4br54Xrd!&_!hTjUA*NF>u(T>9Id`xJQ82 z)w^J$Cx<;sMdAv&I2jMh5$}#L-OW84IMmnavd>KfXf--oiR%6IESrZ_RFNq;r(L?W zOqP|RHuFi&UN}Qib5k3xMETToXROwWK}BSR&pN%+4@bp94X9WxMLnZhqO0h}qc)WK zJur!%Az!;{s*EY$NfuylMg4buwJ~Rqx6bD=I9(b=*e-N3>Lo99+gTckO!0P;-iv+h zm`tfqgkcU527Wc>8c4EnXECL`qTt!LgD5jyGDpw{MqF4Tk~ON`B@}E35)6-Hj%Qwq8fCpU=ry=>H6hs+JOnMHOaf zO(X(TM?v|Vc!iB(go~}2g7UBB_PorD@#QizLjr%3Q#a=-3e%E>x{r}X>f;|OkHl+! zW{Rq!q2dc+F6wa#g2t0RHhl=yA@ttaoX^bRuR7v+C^XM}!8*4XW`1|rSe!#Sv1p3? zy$U+-%aDe9pChwC_j%er*XSpnYvPERB~;UX{@QC)zshmbxqOFOKzHHYwVFW(aD2q4 z>0CRGn0K&IP+|K(1s8;F6NA;-B@1~DAht63EQ&o<#rjJQw%z;7i_$-aer^@W5Avb# z13bIRk7{%VCKyZ!S_*{SPEFAI{>A2k2KUGlLM7G{zwHJ=RvXWHochUQH~yUkuH$TZ zl6U_`AgMx#MMjN^d#C5n`@5sT73qI{E4k^#rs?Xt1}k^}+lC)t z{~OYB-hf-{{GFWBf_d5dp;eev*X?p7^lQnl?)3>$(-~nVpvExs4>vAu`hgeql0S_* zD{1Y0qrNb_xLFB#BaiaB?RvdHdUNRoq|tCJf2p}B%}8=6f|0f9bkATfJR^0n|5$w0 zKn^8g3H9Y?Q}8Qh6C(>LdnT{1A55?F<2g+Yo;+LgC53r#yvhV|C6}??oFQAbgJb7m zS^>N#qgs>|nWcduxi^OH8vlT~94$`0Zfiz3wS2o0;9WIXB3&bm{X(}c5#4@@)2vWL z`g41h4`8NXn`FQ{SDpL9G^BX^JuU~1>#}L@q%cC^exwa5kYXteah=B-ow~648DZu_ zz8C%*S6-lX%v5)jM&vEh;wKnouBm+z`n93?I8@9#IQp2;^e{pNbO5;Odd>m=Km=6M zDW!!kBtp@0K}=#~agAT@-Pj>U-9)2XyE&D2L1!bsEGo2RTI)PEr}D?at$}(FCjUXw zgzg@4dVj8oj0y$qS`(JJYJ7)}!ih^OV<{T%iXY-rjM@PO2UIAGRRs9P@2ijDKsfABVe-`V(vAp=C5CvCKx)m&IR z@61$Pb>oQMzEGpobE0%{w}vHZ#LLQRh7b9e{}eE6mmd{{SpDKf7~Hm6l*xl#S9F>;qY;fw2c$`>}ie(o`i_OM<@EQ(2zTFS~qmOtZ4=HE|OqJev7R!Z5$ zRXkU-O2ypSX@NrDh+t9mPAe((P4+d*re=wzH&8lB`^96}#k&^&!-h-la&4_<5w3^J zrNGr+DLE?8z{P*@e>bGV%!Ky#1h2m=eD?g-yz*RCm3gOVQmgSg)I3UG)aw#HU2W}O ztl37yw~fmHe0Q2JJTAQ^pZmYId+?~=|8s)Zy+6_}$};#k8RaP$;6)URZC)1& zxW%mhf!*dLbizab$2Sgt-?C=(A2=Y=h;ciu_2%G*wCBa5nXb3grXou@che{SpxI6M zK=GRwId7=at#^m2Wi&6_1RWUAK&7NA#rF;eV$;_?<}R9EKd$(F6O;)RZbwoqPEelA z|MAY|Ix~PjSvjk{e%+xXXlFhIeECR97`ATA){8O-jGNe(iFt@(CdrF1pQ$`&ta;)g z-N(F|L5iw=+!I-$jNzHWt^J#CD9$>N$RoBEo9ahuLnt}y%h;mt6f9N!Grg)$-j44g zv-pk8FQW=xk!jRKfmGmL0qlMobit4xc2l}0F6~6 zYI`J{CQh8~1?SV1!JZ)|ChtkkFc66m(^hrN>%=pi0MVlZu%Dl#P+#2-`lFARW*&fd>$O*r|1vcl}3^1kpBc zWrFVI;MEVjbEho-OtHrR9TqZOL|6Rf*yTIX7Ahj^hK%LPB&8{p7xIU@QA%Z%8pjH} z3HC?$rFPlNt@XIlM#nfOJ|G6uXbodl@(8)babK=uN3_yba5?!MWaZ zFlkZlDf08UiG?qv)KP>g$d37bSiJX-14E5JkA8 z-W}ZEvY0*=0MR(Wc~snqu9f!nIuV7$_jyQB|KFZs8R;iVQc zDPv6W;pR7yAnNaXX9D2VitxAsG0w#TA+y9^?C&YXEt0K=N#*d$F6fO8AwyGiGZZBP zPzS#Vy`o*|sY$ z)|V+y+X^QFd_Q_%+iK7LzMu?}{(0A5c;U8wp-|Yxl9F`G9qcNnsj-Qg{2kNxWPjmZ zIa4w;QFmE&AW>2MmFSo-y(K6-Vl^2pC!+I?Q-=BthI zk0sxZQUE}6I9u3Vmeu!?8eRXPA z6cI(_J1Io&;;r!W?DgAfr`H%2PbedNTTNNJ{Z(Iq&worLlPW}$-Md>`M|vtD6p;#A zhc7(M@5(aKnJo@Kk&Lbn??#7O?0~NLfRRRa5|&05^ub(WXfE>b(`-0GX|RNHn=5rr z%xdgJN&LeypVcB|+4zW9sHyBUkzvn(#Y-Hb7N*Y!-dg;8 zO4l?{C(dXoY4E1MJNrf?`Gtj2NvNV%^XADwakjH!?-VosqB%Y9q`B*sP`RCh)nXUf zn78@8=UdoeLS4t?I;>W7=RYRD6zD)hw3k1JizYyz24IxBm3hA`@Sf(TsOK?<|ExJX znp^aIDcH7=dMm3x*Fa6A=Mcv@2{eBYoqRV zK^gN29?nuv6Cdy#Gtq`ziVFzc1k05E#DIc{70Wkaq{|5lA`uBzbH7{WOlK9Phgn(T z!U!);-bm6^y&1LFWqs8LuJ0YBFD>ENA4%<}d(J(o`z_a6wO0|~w*UQNw=agmk*cvb_zh-|n^PrKRYFS@Q>ux2ecN79m zf)}YX7kqdlV7NU^%dCRQn39$b>~Ql3d|$dGevZbOu|0CegM4C^mkh>g!@+3I~MkE|9nm4=!UfEsgZX{hjuKGJ#3y?E- zilbR{^Ng&TMrB#{-6w4f4g!F2q7fvu$$BF zJvqIJEy~|EUHh;W^?UaZg`u)1GlkW3O4mpcxG5$QUz6;Bqk50BP)eT^t-Pfgb<98I zb(MR&ytnk_W2~r#j~>qEzJ0FOrq9c+*j281y4V`t;dR`sr=xzkMD}45WYv~9I^1#n ziF$We6IP60m_IX&giyfi%Nj|zztnFoGP6pE+e>A&(1;TKOxE3uMZQgI{*aKN4^zYi10P4Kq9Ml<9Qg|j6lXQB3%4mQo=yfe znl0h{D~4*(qy0NxbyM^g));=wDVk!UQ9%u#GtL(-(R1dpY{&j-*W_uVsF5R@_d^17 z1}jrCX&Bv}LJy;HM9BPO*xnCG* zW*iJ-L9kb_^`&9eTcjor41W=Ch`9;ExkWM#uN& z3+1LpYw;@#f9H6(}{R9<~^(<9uuK~Gq2MP$dk+ww@?xWtZ--_f54Yxz~WM}@8huUF{vMgm%Xncb)QH@W9Kd7Iv(reEpv?+vAsv8~CNGMpYwFL%Zm0DsBH z3r5FBvL6i|djjr(yC{#L5V3Ec+4E_^)aGsWpNm6Mh@l}ZLZJc>??xn0A)ywpZwOAv zjJ2bma?X{shjRQS5BEUgBe!Rs26(-^1w85%4S3f_8Cfq>KPtm)0$kWo;bdS;e%OAp zlSXg=caW{t_V}TF}%Nv|A42)Mw47FTo;Vsw0^aa4=RdOEb+Qyjwf}yv zMLa~NURq5`RV8{m)#`iV~`n{wFpoN#$KMWL|HbDwl(W$WK! z?a8ADL8Q4ZHeq|=dUXvC>`muxS7R3p)bt*~6N^BHog$@o11jk0adMKoKaVDiOWSm{ zma>+pz3)!tFge@^)~4i(JR~cxC34XxM~|WjAWjQ*5X9CLB73SgB}l}V9fg^~qDoYj z7Q1nf*Ch^4waj!5+4uolH-TTT<#%GH527p^Q>(3o>4$3Um;j8s!dIz`ldK-JUoXU< zA{rdwV5%7Abpq;ChP1c{ z+;0(%T_2zAk|vl`a0568iW#|e?1QJ_bRCcqp?=TjZO4a${aZQCUJ`|q6t}BEeF9c7 zu+h>NwCq(HLZ!sd`Z;s-wk+N8-PH`twX@Y+W@l+A_0715Kkz=5Rq;%(KXGFM8-^&q z+F6c*&GxVNVW%g_A7*lS;Qb}1iHEcCYN9o3%I@E$CMcWhIkl3bX@bOQdSFwYzQ*5q z9yVuUbXjg|>)Begdcw*&GcwkZ1xJr?m8RdLG!V%+jJEFIl;b!HDMWH@tU7E!Oz1TW zI~6dt-1zKszm-Ur8q!pxoXtZ1SC3}T_b9~r5FFUdFmp&Z^sO>@`Te3lxS8o6-F25=c zbC6cD`Z&X*5IT+E*T2T}%;Flk`G|7C3q+re$;R z(Yd={q$M+5+?G2zAlyCuIA$9Ss);{Sv;#f=Q)(kXqXR;J+}f6Nzro!fZVGZHWLJK_ zDsFt2{zB(yNal^qO5lWaqw>}Y`BsX6Xw$Rdj2%#NMkz?s%eZUQt!-fXsvr2WFZw)O z=5$#D;s5&AUVn0fsxP7C@|wOk*rd6Z(8@NpN7{Bf`W5}UD`)mTYdmpKS|I{l$|*Vck5maGYqydlz%hR()b#Tk~r0!ULKGJJ9P6e)bhPx_h4m-iXS@~THqCbNZT#K=tj$`>4!pNJ0Zw3pxO_8Rw#P~m1m`^j8yhn z6(OB8LjpJf$vVy1X}+vzoBOLk}K(lTT z&w)z7CIzZkXuW2I275t+tEA{{v5!>4iP>xNQ|O!LFrzU%ko3v zYTt%h(cB;#E)73UTNUDoNMPM*7Qm9`^e&PGh|Y-Mk=wAOJ0)ptW6qv`E6@QUV_V*E?Xe{*Wdp4j!mk`=T=L;iRCeBa)FE( z_Egh2;YBb8rkjiqgo_Ak!^z=N>78%5=TZvDBBEf3is6T$O{d8PK0Lr`h*L@U1#ejg zLy9JqUOgAWDhrPSxUe=LlHWxE48ueyEB;Wv2YK1L0rGhh&VvW}Osn{_gHI^Pxd6kE zmC8H^Fo6NN_%%I|W*E|J9n=>lxLmqH2^QOwNXS*eL?VGA#8b+*oi}8`jg9<^ejdWw z(GCjZFlky4lfbd@bB9e_Jk$Q&x%vrAHWzMwupJf^-yY0>k6<#s*>88zdyq0All6}G5ym)(rAfB@^+x*;L zeB&E8ahcL(3xvmrZ>t*qTsI`T*0jg+H%&T5EpD6#?CMY{FA;EzeOI=Zt@&rgr%ckK zCASi=1vL*!EnB&km+V2704<+S$qh^_RPJi>%!MBeD4F|g(TJ!_X>pm$AVY;0RZ3SH z3!8onWA3GaDDK%pT8fT>UuiS5%xAV?8fD`Y^C{{y7*4sGR6QfQ#}&^lGltqA-?L8g zQ;EHVS%a@6qR@7Y^$HnLd>*v3N(?gD0&K&ORl4b*3q8EqXH@P5jGG)N?)Y=}eJdgK z49No^kzOv-_{A{fTNPnwv|AveUO~EWeHftQ=GHkV#^tC^rf``(9uZdx*gw5-6Sh zm>+iYdspmW+HQuIr^&?m)}TZbk`^H8@0<3c$@~5N4Q9eAZ>5jQL6b~ZMLHE*8HRwB6kczMOWP{|h`(Bb$<~7k+h29H1b_=oLf6=(1b5-1)p7d-$+So#&B3tn`f*TrmCdAjGO?ZuG;!t2jseWL}!HYML9Wcd@tQ43~-dkcgM z2ZZgHa5fyDTX*~8)~vjRAyE?gR+7n*yxOf5FkwpWRvyi}QiaHdYJ<1PPf4~*Y=h9) zCBn<@Bqf@n`ocBZdNwXYy6k}P$G+n`wz!&n8RpBac&2Cszec<>eM*KUJA_HLE64hQ zl^a7l*uI!nZjubyCZG)+4;qmyH;_HJvM93*jbPG-#LuA6x3cq5!75wNTJmSl= z>6^Sr<+Q^@ikA(KfiwYJ%1TlIMW7!FPXpE{QFr3v*T?-6YfmWzH*VawwgexA_w(mttQDsxUeAe+Ly6h>zn8t@8fDEnjVh_s8D zfKtvo_6!?LQD56ktH1hZ-~7XeahcI&2ZYl(U9(ovtGhEr+a=23oJKJunhlF0EHL0S z_X5Zp_5L(CwO3j#8}P4~hm8XU_=}W;aszU~0Ndz>2P`+Xq1mJ*?wE6)R)C9(Yh+kU zHf|wa<}clRINK{!>Ehx_PljjrqdZK>*sS7FdL9BX6^@ae8WM)eRuUJgF9(@8)Xpr5 zKq8{o59q9CN*?F>IKBoMHVoWTDW9Tf)~#5sDD`DSY~90(?69qpp9mJ3O=qP~Uz zEz<|i^B-DV)reQjZ{KPBi;-4Bnd_suUeGxXkEs143F`U;kP+H(0aZJRiR~sOD9G z*eaIxHdMSa@Midu^-EQLF^tSoTCT3c1$$jG55nKLOGCk8fsZvJ!Bywi^B{SCqfL*6 z59h5%u&$$$vdFMD?kWJZ))+RPQTmX#$cqO6$hft??zDYjNIL)ERsgKZ#)SsqAwy(; zAwY?LRfrGhcc98`>Ql_EkgPk_4YkyVA#J?XT>?!GJnicPXW^|r$S47nS?ErRn+}m+ z!!MBRWd^>L=cwxh$t@O903UHGcK5o|z$il;vCR$Au0cP4cz7RldKYV(&aTWRsy2&Y zs8q#ks9j0A*zbo&r;gu?F94H9039$4f`Hm2FXc2wUI?j$Ea#!*+N9I}H%0>*0%K?{D1hZE zH&uGWtHQDjE8GoLe|Nv zVi{rm0Nbh1HqF#wSm@~N`jP3{7ro)8JJxX-(PagM&wu9CucgIuvmF*~dxR{HpJK0& zY8Z$iSItS=71T!Aa!H)q=(xZJD7KC*c%_9^$q+%Mk360U(_JYyK+?D{b1`l#W0AKp zI5Jq)dQ>K~Y|vv^3@Ec@EaIrj9Exl2WqQ!Ol$*^Tmw_*YQ%E2Rda?akwk(o=bfaYK z)G~V3>1Sl}kK7*j+__-XtnBsgJM1zf4$oRQ0?D(TH6Kl(VaZb0m`w*pH&BCQrEL^m zDk-Jafa5jf6ObSa-!apG-Fs^P$Sy7=&J%X&iyUe6!pnw*b?g(8J>sqPw^cJ zI}lHfw4X;Vv7% zw&+!T2`^vQmO}_y0eKuG=?NGd6zyg28tqhAavOP;nzOv_GiwBp5Gs??Y}uFD^OOh zFxbja0L9)DOqjw$~33OOh z0mo<@vnuD#CHv6ZGn^57chDp|uC{?kF)kpbQDs>0&*du}mQ5xvI(NQosoM$o-kwC} z)DLXBPejGNg~GktJJ|7XV0d~D)r+=q*bR%$+C6{uB;{m4OtmUd?k4R~YqKsmAlz~D zg;zNKpZ5vi>I-HMps3)$glt*m6*?Tal(E8n%peAPZ(Q(an0w?r!I@I=1$?*0^ zu64ts_4IS!`r2=~0+$J0Hb8j##1*f>{^Brq$Eh`lAKzupg{~!0=h>8vdWkG-tn}!m zEdL;`j9S(Z!o`RS>E%MqnP0f)EJTTaS@=Ud%~Nt6m-(ppCN1kH0a8A%3R4xr*||U}xML_kB}hs>I&6O*M-)thkXEE3`Gq$U zrW!JF0TkeA5VU-Gr9MywsJbcF0$f#)v&!f|<=tgZaT%}a+?Z}-zV97&v1=FVdN&mM zS=%`BtR1W$cKMx5&9(^=NmIH4Wzj9EQ1{h(*DE~tMBi|~)dAvPebgB?=T=(-1q=?8 zXY#i~XH*7c{TUuATy7f%3mF<%-6QKL(XNW?s-)x)X}f5K>FSq1_md_3uk)TlGchNaWlU8YAK`4_lFofYA8HqS319GVsmzB%r4LTpiU;f@z z8Nk_l4y!WBM6-=09>|`}wiW@~(=%Z)Bx_jdE`c}nV(nLiT8gVlDU`^U%F998BGK1t z(gzKI3%@?Jt+TF2xUod_d^Z&Os%;#5;WiE(TcV!1IlQ{tKq#}G-`iqKaD;f4aau6k zIqSf1yWf`aLU;e_j{whdy~Fi+UNJx}W5o=Vo-g8;wXb+MYUd_w8xPpKg5Aq`^9tVn zzU`>bo6X~EM?V*r30)QkpnmV?f8~uQH#Ytz?e1US?Cw)sHQKfumi}lcUy1$kPietS zI#01=b4VBuQttVEf3@c`!uW^1S0x@0F|<1s{c^L_+GkRsRsKojh%~?6NpPhUj#S(( z5s|F$kmq$ux6(Jz)Ut2N<5x5g-#=HLSv8bCiDnw*1|v(eCRrfn0vF~{_odsu(z9uB|a0*>Bz!Sw_k zD7Ht*RPNU;lCfQT#Lto_q{A+O8^fXOMJ1g95f{BCVDcxSWErlQ2H| zZ}1D@S(zAuG-c9NXD2PZNjzm0bn`vLkmjvzF_T=*PbEukl&Ev^bA3lDm3=`3OYMiq$>YJSzX5Z~BIXBv~j~d?9068Y92PRK3hcl11&;uLAXVVl;p~ z2!_us$;C2Zm1y^+_;w3L<>m^n*vIUqU98`{hmC9Yv36n))AfCadzJgGxp2NG*w%F= z$`@o?RzzuAg)MNZnB?DW9B)sWIq&W_fZ1VZ;M{QO6|QG^^CQ5=+_cySP5}=bb3Mm( z$eK!L@Jfb3=WL!z_N*Y&rTli!g|M>cCgoqLLczWCY(X%@P2bzBr&M46r7wEPZQptC zJ->?srpo~cX|0}oChyNr^uwYowoCvTz}TE1)r&I)39 z;%=jGGEM}Ne4;T)zM6tr31DcAP}xw0v_m>+Woavcl+^(n zV^T7Oj506cOx%6al4~kVZdzH~r)F8Y$|6$f?dfOA^U~=8!Q_Y|$MzSFQ0sxR@Bg)D ziFSJg*O!>ydI1~l?^*|b$M#Wg?7QCI!izz>I<)Nt%8epaR^jlhE4Ca4CR~s5{X@HO zhWC0|S~vin9&v!^@^I=LaOH=ATOIQP?Msp)j{h3;tt!tcA|bth&uJ*VR4&~o7?xz+wb zARAIDP>{t0GQopWfR3!Hb5!yQvK`wizce&tTa88GOMH7^rGifq;$&DT=9ektCvYbf zJEfW8NdV+n84_+aDf|jXIV#vd85JN|B@K^cbTK!tnbje2B^yp$ZGNM{umv;uxfIIc zLFX|ESSpI}?(-8sPJm(vLzXWR@Pc6tPA`*9;r%fTJm&9LiF~SmYcg#l%HC7TdXidQ zpQ%{B*XmWILjDFNRsQ|;-y}|87<1rzeJMZvM{k!i2QupmOt0QWed{*Xp6LMa#N3T| zE>P8TpP@GO7FhhrF>1e{mlrlKLKU4v=bUsHS&#sJ%H7{|pJ>|eL2*9mSE)`;cH20x zdBOc0D4u>Cc*%!c&u|m?i1T~jRlvs`Xzn}kT-uQp>TRPPago3&Wi*a3gsTWslo!rz z8;dk#dWwetxaiM9whO%4`|iv2)fLCqW-of_&)SLjoRk$v3QI9i*#J_}hgHljoOpLtjERfH%niv z{Q)^J2Ea6SDewwgD7q-DRUonHKQx3=o>veY{wiqAfz){LVt* z!!Rkg;CFZqy3+Odo^b)wo3}ALwTsEx9QAaGG-}|?8HZ!jJQT}$JQ83Cl#x0P_p9vc zFt(zizpWLq54r`!_KWuIiq-mX|D%P&>m4_2>UxjI+|cQB9{?V9?jLePrw<(m9(TRQ zUDuObOj4e+n)hG~)@942CFIXg)=}Vs3>CsiH!h`R)8te~UAu-`J3qyeuK$jgojmoH zcj5sYARRamZcWy1=B7DCOWhMp6)Y>=8wDgI&^>c-m9*O04JjxY;7Cd@1x`a)DNWha zl*39x7FC-UtA`RUk>!tyd^BL@IrWDw%j_rs5-Cw;ErhpJn3DBCmU3)e4%>zK7}>2YR=h$Ltyhf`?r1uU@*2 zQ5b@+J@~cv?IM)I{+0lOHj}|!I+osdFyLgul)^_hZ!fxd?QhxNw>`zW{U)OCCDup! zdE=_>>FxqIIAFZ?1Hk$FUGLC=;saOq^NNqT`<*omXA`L1z zVj6~-tjnff3|Vt^-8EZRJkz;8eSz?{5(479a7IKe6BmM1CQ_5~(-ZHvHR< zj@SKGi}u{psRO&p0pq0ooRb5^qi*>0rYC?$w_GpL4V`|}f#MnGzcVZ7Dv-%DU*s8V zgo!nqVo#4XfZAcxQuyFTB7Xbpj?u)a39a3L1EvGrKJnFeeajW6Ha5O;vTR=2?9K`E z{?kkCmWgh&aNm87^Muiku(6NoM+JAY1;YET@=x0-s2B#~uk=G9J_>1Tvx7W;B>kkj zNK5G^iJb`Kr`w`K4BBnaAdzw~%#o3~CwWgPJY9kthWtx$h4HFHrdKU9&)gs@Pt}j! zIw1r|{v>5?Eb2l#YZAsJ8Vq4Hq>-`D@ydb|7vYM1F&HJdj3KgO$>MR*om80oo{D~v zALV`)N5X1QdF^_EN8Oy-bIzfD=^3oO>``ny`*Extzko?Q|JPw%06^D%Z+len?3~aO z1hO8Uln3QzG9}|tA>&lITHe8pOMFEbK*)waJfvOy+J1Vj8yRcMx8aKA0C47dfk&O& zb#6ZKnltWxyWgO{=iKKt)EuSa9UYMYUJN5{6owhF8*(p!pzH}sHwsKR)l*%$x!uXk zb?Dzcn_l?sdq4D{v~2p*Ob6N{y!PZ_H#x_Lorg`uAtByS*e?=adgtNDQ#s=b=* zSU%Jlc&5+=f8hd1!@==6EvDgu0SWv|D@4=46UB7M|D`;u3N!^@Dg01N4WO4cBm1)x|N^(bGOLG4RbD^bq>=Pp27M}XEAlXq003PscYG_y}Xu#82;>;q&=vh1O)b7 z+Ts7;rYfWqPd*@*dv8Co%Iqovo6}`>qA2fUp_b%`4R8 zi&neI`IC+x8TU}ZOfEwyH@G1=Adm*gcifviN8vzgrbzv-KSy6!5-nP(kW&Vv_f+^Zss zHH=~~)D3qop8puuU-cliy58Ti2f()X$L)&GFz4s@|7Gtgs}#gQs)uAV1r2s7qb88Q zC*u^u7G$yUawvf*$cvPr=qDUG91quC+a99pCGWd>n7HB4NxK!}r~^Y6_6i4<*SKl5 zx4Affe%t}4woF->dFY;VnGfzZf^7sg1&|#AUIoCM>Zw`Mgy{O4Pp`X95uTPnNbA$- zRrNk!7gmc#FbpqJRwP^FizIt1sJCHO-5GM>OK_I}CxjcSNDgl}IsY`G2s@V+Z zp%Avjn@aA2H(SP>^9&U(4V(&2C~l#!TP)b-BgsRMAsHxaTJIZXDY>B;WKn8mlJe&y zo2rQZ+Q8~iS{*6@m&|kG(cd*lUzTW(M8kFGFnPuOIDFzfs)>VJvLDMei(e!dCPhI8 zk}~nZ&GA$S>vO#8JNwpxq6~9l&?OLbnm(}_S93UMS z5Z-myUF(ba@`er2vE_1+R*Z(_#z=F5#g`A#{VWFxlid$yASrq!n8)5ETQjc* zJ@t@hG8ww}mQo5~?0V3^tNpNO4`wEovgIVo#lo)_dJbSHdTd!*U7Nu68bewJ1pJU{ zW=1=AGS3Y%5TTN#GGR~vP*rfw4Os-6k{pyC1^;NoL|$w*WfYYj#1<_dw;L8?6gSm} zaB4V|A$x~uEkWo*$)s5fDJD=Eq999zJlo}3wz3L{%7&D0=_5-6Sm{W;zh%e2>CVjP zz8UX^L?^dAjLl;g+{j-T{`6ZPg7KEUIw4~5-DU1D0A(^Nm@osTyw*wTkiQ8M}SAJ&RKX}VE6OKy{T+Uo* z0TB=9OQj=thPdIL3cM8{34T<_OXR~SqKXU``49XC^OZ>2?DQ;~YU#bnMw^xgHtq~7 zHA7jjL$lJIj5`az(!X#D=-eNOz2~0y+}$28u}ce7YkS>y1=ZFES@@Eg<{1`5nK&xH z=uWwNG0s3*L*SvVz#w3tAiLeA(Rvc+;Jl6O<`5nD&9{MFHc( zdC9Oc4U;$N&L%&$Op>=vUtVQiyDb!Sc)nbodh7GDE~S>eh^p~r`nF?YXxXVe$l z6&g3<*UfQtpAQsZ74HYYjkDHBPLf9?DvKLm+6<+ETI+?P#Ar*@Z{ZvBF5H*r98 zU_i)oY`L!BwH!Xe8#W}PRH@;rq)fP@;Ksr?8I^eECu4w*R_frAR4%oOODUH%M(QCK z|8mjL45T8QD28GclQXw4)Miuj>8RloA;j`oC0-EjDEP>E4e}W%SS;XBc=K$*DY^-{ zxfBo#{zDtUV^4J;%@Bsn{gB&W8iBK1FqLG&HhM}!pq91CrHHM=wdB9%R}3TF8xc0- zYT5nL8KM2>k=XSL9r(4s76{#S=?vk8j~v3nb!Z|Ob_@rAuUtXmC;VB2Q{rdhhOi71 zH^iq)7g=>LK!A;Iu<(b_Ga09I7au2Qzr~{2cfG+24g}8udl&kXXxjaS8UMiB>Zi<$ z$yb)|f&9w~VRIkiNqa6UhYR7H{a-_U{SDRihjBo3U~`0S3h8J?)pgvon=1PnCfQvV zmEVs@1yvp*KikIIEpHd=W2}Rl3eUkm0G~V|Mx^D#+XXL-!lD+POXHW~rF2v7C4UzA zNkpn+7L0hikfs~b<#wfcUdAwoD9c7>K@Ci9qkDHtxx2`dCL6}z%T=W@?^4xi`wJgF zgvb8q1ZL}>!1QR1s{ML=w?&ZjE@v`;6ziADA{yn%-b2fZDh8#C6;~O*DE2~@OFV;Y zvve=$O;^qaX@0Roi~i?&4;>J;D@of=)tz;?@n^TW9^n@9Ay9cQ!3rn`6t)+lObir< zS5;@lq#>`?J+{aM5V{7@a>Ca%%f*592oDMfX?K7B$i~|2MAP&N5qc!y;A~B7l+y&^ z6l!4CVCF_eUmqe{Ifx_}#W*&7N>NZ=ER)ng0}d%ZnMH=)RzZ;1VHZcFAvN6!j-SHu z2B8wU9j-C?3?Mtzq7+9~;;QgIP6og{5KkCCb<`Q4j2UDYksp@ffubIjqi-OpD|r=EAR{HJq`^~(3kO680)%(n zb=S0^`KgL0)27`r(Qd5lS_iFfco94(a8@q02q&W{0WZm@{F}$gn|uB~Do=O%Rq5_M2#l2#r!%0!~p60)P};6(*!n+ESpyhL&&@mpq$I6pVPBS;z+B)f!A7{pS8aJ3_p+rlWXpi0icw~m< z!^g1w2ZwOzmh;%Uc?WA(k{dF0fVesBJ}ZbB_eYGiKqI#p_QDSJZq?pGN>?R{qTnRr z$!M~IGBWYA_YbH5rQvlo2e|0I)z{g>_Pg!7u8`+8fKND#c<32!IP_ZQCl<$KAZP#% zTo6GazeC{0HtbLw)_IW&Zgish8s1m8m!@&AlQz%pEl#>lQgzQg_oxr5d^+erfN*PV zZ8BX>-TdI99}?wY%v)b;47{7K+tO-!ZRo;n;7f5%!_LL^F@}s}d1kMW62gE|)*BPR z7r$jlHVqjgPoIQ)_)8HmU`i#<4~b8X3_chxT=4U5( z;`ff={C%5PyJ`=IZr;V(>ACAA)~Js-I9+#@HLLob;v@j0%@pZ(p;aqoD07!Unpi2f zOuqy#8_D+mVtxW(1OQz20J!U%_gv5KyaT(luE+P-G2rp5U2pJIe+FsxzHH`VLL%+w>khO@MIO9Gcd=f0D!USzosu zv9T|!NYpb81feWKXu+j>3kwM(Wz1qbTJXq0CgW?sq6Bo60ln^TheOFlrk$U61IVM+ zY)cd$pQII#eW1$oV;G%x9NU&&odoN6= z-A3=mP1*%BRCV));hXdQ`RacBg{uhfO}nRXdy1X+*Vy~eIwmLP*tmKRYgg}Mc9JnY zF+qK(Mz!uhW6k|$BzlUB;(4>#yrLmB)NTq?a#L|l*j}+rWq3p9S4wt6o^6k)o%h>y zzYDI*`w2HqcGmU&9&f)|f6{^DVWgwxWWpxF63`Xzh0zT9%`5yYK!)ei0-DlQWq_eF z6Z!RZvN>Hl{n+N>Krrb*5~bzbi7cOFzr>bpcRG7PBCfdR%4vnfqzeHAouTJ}umN-o z_(cnoL*x+P%DKVZL|YfDbH>OIDFO6a(lQ{I{cO3#`cVv1N;jvW7HfF77W4!^HLsZ0 zR@n{0$dJC5>1M!#;UZda4Ea^YjWI|=LP~{j76g?yXC|a?H(Ef{#zjjB4`woEGsK}` zNt5@w8Ku*bA9iou+G)Kd0wA`t>fr-ZmA`8n!&TSNtkGEjB!1Stp*Hc8_Q`~Yr#rC9?wTT}-ZTeqTc+mtDU&bo2Mpk%JS-D;4 z!vx^)XNa}{xL`l**@B+~xU=j1_Xf|p`M-0=ou9kH4F^{q0OMjB!Ji8 zP#;}j{i+3K*Y3INo_lUV(ak5W&-$L?S__6vI=(b35ap^4AZv_qA+8m-sOtnZSJwU( z9sn;m=kxCRn9JXzhx^{&wgbMoyEg5omu5ZqRR!I;=zL)5z7hE`JXky{kTZT#4~N3X zdlq_N!?4J<4;M}lYdUE-UO&8jAfE<25Fk9fzdNa>>&Kb*5PF5N;)U(VsaN*2s6+ag zc+qG{c#$EJ2_Pd>!N;zrY?UL-&m_>va}cnC3d4ddjXd(1N4;>S|0{u7f<4>3clf6b zQA!)#kQ51kNe6QSa>!KIt+5bxQH(McqK-q^FScqlt0NS`554Jue5@i8JS^}P!y4~c ze~cV&xmd(#0OB(tKdz0_wiZRKOB{`i9pFw`%k6#M+~YzD6vO7}25Jls_IVF78(w*3 z-b;6^qz}>lYZuW})X#tR-*57bgPJ-(L?fn6x-CB3*@`Zz>(4$e&l+xmH%RWd=WyYDAj{}YthYulL!)dfX%ZER{%do0ptu% zTjqEXX+flI&)*I9*$<5_7JTB-t-UD@fDQx*AH8sXumeBxTQ58iwjN#BdDVTYXnuZz`NtdV z{pk|*HFIn}cLy6cY-4(46V;Ix5Gj4w9#k%1NhIZcDGZ@t;M;8vZcum!{l|qq=z#A- zCx9o~IloyCe$$EnI(_(2FGEtEBR`oRk$40XlTkML=8`*We;XDujFo-iF8Nw_6`%9E z_3ym<2s`-L>G`o0O8Tjz0|COlrrB_UJmq-CXiG`0N!W^3;7ilQWjGNbyl~n@ENs9= zKBX}5peOlL+;SneR)qL=9iHUVJ$XcY*v>UmdEe`smJl@98r%I$zXVXd82(LPLcQ7$YgKL6zj7B@M<1 z0k|Mgd2=v<14Y|t(*%Iw#Uxf^pga2da5Dm&sjD8>!k)A~ zL(vp=n8w|FPH*Qq0;!J(J!B(`?u~y)SN7O4vhFs#O~cj)vUxdzDw{O+2@(=r43tpxPoQJNry)=|Q(~8~KmkvF z!lO0CdTRs*xRuLLnmg2fR4h|mP1<2VN>#z9-#!6Rq69|3@SGqLCl5KHuuPBtls7{x6@lTzTO3vy{%RE*>D9ck_eQ^ql)`yG~h^7NwNFTWIfrvIyER zUB>5bnAX+aM~?x2cs20YmIuDJ_gD43!4~-HT7zFVELvS8F_RyA&sYI&SOI82-s2kx zi_)`5U?_aZoU|D%{9Gevf_ih&PWm1I9Y~_nNp+aRGP3yclDY;((8Mb^mJDR>p4p@D zLZTJWnxJ}8F%BcOAQ^)Owa~*!5R@{IrzlH0yn=6a`ZA?tTp~=G;mx%2w50!iEVT-~ z)O!oD8Uwo`HO0v!N%@y7dm-Gx} zu(QvDeg>q1kb%oQZCseRGN9U9$toWc;z>mZ^F^cs0YX>UwV?2bli{ro7fcyvtxhYS zfrdcF0!{Gm|58%k7%KP|+*!xAbAu6fR0h+_4_|}NSE}lvUabOQC^GBNM%ap48yn-J$*Sc5GpC6@Uthn*cxMTAA?C_VEO2})1X6zv{V2?Y`h9! zWtBOij3}4fpwGr%0U#S*lB@O$VAuPw3diD}Bv%81Aw?-ujR+UAm*gs>EoD2&N0(k{ z<2j`fkH9Bv$?0K?Vxy)ak=O3$cMeK9@$RyWVFzN%wW|7FVYfNI?G3g=rHf^^K&Ah- zMc;F5S+)yMF|V=zkqzu!yNk6ec2RAtf!dy$Jeo%in=>*oQ_t!!ZU5YYVEfKLavXT* zSl|0=e^lv3F(g6IfMJ)mNnGwD41QAfq}~Afez4bvB-a+0EWe>4Qt%2l$wvrU=~VZa zH>&5nc>2r{QdP}JOt|LCC+4s`^@?T5$8W*K+GxSG1c1TF=0i=wym#`ZAx9dNKA$CH zYZoLWUxozD zbjZE$4g1wW?2xtFh)-Rg%t!43vg76#pfu+u*m+a#(Li~la-*AZunV= zQu_|u{faL2U1w7N-1P<|?K_@n?N7EaKXPLfHZUwm&g1+O(hNtDinS!f9PkZ9S8G2qa!Y0TLj6lL*OHD4<(Fou>Fj zOCZFVSWnH7fbK;z0%cfvE6j~YCls&>qqMr8%3zXY^f=#GTzr_MxtlG0n+YR`wL%Wcs zJwT>C*L2=~x~T1;S5*g$ZI5z^ekWt|#02{vTgT$M^O)}M`|S)Ee!nGkipmh)o9_)S zT>d_Am3yqkVi-FQNQGKt{dz+I$pDlN6ur`wwL2T$*|WJ<{EW;sh4?mKSspo+Lm6=Y z#g*8&O>w3(90(l<5H{`Lz7jBB8B|vGi<5;S00V#^<4C1XEfoPQ-e4yHfIxr014D|x zhDC@FiF0y?0=f#i_hxz9ye5D_TwSN@D1k5qR3iy=l(Euans}A~S>|5v%L^tuDETUj z;`zzNI+33(lkk&3lf{?i;DTFt6m^gs&9ekuKyTpVLU9-ums3u46&WbYWWphar;K~q zEy!YbM=AT^n<#mX8uj{Q7&2Gs9&MLMR|X~(KgpkbGhyR>7si8L)CGYPQ8WBpcQ>R@ z5OeH^rzmxEfvrweeZ0Cmyu0oe)GXThLjgWbQ(^C+b?l$p##-Ae?2a|7jXL>^$4#J!=Q2=5W|%V6qtrbS$kX#s_qMb#>OxBubMxE5Tf|Zd0H7Ls>E}C z_Fm=9Nx@?GVhZ&sp#xc=vuv8~GaGTSj3;Ik)mGA=3}v1?cqc`Q2MyDuJSQHMg((}m z?jPGYI-FTfEB>+xFJ_c@C};AH0kIM<{Glwot&`9zWRoh8=SfCmk+~Jhfr0_B6Zgfm z3hzgz#h3Q}bbd@28j4rq&4qhfl^}}SClE|u>LCVj=-gwNFip^uQ=)QnB;|mMK$+e- zXRf5!v*Jl60m(Z6Xca-zjNDMaE;RNhiTpt;Jv!DT-7A0f&sG22Mj+=`xw*O4ubTAp zb4^7ZX!a{uD=g1Uu(;sBa)05Ea*LVJrD1uGf*1r#(wZ~J=kcxn^GS9t5YW6cFyR%V zDP&pcl#I)oPtbv(9v{nRF5LTgaZJ8RZZ;f5TJm1yw~#MeHm`tORV$SAQ%46gN7!w) zSw%_tlYk@>T~hd9$n??{t^UEdNVhy>DFx}q&_jEHx18&<@hnd{)Js`9$q0s6l;ux8 z6G}bR(juIcmBK8cC=If>F=FUhv8an;o!amsOx&Cv?uEayj#4Llnk4%aKt3dD>)hte z>e&!bp&UN;1Z@~z5uXiOlquzq%~5L!aC-aHKUWw?wa}r7oG29`jyen7vKh4clGP%i z5DN(v1@HxDBFf@Pya*vf`6`N7Dat_p`xSjDn~MAgvb#^)fhN7drFL~`)AZ?kFy(V@ zc=Qu9EcfTA+m)v6@aUkblFnc@$J}PH-@1X19qYdt7<-_rD7Oho#sz5EDDsBwJ+wO) zo+X$S!wPV+ZdrIXd1Rd@8&^$RSp96N!8%o+_HPlkbTHo|TrTI`a6%w!1FgrPk;%g* z7)X>>+T{QuK{WUPdX=daS!5t0QwGWa$Ehe(V~c1*CQJU|0k_GT=x;@g&LeA;q(= zP8lDoxQs#B%!W(>3j~F zt?PYRY%&fQ^AG~Hd28ppobBFsru58VXWaZs9YS6Uk%!R%r9a5UqeP`J3b5FiPy1}b z1piM82#4;uoY}5^Z5fs1HWR9!K0r8cc&D%q-zZ=%0Yn%U48tjjSfSM=LRp1p12uL& zFEwTTRtCu3dA+~wkwyIqN0)`?X!K;8TpJZ@nCzmS0GJxcyf33W;h$ma0V$8nYWgtF zErz*K(&dRD1LRv(R8JAHl)8H(-HBw^ zh`pC?ocj^VVddf(3NaJB>HX9x4^rMjoKkw~><0*dM0n@9#t{axE9!~{ViM)DOVZsl zSD~nvvD7>Dau%^L#Z6l)`jw;YbGw*kA-lKjFlp2G1iPObCM5?>?Y9owQ)l`)e+PsQ zO|jT#S?MjGjj2h zAQt^ugBh>zvpiJ16@2Zz$Z|FWD(^|8=jCF_yr?IK7dQYqkU7HnV*eb{lFam;qjL7d zFwasbscedXvMA}Nk_#94^|rn6BIElj&7^2U6f0LrjQA8Dx7yR}24?Yv>zGbF!rut>i=#ke9+ab%NM_J=fUqoklsC>kkW0|(rfDREBjsuyd8JBBmb z8kHGZv00Z=g=Ls9Tu6%toLLl(wXy>!OBKU>_C)hZFWX;PM=uJQ&=CkgCb?>S_4Mh9y?+51Nds*Mo<2-f z^$Td~5U=VN(o}xsW;ah*dAKFNaAsa%=i@Up?Sh$hyM>jbSV0C5rGGo9OYMRi$NSNv zz@GS?U`A|Sy^(D>LctgS4-uA)z65_6j|YBA&y0Rp{S2GkQ3xy3l;yyRG*p=ILi=CS zG`nlnNLQv@l%ui} zo=Ig-5p(%I0ErUgNyW>XrH`Sf}~2}nDB?a*jVn7E!{YcflVT$)dVWp=?Bi3VE-Z~a}-Yn0a?^nZp z+UY=ggqs_a_Iu6qY-w>pxuQLh*W?2M4}~X9RE%x?IC9})oMHZ}^CJvcvMR&9DwSeE zs5rYZAz1Jq;?1RqDCWmzLACtC)#NK{X#%RJ6_YaIAo$6|Ra|2LRCo*&oH1M=%aaGf ztRTWb{6e}$4y2?|3>N?-g(2n7S<=ae2i(eWWL83xsT6Kix{42_ysO?EM1u+%ptU(5 z!7~TtTBhT-SA@lH>_L|N7aiJ<{B~O`Vo$LRUt#fZjs5dAn)!Y@B2NNUNj#)XlK=ML zW1Ia!+qOp8FbXm*&vk=$f~=%^VgFaob4eddx$xLUA!YEiY`7rvB5g6J$1#7r zg0Ibe;;DLdfY?Bs^UJxE_AA;V4&^JaRUSwyy#@HX5it$>P$%LKl+edKnTS^5)X<3y zheCOP3>0ntNLUC5FTGVRavqiec={FkdPM z(_v$ePqzWWPac~XfRd0R$a*2MskT>ptRo2a`wL^KcP7|-WZDmp zF2#skX*iT^iMa>D*1g?7*v=1@+S@TnX!zedc89AuR@F+YB z-h(_?7R00rQL5N@nv?j}YbCs0v~2q<*LQUxZ%j5K0FvL(wa zQunci@ezq+VN3U{IT?7tN*4!=jKgW|O>7 zq^t$Y$TG((_((a>1scAxQNHLVd1JN6sDS2~S9nXJAznigpxty9+5FWFGaBGW$fN(7CJb9cOz2NpMkq9`s768+wY;s}GuhEC8so7ancHhWpB&@byh87--o`L84Vy2MCYyY+Oox+SAga!8P4}NZbA+?S+M+>o#>v<-^h%Yq zPsoy7*=+q8r50&YUm1oom;R!LC|d>M5^re|P}t7F$q&7Gl3ODvZlB<^B96rzp7%>; zK&Bpe>v=&DJLRHtlIB8kku`ySZzZL(Aa!c`K^kJc|Ily4h^-P9l`U$W#XAWJsJTLs zp5&#f*ypM$_>qwU>kq@13VudzM1~6QS_G461^%{7o$!|OWcji>a#g+)87j5_p@;Id zoJ+16FKoKy(Uc@#@hF3!tA{6zWB;}h_&z6Lre0{B7MFBWM zGCCe-LkKCCDF?!zZAp^lB*~d|y~pkjKN`?E-ql-jjZzofYKj1pNuyv10iKB-KRRH0Um^~RX*Lz z_o!EYYN7!*sTciy&?lc(Xwwk;b6&hZ#m<>}F3G6s6oOPd1fzn>@A6!Yy~if5ci0Y(2DwqzKv#8CqSjtF{oLRa8!2G1@nskk z!`R?{o-g$FlwPsX4Z~OJlhi5oY~sdeAlEyjGe_BkRq>?1OxL6nND7#HN4xv;N8U3z zdy!MeJ~ebeUjv@B3uPYdC$ke6M$uEP274c#(@(b;*|yzMIMQ5_V&^X?8Ik13B3^k0 zP^O1sp1QAJfQ4+9^Oka*^NcQ}djh2z%QyTZD_MN=)L|+i{Q!Zg}(&2ZVEf?kI$uWHpyc)Aa`1rK^u00xnDk#GG@v zi?YjwAIv?HtVa1_;l?JvyqYh#z~4Me{xUprNSSpyRLC)#oCN?1TPajPO6G<|B@jftkltiLBK`Q4d-3t&hUCzx&nNq` zQ(p$T{Ui~UpVjhm&V%|->8PXBq95|@7p0cAG^A=cv}k@s^~(C^qCUs)vb&sQNZJ%5|krGijS1%H()tc7`2DBANU- zE{b6<3o1{f;8oRT@`JClerR6uSo-CvRacgND@6x}lN!tRd{IA#xNN^%|L_d^7q(F! za_#f>+|exmrZ(HhYTkc@_mRW>uxRiOGG@nl2L;I1QhuvICpuZV75?hpgtg&hT3N5N zkd`b9D@PHg$(_~t!oibbU2#oI;_BgF`jTswcqcyXbRa##M=o4g?CkA57(Y~rWY0k2 zzPqZoe^K6YsX51CFgfU&43pxf3{;*Dn^>A! zcxwPM5h#U8VL5mi*ti(6WQ+0x4DWIuDV*|>^X?t{6JMYjB3;eNIAnMb)CVBK4Vl!# zVF6X->p{@xiM!#^wl`S&k0XZMxW8`haPdTq#aZXRn5S(NvIsIm9r^P`FU){P4;R1& zMivDbV&f`a2`wKqv055BsRFBn^J;o7JfZ@eacaZ#r!-u9% z+L2=ihfxThPR}=m5Bml?V658h6m?uQ13yH% zJU7Mu8A7u^_n&172u%4a?lR-&?w;5L&aSBvWLG7}(6VcPzC0>kaAPC;QEz~iV3qkH z7n9(x(vtZ%c~Mj2_x$asKOTH{};mts{7)E`|! zIGc`=w^BX#zhLZ3O|AC6DrAL=z{esE7cn@+(Q;(vz^Yr`5X-}s!YDloi(ovEsTIyt z$S2vl2ngH0QxB6IY%6)7rD$6Eb4S~`!mv`Bx}(?l!UXen_2}-RUo_JcN~4lp_FtL! z_)%a!U_vdBNx5Uo5XN7~NY==+dc!6Spa`1rmT~dkA4EPe9KPYygAQklvY2OW3VDaf zlK?_D-TKfz?Vra1(SghnI^rqSk1rek_@t_i4sFxPTB;_1oTDqm&|$myELaJp6Q&2C zA{S+>P!6lK^nx5?<|{!*IZlQr4bFqp+R+I$SZte!-(y(>P6 zn(*oHzzf_vef^p=Z<^e5HA-=ySlLi-}0Y)BtD@ZOk$GMQIU?ru8zPDvDjl4c4#~uw76mphDc_l7XZy%ww2=94w=euY)Vv0BZWx*X}I1FxB5HP^VABc^UN`fY`PD)sE_@Q-R4OMlk9vNv1co2)Qw?M7!ww3?+hCMgOPg3(Zx?=IhQ(tpZhPEXyN#j|8CMnA^c(5h)uLy%Ozy)Y>jE*#;bK_vQ^BO1o3O!M z>5cS*2xIv(vfkfNUTiw;jhaVg^IAY9y#~;f%OOv37c8aoRMHh}Gt}0V`RPUtwy* zA={cO5`WH3kA6z2$#}tEZCv(u4d?pV#_RIRVN_o(kdb9WmRjnONG0xhkz^t(A}E#I zHJ$+`>(^%u07&~;r3b@QhqxCnLeYSMk;2Fv7io(}w>Bos zSNcygg@4rUTp!{muVbS*Y;Vb)LQE6~gV~O=ofuodD5neU? zj67!z!XQUtpP}V#-NEH67u>^r>1@)Wa-on<43xJ!u-w0(x@wx`@*)ohfvSlKE%R~T6Nr49!%&)2*@euhlRO>)i%8+=3$ZUix z@QZndF%mL9kQqG`9_44CR4^9VO2guLFCW5BzvrUNhcKjL>un5D57_U)^D^n{n2548 zWXfUKGlmcgX@acCeSwhynRhGW#z+0Eq9bgy_n%&J{JI4*llE&AwHqc~^m_r@(`4pu zp76m9%x~Pr^yoflx(2<>mHRJERIbOk=R7`eWywS!%0iZ#%+ZkWmo0C$@*w!Hd=>y@ zd6XKTRyVvkCBTQ57dkBhqv`zkFdg=_uE+jS3Bj)UA-`7!daoVn)4kc;_bkrU4N+0%66n^maF0wG888L+m`Pa<*6~(>Qi=Ey-Le3tTryHH z^uc0Fq6j+yIW%7~Q3#5^mGhFM#bl{elwtXy0hee8iBtlr(L^XNI+Ol+0+;Z9jEve3 z{q`rV^=FP&VS_y=evu+N%|n|A{RI|jL<)QdsRu7oe8N2j zfh~p5a+x?HbIn3>Aw>?rn2c*E8<|wO1Xe2ja(+`QsHGb`(*?gEXf?3VH72JtLS6Qg${R9ueFtzp=gpzezhhTF3l#AMriw<_TS|aCv^; z%@r=8KMv^_)${)SzV9@YAu2Z9hTnq9e)}6b5L?QV0zMRU$jY$PHIp|bx+0$}wmT?Y zU<`tBu|+&oe(xS%5Vgai?e9S}lTY9P>A--nrA4!R*yZ4Xa5B6)Aw_8u29>fm2-c{i z7s29RiH7_%kO>~dCbi(kO8hln;lofzl3Bw9$T=T2hEqwf2o2czLCZB{t9W0t#|rBNC-ZW*viKbelM+YCVMJ#2aSKfAW zY;1t8;0AFG_fe*do0Pv0rqt^z0+#jj^NVfow~;+S==9mVmsnKG)5a0`vh(p_p-fG# zn)$)|_b)t(1Ed25Lf0LB*s0(BP8!o*B0o%8{3Muc^^)l)kp!>s6aI=*atq0@d}-<~ z`Nj7P3wsbD%Wg71>5S0)pDaQA%R2X*rNttjJ&`Ga&Iz(S#p>p8aI=qB035l9rK^8xHv%V)r28L{9K`>Ih z5Z^%`LU>XRMt$$54MF+PBUWRF++tJqPmT4ETjk;XqU=!OTLND>PE*RCOlz2UMQ(Kv zGG$0T&h|Tn=Pr@=o^pn3 z3T5b3LklPa847L}lUs|Kx*baDa56K={b{GmpB8`LL^yewQ$j0>GZw|Lw2+FihEkaNc}X zk3o4gAms5BpxC^WRvIz}TI>*`YsRPra z=|2U<3M1lT8QuMc1cvwp0@h_z`Q(&GHf7b1EOf>@HmN4GApuslc&(DE^cb1Zf=DO2 zNq*8_uwS3if2_CNPe`t3*!BuL+tc<6d4lGBN73BxB41ea z3uETpL>6%WVc;XjyM2dB974(wYyj1>>b(81ql#zc%*a&<0J#vh2w2h&f*0~|#e2@{ zn+s`{!VJDM=vIn*F$==^9q|1>^0tFpDAUq`tr~6VPo~pzw-DXmRJ7}wX&Xc|+&uJ} zZS745Tnupvej*vx#-m~=cn}Egtu59q-6W_zm+meuogC)dyQDDbknPkX)rLsq-1FuP zJp1%3f8TC_s8opoHZ?#Z{ZQ2nsMsRv!=Y=Zut}B7bAP_0OtpWAD+ATb2rtsVJd3ur zdoNN_x1kQRh7*YwNm=xqM1CY2SrIk~bW2Xu%d*&Bs(&RC2^+q5hg{-m6 zBERz4mPH!5EWEfc@?q^~-2*?%dnlaoQi*XP&PpBh0fZcM-rb2Z^zbg@BN&wMPY)d^ z5Z-goJr?jevlpt~Ec-7{c+DZ<-yN-! zN*4jA^CN`0hvMlT3N`%uig`)(i6Zb7^fb5^Ti{th{Y=)6QI6sBCcb4Edf6mGGIX-0 zM7<6nLWT-MB5ccFo>mhiH^!sX@QJ6*5LDYmRiBr+N-8ahODU4A|5z1_A{e$*>FC`y zC4XND{cn4HwXcC$+Yy|K9{8d^nWo!kczy!<4cGfSHiMf?bR(l{eIh~cq})VMmeimVEe5<&Fy-bmpp$)7oZ{*L%V^gMF zR84%#m

~ES45l=;{#;@hetI!hAS0`$$4|{41+8YXg2-&kCX_8f7Syhzd+sP$3+v zv?wl6n@~F(N8KWtcEw^lbJ!X|Zs!h{O*e$P=7vfqGY5n-2Y!q8vrH}oRXTst@N;fG ziu+Zg1Lqkn0gsgz6<&lH0?PKL8REe?FB=!7ykpp1zR>o*l6Av<9R>sED!Qp@xg>o2 zmwxXZ58#05z=813KKk(w-G0sK2V6^y)6Q=AgEjk?qwE@|`|$pRX-9}3?O7&sa`+G! zQb$b^fb5+#pdtgtxP%xGkXdD1EI6VNJAs@IEupiNM|3^AZc{PzX8a_`1oiDdnG+A1 zq2eih`4pwRGD04GDn353hIi9Nhv`NN#gZ@DqL~O7m0a+XVO2T2d)9jtc~W3W#^1z2 zu_}aDQ}D!~Tg!GUj~#A_fI*gJeBtdQr*{!#mWl}& zhd~)z9alG}dob+RleA!1b;EKsHT}sl?Hr-&8CI=d3ytj}nu#-w?XUIA^g!Hqi51@C zMTf*WcPjx|xNsqUX{b~ATOKw|)*@)b>zlG$OH^{F1cpJ6LQl~DmPETdSiJx5z4O1H z#R1cSE|zKOfBohEcxDOukgJ&eSV?hmLHq={m8ic&7{v*}EfBq;c3 zxlYkzQ-pHAN=dJl9WDDdkDT!$NWkXgZq&HreK9<<29<{bnED*3sL-m8r+K083AVk$ ziL*0Ps@?Et<$g8R-SFqyY>MgH6t%lX5DYy*m86sxBO`_EWinQhSt+NGGAsFp1vhd9 zG#6xD{$x5LFW`Z^L6;3COo@-mBy<_NSHSwEP}du5f1lWGn)|Ry#6L}R;5|Y|%ROHH z>9npMLsgv)6%~#o>;DEN&G%Cw1RJc%q}ptPQZX!2Z=}Gb+-GCo!AJv-a*2BCA3<4z zlryZzZMv6#wR@pw*m>C!BbL0xNA?DSQjq9T(NG?^uQQo<_QRv0CqQEEGNxyHc|MHl z&i57;>Wt1bkt-@tzBA7khF3%wPCQ~=A=Oz-1FC*hcx5zXP+QlRqT_`y0%4Nep=fJm zl$>w=ro$brkiOEVo`&;2?3);n`ND*#(^8Kwyssf3=7D&ciMsS7FqEbZDjUS3clcm< zwumd01+ob70mCndr6Xy6p*)6FvC$TQPCcU#4#VMs-%$EP`56q0R4hpZ-MH&pVXlGU zqPY1%p45*$yt{WFE(5w8fDqgBop&FeZawD4>`$}*8bw@y5|qZ+UHNuoUH6MdVo=0I zE5Rs3%5z#gBg~xVBHhTO*c+uV(3Muq^$SQUP!={ABso0DCRCNhvh##JpKf)i2dU6! z3|n)QZi@VqtUPTWVlDaXdHW+l9m3BK?RJY{QoY1RiU$!AKq^l!B^K#PuxdnxBG3ub zFO{tknUY~-*JEgCDx?_&DHd3yBY4I*#=;F64hfJlj{E_tMIV#lSREv?!b)yAhV@kq z`^6F;Er!zXS>}k9n?680`H|5Aq8viy3Q;A+aeuH7Ju9RlyaFEuGE|6{Yi<^%^QHpe zK^qQ;0w@p+awx*HkzGk*4FCp;sO3QV8Q@Yu@d(VL{lxgX}heliaz=I$8bJtCN(2dnMNf41_o02L@nUwMi z=%LF*_9!aplZKY8$%5e_)3iN(9ZK^}?w&IPrQuFFoT;uYNt9eP$X60V! z1Q3T9Vo#z1IDahyqs=u`n#w&JW<*}tEN%ciO7}EWV}gHl;w)R)@T3YW{fv7i$6SbG z%V^48j1LrtVu7;!M{hRnE8<#xQS}C>jr85h-F72=H9xmp{K5DC)-N8|r{8lvuj^8}u;Rf2^fgr520`x}+uNEm2g5G)jPnAQ zjEw9#SpZT>E4{4o5N5uhc#HR~V*+KnPspY-&q z%2Nq=V%kQ2R`JjRrTId}12Xv*HX)^3xJo`SdCqji=FR-14zpnH8&J_m#NHtK{hRIl z;G{Z#4vTlnmSKzSNRyEScy@3FFizN4;O; z-7AO<&LS86#`!)%8nR5Qoa4SQk^2CKVYO-Js`eF8!T!CUQX|!RQ41}qV2q33xYM4 z)9TEBc;_GfIxZ8sEP8}3z4M_n@8GI_G#tRqRizaG`n_1YCVf)hMu&)f8nQhjF7hJ7 z7lN~FG^SKjnuDf}OGCJ!RsI2{?TT_U`#RPaLQU9XiXoSQC z3HVt)%arD5Wx9GBMDQUB;3(cIX#vJsT0Z{M)n!Gehuh_3MVMMQ{NK| zZPRX=Yf|Bf<>DPb_#6M_Ko8oMblCvmzx|b8e0YzRzmISTZfBVZaRup61J74BrziW` z@^>aFQ%=u`%Dlo8s}xm+^86VN5FGTcm_x;fOg_Rbt9+GeAo&v|;}t-$iiXfH#4%}C z!dN94_dGf8lK{zhrgQ>B$w#`!!eH$eMKU@$;d1`^3$d34C)ru%#} zO7`$Mi;+E(PS?7dTTlkk<))i;Q?Vox%bsAdv1{K&AvNaVXD;!8lE>_svp~6D2~4D1 zSs+tj1sylz%SM-wzCf{L3<9VE>Y;F=EUN6b+y$N`*|&9X-(h(6bA#Lgp&J&hs|)Y> z*aN?c%ZM(QIl_)UeCF|AIeF^T1=n)e?1o3fB$Kodv9ejc%dkg@Ie!-+E+cQdhM~T& zBDM5ki_nWon#>3jmMOl^3xz-S+keK8m=<}stwf$gYB9H=tbwZ>l4{G|_T2izx5JKv z^li3&UXY?&STR>2%TAvcM%*IN@nTkskkV_BTO*))C*8a!vw9Ekc~S2}CTa z?1o|nxlg&J|A)Q*0JQ9??t}5Q&N=tq_uf=>1V|tdAi7O)!w%pWVw(gLJ1FIgo!H6e z#PMe*_CI!P$8iP{V!#G$(+oDf1Q-K0V2WvDdJ_^&66z9?Mx*KT`YmVuci(HTz0ZAb zgoNge?wUF8p0mr^^u824Q!vcOp>4WJLkQn%eAhf7mTMxG zamJFrfAV<&L6n9;9+AC7->$koK;-cWGU1=4+m#Iw*8@&)ClMYX)80Z9;ZBlg!H@fQ zrUB(Nk^occDRF@4;j7nypdadL>l&z6!3mmN{*L#&{Z=@I=v2}O;l>ZWXa8zD`4XsJ zgFPcmS0F%KQqkQIW#81iTjcIGE@ghX&L#QyZ-bJQf-V-q0r>Y{UXnpxurYol1fiMf zDbnX05GacSfuCPO;Z2hEz5;Lh)YE133YFFfE3P3{A66r_DS9Rx->GWeGz-BB-$l(#h=Evz>{R&MctIza#Cg})B!*@ zK=NNfTzS!L#L029Y@%skc{2I%UVH5EDMP0e5bDZVpR^xFz1w?j&7+unVOXwuWB`N0 zEa*PgES`H;MlV1qlAKT~tfS&hAZ{>`HZU&IvN0RVflS^-m()jtoL_d)f;5G;wjP4J z9kAEuKbte4)qTaL*?90X7m}M5N&?6!`-|fHN(CM4pGd{FXn5y2eC*a#@RGfUMOgutOjm zL>AJjvZ=L@W-pn93p|gQr0*P)JlpvETM&(;i+KIAXlY!g>B+bNd+@nu)SJ*XlRueL<9I|Hh^0ee{z*7Am-lj)Sf5xPJ^cF?!`8gdryEDZYzD za&k0H5@HnqEId%|p4Lq6l%(VGOrbEoVX$~4GRoXNUk;d3$OWOoGXjZlN#q<$%D-zL zinj;Zg2?eCh-L8RZDi@DizA#Hdeb|(5R9*Xty!HC+wh{ibOJ((ki@fyDeDzQJXSJf z{#iVNLe}C9??LeQ!d2>|-BFf&!n4#a+m6P{ovF}%sNh$0>*7U)d{Jm}i3jD`D>{?} zXDMjxy+!i(!7Pe?OEow?9)0Gl{@g8aiqR>h5o$Vn_c;gGX!2>SnR(RpDm*3c7gG0( z!q@CX2}YqrtS3X#4N{{gPcs!nd2V8xENOrIACDu$mj221UMLG#?XV@K1sW5ef-#zy z-HO`WQziU0Zs{Q zh}RLzKj%>r7J)CNd`dzrNk`;c#wn%KL8TB}3G($T!Nr?1(Y14&BFs=cc)3PN0Ajpj zI#l2lw9=$L3TZJu=`TR4bwKV9CI60~ygksg2%?RUj4#?*c29-&$-;5B@C{L13gMqa z`u=Lgv&at=@*>@MnX+o-W%o-ycphO2xp2IVh{f~zx7B(~ZMRh$_bM79ef*l6*N?*~ zMyDJQ9y@gNarHVr3jJnc&7)vHQnBNV|8NVRQsJ38zXcwj3cdt6#}-OylM7!K05s)m zlwg^1bnZVZhBKrq+D{aW*=xo7;nmgzy!>yR>S z-q}Vjd^|V*o%sAyT9@er4S)>jg14x39*;WWNrAO!VO`&@!2OFq^`Vy!;S{4&&NTY#ANtVnb^r30zBH-oTdQ9EAQ&kv#!Q7|>j^Ph zv&@GVzI;k8CeFk`koH*lFSz?@J%Z5l#`HttbLb%9$v+ZdOhQTyQh-9pm|qgS^L1j8 zTDL2W@?RK3{jfEdfA~7|&u^hwP;RR#_O*SeuNVLv?zx6rhm_ea)({T?woh@kU@S>6 zZSuZqbrVQY#31&zSqkIM9`5 z^4gQe)0uyfW#&!1$B^@5G9qSDv=?GG$l74yPlfP2f8yPe$fFNR!awWqp@>6}<*^i( zhml|orEszx7Z`;No&)N|AP8v#h*Q*!HmHZT%++sTt!=-&M%B$YJ<)rGPB|b{MB}=- zX@u<;=IZ)Ex+eh>43!%I4?3ujMI<8L3C9SS0`6E^5|$#LeEcPd zGveV%LJO4J2nPv2UT5!H=WfRW6%=k8L;uGYVcS#IVB5o$+4D^0y--=qJFGOo&yE28 zY60NJe#+leTID{THq-+;;o=uNFk@)Qwci>pW)brl@WkuN)>Is(b2V+=sh9MHm&O@N zL1CP@@DdGzOK>hIBtLl^39yEiVIP&BGt(5XvT$Bp;M!-OEJ4}^Ih!O&<{&=@%-jg# z#(F#!X7_w?3$jao3Na7O(ytsZHGfVF^x1#w>RPLm%QKF{wr8%uwnr)u zJVQm9S9RA@mp*LtLZuBpN8SJ1b$|=TV8##8U#)A%?gI7;=|m0hVq_VCTYL|q*YE0_ z(l^38k5C-L5N_tzUmz}uzn)*0nJHw=`|d(xgh*IU1v<)8Y%itw(o`7SFmErx zuZyn?FWh(qYbX?tI_45uKSl0f+K4}EC8t$W{?AYE-I&DaSu6u^*u{y_?0`axsL zlej4H0E%!@l<;tOEo&&O2?GC+__!J|KE&ejG}2IMc>QnUu93P70GewIqerg5{8Lt8 z+j*+W=E+$;b&FJrf2%Y=+y=1oEP$uY13Xii>32<1@bh3OKRWP2*8cjl50T}+B1%kp zey5uh94Vyxfx&)B@}DAn0=us8l(82XfegesA1DZxES@NrC)QIS zcO_bgYvY76MPfCXj@$ASyj!W&aegs55;>)mpHSwce-W6ApeXC8@a{YLNTPE1Bsnka znS0Wql6ey0WV_N2ZK=HhYs(~l0dlZ}G+q)`x)t&uL0GoUB9QX}Qd$>T{gvvLf)>b+ zTCzLID7Su1N*lcFwj<-~u=rx`eX8LUr60QByv3ahyB?v!+a?%1nA=#iT8z zImPL90j@3(;!+ad0rAT%64k@A_5GPFE$@%%OXa`96|ieK*sY)Qm61YYa(cUyzr-vMnoAG z61=0Clk0skM!I<3nnKk@S`%y)2xM-b$U$b9pqsVSg=^m%0 zL9E?l2cr__JbNsdcrV3p;(hS%F4KStex)!xZJrm}#04xrvLjS#&pti3iXlzAW!Yf7 zdAXB(iZ+(i8$q!mW!a)*f!MpP*t6d~ruG_PWp$vPbj}Ra-1KqV0I{!P^w0vK-O?deOsl|d;+DtvcL6+JjTv67 zo-2L1B^BXI1W_KI)ASd4{wbEv2x%&n)P)F|Ju!AJe8P~@bd!%3AlJl*XGX-OTuAV; za^8>?4CJd$!UE*^Ns{OFz=^dLEc>&*UyQ-pX&0y^U@3m7&^e5O3SSPD-#r%cJN3C( z4W&3;@2K?t%2A8%U9X`OCTUZweeejpEy!mHhFKe=LVIGzH%Xu?wmZoaQg8<{m4OgGbom#rS3>`bszR6jmTO@) z62{SoQ2F|y{AKD;kZ4>?6HH$@e~R%+<9Ps(Xq36UBbWxooHy4HjV4I;(%|RKqFN&y z0vT;^I5f>(|BlqaRK1G9RN>M9=rU`J^q&< z9V>(s+$pcIxIG(W>jIJ8+wUzsC4rnxZia3Io_dC!|j8Q3s2kMcX}h?|0^0AWC$zf6ckIA(5Tf2RRzDdSO@?RZaE^6#SV zI)b8>$KvsKTw+U9=9|4cktS~^C2*6V$=gV=)8yUT?Az)FQV{o$=Og1&s3+d;J1=0J zBT->&Y>N20!N!?K>-ymF$#CB<{M}nl$w@MvPHiB(?z;8m@%R%;8@vZ$O7s;FK0$>&Z_Ge29{+16 z&!n|#!=xXCpBWlwEpknP%tRXdy|{WHTlT1Uh>zSjIe)qP#x%iG5*$)6$*^sky0w(1 zm8A!%;P5=B<|($dBpej#*0&8xfrqy;@6J0E<~=a8JzruI{Qdg?vnaVXM>T$fntDuLD-1J8-76BmmN01m;=BRY14i(Z4J47cp(HM3pB#a( z76j2np$%gQ8_l1|umJeYwZVa11jz~e9l0>o`D2*BZ~}7+O2BEes5#iUb{Zi=aC5Ie zKm~e}q07uRHC8wW@Ho8-4Vy74mr}?D=B_Y)>O3W7iaXLI-!DXMqsjmT!rK5JH^hYe zBPU=&0ifK=F2!ejNW48C1|by=NiZRV5;#(+XYF+?IOw)+% zT5k6csYQ93NV+U0x?{{23(M0C=^?9P;_W{~bWw;s%l8dJg%$6W-zP;wfFghZr1j0; zE2Zx`13(aMgu6kS9_LMvwh;iqmr}k-eD+)dED-61IHhtz%D)pRsa%%QyOHnHe9Q=b z8o5z2Gypbs$;7y>4xeZzAA8RGUcVnsaXRIJaL>NKK7M>MelIl5A}X7+KeU$+*|ux> z2T$%q3Qs7sI^L5FuN~9)7~Injg3^@0N9Dq#6`_m|lH2_SLM~(j_G4#eTo51uKtEG- z;^X#P=sj=(^Jfzb28yrI2E7)@I|3dA$!dio4TMTF)U!#qDXs9wl$+jtCTM}~UgnRl zFZ6x%u{}9MP)e6i@U{V>jZlYQ0;B-4qu2?O zAlshIf1!+BRIFFl$ilY|(F*5evDs6!avEW;rb$y@|Fy$M-ZMSHQ-e-G=>0# zAhg4*CLt-S`Ek;bFK20!I*WffP?8fGavxH2yig)I05Snq($JC~J>+>V3Bjb|OT1;- zp}R^*e)CdLL5En#9b<&?yB-$pXKCu*B3w3e4AK$o# z=P=$f0bTN!&IFKaDvU>|jdZ>P@jly9`w{6%UY#8xUN#cT4;xQ`}K z|1TX+^dM-TTZ46YjxvcVjZkZYm02=@5XT06W?f;;cjPofJ#$o>N41$0^dft8J!J$e zAVg5~_xx9UfI!aD@;b!#%aRpM2*ftquxlB=3@kr*u5oN3*9V z$F|nCFXk(rV?XAc!Axc59qzyVC1g8y}on#ujrP{b( z9lm9G@x8D`XiEU0rdyW|z5{yAEx|mhr{{{9qvU^uR7fVsBwwx+1w5Y6^7wN&u$RYY z4GN_Q194Gy@9$c6Zzsw?*hwY=Dg?9WV7I#MJF}=6L#@(Eh}lntfYu6I4SuR)(NpHp zC#&0qiS_4Wgjsn2AQMLU2c@;SN_>Q|YSS7E<~U+?Mk2lRRU~}U@0djPSlp7(<-9`} zE-Xa6P5})vbBs@$dz(rUw~|%v5ZtN)kC3a5y-}q$iJ4n>S-5tX>@@%a_=M>-BiSB7 z{!VFY{C$w9|DtdQDAplQC+V z>B)-&pns{};KVe+Fj+={;H2Nc32Hz2<8ONP6|hBU%K+h?_r34B#mVTe&FS?`sulW) zGg2sU5=|*_Pn!paCg>DJsUH>6l6qvk%76WLLTvI(1U~>uW})Ja76uoNVQyZTMfJup z-Yi|kc`c--;IuwUCbn>Dy(_c-n3L_*{4-CF zSYA8>@6Uw{7d%opgvypeNXF^765#?+226lVShWO&s*5+g!$zf=?JRhmOf zrcZKIq))X$x0sP>L}#sa33W1?0U&a7~0$M1XhB)^|KkG+ydmaLVxc8 z5IqQjT`r+dp;tp!t3Y4;$mc%sIoLw9rGW7FKKRaSSK9Xds8nyirZAjLVE_?Q(`aHH z%=dxuBta``FuV!HCvOf)jhgHqMNO}?g&MN-<2T3F5CSBoP(QgQn4xNG7Mn z1iA3?zgh3u`xVA)io%L=eo*ks+&X?sz5On}p^gA@z>R*$;+r}Qz(oOJVjZXZh63ao zUL4NhUA!2FSlYfM7=9^ajgP>mV9cs5`Oa9ronN*Ms1)=G@%qiZ(rA>oZ_htz4~2Ik z<7Ht=W6I*)^KdO|2S9lqK*lSy6`rZA9Rd{FCPDfOlvh*{V7o5=0*PsW&OIzmcCxni znxH#n!t5>Dj1I1@y>`!)SDtc*?@psF1%!%dWjOpx>NktwR0?kv)t++8H69V!N6(a` z04`i%a(8@zI7ohw0$M^?0J|`*$eW%28{H%D#pM$uek+ArgNKY@FhFRGS(JewgQ5JG z4U8X+A15?x3e|J1%%k`7=21D3Kn}X6H3d)>x)|z6FRG7We98Gb#K0$!2gG>G3Wbe7 zZW0lb7svz&6rv}>2)e^bp`P*K;h?|-09c)ch6$9Gn;iJL^h)F2Qkx5!U{--p94}0B z$f1+Mx56@%@Q|8j@?B7&0{J_ZbsQM*cPZmjxlUy`N!+RJYSUECTk_1}mD+%8haoHKg-#AqgehuJkh&FifL`_eeaZvw#p4xU<3)^TEo; znerf69O;x)U|Rnq!pL`@wF4Pe=9QobfTecCc|qwHAZu?vErQ%FxuBdk?!XeNu};Tv{bT^)ceMyKpCOkK2a$wj04P4LJNW?uac)Z=l0l_h{H6uPc};3Ii*mXz~{ zSf~Dp*RLimXj|`t{5R!-Jb47@u4#gF!8WG1$xFmyv0}6-aSO>7qz@#5uNC2#F!CJ- z-zz022uUQ5jDO48E0Ih$EsT7N(G`;S6E#Z)wwT`|JEAEbx8#rD!q99&8d+VV%nTIY zY35FaaNJGQz5nfecLfhBy+7eE>pOe)vZjnZ*AfwQ7M_2%^8Ex25Mz(1 zvO`eX96B)?AX-zX9vf6jNjpD)<+}R9I^wGz|NfWX0b7i=oJP2J@7@X4WdT~W>wPar62t@3?L(^!k&#zy4A7WyIq9NqjovssB*Hc`cy zqK#QVzp~Pf-}{y212@7Jq%8-8n)Xd5w+|couh*JlM$>|gz zKioJ@SQY`@ZNzZG?naqTpz&@Z6mfGZ7gPlCGk5-HDiG9Ls`XkkK4?v%?xYDmTPQ6o zoB&|S&QQGntH8glRQOEMgLCN8Ha(Og;{k5bJ! zNjedHvV0;FOlzzC*@`EmtQ{9QlV||I3nGy zHrieALKq&F{f36(+)&Nl`n!4<1iefk&Pa%!J4(M4Ml2(?yt zd}ZzPN|*UG^?KxIE%}A^fuu4tB0X}XhEHdVvoA{Uz@}=M(KCxYCM7Uf)QdwYe!NRl59|-dJAO#UXQ3IeZUSd%_ zrLBZhltraH@>-rwU7BG$IDoPyf*lM{TwaJGp|Rhx@}Y_A7)xOD!eP6ujHb< z9VGxOcyUlIWhCP*f>9}aM_WwNk_i;jE9JRV2YF(-8}F5Z+e;Mf0{VF9t{od3H}%pG z>7zH^am^`x=HN8il0c~G#F5)?nbho_Bo$a;e!ZJhqWo-4 z;C=vZ|3m^mVSzzF2xQ&tzjzEy981vw@uV5t#jJ|9-wZ|YuU%{z%H1f9AgfERQSLm!np~0Hl7vqWF9@R z@#x4aRS1OKB1E|m2-%=iDDmvE{1i0?S%(Qv%7r8FxYQwxWC0+_Q*1+`0{K`OrP^NC z2@~GGRE$=H!QdyCzGPWU^OlrN_Bx3NhMbddlAV-dJy9CItKLhzr*&fdGhYG`+6EMO zvw{;%;V;5MDgUyZ1zs{u&I3ffb=7YtIZtL$i}&b8T>NqgyJXGG5^d}*GFl@X*Z8f2 zqxHXg&imfC2wRl4ED-M5w{Lv=((1?By8enn1u{zr!gwJ&odQ5$0tQoQT$|?s3&klF zkz{j5cAuY4LCIYdaOpqac)e!GM-BPC=T+@&p?@wIvuL01Es8=2WhYNSDg{FrOgG`y zyc%U5JxBeX&t{BfTdh&91#*)LFd-6hA%uXhA9rt0uwW&2f4D{%gf!<7gbF}X2~rF6 zObOUMrNWfwnS*4=4-^EY@R#>ec;x{c5Tzglz}~&D3xE_GWxYV^=i6xlZV-Wwr{zJF zm#zy0E+iaFQ2^`px37_cYa=m4ow2Up(Y(tCUx{3ll)P zkFBiFu6$4--4c%yv3OW22jphaDLXmTJcc76QvC56 zK&WZ``!2ab zNjQ)UQ*eVqy_N2>jty%M**gFc7ub7~?TY&WBw$FQtg>x&wl5O(A<~t3%ZR32g^Sc30|LvEx^ACYdZG9X7Oa*@#{iC~ zc73(-I}y5uta7kWG~w=QLuw~Utsv7Lkn@S!Njmi&SqO;v!2)xD`~`)CDdU-DGJCNd zf(W1pjNySGdC7^8j=}s+L?PQgw$L_HfRh<2XAnhq1BG8~3CP;E`-}W-KvMtNQVQhp zxEnaW{5?XF3;we?5_R4M64TyU1`Gve833{O5qhXy@u}bsP|lP9(N1d9I2(OnoUm~3 z+kg1PF&?z*?pwE1!k9#R))YE1JII(N6Dx+|3JTz1^B#Tt8M9>UD+N0WMH}XY;A+;$E6dtGry8 zl*HF}o|*I;W~UhtL7Z)C^BT@DH2L=7KnONbzr<3?dha4k%iY)|pJh*9ra`5=a7y!m zzz=LL$+Q?>9;d|Xnuo;TM``dPQT7)SKDj#-!_t&+C1KxD*V((GoCitXoDcJ(4*r?H zb2djV5o=SdjqtW0(@yw7cll*`x|&FE^xq#qQ9~psFp%j93Sxs&H+N$+LG;Td*a;I@ z+1a9crf7}VeRJu~*TZQ*TOJ5Cz3-aC9~##9CG7Rgp^#<djocpl! z2HYA5Np&QeZ2)Jf-}4nfHq0a{&o|>>Nb*Bi*?M?D40b&wI#wF2q2&S4#^8}}-m!#WKuEay^=u|2>EQP8dZO>lN*k(^*Sw?KG=>!S8{h0C@5X?OqV8=xSyLOCV zLE)6LkGkA#eJ>F_^9AJ3`;HxUg35a2n?xXlcUNa#4 z;}bG>62bgCLB3aP2!nChFHC^q>Jk>z8c}W@CW$NDA|j*=BPv6ZK`!Lt3x_DwDEhNj z6wBv3K0Gzo20DBBkaWn(CQwZ7u;6YV!zj9Hw*^16@{@0=7Pw&img2T*&bQS3P_{)u zMU<5l?cKd|mpef6uF{)49?0OZRCzq{0oGI`{Gt=P7W9`Qn}$IH#1ag zfqIFATR5-Hq3xi7$=uxV&f(hsc*Z+l_gOei=(NxXHC=YuWuvw6`peZo?g4#Xp(i2|)&f;Y8#IX`%M7NO%G{ZdHpeoJtcg?~%cRYt_fz4{CAZ5A@3|7BV}#s2t)nPZ zC~CkI%jN~RpWqZH5fNiYp=V4?n1!*z;6ynfvAD4gSh>5jMj40u1#knwlZ4=025jrYvqJZ}fG3r640n0cjWN<@kb)`C51(1;*Tja*gzR%8J_SyGhO|s0ZR)&! zvxH&LeEe}gOzuNdK8g6(tQ$n1Mrsn(ge+XOTLIy2Z5Ew?vP!t! zWcbnvfX3|5hPh!0$1DV9QUQ_dCcqv*@U47FS2>ulmHr7jL-} zCZ^G8V;a@;(d(}t{nXIlD~n@ca9@dSA$ zsXKnjow~w8tP1S#%kD8fQ6lUdgYjHfruljBYx~+Ps!gJOyE@W2}_|#GcX$ zAEeUR&9y+el!E>8&3dzso{Dai)IypmFWC7B_V(Ln9UEQ%4m^Ps<)20ZD?T%~o-k)n_$qS|QeHM9u{a%R8rY7jfM^_DU-VpOrvNB}hJIY-I zLFfidciH6<7!KPt>joRUrJ6ZmLIL7>U0t_28NKsIU;m2zaGKF+2ZVb*@PU<88h>nD zRi9FJL_5W@sp8r~KRE0gfcl9RLM(62lHAjjCLW(!CUCr;Pp1WL43(nJKe?Hs+Z7(2 zU74cj^@FA?;n*bse$xh%WSGR?x%p$6%q}x-J>f3p_YnW#$(f>Jys#t$P<-s*Or*Yi z?r0)wUG?TuaDHOOsIM7{^^^Ls`x4-BGb0HBB;5dVKk5)h83;lsYhXakKlr)w0Og<* z{K`O?rU9}c8Y=TFhlyL=<#AI!K3w{4Qd24=*-DFBsK>0rg?q^qO)O7|c@y%wCg|YF zGv?#S^h6dzIKH?Y3W2EX*3~Yj*26TSj(o7ViONn10Gge(900b?ESii9>V2HGM%Xkf z>qvidaCqWtuyLlg9G!MRsOc-$eDj($7{7bcG`EFgn%tNn`H3_BQ+8S*2S!b$=4Jk3 z?r)o1>XFPEW z>$TNfYlI655Fe>M-5G_%H9~@^V3@2g1dw|g##xTBM;+>!DD0!btI-2yFe4U$PY4=T z|EVx!&q>@aK}3amRFp6!S7+Bq9iWgk;ex_9ZL{U^Z7Aj{Z+3=H zp}gohm+G!~kpPK;e*l#Zh9un}=gHrF0!T0=qoozaR0s=cnm~oN&{ZKN>Z&Z^C)-%C z(ulSaKoG+Df<`X-?bGTio;BEOXxLO=J2V`=_b1-`=EHCr(rF2Vuf6QD(ZSL3hbM@i zQ1-+TG}b&y?wF?5%_If4Q$kpL@8T0+GK}VXQoQMzsqG#VF$$Hq1~4^;#(hVl8*jKV zUKD%!(0FYY?JGRe$1c_3{6VMHCZ|f2B%!p8bO0nFgb%fK8*uA2R`oV8vvVE>W@no) z=9=s-BljWomt!su^~H2UVhRG9A|U!4cACF@84Ci83(=yGqf{W8vAaUt;sq(sP9ZDP z%k!LA1Z4gpYQyQ02p7+po+*si$$05*GNNS!w@m9!!n3;Kegv_NQd%}-WlG8m>25*g zI_!9lNjl>F@p$sRC45TnqrfLAx5yh5@+x@;?s*K>!rzA? zH&KMizeE6~+|sgf!I%8<;8dtX_Rs~AB99UzieVrE7KP_5_n{Ve`VI>jXvy#ZvfIUd z@^CyQX5A24eAeciU%FulL9#Vo9=woQ_C7Y~L}Uz5GMy5)^iF*oBHj>L+n_W)Z!0`* z_Tf=EU!88H{B-#j@?aVSdrtuXeUFKvGQDZ94P3hj&?RMtUTd7U@)!~EVwb%aaTi<#IoW^uI1EDdI-f-;5pDVkf87nj|xT=DQ z6r5JrhK2SJ_Z@Y%(RK=d)7+2>%{Xd(sh@X`BC1MaS~9*hL3IWy9MV9jw84h#92q}b z)I<{>e!_-{!E}lt3nxIqZ#hM7alKhip)|s|#sVRV@xf%PHDNAAVGd0u&4^!Mz~I0n z(Z2~m*02vpT#!kD)~QXfINnbRS19pfVY1#j%Olq$Ts6y{Ju!c74+y48xlx0Qk3pW= zba=mucjtVv!0zSzXlbc{Bp$_k$x8favd@q7$v5i3f zK6zV#DetiJS^gH%EXH@g*uhtJmS{6Pg`e!rcnaoF+xZVikydddZE%Ma_}yek%S&|~ zC;H6(J8t=KNB8lxq0?#|VTtx#d)3jWKJt-Aw>5)*QqiRLAA%7I?xcZak+LT%m2A(P zX@C+_z`6S!W_a|p+2-a?^5zQ>%d}Z-4t-n=J0D!bu7x#NSWv*IPvh0ws+lzuPBVn4 z)!NK3F^D`N$o<1J>j9t}K+wlB_2=wFqmddPUt0yZT;*@ML(K9DENxxJ@0r<#q%*4t z%L<)eG-0Fbs8q~9zMxXVB2U4a@_g~~fXEEzRTRL5dk)S*=7o?{h@Yg{W)rUvL|USF zv0lq(*!yFyDjAt=ofhtp-GguMmIwbPLRzBw_!`BHNmMow>qtQEC*#sIwj~e~&psSN z`fhQ9bf-Q8)v&wzr()XamF3fgl>>no>T#%-^_QSK`7t5 zpdnr&w5a1VAtCsqfHU_4Wfr}EqmAgOA}`()flr`rM?bIHJDEN@L`Z*9mR#{E`DGw3s!heoC(t2xVtH7 zhf>o^BSF~&SZpC+-?9yloi8vxQ^Bv)CCNjjFPK>BU0{lx++usK3c2bumlD8q!O!cO zd&~M}VT*31Bna}E&MZBWZHK4HpJB@TEj^1eQdgL+cm*EGGvpvB{j)G}tH~DSHfjhH zH%nA6qMyt)>j#HxuekL6r^o3M8_|6N2(JVf9$8!Yqe;`;uD}q?UZjm(U#Q0m$#22t zwT>{0)QKq8nEV79V85xLNtaPr>`Be1o=^Nha$$yg*~IQz0pVC>l?ta#K>FMDZBdrR zG+gP~m`2^H^=27`LcyIX?S}xwE!Kodlmz%88@K5^(Y}<~ydb`NVs%wwGAvFSNre_c zZfb()2OUB#5t1F1)fHdlxty-6g5b}i6LgvadHi6Jm@*lqNW`OO_xbw}S?T1(&9xBn zN~L#NGEE0>g52yZ-64I~l-6UCKfcgC^MgD;rThXE+)DSQ=abG7NmK~P2`a$CSm-T8xJem5r4I;EZq}X zXo|MS06Ghs^UI#3MpsHcVI|vz48ZC$kKEx-dEIAzFeOcx;#PXzDC{&hg6=wijxbOT zlk6iZe_d;+FxgN$oGzi|UQ<`nBNB|Q^;mE>pZ9@vv4A20I8evk0#OhU4G6PMy z`8Y8~eAyQysYHHJ))n#skaQ9V@~#(jJo_2F!9?$Q5hQ8bdKdZe`A^;(4_D4>TJMn7 zrHn(6zAO38O6hd^iT5MsBUO#H^RyH&;mUG2Ju`_ zv{GS3te5Tu1lL@W=(Z^rlrzw{bKXFiMMnw%2nqBjFc-(SO`2I3~*{Aa)>lM}i>LbW9h8xIcwD&CBG49P`Koo~Q)s z3Ij0JkxG6(Zt$hiwEedV&A@`RaO$>5DN=G+ZE1r0HdeNq4m z1lBPL{*15ZDNU;^&zZ)~-7=GG;k`j2Ou|RD4Us1qMvilL#Scj{KAribESudV()aI& zM|LLB)|*4!uLnV63Jp8Rn1%B&Y?_0s*#6(k@4V@oh`6booGx_QFQ1U~iR-RhdFsWF zzIA)Ae@TV-P}8$^%P3-dBBy--lMh(5LZJIYE{u=j-CIa|=qU1on1ZK%?muZBc3xP) zuDNB{HrGNm&_LA0WfQ?f>Nq0jjFEAgOBRkjNEL+L%9UyQ`K5zDbXrIzQKk zalf~`QscY7u>Xda{l^b{U>WXXbf3})J^knRzU5nMIC-b)1>IWdDVcifGN&1O6Qmz6 z^k2R0f7xg69^4oJnr4jMz$ZT`*|&pvrEuL}nMLb$HHE1wgqXUB2A%2nv=gyRkO7W0fXO6EqWK%-X@m>?b;^t8X1xTYL2{{`FrU zgZm)eCxK8Aefj$RdzEhUUKk8kpx3h+m!CcAPPO+vEn?=;tQjLDxYX5L69K|Hbdq0v zzXp0c)Kw4d_@LikG+8>qxDjJW1u@m}-DUBK703tD0O-dF^$y?~2+vma^Z+mi215X{ z3HwmRIHCE7{p1)inZ{fI`51^4ifk$oSq&qOlty8bP77hes0fTA&5gjZs~)BBqCy(M zOqeskP`Y$i7@lBY$?_~(L9Cx*>m%rR@tx0@H6{NZYE)#Sfi0va<5$ z>xDqXD+xFsAE5L?tVMvRm%2B7?Ma-m70Zc^Js7ZqQ88iP_7sX4|##M}s?R+#!v zzY1XqriUTu2m|Re$#+%=Q*_&GeqjT@l0R%BjjnVZbsnu0wLm*lv|{6e>|_ZyL)7db z)9=9&!u!8;^tQJGOx;oPw5I#q7$K(*eft{+f8r63KDf{yJO|shNtd_j8%%`@rGmzT zmw9AkZQfn~whS0KY?eBIxV?h8@81sF&K<$-`IU5AHGKvl7RCnw3eSbql0lm;KdxtZ z@ULz9W}HwJbgV2V!xeyUD=<4q!5kxTH%*=i3Epegcj$f2CY>$hRU&h7?( zlpO??CxUWWN-s?ki5oAl3DUFrqI2A(g<^2NrjPFeLkVA=Y?|rFmlGf7#tt9%gt9eY z@(zq!wjG;Djg9B#MCom|1z9N^b^B8xJaoBj^jvb^%zf$kB-}&06m1uUe|!P4gYNbb z4a*`N=-F|>#-29cvjC_~p=NAw(1*2tecg3Si~s3g{@=IU4)*I^;tJ)pg6vqm~kxlHGH_UY6ix))@Rf zTCiuta8J%9B-op;E3fL60H{*WBa}5lYVdY=y>#^XTA9^ zu7&$J-RFVuWuM=>dThM<%3)Jqu1%zn#Hz7|XXNX(){kb)dDgBEwBp%fsg+ccUBTCsSW`I)ywY)bz|^_74ju=^>(i~A!9 z-cjHuErxjB-D{z+mrRn?7NQy0grS%N4ubxf?I4Rm?;rw!}PoEyZko8e-r7K+M9eyg%?L*mMA1(=ug=R zyT-6JgUTdI$0x(ruP%+=4V!q2r#s!JO{1Q6Jm!+)_nS1=EcAQNRBddBmuX(R&=iG$ z(Cokq7iT6ab;>dRM4^>hII8>Cu<+Og*m3SU>{4dY?FwYfqJM3cgpOqsNrEhq%ugp= zaPt6}@C8VwW19e#%|~y}PS0+a6d)?|=(S2yyrYGn`kLUBOUbYgDWtzV4EIAJ2ui{r zybJ$+I3M{-N!%dRWmxEVmV_l?E1gpRurF#*(5aXlu}+8wH&aq%ZIIFwDwbjy;4u89 z@QaBr7Ahe$4aOto$m3^0nD$B{jsylw%2f^{f=>$*o;%*t)OefW3+1#V&==d$6wEjaHCwBOezQCe#7bH^v}{HMI>6*t3-W*VWU zy?gggj>FPrt8M#g==B!ut}`{Hrc$@80y&K3AVk2ArjcR^lVhC1XWA%j@WBJEi94D?B@;t?sO`<=OmMu?#(l*1wV@Qv`566Yqp{zf7UwpT+ zY+cV?7j*C|<%3eThT4w&!p7-k;n;I&xr7iWCWQZ79S}~cXci^6b4=UR2^fz0_07j7 zlb3w`^3PlaGcq*O2pxUw$}87@`q7U**wnoXstO;jAW*{>)+xME_qm><(#x2(Epe$(!K z)?JYkN8$k>#WND1BI6x_6Eu|8P>z zNunJ@chOBe`$;<}{7Co*u=4&?=84RIYW{tAOyhYs{#{jZEi<^8pX^CGSyDfBN3FV^}A}w%+Khj(0~fzRVnFC;iFyr?Yk?CtLzJ{R z)B@q!N`;>|I9z_&GvD&sn_)(QWKd8gb*FHLl#RhHX#m!|rp3N*i2(ZF6I&^^yqvKy z?l~^4;Nd$SC5V>tRivota&Y42Y}Rj*IZv!$+^-zkUb0LS++~)~?GGyaSt?k3%B#R? z+%kOrEAMlnO*u^uK&dkdH>8f}G==B1G*1?UsqpOzDt(*0GwS3(I7-Ryer3#{bzCH$ zm_wN+*zeJ>slR-5xb~+XeZ#9izwfT~Bu-nJ0imD|TyxFnhc9^SP1_gh3u~+%s@ltd zS}Vlu_eJ591HNscpZ#g>S+Cg(6s}96Yux5^BQ?&p`(X%Y>{x-Fb0g?!{8J6sj1Qum zBva@q`Ufev`Aw%rDE%S-Amzjv4a$1|(VhZBP}*Rnw8DV`!fTaQxRi)~NWd=xEeINR zKn)YDzyoB|E`d_2pLn=3@}9LUZ&6NR>b?;eQinH1+01{X5|ZSzBOxjPr7S>J6!#7* z)-D28V9E`Hf6j}$n13karS~P1X^}!R_%3BLGCn-hv|$c9GIe)_^KEQO*ktGf(tG{Q zC5P)WbExi+YS1(13VINAgg6KQJ8r@sT_5Z~ouwzI2~CUTL#51HuA* z^x7+yzW;&;UA}w!&L3(BE`XLQ4}$hWb5gn|ezsf?9J06UG(;^tOc;f8{YN6~enJCh zov{YH=GS1Z-$K=|EzneQ0X=qrA9sUPuzPSu_6sad)(e${)6x%Na28w8FJGpKv4jBcT?BiWQtG($-oCw zzmi+_%5zTbbE z5@>UFy*OJS3=qwv{+|D$6c9>)%n=M8Hi0w$0m9km5}dJp73SwAP&X>1H;EdvXvrkn z0fO;?1x0RagH+H<5h?hhOiO&MK9JdcXJGpVJ=M`XLurJys-(l}T6OCS0~S&)z0FlQ z!NnxB%p%BmnWTfH?BTgkP6>ush|hmZV>gAQ`9mU~JAe;2zyadRT9Pn%dq7!k5aWZo z-BAwYSg5n4=mmb+Pz77j&e68-GJ8w{5dI3G(Xd9t> z7O3|J;V*O46-NRpcJL{Ifi)4EJR2=mJr9Ne_fr74P2C??*P^-~bLmB?nq&Aetx;-# zBFj0VU>ZIN+(7{V3uWShNJc72cX?03JU%5jiQfby!!KrGq@Mv^@;VwOX_Hr+MS+4_ z2MBtFo9BiP-FB5plU$gLogt^ZqfOIyqq*H3bQj7n4G6<4bpYsk(qXZ@`SlZHv_{yt zaY1bobsAvLZl+BG1%mzFp#!7Q^Pch6SN<)`Xe!Nsa0A+}YyOucA10$KtDky z_69q_O$e$S)H?i;$1lY}C~8vt*EdiP^u8K?m)P)meI% zX@mAOiFPo6@u0uH2=s=lZ$I$L_gwpp*|^{a)WD23q`|qnZdpAtdP&`DE^G$PaG0N1>-TK+zIKHQ1_AX3z($!NP+S2tK%lUFTJ>eW8W<`LP;W8{6GuY6pP8Hr6&~ z&6DgwbMIC>b0Jd_E*@~DAD3`kdi%A2`gkVq-k(?I(Q^S7^apzo;PEE_9-!_YqOL2H z$@FR!=XlG^wUz5d=rT_rfY02#c>en$^>C_%w+{ z@M~yOkSv{7C|pQno;t#xG)CQ>peFeh%CNy_*-a>V5C|L)!}L1`i194J+U^{~K#1f2cYA)NED3eHj>xNExt!MQOsgVt@RttXnuWfE+1%tq!+ z{xMC9#A4(Ck>)7oH(DE_ z&omKFk_*YcPSiT9AZ*hb3SbT8;)|98kqg8=ipVIhwo-1VyKO{x7kGRZ+F{bRAWuH= zz&rr|))GFv-PwC%7ERU*`l~kPP@@$#Vq9?0H`iK?Uq3V)zu<>&IO9uCf8(AB%xFWJ z0pTV|uP^+Ghd%bmpkJR;Rn?=_SYczg!i<|K_jU|n`-2wYtj8XQb04(|=R6eP%ySyp zxdY6En5H*z6GCfiPDDRD)Mwqr?;A$lg1r#(%sVab6~Ad^=Xk(UD*=rbNrcn0|_ z5Ws^%A;s`aT}lw;amWKy1X%X0X$S8AyhWFatfPkCpB*^urkP~u$= zBUNMCATEmM>}BwPn1|=UXKo`18V%5!McH~m;-*l(f2iM3TY=!H-#faD?Q8bmvAp+^ zzkA6#%xF_IGmV}E9r(Tn-!i)Dx>wz=-g!yC-~TbK6jsd$=65YCv*!`mdEN@_ID=r@ zjtb`Hd(hMC0&CSFt6FO=HI3WvAIbobQ|XilZno?CVEr>Ui}G2ZB?}Md!NX*xRF}Tb zhgVn3tWdH?GNDNa3ccP?FS=g^*sX>t&R6EtOH}wDQDJXYnY~=q&sFL= zj4bc|L<`41Xvr>(%4wmd6VbZ5GPO8C23d? zBpD+C#*!>fd0}EIm4FlCv+Q8PHwUlMeW{5dl)5Zk4XpgQF<~K6$!(+O4Z`rs>jJh=xM6H9`WdJFRcw1*3aBM`o6OtxPSMBkG}~neAH1m|DrLReZLBJo>9ZX zcD)Ok*8a2!l-#+xwFAKhq9*9q3UaX|e*re0@hRekkGCM+a2kIsf22G9Sa7dLF5`BWrTb)*|{b z8Na3z{TjqJ0;q8>fuX-Zl&zy~uv4NzhBz)QzJ*)oCMlF#2~!BM^;?QBYhDwZTO59U zKLx`-4p^A*^LKo@4wwDdk#6cn8Rs;74xP~HUwZCxgF>!0LA3dxo2J5NmHCBd*4~&V zNMXI8*8cpsAjUmJ9r&5^1jFPQGbX4f$k2MP{?ykG-u_=N-TUTSU`8iJcXx9*E$Kzi ze#DL+deRvW9O2p{wl|Zf?pmOq+P)1Rx?{T%?Mis}dT2q7cbVg)bU-~+p*2U*%g_Wl}1s|s(5{t{Z155{6GxeTIAGg@W#<>B&hVr}X-ah9* z)(wR6d9$E*lG>hmEL1|AxpWuvGUd5Tnr7b_KnjK&1U(SCa|SEFhiGLd!?@EV>?Yd! zlz9b$b91mdsIR(d@x-q@^DVFbdzjHl)66v5LI3sVpSkTBkL+Ktqh7suZm{};^ZoIU zZSPl4T-b)&=lTTw0Vz4JE)9GV{5Sw|LF<2$onF}2!@J?7UMq>;K0uz zM(EZJR(wNkcbR=e2U;^ceq_AyAofH}}fzEnU1Kc;7@MAgs4nK!k&0YR)9)#%-zv?o#2`BQW-r zhB&8ww<)(>BY=l0P&}pp@m6)+pm^P)_}r>~50af|<7blUF~b0U9_$zdC2qX3d>N`( z_dtvYFye3zxYFVhSN747*?Puu>Khur@u=WHMT==QAtv8o%V^7ZShLGrbQ|4AUSRYI|7z6tKgA3T|Flb?w-n0V%OOFzM!P zfaul;8ZA-#O&B2h!-oeB81>2ZN+WC(5cU)x_Ll82PdgMSo~JMIS$Dd>C+Bd2+EB5YJ%9}lY?z3W0sR=8p2aYd+h+FQqN%1 zv{3}yWEg<>f>^C470SP_bd4Z4i3W2hy3MrNN%NC1Q?zf!25GL>F2Up-x2`X}YR{Ed z4q--jnGo)~gs=K9KYP(*AG+fw&f326&vx`rTr}UTpFilWFQ`tI0>829pfT_>G5qJw z&7ST`HpljEz@8!U;KCGG7=$VDAmuN^NdM$frYSyBK$to{iL6XK3>MM~WyduAkcRuM zT%Gw-HiD+;mXM$xPt-?QC?K4ySQF}4k0+|49m13N7$L-vY>_>&=n+pGSJ64)VmcoV!z>I=bx(ig zdiM+jgC8aQFqVp!u>6c7^Ibq_7?WT{X(5VrPABnvSK6gU+{3li5Wk`T@k(`#_4}(_Twf@5N#IT{2@$+r zFxCTmzy3T*|3pII=R3x*SLMQU5KLAg6lOyqxnI_ zr`|i@Gp&}*MhvqH0ie{6PTT>yXLgq2LHf)=)Q6YAI*pG6U>OFn+pl?k{8 zInChC#!{0plg4R^jopNx_9s;+ZIG5NAWoL-@5s$QT^`$`pguRYGfxky2qU!1Il?YJ z&MXUld%K$b@)@Z7g0xPO=Xjs%5V;^N&G?K;4`uz9X|gy4PYi$4eoopBvB)IGiqK9| zBkwm7eV zai=n+UZmU)E6wn7B`3b-W}qI^>ADV23+(-|Nj83rv2bjWtcT>dL&~dGM)fxmsJfOy zl$u9I#Nn^}TD#(vQY>?!@OLA=CkKM}7RfiT89LeU3;&mfe_!Y=ilyn=oxEI+`WDECl>nSXYcASU$U*Y zRQ0NLJL?nKxSuAHV?%sh89)R>mP#ThnedN}`M0y7bP@o@v4WFyOKfCQ;y}Sak>W4CiN3-))Z);zSD;y?l7oVs=^ zK)k;iQ~Uwt{w*alE?0bRP}iZ6tF_Uz7r>9EuBX{;G^(}y5J@<5)l>|H9FJL7G zDu7Q$E*>9R>uOrEW^pP2mYzEJKzDkl9^C~1&MGzgU<%=|9LF>ct3TT#I`zG6Z{+q9 zZQa^Is(W$!G(ADa9Id2JlrUhpvWEEAH!dyy#lL&s?2z5NlTOWcdlzZXp6B*|aC`Fu z=kHp7&W^##PwpHnKU|If^?KFFXn^R)ixRUJ1HaINV*u!Xkw0^{!aazvQgbX$MuD7v z_`x!tQo2}3n^;_&5>}S8Gi@xVla)odbxp#-4f4<9RgP~MPi*YW)1WEp^6H5;>vqxp z@R=c_WttxpdKo@I4J-in^9O?+>RRq9|-?0V94S# zfiJbpV!9o1r-jLQItPLRA1IWc@xf`pF4D@tawDJ=`6&WqN19Ks2zZV);r-`Kq5JIL?}H&loR8IPDD-c(b6O5%y!!pQ^JMu2vbd_qAB{y4?I z3mi)%E048XVr@0f4t3*#wcA6qc9UZK5(&S3nl^(v5F`bHE4}*aTh=Q7fdxW<97~zY5>!Jg-$fos0^o}RX8e483LeS$A40jO&C4V! zGGqpl4g)d0McN$s@&%p;^nj=}L^TeGYHV=Qvs$7aOKcPf4z?*UJX4J!9tK#r17O=x zyUF*}R8a9SsfS{p$QO_DSH{Wb91SpA_$FptRhBD`9LVms> z=jp4z1a^A0OI2!rAl)!8lq|&ENp#X4)BRcVE9OKYH`mnj*zu)|Ue}2Z`_`;C|PkoNbm!9Cth?%B>Vu?LyQW%=cK&GIe3SQLB!irQBaw&Pyr zRZ_{kocY0&GK%|BM_?m=;u@j{MXw>cd#&+RbNcW|fcc#OXDYV^HI{g_a$j=m7sHM; zn3NY;`lSiG$lSa7DIA>8{mu4)2FSKfP2=Xg(t40#VmZ1d!X)u9%^^VPYmljzdX5_r zZtQf@q95j0J{m)0`$~%%OcdCODoO96vG{ z{^56qhu-{e|LU)nVMg~DRj`HWNsrk1gS-02pSitW-ac1pP0(pL{GV{3av2Bh63&-ujZdmhBmes7$8w=K?%V0ple~2kT+^-9pDR&z7$e zckg%NL&&Q$u%dLKe2}}8S91=e(CISGpI{S2JXTlZ3OdfzkQ*k{#agx-JP95rn`URw zDM*O2a~it?;V7-Zf}J$)W{8@}F_k}Lw=uiM1WjLQKba>H=>jsNtGZ#)Jw zx<_ftnns_iP;N(W?FoHYeNZ2jCW!vHQL*)8 zdGq}BuRa+=YlR8~$7`AtTiX)?w48|6( zGw>_nG1tRn@ks_2?UI9O5{y#+X;8rzmdI9*aCcKjhiS8M?w0Vfw4%Lvxq$XPQg}wT zjan7K&~KYo#Zx3mX@eBZp?y7JW_g*~zdgFV_Nq(Y@~S&vM)x>vSs=XVm!7iFgY^dv zs&>24`+@-F`$WQ&dq#->?+8xf9=m`OJH9RKmLOexieb3W#|~aahB>cNe3^C^tE4Ov z%y2q@!bbd{fGRw!^Gm=H((t93f(EVJgc{vUCVFk+x&_AjP3+POlg}!)1vkFqtF*Ki zcUZ=dr)Wqg)l%NPlD+_xk6ntTavBCN4zFgCAW6lR-vxsH7GY}3VR|4tFENXAvS74X zq79z!3S~7?@b7pQOC)^V#AB5FG6}R}f!s9ePm}Nq<$HGPG&L?bUTg4+hbAj8dFosK zvenpmkG5t6VZP_uxrNgUZoV065NCpeJ z#3_Aqa+|WvHnB`_%edGPUPwVIT&zRrVU3&720>H_tJ<(#K?$r-W3KOXuJ1iB$-Gr05BoTy@ zp|DUC5UCO5z*zz;j`DR@D9M~F9(8V_UO<7;hF`( zbu~_SOJ9MaJW(W11|iKBh$NB9#iy>e#lrYs6#N5k=U<6<`RYLtpYf1Y2(oMiO5;Qm zZpdq9hTaHVN|kW3fJAWD(jnLs6}7==mGI+%68u`fVBViC7#7V}@kk|eqJ#xQJvOKp z%qu`#IWS!Ntxw;0#iwR_h<@*B%L3tRFS~5CywZGSZP>eZecXf5ur@L-fT6hrFnaQ) zQz=}tFeP``*d03VB{))nAD`$V!B?gS1wZQW+prv5N>Vv*S=^3r`tm@Q@!;j74f5gm zBz4EYje8{VTNjUkU|2@6?#?w-za! zKXhB!lB&(x2y`}~=vFpN25qsR?#b}ei1%TNnr)hyg2z;@Q{rrf$0ka0GKJ-=rGo=O za+;s7`!ET{0iX_>%nEI+DRd&tp=MId+#F061~8iIoj5pL``tr#9Q(g}W*~U4(3W04 zarrfqFRl)^eP(UAeMJEx4A(1rma9ITwH0PWDTupBN}Dcs&#U;MVH!rdOTHVqNdf6^ zin2p!rPSfxRS#X|@A8v^j0%2<7D zE}JkAMl&mlJbQDmNGd*L?X@fLCMj$Cn+)IeoDojHI{h2_)rJXu-MWsDt8eA%K(|j5xFdeN1h?-@ZaEmYDQ$I zsndUxym%bZEH;hj!psyJCdU|U(2fh5`<^>t-f4o`6xz=BVchE- zTEfZO53H}h`q^)K`F@zuy+&JpuhDmY?#cttee#oTs;h11^{eJ$CHN}T+ej%vV=gZO zXo|=v2)*?4FM)*TTZqp=3Jd9V3H}nmbcHLrLq}evA7)Xy0S7h!t0^E>s++ESWPVu& za|)8%lLkPh1sdQR*<})11JtH-4S;J3@Q$m8tCia)ls0(XoH3~rU@;&5b?}t10N4n5 z+~5sXWAMv-B8;JonHCKJ_zo|?V)9}~ZmDmKg$!8J`b5FUx=|ry7l(~#qtKgC_2?v@ zVG5vaK*^`(+J$o`W+DxfVcgY*U1KU^4mJ0E27>zDfS?)^9Q2MY!{n_8hvQd0^9?V# z9%gi}(rK~j_FF#t^;`bw5B|s%HO@_lwmrORabEZQwa_tV?}jl!FDgp+oVeg-;A9?| zK$-?PnLtMoU$`gtQ$R@O4S2pf{Jg(3k(KgKrTohL6ylf43LE6N1o)-=@M_^&MY5BO z-*kIywLib5n%DmHM3{Be+*j1|fpws-RDhqJ2fA@!{Oz`UJ~>RPK_}aWEMxQ+#V#(( zEV(7#e#IZUC)Xa)Pk}+EHj$SM1o^#vFJAN0f&GLSyM3C|1e+!vspQ85-L`2)6CCuGmMeVsp~dBw{P>$* zavjX*UZ>Ln2sOR+GnXBD)(`yfwE*+Cx9!3i6%5XyN!u9V=zy*Wh`!}Z00@tmYc}3J z4Jg7$@DT1nY8Bj}z`K-YNgK<6tdQo0e3@UTzjQB^7a>^_I1Ma2SS2I}qs&ZD{p(Gh zW9z2DPb1gF17KyBM;sdh-K;?JbILsRH8m!v%%Ne;q057jF}Db6S^e;d0B=);8*-gm4-X5#i^5^Ec-f>&5$> zvGc5-+dUZl`(1eG5rg^=^qLju^+r(FEmS=fxK?ekA-6p##YuzV5|Yk86ovcAf?3JE zi{}P@(@d`3=G7^Y3(a7&lVJQlo>`d-d~r&eNxr;lG_8e+00(A}Fg3o4GDbnbyr zn?hHW--^-z4-R2+bq$km51=|)L$z*SuusmKGnt-*v6}pH2y^H?U;=(FM@bX$M1gNC zjoD_66%AM#7)zM=aekbtEG%XkCy&bk*Y18pNpr}W21}J^+1^L@ZaGdJ_g!)BjxeQX z1lY{jp>yMA(7@5X;INM<#%QVh)|G7*5#aVNsf3v%H^l?2rw4+}y_WR8mHucCHR|kzd#8>Oc z1{ggkGJBOAMA-=Vu;bp}mS%o-@tOu)8)USa>S%>xz@)zm$hkJ_Vm#`a)3C zJOGl@0>ipMh-*Z(>C>zo1q*=dN=&b`Ku6YLvVRPd8&nVd1_gj8Y6BLP1HB|^(J>*B zJ#fiY#quS&&Wh}-Nb)ODml!WU`-w01Zy{$aBosC5uIl$-SLR76U*WbnV7w=uH|f?@ zQOSF>Z8~nA4Ne0Dv2|KJTsMpfhP^}k_N4j2z)g3e}*^UJ^7yYTG$Kl1(y)zfy=D?i%96W=$eRxa#Ui-TUhtjwlEsGA8? zN=vM~cBr=}*Jf0A#9^}TT7r*%?y{Xh3H&-h1OPfUIsn*MI|SHxyb$uVnIJC4E26*# z{4x^Sgs~5jFnfaC1Jo~l&|`o4MESKA+NB9hjw;RXjtLC+tDyUpFgn;ktvWK5OV_+E zjL-hBEgp*MN@t78!uhcyX;OqKuQ$OWER>#PAm#_@Ybfb|NtFw;tGp)w#)UFI@pb3u ziSGSmnlCYnNf+EF?Whn=Zl-#-nNx*(sSUC*;Y17czieWRTr5xKD5dF|;HasuJ3blx z;dk!1{jZ+$zSl3pj7~{HxNj4_{uh7k?8iUk{2$z2uRghfl_$^D>yMwSm(Oe9c->TM z&@@8@hGPqg8VI!+H5`0T$F7;H*I1lV}IP`Zm}?}&wGf(_E!ME*+YZUlxU6zFPY z9P|j{<+sK&S|C^e)Eb~NeYUG(XpfI!e47HnJ6aguiO?Qaz4Da`>ejvl`${Zi)E@j? zUL%O5Tupbwgl`UnvMhcK zG37xWuTlV^tQ-kM(#;1<+6tvTfecJH1B_5kgJp);r{c9g6A~F1^0k7MJx)nakZG$p zJCvUyVZd;HPF;Gze0{^Q@#v3lI68X!rF&m=9A_bbLpzI;O@FSCpnWGMXax$bzC7PXq^w>O!YIYT{tP@A-rHFzrtV z2xfk;G00_UbfjBs1>D_c{D?w6=FCG8I^;*kJ`aSI0K!s+<4`9G?F&3+1wKU$5TH}DtYkHad;QyG zE1ULlrr?&kCHWT=C)!Y&9~Z&HGExdH7-9jhi2~6{K5r1F2!tENDN*4)5NqFIi(jV! zdM!}@^0k6(9oGtKbEpPC>h&E6_N+FzZ2;q@zU2grUv}H^(VPD9+h2GTW^_su!i*By zqh!So?b);YZ0Mg0^~!~Fh)g66cOryV;2~o&^fAS_+HP(s9f@5C*Le(g`p6-p}~d zn_sUfuv=P(;SqJ++QRTV%I}a8N^1&|*6afKik!(4t&SrBFaU#CrlD_ZSC|$!;N=BD zRu&FgF-|Ogh4}{9rD`hyV@Zrl-~=f1>Sz^3;y@SNScGV$qykUTnJLmnVK#E>0Jx+X zZWe?YNg#CZJKo!NVzobrn`k4(19jaJiAl{5)$O|(qIPzuHi^>wVEN$M^7C$M$AA8u z*S~mX4&4GY1Hvh!mtlPN#V_7YtE*?=1b%4uT=TQrd*dHpfD>moa0DAXp#X7JnNPK* z*aCX(&@9PtzZFFjswTv=>+Wy5?i1?p!;QjrxnX|GCA@zw@t67S0z_{L<7Q6}eq#@Q zs&YoP+4`(q8NukpDh%&X0C=4Wen1JLWhJo8L?#P&+T5wx)DGPIf(Q$%xFIcnq>25D2GT}U)CfsBT;)F{zan=$A)`tfMM_@4^8SlfO?fHnJ90v#nlh)ntBFo>ZH5pWQs zM#eR|3@}Ttiq%cl7ZCjehuJB4CAol-!3k}X3Fcb@rik;>l;bD)qBP+w&(N(=ZO$}$ zS3vGA#>q2Z4A1L5>==Z;ZezQMnjiw7Dcbs7V`{c*Opk$}nHba800`rLbNtX~?N5K; zFJACJVMbeuW>VS?vv`;4<&{QXO_ECf4s?rjNN?V*5 zFhsLf5#nSUxp3bQcHjG-sHVi6Y-H|~QW*+-f%$J{Qq44XZ~F8apx68i_%#On+GXW@ zYy|5EmSKJWx*GeN03B1JedHhwG12mTM&;OF&6lTuog5QE0+Ksmf{^>A;FnIK@SyAW z8kLLLLrhVX{Gn533wO$+c4%Tew>o~e5Zq{Ty|U?aY{+dU9xiUbSL z%}nCH!oocwTOSA!1f59~^dk8>T_&7i#Z zV47=HrOPA`h{r3oH94&&D!T^_ysAHMkox513I93jl; zZlgU)7JlDv{_h7o=*)#D%s0aynS-T&IKbt{_V7@@k4K@`TY;vpOs9SIIS!O~Z_r-c zRLVY5OV|O30Grd?HUdr&wi6?#fTJb}f=aV9r#&q7VSHTO9vH&#_BB|)eI3Skj)3$O zf-$%?e%#y{pwLwbH;%?InHxfIksudAQI?VGQ4uUl<>X+MRs}-IBnpgY_6nGP8$+dW z5|=ct1h_7s>;AZDYP{T!gs<-!bjL5doh(pJ>l%>HNOx$AZgJ5(yJyQHq$Wu2g!zeE zEKg1g^k)jTVTnX@XbC27xMS`3%m2|EUiuxF(Uv5H8QmlFNB{M|ZhQLf`+a}E8a{2I zT6@ks9)H{b?&$TJBQWT%L2odDYM`pWS35BDfQZ1yE)wbjxuT!*FM*wi+9|2MTi5K+ zpzcsKhmOfkd|6Q@BL#qKx30m`)d~P_8$x?*VorfTVhi3eYHl@fD1+pHWj_u`2@pbf zt~?Nie5NbqB9J-W0Ac1}cov}JK}mjt%=?dM7|A zrEV9%YBFfx)Ihx!P)~$eSA(F7HH?+{^TfB-VfpJrnCLCgh8D8CnX|$;)3Sn8%kvr@ zH-iGC6K1#@v3NY+l!WqItHpa>XFeYjDB*nAQXfj(lMZYqu!a8L~YF2m)Mr1=wqGUi%AxhR&UJ3KD;o5ANP#s@?f; zK8(+CdIkk&hgn~Mr=Rx|QW)V{p41jguP2D{4%{*V-37`(6-oeTOHcyO^jYo{6Zfx4 zamQ+U`Pqe(Gxb`b1IrMMqxw|SXR7t#6nEn3f-jG3r@+nsvC7`{$WFOP5_X!j1S z%o2&#?G)2GbEuveqi2Us=6Y~wwEl{NM~Bb<>Ain=5N5RH31LRxQ~E!@@C#=>?O_+b z=-ld#|7Tls>)iIiahOwJ*aR@F9T*~HlV`x)mn3Q;r7`ukQaR5IW)TZ5LP+57>>YLqw3GzG4svz=1Mqgn_51KW;V+Cd*)o@A|_?u@9z4?Fy_XOV`9N04stBS5s2mP{`XOP%pIP5fPubSng7`ATvkLC^$rx%2Hh z0AOXlEBwo{PUspZ88J#vX z1HyZOzHsZUH-fXz?Wvklgt-eHdnilJMslCw4FQ z21O2LfK0G*_xOi{f=@TCI?Mz$vUgQ{GbnSM{}!TT{x~I^%)v%sVQRXmHkj54=OeXG z>f|^rK`P{#rp3fG93L0AS`9gK(g(T`b?ba~Vc| zarDIU%YWjnuRaVjI<2UJ8Qm*%%UNd~KD0D?@p0Pz>E-cGS{wCXI8-K}u?81*0=pbi z;e#VoaP!hZhT}ZCh^DzS)k1?Hj&1%{M=-i&6%K#7f%U_+n~Y)w4gz1?jzX6}xA;9i z`=TVm)>VP83S@aoM~>3$CPk)T#LfJ(G~Ko%B*N#ZL_(GhObIImd{;OS;jrN5`C(_Q zGG`P#y8OF1QAfH{0V{+kb0+r(g-@&_EXMXZPC*be5G1U!^?`nQga<*pMsVQv4(%IL zs9qw`E(~DQGzU(!!@oGVwEl{xzwO1h!i-KknrVdh67Ac!kAC?X|K#v0Ev>7u`6o3v z+^zH}HAFapsU(#hyqzWL0I;zWVyN$zNc7E^AnA323tBU5Za>kE zUUT!Y<=6c5+g^A(%;>bFnMQao($n|s880nOKD9)1A6ljzqm@Y?hGX^7P886zUMqxd z^&xbfg%(KD!glBaiB>78qz&pdforgKGr+N{l)#vvn?H&P2-#cL8;7VB%Cq&-IGAVy zvPj9^o57EQW|8t_0+t}|GnvHYrB1b!j@n8SfSjlFOF%(o!mm0(7r-A@;@y2cVDWuK zkm#aVYk3|w6Su3$dH=|hprkc|2s4dmSAIJ4z}^dC?D$YJA;z`Epb=K=I3=qIPU^T@ zjMW4OW_g5PC#ZmN<p2jo-!h4y1=0&gDf1H~4FOLV;uTAD* zZGy(pNa39&)p$Il_>Do$eGTy_8I#r6R_BP)Ms-C;4rB_OFIg=<(^K<%}>J z%1s^Rcl_Gmkn3=1tg^<{^<0M6ZmkVFW2W!7)MUyr^9~Mm<_eOqd}kO<_B`gO5&F%u z%`P!~Oi+WMIY+P#nqbrh?GZ{74TK9C4EvK?SC@bPrX#DbdiopxfjEBaQW6Yy`KT<9blY7Y+3VzI9mxX7BD5*Mx z%|0~B#A6aR8 zSFN>uSf8kmc06(B(H4r5rljr|>e3LWNqj779f`y-wmS`7DqrI<&|(Y6zC8!ywOR-$ zo0b72<}R_=v)4etO{$4T1yL*H6DD}L7ILi%D8`B5^UCs?rL-1zRx@!}&8cK{j``vf zgCccnOojA=V}b%%pQj8wW!`0Xf>PS05m`w5yGj|gbePIPa`Ndrtu6sUOx=YkwDn6Q z+(P*=pAOX?G4ZZOMXdafXfMe?rwu@mL(`alhUO;{f|>01yq zOC;tE7*5t3{L=C9>i>Xt?OjiL?Q2Icqx%fafbbNdJ+Iq)WThQ^RsrF`VcWn^Z(gm@ z&})QUk~=(?1aScvlXzI>ONICvhO}w4)stjeIC1j;))$);1lgi@t~+@579>EGgFZTuy}=bB~i zYRtfdSzQ{FGR3+ou{t?irea4!-kWD+9U^aKNX7&a`0P-7nmjj!HfG;YJ1J&hXN3+1 z0R+|aXuX2Z9UZSd|AxbN{?(7Z{>6(hqx%%ifbbNeLyMCy4y(ESqqawrR(;6YH0o!M zY9iKOF9BYcB;iy7xs4>3kvZ;wL1nU?C^4~e#{fn{dtO9pnu@*jR`lK@MED5}3@8!} zup`UDEl!Hb&87iF9Y9Re#)ubF09~;vDd&^$qH_NN3kg$+#`qY0k1F<|Qh!-Sa1?G{tH?b4cbcBs(`2lf<+cF-FS zEBNa1cI{8Nih3LBLmabcw%ztB*dXu3ZC)9g*1~7DixE9yh z1@F>AygR~%KpEn?$qVS_ZjL6fdY}iZNBW?fk6)|Rg4-VzT+iJ7P8c8(8|NW614xf0 z`o-=(Nk3+Y0^nLeR%AYgL}`{o95x%&0ip*5N@9wcrUe{GL7E~z0h|dBDg&zb2OpnZ zNRaGT?SDC-ZA4t33;QxqtOpZ@KM0~M)1~^Q@=BbnlR#P7eJ+!nh9wUU^dL2{`?0{* zuOIYdfdK%~j0=XHVj8zb&>yC2_6xNa>6xKQ6NEv3vWD>4B)hYq3^eoH4HLgt4OY%F-VA@U85u|IjDT;J?e&d79EKwe_R0a|p z`Er|Bd=Gw*nM0#VR8Nkn-6DAphU^HXK^zaXAZRDYEZ6j<+t-i(_6NWH@sIuDzBjJH zjPA2E1Hw~`zIwx*A0NW@rLh_(9JhLLy&EU=Vuwq634(~-;O2VKMSp^B5H-#o2wNC0 zR>;Auhua0;)Vk{BtNgD4|*lq=8fCP0+&<xeL?Rld-m-c z!;J3JG+Re_iqY@C?mf5s$P0h*@?F@waHPfwCzBQ$4Te?ENi)_rPoxXx-R+V)_vgeV zsJ}OW<(5q7Q+JhFbnVapmX2(PvFdTx${pQ7G*yLW4Pn&xEDv)&pxJtj3>RY%C34y# zF@U5*N_v1p25iWF(_(l-YF-4dndlwJ9jcfmWC=@(3wGKHd#I$N52NikZlMIWp ziXjJy5VoKdN|?feUP#$901CkDBIKZ>;>L@8cnU8Wm}tFvxadfPNBF%k>Xa|3lw*EiaW&$f#6oG zg%)?0;;zApy9KvEad%7JJo`87e9n<$-C65iGjq+%Ipqie*>u*&I5smcxctS6f|@@> z(;zA=IQrkC5GY(L;MpvR5QWJ2tho!;&R@ZxET6b|IaquqlFO)mHQxz4#b9YQ6UF%) zZ#DUM+u zeuS=`^cyU4 z?39m=sAc))#gUU}v0q8=2$^f7u*O|7E&p4L{hstww70ej{^(_Sn4O{Iae>ys#GtAu z_b)H~SvF&4(mQ-_NYL+AM^V0cnxe{yd|RtHV+K;aS5ZKWoT1>(9@q5 z(3Wl5OdQI8hO8*i@dD^K8({T0kQ9#V7XlC=v^UEnBj_hx1iyVF@~sV>599M7yNFRn z)Zg2NlX21a&OMYCD}ve!@i98c1v!5-+R_2Iq!ZTUaZXsqEuHl3()A_W>@5}~LbZ^6 z%;w^qx{g`-m0^{}-f$)8_fT_AsCq^6QY8XA624HkLqPtFNbT;}`_Y>BGJLh7M2Nx< zzi&o{#tKL55Fxt44Pv6etld- zd+%qw(zqq9^mHj2Tnl1plETCQr%Z-6DaGSW##c2**)#nhZP@;1o#Vk9sr1EXAtPTk zP^ac&nxn-Gh3RuwSCgNP+mx+(+5O)-)VXc1Z(SyvD$OAnA4Ehp|ExNNQ8Ho7Qd5&m zbA)j^aH~$ekJAnPAwzI^LLae28Lb8Nb6gHgSVC%Lfsnn(_1Pdm$SwW3yyft`4KR#% zvgcLH69>;VOR(~-f5l;mxZfx+x25O1P?3x#e~h|&a*YWWRdAnf(FdU)3#(^)5LuFr+;DE(OQ1NR^U#QXclo6 zp4jHfr5pnZUn;aPKhNfHoC`y_@qPF?Flr|`p80_uo+tGn5RT>O|00L8pq(K1x8`1?8SP7Ncv z^c%I|okxU^DwM?#+M&nYDO!_L!kWZJPI`?fpwSzA&7#rqJWEqr5IBRjHR2i`q30Ia zsN}o$cFrP|Z>meVlMU*x`&m7Lw~3eTPXcSQITF)mbl`a-R;7i>e-ESK65<0Jk`!u- z7Tm7+XAT-iJa9R9_f69_Nk_5KV%5-2RW`?p5xyD4DQpG03WdnL2E(`|!7nI!Lg-Bb zhWUJfdXq$$3^i10aY|8`8g)%fdi(%Ak+4!I4tc?lT)ck zNtquyzkR!~>9>-3ZxRx*C{akJm=RBqQ{d$;)FP6#Ww&UVb0b8To@}43XJ3|gs7ODo z`zx;YWY;eCXc+P)E~U~9w!FFl+g{aAd~JD0-c@xf;JcHjz`cn+y{bEL$We)AyEZ+( zGM8*mE@*b(^BN72IQ*vZRR(qNl1WWDO1PK9h;X^E}?#%6z-1K@2f7HFY-EBp)Gh1y9HwdeJhpqCkCG_1fE z=Ie#gzC3E#b(Yi0vo>S^VsJVGj-^j>l8(N$(4uyf5#9yPLRb9PTZs#^*e2o9bY z0kvISqvrxI3qgy=ct^l>z^_^C{onHTB*;Q^#5lH^gclk5q`6p8<1*9OGVF1Fvg4|u zIi0LpPkUd2P1RZLh=7_-GAVfMk&0_PPa{H|-~Ch`2f10*k0Oip%`l7^i>$~gG!-FZ zZwFNZ5nSDPY!#NvLX;)o_a=e==zJM7iqk3#V%{;eAV@+}v+rK*Y3AwTPMr#)E-r~IES-L(Q&N>6L^|Q| zHtfT!NOKEKcEC9Le{ z^EUZAND|d}SGKY;=^RrOddl?A|C5zGhGwaPZsyKkHo@&T3i$d(FBqW2Y5L zAop{7I`)vJr>rv5X?QGIA~iiT%XXf?=w_ zyB92Hn3nSRJ4HS3nxPjN(=w2DrDroIq_xhhS-9sDLCH%ffnN)4Y3CbFJJJ;AouNea z0_!`w0FWhfL9N7eF2m9%1b#l5{S)bSSHJMKwW2i3_!cVis@Imv1RCgdZoqNwNfg<{ z0q68Mzdz<2B%@&v&;KCd8r}Oj&d=l&r{c{#rj%5sLbf8SnnxDBiU*;5ZEa5M$wJ&8 zLoXL>Hgo{Z^QFG|s~*{2Avh@TW_Y9xob7Q&w%J$WZ(Vbg?N*}E{`cl!2q2Y)5nEzt zM*PeiPT1TdB%E?R=Ib}|9fQ;#_|e&MiSZv^mShJWIi9>P5s$Uu>nx_`3Zw1b7kb9M z&toz(Vwm03-`d`Mye#>Gh6H}8X5;2UfA?+KE=4(2)5%PJOPK)yLf76ih%`b|bUc{J z?CCj4>Da5`mVxt%wn))_b@1)hSK{h$Z1eg!_uDD&xV^mZPh0YBRuzB!mu+k4;H^jC zTv=7N&Ad~1A5@Q#InF-J{c9J3$m?*L9Gg(xY(OL1Q4ZTZZp}Bq?ab@g7^oekFi{G` zr1P&L@7+}fBR zvTdiU9j7nO_QrJD`Eh_%Z3ui!;VUqqD@!is`01Ei&|@E|SzvCTr)kss5XB_t(tU0H zk2}~XU+GJMO1P8fP{OP|jY__FZE1vWKZ!Yv5A-;;@3win*>aDTTCo8oDX<7QmTkZcUt)bOA)A1j?vvW&mb#`ZP| zduf}zZj@mNZ-ua^=K#B7L`KZPlMfD8E`RT^s~GULgarD`ny;->6-ha2^|e=ZVwL#= zHcy#xCC`~RpZb=I(#Y01;IvY8kEfRwkoQouKRE{YlowOn&^D=(B*$JmvaY@nJ0pKp zPc_)!{kBgpkSsfvCN>&1+N2Fz|%%~vvWgZbuGC*YL-m_hbB_hkEN zhp4JKeCBtN9Lq27?inH;u*y5QwCa>-7f{}`w`lPFjrywl8yK%ApNUAnMfkDJiH8F@ z0Ywg{il`k$R|`w^>hpS5@L%QIiB>uCJat6Eeq_M~KoHRJ6GE@MSJE6pHmldp9p){0 zo+))cVqJ)bDV0e^9PA~M;W@|+Zg|>79pGM*P?z)hzCPFiy6WWOJ&>j_K}r14Q-_dG zovdKO{fs-^zoG134Zo0Mr8*bxzP@Gh4O`ItzAq3e`V5=0>VUo|#_NZCOm1)3ii??_ zV)rI==)~vmh$Q96$2E3L|HlfZMygfhGkM_c!d;Kk+C`!wL{LE$ule{km;|PjH}R-3 z!=8D;oNgv~afQylJEx6X%Nx$`LY!t>x7T1Y#EM8cmQ8dIJz?L@sKWF5rvZbm$4%FY z^<^%4D^!5XN}|CWO%TbhrwbP@|4GsR%eu#%$!DmhEF<0UsXur3s+qukKKj3gcrIZ0 zca5s0l{+FdH|DV{w`M2AquE%#$Osn?q~C^dhxoLCn!gnQ|2j$30~fk8T^%ix8_!F) z@P?8_L62qEG=a*x+p?Jz-I51QkxgJ)Zncu_WgkB&TStiK{=$2ViUfXJbg?TMV!RSZYYW7_vm1=Q|IiU05)Xj_Y`)*ePTmHh1 zbX%!b)B}f9F~{31(}!PvCP6m=0s|pvze;FAeq@&Mzt<8ARcA(((jus=b9~3ZhuhZ8 z-%8BXCHS&iDFK{~N;C7j*xEfchwTbX`R(GF#(JNdphlA9Z-h-`bGzQL+Ssa^<4Tx@ zp_HMV;sp}$Ea!~vlypS3`b$K6jeT1}P>PtcmB5Q_ z`;U@6g-81_nR!#^Mxs_*KwC4)L>Z4ynytF`*`sHLBgt3Umb}HhY%}n4BI42C%MHeg ziG5EWhwxdHRU2}kRk~GXCxA3;UwYUi+W1W zAH+6lD@=Zif6~!_yzeXumq=DC!HKGoL4MBlR{(Y3#Cf25jp4jVA=x?~f2KgYK$&U8 zV@*Ptud~X;WHXg?v0dUKw3c38+VP8F!Kk~LBf0S4Ao|d&PawAW<0!{!LZ7cRe71NY z;BwO+>q>f*^@KrZ`z6rU?-Qh_ z_PkkTF0Twx4=+3l*i;bnXqvCxaHP0JDX0Z5Re5AS2<)70rRNJcxycO+SjfA zy`ALD&i)6)i^uvbDut2UkF0O&zdd0>!u$o(BUUT7@4%8*_ZuGX*Kiu|N7cDDpg653 zJgIB23TPf|y1n8o(SJHIU5P<%l^7`UG_8N?b%l`fw+GvD{JMeX_icF@hi<{oohj~&o?Ng=2Tbz~L zjf-CUARnBab^_5C^J^vwod`MN2VHwRh`i0LF82%gKa~>)ubb-#XV{S6E-(+S zx}pffG>tCllXR48A`Uo)x-_vW-S$hJKGT*Bc2uklkjFyQ?7_|?)+ zNhNpu#o;AjA4S6}2R|u!Z=FENWlwr~0^5ZhBMG@zh+%#Le}Q(%ZKcWaDnfQl8Mc>b zel6hzob;@1x<@khlF;uchZdl{`Jz|6kk&}bZ6I4@Vau9P@IOa5y3`q&)A@r{;k=3GsLh8> zNf8RXteN`^_>)A~dr)yv^saq3GmyO8CuE9RqjMJHTq5WZG8Qj&0gRnmyRXxjL;rno z$D08?uS&LUS1MF5Hy|a$L|wOPXRvRJnP+d-KasaIL@(EN*a@C48bz8WMp{nLg*Q0{ z{OlsxP`M`TA!*7s5Wl+G?d8Ukr5Lz86czmNNFwoR)bF=F;l3)-&aZ1nAR!j#`DY=V z%mt4z0coI5o}_SJF7acx1`q+$@EtngLHtj-}~*=v6+~zU?H937;CIsf~gp)feHJU8IgJf7_;ab7;)Qd6jN|f|c8ouu)4eVJ#E+!;I5H6-^Nw?~hGV4VcnTb&WVDFm1oLsbo%I2W}0!AGYY{2h!a9cC3(|3ZZ+rlohC+ zZx>gJPoFo(Maj29z|f^1K!ga9w3-78P=ihM(=x>N4v9Fh=42eiEitunG$N(OtvvF^ zHt7W;>Gucvw6-}>hswO^FXj|>4A{cekcTg&f|~QdC=-BMKt!|JbLK;x)JIl%r;wwJ zKYH%Vbu&ljCV-PWL9uHpu5K#Kz+m{r2T=UaZWqQ*E&1&;P`5toH*b%=X8NdN$LzXJOU)lrYWnVfYye*O4m)|s-TUbD0q~t)*sf9rA8?b=KsA??l&J5GN9Y;y<3?k zLK;sc_x+=ie?jz-KD=bm~Y=yoa>c77(f zbl2(6FEOKwmItJ#9vt2sJXQ$%@bp8E*(1kM7$|uLH+MNc4_Xs|k8tKCsa+;ZP`zx2Nr?E2JLN<_QGA*% zDdFuGhuyQTlFv4xwj!M=r_>O~nb*P8V0>{FJCZ&Wvo`;shtWnBzZ8#pz(}egZuD!C z!k1si$jc5_aEXFP^Vl5E|Ll|Bt8>ag8n?G-#bsnzNe+?{Kzt`DeAWlshuAUMX zHEmxgvz=}wXd18QjvMuTob1MEpff-jcMU({;h~jsfu}%}VCVOzbDzJS&qa4Xf?GJu zy{`SR?4Wmf6}g&pXLre#og?$E6CZhvF!jEmMymbDM2>?D=dAyjaEnnTkjJLiO0y1i z&1^1u!e0tt^!w$eHY|n$4HwkWS{f0zP+*i0`CRPI-iz`L)e#`;B*srdE37bmPOe>7 z*Sn&gR6bFU4*H^kAXSQU)WB2)LhN0zlrtCVY`z)Y0J{dzj7z!8m$FPSjX6snEnq36 zL@jLMt>)B`hVo)X3Pi}s3^PwX2S{3?woJNaK&RTeyJJ4dP`q=q7 ztk%@%7>q6gQmhefjyvtZ`;+z1Rl|xOFl$po_20Sr4$n@v(CUuaRsGSr9nsC8No4jX zivVNh)9UiH)Sz;GO-)!0`+fUZ16_Eo2E9?ETPeKQo$Z1>uPQ_;n6=MVgDmDNUFR*L z;XLx!+VMU|hSydEki!m=TggnLYu4Bl_bq%H2}3xo8mR-_x~iOZc}C3of%b9NhN4-f zEbfmvDcpLwdjtYf*>(eWyA^6FlwPkpJJf*OX^qM69C0;WXa=YVH_s6n$#hSyrD?+G z;jUV7!oh|SWVaWKe@71X&?CpDo|h~L#F1{rG@fQ#e z1a$f6f%G8e{taK8d)%yWx`)nL>xL`?TnF#4`+S%wMZ2FPU=Mre?UZWLD}cTI6zB{x zP2hz8y2-}*EvMtrKk4S^;X#~N`T)soWWH5vhpfp=RLw;)Dc~TD(p-rO0y518Cpo2Z;?njn~0qEtnxk2a%y8AS@0Q2@j^SyI8bXg#BrWldg3I@G86Lry6?2se;clc8{*ci+88Tcf%T7Q& zjP;+#T!3W(qV1Gxe&_P9yz&#c&dm9v1rT}{|Ih9Y=>1P48f#ZIZQ*-$r{Cq)6i2+? zy#%BQ*+(BHMG}%dJDf!<$Ue4WK;5OkiKF4E`XYVP+nZSdMZhpidIrr^YaxMouL7dezt&mu-dZfXq41UAW= zo7P=jcGL=4aCk2PY%|#(%XG6(`+qk*b=5{3%yt1%syiMjYD_4rUk6*G%=M4}%LxP` z(&A}Y&nBUnJ(i8Kc4rN-y{A9bMh@Tf_-ekX?H}Cc&gLf^PuRjpXh5M%6R>}en1}*(&-mm$WqdBYcLqMnhvK{k{;F6<(7S;XS~|N;>c~}+c!8hJ_ih`6)`*n3G#Np>uF8@ znK8+m1w#1h8CuMQyB|*OD%L&mUi8+Td@4Qq(ef{Q(>HrWErIp)(;#;4!Jt!DkH2?_e<-yn7HI>vG1`*D?gzLk2ow9lb(4t){S z4}uO+0~Q0^uEMSt-0ig4c*;-=v$z>T@M&{C@_0zKW~ZbOn+17!y?m*8+WIZKWCa(N zGFN;9j+0v?j(gQR3({%+%zMAqVpeARD1T%-;0X>BeS;KODkb&9GtpKd+LbPCUpsm- zn4<%Wb{M}3A$*N(dA#c4L&$zimlJNJN1<~mL1cQq0AGlaXS+Eufm)oqaY@J=_Nk_! zc-l>7u}#{`LU!_RlAxOvyucHE$%jFK|IQ8f1o6C^OM$T-z+4DWeLrEjDrVuzE8jJd zcC;u<+R3X0-)q|-p080Cdfe2LG{K6mF>Lp}ADm4KlsE7Dj?J#u%z=jyU09&DDoL2+ zeg(A9UTpB2*ALV1L~2s8Z+WIbt?f@ZB<)J{pu#fK1B)Du#P7&lwB^iFU zc{@*G(C`&9`CSKG7RtaJdCVokOWpNM(|zcBc1jifpDq>w*XW5$8))Xt1IGJ=@v~^m7nfh1_R&8>-O1)?Kbuz{;4^CxQHR_YJpwQbRANQhTj9^Xj-r8Z(Uwv zYq}2pP^Gf93U`2y&HpIVv{+WM8?>5ND=r_EXNA7g<#b?bvNR0z$Klhy*|8>5Ennt; z#nD7~tIbj}!t25fcHDCy06L&-GVsr!Rf?Qp&+*St9tn=$Iq|&~rS%5uIkxT`d^^R% z-K>XkOnsZW#_fR{#EfaUK@>9eS%%(`NnRZM_C#Oc`*(cX@cb0tUW}wUjn!apGezyZ znjOp5AE6&$Q+yxM5_q6o`u9#h^%V3c@L5m-c&sk5Tb^6xf69XznW)bYi4| zE`dXSF#dCfog5lGIQJd-EjkrKsX#q}Ox!m8u;Nmzg?&g8N9%A{U{X%*6H9|v=vY0x>1mR>W%D*W_xb?w-K%SJMlmRsR%5R%ol{Op3RpM9=f3l_6nq^a>| zI8153J0ZtZ?L)?N#o}TRB|og8_N|5BJw7d$Eh>*=S3QhRi#SF=4~hm6bI>HekT+%G zq2QnBjyb&xI2&FW9h3OlKdNwl0+?Z~BY1`%CiVZaa~abcQ-P44V#$|XQ_;*jnj4Rz z-7Z5OJT+b!4UQXzQv*}e)z<{$1Up0 zq(EO4j#q=sDP22|a#}4CvH2O-oT98ob8f8}_hynpjq=%C68dlRv9CMxu8F&lEc?Go z^||OA{~1WlTGyA=_gL@5{wP3{oWzun;8PjsEh?c?cu`JvK}Q2e&8em@xv&SN*2HP_ z8tC|u32gWsN!IJdvA;pCCU_!D$1eYkGTY0H8t`N~{@y0p=JOx)q5&VWe!3FZo<_lc zZ((TBs)$^>cyz{$iHD47_D|MZ`?wRuwfudKA&3|N;JF4w?N|WlR7dqXqmQ=+t=K;c z+~9z(avlA@Y7>IjTX1*tQ%&wmzdj;+)`HY|fthk(M@Za;vQF2L5BTY7g^Wh5zWyS~ zY2*4YSJz=l=9#wm>)7478|)nZmcB{`j%#=0s)|=+KGEswx(y)!T?^muZhh$;af~D7 z|6AK#Yeh~)&sQm*TpYv{nFuUwwm7mTHwO=p;C}ZA%!5_^UFpflCOhyAJ*<i?<9h0;{S%0%>`DEP zy!W1ZtyJ@A8kHoatSFhVi;Gq7=NhoiR27-v{3pv~asV2gH0h^Lz7^uqybKF&V|sPw z`|p~+#9E953#92+8Gp}>|uhwW@Hn8T*W?6fzjy0#qv|0cyi z_ZOxUFXx<6*OZhA|18P`52=^ai;qZ#pv&#)svSc>$XU$#pVbM@2=2mPa9TV@f_Iwk zcT2j!J*l^>R>n)6nGmWuq5g+rbF>}1F#ib+WHU&L;saTpDj@>?%O|o9Rih5QIWS&T zm3WZfWe>B&^TFd^alqa9AhMlTZXp@|?$;43;QBK1v_#lKU)EY$sp(PIKi-GkR!-pDFJ!p&7 zy{mi~4TltYq0b9To(*zq8UM8}xV)|I>80NQTGfn64-DlX)5oi#Il7 zn7f?feFVGmRj#nUPv8S(nL?B`5Gfb}8>Ht6G{i zZo8e%$%e&LOy}>BGrR0;`C24%ZY8F!ktR22aPKw(k7wOh3J>2`&3kJd9v&(`4*hIS z9}K$dWwfbNXly;Tk|{0S8{#&Zi_LvZhIE&HADx;Ke)_xJ=N*Ab0(=B&xP;Z*o^Wkq zXgm5uuEcsZxbXNmTa}f_-N$%>KyYD5AD2?n_az9RhTTYy5kmaj4SVXV$kYdxBYQK& z^*I9@6lq{_&B3huxmylrJp(^FV?!FvmuAwGGz(k?r?u8PX z&r>Md-mw$$buUN@6?uJ=HKOw=p-cOhVs2cTkzZyc^VP%~{FSTdhVC#(5b6en#iV?g zMlNyRo=apTnyy%=l6F;3x-@vIa(1ypdzBFa5&gO6X67`abUv(Fb5)%O^c#hYT+5uZ!l0>W-B1BdAE> zBL%6S0(K@)UA)^$#51m(;rt}krVpx%>~p-1mK63!exC7-mT92XneVMlA%m@FT0hNg z5Bk*K*+tUhNmON=J8UUdtuf5-W4zvec0f>)r2ZK=WL7|djVDk6K(GAbc6)=9z19ih zrAK&qABx|q^1GO#V2>?@=~NX zAI6*eKL_2VMdVIafKo0z5m`)8(>7U2u>~5%*7Yd>_cs?@9n`RgTSUaIdV=sC-3l)k zdyo@!G)h#-MI9BVLFMnIiD9BHL8R;AboZJ(IYp@J#nh(fjRKF-Tm@*`GfjORNF45L&HJ=-lH!I5qqDOmywdlz%XyV*H1@&V6k| zsjyr)6F@8J8fm4BzrsYm9i~BKTBe15S7)z@V=LK#KaRFb`2IO=QCxt)_uhg*|tEy+D~_ex_+`rH%b|9)0cPVG~*j78}G07(Z@JOBUy literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ac46d89..a19079c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,18 @@ - Vibe Keyboard + Mobile Keyboard Hello blank fragment + "No favorite photos in this folder yet." + Type a Message + Write + All categories + Search + Step 1 : Select + Step 2 : Enable + Activate Vibe Keyboard + Today\'s recommendation + Favorite + More recommendations + Setting + Version + Share \ No newline at end of file