From 0cf6c539faa037d5021796c034ddcdd2036f43bb Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Tue, 16 Jan 2024 16:59:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=83=A8=E5=88=86=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 66 ----------- app/Admin/Components.php | 2 +- app/Admin/Controllers/BuildingController.php | 69 +++++++++++ app/Admin/Controllers/KeywordController.php | 62 +++++++--- app/Admin/routes.php | 10 ++ app/Models/Keyword.php | 10 +- app/Services/Admin/BuildingService.php | 114 +++++++++++++++++++ app/Services/Admin/KeywordService.php | 4 +- config/admin.php | 4 +- database/seeders/AdminMenuSeeder.php | 20 +++- database/seeders/KeywordSeeder.php | 19 ++-- lang/zh_CN/menu.php | 10 +- public/admin/logo.png | Bin 8461 -> 17680 bytes public/admin/logo_old.png | Bin 0 -> 8461 bytes 14 files changed, 289 insertions(+), 101 deletions(-) create mode 100644 app/Admin/Controllers/BuildingController.php create mode 100644 app/Services/Admin/BuildingService.php create mode 100644 public/admin/logo_old.png diff --git a/README.md b/README.md index 1824fc1..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,66 +0,0 @@ -

Laravel Logo

- -

-Build Status -Total Downloads -Latest Stable Version -License -

- -## About Laravel - -Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: - -- [Simple, fast routing engine](https://laravel.com/docs/routing). -- [Powerful dependency injection container](https://laravel.com/docs/container). -- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. -- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). -- Database agnostic [schema migrations](https://laravel.com/docs/migrations). -- [Robust background job processing](https://laravel.com/docs/queues). -- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). - -Laravel is accessible, powerful, and provides tools required for large, robust applications. - -## Learning Laravel - -Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. - -You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. - -If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. - -## Laravel Sponsors - -We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com). - -### Premium Partners - -- **[Vehikl](https://vehikl.com/)** -- **[Tighten Co.](https://tighten.co)** -- **[WebReinvent](https://webreinvent.com/)** -- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** -- **[64 Robots](https://64robots.com)** -- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** -- **[Cyber-Duck](https://cyber-duck.co.uk)** -- **[DevSquad](https://devsquad.com/hire-laravel-developers)** -- **[Jump24](https://jump24.co.uk)** -- **[Redberry](https://redberry.international/laravel/)** -- **[Active Logic](https://activelogic.com)** -- **[byte5](https://byte5.de)** -- **[OP.GG](https://op.gg)** - -## Contributing - -Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). - -## Code of Conduct - -In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). - -## Security Vulnerabilities - -If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. - -## License - -The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/app/Admin/Components.php b/app/Admin/Components.php index 51a1dd5..0d91418 100644 --- a/app/Admin/Components.php +++ b/app/Admin/Components.php @@ -15,7 +15,7 @@ class Components extends BaseRenderer { { return amisMake()->TreeSelectControl()->source($apiUrl) ->name($name)->label($label ?? __('admin.components.parent_select')) - ->showIcon(false) + // ->showIcon(false) ->labelField($labelField) ->valueField($valueField); } diff --git a/app/Admin/Controllers/BuildingController.php b/app/Admin/Controllers/BuildingController.php new file mode 100644 index 0000000..74ac961 --- /dev/null +++ b/app/Admin/Controllers/BuildingController.php @@ -0,0 +1,69 @@ +baseCRUD() + //去掉分页-start + ->loadDataOnce(true) + ->footerToolbar([]) + //去掉分页-end + ->headerToolbar([ + $this->createButton(true), + amis('reload')->align('right'), + amis('filter-toggler')->align('right'), + ]) + ->filter($this->baseFilter()->body([ + amis()->TextControl('name', __('admin.keyword')) + ->size('md') + ->placeholder(__('admin.keywords.search_name')), + // amis()->TextControl('parent_name', __('admin.keywords.parent_keyword')) + // ->size('md') + // ->placeholder(__('admin.keywords.search_name')) + ] + )) + ->columns([ + // TableColumn::make()->name('id')->label('ID')->sortable(true), + TableColumn::make()->name('parent.name')->label('小区'), + TableColumn::make()->name('name')->label('名称'), + TableColumn::make()->name('sort')->label('排序'), + TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true), + amisMake()->Operation()->label(__('admin.actions'))->buttons([ + $this->rowEditButton(true), + $this->rowDeleteButton(), + ]), + ]); + + return $this->baseList($crud); + } + + public function form(): Form + { + $form = $this->baseForm()->body([ + TextControl::make()->name('name')->label('名称')->required(true), + amisMake()->selectControl('parent_id', '小区')->options(Keyword::where('parent_key', 'housing_estate')->pluck('name', 'id')->toArray())->required(true), + amisMake()->NumberControl()->name('sort')->value(0)->min()->label('排序'), + ]); + + return $form; + } + + public function getTreeList(Request $request){ + return $this->service->getTree(); + } +} diff --git a/app/Admin/Controllers/KeywordController.php b/app/Admin/Controllers/KeywordController.php index 813ffb8..37c411a 100644 --- a/app/Admin/Controllers/KeywordController.php +++ b/app/Admin/Controllers/KeywordController.php @@ -8,6 +8,7 @@ use Slowlyo\OwlAdmin\Renderers\TableColumn; use Slowlyo\OwlAdmin\Renderers\TextControl; use Slowlyo\OwlAdmin\Controllers\AdminController; use App\Services\Admin\KeywordService; +use App\Models\Keyword; use App\Admin\Components; use Illuminate\Http\Request; @@ -17,6 +18,24 @@ class KeywordController extends AdminController public function list(): Page { + //区分特殊管理和通用管理 + $columnsArr = []; + $parentName = request()->get('parent_name', ''); + if(!empty($parentName)){ + $parentId = Keyword::where('key', $parentName)->value('id'); + } + if($parentId > 0 && in_array($parentName, ['financial_cate', 'file_cate', 'department', 'area_cate', 'organized_body', 'housing_estate'])){ + $columnsArr [] = TableColumn::make()->name('name')->label('名称'); + if($parentName == 'department'){ + $columnsArr [] = TableColumn::make()->name('value')->label('类型')->type('mapping')->map([ + '1'=> '发文部门', '2'=>'收文部门', + ]); + } + }else{ + $columnsArr [] = TableColumn::make()->name('name')->label('名称'); + $columnsArr [] = TableColumn::make()->name('key')->label('KEY')->copyable(true); + $columnsArr [] = TableColumn::make()->name('value')->label('值'); + } $crud = $this->baseCRUD() //去掉分页-start ->loadDataOnce(true) @@ -31,36 +50,53 @@ class KeywordController extends AdminController amis()->TextControl('name', __('admin.keyword')) ->size('md') ->placeholder(__('admin.keywords.search_name')), - amis()->TextControl('parent_name', __('admin.keywords.parent_keyword')) - ->size('md') - ->placeholder(__('admin.keywords.search_name')) + // amis()->TextControl('parent_name', __('admin.keywords.parent_keyword')) + // ->size('md') + // ->placeholder(__('admin.keywords.search_name')) ] )) - ->columns([ + ->columns(array_merge($columnsArr, [ // TableColumn::make()->name('id')->label('ID')->sortable(true), - TableColumn::make()->name('name')->label('名称'), - TableColumn::make()->name('key')->label('KEY')->copyable(true), - TableColumn::make()->name('value')->label('值'), TableColumn::make()->name('sort')->label('排序'), TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true), amisMake()->Operation()->label(__('admin.actions'))->buttons([ $this->rowEditButton(true), $this->rowDeleteButton(), ]), - ]); + ])); return $this->baseList($crud); } public function form(): Form { - return $this->baseForm()->body([ - Components::make()->parentControl(admin_url('api/keywords/tree-list')), + //区分特殊管理和通用管理 + $parentName = request()->get('parent_name', ''); + $parentId = 0; + if(!empty($parentName)){ + $parentId = Keyword::where('key', $parentName)->value('id'); + } + $formBody = [ TextControl::make()->name('name')->label('名称')->required(true), - TextControl::make()->name('key')->label('KEY')->required(true), - TextControl::make()->name('value')->label('值'), + ]; + if($parentId > 0 && in_array($parentName, ['financial_cate', 'file_cate', 'department', 'area_cate', 'organized_body', 'housing_estate'])){ + $formBody[] = Components::make()->sortControl('parent_id')->value($parentId)->hidden(true)->readOnly(true); + if($parentName == 'department'){ + $formBody[] = amisMake()->RadiosControl('value', '类型')->options([ + '1'=> '发文部门', '2'=>'收文部门', + ])->required(true); + } + }else{ + $formBody[] = Components::make()->parentControl(admin_url('api/keywords/tree-list')); + $formBody[] = TextControl::make()->name('key')->label('KEY')->required(true); + $formBody[] = TextControl::make()->name('value')->label('值'); + } + + $form = $this->baseForm()->body(array_merge($formBody, [ amisMake()->NumberControl()->name('sort')->value(0)->min()->label('排序'), - ]); + ])); + + return $form; } public function getTreeList(Request $request){ diff --git a/app/Admin/routes.php b/app/Admin/routes.php index b080bf1..cbf6e53 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -32,6 +32,16 @@ Route::group([ $router->resource('ads', \App\Admin\Controllers\AdController::class); + + //数据管理 + $router->resource('financial_cate', \App\Admin\Controllers\KeywordController::class); + $router->resource('file_cate', \App\Admin\Controllers\KeywordController::class); + $router->resource('department', \App\Admin\Controllers\KeywordController::class); + $router->resource('area_cate', \App\Admin\Controllers\KeywordController::class); + $router->resource('organized_body', \App\Admin\Controllers\KeywordController::class); + $router->resource('housing_estate', \App\Admin\Controllers\KeywordController::class); + $router->resource('building', \App\Admin\Controllers\BuildingController::class); + //修改上传 $router->post('upload_file', [\App\Admin\Controllers\IndexController::class, 'uploadFile']); $router->post('upload_image', [\App\Admin\Controllers\IndexController::class, 'uploadImage']); diff --git a/app/Models/Keyword.php b/app/Models/Keyword.php index 44b4621..65cd958 100644 --- a/app/Models/Keyword.php +++ b/app/Models/Keyword.php @@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use EloquentFilter\Filterable; use App\Admin\Components; +use Illuminate\Support\Facades\Str; class Keyword extends Model { @@ -30,12 +31,19 @@ class Keyword extends Model $keyword->lv = 1; // 将 path 设为 - $keyword->path = '-'; + if(empty($keyword->key)){ + $keyword->key = Str::quickRandom($length = 16); + } } else { // 将层级设为父类目的层级 + 1 - $keyword->lv = $keyword->parent->lv ++; + $keyword->lv = $keyword->parent->lv + 1; $keyword->parent_key = $keyword->parent->key; // 将 path 值设为父类目的 path 追加父类目 ID 以及最后跟上一个 - 分隔符 $keyword->path = $keyword->parent->path.$keyword->parent_id.'-'; + //当前key是否为空 + if(empty($keyword->key)){ + $keyword->key = $keyword->parent_key . '_' . (self::where('parent_key', $keyword->parent_key)->count() + 1); + } } }); } diff --git a/app/Services/Admin/BuildingService.php b/app/Services/Admin/BuildingService.php new file mode 100644 index 0000000..6a6956e --- /dev/null +++ b/app/Services/Admin/BuildingService.php @@ -0,0 +1,114 @@ +query()->find($pid); + + do { + if ($parent->parent_id == $id) { + return true; + } + // 如果没有parent 则为顶级 退出循环 + $parent = $parent->parent; + } while ($parent); + + return false; + } + + public function query(): Builder + { + $parentIds = Keyword::where('parent_key', 'housing_estate')->pluck('id'); + $query = $this->modelName::query(); + return $query->whereIn('parent_id', $parentIds); + } + + public function store($data): bool + { + if (isset($data['key']) && $this->hasRepeated($data)) { + return false; + } + + $columns = $this->getTableColumns(); + + $model = $this->getModel(); + + foreach ($data as $k => $v) { + if (!in_array($k, $columns)) { + continue; + } + + $model->setAttribute($k, $v); + } + + return $model->save(); + } + + public function update($primaryKey, $data): bool + { + if (isset($data['key']) && $this->hasRepeated($data, $primaryKey)) { + return false; + } + + $columns = $this->getTableColumns(); + + $pid = Arr::get($data, 'parent_id'); + if ($pid != 0) { + if ($this->parentIsChild($primaryKey, $pid)) { + $this->setError('父级不允许设置为当前子权限'); + return false; + } + } + + $model = $this->query()->whereKey($primaryKey)->first(); + + foreach ($data as $k => $v) { + if (!in_array($k, $columns)) { + continue; + } + + $model->setAttribute($k, $v); + } + + return $model->save(); + } + + public function hasRepeated($data, $id = 0): bool + { + $query = $this->query()->when($id, fn($query) => $query->where('id', '<>', $id)); + + if ((clone $query)->where('key', $data['key'])->exists()) { + $this->setError('KEY重复'); + return true; + } + + return false; + } + + public function delete(string $ids): mixed + { + $ids = explode(',', $ids); + if(count($ids) == 1){ + $this->query()->where('path', 'like', '%-'.$ids[0].'-%')->delete(); + } + + return $this->query()->whereIn('id', $ids)->delete(); + } +} diff --git a/app/Services/Admin/KeywordService.php b/app/Services/Admin/KeywordService.php index 7e28bc1..c97a890 100644 --- a/app/Services/Admin/KeywordService.php +++ b/app/Services/Admin/KeywordService.php @@ -44,7 +44,7 @@ class KeywordService extends BaseService public function store($data): bool { - if ($this->hasRepeated($data)) { + if (isset($data['key']) && $this->hasRepeated($data)) { return false; } @@ -65,7 +65,7 @@ class KeywordService extends BaseService public function update($primaryKey, $data): bool { - if ($this->hasRepeated($data, $primaryKey)) { + if (isset($data['key']) && $this->hasRepeated($data, $primaryKey)) { return false; } diff --git a/config/admin.php b/config/admin.php index 7c6dd40..a380f8e 100644 --- a/config/admin.php +++ b/config/admin.php @@ -2,7 +2,7 @@ return [ // 应用名称 - 'name' => 'Owl Admin', + 'name' => '道角村智慧党群服务平台', // 应用 logo 'logo' => '/admin/logo.png', @@ -84,7 +84,7 @@ return [ 'layout' => [ // 浏览器标题, 功能名称使用 %title% 代替 - 'title' => '%title% | OwlAdmin', + 'title' => '道角村智慧党群服务平台 | %title%', 'header' => [ // 是否显示 [刷新] 按钮 'refresh' => true, diff --git a/database/seeders/AdminMenuSeeder.php b/database/seeders/AdminMenuSeeder.php index 64d4d73..0203cc9 100644 --- a/database/seeders/AdminMenuSeeder.php +++ b/database/seeders/AdminMenuSeeder.php @@ -24,16 +24,24 @@ class AdminMenuSeeder extends Seeder 'children' => [ ['title' => 'admin_users', 'icon' => 'ph:user-gear', 'url' => '/system/admin_users', 'order'=>1], ['title' => 'admin_roles', 'icon' => 'carbon:user-role', 'url' => '/system/admin_roles', 'order'=>2], - ['title' => 'admin_permission', 'icon' => 'carbon:user-role', 'url' => '/system/admin_permissions', 'order'=>3], - ['title' => 'admin_menu', 'icon' => 'fluent-mdl2:permissions', 'url' => '/system/admin_menus', 'order'=>4], + // ['title' => 'admin_permission', 'icon' => 'carbon:user-role', 'url' => '/system/admin_permissions', 'order'=>3], + // ['title' => 'admin_menu', 'icon' => 'fluent-mdl2:permissions', 'url' => '/system/admin_menus', 'order'=>4], ['title' => 'admin_setting', 'icon' => 'akar-icons:settings-horizontal', 'url' => '/system/settings', 'order'=>5], - ['title' => 'keywords', 'icon' => 'ph:codesandbox-logo-light', 'url' => '/system/keywords', 'order'=>6] ], ], - ['title' => 'web_content', 'icon' => 'ic:outline-collections-bookmark', 'url' => '', 'order'=>3, + ['title' => 'data_content', 'icon' => 'ph:codesandbox-logo-light', 'url' => '', 'order'=>3, 'children' =>[ - ['title'=>'articles', 'icon'=>'ic:outline-article','url'=>'/articles', 'order'=>1], - ['title'=>'ads', 'icon'=>'lets-icons:img-box','url'=>'/ads', 'order'=>2], + //财务报表类型,档案类型,部门管理,地区类型,社别管理,小区管理,楼栋管理,户籍类型,民族管理,政治面貌,文化程度,机构管理,口头纠纷类型,卫生检查类型,图书类型,企业地区管理,收支情况类型,福利类型,工种管理 + ['title' => 'financial_cate', 'icon' => 'tabler:zoom-money', 'url' => '/financial_cate?parent_name=financial_cate&has_owner=0', 'order'=>0],//财务报表类型 + ['title' => 'file_cate', 'icon' => 'carbon:document-unknown', 'url' => '/file_cate?parent_name=file_cate&has_owner=0', 'order'=>1],//档案类型 + ['title' => 'department', 'icon' => 'mingcute:department-line', 'url' => '/department?parent_name=department&has_owner=0', 'order'=>2],//部门管理 + ['title' => 'area_cate', 'icon' => 'majesticons:map-marker-area-line', 'url' => '/area_cate?parent_name=area_cate&has_owner=0', 'order'=>3],//地区类型 + ['title' => 'organized_body', 'icon' => 'ic:baseline-people-outline', 'url' => '/organized_body?parent_name=organized_body&has_owner=0', 'order'=>4],//社别管理 + ['title' => 'housing_estate', 'icon' => 'bx:building-house', 'url' => '/housing_estate?parent_name=housing_estate&has_owner=0', 'order'=>5],//小区管理 + ['title' => 'building', 'icon' => 'fe:building', 'url' => '/building', 'order'=>6],//楼栋管理 + + // ['title'=>'articles', 'icon'=>'ic:outline-article','url'=>'/articles', 'order'=>1], + // ['title'=>'ads', 'icon'=>'lets-icons:img-box','url'=>'/ads', 'order'=>2], ] ] ]; diff --git a/database/seeders/KeywordSeeder.php b/database/seeders/KeywordSeeder.php index 9d0340e..5fc967c 100644 --- a/database/seeders/KeywordSeeder.php +++ b/database/seeders/KeywordSeeder.php @@ -17,15 +17,16 @@ class KeywordSeeder extends Seeder { Keyword::truncate(); $list = [ - ['key' => 'article_category', 'name' => '文章分类', 'list' => [ - - ]], - ['key' => 'article_tag', 'name' => '文章标签', 'list' => [//标签value填写色号,指定标签颜色 - - ]], - ['key' => 'banner_address', 'name' => '广告位置', 'list' => [ - - ]], + ['key' => 'article_category', 'name' => '文章分类', 'list' => []], + //标签value填写色号,指定标签颜色 + ['key' => 'article_tag', 'name' => '文章标签', 'list' => []], + ['key' => 'banner_address', 'name' => '广告位置', 'list' => []], + ['key' => 'financial_cate', 'name' => '财务报表类型', 'list' => []], + ['key' => 'file_cate', 'name' => '档案类型', 'list' => []], + ['key' => 'department', 'name' => '部门管理', 'list' => []], + ['key' => 'area_cate', 'name' => '地区类型', 'list' => []], + ['key' => 'organized_body', 'name' => '社别管理', 'list' => []], + ['key' => 'housing_estate', 'name' => '小区管理', 'list' => []], ]; foreach ($list as $item) { diff --git a/lang/zh_CN/menu.php b/lang/zh_CN/menu.php index dbedcd6..7acf7ca 100644 --- a/lang/zh_CN/menu.php +++ b/lang/zh_CN/menu.php @@ -12,5 +12,13 @@ return [ 'keywords' => '数据字典', 'web_content' => '内容管理', 'articles' => '文章管理', - 'ads' => '广告管理', + 'ads' => '广告管理', + 'data_content' => '数据管理', + 'financial_cate' => '财务报表类型', + 'file_cate' => '档案类型', + 'department' => '部门管理', + 'area_cate' => '地区类型', + 'organized_body' => '社别管理', + 'housing_estate' => '小区管理', + 'building' => '楼栋管理', ]; diff --git a/public/admin/logo.png b/public/admin/logo.png index a46d3efad52bdec29a7cd560de5805cc44aa96c6..3494532cfd789b7eee74aa8cb83cd581c0ddd8ce 100644 GIT binary patch literal 17680 zcmd?Qg@5(o~#U4uggcMZWEf;$}EefIv&ckgrW zIe)-e&&)HudeyJ0y1KfnyK7DK7ey%)L;^$r0DvMREv^CpKqUS1g@^j6X*C{x`}o0k zlhATgb+mBvGwoyW`t001a-Yc(x5Ed_Z#Q%8Gd<9}$F zz3iPn&;Wpdu$Pmusjayi(8S!*+Ch-~qO+GAXl*7)uF0vus^BDMZe=a)<6^Grqo`); zV{6K5MlLJ_6!7BvU|?_VW(@SQw{vji^AaTg7hk@Q@;}uq-Ub%lfzzB)4*NbK+xR@$~d$_WaE3=wivj#>>n54-a;BrVk1xS8oS5V=pELSBn2| z5I1))c5`%5b9A)(Pw#!Pa&&WawQ_Uwf zGuxNAHMDK;l%I$UuizZ2H=al znuPn0gzV0;_QhcY9Y$$s>4(Qh32*(1;g<05aF5KeySux^gAE8J5;ad#SXnB7G4=TF zqKm65gefbgCL@eKoq&LVRkR1dm=Rz^A61zd6%{o;KK|K5{pIE5>gn$0?Ge$G{nz{M zzyg@uRc2;p21cD}{dfyWk9Fhy3QLV`@BK1upbS%+9ZQBDS(On&jeU(f@cQiW>luMOE5L{r!I*LG z{RBpzdhhB4V8zrh+ErOq`K`YyB{c;e9v)yok7&(7slWwmz}|g2k72@*^Q(@}OMB~d zAD~V3@cM+T$qHl4Y!K_p6QOl__xH!n@Yc@u)B6j)HYcPZ{mJPGf*$qSP+?V`@Ko1)Aq%INka&X2DMy*1-c;%j0J1SMn^UO&-!~1gf0WFF=xxwG^7J3gdtXhU*>OCA403aA3BQB!mwR)O|21>c_d3P=6q@evtqN81HAx);GY#F=bhK4;8r2&$( z{Wi`SvWRFQ->Ubn%Ms`e-X}fZw}WnNwE4Yi?UIqEShGgI#=F9Iy54Z^oI{0D002P%cmO1H(Eqc54uA{-KmY;o z|Gn`4Ci)lbAEN0|7?=G)Wbp!}?2tEsTa+tPegJzp$S$jN|FoE+GR9G%lBwN1tpEUm z#fC>2P?&m)mfgepR=LX2B`pN=v9tg_e6?1KGFm8J;DP{(0pLkCjWE&Ckz}g&lGOpD ze;^A@;k^WYLxeF}7?A6h%|ii05yO7DLt#W`W3r2PLj@rhQEPYt$YSeL+@gH&0Qlm9 zGT@Lo*S{X0;JN84v`r@9KoRIkM0k)OSW@`k2w}PV08E%5WHO+h=o>7+483_1A&e3T zf=4eV5gkQ?`bW)S1ZYvFVjK(Aaty$z5oFYE?2w*6J_!;E39r%Nz zZmLztJ`pqTSbl2gNSX2q0?s4m2hUs7A3SB*axFBxK}O4%_yG1aMsZm1?#2DXP<(tR znvyQN$KIhknG`j#aKOuGa?*@a+~(80B%t^nM@4_%n#?Oi{mo~}0KeI6Ki(NUnfD1X zw$hqQjiXsdp{k}vBa#1Z^4A4Kl0gR}1md7M86LY?`V{g*5sGV#f5Smg3I;K;!i0UY z?cCg4yMPwCapUEY9&>B7w#u(%XOmeh)eodr)VGxZ(Ka(_A+DeTpTM>4Za0F^!eW){ zYc`j55IEFZPk>)3QqAhG7c(Q9F)JQlJQn}?ay%`7(hAA?t`40!8}wNIb-;5Su**PHU z)o>mZw!t$n_6JrZ8QKYg4lLctXhnR@!Vx z{4g_BfrorK6lM`2mm)%Ru5|i24;o zovl9GCje;>@DnK##seT*s3yvruAMFsc;e+a>KIgI1BpF>*<{-RZ={g7+ZMh`qayb ziPi>3^Y?qfO9dH4zHxOewV}sHS=dlXeqSym(;`Ia^z;nbs$qK7qfdHS`kKkABVcf+ zb_#W}lZ-ey##|a4q59egByd9~iUu760-~X1r?!B&Oc{*$2|f4}+U4kpspY{(1(hWa z1((vcS*_BbR99|osP!W+m=QU zOEy#49Y22-?qGYbTBGA4jJIGd_OGhntzTKmtf8ot3hks#>@O}oZp5*N1$E5pKuf#& zHWR}1Tf<$w)oZOAq>yXx!WMx$)BI$NF*5P$BA`ZU?K^x&rhcA2Jq;_Eis96<^cg8s z($Cz65akg@MHPW%htBl?LC}B{W*3OyYP=5nyb~okE`l4p^eCn=iezb&sMp<3Sxn=N z{1t7kBLQB5(?N4l%_Cv;;vHIr1HJJwozYWc6;)s^)uMFSb+JDU9S}tccL33(y*Ya_ zW)iG$H*@;NN&th53#5$Y2?w0&_iJv&i)ou>$(NfGi1vB`ojG%u>5o!PI z!eH$?<>dy*4I8@elF1$*&E26KKQ^}SGLunpb3-J@p8D&-#Zz}JV+h%txd1GYFUG^U zB;!`6{Y^6;xhL3ZV0DO#Lc4_3X8a4YYP&xxH9xX0@JO#X2V@x7cJ^0Ov*wQrcpY?n z?6A=NW11a*$!AXDZRqV$4$|S&- zZDnTNq1lEbW*2iHBsy_6yWaR6`>W5o(d`!$IiLr$bV!06&cT#cp&VaScUtx5){kX5 z2C0A!M-RVG-|*5JAc+KGtRC?+Dm<&w%Z{r!<)nV8(beUuvPO4$(Y49&d$C6M%lY?w z>+5|kK=A4k^nP!02@LB zt1RpfT4s&5KqdhDD6?E46Gb+yi)@XC+*rD;urS+`gCJnm5fldzoVFh$bN7p#NfpS# zT>2#@He+P6YZE@`CQ?X6RRW@sF;=uNsbbth*#%O!FWo77wL1>V6Cx=9vLD5Yj6GhK zA{9U0jB;(;MM6&<30BJ21qCpRmSYVjhl7R`F1(ip z;?nOZ!y*yT2F#*TVhV=>Zmq-@dtBiFmoOm+qoJqy2;`}S!ap=RWh5*tugAxc&4h8g5IP61QK`xUJe3|w(r+v z@OsB9zo?^&YnZ2gjpO0I6dz=U*T)8G%`Pr_75l)QQve1DrQMxCKuFvWR<(NM0#%x1 z+VZAlQ;}K_xA$hctMFTgx7=DttY%C;G^i`ssT|XKAFsPIxAknm<>8K#wP;AmR+!QU%p#-M)udChetuqnov0*v(8>^FgsB*K7?bpD8Tx&Z@t$wE!<7Y&JJYDu z25v4Ucz{_>bXUk?45K=I=%Wf<&qFpuNVG{0C^lVmSCQ>TRx2#)s!bPr6|dJO(~F>( z!q&y|MlV!yE1fFVoNOxJXnhL>< zxn}@K{M2kbzV9b&-y=s@j6@wz)71Cl=Kj8f(OlD&}lyp^4* z)W*2$4;U<|xcL)ocUO;I!=p4*7KrgOM*8ROw-dFVB>lQtl%*;1U1{gRpz6sJ*C=P2Yiwa~1uggW%FlmrFwl5<~(qsuj~K*r4F?C z1gRXww0ia1ZMY^r-nZ^4C;-NRu`WppaHV*FXM%B4X`~dNHQJPDl;LZO-}FblrHPpB)(TwC;(}G z^b-2zZ#{)k7f6&9Ds@0Fq?OzT=)yK850yYi5N}t|XlQd%VvHYSSR7FOd1GE2 z1H}VASnE_{bC&&pnhGvjWz1fEw{zkT_WXV>m}4km;Be?iS)Eo87vo4vTkyB92ZbQU zO^X{7g-w*Qn_r$D+={~Pk6h)EZiDEMyklXX?8L;0H@JpCw=O~QfkrG;B0 z9h0#58~E~71#4ej9U1!dANEu&P~O)+R`|YA)LIOJ!SIj(Z3fC1rr#iVXoz#2TK2Bb z$F=V)a;S8Z>kyz--BftVSRO(B`9FFUeTqe%aAx;zir(f1d}dU(r^S_DCBH|-{RK`Z z-a72>Ka+A=e7R0{URwpAx4uaxc|*<^m5b{vf%eM=7xUBqw$UaPe^p0e1~wUt1l31a z9do;)K>>+z`nhAUrF}}+vN>|hs;H4V2c{(^yuqc!d(GM?m@=p;vGd=)V(Jbe2H*>~ zdO6oo=?E`y);PSKxsJTS(?{gv^k+shIRM#9j|I|=|LUUg3S0+&`7vy^Wj&_>02^b|V3U!FHn`H5DTRIDUM!7eLO zDN>ytq5~ODMPZ80$OPHO_%H8lxgM`#fDye5KXB9N2bQBhvn?DXzHx)H7=1+veTBj1 z3{y#kw!B<=7}z59#|t}dlG}y|wHWbBjOIl_zY1+h98Ieq*WGaO>vJM86iDEPCbk08 z-d~C-3@njMOWQ-Zh{Y%$%bWcJJl2=Wz$Qx$D@I;+eSGW&$A)hia&h*2+xxD2pIY-N zw(pCl%B|a}Ghh%aYCO!rJ`6IrjTL{NnnAh;1gxs;OBtyFPX>QI#p5GR-G@&3_A?hg zfM>CB#I55*c!MKdr9yk=QMTlb6c80@@i#T4T0@9Do+4W!loN53E-DT(nb)JTw%RS+ z<;7ipvcyfoIso=uYx>6*Pi`iYe)po{rlzJ-U3We0fZ;ZNKol;z3J9ptsp^1Skxg3XPD-SHoP1cV*zzTzPY+4AL*wGXtE914;P=aPFI#vW z)0qcE1420NzH(nqxI1O*y<(R~KGY|j2LW5Q$hUJ4P_(ntuCV5OmA`*&NiG~IwHZ?c z@;Z^E1)2cvnh88`w)6K-oBdZwdS>ht z`D1&^qzCut&DvXD?SG2$X-g{weZ!i?0M7f_^k8z|-x|d43L3}quB+CC!LhVaW ztBlS3Wpu>0jfkNQZOI48s4t>7pfbC85=;`1>y@oi^ z2@`ad>bC-X%c;-VV~F<_QtsFYW^(uu5xOf3NbQXZKSrp#@)BChFxc?;q5GEF=@BzX z*uUt8py>i}eyuPH`rl+Q>Ef~_*X579LyWaA*imOHA2sdSQiKQ()C89NL1wse!#=v> zK*oSciMIsHZwhqH!3Mc4KCw%Ojif?D7aL@ysYTL^&Imd#o(hlAvbh>(*>aj&r=pvc zOEJVIBV(ydZ2t-2z*h8D@Dc}AlkAUl(ytaGBu0ns5~Qc@L@93>0#+mjU+ zun*np#uYKzg3EVh^-lTwZi3hIdXiVkJy~GOXYo@n_BL!ouzn#koP2EN063x^kj{5X zeq6Yk2_>I?N-{5{r0xE-K`%}(Sla2oXE`z!e%iQ1JN#wxV^RMy3@fgq6!LRRhJ`L~ zk}n||18@_5l?fWAKXkX|*L6z!a*A1A4Wx-iTX5DRWJ!wT&R_uN>+??-AFoqQu)P~q zW82Sz1_QbiBIx5rp3PzQES6F;OxRwsZtHDQsANk3F-HA@;kbUTuyY1k_}M zq`5NpRKI`64Y%8HX=R}AydZfyD29=>&Kc`t zJCQ4QiBY#DqkP?k?hjZCVM_me-?jPCQz+tptjX+T@S9DiLORzJXUh?3@i+d$5N~{I z{E2{x(Hf$#uk%S>#2P8xn7{e3uQ*akk5Jg-1owTt!~L{5vfvb9(;;dyQ`a1)0a`;V zNjAWPs|SCpZvs5A+Wu!ZwBlpH8UYoN+QR{tSQl1 zPw4PT2HF`JKiwh7%Azlve=z+f#IehoQa%|)NE))@@`M_cqYTD^ zA9n???agx@)VG^i;G93CZ~-X42#R}*!3=7pM6{NpKD1c*-JBTMxXIMyj)@}`?5d<} z@Rp+z;}l;~NacXt@uYJkj0;E82Z{TSJXZlpAdq~F+>ry43|RTgq9@<(v*4z<6j*og zlM?W*_$O%k6+^~4s|j+MK7&Dt(crrEL!J?G^2w^chP_UQX!GwW5!1lc+pO|tKUyxbs1KbO7i}9Js?Qa7p z<&3%hRs~xqkk2>PlJ#X{GAcgNx6C)RIQaT4Xg`j;Ssv;Wo)c;>Ke2&{uj`Ydrb5Td zry2|^I)dksQ?S?MkyuIkvJiu|Qw=Ka`wfEnMB2R;cgWsOAbN%~kL)-B)1P-Egb<+N zSyr4~jeYW4QOxMPJc`woiJW0$?%|=zDtx9IWW^e z;}ot4(gr0>2(c;&3c>=*xV#@nNoB_L=4YV40xtKRqV^9~D!1lT!FFc+Y4J5V3%O^0 zKU+AW)u~l6=@1GM)Kp_)({GN4u6x_~AN~aCQ}hj^D}NHbfc)aU(d8hD zEr}3M@Ml(8R?BR};EL{22aSpc$Y8x8Rz@DS`>oOqu|4_^6beVTM2J)n`WN8+UxBFA zf#d$oey+_2caxZ;fvxGvDr;ndr^X!B9|>#qm&5yYWbWw$@S`V0CCCnNvp@GmZj2{@oK?uv9$tnFLe9_s$(Cv?Fa-f! zpY+vRy+I-pB1vQ}qg`GCg0~j2HrRMx^eTlh1I`{W`psH^X{jGueZv(X!bqu9U7id5 zfe*IZ#ace4uYaIkK^auxB>>BxT7w%*x}^?J zCMV62QY4IsWef|*)grl7qM3ITvC~_KdNngz>Qr;H17$4`z}H$QvPjjzEhjrJSp8ZJ zcD%tW7v~aW7bxRKiQ$M!YW1U`n0`xEvpkvhOvpd<=RB2opyu zR)UpNGuQNF`%mh0j2hW9q7lRtrDq<`CAoaj&_ymS%@9DSB5d!RO8T&Hs;Q7H#IFj< z+Ugdc&D@~+EV<<{;h%wg?-9{0Y4PfpZdp+pM9#QdC}CJ;R(}HgaCFY(C9gpQJ#wuF6bpaTz1r<+vd%`6}`+r#Jtl4uB zNd3^5;~B**(o)2rad>=_G3~8&{O6&;RxA$7?>6V1b-3q5QUv_hzgxd94efF|%sto6 zM?y#b=9HoSSHAcEH_iLsbHV>m|2uOmU;!%H_UA|<^^i9)8HpzDrLhp2>n*brHnuRc z@bfcsVo4AeGI}04+o}qM!JIi}QUYdQW|Qn;ladl3FOTa(Om*}2s2}@#WN6HE^>(lXe><>j&cu$z-kjLrFI>=s$TUinwXf9v8$lObY=9O*qE$crf zj|l4~B9Pa<&w{_Q?qaaTxQy<(UGTc7x>YHvDlEE=ed%dymSQ3lfx1MPi5~r2Lsa2< zbLYawSk~>9{vxgH>odH>O0<+mXMYBVU377L)<7PzGwHH%6D`tJIu#t|uIQT_rg_XQ z-rC~xjJNyKAr(k>lC8LZ=!J_@MH*B`q;2%#1UI`P+E26+KX2%Bk{8BjYp<^Z|Ac4= ztkGn(8Qtn(8yv!@{}BLxY$Z?nhJ#rw+TB>a_=oRPKau33 zFjvT;E=D5fJ{#1wF`1RBeG)MuMgn~?DeYw+xHf)J$;x*;$jrz4tRHBrfx#$j&uGOK zhwv2o0%pkI&2cLZ7ZTuuF!tuW<4<+H;Mt|!eCR)~%>S)~N{r;Zh!_fmIegV4WVunw z>MA;2uw$M`;91z2U52&9T49-S{@2<7n{GVIii8z<(c-`IUATIBp-pR3r z8JdO=w$n_MvsENGO<V(k_25_uDX7%6Se!(zPvEQu&7qwD_b) zD-J2qMCW#VW8H;mOECj7iTEK;)0u^m|L4HPC%w;ka{lnMRS2i;R^9-uO83uqV@tB%+zE5 z_@!`%+pm@2z)+ikMaKX-DRRV+h(DTUsExzFu07a{LHsT2N#)b}hi6q@EBQXuzV7zN z(miE}k5AhhzWcT}xXqW9+Ed*z^$EIJRO4RI+xT^h^E-Jr0lZeiO$fG+@F>{))&%cM z(Fie}y*bq#19};Q2M63!bCO1xe_a=SMD?OWviJ>D;&V1?@4+6Q_K!kA{XVvtDq%7$ zq|0AlwO<{{YDnV7gpLdts-*0L^E#!TprkFzgd{k0yGeN@srjCmU);X5LzbHU+5O}B z1qOQC1}zQNp~I;8sb%{K=ITXN`o-(Gf~_0nv*3ePiXpI;=cpk>t;%;?>A>!L-GV8{cvuevCiVsA1GyW# zc2sAiU{KQ9yfPO=aGbSyvycf|jizeW{N+NxcG(lGwD?GT(Eh=t7`${L#nL{JsGG@Jh+B_5`Z@clJO&VGHU!0 zA<)=>Cd~qsDHFRKa@j#fsIM0ZsB%Q%w$;GL+0D0#T;hM)&@T`fBv%qG1`qGj?RiXb z40Wui<)78mEG5#-jnjYia9~ZY=z79)sp@~$z?ZWZ83h)tY3>nXWKDwKt)j8Mz|*iT z^GOIqN_%?Zs`X^KnQA5tYU8hohymNApLe(l)1xPr^LrK*`IwNIh7d3vv)yU_y22;C zz#WT%3wa79;bEM&Tv%$<32i}-oI0w!9G{wYC}>AYBt^g3ncoySe+N`m$qe1yUzzOwL2Dc=EN7qqsCcK)#Ij zTul@cpvA`R?WaZYSq9Rv$;JdOK|h9L@mI^!N$gZ z%o7R- zR($bSWS5nrs1q#;WJg&Uu(ShLeDN&i2M3Z8dVaYcZB4{15fbC3FbsIp7SA6Mcz$V2 zECU~}eJGi^*PC27%?myGEM3qH{lav^dKG-*9vD>%PHEs%rxhIe>UsU;nB|%9k-4hi zS?o#2f5Y^!2|Q9MY-R=JOr4OZ8aO%)jk(2{D)oeS8;PtAB>6EZeV)bJ#8@2oEEdrc zUMG<8#hdX-ETSVExm}s&b%T^$JXqXYKFrpT?7sdG4ZjE!@z*U(>dVxVSjVAirU!xA zwqR}ULI5rR=#MzK!Z9bIW%B42=)JJ;I#~_{BEg7iT6jkc4krfFc?j&V1%QLU5TFI! zbccr(F&!EASi6@RZ~4>vZ6lv<5#D zY3SqPV}63q7(&XOBp+vW{s6i<{orRYj|Hh)n|Ya+EH*4Y7R;n&wxh)g@jwQIxadG+ zrmzKqJv`UB?%y4u>pj15`j3r=z8pK6h#W{NSpOUzAAy9|Q8S=`?K~Zj=<&OgK3@5v zl408}9N36aY+!!D+r2SXzX{8We1u27p-#Fidc4_T7`W*>*7Z+Uh*>P79p6zs`%KJ)>P5VLY?H4TO5O&$+cB zzMxB5R4o02CVjx0uhL7+ei}^ag9@_ozlkaI)qqqP#`3Wt3*bIHI_~bI<_KXNbhn-r z0?eN47SCF)`QXiW2GjziC2azud|}xk&91&fCU z;6+`37GzIK_`OiJ>VsIUdw$}L`(U_#+m*bBU%37&Str8)Gho8S z;52iq|2g#FyDUw>9jd!s!ijs38+1pt{KcN0fwvowQNz#5)3?SW2S;!#y=)p=sylt< zk#$#lYG8VJ2q8}c74Pn2>FHztCpv%k2U`GQc^Sd=uSU`^_dwB$Xbr~qzIVD!8>6Mj zTjZ#D<@M;dpr$1&NWj?5oAfKxuK7i9^krXdJZZ6k_3cqE@f-#4$6Hl4%RQd7ttNhd>nVL_0c$EnkjbLr?CY)Bj9#l(gWZ1Hq&co-}M<#lqfSK{FbDe!&=se3Y| zoux7`IIKvyl+_Cf9}5T#8%LHfbln+6CJ5nT=~{Gu`1S@d+cL!l)o)7I{gAo2`Y~Ny z(z;YnciU=a6;NGyN<2kuQvQ@aTj zN`5eEY}(n6Ty;L{P#*_$VQ!E>I;Y)Sn+mv8vtd!+_|ejVj~ZS8V`k0w5R@JmOnd}} z&%))c5@)uz8`~|-&CPWzQ4bZHkJ{WNksuNj2w7y}cPEY7YUm0uSf`=meA>iar{cRMsMs`@w^0h=Q9q&GHgnJF^ag6zaFX_8 zJ=|f#K@7;;Ytp8x`j8Y@HtW{0r-!@R=o58aSJq)|?lD2kIcueZeD4>_2e4P<%Hv_x`FGk$3lx)qv3&}G?kN;^O9OQ>%^MK*M+mPEy9^u}AZteFHhQ?RaJc4L= z*8Hd3az+qQdv-iuE2?vdx2NYls7YZmjgL?tZc<#UX8)S`E*%*M9^CG2Q|9Swab5HL zdqSB6Suls{Jkp=l`|7h`J$eN=C*Scz3TW?mCg+y51Aug9|A^#_R+)R{E#c>gSwG$I zq`9B*hT+C3C=4A=G=cW^UkwrBiKM6Yq+@i%Iy-|Ac zA0hw(6a+vAK*Rs1U}Xi>{&`m@aAyZ)cj@z1S&w$ppP$@YYpsrkPBt?|w=|{IhP`it zPk*t>`UjML2-g|Crm2=K)}n3p7|qpq zmPy_oE3nHH$rAf>qSd>^>il6%SD6&d-P{a>F{Pm@k0}O!V2wH=r-}YGc6it=50Du zdNq$I{1Ng*Sju+r#G7-pdNQMO8Fj{t4i`9b8&-;eLl0GvZO7D%7 zhw;^AryhW*2>t=C7@)x$N^1ZQxd;_TC^<=&$nImMn7=?*K~GW7@9rBiJB;n=&N9#g znS+riW`A0w)5(Df%OA}BcHs(Yi^^SG9~+=~L_~nQ0adeC2rukNr%d@FM%1*7l`1jA zR>>Gf6xeopD)1w19IW>e-!DWA&8weT_Q^23X%z74!_Qb->LNE%!;o}4_GD%7p zRv5Gh=w@VAVCYX4_+|<~5CRN>B#dxtc)g>&?yEGM3Mn)0K?XY5bbxeR@bl$Z{BulL z%P(2}=&-)x?#tfK4bs#x2)Zf`{P^5#W*e77;OMxNYZR0sdbLjy8mlo%?@La1@k*Pt z#wv2MHk%J_FfBx>L*lv0c6RIQ2LS;Nmo9~WOIriB;WHgyb`O+D7~Pwu_O8BcmHZHm@nF(9T3>vCt|z4^O%;b#W=sov*}&I-#R`B-@gn#EG} zu~Fy{fexRU*JRYN?;jZvRz~E<6H+mQr-DSoJnpkYa$QNgzP$|L+77LW~E zTixMOfd=>2k&PKWE$fnlPVHuc5p799T%NzHBytlqCzfmqmTXSw-oEXc<9dpA>AFv}I>^vxsjc;7YvKkxtYzl=Iv*Xo3)k@9=-3f_9g(9r z&%Wnm+8d2fP+D&(e^~CW|DG5D-v}>|H8L?Ai=NCmwj8RqUe4<&#fOdwL5|Kt_Wt&A zre!WS(_^n$@OHI}`e^?6F8|fly*EQ9s7mP#^Yg_+`^Q^<<|~(3Sxb5#R!X=eyicPG zkAv)p@4L2*s6(e?Of`Myv^wp_hqc1P%!%ECf#BQ~O;+f(n)b)Vwbo_my>!iY|NUau zeq>bB$6*@B-WH!b7b-~TP=I%`hr>n_=bY%nM+P+1b=L;I3dMhA$t$Yu^_uWw@)i-f7}EzPYLGF2+<_A@lfnv|w0Szt`N1yD&9G zlp{y!tpyJ$9O#Y_}22<4de*9nf&W)SC(HfFK*ST3D z9&~L~c7=+WW#xi+H>BX?FqwG3R<7mZmxY$U_ZjE)`WgvO=1)CT?++=zS_g-Te15EI zh*D-)E@$-OUsK2L+LPG~iZ)%n9LgY({?5n73Xt$ks&`vVcCC-IvWO*VJzWs%RR?1u z++Q`g7lrw)7NS{>V9KGI&@E$%FGpL#c1<9vc2 zMj6zjo*XL8?|s;=zxDmz&#id|2LAbd08?G*0C2?xx%mu)Zj^ z_C31`x@)qs8kM&@-AXFR>I>4CCxGtBOGCPTz3wHpSMkO9W|8Kt$Sk1o=8%2cdt%MW zC!F_eBanHQ_L0C@C1qKq)R4<^vLJwdw4KUZH>FGt{J>-3fw&n1*cy+2jIX2Jz42Qs z*G9r!u>(sEbrq*!jH-(lNf*z20|CRci%eqZvgm9jxstk0JKV?-i|HT=zD={$PIxPp z|8_lGJtG~l=jmV(eqWk<*ZQ`r`4bxfhstuhX%02BM1*M&W%q{W%4Bc7_wDlT%(-fR zz0~y0^vGA#J(`}SFyRN;>qzAsmw5%1Os*80bvmwwf}E|*uT+kc=!3R%kGh)F*RYi0nQL*Pt6M~bdS)<5z=-}5Nr%U1qfBSLiP+M{Cd#26D!`3!tZV! z=ut>UwNUd(U_$rPtjiYG+;84Ym*?R{&&sOAiEM1o`YgZ^JS6AAc$2y~N}`lxCA|ZX zj;u^fhndCeVJWbrIG5;s1#B}pTq3n&6~VsJil{I1m_K)IH?L<~QZZYkA|cGIwkAB%MgJ*+C`W-oBl+uWlp>Lt3nV@{ z7G_GenZi-@CB=$pio@0D;JX0dW>7Hvr{k4X^(tm3oGBenn*DC=s+zYvjn~Xx7Qb(0 z=thv*a=Ja|$6hSJMj}u`lb(?C)8=~z2lf8p0t*k3@whLp37Aek`dpX#QW!U3>WfY4 z5Ketwc6FSf;Mx6n~8M#Y%`10Ii;CBxpo zgO%#vdFap%x_wei!QadWhtG67{=y@MRgondY2%#B42n+LKOb5}p)tnMU>1Bf;myLFi0xwM6N+gGe%Kwb4OBj< zV9F)k%nk)Sn*BbtdBt8$Gt^MZ33S(wnf;YoH%A6<2Jp%f!JHFo7p zZ;Op?GLsL>!EVEXrkDq#R)^DiB2gjh-dL3*VxYk1lWt+g&0z4)p`mV`g8}nFSQ>O< zvW18?#;vm?>opyrK%d1PX@VLb-ff>SI@g1VXX41xo-8tf%S3f0zluyOV52-$XcOe? zaClXqfkD$x4aKG2`orCAZKRP3=Sj24amK(dpLL#G4GAeh8wap#_K!~&`g482r{}^9qV&EwvNJk z{arT4oJTfeA004I#9Sb^Fw2kIBj3p6v%789hCDTUy`PCx@RchI42VBoTAnQwt0hU) zZMk^pS9k4Mr%P4GtBqZ@%R){!@H?L_ytH&+;cq_>?)5#AJ*_I!Ow=i!zwmZnh~%Gl zX6e449a6K$AL668SXfB<1RD$vZHI=A!cP92QS5p>=+zZg_LV)b7?QU$Rq5N?`ORWv zulF@K8yjg40ZHWZc{o!4GA4N_tsk>R%hUFiG7F=gyW7G{xLogB${Z?m3;P0=5=Fv( zbFbrE;5|4$Elp4MO>y0ot(QqQ+V^jNAuj5Vgy`&McOtkdDmn3e*cRIE{*>6g(|6YW zn`$)E{U2}UYPVNKnrK4;uV5CXkr&h4oKRouE!(*HP`_$DLEnW%cV}39+_6Drs7pXf zKINqGlFXm0p^LaLK()9@o$Je4F}7a6d$8jh>#qo=&bk|Gy9zBbF0o}{LE_J134H;d zk55XJSY8J@Z>&!HIO4#fHdmjihxHif13V{_l>#4I*+Vhu!LsW9ZyPKHJ2iT_SC@_& zwQuJqNc}t|bb=6unQ7EGJ5+qvt+>{z20qu}-g29M_eu;`*}nMS1Gq0TFM0ybzam3W z-M;(ZJ69-r5--wCz8n88M`nPC7)p-7ZSh!dcwNDVS9lQW|w))wXaIC+}sz<(|j z?Yv)4#H~ut+%Z`=W=BkLt}j-TD%=%;t9Pc!zG{>mKuus}_K4KUR*xAnIyQ<7pEq)L zRqEB5@9*+YAj@2$O%K~uDH-oC@R1`krfWn;6}cikDex*BZ!I7KudDx)TAmyhKv zKJO|wS7~y@l4eH2z-R&|<_6HJsTF_PLKHV^lrQWvLK=U7%!|;L87eNdLBla>4wJ(@c&pnWtpM-WyEOIc@ELv}=&?ZJ;eksT?_%50bcBy%yNG)tzu(KIw2N zYX>GEiVce5Gc5Ui^OL3m;$C?vo2OmiZ;~_xsN-Sz|sQi*1!GktgPwEl^~Ib-xuDSQr?Y q92f+U8St(-G6PAG+k}7n8JHPr>MwFP#Av^8<`RALp&YXSDzV>xrckFweS!cp^wA3icSjhkY0HubyvL5d2^ZOtn z!hOrwNDkpnq^|0w9sqz4_wNJGCs*DJ0Jyf}U|@nZf!~KBF)l&~8;mtd$j8MMhXw%T zxjep-31_A$oV4Yx~yT1(rP2f5}C5$@?C@BO1BOwq` zpp=Y|h@`ly#yE!-6hWRJzV zLWPCBy}gCJ#e^{KcETbuGBUytQDIS0Fb)Cs@I_-0K47#5_umZ4C=aB&gDchng9iR) zL|9`yu`m!$>7OpRxc)las!&4iiFv=O_f`fVBgo*rP%GDl& z#dz3b{*531O#kDJD^$rHg}`Fm4KNtzzZ0eNHw#cyR0sm(Gj>4RV7xu}e=GWH0ZJKx zMZrM0tcigkGGI{=0}&~xI4*G#f)Hsa1o9^oj;jM31Qzk%fiX4?w!Z%j6b^@Kpgph% zG!mtu3`=n4Xgd(_f7B>poH6cjj14a4III72UqeYr#~owq;EbE_&{I7wMh_3IJQvI=ssSjAgI7*>i1tP+&|iP z_sdIWoHz-*L+s~RcIjydJNTyGPivUVnM*!AM!BNa|2A`uPEEe`R&>x~O|}cdMCnsf zA-8?{hd)+$YuX02UBk2g9bkJXGjC(YyM#pKP3?E~YCSqfYA8i zN1;SS%9!i43ojs<@akkkhOxfl#Spj8 zLPB`p_h<$SwO;IiC4d-!Iq-Z^<&{HfGz}u!Q&d*S=@6g}38FL^8H<`oiQ^gf9ZK9# zMTna0z8kq~;DFca1rf2QmF#-W&N~#dZYUk2>3qsH(zJ&D zC|^W9Po4Ltdle}+2TQJb(|x@s2hgY%eDs}0j-X-Y`No7}+$CtXAmiIRe4cjmm-(Q%ubTxck&n?Yi!;i; z#|cXW4~78gV0qKqF8MrJA<4l%HHLq=!oGfr zYKiYN*i})Cp>23?E8Fz#J=UXwQZlXw!&3_|ATlb0u*$!C`StA68?~|1n4)T>sOdDj zH}p!ANH=TJww%ltH47o;{vR%KA8{Bf2p=6;CrOo!|MUbYI<_$#!hn1}V52f@Qg+=$ z$IPb}{2t>)iEHbx=!tk$v>6DpU$N0tdg|?~C%{792H&+5-zRI;EK(J79Nx8#AI&=k zD?2`5d&Kfo6S7+(Bw60+Hpr0(41AOMt5W}xnn5nj+!X6n=Z%r@+cNug*E=n=FGI(uU|Bj?Im@p2=o|-#$@9LQTV4j$ z;va6fZEOY>xvtU6rne|_vf#P#hYqX*fo$z9#w+q#y^5JM4c#|-fx+em25Tf}HNWU_ zRlEW#-Q>koaA)3WXt*6SlzB~JKRMSN7?&+g^Tpim)>?B{P1QDc3p{T&0~%FICr2ht zQE=;H;whUCvkBSp2C7(?Qvt52gmwjaJk1MFXrQJYu6bl-xKRwWjTUMmhdrsKzsxR6 z1z^+XP!Xof%4piGhu3JdFX~W53LFGM1ajJVAGk+PCZX;huf-O@jXpeOdtJ6GWPp(C#rUWGj8b{I(9o(9l^xkMTvw5qUu&K zFu5a2-a}MkmKaqVUD7us$qPoibq&@E48T%rahjzJ9vE4cHO^7;OyDi$iBP_>BODQH(fp`R04KfvL_2xB^20QN#AU(8}*d#N#RXpk!bz2i**nI+T+!ikbHsWX$g6aZ+YhG zv(FEfKd0OJLRR-kytU^+{IuSiuoKTmGV)@@u^-9bfQV|2XXtGyJC>b+NzG1-3$qx! zn$MjSG;u|w!=6?oH2hdN^P>A)cHg0clWNKwwO6#KaWV#d6(Xc+^L+meH@ryJ>ITL@3iU%;i`ExO-4T z$WM`Z1Apy;EQwSlUhr3oz8Y8@9ujo{c^66_y!X;zSH?R7J3{kJtU@eS%$)h*Rt!-( z{<-H~eT64Cd^;?LjAPzKGJg9Ji-+4`Mh%JHCoVsx0m6qqdtann`}+F{2GTot`g}3E zC$7rT{Hp266-zgsIfW2#S0q3tM(5J&MkqVZ5s}EPko9<~@Obx0kQguidFl4BXK z4TF-nD>@*2jn712EHZ9v}LzISqjpjCJ86G}Kbe>>tZnrB7rIs~(FD4gO z*F$TTJNuaUK)G}f(KM<1nn1gu&Y1)?Z`uxh&Ji-6NK*yR*Ist^Zp<_>gdI1$nX0$# z*pOc_Xr{Utd}&}n*){~LkIqnijz2d^(7Csp7uO)`y1w-KB2IXzy(%uXtZAQnB*rvb zmV@Q&#+(!2Mq#%eDtPsQM^cRG10P$G&yzpyJ0|oKdW}!@IhTyz=J&gNl+NT_;hD@nNllO0^@|+A5zBm z6{fST!*X{S+(OUGJo;*uYi=HfOph5c4O4GUqHpeieSR-{GONK=h>Z6OmJPF8R%xq)IEE5g9w)7 z(*e}2-UwPlod=fNqz0RZQHd07AMaIsr$ehb*=vnwP`Yg)-muO6sP9*oSO{YDj~15X zGtts&?DJ6?8Mln}PAVVC?oOIoaxkZlE7crY9wVq(Ckyu~eg{W&M*Knb)m^Tt4X-W%?; z-sS#^;wWW~(oWQpNg~e21U2pTUva~O=tr+rw2$wfelKzS)?cI=zunN#sfHnGv)?C? zkO{?8d0~&tmnxY!F)}l)UoX|yhu6r^$PV)s3)ZvI%ZMFY+v1;jFCPs&PofJ;Cp-r; z4s6JOeTDj5v$mw<@x-!ryZGwL_-@l{vM%{u!JJEat`;m-T)t+p}es6-$iDhvD}!E15Jyw!7q@&j;C~VmA%6y{rn3MtDlj8O7PD1K0e#CyJ@xuexf5`yPDLB`0Tk z-y_tC=kZA9_WZT`pW^Qmwmt0eCMchk$hhB^j_1G6w^u<4zU`!5w11x0mf|45whr+o zvcA*Lp~9nG*Jm!9J%-U{@VK6(5(enaNZ(w7^^JelXDxfYn2VjWj%GEn^yJieJ(dh+ zu9vw{52Nvy-?l*8Y}L5h+kYx~_on#8&25V9`)_?ww~a*HX8|xqX;u-#+7r+%t8fbD zxevpA7fRR8U3lg$9n?g>l@R(!hF8Zh2IYTx8ZBYxH^qaLO9I-wH88m%N2_YJf*4fdyD_tUiFG#Y*Q_}x6p@3cUlgta3HYYC920#Ol(e}-3FMmXu zkab7?klid?U}++v(ca0tqD-$h@6d^ZhMsSK!U}S07G!k3OREhKTJC?DI?B5pMH&m*gu1 z6I`%NSZAH>3mbiJq!%tv$M-HqschXLsWermP}tkd*S_v!jxTUH56GrsRbK zjX?&!c*&0AJ1sPR0jK`n?hYp=&5s9UOfa%BlL8UF1%bx6HeXoB&FW)X#UA0>aF~=AC`4x-k&03CL&XDJi@=2)o zO*zYy0=CzTAfgPfGXNPnBK|UQ*ZF3ZZx*Fri{S_{y4ATaTIPFS;oM{{^G3H*EbI`~ zcAm)Q`ao}em}paXTzKU01==Q|-9BNNmbci{- zYhHnj(&t}ilAkmkNFN=PLmw~ktXku>1X$IPS$d6YGDP#7rBlfq-DUpDkU-ez7&CX*?$2eYhg>OY zw}A{yLqpiW;@6=ODc>@;@Q1mQSPE)|X(r;?8iGrpM4JbOkn7;|6uhl6FxcVG@BHiMZgg$ zDtYix>T+{s$6VuJ{Kw$;Zq@u1T{d5JK#&41lAx&ZCyI?!q}hICItgnny|fK%(ru)& z(Dg+;FL>+%LdZWsxh;3B+`b>Hd*ZH^E@qolu>=(;Vy1P>A8NGVEXtk9!+?bF`qb~e z*SBg&4Tys~U_Qom(>-C81wsx>JE~{>qS6RLJ@Ld{*a)*)c5iQ|ql&IC#Xd>vV#M3U z0=*0$xz%Q12+Du7-I#0Jd}kd^{X#~*<&t;&38R=QqRG$w3%#+{9m<;6fxWvaQ~9MS zy&VyCd_hf5i+l&K`^VBpel8GOdZ@@%$){Y>su^Occz&vI?!gd5C@L+hk#(jz|NN`_ zlZ5DQF>iLlhiu2KwJp<6omO}O2aA<++iP_BG{ zSVQSsl+cdTa6aU7#2^=|wbr-49f96TUH42qSe-ts(l}^A3C&>1!wbm`em;yX98H0$ zSyx?naFE67UOQKp@FnUhBc&W?27K#u(lN}acV>=G+Uszf8@ea#bwM;M&(3Z4_yyR& zv}j~0u4ZogiS5^`mryi829eniV@v^xI|6#kf_>q89=r5Zus8dB6HFVN6wV_XM;IA) zy;bJvT8X~sju53Mjg#Y&RIQH7s`AxC;$6o9#PrYX&2UW_5ZR?WO z>B0gB5?v#@lQMSmK06b?rFF}Tg}mPK5l7;F?u*QlH;l_Z9ni)Z`ZB4w+3AV` z?lzFp84|iZIep#2Uo=`XJ~zL({BHGrTMl?DBL4L)`KDO33^e*SzqujfybAA91i`dc zuwUP8uZ|4`MW%($9+m+E>W9PYT@UIuGs)l#*7+hlJ8YX*8J~GYq-$(Y3>tRz}c8tL7JlDhBq_|IA zXf(Dg2z3IvIkttrbgv$icQ8_zzXukU$N9{KxJGQQBb4ZBMz06zjGR-<&y~_nFwM@K zvOAdFXo~O(o{Q;Eezr$amM?d&2vd6M!x+&TSVyOtz-w>#taMa4Aa*AYRL*T6!-9}A zW&T=`rA~n$gy18#daDZK_Sx+XT_A-qMLx`x6b~-2C(BRb2ktos_%3O9P#g!%xq*}L zk^`MfTr)VuIau?Z16#{-NU#Srt~(xyQSvquY1Ga6+xoF-QT`L9wE!rOgqfZ&4YfZ$ z^);^@I>oGC7FKY94+3`{@jPq3rB+V9N8gfZ#u?B9pTSlpSNiGMg1=5 zq@eg(x^Q8zS7ETo$f1Pf=`W;eze|6|am0OVO4l0GgYT78VqB|wfWnx{VoMLj;<^St zjRqLD)Av2Tymmq0keFWuX!x4Qv)skQoORHTTy8;Xz;~*i;8b8z_B_;2ep}$9IiElz zwQV-E*tqqE7?J2=ce@}7wIav8T#b$=(9~i!n}jMs~a+)SR=P+GK@%~to!CW*O! zO%Qx-D{;bD4WsWd=5p$^A-Z9;YHZz8YOr%SSUjKNSTE2umGU!;v-*9Wxp8d!TUqLJ zV|-r1l}4+jh_3PIu1C=iMRQ`0%zt*OEtm1^v$)nd%btrVV*IIT>STKL_9QeZS&0qR z^cQtPzde7jIhsFx2E80`aX_0y5>jdWypV&oY1MEv zD-^`^byta4L;-7(K&%9Wyz@dTZJ|^d3|@`4loZ|iMl4ozu0wUZuR6&^yK^V$xFQRJ z@&tIz+@^yzr}TMbqgt*s3a9L1YeAxwF6^6O-&Vv=oZS3RH>rA9uBAnf4-+J+uLq4p zT#N9H8<3v&RNOGpw7`2t%PprcP9XiW2USF6$db(xE-K=9_5knFz9C{O-rlVC`T=89 zM%5QT?+kgriH!1oZMT(?u$+VLje9-pxejB`l)PlvOO6yCD&>CJY@u$oS6N7b3)}|n zd)6|Uzzbxx80|t3EhJWxOP)o|FZ7D6l`DuHv=VQ6e3N|V-tLdN+tPm#<&twcM$?aG%hiN7omIXb9ZLf1)`yU%43PT>GZc zV|QJW{BaY{s4Szr?s-Sm%N2MG?pb%(u(3XUMf=*J(}gI1bS%XDxkCia`o!w0avi>D z1iy9`9_sM<3h>A}#-S!F%)fz*m zc#*~b7~)?gUm9cWQc*oW*MH8TY}r`RiWfuWzGooBAl#KKswIjtRWh19wt^r| z#rG#FE?)D#IDe}4eXUycL+ZCr+zDuB!{y#}eT)$VF|dZzW=r+m z;AD{*4VPPseY4F6kIRIsE`{}Lrt;)94suE$Z4xv0kPm((q(VgF25NgOSCH2FD-}mP zo`B2&-Q&-yU&nK{IZ1fQUPSAiGgq(+BsHbG82K+2Iaah}(r&(cC+u&7gzvpxrc47T z&fUL_ZyO+*cm6{p^A>O9Fw#(3&&uxRtf>!A#CIS-3=NvNJ; zHpofWoEs!)cubSe`D5y=ynFoo%`KC$)bv%-9Jtr1Zp!#j&Potg?7x2F^DkcsU6GeR X7mav^8<`RALp&YXSDzV>xrckFweS!cp^wA3icSjhkY0HubyvL5d2^ZOtn z!hOrwNDkpnq^|0w9sqz4_wNJGCs*DJ0Jyf}U|@nZf!~KBF)l&~8;mtd$j8MMhXw%T zxjep-31_A$oV4Yx~yT1(rP2f5}C5$@?C@BO1BOwq` zpp=Y|h@`ly#yE!-6hWRJzV zLWPCBy}gCJ#e^{KcETbuGBUytQDIS0Fb)Cs@I_-0K47#5_umZ4C=aB&gDchng9iR) zL|9`yu`m!$>7OpRxc)las!&4iiFv=O_f`fVBgo*rP%GDl& z#dz3b{*531O#kDJD^$rHg}`Fm4KNtzzZ0eNHw#cyR0sm(Gj>4RV7xu}e=GWH0ZJKx zMZrM0tcigkGGI{=0}&~xI4*G#f)Hsa1o9^oj;jM31Qzk%fiX4?w!Z%j6b^@Kpgph% zG!mtu3`=n4Xgd(_f7B>poH6cjj14a4III72UqeYr#~owq;EbE_&{I7wMh_3IJQvI=ssSjAgI7*>i1tP+&|iP z_sdIWoHz-*L+s~RcIjydJNTyGPivUVnM*!AM!BNa|2A`uPEEe`R&>x~O|}cdMCnsf zA-8?{hd)+$YuX02UBk2g9bkJXGjC(YyM#pKP3?E~YCSqfYA8i zN1;SS%9!i43ojs<@akkkhOxfl#Spj8 zLPB`p_h<$SwO;IiC4d-!Iq-Z^<&{HfGz}u!Q&d*S=@6g}38FL^8H<`oiQ^gf9ZK9# zMTna0z8kq~;DFca1rf2QmF#-W&N~#dZYUk2>3qsH(zJ&D zC|^W9Po4Ltdle}+2TQJb(|x@s2hgY%eDs}0j-X-Y`No7}+$CtXAmiIRe4cjmm-(Q%ubTxck&n?Yi!;i; z#|cXW4~78gV0qKqF8MrJA<4l%HHLq=!oGfr zYKiYN*i})Cp>23?E8Fz#J=UXwQZlXw!&3_|ATlb0u*$!C`StA68?~|1n4)T>sOdDj zH}p!ANH=TJww%ltH47o;{vR%KA8{Bf2p=6;CrOo!|MUbYI<_$#!hn1}V52f@Qg+=$ z$IPb}{2t>)iEHbx=!tk$v>6DpU$N0tdg|?~C%{792H&+5-zRI;EK(J79Nx8#AI&=k zD?2`5d&Kfo6S7+(Bw60+Hpr0(41AOMt5W}xnn5nj+!X6n=Z%r@+cNug*E=n=FGI(uU|Bj?Im@p2=o|-#$@9LQTV4j$ z;va6fZEOY>xvtU6rne|_vf#P#hYqX*fo$z9#w+q#y^5JM4c#|-fx+em25Tf}HNWU_ zRlEW#-Q>koaA)3WXt*6SlzB~JKRMSN7?&+g^Tpim)>?B{P1QDc3p{T&0~%FICr2ht zQE=;H;whUCvkBSp2C7(?Qvt52gmwjaJk1MFXrQJYu6bl-xKRwWjTUMmhdrsKzsxR6 z1z^+XP!Xof%4piGhu3JdFX~W53LFGM1ajJVAGk+PCZX;huf-O@jXpeOdtJ6GWPp(C#rUWGj8b{I(9o(9l^xkMTvw5qUu&K zFu5a2-a}MkmKaqVUD7us$qPoibq&@E48T%rahjzJ9vE4cHO^7;OyDi$iBP_>BODQH(fp`R04KfvL_2xB^20QN#AU(8}*d#N#RXpk!bz2i**nI+T+!ikbHsWX$g6aZ+YhG zv(FEfKd0OJLRR-kytU^+{IuSiuoKTmGV)@@u^-9bfQV|2XXtGyJC>b+NzG1-3$qx! zn$MjSG;u|w!=6?oH2hdN^P>A)cHg0clWNKwwO6#KaWV#d6(Xc+^L+meH@ryJ>ITL@3iU%;i`ExO-4T z$WM`Z1Apy;EQwSlUhr3oz8Y8@9ujo{c^66_y!X;zSH?R7J3{kJtU@eS%$)h*Rt!-( z{<-H~eT64Cd^;?LjAPzKGJg9Ji-+4`Mh%JHCoVsx0m6qqdtann`}+F{2GTot`g}3E zC$7rT{Hp266-zgsIfW2#S0q3tM(5J&MkqVZ5s}EPko9<~@Obx0kQguidFl4BXK z4TF-nD>@*2jn712EHZ9v}LzISqjpjCJ86G}Kbe>>tZnrB7rIs~(FD4gO z*F$TTJNuaUK)G}f(KM<1nn1gu&Y1)?Z`uxh&Ji-6NK*yR*Ist^Zp<_>gdI1$nX0$# z*pOc_Xr{Utd}&}n*){~LkIqnijz2d^(7Csp7uO)`y1w-KB2IXzy(%uXtZAQnB*rvb zmV@Q&#+(!2Mq#%eDtPsQM^cRG10P$G&yzpyJ0|oKdW}!@IhTyz=J&gNl+NT_;hD@nNllO0^@|+A5zBm z6{fST!*X{S+(OUGJo;*uYi=HfOph5c4O4GUqHpeieSR-{GONK=h>Z6OmJPF8R%xq)IEE5g9w)7 z(*e}2-UwPlod=fNqz0RZQHd07AMaIsr$ehb*=vnwP`Yg)-muO6sP9*oSO{YDj~15X zGtts&?DJ6?8Mln}PAVVC?oOIoaxkZlE7crY9wVq(Ckyu~eg{W&M*Knb)m^Tt4X-W%?; z-sS#^;wWW~(oWQpNg~e21U2pTUva~O=tr+rw2$wfelKzS)?cI=zunN#sfHnGv)?C? zkO{?8d0~&tmnxY!F)}l)UoX|yhu6r^$PV)s3)ZvI%ZMFY+v1;jFCPs&PofJ;Cp-r; z4s6JOeTDj5v$mw<@x-!ryZGwL_-@l{vM%{u!JJEat`;m-T)t+p}es6-$iDhvD}!E15Jyw!7q@&j;C~VmA%6y{rn3MtDlj8O7PD1K0e#CyJ@xuexf5`yPDLB`0Tk z-y_tC=kZA9_WZT`pW^Qmwmt0eCMchk$hhB^j_1G6w^u<4zU`!5w11x0mf|45whr+o zvcA*Lp~9nG*Jm!9J%-U{@VK6(5(enaNZ(w7^^JelXDxfYn2VjWj%GEn^yJieJ(dh+ zu9vw{52Nvy-?l*8Y}L5h+kYx~_on#8&25V9`)_?ww~a*HX8|xqX;u-#+7r+%t8fbD zxevpA7fRR8U3lg$9n?g>l@R(!hF8Zh2IYTx8ZBYxH^qaLO9I-wH88m%N2_YJf*4fdyD_tUiFG#Y*Q_}x6p@3cUlgta3HYYC920#Ol(e}-3FMmXu zkab7?klid?U}++v(ca0tqD-$h@6d^ZhMsSK!U}S07G!k3OREhKTJC?DI?B5pMH&m*gu1 z6I`%NSZAH>3mbiJq!%tv$M-HqschXLsWermP}tkd*S_v!jxTUH56GrsRbK zjX?&!c*&0AJ1sPR0jK`n?hYp=&5s9UOfa%BlL8UF1%bx6HeXoB&FW)X#UA0>aF~=AC`4x-k&03CL&XDJi@=2)o zO*zYy0=CzTAfgPfGXNPnBK|UQ*ZF3ZZx*Fri{S_{y4ATaTIPFS;oM{{^G3H*EbI`~ zcAm)Q`ao}em}paXTzKU01==Q|-9BNNmbci{- zYhHnj(&t}ilAkmkNFN=PLmw~ktXku>1X$IPS$d6YGDP#7rBlfq-DUpDkU-ez7&CX*?$2eYhg>OY zw}A{yLqpiW;@6=ODc>@;@Q1mQSPE)|X(r;?8iGrpM4JbOkn7;|6uhl6FxcVG@BHiMZgg$ zDtYix>T+{s$6VuJ{Kw$;Zq@u1T{d5JK#&41lAx&ZCyI?!q}hICItgnny|fK%(ru)& z(Dg+;FL>+%LdZWsxh;3B+`b>Hd*ZH^E@qolu>=(;Vy1P>A8NGVEXtk9!+?bF`qb~e z*SBg&4Tys~U_Qom(>-C81wsx>JE~{>qS6RLJ@Ld{*a)*)c5iQ|ql&IC#Xd>vV#M3U z0=*0$xz%Q12+Du7-I#0Jd}kd^{X#~*<&t;&38R=QqRG$w3%#+{9m<;6fxWvaQ~9MS zy&VyCd_hf5i+l&K`^VBpel8GOdZ@@%$){Y>su^Occz&vI?!gd5C@L+hk#(jz|NN`_ zlZ5DQF>iLlhiu2KwJp<6omO}O2aA<++iP_BG{ zSVQSsl+cdTa6aU7#2^=|wbr-49f96TUH42qSe-ts(l}^A3C&>1!wbm`em;yX98H0$ zSyx?naFE67UOQKp@FnUhBc&W?27K#u(lN}acV>=G+Uszf8@ea#bwM;M&(3Z4_yyR& zv}j~0u4ZogiS5^`mryi829eniV@v^xI|6#kf_>q89=r5Zus8dB6HFVN6wV_XM;IA) zy;bJvT8X~sju53Mjg#Y&RIQH7s`AxC;$6o9#PrYX&2UW_5ZR?WO z>B0gB5?v#@lQMSmK06b?rFF}Tg}mPK5l7;F?u*QlH;l_Z9ni)Z`ZB4w+3AV` z?lzFp84|iZIep#2Uo=`XJ~zL({BHGrTMl?DBL4L)`KDO33^e*SzqujfybAA91i`dc zuwUP8uZ|4`MW%($9+m+E>W9PYT@UIuGs)l#*7+hlJ8YX*8J~GYq-$(Y3>tRz}c8tL7JlDhBq_|IA zXf(Dg2z3IvIkttrbgv$icQ8_zzXukU$N9{KxJGQQBb4ZBMz06zjGR-<&y~_nFwM@K zvOAdFXo~O(o{Q;Eezr$amM?d&2vd6M!x+&TSVyOtz-w>#taMa4Aa*AYRL*T6!-9}A zW&T=`rA~n$gy18#daDZK_Sx+XT_A-qMLx`x6b~-2C(BRb2ktos_%3O9P#g!%xq*}L zk^`MfTr)VuIau?Z16#{-NU#Srt~(xyQSvquY1Ga6+xoF-QT`L9wE!rOgqfZ&4YfZ$ z^);^@I>oGC7FKY94+3`{@jPq3rB+V9N8gfZ#u?B9pTSlpSNiGMg1=5 zq@eg(x^Q8zS7ETo$f1Pf=`W;eze|6|am0OVO4l0GgYT78VqB|wfWnx{VoMLj;<^St zjRqLD)Av2Tymmq0keFWuX!x4Qv)skQoORHTTy8;Xz;~*i;8b8z_B_;2ep}$9IiElz zwQV-E*tqqE7?J2=ce@}7wIav8T#b$=(9~i!n}jMs~a+)SR=P+GK@%~to!CW*O! zO%Qx-D{;bD4WsWd=5p$^A-Z9;YHZz8YOr%SSUjKNSTE2umGU!;v-*9Wxp8d!TUqLJ zV|-r1l}4+jh_3PIu1C=iMRQ`0%zt*OEtm1^v$)nd%btrVV*IIT>STKL_9QeZS&0qR z^cQtPzde7jIhsFx2E80`aX_0y5>jdWypV&oY1MEv zD-^`^byta4L;-7(K&%9Wyz@dTZJ|^d3|@`4loZ|iMl4ozu0wUZuR6&^yK^V$xFQRJ z@&tIz+@^yzr}TMbqgt*s3a9L1YeAxwF6^6O-&Vv=oZS3RH>rA9uBAnf4-+J+uLq4p zT#N9H8<3v&RNOGpw7`2t%PprcP9XiW2USF6$db(xE-K=9_5knFz9C{O-rlVC`T=89 zM%5QT?+kgriH!1oZMT(?u$+VLje9-pxejB`l)PlvOO6yCD&>CJY@u$oS6N7b3)}|n zd)6|Uzzbxx80|t3EhJWxOP)o|FZ7D6l`DuHv=VQ6e3N|V-tLdN+tPm#<&twcM$?aG%hiN7omIXb9ZLf1)`yU%43PT>GZc zV|QJW{BaY{s4Szr?s-Sm%N2MG?pb%(u(3XUMf=*J(}gI1bS%XDxkCia`o!w0avi>D z1iy9`9_sM<3h>A}#-S!F%)fz*m zc#*~b7~)?gUm9cWQc*oW*MH8TY}r`RiWfuWzGooBAl#KKswIjtRWh19wt^r| z#rG#FE?)D#IDe}4eXUycL+ZCr+zDuB!{y#}eT)$VF|dZzW=r+m z;AD{*4VPPseY4F6kIRIsE`{}Lrt;)94suE$Z4xv0kPm((q(VgF25NgOSCH2FD-}mP zo`B2&-Q&-yU&nK{IZ1fQUPSAiGgq(+BsHbG82K+2Iaah}(r&(cC+u&7gzvpxrc47T z&fUL_ZyO+*cm6{p^A>O9Fw#(3&&uxRtf>!A#CIS-3=NvNJ; zHpofWoEs!)cubSe`D5y=ynFoo%`KC$)bv%-9Jtr1Zp!#j&Potg?7x2F^DkcsU6GeR X7ma