From a86fc6d82edce921df49e0aa0c488651894ec93a Mon Sep 17 00:00:00 2001
From: xjdeng
-
+
- Watch or download the 20-second MP4 demo -
- -## Install And Explore +## Install And Open -Install the package and launch the explorer from any directory: +Install directly from GitHub, then open any directory: ```bash -# Install the current GitHub version immediately. uv tool install git+https://github.com/MicroMilo/clean-your-data.git -# Explore the current directory, or pass any path you want to inspect. -cyd +# Local browser GUI +cyd gui ~/Documents/project + +# Terminal UI cyd ~/Documents/project ``` -When the package is published to PyPI, the install becomes: +From PyPI after the first package release: + +```bash +uv tool install clean-your-data +``` + +`cyd gui` starts a random-port server on `127.0.0.1` and opens the browser. It is not exposed to the LAN. Stop it from the square button or with `Ctrl-C`. For a source checkout, run `python3 -m pip install .` first. + +## Why This Exists + +| Question | Product behavior | +| --- | --- | +| Where did the space go? | A relative-size tree makes large siblings visible and loads deeper folders on demand. | +| What is this path? | Local preview, metadata, inferred relationships, and a per-path Agent conversation stay together. | +| Can I move it? | The scanner separates rebuildable candidates, review items, and protected data. A suggestion is never permission. | +| What if the decision is wrong? | Cleanup stages an exact path, confirms it again, moves it to system Trash, rescans, and supports undo. | +| Can I stay in the terminal? | The TUI provides the same scan, preview, Agent context, cleanup gate, Trash, and undo model. | + +This is not a generic file manager and it does not promise automatic deletion. It is the investigation and decision layer between an unfamiliar path and a file operation. + +## Optional Agent + +The explorer does not bundle an LLM account. It can use an already authenticated Codex CLI or any trusted stdin/stdout command: ```bash -python3 -m pip install --user clean-your-data -# or: uv tool install clean-your-data +cyd config ai --auto +cyd config ai --codex +cyd config ai --command 'ollama run qwen3:8b' +cyd config ai --off +cyd config ai --show ``` -For a checkout under development, run `python3 -m pip install .`. `cyd --version` prints the installed version. The demo uses a sanitized copy of this repository; it does not use a real user's home directory, `~/github`, or `node_modules`. +The GUI exposes the same setting. Commands are executed as direct arguments, never through a shell. Clean Your Data has no API-key field, but saved custom-command arguments are stored verbatim. Never put a credential in the command; keep provider credentials in that provider's own environment or credential store. + +The prompt that Clean Your Data writes to the configured command contains only bounded metadata for the selected path: redacted path, name, kind, size, modified time, category, and measurement status. Clean Your Data does not put file previews or file contents in that prompt. The built-in Codex mode runs in a read-only, ephemeral sandbox; a custom command still has its own operating-system permissions, so configure only a command you trust. Agent answers are advice and cannot approve or execute cleanup through Clean Your Data. + +## Optional Agent Trace + +Run an Agent through `cyd trace` when you want to know which paths changed during that session: + +```bash +# Trace the current directory while Codex works. +cyd trace -- codex + +# Trace a specific project while Claude Code works there. +cyd trace --path ~/projects/demo -- claude + +# Watch more than one local scope and keep a machine-readable report. +cyd trace \ + --path ~/projects/demo \ + --path ~/.codex \ + --format json \ + --output trace.json \ + -- codex +``` + +The command after `--` runs normally. The tracer takes bounded metadata snapshots while it runs and reports paths that were created, modified, deleted, or observed briefly. It records the session, command, process id, time, scope, and before/after stat fields, but never reads file contents or environment variables. Trace records stay in the local `~/.clean-your-data/provenance.sqlite3` database with user-only permissions where supported. Command arguments are stored verbatim, so never put credentials directly on a traced command line. The default scope is the command's working directory; use `--path` explicitly when an Agent writes elsewhere. + +The report says that a change was **observed while the traced command was running**. It does not claim kernel-level proof of the exact child process that wrote a path. Historical files that were created before tracing may remain unattributed. This is intentional: evidence, inference, and unknowns stay separate. ## Privacy Boundary - Read-only by default. The initial map reads metadata, not file contents. -- No uploads. The scanner never changes files; the TUI can move only an exact, user-confirmed path to the system Trash. +- No uploads by the scanner or local GUI. A configured Agent command follows its own network policy. +- The GUI listens only on `127.0.0.1`; it validates the loopback Host, requires a random per-run API token, and rejects cross-origin browser requests. +- Cleanup is separate from scanning. GUI and TUI can move only an exact, user-confirmed, eligible path to system Trash. - Exact duplicate matching is opt-in and hashes candidate files locally; raw hashes are not written to reports. - Home paths are redacted to `~` by default. Review project and folder names before sharing a report. +- The active scope, home/root, Trash, VCS metadata, credential stores, credential config, app-managed data, cloud-sync roots, unknown paths, and incomplete measurements are blocked from cleanup. +- Agent tracing is opt-in, metadata-only, local, and bounded by the selected `--path` roots and `--max-entries` limit. The traced Agent may have its own network or authentication behavior; the tracer does not add network access. ## Give It To Your Agent @@ -80,16 +132,16 @@ The optional Skill adds a repeatable audit protocol for Agents. The package is t ## The Workflow ```text -discover -> classify -> explain -> assess risk -> plan action -> compare over time +map -> inspect -> ask -> assess risk -> stage -> confirm -> Trash -> undo ``` The useful question is not only “what is large?” It is: > What is this data, who owns it, can it be rebuilt, and what can I safely do next? -## Quick Start +## Detailed Terminal Usage -After installing the package: +After installing the package, open the TUI: ```bash cyd ~/Documents/project @@ -290,11 +342,11 @@ No third-party Python packages are required. ## 中文说明 -**先看清,再动手。** +**先看清,再动手。面向人和 Agent 的本地磁盘浏览器。** -**Clean Your Data** 把电脑里的文件沉积转换成一份隐私友好、可以做决定的本地审计报告。它会检查 Desktop、Downloads、AI 工作区、Git 仓库、微信/飞书等协作 App、本地云盘,以及 `node_modules`、`.venv`、`build` 等可重建产物。 +**Clean Your Data** 把陌生目录变成可以继续探索的空间地图。你可以沿着大目录往下看,在本地预览文件,针对某个精确路径询问自己配置的 Agent,再把经过复核的项目移入系统废纸篓并撤销。 -默认只读、只读取元数据;TUI 仅在选中文件时提供受限的本地预览,不上传数据。清理时必须先用 `dd` 加入候选,再确认精确路径;确认后只移入系统废纸篓,不做永久删除,动作完成后会重新扫描指定路径,`u` 可以撤销最近一次移动。 +GUI 和 TUI 共用同一套扫描器与安全门禁。默认只读取元数据;选中文件时才在本地读取最多 4 KB、14 行预览,疑似凭据和二进制文件不会展示。AI 完全可选,不配置也能正常浏览、分析关系和进行可逆操作。 ### 交给你的 Agent @@ -310,12 +362,12 @@ Agent 可以下载仓库、读取 `audit-local-files/SKILL.md`,然后在用户 ### 为什么不直接问 Codex -Codex 可以完成一次分析,但这个仓库把每次都应该保持一致的部分固定下来:覆盖范围、隐私边界、分类标准、风险判断、行动审批和历史比较。它不是替代 Codex,而是让 Codex 以一套可重复、可审计的本地数据体检流程工作。 +Codex 可以完成一次分析,但很难持续保留“当前选中了什么、它和空间分布的关系、预览边界、清理篮状态以及撤销记录”。这个产品把这些状态放进一个人可以直接操控的界面,并只给 Agent 一份结构化、受限的元信息。Agent 负责解释,人负责决定,程序负责执行安全门禁。 ### 工作流 ```text -发现 -> 分类 -> 解释 -> 追问 -> 判断风险 -> 生成行动计划 -> 定期比较 +空间地图 -> 检查 -> 询问 -> 判断风险 -> 加入清理篮 -> 精确确认 -> 废纸篓 -> 撤销 ``` 真正要回答的不是“哪里最大”,而是: @@ -324,17 +376,41 @@ Codex 可以完成一次分析,但这个仓库把每次都应该保持一致 ### 快速运行 -安装包后,从任意目录打开磁盘浏览器: +安装包后,从任意目录打开浏览器 GUI 或终端 TUI: ```bash # 直接安装 GitHub 当前版本 uv tool install git+https://github.com/MicroMilo/clean-your-data.git -# 浏览当前目录,或传入指定路径 -cyd +# 本地浏览器 GUI +cyd gui ~/Documents/project + +# 终端 TUI cyd ~/Documents/project ``` +`cyd gui` 只监听 `127.0.0.1` 的随机端口,不会暴露到局域网;服务端还会校验本地 Host。每次运行都有随机 API 令牌,并拒绝跨站请求。方形停止按钮和 `Ctrl-C` 都可以关闭本地服务。 + +AI 不需要内置在产品里。你可以复用本机已经登录的 Codex CLI,接入 Ollama 等可信命令,或彻底关闭: + +```bash +cyd config ai --auto +cyd config ai --codex +cyd config ai --command 'ollama run qwen3:8b' +cyd config ai --off +cyd config ai --show +``` + +配置没有 API-key 字段,也不会通过 shell 执行命令,但自定义命令及参数会原样保存在本地,因此绝不能把密钥写进命令参数。凭据应继续放在对应工具自己的环境变量或凭据存储中。Clean Your Data 写入该命令 stdin 的 Prompt 只包含所选路径的匿名路径、名称、类型、大小、修改时间、分类和测量状态,不包含右侧文件预览或文件正文。内置 Codex 模式使用只读、临时沙箱;自定义命令仍拥有它自己的操作系统权限,因此只能配置你信任的命令。 + +如果你想观察 Agent 在一个项目里留下了哪些文件,可以直接包住它运行: + +```bash +cyd trace --path ~/Documents/project -- codex +``` + +`trace` 只记录运行期间观察到的创建、修改和删除路径,以及命令、时间和前后元信息;不会读取文件正文。默认把追踪记录保存在 `~/.clean-your-data/provenance.sqlite3`,并在系统支持时设为仅当前用户可读。命令及参数会原样保存在本地,因此不要把密钥直接写进被追踪的命令行。它能证明“在这次被追踪的 Agent 会话期间观察到了变化”,不能对历史文件或并发进程做超出证据的断言。 + 开发仓库时可以在仓库根目录执行 `python3 -m pip install .`。发布到 PyPI 后,也可以执行 `python3 -m pip install --user clean-your-data`。`cyd --version` 查看版本。 旧的脚本入口仍然保留,方便已有用户和 Agent 继续使用: @@ -392,13 +468,15 @@ JSON 报告还会区分 `measured`、`timeout`、`error`、`missing` 和 `unknow ### 隐私与安全 -扫描器只读取路径、占用大小、修改时间和可选的 Git 状态计数;不会读取聊天、浏览器历史、邮件正文、文档正文、源码、凭据或 keychain。选中文件时,TUI 会额外提供一个本地预览例外,最多读取 4 KB、14 行,跳过二进制和疑似凭据文件,且不会发送给 Codex。默认把 home 目录显示为 `~`,默认不输出 Git origin URL。清理历史保存在本机 `~/.clean-your-data/cleanup-history.json`,书签、最近路径和最后工作区保存在 `~/.clean-your-data/workspace-state.json`;这些文件只在本地使用,不会写入报告或上传。任何公开分享前,都应检查项目名和文件夹名。 +扫描器只读取路径、占用大小、修改时间和可选的 Git 状态计数;不会读取聊天、浏览器历史、邮件正文、文档正文、源码、凭据或 keychain。选中文件时,GUI/TUI 会额外提供一个本地预览例外,最多读取 4 KB、14 行,跳过二进制和疑似凭据文件,且不会发送给 Agent。默认把 home 目录显示为 `~`,默认不输出 Git origin URL。清理历史保存在本机 `~/.clean-your-data/cleanup-history.json`,书签、最近路径和最后工作区保存在 `~/.clean-your-data/workspace-state.json`;这些文件只在本地使用,不会写入报告或上传。任何公开分享前,都应检查项目名和文件夹名。 + +扫描根目录、home、系统根目录、废纸篓、`.git`/`.ssh` 等关键目录、`.env` 等凭据配置、App 私有数据、云同步目录、未知分类和未完整测量的路径都不能进入清理篮。Agent 的回答只是建议,不能绕过这些确定性规则。 项目维护时会使用真实本机审计的聚合匿名证据包,让不同 Agent 角色独立评审,再通过确定性 fixture 和 schema 测试后发布;原始本机报告不会进入仓库。 ### 依赖 -安装包没有第三方运行时依赖。需要 Python 3.9+;macOS/Linux 上的 `du`;只有在进行 Git 检查时才需要 `git`;TUI 需要支持 `curses` 的交互式终端。若要按 `a` 或 `dd` 询问 Codex,还需要本机已登录的 `codex` CLI,或自行配置 `CLEAN_YOUR_DATA_AI_COMMAND`;`D` 的深度关系分析只使用 Python 标准库。`t`/`v`/`c`/`o` 会调用本机已有的 Terminal、VS Code、Cursor 或 Finder;移动到系统废纸篓使用本机文件系统。 +安装包没有第三方运行时依赖。需要 Python 3.9+;macOS/Linux 上的 `du`;只有在进行 Git 检查时才需要 `git`;TUI 需要支持 `curses` 的交互式终端;GUI 使用 Python 标准库启动本地 HTTP 服务并调用默认浏览器。需要 AI 解释时,还要有本机已登录的 `codex` CLI,或自行配置可信的 stdin/stdout 命令;其余浏览与清理功能不依赖 LLM。 ## License diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 0000000..ccb2efb --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,35 @@ +# Releasing Clean Your Data + +Releases are tag-driven. Do not create a tag until every step below passes from a clean checkout. + +## Preflight + +1. Confirm `pyproject.toml`, `src/clean_your_data/__init__.py`, and `CHANGELOG.md` use the same version. +2. Review `README.md`, `PRIVACY.md`, and `SECURITY.md` whenever data flow or cleanup behavior changes. +3. Check tracked files for personal absolute paths, credentials, local reports, databases, and cleanup history. +4. Run every test on Python 3.9 and 3.12 through GitHub Actions. + +## Local Build + +```bash +python3 -m venv /tmp/cyd-release-venv +/tmp/cyd-release-venv/bin/python -m pip install --upgrade pip build twine +/tmp/cyd-release-venv/bin/python -m compileall -q src audit-local-files/scripts tests +for test in tests/*_test.py; do /tmp/cyd-release-venv/bin/python "$test"; done +/tmp/cyd-release-venv/bin/python -m build +/tmp/cyd-release-venv/bin/python -m twine check dist/* +``` + +Install the wheel into a second empty environment and verify `cyd --version`, `cyd gui --help`, `cyd config ai --show`, and a bounded scan. Confirm the wheel contains `clean_your_data/web/index.html`. + +## Tag + +After reviewing the exact commit: + +```bash +git tag -a v0.4.0 -m "Clean Your Data v0.4.0" +git push origin main +git push origin v0.4.0 +``` + +The release workflow reruns compilation and tests, builds the wheel and source archive, validates both distributions, checks the packaged GUI asset, and attaches the artifacts to the GitHub release. diff --git a/SECURITY.md b/SECURITY.md index 5e90b38..b1538ce 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -17,5 +17,9 @@ Security-sensitive issues include: - Moving a path without the exact-path confirmation flow, or bypassing the system Trash and undo record. - Overwriting an existing path during undo. - Passing a selected path through shell interpolation instead of a direct argument when opening Terminal, VS Code, Cursor, or Finder. +- Exposing the GUI beyond loopback, accepting an unauthenticated API request, or returning internal absolute paths in a public API response. +- Storing provider API keys in the Clean Your Data AI configuration. -The scanner should remain read-only. The TUI's only mutating operation is an explicit move of one measured, eligible path into system Trash after `dd`, `Y`, and `y`; it must never permanently delete, bulk-delete, or touch app-managed, cloud-sync, unknown, home, or root paths. +The scanner should remain read-only. GUI and TUI may mutate files only through an explicit move of measured, eligible, exactly confirmed paths into system Trash. They must never permanently delete or touch the active scan root, home/root, Trash, VCS metadata, credential stores, credential configuration, app-managed data, cloud-sync roots, unknown paths, or incomplete measurements. + +The GUI must bind to `127.0.0.1`, validate the loopback Host, require a random per-run token on every API request, reject cross-origin browser requests, return no internal `_local_path`, apply a restrictive content security policy, and avoid exposing tracebacks to the browser. Custom AI commands must be parsed into direct arguments and must never be executed through a shell. diff --git a/assets/clean-your-data-gui-v0.4.jpg b/assets/clean-your-data-gui-v0.4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f991d6b13dbe981c085640efef5f8d3ee5b5af6a GIT binary patch literal 90941 zcmeFZ1yo#1uqZkNcL?rIaCdii*AUzWcTEDp-C>Xb!QEjXSaA0N26u;`2_z(+oSZ8; z_rCl7d+V?D{{QQ4*6!+=s;;hGT~pm%)tjG7KQ{qbN^**F02mkm0Osir@N)$q4M2c{ zM}UVzK!8U;L_|PB!9qbnMn=KKz(m6$z$GLkz{STWCZnSuCZQq4$EReWq@jPo$izrQ z!OFqPz(L2r$nc8^3?d>T3K9wq3JMMbF+MTF|MK;-2Y`+AY#JT_3quWfh7ALY4fC@f zK>8%)Ggz2k^8U*O3-|0vP#B~qtO*tX2KE^&96S;tJUkpc3LN4uYB+58=TrzdxSW!j z+66PzT-@gFNy)v4JX&sVQ|j^XX)HpdbS(=T2y{|sX{|pLZ6onZ%XoNw>f8Fv8=BU5 zNyjH=^^X3DJJD0Ozpj7j_zA-N>g)+ckNxZWXMbI=zX`Bmo;|1Hgw@26gwx_mqNZ_^ z`UwS~Jt3cA!(s!(0gqCVkw}qm{)a{V>*5Hg_z^Q*%p;4~%uj%#Bo{R$HTARqhl+t& z-je=g|2MQ>C`a%~Adgw%tn0{~F3TxbYn!1w1}?^TR^MBF>2JGj)W>{6&}Pj4#%2E| zMdFqX{~Px=DdoifSJ<%s%QMi*Ue;hZK_$tH0-(J{2>;ryRq1H;S)Grn>) zJ}a&Zdd3z&wj%nzr=kt0jT22AV=@S7m*>AgN7#sl`~);TCjR*H6VRdh6F{9oxRDVK zTpO~9iTw$%|3>wA@e|;k{X^!D4{h(WcYZAYSOc+fKbD?GeCd9Ky4>UZTlM+YeV6#z z`?KZ39dT&z@auq|fVGmJfTTY@uu=TqWwKi?meitFQ;^sfD@T59{xMo%0&DPr9zZ;X~*;}q8Ga7+qO&Zju#OLn>`#&lN7yhG5CWf{@hhBG(p{SoG1Z@I$ zW%|B%|1M5ie%n(OGQ(qyCfs-l;2-f5Fo4WCmcs)s zGFZuMWnX|h$&0aaZMz#ZEdsLc?7oo-OnT)~`B=!Za*JuS{tt^ub8jObw;<$ WlyZ~V?wWW z#A!7hhG@)ok}_2amb2;dwR!jZ3@D|*!>51rO3h<{Fgmw+Epaz_|IPp?;H=+dI3C-! zFV>iOSYaMO$WXy?HxaF?vz6&Mo~on8n=f;Mwek^da+Fk}+yD4))B2a6@#pDTU=i-p zOBg9=7U?*3z7FR=;T6_m%TVPkh5LQ@X%Q~R=?$ FB~CDaZoJ6LPpMBd1{Oz)6d*E^bKzA@%wJaMf6S5`1NFj(e>U4^e} zGuqQG0RY1+fZbM;-yZG7Z-0g4>mhBqOjr=aMkRuW>oo@%qO>#(x^xRb5;B^i{tg+l ztCNh07PP2Hk8Y1Qy%kk?B~X`Wv}xo?*_0@?{HJJ?`^C$GMd8UVD_%ncB_PEQHNK8# z9|5A-4P4<^h{=N3!9Ipt*;Mf8Y7|-y2YD5FB@QFSiKz3+%&4Ra!~pmzL=97dKiw!f zF+Q*gy*QklURgd`7#ERYVNhQD#hQ;{VCk{~RsN@PS(UK1U@CgbMf{k~NzYQo+t;|? zLjHrwMj@vv9=gQsKq&)ec+ci>zp!N95(VfGKXX`o9KOh>j<>-1Odj0NbKA}8acSDR zs=2Y9lF9p%bILeDEUh2^p)tqLr(6x`O8hz&x4IUD?@8m5Vo44No{^uxSRjB{D`Nii z19(ies<(EXZy#84MSHP%_lDA-66Cjce7kYgq#%Ig*9m8DTk`B@WjT>l6-DI<9@?rL z9dx$hJ)vcys2 C~ z4D}sNg+E+@W6xxG38g<*5g>;m_wD&6dvob4-RB4*ib9vjBy?J&$un%~4>=X6tgd88 zVaXK`xfKq-EpDu-7XH{8=-%A@tp4w+FTP*cEoq)rJMkeZMnqZ!rs`TWBp3AWzgypH zIkI0=H)@PO8}47)AxDhph=BS4jkHpWX3 RyyY4nOm#=~%IR93~YxlYLnzImB)YcuKb=%^ZMrPWs_Iutr zFlE`-uJ&fhj@7!dY{e+5+pks;>k*vdw@0yM{UXCmEUo%+9?E`BYWxF39q!+%@NC&r zdmBznkGwa6KLOdXG(Q28KLKCzKH{fX@+DUkBo4jZX7z}Bo1Qz<6m;$iV4n>j2qk;J z94L+&(6{?GLO6o@KmZK6HA$->+B^I~fMGc0<8iabhI52@_|+*Wh}GB)NA9b|8h)nF z+fTcp2dEy*9kMewt<2*s{D)P*^BJw}+JUcm6nq9@V#>+0YigE@^PRldI9y1P(Q(*V zmb6Z3VaYs#rI}2v@Gg8M-to1xUlNsCBD1q9a!9(@OTTdc(Alg#(3#v?*p2@Tqc?+7 z!x_)l-!lv)o*9OZQ^D5N9)Xu}N`4Vr;~4&q5u4baxy3oUFs)7kGFPWyE#7C9l_MJ^ z*b7+`uV_R-jF5sVYx7PP$0f;qaR5&7Jz9AX?COnRMLT~w%teZtpULc3i(n+Sa)WC< zpJt)^#6TB0M8{1!yZNZt^=i7uW%6Ev!o4e!a*Oc`Rv-9P^z%6qK%I>lU*Cc?PF*_z zpIkeL9~ri iQI3+}mw%Mf1IX_`;HY27NY(swkpdCChK ze)x>yDIp{C6oED9p6xrMxJgTn_K6% ZjszcujR8u)*`28v~5G_kR; zVG! VL1w6cMHbwIllh<#^0IG^C3L#LrA_mTk7t+Z3 zytTD|;S=($r?DxeqZg?#`pdJ)S+xteO+%>S+U7e=*?`{!t}JJ?=bxn*3Oj#O3gCMu z`}k7fYQFqUnS&~ W53sBTI|bZksq~6K@S?SM&KV<1+hA_1`x2e^3K~ zJgluLG#4lJ_f)t^K>;R1;Dqatuc5CZBj*g8QfGCxxKO+a=4JLLut>*1o53=y7_jdw zI2KcMkgz}9TlgKOYpnKtrdq#UDx`Jur6&>L#mYRiElEn9mDi_@P+WI%bgXIRzb)f1 zA#YEQ!HQS1Bq`}rCR`c_U6;IWzP`r<``Ep6OEs{zbTv@}HRSo|DwBGHm`%s)uHb)6 z7OpYznR~f!if|M-O4e9H7kTPLL8g;7mZ@HEIy|KWR+XRC3dqvqAQ&2%(Kd*4S`tk$ zOU^_0cg_tha2N1$;N@O~&+E#6B3wfiYzRnTI4SNqnC^gkYN(H1mO Z+Y4EY?JpJFHlVy3;?HoGH*qHrsaiA>jV9O4%#3*MV#V4so_~n0#Vil6NZ0h; z58FER?W`f?VfysFUb%@7LQvO%t*9O?jP%LslWkVBiDHT4u}lq2@irrB)e1IQxMQv# z{OcnEm&*sFR{@+3P~giHw4!pVWM|6U3rg@=*z`dv_P9VDf2FFTSqXOVYiN~=oq0cB zAASjxR1V?Q(f}^cjSB0kV6t-`bW?Wt3jA{QVX?$g8pug+nHk8_lo`ZazK2T~CTh-o zf%t(gOM*b;R;okBEN5%Qsci60nE)!}06i9BvY9qd5#lrHIpKk*k+=vJ_rN;APf6u= zSVm26HRx&WEQJM+X*luXIt`Q%cs9k`b2p!(6J;(Myj&A^$9updIB0QF<80!sia>`F zKllr+)q=vAB9Sm~JKk(UY>3en3CQ?gW=HBe#S ^D}K^b)Um3_)01&0 z7)pG0AcDGdQ()?ucH_3#Crzh=R-F}}EI>y2T(o*$+AoofO*dIul8q8(R)1eK9m;w> zzqwTD_FbQ(D#F&0$su&hv8becnDpxhA_+c9!;($=X BT{=+`)F>>lGt z&YB85_I1R2RW@v{o;cDTB>aPU=39<=6YB2^EymVtB#j1me6US~t)D-08^TLg098N| z+o(Y}xy&FVIdxiuICZYh1f+qMnz~ol@?l$Z=4m{x6TI3LF?5rMeYtj5E0dyj`r6uN ziptu`>e{++ym)G?A%e8%o<*pM(_T+dPk)~^eaPW5u5L*w`qaJq`Ow$)MSb%H&Tx5I zj%W!8{|FHqB6FVpjAEm(WwS1>L8q*o$bmi@1$JIb(zWQ7w#uMD{Y0!3WG=l8#^O5Q zs7$I`rSSWjrg77Faph0Ik3JGXZz ^*gpXq>(!LhEH-J0{r5Hj zmT_;ulWui(q$3Pmvht_{hn$*JeHGhfYbyfg3$1%@C;EwaD)KW!XWye+Dz?Sq#a(ta zd1X!eI!W_3hMAP^$PRb!en{frClSy!8B0c*x1G9j3HjD-(oBfVh@R0+*4qcLcg#Y@ zk?4rM%D^h@Wc`(VCGAl&pBU^*J@uVf-eq$Lyj0#r*tL^Cu1~RNCb{t)_p6_~tcgk( zNgK#uN8by$xh>Q;ib)FQj{yOha^p&DsLX_So~x^}s8|}z?(7Qe)2^uMkE;_7QTB0+ zY eF7Yh{P0;w?_0Wv(SHxic*c6vE4jEE#OHLj6MH z#CE2y2V|9-+DgxCq9YG;BSxae!t3jsKiQ=3H^z;?+1I>%I^^iy5zut8JnAn-sNL?D zcYr?$
oRS$yk7Cx1h)L&cR*m}KF}KT( zqIo<|0UmR-?L=xySd5<&%Xf_0So(yfbw?U(b{Kz?2Qq(7wr}&jZh1EJ8mnET;J$fR zk#E{=Hq5Im@_%MmwYr?P$!nO3Mnn!c#=puo#aSK2+H0GG`1@ZO)A0Z|b z0yh}eN>jT-3NaF#O0aB)`dSx0@iFxGt&@;_52s-B_M~ZE109R6PP}kl3xsi`I$A4q z(g%)~LAUsBeEdqCmowA{y92IY4-Jj!f@tj4C9KY~3i+P{0bZwG1`9g^)?`3WFW)#^ zJa>R0Tw`;s*F+ddbz+!N?dxHZT|AW>WqIbp+_`;Bw(ys@F>E_92LF`;!v0a%c9TJ@ zS~hA;No8Ek=)v6RGBKv`bL2&x(m)qYdARIBlWWrX=$1wOAjb#9V;z(MA4qq8aIwCe zSDohg_B88wIW8~7vh3awxlhoC3zhS4^6M2Ay3^3QKqQH86eW%(M;-|JpZ%A (IhIao-AAI#taSOiE-f?bRr%F-q%=@($VaGZJT`Yq?xQz%}5eRP{lh_Ito{kN4_o z56E=UiU!ATNn%~lq8j{IF{keh)l;2ZdgZ)huwR7;nnn!JUX-$?jk{Vor6rSKXKSId z2E=S6%G3- j 51 z$KhbEDo;eq&FMy)oou2=n=-4kY)$08WWDFeiZHUnYtU%J3w#4Z>Rvx1`0;%Z5~kbi zx?A(bu%YQdJ@QeV;_+6fk1!9= WRv7hTbJud=|*3# JTkw aK}!-k~^Ur2K$zpE(i4MWohihx!r(Ou0gtBEmGJKzHjoZx6_8tJ3LKH zU(PQMkOISn6zLE?@I3G_^2>f08NW=wZ|3)^@?;JQfh;V}FAAB%GH#`K4nt?n0;}EV z7VEF8^S^6UH?Yws;Po>ct zmaB>B#{ix*k|#CO^F);kvf;nE2mw~ zfhx+Ni@Iy$Z;162j2+_?yE2HAHEMbZ5F^fb13i}lRe;><_^PzY3gR(&`g{`}d91J2 zy?r=X@E)oHa3V0aFQkYcvI-sDpYL<=i@Y3^%*iRd_j4?eYM(bEHNy&^={e44_n^y~ z@}Qx0G450Oyy9g7YdQN2(rRBJ%My02F~a;IM4>1w-h vZl||K@ItjoAWUw%NLH1MktakUXOT!eA=U0=$(oIf_#wsV(!WB 9;9LFNqmHdW8*IcrWR~!rS{C01II_pa3qmtw0Z#`3h(}xWCyFi z?1VqPRSD>Vw=vZJnJq??!#Dm#1U4V&`3|tOWbjcE rzZHOx+q5VGHXz#zm$^|^AI0N+ zxMt@$n@559lQVFS(=GZH$NKg5*Z;6^bm;yr`4jMsKDfr@2UO*d!{jvUbMB6ujUHF( z%};<+PeQLJp1%b~w~A_O&A{TLRCr+?apo5 BDx9G5 zmvbt89RfM-u;2Nz&) F(`B{mK!uubOnFV5D$qE zlxozmu#Cp4w9H8$c~9 z@WYu kN&l5m|7Go( zm2fKRM%St}OW)P;phBaEXwF4`A0}W}5o`v(5WLxD`^1Js8FNffsZ3(!lpq#TNvyvi zOAb7AP!IBbqu${8$y)>un*`)boQ{ >*;KtSLx;a0!)VwpL(Y)WI|sEQYon}ZbpCQ>T?&E7vB|Jd@REJ0L^*2tHg0e znE5aX`d!OhN5~`<6 (89ax;S&Wa1b*{B14!`ci?*i9;btW!%!H})kg0SiBhWQC}_2=+0 zJLrzeP7uM3VwV;I%&I;P5A{f?uf>>iBK0F~spzPL(+Ck#$hS3>VXuw#A+y={YWTOz z1Y&~CX;^|L{wNJyyam-Tg+1&Q9X2YCCtb~tu(wR@^`^JAhZN GQ(fN8H#uUp18@iJ|u8`@h;_=F6WIX%MZ)UK=4 zVdXxil#_-$%6aW~S(8cHy6qoa-mNYKa{mPM*^A$?`~)cIY2tbMnRxnkn#~R_pyA-f zU<8;Ka|tPFin(>*YH>nZWPHhl^KG e ;N>u`00<3>o#LkpF!4NQb}=?#;hJC~Lo=`}v2l47!FG z>*H^o$~*R(jx>(uv3%U#fEk y{UP<1?4Oj}*m7i ?no4bZ=CAqZ8q3o=9g{UraP1otC62`W7 M&5U d{1_5?Eyn@5a3n&_wd)_D4Fb^ zFMD5KO@$z@4z@Lc^V74Nl7^wsV7Rh2C8xRVt*y0>YvaQ#I}mxLKUE5Q#Fz(ZzWEHU z?$R(oA~ mD70t$ zPYQDLx>K^F1t_Aa!z_o}z}A|rcl{|j@*8vj4*=l}oW`FcgPbJ&=kU_YV*F{RS-8S~ zJX46(|2~WQ4dwUrXBo}kuQx+JG5Dl-yM4Fq<^K)fh710*103pzKZjT)nrwG1=QYu1 z)!#sp>wm_ANFC0j3E4Qn0sT~dRVw05>2b!j*>=&N{U}C$MF}o{&HICy;V?gLYpaHh zG$zl~#n13h4dVP$9&GLZbpc0fXbyMoe#k2RRys `p!TNj%+}Y~rsoYprGvEC&*(8+?Wc3VRYIqow|?gvL4;aP@$=?OyGt!p z5%beM7LhZFL%fS_j(y+|)VJTUy>{CMp=ar%vNvxVdB1);IjO5~@NZX9kb!g-%t;`% zd|cs}UWf28*RPOO4IY*SM{X!aj*(pY9T}TQxLo$V6Ra&&vmC2-b~P)=p-w@85(nx( z@8@(lbr)Sw^^y+%43G|g>A#OIv@t=35>9bLg^OnZce|n;tKR`%7Vn_2UmwrMIpG>t z-JL9w WAQzA&OIWu>hU>JzTc+c4LN6pQecx9)djBO3G^ZSMM?9yAGN`?p%yuP^P0^PKBOs-# gmgBdG X@ye>v@&)IC8VXzT{Dr{O8G-l2M_H-h zti2dcgh}F<5GlMPhL8J|IJMy+L0bdV>9t64O|ii~-LHK@D y}8gpMW=NG(;j2SIss*E4g>oOYs!OkN%TwdlG=loaz#kRQ@ zx5_23u5VDgv!Dsk=ObV4DN3*9yPOzag?4Chzw9qCC8nm1{15*o=tIJs^4H*KS<+yT zS>KH$HTCt^dZVls-bB8_j@WqfLDA~q`^2nxi&?oM{)#)Kv_qti>qa?pDnb>Z2pPC} zpo-?CS@oQ#cam>s(>r(VT_tF5s+iq~E6NUOtKZ`lrJ6VJG^7rrRzN?mNqh1)f{!f1 z{EgVf`VRU{o9h~J^9mByv~lo%*l_z=UiCOinqPs}N9r0OBZlF7<^9Lp+6rzkI!C0# z8*V9#uW6 r;m+4qjcBqYgxF-fMCf0gL>GlwSHM4_16H`P=r}ov zs<=UN=yNYM$1K0|6EyAnIh`wbe1JfvkHdWI+Hzx_999ip8n;fglmiiES-EHSTqjkQ zLEsq7RH^I=_2z$gwH`(M(e^>iL6+i2<0A#nb80sHXnQqb%>mu*iT(krYTQ!{j&l}w z5(-*Ah#+_k(KBX}iPQern+C;7S2qW!)dOv{0r4+|W^?yUIPp@SusC$!;kFsOnj3R` zcn6t0EcSSp9vtgYG Nv2j-_JDA~n~xJs&w*e;F+x>SX%Ha;Q3BP%`{^A) z#w*aKkotPfoZg~1PAKL& E+Ys;(34MP)k6_TupTJ>lwrVdR8% zpR&@lp|;kM$-Rf)rtmoa?4nT)=JS3=&hld>>zX{m0n6gZF8w#e+lH=NY3- e|X????O(@gM-O9 fPU|~6IWmsR zE=Wc%9Bf>$;ObNRx(sVuo-AkW>EzMmRzIKXk5yBEjV<$Z!06Zc#lH&O%J0LE-AQ`7 z4nF~0e #-D%7&ZTjXI?}gct2iAVn#C!d^)}Cxz9q%;ssfwL$o`x1jfcq z*(H5pwHIn%Jr(k+g0w{E8FD(bL(}p1NJWL!r4ed;ZiT^d# &+k zpXd2DfH>J7KL!Pw!;L$5TsNw?LOWfjuvp(ap7t@yo=jc}Kfo5QnM6>Rlyiiy$}>s+ zKoKiIC63IhPQbY2&Zu^UP#{y>##C8120~akLbhrdR|K2e`h&!1CELDMc9j04Rz^lI zx!b`NgfepEP@2^+w=|Xx(r*!ti2+wr+PO?PQ>6=T#T&d_rcNpt4^ZuUJCEg`@&4)k z$`-@uv)Cn`X&4f7E}28r^-D0pum=FW_Wxq -WvQcdh%~wdRlNI_H#jojP?+?fvX$ zn}{~)fmJ5zWhghY!%?HrgRj6-+yms70+~ZA0&oM_GYS55Ug^M7`B06~%9fDA$XH>0 z`4_;t@3ByJwxZXB_pc#!n$ L^xS#_;yd*`1#vey$69;#I(6aIs%W}E9RuxHa {@{ZwRSV&K@3PB)WvG@*mlm=vwY zN7AY!8mYj%ouQj0+*UQdP#Vy}cH<+F_0sW~&zjo$ia5@RF-K7 ^>(O7lwU;D9zC<(_xXJB!IteoGe+= vn zy}*0+99GPUQPh;mk|0Ui8c|&wVh3^3w0<|3$U^HDPV|==F5`DhU&`!CVewNhAGU;) z0+XpCCs&7Wq)+oSZ343lV!;3-s$lzR&WLY}hg%v%X(n?9N(JSKsZm28$2xFohZ$5e z#Wy2)Y!0MK7jZl!7UUz5!BoYl#x4OlNs?HehHR5~4=lPKwdNW2X^o(ukqQI+1RM zJ>$#Vp<{g391#SSqZ%6?af~ZE)4_s7hw|Z~6P)8KVRWx{KVI+FJn4EGVQ)3O@#LiQ zgTJO!FNn?tSC%Y-4P ^uZAW)K7LC!ZagCE4e6NL4v!7%@G(X_(!-s5JyV z`7jEw>Sr)<6)hNKyVQcq(G_n1=Y)L!P3y3}-QF3@4lZ_ggqyoEt4qMggn~Y3QDR_t z+9Dna+MZB)jWM@MZfe35c9Jc00UH`RhG_h=TRv6V>oF6_E2QCuq;Lr1xS~}U@CirW z?C~oyI^Q|#7YGI^f)HVrFlZ%tLAq~!18dSY8(F45c`oNM&%}5bkDZLu3rH#libtAW zXstCS^6?T4D(MZ5^GZLTBcZ7hcuCOOLo>-f0d60E*LXZX >nKM086+cN$6 z3^ym-_dD4KRLAy?xHZxLCjD=YhT89~UvbG&YR;{}3MGVKj|txrwz}CE!@s0`3nx6( zR8jPkeDtO87iu`b1q$dw;^p7K1C%;O-xyyC_s~i_2EduH{8_bz|0EOqdZxE{@>iT= zSKT1GEqnCfUj!ZXjQt5+4Bd*1?Y!Bvfl#0sO!Ni}vXLm~_(p$gdAA-vtAHQ7HZCY7 zsnlIBVDJ*q%L<7PhiQ<%mLK61!iRh#G}XNMI0Yn1 )zO3lfoYI?uvnDLV_g%rY}=7HH^`hO1a;7 vP&djUF+>`lj;CB*($)UK%f-+0=Cck_NNbrQI2uN7lE^5;tyz07&) zp2WjrBqAjyE9lm^)EzrIxHpLH;vgYZw@cnAjhORzymPyO+H}m(diXxKSUXd#`|f@S zz+we5NNR)K5o>HkVr ONZ&D7gRSPaZM;JoR}e>zTv*`VF@(3BGsr!HTP;<+w8q!%@F5=JlPOt zB9|zH?i{RVZ*Iav_X_!)Gd?WWa}mNo6|O>Tj W<)SNrNNwRA zUq?#qW#g0 s-F{NE&ojO z<)E-6KS&@qBRUVFbJdh-AD$}Nj-YSJOC4 J$`?xU15O{d8shb|Og zJlUN0r)|nVHZ1?auH}h=UZv@*rKWkZ(JYN?VAlK )g? j$oB){M{~(jb0koI~4kvJWy_?M_3Cg=3I_!Pmeu3gO8e_1$5mHq1_;-TNg> ?gSHk2^Y$BmK_@mz`+0;S8qhFEnIqK?v|2?zONaX!9JA+`L= zqhxFa*+KF0Pk=&pmalJsa|S!%z&uasUO@v0GW49)P)kS>t;F0S@GExJabLpca)^F% zt;ihg_i@Z*L=WRd4_Q=9O`GuTV`V1>dY|l1IxTEXQf+yp5_)pabMuPwgNm<%GUco^ zFg6Tm&zIuSo7|cz3Fxm!u|>HQYds7&dT0}{Fg)JRic&$uk+B9x7wYE%j}hKOo0(M2 zYF%bXWbz@~WJjdo?D2wgM~SyGysd|tlYeZl|7qU-J|($3fxdb9O|HD`7Zy*`)ms0t zgw#99yg1v_?jaWE)aC%vaEg69fdUh!ZEj$mf$uJ#O{wYB W$dkio}Mc$ zwrJI3Y{_V~>bK#l;r0aNfm5h A zaY#;w?y(IwA4h{x*!Uwx+mfteZe%)e5HY%%{yjSY7puI}d$Jd{$cC?Zi+9Msb)H1q z*Pi@WbEPuXZi+b+wu@#m>6iPOQ@;d?IGk)-tuC+4KdQSdH@)Coex@$0QG2eeaz>^a zG3>ngC`xeN)&fG45(P2GO?!Gsp>$u%IIcM0wfWHFQShszrfT>o+4H(DAN=#u(}Tj%soK+R)zKkQZ^7`;_<~cx9^*hOMkhKTJ+^`l3gi!&l )}oZ&qqyTh+J Zk^PgUjHq=)XRkA8esgiVB9NuGiPi`qSs1_#m@=Bw7TWLmw3*!Ruw$rzl z<#!Xmr+$%W^cti~xN^GlX4S?uitt=oSF7@F-#`o=h(DA{d6+-6^}760qUF~^@cUsa z#(DBT%{R%j6A;nP$2lk=?d4;lzqVOggP-kfYtWxOU>A!0-j|B(u(Gh5V?XSAOjH+d zKh4P;Nk7Vb#zM07uLCE@;)qf1JtwP=USTeuKHZ{%#BCWddrXYE;jNGN>If_B`aIPW zJ2>#@uf^oj&9MqX&quULX)Fqm_%DUgw(bveKTv#G#U?Jzj!;-UOCm+$gCczURjlM| zOc3xLq304CL)O>Qx4{6>$K;~Fw@i$7Illo}8k&bfV|}nsY 8E;AC2@CkF znQLv(KyQDXMp3>}X7Q>~;Z$FpPNqh5>Z~boMv>e2RIeL6cv+saTKdY0DUOqxw=ROT zkZUM9F)w_6aj2|0ULwloFp}*mQ fkGajS0iMvK%+p zZvPyCT ?{E!eR<|KHCcU& >F%$fnTE%REW(+>EbltlzYsez@s<&^X;0;CHySW4yvm z4F^4~ z-a=%EQKnKdw6P*$V`(p-T+d(J4!cYY7L)FAPU zmZe33u69SZh6ZN+=-mp8uq51qFz8TF$ula;;+$m(iihrV%fSN|LgD5a%|F%pr^7YD zhd1_043(o=Lm|Wcx2r|49e0`eYyJZ(;CqAKK&rlCO^ zW*y{#G#d`j8@hqy|Irm@ki05}p%6oUs=(@d!&s@+?M63$9;UjUian+YvxVpKp_+>7 zoOR+kQT%zmXxR{oonW5Kv=-F~%O(li;f%z>jgpebk)+=?qEB@U$gUC_gJZny6kC0c za_$KRr71X-4eatf13w>ul2M+1;auS3SRh@1x-y26UFvgntEqQ%%NZ-9t8~#zEwvPG zo6^K=!X2n})f|E{Z<#D&ZK;c*q!ay;`*mb1x9n#Dtn1X>v1tG>Q7v$&*lokcL92T@ z>Fr=5B&eL6l63ZRR@Y(d-$OwEw$1ogkX8m5<~jgWAC*|%^0>61V`ouQW`Og$K`CcL z)!Es(sC5RO&Ys(uguKg_4MkRlI;s%0sEnhjtDH7k#gRj@Gil1p3mc0Am3~9Kas-?v zKo-FlB^Q=LbQ}zv=oO{NL1y*|3EQwe6J$XGab83!lQR(P7WmsnX$_E?W3VD6%!^KB zmITqLwiS0UxxbE*vwa%8&ZRD4h7QSmWg*0VK`wc_ vkh=-tah;`2te$pLN&zav1B z(7g%&@{(7DH2`fE@{+X=`645yV<|{Ed~8jr F Aw*m?97z_( zA3D*LSmYbzJ%2a=`kGc=j6;(WhXV5@;X=mrO0|=;Idoj=TJWrXu9lS~4MV`rO~#3& z_tc{Zee|QK!Q6&>?v3c$H1#}%m&<0eg&2=pGIPm6m3IH`^^ Rnyffcb)Uy~XvyyjCX|o(;cr;|sUAy6!d65{ZQ|5Ko79((+3oQ2CR7d4Zc}dt zZCUkT5xEd!a?;st4!lkOj@J4N_9}{e5XL7^R&iFC^@Nivw=9oKWyWDjg^6UD@R1u| zrJ)?PG~GM!F%=Txe9t&A-dT~%ijcoqoMFC^0H(7vT@X;kP$H+D5+IeAc(&B|-hU?; zeyUVkDMXsVux4t!gVA3{BC2yqZ)LqHQ`Ab|3WHX_+Sq>`(%;i*)8`A9ljO_1VrJ;F z>T+uwnWPpXfsg+{hw+@l*&~RzC;5VxpxvdreGmp`e`2XsaX|yaL}6%X6`4gIzHj5@ z->K_uf2sNRZz%e;wL|k8F{jfj&Ic-)w&z18EsG?Aebqc2!NFD0YbYHZvpuKp)~Swi zZ~UFHuf`rk;s2ZP-y!*rCPN@4A0b%`Vm&m{QZjkE)&lX9eqNDg*l!_B!~u*AVf0^6 zD*uocqoR)Rz5s1%?Ei{Yfx3Fx5v{Q}Gz(iU1pDNse<1silapMI=anHoc)ue2qDbn+ zmioBGmB+s#1SZPxf6C#{I?!VKeCSm1SEQDM+`x8}cg^>i?^h%j^4}`{I~J$^!Mu24 zw>v;g%=LU(o5mq`^2ye33!~7IKkz(%SQsHE*Oua>dZN|!!)VK2zP9TxTT$ezeKC$x zV3SkyzI)8UQhTNEs>OfWd5KU}?dM@avhhdD5fM2@B3j9v7S+oDHmnBK!$YSvmZ8Vo zD5YocN=8Q4e9R;??q*zHqwLo1 vZArA-Y0)Cm+qpLAb2G zg3o)kUBVMP>ZkpE{R`)tZ|oQu^Znuk1&9pJlHZPwA}qPQe2n4n#Op(zFiC0{N`3%7 z-Vkk7m zsrRSueO=)8Y zf`e^2!*10tb89Xy@u!rmXpc^d=?PR@$0a-7(_=Yaxh!vgL)LZ;kIK7~_zYq^D0ybq zxwVEakYkUZ)>E&d;0Utc=6?hs#Q;_pYhIStsK7Y?gSCeqUj{Ys@I=2prlN`*_6?3p z_!QvE{893=`5T!_joB?s!oUuoMzxuf>BX?AhhLCra;+>le=U!!t**YOKKIIMVsuR* zup(ki!weXkw#;Z&Nh~eP=JWt3I+3$hEE3P_UH}I?STnU3hH{UK2#+b8cFVC3rGy}S zwt%_Nk|R9A#0yeYnbG8GgHf7>T3FLOMX3q7S8P4@0??rzjd`{W_%fUF2cg?J7YqeY zO3Si>Q?fil$Ep>gI2)r`0^+d+mBN2I 72vadJaQ`c1=&J1-C;Ay91D9Q{R0Y`Fn)F;$>fQnY6 zn^V4$(GGjF7@ NnoPE1csYEG$()7$RJOF;Xj)L^`|y?c|T z6K0onYG3*dFQJLDX3M+`7UsFUPR{kI{s_01Yz~Q0ZKa^A_oM64*&t&jvguEK+~mD8 z{Uod+h vJWF%xHn4tA0q(#v8fvMN-7qaD*)Bj@YY-0JSS61L?7_)Val zOby bAoWKk?R}@|ZP2jM_WBzW|3BDD7@37< zzg5Jj7yXJQrv4X}{d$Y$ M5cugIEa;KEY+Iv13OLLlgF__}H5Km0jEx zSdX?><{j5Xq_auv_w1-k3c_+S)=v9JulV2C;5cbLiDtzBz--gUs;auDrADWD5bLsR z0K1w8?Nv9WnG?Ru+pl!5i*1dLb_sczVYnKrnkPM`&~Giein0_cwv;XKZ~6GBI@HVS zH=Fy7l~#H#4F#;MJf``Nr%IZW8TayvN>dprBMi^wPN!?#VqMWx+&^HxrV5x)?eFhB z6Xyu?@+7(GK1#`O!CK4daNv+VJ49C-7a1YA@QCfQlCXuxc#5uH~zd pYJ3QoeoQA!>!Bkt9Qx+2zGDhbCy! zY#+xVAxZ(XlbJfxZ$zk>q@fxqfH@OBt-u}`abvQ{=Y{#cbA&dCnmQ*A4Wp>A!%&zl znt7jPFMT=<_tW+)g#`Z`>SZeU4N^(K8^y3uMa-|2Cp1OoX&>o7Cm{_#htFrKdZ37@ zaMNNIMbo9pc8<-CteI!qPW! cD3EyF4f zj;5wr0On+)E;DO_d}#LzD;Y#~)lhkS2gpLA3_J; q%uE z=ZUJOCFVtVz2$19x2zb5b0$*>L`9bN+>EDZIKJkER$KR p90 zFOw5Mh2=GA 1~Uw3}Vy?V%8J_UxyQQFqbmq<#aOc zGi6=E9tfi=ko`+OlHEoHG}ALM3wX0U4lC6M=10&rb&o Mo%vSx=@w17%l@jm@6H=M$U>% zt!}htKZexFHGSiETC4Fy35o_pKAQPQfe8@KC}&W(458rp?g5%|B-qWQ=(8P1@kZy< zm$w(vkqWl~olp!0U}%fWF6+1_o5?q#^}#QdjS`pK@)(b6@jC5j!-Pb%g#} #)>xFH#J?z$RS8jpRGm~wM53X+mH3?A;FH#?fdsj9GT6ihGpvVA>ShS_0OTlb|t z#1x1X)z<8>XD9zoza*l5bHbXBEvFM(rkTR9PKr;NfHTnatZw23c9gDpEEk$yH$Xmg zUmz8sd3wx=6s=}TM@gjDt|2-c<%?-{*ei}8x$D+(869N~u1dCV=>J59_7}~y-dxoo zHL)StEcCGp%$a~2%!PDOI5hSGH9E#FLzWV_Rwmce?olC;T)7?LOW-^L*s2|M&;M zqf+@Kg75pY%xCvq{%?Ft+s_ov46yED#2e-9#~*GczQz6k%otxQKiF IOgJ(Z#PV5jw3T$u~2 zx;k{)%q+Hg`N3!3LudOoTpK$+kQ$(+&imv=s}9;98)ZhGF6)2SeJr6_g@Y|>sEvU^ zTL)C`LpSHn0Nuac_LWPkYJPFYd#EAbDZvo!2EVdNAu($^lJC>w)aOjE9#ZlOkuU{b z9)5mD$Ip4cwWqu%i `z@*fQ% zND7~)2nU=p+YJ2ewu$Pfl z+dLj$edzHx4D(3iJ=-m?iPTQx3a_Rt4YbCr2*3`Lo*?`Iz}V)ims#xLoJQ;_2Sg&j z2-~upi;&V`qAN;Fw7ZL(C~%57s~ff$atnA%mrDb9408K8_mS5}kg1A4(%-fL8XDUS z&Xhqsal&+_#j9YG;X_j=7+o8e7WUV!=g(as6k*_bo>XtO=qdJ18}@X8o6O&t)y1r{ zb&^WVH+@=?Cp+=hAv)cbj<3{hAW4f=UIo}AK9{iV%nf1ZN`6I+bRymX!PW)cHh=5= zmetX{S}jWp9;-LmUH1;q*|2JwrjVh3xQkZRyDj3(mDjs_jmy-$H@~OHME2Mj5m;}2 z{*-ZRCrSR!zgWLUlS^UlnJLVzOF _Znyy@WhFsjiF#p4 zn?al@-JSPuCqJlVaqiP7&55SNyvsbMMoNMBCD&HZkbti3s=Ay~>}*Tk0bQE4o2sSy zGCbzDKMJG4IkAljx-x5O`)O+iYiLL->{*loxzu^H&uZbYBkL2OLrw_8{?}AUin5v* zhO}-xCz$?HJ0Ph23krForR G>T+2cG)UZJc)lveKet zQ!YCNAyVd{pCs(P(e$=I`T4S2Y8lYilO$=Wot`VeysvTbeXJ`t&q1e5FX$ Z>{ z)i!etKqHE}Arbp@dWzC0TqdxRvv`tI=6pv%9*ape;u94jHcMfNY186oS 7Apss;quB=_L3U2su!|G<)0mYj;wk+2d@az z8n$@3*7=DxxpN1HiK;N^><)tC5e -fNrIoBc=IXxZNJpt zG0Za1+gKL-0`no($?*{(KG~ jk(IwB4$o}n z6L`*B|8i#so;$*yb1+grDN85(F*(fd+2ll*Fcz*jjri= e@| t6UkFDn1p=^7^TlB$eQa(I*Vzup1}HODNDp zCNJ5$FOt8qzLoBNtZ8$Ku4eb(O%^gpoBMVm)rkZl^(G*yzNv|C%1t9P;@f_NN*Bhp zYE=?|4Eksl4a-S;PZS3 EyoN=<}{EW$i}71_r@ zc+nHPDsR?+3#R6TT1+{_e!wa1Or2@UFOUmrs<0*Y86^V?e2p#WK4a1PfE&w1;z=7? z`7wG`;8UZ-HIF|+bUev|0c2~uZA3SGVyXiLR1jGwKz5}rc+L^hOT8=u&;6M;nlJMm z8%td>-&i@yJJZW}*Vq|{y((U_2$(i1-NM|3^WD}3JQ%QJ0#tibb0{c`h1jusa3(0r z5!|~kH)~;%k M^L2T3*J zPHe%vTBk*2J(<12LXXC?bjob-85GOK1++H3itB3jxbPWW7SFhi>oY2bc1jI*sN%cu zmZb@l`*lq>ZH}Tmo`sMLF60^;hM4ozey#8qEM{;Wa#e8SPM>aYnz1|=9c|l?-xmm9 zLaa~QEqqjvh8c@;koNgAhL9hpP>6*@qBY&S0BESGeRsH}awWe4o|+7O*&D3q;3H7x z0{@h;2S!@26>lAM!maVk0aJ;y;4D1`j#_&DC(o^Ab?M9cPj~&3W7=k4-LQ!l)E~2! z*dHmZx(Gy{8z66zC#gEIdtYY7q~QgBU$3!bC@wGR*f2Mb(xtUY<>*0@wgzSy=0oc< z9$jl3ypAqDu-)^Bct!3`rF5IV_;QkCC{Zh@kD{!XNL=4!IvmH@+{L<}lQa2^<>%(2 zjIOszd$x;g>jqc}AT%92`)nlr-Pl5+#8jpbV}VTmeDBnKJ`O@eo{;mniUcRDWrX1( z=AKKCzgUm7G96eI@1=x&OubDmUkF-lhU1n&tQSkv9p4vn+7lq~I_>K1t25$4BGJTU zWyv6;^0d-%Gyc)ya?-c6$p>7c&xb*;A{|UO=e~ rW+TfnZ0_{uyEtDhINw1AL(Q+|$@?g0$eY;79Ccfa+V> zOMQQ}H7?V$DKmPcwK!9W6yh{DmICdkTyr)2Z$0(1E)3alw2hzJOSma`o5L-xv7ig| z0{C}N_063xs;5<65Jpa(H+{t=s3+P2SAJl-Xez%ioA8c$i$#mSbZH-$ZY6kghOWgp zXGlQvx!THsT$NN@;vIp}CY-PRl%=)Zm0lr!&uZr`Ll9rOU@1ls80PyZ{?RxKX7&-` zSG+0cAZ`T?F#f$p7mW!|1jH|JgXWwkeb{NoJIdm#AE;!5pmTA50?#rb!gY|?*3f3a z3f(^X>LI;z{%T+#E13Q17-X-Wtt2#|yrR2=Be^o0&b7x`p?m(mtZWeAw#W`~uQfmz zGi`y%C4vuY#j2qRIw 9`aJ(PM&rRlVNo9xgD98zhj3c5tl>=YHM`SMikWO!w2X| zDrO#wEla71)_oS#u^nGi(~yFaNL@vd)wT9i zRr%%U9tny?H40iN289YlGGwCciCOsWHD+Onf3?@4Ty>kUXma>|39YHmI2R2b$pHs? zcDWz`3+iqYPDc9!AXUr$Y5j}sS-L}FXqEEgvM_f&kFA&yZ=>-q3rn3y05ZfReHJt; zO!B&f+0qY0h4?%-_UJ6M$!pQvQD$E98OQKYH^!gH_&*ul1`rF6*XbNn4l*D@D`Gp< zJ9plCDb_v>t<*PTV<}ZcvoN(71kHK|qxpaQ0eC@v9rb}?=V;q?K{;H=dJe;Za$iAC zSPIp1pSBQeStY}sTy+G{? 8N*I59p}+m9ddTvBPxDWU+Rs>bP6QSCnsK>&jaA&NQI+ z)~Q66E`ES!9h82qBOglgfu`@;cCub!Dq9p^v XAOJ7}bacH%D1 aH_$;EndPne3s8^1GQ!tjUu7KM_R2j1(xbMG29TnfNJ#GE$zcN6{PI z>Wq%P`7HD6t^nZrkRR*#Sx6vA1)~+_Ld!}`6XjA1;b~((Hoj%IiYf?CgPX4StD+hv zZ1Mj^6(jg7##hw(J4pf*25ar9#WjhFa$pbMfV}0h7$gQQU$>W@NjX?Ih=pN3%TQ8+ z1*vidoz_T?n!rf|b;0y>SP1M{CV64pYE7mPv6QR%6o0so0T$@wL&rqBxQqK>p|=4q zCm_sPJq{M$H)i0I{ZX=WH)}m*a`R_kV~|ApU6jgMkdeQ@P2guh`%^6jN`LQ#*t)BV zv% V_ >ZMxjs6=r*WaLC|K{gk3^v)M*dLDD ze*j$GTzol5q9OeL3dZ-`^x}3+(fQWb`g;p43@Aa+Ley>J xHB$nq^^3Z0DMLYt-YXje*<(#VuUrmb14Ox=lll>8m2=L0t_b;cU9+OP2@j zgwZx*cJ2)X?(o$& j$b3;DWx?qE=!UOr(4MdX(o0OG0(s=XE?bE!{jkaKUEK{N0M= zNOZn17kPMIS80H07gOcVOpn;7TZA+xZULx(o&ndkTVOwyl;ogEi_(KKc}~ZI+;qJG zwXl*c{7H*z6kJ4IU2CS}LtEWM)<2}v|HBcRmwoNrjirxcCuvGh4~w!>`!cCnXiLh` zXwLQzz-!)D_Z{EADBr4IZ&<(i_~H=uicY|5f7&1up7!l#Zsi2)9_7WB@=9dJ_tPJM z%DC?uLTC4`Ax*pP6V}@aF*Vo@)@kTt&vSkNJnj8=RUr^x 6yuHyifC zQ(R5a@zu-*ob`i8GWRd_Q<`s$!zWbL)HHexc9|?Jz}`{;d<;+3Fv3`YuSeC#H76%{ zpIN15R1qTTp!J@PF2n-Q{qDnB0@pD*sZ)l+WImt=F;s083 rU1RSYEb92d?i zmF%7|WpQ@Wn;VU#O2x(N7_G+HV>Erc!susJ=X}-1fN1)at;C`w=@ZvdFdHbzn6*r* zVH=z!B&)EahHRRuL`|; _FZ@)9ug3zCz*Hg@aq2y3H)k-Z8q(P2V#LBO1?&NRSt zi}x>{l)o14mf#*AoX@x|bVV3MsObBkjh8qF_Poqm%&8F7CbvfiIwK)(nRsB5%t9fY z+wvG|xh1a0=@ZpRh*if_O`&{(=*02lzbvM9t||m)sQCXEvtKZy}n1>GG*uW{Q;n^%q|J5 zk3ubhq!K67no`f>IMpPjiTnV>NcMF76XP+0epf!3NbDQ%o4jZEPIt23s=mLEr2QvD z7@a;EbNi)ZU8aOK$m>nTxrm#BZ?Wn6ulqE{q=f8t2v(}q!yV_CQmGcS`Ro5k!JKdE zYB-EvU$~Mh2yvepW^K19gyq!a5w9 Dybb~@`V5vcK@t0?^k=0?u$(0} z!S)6}i~h{1F7f|vBmTt=Q+dn)e>k$RsnW}3zxL?;QUmw4h66QkjBf^cs(&0vrT!bs zA3b|$SyA>E^vT%c{AJFjvI!GI^Bvn0z5S1R z@Gb73U`sx$RBQo? z3{~b5$>E7O zO6E{83Ntem z;G1L{*R~2t>)~4ng)vXgzPKNzx{ZK6-7n_qvA$n~yf%NaX;}S?_`&COy7E2m=O2J& zXRJZ%htTgsm2a-o#V?3qOT T}{@&M7PBvTSORQkOg01M7`d3ABS>;1GS~XGD zf8(AJ6(`Lps>oT}D@ju#Tl>fs(JmyYpPMRq_j$7}Iciv>ZV sV9Z%tU5zrOX{>DaAT7iat0gVjKsUR-owB}>p2TT($JR$; zfc}D((;?UDtuC~wfjPqsCh~x@fl)(eU_h9evlHdggnas4X6imIr7ufqEl9n6zPa)` zga=5(YH^u>4m{)aDt?!MiA@%5V&iZKIDJ`3cwX*yprZ{wD9PL*-b=Rfi@(?^_&y*@ z*|X(|r0;r8E}tzyGJi;c8e;d@a!i>MbJ?JI7!%XBU$K_bHYZnPWI&~Z_ACDRWE(`- zU(aW>aT6V$-r+4m 45@O#} Vz2_-)qW@SQCM(!v^7C60?~GF z*`lb>S0gTE6SCK5DgX}v@bl|tVF?*J4!I%+s1x9^vf(nG-pzcv`b1?uXgXwzq#YD) z=ip^OAgKm^q{}hyWey~;Av?g6TOUWB+<%y>a8a^%EHXr;tOy$C3cxDJ3yJNe0h?r6 zeVI`k82a$0w`>~s!g}SLvGL}&Q1;1_-*1yrkJ{Yeapj}v%RuU=r?M~VVYsBckU#DJ zVd4PPe8 O=;$5YqSc zGRa1c;CX@W`8_j?JHE=$7vB4Qm`hF^vzNx6tUmx0@(v-=aGLtHj|8@&af%(kJ;g2p zA@EoLM-@o%5Ei@z%4hV`n{i5-oyoL(Y+;rHis<7?Hy*Ev2qZCg69>uki-(d@XbkF` z4`Yy5nVbjR4FpLl$)(W~Fbdx%A||^?K++OLJ`K1p)`s)w&6U@CEKXg3t)8j_6(*;| z^kkW6^GuQ0zNQRo*RSd%VM|Lj8&FhXM?F#x8Ry1!RqJB~Dr$nQQci(`0Ez3m#d3%3 z1$8rW5VLD?mm%*cFG D G;31b+5olj6)966QGY6VkV-G% 5?S}55}4UKt-|HKaVwOiUOj^zq9X%w*Wm=csGtufQ3NoOJM zN=1uIt}r9iUkCj-% $RoDw80Fei&pze_zmeQlH( zBF$b`M^vURf6rB-=iU)Kq5)3@x{j@EU{*45 #PyMz+ z3+z-UeRZX6o<5;;5*AVR&6mW0`fP)F)O0 )$(;{*+pbUyq`C@STk=pepoVZg;#%Q zaj~HizZrMq;8m}^J*MIusX39ZvUS>fm4SwYMtT7pdg*A4ShYbO(^s95e zx}oFBs1P#`_h+dEx+}c&RQ@II0;wX5`mMd6MhyT0h9>OgZ!07vl*-H G`Tb@Fi^&sI4T@{mo9 )yPG}_gX9B0(b}<9MIq;4;&hS1HwD$A72`Zs zEbxnj=s#8jL7j*Iya&3+bFb1PTQ1$xzkiLT3{ihcwS;Vj1L-AVJ=X0Zr8WVBK_r4C zECe$DB>()m{{0Is8MMdi?Ohk$<5Bu%^oG3q _vOtCm)du4*%bZB|B wVJbg$cc_x zLHlO`e&wBGtr)^`rqd52i$CjRmI*e{{6`9AW9iSToM5R?>OWQW*M?w3l}32C_i?ap zY}vwyDnI_cb1 fBy!tGOk_5-J5@-lKK4}erHR~Lib(@@m=FCU{CeL@^B7D>kJchdb3-Nz?iSE zjD|iCpNa}H@>O4fe-e5B-_Fo21w5+p5C2QOFV}RZH-CoZfw>wOdv|M6jdiyV4m}yO z;9@!~q|JHr`oQRhf3=N=`6R 6aR4-_P)?F}z=?R2=`yu3#rSl^wYJ48Q;QuZ|)s@N2m>{S1E{mj5q1zD28s z!iLQ1w2eB15`w^D0uvE@XL4d;5um1`{`;c$$3Y0x_qUrUE#}{p`rJ@|Y8ttlNP7`- zaiAp_8k9<~ &VZwdc=jV%N=~fdornS>m(2zzA>J*3L*sKuEoR$650YZye@p z+I|^3s`n0CvAXcxIvuPozIqv+Hkzp9DXAX f)ZTm#-AY2Qc)B5I2 zUez&qX+;)ivhON3pd|<>B3JbKTgQO4dhIM&<5WXhm8?=$<=OJ-fkU6IQ{&Dki=YGk zQTN_cRfXC7$jb@!A=OT#2q;dI-=~K+fnj5kHAL?mxOq$9RhV*$ZDPjdgo6Z{ cWbt;4NsRg`pAth;4k$H%1*4=CI#_yL7${WN7ayrgX6{HwsC50iJh0Ni~ zG@#k !3?zf3T=Jbbk1M$G8`j`AE Bc zrwPK5*9a%!6>|A5#^WA#K^U$5V@u+ld90$$SuD1Q^C;_k9>iF@{KN-b7hMu!lvyoe z)O*OFA-E4+!w`~ty~V?0y IM9;2OgaS-C*Eh&X{Kr)xu;LJWR;zJ#3@h7J2 z;`Kf2x075&O5OeAI?|ZEGQ5*dY2Rzr*H}0|tBjFY6r-Gx6rv!ph)l_g85v3_C$4p? zZeG>T$6^b6p4E}TOGCP| b;6;lH6I{v84L7x|UeVwRRp zYSzh1>}Pve^pU2b4nYF<4itCvz06~s`F+i5U8Kg`?n^CAT{(ub%y!d0Czp`!sa?*& zZ+;GUTHP6{>*sNY`}~iu2Eg}KpuEVyQ~l-TB1hL|P#kiN-9FN>hAxW5T>ggfZT3m& zK!YI;mz*obs)Gi@m2)u;9OCt5lXy(gfb&q_^cCRiVSDLz=tx-k5DbhpbQJBV8`r`k zvtG^VAB1wZkDGRy`(?n=kR6! )WLgCtBa_FismcR7qvl{PI)(Q=ZL7unUN zdHMauoQkaGX^sd{cw<%;Yr4d}A&}3RAKy0BvGq%iY=@pA)VzLAP|OCPeL{||tr~U_ z8?;Ty?&N}KjG>P!Ub}{?C}|Pvyl2s(p9trl;;V7rwNjlJ5*QtmeTYEy9Q?w<@;jj( zL1D6IK5lrP)qcuQ;`EZkvSf;&^JXfkhX4Ys>8s-3gyEKlL*F_i6Pw@=Y0g~mEQs5V z+@__q1tEbU&SvbM`_*$#ROa)|Gq7ZWf$d6Yr6EkGQDLCQBM#SxO3t_#x%6GTt;uy@ zn64VS@`8R;O$b(gc=-g7-9{ii3N>feJ!u#B0_#|MY _*evLHnBr*(Hx-WSib80<&E%EFcDVGACWm|is y}w=qwjzE0iQ zK7Ic3gCmWw$ww8Bp3D K_;X^~*ZZ-!4f4*xy)wF2lxO zzGUt2HDjZr#}<75d@NE+3X3N9;O(FJl;Mqv7N!0t+q`3<%l)Ac=S5%q-#7css>2BN zi?#WED6_@RDNVRMriv}8g2YI#Gjq(A(K|Jh4p8CKdfcZb8L}`(j{J|(*hU>L(?;BQ z=2wxkyQ`*)?J@{;m=0eHq1LpPyoN|YQbC_0Hj*Vz2r|;CQV@`GULW=bh(|0L31d=J z)4acMwisET-Tecp2YW>+(yXwh_pqapMecj{$oT8dz$W=BCnxlHZioY1l~hGTO-c1O z5nUwM5|b8H$u0X@KZU~B$iYW=LJG?)4qogiRFbA#4X2N@M_XRz6D$7I>v-!;{8XnT zT9Sx6KN-Qt<4pDw2{LD13Okq}R>@|O2a<)bM#Bgw(Au+(HX5U(qd2H@dfZ81F}C66 z@cdoim#jjEh$x0M$Mzg)X}LHgY$PEx(b`(i`zIalDkp0kr!-~*Hae)|0BI+i{tqx; zGDPp>bg9r#I4}pwYB=T#K69X}WSH87^oNdO3cBm#4u;h#kf5wm->(~f?$_*BR9>w# za8o^+w+@RPp?a0I)DlV3Dsqi3r&1#_CdZ$}yul!<^8)6pq$Kb$Xj)o }yfnH7;!*}evh4vpJvh&--4#jgcGybXro&)NOo)IbokXOvtKbIqwt1dU5a4yuXaU}k;U?(mM9=V+flTGR z1)I6nNe*D@=#AHCB;O`fh1bQC3VIuqG>EJn8MZq$X2#A8NW=_8WVom0f$pcd%FD&s zqjq54bfF%qIQG{SN3*aLG8N# YBdqvX}j44{Ly-{DJhumPd!nc{<_b?{=(xuu2g* zQkwK!zbZ_6J7HYNks8KLO|#-$WxT<$v`{;-^YRD-LIGqm2TOqaKi6+dhhE+`A-%sb z_$fX-D@ C4WuK; z#sA6wWw*Ya!0a8VfB=8@7q@6-q&N5>$+uzpj!YviRbZ(vJ-QAPdx^^veIanUW4 R&y~ zm(hZO^uL!8X;E?+DmRf&>F)~y-!VQ8ydVFfTf@1g{1})pWD_kfOYe~+R0nQMOPDJc z!xFG-b7~l>0CSzZ`nWi!!y8(IVdxurB`Be=P}*~)&F0nlGCUmRNNYy*#M){ihwHiK zP{_#okyydt_TdCx;e-5J20tlI yh8MPMZVUQ#=>;LO!HK7rNocuN9pxZwJHp9Aa3Zn2|o;BMTdZEBz*dn;!OTbt}r zhU%=veag%4gL<-Aer*NBIF?ppz?bpvZY}#L*yy#+wMDhHY%Th6%56`$#QGS*tVcrz z03-I-AA{IY$HOkpjVV+=V%vrJIdI~fi}|by3p2B_FqMA5Biq%-)uIw@CqFP=GqOhW zW&Cyh(3k<2<7j!QR#97)CU4%P$U)CBW^ctK?Xy+U?#zK0!V-jemw&!Z22_^~vsKtv znU$yB$Ig5sf6Zpl$@#+cuHFSTwL_@7;x>PGfy|#KE2|*5Eg a^Oj*uRSGS8{l(H%u9n=`g-e^I+l
Po0!Qn0HWyRjW-x`IwhVf+@)RZh*)TZ7JQpsf*Ys~X^DOyY*0j{+Jo3k zy(YaeaA3L3>PW}!FUkfM#a)zDB`H=~;xX!P_AGzisY~%VnkJ}Il^u|7(RraeEX|jo zW$|LMpU6JvP2}<)w7%LkVA(FC6SJBkU+wL0mM?j2PAi%!UgWdfO{X)L@_!Jt`tm zlJ(z(Tl}TH LO=GOhEV_f<-all|MNH? zDn=nP?r%kbxV7^N)xkBA5Ym4(U;a0=q5ndH@-IgrHvTi-yZL{{d;e=9Ldsu*?P87o z6Q 4o4&D&x))bc2I;vEfCpIXo7_JZCAkq+nJR25= zcDJd_7-^){BDF49Gmdz ~@zI#3Lq-eW!yD Aa;ehrzLAH83-qC2K1!jYEQSh_%r1=bocRp9hm&5s_OsY z)wHi&MHrYxNoot@+RH3CH(oo*PHl63K%aCZc^$b+ti!FVa8dx~#ccDf{lfNmbH_P@ zNWP3U K&rHq^0?_258)* zj96ckd5t&DxkNhzs9 tyw@EOFxs`K{w8$Yrxjnono^jE#vI7k8oktPWc* zUo$3XgIXiWj7=BUm=oHXF<&S(K9t^er=5KNDrK@Dy1+Nzd&3zMlk9cIC!53967Mb@ z^+k #vfbA;z-I}If @3p#vU(frjs>W6ZUY(zv_Cmc=Q z%bn*dmEsxjt*BH8#ckhe&Y|GGV>@c~5=nM!e=!PjYXv3;qd?T0@}Z8lCVye({ET=y zQ>wZZ?u4PU3$iOp&qMg{>aFG`$gZVL(1LSSCcU4HU5sziUJ=}O%X3i}>l3fFhq6cY zOdSVWd|S1TVc=Quy6k7~oUb8AN)GS$>6EmL-pMzll6_2;=K$L)pS#4fNsha4yq9$N z9_voh?@EOuPW}#ud+eyaVPGXDZ(BZ{nga<5y$O)(7jJdEd^`cMRJJl=p)jf(C#MeA zYq%N&Z1#Hz!O@x@I})JsFNWBtxD7F3OyW?A3R{LOVbS!+_cV`xAbnkLh_K^Eh4Liv z%Zz!c5DUc(@o&_|6@Mn8_WV_YWRHf|Z4wnNK$;AA<}-E{e1KQ9H1Tt3l8T7enp?ih zZVVyw3pz!|+BI7ZP*vP5V~-TOaC-J$?a98*F8R?-u=DZlMH(QZ7VkVAZxT=A$n)up z?@y!-;lF`A{VT?gmX_~tf+`wn6xATw=&EUvZ%^t0yOw9-2RAK*ZNYA@7h6(^ 7Vg(35!^J z{z}4a?jSz4Ya=;7_qdvw(b!f=C(f#@gz5wJDMt2#3x=jf+)=O=dp$*1Vw>!|yh4eg zM5qo$Q=Odfl+A&6W$K=?HI=l~|BW6Eq5DO621~+ud;uhQM?*^lOTtAgbc;OM{ 9fcVB)zbNTg4e6u(PVf#xXd)RYq6UhYRpysT`4&bYgy}mTft8tDO7kxsEY7h%w zG{q!c_y-JH-Ydv;PLZk2>dEAWm}M414hP H)lU=cUB_0J&uB~fKcQ*5T+O%t;A$i2n+BN4^PH>6b~)hK0<)4)`&}vQq_frU zH|QZ~iR9+~HNSdLt==AMxZan}>F_rZSYyS62T6<^Y-D0@o)``%AYTRH*P|8_x2;sm z1xP(_&`bA6JEZx=B(=L FlQ{BiPpeqEqeXDa)!C6T8e!#JjMzR7GxT>YvtdRuL_H|qvU*N`@K5w;X z#QMm~&)@z{n6%?7-Xf18kY9{nYuqHV6T!F2(S&?bIH`zfa@aOR_C397N1mB7L5IvZ za8Zm^cKEfvy{`mNmL#YSk*#szlJd7ti||5(Rvc`GxtWibR|G`0s;tUf%YuIpEH-Di zq<6L;5uJ4<)V7eMg>-j+!3_5?lBc|ygDFq>(!?`PcFIeT{$3IjbI9>YW8!>%TD}Fy z7&QfmdekM($%!uUa5-0;bX9W-9kZ3{{AD3K#MgdYXM|R2kR{m}(0znVOz$F7Qzd%d z{Tb98UjBbm+}G%Qrx@WneI7m5N}|=%PY=bV4-a h%Th#!g~?+Ld5X zzpJa|9Nb+;5QBjqKPg30GD@2NDo^?y$VkqHMEJsAIwI-Fphzi5mso^_4}=r=l22<+ zQdBKEso &Pvw*dY+p~FiKYh zwcDTzIE+A%gUttS*NH*;mLk913e7_u)nTL!Noo8q7(FtJK3nBd@}cLMEmc0r4JpwR zVVNkQD<2WQnCx*E)K)m+Iqb e3mO1b8S#xfXI)2n~3hK0jccqpj zJ2)cxKv;nHb-o7xh@HV0lQ4fx;wxIS*qs$Az1h!a{*^pucE=0aH2?Vr@p83c8HP2G zCEuKT9_1CaNZH8tw&4@}ykx}ArsK@opKyisF;<>5?NdlNYumxtQKv}Go%LA2!~`h> z=8LJs=kfg9syu}4k})n#NYxhEa&r7QkBJ=B+MN4gThRB-2TjCN bH>~iqUiT#l@4V5NDlzqZ!92|3+9&UoqJbKtzC+l~3tvv38@!w9l?f6* zR%QECk9n@=kLk+GEIB3s3iG%$0Wd_-oJlpcB;B%dkbyzeb!V~#9Rw)xrJ1jb8=Op{ zN!Q#xJ2k43WGWY)TH})n@oQB|BYVdVffsPbO@f1f!p&9c3zEE+?1}BgW{EY7lVg64 zZ8=(2;G^hb9(Mlf$<^h4hrI1&?>SPK+)DTbQjlCuSoGv4D>mBUH3RyDQ4+7W^qVVR zIf7&pa5qM#|3GrY7JLvm1b$qYmY3&HGU MBKb=0Mb1E{VymNlfKfcb-}oDaBl>2kW&vo4SA-3% z6Nd>rahPK0gWf9T!F^IIMYL~3Bk-A&&gKiM23YKwH+1+W2*OE2DDlkDf8}+d?Ebg^ zyF*2mY*0!IC=S2(xSH0p=u%As)f1C!5v+KvMO33xW<7gxHbvDjQaGcWt_Z!VSIEy+ z#fsxA{R8Jf;;2oY-h!nGAu9O`<6E(i`9<@4N|%0F&0pdL$%?p2F_sBfR@T9|UadZ~ zdj ;;DDfdd}<{BC|CVmDJSuX&4!gPo8;b9F##B>ys8AWCuFaZy}+L z9y9#9GACpVJ`B~Iq@EoiL&6#KQ=M5%R;2IsLR0)6(^=vjFX$qjWH|yji(bwssWDne zTcHRf?G#&eY-jtLImotjRQycl^9kVUVK!hc;(~+2C!c=MBX6qK(A3$B{wgYvT%NXg zd2?Cm#P;LcY-HZfIJYGgyPuq1%Uf16548jp^0BlD$bGu~7d}d5X@A49jWq-I zck(TEr$SeEbG&fDOE&~LI(fXrp>Rcb2YcPVzFf&iow?AzmFPlg^tBLr)C9+V#|psz z8q?8%22cej+kAY(?EAsn@X T#bL>PeT&H &_LQIwbXo$4;oBL z(F0gbLu)%`qWD#5Z8r`y@Xc5@=d=pKUbP(uF?7_+t=~f6&heh6cpE41@d0>gOwv zx!#|>4=k+6kiQSd|Dh3z{4XRz|FPlTvq_$B|N6#$H;cl)>cpxbq%>nemOUPvrH{mT zD}aWHS}r+VxJc>$90diujS^_tS(EXO =YXRB_G{-t8g`ERKZE!t2ARb;+Gqo|dFk5f)CPKIomOB?t!OyQ~`b3^`9eQz> zzgoB?LfH?H8!Ixx3cloSSvuT-!;S)l7=bZbi)QeF%|mHr=^WFe*n%2*(_b|u(~cTo zJh8CnlA7QGf=mILrQaKMY3rBf{%oM-I0iKKw8nyjhC?`~xNFNbP}m`4mi1jrIhH-K zOTv-dV#4{e51Ek8Yi0-6U#uCyVgZENZN92MIXS$yDX|zZ;KTwJDI9f9M3p ;&(WnJvfMic7RHT(=_`SA#`TB>#XK7 zRCuR)*x^fw=DYw$>gX}H2OAZRSIFwXhwFd70TO#Mq1^Qwb%Fq6nWje>zxp%U+6Wi1 z41m!+CQ E%>cZBBlYrDs>$_?x3MZZmU+Hj*d%rC+a~-$xB?z#)9&(Poes7iJ zTlK$f`ux2I)Y4=oC^OrkSYP>!-nTR7)a!+s0lyKw%sTvb;rGS%r}ca1Uu>d8ciw2f zkNQ9C7;M8LBa9y%{y_3}QM(8b_)VPm>}O}l2lt&X->SbE$w=1*g6g*gWq4o;E|pmO z=AFi?UMTqb|8YcKUa>#@LGzuq^}DBfpj5&veOXaP)(Xq9-kJTjcL_(6eP@o5pq4fU zT(Fb+s9MUMvFh!o*ON}Y-CAYI *@#-RQEm?; s{EZQ`8@i6dNu#W2E>(pM);HS$*`a%bN)J6g_1}0 ze%W}r2xgnWXV;z1YTw=Ps_}B6l47|e4{Dd6JAc&`R+CwS$4>8#bnF 3}g6>B#N-N^Avs~RJ_Z*DKft~ai4 z3Fua)7%?82r+Acp;XOXu>buiw4%uA-4W0{3s@ejQ{m(o__$|FZ%0>*n zbGt|(=(ZS88Q$%I^ifsA0 z2KmU=lNeIu!1c(&XdTem%A=@1gX5;GWQoh^iffZL`FaAm=3%va@@tig@9}}BW!d&g z96Pnt$gj|}g8_%VeLS1>YpvX@kBjr#-(T2dws3IN*Ka{CFE;S~sB{@uDa9J$Xj;xp zP@X@KxPNx;Pa-GqHB-Vo+m|=Tiht_KQX+nA(;+L$JPL04E{T^K@5j|aw =h5LV=4w|M)u9uRDakC{Lmgnn;r41p~4u*VcFyk;GbO&)W<$`G*kXKtYFz@b>H1 zjCsnv@VLuPLkgwKq(#a)Pe!<74L`Ex154hpfR{xqglq{Ew$zk|Ve1AIqX_ZT>TNoY zA+%O|aR*ARtFf{!k{4&7El?O;0Y1Acu%iFO{%iwv;^t-I z$kV1CcOwZv5VUXYiYX0V{-OH^lJibTql2Cf#weDnf6g!{l({p=mt4_qJ_sVLoA4Dx z7WiH<)UuKY*}>;W{n*#ZtMiN?#rn4Cv%r_}%URFZstyu+`gNHmd(nJ*Q;WrCjX 7h%SokKuDG&5aR!?Ipc~CHV)`c20HjwAHx9eeT+!x`6(M%l~-b zl4>Di!(H~DFObLmUtof;>sc!bf^>H0)I0Wn)8H^XBXMKmXO zO*R`Nc#YhVFp7@TC-BGWMFUFD3B>y_B5ezExZ=C~t{kHxrM4ypslqV#&{r^g`7nZi zrJeBXM18QOjlJ1Thri}$8rFulB%M+=U8w$H$XXjI0q3+-GJbDKQOrw^7HCyvozUhT z7Z(a04ifT+L4m`!n#3gG=Zw2LR|qi!F}q_E1)2ppIim??sy7#QUJ&1r>jCU(uir$Y zztQ%22%lrZ$k5^FCmL6$(5q9UBjo9BO(&{XyvI8M=T0gzuAebL7jY%$6N~8wNJP^> z3%^u$X`9WHN~W@kfW%A_Js_a5rPQ6=rmlgeV{_wu4ROF5i|w+if~q9_i5Yo}YcjH5 zQ&GYBEt8~nSMnSlvm?I7Rckn`&xI;!17)Qx*h!-Eq;rIJf+wyVZ?{TXfs`XAsFYMg zZKji?q-d{P_uEHqP0o9_!g4eV=40a$wRpXzw!;O5TKTUc$7bpz&K8_23bS}w^77%C zJ s%$_PMM^pPmSKObhUCfd4?cRh+Tsmv(Z=txWQ%-xFc{Xyf5t4;pNRnOn$y z)?KozkL3PJQiW5+=?KC_YX7_{iAH!w@ci%=(~JcsS6N!FE8bXY0||}wMKy3yXo16f z7N4-|DDNMg{y=&?mv?ubJlE{fsc?p!5n*M&vr?umpAHQq#X5~>pQN(G=t(wH=nCr~ zRXxIJZXfEwPA#%oG@Ak&uU7E1*Z44Isq=^=U#7#mGu!=^7-#l;fGSS1-ngPTp#)`4 zAc@4VNlQbMD$tQ_E rYW)5vmvk6>|-KBq(m$|PHSl;5H4Z71mJ5X+33l|Fe=!o zE?qfYrK7yo(tKVxYMJtuKJlZ%_F2dg=?kpIqj#FggexnjaDRXnz@h?*f(6bpqE|)p zE%s&HKqH*4>$G#}ReQPifR#9DsZX6S>h-W>1~G?Z#}VDdKOa}!(eY9p8X3mgl(3A; zIszC3
60s4Pp%(BttQ+o3B-gyLBmRORe`?E!WCCOOe9?6HQ7;V|3~ zUalQHGn``LN*26w9=mP(!oXlNqlw_V%t$CVDQdE8?F)iR2NGU6mh| =M^^QQ;Iu` LX7M`g7TDq!eRvRYz7SR(O)u8-*7;0kz;5H{oh~FYY1eM-@Jf1kFJ;^-)@$ zhjekp2}Gn6MTn4Hr?!;P<;G*M2~oCbuPhK;mHjN_a`Njy$glOFt{4d_* z)W4Fx{%(&zFyj#U_U_q%2GQngVjK{hTbMrOD{6Ptx>t1I8@u=0dUBDVPX5!oZ4Wn# z3vgB5#Fat2+m<@VB6>)x(Q!m`nTB@#C@^~h@E>4bL3s7*BS%(N7DWbYC1VaLhE}~` zv+0rmUFN|Z@vO$@k!7mm4M1+{Ahc!eeJCWA@ldT^*QM`iPmu&^OJ~kI_S=xnyuYlG zI51dmQKONZ)jVt}E?I$WSP&Q4l^XejzA+lW6{@X1+mF=$#bG>JR^oO_g B+9+^cuK0M(4by~V>Uh(> z%FFXU=Sty6 -t8r9}aHKNUzUk(3}6JU;Y=x#=lc`kS5FrGVZzVzL4TNmBSb@ zYWIKjnc|8`;7zaJ74xvT$oS$AjP>Ci5#{k}-}W 9yN;8nzL}1jubD&%2 LKNCy#X?@s!}xK-H7^Ang` *5a2rTZTNeOo)%55o5MG%sBzG!^Vv z2Su1dbcJHKMu{_~k6KE4a&d#1z8U&eew7mfM$FC6&yS4#z&0U|YaAsDQjoL7X$9w6 z<|90;wL|(Vd}>f#(D%D!$f^rmg*>ZL)xOA#EedhLNVqPtE6_QFQgH{#& zF6Td)vI^~j112Ib`dcve?Lg>Ynu-DX)MjF`*x*?U9*NV) GTC~_Vn4z+|ZQ{rIc@Kn2`x(>Xhz cK-&@6pgm!4s6)pG!{ksy+ z+On|uq1@>q`*8sq+L?5Y8n9bS2eIA`8TdF;?(w;vCfA`OBV!usB6>}rS{K&bPFt=l z1o`EHe(X!P4#YaM-DBFDahP;BZh?`d5A@uxRMd**Pm1>!b2m% V-Z>=L97O z#OlO#f2+jPeO60bGs_{`$GVgnm1vo=50l2SOhQNXSr~ 3>KRF==T%DlaD%)W2^;T@ zqsOwx9EGlE#`<@bc#)h@Y^QwBNG}c7DV@#6=+u;p;FM{8%!irC9{Zoe4B6CSK^U?C z35W!$M3Z0lr6#?bx)TPAI1R}wv}MP}tR~dc6{1*G$dP}M`|-~Bq!{LW(~1g$2F`77 zUS1X=?9HQB4}!mtGoZH7!`bh+n?G=hgtcOqIr23(2(Y_Izx3v4l9qlw0WHb#_%_I% zG>qezq$YN5hrZ=|A~`f~dB0a>ZOvQ1C}UF@Ew+#Ep54B9I7JE{FI>Ob@18riwpK9~ z>3%M_1rmFM^G$h@XJGh}0%7HDe=t%Xb|AHGi@w{C_fI~A+J5S?U@?2qsDUP>D?n#T z#<_TdI!yo-PPRM!&ZL>%H?l@-BF4T0^;f94YOS7*Y3Wu8?z(Uu)hk BRM4 z>d33<0T7`EDZ7dk!{nTMh~5v}HC;l!#@m7{f_df0_J@4#(%s{NLzeK{a{6Lwo(Wu9 z(u~caEhUoWVAu7J?(-R6Z`RnFK|D%IBFC-Yc^sq;c_fxYLxb_?9n_fYr~P!|G6x*2 z2O7$&&g?f{f(Yf&4BXm-r{%Uejoppg9!K%c>etQNOgMoGk9K57@^mr#JZ)XGL=$a! ze)@rZ %pNSKRu=x&cWx# z%jagiKP$0gvGxM1?f5wyPav|xx3Fv{8%NaRiu_|z`&vgP9oSImx(&4&PXZb2#Yh&@ zM3$Mgy~W&}(>1;wLb4uNM2hiSVe#;2(^E>YL#1%&uD+x07F^IpnAp(wZFe<&zn R8MS+McM@73WVEHQ{1! zk3=A`P#n14_Y)+_OOja#m711#ZO4zM|Fe&9P|u0~bp)y+FY`eah+tr4g&YU`j%e!u zG>e^G-#X=VA->m8vr5tCB_8u~TpnHdN|Gox9zQJe0F2!PS`B(8`Uev67kB1U={ $ZXpB5Vvi7*;~+OVcMb_%)J~E#ebXR! zS!~*vAu^K5Z>9DVZ}8Hn$7DE^^zD(n8hPH&K0}PFp3NselR#)zwmY^(IB?z;G4LQa zI&;<&|45gXPFmNC0M|UPC@;(7SP<3H7PUO`v4_jQ$0OC*Fc(YKGjj zuA-Wb!g78;x*D#gvG-tI;2IeoiR-lKaK3)+==HZz5yk-S4ja4Sw2;H6;R16lbhgN> zQs!sS$rlPU`)i5q2NMO9C0_HRzAW;1OduWYi&()Z0Huq##5rzn8>G8Sn3$E)55`g& zma6^j@^pC-ZhRyzXvl1qP;b(+p0sxqSX5!sc~XHck)~j_HR2Z0Uc~!3x#S`D^}UJJ z<6C<=_M|*gu7uqsE&>H4R7gG29StQ67`veL^lJNNNMTD$eavS=Ogbi`pDt8s6Y>n@ z$>PyLsPaB-L3dUwX{;J}8It9YK879ZDbjkdfq<`Yo-N$cV-v5ES#Uv=mDkrem5Vq! zs;e@}vFR)`mD2E8;%H#d4Z6w^AzRC~{rj}T^ji;ZMI8=y3p=W#CVHcZ$)+BG2B)x^ z$*1Sfoyv#6Yf2n+F8Ag+v%_ind3T^WsaIJ$yF0~KurAB2^R<`s5ir5gZkKIL9*z%g z{8<=C x=H?ez@|aq%g#-coD|?(W?|~sY;lteNjoR1b0ZRnzKc=1FYK#jO zDfMbP8pJP~FQ6^cLqqMg<{`#G2uB}*TxpNt23w;iG28mEa2BRe`k1m=+WPuhl@4_X z4Hyypvo=ccPV4eSN~k7nfR&Y7)H|-Ww8}{+e5!PU){c99rDU?