From c41d548b72e14107e9e8924584bcc6bd299c5082 Mon Sep 17 00:00:00 2001 From: zhaoye Date: Thu, 12 Jul 2018 21:39:07 +0800 Subject: [PATCH] first commit --- .gitignore | 189 + LICENSE | 21 + MANIFEST.in | 2 + README.md | 91 + README_EN.md | 82 + debug.py | 10 + image/home_page.png | Bin 0 -> 227209 bytes lyrebird_ios/__init__.py | 0 .../config/comparison_table_model.json | 24 + lyrebird_ios/config/conf.json | 9 + lyrebird_ios/device_service.py | 54 + lyrebird_ios/helper/__init__.py | 0 lyrebird_ios/helper/config.py | 30 + lyrebird_ios/helper/file_system.py | 45 + lyrebird_ios/helper/utils.py | 15 + lyrebird_ios/ios_helper.py | 356 + lyrebird_ios/static/images/iPhone_default.png | Bin 0 -> 14591 bytes lyrebird_ios/static/vue-resource.js | 1574 +++ lyrebird_ios/static/vue-simple-spinner.js | 682 ++ lyrebird_ios/static/vue-simple-spinner.min.js | 6 + lyrebird_ios/static/vue.js | 10078 ++++++++++++++++ lyrebird_ios/templates/index.html | 315 + lyrebird_ios/ui.py | 285 + requirements.txt | 1 + setup.py | 33 + 25 files changed, 13902 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 MANIFEST.in create mode 100644 README.md create mode 100644 README_EN.md create mode 100644 debug.py create mode 100644 image/home_page.png create mode 100644 lyrebird_ios/__init__.py create mode 100644 lyrebird_ios/config/comparison_table_model.json create mode 100644 lyrebird_ios/config/conf.json create mode 100644 lyrebird_ios/device_service.py create mode 100644 lyrebird_ios/helper/__init__.py create mode 100644 lyrebird_ios/helper/config.py create mode 100644 lyrebird_ios/helper/file_system.py create mode 100644 lyrebird_ios/helper/utils.py create mode 100644 lyrebird_ios/ios_helper.py create mode 100644 lyrebird_ios/static/images/iPhone_default.png create mode 100644 lyrebird_ios/static/vue-resource.js create mode 100755 lyrebird_ios/static/vue-simple-spinner.js create mode 100755 lyrebird_ios/static/vue-simple-spinner.min.js create mode 100644 lyrebird_ios/static/vue.js create mode 100644 lyrebird_ios/templates/index.html create mode 100644 lyrebird_ios/ui.py create mode 100644 requirements.txt create mode 100644 setup.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fbc62e4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,189 @@ +# Created by .ignore support plugin (hsz.mobi) +### macOS template +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk +### Python template +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +.idea/ + +# User-specific stuff: +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/dictionaries + +# Sensitive or high-churn files: +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.xml +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml + +# Gradle: +.idea/**/gradle.xml +.idea/**/libraries + +# CMake +cmake-build-debug/ + +# Mongo Explorer plugin: +.idea/**/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# lyrebird debug +data/ + +# vscode +.vscode/ \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..34516e3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018-present, 美团点评 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..e0762e1 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,2 @@ +graft lyrebird_ios +recursive-exclude * *.pyc *.pyo *.swo *.swp *.map *.DS_Store \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..1187cef --- /dev/null +++ b/README.md @@ -0,0 +1,91 @@ +# Lyrebird iOS Plugin + +Lyrebird 是一个基于拦截以及模拟 HTTP/HTTPs 网络请求的面向移动应用的插件化测试平台。iOS Plugin 是其插件之一,您可以在插件中快速查看已连接设备的详细设备信息,截取屏幕快照,以及查看已连接设备的应用信息。 + +## 特性 +* 支持快速截取 iOS 设备屏幕快照 +* 在主页您可以快速查看已连接设备的详细信息 +* 在应用管理页面可以快速查看已连接设备的应用信息 + +## 环境要求 +- macOS +- [Python >= 3.6](https://www.python.org/downloads/release/python-360/) +- [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice) +- [ideviceinstaller](https://github.com/libimobiledevice/ideviceinstaller) +- [Command Line Tools for Xcode](https://developer.apple.com/download/more/) + +## 准备 +插件依赖于 libimobiledevice 第三方依赖 + +- 首先,安装源管理工具 [Homebrew](https://brew.sh/) + +- 现在,通过 Homebrew 开始安装 [libimobiledevice](https://github.com/libimobiledevice) + + ```bash + brew install --HEAD libimobiledevice + brew link --overwrite libimobiledevice + brew install --HEAD ideviceinstaller + brew link --overwrite ideviceinstaller + sudo chmod -R 777 /var/db/lockdown/ + ``` + +- 最终,测试第三方依赖是否正常工作 + + ```bash + ideviceinfo + idevicescreenshot + ``` + +## 安装 + +- 安装 Lyrebird plugin - iOS + +```bash +pip3 install lyrebird-ios +``` + + +## 启动 + +```bash +lyrebird +``` + +## 预览 + + + +## 开发者 + +1. clone本项目 + + ``` + git clone + ``` + +2. 进入项目目录 + + ``` + cd lyrebird-ios + ``` + +3. 创建虚拟环境 + + ``` + python3 -m venv venv + ``` + +4. 使用IDE打开工程(推荐Pycharm或vscode) + +## 常见问题 +#### libimobiledevice 无法使用,终端提示 - "Could not connect to lockdownd ...". +重新安装 libimobiledevice 和 ideviceinstaller, 然后确保在安装完成后,以下命令被执行 + +`sudo chmod -R 777 /var/db/lockdown/` + +> Tips: +> +> 参考解决方案自 [stackoverflow](http://stackoverflow.com/questions/39035415/ideviceinstaller-fails-with-could-not-connect-to-lockdownd-exiting) + +#### 截取屏幕快照功能无法正常工作,提示 Could not start screenshot service! +在连接设备之前您必须确保开发者选项可用。通过 [stackoverflow](https://stackoverflow.com/questions/30736932/xcode-error-could-not-find-developer-disk-image) 获取更多解决帮助。 diff --git a/README_EN.md b/README_EN.md new file mode 100644 index 0000000..aeb65d8 --- /dev/null +++ b/README_EN.md @@ -0,0 +1,82 @@ +# Lyrebird plugin iOS + +The easiest way to manage your iOS devices. + +## Feature +* Support for take screenshot. +* Device details are displayed on the Home page. +* App info is displayed on the Application Management page. +* Integration in overbridge. +* Support for adding screenshot attachments to Bugit. + +## Required +- macOS +- [Python >= 3.6](https://www.python.org/downloads/release/python-360/) +- [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice) +- [ideviceinstaller](https://github.com/libimobiledevice/ideviceinstaller) +- [Command Line Tools for Xocde](https://developer.apple.com/download/more/) + +## Get ready +This plugin currently depends on libimobiledevice to do certain things. Install it with Homebrew. + +- First, install [Homebrew](https://brew.sh/). + +- Now, you can install [libimobiledevice](https://github.com/libimobiledevice) like this + + ```bash + $ brew install --HEAD libimobiledevice + $ brew link --overwrite libimobiledevice + $ brew install --HEAD ideviceinstaller + $ brew link --overwrite ideviceinstaller + $ sudo chmod -R 777 /var/db/lockdown/ + ``` + +- Now, you can plugged in your iOS device and testing your libimobiledevice commandline tools. + + ```bash + $ ideviceinfo + $ idevicescreenshot + ``` + +## Get started +- Install Lyrebird plugin - iOS + +``` +$ pip3 install lyrebird-ios +``` + + +## Preview +![Home Pge](./image/home_page.png) + +## For developer +1. Clone repo + + ``` + $ git clone + ``` +2. Enter to lyrebird-ios + + ``` + $ cd lyrebird-ios + ``` +3. Make virtual environment + + ``` + $ python3 -m venv venv + ``` + +4. Open project + +## FAQs +#### Some error occurs like this - "Could not connect to lockdownd ...". +Re-install both libimobiledevice and ideviceinstaller, and then make sure below command executed + +`$ sudo chmod -R 777 /var/db/lockdown/` + +> Tips: +> +> Reference solution on [stackoverflow](http://stackoverflow.com/questions/39035415/ideviceinstaller-fails-with-could-not-connect-to-lockdownd-exiting) + +#### Could not use screenshot feature, Could not start screenshotr service! +You must have to mount the developer disk image on your device. See -> [How to enable dev on your device](https://www.jianshu.com/p/a1d075b3472c) diff --git a/debug.py b/debug.py new file mode 100644 index 0000000..d5a64d6 --- /dev/null +++ b/debug.py @@ -0,0 +1,10 @@ +import lyrebird +import pip +import threading + + +if __name__ == '__main__': + pip.main(['install', '.', '--upgrade']) + lyrebird.run() + threading.Event().wait() + diff --git a/image/home_page.png b/image/home_page.png new file mode 100644 index 0000000000000000000000000000000000000000..0001ff7ea43b7e0b6784a9568ed8a7ab51d54153 GIT binary patch literal 227209 zcmeFZcT|(v_CAh?1rc?K4k7|JKmmz@fV6<<2-1Rp6lo$LQUin*T8yBKN>S-035bH! zNH?^gjC2xu=tT&jmrz51{9b0px%0Vq?u`8NUF)~jWi1xrO>)kA_C9;>XFq$N_nD5i zD(8U{2Uu8GIB%)l&}CuaP+(!%6TE*fa7BLnwJ`99&GwqsH5QiKaE=YjJ;48`tkiV1 zSXg|7SXdqfv9PQImmZC?uy|ZzVVS(g!Xg*T!ouy6SaKT}h=tun%@__03flhN#S))* zoP}kVv7Nq=yOEZroE6MT+|n9$-$vZq$p!c{3yXrc9PrY~#@+Iix09nYT+UnZ%&(u2 z172@m2A?_g>qp!j6werG>72R_bF(=mC4NQx(izBsQ>RWTxLH4t)4g%?_pby0DV}-g z?(QN7277sViF-+k!`y7amt|#T!Ivb!5)v1IPh5l}oZT(GFFM1|{x-Uz}u7m>1KXg>91FTr9uuUfd3F1c59nTP$Hv@BDD;SpGCMi zM&0qee?goQ{#Mr}DkCe>QA5xqZzLu0^~vXvYR})Qy<$^lRbUbO(P*00_Z}_|-3|8) zD{mX*SE%9+?5D8E%X<&TK@FEZ37ad7GAPn#?`G0iFQH;;UjTj344hhQdT(O=A`Btm z{)lB4E8G4fro^w*m%*QiNibj()J7)k1F9&AI^Q>EZ=S^X^M>vQ#uSq?p^%b!0!Qd-}(IdJ7@V_;HVtX5%1X&y*Jl) zr~!RI-6EE^cBpJJ`+fzl{tGRqcc_8?ncKgq^?&B}pN9WGbNe?NR{sBqx!t>MHql90 z@yM(PZ@rttP7g3QyJ1n+1F1q5Ca3>X&wqF2-s}N){~<(2o**S~uJ1BpZ@^pwNh@c^ z!#Hzn597Q@SXM1|T=<-4NonPosO@kdYcT1#Ja!sq|4r2YW}g2ZC(fLjS0Et|1~b%jDsd4|Z#ar!1Pb4}<=F!oP_f&KF2sqNHgLxr)A%v!g<(!~+u0ar{G69>e!$$&lNXfw4u?Uf)f@!! z8hPo4>HrsNc%eaZy`GMiRonDYw)V#r~%3BdsdSwZdV@kdTn zh5M2H3B8Ay(!JfsaT%M9r9#%~X#KrLy@6?ejDEj4wH@qX*r6Ylu$# zxT2ZKoFw=ojmsSuLY7xoD?F1nWcV9EjG>07sA62Y5H0lv7&I+(ti@n7-jLoT4#AHCs5hGNE!Y#K=DAAH3L~c4RDrwU-ec(+G3-Sq-b8 zg4uZ9K!WbNM89y*L9PG=EdCgPOTX564qC%3qR|OQ#Lj^7f zIAq*JF8R*=;GJ_RI$!wGz`2!hG#|Pgyri`QP48mOt|TD7QfO)5l|kJRt2qL}Z_Nys z&FasrzB6MhE-l+kC~&CZR3dl}KlWr`d+`BxQPi5l2M0c&9sRNpU=-C?M$>Oj%d6}< z?ESo7@I5Jw9q8|r@{j>*nyPqIimkKRN6)pdQDiAs(t6ZP(Ofq^$GW1Uz4(4z_5j9j zZj`=Ix127zn_APOmfcD1ic!WYT}Q{ zF)y76@S5aAQRM}D&(3UFC~ac$+*@wc(c;Ew(H#v9FnMC;0QnQ(%sr_-G1906uU zFGel~+N|d0Q`&34&=lo6qZraT_D{CH#H>a|RE@N?_O$84wv^jC3Cy*_MNVj*awGnM zq9TQl2rULZ2z?k+aw)s$fsZhX8uw!d|4#0M1tl-`(q$36!NA237*%r*MK3Yw#W2i9 zwUw=E!yLpl$uD5;S)J3M6GhTDEDAaUxeM9)w6FfK;?$*r07oR9wiPj$ z{Y-wPqH>WhrQ_1h?t#p)u{=nxpOP7{Zh-l@!s`4|CcZ{xQpkjP6?xd*!Ys$T;M`H3aWSBQJiDj-&pae za&bC=adU^;BJ~1rn_A~fcSv7dVgORfht2ZtkP3`V1#a_7^7PFe#nJyM@2@w}|CIMv zM)^O>`x6-dBl-WI<^7dM{h!h3os&DW$ce zAdw`qN8fw4X)%@jSBn1c6|1o)Ku9XP+H`1V5V5U5wj5N!@Si@1v_07Yk>_+a18 z>LbAF*f73}WfM|={^G%r?j>I|2}C z+-cp{c2r0?&;dUmJMh-v+ z2-kSNbAP#r|Dtgg)WA`oO87ss`;+^8#PUD0`zs6ie{Od7Zo@oH{*M{BIH0D;xIv$N zbN}q1+J5{vl~bBpKBqZ%eqN#NP0y4Zip^{?kx1co{`8oaTZZ5{a~JPMQJ3{y(d0RC zQY=lIQ>r1kbrAU`Q9-u30s>#xT-@rGkZ?;52@8wN&CQj7NSlkBm2?G2JDHaIWSf?H zE=vvedR+RwF``8I6q(YK8A-zibc>w(4Wu3Wy2=Kc#blx?Dk}247rvU9Qyo}}0$|apc;RLY^})f9 ze%-J0++7#*J2o_B+u(Bw@@M|Rt$bW$y&&beT;JigK45raoku1hA|N99U8CY`J(ynu7Cj7T1ir6_;JzUg6ZINk;q#54lU3v0( znKNc3?&;;9&XZ^0RHAlYi2K(YvVLni#^pX*#^nz@x<3S5pKxGp$u!6o7d6Zl5jD(; zHIlwI5tJGuZq`#|Qp4sUyX@0HJBr2pSS#D)?YNv_W8(^Pm;UEu8D@TJPql7Y&c%D= zqkO#lc%vLCWCE`Hh0Gw0mthUvgAwpq8>T63K#{m>Ci>!6lG}4zTI~3oGU!6*(I4zn z1vVEB#}JwuksEbNVo-&Z4!c6jw1FSqe|je-A6UH{BRV{)e^2`np1`hAPOBew8;vro zU$CmFUjWtgIHf_c;_R{(6>fOEWZ4PM&QZTiRjUd-B$qb1YQwoUhv0Gk_UlfuG{pg9H3)5&9vBO?fVmHdEQU|c?@ zoNhy5T=Gm|0lq@0F@DOyH`J;6$qVj_;tmOuM8LklCdE#oy~T6q<-G>XW-AyNH=y_w zdC{b(=uQ%MnUDXhd(P&q-sSZHdd2bp*Lx)s2XfXC&)ICfwBo<=8-K!X&AVAIC=~fn zTHVGr#;tF<6_xZ$qNqVS0kc%50mo7=lV%ZVi``nW-cu>_IBK#PNx=maY}O)IbFr}9 zSHh9YqOiB@49{fc&lmO5HX5z#eQilsjwL{`BD;6*wt4vQgRzpCw)E8Q-J4CmX$^6b zw!P0^ojuE4|7GC?UEetOOvfokeV$E2{PM9G)7?$%QeJx#xxwarK^X30%MCGyE|dGE4W%U#=2Jr#$?E5^z-JsMvwFQsXt zd#9uuW{`77voMirz_SYvhO6~%u4Ta#mo6DsUhr`TeLnn zDSDG(E*5-<-;woppjI>8odMU`UC(|6cegMj`v^Xr{YJJ!z!>1Hnu+W;v&~A2{0V!L z@*8cr+=#24o^nXkl#f{|7Hyf)1N*J{>XN{oNvT|Ok^_Z$cSd%2EGSWrj_~&Wh)}7b z3-$TgyYZhmVUL^Wj$RcvJ?@O{dFk2uAbN@nJD(s86JPE3LLzG92aP>ve7q2hz{5r4 zxo5mlLYT%6_pVhR0ok4=&-hg=t}62WMxJx3h4yirkkZ(zSR%b zR2I3D7|xG)cM{_FvCM5vN0wGEN?BVN(W<2D^YHOpjKP^Yvo87D)P&90n1QU#$z<}= zI76Jd*<{&+rud=~xQK$SbEdp-U)jUk#vffQ8EEW$jN_If_nF4PC3Vfo2b$THY_*T9e}2Ldac!Ip<8Xd`x;uXc#K-kBF$(#Ga-Jk)U5v9gA>+yRLtm|G& zUn!Ig&xeU9I`Y{cx05`P3^KF_pI1 zJ6n!(?E09?cR0%^*NwI}EuH#h**8PYt1QPVTL|m?9kNRTWXD7k+DJr!Nng47MAZmp zAz>@u>HYE|cC(Qa+LZm7h+PXDBn;a+PHUsq8(s|vKD@HfMK7&a1Gz(d$27b1sd$>7 zC)d(*hymP~cXb85@(C?GOVDq% zdlPeWVB8gGKy49f3uN;VKSucI1?&D`Y1NHbCDL+&1uh&`D$7)$)#j|&9btz+54H;L zoxGzyj#qalwZ>-p5}#oH6fOQLyQ}Quj-4U2tvU|LT2cwj!^rfdL*O4=u$c3mx_Uy0(xivDD&5QiO@hdrmu6HD@NI zDZkBdXPl27`=!IdZ-(io6w~jvv0Ub^fm{mwr{uoz4yt>L*PpZ(gIrHhYI};FI;`@! zDb9Y}xC>vuv?4(`66bJAq#@HV=gOzIukw)03R-)F1sIBCnAniur3nWbx#N$teio`N zC{$Pr+t=W~I?&6OP!z3|AYIgP8Wda7>L-n&LTH3L{h-=ai2ksE2PR-O5Z zjC0MV1f^?ZS!A0|khl8$g=2ya9(8P)dD%qt=B(-5O#YkIU-80F6Gyv)12u2plKb*x z$BG?0-rSbRsfy>f^<5zq7DyiLr^|h!vZ2X2W+ni7ChH^22gUOT04M8A3Wc)ED{ahI zIrZXa32vimvVP+_vMxi)ypM?=ztRtnW-IA*jw1{s(+(LrX#YLpjbDJRdKl989h z1GUcBB>Ajc{<8(|Kk^aIs>tgd5I}-cd@EKJaj$?XaIVnFMZ>L0Rf|P)^Nl)Nh$7F= z0sRTm?s3YGi6FC#({J?kW|dsa5C=Dh^N@oTG+mJQ00D{AOQ!polwaPJx;#bJGH}x# zvK#)q$0=5}BTn_^%^rIqHKD$lU5e_FJ(_6akNyBpWqa$;QOg$R5G%VmanP*eK%~^8 zC{ibcyj+4bPxu|D{P><+Ysx!y#iP7JyBQCty6{TFiJvR{=(JHSb$q9AWg>5^E?zbY zEl<6ZX;7FT`fpEo4iq5Z zdNVNp?$xgY>80NNKe5&+zw5EOf89$eDl#9FLG)d%(BVf;XHrNNOJ7!87rDV`;BMw-^RCCKMw? zZd8NtcoEBq7>fY>v|Wb6>gs9?cf#e7e3D;jAJD=@2}Ul})CWVB0&TP;rPUt#+}C`W zrW|R=FeG$*4}W=2XpfKd{K=r8SjqnP@o+|UCbRtm{IMjGDX^uB*uqoUF!HF9hviRS zx4zrMF)P9?9um2z_2df`(`&YJWpR-tGn|rIzepR)T@HtoWcus-^Xm}+gd#Bzgf+Jp zfe4Q$W`v~A$1dN+%btGE_EthzENVz^EGW()Nw$OEL6900D`7Lpmd1sd%{m`9GXZ@7#`y}5b)SJrI|udG5`PE9E>4#P2QtA%8y+}`7M&SgGdb8(SY zs^O9SrPzz5{Qd>gJo!jD#%i~}YD zKn|7FTl{7bitOS66W z{A^4HaXKR?5%fTv1p;SnW0w}3FUVro6;_VA z2k+4|5=nlao;*=z*z3f*`umX-7u7vn-b4?18DUB~hp1srV&bCQ9OVSo!8=1ic-#~> zg?F~iv83t;=8S~-30<2E<&}vBlCVfVdC!8Wsm^SN-Ob&Y+)phJGyyak+^{fGlW?FJ zEM*lMLFwsmpbRi(MSH!b9SNc{*6O_~B(J5KYa{ z3+O<`r=$~y)TO>qSEt3H0h?142dIL9xKz{$ZgEo`e#F{vQ9S&y7P};2{xgTu2icB9 zkTx;#rJjlwg77qs_4Nl`k!!+ziL%>`GZKO|ri)u3vu{rGk8jWdWP(p0W#U&z_}0fHWK&!woo=fT2JEk?mLz z6D%-rM_L9op*i8u)3jE3JXvtzJI)IY6|s%o7?NexyH5H{EMA6Rb`Wq5)YLkEzO7KG z@=Abf*%Dy({=TcxX_$2%kWWC)NjdL(5{{Acx*`ffA0l^16%Aa!~A7Ta4%;f=_7eGwI*Y12TR{HMb&ej{#C2?s{wflx5U7MZ4v&%Hoq1SLvR zh0;tJ`4{1=E#1Ps5*Rg>l7XSfsQ@5&#-6!@&4*>k!+HwR9lJgx^C@W-5c1e>T0E@b zM3mfMZ92<+vxhg8-)G#+rlB+2rn}XKlJg+3<=_?do3bh-JyP^{RAEpuLd`(-{_54M zm0GSd`0mJ;a3u5D%B!(KZ(1FBrpRXMMn`#1=alCMOM^YB21;e^Y|+p|iDFo0pKXJl zmJL;3%e2h7581AkH-l&Z%g zmz-YkiscS#o3Uq+N6JfGDuZ61j!Sc|`u*6?y}fMC9$Lg@d8@#n7RUHGrjL zZ28234-435Dk9f}1M(b!oQl)f*3YHfPE^LY|NR_#(C#+?`1gQyXpB`6TRE~SW_LbGfV~@0{53~*p#tnsg|W-Wu#0lom6ub<$0U5G?ZKB0 z$m;#+w8T}ed)hB$QR96_Vis&5}yl|pnG=7dVdOs5UwH1l`O!qO|7avEex!feZ4$;xQH zn}nwZp+PPKc{Uo|75={R57ZKPL;;g8whB|ACu@6Ty&8g7pWAjsgFPQCulL^UsrM?t z@{NOi6NL3Q)`FE<18P?IpO0-S{B-~8&7AbjtU;^qsVKU@Q5bdw>JiLF4@hgd zoPz@1qA)Y2yAWQCpJ@pKJzfL1eztk&^1*M47aFCs-Y!g7d|GJCU5l?x`~b}mI|R^E zgMO2Bv^6V>i|J+llzK|u!-Y3R@n46lf_p3B*+oW5hJmURenl6}N(z8bm$Vo!<WQlvxT!q;u>r=Eqk$@My%D8yOI4 zYC4~mvh1!gg9Ar$@IKWnDl^P;b65~gZkA{X-yjDMxykFgp&PcR1*sKL&p+5Q;?ERw}{xeIip zF0tm5u(f+$`s1~}S=)pRBJwVT5vSxVDlSx3_Llu%sLb%2PeN}ola1-|-YFM`-zca< zPE!FQzDQ+cvLmy1Q?KrF)Cs*NSMRmus7h)pcp=o$@$7Fq*<5tnYEJV6T5F$@g}!`0 z^0NZZnUQCWKx&cr%Js%)Qn%7b4AIWfF^ltttymsFcGQtZZ)WQw21>nP`1TN6+CYxk zoVW&8i1Uh8XR=f#8|NDJ=L)B-t)STdz00_jkyT!i(zcn@6j5$qK2t z;KQ!z&d82D2a<{?-?{Q){}Vqszd3RI_`@1*yOjL$f(YhiwPWLApaAW6R81g*yEy15 zqKK7+mn3f0rqe1`kx6!o6?t#yVN+yDp}Uuaw`|`i8htapzkw@ef-g0%qwPDB;U@mL zm}sEf?Oxg`OWk!3thcp8pfxnTd`FrTt8y5sZJl$gG!xFURe2IzR>5s%5`I$ z-lkxK#GM}&Kdu3+ZVV@{bfi|(*{^!Cm#@83hz@x8@ICvFXuCkw<;8C&SWyY=qhs%Z zlt~2or1q-yNOkDU+L@710E-iAubvwoUtfB*uC#mk*3oX^k;o8@JXnzc;H+gm?B64v zf1y1~D2l(dMC6lis29>HzxQdmNW&u$p1;+-)p?+OaieqPbMZgbmr*jpI&k*7%Wr=+ z@!uS~>+7H-IKR=kPNKuG`{kgKH%Q>d;ncjv2xvgI-{fJX+biX3_jv>a9Clx0XSX3j z;v_pPvQAv7n|h}a6Ah%EF=%k8nz7QOXk-0}>Q`<{qn3vfMMS@o9@Y+1K2&Kjhx^FRuV_gWhjnG`o(mMJ%j2kE|6mNyDj~ObpDh6 zM&ZHDaZa@@o#b-QQ9#e0)jsbDQs-VL-&kl z;y47;LN(Jre7yhVc`E<_49xn<5O7d5KNw*B60;^v3AljN;P>uPzmX{8tSGi<05CS` zu}hI%)m2D{j2qR*8=@~dTqmXPN9U>)bufQ;Z}qBlR{glo*Op6ml9tqM;@o2WD>k~p zP(0?H*0J#>phPkfFXx=@-<@w)P9A5>}j;nWz zoy~XyAjmC0S@&_BTa;f4^pp&HCpP^0AAAceu_Bj%$^)5a^e`u96i`x&l5*%Q73>S^7}+ba!Vi^n&AFVg_? zN?y>ZIVTlT_BOpf@fvg6Z|By3{qmxB2#&e$3Q%oz3mTiI>k^l%+{J1_U ztke=_3FK7foiZZ{AzqVf!dMxPU}Z&Hi;aB(vtfrO_MmvUKDtk|9xQyz^S9*%pIfK! zPc|-=8RoMCJ9Me7^Q?ap_y%u}U36N!>c=^RvlqyF%bwnrnqirrzG-7O2n$OShd)FU zZm=J{X!`L(7EoB3-p(#36Q4h4=d~dyI75){NfI4sNspoq=lO40$q?s(_JteNkLRZ1 zxG&z-2kOb)VX6{Bx4uxPkqckHcq-^-?y?ZPQYV@Bv?dxwiWruDN=Q+%OQ@3Q1zH`3fy-iVcL z_Ji`4Qq$i*w*Y0n-2w9@zw?W~wwmyw3+P}E`A5fsq~J>z_-A5ZV4#!W z*a>&-TD*ap7KI9=`UNA23kwT%X;AkS%gHWk?W?m*-gX}mufOy+MTm9AcqwkUlxj8u zEUn&bwi(uEV4!DU>z_+z6G*>NmVfUn7R`V@y9y>-W95SIOTFu|F<>(h@XVkg z#s@&JjctSCs^+q$;ua-+WyqQ6jsu{LTg}3!sZ9wo#SPoxTwk-%m;DDD^)A^C^kS`d zxD^H!k;eX;1c#zoc}C7v`T=Z?#FZ=UdtU>nq&EzzyNLiSD8edn+BcntgL2_0H6hKc z&%WMPG8*xYM^y0qX60@e7}5GA@Nh+nm|ccyTDB(7zPSGuwf+>x{#Z-%f^f5G{bPwv zw#T|1bPfQA$-2)g<6VYTK<&3|s&u)g)Acy#+LPQ_o7m;%0C&I%5uQ$Lh8EclHnQ&l zj&R0U)r1vVzA1>BkvgK^TlB3durEiM&!RoI`pXOMhHb-o1h=rTkiWTYIn=$``aVP- z*5)|Lz3O|$HM=nvoI3H&rOgVtUx!e;DI8d)Y3~@Zbne271Yr}+KCz+?n~BIBEUIs8 z0V!ONpL9|wAZvPX^*(*2xWafvs^QhEmO33$J1+h78%L-ORpAT-Mb+2TjH+S_mJpmz zY;FeXQ6?7`fD)#SqobpQa(lNnW7i+J?}1KIm=u>YF+vD%ae(XUZrz(GXsh*pb+-CbIpk&&tSg2 z!13RVJDEU+L^oAYPN$h>o;!5#VB~P>f%_^qzPZy%#{+Ng!aq0s%1wQ)KW+n5IRKK( z3LRo6Ve4ydyYZS*TdO9Y8Yjn}f$M$buBW&jRTbO-jN1@4X2-1&e}KfUAd~VwHS}4^ zQ6EfG{!HmVDhTDg{q&C_$=0(#$zbB`R~mhI5ujXPQDFZC4x4*P1jXmmdaI=^Ks(P| z`ZTZ>cEz;&_gNuy&1~;j89vh4M^jJtLoXu+@E^e$8dGt z>Zk&cOeB!cM*)?o!l~|Pz|ZBF+U-{C26r35m4;#cKVkQc{fXTq$naXQ`j^Y2V;& zF7MfmFnNE!9^wC>GyYE-;kFBKPpN$DJRJ#Hep-1$nd&3!J)}$@72eW7xXukoXC6lj*>s~Yv4gz!v_-uf|}rQCI-+OsiYLAz+sz69u};0+Md zZpeDiS6U|&&Y1WQ`2J0X_4`{WyhzgLMN`Fmuknv^RnpuE2ZC*hiQ?djH5Gcb3`Rs) z`y}kTtkg>&rp#z_vN&~pu$0({sHp(>UVCEPB3+YRTX@`Wx+}M?67G*Hvi$>%YN0}4 zTs{DPFqOXv1pE-2$>V}^g}oY3<~Ncq+)&CN z@V3uuaPu7wf7=m=T{FHQhE_;a&tZD-cWkM{+fBfqZeb>_YaS6!#w=(`Q0m0!`@;F; z4KUu*xwNkX+~%C8sjkzw!^750Hh0}RfG5x1?sPzJS1^xZ9qyfHblh_<+7678w!{J_ zvI}&k%IW0O@NZnvK!GwJ&N^;Eot5;f^Zlw`i4Sw26+AB^t^shNOuH87A^@5fpw6YP zs$B8nHghk)qqlh|<%7&Ex4H7wsAHmr1*K$2-&%grw=w_5^^ReHvj~0iX<`o;16&F`dRowJ-^k80oFF5K;lq+9u9}&R3ayQl&G%j5|TmKm}Dr~PDjWN zQ-S{30vV*oULYyGtUERxp}d?=g6K&*^_b3<&TR=Pl>2=}oM`$(Fn?q5m3}|Oo==yz z2)#c&2M1plxd?7T)=e|xj5YgmyV1(P90T2Xg&0$ z4h+aSM~`#4-Rb)E>rNh2g%w3Tr_5Q{H|OOox<_I*{nKbrJm?<8V^UuhKBmd*XkPHJ zWi<4j$Dq&dF2K%uMMyj#n~=y{-PH6Ev|P~%UIB+{Q&O=NE?Mt-lUJxMbw$zxyYl3F z;1=8nF!e*&zPPIeCt5Gqyy+Rz0eJ=h6g*|<)9&qfZi;uqZ^kF=agG)@yUR6Qmv|2< zqDal1WnXTuCmKULs!kjSJXgm-harSe*md4-&RzcWOCXh!0We7OBG3`g>#AKXBlSz7 zzeH!<@$**6a?wU4eYt>(pe+s1Z4z51{mGL|j$j8jEFP?L3m~P<>2B#uk>G46t))uBw{^^N)oR@ZGOd}lhXC2iS8DC2x0~eA z7-3K3;aFZ?jsl9OMOJS^q9i=Ryz(%3J}ap?GkXy=+v%vwUCGz?S@aXk*1jiv{CW>iH2(K1V^^`NB1D&tv)S&~723GL_ zjzl7PczEnG<;ni`34aia&PQuwDfdC@{QUgRnF_XI5iaoRs~!pwHe(@AbSbjXiucgU z+Sm)dY1%Wk7Mp!>l4%WqIg0bVpp;5rGEkH0*v0QS=yQp@t%M#P^rw;ZUFaY?n)eFO zwd|I}-mOr~h;y6m>t0EigdkpR+RqD}#wkIrY(u?e$NBBnu2>^w^dnk0WmAZH8-iJ@0 z?roSA8uu$>KNlWS2COH9JHm>C-fLXg?djbHdbnE} z_tY^DGenex0^Q31TT=}VD-OR6)sXtRt=nFu5wHnlQ%XFKYjuJn3TR!=CeFmCqj~uTM2o| z1uV=l33<;gCZt=AfTVGX{uhw(C;k;ByPf8#YL99P+~gEWlNhdj!r^2?<+kunPXEPk zUCN?^C#TLwr4cw&V1Hd6Nb`Ql2k1ZPvWWVi!v1x9nf4tjkQGI8G_AI$S6En>d;tCB+XDd=gHKLc!=ciLWz zjANG$kT1*f&?YuCAGgGbo0oM3y(e8kO@d}p25sLkd%oo-Wl^ll6UTT)+LdYTL-6&O z%lg&oJd*D|!#k&rUl>U};W>Nqy4lA|reV^Sllm|D9jhPmXxL2lrS%U9{1XiY93wo* zWppJt>`QXvOJ&Z+bJh_V4f}wGsKl#~1)~+mhCV!Wvq%3zV@lU{L*M%PdJhHY$?p+) znr>}$UEWxzG2#&s=tSG@DHN)bE6gr{{dtRsdt|}sG>YfJsLR@8Y;iGS#4cs1M}S%Yve7~e_(77tWy`V(Q92ArO!7>;zS_FxE%X}U zjghdFTLOZAlP|icvOO3BS9ra3I5D#qwMZoattvB4qL;|0pr4OP>9=*)0K8T)(vc{T z2J)WrY)@y8f9w8b%fNmmuqV- z(YbSw=${1|7ee)!Mx@!bCsdcD!`A<6(WTEAwa2Rnk-hpx`7uaJ2gug&G@1rDDq{C$ zM6hn4T=&c6bvdMCh9#N}1DZ~sY4@kaIW|Np>GCNBlx6#M{fmoF3f?n$JcD0F#hPa- zBs8?}biUl)dWOfrC?_7tY~%b?PI+6gJEBpY{`S7;hQ2E+ts0D89gmfS^?o$tE>@m( zbr6X}j3);RQT4;MPOVR*Va1v27R)KyLO8%Ut#nzzsgFvh)o6?j6T-5IQx`oLxfa|& z+Uz3%O`Kky#$alI7j3W%id=7t*td=+`RA11wss4QBD0@V^eNZ~B`nAQPhI>9u9#Ki z-MiS}DRr8_pH;DNqXbG>1Ned!-(WPNU*0wTT_5iL)K2#(CakiNdh zJ%EE`7Z}zi)tWr=HYcMJs=4lETcu9xrDc)H*8_!nFW*(^;K_f-+1AIs7G*(?BJXir zyb`s^SdAH63mrVa@6gHfg!N3q-GCW#K(@mAcuM{O8c1mYWCQpSN!_0iLh@T)Tf{*- zCc$c|vlkb%r3*j%Fe5)rcL~g-fl1afh0A-{Jm&`b2Q+E5XTuAyJ^8j!#KuBR!{N>5 z!{sQ02S{?06TjSIJ+j>#k!M+r$Dd-syuarsX|B z=meIgp}Gi)wWP&Ee(w16r;c*r61x(BQhfU@HQ{3i7S{%*6YjwuD=gwNYrm?wt)jB*H zf_~8=BsAjzv&XqJI2e4zssJU?#fF6k-tDQ=XEayLlgf@5mAKpSUeO++Ul&-{VMxwT z5w@oC%@?Gj(vZ_N0a?H)AVo9E7V5BH(v0Dj1;sNBs7@3;0|>Q#XFUj#mle5DgX{}f zuL1t{!V|dB$FQ)J3HkMwU!@f$Zk+elW8;+o{Z*W!fysXj!YC%TTxQpY%=fg9ndBp% zU%&hSyQZ&y)cS{gM}A;C=4zo_z2^(3hx<|Vm)kWqi6om1m%TOqbR8EyzV_QUbas8( z)6MqEKUi6XOGV}N?9zG%vt4nuqjb|pD~;i?iW@5TooWZdMu68uLIBf{bJu=Nxn0qZ z6WrfQ$|v2B;2K<7S?Qj9ybhn>f;dpFcAMQu@yBV*m)-mHSa)9RGU|q0d3kveYy3vp z!$Oq~flyZa@}uNEaBilQ2A>}&%F| z)$$cEdH$`n8l|U<*;26D(e*dnI^co|Y4~*;+@cZzkC8Kn;4-WNijldk`UyQ98%_+jI zm^kAFA4XaG8|zwWoGPz6B!6(hqsqw5V{o{L+rlr`ELfG#Bho)vIUt^)CDX4zmQfao zbu-DczV*_Z!9()C$L*K*2NdOiSzolE7eeO-t&hZ{Aj z%+3ya_DD+6WclKN?;I!D0_or7zuI4QZ6BX?%^hl`nOFZY&jEz()M|Sgq=QI39VmV2 ziX3;p7E{~+Q#{}U2y=_!^aW|ATEp+_*j(8Ee*8rpf!+k02D6V3cCO=-J8C>~rl_Iy z^--c##|%w>Fu<8RdHB<-NoE93sg<9&&8#&&AcikuE#OU3p8h{~1GnKsEnGKbmOPqe zmxIV13g+`PGOF;yH)&+LOf~R)^#}Y#Z-7VQ&1L&Cpd-D~t!25?d*MDKFSz=4i$YGx zq=@{3bqwcn#91tik}~2BoOtVv zN&4lQ?8Mb{SjwA`a}Ru;;fXER4=c8>Z_;821%riULwmr-Tkq6N)&muYMKzMZT@Q;@ zZ#1ssHR%@VLdnxB!pHg<%X>~xGHef$VV+5h|r zaS%8VO>}E^9k2>l{M?3Fxsu?^Z@6kl(xb1@6)=nSBe_q0+v& zVp#W&4Mqai6YmcD`1(kHQ392T1t`<+jZbKaUed_QIvi={IPy&GWOCI0!ZXR{T$jcJ zq0jsjQW@&aDaX*usCY=^9fi;|!wxdz!@uT}e5SnRm}1Mvj$3-oqD4~ixv5)+^$(>XHT0ev-)OXjSlzei78GLCK?CkTE<qK~SlVzX%+JcZyTROmER8Xpl9PU)2q(%4 zwf4dYo9dtPZ@jW#^pHQB4A6cA?XxG`EjTe(16jFT8r?VOe=d3x$6N@dRx>};J5wH^|a%Kt~nO^jqncc7uXou7yPpZ34nS@-s?OO+?RDQ*o{$P zt&ObMfSh`$(u=a~a8Susz*SwJO1PqPOo2%!A&ZQ}V~I6B8zTY&3Qv0lT@13)fXyY; zZZIonj-Ug`Zg4&w>Mt_=aU=|n9}eJ$!Z(YNjA9!21|rz2Y=qC#znr-_R}8-M(X4mQ zk1Bs{^%5G4;1N}tTLeZQnBBu=h;^;zS@04(>>c3*^nAj4uX3TNKRq5mGFOo@mhR5v zt>TL1?D>J!3K@k}JSp3ul|H{6-GzQ!-OJv(ENQ-K)?ee%nDN-wzeQz+3-9ZC8<5Aw zm`m#|VSINHM40^zb3uUF64Ws}--ZPqw91qVki%4DloT`PgOv{AyuXM}2h2%3)%ebJ zl6Wq^KC%Kd3uIVfSEgdh@1cXuBIX^~tS0i{Da7X*nzi-43Y2$IXvONWw5 zEwwC-fUtDevc!Aydmc~yj^~``{ck_Jd)Ittu9>-JzH@&+ZAIKmi0@ucwhkMdyR1Ay z`W~hU61R6f$EskxYN8JU8%9hxFgJZcWK`^ti|R^L(s2a5@Lq~WIFjQ3@^LUnn9w!{1QR()MKv(3!BHkvd_`?x24h++;sg^6H35CD5Q`uyf`PjFdWS1J5^v|0 zX0924T|bbex1436rX zvEn3cwt^<%dI0X4)?2#uSu@TO1st_jMZk4AbZhqpRo4Bq&bR|G-422#V4I&&4Lh&z zpRbyp*AXPTOTU)!1W010QY3O8XBo%IBG1n@ z&xJPp!74>C-;};u5_Jh)Dwod>-lq9itu{fik;hB#29w@vyT$gC)9)?3n2Lv-pPrL}Ds05ctCIt!MEz`NpO^vn+14n0P zJg;-yZzqOn!V)vxi|tJ2@)Glnd5Tv9aW3Qk&|Yo<69buFe)T?}o##b7q3x+X%B{{5 zF8YPG9~KqB1fpGQzshP)*)fP`Lwu=5M!_9?D_4&OA#QuUeW*+GI8)u9^w)Fq7!oXX z8~ZE{RKy+_<1g&)qZuVhF#L%SXr)WR3O$*m*0R0>CgO-(l<%^(dsLixzYrFmL%+O@ z2@ZrRE-rv-&?=YhqNNT+Ne&7%po7ZV%yFr~&kc}T?B8q`bi*+lwP;9Y6EVeNJIJn2 zKF_;;lRY>1<;AFsf%hd#Yy)uJmx-erpyuPmaJ12u#IzB(DBOOtZk3DV*5Ypb=wlSL zEw@WP2;C{M$b0bS=@UAMa4E*U-JK^5Hv_g_(dy|ydlt8cL30mbOq>ti2Uid;X?Cc~ zWPu2z_n#Z4OPk!3K6ydHy((fY=twYpj|?VMOlB7=b-YxrkIp(_6l=mProGaAotV$Z zy>bWym@JB;Yx1Ztxk>{v1NI(UMzeMbr?{t}Z8+Z+pq|@1P0a#?iS8Rp?>KH36_bS5 z>bMyfCmJ=>+XcEe?NGlTKq`7}2G(4}a0P)b!rf z0LPG5T%1sov9PcE)piMyHrD3xF~(yt#cCWbNb{)zx0JXr!(-fLfu|(kbhXtTWo*Sh zxQZ^4o8}S&#Sr5`5kS+qJ<_82JSxmoRBv(sVRUNrR&gvqYE|O(lhfggPTp!cbklfs zfSDW$3*gWO->_r-`W?57*VdpGdxFpVjD%$2sf->Yr%$qM&)+1-wby}GsfH;q2ybfo zDbzmIgHP4L7!!swf1n_4d%Bl%ogm-+rq_ULcw3)=v!UtH6OA)5w40-HO|ee){*}wz zb(U?$hw8@hTwc@fe5*T#l(AxAjZ1aINv>|jrrryQ9#TplN|GSn3|_h$7NQxFOoqQ| zAdooxx1w801y;6A_GIAkCo|x{U`l(FjRoTVEJshgM2bZgpggOuDjSwsg~9!KL_G{$ z11iv!&&5O&dk@|P++t3f*tdGjNT&yEVqok+^KqA1weUIPTYcU>F& zXa~(WwqNwYiZvXwH^~1M0)KXx)ydmF3~g@aE{b92E{-tIRFh2Wd5iU-t#Xb07D zeak^kyZMSixYoiAC$ERBw(P0)^t{DgSICW?qT>#Xdy0@xcC&W%WTn!f3RKQ=(*n;- zp~-~}NA27~v(J$~&&k7;640m~ITu(5wVknfyV1L~Q^9WhJyz~UJ z0D-8yL?zSxLXiG-7@=wk#pU!2He!x?5v_e-uTCO+FqW{t92D8MRy#U2!6<|D&d*8= zg350*7Q^nq_Mmpk!1(s_+NpV{6g{%Ot}X}-<)*CpWdv&-Lwto@m>{H4(XY_1YG5DD z%aC!VELtn=48beu&nv4fC*5f+(#tc*>NrNdnfyHB+-eib?UJu( zz46?2W6B^$lw6!Ww~r)4y${)GaqX|P<{}CGk1l2yJ2sJ5z+g3R-rV#WMzB79M3T*|0cU z$`=8t&wl;I!rBjEmdnSm8BU@{-CUYa7Y8FJAlIoh$gB2Eb7Cw_%2#D~P|o+9bnXms z0)o$~@?6M-yHug#8pl8duC17~0vn||qiMA8VN!B&9ovSSORq(Y)r`C^QmXDuTL4i; z3JZquO?I_RGeOK-_HAl9_H!-XBg=H$q?T0}yl-Q#aX0kq-qcMyJAMMUW?Y($Xln&x z-(r}p$^KXXFrWZp1cw$QUES9eRSR{ZlR9*wIt{*+1cn20K|B;EFm z%VKz&HS;$~OwdgvQ-`hwbj}N?d={%Ia<_o~!q%OAy6tU%4{9`UT-a|l+j;T0A9CF5s{TlWx>^RFM?B=GSb*pzWQU8P~3b=GO~odF+?kux(4 zk0kL@Ca%=pr){>12)VWd1sfX`C#Jx=TulzftTGyGvDwc12MyV1UPuQ2w5h3&jdq7G zw&-zkYdB1=Ui5ND3LOE3%E11qk`V~;=X#3_u77OD_0DN1C&!4?1tum%;k zYi9*}73f4TG-=QtqI82SG3=1JRRpM;`%pub@YhQu-@x6mq9TZ97#ZS!jcelL-_^Xv zXi6@ia+2c_?pLW(PugP^%c=gkg>bY(LC+BHG6R3?(-yLOJ0UwXbP-VP4{(L z7RwUC7scL=M*HpPxZZ=uA^}F4&y}otHlljj; z_mYGyOd^mS-O5M@{L3%BH>R013i~FEzO6cJ7)~kM`vOrPUOL|VZHd+HD{Lg9ZKA_};o2Y`dGxcuY759RdzpAN3YtR+;fU8}3Ur^EhF~3!Sqo z%RXh-Zr?1-j+f3)ynt>2JDHY03(pgMW@y}QaFbXWYMo=%_=v5p8Pu(~_Q@@$A5!*69$a}`0U6tSE{G|J zl^(KDN%6%kZaTJ2tGosQ%j={&bA4o(T=lfpq~1T?w7rWp1H z(J#>)ZM70juvJInBIv1Uorb^_b!?^8I-R?9w1!jlomwZ9cUSjk%ix+vp3PWeZ29(p z0xk7Tk*}9XXf}a#=78}V5dRJsGdH+*Sftk%Po-$)24(0eYI8a_Z8V0__*i=ZgaD;m z)B(Vekw`SJ8gCYoNMJGilL)_ddj`D&D?->=(XQEtLFA={d~41tiU|Slk@#?1$WF(_-37rbZF8;gJ2c zDznpUGaf<>tqB3OWV5`)mq2`@p^bjo*2Q*wje}U)PH-$wa@~fh=APXfz?TOTu#`0H zD2sanNrLpm?um-Y&KnH`Kf%{KTt?P7lF^L-;rXC-<=Q3mJJ*=83(8}>R(ilF3^zme z6>gO9jGt@G;k0iUH4%f!x<-EVr^`*-IUV@|KmfL+z1;$ex`Ze9U1|h`U7>6wV6(X*=7Sb z$@3LZb2%A`G1<7*B_}+6!4rrqL;ZA~kL~R~<%{UENsQ~WIW;l_NIT4WStm`E!$Eby z9P`Z#;Gx#7_R^;Ja$f*>Jkihb0n19!7)+*B$fLt>fXD$WQibR1Fj)G3x@N-j0nBzi zZP(S3ZO7vJUj%T!y5dW?mPCOgWBg>6<)XMo&$8E#SvvGd9nNNYP@WWmYFHHXDE3KfJ2c?c4oF`B66A+9YvtWV%SZFEo=LZ>V|^#* zi%tPVfBvx9^kj~F7CUq9e{{MTU|K98Ibd|}CXakap2PyH&|nC;iFM1?qgDuz7+ZSG zJdzrvB&h*dt)idVM;F;&gBlqJ!2q4)WSMS=bQzE*zrl__Ql{k%5ZK!5cQzV!`(DgP z3*Rj3-U3qa@!}Mq!+oN#@kV+mukw8uwjuc3K)z7}vnbqbgZkxKtW)E@u50|q8a5Bz zR)ESLX6dPMn9IyCuAX#>49DENaEaNYvD-7bLEI>$KHBFhF{Lz=d-X5a#B8OOtU_94p`lv#8t zbGs19=2SeNbI>2%@ppju{w+@q0PgCn8;i86ICsH{RhGT2&WYpGd}icp386LFM94iW zknvU#SwW?8oOw<2fsQt+8-V+#+VZ@UsOt?sXA%%BQB4)Pnv61?)$XiUPqWz%jZrRE zI}+~7f|jTzt+|oa%k~5ly&2?Hv2<|E_IT-TJpr2EK-s^sTlW4TXQJ-|8uOuX?vYet!Cn9OFtlw?nMLS{13sAeQsWmN2*|EhH=u$ChHef)E zZdjuAQTnEzm0qI{9Jb@VQjj;&Yba}(4m#hJJ}2=%te-)`mnTmq(Nb3DS4Fy!~mhRXIo(-{%d8OL; zs_x|sT+}t)v#gBgrH?)lsSd-qqngh4OETuxEDv5BduB(*of=WuJR-(I6=gUyY)lwr zPk~B`<2h6BI^a_LYrefvS)0ibJEtTgcmyAGGhw)T)*;+vmJ8HBn;ra0`oy&l+|?j1 zU96U;U7#l7jk?uhu~@s}+S~?{3pU1X0!S$B>ur&RF3)W?88r3+0G`K3aBpuf0o!B? zPd;jH@9wxNE|!sT*nl2Gkb>h{Kp#Co;dagYFem+eAaQDajSa;LPIzRUbchq3u8jbj zQrsZlS?&5i;D(;{4l}7G zR8|RGCWtp&`>FTFy^%1Ww=1+scB_bJ*eEKS!>A#fC}mOMa(?sPW#fHBxzET-Ns`pF zT`~xA(c{qKTA(F;CQx^t4@2(Guk`MY8??$aX!{se6G^6TtK(Jo#ulFTdC?t)js!-( zhaJZC3-yzY8y>eb#8mN6RNb6Pt6Oc7=(pdc{|{!}8g;?lK{FHd>|Ot0^*#=gG@NV2 z7SQy@S{Y$<_HKcfG3CHY0M-Pxs=l!*{0w35Q@;93sE zy#+Oy!))0NlH1|xl{)h9x-wk%Kt5IWP6?$p_=$4P+>Ad7i@$B6}91fZ)J*; z1@3^cwhso3hgZ10ejZa`pJjtI-OAkc8OV}%M`z)tsU&f6o`S71zy}1xOBw#h%Vy`N zheW>X@FZ$2YQw33efdBj$Hi<&6|V!OjKLR}g`^3#uDT{T&JkDr8gX&MPFJaUJ7HuF z5=8{WK@+I`Y@L@Edmk`MsY#`}=4b%qxFinBV&U(Gx!#u}l)&GZ1D7t!4~B{Qhqwz; zMg!hOWN{Z+&%M>mS2xRj!*v^)fZTN*-OHbWQ6-tUNuE8nMzSD0?XB4355VTwsSKSj zH8TvScvo@Fjl=Ec^hK!>AX;O>`-y-_T=zAa<$A?D5hC+ZnTZVm>RXAcGwPy5y#StU zyh08#v^r1D>LzstKr!Js$UZu+tTL!M;y9*KwocTcV?rC)7(WB{?AA7I8SpN|zG_M+ z1t@OEj_XT=e;YY}RJ{)nhD=mBtX~E|lvLO6W#6(gChgrjK$dK+Wl`p26Kydx#o;T^ za@j!VaA+`v)~lz(OmVSN&ydP4T%)`S)As>85t|Ti8F6+;!^GXV!upXjly&2t*Y8!w z1Z>o~I$JM~GF?CL3>i^lm$f>NHuFE<;gNO=^WLVkSxqKCKE_%md>tz>rjGGzRw5#@ zd5&9?XUQ`fB13Y!A6}3I+(wWUmizl!S-(o=J7ZD&XuaSzR5*$|3Ly&2^Ni`QC zMA-2cL2@x{MY;q_MaWCt{QWG~r+Mife1YFCDw8zHj(K*+}R926m3n8}3K@z7@nxAC{qEm5xjUNX@=gk1AQ}ikrzPs3a4_?uBM!c!wP#K_(K{ecXE@Zy%b6F(t~xr>&l zz`z}^Zy4H(>l`|QFUz3o`&3{J8whbJ2b$4-%w>=ztG_Af~ju{>Ikv`m(+CZ1-pqdW1wpW1VhmC9}F(`+z_DTRsmAhf8tW6yV@ zQq?~K59zl*S>QWMQ_nHIHXsR+TQtb=tRm}Oh4^lixynObV&oOY?q08y1;)oE>ZwED zu1wOxR6)hr3xb;UeYD0EshdE7ZQY0FO90!%Ue2||E7$I*E|d<5jWA1NzWgU_mCGe2 zT0OcLmdSL4+`hX(nKXLb!;iQQ^ehyGKM@QEcC(CibrYWeJsn@T41n&0orQzvp^PeT zqbN*To;QBW%*&xBW@FCn*oC=A==>AbB)QZr$LnsrlY)#A2?iPN%8)(xbAlRdM};6t7K4 zQ7y?uYWZK<>L>SRPhcy8hTkNEF`CN2I3>id$UO-{o zeP<qD{Tq1*8-Zc zW`Y`VSjkJ;2q^caqE&I$_LHcN9acZvfgae9DiB?Z$f45+lv9nB*!czgUQTpXKJXH5 zZmf(y=c?2!;^#V(Q<^j@=78pzr7`70^K)Y5eOkQzGVI#%W{j!N=XG!Ug9ook`du4z zsUa(LaUX(x=2?dlSG`<{j#sQ|ny8d*9^;5f5knq-P&ATAz2!~k+!)(d;1iv5QDxu0 z#w{-7Hbsn{@p7?C){eiM7cm34%Xb|G1a8*?7s_`xuJz<|s*F7Ezn{Oh1S8N9B=aMGaY^bRLfxl(1j)Ns~ zj|;q{H|PCrcl{&i15G#P%l737_MHPuk89NqY4)`woemqG?~d-c-Zq10MB)#ti&{(U z4>fi6Z8|%4TR=+?YV+2PsrAR0(H#wAk64&*KDyYW{cWtvp3V*#>TZ6<8jXU-{*X$i zI{OXVDf-T=7UNAfe`w2XW;fnhZ-K^DERszPQb_x)+YPz zUZ<5%``Yq4YuZp_c2W6H{~O}S#FO-!+SM*)McO0LMBt@|?$B6MpzUiG$cHNe#NPq# zO-+hq@YR3W>vtRdpE`kIsEpdDs^@bg?vHN09u*~+Whjq(qE1&E82F*DM_wc~23LT1 zO7S)G?HIX$@*5zA#rTg3vQz~73~k*ig8tJTQn2_IXI85-kxjJy?$cHe`j0Dzxj1DHotei zUd{dRi^b|0J#9dN+O`ge)?s1Zd+g(OFL<~ZyqO0(#vE;+r8e?J>H;uFwjd3OnL4#Y z`E_4osk1j~7Tz(ANt~N`&W&n@+~bGuB&=eYw?70U#A5upLDGl26!s4;1uj3xw9_!P zf1RnszOw571kAP5;|5!WyuJq6^$k2Z86V+KgG~9%^S_(Wd^g_MI$!?1Unx_RK=HF* zuOKQI3e+s#`R#m}efiVPQf`GQZ*=#$h6QN@t!E3T#S@r)0*^5OR zZ2_nOC$o>eG}H3D#QoL*PuSx-keB1X)|w=*xyF?Q`w%NC8!_|ty^wDrUR2uRaE`@I z@ZR2by@$PJeG^B6^d4fy%j`qRPn8bTA-#qnRe{C*GZhbtArmA%vI6fM`VOL5woFgaPvu&9}W#YPDY`|O9H=1k#V5a7xwU<)Jb8uCn;0pj=r0f&_GA|aPWA$*bH&GPEH zO3+RYq+m8e7Ys69u1zLX8!5Oj;`?^r`s81}) z=`l)Ce3t&yE8~Y`uTHPsSmAPpot%iF1liN7j$2+SyOUWQYDiDfHx$Dn%nQ`!ZJ;6% zthY0FUIROQcaqek%4>~%5!0!d+e-QJnx;+H~)rENK zZzbQsQPLYHITp`)CrbEsq8=1{5PcZ>2?94uJ7NwwoJ6;kT9+)C<&m+s>>$%xx^ASu z_kD5LKXm%U+INrpJ>J7f1On*+)W0!;c%)!y9H{~*oG0&q z3Y|%FsE+3Y$Oc~B2qXU6UTn95g|{)*$D68MQ?fbFi#B$CzT0WK!JARJU7IQvRyL&| z)IOrJP1<@0_Al&K2k&Vbw;v*zH<{}rIuDwr)#t5e(3XAMYNw=~ktc247VJ)BV-j!8 zv68wDQh4j#3fyDbq@AwbdjkrsI}6?G5U3DB9}DyzJv}B^io5}o;eC~|i`>==r#8!K zOU4J+3q25&OX`Q##h6C|Wk3HdY4^K@;TZy81+uL0f_OJ6Mjbk?ER%;)47y9O&QRLj z?&Zz4lGY}ol#p}{0u)Y;F8bAn!nZQfZM)nww2 z=+~7p0o@!&bb_SYJ!VU)yK}+OCCO|whS(jDJsCL>Tk&y?8WuUag7#lQ0~(KBI`uoV z1vNK(!_*jy+Fak)+CCZwMM=b<*M%Gen<6?4>OCCv8pR+1?I*B6pqdG!&`VNr*C2_> zrf4LCdm|RCclgU}#KzOQ#i7&Z->hn8&7X$-lXCy&l6zGzeRAceO<(>DyEPKc)R%Bc zfjfM+lKOFeHfz4|91ZNgA=#N)C+S@h91Hr_xTTWYlMbuP1iNBaWjE`vEf0lH1nhl| zs!DgxP9I_$t~@Aqq5=(p8H!A6C9W4W@kgX@Uf;z7$?qGeFWt4iCaLjxocWV$Lse=m zi!{LkjsKCE;oVUXX<~mdTluaJSAL>e2}6|%^o>wziJ!|IOw-BkC{2Y1)mTHxVZnIA z6t+IYrN^QhG0_m~wAM8YJ zkq);LKpg3=-4M46cQyJjq?kWXjm%BbDlw~#6r(E!T zv)#j`u^J|cI!o^*qf&;--U+6nfM*UAdWTP}1NLJ2N9x5Y;cg)iuR^DYlIf;OwjI^v ziZ*wkx!&ZM?^WblLjCxO&xk+#Th$5V$$AnB8e~J;3DyR2Aoq8CV^ES|lX*s;S8wi|Rv9pdbo-qAgH@H;d8`;Q-cm;ip#lD66A%e1^` zlS6_WTrJ2doaMHJa8?K`g+MX6s^C^kZzNs0H?>A`)ofG$(7w!)Lv(fj5hc}9BvkA$ zV*{INJFWE3@D#LuuiEa23TnrQtJcelPmg7Kv19ukW&3tjtzS>F zIBsgX41h!2vI2DwL839^HHmlX6^Nvh->u(2eEj(A7SQv5mlXZp|?wr>8d->OBt~Otev6k*kZmDSZ@eK7|tevZ*C=(jwXyAlyu*yBnz zm!0mCkQ5=)g)~zXKks>M>aMEv=HiO8#k6bWOMl2xiX!6Cac$PBP&4}2ea!>@zyo54 z#;^FEH2m&<|N7%omcZOQ5}qC&q2$eL3$sfWF))%K#UsD3KjVd=rOw;78l5uk71yqG zz2|Q&mnW#9u;O_28BhrF{d|PiaqRQ!e)oCEa0k7`pJpvWK2^3a2K%4KQFHiJ^ z?)nP#n6dQ{bX>q4z}p>we##ovZ?Q6+6$QGBg=xmWbzfaMEu970Faw($ zR#kr2JN)++ec@FC;|K(DzIvxQRNp`Ze7dI4CtDx6-s^P3!NI}eM&QgHy8C9a zxRS(@b{W6*U@wYYCYOkOC5Jdm;$0LYU;L*wrQh8WR$Hq=3AEAg3u|o4&>VE&> zAGJ!ACh*|PH8>{Dz|gQ&DeuHVHgMTT7*?ysp8L}%eo;dP83G>%1bhtt$^RF>< zvN7(S-#4KDPLSX7JCXA*A`hkvnW3Vs$&qQA>Ei>>;OrRxkq^Bt+iw_WU(ufGiEL%Q zV&-HD?09tFwBXjK-O=RPEB{LpeVlyox@1ej)3R6f|KNt&@CBm3VwMA3y}WiV<2|;& zL%%ofj+$yoQx7l{*~zzx`6@s3_Wsu_D*_1X?<6LO<0JKENk7CYmy-P8_sjA3HX=ih zqekx~HFp{YwcUz%ZmHc;ViazAT5Bw|YeMeeo^11C6$d^b7lT2iGL0 zd#?W#BmGya7uZYRFA#)I_Z)NIwd7OY?Ca~>5>}uQjUewe47xOz&iQj<^6#GI-+u(W ziZ$gYV3^|O9cEyzalOMfFU22#$b#`Bd25FeAq;4M5v zAQR{IJCW*NX9gC06LAwG04j&9+)Nt_}o>Ah$mB%I&Zv_}n4R9goa z`0zD4r`DT>#|~drFfb-2=4f+nx)j*!TR@Y#{f~=u!7wqE0>ch$`kwBFI#GVA$Srf6 z8sDl#K<>s!tmMD=s6|BRy8#D{0!<>!0|J%y>|6E*~VE8P? z10EuV%M|{ynEKce7m;8ezd|!a?f8e=t(d%^iTdf4HIl9(w zFXdOVVgA9(OFj~nTmL>P;=0&%niM1C`mYc9)2)5HP7eg%q12@*$s1q4epOXXd-v}l z^AC%Y`V!!qm_+bD{5|gd;g~-yr~r@%)bf%S{aIrF`iwFpKtw)?ix)`xr!#+-{Xd^6 zume~f;l&`be+#kyr9sv>IQWpXulHZ${0c7r7@qv;5Bmq+T;J=;rLd62 zpUph*3sdRE(D$2468~&D9~3U zHLuDu{48i&{*O7DjGO|+ZCVQuN^CFaE4#1KriBuviBEG5F~G>r3;c#1$B)v&whB_ZOlF z?7g5vDsB`1#c#g~h4MCq+E=3)NZY4*BtCnGWh6vcVbz`__VU%lW<2Hnz)yi<9N7z^ z2EN8TY!?-@l@i1N-uwx5`t4t{fIq4t$;GD9xwR#NUoY|BGK+t7KRg6aO@!)IuKb(M zTa9;hHMrhz$|E>6f;ll2jft+M@*gCP(~7Tsi0`(>87j=ITxrgk=nfx!oNCeNuxn@Y ze!cB^B}QA}UT=U(wYsB}VW^W}=a-^b52?qCdToC#)MVd_MQpU_i~6zoss19P)30}< zymp<{lia?SQ0T)oHgi>0yFV_-n)ZfE%EjLLx+PT@s{!w=|rH8=zz&PI370@>tr;~vb1rj6Fp=Xmt z?bQ`uAr)9xz1X?smw1W)7Sx5}SY8Eihksrqj`2^%@ta-;<^p-Oh%Si`*gjoR$miM0 zH~Z?Pl`M6g$dT0Is;vR0Lpv7!KEFKMYB3F3;qfp#m!!M3uwJ`dRm4sa$N?2sBA9bm z=SqEc`liL9I`e-2uIch{#)Lb;9aH=l)6rPeVdmApUe3Uj3uaPP(&Za44CarD@T<~4 z&Apw^s%V!|Z@_O*K9$w@`o;L8RY~T&_x>T`X}$OF*Xfjto|D#su<$ztC4xOfK+>{TCWiVOe1r4%b zbxpqDzqW?ti=J@A;7{F^e=XsQZ|!YxfY+PT-_!u)n66+)J7-D}8X*RKt9o3(q|>bl zVui&w&x2&A(^>r&wA9jzzpvi4W3G#MmblzU5I=j#vjMb1eYeFB=5$PisR)(^(ux!0K zGzEH3leXoZd_VaITFOHQs001n``bT6+mDlsrL{PSxX((j4M=jB)CqJ}RUXU~<%?(u zl0Rco*{}?Ha-}=k8*W}g>xmYx>qD^rG}d50g|tHIYcDBLf9ko*w^4KZ{- ziw@iQ(C9kZl^{wa$&|85;mK)qduV>4s_wEvbPA(zl+%7g*SznhOKM2Pnhs?=_)Iv4 zT!HJ&&g2STxROq6POkB$Ar$#q+e*uh^^h>B0|NgrIIY*#Lo5~BUefcD`Uh$gb+AG#dI5v?w4Yg18&K9#^@GqJPdg@Gw%2M(MZ58K2YKw>M3FcPR zVO>ELU&nP``b{3ceCWdIgS9+5ur=D$80&c7ZND1EMHN4gHs~eK8FsG`ie4*a7XWE) ztyrHuoQQ<9J69X1!kFR@KX2sK9;>oBw2t#PXW4PeI!_XYrdUnFU~?QFL#!Gjk%Y~k zUA!`e9R!+g1X=t5y;?7Hc=i=y_y>A%p~Ffz?&gCcuW@6Tii;YNH>98B8{5f#`A}4Z zwA&cWWjcHW`%=P4sGt*imrE2WQSLKu+&*Bs^!*QCbY$bcu*H_f{aCp$u;o$d(N zLs3&R>t$&kjblA!bM7;i8}Ptk1l6R<{Ok9G60ME(y7n@>3aEr|^wmiiTZ|I7C;-VfA#Y1GqbP(r8SyFnlK?dwxwcV!__ zJ$wlV(`b3;_upQo&5g8|>6CpiVi?vw)VyzRYZ$9*Z{cgBn^#T>RZZHj(LzBedr0vL zzKHNMU#X(<125DFIgS{0>vsr{$nVG5y%o^)DLI6V*-D8{q`H4-JdV>mH^^f0g6TxR z0!iL0!LoQy9ZcP-cE=eXeZcD+W}PphjnbR8B%6!)F{JY2{35ZSQiLOQO~SNgoh$8xpp=@)owM5qvNXsCK03xsoPdRM#Yr zM*zD;ry84|&p(>!*l1#xo{6pJrENsn>n3T{%DL~cYG(*ltt;SN z{z8|c9w%oTkz&m}uGuqey|ZjhOUID-M6fQccmjt7s@HR8BBIRR%pqiO%ZEg3oebPV zwfcpPmQ26Zo)&h zymtfKf$c)z!)c+DDMhWWSe(;;c?3lsT6G z-8NuM?&R=0mxPSOe3t{ita`N(`FyG3oP>t;sZ*V@(LRRVZ6OkkG|BzK{e21BhJ;@< ztI1L$M@Nt@Tx*&RX_Qiq>jCW=X>_QpyejJma5QLyA%INW%DzEcU8r3%+m=_Dvyy7& zoxHnh&fCQ$DtUu+!IB!do>(!ZBCmyY-~o8Q8Vs)v)`c^Y`4&MRh~_4bOxfoM))|(2 z+&8j@jf_5YILLi6aOXUU_4XlH{;?@vsYhfUS#BfCVOD_sP_3DnMMdX;ZEpb+-sz@c zyP|{t<1cT>#f9W!%I%7ZQtN+I%Mawe$n%&~MbyXxM@Dq9@~dvqh?-wv=_v!w@gga(&8?OTaYQdvDvm(a60+z;KU%P3>Ju z0du^z7Fa-ep!$}T0gR&Ay4=s+^i{jLch1zfFXxkTZ)12?hT!L7iEG(>rIrW;HYIkS zWk!H#+ckhBzphG0cat8E2X# zYl{4+#Rz-HL2efrH(Z^WelX7i=ap=_@w`($o{cX&+L`-GgrUCi%i>?!k4`PCE(sYt z_^MldnS=<+x{qW^?_6}mE*m}Jz|>epth?)9%i@&@UiMDBsYFGauBr6ier7HrzJn_@ z@s-QnC<`{UKaOmby`A_SeDHOPQZ9 zed5oP9U|`MmSXhU0N$)HPNnp{HWFB?mf74qgG)UwM5@^1Akjnf8}dC3CFbGHP6)SP zX)3RPgfWh28&7;<@uT_0T-`4AJ;S}kSV`fe{ei159u#Q5O>tT)nW0X7QC`Yi`<${< zGTy5qpUlFb_W=4J(QrrSbEP3gk5NTo;po0pS0@!`%mGx&9m9aCJFL5H{-V94UFj;a zm+QWUcj3F}5CuNGyYa?-JD^O41NY7>NqFkOsV!NBo~f&=j6A*_tT8ceC*U5daQZc_ zTUA0jWUa28b6;%NQ?hiqEQK@JG~m`*@-LHBc0ftb_Keny!tZt!?rIu#a~_oGKsbFP zbsy{a!&$pE(&xG}^P>Bl?tPh#VA?Ia{LMZ+;c;YmyddUV5f9AS6e{aW-d<(Y%cu{I z8Gk!>M1g!`6HaJ{P+?lntFDQb9DKrSZ{M#+Sy1ZTS#D6tsQZO;AC%!`f2`%`r~L>j7qQ&3tc@?MlDhmNi|vaZ3O7HIJr6fuMyr(0K8TPD7WUi2n4?rP8mrJV`W?iS1MRnZxU z4z-vtnI7=eI;Lt5R96cF8-9~V?|yQ990vZ) zy#?0(oOw%FA>HD%u+QMGaM%5A5UKoItfpzI+@O85h8V#W?zSh&L%?o>kI5|j_J6P|AyCC|SXH6-$7daH3MzB;GO{Gq7c z+%iEf*F$li7@?{<)SJ&OMC(Z%8esym=?acouP%pA)Ho^dxjO2hK5sxbuH4<_1kliE zs^pgxKk&=ZR=>dygT?MoJlQ!1%%0GhIB4-yBv};bdMG)sPrAQYOz%Tiig_C&cHY5v z<=+n@T0XpsP+kTF^J|nDsr9U#&gn+_w}pJTQJ0sgNYm>QomfsYVc#J3DoVc0jpIQz zDcZTQmvTzm-hs=UJYL&N{1uF*GggX|bGt6afp>nC0zB6>yh5+y9Y-4YoSLgWj`>M$ z?~jHghF+Ks?iVA0Hq-GA9mc&#V?%Jezr{Ee)!sF&M&Qja&w}W%Id-le9^LuwoqEi0 zj?Lem5r;t1S-yXF!SE#a;)Y_u@6M+m8z?Es;>}l-jaB-<&ba+c$c2|ZW8{sC8em;& z2ik8YHL*-hQ92|MY@xn#X}Udv8kPc8ig9;U?#c>zlM`y)t5|~KP9cuv{~ujn9oO{! z{eQ1{5k&>q7$uAz-8J~_ ze&YMN_xJGrv+;oO-uv}_op_$-d7X2l)88sDCQimxwLOn&Dho1_oP%Rp1alBf9rF&y zytUej{?b%sa>HHd!joIMQr;bUyd;O3(eyckPV+-C|fbiRfdwU`O#ZFnF;aZMDv$PcSbe44Oj2yRs>7r6ZtVm zEw@M1+-Z3Vy?N?(^)m~x<$f(s-s$By(hqkVwJ;QggambtK__~v?mu=d{2Wot&<}R{`6750(q)?%qoPoit|X?&z{o2UD*=4ZJ~Bvi!Zam0mot zz&1S$jPrhGLdYdU1J?}Su+hL3Sabg*bEE&~2G7dj;#^SVC8T0MlV-jdYxhvwKat4) zJrbzjsMh$^wXMi`w}sNkrp+p98DH?1)_l+lJMv<|rzd?lTw7)P4%;QQztl@o5=?s~ zwFd>Qw|30s6a>bk8peW3N6t}KNc%cn=`V%Un`$)a9R?^+g@E1+41HXt{m8I8n?lbhmmT zPWwe#i+E<5NG(csoR4H2U8>>~DatO&-s zBsZ4L%HIvN1#KoyBbA-xf=ef$$d6Bv*iJ6H7oLmWldX^SW0=2r4Fw549oW(}ocsso z<^cmGHHB4nVmKZOnr3=q#GfJUo)rPvq3*KhKgus{OuH}Q`CmWwVvY9eb?D)1pS7&t z1|_!3*4DoItmZbyG*Ak-Lob^5a-gBbEV!}&32!iX>?@nzIKp=`r%31J(56wDzs!!h z$Hxz4q)dpJm)@eDB*@` z^4i&-nwFfTX@TWSazxxAh3kjzh>xx=)tF1|!w;WJCg5Zn@=v&Xv=FxYfjO!uP9SJ? zOE^%XT*l%DJ*aZNO?_Z9NHImcW{bc{{)=R-WM1oue05J{IM?eA8y6Cf{Oad?o4w=7U~C zj-lv>)X@g8(UnaljtT5dm0odO@oPW+QK{7_VcdalH(>qrw4rZokfpX3(?qFt%ki~# zrSu}KCo5YtzJBhsqq#67hFb5A!w&VN_5YO(pG24ct(e z{;EPFNILAfeYWF1JuMlVvQ%x8b+gA8pT1@P-$S`xA6`df5ZABo%3-$XsYV)%0%OW& z;~(durdH`s0zQ-;kq2cEq;m=}(fNrV6|L@NlEjKdw{i)T`Gg z17=_=q{zniLn1rr3(233^1qx__(-vxpZ_b18q&`F)p@u1QF%!@S@WPfzw!Ed;25b{ zSZ-Y=Ri$g$#Oh$Hswo6^{P=_@U6varZ$ zke>Njeb$9+ONe=gYK{SQS~2a@wli)4*XT1-&6{Iwk<9(v%i3!wNNcQQeO{N~Q)Y3a z4-dCQlbf)uqn`V26{9Bo_MQ&c1wXx-ey((RSGW!DrdOK2r|?zU*1VGkr(j9wNPC*v z$TEYDGGB;4^3CX~-*n@ow8rMv(N?yM)W7;7$A|<>HFrt2QZ(uipZhF4nWS7Z@hHz< zG%EThbZExXPGv%871F90wy&)Ks_|oGLyN^)U$j||$8NlwP0x88xd-?9{@F2JV^g!S z+I_)eb~(;5HnXkA=6(TId(0$y!HmD%Drwf(B)X=zeaw5ME`g}}c8=lv{ipLYWi}%P zmVQ&pT<%bw8ROegR6~I+_i(G@#iqH&JEgfaEhSR<{u>HUmOL2@ zSG?U2h&!W06Pza#dRIJ-g`WZ)7KyG*>l3EM-=Q;`s(L|3eao z$f|xr#^@m(J)bfv7W1YfqY<~#bA)v%&EDDt>M_qMR|@aYN@3sKejfNJbV%t+wv9Om zB>Y)RKrFrTutcFM|z5kdyglU zM?mcaevUGE8k{a$L=_DRWJZey-Npp@T#3gG8Yz)nSg6^EzNbMnd49b3+1zP)cOaKX z{*p{m{tdQSkw(HMo=HX1HKRozn=P1RtY>f+@#MhbO1Ab&seD}Sf=M+4+vq|vv&%O0&9LAv+rO#j;pfDtEO$NM2;otiR(L9?3T-)BS~jm@xvg4;yMQrFs~L zOr4W>QbGYSbut%V}d^omKlzT2ghY2LC_yIz^kJKD{8*mC-g8+Aj0 zugIy!8ICgla*sCpjqV)VnSlj8OREd*M>Ul|CwYyhLJJ{Hz3+y2FKA1xmj|VVCnHPz zhPNcXe^Ki^DGe^=yXo{H^(fE8uPe>n)rF&coFDBOammjKgnhc3W1gE*G3T?2Nx@s+ zE2H3WA4BJywdW#ZA3|D3j#_GC-gRkw7TAQpS*%``;eLdP9F_E;#TUSH3QuOF0GcOj zU|2kFvWu$c2bX3L3*27lCSZR9mIIK|qkm@CtN3Po3WV4Td z+pBr-I@H;u&i9kCYd~{!Ran5fx&1Mv_W@95%bkWQ_>j~+-EhpIg!vv~YGbHEPAd@!2x+CsW8+m++it_eL zSSKBlOb|8fPOEO{ul;EaI0xQea2!nEr_IWT}MtL zRL|!0f2b3E9+v!cW*KuuIZzqfv}1LWj`r&me5&rI&l|?%_SYj8%Ze=<4$4{)rx()) zblY0KMj1yWTJv#$4X)EYE78Bzd7tD!46sDJ-9-$Cq6%~5R}>`E)Nl3f;d?t{Vbu1L zF`4ISKM3R>JVl@TqE&&tl=CCVC%Ekc?iNUVX%WD$4n0LMgUn z7br4a=KEA>Ng4RKiI3q#qEMqSsvWBrJp)eSLjRL%%19vRbGm^|Hq9PbMXrpq&PdlR z+KtoQg0bZbz1Le4VZHLC67*ef8lpqv0eF!@3Z89bRi!zax|+L6iUdvzEF_fdDjY5E zPR|UGIN5bio*^bTEc)U0rISxNPquP2yVnuN!fbbaPstqRG!D?|Gink$(27wr z(W@cA(s#FAgi0j1oeJ!lF0~t49=v`0$Zvj*^1qYCeDy0Wua+r=nVg*OLYrw{l#F|K zu1+&DT8hon7jyW&Qa$*ou0)qqZsJ5PaW}I&ZdqVs(Fqy*Yg<_F2wg8`*}ws7gOJ$0p1)q|1Cy?^LV1~&qZePi5# z>iqwvWhiOz2cK+~?-k{0@+%~?6zR=>nM>8)aLm!Jr&re6kN*utsB-D_=~910JmXC= zG{5R#-L3q<+3yE7h*Xps@6tW{x=4>BkLG!I49N~7}{&ab%o+#B;;fSvIO8uqNQYO}3 zS_GUw`Aj(Nd4{&n+LBLv48{V~B?K842tL?8b3#mFQ}i%D9&wEGEkSm{RlHPv8g`$W zjy_zGJ-f`v*WQx}04I?5GVfs7yz*9L0-p>JCol8TkF>U7*@N5SG9`;1H}cD~`}a1U zHY?4_DV^l=$T^HjsAUG7EeK5LL>#FSPrs~_SdKl^e*68xjfXEVR4p9pVK74iph77( z$_}CvCxGfXdIxhiODilNwADJcAxoqVO{Jc$3<#_1HL@6Nt~uGV zYL!fIwV9Zf1C@jvI2h>KaF2&&V&SR_e|!&egk+zYKuv5s2LT~+76B%fVtVLu*f@^^ zhAoabl2pAMa9sOL=h8+qFKSfT#1hSKutys9SZOF#4fq1%0G90N>`X#4d1FYRX<>2` zJlP%B;8YJEn?d&MZhn%AiS0BBJ=V@G)q^8dGWfG>dTqZV??!Y#KeYB0swj^YAsxjH zo0jS_2s3d$pKV(GriLJUregOtZ=Mp?S}#TJo|4@`$WO`{+6>3lBO8{R zpbhcmP!H`>G!(j}dFiF9lec|@oBmu!xS+rBm z<~8Fpjk4oLrH;g4%;UD0+qctaYgyKx#Hq8t!l*WG5wt*qvx`a=TQ)VDu;h+wYn!T7 zUY-|Vqq zd8guYkM+QB)aYs#b$svXVy_Z0CGEf^)Ah-jDVNj!X4=w{jc2b^SU?3VfB6zEb0N`5 zHUs6p_Y&&jri5<9IRv+u$$^Z?@m=fINS$(GGeL4mmf)a%)eiX9=W1-;t!1#F!p^M^ zKAH0LMMGeEB~R>@&9eWnDjlR*mRAtu%k&hxv%lPv=FLK!xI@t8*!;?4s-*PV${LWu zAr{4Wbe!Ut74qZ_D*-!tcI{!frT=6V*Fy97CgKG$EeVQt9NF@;5$1~ElDG_lO)9Hl{ z?E4+HzIM{6Vc=3_%~oAnsugrFQLa&*rQnkF==^c#C`{25;O*!h`{5ePZ05(hz(FC1 zd6Z%%F)mm=dVI7DQ+>g1Lffxv5g4~Owq7T4A7A*HVbsFg{f|h)1FTsa=&z=xmufngA zs2zY+<=eYB1@zLxwf8nlqj8Vn1N)jRyJq17k_Vmx440|M-n>fbMxo8%{${g^ZHMqH zqKZ0iQKAM;hN+~!q)8hes2lG!6elv{?1_!5cCA<>)$X*}G3j9q+0`WA>CrsAdj?(! z`ifBIsP_(s3$3uTm7`)s!fk=cNS3kE8*PKK(6>s%M=tA!DM+j3NuPZE<;j4}PrTXK zPu5R^>&jMFaPfloOHJ2h2emux=dJ+!{mYpX)XYRUR=VNc!v&m9qr*=1?jL?Xbl|Yj z?B@mf=yD2Xl#UwD<3ca#{93$B?vTr;uCc#~`Tzdht^E+fhsz8hX190w+d>rAMzY_I zd!03la?66Y5WGFho698k4n1}DyFlQ%-B1N=`_O{rSAT8K(?z}Tb^@4W*Vb8Xo~g(d z__HO?0{C(-<4|Mp0FfIPN-`;ulb`b2p4%MgDKRSlw4YQD8(PW`y$LWvcXIoZYFYeQ zw?8${WoyJnuGzw|R%ae?3!kOdVH#-yk0nXvx}-4?G6m${W)O@k>TS3~%^+Ncc6VV~ z^qIwR@A^7cbkWrN{{SqMV0*a2u)K2nOO+};VAWPNjN2k9U7U&W-zy!u^V1*+`Z{U# zQ&Cp|WVx|daI;@0jk~x#$zR8lJD;1kzxEJH@lq$cJ-eF1!@Jxi2CDH;$Q53 zJ?>W?(4$TT*H*xIqL_6~C&?3sf3UT%X`~1o1ebO=df&O$fApX+Ou(xexpz|7*Bu*= zU&PNF-LMpJ#pNgnN>u``(Y)nBO%s&2v%FoGZd%FW#W5xrERz%Cr*E~q*=3*gHXDfk z@WOxrkn12Ao3cX?8L$Fb>{LwpWR{614d5TdEHKWFfh9-H@hMEkGnRq@_1^42)UkR! za?%?4)CMVh5|LHbjyK^j#_H)I67*9L!gees(5L8*OGl=_)wFIPy=R?nb za#a04lk`91^zgIP@3dJUx*WE@+pLgt+rSFfy}nR0h50V+_-MTG^B=CLmC%fdPX{00 z^72ykiuCvzBF`#&8}Fr8xgZc=$UJb1)(g(L?sR(M?MfN2+YJ&5l7+0j$q2j59w@N@ zIJ=8kJ3$l5B%NkSR*L35n4b=NlFMl)P%nGPk~P^XZ8PnJw0HI+%6RgJh6LV(O@w#+ z7O4cBIUziJsP5!+l&_VRk)_Zv(KFH-(^l8e+LlZ6ubU28zHrhw73f(oZ|>~ro=;uo z*`7csi2Z1~+{r1TU$Xmk)*cc=m2C!m=JQ?DX@t+_=z@Oqw%oEa?7`=fO4$inS)>L& zhpp)X8m(W2;|IE$I5?soMnmxaj&IQGDJ+Gnn^S{F>%PFZWqdvEXOq1ag~X+l=?+?R z*Q5vPDH>zD993$WlQ@=R$7;FKo{NT~3XbpABvyz*Q^Uo|nI-tlf8Usm|>| z`}b=*tg&yMZws^~CKk5Wrc1ef7?#Z1rh9XJB-njvyvQaRimraVQsGSd7PPX+3|5~b zD*EJ&`|Sq{?Vy9FV7wM{;2<}G=GI{3nPYoDVW?6aGU~NIVY~S8k(ehwb2bLU{&7j9 zAr223vyhtKosbf+e*UMs4#D03+#aRaKfpKdtZbXFxfi98n3lJ6cif=V>mpvA?*8`U zlV?V^<6U;|D)|{~^8wfUOc!uhtcV6NsQB1+jhx*?H`GhlH9&eO=)9Ry`jAzvhmgid zrj4g#Mb^jnEa&3sN6nP$dMm&Rk~dAmQFg8j{Q-nmbo>+JKdAfoA+y*cGplkt*pt$bBi)ptd<2%;#XPrRKJAu^ zL-h9c7z#YhZMI50#vWJTpSr8L8*l)k0!*wuAE5e?+Unp1nXrNZbLr+jAGWb`yG=1I zGA$#u7Mjd+nug*)#1z(e^xj=;O5rA2~%d#vg@x?HhBG>J5^z0H-_25^|9J#wBQPAGFNoEEfZZ5(I z+;SMLP=#3Dl3nOBur16C8`b%cnAos3lB>jxiRFmj8D)4UuA}s*Kz_5du4;w+2AE#C z?Ih-Hfgcg&nwxaO!A3Xw@!(iQ`Y>^Lh7=mhm?JO!B$xKhMBH;QdO9q$+%QgVHO@(M)1;uAduOz z@6qf>OC|_luc#;>i%7a*1sl=5Y{VJhQ)mLqTd&Onj!loEM#~7yxxvbx+m>GL7je}b z<*hu$xj?;LU|ps0)%;VM)BvNpM?wdTgu8flV80g^$EYs;eJk9Y3inb8?V^# z*)}PD#UB(E#?$$OGBKs9{>*!Vd2X;m61OJZV?!_H@qSRcG{6glxsEH7D&*j6D^5Qh z2myI-FOsrbWs-+M>Lnhl=+Ax33qB5K1i~F*sVIl~@vm#zi&iYsAJ(>9#1~Tl{Fi?z zRoYz7s?LfhBtS12{))jV>h1prC1%U-O2ypS`4X4EUN0h2w^Ka68kY%%5PdUzwh%e( z9sY|wt+kcgVb@rM?6(pM=iWEdL}e#+Z5%6E-4}Q0si+lK0>>@7b!^Jaev8m(+9nE5 z%ktJ=y)FOHhv4COwPdqyECo1M764V=Tan#%?XKmb#B{zJdL@G(?KXBP@2@;J)@wU; zw%WR?gjS~8b#HOYPeIpJJlDzB&5v84N$<|rK%I)pwNM38rmW=NR9bX26k0WJ#zg%uIRsN5JnsH@VM&Z#k{+eMEnZ?l@G8=U z2!U(T(jr&re4xs9X@R!`t#jZc7NUe&Cz`IZz~Cs@;SI>Aqt;#t!eE>%*uq#RPF=Fy0B^erDCCWCevL6^lWD;SMGAe#;}$x6 z?!A$lNh2o?=e0f?NbxnXF2bO9Z`FuIZ`&Mstt8_xSswC~R+}e?(n?hhQZjT)u;<5XZAB5f=DP1Dh=*KyxU(E%({Z`MokJgNl(bS*5 z(*K>p=9xDGET#q?yxv3QV`^#l!(xaa?>&Vay#E29k;aNhI#D=aj_y~Nz!RQI!&ZaV zcsD=>a;u~sK#?5MGT84SzLI~tEvgEqc2NLOL3vGhd-t@p6t5;=i&?5`HZa~CBwiYe94?gRpjQQ%PRsbQf{}j zt#Nry3jTYGZgPMzRbK*RUEwiZ2nB@Aazj}IzqPoSM9-a9s*YXM`B7dcH8|rfyJkISo*3GzcTr;~=Sg2F(lhFVT=vbChYBuYg>qT}iG;l;uuYYpX1jFU zf;#5b*2a~3QX|YgMHM|pSMRL?T53}goIzfqwU!fLfGyOl0zR3L-o88FM`m5>`B7^R zV_hDb06+1?Df%xSk<(T?mM!4sDnH(%nbvKoDh%z)+PWQxwR*0IAof*O?0^q+B&M%c z0F{?fl*dX>1|zaI+?gqDg|R@=*kAG+$mp16qfisB4lan17x@G(C| z+IXn4k*^-RkyibE2U@HiRVfA4h6{hKJ{aL^8%58$Y1Qx9kYXkQWgKJpntex8)4O># zEiG4_lW|uAG@qmQzr?WMoEmT{0dpCmbnPt21qgqYQZ8 zz(-{fM1STeD_{D(_a`6!J%{4^cmF1r{|O_XMN{D0@HfiaUrj2~JA@b`tFIWa=Y-bu z+_Th?S>s9?k|(zsTbvtUNIg1<-22gnbjRy7KqnXSp~rip&X}y~^(?VNM4{KR$d;YwuG>eKojo(pG#JeL+YRDkDp@Qr~!`U>_#!dnprF^TE!_1HMINnfv| zMXoa$;tri{awep!+-+kwSqT#6XZYOZ9-uAz^7^`uM;6G{y*G`^A!yCqzQJ$XzQmw8 zS~%4rmNIx|)X!W|l7i@xNY*a@LUc*@Kc7wZu%~(7z7E^@Vl1i_|8ychpm>1IMW`I5 zU+cZ*a<+zRvD98hijF@ho9%r0PzlK!=&WDFt6$I#W2U8(9L)59<`lLrTcDBrFqvYF z)H43E#sMGFE(o8Qs=1dEx!WDj02 z2-1_uF{`TsmBWW&eGJCMTS2_8IIfAz5ul@qjJHlSuGss2?WrT_t!rYLaM`2F{dmpe zV=sWi3J5x0?T^z#D)KIp>X$%F>!L!1#9HBYz)T$=d2f?U1W1aNikF(x_3ZZTE_HYp zdar_v%XIM5<@E@33s-O^KrOIw6ws7n=F|Ehe0`N9c;{;2&C@=Qo%asGt-l6u)mIZS)XgJL%W*DnM(*rgTLyNUI-}gt1MD6qdJIgT9EPOku#9+~V(n-zYYMeyiLuc+EB)Q?U3h42KnNNImmoXfMB{nPOqn$MNW$-p)v=w>^D zCoR0|;w{b{rVWE;r_THyXt>~P7qS#EoeMpup@QaU`BA-N*JLKR#{3bpOGz%pE~3pC ziT_eJBs&g>yWbJ~2+ z(1=S;sm}Uf*dSBMV77~^Xo!Tx@&y7Gm7Mr)99niRr9!_=GLlBUaKn&6-)$n*9 z@xi-eio9wA`kXU$i4)Cht-#|a^*!r_^voq>YfPI7#Og_w5Jg{W#;enQ6r-dbXNa_@ zV@H7H0kZ^Q z8ha*<1+kT?N9k9f79uQ!dg+}~(kln6xwcB0qggz=4cxM1^$9-P#>AE&8jXeeucT`In+=MFXx)rTaHIUcQ)8KMoT`Do&Qu5T}|6%*WW;aT)4AMA1wo zPqdo_5~4Ec*6m|S1F0+1S>8eBkw%L**900}x;c5vCaisx{}wy^hjab>=^T$-EbOyV z0CA+}T(4GY1<+_?8y0AlBw{5@%^>)3w9=t-yvECw?*{o%-rB1silJwBY509YQ~PCB7?a^V@pJ@Gd(@MRCrL*K=|HZuhztb10r4r zVA$Yy3dvL7U(;WUQzb4G9MqKbM1n#>{L7CH4XoaBp7)nNqM7kM@-wlDMZYSwK$*>V zrHZT)s^UY)$EG=M29s53A`}XG61bJMvsC%kTxIGFuqYDlP=72Z3Rycx8L^SOL&B>c zVX%9Fz2#sz!(LcpACJ5HM+(WTX$27(^HS({321EaV9WRy9bgvr@PzfYv3W8G*0&Pe zRjPD73L|4&%a&Q?;z89TJZ(w>3r<`cja`Cd!kq$L2ZNK_f?>6qkb_f%W$$qGOHm5t zraZ{;)}a&8$N`8(q&DTJH^s;_7QE&KGo)x-0^=`|e85gIj)J2fFX{%3j|U7$F5kqn zmD?<=KzYGtugDb$KvcPv@^Z175RSKM9UFxXri>5%UGu9Jy7Bu zr1TNxfJJ=nia%UL2`oYvM?B#_9~R6mIcZecx?( z?b5`psr1@!StRE=ZYfvMcjgzE`0=D$BQW?07et^fT&Dx8Dc2xHCn} zug&$;!VOu?(rNqq$Q>sw>hzYilRZ>5TLgz^9ioSUFim7>#K-AAf6XXwe0C}ExcEW1 zW*YJle6ngOre8K($JsC~t7w}PUv`(htdx_pO&SDbzR9)S>(qF{z$OA=yND<7D76{d zIYf7FW}VQIf!tuxdxDQdc6G=y9ula{efO7~YLC1n6iOv65@uPBKHf;isIh#n_W@-4 zK+4^|Y?Z@w3DK2bK!V4Q3>cNva4oUPI$7gyuVwGw8f&VrA^9fzFCc)V6O@9(GVo&= z-`?P+#S_o7?1qjBSg@SqLjXmUeA$K>OI7Tz5t!!pZnk^Xx$kbQOD1{+kLOId%s&^L z9yR)z)zvTbbRmY~0bO2}eP`Q*t_YpHA)3pTeOEtnV6loUdy!OTLwW$X#^xh@rdAvM*0AcOG-691(AtWRWyp}=r z*n?uIhYp+1xiA^)ST{|KUQwyP=4vP8gnh-mdQ^K*J5pS3oH8Wo2yd`#=)vVg@5MG= zNmdko{_Z!|4%vzfr?;@t-dPZwSDs$v__$|MpS5>w3K(jLdC2lzn)GHopF^CR1FLEV z)p{6{_>z4Uo@s%i@YK@@nZ0ROtbyJZZ}%YO`IMx{5(lONk2gxxx;1qkkP$;#7^cPx zxC>1WTy}mR&3d#5*zG%v3u4X&AI)Be{aE2w&V=iTpyGFj)4IU-%o`v02$J68bg9dX znFh*E?goBx_&WvgpNMUl|6!9CF#o;Eubc^b{ORO=NCy${Yt5?NWx}K86 z95posfYuI0b5hG|$i#;4tG}(reV$Gf zFK7!>Nte($zxqmHl`y>cGn)Y0k=1V6p(;cqD=lE>Ecl3Fifd--0t`g19a&)P#W2x< zJ(qULBc3pi2~}Q!Q6u)_vGL74>-=4A1FwBhOw#vzmHCdhX=Pk+^0zE&^sg$C)?V@`@n!KC4%*DAaa-DnE-DU7h z^9Gj#w(X9?9y=<<2jJesEYp}CPR>pgL%cl4m@JyNMCo2VU)hMU$C&Tf3gjdB0O7EyS&hI6BN zs;eyV(j_eF@%Myejp+C%bb6E2i=9%0H7Z+pWQ`3ETjmEU#FUb*zpA$=UHfhIbR=6N z+w70_OrwR%kn>AQd$tkr+2Q37#!Wz*i4}C<)W71j?=-)1__O$yLw^99d0(qQiokx>vv|*^rL{UTPk2z;d_iR}$f(1^qrYsxGW^+kCjhPe z!j;)3+3CCS#=lJe-{3dJP<=DH<#>~-S1y`~lWuQPy=}Dtv$HgaU%i?W@cIDwa5BKX zsP1GyQ*5=yVJ_3O5`FiY%HQdZ{}{VJuRCP?Z9%^Fv6l97l<6n8j}+uvRase%Ptco~ z!!2kW4e3|iMr!&`(iRLp)~OQk9-%VB_Jj6kk7_2ef$xT$l)o6YH3QA!9OumaDujyjr2_af&huy#uL;oA{Cx z_*_iqk8Op(0R4PL!j0Gy5FGCj&jqgPHHN7J|rP9E7outOL2Nrvi&hItaI%437KEVx=(ftUhji;_h)`$}KLv?M^O}fwG zq69a0S?X6dVTW7s`6$_S)h8u0;~MW7yHe$RXr!lgi;x_G5^Wyi)lSjrmJ3wi&2^yJ zg0;%4z%$aDO0sKAMq!${mvYUo(kl<|aP^haWyyip1Pe3vs8XxXE{kg>aU)FWvX6I3 zBHvI(O1jW&T=P^x9`jErMfGsf25zN2@a~YS3FYoF}9-{@cB3AXehWMkSBsl?m9U>j-$0u%8fLx!LmlmWK zDrPDGAAqWuw^?H5FeO>RDO}(8W%g@;ZkZV5=d$$+c~AGF4x%=%oTXrB_`>G_lX6mT!s?`jNoi+Pig6*i0{-hf*cZ&hN^M`Epg+6q@8U@Q~7G@&Cho{|#jN z&mB@li@vO`4XJF8R}3EHxdl3xuSrI-YIWufJ=RcCju@LaCE3g%%44I`Ua?l>M{0dR zB&L0|*y#(k*CbyRU%s;QBO34Ln%SP$udVP*x@!ApC|;)=KXW_Ii54)ssR0!*2op;HR zX<8p!cqRK43~olYE3|y58+nm|u8kAYfX!$PPuLY0*J(p=ju>5x5{C^~I6!WqRTdu0 zqhS2*^-2`weyRIKiLzZKR2=|^@fq2&N99D|K^8Ne+Lfx5`Y113lC>=Qo!gqed4)jq z%~Y?Augn6V_FX;5@qo6KQ|>I%q3wr&{n`Fq^B!s15!N@`+~F1$$oV7Lh#D1>2!&pq?^aQas4q z0ubu1IffdIW#a7;94t&aGQEeO9W#|8VI##%YSv^z4kye+HKAz7=*dp{D!13efQwBS4nB-Gi|`Npzpq=ax4?|!hH=h%Q^!Y{@3 zPvO_}WtVkE1|D#!cYc`boa-5LN6E=f=NaTVlv^4p&Tcf@t!0d&{X&z7pE$~G>Q0wS z#I~dHHh=sY6i~h<1b**h`p{yW(6-M3+_hLMsI+r+=y8XHsM!2{hj0G6Ljvvz;kOE5HYYPCVG)Rv)(SyR>Ta zyZ@DoO3o5dCS#b-*UxpGF6teB z@u2^U4u(uWoASt4t@l0Zks-N^@%)^=e8$(So#`w+P#5kNE zDU!w#!SWmnFqFgh>G`K1V9kp)B}uDcD*;ds#$4W-Sc?l#N+%9ljVbq?nDFgZdISz8BU+;vg`Xz z)xI!9{>W7LNs2R>c;}bF^NlaL4=bPgDo*Fc=R;tM=$-1^N=w_$(c>e0wDgk&Vc_ft zF{U>nViSPdbkm9^{?hyY={84d&%L9HHHVy>^nd71?mpac${gl{9G#A`FJ0w4lYqbC z8S9r7wX)3V<0mvNRxU-y5jpzaWfVoSd)SG#?es_( z_j><|Psq+)WDHNJpa(qZGV8g@M6~__G!H06#GHa@$UF6h58MlcZ*yImqnT50$G!8Y zEJVr*IR$(_CP*%*&bA)tMUtW2J?giAX*ZAlkVp?*XdoZ8KMH3}D4#Jws}b*#Kh+M+bQL%9!7@1x)|A|?8|mbaXbite^%m4f6Vedz#(ls&xeUD#wo!r zg$53DOYv9uE~HvM&SfSgI&_~dBa4pEt+A3`Qx zyu4=sH3wyD!^xVk_bvu8u{57tcU01JAA#Lezdu0Sl`j3U=+`OipDO(%Dq^_xr}#D~ z1z4-RLL2^NUA8LN{-N}v+GbxSN$C;80(!)Am!($REn=nXC_unL!1@KEb|lG*CZwh? z;}2l4+c|G^O##}4)$W&Svn!(8E|Uq&sQSsOV&U@0+-7;EI<->3ZMfM@q*Qd$Vfq5YTybQk3R0?-E3|dd1uW=Z z@0G#hh0Y1MBBF*W*WhCK6t&d$esHeNl(wWvLrfrAQ>zzXS-Uec*OlQ>+GP4+*b&J- z%_;)5>tEnTU>rf+iARw)4jZrPd0jXA)j20Z&cn*l=^DuTL4^-tQ=D6|kO^Q>mfHp4fH^%tr}+ zA-lW9Le5)YXza-u`HOq-%r94)^srLHcdfrNyspZ-Xne0ceO3B!p*xd{=rg54IkaW9 z@xgICj%U5Y@_2>lBlLrOpU@V~G8YCa|McO*6+cpUs+il!T8@p^|2)|L_mhix$O#P3 z&|?%ZW4C(qT`n%4SL2%Y74VXww$@r~zPLutaEo-+^2$-Aoq1vTgMxDLEBn-1C$=tEK&@-aJVYDNl^i1LO1(q42%ldHA~VmQ zN-Tggev(`U%m-q8ax^+?11giYV=-&hKwc%W`_CCqKk6JW%A{?K_wZ<%k4AU@^Zp^v z4f8zYbE?$f1SXS*q)!&BHu%0dS-gD;u!?@mVER$}xlJMWZK*L#68kl?Q}miG>AEiZ z^iBG`FODs7#kV^RjRyzb*PwNcF|lvb?|&IljI=TO4foChex8ON96A(sOdhWYVAg9K^b3_9Dy^F@bpAi~-ZQMJtos8U z3o0rwih_!O4H0RB2uMd!5fD(3-jpI8l#)<`*br$-m6o9N-a!Zu1nDKzgdV8@0-*!~ zB!t|0`IO{v_Bng)ReyV}wFv-E8rAp(DMyRdrO_M+1nvKs2RFe0 zy>h3{%hUuTFV-dOv+Wf+sv^|{6U^X2l-Z#DaC(KJ1t#|`I@)H8buJ2kWNC&l)K|nr z_ANk7nO-I{DO#lBK>iEtXW3V;rQWdS4nR_4T z&4|}gUBu#8B#qb-)c71z5OW1RDck?Q) zht%#bW6AV&M%EJISS0dSk~|Z-z46RO`^ z#R8VczC$i1PU`cQE!Fq>T3^|rw464Pl#-H?94@>&B45UOX68|;6O-4bEPy{L(=tR8 zp;VEppbRk%T)?->6)%lvt3A+2*EKh?3Hhu&cZvqi*Rd+NqR#Ux=``-PL|Q+Ax}&2nE2vOHXtpdijtMv$t~yAZLBe_Y)hv z0G!_+`A(5-MP~B_Gs4bu5`}YxPtRWp3kg-w^76l@KhSJ`U*3zzs+*HbX|HztuS^Aj2m#JLTP=3Amq@#RH1o=qdpmze^?j$ZC^QO%)We!r?GGiTr35$W z6ugFt{vg*s{sf%M4XnMF#)so+pJx_y&xF&#B0r~S0tcu3&|&}RlZ+1Y1zX&2eI6I@ z7~Tk5m|A=M^KIoQW=%L~8pR%b=pU@TcC<_wpPqKVq|n%_uE8P!mxV1$4gMRctuL0- zBYT6xK5u%Y=l!RcawXmi+v$~`Cw@m`2goTS^~jT-fBgG}`Ej*nWSz94qKw3%k4yb+ z`FjYI-D(|eNRUpQdsRvgEYNWZN#T|q3{cw)OBa`Q|Od6Q9NCV`~J%!x-VXUBW zE|S<0@w`m`Ryl*S%njT5=$BvqChcdn-(>7BruLh`?};e~suP11A>i=aeWof!vwJbO zcJnO{@|$=ox@6!l@bZSNQAo8l{!+S9kj8iSLggW4RF9z16ieH8M$#@X+*Syt_eHL! zCR2My(RI&W`rsU-4eZ!t_cEjj5KB!OMx*%k?ik%BgQktUvOe2YPjJ=(rPJ>i$(67* z?J<5$p0G8%X->oIK~d{%*R59pDD<`FX!x{=CCk;BUW=a_V-Sz=z^tZ>xU?rUl}F&fa2cE@62@Ai^(7H6-i#ri3H)X*W&vpk41}v1M&UE!jGY^JF$QIAQqq%A(xu}JcBn+cvo(S%CB6ls+A{Ha+>Qz%p~Slzd{Ib^l}`s45yPc}fHW3ZP3hQ1a*x@i6N+ zf}z%NgsGAN)c&`lZqF88e-dDFVBi%84; zoxKq8%!Fdbv8$W>l%Aw=qX22u>1gS>4*Sl6*6$RwvfM!d?Nz!z;NCaxqSTpfv{$r! znx|yxMSnU*P&E;q>S4K`?UK_|4nfOn_G_^Q2r0Wt#F{n6Wo~!|qSsSsS*QkV61eu4 z5z_hP1MvOV5dznPnz!=_J*T}~{iB!Jqf=u;pLn^t-kMU~Ww>Dt)Na^)nrX1zAh63qfp}UB^ zsXfb8GkhV(GfPebiPpS0v_|c|uv-!q=tGx!78|4=l?rO;!&VA>LE>rwT~Cr4-EgeV z-K6G26ylrW#(11-`(pb!n^M>lxL;s~9(+VaZ3YKKa4Vg*)bomcHjRkYZkmts^*V&{ zj_lYepcrOM8nMSCn$V3k0IG6$gJ@m-gLY8JOgzKsTK2|ck-5f+gR&+-&AMF=CR|d5 z&0}6mYXN_liGhBbWZ;TF`EyXA?Ok4R zW9H5IcT+=wjyW}g$kJ0lC2O7f-9OuL03$`*mtlNConNvv9+GkuzA)$vwBIfmn4hm; zH_=d2tIGsb)Dd#Qf#?}djCAIyhr|q5_Tbcvm9S~;D4E+XeQ$~x7c~$L31%N{B^*qL zQ!`3$NV%fS=Svhz%1FgJMyhrhHoz_K&uQp723hsxad}ggB&k94tUV1#$U?fyj7#*v z!~55ziX#Z-)F-EF_m~1|X=YC?#zm~=y5oyxPAmGZ4T8(mFAr)3p)yMcL861havVS+ z4T-YIj;?p7x}Osd4zZ;!QRY1*tHly+6|&J~F}sfbh5i4-)h&}W`#lu;CT+u6Hsci9 zu&3uqBb*ZJB2ecyiFb;)f3Nq0I8zz1TIZ5$vs>%#FxGxPH}QaDkKj|Cd6fe?w#ZQC zMThwBkcV&9S$Yh3gm{)+<%B9la&LD9H`H2(mFnFoSqu*1hu~FnB6~ZX{B&?e0V*NXK5CY(Q|rv=#{%R}D)ZgCQeS=V zn;>|iIPYj_arrRuXB%r!ZtzGtERC)jb*6OA_uG1C(ThGdY`YAoha8K}6N>r}QuhQ< z8P^uyFhUfcDg1PxY~_aNLd@kuE{VX|Qf00)Tn3b}fKkV#2Av?iwuOg#XJEd`G!&Dp z;^us-Zo8s7j>$>oR*%)Dmu(0D;O3#+j<4(ePlo>7GJVm=#~BXmMJ}^Ti|bhPf~xXi zrDFpTH9*H$y^jQ*-e{Np;>FPW>2OWkX(N))TJEF(yQr@JYRlESS(0Iv8u$L|51VnDRRSNCYcduUynJ zxOPLPlHynA+rXMb!dkp}%5Xi)2$|Wfvl@ld z0eYi^%Yo%q>z0tYU!ap9TmR1y`;G)fyUw(zLKgZndwU!kz1W=l##%Lb*{O4}#xGbR zH|hbkVdd3+k$wE;*7ZdKO68rqM}Vw(pYwZXq@P?j6*qRAq>KVtqR- z03Nu;jTd_8mUi(9j{miJ1)+q-hi9-b?i{5mozy7g+AP7MBaL1~yN_{!x=sMSH26zb zT}m0DGbLDr@W>%Awo^b=J-@J9G!B)XdEs@ZfeQ|U$UMj{+%{>eOc(D^JmzdZhZHEz-We0dcnjcm4p+W#1o7xD*p%>GsfjyoePykS0XyZA z1V07A3nn(Ouerr9M$V7q&aarvD8dHBYh&@a0d$65nD0_40TDQ5m{ccXuu_pY`Z7#k zJ}@~*M&r{&C_JdazFCY{z5~^t6d*o!%eiq{I|6q_m*~kAuk}&09iAFm4N%Da)0|HJhPpj$MW7bFqtUX9gDx;ayPpGnd$8NdtZ$d52@+w$*pbcQvePv*}Fm4KWWIs^EgS-!5h#hMb}3(3_RLFhN#Rl z=vXhZ#p8ai%;FcO{j6fu7OOkRGwF#@!!jDoK=RVV=02Lx-!4m^BbfEiK9n^c|LUpT zC`yEV3hQ&JDHU}Dy0je9vy^!BDVh!wJ`KL+>sXxoKw<%UW#ieN)%yU&R9DR0+j_+x zZlhP+`vm(td+($@zNc#D4@zq+eb6ECqnMXs{u(;2zCNaun*r;s8Qy;0rQJba8xj&S z$7I(mPS1V@u`suF> zU!&lbGc;|~XMJbFkRLZQR{?K~{3ThhgMrQj3OY}kxO^X|Ns)bK*Rq5B2Eyy+Sku?S zU$8XMF3uE`i%&@u=f|OQa32h45$L_u4MSjzq9KXceVWVkKq+`Uq%?0{H|&pSNw%c1 z)B&T$HzBEp?|xM2oZ6xEJH%+L7az&Fif^de<83YJ3JPn+=c>pCe30GS&HrI~1oQ_g z4x8>Qv0BS0+=uGwcec!EaG$&7S93V5T(|whm=` z5yN)a_I(n-is`RAi%cBE2~^XJeiGf$qZ9tGfu^sE4G^@AanVTWer->YOH& zlEqO1TMe7-SncDRL!=+g9dnz6iozG4q zh)wJboJgs{uaUPF!WQYJN1k7TOqtxK-xi#Xs*t+r^ zlpHl1&M#HO&WUWhPrdnf0b5~YQhH;9$-P^kkj3LLYBQc6Z?_r?N z%C77Sdb+EC>X{OYj4OH6q+Ns^@EVC54p24}${wvVg{ov2T@CsOcEojNhM;8`jdG04 z`}=LuTxUEqeJ(x0Fw}~gLM=?78!znnYMc8J=6n3KtwIN4UHI$u9)-J#nq|Qb7wXOGfWAn7dzrE&hQ(YMoLlx(;VcH z!`1$Q0hd(t5(89K zOY#S?yNVqjn^J)VPIV>LaYiJqw)vvdDC>|I5L4UNT^t_i=a}(6uVCAiB`^`m>oyqG zKDs(%U?optP3cgFWTXP~nI&=F2!rI+2~ zvI`*J`k|LOyIwfvLQ3BT!+D&VBF-S#R27|qkHSSZDcEsbHiq4|c<7Yj$Mz>^G zn7(qpv|g@4>!AB@ww+aiDC2(GOuFph34jUQAs`#HZoiQK3+x#6jkV8FHn*?Wi{@b> zIyPkj*0R^=B<;{(t>Gx2153WpaE5A)N+hiPNV}B*JJJ0M)&sH>INhSsS*k>&eGifyWn*9&H1< zDNSHeN#5hz`8hIxk1nc^*9t^{ipHaFj^>yR?p%@`=g2W@z2-dKsbSJy?MHmR{3%vj zqVVo{8W_#T>(A+5+uf2e|CU zKfe^exeiyYPN13VZK)0~OUBCRA%sv~loBF=A_$Y}E@gl>WO`7SuH0|dVgwP7AtH4_ zRf{zC^sEwhltm|wi4JA$vL`+Mj%!=d?Vxa6rO;$2TybcprC7DA)Avtnu`h}iJ52D1 z7wz4;Kh3^VccRz3E!5?`BfTVG8=lb+Mn;bdjx>pw)&niZc^d{?ksM7{IU~nSUegL$ zzj)F6T~TPikXiLjFr`cp$0BWu^;%K&eDEotr<&Nk^~94s^e3)Y*!wsM;mT?!LAQL* zu1;bxepSy1HU4XF$72(WmgbB`a-{Xn73U5BeLzeADC?5j_*ZT4=_%adkNidBt~srg zp%IXyYy*WEQDE>2l}cM+aRmJYO^rvv>lz#I2x(_UOGn)9R2>44=2&Pd4RO z@9sNLns;bj1=b$W>$fiZgCeR`U=`j7lhznRMsgFznjPioB8?kD>nDrv1bpACXz|^B zdC=LX_b#|HST zR(9H}Nz@Me$|0WN=Lm7@SCipp2Exe@M0tMyz^XIBc(nd#&MIZeWaZ6Kbv}On!sw2n z49|SOtK#2>Dkn0wAgurwI0r&;(E@6|7xFR#@Lbb?wTV&b>47_`73)QT=ja ztw<0loi%b%kZn5#`{mIs73*lmApZlSuuSotkJ!ba4IzU+;3c!GJLiTYp+FjRF)lZB zJNS7+N;mL^P`0v+PyMCXQU6xK5m>J$qW zZJ%F%pKe?KdSi%kBGXsF0U)E}{eK#GZ3P%_`mG>TCRN!QKzuTw66)>v#S7W5xgbrve|D)Z0#g8Gi5EZxqdU{&Nc-rSbL{Cznt zOMAAB6~^^wbO7xKiU?yY`var%O_yx?N3xzXsQ$)6m&uyo*sc_TU*U=!WKX7LQq|UeNJ7s^SOuYVI_;BN`mCm*d9frakCeFab z$!U9VC4#2@Zi|uFhOwqd7KuHq8*1n;Z}K;<9b>**TepHR{tm8CXrsrHW?$8bt_1*F zmOj|8t!w|02(>uu=W9KgTKZz(D-klG9SG?t6&+ zh>8Boy&LobURb7`Ht*95?2Q>do8aaoJ+S%zyK%sekmkY7rp?RuV@d5>7G?Z5+D9nI zRB=ck?P!rez8)P@4`A!(7x_K@Jx_41^8`9g>ui9s^T)f_Fj7mFb`!Sz@90^@E?b=Z zS41l>_)m#<{SzRbyR2>U_34hBhn25x22}p`k67R*@~?Aw*7R;|;|d^hmp+|45Z-?w zM3G8dy1AJ65AE;f(X3oOnZjpv)zmn`^ii`fMuG02=TxC?7QMJjyZ)6jR*1QAUINET zB|}|DKggX&lgBhN_0M9+b1xV1a(lPl`jPoc%>}bRc2P57tAT~z-cNh(^l68E95UBb zT{Q0S#Jt}5h6a2$`+@Cip4Xq!&Sbp2aX;&6Ow7(VZE^eBTxUK6z4(2f=eghSnLa{N zMVI=7XU+xfzBCQ4D_MftL)**1#L6@Y(dU1sAkv&X^&@9_QZi4@S;Lpg$l^(*!r%-g z*R_}Qi#|-eIY`J#s__K9mzm#oN~*-fV|kNt+!26=VRfkW==tE~)=@BE zcK}ZP>@^kIYg6dO2KmC2U(hpYRNWO>I8a}J0kK4i+d`u~K4YxsgH7R5JKp^pZfQy1 zSt>TDWp{v?FAo#-zHi3ql5;jq>eE*U6KzGaiQGUsP zqtrK?BA3+itcR5@xHimNNBar_OGSOmrqTX>?%%J@y6k&gLBM^eJ+|p?8Rp%~ET8mb z&g}kgN)LEd&xqeRCD1Y#HYcrY8t?n_ex-~I@(@5rY{>!jAKvS)|FiAQzwHzPVj9a+ zNB)&{#O?#q5$p$OxHo5-`~%wmIcHj=(C=^l*(^8Dpv4{tJMf}2&qDr&!8YIW6G>#0 zfTX7r`)+Kbzc%<|%V~^@0vp>)QQ*%CTVDPz&RxuT0L`R(apvDB|e;}-p#Oh@o{x=j$0y>H6?)vbrd^$-vV5Oi0K26$xL$MBk zNisZt0F?j3ig`lM0xN}dW={Jj;`W$kU+>$FZ9UQQU*E~WvMBVV;AjY{NRREw=Vvsa zSr50?GSJAJ9=<)KeAr{z-k>495Yry=*l=48DwdClj~p}6-uxs_^i>(o!^#m7oopUM z=B`hw8wx&mIa>GKG_r1d->Sz($w!a%>|#*L!zPqI$Te{8ycwX~sm?$t>~j-jxn%q} ztXk^`YHrAfe>D5~9=g1{ss4=(i(cKi2HEJb=7v-aR?&(*3~a$+aPmW!E*~pLI@aPq zIs=nYy#8UrpYcEo=Wd6O^9Iy4Wc)ybbY=-^tkKyznarC}IZ7>VwkevNlUprohE0Lisi+>0piAP z7!qE~S2|@8$ruR5q3gLBa@_}t5`oh>TqP$82lTnTM&kM1DP3++t+5*Uxxhg{mKGK% zFXAhnV5I9DievezE);NbNU%Fjc>_&cuHjKQ!NZ+LH2J-Fl%Zj>43I}6mTZP zM5s7iqIO|IaH@?vBio+p@+6Gxz;VZ;6^BNM*Lcw1JuJ+;of-k05wmc&>OyXAtK(hv z${i^@zQ0tWJUt*mT2>{-!k`hHBf^HQwDpNmE(!haGtY@3NRNu(65TQ;UTxzV*yEgj zdyMSpWIZ7@vpJiv2J%*No02EPj1Uibd84V(TKUs?mBOIKe36x7f)(cN+So^tR`-vq z(&U>rIw*BnMR8q?_)jNnfTc+ZA)M!%TZrl&_r6Y_DWrbGXXU?c7(*(xn5!)B*jPN4z`G zx?rECD4||*ADCJRs%CG_Rq+@)8zM0IvLDnfrQ)RC+cdaPeUla`((jTO!Wc&Evi2g~ z>DM2yiA=Yuq(c!Lt*!_Uz}@fi{3*_!`WLg>-hM6^i%7+$dQ8NJ6XzSXoQqm3W3KM9 z&hNar64tZW%iCsaV0Hv?+0jFkYDiULl$Kb#1)s!-@F{5+ZtK+)%L9hR=9%ecfqkI0 z8$u>aYXnAzyeCiFp0ojSbep_ffzxc<`j%Ac8NJycBXf_h4e=IWbwJHV_)oa9Rp(eb zbRi77%xZc3k5ifAkE!lcikQ`mrl{jVP+J6HfaAP`ZDCWW@VRrBn<7OpHFpgOAK0l6 zq#n6^%3iRX3Q0@9J^=->u1(0g^aN^tLwifrzwX75)lH^NsiQL>B8;k^oXRY92=b~$ zqZscodq{l#J$u5?CCnnrg=Wzu_5!La=An+Y0Q3dcBsA{qHcXyn2;iss*#nK6<(((D zymT;bG*Y3iLZNL1-)fM4?xN+aQnj_2wA7%P_$qfz*E5;}Ze{IAF*K;#T!-bP@?)s9 zho>Z^G1!fj#rASR<*`_~Obhr-&T~D`Xg=H0>H+?qb>0urU<+MJl|FdlaxD-5S;9|~ z^Ji6|(T{@8tK=`Db;KE>CCNu!zkc?1c3yqN(rXbbH);~S>W1xKiVS=Qb+HIcFP^-` zf|#f-=nNgUzI|mh+pTH8(Zp_?Ln)cnHXnr&hR;vpl+-PKk6Xi5kx1 zk2OJd5qI9E`1T0Zid@n}FxIYuz*~qh0xagrTi2;#qqWtFh2zBbAP=J@$=O@_iC#Wb z=Mb)N((6oj6sXr3UNZgi?F;w%WYaN|>A_`osFjMuiZ9x_pzbCFMqG6epX_2(0#1oh zloAsnf1;97tc$81ITP5a4xUQxcxQh0EGnFv7P%f|BceQ>EEm@TLGYM+Bc6yAINeHW z@M5utlqa(i06pzJV~=Gml-DczhGCWC&do*&t{DT#-Jcg}Y^v>)GP$A{(Id?85j0~F;f%@=D!jB)!fh`+2?^%{aDsWyB5fTbN z9Ou{+CE8oIuxP|x*DSW8B~a{eZ;=7w@Fuf~`-Izt6;TfHut+NT1+{_E$I))lb;%iC zI-L%WI2`0SaSl6klFAqsh%H&gwIj1N^rMH7IyPm=?&L^VA>hj_e8JgYvzt45nigJK+7F@D z5Ui1JYxR^=b`m)+#KzFrThE!?aREtD7+y26?2gKl>~K^2yvyPvP-e#~^0j zaYCaH1F9({HW$vks}XkjG_&S4U7u=O8|gqI)JWSsg+-(@#!<0fU|4xH;>t9S_~Hn= zlg_|tS2H?JS$6P(hIQ}b{R>|JCs44mjLm8Mt}T%25g-B0%pC~3^o>?L(dB8~nO*XU ztIfiF4`O+YxWcIZM5%DR4T#u@Xin3mqlS-m+VtJ$uyn)>@XQ<+( z&%ONV>|Xk{H0O+>H6{;~ce9+^VlH$l?Mby}@Tb zd`QJe|K1jQ@r6p~Yq^0f0c$8`!gU8{j8g-vv)jsGDH(4qZbN<4KGC9cyQ_m<$_!zb zTY6ZqXG7vWLkmuRBp7Fb936gr?%5)IL zudutCCBv4n+SX9VR&=1ixt&SaVO${u5`7dJzF;+QUu8=TAEqyEQ@e&J~8?oHugSa4efRIjjffW)TScv>M=(S*v0UWrZAFWd--oB%T*J z5vyA`UtcNlZW-^&zF?8A#mSWFQ7qhVe3pe#*%r0f7{`^|;}E#G!mJw+#v<7m)p@1c zmGHJ)7coMR#zsAZjA6}Y{3&!PQs-JaY`UalPBRo)j?V-SEYFi z_nM=g%L18%tA2s?sidt3_cI2)tGwC(8WEu{yt-@eST@Vc_JGCweqo*NyEUutCfPQ6 z0YKlQF|HU{Jq0KAz3JQ>65ImhFvMCcr(oh|;E;7FK5f1w>6p3vP0QWhh0+3LDJ#u6d7A1qGAwqibL?m~{9OIi# zoC;RYthdD6=aqauBfD#x&8HQAx5pf`wnZzC^ii}m0CQ^$5Y29__1pP$g=)O=;uXQ< z*-g$q-Lb2_$;W-bF>!i|IWamUGhYHGhSvwkcFnGsiPs{ZpA}+uOG=+a1?OvZ_vWVp z(15mVMSg~oaCggjUv?~#faRZkF=qgS_{THGX2RzRs?JM@yqrTDfYVnO#u8!BDWec+ zV{+q&DIq2Mw0!hNyru42E*J#Ow_lqF!>0OY`r18|?>&4XT^R>s3mz}|^yz5su1DKq zo#VG-2pIQ1Er!Wo!j9q_4^|UcdV7g|LNIb&;`#1Ef6>nl8Xwd7IOg@)4}%>qoH6L74J;y}XQ>1j?*YPA%(Ds~lDeeVpIBkStm{NwsXvh;#E zl~gYh&~WxL25Q?~G!%YlOu&y#7?vfkPnpST4i_}Vnn>!pQqqq$*tv1M-O%AB_?;xh z+h~jf+ylr6eu;K>+q13y9+&crm%fxrM%6dkK7FcuLD9greD>gvy@?j3ovXfRrCII= zJt}K8UQ%N(hQ^te-#2$c|LGq~0>#n%ct#pML*pyv@B(ub^-*TU6KS0=MGa z6N{;1(xeZRX3glGk$NjFv|SS} z7o%$3P~9H+yQH%+=~#*bC5g+bQXmVoH%hTMui5h2J;GFX<}&(_9JPF430i9H*Qt@a zUQ4k?3}~1?J(6Gbf+HXt{B_$X;0IzA^8pYhIxUiEe4yc{ALh^{^*8B;MU+Tk9!}qJ zWFL7&rOcE{&TYT;Y}&|q39TP#sUj`N!H>HtJ?!z-eI`eiK{QF0@(!~c<&GO?obu*` z%@y46VRAm>$ngjFdJwjTd(GeVdNB2}1wPLP9bJ%XK*dL`E=(NJ1VVGlUZO`Krx0+8 z*Yko4QS)xS(Mu$a$yjoX=dNiMgOxmUNxjnGa`!v89!pW5DV8?Ckcira&bGG0hv7c$ zsd51)%=eagz&Pl|C62j`5@1>El&SmDO62b3_9+d-ijfxtm!2Eyj?W5kOiJAO&0A`e z0?m>smgYPKJ%%NEE}v(ZdqR>i(ZB`uADJ0@@X|@9kq|QqZo>Gutgn5`QD4#OXcVK!nJon;hg$Ja7 z05&tm>VVV^aD0qvHd@!nSI?;~MA&@({!AbMHY}GkDEGd~W|)1S;hVT@K*20c1A5P7 z=~Yl-NKAAFu)W*^A(!+^9aer8%Dydz^~2={;?Y?HgD^~%MnKkNQtKdEuka=Hcj^9! z$jD*+o=U%6J6#uDP3FGo?iT9q1?Fx5Ta_4eesF~b+?DlE*zHU0+TPXxP#O#q@;WVZ zg}~euq@t2@Tu{Ft+X$WSh}O?ltea7&bzc%6u$bu~^AZim$w1uyimV6;%vHXrUNQgl z?duW=G!o)q6$Z!gKPUqbL!2dQN@FVgvEgDl0N|txsTaOG>jge$8uV78G%kouHPIcD zA2y-r8a3C}APm@W7E!}b>BotpR^tj>JP0Z=jB^a>#}+K(zM74hHO894qQ_`^#5$c9 z#?@F}>S&-y0rnofS^OcJjM5LX{P-l}v7Rvp^Vpk)SkqK_;e;xE z6l`o~mfn$(uE~F;`Y2?#__?S)af=0u0+hDpQblyuh{>U25>9Ucz-~fCO4**PRkN;% zG|7bq{>+6Wty-)hy2%9`)#KW@NUj?QtoArxwJZ6 z7O9yJ#U`Bl&PR5Sa0N|&-piJi2z6;&;D+}03~_m$_BgM*){0f?I<*nlwM6a?{+h-Z zjn)E7_8PY~40400HLrJt-ebH2ziGZ3G z1HMoyvCa25sCojCpNy2UBw(8e?J&ol$iQf$HhXIJ!^Dj#%BUQDEe(4KYpGx`gU(7^ zh{Cf#pyaQg*|UXEnw2;GP8?NsVzaJ%mENaXSYG@?@BQ5;Pd=dSQ=dsn+3}=v;X8I| zOB{dH67w0=)@CT{MbFD2w$$XF%e|oiVrKST?tc2Xo>2Sltaaa~C&GqbZm~!hXHA%j zQ_{i$W68~s?tiwiv>*cPy^(uaGN(n(OEAn{#{#G7L^j*8oeVU(<(quvis2N>od;d0ww`;j;`sl%CAY;n&iYb3wW@E|zIb zKZo60PZY2j#b*Fhp%MIgThHw;fzyv+J#E%^*LAwWH{(lxbH|T+|L@7$F3C0*{y(8M z>FRA)S9m^I$}vEN@}Sr1f8XsaF3g+3JOQMwOPcg1YHsgH9@f2r8m z=97p2=H0$KP~+J3GzNn0Z_!hIJv|od`9#k4*q$^kLF><}D_7&Aqp*;*($BoB!eI~ioXHV=?s3YkJa_&C5;C-p-znnwHwK&2k>`Jt91Pu9%3ONZ`3(dA6XX4?b+;6N z$Lp)QBJxbxfv6fyF51=mFN7w1C$FTvR@(l*dl;}E(eM80ma3}i%xA-`%LaJjfr%*6 z-n_D5Ah%%31$R%p@&kSCL6VF7Q+@5LTXr^f$yuk!%5>JI7S-dbJMG6BCsfG~1-D(} z9~W$W*R$XT-g~-EBsG;f^z;0yM0=7akifR|JgkxF=XH%S-8U=p*tOdA!S{O9-*!?| zV@gX)J#5^LgZn!=@_Z#HHt$D%W2$l-KY(50eyVr)3x`Pp?kTzo5nLAfwVtfMO4h$; z*`Jx|?!jYD{pBdRKc~CE1Mq+=iu^$6$Mk>sq<18V(-@S^@-TYe*KXQ_oxfcE_O)et z-FYH&KiIMLbznX94kdAppc?d!KR>qHCHJ>Po~5zEnx3DDv%$Qf>w00dHI{!nZYal{ zzoYUXBTVS7YXq;yt)ua-s&36T@vn|9jW^)3s_Bn*KeOPbtI}?IqqEE+p?bJwE#+qN zD4o8HUO||a2G#asU4;5q5d}y5tYq;SPLEgw@1G~WZ@j=aafzu}w_C#ohYoyq0)G)C z(kmIshdKHgGdZOZhjeW5B~hczAn3J76K_7b97{*@Xk^FAnFikcwGW!9b&0H^OcpOM$6NZjCM~tz?%qjA(AG;X zT6iyqO?7{c(u;UqLjvDCYhPOS*rZTXvj=%|_|;5M1}n7BhNM3nHyVF~lWhwjj}ck- zOIa`{EWdYF`h`R;o-&l(SeK%bmsK2MuGh>tQuFRzcvY9eQpm*hMNjd(UnNPCbgQ5H zxyJq~F)??GBL*p!tMC0nc~7Os=EW%|>eTOnNu{4|REo^V{+K!~BT8?_U>@-G`E~G#;BRZWNYYH-adj%4X$<@WtWu|Et zPIi03#rFG}l|a8IzsRgUBV`T=bhvi521tA-$Z5y;rx?y&?4gN?7AY#do}yT@I~L(0ym>d869!tOJc1)+A@2ZKyL zsvo{bKv|@RrKo8c-_?>BeSU-?S%8;2SXJ%NeTahR;+OGznQcZz*c@rFRE+k}8^haf zV4uijLblj+{t-QiyoNbFy2eIIQyez0Xa3k|fnBL#gY`w!y;51Hsk>i}a=zuB&~mRZ zN1jN@Z7>qEjN6Kxe)B9l4R}i!r+}#qL~P^TH<)jHZl|JxnQ}5rufMj9L#8J0UUWxV zWrXm`DnX83 zZ9pzQ5x2Cw!=BRiaL}({ke_>o>2P$v;5jL*>LW*IEd~pNYxf*Dpc^RhW_O@e1>mrO zrDjcmZ4_I}+1;UhgPMwbZNl&z&vnGn1}3Z zj?t-Fq&BMZUf3a)!G#jh&+N&W8%n=?OSjNAbsvFvq(|Utafc)>$guSN{`jERr58J~ z{c3mLy-B_A=+)Jc+}9%Tq|oS^lc<#6T{daFbbj3UWXe6u3FuBmHC8qjy1>aJeIWvF zEzP?+4|^Six!k?zr9(VYCX&Ml4QY%*_SYpNcOZkHge&a+3|o31BwxT3yN{{m9NO|S z5Ei)7Owz(_7c3+M@&Y+@nut>^M+D_18}7e*Qo0s=Nkx%1QESLNIben}B=?$rBYVg1 zLHB&lsWH$Ks$A9Qjj;uHj%%??m}LQ+mc>CKXL*Jd zO*&b{&suPsmEYovGo)^gx%Dg)+m~ccXwx>&%X>G^X+_VEPP(3bFlGWn^d+VqaG?y< zV-P3uqZ+BCrixoz89<5}u<~o9v2KxVR(^KRfeyw~VfQom6K|FI9Zy)(a=U-{h0!Hz zA;x?$1FjEUjB=_eX038U+4u8861YRd9BC)wv-#kiyYkN4&iet!fG!sl6qNV`%K8|8 zZBcR0eWE&Go1N0d8=`j4?4oJE;hoXko_h;-RYHRQh;-byblJA=x=9R=R8vxcZtStM zxIm)XfU35YlE})wk!mbdt!@vwD_3 zC{)XzR-CY+;OOG(=%;P?ptN*QJk3#s>@PSexVyu!&%wkO0@-lFU z}smqE#*J{@t^f06^c`o-0u+Y95W0I20nh%|0m+swp!qqLB=bDpL zO&9*b*)FMqaIN)*3iMW_2G<1^9iwqk?u6g@E!fnIamg>gw78{zcz-xrO#`BCe6dEK zPCDd`j-Dwm&vg3WwUq3a50m(-umSOsRS%66;|&J#Avt!!3gt^>9Lfea3eXEuMuA{Q zcUA@STS8{mT16){(k~j`H_*SfC`wdt$5kZj6PEQY7!!$~!mQG=qyy9hB*vpngia*5 zs4+7#emOe5sHNg}sQRLZ&$#4x-s7z|IY<%f8fDrqhkYB3@_>f6BS;r6X5GrKxSLKS zdMs+vNZI<<dTxCY}98>KZYhML!AKPsOz zeOf#}>gl9lO_lNU>ind)J#Qk8d^EmK69;F`x!FINocp039gR99cYBx#NB{7lVp(dM zK!_U8v~Y7~a)p|IfKZjG?!#=OkYUj9YxBk{ddt2HRcrgF3=t;=hI91a)E&&lhkPL% zVMA*zB&X@fzL3dO-79HEfV>P{mJ1o=?o7?@ORxilpkmo3ES9H2KF616IM!Cr$~8?` zzTt3BNbTbQvisa4F_aZ3(a+LhGlWQiol-F3ut3)Ya4urI$ z=M^aG4w4mmC|W3}vbJzrE#KvEvT~^sZQ|%-7?Sapk*?6vecaq3F}LL&HJlH3gro#U z7A5L8$msQqDj%W^=~7WBQ1)qvaF;xhnFncN^4fnDI&q@MJ$T-(ec8Oc=Y(2Ek0e33 z+Uy9%A6>J2S)s=?KJ8iYD>!LVrKDsez}c`!LCf`0b7gMAyh5jXaIXC2R|W!u8Uasy zXOB}ygxJP*2vo4E#@k+6R0`>qe2G=9E;VB>`B!A)ZN3b&HmZQRv>K)^Lj4$0o!+yo6Yepchk63Fd<6ukcHjrg>{(E zNc6T??a(76+B_^<743)*zL%-0ldjkA20MZ5UAW_`vB0mE5`;_-u$n$0w>UU2H4rB( z`DM2@_5NJ}Hr*+%+j#fIy8{|2jXILbXTO|quU5_T$yuta=3Z*gRX*+?4$o=1;C%hW zB_XgGVYh>Udn-3y#pm_RMGl&poP;**e2l-VpCV6_0h_p*sm|hY)#!kv0L^zAScYt_ z430GJ4p-G8z0)+YdkBgIGnEi`W7^5N=qkx%%Srt*%isAE8DJ7ea!%33yOSk-)Y!KX zVDkV}w4?R*t4-k?-Lb>70%r|Fd zy4uk-RGz`C$!c z$Q$H~fN2{0L^!;Jzcg0m^sP$uE2wOhebt*>u5Ziwr3p@h&+UQjfsFSTL*aB;=_ZL6 zF8#PX6>v?GNb>x6A%65$37G=j{?(L4n)>JspHv^ZmcA8bt^qB*#{EIQxoZ@%Yai2~ z9ueuvjGDaFVm-m^+hINjBWyp9BvX_(hAKuRbkaGmlRl_zM&a%a_U}0-)L%rY$pa^ipB`t9Pj^XD?4T4 zNQ}x;ec$K0v?QGIp({n;&L9~sqdKYuL0eh}(8=@O;W`F7k4w3ry8;CD#a}a5+#gzj zmfmEl^qX+YPRp7s^$><8o5K75$nM!3)p9QlmPlM06zwvME4y+b4U#!4oQ;dD>87(= zDva7-2kgadyoj>Mle)vd?5m;S{R+WywFRdmYBxdNkMh+qjr<53;E50S-E9p0(#iPS zObmXw37p&>(mx7q+|zU_&OfhNL;ao3kFQEnl_QK#mD{>9U|s4yf-P8Q;kNrx83-j- z9ix0w?)oK0h5m`y$Cp!$OQS`eHR(OCAPi`V7Vu7P)}y^nyQMa7H_>jlP*=mnhnTQuSJ6Hc*FJ;81z%Mtwl@yBF%b zgbJ;Ac_|wjUZ`CGK#7J>{K2Lm6&p9pb{{gxf{dhhj!|ML$}eLvmET@xEQohtZQ4s9 zUK*>Itl^GKA7WbW^UJ6A?F=H7mfw-ZE)%(0pL)fBu0Wr)d8~m#dGoSs^p+qawplEU zjHt@V8lA3$3oOKhc(?v^bLHE#@5dj16xL3|cNlMK`q^C64S)XB0q`VP4mj#;wDT;i2Je=>qUIVQPjW2Q+t3*;mOuL6N;3%4~o6GK3cN z2rK^~K>Rv8|Ke)Qqm;6h7nkM58%Jfm#i;uVmmq3m${CKw@{1Yed=K?0^TZLHwFuM2^UB;lRcVCsY?y6G`d>(vEE^Wlnr6!ReD}u= z8s_!%OvGGC*+H~I7|NwhaFvt)W|W43*Ok@f4(7%B5JTG4rOaOGt+SW{K@QeFQgG1S zbc<+-!uhq~graV?K7$TQ1jM3o-l_||azN^hvy`Qr=e&!6mIS~#6ukM%;zE=}g)D6u9-n6mlV6=+A zyWEzs#Kst`)esZB*SE`gmp;65>i)pjE^bY*YW`P=#$rP*fd;phJsVh06B_%7J;MlO zJc(4djk4q_tqOAPuX9&#YW22ARoQe$@|sdF@@y|7h$1 zMk4@t^t`8@!*e~Pd+TULwD~E7+o}*e%ibYbPh%r(_Un#`hJbi&!3LmU9&L?n6P z&A+}du4|BGYInaL&XfFaMzp^kF2N0`X_3huSzqR_S<{wvps>ZWv78yPt>Q>=R#2wy zb>LJDW%A7Gc%zACUgis$hI^2pv_0&(u(SW-1T_miuGCz3+b+S!>!vkNX#Y%^2MW10 z+nF?bmCvM^^f-XK%(r7RK7;hew!mK&4RevTP4k*E-r5F9Eh@t4}CtHyhQ^C+klzR zrGf+2YxAk58ETYH9| z8ZSx~px=ZAFr}|5pVJebw1Z}kGU?^#pVIp6S<+`TZN*mI<#MyX1|MqSj9Fq~k235} zSu^gfIry%y(x@&mLIo^$Eu$KLX-aQ@-n0Mpa39lnR$I5`*B8DO2j4X-wg}^Djr;EZ zOdxt5nQdH+#YM|sDVorac#g}4kh+X@K^}Hvh#;g9Uj$gM< z_FcTxuBt?%1F_M|w<~ARjW-+5swot41Jf(KZhocfPM>=`xAbuc>HJ2ivJBU-9N}Xt zO=cpa&Y-eoBl7Vid-%wt=<5Rw$z?`%bJWGF>0>`+RJ$C8#;>4w6pNBgBvFVf7m|y< zbCgF{G~eV+^STCV0B`@Ku_%5JP!(dN?vbG?wv@6ve|UW z%ED9fq~qKP4ecZoL8JlT_oppg$9I`=legvhnAeeA#t3yNJDj~sG=6kkS1+z8Ezr_(gW8zEx!~#~9zKXpg2Lct- z-wu)WDWae%2L`oD_Qny3G4mgH#LT|ECdVo3I8s~Vpa)AN;tXTdnj32F7}U?FOjcyW zxwvoquxWM9Dn-(@YQk+f&3j_4e$DI+P*s-ZIev#DvpkpwrB-f8g=#OV~@&aq)NNd&3J5`6w3q#BIx(GeM#r(4GZlO*bD-t&gu=W<_SXB3r>UXdJZ zkto)+7=jrNDdeTk0oXI2Ox*mayQ(x7;cTG8k{dU>RB%C9DOz{4Ot3{vT-^5u?vLX0 zx8BJCbQcPI8_Xd}`#KJjOlMUm#amkUOW|Mnh8TtlD;Lj-2ehk!y3cf-)=MGIJ~Ggo zd~{(cwdn3S&CMe2iG1~%&3%*gPYtl~ivs3`OEb&s!lFU!eZDm628JJ7mgnLg7&Y5o zUt*l;h}w{(z5CF&$GChs3_^%wC>1pxP5hB8dq?K$hobv3?mN6gjP5 zOIqJ84#1dkr@7Q|UyPSFf^?~RtOP(>PG7jD535>stQqttq{xjHe%LZJvZVfrYdC_naYCj#2Mehj!POOioCp;A1*qRflPmI*VGGV*}S6 zCNO1QVD;-QgjrJ%EH1guj|%#!;pQ%AYT^vsf$AAqP!OPEE@GqfZ4;1eUC{Zf1KGujFm${g#w^ifA1u8@1!q>G4KlAe9)f80jCN7foR~+F zB7ddF|sKPVuXZ_~8prgP?(Hn5B}WimYPkc*vdD|=~gY9aGvq~06- zqL}051HyDM)5rPqpq_S_5gl2J(UQ}fS+g(t=X2R}y;|QdU5v}4oDry$zuZc!Vo zLR~AOb8mRt6Gy```1aagUVv)J6)D`9%E_ufcAAGi!Yz5TQNGW0M^j{to|?rgm6fYqS8Kbal)Be-HK6SN zzLQC<;oMG`lZca&$69-;b=saDrN!2IuB}q(o(Y%qp8g3?8fKfg;q7Z##>I5!-IH0_ zAB!D}eRb|q_^`St%D!UyijiD~0dB4Y#qo(-8l6UE0&%3a4P`3heg&xQ*7`;mxWAf< zvrHQ=B#_~k2U_rT2^^u;^g;fd1AqK|{o~Ny4N>3x{ z=Q!f)lrlo{PPg7RwmhDQRFTul6D{hx)t?j(&u%x5q7%({?4CD?Yf&h&h{%7Cdva`8 zyBVuK0w{AaD8HlPyOE ztnefcLFKJYWL~wd5u!}9vW!W~jwaf+*mm-PCJ(QU^Y5F&0&l$7D<1vu*YYAYU)*91 zq&Du2Q5n@Yia(WGjcKW?S7CyiC#ZC60LK%%e8gOQ4)#io{a+Z5GvlA55tyd>|J!o zOE3xW8F)?^3B{DUzA28dj1}anm%ECnW;OO4cZcfXYW7lAXE-Fk(Ot-WBpys^`Lp-4 zr|~4~owT5K9|%14=HoE8%lv$;PX@jS+zAQlxjFMdSvOMn>8oon`J1+RrpYC&nc7;G zUvh@*c?tNOFPu8rKkaHmw0w;`RpwPU>OcVmQS2Q%K1e)e5DKYU&+tu^^xb?K&!+jt z(O%EB_g471Teo93;p9TuY@NG+s7znip%3D@C8tTPf}ftVAfZ1Lb|^PKY{yTOX%ukj zv;s;cP3xKa+ui6*M_${~*DBbw-`e9GwHynF^m}FN6Etg(J8$3k{SmFk(Z& zEL-XNdj+Ca19#Z}dNO?Mq)*XnH7>yRjOluDG&|Xn@&k>qkos7idfRz8gQGiEx1H@e zwcG;Pp+c#26rxIAaxRj-k#H7Nz6~*YZz_|}4qgX6ZlmNgB3I zgBlv+Q)eZtFp)mf)79me(8E~?1-H~lotb80k8$2P#G{p;kW)gP6_nC^P*i` zl{Qb&Z0g7RAy)s)C%!2RUQNcw!q8pIn&!o$qdyw^XUujaczJ!bO*2HQtlR<5>nr1t z5%R&PrT7Cs?N^094^5!K*!#1h8yOaTb^@QZ?e9I)&DN+mcNyN!VGdL*-a(YturQsi zbPrCR-pqbaKT&Sj`!#p?vpQH$MR)zmK}e)6E4bT-N_dc0Ww2(ZPp>?6eeEUY<$*J* z_Bp@x1;JQk)-k36zKIzvjj*EYa{WIvV?27B7^CD}T@)d%^f-f6Xtj5VRIW*QBO2q% zCABi9r{mW=AHtL#E?U5ukndi40{Z*lAsd*0sOIu`_tzaN&5h5^v(W)t59Ks!KL)8? z)HMg~jJk~niEZ?9H}G;v6s&J$S>sEJs#DDh3T61I7(qq0`jv__W2Y%glLHkV#I>3S zu7I7btcK-qA;ha(sJo-dP*cZ!>$$nbe(NNLibGs!@$%AJwTJuYLGj_tXt_CKf9Fvk zu^_e)Gq~1qty-}}&@}T|k%8c7D_c}ioV%uHom-h_Wb`J*(z zkDqlb&Wo@jU;=dH5pR|pKw=(MoxYr0p}=t?GPBu!^ zC>5z2@$o{=F+!54*TD-lXS=9l8?YBpE{Qw9Wt4@^tC?folIqcH`RetgUMC)c0z0p)5cs9 ztUFKZORfr!nlJ*tMo~2luea(>hO5w`lw5ZDrh-THqPEka4141h%qytu*l1>P>}JJa zY*$K3L7VQ|;PbHan7*=Et=L1%r_`l7{~`q0&U=u`BR~Og561Kf)o+f<u1ZA2M+7M3ozP#k$PI!kW4C0pV7OL z8wy!lpE|L0%XsqQ*$hFo1lHY2b|NcQ)j2~-ru}9RlFX916DC3WIh1(1>kD4k!po@G zJb!se`}++x5e^`|$qPAwCmIhoFXUMK9B1E0py^3xZh<@16 zb*UYMxiu!Z&9HUgUt9o7%$}D)Jg5Tp42yY|(52OY9np;4|ZvMiwW29?CS<3+C6 zK?FS_RI|86AniXIy#Ftdkl!6v@ux-0X#ZMBS%^N)A?p<|2FAb>ZI@5j(N=}CWu3C)w&bEOO*idd;E;P+TYX z9cqAEeMLKEpVoDu_zaKYV6cYdZD!Ev$P~3_MCZrAw!u6##UVftv?ry-E_FRy*;AHm zoM~-Y>5ZzmKtH7Lm82+d!#@vI`l9=$+F;ZBaxu+?A|I|_3G=$KqkZwCnv$Y9qCREd z>_(j6J4;Y>`P@V}B-=fB@ZE3{v@qV*CGulX&*+S6KK;|id{99h??YcL==SR8cXmSg zJQ&xUskw^WK4LjpKXyKROaT2JtDiSA{UL)FQT&3~Q5DcW!3|sbB)YAURd!7nm)^B#8PH7x!t^Y>g%DNt zX_ML}<>~OZfKBE5NC?lR1{LggPC+8RrlhrE-@MR#B2VA~3_#8-n7jfS{E)tN5gAtM zJUPrdrVVXXoQV5%9nAu2U;;E`MSt*HYunmivq-LO-I6%aerxA8M{lyZP@^Hl%+Zpr z1@$w&Fs*Yr7A{|L3&b9IsU6sWz-gMh=ktxmUt`BcP>*|9DC97CjGG>GS2J7uFxk*B z7C3_J6|Q=Nox5jDx69|h9J_APw|PdfHms&Oo?7mTOC;Q*?&Ll2MV@o+hH=yQ_H4gl z7kt+yJ9^Ry6nuL&m>b{-rECU_ST}mbU8fQydcRSewB_N@Wff_rJJ{k>UO6POiBD3v z1JK|xb=?z)-wflwt2kdA&{!cdcdp-h*j;=w0qs!YukwuJfzxLP5yz&6{d|yPC$zum zed2Bh#L|xp#OB!jv%AXe;$5t+Rc#v3#fqkjQMBAz2$`kZl3yGnH>06)m(qo8Pzxi({JjvIK!xo}1@Tqv5JSh@p7nAcyD~*( zBTrB$nAT#thTj6SnUp8E+J(`u9oH`Q^$FNdjl4X@R)`wQ^xkUUozn&?R6!q@IIPiu zR9F4c4cD=1%PORb;BCNz055Ud)O+BvXy1sLY^gcEW##1;9L4Gw>x}M3p~n!=wg4yj zoCkUJD!Ict{7U8M&48%3d4T7(6{(Wu35DS6)!DxP>%DgF=_9&-st%DctE7&#|ENO+ z&RrRHz^?9YVJK?>!$_(9cd@H)&#Zvhz!ib2-X8gTt3NtabFVKOxJC*S14-~PXd-q- z{tN;QYasg^RxM?v-IF2YbC@bwkFj1c4!LeBFQCRD@8R%@o(X|xk`Ptx^Z4gxXD))8 z_!X@-%!qk(ICy$W4N%hr-BC5EIZqEXoPKy)RlI6!twvmqww|Hl__=__g|jJC`mRHY zN`Hex<{rDlGSKCUcPH~sOg5?`l2Lw}w}@St2wdB=o(bfwDwW(cQjZOuKjDnt%elSa zra5(~9wLTA{>irUFo5ZWm8DFPM`=BM=qIJdt%dd8*)u~y(Qzf8+@rXE@TI-Q_^b_SR(F*XX6oBhLpMDGdbfoekuXTrL(RGK z-GP-S+ZTxX6zV23xKv6MqgXATuRuqCuo|gSB0AdY-noR3ip`yh^HNoc{4;coGyT1O z3UZN`D%Q+RIfuA4UZ-1_RrK%)O?rzxxso|tfpNh|ylz#zGpRnem0ad4Y+@4!FP0dv z3*o=xZ<;5t##N+4sM}>fEr`mtHm=K)W$Px5!${Y8las>^Rv0qj;Q{CEZA;&;o@*ji zBans=9oBL#zhZh;nY-iiWexkZ?g){I{zR+rfCg2I+>O2Tv)N>s&-%yJe;*(W0;dDK zmn#j;rvB@FaK*PodbxopDifBykA$$-T7$R8kYvE}y*X{_6;t-oK?LT!=}bynNO0lLcY3rWdh~1 zeVT$+9~bhgE{^29o9Iyx=3Q25E3w_J;(w`c$tAF?`6DkE7v%esmeBlSF!!W}ENFm8 z6yp#YTuxV`i=xd?;_V{m{Wy3R{Y>u)mU8x-%{kLBmE|b)Qm{9@Gl$eA2|CseAm?VAH6Vk%{UaCYcZmCQ}{I40} z|0R$<d&v-eQ62PFU^h z=CH{Cj8={~e8at;gHnue_4&al<=p1YYOq$GPWZMpkJ$-gEbv2d_=Pvp*3mP(75ASJ zS7|&TK@7o&?Bz4*8x@PFy>Fz^lxoul%LQ1%^*j0pLzunRPsS;jy&Q0=|1Whv)Ycbf z#JBgNkk`$<7(yBbum=PCL%>!Sj?p~)7W+bDV0^2vV_KH$+GJCd`HB@2q+&mSOA6)uZ>~P zZ(djqi5`In1TZs~S9_0*TLM}}uQ{R{xa3e01vq?_0lT3@WJH6Np0w|PFCkRp9+7nk zhkrK#v@u-LI7RB2WsoGTacmDMXn5ebC? zxuoj*vy!6GR(Cz2VB7A=V#0Qcq;vY)Nw6#Xj*(R6+~T!ttg)x;_p8{5qLCH=qn@hG_u+hcWf1JGW$3JB8m&Y2llXND#Va4st7mRXUCp@fo zxaIKo6GiaQ?U{gAJ_{MaIcGThoP02pNpbkW9*z`HS{U$=ypS19K5(0r7?ve+Bs4BO z6-qYQ-%M05_8Bb5!O9)%^lL%M1B)LO*f&h~)J2!Nn0#(2z%cv7YISm#GQpk4YO$|z z96?#DU+r>IPaVLOL-z{Nlb0K{Pq6*pC~JTx)3>s?RjGLL;)C+;nP@oxWX%>5-B;T`Gq3Ky8OuF*&}j|04_SZ9kvh2%<*9=6C)Mvk z2LWL4;9&egM)l?vN`*8g7rqyT+34!$*p|o0$`bY|x%DbupAN?34#wS=rW~6drs*8) z=2@@5!2+Dt7+=Zm;Y-rbpv8^}lfS|jciwW4e{R_`(j4St0b`9#V;`BVdsE^#{MP0B zxjD#NTb*ap*JQ21z4bM^xv;JEThJ81dLX?|!;{uTS#`PXCVDv$IBt(4>9&V|?>Q*$ zAixA?YOvfjfeScz+s}+xU)Wl)mUH!q+MA>epa+@kxs6Im2qT-Vw4g3v2AGoDkCFS=ZeFO8kPh z`)&5LiOZQHAFtu<8l4FDcUHLWtU8NlcCR3kuYKiukl{0zB`O;nTiwZK z9kJUPi;`E4aO~9)u(vdyZqBy9__pUWj_q~sl{szoni3yS^z5|B+sYwYx&KqQ ze}2X2+;MV%KUdHouBdLU>>$?=%sGV9sa=C?#^xl#w_5ZpQ%A0mCMmOvbEf-!pBx-+ zIdAF6qDEJ?IS;Mtm)*r4xm!tM{ZF6@{jE<>XL2^;hHDee*qI+$#kwbqWS@$c(*9mY zF}bN08*2yEyX=)8J-Butyq#^Ub90Lnz<=IXQAQMj;g{(Aynb~%T3gJTXAFGD^T$;Kq)4%B6=a$ zSk*SCJE?;;{?slkz38<-#~%U)e3#dxM<-`~{Z;#JnOJBBjZv405FdkK zdG?6?_PuP^c`^^s`3e?SWu73dMaI|3o|qZ`I5u)}po$@0ynsP8d?cn(a@j^In8=># z`>GZFBG)w5hfo%U+a`InU`DCd>6M-f!eo zjsf#j?zvB@4c;r@y7)f^1o3S}+rz;x21p`6Mn!2?Qx%sQV-5uC7Bsmf0RHaH&Cfyc zbwJFId2`^^_Uvo4wxVCdZOcPO9;nk))bHT=f!~Y>e!zZ;VMd`&A6~{z&l;~vOOUA* z5l(savPEEL;M>aneG*B!$hX%C<|^a9;Uz2Xu#zc9y%7$^7u%VHGQZbxiLeQK?Z0Yx z`9r1=*?hIeJf~0prR7x&{BEp;H!WmG$vIJUOxK3MmpD)K8e0$;l=Vy-iFan4zla#6m!Uw?0BZW=OT<9L8v@Ssbc9*B(X}e_I69Wx8J$j@to?aojN(^Yr5+~5 z`fvS@ql^U{F2RUySHI>4{nT!WzfSD&xngLeII)Vomm54U8`GI^YN>s>7AWc#f01LP zN~C_hmPS|pJL^lH5MrtE2gB1Fsb*#!K9Tpm!@N@_bjh@Dv9_O3cW{+vf-+sPeSK>! zM(Txdj{J9Va7;sKx^ikQTvYPSmY?QsQU9Edl70+Vj^qgP3TRGd+m%4XBJj8b$ zltlfs`|R&kZQzfSR)-|2mu6KGEQHuewU%cQ1{Fhs`c=G(c%OD2^xcq2{jzMdGFU$P z%}WmGl)dSQ+xpaZKxa_wAy7>B=JLl_PJ9RRO-N*hX&-m9@euZ89@UBG)U+i0aj7ynN#Z1QR3Yu=O@V23g4!{gPK`RI?_a~8!`~^? zmAAj}_5Jiy;cf=+Y9i6n4_$cWDu@~oeRlku6Af>gW!tJSgA1PAwX!5|1kgH#-p{P= zk=@+N+pR%9L;UQjAFGd!83dYN?PvNn$w{_R3+;2~X+>9cNeSv#LulZcy3JQo(iBVc zFG_OVp<`#;=xs;!Jq;=)+xeIJhUMx+tH@{G6M$3|`d`L00|1ve+HL4tax3E!xPpO} zDOau8PIbXDzeAjUUAI%A0JOFE3l+0Qt#^~)BL*Xrasy`PelM56u~e#S9NRr60yx?= z8a{it)Xm!$KU^O2G#gm7IiA$|GzoTk&~D~g3;1>j!E0{xhdn2qp!dA`REeKpuz=W8 zFXMXOi1X|{D<^yR=`m%6a}l2YgOlfhShcO3=7- z%IoZ{$hxk6bL8>LzNbP;w?Hff2+wNv`KwjTvP^^{T$z*Yp|4~0VU_<^#P}b9){LIa z|0affuwlmwC}7b8XaQRd!@~_8%*=^ECtvYplrv=uJ|u3h*8+t<+0mL9dI}Xa=zChq zpIpK}xlZAib0$UZ=vdtGA%5b&BSbGmQE`XbyC28teG%z*7&HHsgt1VCuju6e(j}}g zFf|&!?!L%I>8yP0W)-d+E1*SQdMYqVa?}f~>&Y>(s^kOUuc%!XB>K>+`{fi@KSlX1 zyZXrV0jBR(EokmZXThNslUn$5PuWWa_$NE!9?#|Ymqy5};u-jM3~Zhm?3t^W0?L1u zq;AUi?USEsmqvsL?xdm8KP6H&5a3;1_zILH17Xifm82wC%qB=5p**n5RQHBna&}?) zJNNclJ5eW}^~Ycpfz#(0_G6wf*B`17aL9eja$Y3yw2c;5{lfv`W*d8*T6qeMj?_Ty z=kjJxq-+VR&N*HR|98JZ;1!SX!5Y+;A$iMoG2CL2rzDd;Y>4}Ot*3?;^RfryTkIV8 zR(IqC98+jJGAy7wSDw^A8o$szZdeIZOv|jEGfr*S zMXFA*%rYIeW>~0D00EZ~YH$LX>J+9&Xc4KzGf}<%cJ#4Maxklcopa&)l*V7|D#oUU ztuPC_CihDTV>=a~_24@DKa;cnRT?K*nj2mScGO3$|Md2MjkPtEC$kXaeGoxbYuD_1 z_c8u_X*ut*c;2b$Soed2I+Kj0 zzGf$)9?yyC9Pj=xsN__2^+cI&!nHj|)T~IbRgYzLS=io+Yc;Y-2^QYDYP3@|%ddgD zC4WhZUj57Rb))I~yxXPJIH}g?2-!S8(O_8>5lVT}o03$WW%WLF0-s#^&RvV{_}WS$ zb^y>{nU6uAPn~d0`sAz}mnu5XKYGkulv#|zG;dRGQ!?T>8F&3CEulTslG#Tt=l@1a zVqV`)$Sl;VQw|6(r5EwR_GhmHb(!zfTe(&{Y2m6>H*6QA4ef`NF1dRs`K|~6{KM*J zQTC$c{43|V_+?iC0TkC^_j%!rnVxf6(yl|PD8r)CudW`1f}-%%@iMxx^F|F=Je&GF z#o((~{mz8WsU{0z)Kz{SWhHF|{&n{{sikgMsk??WmY++6Fj3m& zbj~i?rSpZ&X{-1R_WdTmms<-&cuTYTM$`}NgJt#8%tuXJ?r`DOuipG5->g6{HMQ3|xjb;qrBg&pN z0LEy?9CaP4G+?l&Gu^dVZ0OlBXm*aH!`Ib&)k#_7O-RYd%|?&ymG~Y6G0D$~c(BaW zL!R1Hb&u;L8CIiYNuHrqM#Q|oLk*`>|9JmzH2mao!Df37Vvf~?DUP(~)v+MEt7}EJmegW=oIc$+&)JFmJM!r2 zZ8Tn4EoUuBG(V+(Mx^FJX-Z#J(PE-?o>LnOL$Cu+U*WQKJHi8On^tOigcVUa&Pm`g%-HGWGO@y}4h>(M#FB)O!lhwK6CQH5-2V zYtcM-K+6$M)O}m~a&dUIHm_I4-#4KBrJcSWDq#ZlEVW@+PM%LE0F8uve|9sUc@MQ7=@M-lxPNf!O zELr+(eb0oXXsuu}O{KViegUO0TtjB!xC06m&dZn^EOpY5N9UI#>3Gu7*io zLP2=xw^OS{{=2F9leRgwsIT!`4Jzpl1}ZSt@`(r$;tJ``v`N873u@EA&X`7Gfstt7 zx&-R(YxX^5>(fpi<+;y?DQYCFZ#!72J$`s)r}B*VjXKO}(c;k2LaVDbIz5w?3#LOO5*Bf3Uu#g=;ljOQgVi)AqIz_y=Y z3Q8vhO9ptW9VL*l=)?RN_sMvnIdM;@L}=?C)7#&cGpX`hvpK#?>E2^M(3x=`oF9q4 z(|eRse(SnToxfEdJkoC2^ftCwz%jG!>gA(GUz30G*|FvA(-?fW?2sH-cJqjo;vZF@ zLy?F=I|NefcIjD+w){Hk`e}~*Et%)L+Bu>>9}>F?^@|Dn5|)p zXmu(*D9VjA;aR`Fv%c;m1wb@?ck(;xAO1JB`fIH@ka{EScYM6p`9$&N;(bw5VQOub zUM(6xUf60=2RxA7>XGlKmW|&po-^IvZ64DR#MSm(JxW~vcA>vp*c*r8uBnk$Xs0Yu zO&zk-pTj)~L2X5xNtcwxof1l##IJd(<9socl`d5DWvMeB*m#uZw%+@hzmfV;s&?q1 z54XIUC8lXPsDSV1aBpuk?K?!sEq*#h7#I^incd&wj&VnCX1S;frfEu}{O+^= z9|WfMOHks!hw`n6bA7#u9+UjcE%0c?{EPAgjwOGCQx8!LQ31V8_#kZf9VOZSe`b8> zNq*3*2Vu|2D{}tVPjEB-Y7F!h;b{2lRBN6eMA0^iOG1iQH=T3WXeeKBx!;gr4BvVbABX)SETGI|={#1CC`1A}2r zcAPz+rA^>*wxia^jG9My-~RD?E&7KdI?@J;KEitkC(-(7!I#3&v6jX46JUZ6B<7| z(+Ug)n{jsmPaK~*Tow8Lq!po!e*gKDmKAwo?~L*%?uK_GF>&HF^b0Sk{qrIf%ld+-Y7Hy)!${OHj!NGjW-^+UtI{y`cx?gR2!e? za4lbI+reYS&!)<66<$(<#lWj@cygZ}w6f2`f&U26)=V6l%>?uY{^(qy=JxT-hxi7I z2*S`wsKxGZ0Qey6n;Xt&=3xOvBSiYF33gxOkBN4LamRpgBjYZEZtPX>2oz{bh_KXw zDgY})W3O_chrwfV#UrSK(R8qUg`~OYP$+M5!&BXqr6h>3g6fs)_}bw|NBO@oY6TU1 z|NGyiABhjmmp~Ev6)?qpGE1`D^x?D2TG&#!F>J~ zPk?uVk7xej<1|M642Sq|N-X8t)Y2p|yLG19y?naAa;^wVMAT0b`5jz`903HQvT7RL zBSiT68v|84m9r%ypmIc@a%Y|}{Y_52qG+c2!DrNE%zWUd zJwaZ|$4@3e-t{N&Ruywr)EB))qv~DuxQ`m9#%v&HIr0pVhOf%GfuA#;FNn-~97>^+pydUU* z@#9iTI=?yY#Ou;$z4MRF+PiHcuy^S)78K!7)S6*edgN{v=Mb) zV!_}F9t<&ax~=WmT{=E|)7khdx*(b>WEF2b${T2ZsgC@!Dmw8rdd*H#%>u#ZTJO7Z zE4zN9bt*)|xM(ZJ%-H|U=Cf%;_Pffny?(v?A1z-4u_YBR!?HTaDdV|i8N<-2b%u(-xRuPd={1}~QKHr8UNb>c(GoHV-6&PG_L zg^7upXTqX;c-}{cGk9rXSd8rw)|t)(S5?7vq{c7#n!Ozo=dHgnR9_>ed#f2}*{`O@ zy-s+Xc3v+yDvPE_(rODTl9V53^gdXJVS4s%iidY)+T@FC=JOXE=; zQbRA&Ym^S5SE&I41QG~eeD{9WTDms-oa_AhesG0cY0sQ<)O(C^KkrH#6t2Z+auT5X zo9s895V~Kj8dJ^K?49F|rM1gdj+inWylAv8_8!~0d8y58{#ntPx9ab`JlxkO2q3c^ zZ^(P3V!dm|$`>S3)66E=;_j!%KH+a5s=Ja;;M{5RQ8?j>R@Un&@ma~Qme*}wx)(-= z7Ul&N6n)_qxKx1ww?rB|9Ddi49=92j2E^mIvWYI>JA+BY- zDrYdHjd$~f`uKj1a74QJa+5JZaBdtj0%jD|I zPcKPp{OEFz^QP7BTG73+;i@4aPOyTtY{bc^;BZxa6RTWxdZ+B$?i>RF#acoWH93H& z#<>?Xi)*|KS(+|T20?s!hxl59goxy)XuQBzQ%p4cMD6(F==0gmKv60qY`AIQ^^oON z!@eT<_Z<1qHF4d@h84bsmLr}08c&nbyWd0!z=ns3@(<2RwT0+A^w$s%C>9*TceP?Y z;?D|59y%6NS%5W4N?Mm(5Aw)7R2+G)HyEc1fDFql!th(cLcE?;n_-q(-u&_>XLX4f zhng5OEpm>&LLl4vhsw1p7N61-1>8?P^C;WNI|prUqg7s>JFv;_QvtU6bhrlBM}5hC ztxrXLhAQGiuU=-tClj%|2MQy;^Iu{Ny=(fBc8pN6RRwsV5Vs;n3O${fUSe3vbGL`Z zTuYNgl&Mgp5)yu-qc+$*NR(mq;oD%=7EYTPfF^b}b4{Eqm1XPhv9aPU%~F)bFm zLws+U{?&f=pLO)@n}~Pz$)={gPjjE!J6a~}s%PmS)K?2lrv;_K4383=rV!#12V(O< zIfk$;<&j%#>VPIj-KbPX^{+f(#%gO+mE-Ig^E)3`y}ij-*%I5E7#Yh$23*~oT?J^o&$fTNzb^&Re4`Z_@6 z>Md25LI{nlU!6}{&$=r|Y`q3u&Bj2V-D;ps(2IRa^e|8J!>+I1FW_R&x2LU)I7(~~ zE{06Dz3`FLo+$u&h*P2k#LDY;fM?;=8Dxa0u}Y(@yHvr@Sg5a&hj;0+d<837pGXRD z)JZ)QmML3w;U`?lB#8<_Mc3kjx`rl9;vuE%@bslH7)>l|VTea=+sGE(}cZ(|&Kkx+YNTE7)*oeg4J&Plu^ zgcDX;j{;{{5RV%P4c0(X0XSqxYj&${pQzj58xe0`c2xDi)vSmjHa>dRKjWOF%2N>>o zTdK&GW(YHMM-!eyC52_yq}#r%%6cWh=K0UetPzB)ZWi&`>HB!?dZ8~^o-@atmyU#gd zy?-TcXeizN{DfS;59sH2SX1y?(c;~Fwq}&}Ua-8ggdVgdMl^`>!l_WKCvY^N= zxE&~=mxfcqKh=zMe7hfQn@gaIsB`aG$$6MDIShDB-hfL(Ib?C!P&GDjO| zmzJ$kCOvspyKuFJkMyRa>WTGreykG$c`gm5{7bi$^rs(BD}?p+X6UdY!$(DfVbfsD zq6w>kxR$)36d@v&{djT=OXaE0olxT0d2(toG4=6od2>;JJzm+3kk_J1DU!(E7s$o~ z&bo;vWJA+vO)vTpJqKrR0e-cH5PC!UoYIz9na)=*wM9UO()olWqq>@Qjg^>~4unW1 zOB{5uZdtuXo`hJ{S#Np_{_ zqw|PfgbHhzDTK0@7q;l=UT1rm+BZ6mS$5XZGx3fR1Q-q7EkiXqOCeRI28%zqn1}hO zyQpz0`Y48PY}Tzr3-g#ehnFjOI3AOUf@6G|43CG!mzGQMriS5^xuyBkdiG6;l$@#z z9u}a}8bFZb5Rv25?xu7=!G~3aCa(~ckvpF%y&J}L9Irs|&^tp5V_%DMBhq#p`1^c$ zvwd&eI6iiSPH=BKcTJ+VJLv}7xvvxF&m~j1%GGkucV!?0Kz9(~G&{>rw0CMI!X6L1 z!#6%^%ouRc&y%hjoh=c2+iR%l{F-I|Emza~nLRSJ{e{8)k4IS8Bz=FfOfi2xx6yV7 zWR5yvkr0{v+3{~BjtJPW-~sI)w(@1vc)f`MoyCpZI){FRF_(9`W}FXn3R6m=%9U$d zrMFnbH!?N~k@NY?e*wZyI7-?a<(BU()tso`t`R*_v_|Fl?3Vi4rC(yj`c}woc%Zu4Zrp9e(e&^KZu;l9k;Lu?Ty8*NRPslRdx|&k{r;@TGtLj=^}n zd_#)kA44MIUwqByCpX3R!IdYlF#8iCbt}y@9jh24d94w0UIvFK?@@GD)O$!@Dat!6 zg1hsFOXARq-mTJ1q7OcAB-GnGsw`}TB+KFPWhtOLA{7>-vulkdWtk0xLwu}4^YuH9 zmE*pv_+D!3-++^nMMc@GL2rbCRxJasqrNZ)?y;&>uW(c*Gg~>UG$ey~2BQE_^_;=@nG!y9}#$hwB*!FfCvaU27j?; ztg?{|ooB6C&Q>ut?U4Z(s~*KWDy=1(w7s_RQJ}(_KlNr5lpND@CRSTZ=n;*uz1~2U&oKnnIF4FF z(1ml;^dX;7);C6@ri@U%LN6$+qzg2{!s?$LIk{>hEYJH+14{-=eH(7y-mxFrbSy@Q z*cXQwD$pfnsJu%%ihPhE>0#kI;1I?>4)?nr-{bz>{q056RQ&#iecvP^&^^O)rCz_lbG^3mGQW-8aR)c5iGE8=ICXO zazF)z+N%e^lg4HrMq{E{V5ar!1BK$9EJI-d=e!}?)Fum7mZm0+r5P+rsn=G;68Lb} zK|+b>?M4!FMRs1tw#d`*BH(&yzVhmwr=8pR@4_^A5smdRl$CjJgwZ<2K|dUnp6Bd5 z)PvD@csr(ZwD_(Wpg7>@P#}rg%2e`+vCre)Yjle%NDxLf;eoraV|g*Ap|-U}?I3 zgU$c)?w6lTB#qaXQE*A1_e`uP~rkrQ|u`R{KqZBxTJt=>*cZpyg2=qnL*d z)T02H0nn;UGw6GBZ0i*HjyWh@+vm*yO+s z&5%Q#B$s7q!asW#^S??H{kc#7qa^|TEPK$oQ$qK54cq=y80bZ^?DxH*5~K0?v*16NPt=AXy9z<*8u z!iJvPZ@k~#fO+eKisGF`YdkBxYO>}{?#y`udG^8rt-}Rfa71$0OD@5=E@}}KchfN2I*&Lck`{FG=a{maxwVWK+wi3u;n- zzSh|c)poI8CiqNNwDwOI5g>rWjTcYAf2|OsIiH-uCs-I|z%8V>ryCw8Comtk^;I=Y z4n+K1ouZQ*Hmr-I2}!-;;o*sH4C$!QkyPs|bP^PM@8OE58edaLh#8$!^HeZ!VPVu1%CHSlZ@l2PzU zSI24k2Z3wzn`WtJ@n(x3^t9&8x>$hE5*w@!yySB7eH# zk(lNqN98h~9Y7w7~?fjf!O3(dVN%3RJ(YC=5 z!5$Dbnrqls=r~_ZK4s*&VInS*NeSy$8H7JK1?O%Yb{RH3))m=bGXy&bHjU{dqMK|g z8(3z(_n&2yd7+Q$73S&{K1{jh>M+9Wa`T7v-HJcm9GxYY(ALwquF#`6*q^H%LvNc@ zZjf6_-6uj*P&>KmFsN}{acZY~Q_JP(U{=SsOj{B>3uYh;dX{-AXb<_=Oqo$*tX52y z{b6-s8tF}`scWAdXNz2exyqO0$jf+7Fx{8vwPB_REpS3BYr|6hLoUvJRo z!f81YXfXkO-__~bC!6VrIn=XG(8R5C&rm8CRq+$u}YK!P*WmJ`TZ zkg$v8jr5BpihNnR)0xA)_L!HFhwT^W!`b;GBhFyczgn=K;N=jx85jet9p!JE6e-AL zUocO~%V$;E@d_)V zW@m=BHYHS3eaVH*!s}uJ&)Z6tk7)+yT?Q>vx4)BDz;c0am!sOr_JP@z$Mw)OOjCc) z$V|L=nNtd<>7~1vamDdxAINW=2u{KHa@PCe{(D?;L472GJO-Jk16KK&CqDlEDCkAM z-F))r@Jg1Z8I% zsg5$5M(M@ohsbGUt*r@}ly>AFt2KW1AH3JlAgpVsh|q5V82HI%?i|In6oE_f4&}#` z-DhnTNyYm!aUl~b3JgaFXZ25x7>DQvtm98mI)z)8XIXuo(p$Pg+`~vWt*;v2#bs zv-SK76dJR4SnudHc=(kEI5&<*O}cb8)p8Sw*I8b#=*ExZRy&pp8+ZPe2`uBFbs4 zuW8rz9+FmMjNaL-RMLls=yU@)e8lu5^>c@%!d$~^F1}*4L*114oZ5VhM4g@auwI|1 z0Z1Y1gA$Z&0p8bf`!7fFYlfW`(rS>8&v^aM#s51&FD1Wq15!me!Glpwce6n<5S4D&d-Kc75>+G+rVx)+|nK~ zQkr-03+@{D6opo_i_w}#AFqBe+CN`)C4(&#nV3aq${Q-aj^5nd83I|9#H{i-`;CMe zfRuNZ#X>y>#3no<2`tW?Gt58hp5Fy2aJkkR3SBQU(Wx{Qj3FH1(q=ToZ#nnvYJ@-0 zv#KWklsVsE85FYbYChlmijduk7FaL24nb>YkF$#(_*9fjpPo&OQ|omz!y2PAXGv_O zdkH;cYT-4ipHHg$>2BADqi2b&je-`?lr%C?7;6K z1XGq-AU=QCH7^0uL0Yb1Ar4B++WN(wuKhL zFDdn9YmuSvsDr3LkikLjHM8k0lfr3j+OkCp{TD@Z2E_4YK8eYFa4q5`RIv%6R;rDe zqgV6_89KpKr`=UiZrU!DcJu{c5Uk*>VPZ$My(>7s>xzY(B+Lq|$PzNS-0OrEd$Y zOEao@7grbLFmNgtb_^8T9k`<#-4X@v{#oiN$ zwkfxPKSKB-lF|3l-lBCzY}=LoiQMl77=Sl}{K%qwaf0ox7xd|kFybc_%U@*IXQNZ+4?{MrFpHAu5|}XMS6H;q3vT*Xsk#QQwqT^A;9+_E65rf6 zJKNdzKx%HFU~;7!6mz^LOAoRW6%$R%@N)AkQNt~eS)jTdCRLI!tFGnfczfS^QV~qT zM?vB9K`et*V0*-@eH>q9w)oBzN?TDdwW@WqMWjmW3OM6@mE~yR2eA~pA*R+>(>^N_ zx?3kxykn}ZQ7PI<##^Mv9riWG;LR-50)TJBSI}@HGxAoboq@d2n%;Z0q%?0A1v7D4 zn}<(Uzn;xa4!K!FA!5#%dN+=;i!w<-t-`)r^d6aW3EcI^wLJ+2HKNKWn)j!DMxj95 zTHlm*%<1?OS#VFaY_99c)biE(`#Q1_{1-25wm7$Dw{(Jr7GiTljxk$o-`nf!PYfUS zk5G#D@7iwQ{Lsxl8O+cUH>3J1ME~6=`4I2$i^VE>h%uf%*s)M?Hc``vDqXeQI>Mp6K0~Z zS!rk<<|C^{OFdor#cCK-{Jx87>BMSp}@Sz z%*+-^wE_5&QJDqkz;KAN&LpN1!k6!8uAlr+uVF&RW$h~qY8ClXU$JbU+SU7Ia=-Vq zuJe#8^s8B5wnT2p_-d9D%vz#To6Vp5_;W67X{wh&an2>ZdU^M%@1?M7K4U9&hH`M& z{XdQLzx+d@;?uX`LLkIe9z7i@74Y$!ILMC7rEEtYO*&0Q=U z62gJd!;>g#Iwpp$EkksQ+8xZ6;gQBj%Y{H$m5}_!Ora~@|5hLthL}J3OB6b;k5PLw zqr@gBQ$6nN?DQN9&Y1b^lp17W2CVWLcIyE^)JW#$TUCGWvThjlr`$hg?G8zCRAF)Z9Axg3_jUD+4$0)FG^xT57T!hhk1q1af9@i zvodJ<#@x3Z`85O07uHN;s!=x4jae;}hs%HTP=1|A(z*$v5@5C2EUfjAQ97#LTl#PU z*|*uJOr7d&z1z5{fikCco=j3&pNQWlsH6}B)IN?uIr5iwj|xd~^g>r4CtvPA$t}@P zN7ml9CEZD#ZR!(|sK{;NX!KvMo~jx>?J3-u#LsdGt+64e^VI; zwg5+9J0Sm#-w&n{<+G+1BXl!byoGk? ze{1{a5ABNKX#CKL&Uia%@Zj*Fk=jQEhD}d=75CtkL#O)n43<}AUZ*X~S!!dpE#Z}7 z6#48-zPj=>>CT@iZmBpAEzyR*ubQ?it6qchC)!0DS9Zg*InAI}OFk zq9#IH`-yA4t1n}P!TAyvD|@KM050@q=>d0$$G#U^)oY%il-#tQVxuSXXZqEqIp!7( zK2|OCr*?kd$Q^2kY^=hM8RQZ=`%gnNd<|7bRCk6$?;X0glQ;3@H>Bz{-cbtLVcu3_ z1i+1p%prZB@1g0YgnI1TMrg*tYlX#~VG*Wrb=2{>2$?UqU3|)^&`*AJq>kB|Us@>Z z2N;Y9atBHM-H%2yE^p1D$0A7U%d&!hnwozhNO}qjPyFX0N=C>nOw)!V)>>f%*K^m( zP}N2vO{bpCCcvMryBCzTqXPxDx?Zfept4!I7XMd2uHZ1P2MRggxU5J{) z*?vAkgi!dx{=IOPbB5-)-f--ToWE;XN3M6BAwNN0;dt3~y{e3M{xxlq>rmHhY=D?> zvA5TQTcz3B&TKuFtB02^b-3LH++7<9BTMxrW&ww@zG`06N`r3t#T45pQ^@6GwS^M&%MJ8sBB9M1+cnqrZwVt}LCR$Mz6zDElMli7&e<8O#=gV2ns53K{mySBW$by4T)LtfoivI{qWUJA zJLmPd4MZAIJK?&z)sud^Wb)kuzr+(i1_;T!aHP;fq&JTWCT4ib7=mp&rpIVTdZ^lcq zdwd>zD=rdM6OmN8<%lr%AmF|XZ^H*G@oGp;a>=$p%yyK)#yY8;zgOC-`N!kqY{%RQ zr>m7sZBs>?Uoe7JNFV*MSOXmEsbZOxj%f~y{hi~n4+zaa2rsj{#w^$!d-8qZHyQnV zauoo=tL+-O_K9Ie>8kB^Zce<@@i%EGo$=%E)S72K9Ye$M4ua$?#8uMesY)SUJ`{Dj zkw)q7N6}=6?Yw(D)YS$bbq_w0cJ5?US9q|IFkm*G(P;t_KJ5x7gq<+@Ddl&sKcoUm zUrUAD{Hzx;M#q+OOG-LgKo>toHA+<#?XaXw9k zJ7j5_RCRO|Ye*J_PP2gn6WtT==eP4Gy$Wg`zoO$zO*}9>&tY>Y4NOuqU6o=6x)4A1 z5g-*u!&2{>0T4b($nT=)soCW*K6_o)Kh@~>SdKylJC`LBn{)eDD@BRljVFk>48Jx;J9O=NGC0VlkcDK-2|R_+_&6k*%N zju3!z_#KN&2JpGnhq1m2tgrOdXnu z91$O`Um2Q0chPZaRhwOpx$~4a&T=qMDq`k(sNYgrA$5+PgY%Ye(Xix*?%4X5*6FG} z);i++Pu#7b8fCSxF|MuSx9d0iH4VHBjw^$|S8zUaugKe;-U1Id1J3QjdmJ7XXuUQm zb(iiVZ+7CC6a82_H7m8MCMOw;N^@fixZHtqV3o*t~y%%m(paj=l+| zMm0_8ko&+Y3ALGJ$71YNM~gx}L@N|ffg6L}s;6h@B@$EeyvAO#guUS#gv(@8LB=(j zx5@XJzr0-KOJXY_Hp`s7sq-mDp0{$zr(xZyv^7#|zi#S0x2^=Td9$v&Z!nGZ^{JP` zzEAGdXLMirE?2dZ5bT54r0ZtvCga2XxteW4Sg|*IvRTf_ZEsM_4k=E9+YvjD0%#iAF_TSQC7t*y8SB&A`1&VF3%QS4*rj4*m^s{hOEs=so>J z5ghW3{}7_P#RUaMRqkSHjI@$$u|9goe6ivN8sBu4vd~ui)SO(@r_J?lenLv_#mjdv z_u*kCfMFHK6het&*-vtY(`Bw}$wy~TO!ejSM({&!%V>xG%yGq2gmC}F%>#4iv6nxJ za+1X@O}P9$Ey9MXs_mf8bmCh&6=%K{V##9dmWAubQ!X9%nMd5nsuAeChHd9NMpbwX z6M~E9G*a{w-_gF7aFENpOV{%D%3G^u{NF;=zwe9_J5ILoh)hp@pO^^i7M+}h9f8^o zIIkKHP%Sz4W2bq93?5JuFE}eO6u0|OElNY(X1r9I(_jWR_~`m!VQC)iANnlRT~vVe z>DvHa_eloZN%l5gi;^}tOcmf{@uK006{$FfVOxXcd+?L|iJjw88V3!CmcTfbIZsS@ zUM1piO2X)#OCvL}8*5@evBJ4E<$SK@FbmHemY_kCFy$r-{UK2YMe|FW8ucGzB|7o! ziuL7vp9}Rwa*Hk*R%G|{K@;M^LqMM|ipsfSTv=N91~IvA+=;TaPbVa2HXVb8-caTD z5LM-IT!Yr>)h24)hE~-Pnq;#DSMYwHtd?G9&Gm|M@!{zlYAui0QFiinJ1R>XwcNu{ zW_qeIcT=h>buoq?FR}QJo{_6T*B=s2hTGJPtF_f2PEoowLvSfRbTON<2@#4IZBPWkv`Sqia=rv* zEja)7N8V*omykG*n+k(3%RVgP^d{AVQCp@G1IE!i#%We*wbXp)-^bU<3o)#+ddWsm z5x|LfW=X!nOz}LatZ*V?1&;Puj$4Kb5cFOmdH**=XERh-$#j)(ZG=7u-3QL4kQ_Z{ zElND90o%X03P8x+_MN;|s`=tbU&8)brI`KU6Gv6ktQH_oMp+$rvSx5fWMndVx}xN9 zaaeMy1+oYVpD+k%-FC{&?hC&2cIf~ytMj0rv#K}kbR=verKDuQ%yzx~B}ezWbs>QU z$;zd}RQ9TzDZbryhws1@&xq;ae*m`s)}o0I*mgg_skX@Fvm*g|$_thRVp4HwrsK7a zgzv%T6L(s;ytw=*4lPT%3WwmO$!Ftl6XtF=8f0rAKGx6DPWe=2M0fxK_&8C0!&hVC z&x5=NB!uTv>;;qghEB;~yUrEgCY2~RwklJ1?u!OjCb^11Yi{UPO_sdrw)iNB8Uzsn zz^b*B3Ei7kSW2tA;1c+F!e>XKE!6q6hsp0{-#;y%CU)T3@M;kCB|+=Y!{iQWWj%?c zV9(S{tEUwjrxwTug_su|gqHMbQ7ErHQ{+{wQGHfwXT3$rNTF+4MX(|YH&B7nAPHAJ zk}6E=tCj6tr_T&=_?lxBVVr)>ak1V;H`%*pt*9zNb2rPFy9=Dlo-%VywKs0tjPEzB zRu9ZFjxv>{N8eny6j9%n#|Azbt$3mT#h{N6-^1-)rcO3^(^zbLbiJwPPoY*I zyT(;Mvfg|PEWOOtzj0Hq6LOO;c)P|E_E_;=h$23Gyccq_0ZW6e;mylwnbOTQp!1S2 zqqE4>tiLFGLgqzC8QUsU zQCg)=_X7@ti)16xqjg4`Q&qk-*33gB_Ajv{Z(28gR;k1}82{S^(p-Dd_Jh?}Le@q( zz1Pqx6^nTIgcP6hIc!NhnD+Q$XK@%3XX;~QFd?Hk^*Cp_!-t1QGuW@Jqf%pb)}?%I zKp19s_u#aP0g`q6=%a_CK{tG>c0QZ%^Q9McN$KpDT{Fdtd^@Z{B#z?A+ZrqwRF}SH{fcLKTH`f78ZQtlHa*(U4LKV>Q82py0eW-E#u$C?LT(xr#;0A3BHrlrAg)g@iGz>vEQ(I zkbfC5&t(SiPoHz&=_mCAOKaPuA>RLS75dyiW5E8*%V<^q3uN%`%V@>k@%8kED z`~T<9{Ou&L|2oxSzrl#xzy7aM;AKe0e>@57B3XX&P2kX6n$iCHgMarX|GSF+e+a}v zX}`U)=Wna`yd4lq?{_jJ!pU-Jvhs_p1n`m8Vwo*Z_(9ooDWd4r6{#_+&#ebSj@l0y9%f+tt;M(zB;j+#cOuH0D_GZ~x;=*kzr!&83 zG&tIHr{(pRwU*6wvrA~DU_Y77VCYj`@yjgtl>k^mYxCRJ{?FWyAJzvg`JSLzduWiA z#)4YWtl{Mz8icIl+1%BPezemcbMdu}3na$hFo+lFpV75Hab|WV;d4%# zgO-fX5XIc#jJycMU!GU)_5)yeGyeJ03zk1sg|9&Mzxg&fW2M&WHTqbtE>GQW4jY9L z`)1!ABnfJ}&Oqk|Hb&8>XjJzJ3?z9#i(Ec^{%IoPpvP5duX(C!MzdjR90f^>(3bZr zm}|OOK3L%xsFGcPsrFe*cX;o{J1bQ_xGeC`@ZZ8z?6&n{H7XMM?CnG3d-_z?!!xW`6}MF zk};Y3j)5^WNQs~^{IMOGZz;a*#F_yj=52*|_dH2t=@ATq@x~ICbRnWK)qa3|0HzwX zVMIod;(X>8>Fj!Htl97LVqJWPWnLV}VbSm85^FH``6b4A@@}&w{b>x;hs*yk<`i&* zJ&yD0bKQ&Tvxs9pXs`6dNhGFxI>rCYFY0vJkIN4xdGSQ<0-1V@3|PFgGwC)tVXb#~ zL?(Dl5A`>^ctoK0&jkkmJTQiPY?pHtEDSL{BFK7ygFSJ-87OWN+pL0$_HKN&IW;zU zSwF8?o*1euGqzKD-6Y;NQy~ZyLoIm@aeUW1b*P)%ZbS^Bj$({vQELY_M!R+DNig5? zLtgUq?qWYlTQA8-O6AER(IG+h8jAwju3*{CY%f+);92|sOX zn1U%&zz<>P@psMqAO8{1|C3V6rFP^}CNgXcrff{6ZT|-)nJ%4^F3h7kju9ew2Vr_jUzbWQi|2-^VDf7zW^5yrEcA-V~Th31cSGDgsS^0uf!75jhk1OZ8;oZ~7>Z7pFLaCPDZC7AJ zsm_S@=<~;$#Yhm;bq=$>14*E#IZRJ>g>_n$%z2+Tpmrpu;HbX;|DcnL0}SiiTN*}1Eixw*|pk!(jDs-3q!D{ z;l&B)-VJR;%znf1>9sYnXvkda_Qj0?*@UpluMsa|CNXGPqX7&YM)WAtYCP!HKeTzF z@24JE(BTID>WKa>Iat=?7XhQfJFLRg=jb&!N2@Maa)@u2r+&W2tk{3fyZdzFm|_<0 zdsGt)1T>DHEsFsfC(giPeD`A>Pmtz8=Ag4Y=+SUQrx&KqQ*S{S)qOtQnC(9x3CA?9 z>-5vF!-Ozdh;ASY{K(>7i<9M6Gt+DZM{b&hGDVe{$T5t#rrp=D`AMH)lDB>HcmFx~ z1!^9;Z4Fdkjg12CM`T!C^RC>AIiLKe$9W}%jRkF3iU0U3xci5jgU|+maP`d2ycSdz z1iNA|y#6y~t1%d7$zwgzZ&BwH$AI(WqnPuq(|@rp#hj00eFN*$SxNtfB@5m0HOVr6 zF&Op~w%}XzTV*>FD1*byvTE;fRLN=LR;I>wBPL|0a;qi_w*0vN)LKNy$zgI8G>Qo4B(B)c|J?Z7mECkOM`Da4QV_ROy?Yx|?cZd6LrQ={AY!39?>xzK~06;%rU`&0I8 z?CVtPlr53~OmQ5NS7Il>DO2d83gpq54!P)Y)XE&0E<=kgpB}FYt;Og=w_1Jx0f@-+ zuJfc8p0aYf|KNcvehMb#=*FeQR!-6Qo2Ep*d1GlS*Q?E!Y zqBWoui8tK}L;Iz6n1V}`_NYYFGVNsefeGHPQuzpG#t+7q(1^nELGpp9^K13~x0f52 z#n33^D&KLxFM7PIVumc=Vj6Mtbe7u$1JW|~%M^pA6EE)1A~#OF;<&b&(u8xE^)IoBDgT*)N7Kv=w(Md+3#PQ}I|dPKo$gb6Z&iVeG+ z3I1iVHYF{l{{fLrRKg0nh2&M#KXu@LW7t|HY<6GZEJ>G*46SwLo;)x>3FrgPfy!#`@_KYY0xx``$O<3IQ*(gc-A*tA8vA<2BD} z*hsk7pd>m=>DMLrP>IB<<0|ugTb$<)@E)^g74+Q4As`EUiK~A1wagf81qNC<-Y|cj z?&^4JPVaRm5PEv-H(#A`RD2}i<3Ha784_*4Db&INtCZ*}%iPL)XM7uD!zS0M;R*ZB z1Q;oD>3n9v%pkJvo}xTuQ=0i8dv4kM8eF_yb%)`L1=w|ia;L`m7Q=|iaQ{U6_#z!< zNn_=T4txqC5g_s`E(5^zpI=SZ zQ0_=LCT%o~r=q}oH}o_dF<0=^&!n}^#gkaduG#;qHm0~o9XI5(71(lBliKqH%#$Lz zP;gLXv^Y?^2}mnRj;iflP_0}LTg>3)>=D|gUf<+fs;A!qYODy%LW7@ZtREqIDIIPe zImzesLt@vYn{Vyua+gL))XOZjf-2F{hk#)iD!PskLG6jkKWV00l_Sd zW?axYqet3slf}&_a^9t2rM6Q#OYsm1?=wunwRQ@V{W-}VAO8u8jydXXr)U9Qy}eSy ziIvP@WYt}3T-^Z8Prp6X&Jnn^BaRYE|IqvAi@$!N)`sH?tkn(Vu|-!{tzv5!A*pXW zF>RB_NbwNjB2#Ip>XbrVF;gYq&XRF0;4>3vD79QnxMR{EqAAY^dqlo2h!T~x-HS^u zqf)s+@vQvQHLKvWNtYbt!5n=j7Rv2|eYYEwq*66ff? zw-1{NW+vK%mjr#fia&sNmjV^XqOME&WVN0B7`;#ZLKs5Ek?3;67h*_MU*k-iEqjMN zK;1q>Yc`kG{fX9rp%w>Ah05Vz-0vRP4QFsq{wzm^w(wJfI|bGwM9|4>$XOsI{@^$t2v1 z0PE%z47&rM*HB-Qx$dx!TDz6_T52sH#Ti{%pq?U3OmeNBq$SGTd?PQMWF0AtSy}g^ z7b)x}EN!t|o=%AqUWd|9>eYnzD|qg%FZJ+=tf8Nb`|3R7Qx^|UGEhsmgx#QzE&^|k z?_{S_!Y9q~My6jImUp#D^%cnizD`QMCmoMtygK;SoS1%MT;!|$pjPccl>U_v30+qE zU@Lr&2X0O*>-sHk^bQtag;t|WVM|PTHJnQNM=2C#SCXzj8(@0X;%xE+GL90VYkv3L zhwFLKtM`%9p_7bk012&Vy4wlG-Eu^0rX?tv2TyoEb`?Om?0nm8=A1SmjMw_5cEhY! zA*ZY|-A)_!pl&B=c zaf}Rf#x|1a28QGb_zJjO9!5B=;=zJie^^#b%jFWPLNuw;a|v6Xk6%0KE_(Rmjre%d zb=lI7F3aH7p5l7;ueTigQmJa&$onJr>$Pna#Wpp+G_+8i}DYtThJ-_$5);$ z6oyv1gl1D+7xKCJrq*OY-oW!^{oG_5u{L!ZB_Yq%j}kSnLk|}EObms6Y4c%~L>mzn z*EpKr@^0R)fjj0 z+XGso-9oYuw4eE%cgJw<0|DL##9+wX!J+RpJesSAbWgV@@JdLW2#8qZs$NQcEYMxX zAJmw^x^GZtq{YB93m4mtZ>0y>Zh}!w;nXP7LuhuD!av0Bz$w z3Sz6d;v%ujYL)&+E%IDIB))7D>f^YAr%$HrXU|hxP`T+`qW)Oop3chsXq&Y@Qu0lP zgcs+t0pLSMn^l9QZVz2X>=(c0l5El$i3Fg50Y{*!LfPl< zvwdOO{JH>3#pKir7ygf0weWE z=$epIr2IG`yr7qxsN1_mj~^{pW@v{_^V7_hlHghoxddvaSAOQEuK1CWbrr~;`91M& zQ@qKnEW_L3S855uSppFuB}{Hs-mFIV#>(zK^xk|bMHNszRP)GeHgfHH#{&-iRgHE^ zWuifSqTHB1I}bkXlC88zoI=s(W8Wz70`w7)W)A1Kftk8DI%149y|3-9 zu{HW8pXJl@NTz3$=_yN*0X#3-dO}qWh^hQet1e7mzq{S1D19&)hhI+mVIoj`i4wF$ z`A7E|nHm|15kGA`H^JxVmAe@2y{B}6BMTLSK+B!I!uIzwwytD`3>scei`h`;EYhY3 z`MH-XqcxQ3-JBgOOA1%P9V?M)#w1*+89QQ|^36n+UB(uUeKa=~Yz?KCrI)Dr!}jwc zi6pLCE2UQAZ;=6I_zI|`-LEobiZa9teA<&XfA_kY=3TyQrLx=A;F&pE%B2W8tEnXV z{Uf|Mmjx=^29NEb1QTPW*Hi6ZA9*%)%RMVpzzvi$U42XTIjMF$e%SVU$R`4Ma}qqg z7FOe3oLctW-r~E`y@EtnUq!A2g>a~ph-(mthP+A;NQQn6q56$#|? z^?_w?#^z`k{3m-N`l~6`MMu#~#xtXKVQJYYf`M70-uF5|oOWZpx80i#G2uZgVnjk| z+DzXZ%_!3&(%u07gF*ah=Q6M3)-Rrp+y~~{{U=BLcL81K%6clGWsnFw%6TnXoMlmz z;n4dbgh#Y2sX^rSyXo5TE`HyAjldfAl0J0<&+4#s*8fUBLd5}?gPMFIq(($Oo?2uH zg1<)kTzN6GX!q%Qv7>FOW1n_tQ;LpkT<$@uynu?@jBMXl;M$qt8@F&iOQ2X2Vqrp@ zX6vw=+Lxx40N!B|3B+emUJ;OWzB(@SomVxzR4~Hzf4KlwL@XH_a6%;(7}zq1c^sZJ zD$jvm5I?4?e7m$XB6Qxg8p;dj;$9kNSKQ%m@b};4(gjOj zbyr%*HnixBVYoA7m3d6&Cm^VH15HF`(e&`nOok6O2H-V^`i-@kS{tu zU!0ErE{%T+DIJ7=%5ca?Jzw=dz5cJR-HA#4O?2M&kNS{Jo42~D={7xCN9@hQ`N~nM zycA}FPIcaWHbFdANm;oHG`HVB)3_EKLN!se!ES$CYb(p4qWX;%kHc>hXXoi!R^K1) z8un>6yDs7m4#$RJLV+3FG)YSV^O1lE+EFpe(HUN?(g!`0+J(0Ta(J~~cN8q%ag6@4 z`7-gQd0`U~xXWzp=?*|_F!TK;KK4eNKxx%8JGsnEeme@kjrS>^tT%$N6CnJxx`ZG9 zKf>NSsOhfl7FOw9x^xw#LqG_<2neW@i1aQX9jVegNUw_Y4$>i^L+HKt7Mk?Xdw@^^ zeE6LEne(1=yyyEfGnr)a%ih;sYhCMF`>8bkSitIS2(xGLHcjxOuSU7VnpW5eifV{n zO2hGYGp%n<27jp@_|&{)-Rn{1;fd=`M1M8D6J$TqYM^CAEm_e^<{_VeY?gvmBM&*m zlK~smgQ?nJzZWT%CDi@#lH~Hb_)87Vo8v&G+#LIk5;1&(`07~=z9ujMvU99aq1ob2 zj%Zh(fq!9Ew1jZoZ$yyKDZc_CJ<#j56CNliRs}|p}b}&*Z zu~kT^jfF-rUHKDX;46(VO&KX(6EgI7P0;Kj)a3EmueSVn8t{R||`u8(<5vfiy@r26Rr30gBa_xU(5(>UOL^?Qm3>ogflt7|t| zATSw5_mhjSBj3|UDuK+jR=B4$G~s2guRI?(1iu%&a73HriXxZkUdRYLd6mD)jA6Xa z1le*r&wd~!OGrILm+dLeQp+~U$pnI+ZPqX0KTb0;d^W_TvHcX(Zk zQL+-W;3yj6UIclPHHLs3f1q*t9LZm(L_JxUl7MnwyXYG+3_U#BB;fKQ%{TR;{6sJ4 zAHJ|G$QxF>A!t5>p2JMCD;C6gV79RX>!e}y-xZz)Zl+G3;+UuKXTBwWZ9|@kj46Kf z5$J9}o&g+yh>Tugh9;jNZnCZ_MHj`ByCqxf9+2}#9KUxfi+Uzn{9sD#xmlORL$*V9 zQz&HBQLMA4`!k=_O2M<{(&&puaJ~TZ?*hrQosRD#I0ssC9n0@gZk=aEyU)&hiTt}) zs1?||uX(Y&+u93%6cRUUjtKYX?~ux+`bR=!Jz>!4o*O-%DAq^MU!I2Mo;f_L!^erz ztfMf&ec;5y%rdO&p&|M5s_{rt-q;AY|IF%HJ`g(t_W>z@zmZoJjUT$#lb3L?RMwS@ zqyv3r`ks=qM%_suSy_48xH3X-W8L9$ULAWXD1Ue(ILu%B_hJgmykEQq0k8LM{(k{O zrIz2=CntjEqjqY5Oq<~_<_lRwT*j}^K=C5M9g&gF+007BZ2r$#&K+~=@>2rh3G@Ci zUIJ}uO$Rb?{PP-vA(M+V>r}sZ&P1&)Z8^fz0JqOJ6h?#9)Lq}~XjOXZp4CyuO%2LM z_@j~D7*|beN%Sl;#>14WMQMDFo+jss4Ue%sfmmm%(D9WAGEjmB;AEI}<==mtjk)@D ze5lccw;Cx?Kd%0WFiceB&^=zkf;68e(g{9}#w5tucQaM=nv`5kwMC{XgtCg7nS|`_ znJPHWnl^uP1u^o%y9rn6`+lx!(QxHkJ>^l?cib&V+~=@ke|=jH(S&Lz?d#+lt3T-~ zFMH8p5Iff}ZB7w8tM0gH7O@Z%_CU}3pQRfM=rvH%z)Qq36}0F1ve*)npIrB|H*ACT#7>dt=FHZr*0*pP>{v1e5;d zpSU!)Q}H?x4OfNLG0ACz_tU|495v3`x>X;)9-iCom9-@{#}tdk-nyozubMtdWGOmp zV@X@t2im81!eOR%Yl!QC>-J|No33pg1&o{0X9rZZ!ezA{X5T_d_FqFbIr#NA_^sSHh*Y%}LL(FERLcqZ5It!pOe} zNxMaVR;xxA_0s>L1^l0=;6JZg&Eg)}d=nmvFD?(|9Rk^8hMNj(yi#yR`<8{Kz%!ef z`*ysIG~W`P@lB`Ur~ZOeUb`85DmnP$cS&Js^@Cfn2>&pCF2Bv0xNJ7G)uwF)t0zFr zvNEfQ+1IYdq(Q2DaizNNIq$RYutXhRP!DI1MC4BicVDJ;0HF_Q8>|Z5Bi7$~jpbnl z)+X{-CvJclwZCo|>hH709JuBB#gOdrn#D*yiCX3SBB{nUi#bg2-Id(WRW|_?Dw{?d#p(#Ey3;q1Lg#R-l&?4NE+s5)dq{(xJO75#cT^=7s zx6>*Xv&bPt*EpYct!n&P#oQA!qa#SiWw&s=CT@G9CG``Q^BafqO+%u6NO>gfkVFSFz9Nxwv_u)%mwQ%A!dg{HA@*EN8n&Q+4y^;)XPv_ zPsHQ3s8a8TuT!w?rcCt%&cX$sKNmp8XlXPjO(N&MGs=C7|F=qIm!p!IoC~&E z;fo$qmD!C;R<&qrr+CvbEKIHG_VL9RRnOwk@Fzekx1sFhu?3U~7^)Q^cQnAQrZpN{21rqipD8`;+s}WM;qgi<-}UGNGuBEv^21ZXEe6RsWbnf zqN2qYpXNMg;mT<9J35SDX{95Wk&8w<01?4ETqaK~OAvhX;>+r`M!?Dk(Oi|(*$4QL zU?&mkNSk%ABrnj7kWQG)eymE4Zju48Z}P^&;o^vRpU(Oio6@hI%f9()r&z|$eJ_&d z>#M@)`eCiqwQmt-FW zlFO^m%K6Uqs2?pTNOm8`>Y`VrdP<9!>Ww(?6Bd}Sl=osh823p<7ZlvY*TNuH;_>*&%M5Q}-kq$)y1Nsv4sTT-^NwqOk2f6eO~v<< zTDQHFgq4rE(YKJlxXOX6g#8B_a7N5 zieNr+1XyJVs!5OrITeWcWyxO5=nz=`R4mtJKcsE|o{JHBSC=~87Wg)Fi!#^tT#2(1 zI-Cf94G~Mto9iS;nsUSkWLXu!-7g#gOXHnoV{;lNTaN#-9oYV}9kMJPYyMwwVTVh0 zvCa(9bh^kdrDU*YA;gZ8v-KNb+8yZ+TCR;Zc)V*!@ z>YynUod3`6%kaakd&rKf!mP$8Hij*eW`C6Ad^l%&#qF@k-EX?W1?kEPAdlyM1SpF7VaQgTRDh&X8D2iNW!JvRp{Uott8k` z!)Ot+n)521T+X5-kfa^2GFbhgQHCW)IKrHXVDh{9LNSLE6DEG7D<4aJ&5H<9D@(zc zlv1&n49OA)3|?{BG_8bWpqI z4xD!E$^qy}dPOvl8urN;h1_8{cvo1tgL`_GBdf|nER4}_~8 zWmCHq9mHk0>&gKaH6kDDNEovPB~vY8mGjdIl`RrY3+(i^H9y(vrTx;E)4qNzsmuD< zG0R8~HptPv<3%ez`$)%wCb3Le0+1}yC8KUsu~9wT8|T;4o3Ki*q5gO*&{5p3Gfqis zt6qX8Pb(sfoH2YcmLB^?tV(wuEz|H zOGG$>q}NO^*Q-|<XaIE=-U0gQIaI$+?!X6+M6RDChwp@30kJS6@ldY10~Y*{l*F zbz3xDgZAB`NH+kdb3ognrPB$!z^B|F$(?EyS@LfJUH(Tu8&~nT9e$U;Y$;}Czl3I# zO9I2)wgGj--8!p}&*e$5gn7wkUuF8uQvBVyKPAz`g!icd2eR(S#@Ne?N#bsBlMCQ} zJV1_1nJQ3oJSX9Kb7Fh<8skICHU`mdqlNpHKf!7G0%d@6`*g+jJ`v(H; z)SHjjo$p2dM6d?183O^q+fO-~BL(8!CBEN!AY&KS0<@2^onb4cCf9nD_qn}@>f}RRCd^Vbzxs_5zr9HkZIa+( zYO&ep9v^LLo!#j&=XP7sLxg}^4 z+jyRPo-E4t>@7d2mt664@(!N{Q%EcXlk|Lf#Umo@i7rymeyQ{^sDtO6So@0uR(zvX zY?j+{5D}ZevjD@c=5{6nKIL%?Tqb=QKVVI7qxTci`R0}(|AB6O>TI5)F&%uR1LA4 z9uv37wooNA(}39Zhf&&Q&Q&4-DFUowos@$481mW|*^7;`b_GJzToZVd6&?~6YkXAz zo%ITiX&hdm8!EHMR_~ul~;wG*m=N`TO=7=%86sDK+itvDY*gaq~^m_Nx(sQ+P z_G$MI84v;D>DTVD0+tlw$krwhK@m|&vKJcZIge4%99r*LqTVM>QUj1%H0#nTc`&JK z5s_%)abZGa@1p^d-~uA8zWj}AAqs`Plzhix8(*Q;>&4c`sB*9uuG;O9|CF}_Ba0me zeV}zs9B*Mju+~hzqR`}ZYlAn%i(2b22l3m8e*E30W$h5N<@=m2z1`P2ZVL_XA=jy% zo!wr<)byh3$b4~)>>0FUJidFX&Lx~7w19jQ0I6FLj-vnHxa)sXf!22#nfKu(^}iHn z{zezuv;5jU^`qHjC`;C>!ti@X;S<%!)sNtI^Sml{~tb8uYmz}Gu z=x^nVz|7Nr#Oh!p@+-8=^1}q}@RkC*xbpX$3k#-_M?18si^Elrk}N5CUV%c4o?g7i z*~`lX85Ru_CBlTICqsh=NGyf zu_n7>p9=dQnFCK(N<~wRNB6da6a-|W-Jj1ch`uegd4i9-GsI)eJ%oJhUeX&@nK!2( zXvS5Bpca4E;a7&=b>QbGrrFb9TGFTIxyVQ*S_T_nOJRS-#thwXmwnL)Ww&NyJtWwO z%Li9lzKV@%j}ck2a_@H?Y_po2Wlwpv^m$G$zl3cO3u`suMQ_I_{n{XXVQx_mn16DC z$Vzr!kyoMdje3MVVaeE=&x2zp^Rh@Y`?-p%U138PMP=J2)^>H)%Rn4>D4O?Tv0WG| zVN@W7h*@+$p3SSC_QMwP9{f&62J;j@J6E8s2H6QQ348v3JrV z-0%aMSn9-{A{*mx`S?I(Yo_l@QSQmmOFGpnJYuXk0X=}_S5_JQK8HKUv`=vWC|*C6 z?)FpF&usn5Y(ahEJ+>Q@s!lHzzhy(&eP1rhl~jm-WWh`?ql+Z!R@HMBr*sPL+I;B) z_62HQbha~K}?$1cDan~pO9?r7*bw~OyXTkmIvg;@R!#23=ng54^_+RtIa$Z*J zrk-mpe2wAm8^2>PVx+;sdWYKixCi1hae{WY7o3pcKG&i(EWA5t^*X~7si^4ay?on9 zi8^=ad&!`83t@0Q>7y*6`iE(Y6WoI)D?auE6~B}+*ByJowOq$)bHf2;MQx5+$3R2H zUqYBcvg|;;vGcemX`&fGIWOP-JrzX_m; z3_W&Qegdk>%^hsCE4GMds`jmL&Y{9~{i4D-R-Z@z>LRn7&hrS7E8G#%lsu`P8G+97 z!_0s`vN zdKSatVM^|m%iD`tFRg_7NEO}33DO%)!_>e|DeWKf^rscV-;+28WvFZ0F9w`HjPhK^ z%-0y6VCwlcChVVGVoy}2BL~rayqk9_FWAWhx%C}cEa>*$x~i1Y=hN)1N^i5Y~_yMrZCC$l|zRaJlTHs0M+}(Ds)f-BU6B%d6?; z9d~wdWG3#iF&zz?^=$ChoPJVJssPU#C2a-&em+}GX}VEUAI%B^+@J3eM7`#H%8lE? zogE?lDaZ&4k{A=~5HyJ}LK8h&39EgN?`S1VS48oQ?6Ynj&#U*30UDvnkJ>Gwstvkb zdB1^lq2R>OuL@3)gIyU9E$gBsJ#f)OEy6)d7x8dt%dylApw`}V zOFDt01+{lq?|JCrGf&WbMw7Dvx*qc>Ux0JD{7~oPZ`oZ%ap$7Gpk^4i1*NL zJgoWPYyhq00xzhP`JWmt@DL;W`rVMa^~=pv3*S}Nl&^xT2>_<4pSeLCN6!8F&12Ya ze?8! zFTUA{L2V3U3EMor84zMKOlF#=Zg`Kvsl2dpN)a5!$@(J6m^}%jIqI4X~mTTclIo*;A~lRzhnC7cu7MY3=WR(-B*aKmR?X zP;GbY(tzy47_BzlXAcyi)cYJyi~*-h`bo$w^&Vs9eJij)+! zKE+BXigWk2;1|=E!H1iRT(o&@5bnE=F<_Go!{LU+@7sKb|8@iv{fA-aS|k3#u#c#U zTEo4s$#asB@;NJ~)3x>Rlm4Zf0Jx&9_wGr#JV1x54ndayxbhz{IJgryXqs)KSv-x0 z|318ApB;w6Ipc#xFXZ{Xy`Nk$`&@0nhkVX!;DAN@V~1dbZSBIfK2nqZ+{B>1@mSHP zSr?U##PR77S@6DWzh2TnKq<;xTIMlml#-1kP%F{B&esT=2G3*4-?nRJ$2GMr#%{)w zx0F7YT$cx45WIxz#m#h&x^wiPm8uCsPP0_+dfi&+St*77UYhIz18Vcm8M?Dm48Mkq z+%XKmyv`B;lj20@s6W8$WV&F5u6$ER4%Kw%w&Kt-df;5!H00~O9Kb*U#;5e^qvX2( z>|O1hL3%E4qz6!9GgXI+$ZeDo0Q)7h9KLkZY(9Ql2?sFV$%(sf`zvL*L^p66+?HW= z-A3Jw+_ps7u$>47PkLu#RW1PK7Br?BJn`BHFH&V{MQ0`#LI#w z_qL$}7Cd!q7I6@*hSfKFliQz6pWR5 zxIkquR>{SqaTA7&Tj1Bjv}{)$UX7pTkhNs`T=?8mHmz|IQ;zd>V}{_G>iXwcN)IEv z*y{x5rRaJyw08jZ0NT^q zvQ+-rU^Vb@p<&uhaXnN@CM^HJK*w{vw5UyJGsT1d_pVZ~WGdKM$Lz~21Db4IX#C9k zC&KD>nodJjdXGyCD^~|qGL8n~T{q6iNptN;JvEI>yPdqI>y(1KfFYrq-33b$;ndFj zJUdCdW;Wu(=IY3cx`Rofu2|Ddm6M7=z`mKOtHHCde(U?QqYYmweHQob(Lw}`>oxrBZ7)D5q~xNEM(%MCMSH{peOwx*3G-i zNuMgzbhtq?YAmDCzG%g1z|nhOAi>rLWgOpfMz{2858!oq$O*vZSfi(0{4#N*V0;uU zwr`f8(YS-eT8yQc=4Yyw8yhY_-9*MrFL7S!&5N;;~^ayflJ|6{Gt$N?&a z9s#t6G(At=_h3OolVAgow?Px%SLhB1Lqi-VH9CG@NZ!hN96 z4t2&cfqr{N&g`FD>6*4*;g>n5S8Lp7dA=gBtC zupvIDY0IZMcUq|w%MEq~3k*U{F(Ea3=8A_QzQi3(WY^P_bm8TC4s@!#wx6^n779Wl zBCWC;NJ;d8kJ#zIMrLiiv#%_x@t$W1J*VL%cs>&V2^hRy6no zTwNDcXwP=C8`x^1uDkjcYBHsAJDvh`)OX^nbLKN49Q-PgFm$+TG~l?*7A?r*c$i?1 zH9YS5FvPZNQXeb+6Mw_f%#uEE+AXTn`KR1&H;cq(wS(L0C;VbkqBW+_=VUc?-PUQ) zr=bBHdD_a&L+ngms=vN713cH?4-7h)`J39u1M{*uH860c)w=Oinz#3^RST+;3l1VV zRK-8q2I1Ssq|=O;D(iw@E_X(PjbIt8kt6SHaj6l!j&bEy*fR!%i0ttg4VWZMBvK9S znG*wxC@Sn%-dcno1U-yL(Br3^*lX8s^}`BD_8=A}b<9rZ%Ll#6%bHhbLv7{FUaB9fuDfgVl8s!RQF7efN{HWR zm+cc>CR$&*PH~9`kf;95~|lnTOaj9gDsWW$fxb* zKt*-HO8>gYcz9iU>_TT~xP;+$6w5()#dR)P!q{!2(%YC%1i@!^GI??Il0oYhP9*Wg z?b@KRQlTE4uU-4y+RUHd;3ke}UeiobAWHwA+OzPBOmjZ7W?nemD?D3nzz0+)VKy+b zgjK@`g9X)bJ1J!g!FIx^BK1-}&&TN|p7THqoexS=;#+?=l_=AUlb(PsAvg)A?nRre zQSYo7H*V>NY{ACegFrCCjX8NF$hUOBGQRQ)gp1v^nae6~ZN&MIoDnwYNFHF~Ok^y( zqaVvAlD_{#Y!K#fCwxA{mA$sYE?+2NRo(ro_BA?BG%}i5VYjL3*1Vu@x-7L6Gcl|k zAxu$4E#0B-iLoMTopnr~#M5cD#|R6PbD5qJ^A`FFoAa%e;P0YOQFo{637G}BeyFMs`r(^<%#rE!l9cHLZ52! z{M^Nw+Lhrv28(ONZ6g}ca#1N!gK7ueHNYJYo!jm^fh$dZJ_LB6T&v(dpShEPWB2i;o8dOpd<&uo4p_Q8C~xM9MT|(;qCuERjZxbf*KzQZXdkKD z7W*X+t`QXUF7rlwE#Lbq-&yw3hy(&UFs0#f80|U}fVre2T^a3pYHWOyETKu0>9%^@ zBz}0%QM5N>c)v~m>$x$cJxwVY<;wnYd2=?|q0^u#u1(1CWr_R?GG&~uSP zOZVf3o2t#5vM*Nu%hysz%=S1^G=g-j7;Rax&_q~6_2EmLfyHmv^S<5myG~!_C@~7XouNO##Z~Zk2_@r@ zBi4!{&dtI41HIakr`?6kxQe%NZ9&>-DQ8AQf(P@TqC0}bOeZd$DE+2!L&NKNw=PSaY_~s%$ZKUAJ37trwJET3pd;a2$azyQx@^gym=kO zhiR<_BQk56ptaZ#T(~1GBluvfJseMidPfu=L$pok5R7eTpk<(se!2Q|QP45}#AmLl8#P8`b@P{>J}X z35zPeH-s=~Bs>2FBiT)8EQ=$XdrmHFuj=7@l_T22EjRn|%wC5sHn*_q1l^M{E3y?g z0BYY4I#g;~EqcZZ(zfxgth|p~-5=Jw-A3MZtVn3Znu%??1%w6dd;CU7mG)iF$oWjQ zH(R3SY#Yn+VA~24+#p5p@tA87?;2$Bt_^Mi@r>L+eYz;Tn~$Y99})zdUwipn;|yq- zr4^pZNjPtxj3+c{BLEFs4+EkZz#|~H^i949gNchNS9hnI(YyPO4dR5T`7pHqofwjk zlb#ZGI>+RR{?5l|Kel2uLhz8liRh>s;4EU!m*!;we=q~%cV{e_RZ>`Y4 zqYa|dE;m)9xNR)XVj6e&d0d}L-tZ-+#7=h@j?QQEs+cm;BBvk~m*+tpGk&Lk|uj zQ`GL;94ZBcf~uvEu&zy^*eids$}hW@bv5m#UVD9)Lx-phR;2?x;F)OziRthDSlSi- z1P8mLx#~_&vT$h|y3b}oUn(k>Zx<3Z<0NsA1Pd=8@pT_KHJSz!Prhmqkkg$ON~pPF zff<LLKM4sj4w4lk{CiSSPi&^E{ z#Z8Xp1Cfq;!_L|(V9GJVlOgKW5X|>_3Rnv3wi?~Nc2{iJ5HKhSwoo9m@}Vp375wpL zPHU*%x+2T%K^rbaW<~wX%x5T&S!qFe4$Ney@lIs3;+nQD$Arg@2&RNGP5L+(Hh62a zq3gK&u*ec0B*aWWYaA?YyN*b|xgVF%;PMs4-kiQuJ znMS-zskWvcOi44bv#0eh3h;Y!O&e|tl#S@t6&6gKxn!HaK4-)>Wc>#+Vp zj15^az}3=Sv6+ABJsZ&MDzrbEr8tP;Qs2?8lD=dwmQmICEF1%rdwYNUQ*8(|9&>us zfikG$mQeAv1ba?No~xu83!+KMrl#Gf&aHa_=;(Iq>sk?r858I4AUL_qr6(Qr%m1%${Fd>3t*n8<56o#EVPcdglQ z1sF~9zE)`Sz_Ydu%J;kLto|QLomcR>I>;pa=XIe`j&Vih_7ph1W=u;>6eA-UCzfD@ zComY$P$lacIHeWorfRSI<{45*?gv|}#fKQ>nyP50Hy%pq0X9+*&npQyQ>ilBwJOxn znUyUg#j-l+`P+)6rU!X`4C4jog7U`mYQ$G2_b9Tk+N6yo4Tn&M5d3WMtgUmr3*5oxboo1BMg5{h>zilV1lGfmzcX0V_VkH$$m6x=nt2hi6MQgPACve>Zc$$wGJ~yJP6g8Kb{$c}KQB|wGXMN3FXE}?Q;B1HDIIn= zkU!`U@3qB4X7TItll}^$bc)|gRK^8pYsEHUpkX}nDE(TwWV!W2PI-f1>PfWR3ycq}Ibk6=@$N0xm9KxQ7O*vv^gG2y zyE3d#kGHPV=dS<+%yOe0^%7>gQ_E+AA9FR@I)8|(eekT^{3ZUgqgKDV z)^uTRgpMDs_J~?TYo3FydOc5WKIpG7rnI$C{ZA{ex_#&`&cD`oA3u4|aoszDQ{i#a_7ZW_)eIw&2qFf=+bMX44(s&O@45q?s`wXbo6)a=H~ebsxFgbw~%j z4>Y`|&RU0D&MDR|H$6Hnn@v8|_PHJ$>|F>SstVcN0Xb9$a7eZS>h4L6#YRr*rHQ7-B132+COxPefol&Sp<{Y z=9P+Lx^6+e)FC*--5j-M3-0h{na&a@-||pBp|YKCD>&M6 z1`vC3TNjZWxK2H`)s-H8`l%g+V9+=;H!>;C6ePk#O$Kl#GY)i|{SprX$Q)la>N5t9 ze(hZ<4QKuk27j6?sOsoATkzdOiXi+UtoiXbFW(W$YFe?kk-n=UxU0=^X{pO0VNj<2 zE>SXU;UelMJI6uaev9L1M0FOwM+9m)g$29m>P)@Eg?)QFC#MghL=WbX*0GFu_9fJ0 zh^E;(x$Bw5th54F+Qv+sx^nM)!jb}4u9wrOD5?yf_h(RF4EMhNo z3UmEe9!~D%{rrXv_XdaJ49)~H>=5JGc;5QmHk@*ZrNK3HYOzDw z+a&V!9@d)hj#v!x7dFD3p%+48(a&4v0?8bGXsB^Bbd#${mZw;`mxU5>%!D<$DB-Lt^h5iv|bpplL!RY>0L z6%x7xs9R;Xd)=4I`(lRI(EGD>azimc9H->@>Ko28s40zTe|BXi8+RZ1_I<)~TWr&R zT~YtnzH04L{j;I+l82`LUpm{$s_L7!;->37+p`Hbz5O2TZC!Ht5PrF7Ydp|Lly+CY zR&tM~xb7~P?=4hQ8i(>OXH&t*>XGi>OkX@R?r(oG4cQQAn4P7Wm!?O(92m+DB8_Am z`{3D_cevKobmDUNX{~;OZUlB^Y6iI+5k*A6SBTt}F>4zNWG(iHuEqh{{}G0Yiox2W z>rOtWL4nL-FxMHN9ZnBXmIXyGLx_RX)NL}QS(+`&Z?>g_BvW6FyF~_@!QAccnecyF zq$95}%&k9ePT^RosE{eTX0Guicbmr-+3l4l&L2%Pu}*X_MuiaPCpgcobr&Z#Xbs#y zWfOWSQKzzL`wzxXHpiAtBnGUv!|Fm`xDs}oMvX@ZP`*c_t$r*g&1VNco53gJspPWS zHy1jJ8IlBV+*$l-ToSOQ=Ce*WwM$J4`g2PTPSNuU0@1TwjC3KzVH@uF^quj@!Q=g) z_Ey@n#g!QPJ%QL>Spo|lCVakUreJ7aGv`>Tt%cYwns2joWuyz&x^Yc6T-Ti;#vUeW$=YuTnmbi&9w%6Y>bQR2rQA z`sNu$Nps$NjD)W)tH0>0qnk*{m1;C=+6eqaoiIt6PIy*-_3FkGSn1}KpPr#f9M6bF z#ijhbGQnN`u7I@quE_7eZD~*)Z*MGMnjPX}MW?&7uaw=X&JH;Bd zt|U)_Eoid9BkpMRI`jS_ygDNV&x3bIo$6vKqd3+QXn3H7Uc>a#0nzLMpgfAv)b ztNh;-S(V&Bb3SY)DYbu5h+<1x|3Ivu@62dE6UNQ%#>SG2`xz}~fS@#H{tU0_P#S-% z3wMPB_qMcnBCjnHnFA!5nRo9M*u^%ZU)N$-@a7cW&;EN71$Jr5A6!GN$cqba0HKJq zL+)gfGO>-_W(Vlqy|{A_>u`&xy@8)Bc_X?4!kG;v_^6AiT$%>bf^Lph7zh62VQBy@ z(fg+L&5kAB&Sd;$jCW?ysGN*vZ0|Bn6d{?f%L8nbM{wFq*M zj=LJe&$3{1uPQS5kjP!&$G%q*IE*R5$?R~=GrC1?p975qmhZA~Y<|{DOE#>|N2P}M zfM_F`*FHi@&T)xTQ4GN4MZU-&(vqNMa%o=8lQ$1i&n7>XSytdnm{X4oe#Zo!t%N?r zVW#scfS&8T8<)5)dDPZNY?h}_@dN1GQWRB$J=b5!-&1U${Hq@R!* zRjn@p!2hWI$l)S^yi=Wt!uV~6rrT!HJVwt=daGd8u&H(YZo8+xt+-WK<=a=kp6|}V zs1w0%orWUdmWv%-w^ap&<0-&{g628OTR+evj2K=0-Ji9e%KN%PmD_hUaQB20w}uH!t`QM{HNuA**Eu#NpSm*A>ds?70zF#J_Lcd zsWg!Tf0~8y?(PVNmRrREz|FmT5p*$aOG{AuA80lqfh>Xlh%N!SHp9dKqCkw7>;$bo z7jiyDQ-^nL861b##Y7w~jUD@PO6fZ~1Y;eEu{ujvsql({n_rg65t|He?q)Muyxi`v z#H(m3Mqk{xAukrjCU1TuG`WL15D5LF`2oD!Yk4w{F|-!*OOd6sQV&;d&-I*yd&X6l zTprEIaCIaXFL5~`02m23HA~0UTbrl9OAItM=?-*h*=>(alQ=6Z{^mBzZcr(@^PPyZ z;QYw=?$|7$w)qTTat%K8TxeG*uo7L(qKpjM)R5`m^)OwyRN4e&c+}$II=3Ud4sYCY zRxV8-s2lh^!(HS+sg2VBF=Ef)dI(Nn>mELhjM^Ph$)#eJ7x+%MdDPr;^~n|0VUvDx z-i&PWk<3~08rqdbmk_;6XBPJ^@%SfE!){H(cf{Gfe3FBFvoIg9H}$DE!_6i=*<~<; zx^X=chhSJPT758#thQ`cG+s}QdxJp?UF5Y;KrHjao?ZzXW79kIiC8~aw^Wg4aB?5v zczU;{m!+T5M~{`Xh)QY`G%bD?e0S9 z<$s>njnjm%kK6N$(j0HRWSky9CXZ9JFN%@UjS%eUp4A9d)-Sg4)h z$yCzNuy4B$w|853FeGZ##i9N#S;X@6c z4?CDa!2mdR=E?Fe<>>|z2uJq@pHgR6S{C<4((dc^FujJ?CI_%XBAQi07FPMw>wTi97{~GK1|jH89P3e%E@rL?dvzNl}jsJ#K4;l3(`f zt7)3xbZ9TNG5M04Mkk-pXMP8;q{p<^svu*X>~6xibdkH@OE#sg1iEz#W(F8hW4Y5( zs2pt+#HndSlXsa}=B7Oe_M}deJO#uF5}*2BzMdE4q^fuy>c9iShSCz%MqUp;2$Goj zrBqS4=rkO0&E|$Fa81R+)A=ko#h5*awjQsJDDY_xuLe5ik`I&$tv!`EwbhO~biY`P ziI263*~(8pP|t0K1Yl@Quf%401eJ)khe%Swa_yw0kNc<|Z2lzVDQzlP)TVj9gwnE$ z7>Q%CDV;wnh!0u0$z+#1?#ueIRx7b#@|)j=#HFcIo3N(>%fZoSPKm;JNB{RBzUDbw z5sB6B;Q#v6{>NbVJ^5LlWWUeO$k$&R{+~Y0f1+Jl->ED!h;28-`&@Q_Xgo)*rZzcS zu66;M2V_GPa?!MU;zw;n01Z8_v!jV$*Dfua^F3Fp3e5+_EuL<-cm@@^PE%?F_hT;! z3>Rh+jh+Jn-ldkS?wF}rNT+`lO@_~ocs1+yV0>Fk zAJe_rg4~2XymwQGn_WiPdhMM=7+k5%rk`hIlsE27`DCIpa0$$f@+^|=iydtWnT4&s z2V;5nQEr9K^W|$q*3sX_gqzObY%X2yFI6?Js|XeqUQ2tFTRB z(o&1@z1vU0r&FH=EC*-G^L|(xsh6hT|ZKq5Uj#}!{L6aABmTJOsW{oW1AqECTiiG1^ zaTw11{k~b2r5>*i)L@jvD+LKDzpV5;hnd;T{&hyK|38)`rZ1#_nUS+QA$L8JA<}HV zwW5bM9?7)u_7e5PhQRX4h$_>sP|LBKpqVbNZv8k|elVoUt#nR@zRWeU{IrZoMC0LzekW_QUVP9}+q_TX@-EdAXAVY(dGBu!}&^dg>fY62hA?_&R9|;LC?sYA z>lnUgJRjEGZI$B0-QX!-dQoE4t0d+b{2L?#pf&5!o=>Y=Z_C&Cq=8=EyxCriwAues zvrGR}9)0@e?JwBi!i+dd#S%0e{$xZVcm zV_)EsX%wHT{M2Z~OBnlf=jNy?KaJ2TR!egNcTii5<_mSfbMoeLx0d`m*-FfQNZnLa zWRT;EYKw6PwI}d7j?<=D{K1+Xxr<)7R55=X7FO)OmQQnxKr=dxU&*M_@Nz!?34Uv$ zE8u8a^HAozDQcAIAhhX1Dl={K?AKX6pnRHMEZ;P&C>i?=WZY4&GJ5r;fW2#A$l2Ja zZsd7I>u~15>kA!4x7^()f_*OT2BC2!x2{+l5;@DKiG zC95s`8~!H89qmLNnMZlK^F3+V-#?s*^=D96y}LL2cnjT~*Uqm=kO%enAYg#a?uj^` zo$Z!vW+zSB4dgn8g@^h}nayKG~C;iZV zk#L~qjk{Rz&YKK>JEiFz_-t6^b~r612C})HtF96|SH*wh49JfRTO>V~+}@qr?|%lz z%3ljUy<4(RB!Vng%_J?-NvXJN0(&D_Je*NuSQ1~1*@_nt;<8-j*Lp{w($NpGWU*4Y zS}!qs@znl@e=TvZXFwM@5`Ha(I5iY+n_(AI=Ku&oS%9hU=whI#x7Z3shCD++!iti6 zC3h!a;-K@gUar4i@d~sPYr=t}oL=P1p43@PS+~9p%j@egS8|kl_Aqm+;b-gJ@i?YL zW9#sQTu0_8M(tuQiG|Ol1$x&C=O38+X`kf4ia}%(6pg-y_m+<7#-CjZe*jslt&7R+ zW{)W@s;#0FMyE#D6SN)L_tmdGKa-GpF6ipkgNo!p5ALyOc#Cy~(ClfSA64@_#SR*U zaO;9l*_|V9CtU?jesV6g0m5EXRS&QgJQ2KUex%vF57=Ss^bYn!YG`-r+Z~h4#4q^k z=}pIvjX8k0IF4V;1*GRj>QX(z?8O6PIA7~t);fnvRmvLjD748oj}tarn``jFR;ZlQ z)sk&+dR8P88kNFya_U*6Q|mW4qXYMA$rJY8Awfe$ZKf5uv0Xlg@0H|d?Jj@R^Ia2a zRA%Sc5p_>*%bB`ODI_z&cw~!w;ovHBvRlb8s)?ID%CAwl|MIa7@nC_?V9yhr9Ta-O z{OhQOBsK`1??TY)DEXywPutuhOAjLN^$1@FB+ly|4Tvi?9bZ^Hk{>vcQ0=npIM#BA zv1KAT%3d`m$?^$-m|8PfH7}pm~GrRUaj0Z+j{#mm%xQJ zJ6X@p`@6A%3cLIuf~DD=^;WyI0+s~5=+Bangx6kZx2~14br+en#HFIqzH?F>xH1|V2 z|EQO0TOvcd_&z5+jf)1bTek?_nVV7JN6b(r4lu?|CqFlh+GoHgcIV}Wu|BK$44r&M@$ORyW$?R^0?O*@Z6$5h2+1v0;R- z|6s~wWdoh?GB0je*U0KSm9S29*iFO7uYt=tlvm6Wasp|pCco;I69#AU%1PvG3S_vd zh|nHxL(hsoIzPj0&?vgsB@hM0^%}#oG8P|o1J@(w{&xJ6bY%Lx1rCf%JM~ z%YPMAd%1fRcv=)}u&?dcZqJY<=!7@0%fH`B^CRJ;KMfQxI@bl8B&E-J7vEYy>KD0x z|7PFcMhwP!?sTYrhD`mcUalIW<(Sp*JkIR>Pxk%U-nraHBecKW8&!mj3vJ^%P5HFT zPU1$Z&L{(j1`vGT-X59w)y8lw(V$122RW ziC0Zl9h2uXR6Y50{&}0pU-b^Tdl~nKs~QexyPm}vcSvCYzO-H&QN9i=Q+Go2N+ zM>fxpiS^N1A?KqGu4fOh&D)J4CCLDt#3o=*6+h*@*17pZVKKsiHXZQxWPK7L_DbY! z-d4+q;|?BDMk^QCgov`s!#V zfS#Ht3{oQRLeII$oRX;YNV7V|P0|_fSOe3Mzfw)N2Xgh-zo&EVdT9qFyG@B#3?=m1 zr18$2oDG<>U9+x6Zg71$j%R7R^`g)V-p-mE0K`od(0ABU^Eh`B=MQQhnZNc<{L7Tr z?WH(b`HlUKlTXn{BUW*_T}&wAPKQEq z?V|b4as4F}^2B)w_n)20HU*ptYhf2i*Hv7ceCIi|R=HY~^X+hcsic)UsmrFgIBQ7p zuFqrubA&*kO|G8EYs;$^(M+)-A~mtCUyiv58)8{%>bh zPEx*Ju08r;PzT^z2T{7UQy;Bc<2GD1+5Q`oa-MrO_;IXl=GZ5<=biPA^DK9&AgHrI z@;K0XRiXLn@}qYn3ChUp8~>|dBZ8eJpFN5I~XCm^F zS>&V^PG|a6=8UORMiM0Ki%dp8854fo=*@ci;KThjvA1F@kUDSLvFazUd8<3wW#@x; zRlfW+9_S80_yM0JPL=3E3Vj@NDbmqXcYh*|H!5gmPK5?H#}&81p}jt|Hj`S6yvF1F zzs}pq37zg3#YLwz1#N#9IeCdoA+@9IXTpk>r=MuScA|*g>!*fIxb8MW&O zjn2z@T}gY9gOB%~mC{T$w>+ODtk-eq!AYX3Q3yZ^bEo{wTW#HsIulyYA3`vDE(TV$ z@jgfX`8}{@!Cz7 z-A=ByGcp^|$*r~Xhj5)GA=o}c9^RW4z(CuDtc8lO#} zT2fx^{h9Q?shs*n&g7{5dQ+Y8%T3$AD?RyRH(og(#)Yu_`}A{>Z_24jE9CocY8+!S zEV-NOs2^o(9i#TTy!U>+gXZzCqc?J3Z>_ziTsU(pnNqmF9eu~?xe>?9XyJ-~z6v-p1uKGMOFgGm{() z7x7>$G45TcT!|`tZ7No(Q=p#r1RD3@=YZ3g%u!{yNp76iWJu6^yM2NusLw*|+*{d+f!NcPIa)7XfQw8+`J!B8uH#s8 zuezA%C$^r)Y4fp2?3y>&06EI)<)?%YrA6$aVveFQ@iN)FGcT|gXIL{-$8*0G2INcN z&(P&*v9@7vhkAahY>|Vz+k`qO5gT~p8dF`cYKRo$M-HZ#!&cqeG_lK{aUP8_`>~r)fU@52espA z-xS}-<`wW#kEcy!bE+>sG;Nu!EtW}IiE~wEoQK!U_Z~K|?&-l%%eHV1E~Lk^Ua|o7 zg%H2yjn%e~pMW`6-{dV*Gvb_~MrMEOlT1UFzW&;$Nw|*tAXNB6XMQh7H`#wa>@DL8 zsMfjqA|-?M{&zju2X*j>qYIp)oLSkh#6brRSF;t)w`#~5jK0&US*a9UK>oPK&6npg zU#S=zna?JQt+u%a@`_1$vB~9#c8a#G&F5X8YLe(?n5g;&dy?1_^3?O0p4Izfm)hI) zvVU+6y4W9|XDQb{>A=_q^cwWz;%RQknQq7x6++)oi@pyFe~ie}A8@Ws?QZy%N{JBN z`Krn7jcI!HWW+#j#{kzo*KD7zb?@oQkrS|x2ZKMQ4i{L77 ziZcxxdj+R2dbn^iz_sH}eCf35wbU3t^q{Ylr}pFto?xd+n`@u!QnqIv_@VwnZxppP zh*-ZcG`D^3(p;M85QvhRA9|n zf>*F`_S?G@hzgh>etDnTGT1by|}# z*(UZ`+-yI27{8Jjsvn>F=|Rl975qWStH1u}j{-%_z0w}U*{_zWV8fZQglh#s*(TC} z;CNWw@yA<1=qzd|cs^oB=tObU=ltWLt34Sq&z{Ua?A02Y(n^vRsBUsdH@UnUsiJ=xHbu4aBeVspMkLlVTSL7Z=m6-%0pqrORU$M87 zfg;>j@Bs|r>$#^S7T<{w3Yz_9jx*TIv)$ugJh%47v;=a0dO)T7N_M5l_mE}>SJ7cP zl=%qX!%>~kw#a*2p83i`Pqw5vZX6qij7JZ6Sl#^zPG@}O4d-CgtH?trcS4-ZGZ#~_D5*8(lTR%S^eG_#=dYPf81{ zm3*@p7TQnWN^go+Hm_ek)D=!r(&*0a`Rf^|$EG-RXRMW@;MK~_{ki+*S|8X8kQ1>mO>jB2zEggw}~_9ueN=6b-lKa@mqzO4sfduGfyLuwla4GAbGc z4>4pAmLMFPLQyAwlu*T9cECB$0pE^fI~zLNOP7`UhQqSkLiA34^$-G{-1X8~E^qTU ze0RDn%VYjZc6(D?h*ztYNSkV9Ghgp=l8*sFc155KWom58xjoYlb0F{OdXK(nAq$GM zE}9SacYg#}+hQf1(9HSGXl1E>XVIc#XGU3Pdp)D8COwRF6O;2pO}lRm214NGRd>)f z1Y1>67wY`6j_#rzRz2G(b24|r+=a%M=X$zN*bE2^N3`2n`1WpB;Ok~Q3?rGh6izIw zAa4G{KElIBbcBOIbo!Y8jYIk!pZ-J5}KvwCYuDL|9%1DQ9^L8H9pmwVR={ISk}AE z+!flX%C7hDRaQgZp%W4QJx3q&px#^+o;mV#nnAVSI=1Xb0$UYRyotWf%gOibCCsB} z<<5?aT0ENuDLjAK)P$6!Kk1xr2Yz%y0QJ4+iaBpQwHl7S(;WvH010ua&t4RZN|e|5 z1Xns_TJX^6R!=EEW@y33(_P1}eA3``6_M}xw9&JtDdbDhQmy>tx%3-+!9uUXeR*o; zE1)$=8K*}z%uZ}DKgMMG(|U`gb+w9s>f%mh+u^#%=P%B#1gTHk;Z9tGj@WImU=^DT zikpW`xba6%4m`xhb;*c`@l|u5GPkI>6y2GfXJnmN$l}v^S7)Ei*#N;Yy4@{>RKG&i znJRESoG4g##@d)(>xJWPDv2UEdk3lXa!hzkO^eUTF!J2*;PiB!Vdi;hMh-Q+Su_|l zJeO|V>21FIoi7|C59DaKpoV%QzZ^EFJ;NzqDV`v&612V=jeRYZBuB8Q;q2dYHegL;>cPCoKHxt6$Y{m)i=FVX|9OUh&)kwjKXgsS|_YQ?``u;nip zOyUNI{;h90c+;(trBGXEvz&0#sNc|*2ma`Wa>e}j&uG(Zk1S?hZJ?tnH>)!0m6_Ps(diH6U$wH-jwJ^tnG2D$RXq!Be6J?`7pb*e8wX5E>9 z%WrYeaij79T!DlNS|LJS_8K_nSqB zt+@v;UmV*rHMP^H+0LE0aQeb=6Xu8C5ha+kuK@TJ+6D}mvuFr6BcdQBqItnYuQ_-< zdBUq#ne3JDmEfLM8S}oxADB}wlK--*K8BF2UXVfAsTn7q${urD5jNE#@unZ9C`W0vm3!p=+> zCrJ5?2{-tZzD9On`?QTnP*rs&aiOLVtjZIi2%w%asfMujDbNfnbkck!`=R<`b#Hs zxt(A&=$EEGeZkt`b}rXNn``QhRW5Kjz>;2FzCc=ny;6yNW4_MP(|l_KklWR?D%AqA zBP?cS#K^YOj(Q?HHm2|s?ys```;jr|hgB;1%7h@)H!~-cSs`8_f3Y$cWd__c3L0iL zpA6B12X*(V9?vf~H!c}mtTtG2s~R^vgd5NuO{tm9s6!R;Uvs7cmi(_obonk-oV&|} zqG`ko1{$X6R$wI#GccdNp!WQ)L;t#vk~U}4(8meyjkB^Fw>A}DNE)e znVK|hMf;9Fb{&y28zNTYixbK@ANUj+zsW*m0tYCVhl#Q%kwdU=JxdmC(u>i`g1K8& zPBrbaR%(QqD=!ZRq4sA+#?@miAVvjtymA}{hY*~=$P4iU2q9G7;G|i}0QPGI#w?F> zQ{YPeaP+y9mTOtm$1sFNQNjz)R=2k6@s9^~#I?s5k1PSHUUQ~<`EIT-gS@W$CUA`^ z{^3eXW7)#JWINDaGU`c5QTq`JVfd_}!XI_^=cXD+HH@GIt6j-iooQ};%>%ncnm|2_=l3&wWO0?qG+sTW=J?aR{(AS^o( zxfTVvkq#pX!$n2N>N^Dik1?Y;4VE0v8{oi4Nnab>c|FiPp&WAkIIULjx! zdv{#!#Z8V83P)mt$33bZ*TEZIswqEgVx)B)$N3+$lr0iqRoT&bh!UA8&s0<4B9z-L za8XWJ9#7p9xLfzPu`#yo)4wrT%a!<;Om>xVLA%zEf95LH{5}nTi!>x8gt*9 zGkkabdO-iZ9Jk_uF}Iq0S;qu}D%cX{bGLyZR&|M#?ooMDLl4}L^%Vs<#?-!FzF94v zRk7!S!4?_z+bG<2hHsNMO$AKzCiOpW8kUUI-%oQQ-SJ^b*>i^F6mRi=8N=4?>pO#q zQTsuJU{lwnmjwbBPQSsFRhm|! zyNLOPj_SpadP*i%YAmx**}SEjLsXNo`2ATK(@GEq9ye|VOv}Fo^BgL_a6$vA8gZEnW!p`*+)&V2mj zcw@jH9-y?Aks+OfOagEHar?IlB-W^jaj;M4eQf49y<1O{&h`xUc;6_KOmoYwM8sW16QWJ zI#Hh~@zJk38O4*p8n){qM<9NNVJr#)QiCgqpWtx?gUOz5Y?&^gB?mrj&oslUB?2=mg4x+ZrtD$Xy3{}~l{G)!TzG6+)t7Q-bOs608L)EM&@6?3tqMX( zJK->m1(m7S<8zG#ylB3tPn(9m?engOGQhjIv1E^HHEWo2ckPn zBx6XS6#ci^@tfemMhu|1yrw3@Q=ob=Ua<;k4sX0??~X)Fn)c_`d{ul5vX&?i^~s2v zyqP9gwSAP+7n_BlV5;1(Kofjs(5GxGFUSLegvQGO8!WR;g?`p@!IPmh>Zkkx{gO=} zHPsPXwAfu>t7fZ|)%Izrrw8Bv;2J$ope#9 zq7u|G3m|aJu?k^BD>224bv?6)IBwyN;s%j1~F8Vo{l8Xa&a zitDHzmak}hxZYyoC+PLI;$TK~jIpj&HCZ;*a?k2cVNJV!N$pcd8rM9b*LYFZ9%k8V zlk6K57Tq&hXa#zG%K~_Eqj$_ljQqIZAygGU4mX1{6qz3tOJ=?GCAhXwKrHCNGwxr70AbQAE&Z?W#Ag@@DNXsZ65CG#N_ zzn~K&5=$w%yc$EN1apB7as`V%Vn$&um?Na-TytzR=}c;2LJfehv!H56^DQWu+=nQB z=aJ#dYz)Twx>*KX_r}y6s7DFUk#ibKqcdqFr^$@ zP~cYBGQid!lxI|;-#KGUB8|Ak4Xxz)zRn|=R>2ynqUheT@oE^_b-2M$w&Y}H+^1{E z2X2ESKzJ!)GB7epV<{{nZ{^dTcIJYln1Md!Dmzu|uD`wsh$+h-w00vU>mGdL@lEZD zPz&v%d`l|0)pz;o9O;hS=D4u|B|MD~tO3?v!YLQgNCa+!$(717Z4k%JV+U{#J>-Sc zL!LTA9?zeW_$>jtX}t3~CQDv%bOlmvsxGq^%+!6YH{H`F15Ra~-Ci6jV1a-Q)QLQ| zh2LQuM`{M}IVFKp^MyPomK~>}1H<3*XEj!|69TNwijd{1--b^%pHlkRkU2?oS=4sr zDC-MwJW+yBwjfqu0V2sMjJh&J%kh?G7&0SGdCEc2xG5zGCja33upU{U>QYSK{t*+ za6_b?+LV7}ZN1R%$vmjeO;0$&O+GKlD3c)u*7>GioHU+^Z=p7@MXlSaw9Q_#zLz(ban%NsNg?DB-azRGjz(X|(T`TtE^(VgUNDY#1Vi3Iw zH^C{IuyQ)?bZmi8LiNn2s+N z-JCV76c^@?;|UPGmt{IBaj*Z&xsCvF{jE5behKsvd;W|3(dQuLILM*_CLTe(uUExA zQJIr5Ew{+0Gn_Azix=$)z<$ak$C6!c@O`PdZT~ebZbB%3s3xVJE4y%WP~|D{eTw3O zA+I^Ow$zITW&476==|?^jUKe^#j;iYnD_tEZ-c{oA=$!5wQv(GnCcmQjA)Nzar!&p z=+z7#a%g$z7q_<|0J`>OCSR{Kyyf2GHVmKsX1dc?a0IflCH1NE`HUOv^YE7(5#jW% zqj6wBaeLn$kg%{hWb$SvJu2T4RFPkZGXj3jd793%$G7FKPS&>dl3y-_<;gl&23)g47-IIGNtip@AZ5sEXy#phEy3| z|FkjvqW1{5*niVbLAKL={KqnN{+#IlOq0~CI73zPrf3wf%YQIxo7 zL39lyTIQL$Zqdb?i+nxLqW#GyWJBdAKN{Ii88fYfmubViPP~Mc$H*<5TbDPb@fcXo zbiI8_8r_q%oj~zn=^xN@T7wN``?V}x3cx+GOZRm6Ny5K|9h`$19kM#yX=<~wF9SIo z`jq((SXa963+?S)`|I!Wy+emH**JaMar>FTvV0x>!ioWqYd8Tvrc>h{UJOjS^yrN* zRC|?-P1!#{h~RbG;fl_put#*9#XqDKU>aH8<#|5u1*SvIm|S$zsTd)KZ-j zxMAO-)j!cPXtN3tmVbC*tFq(FN|IZErk%3~eZ=os|CNG@_Z_|n$nw}1O2zYh$dCli$) zws>&S_HsH$rMwc!tPtr~h6t{%m`&P2bfEs}tY9y!+pS`Fmsi zFRT66MaaX`r~T4j6ILjZ>{O7s&-Kj(dI?j1m%hLY)#{XR}pQ~j)Z}Jj+d;9NW^*=sD=oUQ? zohg1HeQ?PC-@Ux>Z_)kFDgC$T{>~u(ZFL7--hWv2zpd_opZqVS`M1OTAI|&VvF`7} z;J;(t|BTT8hADrCVEzqL{tl*u%zcz%wmJAs)04A)SdJ3y3^)bt-J;Ah5SQULDe_-psUH7Ur6fN0s&j~BGeqQRVD2l8-WlDBP$i+YYTE=RO&y0c!x8m{oEew z-9MnRA=1Yt*7^kTd;+_V>$iHDI=mS$XGUZhFKr7T@9nlG9113(a9LH<6$Qc%zx3?6 zvX4y?l2QreW(nwk&VlFr8AKe;(f{bF-h%@TLe`jLOE*5)b`6#T3kC<~#2%ZLKUHEH z6brF#g%HNeQeEWc!-`%xw-0pukCAO2V^$)Ej2z5cnrazTAfzJTuyjR*Nm@r%A=bk3 z0uyh6{pE}Y{&vZ|dCMD0viPflrA-W>fs*2-6~2o96=wh2g_^e7R9&cb+(G%xo~xZs zKM5pjCX{gEtT(l-5;(3Re?3?ycUjCQW$~(@n$g_*B`Y>|k|M3?LLWcCL>WO4j z2;2W#C+WlD|9|_1+P{bOr`Y~2t>4D>|F06p>n?vk5&7HL{^iQ%#aGo!6ok_}N0RgR zW@A*}TkbVVXz*0K@YFYg;k%ogsk5h+hiGMudyngbTIPGVo|yPkHFdQm<=3V*NoE3C z?mMeluvW*$HGqy57TnH;A15n+m|UHd1h?;|&a!F{DJz5d1fo9~H;`!t_TDmaJTE`} z2|fVY?W^kngk6QNq-*1ICZRu0%R&lj4dMLN^@kgGB4h^YI(XknTw49>?(e+-8ulkQ zi**AtVJ+PMXzNxXznHky8f3mU6*(JvN7K_=cqd;bMoZEHYFrN)w80YuV1eFzxb!E5s6^^fzM7ZLijc*f z#A}YKFDsPuon_6++VoXdI@UJ~Qb`fEnu9P9HFB{Jy7PKz@QR%3s=3<@ZLhjM2 zwFYL%di?_&uGQKx^JnYUcbL*al`DOfN?~K-vu8)3F+hCn5weC@Ld>Lp*H)V2Y&-$a zCL@oe9-iFqo8Qbn6!*06aUCb{2=?ngh z1Xh)YGcz=tDrX0I{*ZC^ovGfal)*S~<>3^LLU+cboFxgn6{YD<=;gEw#C$P6e@y+K zLi2B1OFwr=MoCqqoAqE256RJ)(l^2;>6pRX6``2Vcu9!{34-75n~;|x6#!5WF4TMc zP6`vcfGF=oQy$<7BPOKBzZ_6shN(xqBl(b3QeUEZ21sPLd?P}k`gQ&qGTDm`iRUbJ=|coVjq7XOow=tExL^`ch+ z&gz~}$w=4XzPUASV;exxWBTe-hn-~|5p%_q$yfvpx1X~EyK}p>Ps+kdv~YY7D^u|5 zq=>j%1MR){j_WC)%|xlK8B!0r&DCKrzI19lhcW@FiOY+{q}em?FW0QBNLmu=nn&V%Evf+|YK%zf?|9}q67&xDej2#Lpb zVdxU=4&0KTnkCeGDSC4%b9^Ad9ieLB-2!*)=}(f^G+x1`9=eD(>`E< zF>~M_J*SjRm2-wMgS-6Z^-mv?dLb)oOj&oxCTWKAYpRJE<7NVZH-Z+E0fU4)4KGiD zDj>4ae)C|nGV#V50qtST#xsgv@Kz4Q&S)OoRkvf>%3+@F+egQh16NSg8+2WDkXx5e2HD9M8@gzipl z3}aJ*R~VNDR0@o~+Vgu^QEs!E+`QK1^^QRIZ+X7=M%=QmGzYMu_txzBQl7xY*&-o7 zeu&&Vp>R6_N_xGN!=MQAps)ee{Kk8i2KE##lOZKaFqY%$0&;Ur&rEzlbxM0PZ*@99 zW6`x5I~ATy^6|`o{TgU}1B++^{Vd`1w3auG>*a%@2>~h09}ruqnS&WY`(~t>b`tZ6 z{o&*29N7XR-!1j4tB{SId!@T+0*#l#Oo>a&)Hn75Sd*BzTA{3E=NhHHvwqR5KWSu( zoGdultbb7G<|WSk#flgW8cs|uo3@wbPF{whrJ24OrTagvpGJg*u_|@=VYm5&w_b5+ z=CIvulne8M?jHg1C^A@%No*mRqiJNL^tk9rDDr+p!u%A}oLmDHUzwghGAF5m@7qKt z6qcmJ{En)4?zk%N#Vpk&A%oT{dA|n@cj;<|En`@|qnUQs^-t-Rs1mm~dv(qAUb}T6 zwh!M^5@16_fget6sFE6TfS`bIMFHx4a>FSsn7kRCkd}O;0g^C}vJdPRjAy<=vkm5u zz2@Zzu|ibOjqY`5x@)@!OxNrDRnIGkU|u`o-wpNX_YqkfO7OGaoh<0pkS+)wJVQih z<6xF@FR*KFp!Y8aY~PfUG>3CG%k|OOH9?!}?WfoEsD$^E@3Gf9`1>Fr73D_ilRB@K z_|1Zh-TM^7Yq>#&`vX5>RF`T!6Bjoah50{NK6_Gd_4eFhq_Wb@1M%<=^cuoOkC-u> z2H=B^IPpdZ^Kr|>J4iP3D6WT0jOl_W_%1duTkcb9Rvt<(EqHg8K#}-7h8XuBG9TJc z6s`H+P50QW6XuP5B7|n9rls1O1r0Ja-n899FF;IKHE8oZm40+TFP(*?kLM z1K*4lm8!>=5l|=Ejpj^>z{n1zojzH-zyGd#=dC4Xn^UHjzV5umWf;7cEa~~ybbKSS z3p{6%EI7d(GL*QpnI@^K3}2eXE+lqz_m{Q06n6Y9wXVCV=j)YTRVUuxQ4&PPi@Ye1 z?pn{PQGQok?`30&O^)uiZX+rXR-LNpyEKtUcoT!9f@Y(`GzLwe=_yABR1;c~*-U7@ ztPj;k_Ew@|vM@&1H0=e-pzJSVlHNecarW5)G}v37lG(yj^~~I@dsF~+m<7-Q=lb?D zQCZ23h>=9H@{+&*2wTzb`M!6=ULbAqW6M&DxCeHx`7IhqcI$4~bIxcePd-#v$v5mJ zlR>?Fn9{hfY;S;c>*nPrexmON#Ndqu|M)$BfHeJF!SVfjw_l zK*t%GI~|cdJU87-s%_$DR0Dbj2Nzv}X@X{hjX%L{+Wx+C%vV$a$lJW2+kS+>7@akE zB+XyXeZgPFwcsTVKDsvEF33Ey4S($XAnZQJ%fUq|x`yF0Zv zPF782opko`0o@yyFBwh)n^V$sK^VugV%BU(&+dGIidpD<3K(bOo~tz*+;D;Bb*Z>5 zW4~!|5U>tgno(LYo;iMQZ9jr5y-@}WD{F-aH}{vhe3#KT`zNJ8ba<9dMDXVnBMyQy zsf&l%o(S+f?G*7FoqhyWU=3&WhK%k$FWq_N8~@Y79uT z=I38FCMv;m1R%8WV@oeva5PsEZGL7lDOwY=k7T~E|IGf;VEpke@SE8%D-@ZRKRPF03H+q$36G+<$0_B}pq|OE)XgfYR2>A$jqLLL~2bIaKqWK>adWw3f=Fa2gI}eW5P36SKcJ#vkoxXCpN0C%N|nhlsmV z5B9N(ih+=E8wh4Vhu7*>jKzEYUeJ@PT}&I@eX6ncn$e?)P^m^?gy-O%h@D`xt%|EA zZH>zsM|oxqeC;}w=o}9?Y*_ke5`Rdwgn)g)xp7xo|Amhx}LKWxJdZ2oUsmA z(Dj^>w}VEH5>gH$*V@9iUo@L-Bq%pmiA#%Z5*rtn&&jl^ODQyTQk9C^kaHqQg3G+1 z&FwfBAQXJ}k5AO;L!KRMwCU7_j$XBxaYpg%jWI;wu|C$UpNLxs9t*=s!H9h$?xIZAg2Z29i995N9KLdH?79f z%N|s-c3BT*Wg)`q7j8poW31Of@9YH$AcPm@GfMocbmnSSjmk(P%$`~*TQE2#Tl9`V z^}1T3BKQpc7|A7b2psze6Q(t`J_?zb;z1F8F){! zD`a_8+`ao-Z^G^m`@xL4Qt;rJZ)lq>cYlez`8?NrS#uMv+3B5R1nJ6BL6XJNwOMXB z!6v~-X5+pT>UwGujnYg)$?pCj2iKK-b5mf3+5tw=8}CRxdt)ID@OZUs^X8M&?u~1+ zfo}5w8L^U&TVYr1jQA^eJ5@pNEy?L`2cdi4ZKFVz+cCRs;b+!M$R54#sYWSA^P_3A z$2nidCweHv<-=Qje%xbPM9=0&>EU<;>hadU(VK`z5F)XhvYL$(k5chfHh_MHLU76Dxs zaXpFx9+cBTY|ebzubjaY+OqMKugBw{gw>`*&TbF8PbLL#CUqFf1oCIt?=;W>Ex@ME zDoE@d&!L%p6B|I>m>6l)VJT>H_$`5Fg}^U3cCW7lF|pf}iH~OzDB=Jvsn^)Q!o=J2 z?PqQ1rk6Kbo(`E!{IQw4x22UZp(NjAJ{DWL&~5uYJ#TSbh&Os5m{`yee(BQnsVm4u7_M z2m&Od=y^%^gH;)%s&pJqMpWQ&3SVvG+J9JVSXD+$qJm#NSTpd}h2W#tGLU4)!NkdL_njH%^f*oE-AJ&ciuP|t7rQLjAlXvYX$_d zmUk55i2*x!R2@_qI{I@FcJnK5PTaM)k7K=BJ_V)`0w_P8E z02U|uSv>?|U;bR1i`YIK{`#LCrNJ*p8AplMKEU>b2%G%ka7-A}ksz=GrhRe>e};-KxfZnbi8 z_RDCc0{_56)9Og&Y!;Y~{aNx7l$z6(?@X&v^|g#hioous3Fpu@)87^>8M*^{aYE5D z3DnDWGSRmFuA#H}R`HE=!L4s_UfiR{?4_BM6@h&EOZT9s;r9N;u3?IOC*m$u?w{Sk zH7SENe^FM8n82}V=XLSPg28=Ap@zF(?=gI;AX(SFXBc`eWY!PdvC|HLWM>VHCfkn+ zw3XQ_rtclhBLB=YlNjvwd7_g7N;CeDt}j;z(gLhYspBXtxcw2SG~cv2mqIMDBSoDJ zm)ex-ay_LymUmvJbF#`q(;fz$Tiw#?(F-!h2 z6Vt#Qcf3y@+U|0Llv3U-vK0rlIjVmZfS}8ORwNwg*<;Fd<4*Hw<-GN+gmlx_X|tLP zzj*IK72!cgxI#@-(sP@gS>6Yy{9>oM#Z4ZR_r(^NMO?kQ#Pi?W(FLXF%c=yPTli zH-_7*3LOISt{-vy&`0*Po>M9VCK--%^S)F5SY^X`tM$bY)Nr9?Qt%nT6)%Bd~KpteDP(x-{h=G;NbD$thp{z8nJYzlFvKUx^ouJ ziNrW(1bf?%esR1Mg02P1AK9+8lxf@v5lbiGSKxl_x;>U2}@$DW^oD|EtZI5o)I=O_o}nJ%3=?095fK_@-%pc2QPo0MOK&@9i3 z@_xPUddi+XzX^%!Vh=#>MEbFMS`!F97jo{~Vz?yYBGOyY!N0{TMi=WfHjQr+=1X3g zykSlgsN1csltG?{DTN8r1}mbSmldOVsPPhxtdD{h=&sopR|2>!%lO&`H>UJ*Q*!>f zZKUMkOzo}@q5EX47yT{h_G{ycOQblCRKEwpr6Ya!;ER<@(r;HPVgOQbQBclt9TgWV zjM@01%??ki{r5%VOz4WtE2k^i6RzBz)z+L4KmtCKUOyi-Z&BSQyU#oK1sMLzabb*n zX|ooy0dDhN8L>&TM%O^`mR@K*?Q{4k-btu6BFCogGExzQc+_uPSF&oO@Cadpn?+HD z(yOwsq?1Y`_SEMj@88`so*%5n%eTb0$-cE;A>sHyLDOIJFcv#O)o|rrD*x!1fi2or zpqGe96oK4h4eU5E{W5-7mAbu%h#1*nl7#y_s-oMgua&UxAEt9qPz<5x9QJvJFY*-p zSy%u|Z98zNuPt46-d5lY_*SuZOVBB!kOkF<4dgc* zGh6$a;v4~ld%)7$VIx~J@Um9MzMa?wOGWWp^Do!SzPRyLbO%FP;HMIt@WP&}&uZAa z6vxZk(O=O2Qtxv~T1L%rP-ymD4@kjtJ>!kjlH366pSpI}mni z%(-S$21z_>M0b{SYG9|G?^Kp#wSCt9d#{*>^t83M5|{7x0D$0RLu%B%8l@w@u21^z z;xVHYg0=J%CYkr*jIz_70Hi4$kJ~8hRbQ!52jVh~DiMXJdFV-<&&>`{!W{TnApTPC z4%pJ)FhUxgz|-qxw9Te7$k(F3ZtTv!Upml}O>$d9R|gWn(337?F>Y*B+9& zpa%RMZ^>+c5+ZK8aC;Lo;@-Wb)@fULm&I-wBnKt?c*kFEBu3W5qIhUBaHMlJcQOQ) zZvUZ3N#hJ@6D6Un_{F^BN9X>vVC@7#Drdfz8zwj|(zB1V9Qm!d&e?VGVS8#At%24< zK`&mvQ`~pibM0;G`&vME357}m8f%+~G0r24DGxDm=FqJ*(6ZOuldgqubUV_sA72L~!qcG{>3Z-Vx07)(1zWG7g7gKDW!5-rVSRT1<-S zk%+LD7N0FrUtf~V%0y}BO!k(w1S8$8h@q>DxsS5--sHI%)~Jq7>l+&FTg41$ENl=0 z$_=Dh&)jnLP4DNcsGH{Tb&Fr*L^(t5UGMyW_vma}iLQ4mg?Md9!0Q<&T{BXtyOJGk#SXXzYJS*|C(Pm3sDZZ2#=EhE?or89?tR&KNRQud;uQ-F`k_F^0Ftc&M(##jH#`G zfM+nW4Xm|E$E1HXx-;Ea9lgE_Nr?v{*$g_&57TIFFKG25=Ndy1>gcN%$>($41FVvG@VlH&ng>ehx%8oXVBP$+VHo-26e4Mo?JweoXa1hz;2pfPh<(b!}xI!OKjw^5;qEXIqx7RE#yR zl)FI&nHLqK6wiC!LZR%v*2)QM4#dXfLT6R(6FAwD1;;1TmmWB*;bP5JvoMz6puf<9 zudCMrr{EQ@jqn(tKlYpxLgII+y9J=m@KTf6(1@Y8Rm=k4T!W0~CzfkT0MJm^#52w& zVzWWy%U1PrZJO6Aj#KYCiKtKHk{_Fnt=`}9rfNReOb~n2zFa@@>am0DN2jg{+GAEf zmg|Rmj%n#8$IL|X9vfyOl!2uDZrym;-zDSbIxk}`xxnc$6w}Hq`VDqw#mhl-KJCZ( zjqR{PI2Zk_Uro9eceQR@bm53m(Qx7$&X*&5)bkV$sLU7%Pj;ZBt-JG1uJsYtY>171 zG9hBt-BAVBT@km9z6dzEbXgZVez~TUJU`Z+3c*N=XBw10}!s7CP<(AKb{wy;B{Ocds@gPkN)|OHS=RqooSR^<{i&*+R|x##MskG~v8Tq+q6} zGY+iiwuyorCnAo~O`l^)Ps#FVh8TY|(KD|B3 zXeqfc3ATWhI&JhOah7m%5Lfbuy({a6(CRmwZ2u89&rj>KG7o{_lM*}q;A?^yPrR&l zPiD8-dOzFXJH^&^xT{!iLSu!%-IkmF0 z2AL6&+7G$0vd(q_^^)B?Yl6e_Ttx@HWnjo0Lc;NI0%2M3OvY^Ix#hADvpuL0xKi^Y z@LnsJf5@^wB_YhFVddB!861x(hs=3OA=+-p^?9VL-E7-OjRlWj5!DrI)>|TnyrvPd z9XDXQuE=9mY`Kzz!s>L(l*tmvr?T~p$Np$SvBE-w$%1t&tOxpb_5@osLU;}`%3oL8%-+JtgJtr4>V3$0DT#{Be zT&>h{^A{JT>YVG&dZ|j?U7J|pxB}n=wv?}0I%X-06Rcfs6u z=$7lQ-KDZAUxDWx!!s(j;#7TW&C-p3tTpIZ6uIQxrbV)NOpleF!CaOM;;Hx?iNn6I zaLQV>xX{YZ={tu5<;X7gqu3n@ zisl<>lLcX)Wp5V#xcgZl(R;^*&w|KN`=;Qq|OEpkgLcfJ2?y+hf+ zyymyEg@#{F^KQ!oTWUgA0exQeRi3kQzbp@bz_@=0mH=H~Omf=L-R#$t=g-zN{(7MpK>(PEf@YVA{O|yX-(Ev_8Yrk3z5Mt8*?o%WZ%lMh!_sza^bc*8p9*5T zmZG45%KghPQfwb&{_Q5^jHdziN(g(OQ1|Q3&-P{h7OZM1pzeZZ4ha(d)^>}(eep8M!HYK_%Se)4Zfdx@mG7x z1J2(=z5VdO?Xp3#(5p^K)h`;)LYg=t@ zxm`nD^e?4U2?Bv>UnbFP7n~y36fl3UQ#RgR%)^u093-dByib!$mbF#nnR*sjOucZnhUyd-{3ftgW3&|0FV|8xcEuH3 z{o!qvm*{L1v2-qo*7Kx+JKo2lddRODdfb4q!-@RZI2)!$H2`nHdvt~B6dT+Gw{IW* zDdLwS<{Chx`^Pg~&{5=VlO<-vG4ay#WrTqC6pSJ4elal6zBx%&?V;Vn807&Utc^(N zr!@>S%v=9tVdk6_=Z}AtWr9FgFhX@g|eK+2Hf(`m5%<#*x`bMG2^bNLq4jc zel`2?aS=cN(htsp)ZCmv{ISi4zRfUop!;C_u@Wlh=NT>i(dJQ?VzJ`frQk|h5u5X%{B zZ#I;6RriCm|KC;JK4s(2&v^EYdc^Mk(P#e0BTgB@4b})~av%+tjcw2RQ5THy4G57h zIWa#(h@ZHgy5NTZJ|->Y&MxA7uMay9Hdw*pYPF z1vf}|uhc#k))j`H4I7&<-}a?(QqpP4vSgLW6h0*Mm^4tVm7pIV2;Exn=SNj#dR#sm zRK5~azBjmhAMSeOV96*t@P||N(><2$4VN81eXHPB-G~1)u z)64Pee(0sW##D0E;>O&=r^dm@%zM6X_~$Rsm&v~o3j6uw8wOK-5w*C7!E@f~nr5a@ z&u8)MkG7-?H&BW9jjiRR=%@9*_Yr@dF#&Hd=62-twnJ`H+TUv(Dwd-XjVvbwmE#RT zCir(Yq?mnclTM!7K3aD(e$^yr^=RXG10?0k@8Tu$IQ;AzUA8RL`f+y8Q-1VNj(r(w z+cF3M&<1I}=$!>gh95fEH27>C;HMisl!cZjO4-2i58dM=MYai3@kCC@I@fvmLk7RQ z4GaEe-zoMLdbVHWkDqwXe}w}9M*Wc7v8LN(@weE1{UspO8v&ty^<&UaTm}cu=ueP@!O-Kmw;VX+m8SESe@S=wQlp7 zSV49#ey6N|9A4NH*yS{<6zMCbqKoFBWf7DD$Rpt<=;%9T1cC9TPL2dVz? zWu4<0)?6|hh9%5z8nS*`y~D@$v4D+m9gIIY_5T{j)?c70-tT8c`c?ss?2o>gC1gD1 z0lTCA6L0W23zjY6NUKYh``On{d$E9V znq9fu#QyFHdivp)>FJ(wPw?7Yi(dw~l8@(iVse7_BUYzv)@P9GIvf<3!eoe`;aqFw~oa(sMk+qQ?PAqmcxVcDCE$-Ki_5U8P zTd#L|Rc1YvRyGbL>!pkL^4zE#nTQcj^_#7p4q9I=ST`l~A3)mnl;XGPYHDR)tP-Z0 zS&J6`es=mp+jRdDwec-9N<+pVje5lR%q;MKi6F3bpC4m#ONwVvoa8oU$&ix?TaF03B*9?BA|KLA%2eMyNER$NKHD zzST@b@S9mLN{p^-<=$<^^D{+yqkBO5*!M<&Dsdj;Gmygl7E>N7)|g{kM%9~6TFrdD zIyiOX?cD06h&Q%Ja<2XTEP&bTMKFhL8~NF4Ado&qgSzd2?J5ExR7!zirt;cmvb}<2 zNJUKb)bi%LdxuLvykx&CPM{ayksg$`Q>za?xQlN4Fd+HQLU~z{HDkU6W6`{8{G* z1O!e>73SYs*H$J0mP9`RqO`Ks}u?~)f=ve+drzQ@j8^5Q!H-z6`$fEL{@d9h1ge8-yGUhI+=Tgi2oy!akF zcgc(I09yQu}fZjkDa^Z#diR{OI~aNtzGhB zn=E$8i>-ovm%P}L#jnVV$TTeY?`HvQGovkB@^_)TJKnU_b=!5aEyLP%vMpKs%E@*e zYYWf*t1NaMYs;Aa-*BwC)=$B~!5OI~KRl@Rck2HBKq?!d&1Wlh$$nw{qsM3%YWLO$ z$n;cFtt!Lsj9X2u3cOjx{l~K48PxjgU;O*CBg@N2_x|?THbA12(+8dzvMz*HUM;l6 zA+hCNw%U1`QU7^J3>vYItz6s{3WX{!kF=ypsS9v?XSII$qW2!~#2BMCT+2o2CR^tJ`hG8#Ea=TF@MNU5nrV|I58DH^KYd!+4;%Kl3Owk;NQ>2G`BLv$sElWY z_b~Gzum66};}U80@N!G4x;m$4`3w_N|G_Q0{KbxYCxM5k5VD$AK#t2n4b_i7c@N7- zhCleLcYtx;P-CS5ar+wU$tRjZ zeIp~&XHBGdc|UF>vU{3U`&N3I1Ovas7i5@vtLNDX|8F`g5BSHWdS|6?(%S7KdvfZK z#>2W*!;x>;QrC8M9VGbaQV*U#-kX&A#NYo_UqGX0?UxRM{q~aYm*TwK&${*A&R)ss zg65n*Tz3oI*~hmpPJN;=f|LT;HFIY+iAh6_g#6$i{WnZQvKP}cE#V&i|6}RAWN$dW zV6_8m@rSE!Zn0PajfS{*G#Dmt6Xi}fVSUoLx9GI2n7ZDd9#}&TK1nA$)y*E4tNZFl zLH@1Jf7^uIEov61O>J;}n9d)|S|eVHY(Lng8b5yhM+5q|1;1}`SIvJW@Le_kp3noQcx%qBDDQY>_{#t#y6(0pg{Rk^vKZAPyg`0HBt%zCCC>N*n`Iv-_* zv%);T!Kzk=X-GLnjq^`;`{js$9cmEf09x)H5# z5iKzUs73QB(!{L)4hmG9nm5Iaw08h#j5#(H#kTJ-#r1zRF8qcvoDq{(b0F# zFgRvWB-~+d5NHS$79$y+pPy&&#Jb0xM{4~^{(=*D0YR4(6@~v-&~$>lmsR7Vo;3LS zyVlQu7?k3RjyUpKsSZm#z`U89MIM6>fg~B7gW{deEwSNQ2ue%QgJf~sj%%gW&agjP zd5wHOm_YcZx%nk{tK@0{zcv;S5qVT8S9U~pAHKwz*NHRk#b@dvgXkIn)TzQI2HUl_yi?H-eF zY3Zs_=SeZzH%%oJv>kc9RX<568qQ)(XzAUuCL=XOE)26s=r){5R|n4DE-hVlPpd(s zqGi10&&;iaiUqoEV`G!NnGNkgr1Z`lEG(COe0-!xZbvXOm?qVny&m@RE##C}^wHZ7 zTFIiQZfccDq)S7v+D=0r?hYr4BYYamBtSjpbE(P6$!8UZm+9VhKm3EEH->Mz@ywmY z#7#HW6_AsQO8-pe#~P@3_|>yI2MYNL-vI6bHj_IM<>^NswAp*eH=gPTQ%Sd5s;A4e z6E)RrB3sjls&X&JgqPSH)cyde!SRg3Q>z|^S(*PmJXs9YUh$ZEQBl!6Mn}_j-^Wzv z84nuj>#NeAlJTwN=oADAiF|aWp`}fQ!;x%mS>aqR7-walBBBUWJbq}%IsJNh4SFHL zpj1lp4>GFZTR`=Z`>}z30Z%e}pc96h9_)(OQe@6^0x0OEE%iA}v4JV`GI#%(Bir=!Pv5EsJU(r;S9$ z&e*}~a#079)ftfvIfTjM-wzMk~Cm_S5L0}rS)|9VA3Mn(qD zxaz&T{KpGd(C4b=Gcz;8YhSe!wQOyTURkm;#rZvYG&7%_GB_B1a4df%-+g`S(!YI$ zz6L}c8UCA#8JqgjAWO3Zi-{ql+AK5U5SeUH!<#oxwj!uj6*b<4$zy!qy;|sQ*R6%) zu@^gvva_?J=%ABhV^?W8z`|4Gix>aI*eQUL47X>X>#rT+u5!tv_U_$lVP}`4Es;W; z{`k=?@$Kx)j3(6zgTth6JmmT-H)*nxH|C;gbKTT3i;E&SEq#y&u!TrFM<>pPKM^-| z9-!$Jp}&H2?`5(yQ?Rh`4f(QqQ*OT(R8qDPc7&Q52O4np^JOHr1aZ3KO6eyhV- zAo=UQ%ZgOS%)6adzwfV%0e<1|&>`jCXu0zW=Y$OoEh+uM`G;=<=QmjGa~}Z&fWAik zWo%wlQc{l;1Ede0s*1;}39M84P6 z{eFpdX-ZA*1^k^Exa*PMYWurS+P&VyHW|T{Vb_50*lFa=|3TZuM)U`QO1J8brhIo0MJ{Pl>XIffZT-QoWOl-e&;f5|+VCNtQ zu5f5rdSIaP?p$iy{V*Vxq+lOai)+}GE~=4O+mm#OoywY63MYZ22p&v+g2%~igz z4^BfWf(b)kzka2=K^gHp{kQ&`#BhNm|K1O)i=e>~%;5RUJ;-`&uTLLS;wxP&}z-mT2H z67V}^kfc@YAJw`4F}}Xb-2p4%gA3W^Xo%sjhzENkBMj7q5EDz(! zGqcNHlM%<iq&(i5djNR-U91U>1 zX?pwEtL(yvHgPe?I~SSFI0wnh+Ne=q=RwNN7whWiG>?y4=@}W-D#BhFW-yD49|<(o zl`5+Wu2MKTRYN|`SvC`lX55h-!o}zTeuS4(TPn`<+(3IndtZ@2JbInz30y5!a|-c@N?S)+8rI~S$C8WGgFxw${k!AFUR zli#kNjNe1*(aye8OGKX5a9`*`WuOD7=)OVzVr_a?)SPaoA6#5q#0N}XiHTvgu!fzx z)&#wOKSPQO_2IgWmDR!E*8J8g4_hPKSC0eP`|M5~xZt_(vhJoQ?`&as7F|vSMAxG( zd*Rpt>2f`<;4E|#m7Rh@_m{>Od{f}_=b!Jz1b%7h3QN0NibB0%#O6zXx-C)HUCew} zYUOpL@X|t?b9$>~QSq$Y8x{XJe2#RndZRQTzzinyd`i!DqlwhsrX9h*cy=HV6;`Hx zA;Fu+r|y-xD0BgC2AZ3n9~^B6{89(+fxmx$7T47h10X8MLwx?*WD`6;7gMa3Uad^6 zKrIiQTJK>6MgF^YMgbE;2pHqiAhNfzRd*x_8Y7_4>We9^-b=QBfo)I!ZSqcSAP{CM ze>e$Lt^o9W{)mF2MGnGs&cV1)y!=Y9tF*4GbBB@fxvo<}LaCXto|8Z-Twiyy6l4AB zARNlGir<+sij@F94IDGiZ z-l7T-6TBXcTnp*z*RPZE*+yZ_Y>wE6eY$yN3-LeQkYo=7ejK^F6 zQ)*y(yiVUTEaEiT>UM8uo(h;DKoXoO&*~w%KBz4#D+6!`G}x6A2##P9e#S`jtZ|mA zYOe&YSI%3A6!WSoPKr=$H1`DLBP6t$7%T)<(x$*6kNo^pTF04t%DVuIn5K)z}lhrMMc+MJFvYa`>?XYYGKDkSq;fI z+dPmeNd=}!_BN_hu!>1HvPI`&IX~8AhoIFl3@8(9h-z@y_t zJV)}NPhu{%zNY?Y;QAM~x*&B@%yoRW^(ZO%L31hiF!QC3<(tgtMOhoc+|$sA=Y*3x z0lIRj`)>3VwaE72i%^>O!nPqIpK%9OgQl*kE=sAAK{}XCF7tyKXH1q-)(C~NktYGO zVM=QqwJ^5hI>#C~14})cP$9Abffnp3nl@Kiv4p)scGW1pj3&OGTD3ZlyB>d)JkjW4 zuLSW@lUb+xmAnHnF)>osRoKOhY!zJkT;GhQt#C&3`Rwob=ifHX&IObsdu6IBOUWwE z`r5j=&&URv`QA(XX6!rHA*k4p>T82k{mL1xOa*3~wBPhJMy|9jHuIr)8-c0rmYBVm z@Ek}U6~bi@xAw&OsveX6Nk0Qp%rZr&q8Io4e5awOi$S4w?-F&R&^N`L(J-L}3gk=m z{K9gl-s??XwJ`C8vaSNQcLlcJdoTa)z1Dmh_e(?;e1lcvnX)V%-cvRnI;?ceTj9fd zpkC5+nmU{j(R;uI|Ni}ZhDq19VpOU(>BLEN{eEqpNz4U<2Ofhd{s@)NJW93bFHbP) z!bs$R*g2foGh6D%dIq%AjTLgaL z`oMw1P|p`1b*UYn?zv!4(ZDmMpOK1WD|L5!+&J5!0%IbTn2PPH(Q|%1h=x*uz3PSA zoB#)&I6(*Fk#DHy6@Q$E^msp0#)K>aoB(QQWF#aWech)i6E;zhQ94<_xo=k&S1C!? zhJP3E-|wP5Np+xDb>MeO!*f(=I;J1bAAx^hLrR!)jjQf4v$oFEc9k(NOCzh7$(-^C zc~;A0?nNT+3{(rPD`Px)w=mY1jchaXxJ7xIVh7|u(yV}bl|awXBGy9IytQlxHR5N< z64k$$i#nt5E9A%`2V@dGEYq^rHCtI--Npw}qOy@GRLG7Qt(@p-YyW#s|8CK8QUI}R zvP};iE*Z zjIF)WbFw3}y=G;i1bnW-wGB=5b=%A`boiTNL?kJ7UWQzdm@Jj_BEAvwvdO5z#l0)a zxvco5G{GbH3XPmY?iHh~XJut?kPfgmM9xwZM^_n;nraWFVaXO=r`N|auVsdZha>ng zO-5br4cfl8qA!Zd!{Zu5@rQ4SclMTzt?aM`XD$xcIhNSd&^ar87e0YlqknodwwoHf z7(VD;d6vvvOk7-LiI)^ZNp5#TEz0kS4*-dy5ZB`Ok{7f9kSa?v*7n5-YtZ`=MXC!e zGy@yAzOH$zBg7)a7z$B(Mp+Bp8LcEbf;#aC^2F?euw$s%xzO9Ls{Kb?+0|Qa+`84Z z=zpY1>7_ClR_KN`J9U4;tT32)Wz#8kVlH_v0nt0JexX^8U8JC=>J^Qt{}SU9P@;gD zv_ifFqMu!Q@Xg?mtG>=rZw331O-)S*YRoCKr}J^0MM8l2PLP2ntZi(b6GW{)q0w@d zqO7k9%?g{%y9~b2$JynDl@*;8yKt$~ptA;Pb;x>vKJGz@F2FK!$+5bAtMZ>I!x2i< zaE}MO^%Xe-av)?#T1f*Nv4jJCC)v;BEwE?rw9J|~t#LK4U@;uJAatA#&MGfPX8P#S zBdyHrf?P}~)a)@GO&=>qu3EU6JP-nT1L+{=augoh0>p!_JCR6qZZnCw5w{6>%+=xb zf%VNCbdB8TE-TU6j<7B=KeK&}0423o;h`6t#$!32mmYHMqGrb={gh3&{&m->K85!$Y|Hz!6GO(K%PiqN#>+z@(T= z>XdLYCnr2Wj>vU^w9D~%RJAI#$ww@L#sP2*#7>1$vPEY~)S~C2i?kl3tgHxDXJXd* zNzY4qkho~!B#pcLtV``tI^_Po4gPq!5>VA*;Sm|$VO80HbvoGbN5dj#0?{Hc0h?1& zC#Lkz#bZ9oSf~uwO6)LgA$T>eCOUQIyGmnt8q*~&v)J3&od|pyB*O&dP18CsMrZSs z8bf9e8lda+N2|TAbp$G)Q+ypFo3PvuGC#~#=kF9ZCTeh#gghu2J=$sc0ughyo9tQ{ z$pd5D1#xw@+I_B{`5s<<+4QLuL8*MnihrynLh!WUq;`YX=hT5dpwaf2YL3@La3syYoopr@ZYD2r%Dwo-{jVNo?hmAW5lR9k zmI|2D+#CFjlcWIgH`3IvWMOadChtHVD=Z(yHe@}-pRzVMlO}07*pwVdfRQ1^_2BsV`F!UMvp#@lv<`5X*~jqY+5mkxe$PZxRU`BH%9qT;`SBP1St7nj2wg5z5DM zSLcnjIg>`YOky8Ce5mOf5<;``cs}|gxRweWDeOce`xnRs(bc&xO_}IL#RW!X9i4Dl;?4S3Tty)^TI9VC!?8M5-v9pc@ zkcWW*2CNwok##~Is;bf};b%%@4b`ZfDM{fqX(yD;8I_dOlftyLB=$&X^OraKHfJ@|)g^_u zhAT)#04)l*E*~B2C2--J{J2(N zAHAc1exfmmG~%muwfY1I6YX86k#$~DOe`WJP)rLKR-F#Hj17R(i5^7&JljPUzYy-= zTV`pGtZv7o8M6R(DNCOeWHH|L3P`STaso*!!u9p_;ZKr$32yH0&HiuLpbgg4)+D%j zmM#J{E&l0ZflFR~s(RcNAD_w(0UF#)27ufs;{YZk9zyo+Ye1^LMqf04LlZ}pC{evM zMg0=)iOeBbCJ3xlZmD}uijX06E~dWOg_XlHzp#WL1z^;jn4#k%ZziNvKg6Ri}=@!n9N}Jx*#<+&{=6C8cIeUq|AjX?;Z!tFQ)v)q1yg;t?QZ=>TzU93)+PY zvU+E$7Au9;LFc@$D+SegX{*#75 za614OUCE?KI12pdqZz)K08M>x4Ps5WsyI`3{kk07nX%Ws9O&fQdPk`TbJQm#4<tUvxEp9vw6sNi>ALQGr3|G$ljeD9d%4^%~X1$7tX!b8!PN82Vrzc z$kRzZf?rmM!12(TOL_ZLUzT4odJ-bSv`K^`ixW;Q9JW5ul_N_8vfOax2lv;v5W&`n z9nzx{CxEhxT{fTlJRVd9@UJ`-pY|3p%zh5jvheUoEFB8Tbkb{m;d=FkU-fID)2AnV z9isTYFeb3K-7z*G_0SeS{!~P=Go4s0&eEgT1teC$_&pZ!4o-Mrm@w%BTXVk@?v_m= z%VkE!FrF`6LG4Zl@v4Jkv-pNo|L%_t+#u^d2O57|v8zb^02;bKucS$)`YaF&8)ZoI z0-o-l%ZApF<6McCp6;KPnb=bcl45im8aX_d(bm?s@VcZ+Fb6a3@84_|P;h*~tm_(d z?d6UvnEe=VXa$*1mBmjpGj&>_;4aPZ7v^RA!*#kEwbWdk7wn7O7u8(9Nt8bytx#0l6S z#%rOeLG$bKd^_$_Uv;Q{nbWz`f`UoW(Uc<}>$9Et!G0}a-*PZs!oWlfT$h&)#+5SX z50Y#l^qpj$g8^|#SfcHoG*P1|F0n==dy%HZy3#p)Fs3;rB^44k;W&!1w%*^=R&{@8 z=@NiXK%3QOQGM!hL%A#^5<>@-3EzvE*OO2tvx3t1u?kg(_}7W>+lnZDFCU_7S zk}wyxglh3SHl@091;W4I%LVDG; zp{7U}M;>9+J{B;;{>}UjCoI?1RnGPHtua8c4e%blOrZm`*ZLe^`yy`&wV9#9{4Av| zJGDd1Fv+i8ja=Ll`(!ag;-F{$P@v;%TRoeNzJOp};AyqW2E?ju<^3@l5)?+;C52Gw zf|Atkq9m%#B_ztuUu8mmEhsM!Rl}o>zzP&!GC{K@bKOqicf?==@%0eUN@$3~(#J|2 zJ^aY649Uxy?duM80}5Nq;gY;wBA0Q-fF06QX6U` zdL+5oq?GWNioF}Lb#YiK-ppednH7a%`~Hl#Pv`G=G*lK9lTx!W!k1`7cp6oOqp2}@RAk7PvL9CF zidf8Pp_&xj;=xUYiPD)gZ`f-eL1Zn7Uq+gBUt0UG<)}H8jV|o8i9Ep%#B2lEqDVU| zS*Us}i;8Zxp@7K|nj)jek8)`G*f}cIF5{bCDkaMwy>955eWci=479kPh9-hPRomTp zlP{$2l~TJLJjIcKFDj~Do>xSnCmeh#hll-}3##gA5RgHma)whZX{KI%-;y2IS09Rs zg0o@hjpg3tKGl)U>K5L1>28?a1N|8SP5 z3V}e9Psa;gisL7$wh9DW-w-=@4v}S8qSM&|lG1H=+Tm=<@NuA1jhM6GXwIiAH94-W zAUvJlZm6EBhUon2eh#gF0IT62(#QcftB?dgl3vj2dBi^b0xhz_&dv_A#JRWkxV9W7 zKX`tDw27Cl+rYq}9*$p0Ht6WMA=D?$kI?jYbZ|Jk?2Vwk=ZlsoW%;L4PCRaPhvLihYj=kaR3X;Bz(%wlhg9mLk3D0m2 zHtB!*GG1up+-@8ID{0{4 z*QytQasyy_s}`d~2He%8gvG^grI5wD##vTZDpX1&iEHx5F?6G-6L9ibX*L{E&pC>fB&~$ex=N;rk#uK=ZPrOZ?cB z2XStsd8mmtec|CS>ls0S0?83s)CSShovImC_o-ABnOUQhwc1boOZL6(Rk1A&-<4Yo^o3=urON2l_q$ z|1<}e`zrk`OiWDpx*5B2WX7gnRF}q`w@-ZP`||MZvY855081{A`Yr?WCcxZ8MSb@a zdNG!I#$&^efsl{rFZU@qjznjgd)VA@0qjA8Yq4HHr57P z8oEBsxuN2=GEVFW@Qz~(E1?!;QY1EMTXgtPHCFZ zv9?S$GX0ZdI*YgdnwII*@uqGdTLY#E96s~|T~rFqGDDU8)iusf01xH=rArHF3eDYL zB*?xu?JW5GIc&r#D@a!2%*`wWZOB3>bruURq55-sK( zA|me8NSkPoMiK3L)#$NuL-&3LfM)fARQyeCP!!J*3D!3DkRYbzEKy63Sq`^3e?R8H7g-A?q_ zh^aTFA}@fjqKm{GKH1;40wZKyWDLsOGJO&4?QP9NZHjJlOV@~zMr)8_`&m;O*~v#o zx|Ux^4H~7lC!kHJ8<7aG>swz$(N~|N{9wpl7T7TxiUflJ-p5M89N{q^(x%wNA5OT) z%!L4$wuRPfu78G%rY&JDZQ<)eSHlil#@lf%S(reusjS4g@T~HUHAgXBH;zw7kwCM+ zVE`notL`I*nVE3_!qf+OdGNI&i8eE3Ilmm*gm?fvL_TTM=1&^^i%NNdo;LC~UlzwMCJJ4|J(kg& z3m=xcbmGN4%MI~1Lj4+dr!unGer;`$5tfTcc#CZ~YqrCo3L1tqr^bBfNxxHcB&^Qv zGXvU3j<6}?8{*UzDl09H$~wTDoL;hp&Vy#Fh;@usNwX_NQ0kXxgk_=w4;(6 z_v*p<>7*Kg3l9HJ?kI%QCkKCLVZ7^#<)?TQt9UMB4RfN4IBo6af_-ZzylQphy-ES_m8JB0t6qS@9 z4;M3%X)ng{60bBBCcyeB=m6ZvTa&p;cYm)b74;}#RbT$S)_nCsOtA1tGJA>3hE4HCuV=AKWKBbW)P+fdu!S{!X$bj2sGc{gxOwGp3&7SU z&bbaVUdu;@t{D3>`3lS2`{4ll*fLl)%%xX;$B73Z zVn0#3eu)f)h~0bVxU5WkPixj9ySj!;7Aju?(|3M#1CRyNF%Jb{zh!{xa}?J-ms~6o zu1^JGKn}rD01<&j7<^NX96NgSfvhi*`}n~XYs5n@CXM(W@`A!bhjWYh-D-8I^K3L6 zH4}TSFQNhx^Vsv*jt@DN8P<+vKDSKseJC!L7V9ymkZ~ZOe;~<;BYlF-M4=&=^_(K4 zqDX&IrEUAk86IHK$te0?Tsr=?le z=KX$5oU<T1dN+YNaxhRz(Ua{doV`k$N1m@& zmPh_2C>vjpsO{2|_O#J2$Bo-RZ_4^TTZ zJSH~lWUxjYSRxt=Be=a%{?y+=H9G!!b^uB*e|$jco>rTCR0aYN!8;LPAh$x6zS(3g zZ3rwaZII56ErO(uOD#BoBEJa&{i7(LCH7);vJMiq_X0XW^Q0>m<>M8HlIG&32Xu42 z#zr=>Vh(oDJAB$~ty;m~o_$-bLCyNxDNuypx+QKKdt!EPJ)Ey^yi^DEXudwM*}1+B zteR(}k0H8cJ&4P00%D!yE$^74AjvpMC;kJpw2=jHF@Bq=#Bv2$zk(nc`U`kq7PeXG ziP*PS&U_GnQIC0#^~59Q$_QnVyfa$D!z$rUvoh`$Cw6K>f}1u(&N-7{@GZ=^UL(tj z*dRqnp82c~;~tqEFL=N4&A zM~fZr3}v8LrO~8RK0B@vS4JjWaHqpxy2dTuE?WqlQQaZoLlE4&H>%62HKHWp1sm$~g+UjG zVN-y6B?cI+rZRLVJUOZGx=`HeayT$Kp3m^*XrtA8l%Ax{ z$Ht@yt{yF}L=-7?sT&jx}#YpD6FaP_=ZI@JV>!N=`t4rX|xy)Y?`(I>`{S_YbOO!B$z{*ABa>T@!5=H*BA5mwOHb@ZetV8?TMHV z2h7GJ#WD*E=N+H+%pB)MzgTJq+9bJPUBzK@Ey0kuF>Q;Oj>QXIDu>msD@Y!K&A*KYnak-pAZrLNHLbEt^+MbQ2w$LGAEvt;RqAA(l*QdBN`o#UDtB z0XjvTeV)8!(VT_r@6~0LZ*_S^o0@XSv^5=I_|moj8?o!@7^|3gKcfze9Q96U+Xj&jRo4@iF;%BU`){Z8uit&Qm^}81G#*=KX{&+5Ir}{Up6#t5T;YMd{pwztzT3bwum*|zqr9U{G>wOZClAOf zfnF?{-*vMfR@Av!jzWRi}NZA;*WBY^SN&dTtE`KR}z%pMgz0$Gq2~b^y zFnwmN=5ThWDsTr&tzc+yXF~bOAG|+?ZcyA5sn@bW&>>GRj{x8$>?Kx2`v8^H$SV|0 z%poL>Uh2K|DbKffa|{82?NHo_H4vJZtwIx&NkgdkBuC;vT+|$aV49Xg=khMr5Z^y< zhdR3qG%YJDC|r)gZ7z+P9yxO4;k}I|T_8}{L{0bw6&8p(7+cB5VEe6n$0zlIepJ;3OoJRU#$;QY4~4{27FfY{^x`9Ej7 z205%Q;a02Ix6|)L(A!Pn>(_}_n^!;Od7gm~V`hJu-dhkj9Jot&`|OaR6W`dzxZ0e( zm2+Kb?>XU_#{*7KAaZnH+);3+GaJ(@puajzJoUail-n*T$j-1Xy-mqkT$tT*B4>8D zH)S8wn?r9n-|!u>v82Cqet&29N&!Lb*Hk;32Ja7c%bKU!K^l$-#x^mQ z6Y*Hiq3%u1rJ&}5``A57xEz5V@p`oO%7>N_*6-eT?>;Gy(~H$3;>Q^+;C7gwUlDVL zJ;8qRHWS9$C&lO^fQE`+Uft~*^fpS17v*wxH;gf4P8^ipu6zK9gs3AZAe3b5yzz8+ z`@=K@w&C=OY1}X>*xAFQlo?6P&_~3zu)cR|$JW%;5XYJ$h!s^W8uE*nUk7b1Eq#&0 z*li&TAgl&cFIFx_0ss!atIK0)+t*`Rs15fz^aOOZgAH^U?t9?5>utm$T?@p-4NsJ=p*dv7(c&lMR4o$G*NR zxj8wPRDH)}@pTH1&Q-lT|Ee$m$D8&;IoFrmu<^}{2&FGTEJfyk&KSd*CVp6j^f`?^ zHvKeQ2a*k21nptKDz~wl?|Qga^TxLY&vUlwv=1e%AU-65lm{(YfBUwiT{|MxjLQQK zZ;5+4bm%}4!HvU;H(W|t|7LD^Vq6mIslW7nMrW;lO!saUa_UaxNL#J|6p+u?>wv0Q z%-v@UP$2-Eh5cDN^7}>vE@P7lu>7;8*`}@p5yXl!QE%PGXCwUUM#SbG!@gBv#%?OP zR&>f~NZD8vpqyri^Jd>MB+&JExTG;8tGMyVzz;x}(BTsaV4JLN1ZA+PVM zAESHJ#l=O^L4RHUAX9G~k`1C{eNO5L3y>20fn;%97S-)seZfW*BSY#09;J6gn9yWfXo!)O#P90M)OruB$s$nrvQo$;-#5GHy2_rwPyI zHL^lPl=a6Yi}^uLCd-Zp2z|v!BvTu|veJt!_QMpg>}|2@46x~cDqN7GMIE`Y61gww z5egaw;+GIByk5Bm*49oR1ENTMj5B;Of`bjVGbGX{H90G7!>O*z94^j$3e9>Hw%%{+ z85UN*m|C959VNwlYPiGRf20{brS&fbMH}hxM})FIBW8eXFrVS=?frs6p#(B^=xetR zGvQX16Pt(q9G)mVfz5hCm-roVuosBUWriM*h1Z(CbpJX{4^3pL+FPw#7{MZ5W5pNm zpc`agixCW6dSXeHbaG!mqVhx!#~h};v*qro{_rV7-8NjR3uEO7YI&+4soY~ctA8-Y z0I-#i^iWn)dnzR*)xCEAK1(dt;IEf4$V4`suiC92S~|PBjESfb05q@;b~AzA&-?Y( zO+no+NpXcl+~P)9cprsCz;BKFehjMVu( zw+?}CtxOICzu)l2kB>vCppiFx^vv+)Cr%MR*2xfBDnrh(b%!1}In~jJnuMj;Xl)Dx zF9JP8dr5e1rs~W{Hi`w@oCw1`Ttn<8o1$zrP~Dl_>72ZA#2Wnj=(uu-M|9oSZkAD2L0Z=05=4+5Rraw+nGRbb+sV zxw#e)>O?G=gkt!GgEkZ91y{9WoeAv|dn44gQkc@SP9OME77J`M^xLWLgF5&h%Hsg~ z|H=NRS1;!N z7<@3ny>R)G0+W7c)cdP{3@^~#8sB0JD17Kg%XiVEaS!!s(*ocG#8+y7-=rhmv~8(g-T_C8sv+QUjngvBz$Ei@=I6IIk)1Db1O9dN|Es z{x_kRXo3qhweqUPxfskV&}H9-P@+GZ%I4e(Cm$~Z&mbX6D3tnwG^I(g7))F&E1368 z;^D-_*p*)T_9ibMs;t47HGyt6E0ZAW{^Fa`dylVG9Qo)m*Z$3dKic2`*Q>!{>G+-f zMXpqS^0^cC7Ld4ZEEzPP&E=M|{zY7GHLenK_HnvI|J#@WP8VJc(<0=h6wCMN$}#4y)C>6 z78VT!viAgqg>ku#Qp@YX5*}`9@X-xEvfW=XaHZx8raz~okFk!}5g|gfx5fihKF;!3 z0In>u3(2#ct-EYDbDGb1i(|PeuYU@VE~J%inROU^)r{Ei7Qp4JX9#PBXZnmb*c5Yz zruU_WI-TfgXd!%{(amhjg7;R}P%{>R0Iz8nFcRmGa8kXC57RfFeZN%#OK+S< zrDy-%kkb~z6Q8C8i!*GYB`C=5OYJGxyXq5!Dd>+ zzTdMLkVPbHRyjqShb=cR5KGioXaJXH%9|l=%ICSEhd4vkZvq5Hd!px3ObRnzKR$>| z{SHmo9<>!^(!O!yhWZ)hr+OIMzLhSIa8gfgAA{OT!+FBta-*O7^ZES;J?_G^cH8oA zl4gOr`?ue$%LXHXl9IkrbEADr`;=T?c$WO<#TrMcu)98_g01kR+(+5#Kj z$Va~IVf84bJ?*7{pV;9*llgkWw+P6Hwytyt{XEOgchJt%jmjZ`idB}xeLObV*-wt+ zs}SoIWHf@>Nw!6-qwv0KG(evepyN?tt^eY&xI`9`O{M01*0J51SVo>F*sYK%zI-+4 z*X#A^QQX5^H=mgVTEpB-_T^3sDKD~1b%cq$Y5B8|oS0`u5<+r-3W{c(P&$Lbi|B)s7`!{7N#v?v5)k^=+m5 zQ0GfTN;WH7QM)3I0+(MwDYcs;_Dg##!JCdo2jkA$O;TKG=T=WZdE-GGMPj-}fCUO{ zD+Bf7QMO!Glu|!`SgMYavq!rTbD~{{zyE7%yW0ZqCErQTn+?XN&oXDTN?DqjWp?+* zWrhMiaQnU5`@oe*E^BZ8_wL2s5mwbX0g(CTD#y|zf5hI2Ugl?v>T!;+)b#NUK#Pki zR8%T*HS|F~1HJdvf<-^%6nS#EM@dP^^~O6FK_BF;ZoFjZ9cG&XB4R~9VVH917!JBW(O0YLsuyd`AEo>~K8sJiBbHzP_Q@8PJRrESMl^go6CzZOyShhy<0 zE{$#{ep!ip$~ftC6FPcrQoXdBKmMMdQybWMrZL2)#8R7LzMGEZk!um80aueVIniy3 z&XT%D08%1pr5_)^$tJq07G7-abX&k#GRB;{JmqkzHA0H3gFib;S>k<3DGd{*AJpkT z;k$*eWN%Y-c;frJsm+QB%d_Y7yB0BdsIBJI@o?%<=IrUuTygo&bCp^*fn4-KGgvhcyI>uI{s{V_m5O6PsZ(fBpErjR?@jR+ z)=WnAkEiMb2z_2v&DUhKd2dS1m`NH6t21V^p-;MTarq}$4HXPM5_PVE=a6*nr{WX( zZ2-WRSe|m3+g}=E-OT!@R(YbAW!}n2M;*?1{#eN-heDSkV|*iMa9(dXdH%8h#nFAH zSP~ev`u&Oblwk2B0&dwl(2YS`8gC2%0SQbiZrT@}Yz@|mnNS{fY>1TH#q#kYj8#AeyJ2l}rUW6RTko&~5?N)J3V^=6=Tq?8(85rOqeN9HU> z>7&XiRWID{CQZ@PqFk-@aalR3f{$;VL_fV&q0!l68kZ(8ts15^u58d6H6BsiB*kSu zE~?wtgaoviyNG9PL5b!)@Yhz@c5vBzB%o#sB+d2szoR^+OZNab^O5J)X&ydP+y84qw(YHZ?#WA%4bSUR}o6uui?)fTvVE@{|PH z-hDZ{fDW|k{hadA@XZCaK7?- zw2cdSJ!{)AptN+jPr+D767Uov7cPHOt2vE#(yCTxP72DyQZr*jd2}3xFcL69(xo z`lebc7qUk|Z>Vr|Fh;Z~DWFn|^Vx#TiXzJvlYVtV7?TOVoRjS2^X29cE&4_+>O~C! z`x3GBuoYDF+(?Pj^qyyMu$(O%o(X4ck7pYV@CL%^>jQWoLOqd#wm8UuUnkMIucZ_! z4P$^##@(&C8XtRzvm0Kza$^6ynn=tQ1$~unR{a|2oPfG-%H*G!2b4d4+@^Ts_A$## zr3Z8Eh4n@PKQ4P&M*}#^vWBX9M_00CTt1s7Z&b?o?HJ6+Odyb8uDyAPBjLrhw-;*^ zE$@54fysElGUne)Ad>U3ALUoBc#xObwCNWQWdOOf?dw`Gu58${pvu^W?W|YrNZP`7 z%&9aIuJ6Mk&H&@EU%_k0!ee5^pjMiH2|yRWBlvA3F~4NhQ)qrHVr$uzsACr zcAK)cwuartQ~`PP-DiELozEJkpfl-yWBsdk6X86+XR1w1(Oc&3-6zE644+>vSMD^| z7CYO?$N4m$ZN;v_W^K_^W2>egyZjvXf?$d%26IhlVK(*#DMTWX$6uUmb~Dk6H@cz} z3;dEk5g3PjuBcq)qKB`bXrWqbd&*G45S~p*MgoblrO!kHJ78rA$h7E9w9EC!Hnfz%nZA*C*4bIr zTItwE$wk`N8@?r9MnDsxiwIwl8F|@}hkM-OnwZj?L&ttNeWe-&!4Col8c1)kcPgyV z*mbgME21ZPw4der3zyBC)e%=QW>nfE9LhR!=QNB;T*em+*P6^HjB+K3TNzj-9!@u7 zv)V`Ca|9nn(C=C@1V8WEvf#~ z#IaDv_V7yHb#^Vlg7`lE01v7E93Q1*lk2{=44Is}QS0+^ml>DA0yrLR%dcMG ztdG;w!83;NX+YMU{S(8Z3i{3!k~Aqq?rgkW<(k>P+^8TZ)OTmpeQ}5qSx(YCQt&VM z{Ga2r)9W@rth`W1{afTF{c*ZhJ`+fs3mV7DxjDBl0Lo#=Z75Y32&iS*&M7qeuU~Ii z?YAYOg`!#j@ncvd-J3&O3(HrO?Z0lMYqgkqlP|Tlq+MzM8AD+&NN&YN+fKkSkS8iJ zF@rm1ZY!>2XaMfw09x({``NttGv=fP%bX!;el{-6$%|)|?!0<@D&a7ARIFSL@U+Vk zL_S?>+*z6Yzyo(f2H9oH^u)&MQ63a45%pWr6S{lc0|qHqIMkqZ_rwZtSp~QP2$af2 zLjoqx*S|;Uj=)<@I8mP{+G8x3|T>PCsHmv-D5|@T{#L|d`Yv-<31laYe;tG}l z!M5I2CE{fcv&(G$7i{6cTD3%*n!Xf2y)7ANaQ~97t#$J0--LkLdI$k{1FP~rof=GP zax)psnKi2*eBSvZSC~H@y~RGW35xj)AWYRtRg_WJ)6A#(3vz(|kdmyd*)>7)SvSLX zE_rSlGT7Kz!_&Z)o+W+ZjgNIMQrkuscU65W(*KSOq{CSeXyVTne6sPaQ~h<5Mr()` zbdMgRod%+><2%nUw1u7esxAF!J$L*hz zm~Q5R3`ksu&bN=+{VY_YFYv^Vd%;aBT;h;9pSTtjU#0kwxUPPBUsPmW)ozr(HDVovLn0E>ry za=@0koq-X-gb0)~x?0d1KBPA~p^C4to!2A79z1w>1zOnxRs`pZcp}tcjE5voKWDM? z7zX3V=nY?9qZ0=w#1dTc@{NCs7Z1NgQOOGLhd|4|n@j4vnCXoZy65Ts)vR&Q@AaW! z`>D>yZ#Nc&T41lcT0#X-{Ega(c<1?=x?$4Lko^dSqDVpia^d6p1jY_7S|psVmr= zTs<^=ln$p!-iJeuQe)+lG}U}NqDa?hi({jskHqGhLr0QPvzpG32f3TmmDu6cbu8B6 zi@WCf=r<1f#nvq$i-j4hpi0Szl7O=F1CNJ)zti7NaQTmOoq|}T0@#8&anBLz2UdI6 zXB-Uk7I;E^p79@05FR~#hB0l%uv$}UF>bYlF1{H_eP2d4b1tJ9i7=~>OmdyI~`Gw5vM{PD+zwb@haX&&gq7UEv*z=De zC}3hdEEv!Q-7iqxc2*O5P@*sc=Fsr%gnETui_7J_RYzG_kq0w&3`UwMjkgXF0!JPZ zBAT66)e*zD082P@NOYh!40;CPUUxU?!vA^nO_Yvf^ykG1Jpylom1TKRa%>yPF{G&a zyQ9W9re4Fjczu1f@^S2mLK86=&fhOKvC8@a7xu>=e;w-ip99+Vnx%nDO%57RkGvo@ zvzBk;LTbM(hOQo~D*8sa#mCr<2f*1iIGjfq) zSk`O9|9_9&Uw4R3VZ)r0b--p~y|CrhL9tyngyvV!g16T|D@}!k0a;e0y9n94|I6`1 z|HJbFR~~QCQ7_G}bQ5--1rxw?w<$ zhL!$5?rwvzZ2{=QnzVr7;qK7?>RR?p>TmL~s_b$E_1qMc&G7AQMP1zHt6x{qIEeYz zx4&%)M3g5b*Q>5${;1)v zb?d5d()}lgLRN#yYc9V!J3k`2nBU%$fs<<}{oDCh6;i#!gRFql*(5+f0Fv0kI@;#) z_-y5jxs_vWf{e%jIE z_yEDfd*hIS!N7p+sR}dozdh@J-1F&iW6Ge0z)%AnpBOZUs=U|WIz}?DlJ~i^Ksz$G XbZ_%?=}7B7;OCNog?^>(&6xiOI=JQ~ literal 0 HcmV?d00001 diff --git a/lyrebird_ios/__init__.py b/lyrebird_ios/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lyrebird_ios/config/comparison_table_model.json b/lyrebird_ios/config/comparison_table_model.json new file mode 100644 index 0000000..46e55b8 --- /dev/null +++ b/lyrebird_ios/config/comparison_table_model.json @@ -0,0 +1,24 @@ +{ + "iPhone3,1": "iPhone 4", + "iPhone3,2": "iPhone 4", + "iPhone3,3": "iPhone 4", + "iPhone4,1": "iPhone 4S", + "iPhone5,1": "iPhone 5", + "iPhone5,2": "iPhone 5 (GSM+CDMA)", + "iPhone5,3": "iPhone 5c (GSM)", + "iPhone5,4": "iPhone 5c (GSM+CDMA)", + "iPhone6,1": "iPhone 5s (GSM)", + "iPhone6,2": "iPhone 5s (GSM+CDMA)", + "iPhone7,1": "iPhone 6 Plus", + "iPhone7,2": "iPhone 6", + "iPhone8,1": "iPhone 6s", + "iPhone8,2": "iPhone 6s Plus", + "iPhone8,4": "iPhone SE", + "iPhone9,1": "iPhone 7", + "iPhone9,2": "iPhone 7 Plus", + "iPhone9,3": "iPhone 7", + "iPhone9,4": "iPhone 7 Plus", + "iPhone10,1": "iPhone 8", + "iPhone10,2": "iPhone 8 Plus", + "iPhone10,3": "iPhone X" +} \ No newline at end of file diff --git a/lyrebird_ios/config/conf.json b/lyrebird_ios/config/conf.json new file mode 100644 index 0000000..082ddc2 --- /dev/null +++ b/lyrebird_ios/config/conf.json @@ -0,0 +1,9 @@ +{ + "app_info": { + "CFBundleName": "AppName", + "CFBundleIdentifier": "BundleID", + "CFBundleShortVersionString": "VersionNumber", + "CFBundleVersion": "BuildNumber" + }, + "default_app": "" +} \ No newline at end of file diff --git a/lyrebird_ios/device_service.py b/lyrebird_ios/device_service.py new file mode 100644 index 0000000..49453b9 --- /dev/null +++ b/lyrebird_ios/device_service.py @@ -0,0 +1,54 @@ +from lyrebird import context +from . import ios_helper +from lyrebird.mock.logger_helper import get_logger + +_log = get_logger() + + +class DeviceService: + """ + 设备服务 manager + """ + READY = 0 + RUNNING = 1 + STOP = 2 + + def __init__(self): + self.status = self.READY + self.handle_interval = 1 + self.devices = {} + print('DeviceService OnCreate') + + def devices_to_dict(self): + json_obj = {} + for device_id in self.devices: + json_obj[device_id] = self.devices[device_id].to_dict() + return json_obj + + def run(self): + self.status = self.RUNNING + print('iOS device listener start') + while self.status == self.RUNNING: + try: + self.handle() + context.application.socket_io.sleep(self.handle_interval) + except Exception as e: + _log.error(e) + self.status = self.STOP + print('iOS device listener stop') + + def handle(self): + devices = ios_helper.devices() + if len(devices) == len(self.devices): + if len([k for k in devices if k not in self.devices]) == 0: + return + + self.devices = devices + context.application.socket_io.emit('device', namespace='/iOS-plugin') + + def start_log_recorder(self, device_id): + for _device_id in self.devices: + if _device_id == device_id: + self.devices[_device_id].start_log() + else: + self.devices[_device_id].stop_log() diff --git a/lyrebird_ios/helper/__init__.py b/lyrebird_ios/helper/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lyrebird_ios/helper/config.py b/lyrebird_ios/helper/config.py new file mode 100644 index 0000000..0b5442a --- /dev/null +++ b/lyrebird_ios/helper/config.py @@ -0,0 +1,30 @@ +import lyrebird +import os +import json +import codecs + + +storage = lyrebird.get_plugin_storage() +CONFIG_FILE = os.path.abspath(os.path.join(storage, 'conf.json')) + + +class Config: + + def __init__(self): + self.package_name = None + + def save(self): + json_str = json.dumps(self.__dict__, indent=4, ensure_ascii=False) + conf_file = codecs.open(CONFIG_FILE, 'w', 'utf-8') + conf_file.write(json_str) + conf_file.close() + + +def load(): + if os.path.exists(CONFIG_FILE): + conf_data = json.loads(codecs.open(CONFIG_FILE, 'r', 'utf-8').read()) + conf = Config() + conf.__dict__ = conf_data + return conf + else: + return Config() diff --git a/lyrebird_ios/helper/file_system.py b/lyrebird_ios/helper/file_system.py new file mode 100644 index 0000000..6883a7d --- /dev/null +++ b/lyrebird_ios/helper/file_system.py @@ -0,0 +1,45 @@ +import lyrebird +import os +import codecs +import json +from pathlib import Path +from . import config + + +class PluginPath: + _CURRENT_DIR = Path(__file__).parent + _STORAGE = Path(lyrebird.get_plugin_storage()) + _PLIST = _STORAGE / 'plist' + _DEFAULT_CONF = Path(_CURRENT_DIR, './config/conf.json') + + def get_config(self): + """ + Path of conf.json + + :return: conf.json + """ + return self._STORAGE / 'conf.json' + + + def get_plist(self, device_id): + """ + Path of plist + + :param device_id: + :return: device_id.plist + """ + if not self._PLIST.exists(): + self._PLIST.mkdir() + return os.path.join(self._PLIST, '%s.plist' % device_id) + + + def get_default_conf(self): + """ + Path of plugin's default conf + + :return: conf.json + """ + with codecs.open(self._DEFAULT_CONF, 'r', 'utf-8') as f: + return json.loads(f.read()) + +plugin_path = PluginPath() diff --git a/lyrebird_ios/helper/utils.py b/lyrebird_ios/helper/utils.py new file mode 100644 index 0000000..7c6dc23 --- /dev/null +++ b/lyrebird_ios/helper/utils.py @@ -0,0 +1,15 @@ +import subprocess + +def run_command_background(command): + return subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, start_new_session=True) + + +def run_command(commad): + return subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + + +def run_shell(command): + return subprocess.run(command, shell=True, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) \ No newline at end of file diff --git a/lyrebird_ios/ios_helper.py b/lyrebird_ios/ios_helper.py new file mode 100644 index 0000000..3987bc5 --- /dev/null +++ b/lyrebird_ios/ios_helper.py @@ -0,0 +1,356 @@ +import os, plistlib, subprocess, threading, codecs, json, time +from pathlib import Path +import lyrebird +from lyrebird import context +from lyrebird.mock import logger_helper +from .helper import config + +_log = logger_helper.get_logger() + +ideviceinstaller = None +idevice_id = None +idevicescreenshot = None +ideviceinfo = None +idevicesyslog = None + +root = os.path.dirname(__file__) +static = os.path.abspath(os.path.join(root, 'static')) +model_json = os.path.abspath(os.path.join(root, 'config/comparison_table_model.json')) +storage = lyrebird.get_plugin_storage() + +tmp_dir = os.path.abspath(os.path.join(storage, 'tmp')) +crash_dir = os.path.abspath(os.path.join(storage, 'crash')) + +PLUGIN_ROOT_PATH = Path('~', '.lyrebird/plugins/lyrebird_ios').expanduser() +PLIST_PATH = os.path.join(PLUGIN_ROOT_PATH, 'plist') +error_msg = None + +if not os.path.exists(tmp_dir): + os.makedirs(tmp_dir) + + +if not os.path.exists(crash_dir): + os.makedirs(crash_dir) + + +class libimobiledeviceError(Exception): + pass + + +class ideviceinstallerError(Exception): + pass + + +def check_environment(): + """ + 检查用户环境,第三方依赖是否正确安装。 + :return: + """ + global ideviceinstaller, idevice_id, idevicescreenshot, ideviceinfo, idevicesyslog, error_msg + + if not os.path.exists('/usr/local/bin/ideviceinfo'): + error_msg = {"show_error": True, + "user_message": "No ideviceinfo program found, need libimobiledevice dependencies with Homebrew, See README Help Center"} + time.sleep(20) + raise libimobiledeviceError('No libimobiledevice program found, See README Help Center') + else: + p = subprocess.Popen('/usr/local/bin/ideviceinfo', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + err = p.stderr.read().decode() + if len(err): + error_msg = {"show_error": True, + "user_message": "ideviceinfo program found but not working with error -> %s, See README Help Center" % err} + time.sleep(20) + raise libimobiledeviceError('ideviceinfo program found but not working with error -> %s, See README Help Center' % err) + + if not os.path.exists('/usr/local/bin/ideviceinstaller'): + error_msg = {"show_error": True, + "user_message": "No ideviceinstaller program found, need ideviceinstaller dependencies use Homebrew, See README Help Center"} + time.sleep(20) + raise ideviceinstallerError("No ideviceinstaller program found, need ideviceinstaller dependencies use Homebrew, See README Help Center") + + if not os.path.exists('/usr/local/bin/idevicescreenshot'): + error_msg = {"show_error": True, + "user_message": "No idevicescreenshot program found, need libimobiledevice dependencies use Homebrew, See README Help Center"} + time.sleep(20) + raise libimobiledeviceError('No idevicescreenshot program found, See README Help Center') + + idevice_id = '/usr/local/bin/idevice_id' + ideviceinstaller = '/usr/local/bin/ideviceinstaller' + ideviceinfo = '/usr/local/bin/ideviceinfo' + idevicesyslog = '/usr/local/bin/idevicesyslog' + idevicescreenshot = '/usr/local/bin/idevicescreenshot' + + error_msg = {"show_error": False, "user_message": ""} + + +def read_plist(plist_path): + return plistlib.readPlist(plist_path) + + +class Apps: + """ + 应用基类,属性为 plist, bundle_id,提供两个方法,获取app的列表,和获取指定app的详细信息 + """ + + def __init__(self): + self._plist = None + self.bundle_id = None + self.app_info = {} + + @property + def plist(self): + return self._plist + + @plist.setter + def plist(self, name): + plist_path = os.path.join(PLIST_PATH, name) + if os.path.exists(plist_path): + self._plist = plist_path + + @property + def apps(self): + return read_plist(self.plist) + + @property + def app_key(self): + conf = config.load() + if hasattr(conf, 'app_info'): + return config.load().app_info + else: + return { + "CFBundleName": "AppName", + "CFBundleIdentifier": "BundleID", + "CFBundleShortVersionString": "VersionNumber", + "CFBundleVersion": "BuildNumber" + } + + def app(self, bundle_id): + for app in self.apps: + if bundle_id in app.get('CFBundleIdentifier'): + return app + + def get_app_list(self): + app_list = [] + for app in self.apps: + tmp = {} + tmp["app_name"] = app.get('CFBundleName') + tmp['bundle_id'] = app.get('CFBundleIdentifier') + tmp['label'] = '%s %s' % (app.get('CFBundleName'), app.get('CFBundleIdentifier')) + app_list.append(tmp) + return app_list + + def get_app_info(self, bundle_id): + for k, v in self.app_key.items(): + self.app_info[v] = self.app(bundle_id).get(k) + return self.app_info + + +class Device: + """ + 设备基类,主要属性包含 device_id, model, os_version等,主要方法包括截屏,获取信息等 + """ + def __init__(self, device_id): + self.device_id = device_id + self.model = None + self.is_jailbreak = None + self.phone_number = None + self.os_version = None + self.device_name = None + self.sn = None + self._log_process = None + self._log_cache = [] + self._log_crash_cache = [] + self._log_file = None + self._screen_shot_file = os.path.abspath(os.path.join(tmp_dir, 'android_screenshot_%s.png' % self.device_id)) + self._anr_file = None + self._crash_file_list = [] + self._device_info = None + self._apps_list = None + self.start_catch_log = False + self._pid = None + + @property + def log_file(self): + return self._log_file + + @property + def screen_shot_file(self): + return self._screen_shot_file + + @property + def anr_file(self): + return self._anr_file + + @property + def crash_file_list(self): + return self._crash_file_list + + @classmethod + def read_line(cls, line): + res = subprocess.run(f'{ideviceinfo} -u {line}', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + lines = res.stdout.decode() + + device_info = [info for info in lines.split('\n') if info] + _device = cls(line) + if len(device_info) < 2: + _log.error(f'Read device info line error. {lines}') + raise libimobiledeviceError('Failed to got device info, Please make sure \'deviceinfo\' command is working on your system.') + for info in device_info: + info_kv = info.split(':') + if info_kv[0] == 'ProductType': + _device.model = cls(line).convert_model(model=info_kv[1].strip()) + if info_kv[0] == 'BrickState': + _device.is_jailbreak = info_kv[1].strip() + if info_kv[0] == 'PhoneNumber': + _device.phone_number = info_kv[1].strip() + if info_kv[0] == 'ProductVersion': + _device.os_version = info_kv[1].strip() + if info_kv[0] == 'DeviceName': + _device.device_name = info_kv[1].strip() + if info_kv[0] == 'SerialNumber': + _device.sn = info_kv[1].strip() + return _device + + def convert_model(self, model): + model_dict = json.loads(codecs.open(model_json, 'r', 'utf-8').read()) + return model_dict.get(model) + + def start_log(self): + self.stop_log() + + log_file_name = 'ios_log_%s.log' % self.device_id + self._log_file = os.path.abspath(os.path.join(tmp_dir, log_file_name)) + + p = subprocess.Popen(f'{idevicesyslog} -u {self.device_id}', shell=True, stdout=subprocess.PIPE) + + def log_handler(logcat_process): + log_file = codecs.open(self._log_file, 'w', 'utf-8') + + while True: + line = logcat_process.stdout.readline() + + if not line: + context.application.socket_io.emit('log', self._log_cache, namespace='/iOS-plugin') + log_file.close() + return + + # self.crash_checker(line) + # self.anr_checker(line) + self._log_cache.append(line.decode(encoding='UTF-8', errors='ignore')) + + if len(self._log_cache) >= 5000: + context.application.socket_io.emit('log', self._log_cache, namespace='/iOS-plugin') + log_file.writelines(self._log_cache) + log_file.flush() + self._log_cache = [] + threading.Thread(target=log_handler, args=(p,)).start() + + def crash_checker(self, line): + crash_log_path = os.path.join(crash_dir, 'android_crash_%s.log' % self.device_id) + + if str(line).find('FATAL EXCEPTION') > 0: + self.start_catch_log = True + self._log_crash_cache.append(str(line)) + lyrebird.publish('crash', 'android', path=crash_log_path, id=self.device_id) + elif str(line).find('AndroidRuntime') > 0 and self.start_catch_log: + self._log_crash_cache.append(str(line)) + else: + self.start_catch_log = False + with codecs.open(crash_log_path, 'w') as f: + f.write('\n'.join(self._log_crash_cache)) + + def anr_checker(self, line): + if str(line).find('ANR') > 0 and str(line).find('ActivityManager') > 0: + self.get_anr_log() + + @property + def device_info(self): + if not self._device_info: + self._device_info = self.get_properties() + return self._device_info + + def get_properties(self): + p = subprocess.run(f'{ideviceinfo} -u {self.device_id}', shell=True, stdout=subprocess.PIPE) + if p.returncode == 0: + return p.stdout.decode().split('\n') + + def get_app_info(self, bundle_id): + self.get_device_plist(self.device_id) + apps = Apps() + apps.plist = self.device_id + '.plist' + return apps.get_app_info(bundle_id) + + def get_device_plist(self, device_id): + plist_path = '%s/%s.plist' % (PLIST_PATH, self.device_id) + if not os.path.exists(PLIST_PATH): + os.mkdir(PLIST_PATH) + p = subprocess.Popen(f'{ideviceinstaller} -u {self.device_id} -l -o xml > {plist_path}', shell=True) + p.wait() + + def get_apps_list(self, device_id): + self.get_device_plist(device_id) + apps = Apps() + apps.plist = self.device_id + '.plist' + return apps.get_app_list() + + def stop_log(self): + if self._log_process: + self._log_process.kill() + self._log_process = None + + def take_screen_shot(self): + file_name = self.device_name.replace(' ', '_') + p = subprocess.run(f'{idevicescreenshot} -u {self.device_id} {tmp_dir}/{file_name}.png', shell=True) + if p.returncode == 0: + return os.path.abspath(os.path.join(tmp_dir, '%s.png' % file_name)) + else: + return False + + def to_dict(self): + device_info = {k: self.__dict__[k] for k in self.__dict__ if not k.startswith('_')} + # get additional device info + prop_lines = self.device_info + if not prop_lines: + return device_info + + for line in prop_lines: + # 基带版本 + if 'ro.build.expect.baseband' in line: + baseband = line[line.rfind('[')+1:line.rfind(']')].strip() + device_info['baseBand'] = baseband + # 版本号 + if 'ro.build.id' in line: + build_id = line[line.rfind('[') + 1:line.rfind(']')].strip() + device_info['buildId'] = build_id + # Android 版本 + if 'ro.build.version.release' in line: + build_version = line[line.rfind('[') + 1:line.rfind(']')].strip() + device_info['releaseVersion'] = build_version + return device_info + + +def devices(): + """ + devices 用于返回在线的设备示例集合 + :type 字典 + :return: online_devices 对象 (在线的设备) + """ + check_environment() + + res = subprocess.run(f'{idevice_id} -l', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + output = res.stdout.decode() + err_str = res.stderr.decode() + + # 命令执行异常 + if len(output) <= 0 < len(err_str): + print('Get devices list error', err_str) + return [] + lines = [line for line in output.split('\n') if line] + online_devices = {} + if len(lines) == 0: + return online_devices + for line in lines: + device = Device.read_line(line) + online_devices[device.device_id] = device + + return online_devices diff --git a/lyrebird_ios/static/images/iPhone_default.png b/lyrebird_ios/static/images/iPhone_default.png new file mode 100644 index 0000000000000000000000000000000000000000..5569b64bdc2cdab91b46f616b524360b773a81fc GIT binary patch literal 14591 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 F`!CP!b+`Zk literal 0 HcmV?d00001 diff --git a/lyrebird_ios/static/vue-resource.js b/lyrebird_ios/static/vue-resource.js new file mode 100644 index 0000000..c3ebb9a --- /dev/null +++ b/lyrebird_ios/static/vue-resource.js @@ -0,0 +1,1574 @@ +/*! + * vue-resource v1.3.4 + * https://github.com/pagekit/vue-resource + * Released under the MIT License. + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.VueResource = factory()); +}(this, (function () { 'use strict'; + +/** + * Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis) + */ + +var RESOLVED = 0; +var REJECTED = 1; +var PENDING = 2; + +function Promise$1(executor) { + + this.state = PENDING; + this.value = undefined; + this.deferred = []; + + var promise = this; + + try { + executor(function (x) { + promise.resolve(x); + }, function (r) { + promise.reject(r); + }); + } catch (e) { + promise.reject(e); + } +} + +Promise$1.reject = function (r) { + return new Promise$1(function (resolve, reject) { + reject(r); + }); +}; + +Promise$1.resolve = function (x) { + return new Promise$1(function (resolve, reject) { + resolve(x); + }); +}; + +Promise$1.all = function all(iterable) { + return new Promise$1(function (resolve, reject) { + var count = 0, result = []; + + if (iterable.length === 0) { + resolve(result); + } + + function resolver(i) { + return function (x) { + result[i] = x; + count += 1; + + if (count === iterable.length) { + resolve(result); + } + }; + } + + for (var i = 0; i < iterable.length; i += 1) { + Promise$1.resolve(iterable[i]).then(resolver(i), reject); + } + }); +}; + +Promise$1.race = function race(iterable) { + return new Promise$1(function (resolve, reject) { + for (var i = 0; i < iterable.length; i += 1) { + Promise$1.resolve(iterable[i]).then(resolve, reject); + } + }); +}; + +var p$1 = Promise$1.prototype; + +p$1.resolve = function resolve(x) { + var promise = this; + + if (promise.state === PENDING) { + if (x === promise) { + throw new TypeError('Promise settled with itself.'); + } + + var called = false; + + try { + var then = x && x['then']; + + if (x !== null && typeof x === 'object' && typeof then === 'function') { + then.call(x, function (x) { + if (!called) { + promise.resolve(x); + } + called = true; + + }, function (r) { + if (!called) { + promise.reject(r); + } + called = true; + }); + return; + } + } catch (e) { + if (!called) { + promise.reject(e); + } + return; + } + + promise.state = RESOLVED; + promise.value = x; + promise.notify(); + } +}; + +p$1.reject = function reject(reason) { + var promise = this; + + if (promise.state === PENDING) { + if (reason === promise) { + throw new TypeError('Promise settled with itself.'); + } + + promise.state = REJECTED; + promise.value = reason; + promise.notify(); + } +}; + +p$1.notify = function notify() { + var promise = this; + + nextTick(function () { + if (promise.state !== PENDING) { + while (promise.deferred.length) { + var deferred = promise.deferred.shift(), + onResolved = deferred[0], + onRejected = deferred[1], + resolve = deferred[2], + reject = deferred[3]; + + try { + if (promise.state === RESOLVED) { + if (typeof onResolved === 'function') { + resolve(onResolved.call(undefined, promise.value)); + } else { + resolve(promise.value); + } + } else if (promise.state === REJECTED) { + if (typeof onRejected === 'function') { + resolve(onRejected.call(undefined, promise.value)); + } else { + reject(promise.value); + } + } + } catch (e) { + reject(e); + } + } + } + }); +}; + +p$1.then = function then(onResolved, onRejected) { + var promise = this; + + return new Promise$1(function (resolve, reject) { + promise.deferred.push([onResolved, onRejected, resolve, reject]); + promise.notify(); + }); +}; + +p$1.catch = function (onRejected) { + return this.then(undefined, onRejected); +}; + +/** + * Promise adapter. + */ + +if (typeof Promise === 'undefined') { + window.Promise = Promise$1; +} + +function PromiseObj(executor, context) { + + if (executor instanceof Promise) { + this.promise = executor; + } else { + this.promise = new Promise(executor.bind(context)); + } + + this.context = context; +} + +PromiseObj.all = function (iterable, context) { + return new PromiseObj(Promise.all(iterable), context); +}; + +PromiseObj.resolve = function (value, context) { + return new PromiseObj(Promise.resolve(value), context); +}; + +PromiseObj.reject = function (reason, context) { + return new PromiseObj(Promise.reject(reason), context); +}; + +PromiseObj.race = function (iterable, context) { + return new PromiseObj(Promise.race(iterable), context); +}; + +var p = PromiseObj.prototype; + +p.bind = function (context) { + this.context = context; + return this; +}; + +p.then = function (fulfilled, rejected) { + + if (fulfilled && fulfilled.bind && this.context) { + fulfilled = fulfilled.bind(this.context); + } + + if (rejected && rejected.bind && this.context) { + rejected = rejected.bind(this.context); + } + + return new PromiseObj(this.promise.then(fulfilled, rejected), this.context); +}; + +p.catch = function (rejected) { + + if (rejected && rejected.bind && this.context) { + rejected = rejected.bind(this.context); + } + + return new PromiseObj(this.promise.catch(rejected), this.context); +}; + +p.finally = function (callback) { + + return this.then(function (value) { + callback.call(this); + return value; + }, function (reason) { + callback.call(this); + return Promise.reject(reason); + } + ); +}; + +/** + * Utility functions. + */ + +var ref = {}; +var hasOwnProperty = ref.hasOwnProperty; + +var ref$1 = []; +var slice = ref$1.slice; +var debug = false; +var ntick; + +var inBrowser = typeof window !== 'undefined'; + +var Util = function (ref) { + var config = ref.config; + var nextTick = ref.nextTick; + + ntick = nextTick; + debug = config.debug || !config.silent; +}; + +function warn(msg) { + if (typeof console !== 'undefined' && debug) { + console.warn('[VueResource warn]: ' + msg); + } +} + +function error(msg) { + if (typeof console !== 'undefined') { + console.error(msg); + } +} + +function nextTick(cb, ctx) { + return ntick(cb, ctx); +} + +function trim(str) { + return str ? str.replace(/^\s*|\s*$/g, '') : ''; +} + +function trimEnd(str, chars) { + + if (str && chars === undefined) { + return str.replace(/\s+$/, ''); + } + + if (!str || !chars) { + return str; + } + + return str.replace(new RegExp(("[" + chars + "]+$")), ''); +} + +function toLower(str) { + return str ? str.toLowerCase() : ''; +} + +function toUpper(str) { + return str ? str.toUpperCase() : ''; +} + +var isArray = Array.isArray; + +function isString(val) { + return typeof val === 'string'; +} + + + +function isFunction(val) { + return typeof val === 'function'; +} + +function isObject(obj) { + return obj !== null && typeof obj === 'object'; +} + +function isPlainObject(obj) { + return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype; +} + +function isBlob(obj) { + return typeof Blob !== 'undefined' && obj instanceof Blob; +} + +function isFormData(obj) { + return typeof FormData !== 'undefined' && obj instanceof FormData; +} + +function when(value, fulfilled, rejected) { + + var promise = PromiseObj.resolve(value); + + if (arguments.length < 2) { + return promise; + } + + return promise.then(fulfilled, rejected); +} + +function options(fn, obj, opts) { + + opts = opts || {}; + + if (isFunction(opts)) { + opts = opts.call(obj); + } + + return merge(fn.bind({$vm: obj, $options: opts}), fn, {$options: opts}); +} + +function each(obj, iterator) { + + var i, key; + + if (isArray(obj)) { + for (i = 0; i < obj.length; i++) { + iterator.call(obj[i], obj[i], i); + } + } else if (isObject(obj)) { + for (key in obj) { + if (hasOwnProperty.call(obj, key)) { + iterator.call(obj[key], obj[key], key); + } + } + } + + return obj; +} + +var assign = Object.assign || _assign; + +function merge(target) { + + var args = slice.call(arguments, 1); + + args.forEach(function (source) { + _merge(target, source, true); + }); + + return target; +} + +function defaults(target) { + + var args = slice.call(arguments, 1); + + args.forEach(function (source) { + + for (var key in source) { + if (target[key] === undefined) { + target[key] = source[key]; + } + } + + }); + + return target; +} + +function _assign(target) { + + var args = slice.call(arguments, 1); + + args.forEach(function (source) { + _merge(target, source); + }); + + return target; +} + +function _merge(target, source, deep) { + for (var key in source) { + if (deep && (isPlainObject(source[key]) || isArray(source[key]))) { + if (isPlainObject(source[key]) && !isPlainObject(target[key])) { + target[key] = {}; + } + if (isArray(source[key]) && !isArray(target[key])) { + target[key] = []; + } + _merge(target[key], source[key], deep); + } else if (source[key] !== undefined) { + target[key] = source[key]; + } + } +} + +/** + * Root Prefix Transform. + */ + +var root = function (options$$1, next) { + + var url = next(options$$1); + + if (isString(options$$1.root) && !/^(https?:)?\//.test(url)) { + url = trimEnd(options$$1.root, '/') + '/' + url; + } + + return url; +}; + +/** + * Query Parameter Transform. + */ + +var query = function (options$$1, next) { + + var urlParams = Object.keys(Url.options.params), query = {}, url = next(options$$1); + + each(options$$1.params, function (value, key) { + if (urlParams.indexOf(key) === -1) { + query[key] = value; + } + }); + + query = Url.params(query); + + if (query) { + url += (url.indexOf('?') == -1 ? '?' : '&') + query; + } + + return url; +}; + +/** + * URL Template v2.0.6 (https://github.com/bramstein/url-template) + */ + +function expand(url, params, variables) { + + var tmpl = parse(url), expanded = tmpl.expand(params); + + if (variables) { + variables.push.apply(variables, tmpl.vars); + } + + return expanded; +} + +function parse(template) { + + var operators = ['+', '#', '.', '/', ';', '?', '&'], variables = []; + + return { + vars: variables, + expand: function expand(context) { + return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) { + if (expression) { + + var operator = null, values = []; + + if (operators.indexOf(expression.charAt(0)) !== -1) { + operator = expression.charAt(0); + expression = expression.substr(1); + } + + expression.split(/,/g).forEach(function (variable) { + var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); + values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3])); + variables.push(tmp[1]); + }); + + if (operator && operator !== '+') { + + var separator = ','; + + if (operator === '?') { + separator = '&'; + } else if (operator !== '#') { + separator = operator; + } + + return (values.length !== 0 ? operator : '') + values.join(separator); + } else { + return values.join(','); + } + + } else { + return encodeReserved(literal); + } + }); + } + }; +} + +function getValues(context, operator, key, modifier) { + + var value = context[key], result = []; + + if (isDefined(value) && value !== '') { + if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { + value = value.toString(); + + if (modifier && modifier !== '*') { + value = value.substring(0, parseInt(modifier, 10)); + } + + result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null)); + } else { + if (modifier === '*') { + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function (value) { + result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null)); + }); + } else { + Object.keys(value).forEach(function (k) { + if (isDefined(value[k])) { + result.push(encodeValue(operator, value[k], k)); + } + }); + } + } else { + var tmp = []; + + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function (value) { + tmp.push(encodeValue(operator, value)); + }); + } else { + Object.keys(value).forEach(function (k) { + if (isDefined(value[k])) { + tmp.push(encodeURIComponent(k)); + tmp.push(encodeValue(operator, value[k].toString())); + } + }); + } + + if (isKeyOperator(operator)) { + result.push(encodeURIComponent(key) + '=' + tmp.join(',')); + } else if (tmp.length !== 0) { + result.push(tmp.join(',')); + } + } + } + } else { + if (operator === ';') { + result.push(encodeURIComponent(key)); + } else if (value === '' && (operator === '&' || operator === '?')) { + result.push(encodeURIComponent(key) + '='); + } else if (value === '') { + result.push(''); + } + } + + return result; +} + +function isDefined(value) { + return value !== undefined && value !== null; +} + +function isKeyOperator(operator) { + return operator === ';' || operator === '&' || operator === '?'; +} + +function encodeValue(operator, value, key) { + + value = (operator === '+' || operator === '#') ? encodeReserved(value) : encodeURIComponent(value); + + if (key) { + return encodeURIComponent(key) + '=' + value; + } else { + return value; + } +} + +function encodeReserved(str) { + return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) { + if (!/%[0-9A-Fa-f]/.test(part)) { + part = encodeURI(part); + } + return part; + }).join(''); +} + +/** + * URL Template (RFC 6570) Transform. + */ + +var template = function (options) { + + var variables = [], url = expand(options.url, options.params, variables); + + variables.forEach(function (key) { + delete options.params[key]; + }); + + return url; +}; + +/** + * Service for URL templating. + */ + +function Url(url, params) { + + var self = this || {}, options$$1 = url, transform; + + if (isString(url)) { + options$$1 = {url: url, params: params}; + } + + options$$1 = merge({}, Url.options, self.$options, options$$1); + + Url.transforms.forEach(function (handler) { + + if (isString(handler)) { + handler = Url.transform[handler]; + } + + if (isFunction(handler)) { + transform = factory(handler, transform, self.$vm); + } + + }); + + return transform(options$$1); +} + +/** + * Url options. + */ + +Url.options = { + url: '', + root: null, + params: {} +}; + +/** + * Url transforms. + */ + +Url.transform = {template: template, query: query, root: root}; +Url.transforms = ['template', 'query', 'root']; + +/** + * Encodes a Url parameter string. + * + * @param {Object} obj + */ + +Url.params = function (obj) { + + var params = [], escape = encodeURIComponent; + + params.add = function (key, value) { + + if (isFunction(value)) { + value = value(); + } + + if (value === null) { + value = ''; + } + + this.push(escape(key) + '=' + escape(value)); + }; + + serialize(params, obj); + + return params.join('&').replace(/%20/g, '+'); +}; + +/** + * Parse a URL and return its components. + * + * @param {String} url + */ + +Url.parse = function (url) { + + var el = document.createElement('a'); + + if (document.documentMode) { + el.href = url; + url = el.href; + } + + el.href = url; + + return { + href: el.href, + protocol: el.protocol ? el.protocol.replace(/:$/, '') : '', + port: el.port, + host: el.host, + hostname: el.hostname, + pathname: el.pathname.charAt(0) === '/' ? el.pathname : '/' + el.pathname, + search: el.search ? el.search.replace(/^\?/, '') : '', + hash: el.hash ? el.hash.replace(/^#/, '') : '' + }; +}; + +function factory(handler, next, vm) { + return function (options$$1) { + return handler.call(vm, options$$1, next); + }; +} + +function serialize(params, obj, scope) { + + var array = isArray(obj), plain = isPlainObject(obj), hash; + + each(obj, function (value, key) { + + hash = isObject(value) || isArray(value); + + if (scope) { + key = scope + '[' + (plain || hash ? key : '') + ']'; + } + + if (!scope && array) { + params.add(value.name, value.value); + } else if (hash) { + serialize(params, value, key); + } else { + params.add(key, value); + } + }); +} + +/** + * XDomain client (Internet Explorer). + */ + +var xdrClient = function (request) { + return new PromiseObj(function (resolve) { + + var xdr = new XDomainRequest(), handler = function (ref) { + var type = ref.type; + + + var status = 0; + + if (type === 'load') { + status = 200; + } else if (type === 'error') { + status = 500; + } + + resolve(request.respondWith(xdr.responseText, {status: status})); + }; + + request.abort = function () { return xdr.abort(); }; + + xdr.open(request.method, request.getUrl()); + + if (request.timeout) { + xdr.timeout = request.timeout; + } + + xdr.onload = handler; + xdr.onabort = handler; + xdr.onerror = handler; + xdr.ontimeout = handler; + xdr.onprogress = function () {}; + xdr.send(request.getBody()); + }); +}; + +/** + * CORS Interceptor. + */ + +var SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest(); + +var cors = function (request, next) { + + if (inBrowser) { + + var orgUrl = Url.parse(location.href); + var reqUrl = Url.parse(request.getUrl()); + + if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) { + + request.crossOrigin = true; + request.emulateHTTP = false; + + if (!SUPPORTS_CORS) { + request.client = xdrClient; + } + } + } + + next(); +}; + +/** + * Form data Interceptor. + */ + +var form = function (request, next) { + + if (isFormData(request.body)) { + + request.headers.delete('Content-Type'); + + } else if (isObject(request.body) && request.emulateJSON) { + + request.body = Url.params(request.body); + request.headers.set('Content-Type', 'application/x-www-form-urlencoded'); + } + + next(); +}; + +/** + * JSON Interceptor. + */ + +var json = function (request, next) { + + var type = request.headers.get('Content-Type') || ''; + + if (isObject(request.body) && type.indexOf('application/json') === 0) { + request.body = JSON.stringify(request.body); + } + + next(function (response) { + + return response.bodyText ? when(response.text(), function (text) { + + type = response.headers.get('Content-Type') || ''; + + if (type.indexOf('application/json') === 0 || isJson(text)) { + + try { + response.body = JSON.parse(text); + } catch (e) { + response.body = null; + } + + } else { + response.body = text; + } + + return response; + + }) : response; + + }); +}; + +function isJson(str) { + + var start = str.match(/^\[|^\{(?!\{)/), end = {'[': /]$/, '{': /}$/}; + + return start && end[start[0]].test(str); +} + +/** + * JSONP client (Browser). + */ + +var jsonpClient = function (request) { + return new PromiseObj(function (resolve) { + + var name = request.jsonp || 'callback', callback = request.jsonpCallback || '_jsonp' + Math.random().toString(36).substr(2), body = null, handler, script; + + handler = function (ref) { + var type = ref.type; + + + var status = 0; + + if (type === 'load' && body !== null) { + status = 200; + } else if (type === 'error') { + status = 500; + } + + if (status && window[callback]) { + delete window[callback]; + document.body.removeChild(script); + } + + resolve(request.respondWith(body, {status: status})); + }; + + window[callback] = function (result) { + body = JSON.stringify(result); + }; + + request.abort = function () { + handler({type: 'abort'}); + }; + + request.params[name] = callback; + + if (request.timeout) { + setTimeout(request.abort, request.timeout); + } + + script = document.createElement('script'); + script.src = request.getUrl(); + script.type = 'text/javascript'; + script.async = true; + script.onload = handler; + script.onerror = handler; + + document.body.appendChild(script); + }); +}; + +/** + * JSONP Interceptor. + */ + +var jsonp = function (request, next) { + + if (request.method == 'JSONP') { + request.client = jsonpClient; + } + + next(); +}; + +/** + * Before Interceptor. + */ + +var before = function (request, next) { + + if (isFunction(request.before)) { + request.before.call(this, request); + } + + next(); +}; + +/** + * HTTP method override Interceptor. + */ + +var method = function (request, next) { + + if (request.emulateHTTP && /^(PUT|PATCH|DELETE)$/i.test(request.method)) { + request.headers.set('X-HTTP-Method-Override', request.method); + request.method = 'POST'; + } + + next(); +}; + +/** + * Header Interceptor. + */ + +var header = function (request, next) { + + var headers = assign({}, Http.headers.common, + !request.crossOrigin ? Http.headers.custom : {}, + Http.headers[toLower(request.method)] + ); + + each(headers, function (value, name) { + if (!request.headers.has(name)) { + request.headers.set(name, value); + } + }); + + next(); +}; + +/** + * XMLHttp client (Browser). + */ + +var xhrClient = function (request) { + return new PromiseObj(function (resolve) { + + var xhr = new XMLHttpRequest(), handler = function (event) { + + var response = request.respondWith( + 'response' in xhr ? xhr.response : xhr.responseText, { + status: xhr.status === 1223 ? 204 : xhr.status, // IE9 status bug + statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText) + } + ); + + each(trim(xhr.getAllResponseHeaders()).split('\n'), function (row) { + response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1)); + }); + + resolve(response); + }; + + request.abort = function () { return xhr.abort(); }; + + if (request.progress) { + if (request.method === 'GET') { + xhr.addEventListener('progress', request.progress); + } else if (/^(POST|PUT)$/i.test(request.method)) { + xhr.upload.addEventListener('progress', request.progress); + } + } + + xhr.open(request.method, request.getUrl(), true); + + if (request.timeout) { + xhr.timeout = request.timeout; + } + + if (request.responseType && 'responseType' in xhr) { + xhr.responseType = request.responseType; + } + + if (request.withCredentials || request.credentials) { + xhr.withCredentials = true; + } + + if (!request.crossOrigin) { + request.headers.set('X-Requested-With', 'XMLHttpRequest'); + } + + request.headers.forEach(function (value, name) { + xhr.setRequestHeader(name, value); + }); + + xhr.onload = handler; + xhr.onabort = handler; + xhr.onerror = handler; + xhr.ontimeout = handler; + xhr.send(request.getBody()); + }); +}; + +/** + * Http client (Node). + */ + +var nodeClient = function (request) { + + var client = require('got'); + + return new PromiseObj(function (resolve) { + + var url = request.getUrl(); + var body = request.getBody(); + var method = request.method; + var headers = {}, handler; + + request.headers.forEach(function (value, name) { + headers[name] = value; + }); + + client(url, {body: body, method: method, headers: headers}).then(handler = function (resp) { + + var response = request.respondWith(resp.body, { + status: resp.statusCode, + statusText: trim(resp.statusMessage) + } + ); + + each(resp.headers, function (value, name) { + response.headers.set(name, value); + }); + + resolve(response); + + }, function (error$$1) { return handler(error$$1.response); }); + }); +}; + +/** + * Base client. + */ + +var Client = function (context) { + + var reqHandlers = [sendRequest], resHandlers = [], handler; + + if (!isObject(context)) { + context = null; + } + + function Client(request) { + return new PromiseObj(function (resolve, reject) { + + function exec() { + + handler = reqHandlers.pop(); + + if (isFunction(handler)) { + handler.call(context, request, next); + } else { + warn(("Invalid interceptor of type " + (typeof handler) + ", must be a function")); + next(); + } + } + + function next(response) { + + if (isFunction(response)) { + + resHandlers.unshift(response); + + } else if (isObject(response)) { + + resHandlers.forEach(function (handler) { + response = when(response, function (response) { + return handler.call(context, response) || response; + }, reject); + }); + + when(response, resolve, reject); + + return; + } + + exec(); + } + + exec(); + + }, context); + } + + Client.use = function (handler) { + reqHandlers.push(handler); + }; + + return Client; +}; + +function sendRequest(request, resolve) { + + var client = request.client || (inBrowser ? xhrClient : nodeClient); + + resolve(client(request)); +} + +/** + * HTTP Headers. + */ + +var Headers = function Headers(headers) { + var this$1 = this; + + + this.map = {}; + + each(headers, function (value, name) { return this$1.append(name, value); }); +}; + +Headers.prototype.has = function has (name) { + return getName(this.map, name) !== null; +}; + +Headers.prototype.get = function get (name) { + + var list = this.map[getName(this.map, name)]; + + return list ? list.join() : null; +}; + +Headers.prototype.getAll = function getAll (name) { + return this.map[getName(this.map, name)] || []; +}; + +Headers.prototype.set = function set (name, value) { + this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)]; +}; + +Headers.prototype.append = function append (name, value){ + + var list = this.map[getName(this.map, name)]; + + if (list) { + list.push(trim(value)); + } else { + this.set(name, value); + } +}; + +Headers.prototype.delete = function delete$1 (name){ + delete this.map[getName(this.map, name)]; +}; + +Headers.prototype.deleteAll = function deleteAll (){ + this.map = {}; +}; + +Headers.prototype.forEach = function forEach (callback, thisArg) { + var this$1 = this; + + each(this.map, function (list, name) { + each(list, function (value) { return callback.call(thisArg, value, name, this$1); }); + }); +}; + +function getName(map, name) { + return Object.keys(map).reduce(function (prev, curr) { + return toLower(name) === toLower(curr) ? curr : prev; + }, null); +} + +function normalizeName(name) { + + if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) { + throw new TypeError('Invalid character in header field name'); + } + + return trim(name); +} + +/** + * HTTP Response. + */ + +var Response = function Response(body, ref) { + var url = ref.url; + var headers = ref.headers; + var status = ref.status; + var statusText = ref.statusText; + + + this.url = url; + this.ok = status >= 200 && status < 300; + this.status = status || 0; + this.statusText = statusText || ''; + this.headers = new Headers(headers); + this.body = body; + + if (isString(body)) { + + this.bodyText = body; + + } else if (isBlob(body)) { + + this.bodyBlob = body; + + if (isBlobText(body)) { + this.bodyText = blobText(body); + } + } +}; + +Response.prototype.blob = function blob () { + return when(this.bodyBlob); +}; + +Response.prototype.text = function text () { + return when(this.bodyText); +}; + +Response.prototype.json = function json () { + return when(this.text(), function (text) { return JSON.parse(text); }); +}; + +Object.defineProperty(Response.prototype, 'data', { + + get: function get() { + return this.body; + }, + + set: function set(body) { + this.body = body; + } + +}); + +function blobText(body) { + return new PromiseObj(function (resolve) { + + var reader = new FileReader(); + + reader.readAsText(body); + reader.onload = function () { + resolve(reader.result); + }; + + }); +} + +function isBlobText(body) { + return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1; +} + +/** + * HTTP Request. + */ + +var Request = function Request(options$$1) { + + this.body = null; + this.params = {}; + + assign(this, options$$1, { + method: toUpper(options$$1.method || 'GET') + }); + + if (!(this.headers instanceof Headers)) { + this.headers = new Headers(this.headers); + } +}; + +Request.prototype.getUrl = function getUrl (){ + return Url(this); +}; + +Request.prototype.getBody = function getBody (){ + return this.body; +}; + +Request.prototype.respondWith = function respondWith (body, options$$1) { + return new Response(body, assign(options$$1 || {}, {url: this.getUrl()})); +}; + +/** + * Service for sending network requests. + */ + +var COMMON_HEADERS = {'Accept': 'application/json, text/plain, */*'}; +var JSON_CONTENT_TYPE = {'Content-Type': 'application/json;charset=utf-8'}; + +function Http(options$$1) { + + var self = this || {}, client = Client(self.$vm); + + defaults(options$$1 || {}, self.$options, Http.options); + + Http.interceptors.forEach(function (handler) { + + if (isString(handler)) { + handler = Http.interceptor[handler]; + } + + if (isFunction(handler)) { + client.use(handler); + } + + }); + + return client(new Request(options$$1)).then(function (response) { + + return response.ok ? response : PromiseObj.reject(response); + + }, function (response) { + + if (response instanceof Error) { + error(response); + } + + return PromiseObj.reject(response); + }); +} + +Http.options = {}; + +Http.headers = { + put: JSON_CONTENT_TYPE, + post: JSON_CONTENT_TYPE, + patch: JSON_CONTENT_TYPE, + delete: JSON_CONTENT_TYPE, + common: COMMON_HEADERS, + custom: {} +}; + +Http.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors}; +Http.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors']; + +['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) { + + Http[method$$1] = function (url, options$$1) { + return this(assign(options$$1 || {}, {url: url, method: method$$1})); + }; + +}); + +['post', 'put', 'patch'].forEach(function (method$$1) { + + Http[method$$1] = function (url, body, options$$1) { + return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body})); + }; + +}); + +/** + * Service for interacting with RESTful services. + */ + +function Resource(url, params, actions, options$$1) { + + var self = this || {}, resource = {}; + + actions = assign({}, + Resource.actions, + actions + ); + + each(actions, function (action, name) { + + action = merge({url: url, params: assign({}, params)}, options$$1, action); + + resource[name] = function () { + return (self.$http || Http)(opts(action, arguments)); + }; + }); + + return resource; +} + +function opts(action, args) { + + var options$$1 = assign({}, action), params = {}, body; + + switch (args.length) { + + case 2: + + params = args[0]; + body = args[1]; + + break; + + case 1: + + if (/^(POST|PUT|PATCH)$/i.test(options$$1.method)) { + body = args[0]; + } else { + params = args[0]; + } + + break; + + case 0: + + break; + + default: + + throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments'; + } + + options$$1.body = body; + options$$1.params = assign({}, options$$1.params, params); + + return options$$1; +} + +Resource.actions = { + + get: {method: 'GET'}, + save: {method: 'POST'}, + query: {method: 'GET'}, + update: {method: 'PUT'}, + remove: {method: 'DELETE'}, + delete: {method: 'DELETE'} + +}; + +/** + * Install plugin. + */ + +function plugin(Vue) { + + if (plugin.installed) { + return; + } + + Util(Vue); + + Vue.url = Url; + Vue.http = Http; + Vue.resource = Resource; + Vue.Promise = PromiseObj; + + Object.defineProperties(Vue.prototype, { + + $url: { + get: function get() { + return options(Vue.url, this, this.$options.url); + } + }, + + $http: { + get: function get() { + return options(Vue.http, this, this.$options.http); + } + }, + + $resource: { + get: function get() { + return Vue.resource.bind(this); + } + }, + + $promise: { + get: function get() { + var this$1 = this; + + return function (executor) { return new Vue.Promise(executor, this$1); }; + } + } + + }); +} + +if (typeof window !== 'undefined' && window.Vue) { + window.Vue.use(plugin); +} + +return plugin; + +}))); diff --git a/lyrebird_ios/static/vue-simple-spinner.js b/lyrebird_ios/static/vue-simple-spinner.js new file mode 100755 index 0000000..ec2763b --- /dev/null +++ b/lyrebird_ios/static/vue-simple-spinner.js @@ -0,0 +1,682 @@ +/*! + * vue-simple-spinner v1.2.10 (https://github.com/dzwillia/vue-simple-spinner) + * (c) 2018 David Z. Williams + * Released under the MIT License. + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["VueSimpleSpinner"] = factory(); + else + root["VueSimpleSpinner"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.VueSimpleSpinner = undefined; + +var _Spinner = __webpack_require__(1); + +var _Spinner2 = _interopRequireDefault(_Spinner); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +if (typeof window !== 'undefined' && window.Vue) { + Vue.component('vue-simple-spinner', _Spinner2.default); +} + +exports.VueSimpleSpinner = _Spinner2.default; +exports.default = _Spinner2.default; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + +/* styles */ +__webpack_require__(2) + +var Component = __webpack_require__(7)( + /* script */ + __webpack_require__(8), + /* template */ + __webpack_require__(9), + /* scopeId */ + null, + /* cssModules */ + null +) + +module.exports = Component.exports + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +// style-loader: Adds some css to the DOM by adding a