From 2af9c51d12951f55eae185236bfa2b6015c99cbf Mon Sep 17 00:00:00 2001 From: Talha Date: Fri, 7 Aug 2026 15:11:07 +0500 Subject: [PATCH 01/12] feat(codex): publish repository plugin marketplace --- .agents/plugins/marketplace.json | 20 ++ .github/workflows/desktop.yml | 11 + .github/workflows/release-candidate.yml | 1 + MANIFEST.in | 4 +- README.md | 23 +- desktop/src-tauri/src/lib.rs | 22 +- docs/desktop.md | 20 +- docs/integrations/openai-plugin.md | 63 +++--- .../vidxp/.codex-plugin/plugin.json | 9 +- plugins/vidxp/assets/logo.png | Bin 0 -> 94054 bytes .../vidxp-find-video-evidence/SKILL.md | 0 .../agents/openai.yaml | 0 .../vidxp/skills}/vidxp-ingest-video/SKILL.md | 0 .../vidxp-ingest-video/agents/openai.yaml | 0 plugins/vidxp/skills/vidxp-install/SKILL.md | 72 ++++++ .../skills/vidxp-install/agents/openai.yaml | 4 + pyproject.toml | 4 - release-please-config.json | 2 +- release-please-config.stable.json | 2 +- setup.py | 6 +- src/vidxp/bundled_plugins/vidxp/.mcp.json | 8 - .../skills/vidxp-find-video-evidence/SKILL.md | 59 ----- .../agents/openai.yaml | 13 -- .../vidxp/skills/vidxp-ingest-video/SKILL.md | 35 --- .../vidxp-ingest-video/agents/openai.yaml | 13 -- src/vidxp/codex_plugin.py | 205 +++++++++++++++--- src/vidxp/codex_plugin_cli.py | 15 +- tests/test_ci_scope.py | 3 +- tests/test_codex_plugin.py | 95 ++++++-- tests/test_packaging.py | 52 ++--- utils/ci_scope.py | 19 +- 31 files changed, 503 insertions(+), 277 deletions(-) create mode 100644 .agents/plugins/marketplace.json rename {src/vidxp/bundled_plugins => plugins}/vidxp/.codex-plugin/plugin.json (84%) create mode 100644 plugins/vidxp/assets/logo.png rename {skills => plugins/vidxp/skills}/vidxp-find-video-evidence/SKILL.md (100%) rename {skills => plugins/vidxp/skills}/vidxp-find-video-evidence/agents/openai.yaml (100%) rename {skills => plugins/vidxp/skills}/vidxp-ingest-video/SKILL.md (100%) rename {skills => plugins/vidxp/skills}/vidxp-ingest-video/agents/openai.yaml (100%) create mode 100644 plugins/vidxp/skills/vidxp-install/SKILL.md create mode 100644 plugins/vidxp/skills/vidxp-install/agents/openai.yaml delete mode 100644 src/vidxp/bundled_plugins/vidxp/.mcp.json delete mode 100644 src/vidxp/bundled_plugins/vidxp/skills/vidxp-find-video-evidence/SKILL.md delete mode 100644 src/vidxp/bundled_plugins/vidxp/skills/vidxp-find-video-evidence/agents/openai.yaml delete mode 100644 src/vidxp/bundled_plugins/vidxp/skills/vidxp-ingest-video/SKILL.md delete mode 100644 src/vidxp/bundled_plugins/vidxp/skills/vidxp-ingest-video/agents/openai.yaml diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json new file mode 100644 index 0000000..fedd4bd --- /dev/null +++ b/.agents/plugins/marketplace.json @@ -0,0 +1,20 @@ +{ + "name": "vidxp", + "interface": { + "displayName": "VidXP" + }, + "plugins": [ + { + "name": "vidxp", + "source": { + "source": "local", + "path": "./plugins/vidxp" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Productivity" + } + ] +} diff --git a/.github/workflows/desktop.yml b/.github/workflows/desktop.yml index e0c6d56..33f465d 100644 --- a/.github/workflows/desktop.yml +++ b/.github/workflows/desktop.yml @@ -22,6 +22,11 @@ on: required: false default: "" type: string + plugin_marketplace_ref: + description: Git ref for release builds; empty keeps a local marketplace. + required: false + default: "" + type: string workflow_dispatch: inputs: checkout_ref: @@ -44,6 +49,11 @@ on: required: false default: "" type: string + plugin_marketplace_ref: + description: Git ref for release builds; empty keeps a local marketplace. + required: false + default: "" + type: string permissions: contents: read @@ -179,6 +189,7 @@ jobs: working-directory: desktop env: VIDXP_DESKTOP_SIGN: ${{ (runner.os == 'macOS' && inputs.sign) && '1' || '' }} + VIDXP_PLUGIN_MARKETPLACE_REF: ${{ inputs.plugin_marketplace_ref }} APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }} diff --git a/.github/workflows/release-candidate.yml b/.github/workflows/release-candidate.yml index db5e50a..9ca543b 100644 --- a/.github/workflows/release-candidate.yml +++ b/.github/workflows/release-candidate.yml @@ -114,6 +114,7 @@ jobs: artifact_retention_days: 30 checkout_ref: ${{ inputs.head_sha }} package_artifact_name: vidxp-python-dist + plugin_marketplace_ref: ${{ inputs.target_branch }} sign: true secrets: inherit diff --git a/MANIFEST.in b/MANIFEST.in index bdb0400..a25a125 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,9 +4,7 @@ include docs/images/logo.png recursive-include src/vidxp/assets/upload_page * recursive-include src/vidxp/assets/artifact_download * recursive-include src/vidxp/assets/mcp_app * -include src/vidxp/bundled_plugins/vidxp/.mcp.json -include src/vidxp/bundled_plugins/vidxp/.codex-plugin/plugin.json -recursive-include src/vidxp/bundled_plugins/vidxp/skills * +recursive-include plugins/vidxp * include web/upload-page/package.json include web/upload-page/package-lock.json include web/upload-page/scripts/build.mjs diff --git a/README.md b/README.md index 2926077..d66b38d 100644 --- a/README.md +++ b/README.md @@ -161,18 +161,17 @@ VidXP server. ### ChatGPT and Codex skills -VidXP includes reusable skill source folders for the two common agent workflows: - -- [Ingest and index videos](skills/vidxp-ingest-video/SKILL.md) -- [Find moments and return inspectable evidence](skills/vidxp-find-video-evidence/SKILL.md) - -Download a skill folder directly, or install the versioned VidXP plugin bundle -shipped inside the Python package. The plugin keeps both skills and the local -`vidxp-mcp` server definition together. Its MCP App resource also gives -compatible hosts an interactive upload and evidence-review view; every workflow -continues to work through ordinary MCP tool results when a host has no UI. -When the MCP feature is installed, VidXP Desktop can configure another MCP -client or install the complete local plugin directly into Codex. +VidXP's repository marketplace includes three reusable agent workflows: + +- [Install Desktop or CLI and connect Codex](plugins/vidxp/skills/vidxp-install/SKILL.md) +- [Ingest and index videos](plugins/vidxp/skills/vidxp-ingest-video/SKILL.md) +- [Find moments and return inspectable evidence](plugins/vidxp/skills/vidxp-find-video-evidence/SKILL.md) + +Add `grayhatdevelopers/vidxp` as a Git marketplace in Codex, or let VidXP +Desktop install the plugin and register the selected runtime's local +`vidxp-mcp` command. The MCP App resource gives compatible hosts an interactive +upload and evidence-review view; every workflow continues to work through +ordinary MCP tool results when a host has no UI. - [Python, HTTP, and MCP installation](INSTALLATION_GUIDE.md) - [ChatGPT and Codex plugin integration](docs/integrations/openai-plugin.md) diff --git a/desktop/src-tauri/src/lib.rs b/desktop/src-tauri/src/lib.rs index 4d64de0..3fe453b 100644 --- a/desktop/src-tauri/src/lib.rs +++ b/desktop/src-tauri/src/lib.rs @@ -51,6 +51,8 @@ const RUNTIME_PACKAGE_WHEEL_NAME: &str = const RUNTIME_PACKAGE_WHEEL_SHA256: &str = include_str!(concat!(env!("OUT_DIR"), "/runtime-package-sha256.txt")); const MODEL_CACHE_CATALOG_BYTES: &[u8] = include_bytes!("../../model-cache-catalog.json"); +const CODEX_PLUGIN_MARKETPLACE_SOURCE: &str = "grayhatdevelopers/vidxp"; +const CODEX_PLUGIN_MARKETPLACE_REF: Option<&str> = option_env!("VIDXP_PLUGIN_MARKETPLACE_REF"); const PRODUCT_DATA_DIRECTORY_NAME: &str = "VidXP"; const RUNTIME_CONSTRAINTS_FILE_NAME: &str = "runtime-constraints.txt"; const MAX_SETUP_OUTPUT_BYTES: usize = 4 * 1024 * 1024; @@ -3693,11 +3695,25 @@ async fn install_codex_plugin( installer_path.display() )); } - let marketplace_root = paths.private_data.join("codex-marketplace"); let mut command = target_command(&profile, &paths, &installer_path); + if let Some(marketplace_ref) = + CODEX_PLUGIN_MARKETPLACE_REF.filter(|value| !value.is_empty()) + { + command + .arg("--marketplace-source") + .arg(CODEX_PLUGIN_MARKETPLACE_SOURCE) + .arg("--marketplace-ref") + .arg(marketplace_ref) + .arg("--marketplace-sparse") + .arg(".agents/plugins") + .arg("--marketplace-sparse") + .arg("plugins/vidxp"); + } else { + command + .arg("--marketplace-root") + .arg(paths.private_data.join("codex-marketplace")); + } command - .arg("--marketplace-root") - .arg(&marketplace_root) .arg("--repository") .arg("default") .arg("--index-directory") diff --git a/docs/desktop.md b/docs/desktop.md index a899996..43a73e1 100644 --- a/docs/desktop.md +++ b/docs/desktop.md @@ -188,17 +188,17 @@ action, and **Quit VidXP** runs supervised shutdown for the interface and any Desktop-owned repository worker. The active-target panel also reports and controls local video processing through the existing `JobService` worker lifecycle, reports the app integration service, creates copyable AI-assistant -MCP config, installs the bundled MCP-and-skills plugin directly into Codex, and +MCP config, installs the VidXP plugin and local MCP server into Codex, and presents the existing doctor result as product health rather than raw output. -Codex setup exports a target-specific copy of the plugin from the selected -VidXP runtime into a dedicated Desktop-private `vidxp-local` marketplace. The -copy keeps the versioned skills but replaces its generic MCP command with the -selected runtime's absolute executable, repository, and data paths. Desktop -then uses `codex plugin marketplace add --json` and -`codex plugin add vidxp@vidxp-local --json`; it never edits Codex configuration -or the user's personal marketplace by hand. Re-running setup refreshes the -managed bundle using a deterministic plugin-version cache key. A new Codex chat -is required before the refreshed skills and tools are available. +Release builds add the repository's Git marketplace from `main` for beta or +`release` for stable, then install `vidxp@vidxp`. Development and pull-request +builds export the packaged plugin to a dedicated Desktop-private +`vidxp-local` marketplace. Desktop uses the supported Codex CLI commands to +register the marketplace, plugin, and selected runtime's absolute `vidxp-mcp` +command with its repository and data paths. Re-running setup refreshes these +registrations; a successful release setup removes the obsolete local +marketplace. A new Codex task is required before refreshed skills and tools are +available. The browser and app integration service remain loopback-only by default. Explicit sharing controls compose their existing `--share` modes: browser sharing reports its LAN URL and warns that it is unauthenticated, while API/MCP diff --git a/docs/integrations/openai-plugin.md b/docs/integrations/openai-plugin.md index df86622..285a8e6 100644 --- a/docs/integrations/openai-plugin.md +++ b/docs/integrations/openai-plugin.md @@ -1,44 +1,50 @@ # ChatGPT and Codex plugin integration -VidXP ships one versioned plugin bundle with its Python distribution. The -bundle combines the local MCP server definition with VidXP's canonical ingest -and evidence-search skills, while the MCP server exposes an optional interactive -view for hosts that implement MCP Apps. +VidXP ships one versioned plugin from this repository. It provides the install, +ingest, and evidence-search skills, while an installed VidXP runtime provides +the local MCP server and its optional interactive MCP App view. -The packaged bundle lives at -`src/vidxp/bundled_plugins/vidxp/` and contains: +The sole editable plugin source lives at `plugins/vidxp/` and contains: - `.codex-plugin/plugin.json`, the plugin manifest; -- `.mcp.json`, which starts the installed `vidxp-mcp` command; and -- `skills/`, a release snapshot of the canonical root `skills/` folders. +- `assets/logo.png`, used for the plugin logo and composer icon; and +- `skills/`, the canonical install, ingest, and evidence workflows. -The root skill folders remain the authoring source. Packaging tests require the -bundled snapshot to match their file inventory and text exactly, and Release -Please keeps the plugin manifest version aligned with the Python package. +The repository marketplace is declared at `.agents/plugins/marketplace.json`. +Other product code in the repository does not affect the marketplace: Codex +reads only that manifest and the plugin path it declares. In a repository +checkout the marketplace is discoverable as an available local marketplace; it +is not installed merely because the repository was opened. Packaging copies +the canonical plugin into the Python wheel at build time, and Release Please +keeps its manifest version aligned with the Python package. ## Install in Codex With **AI assistant integration** enabled, VidXP Desktop shows two distinct actions: -- **Set up in Codex** exports a target-specific copy of this bundle to a - Desktop-managed `vidxp-local` marketplace, registers that marketplace through - the Codex CLI, and installs the plugin. The generated `.mcp.json` pins the - selected installation's absolute `vidxp-mcp` command, repository, and data - paths, so Codex does not depend on its process `PATH`. +- **Set up in Codex** installs the plugin and registers the selected + installation's absolute `vidxp-mcp` command, repository, and data paths, so + Codex does not depend on its process `PATH`. - **Copy MCP setup** retains the transport-only JSON flow for other compatible local MCP clients. -The Codex action installs the MCP server and both skills as one unit. It uses -the documented JSON forms of `codex plugin marketplace add` and -`codex plugin add`, leaves personal marketplace files and `config.toml` -untouched, and asks the user to start a new Codex chat after installation. The -exported marketplace lives in VidXP Desktop's private application-data -directory. Its catalog is written to the Codex marketplace contract at -`.agents/plugins/marketplace.json`, with the plugin at `plugins/vidxp/`. The -exporter also removes the obsolete root-level `marketplace.json` from earlier -VidXP-managed exports. The canonical distributable bundle remains checked into -this repository and packaged in every VidXP wheel. +Signed beta builds register `grayhatdevelopers/vidxp` at `main`; signed stable +builds use `release`. Both use sparse checkout for `.agents/plugins` and +`plugins/vidxp`, so unrelated repository content is not downloaded into the +plugin cache. Development and pull-request builds export the packaged plugin to +the Desktop-private `vidxp-local` marketplace instead. The action uses the +documented `codex plugin marketplace add`, `codex plugin add`, and +`codex mcp add` commands. A successful Git install removes the obsolete managed +`vidxp-local` registration. Start a new Codex task after setup. + +Users can also add the release marketplace directly: + +```text +codex plugin marketplace add grayhatdevelopers/vidxp --ref main \ + --sparse .agents/plugins --sparse plugins/vidxp +codex plugin add vidxp@vidxp +``` ## Interactive MCP App @@ -66,8 +72,9 @@ only exact HTTPS origins if future component assets or requests require them. ## Connect ChatGPT -The bundled `.mcp.json` is for local plugin hosts. A ChatGPT connection still -requires a publicly reachable Streamable HTTP endpoint (VidXP serves `/mcp`), +The Git marketplace described above is for Codex's local plugin system. A +ChatGPT connection still requires a publicly reachable Streamable HTTP endpoint +(VidXP serves `/mcp`), an HTTPS deployment or secure development tunnel, and registration in ChatGPT Developer Mode. diff --git a/src/vidxp/bundled_plugins/vidxp/.codex-plugin/plugin.json b/plugins/vidxp/.codex-plugin/plugin.json similarity index 84% rename from src/vidxp/bundled_plugins/vidxp/.codex-plugin/plugin.json rename to plugins/vidxp/.codex-plugin/plugin.json index 4232648..d025467 100644 --- a/src/vidxp/bundled_plugins/vidxp/.codex-plugin/plugin.json +++ b/plugins/vidxp/.codex-plugin/plugin.json @@ -20,9 +20,12 @@ "websiteURL": "https://github.com/grayhatdevelopers/vidxp", "defaultPrompt": [ "Find and verify moments in my indexed videos.", + "Set up VidXP on this computer.", "Ingest and index a video with VidXP." ], - "brandColor": "#6D5EF7" - }, - "mcpServers": "./.mcp.json" + "brandColor": "#6D5EF7", + "composerIcon": "./assets/logo.png", + "logo": "./assets/logo.png", + "logoDark": "./assets/logo.png" + } } diff --git a/plugins/vidxp/assets/logo.png b/plugins/vidxp/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f9c9d21139a9238061cbfbfccf0710132b0cd9f4 GIT binary patch literal 94054 zcmV)}KzqN5P){q~u)nLT^%y>Ala_x%_0-XnX~_t~+Xt?2)7c<#C9 z297q`X#I>a16!?DKYQKRUiYi2s-Jz0e`N3b+WY?D+Wz#HY1n6E-{T+B=@%aR--`cK zm3?I@`I&s5J+HD~P9NWkbd3DSzi&#f^jv-u@`&k*vKs%YRQ_6;S-Pco@xG9zd@tk4 z^khDHS(}1tOPRhe1BvIQI@Hn${Xv~WyK!K$JWX%vBF90vE{&0pX6S1BeyHenvg4k5 zdU_D=GyD^IeQIBQUiHvtEn_~n5%FxO{r8#w$Jg`BGtX!Ae>8N{fxl>Y?X}ki{_w*O za|57k$IWFQ;kuvgumNJi7biAj-G+Q3hq4qyHd*DsuT6MLlT!jzmDR1?1Z^xs zo_|x>n?Pq&2iYfW`loHZ+Qct{f5@j$$4>dQ1-`;~Bj32S1q<==yk+0`!4k@p=gDzJ z9R9)bW#YZ6ioI>cHg2^-S_X-KX8#Sfg&9iJ17N(qSu)qR$(62oF>cH!zmtI@u5%|Uuhs^l{o4X>K1O=8sCA$?)qRK?%H;D* zzbHonG1c~_EoH_}Ic^JSi*z0C8P&%zPgy#S<8OR9eAFssYo4g8o+0+~YRlCOu~gbn z`W1y=9K0-L)o<9aVW6hAu>aPk1XlS(BI-cC=Yuv|VT~9--Lec-yX)Ri3X+Nv6S^r6 zDy3h#$B!vc5AD9~K)Qx{Z9)kdq;K>3v7`OBi*tn__X z&#KNcu(m+i4s=E|bOMk<*&3f`RA$@7ql&k<6izE+E0b7K#VvtficpK|?p<{#0A5Z}`EPo_o@Oj;C8)HRR*<^5+bR-f z7G&LP2E3v6`q0G|S>#;$nZi#FUS6iPtL2qUV3H6+kjuRo>`g-T67@jTJ4(p3 znFzgYJ4rp%%8^g}s)IbO4eQbk#aIiy0JD*8hY)IP9<|T2ad9Hu4yyj0#!-PHZ0nnGKA!*lvVXsfiY4z+Ev%+Dbc`$@seQd>(~t>HQLa$uWiy`f%;<&~s+cx1Fzt5H7D4XCvl z*b0ED3`o>P=t$jA_pDqa0D3mA)*fx-TqO!hf^1iPC%&ULd9($>syi)TDSlU!VCkMS zC@Y3)fM_z=mdJ>aLQQl}@d&n0l1wtugjb3BiMWDmrkq@NB)CyPCCXHV2>hoi09gP# zfm$X5Wg-n}F+p;ysvl!L)uBIp_uWa$EVIl{W=HmufETE(AAkJuVA~L&w$uvPn-!jj zq>4G8$RyKk_`C#yod8AUBdEICN}dn!s-U(X$E5?%te3;k1Ane5wB$y zF=~~-DFGpxPO^*SWn|)Wishm}RqFSWos{4z+rw69=xC$${A5(vCU=wPZ$Uv?10&pW$QfW1RTPmdurO@`fQmD!ry>{O; z3ZqNFoafUmSaw>tn)n$DN&Be*jtkdQOVN8p%)6*QysFzVv8M0 zqd1IG@Ot^>m$$I8trJb!W>e2lcUldI+NEEOq^zX_mC|-{ck!+XD4HmYk_}U*3Dc=8 zwfLO?qap2LeuC}HsZD=b6J9s6YgIwG-?X3*b;T}sQ@>ut=|J7pfL4s7cr6!9O(~_Z z;4?P@94ab+hR9eI+DP`Y253gbBPXw_gRc=^nuthTO#Ozy^M(X{+PY5yKx=BQI(PW+ zA9o*>Y~&~duNPi;0pYb~B z2Jn`NR9FBt0jEP-!$-IHHEP(%Q375sz4X!vUYi&~X$8-Nj8iO2fdwp0pd17`?LSkj zP9cx{9Tg~~cJ&#lFd{%&kQbHM#&A#6yK)wRpab~CIHm(t+b!VAIhl(9h`P7L@5Gw6 z12F+Y38;LU9*8P2v;7`IJvJ33Mj@&6E|075g);lB_)g)xPbbtTTE|C?q`*EBq+(1X zf~Q9;Q=kGXZ+;PBR#nr3nu)(Y9ey*^erN$~nV~e2p@&8?Sc>Z$0bHg{RFl0A6Clc! zNWYAonNt@kQ88KRcUgGa)f#{mN9?c^xl_4UQ2M#+fPz2O>L5w zyP^gvi|TzB%9<}0vAs-z1sBmI2vbAa3aA^>%KNh_jE7356aF>jC(9YCB*%d$uMw1L zDvf02jG=U&x+79l@vB(i2ufAFCy{^5q)H#Av_qlYZx!Iv_>zdZ;=T!jc@xVTKQ=0P zPu{gmD?nU$M4q6lY>ATb-6(l!$8Dy-?nQaNjkK z6X2)lKBi<1qrH|)&wY@fuUOtdWhKpHEM8*&C``#fusLeVKMicJUm)DKCQ_rumoMF0 z*_QzYHiSknj4$Ovh9S-29y+p%6C;p zRTV=n1dQms2g2)t5Q|SEYsi zGC#SH$+V1r=N5ELjg}}twWwv;n?iXS+r`u=U-qBnzl;QiU;Z2@r78vN$*F0IlQ|)Z zGn+7}S&WR%7r~m{lQAxSqWCIb-YRfsChr%QjsMRx!sMwn4=hRE72_F-M3V!hD!lXU zZX#<~`EphiL5|3SAH{JI(xiU&-|ZtqfsGJ&S>QUs7H&&_8yd;vD_Bld<%6;WauP(S z4pd>X)Pi3XC7|S?Hp#?KwoHETE%$3YQuryVQQk-Zq?WzH+({rrywNY*6K@j@HV8uhN#?!k_yi267nszc|D;_DN$$(Q5+)|&;%*IED*{U z78*>yv|4%qsj3Jpl#t29dP@o}WEFtMNIVMy`e5}QdnZ;S0C@yV15h<$t_XI{$ge}` z)ty+pJy=ze6>T{g8gVwQ%2Q%;0cQFuRH(&38*&x%zhy`?3Xrz1Woxgp05*_DAXL4K z&ss(Mb4bH$H7SYetfXM^FdEJZPX1ZX@o4)VzT{~7Ud{=9)@Eu1Ii>6-@B+xgdt@1D#JC%KB z^g`@tjdNHH@~Nw~*BMim|hlLZpdf~}U9s|ED&fMc8ytWUd8A73QF zUgleaWIP8ovCfg|m*6C86b)V-n;YRh_Kl}3C1q&L>peYHuZ8%%qP#4{wIwCsQY)%h zforR~ENE#3ZAZFO25j<0v13wP6}6OJ7PrbNH%XD0jG7erSJ{0jf0a)T1UXfee-@sX zsM4mqvhr8@aV6^*?x~cvC{slZ6r0SystdbI?}{M+*j@k511Jp`KHQu` zy$n^i5xwR7<0L$rHUtF}8Ku?DcU7lnRTuV6RePatC*U&~g=46JilSb$p-j6#fp$ZY z)Tq36^~}rIhBE9_zew@$!!nf^fviJ$ifMNfw~M+`hjKL5(|Edr(qcj3H&GidCf}0= zk}6=6DQ$o@Dx(_36A`54egk4fN+=4<12x1@-co3orb?jv6rRVujIvx3`A9TU0`9`| z0H{Qgid2cm_f>3FBg`r&O72sd477C8a?35ZJ9Qblo_LmBeAWI8qTUVq(z6_p8f|o{ z%)W=ZAM71NCjk4khEY-Os&4H+QtA9!LpSBi-#6XM$(qMAk$*G#n;f{rpFBMo-{{CO zuE`QI>cdKsV2SiHM$?1F)UQnrOlqnc@jOz#i3p~k3fB;w@0Sdk&}5=fdA>I`mRpQz zo#mHb{y)@3=!$KGfZnD$(BGB-D2A$8>lb-5N>!qQFgAvay^<_bo*y+mYhqnSWYTqF zdwz~ED!{^IlT3!*)UlhgWGrc8oRJAt(&nn?o!IysfST@2YK>^3Hn0NRSB#l zI7!aRze|xxe4-LEG7Up1UqgZoHKd5D!aHeG8`(?$pz_E>K@=a;5cFT%_#H|V%N&8r zr1E)`@?u2+>@Qgs%!(styC%G*DQwi(*{r5Smt2 z)38F8?t2qDO@?-%UHo4ID29-?&&UE#4hp4jMi!9UfpH!umZ>pb^Z2RPrD{xrWI6); zBsgWXilDR98=r5yQ<)@S6;sG$WjFFWkxqgS3No?x)~8K`<2NBYRRZ~Mxc?&+pS93 zx%#&}HRah!3R=bhmTrDF7fpbnuec)j$}O9$JZ0hCa& zk$v+r6jK108n79yE%J4UjnxQRqZ+L8FtQ-hP1>W1^6Tb#yZ7x_>rokgjs>C9wJV#=m*hO*u!&C9GLyIPSXRH^{Zf_e5ecN^M8%2nV&85W; zdSqhyl@~iJK(6BPLtM}ng$>|Ft_|*N$+&eX!dMX4^L5NNxMU>iKh8Mg?P{MLN)4eA zyx<8nHIFZdI@$%^TyGjFY zoUE!Y-X~dfhf_rWHl7`Y8`UJ4L6*($||c2r9vo< zEN|2Gnu_S{k~{)&UYQK6?I^9fv(YJi*DGKdnRvhU@Ken^zg$E(>?dx z!ytv{b{x>e6HiQ&O*R<~7%+gQpMH9pb=FyF>ZzxuDW;f$#vOOuu4HaMRr@zl(CsM8 z9Dw9BON31UtnzgHGr1ZAWU7j~%3n;|Iwcm%l|U^}Kp{Km{<0PsBqFkSUG?C;gpFzZr1y zvP#M@rwAqG7t15lFFq%kqI+*L#?@qZ!X_hdis3~7Jr2QkHGS`+n?WV&tHw5h>Y{?T z2u?duUu3$o?k1`Oq^B8sHU_GaZCt5r?c|1?>LXeCkzI&J1h`7?A}rM?F_VZOQc5>b zm;9khJpqOUFcmMn7uNAoMwWp}UiSD~1fTl1iM1qAMv-2|0~=X$lc=zaj1q)kq`oTI zCRM^zN4$|oY(PSb4i6xl23WlU3Tc%%{nk-$nyU&3$#mfZK zweN^XO;bwLQ6M5JxqU~_E44IaN)!Qra?mkU&&yv+wva^G93ZDUkzngYQ8efn6(baY zYLs4y8Z)8|!~7?zG*G&WmSz`4GZ+)7v($X%vmd_yZn|~WSx5Q5uTfscooHPGF6B6| z();bWxJHtDYWICP46UoK3YvMXsIW7E&PjM;~*{E$#1#@^b}VFTM2AT6W+M z4ENbU@xUy0x2NZMh-li5#cUdcKiBF#vLN|W$=$jE{8F4xKmC+$x#bq7w4QqEDVlla znQ7;pccxWWU6qCH0I{Zgy3sy@?R@psSLw|+-^58#^uY%o&>L^OL0^9PB~y3+EC6Sp zK7BZ^L4yX-fBy5IwgUZ9o}Jjuru!x!slAtzG%WKW4%ISD&jSEOGDXJIfRj^Jl2W4L zy$?Z9uF9ysr~#X*pOkwQz_4CMosJaB3$8T-J6&FHE)ky_lMGJ1^1`u&!k>N2(xIKh z2IoS@gnnvCylBx{l!2ETRi0(sl5{XxT-kL2lxk^>$}p;cp|`92|CKOo*f6@_f(z*E zv(IKgnS1WJ>36^T9WA-!l5GX;?POU<)5P}321s_I(Q~oXjCDqf>X{K~az-B_5Q30GtY6eXqJ=GwxMKbV{;FY&O$qM^+tV~N2 zGm5wgazw#8(y$+Y=r37EMS0l>Yf(MqYmB0}OlK2`kp_pKlA`&)3|wH#n<4`*`1d_i_5L*%~}}Fs-@fnl!@tP7FK zR*|X$72|3dnFODrtjnlYQ=mnZkDZE4)@A__1CgbHs!~){AbyOLgK-_S3#QRVAAL&_ z)K>&A%Q7x)SJnQaM1iu(0jdOKrBjRzB^vN2qsoXzEk*Tn3g1Wc+u_59v&Qhm6HjCo zZn@=_qdoWBli9T1<_oqD!u%U|k#!SjR)Lao2CbY@<&J}^wByn$Sl=t@g2bKFMoUu(yex1nmA*^Dc+huxy}+09vqohk3*C#~;ts5JF}&9G~Ua zU@dRH`DVK2nrrCUXP>1BCYXR0U35{}a?34guDRx7gVd(7j!JOvwvRgXuL*Li5^&`o zD$2~okP|nb#N~M6C#Ry+yY$dd8E{PTV-1pZ95n6k)%OXEqQ?kIwhDnACYiklBbSbI zkSLPM>TLA8bY1zpB2u@M^Tj|>aU^MdFVABLG->6_wG@dEN4u4G-EN$wv6~PR_7f%v zzUq`3iRbid4F4BoVPAal1%uYb7hg=%OfwDr;SYacHnE*BJP$9t@B#zYMHgMf0(h88 zKrUwG2y7`ovf-y}GghsO`^ZK$Qdp9%hz}{@oM4+Ok)B91r_w@x>2U&0Q~NG_V>D37 zG*t3ATc@%XfTTz!N^KDyhV+xcYYv(<;d>2$OO%*Oz=5&Jb{D9=k8K?&FyH0{6Nwa2 z);CuW^7Gc{eFm-L4OaVz$a9enqBUwEQdK797&57i-e0>=JW!3MVIusJ0fO_ZuDXg2 zJM1tvaX9e618I{@Ht7{;fyD&q!Ojats5|Yn6Rp1b>b$*YWI~|gpn(MY`QCf)(I=mL z!oQH0O*GL&bka#D(a3~I@ll~q#KfvZ{M0t4(2rWSa`L`)zq+arLWi*+F zNTMc$7r4_WsMP>1|C^P|kjUG&Lu?P3YKtnFewEI3 z4014+sxwfH9AEe*qrza9v$XwtE-o3oEY&r)jU?q=MD5u%DL9C8RPzx?vNiMo_$C)N!n z5nxxJe)?&8^2sM5C*?9iCN}=~<8!(IM}QVIkJC;&Esadj>`(o9Esl6r!#NQt2Oy(Z zD>)CNkK;7ZD+wG*G6b&*S*CTiumobJP*{@?CIc!74I#4rmSnmDcVuCrbV{^IMR_|C zk)rr&F|xMI1@={FQ%PxYBCYI923NEosBcsXBExvjV;}!=U_JN7d(Nkl8t=Fy zyY*yLg;AAeZ`0`}zKjD(>C{tCWneh=*kf7S*KL5d@UMUUD+}PEAw2WUGily==Veb1 z?eZ*@@s(Fzp&M_!k!5Xmkz=hUOfewHUumV4ShET92$)O2D79V4WTNVM{;Vjssl}lb zM_d%yJ%5$B$!zjElpwVmFp1HKOo`R=cI`$_mOzO~z{n|-0zoLsK?%6>dZ<}QH7Zj5 zHL3lgdmY&hqD+;@JEc;I^n^^2%E9E+S77xDnnizIQwWMKRocfSmFkHcB7>J5baSbyfAugVEGsC2DI*b*NF0+!ukwsw7BC>NdnP$;Vd}>IfIql{muBO8q0{#Wj=0 zsZ!I}Abd|PqMtPi>;JEXkpZZY0Wz>)(D=a}O>bmd5Wb&&`sr+>3Zu|H_Sl1k@VzMq zKoc6s^UgbujZ*#n;lrxU<)MB1RY?NJglG=m!drT8}oDn;eQ@vkOwdZh*CmH1B2 zb>aCzv5?}Or{XAHi&RVo6FGPo4Vb0`Fs4w)^f4*BF9{NPJn8^O>45@gnNli(Z0lMY zzNjYdbIdIogbb{)9FY=h4WAIkszG2sP(+Zz`1qm7tjg|*NZETCGlJ(O{#rtBsD=@Z zmj}qDAd>={2zC)>5Z#0)o_K=x-+zC0X|v&m8`6$D?#OIhQ#tZJc;}sWSRnvv4Kgig z9}ha{AeOC#J&?VvTQ`(-DSjZD%I|cV4%D->mFCaK<>!=5VhwmPUoqk36cvXLsx-u- zR5lM>;cLl``9fxeGn$%dU3ysr2(}S%+>YtPH4hIvSiMn<$I! zpGT~yHDijd#(;5R$bt5D2!j{)GfL8o3c<8TMQ-9WsLG+Y6Z`)P*o|y}h5RX}oWims zuze7CcM3oJ@B@P#KxfW5=VW^?7?*Ymp*^7;L|!mZ1=ww~%{DB<8dckQV3P)8+R;ZJ zow_NHzf&uBRjI9TB2-0C%kLvNrJGv3FttqfKL5TBEL1KxC0SQ46pzSaNKk3=J4dN$ zD$QiTtLsmqjIw09yfK;p=}MJ5r6Kc*$XTy(2E2JYh)B^mHH#N8`}^PjPM2SPIco%w4%ovWZ0~J9VM8{`gMW~f z!Ili=g2}{Ui!Da~_{Tqr-<3c{y${dg#0itl6u&9VnQVmCfh$B-xK-8D(+^A|faxm@ zToHr{luTqTE2BWUij)_dpp#HPs`ATn#q@H}F@=4ZrApSQDUrU)t_jfU^Hu^^h7XZ# z49|?nkUdjm9H3{@d4=r*=Yyv1S3acs!(Zaj>q%|>Knpl-!LXu~j zdVXOJ$2SodOnT{L%;Niu9h5*IvN9P6G|8=MY@G5Rg#s#5AX zfRzr=;!Wsn$jt4Ve0le zzt4e7%7#kRPlhNY5QQQTB%;Nmp?ELiRiYG$JrwCxS=llGi&PZ}aLd`(4B$j;_0BYb zjM3ocPZ)DImB7W8tf#JP0`O9rMznKPFN^ppDDx5*=3lg;DQ!C7v65+}Kfb^5d0*T! z+bFj9#N32^g#s*UAAJ7$fZ9B?v+Ehv;nyZNgJuxG^T;EQu!ayGP4keK8SEI$6aYS; zoM5idP59`ej~E=GMFc?Zwbx!O-wJskbZQ$|%R`=a#~pXD5Fgh0v(G+zN7v3!zIVi9D*^Nbpj>{v~{m4i{9DUkxY9GE1? zNr*NXWQ1LR*6$N*f>2Eur>9SF%XVr$Qz{`4oNZXnnP zyVy;D6F|t*z#_tJ4wL~Qbkh#---R+_OA$Ow1Q}VkX>_8ZC5va|WEB%B##P@3YQSXn zU8E?2^kcFNGZ~l6D$X7aH!8Xz(gO90OaYwKy~*hi4PseVS)mGL5brCM2W9M8mPbY@ z<)AOy*)*V}PQM+XiF6@Ga$a;p+><$1w`VZZ(MW8nGMzy8$~YX)IC z_CdlT9u5gXDRslfhrD4?55rh^VuhU<4vj74+ijbas4tgc`CY!+i-&%qx$$2&sfbsK zib@1qpx{Kj_%2K`@x4gY=s&v5rT|baY(}y0nNzz$#)W! z6~NairvQrjGm|BeeN)^H82ZEUdr=;4!c$>xWumDS-x~pP5@79(11}r7U(7{NP9~!Z z3xK8KQx~jdxpL+3Q&ULYZdDl-<$$0atQYngLe|xZ;=(U9f{;@M0O|&~z}mr2J!E0f z^5LM3cKOHv))a~WP+ZtY391d}HJS({YLjvx3{$!RxDxEBv<)@N zrR2lHJC{!C*94_`f2)4-4=U*$!Y9}YKE1e_$#G%KkL7h$5XgsjPGE1mH;FcY6#&UJ zRkTV5t|mv%kqu3P-(O4UR3?B5fNP(9_MtV_Sfeo>>ItLHz4zXmuDk9!rqr5%P6nLZ z1AqgY2uu5oHrj}~4WP0BS}=G8rPoBMbrWPCp&rnv;(EOC$EVT6hHbUl$v6wPt^A}5k%M2Q(sZwamQc#x5@47tpDI>MQCQ+!MooE%^e9bu*;qz_ zQ>ot6`8vqDD1n&Zs!0QUHnvSFSB+x{?OK};sS)J+KrqE>vMF0DS|uA%*m@h9%8FF_ z^`TfEQRI@1g#b2Fx3=$08f2l{{e!j7dg zs{nAr4h+H15x;-Buu_X_cVC)B5^&@@0R{r0Oa!S)gQmLI)`YJ7+hW<;l~#j#f(7%?CPqdgIU(ZP<}}4b%mFCk zo`0`_D|@c8G6?{~bIx0ybqIdE}8@S=z(G9TXSL7$D>7*0LR&u>bwQrO+R#9H6%pz_hg+}SU%B}&Z zBK2FBQD^55`0P!TcSX+K`xJ~6mKqa)mFRO2SIbI4M@h~lE;Z{&38boqZ+?~Gr=ap= zn$Xrk_5(RmC*ZZ@5E2Ga>>B0G65MZi`b*lj)Y%rk600qgkQ z1eD|Bk3VLCK5W#m2NUce*v?Wj<^wm60(aC%10Z_pX{WJVEXYC9cY>wNfkpE;r01NL zZMl0np~E}HjmBr9)>N*XjwuD+Mc~R)kHDwXH#N|aN&)}OmpXx+u74m>GGeT*pzt6T zbCh`*(xp~unHoTpD6w29Upbc&R^6E_MT4VC&%H3tM>rs=Wm+$hD9!eCOj^7|O1&!U_(!va-g1B(TN3RO|}^e1Hltq5E$Eh0@3xd$?@m`Qvm9%c6_R5dEigfxt(3uXC*|3W;Us-74Wi69F<> zCRE~YAc*1^GOC{0;udnOtkCr}`{6)g3Q-ioSCu+cHUOImAXc?;LfD(|YmtBTwj7w~ z(5ON9j;%SlBR?5%;?DZ(ug`KH079qJr*QxWT;G6IgOz?a<%Bm>P&lyrf?&S4;17)< zz5`_hEB}E52WrqDFxB0?(_ai1&(cz zQBtMrw)a`v2!VZ$FGjJC4&2<+r~}B@%W%;ewrn3^R9IyLJOUgw$gxHRSQXN&J^Lj9 zt+)BX>;Mz~oO8};3taH01uZ0m<>#M&en;Sf1`;5G6R|-7byH5b+1YKk-PjAo+H0@f zF8QM2FJyHvl0}}NlA7`%GHveTlp<3AA1E0%-+XhnXM-)AUKdGE`1nfRr)e4}jWXB~ z$*B}TD@=M*$WOYaDFRqF>h+}c<*7ves@%Gb!s`+R$3+qE5{MbuOj$WY8BHu~0JR!$ ziFRwXa*bh~Z7f~a-l=?|(Q*JGQCw#Z;qym@($Qxo=C4F$&YZ%5TZ={;*e5SUW{g^- z!bl7B`O=j4JC2g@YoNs11<1HyhziOGrV&j6^}rUK&p!K%DXw-Phqw$} z-3081gjoWNPoV|u6lB{1SOFyPp$|oZ+=yKoyb&-YK-4HRigDwr>0d0cz=BqecMU57 z=9+76%7(uBu9z1UfJ5b-gP16bNF_|}s7;i@_i%0UdXS=iQhJrnL_ICAZCO2H`hgNM zioTPd%8J$~IMd2DuFLPTG`V~-ZU+i0enZreO3SFNfMk`!E$6#ld=%)^O4ZJlo578* zIi98F@-lgO7WXAkGiNsflBPn`D?AfJL34}jMVaLE7KQ zlxzhTLj_gZWtW}l+;h)$Y5OEflv=tJC}MIC3PCQF716{uF{(+Vmq^Y}{s2~4eI?Z< z(I9>sWBI&{5daisV5&p>n^R_fN(X7P5${4fg^Go|jn7M^6uU)y7aE?jcOq`PkQNJ* z161vM(Y)zC5=b$=bCE+4tgBQfe=i02VmnbELE8DIN(+Taqb16;O!phKJBDs3s@_sv z-NYXeHniy*98vcA>#sAL)s6)OH3K^?xLhus!6?&*b`O9BZ6#PYX$~RxdCKyD@&nZb zj}_e>OdG=Ox8Kf`8bEl#1s7EB@lVAO@99^iy@@WF zDl*JO8pu>xgC;WjKCqHM85LBb2zwKH3tUa#z;Yby6=XN?DB2Vtu!Kz(3^_q{wM!q{ zX&~DgZ@lr?{wqJgqBL*-TmT=KLP)<|-2||h*Z}~OjR0IV3QH9r8?=%F5clz&Nt3m< zQu_hC)mB^5skW~1dy_yB|5_n#oYO`CjZvUus7@`VGHQTm4_pa6; z{<^B9RZK;R+E@45eOvVyP+m2cn5Jx)swl2XpSwo#ok)j9Rrn<~XqSZ9GQf)iz-6<| zHfx&>gwij)^b#Mm;q0Tz>EStyK;Z!uGO>2vN<(|VXcbf+fGfz`x}hww9}!B1@4o+@ zl?=f`K3j!I+Et}VC|A=MncqWc0U6e7Ltmq>Z5}Y`m}Z)3*ftE_D*UoWaX8zLaQYG4 z_&`HCE1!TQCL7faRYO4?1)Add8AdWH;$ZQBKQ)|92{ykqyhX!X!}%JrA(S!x8?A@N zuzfoA*yGTcV~t5YRZmJk{8p4r>^dMMATbJ9(<2QOMzpb1Jm_9*qNGgyZw9RLVW7Gs zAh~v~vh-wo3-A$uM)^4NbxYu5Vt$~m+?FxFkI{&Jt3rSJeU2RDiDq6N8Fp+{t*Xxm zm^cWbTe>e?cb8a~EZolpSl#CN*kg~e_XpT>1s5`<@8P)t-~uGFhW+?s$MzYW!E0<9V~jEQ-=vdG#^64~ z^fS;5Gt9vE(@Zlpjn*@o0;G6h^exp~#pt@{L4ry-t|_LYzVQoB4u9dBmRbj-w+w0? z3slG>8J4=SO7(J!Z>zlgX&I|brPDWwZ4@Bqez`>}E2s_I-|IC@>DPi}6@7-I%+{+R zzh4BvN_k`QgWAI6fOm!_-&yzuMyOcfvB$BU=Z0sWeU`24A>-;~;EDi`r$`&l2fJ~d z69QaOgUtmc1i4xuu0na^ucx^3)isxW-EhN=miqfIvz(CU!2}|WX+!DK@PQ*>aUolS zqr;F+NFNj`fQ`Msk{qiV4UiTnyr-Ue+EQ!Ja@zs4Kusc`zu^9Ql1V0^$t=)JGRdSC zjK*Rx?cc9I%O*!3y^oV6`g#rOfU<1jKuxA~p@|i&1Dw9??z;#&#^~z|&{7#q zy-qnRnx&tBEvz@D%HsLkL~#X7anTjy%x`+gYz6RYiwL>52`UTeYZH7_3dMUHzZ1JR zvf+RK`yX%Vfvl*V2MFvZge(cb)$Tx8Obndc*tc(A)<$-c=fN`sfDZ0#P>yZ`*ioF* zh>h8sTS~Av_~Zap*J&-oz=n46^wUn`2@EZ(qoyRwR+hzl_`!#^4Er*B3^0*#zxnzb zI_~)6sE-AeEw|i?CZA&R_#O+zlTSXy6yDu;-^D-$009V2ZQ0U6R@;lcmM9M>VQfbU zz*qDP5q}ELGq#YYkSA3>`}}jOpc%?Q_Q=DJSgLX;eenMKe10YRZTjh_w{pjMxQ(Gv z9%IZgYHh5rnBTQ(&jSA#`oOIx<;~Vjl#&Fam}cR-Cd$6)zL63uyu%%D4^kS=SPEB5 zF}6Zo1v}|4*{s5Mi>XGdXiEmK0>z}jsS>W~8^A&!WqkINfyXaNg@NjVNdYYBvC+AS znu1$p#Dl2=JUFyV52g(`XajPtDcD_1bAUh}loJH=Py%#1kvare^?&d&Y;r3Omy zx#ypwAy!NPD)60m-eIK+7Oe#=RSL=!pxV zrKNhQHj->%Mu{1bXU6W;#!}157o+Sj0hLi~Bqgd$#fyfkseXvilYv)wUJ9o4?*BzE z5@3BmX>>Y*3_x-B-FMUV*Iyrx8!H8D&W1HSw0=mhQ(I!gH&_}7*@Fp1Cosq40)+;`9*RaPOnQd0Utr;*0Lpl*z%MlWNzk#taqKOcSc zA>DZ6jaHs`y#;|6*$)~hsznxAlonld5tcVe!Llf}XLnutd2^&X8C6sbXzGRfF2vO! zO%4$@ki2(?94H`pGNr5cS16Uh?1hFxx?A~+FJ#^o__poOUlnbooiYu;QfouU57f`k}M}b%dGDUDI^qY)V>i6TXj{=8Z~;}V-_O3$etf?ZhDw-eICHVf<`w2bYx3L!vyhK<%ZyK%1E zn6n{(;sV&rHrs5h1n6FF!GF0^-?QuxOhVwwX46eKi>q$Cfh^zY@vYy3dc{rx`~x*P z`y6x7a?37j<$oKnnL@2>e$@rb4%yk;Z@)#azWSPFD_^G9EnE5QGtaQVJp=#|w1((| z9!sU#)!%#LsF;-r6Bq0$KpvnX^P6PSN!j3cnyIH@?e7ehO@$Jm?*x5gJxra%6NHW2 zDD9f$Q>y^D@unN;4!gj?xEVhFS6+E#ySS{$Y1e?tGz;GI_9+2W&JH)l3*}3TlJS}x z52S*GuJtcb?3+sE?aL1!>X8;y#^Fs3z&Mq3AVwxL{zq_~MH<<^doC7$M%WcEZYh^8j`K zrkifc8qQ9>@I%04#9_6Vbi3^Gdum!C<-Hn|_UD;ro@S*4w14x?J0B70L7s*)Wnksr zDD}4g+p@p|nHS_{P<#NiS6O9MT508#Xy%z_u4(E(DSd3ICl~}j{q$4xv<0Y_txO3r zH}paO{u5du{UDlj(#dGhpn=r4Uq5zyqmMtL_uqS;-v8izde_RXKyjkq;UO1*2#|p+3-)O<*)qdCgw0I^6{e^NNm2R7 zcm|KOx7>U)-Erp~>}6x_dFG)FH`tKo7(6&kT17ckM0Fs`@+eYKes^~>XvtLTGAt7P z+VniXPWQp9MCGgCW0|^NukbRsdKQJr)<2fN9TM5b1}ZDwX3t9+$Nc_h0h^x-&@g!* zGlDOzCJi4}aIlq7n}ZE((i)4Lo0>4o^O4IN5noPGuX0zv)0-Ezy#tWDi^ zyX{!k=RhYR4Hk&oEH!qM6?B888q2bL3t4#}fNK5)7NCLfav{hMH;AbtILZ4o*|Ri6 z-2#vmDJk&{s5EF8pM2s;di2pp*jp_qJpk;&3ok;8SOo(sYYdU8H&B8Y{}PMeLk~U3 zi^h{yHU@cjsdpA(e2%?s?p^2;yJrVp@_Dg{tTpr$~j zK$g=Kz=8w{Zkuhkp>_f00nqFr&-~2CyzJo`lmVOv0>Hxdq6kiMa%SI!Ysm8;uao8- zIrvfSUQWjJ{?kuCv+}%anA*Z5UT2+k*)|OZq9IM#P2G3zeU^>9iiPzs_yxtW^wLYy zvdb+;eMal!lPrLddgSi0%46#f3{HO>_9OrDgs~tznibB2eFXIiL46e|m5_=Ah-?z4 z*V((&wvfX?!+78Q_tC4byu#^Y+$^)qvNYG+bF<7Xo91<3^nZs8d4kS4`z$uQfXs5M zt+%0BW}PK!T8-m9Bg+_iwM+rk!ME}n5XnNj1Vo+UH-d$&DCKABV#x50lD%FG7%(i#c-PD3IUu0|fVZ5LW^WX*G0BG^QK7IHg-0{bsfESx_#~sIN7pI^}C!3U}oMK9v z+){@VPdt&=HpW6I0Eq1xsU9)G$(8Fz?|!=Ul8d=-ms)CR+Hj+d;?}YJ+h*VrKrg|U8tOzkZf)_(zLDQ4AWLH-Zk&u< znTOuESj0aXgW7=cp(P9Z&=V>&8L~FXzq^Z;Md*jQ0m}Ph29B|cDrTtd( zfK>xqfEWbnkoQ4xfuq^}uq(b_KY*l#4=3mOHG^V#c(%9fU9U# zfAiyy!{~`8hw$R|pk1_(_JRv7MC)2Abeh5eEk;pCE*U6aK$+fn!wswv-Du-YXtmW> zV{nz<F071Yu!mI9s2YWLuwVvv;uO>Y4O`v}Dx(IqsR;*jl8Yzw}3n$0)fc%4lzUVY_N z3z)CjGQVVj?|YVGhQoDdn|*c$Ny@Z>`Q&wd<=iZz@9(|G87>2aL1p5Al)2`fi`*6_ z@r_SOj-^jN{e-T+?mD{4E~3~d4ptHdys~b2UAubc3*2sz(vMC3xloXVwJfwhG{!yL zP9>_Uu1Tb*sg`{ea}JSfY-8iZYqIeQg8S^-wrpm%K=N}_Sfv05e_#c12u2f|2jGI1 z2rihL?7E;a!~R785>DW03aBqUMIarps=0QtGzeiQ26sE4)If3Q4mWCWO2Iq+!EOw) zG04_Zn(jNQrI9~(Zy*yq_LyVnW~=tc=IpJu+S&@{os+>wtRVXWD}RGaYiwYKxd*^& zOt17n8DRVL_~S$D_ct+UVUmNA0_8T?3cqKbc@|66PUiM2mIUgdU3>+V1j85&#*|G= z$Gm9pOGzbPpWAe4vUS(Eto8SG8?b)c%fAYKfwdhaE09`D4R2UDD zI0W1WB>#*s8 znL;T5v>>a2tO*0KDL`%o(*>}D?T#&jtO%#-K;x9V+9?f600-Db2*snnEK^@8{Y+498}Tigojm!kPB^$HnL7410^sH7ShRjzPdNpk_?-wUch zv&4d-@b6=C9y}sj=qn956l}oY`4s>J+cN;iU`rLQy6S4QpatAY3Fbw+8BOUyCU@U` z_tJ$IT*xfz-1E%K=W#;(An>$SPXquU_JCe&fR{}`&M$}obqxkqoBMz3+aUW8bIAU`~1+Nk!mkO{+%4!X)uk# zkegzJe13`m%^mEvAj6T`K3N9rNyI;#!`QS*8YTd6{fu~$%+CWl85_9~S85`gR#L>r zmY?-4MYpCepQMy3s!#54hm{-h7wiTgDhyJhXxx}jI^1CLTy)XDn35bkcrg3UhoBqs zne)#(kF}kUMWG&80I(q$d0_7%jC=vkkO6{f!EOa;##lT%G(D%C$}B;R@G zT^jQEV|LNG-OA>k;Kg9^#h0K}tt@Y%i6+j{HpOd{`KB9h;C6xM4;bxkVA)Afca7|x zZyQj7CtD3MSlzYOUWfNijxk2&eK&$L$v>&SR30N`ii`9DDas-;RDH*w^?zrPID8X+Rw23g0`0l%JIWGFiZ2|h; zY9pP`FUSY6hY^Ot@Qks*f(!9RaTw3$6l-zu@QoqkzGo@2yYIToYNs#beXGzqZ?^ds zwZm3ap9-)*Isa$nr~f?jpERyj4q#EjwxK4o7-pX^jV%RttrZ=dbI#cep8Hvf8uhC$ zUatRIWQy-XJ=AzHnrbTnSNbMh%k;6Yw8z^ErYd;KiquhO{0kS)CK#|nz;CIqiiGE8 zcd*={O#=H71))&}UO!dn4JbkmgvkMe(o%re2nf63ud8XlAynLJ*@+4>1pGDyxSD~y z2u7~UEw>zX624+012D0@2*O)a1e|yk*`$Xaeu!?n^)?HryYPf3!5+wsx>_L+(y(mu zTW|8VBM8zV+k(Iu`w~w&=|uLB0R_VrTWm?Q&NeF-V2A~{OD!nFsvg?A4K~=2H(Lk! zVHorf>c0Kf+w}A^Pty}ahOjBc+m`hNOE%S1Q`>)2(sWi}4*y*M8<;s@K^en>4eYms z88)Rw-`B0>oDKeHwT%Fk&n+mvW$OXW=qoS3!h0ma=0Y1e_0-dF+2@#j4tBkRP18M9 zmC8zW@JV?&H2cAd8(<=Fqot}3Gu?&XP-s)-*-P#>RWEL zRdkiqZd^S4@WWQ_`42V|+06FAlEUkW$pAv75%SMLTHG2zy6H7egB{hLdzUypqeY-{ z`>rLM*p!z@hcZe`$h^Y)s*B0p4xoN<@ETPV8wNH^4sdX5ZXg;0j7OoyhdD!&91GwA zEhL25CF(5%2;1R}0)qFDRuPcg0~Y>oZCSFFd4sr=J_hpy05e!VF~n=&#A7{>72%$A-2>U7 z*dLQL2RV7HJl~9fV@ zr@p-X2nT=6H{X0rSx#)*37W$*&pgX&Uaz#1bSBz#vrTysh~7-e$rA7JzRpm0Xzk{l zb1quS3hO7GbW#;J6ttv`(z2ZLgsi<&lMk<2B0nK)Hg3DpGtWLl_ug|4Yxuy5!Li^n zOD`P(NC8jFP`(k{rA74kkjJ@A;H+>SE11W^6Z)alf1$s>{q`F^1K|eSRtqn(2x}JE z7g$4o;~Es?zwH=-ZP?;=jPA74&T5aOQ8Tx_c2TA;DJp3WQDvW`zH(Q_Ya3f>pJG~Y zWIM$YNOqEvyvw9(W9ZP1ZlJTkpLftm%BK0*!l(u`oKg+>3Ixj~r2|NG$a=t1=4Ty- z0FZ$o8x&Q$lYp=}8|lF$1EIXKx@VvW;ldemtF-+`4mAEt@vm{Jc~Fp8h3B1bUJ@_W zH+sybch~&)8anilLug6M62i|s%COJgd$Z*@%tYW(6)v3Nj|)^7gyQgz&+M;H4Oa1> z!ca#D+h?{KTzF6baP{%Ra}rsbNGTZwX8A;tf+q!LAyTe+Bh{$o?^L_EZ*g$P-4?_k zSO@sRFaBnmZ)Sme{%9uQK!+lWUIG}%3C}qFG-gxRTyw1`nAgRs12;@_zVQW4z+%|`@U&A;q1k4eoqoUTt~7BtA*v1V6|Z$B0_>zrHGG$j#E5oYnZQ27 zM!swDmLVdshLEWZM$uQT&vh ze^~134AyEwI1kHsn2i89_qA;Eth3C@?EsnAJGL%3H3%9^SkHrPdeO>!u)h&(GuSR@ z(w1CuNt$f($@BoN0Wk62#Lqtc%ud)ZS-}8Hcx;>c%4!xr|KfA2Y5c}gw=EvE=!3Dm zb^X{@!w6X!-*Q1HyWL;vcN#|Mjm6`G~dOZ15X9)>b5weVBg-x#&MFr3=%N-&jS_T5GMX?7LER z63{>W)KhfqamUhlwhazG_)wZ;(n(VNYalB?yQa8FY@ni0N$2O@YIBreVebU*emx?h z8Vf3~WzrSJGX!Ekwd$r4wY`iDR8~8n8zmt4OK#AH`We6lt9n?v=K<^>CLpZRp-C(S z2a>*-kKJee}Uwb&d34lLBUQ=2)LiMWq#iN1KS3+5*k3TY~znV z9&hl5TnuIp?4zs4+hQ5RK=%Fj-|=Q|cv6LSG34*tl(B zDS5EXdC0%Rg8A>uE@kQq+ppLYtB99VN>J_`ebkX`EP9Al2u(KGL4y2^^NF5VscfX$F7!hF^@~t&qiTaT1n@9A zgUA_S};xrSY(prL4&>q5fJxn;j4x;XutjAau5rBg& zNvo~4Iu9`TYlpjPu*y($K)VP^kur7xo*&>!2DVY4+>jpFO*r?Pe){QH9yGv$z+{t6 z8tvy~{RG28V$r6w;-@x*_6-y+{Bc1+0AR%e1tB_48^Y%Ic`f@l$LzC5%m0{YG*nH` zO!gii1|w69hld_~kmYxvj9k5`28=lvfh9coIgnRHARNBA*jc8AlM}3+j9`$wE-R` zV3-PE%F6_SDX20~ZTT6DG9D&4(gG;t@6x?%Zj=WrE-0Z=T590<=b*L#AfPr9Fokc* znnwJ98i4k5XA4TJTk7#hE4O?6vBy|30mTB!3t1k7_pq)9y9P4{w~gv%wtL&l%ETt@ zKcO0skaa!v^iyn;gzZA0evrlrD=cp*w>jD4X{wBzC~06PK#z?OrTAn} zA9T>cH0^+CYYU+KP7J@;4yAWF>z{*IE4TA%i05USj3?2q%Y&E@e=-YcGOrRwXs&Y5 z@{c>ZcWw(@KUWyp4cgEQLOuf@^Q8dF1434)z)Jx}m7tOUa8UQl5c0>034nvP60)(f zfYe<<&I8j32;CWovO%e35bim^4y-H6A(G0z%R!G=z6A{;6c%8EcHM1PrU(F5u(5(b z9zthOV5?ec>(fs^p{xIMHEYta4G1S+545tMFydi1eJS;hkaKi(~4CmA%9lUw%1 zZKW|;#dF{yQNMZ}N_-NCei9${Kexah-Vh+m+Qe$n@-jekhlvO4bojI{1%Mt_UhLbG z169@o0058#bq7$W0}{n+IJiT4M;&!E#h#3VrY<~%y%Kzj0ffegXBzr+g^E1p=m$3T z%7I#gWjy3uTW+}pQ=Xu%zPIwDJ@(kcQktXDVTb*hW}jnrX8W*teE9HTw4Ytk7qOE( z)Z-Y*RJ^BVR zJNV28HHob^aATAEm)Gg&{)2HYZ0maL{vwn3#@asc{D5{SVyF-aGnRE$iCrtV@e6x)`&$W%f}f z=N3FrrdS+cTJc-kpA%2qe%~V~D!9J6;)=^@p@kP=TdmPOTU`PqC@ZeG{4%EYA%BDe z$gyFFY>aA4$A`6;y*>Q!KhxNjAhfqhvO>NE<)yd$cws#i z*N#h3{^e5VXzdte?d7!->U)Y-&Q=@%!`%yk_D^1nLYZG`yXU#yoSy5Xv1R!HG zIqx;XrNYnMX+nAt!Z$UUmjtDD?r!9}b{6{o*8*5RuzO(BO2(<%dy1s#)F1ftf-DT1 ztd$Bo?TxU4{yW$k1AqY&vb2)o2P^iboBo!CtT080aYBUb9_#>w>M-$0hLe=Y@)+4& z;1d3%P$x`&u!Y#Si0ePu)fjbvUDwV#@4}`bXP z4?q6E3jip1VKl`01Sjp(6I*X;R@7 zu&Xtsf${@Y#9)2#Mf8~kUiju;&el8EispTa5ZF=3wctW$Z7cJP`#c-IgZvDdLX4FI z4m>EjN-`QP(r6R=eg&er9U5bsAWx;qph~tCXIPhr_hta zrz$Q=;x6XHo5z`LWSYqM@BBd=k%f%-A;%44j2k zU=L@Tbv6rT2hl69yuvauXv1JU3NHq5jSa=aCU)fx29uIid&^F|d+xcHof5ug0c+OT zW@D2Cc;i62?8Sj(VJS<)KQw7#;2Y<~)YW0opy`z91nP)7!A;CdFTTW14nMi%6QnF}-PTqkey-IN!^;M&{!FonIM1}Ls!z!T!UIudnoq}8<`O=EuBon3$?i3!)d|#^-ht)IHH0AqcPtp7 zr2vD<2OoTph5b#y503`$MzQ0LJBfGlB6M7f0rOgP9D+QqZZI+LlfYp=a7 z0uT>1J5s?qg1Uq$3FKWkz6^GAlUbG~mu<=Gd}0*kS@N^g9I?)UMgUveukV~}f(^hjacXb5hUq?aAhyI3OS1ni^yy!ZKaTfv zN-q#HNR}UNtq(iwa60e&^JvdKcBkDf)e9Chj~~LMlTAhkTF^TE^wa2|0}rrN@}4w! z&bcUWnb5tfuf8Vx>&JPJ*j)i%UoPt)^G;tbyUcR*zLkN&RAb_aC!s|aU6fQ0_;yW` zJ@1?HwJa9};>L=HUaORwMEa?6bgnFAf}0$$2#-AcFq8c=%`~F|mh95X)}H0E z%xS4EDNB%=ppZVEo_6}_yoE92O%oyN70$Z10i-j#=v(G+9)Fy_{OYJBh zAvP#!7`uWJ-FvS+X>&`3Nq66p3iCv^mCKFCoAv>8M_WY*{F}k3SLR)%4rgi}pmpe> zhtR2~oodAi2e2`3h$qJd3bmeQVz zG8L98T17#BUiZ{*rv6BRkb6+okUd}(`H*xsRIiF`>GJ9 zNIti-AkLrl2Eay!B?YSi_aiwth4e6~!5TqeUwRKY2)1`fYv=Gj0M+%^-@vMGkn;+- z_iJj45B=pgn3@ZBGL@6#gZB(E2u@BmV|$>d4jXVyYIT2{${nh zOD?rEpTSvjVbsV@+JJqmu&V<_3ZeP6*Z!AJ9G6~6LjK`Xj04#E4H`6vPCD@f`s&Ls zE#?4*3-C;mAfz|rav(z)7ppi0{1`LttqE1Nyz zWM!bd!px{tnOwphEV9#jgjKnC?Sk>7ov2TW`Lm-M$K^TRd| z09R4w;p4)X5Sw@vO%dO_YwXDbJGb)6E0H8L1Co#K-dng{jLjUoP`?9^#NmlEHa|5A*$7Da$vX?k5 z2-{)co(HEp^WMBb1}Lyf0OM|2@tJ>-D(as_*b~4T(u?UxUWPOtid-YblLtJ9=T%V4 zXhYc2!F&K7VFBi^yz+7^Q;nh%*YX|O?5Lyv!f76I@Sm8nOW*6Z2tyIFIB5K^5FKx2 zTNsCu;+E;-%t=`8!$Kb0wjftDVqEC*8rpul?O9=Q^wCGM(nPkOOdAXHcH8ejAAImW zU4PwwMf=KeCE7oXtCk#RVo^$9<8S4Bkn6Db;2hEp3y%>)!~F}O2Q2`FO?Rfi7Lw_m zMZLTprJ)@twOa|BLQ_1*vk;n23BoBd(HEAfrwQ4~VV~?_;0Ujhyu@nRB zy3Vrk-hAT?XZyAK>QR^vx!ON0sG+T}*?OS`7a~Og$wJuhoz)6L6Nm}++;h*fMgB)t zGYQiNXrZ9F!$id|`WckP=$49vmT{Ps!C?bBC>O9ype%8!5IjWSB<;{H3bC?BM!XBu zTfO&F+fHZ~E|^5Xt1a9Vo%zo***s&z4L4%pw(19>M(zPX09HG=vH^<NfRD2jvu%5eBDL9_hGJ za;6fk=&RlY;gkSAr`N)BWnteC6ex9|ZhkTVYYHR7Cg$J5l6}`*cjc85E{kPAJWxz9 zK7~0#&d!46gpA|JBadSCDSVTDE7s0oQ+MtnCkJ3`3xWI!11AicsHPShg1hN#!z5q_3u(0vqwA< z{Yq;oGSqXJ_dyT&8Z6Gi`ru4OoRkg2U6@KB9Zlc4 z6bZ@`yyfE14wyC|zuGso{!Y)}i~r=moy3bDSiaynLV=jb8)NA&e>vKM`j2er9JeMJ zBYxcVH{X6k2OV$#F90w$4aTowBF2S}9E*R5)f&V7&SrLe>GTpfVK>Dg2Oq@keC%<@ zJ6A#!n0+r7&w)?1t6W4JWfr%A#r0IMg{gM_d^EWhnkwm-3{_#9P^)!lka?9tsDBj9 zo6fFrMjE(!3q~UfT%~U@Nf1hGBPI(5VF0zfoS0nB2l`ZnGP&l5VQM(IHeVgX!#C~Z z2e7bDe3P12#tCB=2DJk$)y2R?RW@1GM{I!&77rA`$Che>@&VhM0Hmji6YOimo6I?ufG(8iX9oOt4i zDDp+ML9H(0FGHFAX7thVZ+!NK0mDo-8a4uy>_7PRdi$NXc$?BiR_^wVW&3e#8vLTc zP`64_>@rZ)KrFHDvFEBDnrqIvxn9^N1O*0sV!?jOQM=k%VjfTiQ1bg**%xGk2mk3$ ztPuvA82dIGFQ77^Sp>y~lgvRWjXUl*DsEWFuz>8n&%V6f2eL|R(_*_g+1|eHZ~=sa zYR|TsV)!0g!pi0p73HHt9=NTg)Q&v-&vfxc7t^MjZ$`nTjWcdgEhe(iXr|aijYw56 zPOba_8-9Hz2~?qhJfRT4En47@X4!&+LpxK-x~imJm7<&|2dAHv${JOnN#=#4=pkzY z^_BaihZQ&`Fa{oMa!j@g0!W^)lL!Y}z=&0m&-O1iH^YMjv`dprsyD+*B)k5)>v_{R zD7+X$jtRjEVz9z2V=PcWaexScDW&UwUGy)y-O91xj~yOQLD_+Yga95CCvR1<<-@im zBm)W(8aeid{`%{@EeNXoU{w34r6A$*2j&xfY<<^UYi$+|FR;M;G_}<*vambI>`7Nb z-mAY6$g+1~f|2gSF~%I7!4;lDadaA}L6q&G2Ona)tA`(ch~rLR!2rj+X_m1)`&WBz zfBR23A@>WO;pn)JEjx^z7MSe$Vpd8I_Il`Bm^)zi!E{y*rG(9*vtjTGSt2N4XmR21 z3&+RB7y_8l)}Wwoxc)jm!DxQo)+QD`v8WBQp!Lq%@36KR$_l5HkY#mo`+Ig3W+ej# z40L0jbkwea%aD?L)lLGE-^4}CCzgi0XDr zE_~Z5jZW{I1}a#TaNeJci+|8UV#|d*smI6Qzc7)QZn{C@>_$U!!or6XzK1$p(o%U* z?z;P~=m0V0BL$>xm52YR@vJNZzT_2f=iMehs)nON#f#r*A|PBS7#D3JJDxd+oJ1ZDXkn*mfOf1>i?o!S=(CJRDh` zgh{3WbWGliaSUSP{^1tn;i(n-1F>+G(gEK8zr=AeOgbYY<%0fO>f1i6M03 z4L4f3-cXi1MNPaG+TRbp#(~IIj_H6L%SykQ%8z#1D2r%scOV zY*Y8u*I&`BmU2wHa*X;0UOeWQW3Z*juVo`>wM|Tuj;u_Ax75pQKf&-8iVY)XV;B=y zVA1!Wz)@cKFw=GPtywt{3KlX@jMEL8PDT+i({FeueNmu;CuX{7}| z5LCEffU$hh9m>V$h!}}x6j|xM_+4+!8oEiRoAlZR2%NE>u9OZa6m+x#u2c$^AuY)= z1U;ZafVWV0TDB1rT(fwO4;jJ+g2A1PKb5@DOf8=w8JMoCY%7=YWENnw`XV+;^7J zfLj}=$`@N~(U_kxnp!yO=%Z*}JE&IVvluC@U|D)NIS6ii7qx(-CaXvnse;t<@gF690=Yzu*I90m7KL&}!uYa=htn9R~~?z|v(%n$rRgJYSHC8E?2h4%qLHOoi@Y z+3X>?y7h#nwT?zsJS+Sa>`R&t<9ES@dclRala>9=HZF!5l>E0w*z=pv^< zWMQ?f+xzc30D~VcsQjT}g#RuaWO2+ff8kSxV1IR>)r^5k0s9zvK+5x?2I?f08xt{Y zAxiC)x9yv6yvc{X!bAlo7LcvMOajmFF9b|3lpnIX!E+9FN7~mV-XsgvG%S!W?8jh> z1$pL8H{D1VTyQ?OD_jFfioc2akF21dk#H#k00Mh@@WFp#+bYT(sJON(?`bw2}%)E71&_-_m6S>7xdiM&s0ytSWI=jzxnF=6 zZ$LKLnn1*$fPl%Q*gfBQA6b?YMT#C%L!Ok{`?XhJV>twyX_&0j#On6cQ%^FRRYeJb z94Hjig{u~vISG~n6b60)vM??Md;5|F2^>fYs^`|*Zl%8*a}4kEJI%6FuAVS)TA}KTGLooaix`4vD(fPEGv5n9eCh@wA9i|*UmEp^#%i52;hIW z%{H{tPCN2}tT2AXy9A3Swtwghll_w&49XNPln*)NP<9dX*S{Xmn&%L&6=ZbjlNtz1 zP?&Shxp`X~Z6{c{qmDe>Dq21Z zwM`?z{{h%6xX{9Uyc%SUy01bsLvzhN7dx2*#R!>N4mP3B;ouPEy!7IWS+15uCt)n7 zF&$RhC=ZLoL3k9f%23vdseDFI@?yN;xieygU;N}jA|_A}x`&rl>Z{CBR+ph|=q23N%fyo(`QJRwkTO!^d^;$uy<18J;vycdO2n zo$Ch(wgN59W)wo!Wl~<@J5VuTNkCNq1j5!P!~?qqFADu^nJ`J=!wV<=0Pqez_z;?D z=9%I|C<$c6RMCG!{Dfm9XM!9ksg9%o9mcD0+6NZ=yz|ay_A4EPkpeVuaIpgih}e&} z%g#Hqr&4GaYoJBtkiUZ<9p)ZjwXlr~`#;~XTHP2|&8Cz_o+jSIuoNaY-+ucYgCQ0_ zil9!U@ze0awy$O3uq_K7If&F`C5b%nbPKuRfB$=Rt>0tm>@}z~*r}a;);}3Q6-DLC z0P1HQD;fZBU1ya7dhwwMOc+Brv>5I3>MO6L?Bu^xXv!Ble$q0*i-VJUNnN8awF5Xc z>O?OE5UdQ&f$Z^QaR4iycJE|ZIoLJCiPs~;;*HGvrVz>laKRu;D{TTctn6&Rl|9E5 zWCvr8Ifm0T`OZt`5QZ(Z9dN|gVR`ZCIQP;{piePEBvkyx4;DZ_{O|+zlA3T;sE>X1 z0a~yD!*|$rgMkT;oNxjNxe;VxGt4l(rL^wn{d|AicVAj_jWyYoOAp(q=>ez!NzFR{ zC!37vl@WE8R8Od%hCoWW@i!3S!?WuJ7hcGeOp~i31RP_Ay@;Dz+2TQ#a(m$Z`v}bz+r1g(nd;#Ax*+dFT0E> zNB~#M*9X+rY_rd9WlAqtLGGONzylAm=LA^S|K*rt?X$Te1yoyy43VU^NKV$;*fgY> z0XfJ?eJ>JEF^q0!;>kKXYeG*v>2G{WckcgP2GkjQHR0NLYb$?(IRLiXr0x^zxSViV zU*j6CYGAekiWtfaEJ7--$tp#pK&212{X1wpz zZK5VIZc-Bsuz&-5z;n(%i@5>`N)Ak1TpaWZ`Q?>YT+VHyDdSXMcy-0%42nJVA*n6_ zX90E|>@DvD&eAZg)Gj7vBI_FrHBGFyF%HB$Hi>ytr8JCa2fnMIeeCfOWAk~SiX%9n zA+-;M5&z4DCXmZl*?ho`{uoiXSRR!gky3z|=TS zLXwMK!Un@)1ROl`KP&(I=;M#-gUjDz@x)la_nv#|;7e4(bM@nZwdMWTJ8FwGC1!$5 zEY`V71Ibfj9D2mIAC6|458&_#x-T>8<|hNLZdt(*5z^<+ATUS3;7rfmI{;e{=F626 z{~+{+7IHMXr6?LtIxqw)VnkjoF<5buGxFx+p-dY5q4&Ztgl*SUd}2{ZNKQo8%NU^0 zFy?gy^?_9#)C26Akk&4{{N7Q7V&Ion+>lOq-corc7C9{rB!Dm$G))%L6Fq(_%S-_f zjf}<5pv8o23cw4)P_#X77aC&>Dh1RX^03`@{R3Tc$;G_EyR?8ASx;GaB0e+~EG*=4 zXPtQ_yRIRzQ01UZvMqe8Lc6*B_B+xG&p*eeC}9A^<}wL#;FJ*lv~IZJI#CWqfiR`C z<c2ya;hoW`v+{b;K?_1iK?ItFwsF9!Wi4geh~kG6$OF=(om0h7`uB*3O|##W-e;Yxdv6qkPR6Nu zXr#8N1Xf!97TyI@2dq-=T}Z*%9f3Sg12UzA=V1b+foS3&0g277P4ZUqT?ftIph1Jg z;G{IkeLQUOVd~9Da7ouF2@a;fS&ezSfMSHq3u!>Eg41{Q{o{Vh;55Wd=}|TTsRl4{ zAm&Ri88JcRKu!P@>mVn%pY*bQ6rh=u67B)Q#~phd+a3WJn8LL63@23Q0gDLyy6>^a zZhV&F=U$E_^V4l%V*7^x(}%tH*@xW)VUHrqh^k7ri)svaA4VM9Q~zPt-MG&o+XBTM z;`)is`GG})+zqFT!(1fIdZY3IYYUd|!VAxj90SMA1VC%7wHC`WkzN>Ev0Z(8ViP=+ zK@VGC2Gts?;D1A&kbPm-!~<4l8sEj%O5=j!7)exCYR_=kPbv*ZZ$)7~-+QXQB9Xo` zTBWL|*wVV#n#3wQD2&uv)r*5T+J$aFtD8NHRpA+tWF6CU3>Zvk$cJP+Ttc43G9(t} zH?y9RQVIZO|6#Rb4+LT&$3aNWBZaf_CeZ^Xb-um3)e2MRpC3NXt2zL<)ruZ`;DP9q zECg%^!fHC)P7-L-1`Zs+o3X=WF=RCLVG`gwjkg$(5iG-(u{QBL64FnT4`h9NX=%13&xEf3A{)FfI^y1UEu! zTF|-hg7e)rDOU*v;t0?Je*gUsbkE&)rN>4tAjFF&Kz1?lvaKLynHQ;G!uyV#4C}Wn8*sK!Xy$vW<&{ag7;y6{xeNG z&9pSf;KB6nyYKK87#IfQo7v}>gMY`wacX|^JQk^AE$g|*?z_|LLthtdo2Wp|B8#dR zCkxwQr=8fA>!ur%981Oxpe^siBb-77-&z0s=RY;LiTZ-7f*~smXdPveJkW-=#lnjH zrtkpq#TTEa62t|=b;Jh0`3-Xrm)P>^K20FguYW&FeJx9O-+d?VLrnyLiSb4ot%vIl zQx&J3G!b}1AFA<`Lg@8iP9NNS#bvUJB{OO~hTkwR5PGN{YPMYNvM9JOX(#PyjBNV!(q0JONOgz(!V@h4JwGnFp}KI06i-_-31L zM#}Kie;Z3>H24^`5~i|CippdlRS6>znSN|*Ljt%+-X}8_}z#tM>FTZOz_O%2`+4qyM zJ=bo0QV-nZe4$v;y!{kB@-+_0fDG@-E3UK@;4szhA^ygj{FWZL|2}#dE~zQCxt!ax z&oP+#PdE|VYPkiHR6j66*!IEZ`-dNVz_EpfG|2dR!5`YEmV$raf%{Z`MkKm~mHmOD zg<-SYxFh=|CdrqMP4rKh3Q80#F2Sbm1Z-_@hJ{ixV3@%nvhON3s%?wFSbH9nhJn@mvd=6EKAsd7ebF+ zts>~jfo0sOMDPHRmpzP#S6+UFsR(x$fQ39Txa*7A@>yGgV{k#P1D{in)AUq5dcev7 zNqQj2$x22}CC$dbhm)I*^S`;6Yl z)_G0dm;2dgpU1ukZ50|H+FIms#~rupMm4c$?5Gej*xPTvy*6({pSm+J=doJHyIEV# zA4bWPiG7mV(3dp)i1QeOfSyNFB>*>?U|1?)!hvE>3cp_0)#VE0M-~aGEJD1A?$^pyh{SP=Gv8|z-jRX>-Q6>C} zWl>R0sx4b8dU%mm%qqr>waO?eu5(KRpKj#To~HDUvVJ%25De^F#Lk7^Y_I`6^6*16 z_gr(cZ1KexUZ53MT#2aJ&nJr{i}8+XBl7IB;BKl~`xQ!XOF51c80#Sy2J=ah9!FZ@I^2!2<^sUV_y@2Wlr zC*?QZG{Wa^D9zov%uC3%q7Xj3&p|^1midV`Xm@LHS{q=L28@hH`9RkRu?0G0A>VzA zZ9-M-I8a{r_sp};WP{7lSav|bT;iLrzah#7RHPPNWzs6>BSLr#3JH{%?;9dnZu|S9 z*G3YBAt>u=XvpJ3nDxv9g!FLAH^t;rkYq!30})BK!9;*c>4(xP=!ln6u4p`%h)5=* z#7fsLnN%Z_0i38)Q(xx+aiDeFYwvydtW2Dv2#OjY4lfxnUd7(dDJ)g<)RRxLYzbh6 z!&f2Cffv?2_Sl{7yEm{-q}xb53_yZk_~`%B!H2LW(K#v9O(yi*0)Sj3cqDoEop;%V zk;y7I*4Sgwx|aGn@7#0w>;j5FXd*yh5nOe()!AbR4my!zN#G72?FRN18^{e+*?4kg zf*~{5*}JV0fETDh?WLjOHga2P{wbSIy#wS=7*{3;SWV^ax>~K|K>`PHxcpnr(%w6Y zkSWHJ3M17l%f?Wtgv9Y^f_fXJp^2R=QDF)FjV>)wZ4jw@F(Kxh(>Z&4{`u!rT38jw zx8MbkNE6(>gN6$#?_f%iGN_X4-om8A{ihbZ`eE;$01LHh*?(Bw+=gvZl?dtGV@dZ? zz%lZRF1o1xh9nh}wVf)RY~%QG1Sb>Un=F0*ft=)I>iv`|p@2+={CU3E$T3i-rd{EKD?dh_W#|+`v)cEhCg%8JvWa7 z1{9(+Mnr$jJo79J+RXAvaEt9@*jL(&>^Ay(3J0FV#m)bN-!7aa^!Q_svcf5rpHja= za6gl!aIrDo$$RDaN`0@|jHgAFOd>crU$#IDnG`jYkH`a`PhWbKh=O<1-raKmD*4Q_ z?pkeX3M2v#49pUrO zKa1}|3{X@E%s!g%G|cLX?PV}YRDDbWv2VWlnhj)wS|$x57Z;#;-~IR3+6H^o;6seE z0UUcrfF&6@&`cbJsa++NBwIwZrv#*mGH{~QW+p#2K6PMXu}s%MMHv8>0yM?H|HB{X z`s=TwWtUyfQn3U1`iLWsWa{JXx8I^Y_T1Bg#_jaET}*zn!G;zf?&cG%abOBOJ>aZM zX!7bHnS+=MI5ixb%HeSYvMkxQ5lo2G1jjSj;O%UI6*~gnwCq@_vlCAMh;bls%Wt$! zi)CzK))s<#8^#KN)R!_X$N-_p0ehQRdy!rR%4#7t*nY)Qta0cl&?eSk!&@%?WgQy( zUd=x)bIVgaeD4V$Lq;5jMrk01{9q8Zkvvqflt*5TI6%nmZpEm4Zmjlg607^|k z39Edlls#B@r@0J4L4>?RzOf9k(@6H80;ko-udY7 zC!b7z+;4wo_iwxPHag_cLv0_vOLyOOC!dmpvnKDm_g)Jao3gFm{(sz$-Gqzm#I=BR z{}M)_@Jb6Gao1dPjeG7JM#$W=Gz@D*x7~JoHmG&pDBK%pa^b5UN50*qWSprj@w1p+ zxZnl%Su5hujg>Co9vd9P~iZmFgDyGUzVC6!G`c2#6yB=jKQ8jG3mJv)BT1Z1bQ7~DVi~uA3Ts%`TVnk9g zgqKJBo5QNwVOIsUd6;+zpu9f$_+vMq#3aYrgV_8Eo0pVoT4fSr!@8|GL{VRQ0rFas)mb}>mgH()bKht?FG)s~HfYP=HZ0#L7u+j0Fb6L2+++>sBgCIbfyp%EHD57~!A=OaUT=HL z=@2KlWWmWf`BcFw##YEA1Dv`Y;vA4DJ6H)~{jhTJNcl&s9Y=-_XTOx9lhcb3^^<3;(s_uu#F zr@jg@K6NM#li0c%H&;(pTupi_4@~1;MoWMS_ovJGBo2$wOMkV87xJwySd`Vv)Pbt-E{ucO?1TgWTz1)| zd<6NxL{g=qr#x|gV892-8jedTlT-7QBWpP zWueZPCpb9@EIv*el64T%R9(aM(RSNyPj^`g>SNya&l!ud@-ILOTI{JLA-lb`E4I z-}uL^hDLxy22AN*HEMci;5X|DriNJ6O=)mJkPmw+2<;U$L+;oq7@I~Gic*{OwKB0U zzxa}B0EGJWR7#5#${c>7-5h_s@zdm>GzedM`6bm3tF6AeWpgG>U?V}mq#Sg+i3)nK zH8Mh&RK9H}_JwN2)IZ`I5^ZW^p5hx)-$t=2yK?rTAAVLrKfvBekX_Pyfr%h`Y1o|dJAX9f8F#{#3kw3MrH zrVIeW2W(!?u{OI!!5Th+ACaVz@y%~H-JFg&`Y2{?!(xN80pPF@E|645gb!^$&O6`y zZ1N#NG^X#n2^!W{UU`XSud=LR2w}`mWr6USXPzOsu!Vf^-_&;DW-ac}*GLTkUndj$ z-&0vFDbI56k`O)2#g;Qh^+x6rTS6ZPQ;9|mW99zjRYWYp=ZyJ#PngkZ*+!faw7SdH67VH|>CF*=FnA_ueHEs~f(Z z(#izhdFO2+F+g3J42^E(U11AR0GTRl!g2gj@2Mg#9{fv%08@_jt#CL{dub4e!KOeb zuYdYSlPr^vzho(mYp?k)A7G2g3%~jB;||vG$}6v6StKYmP*TSodklXksjmp| z@}3ND^V(z2z34wzUCF2N_!gjiafu6<{STDQLJKWoDYm;~6u6m&mYczeG?<4WvV>Jk zz|fQdPNW&S2Lal3XcXB;S>9&klmv(a;s5Z~a8bqtOxO<$r4W@!q-38iN-aG zDEj6ytqh#}w?+{kiSy$JJp~X_CJ#o~a*<~%t2P_7dt?6K6D&PU31_Qt#-^%xMyw3A z`4AdXq-n&A_2ecW<_Z>J-F4StHt>b#Um!n!IX@hE5A`xmtahF2zJt&bAOu$@q8~U+ zGU=pV<`s&PfC|ET$U@TOO79TBa*jRL*d9C*TY%1f&TGC9)?9NfHjvb-te|+r6{$7P zgF=X9^vW6=K8+cYgI6|i7|gLhRNur-BMmAti6$V-(p3N&s+s{+7GFLOLjlIY>u<0j zA8Utp#=gj-Erm1gIOFmO;#kCBQnAxcJF(|doVtwzY#}p)2UCCo01W0X@Z9<(`^qW} zJW)<^zQM3T9!JwTcGKc!)HS?FfHHHN*JD@306%te#z*ArkcBU8 z6|CuFEz;If67sSDg8aP6R6@0a>BR=^(kiMVw%MSq0jN%K5!I{Q5vv0WJhOCmtoRkNB!GL}vZ)A|gd1Y!NSk zY4}b=No^yuHbPS=Uex=p3{;_?!}s-ZKpLE6y_&vLAmZ8u<6^Ek=j3ZBXXct~F5bj_ z#TA#cl4Zx8aHz-C3{JoQ!*0Bt24@4n1r1Icg5VxPaRx98Tt^)KXWk$m`abr6$;)8a zrOYa;tV;id2}PXPu_q#)g>N8>TYkkA*l$;O50f6a<8hj7xoCy&D&D_|Lo-a)rU6Xg zG6+8G0bV9{ly0vnrksMu;cH%|CC5n^6HtVJ$_x8zRo}+(5%Z7AKi6f3^vES=E+OVS zss40{^>hI?GD7djszT_LpUAlOP5QP@^u>-#U7#k8-td{e4U-Mva?CNu(4VZT+@0z? zI-fEPH#69D9n!)o1=bO}=|iLA)o50BHS^3f+12scIB-Kbr?v7h7&!8lBa>D@M8n2l zsL`X{Pd4C(S!xdFDkki50|D#`e4Hc9HTT@?JwgIdGG9nQnVQH@hCb@n=tfGd8V6D8 z7cuZ+8@0rO5gJ@hhI|NUFw^OGViS${p5zpe-^B@;Pb&8V5CO}GcWYS+_NA9!W>Xn# zhKE)D(MKK02FUwZjpV0R9tHqe%Ze3X@Ol+kNZWt=A8;U3V(@kU;YS~)KGYK~wV(Y5 zQ-yKH8Jn)V_Syu%qK)K~#x=ZRKxy;{+aMY?;{as^8CqOijIQJ0!E-V&0f6IJs1i`( z0=o&Yd7XjB5UHLw&d3*wGyKk}zE2%t7xmfr8NgdqHO6yJ2gRY*Mrsy0_$@&W{G>w# zqYk0vx6!La>~2cqRFuoeHVp|IaXr#n#+-^WVsc5~O8&VF=~b4JtrqD)6IU}M2S-XH z#5>*!W!JI;6{}33G;qElSUQ$*36USb0#q6w>|jD_M041c5G!%Mo4;@0ehi3wpn}m9 z0W7MqqQf1ETyZO3${*NqTx_Y>6T$i#0V?%0cXeGQs}O1~+d-zO+C9V;gWQDgGq5O8 zQL*ujqIn7{a^Al>UcQpos5a5h2~1NN`Clv5O+rZ+0|5RRXPS{7dhkKs5wY<`8}W%j z@U?|QE}*1=4H$r9%dNIyr;pehx#?z`(L5I5&N}N%-jojyspzkNoN>An1;qC8N~D&| z->`BCe&~l;Qhy9(}E}TE|p~vs) z87=@FuEjByKf|$cvF%bC=$FYRpUhHLZ>lzrzm*e>AaFfG4Mkr&&7zTVc?P90z$Bre z?n#}i5!%NceMWU^s-k2v5%1$mp_vqkjSxkagO=Wlm{xU{pHR~q61DW#MuU+^NduyZ ztq{|I%wq;Clw4ztHG)L|zr!IFU>$K_f~0Dew3;f|#|(Mm2@p}Z(X5~{Ke)tjZ7o2OZIa!F0)5y`ETW$S2mWQ2m!e5yc z+~#-N(HpP7PAC8EZ&4BBYag>SqC8*+v7hl`t2l6i^}=E!KnySCywIZR zzEC}2GQ2R}cB_($OSlhlef%i!#~(>~Rk_zx`749b2Xr)#o;IPrQu_+FQiH@_G04Jz zkIgP7oW5?UJZh|m$QxRg>#n>Lo5R-_fz^%~Vc`$Jf6~~3izE7it$Vd<{ zZd`)ay*ncl<&NFJb}dni>eD_D}t}(n>4S{rBC= zJ3uCy$eG3fNK-o`${kMzO*cIQDuUekPF7he!%^T@DkDS|Fn$hJLZdZ|m4?dW-wZJtdJe`VFEBpsm67qtuwIc)w zY{5Q!BlezQ|JVCI_98RaplRDP^KcgM|5O})%k|BBbAGV@E&0KF1!*v)Y^2L9UkA1}}AklpD%_k;? zs5_acrHFVL!KtDIXyF^N;tC*AgU}?O|8e?d;9+F#1Q?33TkGE(xSFo@_%Yd-A(BAF z@#FTLlfS8{UYaR>sRk0-$O%dfuVfe0nQ^wZA}2VuhVFzBV* z6eA5oNK!7wqy|nvM_Dl9c?L{W>QfTe^@St6lh^v5it(E6^*{H#suHy-2WT8SYJ$43 z{PN3l-vxkP|2ON?jaE1hss-%T23DAVv6Xjy@%b0*Np#(H*QE>2Kc5BF%PhMrn_8S< zsWW&Ng*OVw&(1#cpS*uik8PvI0fUSMp(%rTP66D)J%AXZ0{nZy0xJ#~fqNSxTvtoL zgSHUH(ClB|r13x^4(t@6HI=T!(_%(!t^>u>hyK9bJQ(A=tH7xHYdGbku=rAOF!?e@ z77%fGgSNYl+OZrPi~vLBj8ITjF}KnNZ5gkVQEKC0rF?+uZ%mv_Y0Xijs!5Y6bX2$w z=~XgeqbKc6H{HyesbQNHC#0C5xPpKdd&rhrdMV!D1s0$sI()?yS7a6uTAC0rNETXn zVZVPZff{5g(_5_-j!Ku{#6W0Ca(1N~Qm#@vV8wJ^T~oV#`|UTp;vzkF_M%B`D&olp zMzpyCAR?7^Xsar_*I<VsM)sQOU>njRyRa*6R^-vt*r z!J`P+#UHIU7*r14Lx}@p;G1r8rv)vs)KV-&htDs(Uv>4>E&J4$&a?8a(czzdS@_wB^EV37u-L1J;4Do zYVU0&#)>gqMg*jj_gffC0H;8CQ8ot=FvhWU3hgE5q3mjxT{^EZV2Kg<($c^dyGisr z{|RiP1SYOp*q|LqHxj`lWQ?lEPVRJS14e>L?OG3ZQWHVESCdA(^CdQ7Qp;a_j4d7* zSfmDs5#=&;iu9CaxAjwqOAE09U%cJf|&guCL9pd!zK}NKL1>3D^qXq4^9?hhk-^mPg;m3 zo@8SF{qVyN;! zRVmz$m9u|fvF%jr2{0 z`0&pJb##zD7(bFQ`1%HH9`AQ)1EDxBG}u0?1;>k!U-&~$mYm;EeT4nMva2(3c z%Lt8Ql^w3pM(bG1SiLMgH>UjnmGUc+6ND&elw>E$RY}dja37z$#=iNMTWEz9R-n)U zlua`HhixHCEx9BGoCb&hsBW_>@Y`>_9W%g2UC2AGWlx#zTkI*r;J);dOZoG_YK~=B zE(n3Ks>T)AR~0N^khRD%@rGAy_6~!|{ufAhxbBH7sQ|I`gS1)&04LRUagb5gbcJ`R zAIgJG^cu;K`{asoYr{i>SPq0bo~*0SM|>+Xr@C0y=#)$xNxbP9=MntqJuTpXm8F(m zn(n^yu9(YeYdFm$zzJVsZ|T>TdcM|sOkHjDHJB2)#2-nw{0b}5!WNVuFXQtUWA%-) z{X+nVEN-=rk3aUfX#dn+k;XOf3b6oh(C=@@$=BZDB~j|5aDj!F*-9#aw+-XiIzo&2 zu{?3Tk}YNYY2+>8(mdqlN*A1Je#JJ6n)1g_C2YDx-X;79tFLLPy^!(SXe!|#Ap<7? zWX2CXNoj@W8foG<&;u@2LQ^@RQpV(iPy&$2pTt6h$yF0XhsGhX3i+fUD}q`X8?4hR zl=2Q1=`UNdA5PX}d9jTIHa{0#bW!ZEi7eZ=yaht|fO6VMmkQ)zuMK^T9(wqpRC=2< z+z&g4bY7$6^M;KPSWP1aHU68*0u;Mk36-|*zxP)6pzh?L4s{M?j$luEm8E>)5btte zkyAW9H`KIP`PX?CsXuCY*8xq8>G)2kEyqX?X z=%S1BS%+VI?iP-TCY+eJ>p+x%_+yVf4%>#ocRaQSVM`ahR=`aRvw${W@f&;WvDjWL z);*Lj17d8te&*??C_h>*j%xoYlszxL^dfJJc3X2?0=di*TJ;a!cYfx>e31w9Kt2Z! z0F;*|7E-zJ9tV;9=#Ti5<#n051i$_6dj(vfUrgH5D4z!>geqS6tvqn0o^c@v>{UI9 z3Tt6~pmLw*h4H^t+{R-x*_loPk?9(>@`c0`2t{b7H1Ja6YVb3<_~JIa1C@l85UWTG zVTEa>0S@~u$eZMV0Xu+0Eg&yrYh+)xwbxpkWe@jxHW6veH1kX}x19ht-f*KT^UABN z%+3to1odVdRfg>0Q~dGAA5Rv{zWgvk{W!3VzAVGMDjN1hY4EEKQw<z@Qm2P#BvcU~3M9>i@p%68ij$&zYjzaHCCFZUk=?6vq}t za0+D}$AaOw7h`y#?GaDQ0w$`nquM+@ws@D@;)pLjA`Jz=igcIs{DyPVXWgCvJ2RKod#n? zUr+3BgPQy@J|ZjGxU913s;u_@_@j?w0borHf$SYtlNsuU{~%w(HV)^d)x`WJoorGT z#72rq)D5hFNi7n=NK!b?Sk@@ekpqEL--tPb9(1$ypnjO3V`iRN^<^d=pE^<`Lu$QIKty8qr_2Qrk%u zA^ujC8W|BEjmg@Dbe}b7mTUcM>cFMa%kTZKG;xvT@kwUy+|w}Li~zCptt=l!kdo;| zz;}aBZLbLtvELEyi_(cc#CBac6EfKP%{ABDypQ$f8*k(|5G%ko3;+jDyU<*(waz*` zi7&nMGSSv)tc5yYyBQ9|rMy2Pu(=u7t<U0`NAFD_J zmzcXZzgTn4HQ9s2amOC(4w|+9&0#fEps3C}@7!o14f)vymQsU#81L%$=n8oX$nQrU zenfRXEV7+}qNsztfExQPY>M@b0oenmn-ti-&1<^)~ok{~1Oi|vAUJ{5m(c{2Y99kRd z0O|{i2`D5)gm1Mqtr!6Z0YfW{^<&XR7qiNhsp!&+FJfvG?EY^z-OS3gp5!fNp)f{V zpors+JD#(hVm7Txbr*HTBZxD8`2IU9u>V?&1xjsb{AlDO_`Z*2Z)NErFGW>Vss|~x zvHULetK>RT)Cho;NnmHPvEz#>PR|bCqY_Ufvuu8b23KX6Pq_Bi9PvOu;cjA>tZ@r76y90Gw5-NmG0 z#}*6JgRGn}y4`XRAw#OY+5uG#Xfm{m7Z*g;;IR<#vWB51n~-EgnZ_gRr2F;jo zxQ?K_d;O_o6g7-7awNxm|F)c+SCyZb9TN%9jo6@_6@dT3*etwDotzcg{sZL^?2{58 zq=^fjJz4-OU~%^lMq-POQ`4H*nXw;jsXw%WZ5$M8vL*^0fjj^%_$4s`JnqLqgAYNn z<7A#h8JGlg_8wj=;ZYNV|22OQEe7@m8*E7DSdf0p8?$1vZoA!feCQ}|zwr6NU=`X$ z-eB$X$6#H4x#j3OK88KDG3?Rc;nm$6)@&gR8}_4UFyl--W{qk?+19RHkVhe|$&f$HGjJPlqUjDeHnl!M0C0h$kk92pfD^JHuY)0N zzVP86%q?IN0=u>x*i?GroutbAv!G#&mGu-?0tEj~IwLft!!`o-Oj68EK z8%D{&97Qc85oN0-Nbh7nBBWYA9#|!8Js8GL`$(jbRw9@&d}U8gUS*aYwbokde1o_y&Te=(Sg0i)1<21bD)5zU>nTlLE1_U6TZa{2h@1 z7cqGBJAF^Z^r!=N?NmZ2N$4JOY_Z4N6+@ysl0=fMe9w;%vPvZT= z6HmgM?`Y6@~9{DWH)N;&BcF~l+~c(_z7rYe&& z+S~V!e`K!#=bn2mzXMB$gB;);0F)x)LCC-P7F*CImt4$7jUkz>x89mr$9JOEsbZtl zdFPwgpHP%mJ!q-eJAntY^{p%oKA7SprnGWLAQSaZmIf48Wla0G9?^vJMs^OD-m{*Pp55xnu|6M-Xoo6-wR{&rQGBQHh;$#zc9mdS3i7)oE)e~f#zYl1Wt%AH z;)s>=JR#%*4VP)eL-(&S4?B9CXVnRcQ!HY?c_j3-O(~|zrD&R`#xofxso??nA>DgzV&8m~A zFZ>RkV=$lR2e-kHY2f*4RxYr>0t@g-G|=uK*=6iNh66*el)-!f+lz31;6KhdLv`wk zmh@)1ndpusmt4xSnL|hlZbcK5s7O{;ifM-|B#=lj;85uSO2PzKrAdWBT>vyao#cHE z6>0n^uu?!J0WI}KqOj`enHb-w_Hg~(Vykqw2pTcwTs!vIF^jESRd6lj+ZPTeagw>H z3NLopbpNGyDv7w*=7V@aG=OxLvs5??SDlv$VlSpETM+`zfPBNBxE{I@X<#?U1mjN- z%O}Tscm#Ji&~VDGRCQG#mN!zl%_z2$xNblyJ)Y7t`PP z1MC>@VRMMks4$bk$vn4UJD4v!w3GNAyDUP2i!Zq(Q%>%gD2Kg(@iWG&tPaIR);)!S zXErOVGO0mQ+h>iMFJ4BpYg-B{i&tEz8r~U3pVS+a$=KZ|rpl;1wFLV1t3s_S@6W4L z5R=~?lc z2&;CO?D%ht(Z^u+bdpIXraSJu(}QWlge1pi0tlb?&gg1U{XGtaJ@CK-S(bM4$$#TK z2U>Xs4rqYKiI-n;2P6!dZV(^n0QbS4!Q%wEleX7gZ#@>|axIKo@nQ3IeH7fgQVtq8 z$gTLHZm|%Vy_RTOxu?)KQ=zi;fv8_=uvUXV>uU{+8mQ_6yV5pYBtR9#pOJ{9WN|v6nVpsmpi0Yx7Vz8(MeYMj^mia zQszU3JRS`8Duf6xs?NU2*Ev#KJBy^n0i? z448lX;YX(8Lo*l=PqjUjLf$7vwOy*XxQ@x1;&tP_@I{~H8B7{PsT{Qxo>XF3lgFK& zFu+qD9H+MR2SJ{tMp?m?hJZo?`i!m23oDBQC(#(=atliN-MmF*#R_x5STy7o&(b4j00Z)6=YgLo)z+o^GSSz6?P-5ioV6J zp0`;6ES|&03+m@X4msG??L98@c026A?=JiIWijv7S6iK_tS6s%GS+zsyBedM9|-4f z5cpnkt*;H$#sI0IqBm$$4shYAew2n=Sj~rPS6*dR1~Kfs2(`hfKm+Z96&g_kkh{V@-FfDnSCrk)pV;>G z@u0^9sSxK?Tm*DKP?l~zJyQfOV@Q_Yn8pp-KAxwLD*;yFyO2naFmq5Q5his^6?S%4 z68@wY#E>Y70>;Vh4n2Up38n&a5Xw3NywJ%%1T9;tItAnbHN(c9q=6%Xq%Gi#GtNLS zM6&|l7-HbTy$Ni0mRWk4NTw?=$|iQ-3Hq`NlpuVMd54KZ3DBVWhE@HEC!D}wg!1gR z+wNA?{TZFlhcP$<#l804hijT(d+fGAEnDhx6?A-e&wd~yWge8|igBMT?Ml89>QtJxtyG1MzPkboBd ziX`ILQ15ixeBwPQz!+4ugBS_u!(m~+pGkc^@x&8Z5ym$$1Ee|YY_rm*pMA>O$dC@? zrZ`oIZNq$AC~)SUdmeh)Qd&QHmK5hV&Nu&jbniWPv&U1U_pnvaEMaAxs$E3?!shX| z+iqd-k^nARM3@Z_<^7N=Zt~zKc3~W}A0P5r@|*AR!R;Sb+?s#xEf(B8);PD$`S`*K z1oZltC(%e%q90NCFqVRU!X{!d033qq`lcBo9>QqvD}VAx8t$$p#r2yegrj{4qE zaw!8V<=0<-gXD5x|BmK@(B9CDhIGPao>ISW$y#d!JJ_qOc3TCdf1`N;^J$Z z2m`Isl~-ID2L|>_!rckji4b7jf4k6DX=*A1k`g${??eyP!H8RXKbcDBza;Vzd0t>RBoliaYdBeN{R3HxSfd4R1ckmVFhqfzsYIN3a z!fa;32`5VJV$u{$eJmCXD)gu7tMXXT&#Bl134r*&EKX)z zD>vJDr=94+e_hCe{?NGVtg|lt`?7z>0?t4G0(>@}lfy^=Alc!RD4b>hN&}5l92ttB zM)^dM&_W5|Ne|}y8)HaM2xC-Vs`PxC#>jRT)VC;|1g&sU-=Iz2xY+sY%D#;G^Mc(I zG&a6$m0OIz{^qL$m^>|rom{^A&f6rjpWVv6pydt<7X+BTKuPt)6OYGulTI=z4IDJc zQeXG*=5A=LN%W%;0~H5>+#mHJHrQ=O_Zda9{+d3v$##?;1P zD`1Q36qA%|CQF)6&#rv?R-%4*UX$AHx zthfUG`|^LYTjc;&DY6^@kTLhh>z2s4nBy}*kt2P zm}NcazynxN3_s|9I{09^=IX2Ix@)iF?_ePfpZR~b6q(a-5iPsia=c$I*m$A*v(7pz zJ^Zjfkw&#ux^sWUd6-pIlGvBikf5wmEXDPGWD1il#}^YCjP$@xNt-x+k)&4?T2-ftGhaZkH z;?$>{@(h1-5X+P}vW;?}68&3RfMO16+>sh1YTXbZMvB;RQB5$0=Vq>qY+s*u)Ef3A zGOP+Sy)uz6(&uX!N+*4g5gG!|o04e2SRkJ%cGn|(^x;QwfQAkWgAL{eZ+anW?2s@S z?7x|3nVH{dcgbP`7`KW7Bp%=muNBG4hX%)14Y)P|D8Oa&m0}N?LR2FLfc<}+wb!A) zp72*Er!XOJBW7oskf0K=E$D&!@3#W~b6Cjx=fjWS)DAl6Al?apZ9h0+2GrN9ue{1% zZ?eg6>01kK!GRshixX^cLNnXJ+56>|U5<}p8#Zh>wWEyUql|P{@x{cJ!LN?$xgNOn zfgSR$LQ}|<-lWBiOns6m3P$Efavr3&H6Sa%BjrzgpW%P7YhQouwyRAFQv})XaUnA7 zeH162=SgD6gcBpA{BVtN4vnzM%80WQLFvgwckmo@u;W6olp%9$&wE3R>}Ph!XlK zn}Zx52Qk2o3zXCK*WWbO~ezW=-YtY?RGbIl-P=k`v;A*uBgV9h1avd~JMqU{4g_~VzAR9e# z>IqO78*#`+Dvc!aC;+PM%@glPftb;sQ=9pvfX6GlL7~<>bBEt?0?CSH+ zJ)hdervuQ1Z6NH&;v9)>N~s=l9FQ6oB&`OhgT_(5D=%yk@Iq6Bc_h*lxTf$%jmuWm z%6e9QZvwaHp~f9Z7+>usWbyYgyug9~da89cc-F%BJ z?FxD+U2SDv*Z_RkVTZ9x;S0{cfWLuz9k`PI``=DxHWhNb?RVIbjz9KTKIj28S#rrG z=|5J9P^XNtGG`$ivlaR^^%7+RG~FxZ4b=y8e4gcH1lWZ%Wn1diJ++(!!j!0-$oidL z!1R5PorR6yFTVJ^mA^VO34ltaY=BbnpdFvk3g%0|2$@ybF%rswe4uy%_56ulgyonR zV8sXstdOcwPe3~k_VbfZKJ^o+;yfV}W#iWWue$dD*sLhhg{!|AL~=4C$cRW%oB=^3 zBROZuNR%YWz?ua`cST(cF2guIh8%Z*cGK z-uoYz?>(V&S3g}!5=Ul9OJxywj_2S)(7StkkS6`161Qxq~t|p07*%Q4JdGFPj`c#ZrYXIIBB2zer+E0 z{V;IyuT3$?_MhZCXv`ieMJ7xMA;XJ=g_cYW9jx%ECuXOJj*xP$W>#cbx>P_j#;vu$ zhUm!G6Zhb(U`798KCr-`mlPjLP_cZMQ*;J}crDQ^5JgKYN8g5(8#@r0DzV1*5DQ_9 zD$C)l#9ILl``I?!a09vsE@|R_&^zI@psCkfWBk5*aJ7|zE!SFc2K?4HziHlbNnZ(D z8x))qto2t}byYedD*fRH48Fgx2yoOtvkl za>MmEm|3PF*m%t`=NyqUS%ap^b_>(cp@xN_=5|`On0wCcfbaEu?wV zO*e|!#r_8zD1Zm6eXLr3`72+cpZ@d+0cHR>Y>vbYahpF?B6NpglyBtvs2AwSe)9yU z15G=@gG^~IlTH&r+l8q*PUP~jmXS4mF7Zm(ralEogU0X$m^}HsvN(ea7VrvM9s)x; ztR+sSWOZ^mtpVJLiyLlgXe8~^El1v)a^je>C!ct{N*=_rnHzf0`|ta+EZAsKVZH%i zz2W-n#E<HfoVaSe$=IR4DYI?SpLo0dKZnZIuS}D&3W<;e3 z#ft;jl|7PA(R<$WUOMQDU!ouW z@IOTPjBQE3I{9SdIFCHNQPy(}B}yO1)43lQj=0@HvaVUk5L%@X^URih0=Y$}GVIDT zyM8c3(g6w^1aSi_zkBTQ$E(kHO16jd%-fuOsg;QFaP&Qnq^r$P>kcE)k?iKlm5tL1 zCQi;~GVKu(mj$bN_z1IY24{v4GoKUVS zCQqh%LNzH?)q%)$Zr^FA&xtowh>zd>?xD2Frkjcm?8smIoK8LURN7|SZE5d)_K{89 z5F0m&tBbH3JNPSK7Pl)f_rM{h-}~P8gp)Y<-@Z!69DQ`xKVH4mSDheYv$A*#VUwxHS!3oWO(zU-g#j0%v23$gVwD&dYpv zu>mvr#s6M;<)5OfD%4=g0Iwy*34s9_c!z*LI+#+VBvVP%=lkEpk!Br_P_v};-Yp(n zbHPfy3XJ`yk+=8ux9`5?w(B?QPm{>gOL=Q)ppF3Fmt?4|UZ+^IMQ}-z%f0Dlo64;Fn`{eI0GO!I zW9^pocZbL=Jr|X$x;Ih2TcbgfD;`1kn{U2F)PsFZRvCZr{lj88R-;{a+f5Yor$)UO zPUzkuhB+#VkXOaBK*t8hhX6Dv>9HSj$t9PdU!HW5h$LuR=*x&&km@H~Po$|^Ykh0K zbqHSj&BRYu>1;@pDmXRq+HVHk4Jg)co}1*Rn{B@<)pLiopsKj}rkluKa1N>Imr0N7 z6bQX2H#zFv^Kr79bI!R)8_F;MvYl*DT$)oU(>vZVvmC}!IIJ88Vn1kAoEB0Y+;CI~ zZ@J*)w7tlhIT+CNlaV1(`?d$TI>669ZUHA|mtUrSNRgDN*x8MF#&l|W6E#Q+a0F5>=%3_+Vt z0p|mN6SvTY0Fn|v{kP^?Yl--od~H#A-*yBJ9l(PD?JN z^B_JT>X~rzu{fPG&Fwe6vGrq08hn8ZL@Jc5zL|P%?Ko;-^0o`?fEA z@gVy6$CrwFv9Hp#ap3@4i8kGAGumQ{Ed{{NJmU-z5#ed|%U}MIY=HvT2mJ^D3@&qC ziz4zJjqiPJi_X0v;M&S24EuiRd~=}ey14w;17TbRwlf9BDeGee@rYuGg7n-x_(~#$3?`xg(s{NtwME%a7XSNHRD`24m?@d;%u>bUC6`!IRwl2y>NjQYo>sv&C}u8* zV3W_!91)ixRsO=x3V=EB%!#EFV7$2R7xoh_M~*-{o*gmv0B# z@qRAHD%4@$|3RFU-$@4@cmTch&zI;+U;c_1!+zuIUlZS6d+oiCoc{;_!zOQtjNktD zH^tNDw%ctd9ulBK+j*B==(;FQKbP&8%D`)Yip%>3EIcicos5WWxr4!|I%sTMHlxUL z2yDsN4SqI*-ISAT8Ef99e$*X!CC~UD+{~yeCB5dFYi`kbRXS%^-p8Y29g6g(i^~lT z;J`VKwzU*^U}xydm;OOw0EZ=KeKr7sg_q>J&DJ9+`QhzVw}N#zE#{KG0vwt8+iMtz z^??~RbYlBd!&^gnH|{HLnDhqK+j26t3YDa=-6!EvdJ#%fXA}F-<|sNZF2RtuTG1O} zkn<*Ns#)d0p?u50QVH1tgm0Jy7g$hM&@R9H*JPXBhW*GQi^v9R=z1K$W$M+^;hZ{z zc_I5x>V(ZNH`;I`x+{ui_{U^traDjnI#>k2mLZJ^*UNkEwHFhy(mV?X~yb zbnLOm^lp*TfuYa!TlcI(*N2qiaed*w8Eng~V`;{usX>~4s$6zkt^sv>pKIGSuhV2s zGU1$k*2LUz{(=#x8@W{b5c%OS75I;H6P;-jqzzpa*O#RjgSXyvsalR?j;JSl@x>Pm zXr^y)hx6*IucUJvYQ@WJnKd6l_oyP9^Gttk_u)*fb)*1gmt(*wYLaLz>tx zh%ngtW4jfK^mOviNx})SDMwo-OXyfZMESlHLFFlRab3b|hxmHo!d}Q9|Kun1?zqBq z&_M^%tdZ-&hVbjIyOs`*Ai8%HA>lm}A|?(sJ^0`LEsBh1(kZ_>Ifnm|>=J+#J{0<} z)*mzkTzaHa{+8%H*e2Q=l!2<>O3XrBe&*&j57Re!s;zzO23LK>?xs*>&5fJ%-s5r6#>=4wfNd$8n!_jx7lmMfQx@bF7_N` zD#nJeDe4kFEX%()-E=e6*|riL?q{84R$6x1<>;EIxPBc6%{t=FdBy+WXX~XGUyNzp z)FtrR45CEcb=Td*rc3k(HBcFN*wz6XEUZrcGaurigAo4cv7PAXqmC-(2sMFr|5&Q7 zSV}LmOcY6Xr(+@)l)MC#O6HDZU+A0$2G@5EIaH3t!fD&^w+}H9oYXIV{5@w>j)P)u@ry2HCUOJ75^CSY(ECk>N z~*5mA}~h@ne-u3@+tvQ(|I=c@Zy^xgv`Z3YfSCnLr9!>43_l65E1DT7prQ zE*GSXMEj_mSLyQ5kdHAoD+M%4R)|yBIS=s$I-yplp}(*;#}*&)cNF>>IxTm@yC_Tx z><4zhnTmi@u(9%Z(S;XK#SkB7*-w5_wqgA2XFnAuapil=AI79O3hT!|I^5V(`9Z~& zD00mgTYPcZoPF%E$0n|>baHirYdcQc4SVOZ-{9{JTo**JS!bQCv&uLjPAE0M%mo?G8~6SBJ~2M7 zbgbn~<@wVe|0Hh9gR5ih)1(iZ-PB#%CpjU6fh%X4(msc31Du!WZ<~I?Rx~&)z$8sX zL%@jLH*)=!uI^#O9%@Q_LlazRq6M{PEGoh|lrrh18BPljhzfHm>M&Q5oUo%!eVtYt z1yDvRJ7~*Wj8St2#_OTMnUJ`z{4MLt)Xhch&Dw~DK)2rdv!b}X8Qhmea8q7@2-xY% za0J+ZI}Jyi7N_@#dLQ^i(nB&_GjrYhhSj_+x7sS|zD`fTWWv}uFd&6T*WX;_{bj*z zGnC-~FqkGJe@m zZopOi%&U$g3Hc0}aNY<>g~Ou4iD|xrywb>nyg{2P&}n6uyFg-EXyK@A#=bHr(FfUn zs|HE;W5O$*EptUz}@-&VkgD)*>H&zHK z{(EN>2@d`4_oA}*EOSy%?F6{9fe8jI+TU=e9aU+ZK-RJ1Sh5&G7*zA1*L z{UFjd8PgnbWeav>zc}(JG334M(o5vL$WM$PFE(L+jNIv_n{6&i{Tpt$Ui^XK0N!7n z{7YIp>b@S2A}c()!ttW+b8O4W?MN+kA#>x!EjDe_8Dh4LN3{0Z>xj}4x+-lwuA`*n0b3`eg+%~1 ziIpxWrQ#_5?IPzZR-fWTZO1IO*rIam6fEE0c;j_yiSVCM#FApM4`WAo`8@x;Np#~4H#!5uI`%B_7cwYiOWy|6S&bpD^OMV}4rurwG951W z1MYGMC3mGG>T+gqeRS;6N6CS(zq#TH>6>CglP~D0U<7Q-P=G17J?ICH{>V_Z{%Ae0 z+WYQzy*t1310KKx16PQvcGPN}&?jMJq=JVl-#gNY@a$AB(%M{s-2t3wl{Wog0nA+qPO@P*=N&N_hd2*U=30)#M3MTYXSS4B&uy$L zjgmqbB;|XkihCl{l3E{TYc4^CxOxDKOD7tli|^N8e?3{5NlpXn>}Fd8KEZJ)1#~yi zS5;v21^RF#)(tn@P&O!wPc9}i3sgeD{e1JyE8-(`P|!b=A=ZT5W}9tfkRN~i@kVTA zt*w|)U=#J%zWQ(U%rnoHj_d0@=?%lQz%cc@Q51w|hXXfo1luseYylA7UvY5hQAZym zKJdXUfQth_!7~94BE>nFST%#a7%a76`40~oi!Hu{Oa#Zp1qAC#rgUWoWNLl=KqNmq zb4{ZVNzcINhAvpizF?ja<2q@0+E7};3h*&;BETsr=~r zTFyAodNQ*!IEG_NY=nkb$%gLjqy<+uP&v$(xgjPuG$br^ZOXkddzyy$2hrYEMEe$X zpKex1HGa~ck+_ELyO>*U%ziWDz}qXAQgh7EM&u2sbwXT4Vf zD5H=Ip_Hg57BpPWAp5XSQT=c;m7z-DoGtB>o~!h&Rv6`IHAJ-a)?14%VdBIy%WG3l zc?a?Fdxw3GZoTzZx-2SywGOs}uz42N@NnS_G0k@zms!r?f)1QmCv5lGG3wZkJ?3ap z=9eSeOd2-L+L`GjB%I@T_~AdIjW*syR;r+!hj<^B9YS;fG^&|H{8il z@3%nYKCzJ+yCrbA26T*e6E-ff?IPQOq0l)lI0T#!7dhWtU$@+=SC-czS@o2l_GD=E2mYnf_n}X!FfB zlfy0Q2}A4$i4tSX8%CY*1R=+W>7cX#LnJ3xK*5&a{Wr%w7#c3k zPF&vO2t3%fjbD0cdPfBEhaP%R#OLYpJrv(KeMc`G@+x~7TUszwhZWgREx$ZjPO!E{ zy8aUL_{c{V&UJD%lxM68Lk|j<=T5hi!@_;}n6YEsC*?T+UWnf}c|ihs>7W0k_Ua4k zz=Wv-QudK;n^)p2ZQKc$>!D+4Flf>yZ4D!q>X+1Lp`-H(R5k%~4Jt=0ny6e_F@{fG zB}xul&P-!6G)1-07RadJBq>^&xzr>;h7b*KX$lKRLVz9u`wHP9qHSc2yV1rQ2}g0p znP+qcwk0C?!CH9XkI+w#IKqGhTTChigs~zvWgm6qk+LeKu_L?6a?c1xy;mlV*=z(#EOvOuGtjM&mwv?<;3Ho)Li>oD`Aik4!MWeYgyy z*=L)bw%B3|I{ZgJrrmbiT|8#A*IPz`4Uru>m|y?;@>suvWboQE1hs6ozg!nvVsWkP zDxA|}*9M_!lhV=D4kq>ukdyh_Umv9tqc{&cI4I_Cx#ebBHHy;k!i)0^6X#OxyI?F_ z0f)_?O%w0SFTWzXD4crj%3-S%pE0p~o*tVrBnO4pS_ogHhwRAVpf0 z_FG6D1}AOsYxUs|kE4ZT8M|%rWC!!&3op{;kwe4wBGozAuxJs?Uhs2|l|VQbTx_w$ ze4CRUj3fuR{_);>#jp8_E3HIkWx@?&c!33Y{x|{yOgLafYxO0#N8WHtgF$fO3CD}i ze(YtlJLda<%T@#%!m%0}!kDOQJ5IKYV2|C%$QWt|cjrDespz<{bqHQ2AO-=XFsNF4 zCwsy05*#QFw}m@yY>f$JI%)<-8H}25p}tNy$DETfqoB|bC3VxZWMujRrXS#P_t|$p z(eGUm!S}OUZxi)+$Hw|j5Hpu~ zr^otWt5|U0WW!bdp*ztHrx^=E>GBg~NwdD_0kl#Zn{e&ZP}g}99aJ4xkqr}^DPaWm z9TrN#QsisLe14D5ACeR1Qt$*)q1bU{Kuh&bTYyMGvV<)(I7(%xbB{={AjZlcY>_tD za09B1r+}AkmsoO1A+kpw{VT1$`f6mvQ9>g=(14yliQoMoT}_08Wy=aLNTD5@Nd)HqyhZ2#$q=i3ARIeeCal z6Vn;^%z}u9_S$l*t?9k*c@MRaq%`wJT;PElBkb0I@2n821*L6a_+7)7v>F+j@~6QM zx6SaZt4IB%WVn#YwNtN_{fcn9nNh2RyZ`?C#Jb;}4x~VZgKVFO6A-}5*FmYlK2z_r z2Okf1CPat6I<#f(1J!mcCE>Olsh$eCWUZH|q8a%^0V+e($S|2>y#}1uA(?Z_?gz6o zLJG>T8P69SLalHCI7&vU!4h7>>QVPwAl=I}G7@Cz`HVBphybxDEf`ngOtY0c3?g`x zgtrC|z_@V>6~eA*r)%kDmWhLYiWqc$<};tk{`XCjm64TLa&Sp7JOw8PWv^@a91igz z;^F{|v(7q;R$gUgaWJR#v~gyS3RbwXff)$6KmgcWbIz6eDfGyb)Fm{CJs*ukj=I1j z#>prDQal;VAHmUEOXoTfIgkmZ_$+1ui+p4eT4mK$BImfeY(&StNHL0RIVMW0YB(nn zCo_X#w_xE|@Y!^p-FS znR}jj#U2W)wor&e41_W0C*owZ&U))o?R?9%Bmjc%xS67UY>6f9B*WA!eA2~nGFn0leBuI*Y^6` zU;h>X?2$NWuGrb`)MR7cbtg#f3Cx`thx^m$xl@4ea?~}yf&pdovp(xr&*ay>FL%M= zs@#uUJ7$m1N6xEc?CNDlN60o}WM$G^pkPD*;mmBsdV!0(1P(vmcietE-FU+d;%E?q z%_LJA?fsD`?ui^4T;V{!m6n}7p;P8wAi`la5uPlT{MeG_du<23V37?`6r#r`BY|RN z&VgL0<-m3%EC^hD$;FZfIFy>TX~0;9MWfidR1{<3-wP{zutO?Fl6@3M)M3dH9{cfD zjI-|VqfQ5V7U4bxM!uSsiP%$5e~@>1?ykS_e|wr-qQ*39Qt+5A2$BUWlCFnP;9JInev*^Ly zdF_$GtA@86RAJdTb7q`4vvMEQ9t@Q&Ckmz7w}jHUch4;PhO^@!2Z$^l2P^fk#OSz> zF7in{G|Xu0^3FroqH662dh{Z^f)C5tD;t!&UW@{8p#qV2G`0vYpg}DMa~7fM5K?^*_&^^NsckwW!K%K*mz15saBND*l;w6{e_?S#CYi& zs}v#ACddz5<=_AIx5(XolFWxr+e4QHW96lnUZys3sC0*4(8C|^{iEpDg7vtN(|{<8 zg#`c*#Q8Q4a9&7L^RVAw%lGhK9?IY~)>8`CB3UG90f$BvDZ7KTCf5ZAsG~%rT5h>zO*;-;XJR`D zM6Sbs_(S?dTm_tWzIW9|EXAr_vF*0o$^e8b8hCYpEtn0j7mmH!dFP$ed5i~tg}(Le z??e!JucC1Fw)z!&D4vaH80{1(6Zm-fzZ~oiDf=@M83`h zO4Q4J=`gdZgl1;+6Ga0=+yO3A4@cNO&jKlKkarhla=T=wIBEn>ntnCg%HX1LZRznm z5|bEf`qG>n#JU0?nG6zem2XW&3!s_Ai)yT799$uL8xOzmXbRvs?X=Tqzy0^C?NH*S z#5UV}izq%_BHk4iTXfO1k(Rn`i*xb5_O-9kZoBPDhaGkpefN8ZiQ%U9a+S67a|9)v zi@5JTd&_DcOeDNTbWIiMxf2hI2{;7^C&j>Wf1wY3h}Mk& z`~Ij$$rgVOSZ#joOOzEHDnwD3Rs1>*=*up>IEsOb%8_oVEJ2g?G|Y`?l-o7=3lD|W zpJ}GCVodxl8F2NzGpH;Xst#_xOBr zvpitgn2!zV*j2Fc#+wMZf$M{7?3HVh>D zJyA}qB&R`GhO7amAPxi|wrv+zaLa(^?&8m1|N4jkf2ZGb*cT$_4Us)<`u5<2>*dJV z!lP>Ke_!Sx?K;x^mP=a1y|%G+>@@G0n&*b#if-BfdQGAMR5s(trkvABSY%{?+}1il z7qvqA$sp#1*9s*8=Qi?~J@(k+5F#o{dQw+6T#FkNI18xOl}A$1GWn9wXX-<9GU@t} zRLcmZD^?08O*%K~20kq!mKSwuYRg8B>-_W2mqTJ#UTNhDM5eZqP3&+e+F?J1gD#-c zBD?fp2Vy1?SpHuX^*m7cLrfdV`_Y>Ik_-AMEI0t{VETbg=dDt{1te_3T`elkk?!R4 zCkv+mA6@{~Mun*@Q~;+#pdszs!)h$Vq}gYiL%2=U_s-w_PMqc;T@h^^;q?)QPrJ^l zg}9oSsq;}^<$S=ELMN71M%mF)jm+X#4PqyN38E-m2jR3N?A3(Q9bRE!9DGX@4|m;d zcd^yF?%Hc)d((jjeNn_L9HX~O{C56%=SjOmoSrRmH*jART62cnc=~vLq_K^n4hz=n zS}xziDatK3-yBz#-yy)%Gvp-<#9WBDYp=aF%{BMj)b=|9-FV{-QH3zOs4(2Oe1Fwd zSBmN)`Ofzx`AZZTv1;$TJK3PXVn1z3U#gJ;ug;#heDXEkZkBv}DMr?-u(&k+A`J{~wV=x~;f zIvz5u)QY+o=Ix3}F!Pd)vl1cl>8 zh?hPIOO*b-ec3lb7?zGqYU#%GA4E{}E6&`!A}ZLi8F~E;HMT$I47 zGQ>_Cu#5V@yU3-Hv)nau=Wx>uy&JraTpQnGCGVq)E=KpoMUfqLN`BWY8nqJ}Hc$WQ zPk)S))G9>GJ)l+l?a~OY2&dj1*b}&1u*}x%NY%=Z!OT| z&5?^-Gy=GId2Pyp18bgo>d9i~<>|@hLXLxM$Dju$6RuO*o=Gf!E4P6<>9Tq404@P( z1+biXp4>QdU!e%0>2=;`T^tMw?q-4M+A+KDzWX5(I%I~+cu?)HIGNd35I&nrSeDRN zvu)gNGv&Md0C8clNQiLZ0$l`jVKrNyCT43Kqju(*XVA)#z~-K7t^$uGP{Al1AEwo#)3Wzu9RUw3kP)2!L%ZzB_il_z)j)EG;Ab?erqrc zBl-CHWY<-Rnw$Q#bYaCSJ6Nze9zcb?fZ(dIK^%3${!iGO!RHuu6u_C}J7YZ&2WAdf z(L3$bUx_XcT;$F>?;uCD)6q&Ct7nJBHhzOD?`pL`%3ma*Ht* zoHB=T_QZ*_PFxi%<{w%^_I-=Rfd}JC=bCG;O~d*f_t!@K8}?PgMNyyb5_Ow;^;NWD z?1%T}l|~y5IzuS);g=2H+w^aZI=6qu)zeQKJ1+|q)S>$Bn{Ej5Z#wi9sCRO+^k~#U zg{7jdNKHj%C>CFKI0seA*VGk%DC1SR5(*}Tea=8kFuGM!hSD@<-jr=XDj3Cba15xj zj8t_TwZv@XUNcnW|0R}OB8mxXh(Z;d304?={92!V_T5)z(I5Qa`}D&f9xi&NI>3U- zi)icYDFVuS4AxawTeU;5MtLUy_Kk0Tiw^tVcf~z4TuCSY=Ik0v(}zCe>)-gMSb%^3 z`-jozKDRTCpHRWKkFf1M0B@f+mg^`27=}8}2XdycK$X|$l>xS#ErP<@EE?g+pHm%~29aN7@dqnhc!r_>1WIy8M z=gvEBkNvlFhf`|%5G#ReMF8!aU~oMXS3hw|xt{-!FVYe02Tnr$411{QJM> z6N-uKERPFd0xzWp9I!wA=TCl2U;WzGi!-=Z=?Ps5e7`>xi3tEUHY%iXFs&6E-QV~Q zoB~!Jv0w7*U;i2%67Llt$%%347vdN;l0(l1oegGVoQ{ojv_sVWvoB++7rrgN*kbZ; zdQ|fM?v6Xe(IOlYetLyZi~ssrW|_4ps7g~?Li5#bUZf|0H#RF{OBT2?GHC$VU^W7d z0k&T7FbdHYgG`Qd8>Ewu0V$lJsV>mDt8^+(2O*Kk++)PIu&J^xzAl|~A3-(E38`X8! zUq|=fcb_Q6=bn2W;UXw^QiEib(Ac*^d#i1(VS}{)J49CqZU9D=*v19%7P>?1aKLsY z*sHz!J!v%(I|#7y+Od=`_ap#>_PFGti^Lrd(t&;oqUD68m!T~p7lnxd`kf==t!i4nTlE5kz(!}0F=xsih_Z0RiH$haee8+}loW_H+TQ3Z3P!_k)UqPP& zWiO6F!%PT|6E^M8aAM#_AohOngA3BpNBu(dGcXEGHf*6O7kBRU1(d+xY9@$X+j0Wd zP<%rd1Vc@1=K&{$nR^Vp6KJ`$Q=6&FO&mTqQcCK~ux)qwuMMH4HUp;yt^+>XuruIy zzq?&HENmJFCxWuWTmdVF0unLtE3ddhyuW@rg3*>+ZY2j|BwMcW!f73I^ifiu&u+7= z94L!+*><}fiVK{c63K;=&#{Sn<4re<+}upmR?Kq3IAZ{d1~{`|=6B5O`oijbz=d9T z!DLbBt4OHd^a96vY3wJIAFGK)>!U3l9{`lt*pI%o?WX}RyW|p~8|Cg=8nMi+T}^D7 zqK9M4c@a5vNfW?5yLg4b+U(f3g{s~y2$60#B;|t0AY~|JV)wrS(sg6@*nN-hP_nB~ zWttYNnn5Ix45pfy(NN_-Wk4&IN;Rx)hg>%ITnfizg4>|7iU{uk@V^f6W}d#K=zL*A z?BkC;9+kHj3$VarY2Sr-I8XyKIdnAO*udE={Ne7NGn)k}hB#2Bv zbrt>bPxp$s2`+$HvJDC*-A19>5Gb3<7DBa?O#nn&v;zh?Odh~x;NTD_x3Qpri2{2=VN-_{NLbJB7xiBkMBNv} zwF9D?CIB+UnXWRSghe8{j2e?LYs7u6NsBI8V4%)KaqsaBl*&!&6 z2RZ-nsJOrN)>|TB9~il%Rj3ON?0(@E`KmbZ;T{^ZeY+xP!|FYj>yJL_NDe-zqJ@Q|H5x)4_HU*hyjFz*7Q5 zOAHR^k|3smi^MP7A{PT>a-&$DDv@(}|3>6C!0BPT3xFT@F!6Ze$tR>-^GEUhgHbuZ zNL*wY7e(H5Mq*TIKRiur=dj|4oe!|3Q@X(EPp3v;f~dVqToi$oJh&tno^BR_VYR5d zhmU&L^g*{Z_3Gb)SNyO~>bzcTFP;LS)BUo4y5~(38LAI6G31rL+9HcM{`ny>%>PvC)uF+VZ1% zvQm~{()ax*MK`zs)c@|-7A@P1IqUC(gC8fJ=HxgyMH@SiHso*rQb+vrpjLB)Z!UNc zz_ItI{OVV7UZEXOwJlRU5cWT!lK;dLP88Aeql+v;6#9V@*XQ@#OIE93*M$|WU3c4! zhFzKlR_zWs^t<%)pZ$yuJ>)y|h5h!Avt!kzbn?sh0F6EN{Ji)D1E+zRd#$)i26F~D z6y&Cjh<(0oIc(Y>k`G6~7>5};iZUP^=u)On|A$!hLkSIz2%b|RGQ%AVfDOll!N@cj zn2sqnvWTyqSivp67FQ6F*UV8#58V+KQDC2i61#Y`dKTR-RDIeN$1gFWNI>N{?7X>^F1{6uJ;1zqI zGT(f;Iu)r`aJzXbIOMUgCG36tWfnia?{Kqs^FyQ6HYi@OfO&}F;|{>Tj08fFi$^8z;o&h;O0h4Iv1oh(4LZ=4Jkjv#XU@yE&n#U6X^9ck+=(M7?i z6^HDy>-YY)#!+yquDY7oVY&ME03Lwiw-LN{+vD>#Nbkh)r$62+be0b6;0hEbEcByT zv4zN3bxEFEfh`#v2)sKR*0y=+N+c!<1sn9hz@(wK^1kJ0n5hR+jPp^GK!Y?@>?05O zCU|Fjw{1lgE6B8;319SFCR(UCSkH{D8HO+>au|o$L86{i@!0HHM0n2PqwWt1IZdrc z^_AB%)=QO{Ito4)s*5Y-28#7(qn-m>U)~!PzwpCFp^@El5>Vj6RSHB69Lg~+DoZ~g zzOZVV9{7T6G5L6mbIGNb(v6YmVeT-O5goMb?TQj+YS?JORtkQ^=89s^2Swjzx{b-) z*Z2@kV6+K+9tJ74zletcPOhrei)x!j=r$Lb97dAE zds-BOM0#aCm*f~s!Kr=EIg|KbTx|q+ksBJSJWI-Y-6oXln}?#V9hhOHaoDXWXn||> zL#GiuXHn3>v_kC&xT%4e1N2P*FtFnbEU;j0F5iB_EkGQDmsYG;V)ljkMfa*i0Oj)P zQMrD{9e0RQ9y+asGl3eC$VIDfU{CD(xI1dvO z#CCD@5AJmUT4P3%YoRyadXuJJb9L0;93#a1r7s^$pO`RS2ni-2NB-hx^uDM}hxm=Q zJT`{Ii9UPnvoF0bivCCZ=TF4{`&SPBYI3jBArmeI#VuAk&pvCS7$z5=Yi^+XHh`fm zRyntc9QZKhyK-32C*E<#Z=<4qv&Q!vligqs|6b@fxGt}@eKpO0zVxCjBw&)1mB`w} zrG7WwaGd}joE(-txwc$G7y&c>$!FU)jWzc+f)2?hlu;d}Z&qjJqO%RpRCME=TtkPu z<4kU~E`l)(e_p%py6Yh(jgV*KEIHJg*MUGpcHbjqFf-vSi)c7kYHCzjHut4vFkMy3 z^GYkNEG|gk78-6~<~A#k3SxR;vow~nVJn8Eb>!i6Q#NLPh9dh@c|YT+r=Ako|EGn^ zQ@>eVg=ekrxEKzc)Pr%>$4VJ2(7{28U04qu`0}zS*rD*oLc=E}Oc1>gY|AE}f4&%W zVo-vZamYhGWTH!uI>U8|&b5>)lhtGzC8kRQ4gw#HN_V(C#@4A@Zn;I;1v;p$w)$-3 zT0WkPXmcmS5C7eNxLYjcAD#AyoNxpsJlgoh7hjSI0%sGf9~Uoh6x=H>zaoCS{vLI7 z+wHJ}wB0YFUJ>?tdwhN`dRNq~QRudNQv(4G`1JZv289}$%BU!q9G@YMV!IhutcTHs z{z3-_`#W(7-GtE#p#GbvPFN+1tnYXJ+o&j<;Px3t$ScP%V#M4TyaU+-3XvZN2-DDV z)ig`&p1!NV;=^$>E(=YDCZ8Sx_Kb*4o||wEm#K6>sOg2^(=KShMMb6V5htDhHIz-~P_G={w*44(+?oK6Jzp z$yUp@pk-q**!S9dZ}G5jS_C5;lCX7Ldhg7dCU0;%Q1XJHfAZrW(LMM4A#w{}7Ugtr z9DNscez0W%2eC;M7mhsg7qazb!wol*RW^t_D&`w{Bj01`9z+Yb*cj|kw!;Jgd*Dus z92x3_!*&;6atZp#!i&T~`XSlQQwgW_tJd_3ZL56GCakVBf+K;s1Iz~?0zrg;d+wsGvQ zc2URDF)o;DK;L!1L0_cNE_iemdqX3F+BDHde~FU-II;!$T%X5VOt`N`J)HQ&_gFxM z({2E!M6TJ9gB>nVFa;VEpvh7o znSAi_h8u2V_fqMPJrL#FV4pc}%5Fr!Fa&iwL}44o6J&8I%%-}t)B za)*8Y`*C^R0*g&ArGwQUa531n1CNzo*nhu#+?C0p(-9;GxWdOhR-&Lk0ryaR(vu|y zUl*x&T&aUt1TV4B_iP|u6h56e2qsfs3pC`3&fTl%@+dtVXKuJ=1~|ZFO4`i*9^ph` z`3?>U`CtnVtlvfK5K;*Fs5z_%z9sI50UU4!h_eG9d;D<$Eo{Ak@#XtJ@P0A1z_DKo zja#T}rtT0j`X$!)<_I3wM6nm3^O-f)iYtbzOWAP2Z`Ea&T_RjFxQQJj0M0)9Y$76J zB^jHgciwe3;Y8q;8!LKy?zK+Y6tN?05+ za&FXt?z{hiVqvc)JUP0fyHX$OPKy2XNtJ#ZT5CD6R)x?}`;>cklP1A|)p;dkvy{%9 z3s9M%O6MlM0+mQ(Bz!kqfBg+yW!1{av5lBZUxCTgLP0HMo|!Ce%R(*p)#@io7-wF< z9qz3(h$#oWd4BPrgT!F*(C>b?*<Nq#amVd6@ys*CuNb!cY_|F4qGRKhyL4&PdRMCL5*pHg ztLew{UOQ~RdHI!>WBa@;<`Qt@Y?syb8avZF1TbWKPvqR-7!kTexNgSkEA(us{f+9u zPCmJe*kFD8Z*LcI4V)P2hjRuB;l}?Sxc>p!+JicPD+MQpeU#T;a}Avz0SAs0KfmXm zvib@4LJ%FH(Er$yA9G;UT}ew9&Ts@*`q_LUx*NdU);tX?_~yqxOKd~xq~AOP;D7R? zAJXoh-%}3Js410z@`GIkC&tBxog#qZi~tL2s{4BJ#ec-K4yQHOUPm_Hx3q(1J1?p^ zu;}pR$aPv>R|Tjp-59bP%0=cU2Qs!Io#&GF@NlZvO4w1~5ArEa4xAcb(zFnNpl)DD zxiVKPQBOr_@X&Dm4L7hYoI}r|=%>PorLu870mMLJE>*XZ1{`ezYo11~?R;|`lEV&q z2n(Fo_YXTvHe7${OJ9~1LkommU`z*ue&^fYmh=7gj!I#;X&!bao>l`lPsTjXkGh`U zMCCMeDzFKIlG@K+K7P4J`6H);Z9-7g!h#&!B5avp$}vZe=LoB(@HHPYh`CE-+7SZ_ zUcGtL=WZWsTh@UCaD*NXwqy6-cfU*m(D!{}{3nw4jhr5gW}&;e`}cRr{=UtkqI>o^ z=9G!&oXA-~?*kV%*o6S@@A%`6iz3srBHDvP?hMXOd$1UgVg>U9t-$U;RlM6ZC0uYcvJ|Kg)sZ!YMUay1ylgk>{Ovp5z0uD#Z<*T9#px^TtMJIF^GCvPb{=sQ7w<)%~;2 zJ|}t-xS&y&zrnVJCAL~2BC@NHzHKc*TP3_D+VaGm)a$_K+I|pMu?G=Gz1S%Loehjn z*I8#Bxfc;NUav=S6lM|Uo^zJyptjw92QkQns0266#~gJOJ@Uvj5v}0n1}E?w@spqA zEkFl~7*|V6zFxUiwO?T704@?+rn=?tyJxZLM_)Q~2cizm;DSBgWtUtO>$#0_Ph>=* z{0A2L7hEuzKDGP`vctgUXUl=f3*t8xI@>CA4oql9AQnsk$Pl-`*HN8ttN^BN&^9D1k%9rj;4)MLtYl4^ZbzW7&k+oP zhFWK)N+0dni~@^Ac1?$TNJ7CH>UCy`(vUsxDLCqKZQKkgD_SZ?1pqtvt6!CssUIDF zxOhO_Vv8+$m%SDAz#SZX@V|*33@eeauY${A*lhI_$;{v+o=S0`D^|)bz4TJL@;6t? z3L&h*XE#m=wXPm;(x3U>HJ>=xgY&+7qkaP$m9c*h;txD-E)^Bd(3?PU?*>VyT@3J; z_o0(zZ8vV}(|1{&9~?41^w0ycAsiR>c2L_n)4=|E7ti3eeuh(;U3^{$|)z)8*x<;iyiRSMV+>*^pgff`U0IIl5Sc#J)~g_yBESzhj|ea~N++FIQf1x$HfBuQ|3%zuC6E>BbwRuW&#L8$hvXV(|sy zAOO3c+fUnqP@V;01Z&b~*A!ePH};jZKPLauGMT;&-LzK=RDpcjWK;>3(O?gLxdi#8mscDI>^^5sDHs+u#AcWGoUkA4f5Vb(TDZSTBcFC z8NHps91IaS5t$v~g{FNA6Bq-*=M|g*!U`Ya0FFq9E~E8m+Rm)t7%&)raM<_gd*3}& z#DaC#U00k7s;7vSxR4*V(%@(=c$=6waiSa+frBJuKVB4p=8*Fr4G}4OZ|hAY_DcY& zrJ}ftu(0sI{r20%86oszIKCdot-**Ec5MJX>$5CSYZ6h*Ib4MIZJVB0912eV$8j z;gAe)95^NnK#zfXR9uyX1^+%#g#W<&A0$UJnI_oM0SGV-?!QMJ-)*)%QV>^rx4m)nnsvlfMDgS1OO#TD*L=D6s9B6lH6^#51B?vwQVZkzqRC}U^N&b z`dOV;`yHnXL7xKPf`dX?j_wI(f3brfr|`fy6vlPR?*U(Vz>IP*Sg)LP&qEya^MK1%Ju}2=BCbKm*Lt~#ItkO}ZIiv3Az3+dY za5zw~W7E30a*l)#j%XyC7K7u#YAaHPLi`^Qpq`KAg^mdaSHJ`UqTGv->w{q_e00Iz z7IaAC#w|qi&HFBKK$r;L)68Rke@u)v;Sm+vjUW<(Go3Gc21UMC|K>Mzbrg>wasjlK zS!Nm8kLe3+t-1K33ux=Dx6NlEngPI;25X-|d_C@%qs8`5 zoiJK@YWo@ObIPwy77lZjRabZYZRr5b3~uhSOD-0}+V{dm4tGU-#5v*kVH^llsSZ4-4k$WP1FwsHNe#p zlivI76_sEIGXNZJ*jRmDfBp3ZfM6E!jjw+#63X7R!lzeo9noGG^svW*5i6GIfAIao zgoE08>uu6WMj2@oU{L0P86>ch-)_6@#Dz7^6@(Kytfax15f1a<+GUI$UqybgLesRp zg!+KvSq}fAA{^z0hf{2_#`YV4&f_qXh@8udFT5b)9b6|9r3nhUCD?-@pVuQ`;fOKK z1K(j%0h5F|=bBqi4Tq=-qfqSEgBafGJ`#b|vcmcwu5E6Mx<6d2t-gkMdwrKVn-I!+ zOd=0QP7Vtk@WX|Li8mvlT`>84Ib3$}#g~wSHI!SipyL{ZYTv=^uP~ZfBPmV*lYbG>OO~N(TUdur}t+HnUONO?RCgmE3I>4k25lqEuU28gh zK<1wNIwcojXdI%_$hbh{*jj=;Za82R%joJ?X|y!JL0}mjrVS7W;2#|}Uf3?=I3+_Y zZCT-${Ej<*Cx=JebMHOk2Og(WV`DLt(PPE)s1i_Z!zvyRG2gHN?D|J$y5h1KTmy7S zpa>Y~0vw>{6VA-KDY1XqR*(I6CUNNldpDev4bP|mJc!L$MYP9_Js$@tEYV>w3eFQg zuf~0NoO}cKc+!c-OZ-hY+d}q0y1q7T*mwW*Gf&Ij!q3J@MNgmZ>%+Ex0Yulu$prrJ z`>r-Fym9>Wh#$*>0uJJ}t<}bXrwce8-0y&cvM+i&xT&-yR;h2h?H1V{RThVA9pfJu zHQ#jO^|b#%UrMyf9w18pb1jbrO4n{Cd>}gx8{ncIdgAW;ZanJrk4-O`N{lq`or;MI z(_`4MLg_y3_8l?qGT)M;_6^%K6K;c zQRh0x%&MoJatd8^(M6H4<`cabRtIU+e3K7wIRxUQ6GbFKN9?%MPGXlc>#W9Kx~ZQl zk3y5oxX+7nUydMq>Pg{j)?9NfIqezyErpOnjpxf$LDIHCO}~UH1?eS5(*783=2GgP zX#jNwmj@$KY&?Ht+BDg`3=U@rjKXQb@XrwPBwODoPN5P zCcxNtN%45w_OTcL?E7b*c~(4dY#CQKVIxPKek(NYo?*}o@eiB46I`sImnwfTLt#a3H+KrrEcdEyB&>0mpQ z?ntncza6wDS_7Ee0U|}dhDjMpHwA8(dKi&zxEeo{@rcP(tP_&Xs+dZ&`MTC+HrAj8I792^T!fWLTbjj4oMQY4!g4WS z9=mte_J>X?0QD>4#I)z$`?}T0H1~2=zQk40IB|hHgGD`7klXz6^lSv#V~;sX+Hcj* ztl=`Xla%M8xG7hy4^#j6Y9$r-&Zv$`8W|kAbi+Q4CZBAiDzP&sR6Ipkrl~L0?#(b(2V6|mBap4lznre$DbRo~RGr=k4&?tmYqfoB=;oVllFioJ@34a`f!q3XL2>T9hmF&PQzpx5AWo}UH*yurN5wo`^jM0rP1!zc zQ@s^|40@w`R4}XZD_ONU~h8>umEeWm+qAEB=96e?U*@2O*Zwq!>2j4w%1I`kP z@4x@;?_ytt{fp2~y%D(y9CCrP0ATqJEBCSG+)6Hl_DU2_vBC!39smlur1jR{P+VVY zz3+@b4Y$p3cLQbp8f&ge-j@_pcQw(|1;o%vlg^<{Hr>4F)X4SCa5?}OEV9U=a#my? zS5%bs`6c{%{p^UJh#Q)u>+)%GjVy~1KaFY$9OSa$#v6C~y_O@0)jbS*zp(#-?RYEY zx#RZRWS7E@pW8(iFBqjE0?8 z(*4xNur0$)n`&xW)xn#QD~siU;Vd@o!uAO(fY4vz!b%*t6?h`W=5LrwKn$KWa%nS( zzpatlZn+HskgvV^x^PBVQ3O~4q;UVl6Hi7ke^Jr~Cxg{X{DX}ZHlSB?3|||x4ax?4 zt=~nR9=xYws}vk5&N0WFB@CSL!DI#7Z(wW*6O#9cqeauk&6cn}PU^u2AE1jaypVR= zZFi%bcO#Uzr{6K_pFe4mY**T3)6Gl{c~B3b8QlV=mh>);xyJ>Eiue5CZaM%*ua#W| z9v~45rYEPJax$&E{swtlSrab*`Q=H+ivvg4{}ni;DAyZKD={NUrA@;R z%L-)V($AqYV9QFO+Oo6ucqvD*o+r|y$W(P@ZM$rFFz!bZc$GpatC*DjDUo`Dc4ow? zb3#olkgpRL9a*4W5sz)v$$cLUfQB~i48Qr@%7DSyg#UbrF1h#;ni5yNuu=%?Z|uiQ zhOKQHH62UD(82uXH&=@20A)4?Jx&aQ52xh1w+E!#^m@M~;DKiW*m?oPpnC#$1A8g# zv%{hSfDJZPeQl=~bWd7-15vX802Jf8^>mb4abYPFA1?q^F@dsSPLk~U_ zR|v0>y_4^h1&C#6g%ws5QCBA@l;_&K+KLHg!;LngWtUq{OgB8x4Ckhmpy15{MyQ)? zx~Y`ehH2Ai(}5K`CW0Mz`do1a*oMi?PTC7tT*2z;?or<~cht*u0igC7`sLW8juh?; z++;UREg#E@D<+K{ciK4tupI~a4^|jYh^ymkMU})SKe?O%Dt6(xA}9^jVGRSW8Qj-w z+A-tXsSl)0f+g>=w~_jR&Z`MDks%XW=2#*S9TKjdI@RgKh7neq^T2pf~Gkl zXBnzt1l#wGTv2BHO&g@weuwPrn_TTqiZe6@9DJ9rlMEai%7oHPe0>v}-oruSgOR)5Dy~RcZ@8U-X`TTdC!KIS zZNBA}a)8LNwDTaK(@#HD%vJW>d!OR#trL#GbxjklYmK$mk(K89g&ZJ3A9mNBzZ0=i zIoOh3hfXX*K%KIdkmg$--F3%pA%q6t>J9ss-ERi$j85DRq7ttFklCG+-&e6x(=Pgi zsIb5K>ZxpCD|FDatE^{4CFu=o>{SN2wP}~=wF(^U?lw8+is=Z_t;YwLuwmQ zDR--L!b;##zxWv~6<2>@7GvGdnAjyhxTn5g%K5bQw%gNUi!IhEOQ}-?U%0h-w*}K+K-hs zn2M7K_pP)5DOPmt*tm&f!bR{JTUXi}&3_I?T#qvw!fFRotH47tYohwW-gb5gFkBoM zCL*<<(n-IQMyTInIdzN9pYOX*oEHA#7e5zIpBrzoiRi_|h;p<&hB;06zxqJ@w{BEU zi}SiarE@3GJpFWGqoKEgB7U*OmyqMEu-!*DV%KCF!YcLfgh{R(K5j1&YX}qmr8sb( zh+-)K2wPX62gIO*h5XXXd{UI~3w&?^m%sE-43k`JpD!E;ylZ@Zuf3Dk&sy*r{%uSm z(DlLibfZl+E9NY2lAFQAhK=I4-EuSS)&kck;0KQN?6b~{V&c34T;1?iY>Pnm^2>5k z_rj4oQ{d{GJn;)v!hQGsS(N_*Tqb`@L!c3e+cbZ!jfBKSt=#-I~c8$Pv)m2yfE~+zRUi{}UD9*&V z8T*yvYVUi+zZRtWkhLjG8?Gf@HtBZanLh=mdg8GGAInv}8I|X^$CV#!y2im6*hIYC zr#>a(q?|;P1KU}YXq5EhFZK+=bZSL;&J+GBs8EJzh7~o~RzYOK1x^en3#9{M-z!`M zOcwy6vqk-icydt9qkzId(uPR*W(0y4Ucgz6e-|CqKVSZ5-V^znY$MY4f({JsR_dOLJ6MT_Yy8|H0@)1eP6bnkgVYiK+9DdgWO6%OU&k_ zE0bmn5%0@iIapTsre1xu>|y)&AADc9BPd|uRs}k(bRdSE1uM(k$uC|wS!nUa7LWfH zE1d>0uGSc^cyx1!G|@d{g&W*Fgd{M z=zFq(XCFAxkaTdtIV6u5mEB7b?LbDiv8qDWVt)>ynEGE$s@@4@s$>A9rDkux85v$g-Ov75A{(^12hI?bXBic=joEQ ziF1D*61dC&oxIa<3J%C>FgEmW>nmeB_{l79+(tUVSttanD>Ixr5}7u(X?ilH2*JqH zuEKIK2NZFGkO_lx1w!Gx61tI#X-n)jZP!ZcvT949Y&as{oos%G=cjdP-@C@n`H8|>?dQt$RV6ai9TwX7 zw-_&8%S4{UUOsptBh$oCtUBGhm2&p+{u(`ciOH%-3leXLGdz!6{h>&vArH;xNAg`P|pL!`1X zAD%ltyUlimrgWjiG>o|P!36c`6;={)k;~+6mE7r%pRC#8EEO7eW0^djuuIc(jV-__ z=j~}nX~g?^XfEy)y>tMx=P(jzOReZEaNgioiV5;v&H9F-wYju^jTHr2`dQO1*Zat`#LF7BnauvuQidFoB4hg3} zV|5Fb=5X%GZXcITGI^TUI)rwXOCvuk%FHQ9ig%Z z75w*B)bD|Ffmc(2%ENJ$5$=5;zCmG+RYrJA08rz-_USt7t}njl_t|&9lDGFP%Bty* z>y=ktjiS^aWF-^Ic=+H-=UUqO)i!Qv!2%r0d;X+zWd--sE3DW%;WaH+{yy{6({hjo z+;79@7&-c>Q&3CN6Hz9vDkTe`i_F&`X!Kl+t4t<(xa2JSec|#>uh(G`-Yz2a{8cKU`ShLMOySVVd2}c)3UC=t~t}8k> zTyP77P31~!(7(ZzHQXsf_oain=(BRZP{!k&M;zUT)j4?fup(<;zYptkT=3=!GX?Bb z96w>{p}{wcrurErfct+Fb0fGZ6rmnL=-U}D0-uXaPf$*|s1@(KZtc!fw4 z^(}S!6yowjQP&Aw-`skNmBSz#FZCN&E`nU9P2KgqqX+#SZ2F-~|E{=R9CVcGh>I%c z)EzArd(gwWEyxN8=2W5J%TtS#6#6mVSg!uJlx7OrqksLYfY^f% z+%Mij;T{Ip$jBHugAn53`(>4J0a@k3$N|Nh}Emhdd39$tF zDI8St=%bI&-~RfyvMmUl5A3!8LI7C!^-A+qo}4VxM9KMUI@$Cq&%A*#X$V z4BZ+GHjyuke~~XvX@XhEe)}KL5&hbWbtbK=MMdnwHY|9nz=_qL+j&vk%_up$qS{GX{Qxs|+N*ASy zHlrvNhKm(~o7~d+1KB=k^`=g@7S_8F$Ho)s+o2<5kldxa(cc+S;a+5EIq(Q zomrtvynPq<0*g<(^cUMTj9eF=kVzyx+quGZR!x-BMgnd+wN1aKmInI*a%k)tYo-ms zSnY#H)cYT}PdFazcLNvka-)O?2w2(H4xv8s{bugPw)l5t+`tmCxbPf(3 z)khaylonYuTb>V+o8cE;e1V>hdYI|cpA#>dPd@b&y%q-!I3;)@eKhK#bn6d}PQwMj z0wDl`bgS;Wip#)-Jp57CDHIk{=&RpoOkVU2p>TtFOLN+6d1O zd7&GF4y+XubYnM}{^+y~`H98pmzuD+NBcnJ#0lFF6VZNseQ#fIGss}LibHT$Txk_r zb+y&ZL}&B$FJ6iD{`F;-h@yV0t+&mmk^4F+p=V1y9ga+}@-J1Fj9@5i_G`Fh=(6Y*9+y z=(0TRmQHM2ggXGF;k)Q-d z2fhy2q^&E9c!qv$>eW+4Uxh6>vq#X{eDf`$g7~9dquKZ~OPt-|TyMYq4v?_a85k`Q zvTWvl@`)#9JCn8}2HUN-+!Q&=1<9`(n|2}pZ0pgz=OOQtwLL7~7mMQTK3~``t;Y4x zM1T6}7q(V#VYK!->qYR&hr2p`YLiBOd39WzxI60TcH86gqTA~vtTd6k9ILYMeYV~P z8_8J$uHVfKS_fw~!nSSWO*g06X4S)CLe{luC?BWhneMA!Klb5RQ=5UggqyU@s5gY$ zA1+YSWUlqtRyem!LlgQ|4#rS%E@PFo>$1pT!XzF0m>qZA@xXXLx6jmOk;F_>hZ32I z%u#4QBhIX`^?j|}lr03gde(2&s@#U}WhwhOu`-4EJWNsAL`;kNcdp^t6Nn)RtvY!L z-4mTXH<2rqHEHJCW(FLITouGP3}F1j43BdrS6O8>vAKHevB$+d3w)$wLwMTAT+@V( z4PxcZH{U1+xmtf(t&V{*_&qZ15#d1WCS`1L#^&oe=A0{X4)ao1Y$+7$!M*QlW@QbB zlXE7Yf1bE4+GgAB=#x=VKGGw4x};2!3W(U~jMd-mcl?|fiE_)@xR^CA>UYacH`3-? zY$azp)*7XbaqSjJCJz{+F1ExHwAyN)AvviVjyk}fb+!uCYwXHqtS+Ih>?3D>*d{hp}w zU6$sb|ATVC#4R`95*H4Z&&~sD{tJF+K@n|W$SIEQsF^97J8WmdN}Cv2a@AA4H*zAs zzU(ql*2{q+!4EdqE~5ZWW6L9p8W%@#3Pzi7v$Mg58=3=NhooWKFt`8o>CcPtDHbQ- z)DK3+tTRI2K<3)UFhag|>eX^m&@#&|D~Z+xfRbUkg$Q`wq;q8J&z4($*4g)^-`Xzt zg9Qip?uUOd-HK%MZz7vlKAlcHc9ho>hg#C~85DI5b;Mz^G@0vfsijLpH6uHwiw&(W zofQp(iA>EsX}GAZxNszc0{f4-W0{r15>OJO)U^7jBbw8Dmk}4vsbUn5-RAbGz6 zd*JFLm#ai_fkTPdHxuZ=nwRA8?TT`gH0*D5Y*` zDZYh^Zz$$*zxy7083&UMUDTq8mKJma$CB4yca6CFS$Wk}P4}C=;F>q|VP{Xo0WB}l zXSdmgX3iVIwLRL2>+ZYnmJQf2xj?yGpB6Iq@f6>$EeP4Uw= z+ko;+LpU!}+4f!=ss$~dn{CjZZ>D1llVtjY*@pGRUJ`em$YcSCO&GR=owy+`PfT12 zP>GQ3_foeCK!u7mO-rDIO4xnr;eR~@0tdT3@W6wHP*X@a51b|H*na=}yU7%`l(m+F zL@dN~iG>5(cDUdr0jqBSN$hiU1W(jiP2}byRze}39evc1;$8;kB`|-$3T4u5IbK8~ z_P*Doq1Zq1_~WFGIG|%T_}O>#LcR2aG=F>Rt#m`=T323qRa#}W)g4WA`adTL+b^sb zuDIgLvEAQg$`YFLu^gxY|Nb~ZYFU`l*tY4ZsiO~eRAa!y(t4;g$Q7hZdD+kpk*gOb zxwbus*tM0PoD7X>K3rR?f8r|otYG8iXA4~IcfD6I!#2d}W47O6#{;>DjS18;0O&)y zv5NQ}(J;@5DvfmtJ`A)>i2RL)#tSwawHKQj)OR(y=W#qxc@qd1j6C6%*z5;{0dVpg zVlD8Q2sRCFYhcpkre+N%#y$1NA9z%F?6Jq_f&1~`ujWYl#Sgu zaU5q-!sadbRVkNW?|m*O>Uz%E6X~yieU!G{ZhQK8TvQmz`%F!BsHF-0d*!cxP1jy? zHLbb!y0p^DD^t7ZLi)s9zTuSaYo=Z$qGiX})%?->i!PiZ=QU#U^?U8&j7^`YL)^pO zvds!)I1YOo zr&r5)=W51AWI56-$4`YXhhp0Tgg%aIC~ys_fDVlAtkcFXZ(W*9UBGGcv*`pwlr2|7 zJcJnAXWQ?FXt-O#@>8V{KfqdX(tgx*xCKL(f4Y`ldTDX!2iqg@Bx(x2~N(8PBTCQ5B`k`>k$=o2P=~pisGI4$Eh`Q|p_F`fQ#z}{z{nD8f{3N4FbeluJ zNLbPFf$s2}Pfa;w!zVX8kF>P<{2(LX|2E1FH^@c*Wbm9z)$(9qOp# zyZy}OTL*MZ9a#Z{Oj)@!nQIH1vzFNeNCe+?Rnp6)u}`jVCTrV_U46);-4a}S#D(jfPxlc6bw=K#g|?bANOj<)*mn>6Ep%SAB-N3_9^Rr9d5-(bUyWJu&V)_nwoIz-|Ux?O~apwl43uTx8 zO5)ttKAwiept;ak{g(Qu(u-Axxc;;4# zHc#odhUGVjrj6Nt`yEz~_v6X1XPG6G;-%;G+OTdetkya2-VX*Wsqd;l?CZ$pg$?7w zai?1B|7a65Xoj7#M<5AA9@1-|7WM7p6Wo$T|B2E(3 zK34h(E}o;4S~4=9iL97gz{u2z+d7$oH?&7R_19}4dt=FhLI+F8jwCa&HE9?t)70dx)4bjGK-g0j`E_M$XTF_}(Vm5!+ zB~&}QRj_I>{bt_TMK_=VY(xV zme3*LbnGsNoXUX>;jrkx`s&}vVE$0lF?9|NsT57ayhkWdP#?gV`oJ~z#c@>Azda)oZ*?c|BSa9@4a#53uS_ueBuyw+T6ZF&a|Q{kEnbFHoIN1U5^=IN)& z@p3!vv*^tOE$jhqoPv06J;m_vO3Mj&ZNL3y@$)AVIaMe5 zZZfDSX$gB6a3xTq{z^7wFpX~K$u?fd1VuJd1B6t<*k^<1HfoN?HL&}}9^ed%++I}- z^kweqFlsohX-<~7q-wD^Og!~h2aV;ocp8m_yh*Vh zs-c{aiOhXmm6=4zWK2z+P1WiP-&t0cHhahH--e6go(x2IYklMnegp-s~gCect4 zsE5MbF;diqtHf)H)Cp(nRz=#Te%e2Sez8T%1Y0e*fI0rSW5jFdxCl5JPQeataxk#Z zIPDa%w}QhxZbwDF0AM(Z9wrLM9&@yu%?RC@J#^K#5%-jhL}bFjAP+w90NsE8ePUD# zmp^cXxa+RFi)-gv58wB_>6vf%3lFzAC<9xL;AwT$)mE27OG=xwo$R=w5vF_p@CUjy zu4clKcsFpM<&U5A8_GSA)y>s< z@5KS`r90O?9Zrx-Wlf7XLUZA4UY=b1qi|{I9b6H^8|wAfUn|^FJAvR49!^(YWfl76 zi6_v$U)Wz0Q9r2SNi$WTwDZ$WXvhHUnJ~%L2Kn54^G)K087^nG-C@VLvbt~$ zsDrF<)6M=k!f8JDh_W4J!=bWs%{f;NGu%_dn{T}tb!t~d(40=IeP&H@NmRR~>F@I1 zKidyokZI_wGuDmXl^gZJ&@{ZHd0nUMY?{_821(M|N*3nYy(cS`|0B0F~315P6qK9a8jCi-zqE*%r9ku~^@a zs^6^l4!DeDml>sC${$CiZ234IL|SZ6SPBctsIrtK7I{4i+9TgKbpykSFuVCW4#OnjRLBPiqOa!n!N83G^9!EM$ zF7dI*fjujO63z{)vb;-Jeb3M>;b0OuCo=xSUP^07s^LR3fl#Mjj@(KS(^wpc8ORx@ zol3X=_BL6C+-`@RWI;g=&gHgUs2_mhzrRIp^z>6t5x@THthWKJu)<2!UseMWR$YMq zF2D2=0j>!V@UX>*`tmYW>Cm9>HKK;rLi66HS=+Pg8iq}osqb6Q1Wut1>ieo>IwV|s zZ{o7~=4`$)a1nWNvV1oqD&;z$yYBhJ@6R6l=9_O$8yPcJ%4M7yYNk$&t$yr@Jeyaa zsTX~{&!+m03@WoNs;_!!fCSg%2S6>s5Mb)gnwG=nCPFEP1t7~ES>komUnOj!uBm~I z-*&tuG|ke+)qeKxgOA6y<-$;60v83Y7#Ll5zkV+LBqYq{@Hkw&Ez0d7<6K} zA6tAv2s0qmS`Sx0+pr~GDE;cVFqZ^(xF(!34iOdGo?vqZ`?HNV-86~9+E=V3X1EfQ zzc%KZQJjTm2pm5KA7$&UzoBf0DrGbyAlUK~i+gOCm;kuOFTIR7h4k@EpA&U~%F&kj z#^#%i(HD*?{rO+&^g+w5={`s^?Yig|xZLjy!uf0!vkYhft%TzmSVPr5ak7-1%K#AA z5wQ`b$FFfRMZO8A>Q8fN)oo538)Oo zW)X#&lGU&sq6@XGCNObJiZ%#0gv6e-0ypV*(%=pl^;F#Ti>q}V6J$k74YStT>&WWf zxp5_Kr=4~d_c+wV*9-Pg*nE8M*=Ny%4?aNat+#%5AwBHs4lHikqfYefVg_pZ+6Imn z_DVt#fA1gemJQiB^kcpCHxL)isXc@1s|t)Mbqp?4dFFT2 zAV%D$%w_3?b1tFKzwgg~77=sR)jlI$Zj0+~)5m^->^4`oAK8x!o1SZumcH0=Vy+|m z#LTvQRNHMv_kG_+JF1XuNw_0=Iu(@xH4PJ-5aN$MI#Q^i9aO?z#VBRVF z$9*OfDKSp@x^$>p(G;T{?EQ_CA<%Xt`2o<`49)t!XQ1>v54&$lSjzgTY)fKlot7hfpW?$~mK zJ(G1?PJiE(a%z9~_Mz8%X$XDBrfK1_?*2VZfBty^QrN03v+Q!^K#Z~l#HQY~p9L=L zKZT|J9k<^miwbM4vtIJ_5KKF9)Ay#2UVY_NnjAq7`n69jzXGke^2*(C8SF;)BX93( zWD7tYfG~CJ;ZCTJ?tD7KXolQG*J5AyyEA(jHN9->)qtC;FG?H?J&0Jxet-l8r1<~N z6VEvHl(9LJX)($?fjWY0!a1@e=L*I7S;J(I>t_M`I3=Glk$=@wFQMsvNPda6|cAKP~Ws6v9zV#Ea#;J;48w|Rr?RMCa zPCMmSG~c`46Gfg?XxN4L@G7zGb~}iOgw?#;Zo5@HNZ_<;Yu{D5om#`Db_H-c?Hezw zNCL26po;yNFTMDpxYzl}!i&(-pIk;ny9y9w(b4DI0~QF2Q?EYQh@fa58EW(@s3g_7(0KsE~gzTAB^?8XU zKPCs$0$6Yw_!Ymtj28URLb9z0ULtICKO10wEU8BwKk*KX7eBODCoUYpvrg%s=4X`Toeo;oy*MA`maQ;DQvg!@>>; zlAoB6_XGFePuEVpN{*3RYn^o?2lz2+IqxE#T74ePfJ-sl&?kQHjGE%$pI!52n(;OgTY&3 z%nE}}7`(zq7Qj%PCz_V#VFSDo_41cO5--27+Ao>8Vn)Lg8q@)g1sCMs)r%CiVXa?N7L3Cr*7;JH3V;uG{E7*EHaU8DMet#53dS0gWnh)!kF#X2x!~ z?juN~hcJsoz`;LUP=G%ZmFka2vF{%*{6j402L`ZVusYXVbIa-9GcPobKC{+Z^xpTp z*SU@E^l@*0*nTthD%^M48gzTqY5new+v$zhUyoenvh=A>e>xe&8jx#ggq!?cf8%v= zJoxZm9uh7P3m9-JsBK|)Ti8ledSRDWtseU-8Jg;HN=A}%{oMqrpNXi`*)CpxpHc^; z+BAlOo5`a|Cp3zDR=$XJ&{q?T^jy=>?}3$&0{vdU3wT8`y(>3b%L1{{XJr;{V9N)7 zO~KBcLZ&h70PMMK7$!C^*mVTkyBdW0fyNH*6ecuc zsq*!0g4i$)YzASq+6J^Thm@4f1#eQ6P#hEzIVMWOfjxZ-&cGXL z`#k*K+?at>tI&q^bW?teihwJX(X_w(B`zY|B7g(ye%M{%=(P90@BJOnr0)153uM@% zc-t+v$Z8}Sdb2G*OXJ3k>o05m%hdFJXlS^lW$w~e+cVrlzdCx_Z=n{>^{FkTrM=PU z!t1(xUVY{e<-W5U!sTx61dckOpSASC2WK*qJ(TrROIh@0()p9`j1S|pBEAYUbr6>K zs<>y*m6b}AA#1)nj>^=|)08LJ;ho(j!Xg4FzzhQ}n_h+HIuI(#ctUN;=msNIB6h(W zB2gmi5SMliH$>L9g_eNZZ>7b_f|w;TtArnBXsW+ZqMv)t*c5*c0X{8gFk)tOaplv)$L$=?1ANRC3H}R=WXOw%B_h?+y z+u^kBz0sAsezSCt+o6C76-%t-_L&>7A*1FKu~E3Mu==F4PQM24i=j>w9j|5h_2PjU z(h@!74lV}9gL0N*?F}=83~)6-NM>-hon!uV2(D!1zm?GT-m?EZq~SFjnZeT#r^U9u zG)zil3R{X+xFc@9wSzjeX?vop;-!hF;fB?ZZOGxoSV_uX@K(Cp?t6$ItV=GwNKP19 z{?jYaDyywV@0|IaE`Fgw>ZxCEj@@!{UxZG5QXq)5f4uizDcjReKP9$i@I(PI7ptH) zg3|x+38)mKH1+x=FT~wCaZJ9;6D=b9lv{C$d^R=;e z>FWYsZ}Q--5mls-*P2n9#;GZ;malp+)Pe?cxMX&-V+piiYBM|dq)Sc8;5Cy^Lr`om zqG>>?fYgj<>Ya&QmD%S=h4&bV= z2T;9-^nzQy$KYLH!G&ZC%#Al(C(3WE*1?7H0x&aZ>)(?GmHKn@sSO)CY2Z#*CI9;9 zqx6@D9+2}R;kNp{@Bcv5L9H(OwRgSyJ>5EU9oQ~^CDsgFFxmLiAMcg3B%#}auYQ=1 z0KoeOZD=~9(u!`gVPC(d93?ulC(DL5+P37rd!kW*g?qrX`%Nd=VH{WIdC0dRd07rB zV{`57tUnLF&64KHlL+2HgBb3bGUZp(?OVAfPo6yYTTIUhr{vkUx(aC;xU#}>Fq{V` z=_pTxUBKvLF>4H8c>B!VaBceexie$7&!s**G!6UQ9T;tS^tqBHHwCmap(S4zj{Avt z826;JXXi^pkk?;#9bI+Rm65AhubxjhBVx_Z;7nk0faA|zhyXb6yz_|@LI7N{mr}7b z*P&LE+`w%CJOj79j{ly1=4pE5;fKYI@)J)yK`+ErOL(Th%H~Ht@=;O1FEsAMa=5K; zT2CXEhq3);LJA)6v4wTz*bJ#}jH zo!%CRC6FB+mKyM)o^)DnY({iA+IMcjw-UZ*5Oj8^Wz+35iAy5-*`#wO9;8V*nc>_? z=TD7MR;!6xU^36PAuYI3ZGKNMW|%rcvk*Wu8UP9VMl;^!?;5a&OS2^Kw!o+d;M|;< zpKEqpqSuT#%`_qm@q!Nr_+-X!5PaK(NIakxkLC zg2%qVnWHE<{|Dz6XNNcm8fF(`XPQa&K*G)o!1Gq*aNdk@VL=b;^f%skot}C6X#qvp zePOfpV(^=dFpZbY|FMGAHSKXJNRocps6CpK^ z1W4q;&XmW7s~_~IA*TGTz3*5(w{d7lC$Ouq&Ds;iC7690um4Rtb=3QQWom#c=V;RG0!iiUTbl7Yt>GNGD>o14ur%3PzI0#y zcE^Ur1I46r!gX-@nnF__$DZTX%%+`p&ct!HY!192I==bV;Q6*9DGOlGpbJbjaZ@!Z zjg~c(0ceP@R)7qsm~egRx{B-D?xt*)W)9Y!fj#Hc#_MzzyTqt7!&19B*mF^>*ib(; z#MKbE&9{#Z-wvp?&$z$q&O2%H`RCDWv(HBBLOH$EQba@IbP3#)DgBTRDsWXWRrqK8 zg*#*%Tu~>cAe;^iMQ4dCgSf|OM);+kG+W*?iBd!^Wb@pX6`UQ6WnuR4#N$thpRdK1 zSb~;}z@@Hl`r4@Cp{47l&wI;QZ!8_WechJQCOIIgQ40|_+s=361BYNA!N8ru)q7RJLRxitV+Tg1{?a^{(L**rVoHEGhMP2U>uWLtp(O5^~DbM9&15Ss-@-DsIgY*s4Gp&pLt z%Aewb*6qk2u-9MJ;H91&qHYITAK+9)p#!PZ8Gcr&#bh6kJmI@8wS>g%m!^Fch7%Bb zH_r4na%b`54U*av;bOT;7`BdfOCp2o&I}M2=3Bvp)z0C zeo$)w&b3n@-#&f)CgECLr56)Nqm^OrN2RZvZ`)5PUj-{mDKeHh?+wy6=d3u_v}_{< zQ?*3znRAQ7|E|gBPMpvby$fErBKP%tj5l{GNd~|SLV8e#ucMW7$?U77!ii}CyE80l z15gz$>qoW;HzFms1lU82z2Dqt?h+?a4-q!(e-DwnIKBv@5Ft@JQxn;CsR=t$HAGqt z$Y6fk0O!)6bSNuMlK#WpzZbn2e6hphsvhvlEf-OXOuo%V`PNK89S|>lI;5{la`pSG zue=g>Tx7r%-eCg4e{e&pl)$(6=-CgB5LLZ$YwkGK0JTlsi5x16e36WXj(+Akz#1 zsAtACElYlYyP{DGTwTtpf+&$En3h=e6G9GbIQ`}Z0`;Ubgs2t$8)EH*>q%oMp;c<} z@5{#uA0M$T0QyMZ{|-E%)IkrqLx{} zD(bMNPoFO46n~AYo=?QZ0st=zOL5L44wQwtgX}>xX>ikrMe*LDCsQXTTTx;IcI~qn zwx;YuCZo-PeC}D}`pVr4UQpb>_WB!l#@i2Z>iA%4mr=D6J=YdWV3odQ zu1o8h(y0BwMu%xPI;F%6JyGpk_cGr$-)eB`BPMNAD&l|7fNRpLIAp`t_*NO)N4P37 z_UbA|A@B~d{fodgoZA>isP#J(?$=#&bri$y6ZgyTr-g$!CPc9ko1A6KOb2MG2dK<_ zed&O+owV#gfkEnHk3A+13gJlb$tRzrfBy3&`35i@H}1nx0ly@D=tCcJihoNNz1~c@ zTi()c`HNFsFn8(BMKzpxr_K#6-)SfJwwH2CbAHf@@0$-(vRs7u0`jj*)G*^3Y_;hj}o>9pXe zX>w`9S{`_Rc<%Y<#18HGxQGCoF90U&v0jSzdd)Wb>~hEkY{_7(3d7Q&z|^PPsDS({>3%xNkREQUyTm|JLlm-dpv8FGE9jZiBTO zHTJ!BWoUp)8{DaqI2AmYgwp%ka<*_O%>hrFeBRmPXvj4byl_oC>zt{vaaVIB-iNs5 zy#d!$4i$OvP|YeDR=uXcp#x6C*!n(#?36KY0Vy5cq|*l$P2Du!Pyo_MYvu?aVxEh8#wOqY>w@aE^qyD=H|d!ba+$2Okh$_7E|#l4q|u=bAf$%X@_@LfJ>g zj7hF_VtjB>GN2+LLi~F+0u{F8w2cNwfwRo=PMT-l`Q+4Y=&fL+noh0m0+r*g(uexJ zt$#~jE?kXV$%;K~nLKNp`o0s+^nF)Nk#ld-=)Tti4c}1T0$Shij7%kb93nqB*%qVL z%iuv)p;%EY6qsurW;OL;HWaAs8^%nSa;{%twAbk1HF4r<97e7-9iH2N5K6g>jB2y5 zoL8wxdPfC!LvD#u*+JEbd2lMJbcxe7vL)IMaaI=}<$Z@}4C`;+o1`nDG+<>pC2B+g zJNud(eLPbrPqRGgeRsCCsngpa)*7A*5ZL`toK_fxT#+^J$>W$CT3k%XydU7 zqpu6kT|VmmXSPvI9RAgm^UmIdM!7}>FI;DwdDc&3z4y;Kgi1Sg+mIVCN+kJZ?Eo{- zawMj5P;TfYGLvp+rfZ0--b_3sa)C>TLJ2X>%wBHS) zSbA}F$z}2Nsp&X?cO19x|6yR{K&|QP(JkH`k&vA{`_3L1nuboWefgPhYC3?t)NPI7 zS#o<1&yOt*XrB$T?NcZmO<>;_(`cr!`joTInnt5sBQ%5S_19iGgyG|!OIw%xEaRa+ zvZzpqgfxcS7W*|Wiac8_)_0Y9GC^1Ba|6FeGm(#K$fU&6p^gZ=J!?l%dp#YYW>v+5tE!a2Y_ZW#`geY$l7+ zc2o(!q+hAX)S(3Sv_M3j8*I{Gwq0q;<@josPD!8Je$-4X{iX58&G&jw{lI0?EN=t# z^ilU}Cox;MzIc73~UJ9pCOZy`K>`R>{QEN!!OdD0BBZXMrwW`@XVMHm?K%Ibt5* zO7|yEo^1z@?<1#J=IBf)R6t3KoZ3(6iS%We4eAVHUXvqELxg1}DWBL8 zMBz@{8Ft)IdaiHcP;G&m!qR-dN&4NREY zF2NQqeIDczvDrJusYeD`qsz9*2W;9TH>>G~E;3MOK(eOGO*+!BS>*Ai+{vQwc^ zu5F+VS&%iD!KTG(fs2%Aa;jD*rmYpY49|hdG)&_+U;84x&FgJ(UV5E&#+j32Hk*24 zQcjHXSW$ZOr)s0l04={NlmUc_azDMucuC<`tX?@4>bZUZBeok@!`K$J(T10&ZDOvCG+M?fiyj;&zZvUGRt ze|sYVgYn>LkY4#e%A?Rs7}YEwR9D8PFVYAP?p^uS^BV>Oy9_TM?OCU6pWg;R^?uJ~ zscpnsS_xu3muk42H7nb%-%CIBDbhJ=cV{BQEOowm2`n z-hBPFU4V|Hiz)FCsLnN6Tz*{(b+Rn#C5>ypfvPUK)}*2HA9YwiWA4I=qw48ePCs))o_B$lTxS? zW=)H=P1~(*8iuv}b@b|tY5>)hI#ao!-BgpjV5LB7Pnh7Kqon-PkufNFrH&$h*#Tq{ zY-?WOxO0W~P@4TpFj6W8onN9#w4v=jVK%4}Z|MQ4W$UWf4=|_pBV4Yr@he zX&_K4g%MQ9H!L?Ds_EKR$@vhQJPoF#Jo01Edp3la`ZKpp3TA+-^0K8ZYM#<2B_Bnh zWQP!HaRy3ELZRAhTF6>>I`m%wE~0;t^TKuV$rBeE88es~oBu<(%vzxWGZwA2fQ8#& zL!25eG-ec5cUL$hjYOy-75)QD8}me!W;;qJ)ALp}qm!_YVuwT&8$U4;zX zsHgzhTa|S9hlNc#t)%|gr zOQEksFd5p#ZFe!t;bwMob#m>%T|H<1UTL8x4b7W(ldE=jDO`W z6aXaGgO>ZM?V8)t(1js^l4=Zf$dvQXIh6jz>t6;hTqmD=#&`f&%y@2FfqYBN%;^S9 zK_n`(SZ3AByHGhv$}DvExtc?mHgcQ6EkRPHSG`gHWUe(E!mZ<#%7X<_!|nM2<1P!# zEs?p*4MD11P64(yJrxzHfzLzQbEN4Ol4IoHH6ww1|}+@72r@J&MiZw-L!P< zJ15^&v5+cPM`q$NvD!3DD^X{{GFb)pP>F`v7t-LE&ztLut`fede|w)@akf^C7ySHi-fcdq66*rtx)ROyNSIUrXPW<8p(%B#P&Od0%=YJ*3-?-ou^+U;szM zIFPhyTcEO+Arkg!R4*WQ%p}~+99bD+xpmTQEpu=Ll%l^V`QSz*@+9-Q>BAE3Fd%gdRhU( zwppp11FG8Du5U-%VbMv08o=?9s{brgwl=-mhaDg+am!4W%!#<=rfk-=g}vD5L9KS5 zMyeny&Gqvs=be2Z{THwQGI-$vfQ6AUQ)4OS){@ub)k;MTq1T3l;b^P4CglNo2s<~b z5j#T>mn`4MMr2gdu@5v1EmMH@{!_rEuWUrRia<}$lp0RK(sBCHRY_9aRh>Sm18|uNoj9qJ z2(f`v%LS%R@Joqp7$Y)}kwCf5ppN6>Mlm1k$>Yh-QA#=cOS57tHEmQIL)*40x|?`~ zAV(TUl587^JRy^ zZG0t5l|sW+DVJ4nry<0$;!2t8krp!M5e6u0lNCDU%t;MAg4x;9rKjM=+}6X|RdrWM z8v?3jA`fEJ1*2ZYyv89F>n!;6rss&q7o^Z4dtfjGs#g*Jb6e;juO!*Cnn+}hWvATV z?8HPndMe16PA9|ZQ~(sfAC%EiMvvE-ruVu+Z5t=slNgY)tybzV<&lYQfDRM0(8v)qqXKP&Tb8UU|k{raCSnRo|)ULTq0xa{jr$qW`ArzYV~4~ebwoo1FzG-L_4qEsb(Ca+BI zF;S@9SRX6sPywlwoKv8e0zfx&@O1!WITYA(?STsAEOW@KJc zlNl+{`=#|d8B|b{!V;#0P};EmsnpFTue_2-SpuOtp%jQP)n{r3EBA$~6{HM4T8?%G zXV){eaIBzZ(<-CIhu3!E%3N1sNV0P&=Aah3$AGdlh-*};>ASGOihtCAWU=0^@idMm z&+UX$k*a4U(DfO00gXyq6LkR9_8}{)pI-zEknA(DWhXKzGk5zj6FQk^4PTWOTWEnoFUAhIJ41k&e zO$M9>TJTUIAa!+FS>-AQ$_FF%5;exIr4n6xFAdYy!PmosqOvhm_`99mN+ z3M~s~n%6EgE5^CsLgAnbcV5z9TU;GaWyRMpC0Sb^eno@V4w^D$%5?f~zWztR3m3%5 zw+8f`2v$2+u&9$CbG44n^ij5|7`hKdyeti)ctb=U*4R&Yx$_4q8V;x+RyK4U47@(c zh>0pvasf)kg92o>e7!4zC0$oQqx-Vq^7kSlu*S8VRW?yDIxWSB#9dHBY!;X;QIa)G zt?5v(fWa2TY$JshR8@pfX>p*9Zt87$w5;RRN4x6C+_mx2el=yFz#hdzEpd|R4JFhS zPjc4d6=;G3u?o6WW)xT7N`q4sZwmbnUH@a?rPndXpS1IsktjwI zEu^!D;k!TjirNIAo(hAk7g)6G!1=gM7Wkh831+kmEjE1cx=Qvtj>0z+}0XUqx`>Q<4? zw`7?l9b}XNP86!WmU1r+oGbw3Nuy&D;egpbs}4-l^s9@8Li^gr+?PhrtN69q6~M_N zTen|KD_80_6(Pg1rUpKR-uj>6w(Rvk4qmv9Ip*Yr#?18AfpHQzfT-nIN*^mpDUKEH zqvgtM!&(k4Q&ccREI7_iO#*B{n`Ib3tWr+tCiBmp)RXB_MM4Y{(7EO-Jx}lLgyl{nUD7xUtzwI@fG0nDQ$d(e0ZG{;DhJ>aaa~v{pjh9x zX?AHr!z!5Ixjmzj$lHU}^gY=5XAe5;xjqAOnoR5etd=!o-JTzkIu7fKQi(DcR8FIo z%*W07aCuO`bAzK|DwEL%Nl-`RQjlPdd#@gfb3qZ@G*Skg zkcqSmW-}Y+pqAruph9H9!wy_(!NZ7&c7!(RRW7FxMtRRhl;f5?pt@MWR=*@SW{Z(y z+jDp=p#fh77`UhjjqXfwqdXTkHVRB=#>%Ocwy9hhRgFi<_DJ8H852lRmR5 zy6Q`&raWB1+~>%l7LthAeNzBZV9JBB08f|rmF^T&2KAjC-bB`}EaMC}VGCaQy?7~W zS)>W3v^6yK+GOQ&vfJ3tt}z-g=cc7x@hkC|d^AXh3-ix~%WLCyIi&*br_^1)GAOpqK!D}vG|l&t116m;^DCC|0;Od3qTf|XSGOzo5ZGDEjG^FmGwwr zEI5^jp19ZmQvoCe8`EJ82V5dsfN~(CVubl_i|@ok(E4i>UA@*f*nyG zVAR6cB-piWYDwy(VZ`Yq-wiB66rf`YcGYoczP4e6bE4*QbmPIU)2DszY&w&cjpJDN zde1Grh0IauB+iAgO5ui{{A1fI#lZbF@$s%mTo+84bk;TW|H$?K40yHIQAZs${w*3A z9}74>Hs&Yd$Q&QZOI+~ONwHalD~m?ewkl8TW){iF)|e~=w{=G8&)8_$!C>-kxUl@H za6+YQTr_faJIgPpqaM>Hm-=Y@*^=E*BS)<$w%ZI#AKDAyzB6<^5{xMIbKR z3Ol@^%myoXP?_8fvXBw(>eeqSc^VUscCgnQ1HNv-qYEzCTWR`OH_evvnw~0RJq-m< z&9g=+knFfrwxF1wTcvm|dzpX=s8meX{xJEL4m54T{lI8eQcdsz(!_q!v7&$0BTkDn za}AA*+!YD+_w?qgcl}SV8va+W|7XFg?>gd$ljo+fFO4VhVi6V!H1eU?>=DppPbGfm z!na7b^W-RH7O683d4Q@bgdK%?X!Zho* zFAF|pR=z-Y{KbruA3eo9~tmqTFh`d%`|e?zv{{K|MvC&EAaYPt|N{( zV(wQdIZGT9e*>xG#B_}eXd(Q*mA=bwx~drPR(?5VB+T{JTW<*oq)uIuiP3;E=ES&-o-(D9*NI`CO!3dnz9>--`>h&&yGP3_3(v}fO-uo z9x|lM^gVscH8=0OwBaSB0hw|olkSm`kON8l92_TigjD^MUyPaZ(N-BqYVuCYK?B#0 zC?n@@>CXs>;%`6$-!>%x@*JTYM!(q+uW^I<7HZi`WjWtg{*?yZaZ}^h)~W5KY1Xtx zs**olBdLx_we(1-MSFoLaRPb1AB^zy!J9OFY --repository default + ``` + +7. Run `codex mcp get vidxp --json` and start a new Codex task before testing VidXP tools. + +## Updates and repairs + +- Desktop: use a current installer for the same channel, then re-run **Set up Codex** so the private runtime path and plugin source are refreshed. +- CLI: use `uv tool upgrade vidxp`, run `vidxp doctor`, and re-register the resolved `vidxp-mcp` command if its path changed. +- If Codex reports duplicate VidXP plugins, keep the Git-backed `vidxp` marketplace for release installs and remove the obsolete `vidxp@vidxp-local` entry only after the Git-backed plugin works. + +## Finish with evidence + +Report the selected surface and release channel, exact installer or command used, `vidxp doctor` result, registered MCP command path, and whether a new Codex task can see the VidXP tools. Never call an unverified installation successful. diff --git a/plugins/vidxp/skills/vidxp-install/agents/openai.yaml b/plugins/vidxp/skills/vidxp-install/agents/openai.yaml new file mode 100644 index 0000000..d272227 --- /dev/null +++ b/plugins/vidxp/skills/vidxp-install/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Install VidXP" + short_description: "Install VidXP Desktop or CLI and connect Codex" + default_prompt: "Use $vidxp-install to install VidXP and connect its local MCP server to Codex." diff --git a/pyproject.toml b/pyproject.toml index 0fa6398..baeb6b7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -79,10 +79,6 @@ vidxp = [ "requirements/*.txt", "migrations/*.py", "migrations/versions/*.py", - "bundled_plugins/vidxp/.mcp.json", - "bundled_plugins/vidxp/.codex-plugin/plugin.json", - "bundled_plugins/vidxp/skills/*/SKILL.md", - "bundled_plugins/vidxp/skills/*/agents/*.yaml", ] [tool.setuptools.dynamic.optional-dependencies] diff --git a/release-please-config.json b/release-please-config.json index 5ecd2f6..43e6a57 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -18,7 +18,7 @@ }, { "jsonpath": "$.version", - "path": "src/vidxp/bundled_plugins/vidxp/.codex-plugin/plugin.json", + "path": "plugins/vidxp/.codex-plugin/plugin.json", "type": "json" }, { diff --git a/release-please-config.stable.json b/release-please-config.stable.json index 45d5255..dbff67c 100644 --- a/release-please-config.stable.json +++ b/release-please-config.stable.json @@ -21,7 +21,7 @@ }, { "jsonpath": "$.version", - "path": "src/vidxp/bundled_plugins/vidxp/.codex-plugin/plugin.json", + "path": "plugins/vidxp/.codex-plugin/plugin.json", "type": "json" }, { diff --git a/setup.py b/setup.py index 31da439..59551c0 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,5 @@ from pathlib import Path -from shutil import copyfile +from shutil import copyfile, copytree from setuptools import setup from setuptools.command.build_py import build_py @@ -13,5 +13,9 @@ def run(self): target.parent.mkdir(parents=True, exist_ok=True) copyfile(source, target) + plugin_source = Path(__file__).parent / "plugins" / "vidxp" + plugin_target = Path(self.build_lib) / "vidxp" / "bundled_plugins" / "vidxp" + copytree(plugin_source, plugin_target, dirs_exist_ok=True) + setup(cmdclass={"build_py": BuildPy}) diff --git a/src/vidxp/bundled_plugins/vidxp/.mcp.json b/src/vidxp/bundled_plugins/vidxp/.mcp.json deleted file mode 100644 index bed572e..0000000 --- a/src/vidxp/bundled_plugins/vidxp/.mcp.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "mcpServers": { - "vidxp": { - "command": "vidxp-mcp", - "args": ["--repository", "default"] - } - } -} diff --git a/src/vidxp/bundled_plugins/vidxp/skills/vidxp-find-video-evidence/SKILL.md b/src/vidxp/bundled_plugins/vidxp/skills/vidxp-find-video-evidence/SKILL.md deleted file mode 100644 index d78fe75..0000000 --- a/src/vidxp/bundled_plugins/vidxp/skills/vidxp-find-video-evidence/SKILL.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -name: vidxp-find-video-evidence -description: Use VidXP to search indexed videos and surface inspectable evidence boards, keyframes, and clips before analysis. Trigger for requests such as "find where X appears," "when does Y happen," "what is said," "what happens," or "show me the matching clip," even when the user does not name VidXP. Favor one-pass evidence delivery and only add brief accuracy feedback; do not trigger for ingesting new media or ordinary video editing. ---- - -# Find video evidence with VidXP - -## Workflow - -1. Resolve the `vidxp` MCP tools, then call `get_workspace`. If the requested - video is not indexed, explain that it must be indexed first. -2. Submit one retrieval job. Use `search_moments` to locate moments; use - `query_video` only when the user asks for a synthesized answer. Use - `command.query` with `search_moments` and `command.question` with - `query_video`. Set `command.media_id` when the user means one video. -3. In that initial job, put exactly this inside `command`: - `"evidence_delivery": {"mode": "keyframes_and_clips", "max_items": 3}`. - This prepares the ranked board, standalone keyframes, and clips without a - second retrieval pass. Never send `command.materialize`. -4. Call `wait_job` for bounded waits. Pass its `observation_token` as - `after_observation_token` on the next wait. When terminal, call - `get_job_evidence` once. It returns the concise evidence index and visual - content without the full structured job dump. Search and query may take - time; update the user when the stage changes or about once per minute, never - after every wait and never with an invented ETA. -5. Surface the returned board, keyframes, and clips immediately. Do not call - `get_job`, repeat the search, materialize more evidence, create another - board, or perform a self-directed verification loop before showing the - initial evidence. -6. Stop after the first evidence delivery. Only when the user explicitly asks - for another selection or format, use tile evidence IDs with - `materialize_job_evidence`, or use `create_evidence_board` for a custom - selection or `next_start_rank` continuation. - -## Actor scope - -- Actor data is available through `query_video`, not name search. It represents - anonymous, video-scoped face clusters—not a named or cross-video identity. -- Treat its image as a representative full frame, not an exact face crop or - proof of continuous presence. Do not claim exhaustive named appearances. -- For named-person requests, surface the best scene candidates immediately and - label uncertain matches as candidates. Do not delay delivery while trying to - prove identity through additional searches. - -## Output - -- Lead with evidence, not a search narrative: first embed the returned board or - frame or provide its working resource link, then list the ready clips and - keyframes. Use the returned `local_path` or `download_url`; never write an - unlinked label such as “View evidence board.” Use `get_artifact_download` - only if neither is returned. -- After the evidence, add at most a brief accuracy note. State uncertainty or - visible mismatches without launching another search. Accuracy feedback must - not replace or precede the evidence. -- Preserve the source job and evidence IDs. Describe scores as retrieval scores, - and distinguish a visible appearance from a dialogue or caption mention. -- Stop waiting on success, failure, or cancellation. An empty result means no - matching indexed evidence was found, not that the event is absent from the - original video. diff --git a/src/vidxp/bundled_plugins/vidxp/skills/vidxp-find-video-evidence/agents/openai.yaml b/src/vidxp/bundled_plugins/vidxp/skills/vidxp-find-video-evidence/agents/openai.yaml deleted file mode 100644 index 4d2a39f..0000000 --- a/src/vidxp/bundled_plugins/vidxp/skills/vidxp-find-video-evidence/agents/openai.yaml +++ /dev/null @@ -1,13 +0,0 @@ -interface: - display_name: "Find Video Evidence with VidXP" - short_description: "Surface video boards, frames, and clips first" - default_prompt: "Use $vidxp-find-video-evidence to surface the best board, keyframes, and clips before brief accuracy feedback." - -policy: - allow_implicit_invocation: true - -dependencies: - tools: - - type: "mcp" - value: "vidxp" - description: "VidXP video search and evidence tools" diff --git a/src/vidxp/bundled_plugins/vidxp/skills/vidxp-ingest-video/SKILL.md b/src/vidxp/bundled_plugins/vidxp/skills/vidxp-ingest-video/SKILL.md deleted file mode 100644 index 198023f..0000000 --- a/src/vidxp/bundled_plugins/vidxp/skills/vidxp-ingest-video/SKILL.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -name: vidxp-ingest-video -description: Use VidXP to upload, import, register, and automatically index video files through its MCP tools. Trigger for requests to add, upload, ingest, import, register, or index one or more videos, including attached videos and accessible local paths, even when the user does not name VidXP. Do not trigger for editing, transcoding, or searching a video that is already indexed. ---- - -# Ingest video with VidXP - -## Workflow - -1. Resolve the `vidxp` MCP tools and call `get_workspace`. Do not import a video - that is already registered or indexed. -2. Choose indexable modalities from the workspace. Use `dialogue` and `scene` - for ordinary content retrieval. Add `actor` only when anonymous recurring-face - clusters are wanted; it does not identify people by name. -3. Call `get_runtime_readiness`. If selected models are missing, submit - `prepare_models`, use `wait_job` with its observation token for subsequent - bounded waits, then fetch `get_job` once when terminal. -4. Use `ingest_local_media` for one to ten paths accessible to VidXP; otherwise - use `create_media_upload` and give the returned link to the user. Keep - `index_after_import` enabled unless registration-only behavior was requested. -5. Poll the returned ingestion or upload ID with `get_media_ingestion` or - `get_media_upload`. Honor its poll interval, reuse the same identifiers, and - do not resubmit unchanged work. -6. Stop at a terminal state and report each file's state, media ID, index job, - and searchable snapshot or generation. If indexing fails after registration, - retry with `start_indexing`; do not upload the file again. -7. If the request also asks about the video, continue directly into the VidXP - evidence workflow once it is searchable. - -## Long operations - -- Tell the user that model preparation and indexing can take several minutes. -- Update when the stage changes or about once per minute; do not narrate every - status check or invent an ETA. -- Treat files independently so one failure does not hide successful siblings. diff --git a/src/vidxp/bundled_plugins/vidxp/skills/vidxp-ingest-video/agents/openai.yaml b/src/vidxp/bundled_plugins/vidxp/skills/vidxp-ingest-video/agents/openai.yaml deleted file mode 100644 index f502ebe..0000000 --- a/src/vidxp/bundled_plugins/vidxp/skills/vidxp-ingest-video/agents/openai.yaml +++ /dev/null @@ -1,13 +0,0 @@ -interface: - display_name: "Ingest Video with VidXP" - short_description: "Upload or ingest videos and index them with VidXP" - default_prompt: "Use $vidxp-ingest-video to ingest and index my video with VidXP." - -policy: - allow_implicit_invocation: true - -dependencies: - tools: - - type: "mcp" - value: "vidxp" - description: "VidXP video ingestion and indexing tools" diff --git a/src/vidxp/codex_plugin.py b/src/vidxp/codex_plugin.py index 5ad3410..4f2bfa0 100644 --- a/src/vidxp/codex_plugin.py +++ b/src/vidxp/codex_plugin.py @@ -17,6 +17,7 @@ PLUGIN_NAME = "vidxp" MARKETPLACE_NAME = "vidxp-local" +GIT_MARKETPLACE_NAME = "vidxp" MANAGED_MARKER = ".vidxp-managed-marketplace" MARKETPLACE_MANIFEST = Path(".agents") / "plugins" / "marketplace.json" @@ -52,7 +53,10 @@ def to_dict(self) -> dict[str, str | None]: def bundled_codex_plugin() -> Path: - return Path(__file__).resolve().parent / "bundled_plugins" / PLUGIN_NAME + packaged = Path(__file__).resolve().parent / "bundled_plugins" / PLUGIN_NAME + if (packaged / ".codex-plugin" / "plugin.json").is_file(): + return packaged + return Path(__file__).resolve().parents[2] / "plugins" / PLUGIN_NAME def _json_bytes(payload: Any) -> bytes: @@ -65,8 +69,8 @@ def _write_json(path: Path, payload: Any) -> None: path.write_bytes(_json_bytes(payload)) -def _bundle_digest(source: Path, mcp_config: dict[str, Any]) -> str: - digest = hashlib.sha256(_json_bytes(mcp_config)) +def _bundle_digest(source: Path) -> str: + digest = hashlib.sha256() for path in sorted(item for item in source.rglob("*") if item.is_file()): digest.update(path.relative_to(source).as_posix().encode("utf-8")) digest.update(path.read_bytes()) @@ -109,16 +113,9 @@ def export_codex_plugin( plugin_root = plugins_root / PLUGIN_NAME marker = root / MANAGED_MARKER - mcp_config = stdio_client_config( - registry=registry, - repository=repository, - index_directory=index_directory, - data_directory=data_directory, - device=device, - ) plugin_version = ( f"{__version__.split('+', 1)[0]}+codex." - f"{_bundle_digest(source, mcp_config)}" + f"{_bundle_digest(source)}" ) staging_parent = Path(tempfile.mkdtemp(prefix=".vidxp-plugin-", dir=plugins_root)) @@ -130,7 +127,6 @@ def export_codex_plugin( manifest = json.loads(manifest_path.read_text(encoding="utf-8")) manifest["version"] = plugin_version _write_json(manifest_path, manifest) - _write_json(staging_plugin / ".mcp.json", mcp_config) if backup.exists(): shutil.rmtree(backup) @@ -224,6 +220,88 @@ def _run_codex_json( return payload +def _run_codex( + command: str, + arguments: Sequence[str], + *, + runner: CommandRunner, +) -> subprocess.CompletedProcess[str]: + try: + completed = runner( + [command, *arguments], + capture_output=True, + text=True, + encoding="utf-8", + timeout=60, + check=False, + ) + except (OSError, subprocess.TimeoutExpired) as exc: + raise CodexPluginInstallError(f"Codex could not be started: {exc}") from exc + if completed.returncode != 0: + detail = (completed.stderr or completed.stdout).strip() + raise CodexPluginInstallError( + detail or f"Codex exited with status {completed.returncode}." + ) + return completed + + +def _plugin_version(plugin_root: Path) -> str: + manifest_path = plugin_root / ".codex-plugin" / "plugin.json" + try: + manifest = json.loads(manifest_path.read_text(encoding="utf-8")) + version = manifest["version"] + except (OSError, json.JSONDecodeError, KeyError, TypeError) as exc: + raise CodexPluginInstallError( + "This VidXP installation does not contain a valid plugin manifest." + ) from exc + if not isinstance(version, str) or not version: + raise CodexPluginInstallError("The VidXP plugin version is invalid.") + return version + + +def _remove_legacy_local_plugin( + command: str, + *, + runner: CommandRunner, +) -> None: + plugins = _run_codex_json( + command, + ["plugin", "list", "--json"], + runner=runner, + ).get("installed", []) + if any( + isinstance(plugin, dict) + and plugin.get("pluginId") == f"{PLUGIN_NAME}@{MARKETPLACE_NAME}" + for plugin in plugins + ): + _run_codex_json( + command, + [ + "plugin", + "remove", + f"{PLUGIN_NAME}@{MARKETPLACE_NAME}", + "--json", + ], + runner=runner, + ) + + marketplaces = _run_codex_json( + command, + ["plugin", "marketplace", "list", "--json"], + runner=runner, + ).get("marketplaces", []) + if any( + isinstance(marketplace, dict) + and marketplace.get("name") == MARKETPLACE_NAME + for marketplace in marketplaces + ): + _run_codex_json( + command, + ["plugin", "marketplace", "remove", MARKETPLACE_NAME, "--json"], + runner=runner, + ) + + def _configured_codex_command( environment: Mapping[str, str], ) -> str | None: @@ -297,8 +375,11 @@ def resolve_codex_command( def install_codex_plugin( - marketplace_root: Path, + marketplace_root: Path | None, *, + marketplace_source: str | None = None, + marketplace_ref: str | None = None, + marketplace_sparse: Sequence[str] = (), registry: str | None = None, repository: str = "default", index_directory: str | None = None, @@ -307,16 +388,17 @@ def install_codex_plugin( codex_command: str | None = None, runner: CommandRunner = subprocess.run, ) -> CodexPluginInstall: - """Export, register, and install VidXP's local Codex plugin.""" + """Install VidXP's plugin and register its target-specific MCP command.""" + + if marketplace_source and marketplace_root is not None: + raise CodexPluginInstallError( + "Choose either a Git marketplace source or a local marketplace root." + ) + if not marketplace_source and marketplace_root is None: + raise CodexPluginInstallError( + "A Git marketplace source or local marketplace root is required." + ) - exported = export_codex_plugin( - marketplace_root, - registry=registry, - repository=repository, - index_directory=index_directory, - data_directory=data_directory, - device=device, - ) command = codex_command or resolve_codex_command() if command is None: raise CodexPluginInstallError( @@ -324,51 +406,108 @@ def install_codex_plugin( "app, make the codex command available, and try again." ) - marketplace_result = _run_codex_json( - command, - [ + if marketplace_source: + marketplace_arguments = [ + "plugin", + "marketplace", + "add", + marketplace_source, + ] + if marketplace_ref: + marketplace_arguments.extend(("--ref", marketplace_ref)) + for sparse_path in marketplace_sparse: + marketplace_arguments.extend(("--sparse", sparse_path)) + marketplace_arguments.append("--json") + marketplace_path = ( + f"{marketplace_source}@{marketplace_ref}" + if marketplace_ref + else marketplace_source + ) + marketplace_name_fallback = GIT_MARKETPLACE_NAME + plugin_version = _plugin_version(bundled_codex_plugin()) + else: + assert marketplace_root is not None + exported = export_codex_plugin( + marketplace_root, + registry=registry, + repository=repository, + index_directory=index_directory, + data_directory=data_directory, + device=device, + ) + marketplace_arguments = [ "plugin", "marketplace", "add", exported.marketplace_root, "--json", - ], + ] + marketplace_path = exported.marketplace_path + marketplace_name_fallback = exported.marketplace_name + plugin_version = exported.plugin_version + + marketplace_result = _run_codex_json( + command, + marketplace_arguments, runner=runner, ) marketplace_name = str( - marketplace_result.get("marketplaceName") or exported.marketplace_name + marketplace_result.get("marketplaceName") or marketplace_name_fallback ) plugin_result = _run_codex_json( command, [ "plugin", "add", - f"{exported.plugin_name}@{marketplace_name}", + f"{PLUGIN_NAME}@{marketplace_name}", "--json", ], runner=runner, ) + + mcp = stdio_client_config( + registry=registry, + repository=repository, + index_directory=index_directory, + data_directory=data_directory, + device=device, + )["mcpServers"][PLUGIN_NAME] + _run_codex( + command, + [ + "mcp", + "add", + PLUGIN_NAME, + "--", + str(mcp["command"]), + *(str(argument) for argument in mcp["args"]), + ], + runner=runner, + ) + if marketplace_source: + _remove_legacy_local_plugin(command, runner=runner) + return CodexPluginInstall( - plugin_name=str(plugin_result.get("name") or exported.plugin_name), + plugin_name=str(plugin_result.get("name") or PLUGIN_NAME), plugin_id=( None if plugin_result.get("pluginId") is None else str(plugin_result["pluginId"]) ), plugin_version=str( - plugin_result.get("version") or exported.plugin_version + plugin_result.get("version") or plugin_version ), marketplace_name=str( plugin_result.get("marketplaceName") or marketplace_name ), - marketplace_path=exported.marketplace_path, + marketplace_path=marketplace_path, installed_path=( None if plugin_result.get("installedPath") is None else str(plugin_result["installedPath"]) ), detail=( - "VidXP is installed in Codex with its MCP server and skills. " - "Start a new Codex chat to use the updated plugin." + "VidXP is installed in Codex with its skills and local MCP server. " + "Start a new Codex task to use the updated plugin." ), ) diff --git a/src/vidxp/codex_plugin_cli.py b/src/vidxp/codex_plugin_cli.py index c93ebf0..ae0195b 100644 --- a/src/vidxp/codex_plugin_cli.py +++ b/src/vidxp/codex_plugin_cli.py @@ -15,9 +15,19 @@ def _parser() -> argparse.ArgumentParser: parser.add_argument( "--marketplace-root", type=Path, - required=True, help="Dedicated local marketplace directory managed by VidXP Desktop.", ) + parser.add_argument( + "--marketplace-source", + help="Git marketplace source, such as owner/repository.", + ) + parser.add_argument("--marketplace-ref", help="Git ref to fetch.") + parser.add_argument( + "--marketplace-sparse", + action="append", + default=[], + help="Sparse checkout path for a Git marketplace; repeat as needed.", + ) parser.add_argument("--registry") parser.add_argument("--repository", default="default") parser.add_argument("--index-directory") @@ -32,6 +42,9 @@ def main(arguments: Sequence[str] | None = None) -> None: try: result = install_codex_plugin( options.marketplace_root, + marketplace_source=options.marketplace_source, + marketplace_ref=options.marketplace_ref, + marketplace_sparse=options.marketplace_sparse, registry=options.registry, repository=options.repository, index_directory=options.index_directory, diff --git a/tests/test_ci_scope.py b/tests/test_ci_scope.py index 54aa0ee..edae7c9 100644 --- a/tests/test_ci_scope.py +++ b/tests/test_ci_scope.py @@ -41,6 +41,7 @@ def test_desktop_uses_stable_product_and_packaging_boundaries(self): "pyproject.toml", "uv.lock", ".github/workflows/desktop.yml", + "plugins/vidxp/skills/vidxp-ingest-video/SKILL.md", ): with self.subTest(path=path): self.assertTrue(classify([path]).run_desktop) @@ -48,7 +49,7 @@ def test_desktop_uses_stable_product_and_packaging_boundaries(self): for path in ( "README.md", "docs/releasing.md", - "skills/vidxp-ingest-video/SKILL.md", + ".agents/plugins/marketplace.json", "web/upload-page/src/app.js", ): with self.subTest(path=path): diff --git a/tests/test_codex_plugin.py b/tests/test_codex_plugin.py index 9aa8a73..5fecbc3 100644 --- a/tests/test_codex_plugin.py +++ b/tests/test_codex_plugin.py @@ -16,7 +16,7 @@ ) -def test_export_codex_plugin_materializes_skills_and_target_mcp_config() -> None: +def test_export_codex_plugin_materializes_the_canonical_skill_bundle() -> None: with TemporaryDirectory() as directory: root = Path(directory) / "codex-marketplace" index_directory = Path("C:/VidXP/repositories/default") @@ -34,7 +34,6 @@ def test_export_codex_plugin_materializes_skills_and_target_mcp_config() -> None encoding="utf-8" ) ) - mcp = json.loads((plugin_root / ".mcp.json").read_text(encoding="utf-8")) marketplace_path = root / ".agents" / "plugins" / "marketplace.json" marketplace = json.loads(marketplace_path.read_text(encoding="utf-8")) @@ -45,18 +44,8 @@ def test_export_codex_plugin_materializes_skills_and_target_mcp_config() -> None assert ( plugin_root / "skills" / "vidxp-find-video-evidence" / "SKILL.md" ).is_file() - assert mcp["mcpServers"]["vidxp"]["args"] == [ - "--repository", - "default", - "--index-directory", - str(index_directory), - "--data-dir", - str(data_directory), - ] - assert Path(mcp["mcpServers"]["vidxp"]["command"]).name.lower() in { - "vidxp-mcp", - "vidxp-mcp.exe", - } + assert (plugin_root / "skills" / "vidxp-install" / "SKILL.md").is_file() + assert not (plugin_root / ".mcp.json").exists() assert marketplace["name"] == "vidxp-local" assert marketplace["plugins"][0]["source"]["path"] == "./plugins/vidxp" assert marketplace["plugins"][0]["policy"] == { @@ -91,7 +80,7 @@ def runner(command: list[str], **_: object) -> subprocess.CompletedProcess[str]: calls.append(command) if command[1:4] == ["plugin", "marketplace", "add"]: payload = {"marketplaceName": "vidxp-local", "alreadyAdded": False} - else: + elif command[1:3] == ["plugin", "add"]: payload = { "pluginId": "vidxp@vidxp-local", "name": "vidxp", @@ -99,6 +88,8 @@ def runner(command: list[str], **_: object) -> subprocess.CompletedProcess[str]: "version": "0.4.0+codex.example", "installedPath": "/codex/cache/vidxp", } + else: + return subprocess.CompletedProcess(command, 0, "Added MCP server", "") return subprocess.CompletedProcess(command, 0, json.dumps(payload), "") with TemporaryDirectory() as directory: @@ -117,9 +108,81 @@ def runner(command: list[str], **_: object) -> subprocess.CompletedProcess[str]: "vidxp@vidxp-local", "--json", ] + assert calls[2][0:5] == ["codex-test", "mcp", "add", "vidxp", "--"] + assert Path(calls[2][5]).name.lower() in {"vidxp-mcp", "vidxp-mcp.exe"} + assert calls[2][6:] == ["--repository", "default"] assert result.plugin_id == "vidxp@vidxp-local" assert result.installed_path == "/codex/cache/vidxp" - assert "MCP server and skills" in result.detail + assert "skills and local MCP server" in result.detail + + +def test_install_codex_plugin_uses_git_marketplace_and_migrates_local_source() -> None: + calls: list[list[str]] = [] + + def runner(command: list[str], **_: object) -> subprocess.CompletedProcess[str]: + calls.append(command) + arguments = command[1:] + if arguments[:3] == ["plugin", "marketplace", "add"]: + payload = {"marketplaceName": "vidxp"} + elif arguments[:2] == ["plugin", "add"]: + payload = { + "pluginId": "vidxp@vidxp", + "name": "vidxp", + "marketplaceName": "vidxp", + "version": "0.4.0-b.3", + } + elif arguments == ["plugin", "list", "--json"]: + payload = {"installed": [{"pluginId": "vidxp@vidxp-local"}]} + elif arguments == ["plugin", "marketplace", "list", "--json"]: + payload = {"marketplaces": [{"name": "vidxp-local"}]} + elif "--json" in arguments: + payload = {} + else: + return subprocess.CompletedProcess(command, 0, "ok", "") + return subprocess.CompletedProcess(command, 0, json.dumps(payload), "") + + result = install_codex_plugin( + None, + marketplace_source="grayhatdevelopers/vidxp", + marketplace_ref="main", + marketplace_sparse=(".agents/plugins", "plugins/vidxp"), + codex_command="codex-test", + runner=runner, + ) + + assert calls[0] == [ + "codex-test", + "plugin", + "marketplace", + "add", + "grayhatdevelopers/vidxp", + "--ref", + "main", + "--sparse", + ".agents/plugins", + "--sparse", + "plugins/vidxp", + "--json", + ] + assert calls[1] == ["codex-test", "plugin", "add", "vidxp@vidxp", "--json"] + assert calls[2][1:5] == ["mcp", "add", "vidxp", "--"] + assert calls[4] == [ + "codex-test", + "plugin", + "remove", + "vidxp@vidxp-local", + "--json", + ] + assert calls[6] == [ + "codex-test", + "plugin", + "marketplace", + "remove", + "vidxp-local", + "--json", + ] + assert result.marketplace_name == "vidxp" + assert result.marketplace_path == "grayhatdevelopers/vidxp@main" def test_export_refuses_to_replace_an_unmanaged_marketplace() -> None: diff --git a/tests/test_packaging.py b/tests/test_packaging.py index f23ddd2..748f4fa 100644 --- a/tests/test_packaging.py +++ b/tests/test_packaging.py @@ -20,7 +20,7 @@ class PackagingTests(unittest.TestCase): - def test_wheel_contains_mcp_app_and_versioned_plugin_bundle(self): + def test_wheel_contains_mcp_app_and_canonical_plugin_bundle(self): with TemporaryDirectory() as directory: subprocess.run( [ @@ -48,12 +48,14 @@ def test_wheel_contains_mcp_app_and_versioned_plugin_bundle(self): required = { "vidxp/assets/mcp_app/index.html", - "vidxp/bundled_plugins/vidxp/.mcp.json", "vidxp/bundled_plugins/vidxp/.codex-plugin/plugin.json", + "vidxp/bundled_plugins/vidxp/assets/logo.png", "vidxp/bundled_plugins/vidxp/skills/vidxp-ingest-video/SKILL.md", "vidxp/bundled_plugins/vidxp/skills/vidxp-ingest-video/agents/openai.yaml", "vidxp/bundled_plugins/vidxp/skills/vidxp-find-video-evidence/SKILL.md", "vidxp/bundled_plugins/vidxp/skills/vidxp-find-video-evidence/agents/openai.yaml", + "vidxp/bundled_plugins/vidxp/skills/vidxp-install/SKILL.md", + "vidxp/bundled_plugins/vidxp/skills/vidxp-install/agents/openai.yaml", } self.assertLessEqual(required, members) self.assertIn( @@ -61,15 +63,19 @@ def test_wheel_contains_mcp_app_and_versioned_plugin_bundle(self): entry_points, ) - def test_bundled_plugin_is_valid_and_skills_match_canonical_sources(self): + def test_repository_marketplace_uses_the_canonical_branded_plugin(self): project = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8")) - plugin_root = ROOT / "src" / "vidxp" / "bundled_plugins" / "vidxp" + plugin_root = ROOT / "plugins" / "vidxp" manifest = json.loads( (plugin_root / ".codex-plugin" / "plugin.json").read_text( encoding="utf-8" ) ) - mcp = json.loads((plugin_root / ".mcp.json").read_text(encoding="utf-8")) + marketplace = json.loads( + (ROOT / ".agents" / "plugins" / "marketplace.json").read_text( + encoding="utf-8" + ) + ) self.assertEqual(manifest["name"], "vidxp") self.assertEqual( @@ -77,28 +83,18 @@ def test_bundled_plugin_is_valid_and_skills_match_canonical_sources(self): Version(project["project"]["version"]), ) self.assertEqual(manifest["skills"], "./skills/") - self.assertEqual(manifest["mcpServers"], "./.mcp.json") - self.assertEqual(mcp["mcpServers"]["vidxp"]["command"], "vidxp-mcp") - - canonical = ROOT / "skills" - bundled = plugin_root / "skills" - canonical_files = { - path.relative_to(canonical) - for path in canonical.rglob("*") - if path.is_file() - } - bundled_files = { - path.relative_to(bundled) - for path in bundled.rglob("*") - if path.is_file() - } - self.assertEqual(bundled_files, canonical_files) - for relative in canonical_files: - self.assertEqual( - (bundled / relative).read_text(encoding="utf-8"), - (canonical / relative).read_text(encoding="utf-8"), - relative.as_posix(), - ) + self.assertNotIn("mcpServers", manifest) + self.assertEqual(manifest["interface"]["logo"], "./assets/logo.png") + self.assertEqual( + manifest["interface"]["composerIcon"], "./assets/logo.png" + ) + self.assertTrue((plugin_root / "assets" / "logo.png").is_file()) + self.assertEqual(marketplace["name"], "vidxp") + self.assertEqual( + marketplace["plugins"][0]["source"]["path"], + "./plugins/vidxp", + ) + self.assertFalse((ROOT / "skills").exists()) def test_sdist_contains_every_upload_page_build_input(self): with TemporaryDirectory() as directory: @@ -671,7 +667,7 @@ def test_desktop_manifest_matches_published_package_contract(self): def test_combined_release_version_contract(self): expected_extra_files = { "uv.lock", - "src/vidxp/bundled_plugins/vidxp/.codex-plugin/plugin.json", + "plugins/vidxp/.codex-plugin/plugin.json", "desktop/src-tauri/Cargo.toml", "desktop/src-tauri/Cargo.lock", "desktop/package.json", diff --git a/utils/ci_scope.py b/utils/ci_scope.py index 68d5582..ba590cb 100644 --- a/utils/ci_scope.py +++ b/utils/ci_scope.py @@ -21,15 +21,17 @@ def _normalize(path: str) -> str: def _is_documentation(path: str) -> bool: - return path.startswith("docs/") or path.endswith(".md") + return path.startswith("docs/") or ( + path.endswith(".md") and not path.startswith("plugins/") + ) def _is_container_neutral(path: str) -> bool: - return path.startswith(("desktop/", "skills/", "tests/")) + return path.startswith((".agents/", "desktop/", "plugins/", "tests/")) def _affects_desktop(path: str) -> bool: - return path.startswith(("desktop/", "src/", "tests/", "utils/")) or path in { + return path.startswith(("desktop/", "plugins/", "src/", "tests/", "utils/")) or path in { ".github/workflows/ci.yml", ".github/workflows/desktop.yml", "LICENSE", @@ -42,7 +44,16 @@ def _affects_desktop(path: str) -> bool: def _is_unknown_product_path(path: str) -> bool: return not path.startswith( - (".github/", "desktop/", "skills/", "src/", "tests/", "utils/", "web/") + ( + ".agents/", + ".github/", + "desktop/", + "plugins/", + "src/", + "tests/", + "utils/", + "web/", + ) ) and path not in { ".dockerignore", "compose.coolify.yaml", From e2b02cb41e0164504bbad01aa13f0c897a9d6f54 Mon Sep 17 00:00:00 2001 From: Talha Date: Fri, 7 Aug 2026 15:41:13 +0500 Subject: [PATCH 02/12] docs(codex): add agent-driven setup prompt --- README.md | 15 ++++--- docs/integrations/openai-plugin.md | 39 ++++++++++++++++++- .../skills/vidxp-install/agents/openai.yaml | 2 +- 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index d66b38d..23adb34 100644 --- a/README.md +++ b/README.md @@ -167,11 +167,16 @@ VidXP's repository marketplace includes three reusable agent workflows: - [Ingest and index videos](plugins/vidxp/skills/vidxp-ingest-video/SKILL.md) - [Find moments and return inspectable evidence](plugins/vidxp/skills/vidxp-find-video-evidence/SKILL.md) -Add `grayhatdevelopers/vidxp` as a Git marketplace in Codex, or let VidXP -Desktop install the plugin and register the selected runtime's local -`vidxp-mcp` command. The MCP App resource gives compatible hosts an interactive -upload and evidence-review view; every workflow continues to work through -ordinary MCP tool results when a host has no UI. +For first-time setup, copy the ready-to-use prompt from the +[Codex installation guide](docs/integrations/openai-plugin.md#copy-and-paste-this-prompt-recommended) +into a new Codex task. The agent asks whether you want stable or beta and +Desktop or CLI, then installs the marketplace, VidXP, and its local MCP +connection without sending you through Settings. VidXP Desktop can perform the +same setup from its **Set up in Codex** button. + +The MCP App resource gives compatible hosts an interactive upload and +evidence-review view; every workflow continues to work through ordinary MCP +tool results when a host has no UI. - [Python, HTTP, and MCP installation](INSTALLATION_GUIDE.md) - [ChatGPT and Codex plugin integration](docs/integrations/openai-plugin.md) diff --git a/docs/integrations/openai-plugin.md b/docs/integrations/openai-plugin.md index 285a8e6..7ba5e03 100644 --- a/docs/integrations/openai-plugin.md +++ b/docs/integrations/openai-plugin.md @@ -20,6 +20,40 @@ keeps its manifest version aligned with the Python package. ## Install in Codex +### Copy and paste this prompt (recommended) + +Paste the following into a new **Codex** task. This is for the local Codex app, +not ChatGPT web or ChatGPT Classic. The agent handles the marketplace, plugin, +VidXP installation, and MCP registration; the user does not need to find a +Settings page or edit configuration files. + +```text +Set up VidXP on this computer for Codex. Do not send me into Settings and do +not ask me to edit configuration files by hand. + +Before downloading or installing anything, ask me to choose: +1. Stable (Git ref release) or beta (Git ref main). +2. VidXP Desktop or the VidXP CLI. + +After I answer, use the local shell to: +- Add the Git marketplace grayhatdevelopers/vidxp at the selected ref with + sparse paths .agents/plugins and plugins/vidxp. +- Install vidxp@vidxp and capture the JSON result from Codex. +- Read /skills/vidxp-install/SKILL.md from that result and + follow it immediately in this task for my Desktop or CLI choice. +- Ask before launching an installer or downloading model weights. +- Register the installed runtime's absolute vidxp-mcp path through the Codex + CLI and verify it with codex mcp get vidxp --json. +- Run the applicable VidXP health check and report the exact result. Do not + claim setup succeeded until both VidXP and the Codex MCP registration verify. +``` + +The plugin becomes part of the normal skill catalog in subsequent Codex tasks. +Reading the installed skill by its returned path lets the same task finish the +first-time bootstrap without waiting for a restart. + +### VidXP Desktop button + With **AI assistant integration** enabled, VidXP Desktop shows two distinct actions: @@ -38,7 +72,10 @@ documented `codex plugin marketplace add`, `codex plugin add`, and `codex mcp add` commands. A successful Git install removes the obsolete managed `vidxp-local` registration. Start a new Codex task after setup. -Users can also add the release marketplace directly: +### Manual fallback + +If an agent does not have an authorized local shell, add the beta marketplace +manually with: ```text codex plugin marketplace add grayhatdevelopers/vidxp --ref main \ diff --git a/plugins/vidxp/skills/vidxp-install/agents/openai.yaml b/plugins/vidxp/skills/vidxp-install/agents/openai.yaml index d272227..c5ccc97 100644 --- a/plugins/vidxp/skills/vidxp-install/agents/openai.yaml +++ b/plugins/vidxp/skills/vidxp-install/agents/openai.yaml @@ -1,4 +1,4 @@ interface: display_name: "Install VidXP" short_description: "Install VidXP Desktop or CLI and connect Codex" - default_prompt: "Use $vidxp-install to install VidXP and connect its local MCP server to Codex." + default_prompt: "Use $vidxp-install to ask whether I want VidXP Desktop or CLI, install my choice, register its local MCP server, and verify the setup." From 9f408728207191f08d90a3ae6bc1332249e7490b Mon Sep 17 00:00:00 2001 From: Talha Date: Fri, 7 Aug 2026 15:43:50 +0500 Subject: [PATCH 03/12] docs(codex): simplify setup prompt --- README.md | 9 +++----- docs/integrations/openai-plugin.md | 33 +++--------------------------- 2 files changed, 6 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 23adb34..d5d5f55 100644 --- a/README.md +++ b/README.md @@ -167,12 +167,9 @@ VidXP's repository marketplace includes three reusable agent workflows: - [Ingest and index videos](plugins/vidxp/skills/vidxp-ingest-video/SKILL.md) - [Find moments and return inspectable evidence](plugins/vidxp/skills/vidxp-find-video-evidence/SKILL.md) -For first-time setup, copy the ready-to-use prompt from the -[Codex installation guide](docs/integrations/openai-plugin.md#copy-and-paste-this-prompt-recommended) -into a new Codex task. The agent asks whether you want stable or beta and -Desktop or CLI, then installs the marketplace, VidXP, and its local MCP -connection without sending you through Settings. VidXP Desktop can perform the -same setup from its **Set up in Codex** button. +Paste this into Codex: **“Install the VidXP plugin from `grayhatdevelopers/vidxp`, then read and follow its `vidxp-install` skill in this task: ask whether I want Desktop or CLI, install my choice, connect its local MCP server, and verify everything.”** + +VidXP Desktop can perform the same setup from its **Set up in Codex** button. The MCP App resource gives compatible hosts an interactive upload and evidence-review view; every workflow continues to work through ordinary MCP diff --git a/docs/integrations/openai-plugin.md b/docs/integrations/openai-plugin.md index 7ba5e03..435b6b5 100644 --- a/docs/integrations/openai-plugin.md +++ b/docs/integrations/openai-plugin.md @@ -20,37 +20,10 @@ keeps its manifest version aligned with the Python package. ## Install in Codex -### Copy and paste this prompt (recommended) +### Ask Codex to install it -Paste the following into a new **Codex** task. This is for the local Codex app, -not ChatGPT web or ChatGPT Classic. The agent handles the marketplace, plugin, -VidXP installation, and MCP registration; the user does not need to find a -Settings page or edit configuration files. - -```text -Set up VidXP on this computer for Codex. Do not send me into Settings and do -not ask me to edit configuration files by hand. - -Before downloading or installing anything, ask me to choose: -1. Stable (Git ref release) or beta (Git ref main). -2. VidXP Desktop or the VidXP CLI. - -After I answer, use the local shell to: -- Add the Git marketplace grayhatdevelopers/vidxp at the selected ref with - sparse paths .agents/plugins and plugins/vidxp. -- Install vidxp@vidxp and capture the JSON result from Codex. -- Read /skills/vidxp-install/SKILL.md from that result and - follow it immediately in this task for my Desktop or CLI choice. -- Ask before launching an installer or downloading model weights. -- Register the installed runtime's absolute vidxp-mcp path through the Codex - CLI and verify it with codex mcp get vidxp --json. -- Run the applicable VidXP health check and report the exact result. Do not - claim setup succeeded until both VidXP and the Codex MCP registration verify. -``` - -The plugin becomes part of the normal skill catalog in subsequent Codex tasks. -Reading the installed skill by its returned path lets the same task finish the -first-time bootstrap without waiting for a restart. +The main README provides a one-line prompt that asks Codex to install the +marketplace, offer Desktop or CLI, connect the local MCP server, and verify it. ### VidXP Desktop button From 081bd07ec0119c54b989d03305b885fa7ef37928 Mon Sep 17 00:00:00 2001 From: Talha Date: Fri, 7 Aug 2026 15:47:55 +0500 Subject: [PATCH 04/12] docs(codex): clarify Git marketplace setup --- README.md | 11 ++++++++--- docs/integrations/openai-plugin.md | 5 +++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d5d5f55..db0e1ec 100644 --- a/README.md +++ b/README.md @@ -159,15 +159,20 @@ questions about a library, and return inspectable evidence such as boards, frames, and clips. Clients can connect locally over stdio or to a self-hosted VidXP server. -### ChatGPT and Codex skills +### Codex plugin and skills -VidXP's repository marketplace includes three reusable agent workflows: +VidXP is distributed as a Codex plugin through a Git marketplace hosted in +this GitHub repository. It includes three reusable agent workflows: - [Install Desktop or CLI and connect Codex](plugins/vidxp/skills/vidxp-install/SKILL.md) - [Ingest and index videos](plugins/vidxp/skills/vidxp-ingest-video/SKILL.md) - [Find moments and return inspectable evidence](plugins/vidxp/skills/vidxp-find-video-evidence/SKILL.md) -Paste this into Codex: **“Install the VidXP plugin from `grayhatdevelopers/vidxp`, then read and follow its `vidxp-install` skill in this task: ask whether I want Desktop or CLI, install my choice, connect its local MCP server, and verify everything.”** +Paste this into Codex: + +```text +Add https://github.com/grayhatdevelopers/vidxp as a Git plugin marketplace and install the VidXP plugin. Then set up VidXP on this computer: ask whether I want Desktop or CLI, connect its local MCP server to Codex, and verify it works. +``` VidXP Desktop can perform the same setup from its **Set up in Codex** button. diff --git a/docs/integrations/openai-plugin.md b/docs/integrations/openai-plugin.md index 435b6b5..55a3e37 100644 --- a/docs/integrations/openai-plugin.md +++ b/docs/integrations/openai-plugin.md @@ -22,8 +22,9 @@ keeps its manifest version aligned with the Python package. ### Ask Codex to install it -The main README provides a one-line prompt that asks Codex to install the -marketplace, offer Desktop or CLI, connect the local MCP server, and verify it. +```text +Add https://github.com/grayhatdevelopers/vidxp as a Git plugin marketplace and install the VidXP plugin. Then set up VidXP on this computer: ask whether I want Desktop or CLI, connect its local MCP server to Codex, and verify it works. +``` ### VidXP Desktop button From 4551df1f0779eb6bc94b69f9f7bb1f58111451e6 Mon Sep 17 00:00:00 2001 From: Talha Date: Fri, 7 Aug 2026 15:51:05 +0500 Subject: [PATCH 05/12] docs(codex): hand setup off to install skill --- README.md | 2 +- docs/integrations/openai-plugin.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index db0e1ec..bb979fe 100644 --- a/README.md +++ b/README.md @@ -171,7 +171,7 @@ this GitHub repository. It includes three reusable agent workflows: Paste this into Codex: ```text -Add https://github.com/grayhatdevelopers/vidxp as a Git plugin marketplace and install the VidXP plugin. Then set up VidXP on this computer: ask whether I want Desktop or CLI, connect its local MCP server to Codex, and verify it works. +Add https://github.com/grayhatdevelopers/vidxp as a Git plugin marketplace, install the VidXP plugin, then use its $vidxp-install skill to set up VidXP on this computer. ``` VidXP Desktop can perform the same setup from its **Set up in Codex** button. diff --git a/docs/integrations/openai-plugin.md b/docs/integrations/openai-plugin.md index 55a3e37..9f5783d 100644 --- a/docs/integrations/openai-plugin.md +++ b/docs/integrations/openai-plugin.md @@ -23,7 +23,7 @@ keeps its manifest version aligned with the Python package. ### Ask Codex to install it ```text -Add https://github.com/grayhatdevelopers/vidxp as a Git plugin marketplace and install the VidXP plugin. Then set up VidXP on this computer: ask whether I want Desktop or CLI, connect its local MCP server to Codex, and verify it works. +Add https://github.com/grayhatdevelopers/vidxp as a Git plugin marketplace, install the VidXP plugin, then use its $vidxp-install skill to set up VidXP on this computer. ``` ### VidXP Desktop button From 1bcad4e54e351bbe07b5c0ec4978ed003e8aa02a Mon Sep 17 00:00:00 2001 From: Talha Date: Fri, 7 Aug 2026 15:58:51 +0500 Subject: [PATCH 06/12] refactor(branding): use plugin logo as canonical source --- docs/images/logo.png | Bin 94054 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/images/logo.png diff --git a/docs/images/logo.png b/docs/images/logo.png deleted file mode 100644 index f9c9d21139a9238061cbfbfccf0710132b0cd9f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94054 zcmV)}KzqN5P){q~u)nLT^%y>Ala_x%_0-XnX~_t~+Xt?2)7c<#C9 z297q`X#I>a16!?DKYQKRUiYi2s-Jz0e`N3b+WY?D+Wz#HY1n6E-{T+B=@%aR--`cK zm3?I@`I&s5J+HD~P9NWkbd3DSzi&#f^jv-u@`&k*vKs%YRQ_6;S-Pco@xG9zd@tk4 z^khDHS(}1tOPRhe1BvIQI@Hn${Xv~WyK!K$JWX%vBF90vE{&0pX6S1BeyHenvg4k5 zdU_D=GyD^IeQIBQUiHvtEn_~n5%FxO{r8#w$Jg`BGtX!Ae>8N{fxl>Y?X}ki{_w*O za|57k$IWFQ;kuvgumNJi7biAj-G+Q3hq4qyHd*DsuT6MLlT!jzmDR1?1Z^xs zo_|x>n?Pq&2iYfW`loHZ+Qct{f5@j$$4>dQ1-`;~Bj32S1q<==yk+0`!4k@p=gDzJ z9R9)bW#YZ6ioI>cHg2^-S_X-KX8#Sfg&9iJ17N(qSu)qR$(62oF>cH!zmtI@u5%|Uuhs^l{o4X>K1O=8sCA$?)qRK?%H;D* zzbHonG1c~_EoH_}Ic^JSi*z0C8P&%zPgy#S<8OR9eAFssYo4g8o+0+~YRlCOu~gbn z`W1y=9K0-L)o<9aVW6hAu>aPk1XlS(BI-cC=Yuv|VT~9--Lec-yX)Ri3X+Nv6S^r6 zDy3h#$B!vc5AD9~K)Qx{Z9)kdq;K>3v7`OBi*tn__X z&#KNcu(m+i4s=E|bOMk<*&3f`RA$@7ql&k<6izE+E0b7K#VvtficpK|?p<{#0A5Z}`EPo_o@Oj;C8)HRR*<^5+bR-f z7G&LP2E3v6`q0G|S>#;$nZi#FUS6iPtL2qUV3H6+kjuRo>`g-T67@jTJ4(p3 znFzgYJ4rp%%8^g}s)IbO4eQbk#aIiy0JD*8hY)IP9<|T2ad9Hu4yyj0#!-PHZ0nnGKA!*lvVXsfiY4z+Ev%+Dbc`$@seQd>(~t>HQLa$uWiy`f%;<&~s+cx1Fzt5H7D4XCvl z*b0ED3`o>P=t$jA_pDqa0D3mA)*fx-TqO!hf^1iPC%&ULd9($>syi)TDSlU!VCkMS zC@Y3)fM_z=mdJ>aLQQl}@d&n0l1wtugjb3BiMWDmrkq@NB)CyPCCXHV2>hoi09gP# zfm$X5Wg-n}F+p;ysvl!L)uBIp_uWa$EVIl{W=HmufETE(AAkJuVA~L&w$uvPn-!jj zq>4G8$RyKk_`C#yod8AUBdEICN}dn!s-U(X$E5?%te3;k1Ane5wB$y zF=~~-DFGpxPO^*SWn|)Wishm}RqFSWos{4z+rw69=xC$${A5(vCU=wPZ$Uv?10&pW$QfW1RTPmdurO@`fQmD!ry>{O; z3ZqNFoafUmSaw>tn)n$DN&Be*jtkdQOVN8p%)6*QysFzVv8M0 zqd1IG@Ot^>m$$I8trJb!W>e2lcUldI+NEEOq^zX_mC|-{ck!+XD4HmYk_}U*3Dc=8 zwfLO?qap2LeuC}HsZD=b6J9s6YgIwG-?X3*b;T}sQ@>ut=|J7pfL4s7cr6!9O(~_Z z;4?P@94ab+hR9eI+DP`Y253gbBPXw_gRc=^nuthTO#Ozy^M(X{+PY5yKx=BQI(PW+ zA9o*>Y~&~duNPi;0pYb~B z2Jn`NR9FBt0jEP-!$-IHHEP(%Q375sz4X!vUYi&~X$8-Nj8iO2fdwp0pd17`?LSkj zP9cx{9Tg~~cJ&#lFd{%&kQbHM#&A#6yK)wRpab~CIHm(t+b!VAIhl(9h`P7L@5Gw6 z12F+Y38;LU9*8P2v;7`IJvJ33Mj@&6E|075g);lB_)g)xPbbtTTE|C?q`*EBq+(1X zf~Q9;Q=kGXZ+;PBR#nr3nu)(Y9ey*^erN$~nV~e2p@&8?Sc>Z$0bHg{RFl0A6Clc! zNWYAonNt@kQ88KRcUgGa)f#{mN9?c^xl_4UQ2M#+fPz2O>L5w zyP^gvi|TzB%9<}0vAs-z1sBmI2vbAa3aA^>%KNh_jE7356aF>jC(9YCB*%d$uMw1L zDvf02jG=U&x+79l@vB(i2ufAFCy{^5q)H#Av_qlYZx!Iv_>zdZ;=T!jc@xVTKQ=0P zPu{gmD?nU$M4q6lY>ATb-6(l!$8Dy-?nQaNjkK z6X2)lKBi<1qrH|)&wY@fuUOtdWhKpHEM8*&C``#fusLeVKMicJUm)DKCQ_rumoMF0 z*_QzYHiSknj4$Ovh9S-29y+p%6C;p zRTV=n1dQms2g2)t5Q|SEYsi zGC#SH$+V1r=N5ELjg}}twWwv;n?iXS+r`u=U-qBnzl;QiU;Z2@r78vN$*F0IlQ|)Z zGn+7}S&WR%7r~m{lQAxSqWCIb-YRfsChr%QjsMRx!sMwn4=hRE72_F-M3V!hD!lXU zZX#<~`EphiL5|3SAH{JI(xiU&-|ZtqfsGJ&S>QUs7H&&_8yd;vD_Bld<%6;WauP(S z4pd>X)Pi3XC7|S?Hp#?KwoHETE%$3YQuryVQQk-Zq?WzH+({rrywNY*6K@j@HV8uhN#?!k_yi267nszc|D;_DN$$(Q5+)|&;%*IED*{U z78*>yv|4%qsj3Jpl#t29dP@o}WEFtMNIVMy`e5}QdnZ;S0C@yV15h<$t_XI{$ge}` z)ty+pJy=ze6>T{g8gVwQ%2Q%;0cQFuRH(&38*&x%zhy`?3Xrz1Woxgp05*_DAXL4K z&ss(Mb4bH$H7SYetfXM^FdEJZPX1ZX@o4)VzT{~7Ud{=9)@Eu1Ii>6-@B+xgdt@1D#JC%KB z^g`@tjdNHH@~Nw~*BMim|hlLZpdf~}U9s|ED&fMc8ytWUd8A73QF zUgleaWIP8ovCfg|m*6C86b)V-n;YRh_Kl}3C1q&L>peYHuZ8%%qP#4{wIwCsQY)%h zforR~ENE#3ZAZFO25j<0v13wP6}6OJ7PrbNH%XD0jG7erSJ{0jf0a)T1UXfee-@sX zsM4mqvhr8@aV6^*?x~cvC{slZ6r0SystdbI?}{M+*j@k511Jp`KHQu` zy$n^i5xwR7<0L$rHUtF}8Ku?DcU7lnRTuV6RePatC*U&~g=46JilSb$p-j6#fp$ZY z)Tq36^~}rIhBE9_zew@$!!nf^fviJ$ifMNfw~M+`hjKL5(|Edr(qcj3H&GidCf}0= zk}6=6DQ$o@Dx(_36A`54egk4fN+=4<12x1@-co3orb?jv6rRVujIvx3`A9TU0`9`| z0H{Qgid2cm_f>3FBg`r&O72sd477C8a?35ZJ9Qblo_LmBeAWI8qTUVq(z6_p8f|o{ z%)W=ZAM71NCjk4khEY-Os&4H+QtA9!LpSBi-#6XM$(qMAk$*G#n;f{rpFBMo-{{CO zuE`QI>cdKsV2SiHM$?1F)UQnrOlqnc@jOz#i3p~k3fB;w@0Sdk&}5=fdA>I`mRpQz zo#mHb{y)@3=!$KGfZnD$(BGB-D2A$8>lb-5N>!qQFgAvay^<_bo*y+mYhqnSWYTqF zdwz~ED!{^IlT3!*)UlhgWGrc8oRJAt(&nn?o!IysfST@2YK>^3Hn0NRSB#l zI7!aRze|xxe4-LEG7Up1UqgZoHKd5D!aHeG8`(?$pz_E>K@=a;5cFT%_#H|V%N&8r zr1E)`@?u2+>@Qgs%!(styC%G*DQwi(*{r5Smt2 z)38F8?t2qDO@?-%UHo4ID29-?&&UE#4hp4jMi!9UfpH!umZ>pb^Z2RPrD{xrWI6); zBsgWXilDR98=r5yQ<)@S6;sG$WjFFWkxqgS3No?x)~8K`<2NBYRRZ~Mxc?&+pS93 zx%#&}HRah!3R=bhmTrDF7fpbnuec)j$}O9$JZ0hCa& zk$v+r6jK108n79yE%J4UjnxQRqZ+L8FtQ-hP1>W1^6Tb#yZ7x_>rokgjs>C9wJV#=m*hO*u!&C9GLyIPSXRH^{Zf_e5ecN^M8%2nV&85W; zdSqhyl@~iJK(6BPLtM}ng$>|Ft_|*N$+&eX!dMX4^L5NNxMU>iKh8Mg?P{MLN)4eA zyx<8nHIFZdI@$%^TyGjFY zoUE!Y-X~dfhf_rWHl7`Y8`UJ4L6*($||c2r9vo< zEN|2Gnu_S{k~{)&UYQK6?I^9fv(YJi*DGKdnRvhU@Ken^zg$E(>?dx z!ytv{b{x>e6HiQ&O*R<~7%+gQpMH9pb=FyF>ZzxuDW;f$#vOOuu4HaMRr@zl(CsM8 z9Dw9BON31UtnzgHGr1ZAWU7j~%3n;|Iwcm%l|U^}Kp{Km{<0PsBqFkSUG?C;gpFzZr1y zvP#M@rwAqG7t15lFFq%kqI+*L#?@qZ!X_hdis3~7Jr2QkHGS`+n?WV&tHw5h>Y{?T z2u?duUu3$o?k1`Oq^B8sHU_GaZCt5r?c|1?>LXeCkzI&J1h`7?A}rM?F_VZOQc5>b zm;9khJpqOUFcmMn7uNAoMwWp}UiSD~1fTl1iM1qAMv-2|0~=X$lc=zaj1q)kq`oTI zCRM^zN4$|oY(PSb4i6xl23WlU3Tc%%{nk-$nyU&3$#mfZK zweN^XO;bwLQ6M5JxqU~_E44IaN)!Qra?mkU&&yv+wva^G93ZDUkzngYQ8efn6(baY zYLs4y8Z)8|!~7?zG*G&WmSz`4GZ+)7v($X%vmd_yZn|~WSx5Q5uTfscooHPGF6B6| z();bWxJHtDYWICP46UoK3YvMXsIW7E&PjM;~*{E$#1#@^b}VFTM2AT6W+M z4ENbU@xUy0x2NZMh-li5#cUdcKiBF#vLN|W$=$jE{8F4xKmC+$x#bq7w4QqEDVlla znQ7;pccxWWU6qCH0I{Zgy3sy@?R@psSLw|+-^58#^uY%o&>L^OL0^9PB~y3+EC6Sp zK7BZ^L4yX-fBy5IwgUZ9o}Jjuru!x!slAtzG%WKW4%ISD&jSEOGDXJIfRj^Jl2W4L zy$?Z9uF9ysr~#X*pOkwQz_4CMosJaB3$8T-J6&FHE)ky_lMGJ1^1`u&!k>N2(xIKh z2IoS@gnnvCylBx{l!2ETRi0(sl5{XxT-kL2lxk^>$}p;cp|`92|CKOo*f6@_f(z*E zv(IKgnS1WJ>36^T9WA-!l5GX;?POU<)5P}321s_I(Q~oXjCDqf>X{K~az-B_5Q30GtY6eXqJ=GwxMKbV{;FY&O$qM^+tV~N2 zGm5wgazw#8(y$+Y=r37EMS0l>Yf(MqYmB0}OlK2`kp_pKlA`&)3|wH#n<4`*`1d_i_5L*%~}}Fs-@fnl!@tP7FK zR*|X$72|3dnFODrtjnlYQ=mnZkDZE4)@A__1CgbHs!~){AbyOLgK-_S3#QRVAAL&_ z)K>&A%Q7x)SJnQaM1iu(0jdOKrBjRzB^vN2qsoXzEk*Tn3g1Wc+u_59v&Qhm6HjCo zZn@=_qdoWBli9T1<_oqD!u%U|k#!SjR)Lao2CbY@<&J}^wByn$Sl=t@g2bKFMoUu(yex1nmA*^Dc+huxy}+09vqohk3*C#~;ts5JF}&9G~Ua zU@dRH`DVK2nrrCUXP>1BCYXR0U35{}a?34guDRx7gVd(7j!JOvwvRgXuL*Li5^&`o zD$2~okP|nb#N~M6C#Ry+yY$dd8E{PTV-1pZ95n6k)%OXEqQ?kIwhDnACYiklBbSbI zkSLPM>TLA8bY1zpB2u@M^Tj|>aU^MdFVABLG->6_wG@dEN4u4G-EN$wv6~PR_7f%v zzUq`3iRbid4F4BoVPAal1%uYb7hg=%OfwDr;SYacHnE*BJP$9t@B#zYMHgMf0(h88 zKrUwG2y7`ovf-y}GghsO`^ZK$Qdp9%hz}{@oM4+Ok)B91r_w@x>2U&0Q~NG_V>D37 zG*t3ATc@%XfTTz!N^KDyhV+xcYYv(<;d>2$OO%*Oz=5&Jb{D9=k8K?&FyH0{6Nwa2 z);CuW^7Gc{eFm-L4OaVz$a9enqBUwEQdK797&57i-e0>=JW!3MVIusJ0fO_ZuDXg2 zJM1tvaX9e618I{@Ht7{;fyD&q!Ojats5|Yn6Rp1b>b$*YWI~|gpn(MY`QCf)(I=mL z!oQH0O*GL&bka#D(a3~I@ll~q#KfvZ{M0t4(2rWSa`L`)zq+arLWi*+F zNTMc$7r4_WsMP>1|C^P|kjUG&Lu?P3YKtnFewEI3 z4014+sxwfH9AEe*qrza9v$XwtE-o3oEY&r)jU?q=MD5u%DL9C8RPzx?vNiMo_$C)N!n z5nxxJe)?&8^2sM5C*?9iCN}=~<8!(IM}QVIkJC;&Esadj>`(o9Esl6r!#NQt2Oy(Z zD>)CNkK;7ZD+wG*G6b&*S*CTiumobJP*{@?CIc!74I#4rmSnmDcVuCrbV{^IMR_|C zk)rr&F|xMI1@={FQ%PxYBCYI923NEosBcsXBExvjV;}!=U_JN7d(Nkl8t=Fy zyY*yLg;AAeZ`0`}zKjD(>C{tCWneh=*kf7S*KL5d@UMUUD+}PEAw2WUGily==Veb1 z?eZ*@@s(Fzp&M_!k!5Xmkz=hUOfewHUumV4ShET92$)O2D79V4WTNVM{;Vjssl}lb zM_d%yJ%5$B$!zjElpwVmFp1HKOo`R=cI`$_mOzO~z{n|-0zoLsK?%6>dZ<}QH7Zj5 zHL3lgdmY&hqD+;@JEc;I^n^^2%E9E+S77xDnnizIQwWMKRocfSmFkHcB7>J5baSbyfAugVEGsC2DI*b*NF0+!ukwsw7BC>NdnP$;Vd}>IfIql{muBO8q0{#Wj=0 zsZ!I}Abd|PqMtPi>;JEXkpZZY0Wz>)(D=a}O>bmd5Wb&&`sr+>3Zu|H_Sl1k@VzMq zKoc6s^UgbujZ*#n;lrxU<)MB1RY?NJglG=m!drT8}oDn;eQ@vkOwdZh*CmH1B2 zb>aCzv5?}Or{XAHi&RVo6FGPo4Vb0`Fs4w)^f4*BF9{NPJn8^O>45@gnNli(Z0lMY zzNjYdbIdIogbb{)9FY=h4WAIkszG2sP(+Zz`1qm7tjg|*NZETCGlJ(O{#rtBsD=@Z zmj}qDAd>={2zC)>5Z#0)o_K=x-+zC0X|v&m8`6$D?#OIhQ#tZJc;}sWSRnvv4Kgig z9}ha{AeOC#J&?VvTQ`(-DSjZD%I|cV4%D->mFCaK<>!=5VhwmPUoqk36cvXLsx-u- zR5lM>;cLl``9fxeGn$%dU3ysr2(}S%+>YtPH4hIvSiMn<$I! zpGT~yHDijd#(;5R$bt5D2!j{)GfL8o3c<8TMQ-9WsLG+Y6Z`)P*o|y}h5RX}oWims zuze7CcM3oJ@B@P#KxfW5=VW^?7?*Ymp*^7;L|!mZ1=ww~%{DB<8dckQV3P)8+R;ZJ zow_NHzf&uBRjI9TB2-0C%kLvNrJGv3FttqfKL5TBEL1KxC0SQ46pzSaNKk3=J4dN$ zD$QiTtLsmqjIw09yfK;p=}MJ5r6Kc*$XTy(2E2JYh)B^mHH#N8`}^PjPM2SPIco%w4%ovWZ0~J9VM8{`gMW~f z!Ili=g2}{Ui!Da~_{Tqr-<3c{y${dg#0itl6u&9VnQVmCfh$B-xK-8D(+^A|faxm@ zToHr{luTqTE2BWUij)_dpp#HPs`ATn#q@H}F@=4ZrApSQDUrU)t_jfU^Hu^^h7XZ# z49|?nkUdjm9H3{@d4=r*=Yyv1S3acs!(Zaj>q%|>Knpl-!LXu~j zdVXOJ$2SodOnT{L%;Niu9h5*IvN9P6G|8=MY@G5Rg#s#5AX zfRzr=;!Wsn$jt4Ve0le zzt4e7%7#kRPlhNY5QQQTB%;Nmp?ELiRiYG$JrwCxS=llGi&PZ}aLd`(4B$j;_0BYb zjM3ocPZ)DImB7W8tf#JP0`O9rMznKPFN^ppDDx5*=3lg;DQ!C7v65+}Kfb^5d0*T! z+bFj9#N32^g#s*UAAJ7$fZ9B?v+Ehv;nyZNgJuxG^T;EQu!ayGP4keK8SEI$6aYS; zoM5idP59`ej~E=GMFc?Zwbx!O-wJskbZQ$|%R`=a#~pXD5Fgh0v(G+zN7v3!zIVi9D*^Nbpj>{v~{m4i{9DUkxY9GE1? zNr*NXWQ1LR*6$N*f>2Eur>9SF%XVr$Qz{`4oNZXnnP zyVy;D6F|t*z#_tJ4wL~Qbkh#---R+_OA$Ow1Q}VkX>_8ZC5va|WEB%B##P@3YQSXn zU8E?2^kcFNGZ~l6D$X7aH!8Xz(gO90OaYwKy~*hi4PseVS)mGL5brCM2W9M8mPbY@ z<)AOy*)*V}PQM+XiF6@Ga$a;p+><$1w`VZZ(MW8nGMzy8$~YX)IC z_CdlT9u5gXDRslfhrD4?55rh^VuhU<4vj74+ijbas4tgc`CY!+i-&%qx$$2&sfbsK zib@1qpx{Kj_%2K`@x4gY=s&v5rT|baY(}y0nNzz$#)W! z6~NairvQrjGm|BeeN)^H82ZEUdr=;4!c$>xWumDS-x~pP5@79(11}r7U(7{NP9~!Z z3xK8KQx~jdxpL+3Q&ULYZdDl-<$$0atQYngLe|xZ;=(U9f{;@M0O|&~z}mr2J!E0f z^5LM3cKOHv))a~WP+ZtY391d}HJS({YLjvx3{$!RxDxEBv<)@N zrR2lHJC{!C*94_`f2)4-4=U*$!Y9}YKE1e_$#G%KkL7h$5XgsjPGE1mH;FcY6#&UJ zRkTV5t|mv%kqu3P-(O4UR3?B5fNP(9_MtV_Sfeo>>ItLHz4zXmuDk9!rqr5%P6nLZ z1AqgY2uu5oHrj}~4WP0BS}=G8rPoBMbrWPCp&rnv;(EOC$EVT6hHbUl$v6wPt^A}5k%M2Q(sZwamQc#x5@47tpDI>MQCQ+!MooE%^e9bu*;qz_ zQ>ot6`8vqDD1n&Zs!0QUHnvSFSB+x{?OK};sS)J+KrqE>vMF0DS|uA%*m@h9%8FF_ z^`TfEQRI@1g#b2Fx3=$08f2l{{e!j7dg zs{nAr4h+H15x;-Buu_X_cVC)B5^&@@0R{r0Oa!S)gQmLI)`YJ7+hW<;l~#j#f(7%?CPqdgIU(ZP<}}4b%mFCk zo`0`_D|@c8G6?{~bIx0ybqIdE}8@S=z(G9TXSL7$D>7*0LR&u>bwQrO+R#9H6%pz_hg+}SU%B}&Z zBK2FBQD^55`0P!TcSX+K`xJ~6mKqa)mFRO2SIbI4M@h~lE;Z{&38boqZ+?~Gr=ap= zn$Xrk_5(RmC*ZZ@5E2Ga>>B0G65MZi`b*lj)Y%rk600qgkQ z1eD|Bk3VLCK5W#m2NUce*v?Wj<^wm60(aC%10Z_pX{WJVEXYC9cY>wNfkpE;r01NL zZMl0np~E}HjmBr9)>N*XjwuD+Mc~R)kHDwXH#N|aN&)}OmpXx+u74m>GGeT*pzt6T zbCh`*(xp~unHoTpD6w29Upbc&R^6E_MT4VC&%H3tM>rs=Wm+$hD9!eCOj^7|O1&!U_(!va-g1B(TN3RO|}^e1Hltq5E$Eh0@3xd$?@m`Qvm9%c6_R5dEigfxt(3uXC*|3W;Us-74Wi69F<> zCRE~YAc*1^GOC{0;udnOtkCr}`{6)g3Q-ioSCu+cHUOImAXc?;LfD(|YmtBTwj7w~ z(5ON9j;%SlBR?5%;?DZ(ug`KH079qJr*QxWT;G6IgOz?a<%Bm>P&lyrf?&S4;17)< zz5`_hEB}E52WrqDFxB0?(_ai1&(cz zQBtMrw)a`v2!VZ$FGjJC4&2<+r~}B@%W%;ewrn3^R9IyLJOUgw$gxHRSQXN&J^Lj9 zt+)BX>;Mz~oO8};3taH01uZ0m<>#M&en;Sf1`;5G6R|-7byH5b+1YKk-PjAo+H0@f zF8QM2FJyHvl0}}NlA7`%GHveTlp<3AA1E0%-+XhnXM-)AUKdGE`1nfRr)e4}jWXB~ z$*B}TD@=M*$WOYaDFRqF>h+}c<*7ves@%Gb!s`+R$3+qE5{MbuOj$WY8BHu~0JR!$ ziFRwXa*bh~Z7f~a-l=?|(Q*JGQCw#Z;qym@($Qxo=C4F$&YZ%5TZ={;*e5SUW{g^- z!bl7B`O=j4JC2g@YoNs11<1HyhziOGrV&j6^}rUK&p!K%DXw-Phqw$} z-3081gjoWNPoV|u6lB{1SOFyPp$|oZ+=yKoyb&-YK-4HRigDwr>0d0cz=BqecMU57 z=9+76%7(uBu9z1UfJ5b-gP16bNF_|}s7;i@_i%0UdXS=iQhJrnL_ICAZCO2H`hgNM zioTPd%8J$~IMd2DuFLPTG`V~-ZU+i0enZreO3SFNfMk`!E$6#ld=%)^O4ZJlo578* zIi98F@-lgO7WXAkGiNsflBPn`D?AfJL34}jMVaLE7KQ zlxzhTLj_gZWtW}l+;h)$Y5OEflv=tJC}MIC3PCQF716{uF{(+Vmq^Y}{s2~4eI?Z< z(I9>sWBI&{5daisV5&p>n^R_fN(X7P5${4fg^Go|jn7M^6uU)y7aE?jcOq`PkQNJ* z161vM(Y)zC5=b$=bCE+4tgBQfe=i02VmnbELE8DIN(+Taqb16;O!phKJBDs3s@_sv z-NYXeHniy*98vcA>#sAL)s6)OH3K^?xLhus!6?&*b`O9BZ6#PYX$~RxdCKyD@&nZb zj}_e>OdG=Ox8Kf`8bEl#1s7EB@lVAO@99^iy@@WF zDl*JO8pu>xgC;WjKCqHM85LBb2zwKH3tUa#z;Yby6=XN?DB2Vtu!Kz(3^_q{wM!q{ zX&~DgZ@lr?{wqJgqBL*-TmT=KLP)<|-2||h*Z}~OjR0IV3QH9r8?=%F5clz&Nt3m< zQu_hC)mB^5skW~1dy_yB|5_n#oYO`CjZvUus7@`VGHQTm4_pa6; z{<^B9RZK;R+E@45eOvVyP+m2cn5Jx)swl2XpSwo#ok)j9Rrn<~XqSZ9GQf)iz-6<| zHfx&>gwij)^b#Mm;q0Tz>EStyK;Z!uGO>2vN<(|VXcbf+fGfz`x}hww9}!B1@4o+@ zl?=f`K3j!I+Et}VC|A=MncqWc0U6e7Ltmq>Z5}Y`m}Z)3*ftE_D*UoWaX8zLaQYG4 z_&`HCE1!TQCL7faRYO4?1)Add8AdWH;$ZQBKQ)|92{ykqyhX!X!}%JrA(S!x8?A@N zuzfoA*yGTcV~t5YRZmJk{8p4r>^dMMATbJ9(<2QOMzpb1Jm_9*qNGgyZw9RLVW7Gs zAh~v~vh-wo3-A$uM)^4NbxYu5Vt$~m+?FxFkI{&Jt3rSJeU2RDiDq6N8Fp+{t*Xxm zm^cWbTe>e?cb8a~EZolpSl#CN*kg~e_XpT>1s5`<@8P)t-~uGFhW+?s$MzYW!E0<9V~jEQ-=vdG#^64~ z^fS;5Gt9vE(@Zlpjn*@o0;G6h^exp~#pt@{L4ry-t|_LYzVQoB4u9dBmRbj-w+w0? z3slG>8J4=SO7(J!Z>zlgX&I|brPDWwZ4@Bqez`>}E2s_I-|IC@>DPi}6@7-I%+{+R zzh4BvN_k`QgWAI6fOm!_-&yzuMyOcfvB$BU=Z0sWeU`24A>-;~;EDi`r$`&l2fJ~d z69QaOgUtmc1i4xuu0na^ucx^3)isxW-EhN=miqfIvz(CU!2}|WX+!DK@PQ*>aUolS zqr;F+NFNj`fQ`Msk{qiV4UiTnyr-Ue+EQ!Ja@zs4Kusc`zu^9Ql1V0^$t=)JGRdSC zjK*Rx?cc9I%O*!3y^oV6`g#rOfU<1jKuxA~p@|i&1Dw9??z;#&#^~z|&{7#q zy-qnRnx&tBEvz@D%HsLkL~#X7anTjy%x`+gYz6RYiwL>52`UTeYZH7_3dMUHzZ1JR zvf+RK`yX%Vfvl*V2MFvZge(cb)$Tx8Obndc*tc(A)<$-c=fN`sfDZ0#P>yZ`*ioF* zh>h8sTS~Av_~Zap*J&-oz=n46^wUn`2@EZ(qoyRwR+hzl_`!#^4Er*B3^0*#zxnzb zI_~)6sE-AeEw|i?CZA&R_#O+zlTSXy6yDu;-^D-$009V2ZQ0U6R@;lcmM9M>VQfbU zz*qDP5q}ELGq#YYkSA3>`}}jOpc%?Q_Q=DJSgLX;eenMKe10YRZTjh_w{pjMxQ(Gv z9%IZgYHh5rnBTQ(&jSA#`oOIx<;~Vjl#&Fam}cR-Cd$6)zL63uyu%%D4^kS=SPEB5 zF}6Zo1v}|4*{s5Mi>XGdXiEmK0>z}jsS>W~8^A&!WqkINfyXaNg@NjVNdYYBvC+AS znu1$p#Dl2=JUFyV52g(`XajPtDcD_1bAUh}loJH=Py%#1kvare^?&d&Y;r3Omy zx#ypwAy!NPD)60m-eIK+7Oe#=RSL=!pxV zrKNhQHj->%Mu{1bXU6W;#!}157o+Sj0hLi~Bqgd$#fyfkseXvilYv)wUJ9o4?*BzE z5@3BmX>>Y*3_x-B-FMUV*Iyrx8!H8D&W1HSw0=mhQ(I!gH&_}7*@Fp1Cosq40)+;`9*RaPOnQd0Utr;*0Lpl*z%MlWNzk#taqKOcSc zA>DZ6jaHs`y#;|6*$)~hsznxAlonld5tcVe!Llf}XLnutd2^&X8C6sbXzGRfF2vO! zO%4$@ki2(?94H`pGNr5cS16Uh?1hFxx?A~+FJ#^o__poOUlnbooiYu;QfouU57f`k}M}b%dGDUDI^qY)V>i6TXj{=8Z~;}V-_O3$etf?ZhDw-eICHVf<`w2bYx3L!vyhK<%ZyK%1E zn6n{(;sV&rHrs5h1n6FF!GF0^-?QuxOhVwwX46eKi>q$Cfh^zY@vYy3dc{rx`~x*P z`y6x7a?37j<$oKnnL@2>e$@rb4%yk;Z@)#azWSPFD_^G9EnE5QGtaQVJp=#|w1((| z9!sU#)!%#LsF;-r6Bq0$KpvnX^P6PSN!j3cnyIH@?e7ehO@$Jm?*x5gJxra%6NHW2 zDD9f$Q>y^D@unN;4!gj?xEVhFS6+E#ySS{$Y1e?tGz;GI_9+2W&JH)l3*}3TlJS}x z52S*GuJtcb?3+sE?aL1!>X8;y#^Fs3z&Mq3AVwxL{zq_~MH<<^doC7$M%WcEZYh^8j`K zrkifc8qQ9>@I%04#9_6Vbi3^Gdum!C<-Hn|_UD;ro@S*4w14x?J0B70L7s*)Wnksr zDD}4g+p@p|nHS_{P<#NiS6O9MT508#Xy%z_u4(E(DSd3ICl~}j{q$4xv<0Y_txO3r zH}paO{u5du{UDlj(#dGhpn=r4Uq5zyqmMtL_uqS;-v8izde_RXKyjkq;UO1*2#|p+3-)O<*)qdCgw0I^6{e^NNm2R7 zcm|KOx7>U)-Erp~>}6x_dFG)FH`tKo7(6&kT17ckM0Fs`@+eYKes^~>XvtLTGAt7P z+VniXPWQp9MCGgCW0|^NukbRsdKQJr)<2fN9TM5b1}ZDwX3t9+$Nc_h0h^x-&@g!* zGlDOzCJi4}aIlq7n}ZE((i)4Lo0>4o^O4IN5noPGuX0zv)0-Ezy#tWDi^ zyX{!k=RhYR4Hk&oEH!qM6?B888q2bL3t4#}fNK5)7NCLfav{hMH;AbtILZ4o*|Ri6 z-2#vmDJk&{s5EF8pM2s;di2pp*jp_qJpk;&3ok;8SOo(sYYdU8H&B8Y{}PMeLk~U3 zi^h{yHU@cjsdpA(e2%?s?p^2;yJrVp@_Dg{tTpr$~j zK$g=Kz=8w{Zkuhkp>_f00nqFr&-~2CyzJo`lmVOv0>Hxdq6kiMa%SI!Ysm8;uao8- zIrvfSUQWjJ{?kuCv+}%anA*Z5UT2+k*)|OZq9IM#P2G3zeU^>9iiPzs_yxtW^wLYy zvdb+;eMal!lPrLddgSi0%46#f3{HO>_9OrDgs~tznibB2eFXIiL46e|m5_=Ah-?z4 z*V((&wvfX?!+78Q_tC4byu#^Y+$^)qvNYG+bF<7Xo91<3^nZs8d4kS4`z$uQfXs5M zt+%0BW}PK!T8-m9Bg+_iwM+rk!ME}n5XnNj1Vo+UH-d$&DCKABV#x50lD%FG7%(i#c-PD3IUu0|fVZ5LW^WX*G0BG^QK7IHg-0{bsfESx_#~sIN7pI^}C!3U}oMK9v z+){@VPdt&=HpW6I0Eq1xsU9)G$(8Fz?|!=Ul8d=-ms)CR+Hj+d;?}YJ+h*VrKrg|U8tOzkZf)_(zLDQ4AWLH-Zk&u< znTOuESj0aXgW7=cp(P9Z&=V>&8L~FXzq^Z;Md*jQ0m}Ph29B|cDrTtd( zfK>xqfEWbnkoQ4xfuq^}uq(b_KY*l#4=3mOHG^V#c(%9fU9U# zfAiyy!{~`8hw$R|pk1_(_JRv7MC)2Abeh5eEk;pCE*U6aK$+fn!wswv-Du-YXtmW> zV{nz<F071Yu!mI9s2YWLuwVvv;uO>Y4O`v}Dx(IqsR;*jl8Yzw}3n$0)fc%4lzUVY_N z3z)CjGQVVj?|YVGhQoDdn|*c$Ny@Z>`Q&wd<=iZz@9(|G87>2aL1p5Al)2`fi`*6_ z@r_SOj-^jN{e-T+?mD{4E~3~d4ptHdys~b2UAubc3*2sz(vMC3xloXVwJfwhG{!yL zP9>_Uu1Tb*sg`{ea}JSfY-8iZYqIeQg8S^-wrpm%K=N}_Sfv05e_#c12u2f|2jGI1 z2rihL?7E;a!~R785>DW03aBqUMIarps=0QtGzeiQ26sE4)If3Q4mWCWO2Iq+!EOw) zG04_Zn(jNQrI9~(Zy*yq_LyVnW~=tc=IpJu+S&@{os+>wtRVXWD}RGaYiwYKxd*^& zOt17n8DRVL_~S$D_ct+UVUmNA0_8T?3cqKbc@|66PUiM2mIUgdU3>+V1j85&#*|G= z$Gm9pOGzbPpWAe4vUS(Eto8SG8?b)c%fAYKfwdhaE09`D4R2UDD zI0W1WB>#*s8 znL;T5v>>a2tO*0KDL`%o(*>}D?T#&jtO%#-K;x9V+9?f600-Db2*snnEK^@8{Y+498}Tigojm!kPB^$HnL7410^sH7ShRjzPdNpk_?-wUch zv&4d-@b6=C9y}sj=qn956l}oY`4s>J+cN;iU`rLQy6S4QpatAY3Fbw+8BOUyCU@U` z_tJ$IT*xfz-1E%K=W#;(An>$SPXquU_JCe&fR{}`&M$}obqxkqoBMz3+aUW8bIAU`~1+Nk!mkO{+%4!X)uk# zkegzJe13`m%^mEvAj6T`K3N9rNyI;#!`QS*8YTd6{fu~$%+CWl85_9~S85`gR#L>r zmY?-4MYpCepQMy3s!#54hm{-h7wiTgDhyJhXxx}jI^1CLTy)XDn35bkcrg3UhoBqs zne)#(kF}kUMWG&80I(q$d0_7%jC=vkkO6{f!EOa;##lT%G(D%C$}B;R@G zT^jQEV|LNG-OA>k;Kg9^#h0K}tt@Y%i6+j{HpOd{`KB9h;C6xM4;bxkVA)Afca7|x zZyQj7CtD3MSlzYOUWfNijxk2&eK&$L$v>&SR30N`ii`9DDas-;RDH*w^?zrPID8X+Rw23g0`0l%JIWGFiZ2|h; zY9pP`FUSY6hY^Ot@Qks*f(!9RaTw3$6l-zu@QoqkzGo@2yYIToYNs#beXGzqZ?^ds zwZm3ap9-)*Isa$nr~f?jpERyj4q#EjwxK4o7-pX^jV%RttrZ=dbI#cep8Hvf8uhC$ zUatRIWQy-XJ=AzHnrbTnSNbMh%k;6Yw8z^ErYd;KiquhO{0kS)CK#|nz;CIqiiGE8 zcd*={O#=H71))&}UO!dn4JbkmgvkMe(o%re2nf63ud8XlAynLJ*@+4>1pGDyxSD~y z2u7~UEw>zX624+012D0@2*O)a1e|yk*`$Xaeu!?n^)?HryYPf3!5+wsx>_L+(y(mu zTW|8VBM8zV+k(Iu`w~w&=|uLB0R_VrTWm?Q&NeF-V2A~{OD!nFsvg?A4K~=2H(Lk! zVHorf>c0Kf+w}A^Pty}ahOjBc+m`hNOE%S1Q`>)2(sWi}4*y*M8<;s@K^en>4eYms z88)Rw-`B0>oDKeHwT%Fk&n+mvW$OXW=qoS3!h0ma=0Y1e_0-dF+2@#j4tBkRP18M9 zmC8zW@JV?&H2cAd8(<=Fqot}3Gu?&XP-s)-*-P#>RWEL zRdkiqZd^S4@WWQ_`42V|+06FAlEUkW$pAv75%SMLTHG2zy6H7egB{hLdzUypqeY-{ z`>rLM*p!z@hcZe`$h^Y)s*B0p4xoN<@ETPV8wNH^4sdX5ZXg;0j7OoyhdD!&91GwA zEhL25CF(5%2;1R}0)qFDRuPcg0~Y>oZCSFFd4sr=J_hpy05e!VF~n=&#A7{>72%$A-2>U7 z*dLQL2RV7HJl~9fV@ zr@p-X2nT=6H{X0rSx#)*37W$*&pgX&Uaz#1bSBz#vrTysh~7-e$rA7JzRpm0Xzk{l zb1quS3hO7GbW#;J6ttv`(z2ZLgsi<&lMk<2B0nK)Hg3DpGtWLl_ug|4Yxuy5!Li^n zOD`P(NC8jFP`(k{rA74kkjJ@A;H+>SE11W^6Z)alf1$s>{q`F^1K|eSRtqn(2x}JE z7g$4o;~Es?zwH=-ZP?;=jPA74&T5aOQ8Tx_c2TA;DJp3WQDvW`zH(Q_Ya3f>pJG~Y zWIM$YNOqEvyvw9(W9ZP1ZlJTkpLftm%BK0*!l(u`oKg+>3Ixj~r2|NG$a=t1=4Ty- z0FZ$o8x&Q$lYp=}8|lF$1EIXKx@VvW;ldemtF-+`4mAEt@vm{Jc~Fp8h3B1bUJ@_W zH+sybch~&)8anilLug6M62i|s%COJgd$Z*@%tYW(6)v3Nj|)^7gyQgz&+M;H4Oa1> z!ca#D+h?{KTzF6baP{%Ra}rsbNGTZwX8A;tf+q!LAyTe+Bh{$o?^L_EZ*g$P-4?_k zSO@sRFaBnmZ)Sme{%9uQK!+lWUIG}%3C}qFG-gxRTyw1`nAgRs12;@_zVQW4z+%|`@U&A;q1k4eoqoUTt~7BtA*v1V6|Z$B0_>zrHGG$j#E5oYnZQ27 zM!swDmLVdshLEWZM$uQT&vh ze^~134AyEwI1kHsn2i89_qA;Eth3C@?EsnAJGL%3H3%9^SkHrPdeO>!u)h&(GuSR@ z(w1CuNt$f($@BoN0Wk62#Lqtc%ud)ZS-}8Hcx;>c%4!xr|KfA2Y5c}gw=EvE=!3Dm zb^X{@!w6X!-*Q1HyWL;vcN#|Mjm6`G~dOZ15X9)>b5weVBg-x#&MFr3=%N-&jS_T5GMX?7LER z63{>W)KhfqamUhlwhazG_)wZ;(n(VNYalB?yQa8FY@ni0N$2O@YIBreVebU*emx?h z8Vf3~WzrSJGX!Ekwd$r4wY`iDR8~8n8zmt4OK#AH`We6lt9n?v=K<^>CLpZRp-C(S z2a>*-kKJee}Uwb&d34lLBUQ=2)LiMWq#iN1KS3+5*k3TY~znV z9&hl5TnuIp?4zs4+hQ5RK=%Fj-|=Q|cv6LSG34*tl(B zDS5EXdC0%Rg8A>uE@kQq+ppLYtB99VN>J_`ebkX`EP9Al2u(KGL4y2^^NF5VscfX$F7!hF^@~t&qiTaT1n@9A zgUA_S};xrSY(prL4&>q5fJxn;j4x;XutjAau5rBg& zNvo~4Iu9`TYlpjPu*y($K)VP^kur7xo*&>!2DVY4+>jpFO*r?Pe){QH9yGv$z+{t6 z8tvy~{RG28V$r6w;-@x*_6-y+{Bc1+0AR%e1tB_48^Y%Ic`f@l$LzC5%m0{YG*nH` zO!gii1|w69hld_~kmYxvj9k5`28=lvfh9coIgnRHARNBA*jc8AlM}3+j9`$wE-R` zV3-PE%F6_SDX20~ZTT6DG9D&4(gG;t@6x?%Zj=WrE-0Z=T590<=b*L#AfPr9Fokc* znnwJ98i4k5XA4TJTk7#hE4O?6vBy|30mTB!3t1k7_pq)9y9P4{w~gv%wtL&l%ETt@ zKcO0skaa!v^iyn;gzZA0evrlrD=cp*w>jD4X{wBzC~06PK#z?OrTAn} zA9T>cH0^+CYYU+KP7J@;4yAWF>z{*IE4TA%i05USj3?2q%Y&E@e=-YcGOrRwXs&Y5 z@{c>ZcWw(@KUWyp4cgEQLOuf@^Q8dF1434)z)Jx}m7tOUa8UQl5c0>034nvP60)(f zfYe<<&I8j32;CWovO%e35bim^4y-H6A(G0z%R!G=z6A{;6c%8EcHM1PrU(F5u(5(b z9zthOV5?ec>(fs^p{xIMHEYta4G1S+545tMFydi1eJS;hkaKi(~4CmA%9lUw%1 zZKW|;#dF{yQNMZ}N_-NCei9${Kexah-Vh+m+Qe$n@-jekhlvO4bojI{1%Mt_UhLbG z169@o0058#bq7$W0}{n+IJiT4M;&!E#h#3VrY<~%y%Kzj0ffegXBzr+g^E1p=m$3T z%7I#gWjy3uTW+}pQ=Xu%zPIwDJ@(kcQktXDVTb*hW}jnrX8W*teE9HTw4Ytk7qOE( z)Z-Y*RJ^BVR zJNV28HHob^aATAEm)Gg&{)2HYZ0maL{vwn3#@asc{D5{SVyF-aGnRE$iCrtV@e6x)`&$W%f}f z=N3FrrdS+cTJc-kpA%2qe%~V~D!9J6;)=^@p@kP=TdmPOTU`PqC@ZeG{4%EYA%BDe z$gyFFY>aA4$A`6;y*>Q!KhxNjAhfqhvO>NE<)yd$cws#i z*N#h3{^e5VXzdte?d7!->U)Y-&Q=@%!`%yk_D^1nLYZG`yXU#yoSy5Xv1R!HG zIqx;XrNYnMX+nAt!Z$UUmjtDD?r!9}b{6{o*8*5RuzO(BO2(<%dy1s#)F1ftf-DT1 ztd$Bo?TxU4{yW$k1AqY&vb2)o2P^iboBo!CtT080aYBUb9_#>w>M-$0hLe=Y@)+4& z;1d3%P$x`&u!Y#Si0ePu)fjbvUDwV#@4}`bXP z4?q6E3jip1VKl`01Sjp(6I*X;R@7 zu&Xtsf${@Y#9)2#Mf8~kUiju;&el8EispTa5ZF=3wctW$Z7cJP`#c-IgZvDdLX4FI z4m>EjN-`QP(r6R=eg&er9U5bsAWx;qph~tCXIPhr_hta zrz$Q=;x6XHo5z`LWSYqM@BBd=k%f%-A;%44j2k zU=L@Tbv6rT2hl69yuvauXv1JU3NHq5jSa=aCU)fx29uIid&^F|d+xcHof5ug0c+OT zW@D2Cc;i62?8Sj(VJS<)KQw7#;2Y<~)YW0opy`z91nP)7!A;CdFTTW14nMi%6QnF}-PTqkey-IN!^;M&{!FonIM1}Ls!z!T!UIudnoq}8<`O=EuBon3$?i3!)d|#^-ht)IHH0AqcPtp7 zr2vD<2OoTph5b#y503`$MzQ0LJBfGlB6M7f0rOgP9D+QqZZI+LlfYp=a7 z0uT>1J5s?qg1Uq$3FKWkz6^GAlUbG~mu<=Gd}0*kS@N^g9I?)UMgUveukV~}f(^hjacXb5hUq?aAhyI3OS1ni^yy!ZKaTfv zN-q#HNR}UNtq(iwa60e&^JvdKcBkDf)e9Chj~~LMlTAhkTF^TE^wa2|0}rrN@}4w! z&bcUWnb5tfuf8Vx>&JPJ*j)i%UoPt)^G;tbyUcR*zLkN&RAb_aC!s|aU6fQ0_;yW` zJ@1?HwJa9};>L=HUaORwMEa?6bgnFAf}0$$2#-AcFq8c=%`~F|mh95X)}H0E z%xS4EDNB%=ppZVEo_6}_yoE92O%oyN70$Z10i-j#=v(G+9)Fy_{OYJBh zAvP#!7`uWJ-FvS+X>&`3Nq66p3iCv^mCKFCoAv>8M_WY*{F}k3SLR)%4rgi}pmpe> zhtR2~oodAi2e2`3h$qJd3bmeQVz zG8L98T17#BUiZ{*rv6BRkb6+okUd}(`H*xsRIiF`>GJ9 zNIti-AkLrl2Eay!B?YSi_aiwth4e6~!5TqeUwRKY2)1`fYv=Gj0M+%^-@vMGkn;+- z_iJj45B=pgn3@ZBGL@6#gZB(E2u@BmV|$>d4jXVyYIT2{${nh zOD?rEpTSvjVbsV@+JJqmu&V<_3ZeP6*Z!AJ9G6~6LjK`Xj04#E4H`6vPCD@f`s&Ls zE#?4*3-C;mAfz|rav(z)7ppi0{1`LttqE1Nyz zWM!bd!px{tnOwphEV9#jgjKnC?Sk>7ov2TW`Lm-M$K^TRd| z09R4w;p4)X5Sw@vO%dO_YwXDbJGb)6E0H8L1Co#K-dng{jLjUoP`?9^#NmlEHa|5A*$7Da$vX?k5 z2-{)co(HEp^WMBb1}Lyf0OM|2@tJ>-D(as_*b~4T(u?UxUWPOtid-YblLtJ9=T%V4 zXhYc2!F&K7VFBi^yz+7^Q;nh%*YX|O?5Lyv!f76I@Sm8nOW*6Z2tyIFIB5K^5FKx2 zTNsCu;+E;-%t=`8!$Kb0wjftDVqEC*8rpul?O9=Q^wCGM(nPkOOdAXHcH8ejAAImW zU4PwwMf=KeCE7oXtCk#RVo^$9<8S4Bkn6Db;2hEp3y%>)!~F}O2Q2`FO?Rfi7Lw_m zMZLTprJ)@twOa|BLQ_1*vk;n23BoBd(HEAfrwQ4~VV~?_;0Ujhyu@nRB zy3Vrk-hAT?XZyAK>QR^vx!ON0sG+T}*?OS`7a~Og$wJuhoz)6L6Nm}++;h*fMgB)t zGYQiNXrZ9F!$id|`WckP=$49vmT{Ps!C?bBC>O9ype%8!5IjWSB<;{H3bC?BM!XBu zTfO&F+fHZ~E|^5Xt1a9Vo%zo***s&z4L4%pw(19>M(zPX09HG=vH^<NfRD2jvu%5eBDL9_hGJ za;6fk=&RlY;gkSAr`N)BWnteC6ex9|ZhkTVYYHR7Cg$J5l6}`*cjc85E{kPAJWxz9 zK7~0#&d!46gpA|JBadSCDSVTDE7s0oQ+MtnCkJ3`3xWI!11AicsHPShg1hN#!z5q_3u(0vqwA< z{Yq;oGSqXJ_dyT&8Z6Gi`ru4OoRkg2U6@KB9Zlc4 z6bZ@`yyfE14wyC|zuGso{!Y)}i~r=moy3bDSiaynLV=jb8)NA&e>vKM`j2er9JeMJ zBYxcVH{X6k2OV$#F90w$4aTowBF2S}9E*R5)f&V7&SrLe>GTpfVK>Dg2Oq@keC%<@ zJ6A#!n0+r7&w)?1t6W4JWfr%A#r0IMg{gM_d^EWhnkwm-3{_#9P^)!lka?9tsDBj9 zo6fFrMjE(!3q~UfT%~U@Nf1hGBPI(5VF0zfoS0nB2l`ZnGP&l5VQM(IHeVgX!#C~Z z2e7bDe3P12#tCB=2DJk$)y2R?RW@1GM{I!&77rA`$Che>@&VhM0Hmji6YOimo6I?ufG(8iX9oOt4i zDDp+ML9H(0FGHFAX7thVZ+!NK0mDo-8a4uy>_7PRdi$NXc$?BiR_^wVW&3e#8vLTc zP`64_>@rZ)KrFHDvFEBDnrqIvxn9^N1O*0sV!?jOQM=k%VjfTiQ1bg**%xGk2mk3$ ztPuvA82dIGFQ77^Sp>y~lgvRWjXUl*DsEWFuz>8n&%V6f2eL|R(_*_g+1|eHZ~=sa zYR|TsV)!0g!pi0p73HHt9=NTg)Q&v-&vfxc7t^MjZ$`nTjWcdgEhe(iXr|aijYw56 zPOba_8-9Hz2~?qhJfRT4En47@X4!&+LpxK-x~imJm7<&|2dAHv${JOnN#=#4=pkzY z^_BaihZQ&`Fa{oMa!j@g0!W^)lL!Y}z=&0m&-O1iH^YMjv`dprsyD+*B)k5)>v_{R zD7+X$jtRjEVz9z2V=PcWaexScDW&UwUGy)y-O91xj~yOQLD_+Yga95CCvR1<<-@im zBm)W(8aeid{`%{@EeNXoU{w34r6A$*2j&xfY<<^UYi$+|FR;M;G_}<*vambI>`7Nb z-mAY6$g+1~f|2gSF~%I7!4;lDadaA}L6q&G2Ona)tA`(ch~rLR!2rj+X_m1)`&WBz zfBR23A@>WO;pn)JEjx^z7MSe$Vpd8I_Il`Bm^)zi!E{y*rG(9*vtjTGSt2N4XmR21 z3&+RB7y_8l)}Wwoxc)jm!DxQo)+QD`v8WBQp!Lq%@36KR$_l5HkY#mo`+Ig3W+ej# z40L0jbkwea%aD?L)lLGE-^4}CCzgi0XDr zE_~Z5jZW{I1}a#TaNeJci+|8UV#|d*smI6Qzc7)QZn{C@>_$U!!or6XzK1$p(o%U* z?z;P~=m0V0BL$>xm52YR@vJNZzT_2f=iMehs)nON#f#r*A|PBS7#D3JJDxd+oJ1ZDXkn*mfOf1>i?o!S=(CJRDh` zgh{3WbWGliaSUSP{^1tn;i(n-1F>+G(gEK8zr=AeOgbYY<%0fO>f1i6M03 z4L4f3-cXi1MNPaG+TRbp#(~IIj_H6L%SykQ%8z#1D2r%scOV zY*Y8u*I&`BmU2wHa*X;0UOeWQW3Z*juVo`>wM|Tuj;u_Ax75pQKf&-8iVY)XV;B=y zVA1!Wz)@cKFw=GPtywt{3KlX@jMEL8PDT+i({FeueNmu;CuX{7}| z5LCEffU$hh9m>V$h!}}x6j|xM_+4+!8oEiRoAlZR2%NE>u9OZa6m+x#u2c$^AuY)= z1U;ZafVWV0TDB1rT(fwO4;jJ+g2A1PKb5@DOf8=w8JMoCY%7=YWENnw`XV+;^7J zfLj}=$`@N~(U_kxnp!yO=%Z*}JE&IVvluC@U|D)NIS6ii7qx(-CaXvnse;t<@gF690=Yzu*I90m7KL&}!uYa=htn9R~~?z|v(%n$rRgJYSHC8E?2h4%qLHOoi@Y z+3X>?y7h#nwT?zsJS+Sa>`R&t<9ES@dclRala>9=HZF!5l>E0w*z=pv^< zWMQ?f+xzc30D~VcsQjT}g#RuaWO2+ff8kSxV1IR>)r^5k0s9zvK+5x?2I?f08xt{Y zAxiC)x9yv6yvc{X!bAlo7LcvMOajmFF9b|3lpnIX!E+9FN7~mV-XsgvG%S!W?8jh> z1$pL8H{D1VTyQ?OD_jFfioc2akF21dk#H#k00Mh@@WFp#+bYT(sJON(?`bw2}%)E71&_-_m6S>7xdiM&s0ytSWI=jzxnF=6 zZ$LKLnn1*$fPl%Q*gfBQA6b?YMT#C%L!Ok{`?XhJV>twyX_&0j#On6cQ%^FRRYeJb z94Hjig{u~vISG~n6b60)vM??Md;5|F2^>fYs^`|*Zl%8*a}4kEJI%6FuAVS)TA}KTGLooaix`4vD(fPEGv5n9eCh@wA9i|*UmEp^#%i52;hIW z%{H{tPCN2}tT2AXy9A3Swtwghll_w&49XNPln*)NP<9dX*S{Xmn&%L&6=ZbjlNtz1 zP?&Shxp`X~Z6{c{qmDe>Dq21Z zwM`?z{{h%6xX{9Uyc%SUy01bsLvzhN7dx2*#R!>N4mP3B;ouPEy!7IWS+15uCt)n7 zF&$RhC=ZLoL3k9f%23vdseDFI@?yN;xieygU;N}jA|_A}x`&rl>Z{CBR+ph|=q23N%fyo(`QJRwkTO!^d^;$uy<18J;vycdO2n zo$Ch(wgN59W)wo!Wl~<@J5VuTNkCNq1j5!P!~?qqFADu^nJ`J=!wV<=0Pqez_z;?D z=9%I|C<$c6RMCG!{Dfm9XM!9ksg9%o9mcD0+6NZ=yz|ay_A4EPkpeVuaIpgih}e&} z%g#Hqr&4GaYoJBtkiUZ<9p)ZjwXlr~`#;~XTHP2|&8Cz_o+jSIuoNaY-+ucYgCQ0_ zil9!U@ze0awy$O3uq_K7If&F`C5b%nbPKuRfB$=Rt>0tm>@}z~*r}a;);}3Q6-DLC z0P1HQD;fZBU1ya7dhwwMOc+Brv>5I3>MO6L?Bu^xXv!Ble$q0*i-VJUNnN8awF5Xc z>O?OE5UdQ&f$Z^QaR4iycJE|ZIoLJCiPs~;;*HGvrVz>laKRu;D{TTctn6&Rl|9E5 zWCvr8Ifm0T`OZt`5QZ(Z9dN|gVR`ZCIQP;{piePEBvkyx4;DZ_{O|+zlA3T;sE>X1 z0a~yD!*|$rgMkT;oNxjNxe;VxGt4l(rL^wn{d|AicVAj_jWyYoOAp(q=>ez!NzFR{ zC!37vl@WE8R8Od%hCoWW@i!3S!?WuJ7hcGeOp~i31RP_Ay@;Dz+2TQ#a(m$Z`v}bz+r1g(nd;#Ax*+dFT0E> zNB~#M*9X+rY_rd9WlAqtLGGONzylAm=LA^S|K*rt?X$Te1yoyy43VU^NKV$;*fgY> z0XfJ?eJ>JEF^q0!;>kKXYeG*v>2G{WckcgP2GkjQHR0NLYb$?(IRLiXr0x^zxSViV zU*j6CYGAekiWtfaEJ7--$tp#pK&212{X1wpz zZK5VIZc-Bsuz&-5z;n(%i@5>`N)Ak1TpaWZ`Q?>YT+VHyDdSXMcy-0%42nJVA*n6_ zX90E|>@DvD&eAZg)Gj7vBI_FrHBGFyF%HB$Hi>ytr8JCa2fnMIeeCfOWAk~SiX%9n zA+-;M5&z4DCXmZl*?ho`{uoiXSRR!gky3z|=TS zLXwMK!Un@)1ROl`KP&(I=;M#-gUjDz@x)la_nv#|;7e4(bM@nZwdMWTJ8FwGC1!$5 zEY`V71Ibfj9D2mIAC6|458&_#x-T>8<|hNLZdt(*5z^<+ATUS3;7rfmI{;e{=F626 z{~+{+7IHMXr6?LtIxqw)VnkjoF<5buGxFx+p-dY5q4&Ztgl*SUd}2{ZNKQo8%NU^0 zFy?gy^?_9#)C26Akk&4{{N7Q7V&Ion+>lOq-corc7C9{rB!Dm$G))%L6Fq(_%S-_f zjf}<5pv8o23cw4)P_#X77aC&>Dh1RX^03`@{R3Tc$;G_EyR?8ASx;GaB0e+~EG*=4 zXPtQ_yRIRzQ01UZvMqe8Lc6*B_B+xG&p*eeC}9A^<}wL#;FJ*lv~IZJI#CWqfiR`C z<c2ya;hoW`v+{b;K?_1iK?ItFwsF9!Wi4geh~kG6$OF=(om0h7`uB*3O|##W-e;Yxdv6qkPR6Nu zXr#8N1Xf!97TyI@2dq-=T}Z*%9f3Sg12UzA=V1b+foS3&0g277P4ZUqT?ftIph1Jg z;G{IkeLQUOVd~9Da7ouF2@a;fS&ezSfMSHq3u!>Eg41{Q{o{Vh;55Wd=}|TTsRl4{ zAm&Ri88JcRKu!P@>mVn%pY*bQ6rh=u67B)Q#~phd+a3WJn8LL63@23Q0gDLyy6>^a zZhV&F=U$E_^V4l%V*7^x(}%tH*@xW)VUHrqh^k7ri)svaA4VM9Q~zPt-MG&o+XBTM z;`)is`GG})+zqFT!(1fIdZY3IYYUd|!VAxj90SMA1VC%7wHC`WkzN>Ev0Z(8ViP=+ zK@VGC2Gts?;D1A&kbPm-!~<4l8sEj%O5=j!7)exCYR_=kPbv*ZZ$)7~-+QXQB9Xo` zTBWL|*wVV#n#3wQD2&uv)r*5T+J$aFtD8NHRpA+tWF6CU3>Zvk$cJP+Ttc43G9(t} zH?y9RQVIZO|6#Rb4+LT&$3aNWBZaf_CeZ^Xb-um3)e2MRpC3NXt2zL<)ruZ`;DP9q zECg%^!fHC)P7-L-1`Zs+o3X=WF=RCLVG`gwjkg$(5iG-(u{QBL64FnT4`h9NX=%13&xEf3A{)FfI^y1UEu! zTF|-hg7e)rDOU*v;t0?Je*gUsbkE&)rN>4tAjFF&Kz1?lvaKLynHQ;G!uyV#4C}Wn8*sK!Xy$vW<&{ag7;y6{xeNG z&9pSf;KB6nyYKK87#IfQo7v}>gMY`wacX|^JQk^AE$g|*?z_|LLthtdo2Wp|B8#dR zCkxwQr=8fA>!ur%981Oxpe^siBb-77-&z0s=RY;LiTZ-7f*~smXdPveJkW-=#lnjH zrtkpq#TTEa62t|=b;Jh0`3-Xrm)P>^K20FguYW&FeJx9O-+d?VLrnyLiSb4ot%vIl zQx&J3G!b}1AFA<`Lg@8iP9NNS#bvUJB{OO~hTkwR5PGN{YPMYNvM9JOX(#PyjBNV!(q0JONOgz(!V@h4JwGnFp}KI06i-_-31L zM#}Kie;Z3>H24^`5~i|CippdlRS6>znSN|*Ljt%+-X}8_}z#tM>FTZOz_O%2`+4qyM zJ=bo0QV-nZe4$v;y!{kB@-+_0fDG@-E3UK@;4szhA^ygj{FWZL|2}#dE~zQCxt!ax z&oP+#PdE|VYPkiHR6j66*!IEZ`-dNVz_EpfG|2dR!5`YEmV$raf%{Z`MkKm~mHmOD zg<-SYxFh=|CdrqMP4rKh3Q80#F2Sbm1Z-_@hJ{ixV3@%nvhON3s%?wFSbH9nhJn@mvd=6EKAsd7ebF+ zts>~jfo0sOMDPHRmpzP#S6+UFsR(x$fQ39Txa*7A@>yGgV{k#P1D{in)AUq5dcev7 zNqQj2$x22}CC$dbhm)I*^S`;6Yl z)_G0dm;2dgpU1ukZ50|H+FIms#~rupMm4c$?5Gej*xPTvy*6({pSm+J=doJHyIEV# zA4bWPiG7mV(3dp)i1QeOfSyNFB>*>?U|1?)!hvE>3cp_0)#VE0M-~aGEJD1A?$^pyh{SP=Gv8|z-jRX>-Q6>C} zWl>R0sx4b8dU%mm%qqr>waO?eu5(KRpKj#To~HDUvVJ%25De^F#Lk7^Y_I`6^6*16 z_gr(cZ1KexUZ53MT#2aJ&nJr{i}8+XBl7IB;BKl~`xQ!XOF51c80#Sy2J=ah9!FZ@I^2!2<^sUV_y@2Wlr zC*?QZG{Wa^D9zov%uC3%q7Xj3&p|^1midV`Xm@LHS{q=L28@hH`9RkRu?0G0A>VzA zZ9-M-I8a{r_sp};WP{7lSav|bT;iLrzah#7RHPPNWzs6>BSLr#3JH{%?;9dnZu|S9 z*G3YBAt>u=XvpJ3nDxv9g!FLAH^t;rkYq!30})BK!9;*c>4(xP=!ln6u4p`%h)5=* z#7fsLnN%Z_0i38)Q(xx+aiDeFYwvydtW2Dv2#OjY4lfxnUd7(dDJ)g<)RRxLYzbh6 z!&f2Cffv?2_Sl{7yEm{-q}xb53_yZk_~`%B!H2LW(K#v9O(yi*0)Sj3cqDoEop;%V zk;y7I*4Sgwx|aGn@7#0w>;j5FXd*yh5nOe()!AbR4my!zN#G72?FRN18^{e+*?4kg zf*~{5*}JV0fETDh?WLjOHga2P{wbSIy#wS=7*{3;SWV^ax>~K|K>`PHxcpnr(%w6Y zkSWHJ3M17l%f?Wtgv9Y^f_fXJp^2R=QDF)FjV>)wZ4jw@F(Kxh(>Z&4{`u!rT38jw zx8MbkNE6(>gN6$#?_f%iGN_X4-om8A{ihbZ`eE;$01LHh*?(Bw+=gvZl?dtGV@dZ? zz%lZRF1o1xh9nh}wVf)RY~%QG1Sb>Un=F0*ft=)I>iv`|p@2+={CU3E$T3i-rd{EKD?dh_W#|+`v)cEhCg%8JvWa7 z1{9(+Mnr$jJo79J+RXAvaEt9@*jL(&>^Ay(3J0FV#m)bN-!7aa^!Q_svcf5rpHja= za6gl!aIrDo$$RDaN`0@|jHgAFOd>crU$#IDnG`jYkH`a`PhWbKh=O<1-raKmD*4Q_ z?pkeX3M2v#49pUrO zKa1}|3{X@E%s!g%G|cLX?PV}YRDDbWv2VWlnhj)wS|$x57Z;#;-~IR3+6H^o;6seE z0UUcrfF&6@&`cbJsa++NBwIwZrv#*mGH{~QW+p#2K6PMXu}s%MMHv8>0yM?H|HB{X z`s=TwWtUyfQn3U1`iLWsWa{JXx8I^Y_T1Bg#_jaET}*zn!G;zf?&cG%abOBOJ>aZM zX!7bHnS+=MI5ixb%HeSYvMkxQ5lo2G1jjSj;O%UI6*~gnwCq@_vlCAMh;bls%Wt$! zi)CzK))s<#8^#KN)R!_X$N-_p0ehQRdy!rR%4#7t*nY)Qta0cl&?eSk!&@%?WgQy( zUd=x)bIVgaeD4V$Lq;5jMrk01{9q8Zkvvqflt*5TI6%nmZpEm4Zmjlg607^|k z39Edlls#B@r@0J4L4>?RzOf9k(@6H80;ko-udY7 zC!b7z+;4wo_iwxPHag_cLv0_vOLyOOC!dmpvnKDm_g)Jao3gFm{(sz$-Gqzm#I=BR z{}M)_@Jb6Gao1dPjeG7JM#$W=Gz@D*x7~JoHmG&pDBK%pa^b5UN50*qWSprj@w1p+ zxZnl%Su5hujg>Co9vd9P~iZmFgDyGUzVC6!G`c2#6yB=jKQ8jG3mJv)BT1Z1bQ7~DVi~uA3Ts%`TVnk9g zgqKJBo5QNwVOIsUd6;+zpu9f$_+vMq#3aYrgV_8Eo0pVoT4fSr!@8|GL{VRQ0rFas)mb}>mgH()bKht?FG)s~HfYP=HZ0#L7u+j0Fb6L2+++>sBgCIbfyp%EHD57~!A=OaUT=HL z=@2KlWWmWf`BcFw##YEA1Dv`Y;vA4DJ6H)~{jhTJNcl&s9Y=-_XTOx9lhcb3^^<3;(s_uu#F zr@jg@K6NM#li0c%H&;(pTupi_4@~1;MoWMS_ovJGBo2$wOMkV87xJwySd`Vv)Pbt-E{ucO?1TgWTz1)| zd<6NxL{g=qr#x|gV892-8jedTlT-7QBWpP zWueZPCpb9@EIv*el64T%R9(aM(RSNyPj^`g>SNya&l!ud@-ILOTI{JLA-lb`E4I z-}uL^hDLxy22AN*HEMci;5X|DriNJ6O=)mJkPmw+2<;U$L+;oq7@I~Gic*{OwKB0U zzxa}B0EGJWR7#5#${c>7-5h_s@zdm>GzedM`6bm3tF6AeWpgG>U?V}mq#Sg+i3)nK zH8Mh&RK9H}_JwN2)IZ`I5^ZW^p5hx)-$t=2yK?rTAAVLrKfvBekX_Pyfr%h`Y1o|dJAX9f8F#{#3kw3MrH zrVIeW2W(!?u{OI!!5Th+ACaVz@y%~H-JFg&`Y2{?!(xN80pPF@E|645gb!^$&O6`y zZ1N#NG^X#n2^!W{UU`XSud=LR2w}`mWr6USXPzOsu!Vf^-_&;DW-ac}*GLTkUndj$ z-&0vFDbI56k`O)2#g;Qh^+x6rTS6ZPQ;9|mW99zjRYWYp=ZyJ#PngkZ*+!faw7SdH67VH|>CF*=FnA_ueHEs~f(Z z(#izhdFO2+F+g3J42^E(U11AR0GTRl!g2gj@2Mg#9{fv%08@_jt#CL{dub4e!KOeb zuYdYSlPr^vzho(mYp?k)A7G2g3%~jB;||vG$}6v6StKYmP*TSodklXksjmp| z@}3ND^V(z2z34wzUCF2N_!gjiafu6<{STDQLJKWoDYm;~6u6m&mYczeG?<4WvV>Jk zz|fQdPNW&S2Lal3XcXB;S>9&klmv(a;s5Z~a8bqtOxO<$r4W@!q-38iN-aG zDEj6ytqh#}w?+{kiSy$JJp~X_CJ#o~a*<~%t2P_7dt?6K6D&PU31_Qt#-^%xMyw3A z`4AdXq-n&A_2ecW<_Z>J-F4StHt>b#Um!n!IX@hE5A`xmtahF2zJt&bAOu$@q8~U+ zGU=pV<`s&PfC|ET$U@TOO79TBa*jRL*d9C*TY%1f&TGC9)?9NfHjvb-te|+r6{$7P zgF=X9^vW6=K8+cYgI6|i7|gLhRNur-BMmAti6$V-(p3N&s+s{+7GFLOLjlIY>u<0j zA8Utp#=gj-Erm1gIOFmO;#kCBQnAxcJF(|doVtwzY#}p)2UCCo01W0X@Z9<(`^qW} zJW)<^zQM3T9!JwTcGKc!)HS?FfHHHN*JD@306%te#z*ArkcBU8 z6|CuFEz;If67sSDg8aP6R6@0a>BR=^(kiMVw%MSq0jN%K5!I{Q5vv0WJhOCmtoRkNB!GL}vZ)A|gd1Y!NSk zY4}b=No^yuHbPS=Uex=p3{;_?!}s-ZKpLE6y_&vLAmZ8u<6^Ek=j3ZBXXct~F5bj_ z#TA#cl4Zx8aHz-C3{JoQ!*0Bt24@4n1r1Icg5VxPaRx98Tt^)KXWk$m`abr6$;)8a zrOYa;tV;id2}PXPu_q#)g>N8>TYkkA*l$;O50f6a<8hj7xoCy&D&D_|Lo-a)rU6Xg zG6+8G0bV9{ly0vnrksMu;cH%|CC5n^6HtVJ$_x8zRo}+(5%Z7AKi6f3^vES=E+OVS zss40{^>hI?GD7djszT_LpUAlOP5QP@^u>-#U7#k8-td{e4U-Mva?CNu(4VZT+@0z? zI-fEPH#69D9n!)o1=bO}=|iLA)o50BHS^3f+12scIB-Kbr?v7h7&!8lBa>D@M8n2l zsL`X{Pd4C(S!xdFDkki50|D#`e4Hc9HTT@?JwgIdGG9nQnVQH@hCb@n=tfGd8V6D8 z7cuZ+8@0rO5gJ@hhI|NUFw^OGViS${p5zpe-^B@;Pb&8V5CO}GcWYS+_NA9!W>Xn# zhKE)D(MKK02FUwZjpV0R9tHqe%Ze3X@Ol+kNZWt=A8;U3V(@kU;YS~)KGYK~wV(Y5 zQ-yKH8Jn)V_Syu%qK)K~#x=ZRKxy;{+aMY?;{as^8CqOijIQJ0!E-V&0f6IJs1i`( z0=o&Yd7XjB5UHLw&d3*wGyKk}zE2%t7xmfr8NgdqHO6yJ2gRY*Mrsy0_$@&W{G>w# zqYk0vx6!La>~2cqRFuoeHVp|IaXr#n#+-^WVsc5~O8&VF=~b4JtrqD)6IU}M2S-XH z#5>*!W!JI;6{}33G;qElSUQ$*36USb0#q6w>|jD_M041c5G!%Mo4;@0ehi3wpn}m9 z0W7MqqQf1ETyZO3${*NqTx_Y>6T$i#0V?%0cXeGQs}O1~+d-zO+C9V;gWQDgGq5O8 zQL*ujqIn7{a^Al>UcQpos5a5h2~1NN`Clv5O+rZ+0|5RRXPS{7dhkKs5wY<`8}W%j z@U?|QE}*1=4H$r9%dNIyr;pehx#?z`(L5I5&N}N%-jojyspzkNoN>An1;qC8N~D&| z->`BCe&~l;Qhy9(}E}TE|p~vs) z87=@FuEjByKf|$cvF%bC=$FYRpUhHLZ>lzrzm*e>AaFfG4Mkr&&7zTVc?P90z$Bre z?n#}i5!%NceMWU^s-k2v5%1$mp_vqkjSxkagO=Wlm{xU{pHR~q61DW#MuU+^NduyZ ztq{|I%wq;Clw4ztHG)L|zr!IFU>$K_f~0Dew3;f|#|(Mm2@p}Z(X5~{Ke)tjZ7o2OZIa!F0)5y`ETW$S2mWQ2m!e5yc z+~#-N(HpP7PAC8EZ&4BBYag>SqC8*+v7hl`t2l6i^}=E!KnySCywIZR zzEC}2GQ2R}cB_($OSlhlef%i!#~(>~Rk_zx`749b2Xr)#o;IPrQu_+FQiH@_G04Jz zkIgP7oW5?UJZh|m$QxRg>#n>Lo5R-_fz^%~Vc`$Jf6~~3izE7it$Vd<{ zZd`)ay*ncl<&NFJb}dni>eD_D}t}(n>4S{rBC= zJ3uCy$eG3fNK-o`${kMzO*cIQDuUekPF7he!%^T@DkDS|Fn$hJLZdZ|m4?dW-wZJtdJe`VFEBpsm67qtuwIc)w zY{5Q!BlezQ|JVCI_98RaplRDP^KcgM|5O})%k|BBbAGV@E&0KF1!*v)Y^2L9UkA1}}AklpD%_k;? zs5_acrHFVL!KtDIXyF^N;tC*AgU}?O|8e?d;9+F#1Q?33TkGE(xSFo@_%Yd-A(BAF z@#FTLlfS8{UYaR>sRk0-$O%dfuVfe0nQ^wZA}2VuhVFzBV* z6eA5oNK!7wqy|nvM_Dl9c?L{W>QfTe^@St6lh^v5it(E6^*{H#suHy-2WT8SYJ$43 z{PN3l-vxkP|2ON?jaE1hss-%T23DAVv6Xjy@%b0*Np#(H*QE>2Kc5BF%PhMrn_8S< zsWW&Ng*OVw&(1#cpS*uik8PvI0fUSMp(%rTP66D)J%AXZ0{nZy0xJ#~fqNSxTvtoL zgSHUH(ClB|r13x^4(t@6HI=T!(_%(!t^>u>hyK9bJQ(A=tH7xHYdGbku=rAOF!?e@ z77%fGgSNYl+OZrPi~vLBj8ITjF}KnNZ5gkVQEKC0rF?+uZ%mv_Y0Xijs!5Y6bX2$w z=~XgeqbKc6H{HyesbQNHC#0C5xPpKdd&rhrdMV!D1s0$sI()?yS7a6uTAC0rNETXn zVZVPZff{5g(_5_-j!Ku{#6W0Ca(1N~Qm#@vV8wJ^T~oV#`|UTp;vzkF_M%B`D&olp zMzpyCAR?7^Xsar_*I<VsM)sQOU>njRyRa*6R^-vt*r z!J`P+#UHIU7*r14Lx}@p;G1r8rv)vs)KV-&htDs(Uv>4>E&J4$&a?8a(czzdS@_wB^EV37u-L1J;4Do zYVU0&#)>gqMg*jj_gffC0H;8CQ8ot=FvhWU3hgE5q3mjxT{^EZV2Kg<($c^dyGisr z{|RiP1SYOp*q|LqHxj`lWQ?lEPVRJS14e>L?OG3ZQWHVESCdA(^CdQ7Qp;a_j4d7* zSfmDs5#=&;iu9CaxAjwqOAE09U%cJf|&guCL9pd!zK}NKL1>3D^qXq4^9?hhk-^mPg;m3 zo@8SF{qVyN;! zRVmz$m9u|fvF%jr2{0 z`0&pJb##zD7(bFQ`1%HH9`AQ)1EDxBG}u0?1;>k!U-&~$mYm;EeT4nMva2(3c z%Lt8Ql^w3pM(bG1SiLMgH>UjnmGUc+6ND&elw>E$RY}dja37z$#=iNMTWEz9R-n)U zlua`HhixHCEx9BGoCb&hsBW_>@Y`>_9W%g2UC2AGWlx#zTkI*r;J);dOZoG_YK~=B zE(n3Ks>T)AR~0N^khRD%@rGAy_6~!|{ufAhxbBH7sQ|I`gS1)&04LRUagb5gbcJ`R zAIgJG^cu;K`{asoYr{i>SPq0bo~*0SM|>+Xr@C0y=#)$xNxbP9=MntqJuTpXm8F(m zn(n^yu9(YeYdFm$zzJVsZ|T>TdcM|sOkHjDHJB2)#2-nw{0b}5!WNVuFXQtUWA%-) z{X+nVEN-=rk3aUfX#dn+k;XOf3b6oh(C=@@$=BZDB~j|5aDj!F*-9#aw+-XiIzo&2 zu{?3Tk}YNYY2+>8(mdqlN*A1Je#JJ6n)1g_C2YDx-X;79tFLLPy^!(SXe!|#Ap<7? zWX2CXNoj@W8foG<&;u@2LQ^@RQpV(iPy&$2pTt6h$yF0XhsGhX3i+fUD}q`X8?4hR zl=2Q1=`UNdA5PX}d9jTIHa{0#bW!ZEi7eZ=yaht|fO6VMmkQ)zuMK^T9(wqpRC=2< z+z&g4bY7$6^M;KPSWP1aHU68*0u;Mk36-|*zxP)6pzh?L4s{M?j$luEm8E>)5btte zkyAW9H`KIP`PX?CsXuCY*8xq8>G)2kEyqX?X z=%S1BS%+VI?iP-TCY+eJ>p+x%_+yVf4%>#ocRaQSVM`ahR=`aRvw${W@f&;WvDjWL z);*Lj17d8te&*??C_h>*j%xoYlszxL^dfJJc3X2?0=di*TJ;a!cYfx>e31w9Kt2Z! z0F;*|7E-zJ9tV;9=#Ti5<#n051i$_6dj(vfUrgH5D4z!>geqS6tvqn0o^c@v>{UI9 z3Tt6~pmLw*h4H^t+{R-x*_loPk?9(>@`c0`2t{b7H1Ja6YVb3<_~JIa1C@l85UWTG zVTEa>0S@~u$eZMV0Xu+0Eg&yrYh+)xwbxpkWe@jxHW6veH1kX}x19ht-f*KT^UABN z%+3to1odVdRfg>0Q~dGAA5Rv{zWgvk{W!3VzAVGMDjN1hY4EEKQw<z@Qm2P#BvcU~3M9>i@p%68ij$&zYjzaHCCFZUk=?6vq}t za0+D}$AaOw7h`y#?GaDQ0w$`nquM+@ws@D@;)pLjA`Jz=igcIs{DyPVXWgCvJ2RKod#n? zUr+3BgPQy@J|ZjGxU913s;u_@_@j?w0borHf$SYtlNsuU{~%w(HV)^d)x`WJoorGT z#72rq)D5hFNi7n=NK!b?Sk@@ekpqEL--tPb9(1$ypnjO3V`iRN^<^d=pE^<`Lu$QIKty8qr_2Qrk%u zA^ujC8W|BEjmg@Dbe}b7mTUcM>cFMa%kTZKG;xvT@kwUy+|w}Li~zCptt=l!kdo;| zz;}aBZLbLtvELEyi_(cc#CBac6EfKP%{ABDypQ$f8*k(|5G%ko3;+jDyU<*(waz*` zi7&nMGSSv)tc5yYyBQ9|rMy2Pu(=u7t<U0`NAFD_J zmzcXZzgTn4HQ9s2amOC(4w|+9&0#fEps3C}@7!o14f)vymQsU#81L%$=n8oX$nQrU zenfRXEV7+}qNsztfExQPY>M@b0oenmn-ti-&1<^)~ok{~1Oi|vAUJ{5m(c{2Y99kRd z0O|{i2`D5)gm1Mqtr!6Z0YfW{^<&XR7qiNhsp!&+FJfvG?EY^z-OS3gp5!fNp)f{V zpors+JD#(hVm7Txbr*HTBZxD8`2IU9u>V?&1xjsb{AlDO_`Z*2Z)NErFGW>Vss|~x zvHULetK>RT)Cho;NnmHPvEz#>PR|bCqY_Ufvuu8b23KX6Pq_Bi9PvOu;cjA>tZ@r76y90Gw5-NmG0 z#}*6JgRGn}y4`XRAw#OY+5uG#Xfm{m7Z*g;;IR<#vWB51n~-EgnZ_gRr2F;jo zxQ?K_d;O_o6g7-7awNxm|F)c+SCyZb9TN%9jo6@_6@dT3*etwDotzcg{sZL^?2{58 zq=^fjJz4-OU~%^lMq-POQ`4H*nXw;jsXw%WZ5$M8vL*^0fjj^%_$4s`JnqLqgAYNn z<7A#h8JGlg_8wj=;ZYNV|22OQEe7@m8*E7DSdf0p8?$1vZoA!feCQ}|zwr6NU=`X$ z-eB$X$6#H4x#j3OK88KDG3?Rc;nm$6)@&gR8}_4UFyl--W{qk?+19RHkVhe|$&f$HGjJPlqUjDeHnl!M0C0h$kk92pfD^JHuY)0N zzVP86%q?IN0=u>x*i?GroutbAv!G#&mGu-?0tEj~IwLft!!`o-Oj68EK z8%D{&97Qc85oN0-Nbh7nBBWYA9#|!8Js8GL`$(jbRw9@&d}U8gUS*aYwbokde1o_y&Te=(Sg0i)1<21bD)5zU>nTlLE1_U6TZa{2h@1 z7cqGBJAF^Z^r!=N?NmZ2N$4JOY_Z4N6+@ysl0=fMe9w;%vPvZT= z6HmgM?`Y6@~9{DWH)N;&BcF~l+~c(_z7rYe&& z+S~V!e`K!#=bn2mzXMB$gB;);0F)x)LCC-P7F*CImt4$7jUkz>x89mr$9JOEsbZtl zdFPwgpHP%mJ!q-eJAntY^{p%oKA7SprnGWLAQSaZmIf48Wla0G9?^vJMs^OD-m{*Pp55xnu|6M-Xoo6-wR{&rQGBQHh;$#zc9mdS3i7)oE)e~f#zYl1Wt%AH z;)s>=JR#%*4VP)eL-(&S4?B9CXVnRcQ!HY?c_j3-O(~|zrD&R`#xofxso??nA>DgzV&8m~A zFZ>RkV=$lR2e-kHY2f*4RxYr>0t@g-G|=uK*=6iNh66*el)-!f+lz31;6KhdLv`wk zmh@)1ndpusmt4xSnL|hlZbcK5s7O{;ifM-|B#=lj;85uSO2PzKrAdWBT>vyao#cHE z6>0n^uu?!J0WI}KqOj`enHb-w_Hg~(Vykqw2pTcwTs!vIF^jESRd6lj+ZPTeagw>H z3NLopbpNGyDv7w*=7V@aG=OxLvs5??SDlv$VlSpETM+`zfPBNBxE{I@X<#?U1mjN- z%O}Tscm#Ji&~VDGRCQG#mN!zl%_z2$xNblyJ)Y7t`PP z1MC>@VRMMks4$bk$vn4UJD4v!w3GNAyDUP2i!Zq(Q%>%gD2Kg(@iWG&tPaIR);)!S zXErOVGO0mQ+h>iMFJ4BpYg-B{i&tEz8r~U3pVS+a$=KZ|rpl;1wFLV1t3s_S@6W4L z5R=~?lc z2&;CO?D%ht(Z^u+bdpIXraSJu(}QWlge1pi0tlb?&gg1U{XGtaJ@CK-S(bM4$$#TK z2U>Xs4rqYKiI-n;2P6!dZV(^n0QbS4!Q%wEleX7gZ#@>|axIKo@nQ3IeH7fgQVtq8 z$gTLHZm|%Vy_RTOxu?)KQ=zi;fv8_=uvUXV>uU{+8mQ_6yV5pYBtR9#pOJ{9WN|v6nVpsmpi0Yx7Vz8(MeYMj^mia zQszU3JRS`8Duf6xs?NU2*Ev#KJBy^n0i? z448lX;YX(8Lo*l=PqjUjLf$7vwOy*XxQ@x1;&tP_@I{~H8B7{PsT{Qxo>XF3lgFK& zFu+qD9H+MR2SJ{tMp?m?hJZo?`i!m23oDBQC(#(=atliN-MmF*#R_x5STy7o&(b4j00Z)6=YgLo)z+o^GSSz6?P-5ioV6J zp0`;6ES|&03+m@X4msG??L98@c026A?=JiIWijv7S6iK_tS6s%GS+zsyBedM9|-4f z5cpnkt*;H$#sI0IqBm$$4shYAew2n=Sj~rPS6*dR1~Kfs2(`hfKm+Z96&g_kkh{V@-FfDnSCrk)pV;>G z@u0^9sSxK?Tm*DKP?l~zJyQfOV@Q_Yn8pp-KAxwLD*;yFyO2naFmq5Q5his^6?S%4 z68@wY#E>Y70>;Vh4n2Up38n&a5Xw3NywJ%%1T9;tItAnbHN(c9q=6%Xq%Gi#GtNLS zM6&|l7-HbTy$Ni0mRWk4NTw?=$|iQ-3Hq`NlpuVMd54KZ3DBVWhE@HEC!D}wg!1gR z+wNA?{TZFlhcP$<#l804hijT(d+fGAEnDhx6?A-e&wd~yWge8|igBMT?Ml89>QtJxtyG1MzPkboBd ziX`ILQ15ixeBwPQz!+4ugBS_u!(m~+pGkc^@x&8Z5ym$$1Ee|YY_rm*pMA>O$dC@? zrZ`oIZNq$AC~)SUdmeh)Qd&QHmK5hV&Nu&jbniWPv&U1U_pnvaEMaAxs$E3?!shX| z+iqd-k^nARM3@Z_<^7N=Zt~zKc3~W}A0P5r@|*AR!R;Sb+?s#xEf(B8);PD$`S`*K z1oZltC(%e%q90NCFqVRU!X{!d033qq`lcBo9>QqvD}VAx8t$$p#r2yegrj{4qE zaw!8V<=0<-gXD5x|BmK@(B9CDhIGPao>ISW$y#d!JJ_qOc3TCdf1`N;^J$Z z2m`Isl~-ID2L|>_!rckji4b7jf4k6DX=*A1k`g${??eyP!H8RXKbcDBza;Vzd0t>RBoliaYdBeN{R3HxSfd4R1ckmVFhqfzsYIN3a z!fa;32`5VJV$u{$eJmCXD)gu7tMXXT&#Bl134r*&EKX)z zD>vJDr=94+e_hCe{?NGVtg|lt`?7z>0?t4G0(>@}lfy^=Alc!RD4b>hN&}5l92ttB zM)^dM&_W5|Ne|}y8)HaM2xC-Vs`PxC#>jRT)VC;|1g&sU-=Iz2xY+sY%D#;G^Mc(I zG&a6$m0OIz{^qL$m^>|rom{^A&f6rjpWVv6pydt<7X+BTKuPt)6OYGulTI=z4IDJc zQeXG*=5A=LN%W%;0~H5>+#mHJHrQ=O_Zda9{+d3v$##?;1P zD`1Q36qA%|CQF)6&#rv?R-%4*UX$AHx zthfUG`|^LYTjc;&DY6^@kTLhh>z2s4nBy}*kt2P zm}NcazynxN3_s|9I{09^=IX2Ix@)iF?_ePfpZR~b6q(a-5iPsia=c$I*m$A*v(7pz zJ^Zjfkw&#ux^sWUd6-pIlGvBikf5wmEXDPGWD1il#}^YCjP$@xNt-x+k)&4?T2-ftGhaZkH z;?$>{@(h1-5X+P}vW;?}68&3RfMO16+>sh1YTXbZMvB;RQB5$0=Vq>qY+s*u)Ef3A zGOP+Sy)uz6(&uX!N+*4g5gG!|o04e2SRkJ%cGn|(^x;QwfQAkWgAL{eZ+anW?2s@S z?7x|3nVH{dcgbP`7`KW7Bp%=muNBG4hX%)14Y)P|D8Oa&m0}N?LR2FLfc<}+wb!A) zp72*Er!XOJBW7oskf0K=E$D&!@3#W~b6Cjx=fjWS)DAl6Al?apZ9h0+2GrN9ue{1% zZ?eg6>01kK!GRshixX^cLNnXJ+56>|U5<}p8#Zh>wWEyUql|P{@x{cJ!LN?$xgNOn zfgSR$LQ}|<-lWBiOns6m3P$Efavr3&H6Sa%BjrzgpW%P7YhQouwyRAFQv})XaUnA7 zeH162=SgD6gcBpA{BVtN4vnzM%80WQLFvgwckmo@u;W6olp%9$&wE3R>}Ph!XlK zn}Zx52Qk2o3zXCK*WWbO~ezW=-YtY?RGbIl-P=k`v;A*uBgV9h1avd~JMqU{4g_~VzAR9e# z>IqO78*#`+Dvc!aC;+PM%@glPftb;sQ=9pvfX6GlL7~<>bBEt?0?CSH+ zJ)hdervuQ1Z6NH&;v9)>N~s=l9FQ6oB&`OhgT_(5D=%yk@Iq6Bc_h*lxTf$%jmuWm z%6e9QZvwaHp~f9Z7+>usWbyYgyug9~da89cc-F%BJ z?FxD+U2SDv*Z_RkVTZ9x;S0{cfWLuz9k`PI``=DxHWhNb?RVIbjz9KTKIj28S#rrG z=|5J9P^XNtGG`$ivlaR^^%7+RG~FxZ4b=y8e4gcH1lWZ%Wn1diJ++(!!j!0-$oidL z!1R5PorR6yFTVJ^mA^VO34ltaY=BbnpdFvk3g%0|2$@ybF%rswe4uy%_56ulgyonR zV8sXstdOcwPe3~k_VbfZKJ^o+;yfV}W#iWWue$dD*sLhhg{!|AL~=4C$cRW%oB=^3 zBROZuNR%YWz?ua`cST(cF2guIh8%Z*cGK z-uoYz?>(V&S3g}!5=Ul9OJxywj_2S)(7StkkS6`161Qxq~t|p07*%Q4JdGFPj`c#ZrYXIIBB2zer+E0 z{V;IyuT3$?_MhZCXv`ieMJ7xMA;XJ=g_cYW9jx%ECuXOJj*xP$W>#cbx>P_j#;vu$ zhUm!G6Zhb(U`798KCr-`mlPjLP_cZMQ*;J}crDQ^5JgKYN8g5(8#@r0DzV1*5DQ_9 zD$C)l#9ILl``I?!a09vsE@|R_&^zI@psCkfWBk5*aJ7|zE!SFc2K?4HziHlbNnZ(D z8x))qto2t}byYedD*fRH48Fgx2yoOtvkl za>MmEm|3PF*m%t`=NyqUS%ap^b_>(cp@xN_=5|`On0wCcfbaEu?wV zO*e|!#r_8zD1Zm6eXLr3`72+cpZ@d+0cHR>Y>vbYahpF?B6NpglyBtvs2AwSe)9yU z15G=@gG^~IlTH&r+l8q*PUP~jmXS4mF7Zm(ralEogU0X$m^}HsvN(ea7VrvM9s)x; ztR+sSWOZ^mtpVJLiyLlgXe8~^El1v)a^je>C!ct{N*=_rnHzf0`|ta+EZAsKVZH%i zz2W-n#E<HfoVaSe$=IR4DYI?SpLo0dKZnZIuS}D&3W<;e3 z#ft;jl|7PA(R<$WUOMQDU!ouW z@IOTPjBQE3I{9SdIFCHNQPy(}B}yO1)43lQj=0@HvaVUk5L%@X^URih0=Y$}GVIDT zyM8c3(g6w^1aSi_zkBTQ$E(kHO16jd%-fuOsg;QFaP&Qnq^r$P>kcE)k?iKlm5tL1 zCQi;~GVKu(mj$bN_z1IY24{v4GoKUVS zCQqh%LNzH?)q%)$Zr^FA&xtowh>zd>?xD2Frkjcm?8smIoK8LURN7|SZE5d)_K{89 z5F0m&tBbH3JNPSK7Pl)f_rM{h-}~P8gp)Y<-@Z!69DQ`xKVH4mSDheYv$A*#VUwxHS!3oWO(zU-g#j0%v23$gVwD&dYpv zu>mvr#s6M;<)5OfD%4=g0Iwy*34s9_c!z*LI+#+VBvVP%=lkEpk!Br_P_v};-Yp(n zbHPfy3XJ`yk+=8ux9`5?w(B?QPm{>gOL=Q)ppF3Fmt?4|UZ+^IMQ}-z%f0Dlo64;Fn`{eI0GO!I zW9^pocZbL=Jr|X$x;Ih2TcbgfD;`1kn{U2F)PsFZRvCZr{lj88R-;{a+f5Yor$)UO zPUzkuhB+#VkXOaBK*t8hhX6Dv>9HSj$t9PdU!HW5h$LuR=*x&&km@H~Po$|^Ykh0K zbqHSj&BRYu>1;@pDmXRq+HVHk4Jg)co}1*Rn{B@<)pLiopsKj}rkluKa1N>Imr0N7 z6bQX2H#zFv^Kr79bI!R)8_F;MvYl*DT$)oU(>vZVvmC}!IIJ88Vn1kAoEB0Y+;CI~ zZ@J*)w7tlhIT+CNlaV1(`?d$TI>669ZUHA|mtUrSNRgDN*x8MF#&l|W6E#Q+a0F5>=%3_+Vt z0p|mN6SvTY0Fn|v{kP^?Yl--od~H#A-*yBJ9l(PD?JN z^B_JT>X~rzu{fPG&Fwe6vGrq08hn8ZL@Jc5zL|P%?Ko;-^0o`?fEA z@gVy6$CrwFv9Hp#ap3@4i8kGAGumQ{Ed{{NJmU-z5#ed|%U}MIY=HvT2mJ^D3@&qC ziz4zJjqiPJi_X0v;M&S24EuiRd~=}ey14w;17TbRwlf9BDeGee@rYuGg7n-x_(~#$3?`xg(s{NtwME%a7XSNHRD`24m?@d;%u>bUC6`!IRwl2y>NjQYo>sv&C}u8* zV3W_!91)ixRsO=x3V=EB%!#EFV7$2R7xoh_M~*-{o*gmv0B# z@qRAHD%4@$|3RFU-$@4@cmTch&zI;+U;c_1!+zuIUlZS6d+oiCoc{;_!zOQtjNktD zH^tNDw%ctd9ulBK+j*B==(;FQKbP&8%D`)Yip%>3EIcicos5WWxr4!|I%sTMHlxUL z2yDsN4SqI*-ISAT8Ef99e$*X!CC~UD+{~yeCB5dFYi`kbRXS%^-p8Y29g6g(i^~lT z;J`VKwzU*^U}xydm;OOw0EZ=KeKr7sg_q>J&DJ9+`QhzVw}N#zE#{KG0vwt8+iMtz z^??~RbYlBd!&^gnH|{HLnDhqK+j26t3YDa=-6!EvdJ#%fXA}F-<|sNZF2RtuTG1O} zkn<*Ns#)d0p?u50QVH1tgm0Jy7g$hM&@R9H*JPXBhW*GQi^v9R=z1K$W$M+^;hZ{z zc_I5x>V(ZNH`;I`x+{ui_{U^traDjnI#>k2mLZJ^*UNkEwHFhy(mV?X~yb zbnLOm^lp*TfuYa!TlcI(*N2qiaed*w8Eng~V`;{usX>~4s$6zkt^sv>pKIGSuhV2s zGU1$k*2LUz{(=#x8@W{b5c%OS75I;H6P;-jqzzpa*O#RjgSXyvsalR?j;JSl@x>Pm zXr^y)hx6*IucUJvYQ@WJnKd6l_oyP9^Gttk_u)*fb)*1gmt(*wYLaLz>tx zh%ngtW4jfK^mOviNx})SDMwo-OXyfZMESlHLFFlRab3b|hxmHo!d}Q9|Kun1?zqBq z&_M^%tdZ-&hVbjIyOs`*Ai8%HA>lm}A|?(sJ^0`LEsBh1(kZ_>Ifnm|>=J+#J{0<} z)*mzkTzaHa{+8%H*e2Q=l!2<>O3XrBe&*&j57Re!s;zzO23LK>?xs*>&5fJ%-s5r6#>=4wfNd$8n!_jx7lmMfQx@bF7_N` zD#nJeDe4kFEX%()-E=e6*|riL?q{84R$6x1<>;EIxPBc6%{t=FdBy+WXX~XGUyNzp z)FtrR45CEcb=Td*rc3k(HBcFN*wz6XEUZrcGaurigAo4cv7PAXqmC-(2sMFr|5&Q7 zSV}LmOcY6Xr(+@)l)MC#O6HDZU+A0$2G@5EIaH3t!fD&^w+}H9oYXIV{5@w>j)P)u@ry2HCUOJ75^CSY(ECk>N z~*5mA}~h@ne-u3@+tvQ(|I=c@Zy^xgv`Z3YfSCnLr9!>43_l65E1DT7prQ zE*GSXMEj_mSLyQ5kdHAoD+M%4R)|yBIS=s$I-yplp}(*;#}*&)cNF>>IxTm@yC_Tx z><4zhnTmi@u(9%Z(S;XK#SkB7*-w5_wqgA2XFnAuapil=AI79O3hT!|I^5V(`9Z~& zD00mgTYPcZoPF%E$0n|>baHirYdcQc4SVOZ-{9{JTo**JS!bQCv&uLjPAE0M%mo?G8~6SBJ~2M7 zbgbn~<@wVe|0Hh9gR5ih)1(iZ-PB#%CpjU6fh%X4(msc31Du!WZ<~I?Rx~&)z$8sX zL%@jLH*)=!uI^#O9%@Q_LlazRq6M{PEGoh|lrrh18BPljhzfHm>M&Q5oUo%!eVtYt z1yDvRJ7~*Wj8St2#_OTMnUJ`z{4MLt)Xhch&Dw~DK)2rdv!b}X8Qhmea8q7@2-xY% za0J+ZI}Jyi7N_@#dLQ^i(nB&_GjrYhhSj_+x7sS|zD`fTWWv}uFd&6T*WX;_{bj*z zGnC-~FqkGJe@m zZopOi%&U$g3Hc0}aNY<>g~Ou4iD|xrywb>nyg{2P&}n6uyFg-EXyK@A#=bHr(FfUn zs|HE;W5O$*EptUz}@-&VkgD)*>H&zHK z{(EN>2@d`4_oA}*EOSy%?F6{9fe8jI+TU=e9aU+ZK-RJ1Sh5&G7*zA1*L z{UFjd8PgnbWeav>zc}(JG334M(o5vL$WM$PFE(L+jNIv_n{6&i{Tpt$Ui^XK0N!7n z{7YIp>b@S2A}c()!ttW+b8O4W?MN+kA#>x!EjDe_8Dh4LN3{0Z>xj}4x+-lwuA`*n0b3`eg+%~1 ziIpxWrQ#_5?IPzZR-fWTZO1IO*rIam6fEE0c;j_yiSVCM#FApM4`WAo`8@x;Np#~4H#!5uI`%B_7cwYiOWy|6S&bpD^OMV}4rurwG951W z1MYGMC3mGG>T+gqeRS;6N6CS(zq#TH>6>CglP~D0U<7Q-P=G17J?ICH{>V_Z{%Ae0 z+WYQzy*t1310KKx16PQvcGPN}&?jMJq=JVl-#gNY@a$AB(%M{s-2t3wl{Wog0nA+qPO@P*=N&N_hd2*U=30)#M3MTYXSS4B&uy$L zjgmqbB;|XkihCl{l3E{TYc4^CxOxDKOD7tli|^N8e?3{5NlpXn>}Fd8KEZJ)1#~yi zS5;v21^RF#)(tn@P&O!wPc9}i3sgeD{e1JyE8-(`P|!b=A=ZT5W}9tfkRN~i@kVTA zt*w|)U=#J%zWQ(U%rnoHj_d0@=?%lQz%cc@Q51w|hXXfo1luseYylA7UvY5hQAZym zKJdXUfQth_!7~94BE>nFST%#a7%a76`40~oi!Hu{Oa#Zp1qAC#rgUWoWNLl=KqNmq zb4{ZVNzcINhAvpizF?ja<2q@0+E7};3h*&;BETsr=~r zTFyAodNQ*!IEG_NY=nkb$%gLjqy<+uP&v$(xgjPuG$br^ZOXkddzyy$2hrYEMEe$X zpKex1HGa~ck+_ELyO>*U%ziWDz}qXAQgh7EM&u2sbwXT4Vf zD5H=Ip_Hg57BpPWAp5XSQT=c;m7z-DoGtB>o~!h&Rv6`IHAJ-a)?14%VdBIy%WG3l zc?a?Fdxw3GZoTzZx-2SywGOs}uz42N@NnS_G0k@zms!r?f)1QmCv5lGG3wZkJ?3ap z=9eSeOd2-L+L`GjB%I@T_~AdIjW*syR;r+!hj<^B9YS;fG^&|H{8il z@3%nYKCzJ+yCrbA26T*e6E-ff?IPQOq0l)lI0T#!7dhWtU$@+=SC-czS@o2l_GD=E2mYnf_n}X!FfB zlfy0Q2}A4$i4tSX8%CY*1R=+W>7cX#LnJ3xK*5&a{Wr%w7#c3k zPF&vO2t3%fjbD0cdPfBEhaP%R#OLYpJrv(KeMc`G@+x~7TUszwhZWgREx$ZjPO!E{ zy8aUL_{c{V&UJD%lxM68Lk|j<=T5hi!@_;}n6YEsC*?T+UWnf}c|ihs>7W0k_Ua4k zz=Wv-QudK;n^)p2ZQKc$>!D+4Flf>yZ4D!q>X+1Lp`-H(R5k%~4Jt=0ny6e_F@{fG zB}xul&P-!6G)1-07RadJBq>^&xzr>;h7b*KX$lKRLVz9u`wHP9qHSc2yV1rQ2}g0p znP+qcwk0C?!CH9XkI+w#IKqGhTTChigs~zvWgm6qk+LeKu_L?6a?c1xy;mlV*=z(#EOvOuGtjM&mwv?<;3Ho)Li>oD`Aik4!MWeYgyy z*=L)bw%B3|I{ZgJrrmbiT|8#A*IPz`4Uru>m|y?;@>suvWboQE1hs6ozg!nvVsWkP zDxA|}*9M_!lhV=D4kq>ukdyh_Umv9tqc{&cI4I_Cx#ebBHHy;k!i)0^6X#OxyI?F_ z0f)_?O%w0SFTWzXD4crj%3-S%pE0p~o*tVrBnO4pS_ogHhwRAVpf0 z_FG6D1}AOsYxUs|kE4ZT8M|%rWC!!&3op{;kwe4wBGozAuxJs?Uhs2|l|VQbTx_w$ ze4CRUj3fuR{_);>#jp8_E3HIkWx@?&c!33Y{x|{yOgLafYxO0#N8WHtgF$fO3CD}i ze(YtlJLda<%T@#%!m%0}!kDOQJ5IKYV2|C%$QWt|cjrDespz<{bqHQ2AO-=XFsNF4 zCwsy05*#QFw}m@yY>f$JI%)<-8H}25p}tNy$DETfqoB|bC3VxZWMujRrXS#P_t|$p z(eGUm!S}OUZxi)+$Hw|j5Hpu~ zr^otWt5|U0WW!bdp*ztHrx^=E>GBg~NwdD_0kl#Zn{e&ZP}g}99aJ4xkqr}^DPaWm z9TrN#QsisLe14D5ACeR1Qt$*)q1bU{Kuh&bTYyMGvV<)(I7(%xbB{={AjZlcY>_tD za09B1r+}AkmsoO1A+kpw{VT1$`f6mvQ9>g=(14yliQoMoT}_08Wy=aLNTD5@Nd)HqyhZ2#$q=i3ARIeeCal z6Vn;^%z}u9_S$l*t?9k*c@MRaq%`wJT;PElBkb0I@2n821*L6a_+7)7v>F+j@~6QM zx6SaZt4IB%WVn#YwNtN_{fcn9nNh2RyZ`?C#Jb;}4x~VZgKVFO6A-}5*FmYlK2z_r z2Okf1CPat6I<#f(1J!mcCE>Olsh$eCWUZH|q8a%^0V+e($S|2>y#}1uA(?Z_?gz6o zLJG>T8P69SLalHCI7&vU!4h7>>QVPwAl=I}G7@Cz`HVBphybxDEf`ngOtY0c3?g`x zgtrC|z_@V>6~eA*r)%kDmWhLYiWqc$<};tk{`XCjm64TLa&Sp7JOw8PWv^@a91igz z;^F{|v(7q;R$gUgaWJR#v~gyS3RbwXff)$6KmgcWbIz6eDfGyb)Fm{CJs*ukj=I1j z#>prDQal;VAHmUEOXoTfIgkmZ_$+1ui+p4eT4mK$BImfeY(&StNHL0RIVMW0YB(nn zCo_X#w_xE|@Y!^p-FS znR}jj#U2W)wor&e41_W0C*owZ&U))o?R?9%Bmjc%xS67UY>6f9B*WA!eA2~nGFn0leBuI*Y^6` zU;h>X?2$NWuGrb`)MR7cbtg#f3Cx`thx^m$xl@4ea?~}yf&pdovp(xr&*ay>FL%M= zs@#uUJ7$m1N6xEc?CNDlN60o}WM$G^pkPD*;mmBsdV!0(1P(vmcietE-FU+d;%E?q z%_LJA?fsD`?ui^4T;V{!m6n}7p;P8wAi`la5uPlT{MeG_du<23V37?`6r#r`BY|RN z&VgL0<-m3%EC^hD$;FZfIFy>TX~0;9MWfidR1{<3-wP{zutO?Fl6@3M)M3dH9{cfD zjI-|VqfQ5V7U4bxM!uSsiP%$5e~@>1?ykS_e|wr-qQ*39Qt+5A2$BUWlCFnP;9JInev*^Ly zdF_$GtA@86RAJdTb7q`4vvMEQ9t@Q&Ckmz7w}jHUch4;PhO^@!2Z$^l2P^fk#OSz> zF7in{G|Xu0^3FroqH662dh{Z^f)C5tD;t!&UW@{8p#qV2G`0vYpg}DMa~7fM5K?^*_&^^NsckwW!K%K*mz15saBND*l;w6{e_?S#CYi& zs}v#ACddz5<=_AIx5(XolFWxr+e4QHW96lnUZys3sC0*4(8C|^{iEpDg7vtN(|{<8 zg#`c*#Q8Q4a9&7L^RVAw%lGhK9?IY~)>8`CB3UG90f$BvDZ7KTCf5ZAsG~%rT5h>zO*;-;XJR`D zM6Sbs_(S?dTm_tWzIW9|EXAr_vF*0o$^e8b8hCYpEtn0j7mmH!dFP$ed5i~tg}(Le z??e!JucC1Fw)z!&D4vaH80{1(6Zm-fzZ~oiDf=@M83`h zO4Q4J=`gdZgl1;+6Ga0=+yO3A4@cNO&jKlKkarhla=T=wIBEn>ntnCg%HX1LZRznm z5|bEf`qG>n#JU0?nG6zem2XW&3!s_Ai)yT799$uL8xOzmXbRvs?X=Tqzy0^C?NH*S z#5UV}izq%_BHk4iTXfO1k(Rn`i*xb5_O-9kZoBPDhaGkpefN8ZiQ%U9a+S67a|9)v zi@5JTd&_DcOeDNTbWIiMxf2hI2{;7^C&j>Wf1wY3h}Mk& z`~Ij$$rgVOSZ#joOOzEHDnwD3Rs1>*=*up>IEsOb%8_oVEJ2g?G|Y`?l-o7=3lD|W zpJ}GCVodxl8F2NzGpH;Xst#_xOBr zvpitgn2!zV*j2Fc#+wMZf$M{7?3HVh>D zJyA}qB&R`GhO7amAPxi|wrv+zaLa(^?&8m1|N4jkf2ZGb*cT$_4Us)<`u5<2>*dJV z!lP>Ke_!Sx?K;x^mP=a1y|%G+>@@G0n&*b#if-BfdQGAMR5s(trkvABSY%{?+}1il z7qvqA$sp#1*9s*8=Qi?~J@(k+5F#o{dQw+6T#FkNI18xOl}A$1GWn9wXX-<9GU@t} zRLcmZD^?08O*%K~20kq!mKSwuYRg8B>-_W2mqTJ#UTNhDM5eZqP3&+e+F?J1gD#-c zBD?fp2Vy1?SpHuX^*m7cLrfdV`_Y>Ik_-AMEI0t{VETbg=dDt{1te_3T`elkk?!R4 zCkv+mA6@{~Mun*@Q~;+#pdszs!)h$Vq}gYiL%2=U_s-w_PMqc;T@h^^;q?)QPrJ^l zg}9oSsq;}^<$S=ELMN71M%mF)jm+X#4PqyN38E-m2jR3N?A3(Q9bRE!9DGX@4|m;d zcd^yF?%Hc)d((jjeNn_L9HX~O{C56%=SjOmoSrRmH*jART62cnc=~vLq_K^n4hz=n zS}xziDatK3-yBz#-yy)%Gvp-<#9WBDYp=aF%{BMj)b=|9-FV{-QH3zOs4(2Oe1Fwd zSBmN)`Ofzx`AZZTv1;$TJK3PXVn1z3U#gJ;ug;#heDXEkZkBv}DMr?-u(&k+A`J{~wV=x~;f zIvz5u)QY+o=Ix3}F!Pd)vl1cl>8 zh?hPIOO*b-ec3lb7?zGqYU#%GA4E{}E6&`!A}ZLi8F~E;HMT$I47 zGQ>_Cu#5V@yU3-Hv)nau=Wx>uy&JraTpQnGCGVq)E=KpoMUfqLN`BWY8nqJ}Hc$WQ zPk)S))G9>GJ)l+l?a~OY2&dj1*b}&1u*}x%NY%=Z!OT| z&5?^-Gy=GId2Pyp18bgo>d9i~<>|@hLXLxM$Dju$6RuO*o=Gf!E4P6<>9Tq404@P( z1+biXp4>QdU!e%0>2=;`T^tMw?q-4M+A+KDzWX5(I%I~+cu?)HIGNd35I&nrSeDRN zvu)gNGv&Md0C8clNQiLZ0$l`jVKrNyCT43Kqju(*XVA)#z~-K7t^$uGP{Al1AEwo#)3Wzu9RUw3kP)2!L%ZzB_il_z)j)EG;Ab?erqrc zBl-CHWY<-Rnw$Q#bYaCSJ6Nze9zcb?fZ(dIK^%3${!iGO!RHuu6u_C}J7YZ&2WAdf z(L3$bUx_XcT;$F>?;uCD)6q&Ct7nJBHhzOD?`pL`%3ma*Ht* zoHB=T_QZ*_PFxi%<{w%^_I-=Rfd}JC=bCG;O~d*f_t!@K8}?PgMNyyb5_Ow;^;NWD z?1%T}l|~y5IzuS);g=2H+w^aZI=6qu)zeQKJ1+|q)S>$Bn{Ej5Z#wi9sCRO+^k~#U zg{7jdNKHj%C>CFKI0seA*VGk%DC1SR5(*}Tea=8kFuGM!hSD@<-jr=XDj3Cba15xj zj8t_TwZv@XUNcnW|0R}OB8mxXh(Z;d304?={92!V_T5)z(I5Qa`}D&f9xi&NI>3U- zi)icYDFVuS4AxawTeU;5MtLUy_Kk0Tiw^tVcf~z4TuCSY=Ik0v(}zCe>)-gMSb%^3 z`-jozKDRTCpHRWKkFf1M0B@f+mg^`27=}8}2XdycK$X|$l>xS#ErP<@EE?g+pHm%~29aN7@dqnhc!r_>1WIy8M z=gvEBkNvlFhf`|%5G#ReMF8!aU~oMXS3hw|xt{-!FVYe02Tnr$411{QJM> z6N-uKERPFd0xzWp9I!wA=TCl2U;WzGi!-=Z=?Ps5e7`>xi3tEUHY%iXFs&6E-QV~Q zoB~!Jv0w7*U;i2%67Llt$%%347vdN;l0(l1oegGVoQ{ojv_sVWvoB++7rrgN*kbZ; zdQ|fM?v6Xe(IOlYetLyZi~ssrW|_4ps7g~?Li5#bUZf|0H#RF{OBT2?GHC$VU^W7d z0k&T7FbdHYgG`Qd8>Ewu0V$lJsV>mDt8^+(2O*Kk++)PIu&J^xzAl|~A3-(E38`X8! zUq|=fcb_Q6=bn2W;UXw^QiEib(Ac*^d#i1(VS}{)J49CqZU9D=*v19%7P>?1aKLsY z*sHz!J!v%(I|#7y+Od=`_ap#>_PFGti^Lrd(t&;oqUD68m!T~p7lnxd`kf==t!i4nTlE5kz(!}0F=xsih_Z0RiH$haee8+}loW_H+TQ3Z3P!_k)UqPP& zWiO6F!%PT|6E^M8aAM#_AohOngA3BpNBu(dGcXEGHf*6O7kBRU1(d+xY9@$X+j0Wd zP<%rd1Vc@1=K&{$nR^Vp6KJ`$Q=6&FO&mTqQcCK~ux)qwuMMH4HUp;yt^+>XuruIy zzq?&HENmJFCxWuWTmdVF0unLtE3ddhyuW@rg3*>+ZY2j|BwMcW!f73I^ifiu&u+7= z94L!+*><}fiVK{c63K;=&#{Sn<4re<+}upmR?Kq3IAZ{d1~{`|=6B5O`oijbz=d9T z!DLbBt4OHd^a96vY3wJIAFGK)>!U3l9{`lt*pI%o?WX}RyW|p~8|Cg=8nMi+T}^D7 zqK9M4c@a5vNfW?5yLg4b+U(f3g{s~y2$60#B;|t0AY~|JV)wrS(sg6@*nN-hP_nB~ zWttYNnn5Ix45pfy(NN_-Wk4&IN;Rx)hg>%ITnfizg4>|7iU{uk@V^f6W}d#K=zL*A z?BkC;9+kHj3$VarY2Sr-I8XyKIdnAO*udE={Ne7NGn)k}hB#2Bv zbrt>bPxp$s2`+$HvJDC*-A19>5Gb3<7DBa?O#nn&v;zh?Odh~x;NTD_x3Qpri2{2=VN-_{NLbJB7xiBkMBNv} zwF9D?CIB+UnXWRSghe8{j2e?LYs7u6NsBI8V4%)KaqsaBl*&!&6 z2RZ-nsJOrN)>|TB9~il%Rj3ON?0(@E`KmbZ;T{^ZeY+xP!|FYj>yJL_NDe-zqJ@Q|H5x)4_HU*hyjFz*7Q5 zOAHR^k|3smi^MP7A{PT>a-&$DDv@(}|3>6C!0BPT3xFT@F!6Ze$tR>-^GEUhgHbuZ zNL*wY7e(H5Mq*TIKRiur=dj|4oe!|3Q@X(EPp3v;f~dVqToi$oJh&tno^BR_VYR5d zhmU&L^g*{Z_3Gb)SNyO~>bzcTFP;LS)BUo4y5~(38LAI6G31rL+9HcM{`ny>%>PvC)uF+VZ1% zvQm~{()ax*MK`zs)c@|-7A@P1IqUC(gC8fJ=HxgyMH@SiHso*rQb+vrpjLB)Z!UNc zz_ItI{OVV7UZEXOwJlRU5cWT!lK;dLP88Aeql+v;6#9V@*XQ@#OIE93*M$|WU3c4! zhFzKlR_zWs^t<%)pZ$yuJ>)y|h5h!Avt!kzbn?sh0F6EN{Ji)D1E+zRd#$)i26F~D z6y&Cjh<(0oIc(Y>k`G6~7>5};iZUP^=u)On|A$!hLkSIz2%b|RGQ%AVfDOll!N@cj zn2sqnvWTyqSivp67FQ6F*UV8#58V+KQDC2i61#Y`dKTR-RDIeN$1gFWNI>N{?7X>^F1{6uJ;1zqI zGT(f;Iu)r`aJzXbIOMUgCG36tWfnia?{Kqs^FyQ6HYi@OfO&}F;|{>Tj08fFi$^8z;o&h;O0h4Iv1oh(4LZ=4Jkjv#XU@yE&n#U6X^9ck+=(M7?i z6^HDy>-YY)#!+yquDY7oVY&ME03Lwiw-LN{+vD>#Nbkh)r$62+be0b6;0hEbEcByT zv4zN3bxEFEfh`#v2)sKR*0y=+N+c!<1sn9hz@(wK^1kJ0n5hR+jPp^GK!Y?@>?05O zCU|Fjw{1lgE6B8;319SFCR(UCSkH{D8HO+>au|o$L86{i@!0HHM0n2PqwWt1IZdrc z^_AB%)=QO{Ito4)s*5Y-28#7(qn-m>U)~!PzwpCFp^@El5>Vj6RSHB69Lg~+DoZ~g zzOZVV9{7T6G5L6mbIGNb(v6YmVeT-O5goMb?TQj+YS?JORtkQ^=89s^2Swjzx{b-) z*Z2@kV6+K+9tJ74zletcPOhrei)x!j=r$Lb97dAE zds-BOM0#aCm*f~s!Kr=EIg|KbTx|q+ksBJSJWI-Y-6oXln}?#V9hhOHaoDXWXn||> zL#GiuXHn3>v_kC&xT%4e1N2P*FtFnbEU;j0F5iB_EkGQDmsYG;V)ljkMfa*i0Oj)P zQMrD{9e0RQ9y+asGl3eC$VIDfU{CD(xI1dvO z#CCD@5AJmUT4P3%YoRyadXuJJb9L0;93#a1r7s^$pO`RS2ni-2NB-hx^uDM}hxm=Q zJT`{Ii9UPnvoF0bivCCZ=TF4{`&SPBYI3jBArmeI#VuAk&pvCS7$z5=Yi^+XHh`fm zRyntc9QZKhyK-32C*E<#Z=<4qv&Q!vligqs|6b@fxGt}@eKpO0zVxCjBw&)1mB`w} zrG7WwaGd}joE(-txwc$G7y&c>$!FU)jWzc+f)2?hlu;d}Z&qjJqO%RpRCME=TtkPu z<4kU~E`l)(e_p%py6Yh(jgV*KEIHJg*MUGpcHbjqFf-vSi)c7kYHCzjHut4vFkMy3 z^GYkNEG|gk78-6~<~A#k3SxR;vow~nVJn8Eb>!i6Q#NLPh9dh@c|YT+r=Ako|EGn^ zQ@>eVg=ekrxEKzc)Pr%>$4VJ2(7{28U04qu`0}zS*rD*oLc=E}Oc1>gY|AE}f4&%W zVo-vZamYhGWTH!uI>U8|&b5>)lhtGzC8kRQ4gw#HN_V(C#@4A@Zn;I;1v;p$w)$-3 zT0WkPXmcmS5C7eNxLYjcAD#AyoNxpsJlgoh7hjSI0%sGf9~Uoh6x=H>zaoCS{vLI7 z+wHJ}wB0YFUJ>?tdwhN`dRNq~QRudNQv(4G`1JZv289}$%BU!q9G@YMV!IhutcTHs z{z3-_`#W(7-GtE#p#GbvPFN+1tnYXJ+o&j<;Px3t$ScP%V#M4TyaU+-3XvZN2-DDV z)ig`&p1!NV;=^$>E(=YDCZ8Sx_Kb*4o||wEm#K6>sOg2^(=KShMMb6V5htDhHIz-~P_G={w*44(+?oK6Jzp z$yUp@pk-q**!S9dZ}G5jS_C5;lCX7Ldhg7dCU0;%Q1XJHfAZrW(LMM4A#w{}7Ugtr z9DNscez0W%2eC;M7mhsg7qazb!wol*RW^t_D&`w{Bj01`9z+Yb*cj|kw!;Jgd*Dus z92x3_!*&;6atZp#!i&T~`XSlQQwgW_tJd_3ZL56GCakVBf+K;s1Iz~?0zrg;d+wsGvQ zc2URDF)o;DK;L!1L0_cNE_iemdqX3F+BDHde~FU-II;!$T%X5VOt`N`J)HQ&_gFxM z({2E!M6TJ9gB>nVFa;VEpvh7o znSAi_h8u2V_fqMPJrL#FV4pc}%5Fr!Fa&iwL}44o6J&8I%%-}t)B za)*8Y`*C^R0*g&ArGwQUa531n1CNzo*nhu#+?C0p(-9;GxWdOhR-&Lk0ryaR(vu|y zUl*x&T&aUt1TV4B_iP|u6h56e2qsfs3pC`3&fTl%@+dtVXKuJ=1~|ZFO4`i*9^ph` z`3?>U`CtnVtlvfK5K;*Fs5z_%z9sI50UU4!h_eG9d;D<$Eo{Ak@#XtJ@P0A1z_DKo zja#T}rtT0j`X$!)<_I3wM6nm3^O-f)iYtbzOWAP2Z`Ea&T_RjFxQQJj0M0)9Y$76J zB^jHgciwe3;Y8q;8!LKy?zK+Y6tN?05+ za&FXt?z{hiVqvc)JUP0fyHX$OPKy2XNtJ#ZT5CD6R)x?}`;>cklP1A|)p;dkvy{%9 z3s9M%O6MlM0+mQ(Bz!kqfBg+yW!1{av5lBZUxCTgLP0HMo|!Ce%R(*p)#@io7-wF< z9qz3(h$#oWd4BPrgT!F*(C>b?*<Nq#amVd6@ys*CuNb!cY_|F4qGRKhyL4&PdRMCL5*pHg ztLew{UOQ~RdHI!>WBa@;<`Qt@Y?syb8avZF1TbWKPvqR-7!kTexNgSkEA(us{f+9u zPCmJe*kFD8Z*LcI4V)P2hjRuB;l}?Sxc>p!+JicPD+MQpeU#T;a}Avz0SAs0KfmXm zvib@4LJ%FH(Er$yA9G;UT}ew9&Ts@*`q_LUx*NdU);tX?_~yqxOKd~xq~AOP;D7R? zAJXoh-%}3Js410z@`GIkC&tBxog#qZi~tL2s{4BJ#ec-K4yQHOUPm_Hx3q(1J1?p^ zu;}pR$aPv>R|Tjp-59bP%0=cU2Qs!Io#&GF@NlZvO4w1~5ArEa4xAcb(zFnNpl)DD zxiVKPQBOr_@X&Dm4L7hYoI}r|=%>PorLu870mMLJE>*XZ1{`ezYo11~?R;|`lEV&q z2n(Fo_YXTvHe7${OJ9~1LkommU`z*ue&^fYmh=7gj!I#;X&!bao>l`lPsTjXkGh`U zMCCMeDzFKIlG@K+K7P4J`6H);Z9-7g!h#&!B5avp$}vZe=LoB(@HHPYh`CE-+7SZ_ zUcGtL=WZWsTh@UCaD*NXwqy6-cfU*m(D!{}{3nw4jhr5gW}&;e`}cRr{=UtkqI>o^ z=9G!&oXA-~?*kV%*o6S@@A%`6iz3srBHDvP?hMXOd$1UgVg>U9t-$U;RlM6ZC0uYcvJ|Kg)sZ!YMUay1ylgk>{Ovp5z0uD#Z<*T9#px^TtMJIF^GCvPb{=sQ7w<)%~;2 zJ|}t-xS&y&zrnVJCAL~2BC@NHzHKc*TP3_D+VaGm)a$_K+I|pMu?G=Gz1S%Loehjn z*I8#Bxfc;NUav=S6lM|Uo^zJyptjw92QkQns0266#~gJOJ@Uvj5v}0n1}E?w@spqA zEkFl~7*|V6zFxUiwO?T704@?+rn=?tyJxZLM_)Q~2cizm;DSBgWtUtO>$#0_Ph>=* z{0A2L7hEuzKDGP`vctgUXUl=f3*t8xI@>CA4oql9AQnsk$Pl-`*HN8ttN^BN&^9D1k%9rj;4)MLtYl4^ZbzW7&k+oP zhFWK)N+0dni~@^Ac1?$TNJ7CH>UCy`(vUsxDLCqKZQKkgD_SZ?1pqtvt6!CssUIDF zxOhO_Vv8+$m%SDAz#SZX@V|*33@eeauY${A*lhI_$;{v+o=S0`D^|)bz4TJL@;6t? z3L&h*XE#m=wXPm;(x3U>HJ>=xgY&+7qkaP$m9c*h;txD-E)^Bd(3?PU?*>VyT@3J; z_o0(zZ8vV}(|1{&9~?41^w0ycAsiR>c2L_n)4=|E7ti3eeuh(;U3^{$|)z)8*x<;iyiRSMV+>*^pgff`U0IIl5Sc#J)~g_yBESzhj|ea~N++FIQf1x$HfBuQ|3%zuC6E>BbwRuW&#L8$hvXV(|sy zAOO3c+fUnqP@V;01Z&b~*A!ePH};jZKPLauGMT;&-LzK=RDpcjWK;>3(O?gLxdi#8mscDI>^^5sDHs+u#AcWGoUkA4f5Vb(TDZSTBcFC z8NHps91IaS5t$v~g{FNA6Bq-*=M|g*!U`Ya0FFq9E~E8m+Rm)t7%&)raM<_gd*3}& z#DaC#U00k7s;7vSxR4*V(%@(=c$=6waiSa+frBJuKVB4p=8*Fr4G}4OZ|hAY_DcY& zrJ}ftu(0sI{r20%86oszIKCdot-**Ec5MJX>$5CSYZ6h*Ib4MIZJVB0912eV$8j z;gAe)95^NnK#zfXR9uyX1^+%#g#W<&A0$UJnI_oM0SGV-?!QMJ-)*)%QV>^rx4m)nnsvlfMDgS1OO#TD*L=D6s9B6lH6^#51B?vwQVZkzqRC}U^N&b z`dOV;`yHnXL7xKPf`dX?j_wI(f3brfr|`fy6vlPR?*U(Vz>IP*Sg)LP&qEya^MK1%Ju}2=BCbKm*Lt~#ItkO}ZIiv3Az3+dY za5zw~W7E30a*l)#j%XyC7K7u#YAaHPLi`^Qpq`KAg^mdaSHJ`UqTGv->w{q_e00Iz z7IaAC#w|qi&HFBKK$r;L)68Rke@u)v;Sm+vjUW<(Go3Gc21UMC|K>Mzbrg>wasjlK zS!Nm8kLe3+t-1K33ux=Dx6NlEngPI;25X-|d_C@%qs8`5 zoiJK@YWo@ObIPwy77lZjRabZYZRr5b3~uhSOD-0}+V{dm4tGU-#5v*kVH^llsSZ4-4k$WP1FwsHNe#p zlivI76_sEIGXNZJ*jRmDfBp3ZfM6E!jjw+#63X7R!lzeo9noGG^svW*5i6GIfAIao zgoE08>uu6WMj2@oU{L0P86>ch-)_6@#Dz7^6@(Kytfax15f1a<+GUI$UqybgLesRp zg!+KvSq}fAA{^z0hf{2_#`YV4&f_qXh@8udFT5b)9b6|9r3nhUCD?-@pVuQ`;fOKK z1K(j%0h5F|=bBqi4Tq=-qfqSEgBafGJ`#b|vcmcwu5E6Mx<6d2t-gkMdwrKVn-I!+ zOd=0QP7Vtk@WX|Li8mvlT`>84Ib3$}#g~wSHI!SipyL{ZYTv=^uP~ZfBPmV*lYbG>OO~N(TUdur}t+HnUONO?RCgmE3I>4k25lqEuU28gh zK<1wNIwcojXdI%_$hbh{*jj=;Za82R%joJ?X|y!JL0}mjrVS7W;2#|}Uf3?=I3+_Y zZCT-${Ej<*Cx=JebMHOk2Og(WV`DLt(PPE)s1i_Z!zvyRG2gHN?D|J$y5h1KTmy7S zpa>Y~0vw>{6VA-KDY1XqR*(I6CUNNldpDev4bP|mJc!L$MYP9_Js$@tEYV>w3eFQg zuf~0NoO}cKc+!c-OZ-hY+d}q0y1q7T*mwW*Gf&Ij!q3J@MNgmZ>%+Ex0Yulu$prrJ z`>r-Fym9>Wh#$*>0uJJ}t<}bXrwce8-0y&cvM+i&xT&-yR;h2h?H1V{RThVA9pfJu zHQ#jO^|b#%UrMyf9w18pb1jbrO4n{Cd>}gx8{ncIdgAW;ZanJrk4-O`N{lq`or;MI z(_`4MLg_y3_8l?qGT)M;_6^%K6K;c zQRh0x%&MoJatd8^(M6H4<`cabRtIU+e3K7wIRxUQ6GbFKN9?%MPGXlc>#W9Kx~ZQl zk3y5oxX+7nUydMq>Pg{j)?9NfIqezyErpOnjpxf$LDIHCO}~UH1?eS5(*783=2GgP zX#jNwmj@$KY&?Ht+BDg`3=U@rjKXQb@XrwPBwODoPN5P zCcxNtN%45w_OTcL?E7b*c~(4dY#CQKVIxPKek(NYo?*}o@eiB46I`sImnwfTLt#a3H+KrrEcdEyB&>0mpQ z?ntncza6wDS_7Ee0U|}dhDjMpHwA8(dKi&zxEeo{@rcP(tP_&Xs+dZ&`MTC+HrAj8I792^T!fWLTbjj4oMQY4!g4WS z9=mte_J>X?0QD>4#I)z$`?}T0H1~2=zQk40IB|hHgGD`7klXz6^lSv#V~;sX+Hcj* ztl=`Xla%M8xG7hy4^#j6Y9$r-&Zv$`8W|kAbi+Q4CZBAiDzP&sR6Ipkrl~L0?#(b(2V6|mBap4lznre$DbRo~RGr=k4&?tmYqfoB=;oVllFioJ@34a`f!q3XL2>T9hmF&PQzpx5AWo}UH*yurN5wo`^jM0rP1!zc zQ@s^|40@w`R4}XZD_ONU~h8>umEeWm+qAEB=96e?U*@2O*Zwq!>2j4w%1I`kP z@4x@;?_ytt{fp2~y%D(y9CCrP0ATqJEBCSG+)6Hl_DU2_vBC!39smlur1jR{P+VVY zz3+@b4Y$p3cLQbp8f&ge-j@_pcQw(|1;o%vlg^<{Hr>4F)X4SCa5?}OEV9U=a#my? zS5%bs`6c{%{p^UJh#Q)u>+)%GjVy~1KaFY$9OSa$#v6C~y_O@0)jbS*zp(#-?RYEY zx#RZRWS7E@pW8(iFBqjE0?8 z(*4xNur0$)n`&xW)xn#QD~siU;Vd@o!uAO(fY4vz!b%*t6?h`W=5LrwKn$KWa%nS( zzpatlZn+HskgvV^x^PBVQ3O~4q;UVl6Hi7ke^Jr~Cxg{X{DX}ZHlSB?3|||x4ax?4 zt=~nR9=xYws}vk5&N0WFB@CSL!DI#7Z(wW*6O#9cqeauk&6cn}PU^u2AE1jaypVR= zZFi%bcO#Uzr{6K_pFe4mY**T3)6Gl{c~B3b8QlV=mh>);xyJ>Eiue5CZaM%*ua#W| z9v~45rYEPJax$&E{swtlSrab*`Q=H+ivvg4{}ni;DAyZKD={NUrA@;R z%L-)V($AqYV9QFO+Oo6ucqvD*o+r|y$W(P@ZM$rFFz!bZc$GpatC*DjDUo`Dc4ow? zb3#olkgpRL9a*4W5sz)v$$cLUfQB~i48Qr@%7DSyg#UbrF1h#;ni5yNuu=%?Z|uiQ zhOKQHH62UD(82uXH&=@20A)4?Jx&aQ52xh1w+E!#^m@M~;DKiW*m?oPpnC#$1A8g# zv%{hSfDJZPeQl=~bWd7-15vX802Jf8^>mb4abYPFA1?q^F@dsSPLk~U_ zR|v0>y_4^h1&C#6g%ws5QCBA@l;_&K+KLHg!;LngWtUq{OgB8x4Ckhmpy15{MyQ)? zx~Y`ehH2Ai(}5K`CW0Mz`do1a*oMi?PTC7tT*2z;?or<~cht*u0igC7`sLW8juh?; z++;UREg#E@D<+K{ciK4tupI~a4^|jYh^ymkMU})SKe?O%Dt6(xA}9^jVGRSW8Qj-w z+A-tXsSl)0f+g>=w~_jR&Z`MDks%XW=2#*S9TKjdI@RgKh7neq^T2pf~Gkl zXBnzt1l#wGTv2BHO&g@weuwPrn_TTqiZe6@9DJ9rlMEai%7oHPe0>v}-oruSgOR)5Dy~RcZ@8U-X`TTdC!KIS zZNBA}a)8LNwDTaK(@#HD%vJW>d!OR#trL#GbxjklYmK$mk(K89g&ZJ3A9mNBzZ0=i zIoOh3hfXX*K%KIdkmg$--F3%pA%q6t>J9ss-ERi$j85DRq7ttFklCG+-&e6x(=Pgi zsIb5K>ZxpCD|FDatE^{4CFu=o>{SN2wP}~=wF(^U?lw8+is=Z_t;YwLuwmQ zDR--L!b;##zxWv~6<2>@7GvGdnAjyhxTn5g%K5bQw%gNUi!IhEOQ}-?U%0h-w*}K+K-hs zn2M7K_pP)5DOPmt*tm&f!bR{JTUXi}&3_I?T#qvw!fFRotH47tYohwW-gb5gFkBoM zCL*<<(n-IQMyTInIdzN9pYOX*oEHA#7e5zIpBrzoiRi_|h;p<&hB;06zxqJ@w{BEU zi}SiarE@3GJpFWGqoKEgB7U*OmyqMEu-!*DV%KCF!YcLfgh{R(K5j1&YX}qmr8sb( zh+-)K2wPX62gIO*h5XXXd{UI~3w&?^m%sE-43k`JpD!E;ylZ@Zuf3Dk&sy*r{%uSm z(DlLibfZl+E9NY2lAFQAhK=I4-EuSS)&kck;0KQN?6b~{V&c34T;1?iY>Pnm^2>5k z_rj4oQ{d{GJn;)v!hQGsS(N_*Tqb`@L!c3e+cbZ!jfBKSt=#-I~c8$Pv)m2yfE~+zRUi{}UD9*&V z8T*yvYVUi+zZRtWkhLjG8?Gf@HtBZanLh=mdg8GGAInv}8I|X^$CV#!y2im6*hIYC zr#>a(q?|;P1KU}YXq5EhFZK+=bZSL;&J+GBs8EJzh7~o~RzYOK1x^en3#9{M-z!`M zOcwy6vqk-icydt9qkzId(uPR*W(0y4Ucgz6e-|CqKVSZ5-V^znY$MY4f({JsR_dOLJ6MT_Yy8|H0@)1eP6bnkgVYiK+9DdgWO6%OU&k_ zE0bmn5%0@iIapTsre1xu>|y)&AADc9BPd|uRs}k(bRdSE1uM(k$uC|wS!nUa7LWfH zE1d>0uGSc^cyx1!G|@d{g&W*Fgd{M z=zFq(XCFAxkaTdtIV6u5mEB7b?LbDiv8qDWVt)>ynEGE$s@@4@s$>A9rDkux85v$g-Ov75A{(^12hI?bXBic=joEQ ziF1D*61dC&oxIa<3J%C>FgEmW>nmeB_{l79+(tUVSttanD>Ixr5}7u(X?ilH2*JqH zuEKIK2NZFGkO_lx1w!Gx61tI#X-n)jZP!ZcvT949Y&as{oos%G=cjdP-@C@n`H8|>?dQt$RV6ai9TwX7 zw-_&8%S4{UUOsptBh$oCtUBGhm2&p+{u(`ciOH%-3leXLGdz!6{h>&vArH;xNAg`P|pL!`1X zAD%ltyUlimrgWjiG>o|P!36c`6;={)k;~+6mE7r%pRC#8EEO7eW0^djuuIc(jV-__ z=j~}nX~g?^XfEy)y>tMx=P(jzOReZEaNgioiV5;v&H9F-wYju^jTHr2`dQO1*Zat`#LF7BnauvuQidFoB4hg3} zV|5Fb=5X%GZXcITGI^TUI)rwXOCvuk%FHQ9ig%Z z75w*B)bD|Ffmc(2%ENJ$5$=5;zCmG+RYrJA08rz-_USt7t}njl_t|&9lDGFP%Bty* z>y=ktjiS^aWF-^Ic=+H-=UUqO)i!Qv!2%r0d;X+zWd--sE3DW%;WaH+{yy{6({hjo z+;79@7&-c>Q&3CN6Hz9vDkTe`i_F&`X!Kl+t4t<(xa2JSec|#>uh(G`-Yz2a{8cKU`ShLMOySVVd2}c)3UC=t~t}8k> zTyP77P31~!(7(ZzHQXsf_oain=(BRZP{!k&M;zUT)j4?fup(<;zYptkT=3=!GX?Bb z96w>{p}{wcrurErfct+Fb0fGZ6rmnL=-U}D0-uXaPf$*|s1@(KZtc!fw4 z^(}S!6yowjQP&Aw-`skNmBSz#FZCN&E`nU9P2KgqqX+#SZ2F-~|E{=R9CVcGh>I%c z)EzArd(gwWEyxN8=2W5J%TtS#6#6mVSg!uJlx7OrqksLYfY^f% z+%Mij;T{Ip$jBHugAn53`(>4J0a@k3$N|Nh}Emhdd39$tF zDI8St=%bI&-~RfyvMmUl5A3!8LI7C!^-A+qo}4VxM9KMUI@$Cq&%A*#X$V z4BZ+GHjyuke~~XvX@XhEe)}KL5&hbWbtbK=MMdnwHY|9nz=_qL+j&vk%_up$qS{GX{Qxs|+N*ASy zHlrvNhKm(~o7~d+1KB=k^`=g@7S_8F$Ho)s+o2<5kldxa(cc+S;a+5EIq(Q zomrtvynPq<0*g<(^cUMTj9eF=kVzyx+quGZR!x-BMgnd+wN1aKmInI*a%k)tYo-ms zSnY#H)cYT}PdFazcLNvka-)O?2w2(H4xv8s{bugPw)l5t+`tmCxbPf(3 z)khaylonYuTb>V+o8cE;e1V>hdYI|cpA#>dPd@b&y%q-!I3;)@eKhK#bn6d}PQwMj z0wDl`bgS;Wip#)-Jp57CDHIk{=&RpoOkVU2p>TtFOLN+6d1O zd7&GF4y+XubYnM}{^+y~`H98pmzuD+NBcnJ#0lFF6VZNseQ#fIGss}LibHT$Txk_r zb+y&ZL}&B$FJ6iD{`F;-h@yV0t+&mmk^4F+p=V1y9ga+}@-J1Fj9@5i_G`Fh=(6Y*9+y z=(0TRmQHM2ggXGF;k)Q-d z2fhy2q^&E9c!qv$>eW+4Uxh6>vq#X{eDf`$g7~9dquKZ~OPt-|TyMYq4v?_a85k`Q zvTWvl@`)#9JCn8}2HUN-+!Q&=1<9`(n|2}pZ0pgz=OOQtwLL7~7mMQTK3~``t;Y4x zM1T6}7q(V#VYK!->qYR&hr2p`YLiBOd39WzxI60TcH86gqTA~vtTd6k9ILYMeYV~P z8_8J$uHVfKS_fw~!nSSWO*g06X4S)CLe{luC?BWhneMA!Klb5RQ=5UggqyU@s5gY$ zA1+YSWUlqtRyem!LlgQ|4#rS%E@PFo>$1pT!XzF0m>qZA@xXXLx6jmOk;F_>hZ32I z%u#4QBhIX`^?j|}lr03gde(2&s@#U}WhwhOu`-4EJWNsAL`;kNcdp^t6Nn)RtvY!L z-4mTXH<2rqHEHJCW(FLITouGP3}F1j43BdrS6O8>vAKHevB$+d3w)$wLwMTAT+@V( z4PxcZH{U1+xmtf(t&V{*_&qZ15#d1WCS`1L#^&oe=A0{X4)ao1Y$+7$!M*QlW@QbB zlXE7Yf1bE4+GgAB=#x=VKGGw4x};2!3W(U~jMd-mcl?|fiE_)@xR^CA>UYacH`3-? zY$azp)*7XbaqSjJCJz{+F1ExHwAyN)AvviVjyk}fb+!uCYwXHqtS+Ih>?3D>*d{hp}w zU6$sb|ATVC#4R`95*H4Z&&~sD{tJF+K@n|W$SIEQsF^97J8WmdN}Cv2a@AA4H*zAs zzU(ql*2{q+!4EdqE~5ZWW6L9p8W%@#3Pzi7v$Mg58=3=NhooWKFt`8o>CcPtDHbQ- z)DK3+tTRI2K<3)UFhag|>eX^m&@#&|D~Z+xfRbUkg$Q`wq;q8J&z4($*4g)^-`Xzt zg9Qip?uUOd-HK%MZz7vlKAlcHc9ho>hg#C~85DI5b;Mz^G@0vfsijLpH6uHwiw&(W zofQp(iA>EsX}GAZxNszc0{f4-W0{r15>OJO)U^7jBbw8Dmk}4vsbUn5-RAbGz6 zd*JFLm#ai_fkTPdHxuZ=nwRA8?TT`gH0*D5Y*` zDZYh^Zz$$*zxy7083&UMUDTq8mKJma$CB4yca6CFS$Wk}P4}C=;F>q|VP{Xo0WB}l zXSdmgX3iVIwLRL2>+ZYnmJQf2xj?yGpB6Iq@f6>$EeP4Uw= z+ko;+LpU!}+4f!=ss$~dn{CjZZ>D1llVtjY*@pGRUJ`em$YcSCO&GR=owy+`PfT12 zP>GQ3_foeCK!u7mO-rDIO4xnr;eR~@0tdT3@W6wHP*X@a51b|H*na=}yU7%`l(m+F zL@dN~iG>5(cDUdr0jqBSN$hiU1W(jiP2}byRze}39evc1;$8;kB`|-$3T4u5IbK8~ z_P*Doq1Zq1_~WFGIG|%T_}O>#LcR2aG=F>Rt#m`=T323qRa#}W)g4WA`adTL+b^sb zuDIgLvEAQg$`YFLu^gxY|Nb~ZYFU`l*tY4ZsiO~eRAa!y(t4;g$Q7hZdD+kpk*gOb zxwbus*tM0PoD7X>K3rR?f8r|otYG8iXA4~IcfD6I!#2d}W47O6#{;>DjS18;0O&)y zv5NQ}(J;@5DvfmtJ`A)>i2RL)#tSwawHKQj)OR(y=W#qxc@qd1j6C6%*z5;{0dVpg zVlD8Q2sRCFYhcpkre+N%#y$1NA9z%F?6Jq_f&1~`ujWYl#Sgu zaU5q-!sadbRVkNW?|m*O>Uz%E6X~yieU!G{ZhQK8TvQmz`%F!BsHF-0d*!cxP1jy? zHLbb!y0p^DD^t7ZLi)s9zTuSaYo=Z$qGiX})%?->i!PiZ=QU#U^?U8&j7^`YL)^pO zvds!)I1YOo zr&r5)=W51AWI56-$4`YXhhp0Tgg%aIC~ys_fDVlAtkcFXZ(W*9UBGGcv*`pwlr2|7 zJcJnAXWQ?FXt-O#@>8V{KfqdX(tgx*xCKL(f4Y`ldTDX!2iqg@Bx(x2~N(8PBTCQ5B`k`>k$=o2P=~pisGI4$Eh`Q|p_F`fQ#z}{z{nD8f{3N4FbeluJ zNLbPFf$s2}Pfa;w!zVX8kF>P<{2(LX|2E1FH^@c*Wbm9z)$(9qOp# zyZy}OTL*MZ9a#Z{Oj)@!nQIH1vzFNeNCe+?Rnp6)u}`jVCTrV_U46);-4a}S#D(jfPxlc6bw=K#g|?bANOj<)*mn>6Ep%SAB-N3_9^Rr9d5-(bUyWJu&V)_nwoIz-|Ux?O~apwl43uTx8 zO5)ttKAwiept;ak{g(Qu(u-Axxc;;4# zHc#odhUGVjrj6Nt`yEz~_v6X1XPG6G;-%;G+OTdetkya2-VX*Wsqd;l?CZ$pg$?7w zai?1B|7a65Xoj7#M<5AA9@1-|7WM7p6Wo$T|B2E(3 zK34h(E}o;4S~4=9iL97gz{u2z+d7$oH?&7R_19}4dt=FhLI+F8jwCa&HE9?t)70dx)4bjGK-g0j`E_M$XTF_}(Vm5!+ zB~&}QRj_I>{bt_TMK_=VY(xV zme3*LbnGsNoXUX>;jrkx`s&}vVE$0lF?9|NsT57ayhkWdP#?gV`oJ~z#c@>Azda)oZ*?c|BSa9@4a#53uS_ueBuyw+T6ZF&a|Q{kEnbFHoIN1U5^=IN)& z@p3!vv*^tOE$jhqoPv06J;m_vO3Mj&ZNL3y@$)AVIaMe5 zZZfDSX$gB6a3xTq{z^7wFpX~K$u?fd1VuJd1B6t<*k^<1HfoN?HL&}}9^ed%++I}- z^kweqFlsohX-<~7q-wD^Og!~h2aV;ocp8m_yh*Vh zs-c{aiOhXmm6=4zWK2z+P1WiP-&t0cHhahH--e6go(x2IYklMnegp-s~gCect4 zsE5MbF;diqtHf)H)Cp(nRz=#Te%e2Sez8T%1Y0e*fI0rSW5jFdxCl5JPQeataxk#Z zIPDa%w}QhxZbwDF0AM(Z9wrLM9&@yu%?RC@J#^K#5%-jhL}bFjAP+w90NsE8ePUD# zmp^cXxa+RFi)-gv58wB_>6vf%3lFzAC<9xL;AwT$)mE27OG=xwo$R=w5vF_p@CUjy zu4clKcsFpM<&U5A8_GSA)y>s< z@5KS`r90O?9Zrx-Wlf7XLUZA4UY=b1qi|{I9b6H^8|wAfUn|^FJAvR49!^(YWfl76 zi6_v$U)Wz0Q9r2SNi$WTwDZ$WXvhHUnJ~%L2Kn54^G)K087^nG-C@VLvbt~$ zsDrF<)6M=k!f8JDh_W4J!=bWs%{f;NGu%_dn{T}tb!t~d(40=IeP&H@NmRR~>F@I1 zKidyokZI_wGuDmXl^gZJ&@{ZHd0nUMY?{_821(M|N*3nYy(cS`|0B0F~315P6qK9a8jCi-zqE*%r9ku~^@a zs^6^l4!DeDml>sC${$CiZ234IL|SZ6SPBctsIrtK7I{4i+9TgKbpykSFuVCW4#OnjRLBPiqOa!n!N83G^9!EM$ zF7dI*fjujO63z{)vb;-Jeb3M>;b0OuCo=xSUP^07s^LR3fl#Mjj@(KS(^wpc8ORx@ zol3X=_BL6C+-`@RWI;g=&gHgUs2_mhzrRIp^z>6t5x@THthWKJu)<2!UseMWR$YMq zF2D2=0j>!V@UX>*`tmYW>Cm9>HKK;rLi66HS=+Pg8iq}osqb6Q1Wut1>ieo>IwV|s zZ{o7~=4`$)a1nWNvV1oqD&;z$yYBhJ@6R6l=9_O$8yPcJ%4M7yYNk$&t$yr@Jeyaa zsTX~{&!+m03@WoNs;_!!fCSg%2S6>s5Mb)gnwG=nCPFEP1t7~ES>komUnOj!uBm~I z-*&tuG|ke+)qeKxgOA6y<-$;60v83Y7#Ll5zkV+LBqYq{@Hkw&Ez0d7<6K} zA6tAv2s0qmS`Sx0+pr~GDE;cVFqZ^(xF(!34iOdGo?vqZ`?HNV-86~9+E=V3X1EfQ zzc%KZQJjTm2pm5KA7$&UzoBf0DrGbyAlUK~i+gOCm;kuOFTIR7h4k@EpA&U~%F&kj z#^#%i(HD*?{rO+&^g+w5={`s^?Yig|xZLjy!uf0!vkYhft%TzmSVPr5ak7-1%K#AA z5wQ`b$FFfRMZO8A>Q8fN)oo538)Oo zW)X#&lGU&sq6@XGCNObJiZ%#0gv6e-0ypV*(%=pl^;F#Ti>q}V6J$k74YStT>&WWf zxp5_Kr=4~d_c+wV*9-Pg*nE8M*=Ny%4?aNat+#%5AwBHs4lHikqfYefVg_pZ+6Imn z_DVt#fA1gemJQiB^kcpCHxL)isXc@1s|t)Mbqp?4dFFT2 zAV%D$%w_3?b1tFKzwgg~77=sR)jlI$Zj0+~)5m^->^4`oAK8x!o1SZumcH0=Vy+|m z#LTvQRNHMv_kG_+JF1XuNw_0=Iu(@xH4PJ-5aN$MI#Q^i9aO?z#VBRVF z$9*OfDKSp@x^$>p(G;T{?EQ_CA<%Xt`2o<`49)t!XQ1>v54&$lSjzgTY)fKlot7hfpW?$~mK zJ(G1?PJiE(a%z9~_Mz8%X$XDBrfK1_?*2VZfBty^QrN03v+Q!^K#Z~l#HQY~p9L=L zKZT|J9k<^miwbM4vtIJ_5KKF9)Ay#2UVY_NnjAq7`n69jzXGke^2*(C8SF;)BX93( zWD7tYfG~CJ;ZCTJ?tD7KXolQG*J5AyyEA(jHN9->)qtC;FG?H?J&0Jxet-l8r1<~N z6VEvHl(9LJX)($?fjWY0!a1@e=L*I7S;J(I>t_M`I3=Glk$=@wFQMsvNPda6|cAKP~Ws6v9zV#Ea#;J;48w|Rr?RMCa zPCMmSG~c`46Gfg?XxN4L@G7zGb~}iOgw?#;Zo5@HNZ_<;Yu{D5om#`Db_H-c?Hezw zNCL26po;yNFTMDpxYzl}!i&(-pIk;ny9y9w(b4DI0~QF2Q?EYQh@fa58EW(@s3g_7(0KsE~gzTAB^?8XU zKPCs$0$6Yw_!Ymtj28URLb9z0ULtICKO10wEU8BwKk*KX7eBODCoUYpvrg%s=4X`Toeo;oy*MA`maQ;DQvg!@>>; zlAoB6_XGFePuEVpN{*3RYn^o?2lz2+IqxE#T74ePfJ-sl&?kQHjGE%$pI!52n(;OgTY&3 z%nE}}7`(zq7Qj%PCz_V#VFSDo_41cO5--27+Ao>8Vn)Lg8q@)g1sCMs)r%CiVXa?N7L3Cr*7;JH3V;uG{E7*EHaU8DMet#53dS0gWnh)!kF#X2x!~ z?juN~hcJsoz`;LUP=G%ZmFka2vF{%*{6j402L`ZVusYXVbIa-9GcPobKC{+Z^xpTp z*SU@E^l@*0*nTthD%^M48gzTqY5new+v$zhUyoenvh=A>e>xe&8jx#ggq!?cf8%v= zJoxZm9uh7P3m9-JsBK|)Ti8ledSRDWtseU-8Jg;HN=A}%{oMqrpNXi`*)CpxpHc^; z+BAlOo5`a|Cp3zDR=$XJ&{q?T^jy=>?}3$&0{vdU3wT8`y(>3b%L1{{XJr;{V9N)7 zO~KBcLZ&h70PMMK7$!C^*mVTkyBdW0fyNH*6ecuc zsq*!0g4i$)YzASq+6J^Thm@4f1#eQ6P#hEzIVMWOfjxZ-&cGXL z`#k*K+?at>tI&q^bW?teihwJX(X_w(B`zY|B7g(ye%M{%=(P90@BJOnr0)153uM@% zc-t+v$Z8}Sdb2G*OXJ3k>o05m%hdFJXlS^lW$w~e+cVrlzdCx_Z=n{>^{FkTrM=PU z!t1(xUVY{e<-W5U!sTx61dckOpSASC2WK*qJ(TrROIh@0()p9`j1S|pBEAYUbr6>K zs<>y*m6b}AA#1)nj>^=|)08LJ;ho(j!Xg4FzzhQ}n_h+HIuI(#ctUN;=msNIB6h(W zB2gmi5SMliH$>L9g_eNZZ>7b_f|w;TtArnBXsW+ZqMv)t*c5*c0X{8gFk)tOaplv)$L$=?1ANRC3H}R=WXOw%B_h?+y z+u^kBz0sAsezSCt+o6C76-%t-_L&>7A*1FKu~E3Mu==F4PQM24i=j>w9j|5h_2PjU z(h@!74lV}9gL0N*?F}=83~)6-NM>-hon!uV2(D!1zm?GT-m?EZq~SFjnZeT#r^U9u zG)zil3R{X+xFc@9wSzjeX?vop;-!hF;fB?ZZOGxoSV_uX@K(Cp?t6$ItV=GwNKP19 z{?jYaDyywV@0|IaE`Fgw>ZxCEj@@!{UxZG5QXq)5f4uizDcjReKP9$i@I(PI7ptH) zg3|x+38)mKH1+x=FT~wCaZJ9;6D=b9lv{C$d^R=;e z>FWYsZ}Q--5mls-*P2n9#;GZ;malp+)Pe?cxMX&-V+piiYBM|dq)Sc8;5Cy^Lr`om zqG>>?fYgj<>Ya&QmD%S=h4&bV= z2T;9-^nzQy$KYLH!G&ZC%#Al(C(3WE*1?7H0x&aZ>)(?GmHKn@sSO)CY2Z#*CI9;9 zqx6@D9+2}R;kNp{@Bcv5L9H(OwRgSyJ>5EU9oQ~^CDsgFFxmLiAMcg3B%#}auYQ=1 z0KoeOZD=~9(u!`gVPC(d93?ulC(DL5+P37rd!kW*g?qrX`%Nd=VH{WIdC0dRd07rB zV{`57tUnLF&64KHlL+2HgBb3bGUZp(?OVAfPo6yYTTIUhr{vkUx(aC;xU#}>Fq{V` z=_pTxUBKvLF>4H8c>B!VaBceexie$7&!s**G!6UQ9T;tS^tqBHHwCmap(S4zj{Avt z826;JXXi^pkk?;#9bI+Rm65AhubxjhBVx_Z;7nk0faA|zhyXb6yz_|@LI7N{mr}7b z*P&LE+`w%CJOj79j{ly1=4pE5;fKYI@)J)yK`+ErOL(Th%H~Ht@=;O1FEsAMa=5K; zT2CXEhq3);LJA)6v4wTz*bJ#}jH zo!%CRC6FB+mKyM)o^)DnY({iA+IMcjw-UZ*5Oj8^Wz+35iAy5-*`#wO9;8V*nc>_? z=TD7MR;!6xU^36PAuYI3ZGKNMW|%rcvk*Wu8UP9VMl;^!?;5a&OS2^Kw!o+d;M|;< zpKEqpqSuT#%`_qm@q!Nr_+-X!5PaK(NIakxkLC zg2%qVnWHE<{|Dz6XNNcm8fF(`XPQa&K*G)o!1Gq*aNdk@VL=b;^f%skot}C6X#qvp zePOfpV(^=dFpZbY|FMGAHSKXJNRocps6CpK^ z1W4q;&XmW7s~_~IA*TGTz3*5(w{d7lC$Ouq&Ds;iC7690um4Rtb=3QQWom#c=V;RG0!iiUTbl7Yt>GNGD>o14ur%3PzI0#y zcE^Ur1I46r!gX-@nnF__$DZTX%%+`p&ct!HY!192I==bV;Q6*9DGOlGpbJbjaZ@!Z zjg~c(0ceP@R)7qsm~egRx{B-D?xt*)W)9Y!fj#Hc#_MzzyTqt7!&19B*mF^>*ib(; z#MKbE&9{#Z-wvp?&$z$q&O2%H`RCDWv(HBBLOH$EQba@IbP3#)DgBTRDsWXWRrqK8 zg*#*%Tu~>cAe;^iMQ4dCgSf|OM);+kG+W*?iBd!^Wb@pX6`UQ6WnuR4#N$thpRdK1 zSb~;}z@@Hl`r4@Cp{47l&wI;QZ!8_WechJQCOIIgQ40|_+s=361BYNA!N8ru)q7RJLRxitV+Tg1{?a^{(L**rVoHEGhMP2U>uWLtp(O5^~DbM9&15Ss-@-DsIgY*s4Gp&pLt z%Aewb*6qk2u-9MJ;H91&qHYITAK+9)p#!PZ8Gcr&#bh6kJmI@8wS>g%m!^Fch7%Bb zH_r4na%b`54U*av;bOT;7`BdfOCp2o&I}M2=3Bvp)z0C zeo$)w&b3n@-#&f)CgECLr56)Nqm^OrN2RZvZ`)5PUj-{mDKeHh?+wy6=d3u_v}_{< zQ?*3znRAQ7|E|gBPMpvby$fErBKP%tj5l{GNd~|SLV8e#ucMW7$?U77!ii}CyE80l z15gz$>qoW;HzFms1lU82z2Dqt?h+?a4-q!(e-DwnIKBv@5Ft@JQxn;CsR=t$HAGqt z$Y6fk0O!)6bSNuMlK#WpzZbn2e6hphsvhvlEf-OXOuo%V`PNK89S|>lI;5{la`pSG zue=g>Tx7r%-eCg4e{e&pl)$(6=-CgB5LLZ$YwkGK0JTlsi5x16e36WXj(+Akz#1 zsAtACElYlYyP{DGTwTtpf+&$En3h=e6G9GbIQ`}Z0`;Ubgs2t$8)EH*>q%oMp;c<} z@5{#uA0M$T0QyMZ{|-E%)IkrqLx{} zD(bMNPoFO46n~AYo=?QZ0st=zOL5L44wQwtgX}>xX>ikrMe*LDCsQXTTTx;IcI~qn zwx;YuCZo-PeC}D}`pVr4UQpb>_WB!l#@i2Z>iA%4mr=D6J=YdWV3odQ zu1o8h(y0BwMu%xPI;F%6JyGpk_cGr$-)eB`BPMNAD&l|7fNRpLIAp`t_*NO)N4P37 z_UbA|A@B~d{fodgoZA>isP#J(?$=#&bri$y6ZgyTr-g$!CPc9ko1A6KOb2MG2dK<_ zed&O+owV#gfkEnHk3A+13gJlb$tRzrfBy3&`35i@H}1nx0ly@D=tCcJihoNNz1~c@ zTi()c`HNFsFn8(BMKzpxr_K#6-)SfJwwH2CbAHf@@0$-(vRs7u0`jj*)G*^3Y_;hj}o>9pXe zX>w`9S{`_Rc<%Y<#18HGxQGCoF90U&v0jSzdd)Wb>~hEkY{_7(3d7Q&z|^PPsDS({>3%xNkREQUyTm|JLlm-dpv8FGE9jZiBTO zHTJ!BWoUp)8{DaqI2AmYgwp%ka<*_O%>hrFeBRmPXvj4byl_oC>zt{vaaVIB-iNs5 zy#d!$4i$OvP|YeDR=uXcp#x6C*!n(#?36KY0Vy5cq|*l$P2Du!Pyo_MYvu?aVxEh8#wOqY>w@aE^qyD=H|d!ba+$2Okh$_7E|#l4q|u=bAf$%X@_@LfJ>g zj7hF_VtjB>GN2+LLi~F+0u{F8w2cNwfwRo=PMT-l`Q+4Y=&fL+noh0m0+r*g(uexJ zt$#~jE?kXV$%;K~nLKNp`o0s+^nF)Nk#ld-=)Tti4c}1T0$Shij7%kb93nqB*%qVL z%iuv)p;%EY6qsurW;OL;HWaAs8^%nSa;{%twAbk1HF4r<97e7-9iH2N5K6g>jB2y5 zoL8wxdPfC!LvD#u*+JEbd2lMJbcxe7vL)IMaaI=}<$Z@}4C`;+o1`nDG+<>pC2B+g zJNud(eLPbrPqRGgeRsCCsngpa)*7A*5ZL`toK_fxT#+^J$>W$CT3k%XydU7 zqpu6kT|VmmXSPvI9RAgm^UmIdM!7}>FI;DwdDc&3z4y;Kgi1Sg+mIVCN+kJZ?Eo{- zawMj5P;TfYGLvp+rfZ0--b_3sa)C>TLJ2X>%wBHS) zSbA}F$z}2Nsp&X?cO19x|6yR{K&|QP(JkH`k&vA{`_3L1nuboWefgPhYC3?t)NPI7 zS#o<1&yOt*XrB$T?NcZmO<>;_(`cr!`joTInnt5sBQ%5S_19iGgyG|!OIw%xEaRa+ zvZzpqgfxcS7W*|Wiac8_)_0Y9GC^1Ba|6FeGm(#K$fU&6p^gZ=J!?l%dp#YYW>v+5tE!a2Y_ZW#`geY$l7+ zc2o(!q+hAX)S(3Sv_M3j8*I{Gwq0q;<@josPD!8Je$-4X{iX58&G&jw{lI0?EN=t# z^ilU}Cox;MzIc73~UJ9pCOZy`K>`R>{QEN!!OdD0BBZXMrwW`@XVMHm?K%Ibt5* zO7|yEo^1z@?<1#J=IBf)R6t3KoZ3(6iS%We4eAVHUXvqELxg1}DWBL8 zMBz@{8Ft)IdaiHcP;G&m!qR-dN&4NREY zF2NQqeIDczvDrJusYeD`qsz9*2W;9TH>>G~E;3MOK(eOGO*+!BS>*Ai+{vQwc^ zu5F+VS&%iD!KTG(fs2%Aa;jD*rmYpY49|hdG)&_+U;84x&FgJ(UV5E&#+j32Hk*24 zQcjHXSW$ZOr)s0l04={NlmUc_azDMucuC<`tX?@4>bZUZBeok@!`K$J(T10&ZDOvCG+M?fiyj;&zZvUGRt ze|sYVgYn>LkY4#e%A?Rs7}YEwR9D8PFVYAP?p^uS^BV>Oy9_TM?OCU6pWg;R^?uJ~ zscpnsS_xu3muk42H7nb%-%CIBDbhJ=cV{BQEOowm2`n z-hBPFU4V|Hiz)FCsLnN6Tz*{(b+Rn#C5>ypfvPUK)}*2HA9YwiWA4I=qw48ePCs))o_B$lTxS? zW=)H=P1~(*8iuv}b@b|tY5>)hI#ao!-BgpjV5LB7Pnh7Kqon-PkufNFrH&$h*#Tq{ zY-?WOxO0W~P@4TpFj6W8onN9#w4v=jVK%4}Z|MQ4W$UWf4=|_pBV4Yr@he zX&_K4g%MQ9H!L?Ds_EKR$@vhQJPoF#Jo01Edp3la`ZKpp3TA+-^0K8ZYM#<2B_Bnh zWQP!HaRy3ELZRAhTF6>>I`m%wE~0;t^TKuV$rBeE88es~oBu<(%vzxWGZwA2fQ8#& zL!25eG-ec5cUL$hjYOy-75)QD8}me!W;;qJ)ALp}qm!_YVuwT&8$U4;zX zsHgzhTa|S9hlNc#t)%|gr zOQEksFd5p#ZFe!t;bwMob#m>%T|H<1UTL8x4b7W(ldE=jDO`W z6aXaGgO>ZM?V8)t(1js^l4=Zf$dvQXIh6jz>t6;hTqmD=#&`f&%y@2FfqYBN%;^S9 zK_n`(SZ3AByHGhv$}DvExtc?mHgcQ6EkRPHSG`gHWUe(E!mZ<#%7X<_!|nM2<1P!# zEs?p*4MD11P64(yJrxzHfzLzQbEN4Ol4IoHH6ww1|}+@72r@J&MiZw-L!P< zJ15^&v5+cPM`q$NvD!3DD^X{{GFb)pP>F`v7t-LE&ztLut`fede|w)@akf^C7ySHi-fcdq66*rtx)ROyNSIUrXPW<8p(%B#P&Od0%=YJ*3-?-ou^+U;szM zIFPhyTcEO+Arkg!R4*WQ%p}~+99bD+xpmTQEpu=Ll%l^V`QSz*@+9-Q>BAE3Fd%gdRhU( zwppp11FG8Du5U-%VbMv08o=?9s{brgwl=-mhaDg+am!4W%!#<=rfk-=g}vD5L9KS5 zMyeny&Gqvs=be2Z{THwQGI-$vfQ6AUQ)4OS){@ub)k;MTq1T3l;b^P4CglNo2s<~b z5j#T>mn`4MMr2gdu@5v1EmMH@{!_rEuWUrRia<}$lp0RK(sBCHRY_9aRh>Sm18|uNoj9qJ z2(f`v%LS%R@Joqp7$Y)}kwCf5ppN6>Mlm1k$>Yh-QA#=cOS57tHEmQIL)*40x|?`~ zAV(TUl587^JRy^ zZG0t5l|sW+DVJ4nry<0$;!2t8krp!M5e6u0lNCDU%t;MAg4x;9rKjM=+}6X|RdrWM z8v?3jA`fEJ1*2ZYyv89F>n!;6rss&q7o^Z4dtfjGs#g*Jb6e;juO!*Cnn+}hWvATV z?8HPndMe16PA9|ZQ~(sfAC%EiMvvE-ruVu+Z5t=slNgY)tybzV<&lYQfDRM0(8v)qqXKP&Tb8UU|k{raCSnRo|)ULTq0xa{jr$qW`ArzYV~4~ebwoo1FzG-L_4qEsb(Ca+BI zF;S@9SRX6sPywlwoKv8e0zfx&@O1!WITYA(?STsAEOW@KJc zlNl+{`=#|d8B|b{!V;#0P};EmsnpFTue_2-SpuOtp%jQP)n{r3EBA$~6{HM4T8?%G zXV){eaIBzZ(<-CIhu3!E%3N1sNV0P&=Aah3$AGdlh-*};>ASGOihtCAWU=0^@idMm z&+UX$k*a4U(DfO00gXyq6LkR9_8}{)pI-zEknA(DWhXKzGk5zj6FQk^4PTWOTWEnoFUAhIJ41k&e zO$M9>TJTUIAa!+FS>-AQ$_FF%5;exIr4n6xFAdYy!PmosqOvhm_`99mN+ z3M~s~n%6EgE5^CsLgAnbcV5z9TU;GaWyRMpC0Sb^eno@V4w^D$%5?f~zWztR3m3%5 zw+8f`2v$2+u&9$CbG44n^ij5|7`hKdyeti)ctb=U*4R&Yx$_4q8V;x+RyK4U47@(c zh>0pvasf)kg92o>e7!4zC0$oQqx-Vq^7kSlu*S8VRW?yDIxWSB#9dHBY!;X;QIa)G zt?5v(fWa2TY$JshR8@pfX>p*9Zt87$w5;RRN4x6C+_mx2el=yFz#hdzEpd|R4JFhS zPjc4d6=;G3u?o6WW)xT7N`q4sZwmbnUH@a?rPndXpS1IsktjwI zEu^!D;k!TjirNIAo(hAk7g)6G!1=gM7Wkh831+kmEjE1cx=Qvtj>0z+}0XUqx`>Q<4? zw`7?l9b}XNP86!WmU1r+oGbw3Nuy&D;egpbs}4-l^s9@8Li^gr+?PhrtN69q6~M_N zTen|KD_80_6(Pg1rUpKR-uj>6w(Rvk4qmv9Ip*Yr#?18AfpHQzfT-nIN*^mpDUKEH zqvgtM!&(k4Q&ccREI7_iO#*B{n`Ib3tWr+tCiBmp)RXB_MM4Y{(7EO-Jx}lLgyl{nUD7xUtzwI@fG0nDQ$d(e0ZG{;DhJ>aaa~v{pjh9x zX?AHr!z!5Ixjmzj$lHU}^gY=5XAe5;xjqAOnoR5etd=!o-JTzkIu7fKQi(DcR8FIo z%*W07aCuO`bAzK|DwEL%Nl-`RQjlPdd#@gfb3qZ@G*Skg zkcqSmW-}Y+pqAruph9H9!wy_(!NZ7&c7!(RRW7FxMtRRhl;f5?pt@MWR=*@SW{Z(y z+jDp=p#fh77`UhjjqXfwqdXTkHVRB=#>%Ocwy9hhRgFi<_DJ8H852lRmR5 zy6Q`&raWB1+~>%l7LthAeNzBZV9JBB08f|rmF^T&2KAjC-bB`}EaMC}VGCaQy?7~W zS)>W3v^6yK+GOQ&vfJ3tt}z-g=cc7x@hkC|d^AXh3-ix~%WLCyIi&*br_^1)GAOpqK!D}vG|l&t116m;^DCC|0;Od3qTf|XSGOzo5ZGDEjG^FmGwwr zEI5^jp19ZmQvoCe8`EJ82V5dsfN~(CVubl_i|@ok(E4i>UA@*f*nyG zVAR6cB-piWYDwy(VZ`Yq-wiB66rf`YcGYoczP4e6bE4*QbmPIU)2DszY&w&cjpJDN zde1Grh0IauB+iAgO5ui{{A1fI#lZbF@$s%mTo+84bk;TW|H$?K40yHIQAZs${w*3A z9}74>Hs&Yd$Q&QZOI+~ONwHalD~m?ewkl8TW){iF)|e~=w{=G8&)8_$!C>-kxUl@H za6+YQTr_faJIgPpqaM>Hm-=Y@*^=E*BS)<$w%ZI#AKDAyzB6<^5{xMIbKR z3Ol@^%myoXP?_8fvXBw(>eeqSc^VUscCgnQ1HNv-qYEzCTWR`OH_evvnw~0RJq-m< z&9g=+knFfrwxF1wTcvm|dzpX=s8meX{xJEL4m54T{lI8eQcdsz(!_q!v7&$0BTkDn za}AA*+!YD+_w?qgcl}SV8va+W|7XFg?>gd$ljo+fFO4VhVi6V!H1eU?>=DppPbGfm z!na7b^W-RH7O683d4Q@bgdK%?X!Zho* zFAF|pR=z-Y{KbruA3eo9~tmqTFh`d%`|e?zv{{K|MvC&EAaYPt|N{( zV(wQdIZGT9e*>xG#B_}eXd(Q*mA=bwx~drPR(?5VB+T{JTW<*oq)uIuiP3;E=ES&-o-(D9*NI`CO!3dnz9>--`>h&&yGP3_3(v}fO-uo z9x|lM^gVscH8=0OwBaSB0hw|olkSm`kON8l92_TigjD^MUyPaZ(N-BqYVuCYK?B#0 zC?n@@>CXs>;%`6$-!>%x@*JTYM!(q+uW^I<7HZi`WjWtg{*?yZaZ}^h)~W5KY1Xtx zs**olBdLx_we(1-MSFoLaRPb1AB^zy!J9OFY Date: Fri, 7 Aug 2026 15:59:06 +0500 Subject: [PATCH 07/12] refactor(branding): wire plugin logo consumers --- MANIFEST.in | 1 - README.md | 2 +- desktop/package.json | 2 +- desktop/scripts/sync-branding.mjs | 10 ++++++++-- setup.py | 2 +- tests/test_packaging.py | 27 +++++++++++++++++++-------- 6 files changed, 30 insertions(+), 14 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index a25a125..b44dbee 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,5 @@ include README.md include LICENSE -include docs/images/logo.png recursive-include src/vidxp/assets/upload_page * recursive-include src/vidxp/assets/artifact_download * recursive-include src/vidxp/assets/mcp_app * diff --git a/README.md b/README.md index bb979fe..8587c7a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- VidXP logo + VidXP logo

diff --git a/desktop/package.json b/desktop/package.json index caa6492..0c6dc7e 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -17,7 +17,7 @@ "model-catalog:check": "uv run --frozen python scripts/model-catalog.py --check", "tauri": "tauri", "sync:branding": "node scripts/sync-branding.mjs", - "icons": "npm run sync:branding && tauri icon ../docs/images/logo.png --output src-tauri/icons", + "icons": "tauri icon ../plugins/vidxp/assets/logo.png --output src-tauri/icons && npm run sync:branding", "predesktop:dev": "npm run sync:branding", "desktop:dev": "tauri dev", "predesktop:build": "npm run icons", diff --git a/desktop/scripts/sync-branding.mjs b/desktop/scripts/sync-branding.mjs index 98968d2..c93ab7f 100644 --- a/desktop/scripts/sync-branding.mjs +++ b/desktop/scripts/sync-branding.mjs @@ -3,10 +3,16 @@ import { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; const desktopRoot = resolve(dirname(fileURLToPath(import.meta.url)), ".."); -const source = resolve(desktopRoot, "../docs/images/logo.png"); +const source = resolve(desktopRoot, "../plugins/vidxp/assets/logo.png"); const publicDirectory = resolve(desktopRoot, "public"); const favicon = resolve(publicDirectory, "icon.png"); +const artifactLogo = resolve( + desktopRoot, + "../src/vidxp/assets/artifact_download/vidxp-logo.png", +); +const generatedIcon = resolve(desktopRoot, "src-tauri/icons/128x128.png"); mkdirSync(publicDirectory, { recursive: true }); copyFileSync(source, favicon); -console.log("Synced the VidXP desktop favicon from the shared icon."); +copyFileSync(generatedIcon, artifactLogo); +console.log("Synced VidXP branding from the plugin logo."); diff --git a/setup.py b/setup.py index 59551c0..712ac25 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ class BuildPy(build_py): def run(self): super().run() - source = Path(__file__).parent / "docs" / "images" / "logo.png" + source = Path(__file__).parent / "plugins" / "vidxp" / "assets" / "logo.png" target = Path(self.build_lib) / "vidxp" / "assets" / "icon.png" target.parent.mkdir(parents=True, exist_ok=True) copyfile(source, target) diff --git a/tests/test_packaging.py b/tests/test_packaging.py index 748f4fa..3abc64c 100644 --- a/tests/test_packaging.py +++ b/tests/test_packaging.py @@ -319,12 +319,12 @@ def test_artifact_download_landing_assets_are_safe_and_packaged(self): self.assertNotIn("local_path", script) def test_canonical_icon_is_packaged_and_desktop_derivatives_are_wired(self): - icon = ROOT / "docs" / "images" / "logo.png" + icon = ROOT / "plugins" / "vidxp" / "assets" / "logo.png" self.assertTrue(icon.is_file()) self.assertTrue(icon.read_bytes().startswith(b"\x89PNG\r\n\x1a\n")) self.assertIn( - "include docs/images/logo.png", + "recursive-include plugins/vidxp *", (ROOT / "MANIFEST.in").read_text(encoding="utf-8"), ) project = tomllib.loads( @@ -335,11 +335,14 @@ def test_canonical_icon_is_packaged_and_desktop_derivatives_are_wired(self): "https://github.com/grayhatdevelopers/vidxp", ) self.assertIn( - "./docs/images/logo.png", + "./plugins/vidxp/assets/logo.png", (ROOT / "README.md").read_text(encoding="utf-8"), ) build_hook = (ROOT / "setup.py").read_text(encoding="utf-8") - self.assertIn('"docs" / "images" / "logo.png"', build_hook) + self.assertIn( + '"plugins" / "vidxp" / "assets" / "logo.png"', + build_hook, + ) self.assertIn('"vidxp" / "assets" / "icon.png"', build_hook) package = json.loads( @@ -360,17 +363,25 @@ def test_canonical_icon_is_packaged_and_desktop_derivatives_are_wired(self): self.assertEqual( package["scripts"]["icons"], ( - "npm run sync:branding && " - "tauri icon ../docs/images/logo.png " - "--output src-tauri/icons" + "tauri icon ../plugins/vidxp/assets/logo.png " + "--output src-tauri/icons && npm run sync:branding" ), ) sync_script = ( ROOT / "desktop" / "scripts" / "sync-branding.mjs" ).read_text(encoding="utf-8") - self.assertIn("../docs/images/logo.png", sync_script) + self.assertIn("../plugins/vidxp/assets/logo.png", sync_script) + self.assertIn( + "../src/vidxp/assets/artifact_download/vidxp-logo.png", + sync_script, + ) + self.assertIn("src-tauri/icons/128x128.png", sync_script) self.assertIn('resolve(desktopRoot, "public")', sync_script) self.assertIn('resolve(publicDirectory, "icon.png")', sync_script) + self.assertEqual( + (ROOT / "desktop" / "public" / "icon.png").read_bytes(), + icon.read_bytes(), + ) self.assertIn( 'href="/icon.png"', (ROOT / "desktop" / "index.html").read_text( From 6e54176f597f39de25883a68ccc161361d18dc86 Mon Sep 17 00:00:00 2001 From: Talha Date: Fri, 7 Aug 2026 16:02:08 +0500 Subject: [PATCH 08/12] fix(branding): keep docs logo canonical --- MANIFEST.in | 1 + README.md | 2 +- desktop/package.json | 2 +- desktop/scripts/sync-branding.mjs | 6 ++++-- docs/images/logo.png | Bin 0 -> 94054 bytes setup.py | 3 ++- tests/test_packaging.py | 19 ++++++++++++++----- 7 files changed, 23 insertions(+), 10 deletions(-) create mode 100644 docs/images/logo.png diff --git a/MANIFEST.in b/MANIFEST.in index b44dbee..a25a125 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,6 @@ include README.md include LICENSE +include docs/images/logo.png recursive-include src/vidxp/assets/upload_page * recursive-include src/vidxp/assets/artifact_download * recursive-include src/vidxp/assets/mcp_app * diff --git a/README.md b/README.md index 8587c7a..bb979fe 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- VidXP logo + VidXP logo

diff --git a/desktop/package.json b/desktop/package.json index 0c6dc7e..b64ffd2 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -17,7 +17,7 @@ "model-catalog:check": "uv run --frozen python scripts/model-catalog.py --check", "tauri": "tauri", "sync:branding": "node scripts/sync-branding.mjs", - "icons": "tauri icon ../plugins/vidxp/assets/logo.png --output src-tauri/icons && npm run sync:branding", + "icons": "tauri icon ../docs/images/logo.png --output src-tauri/icons && npm run sync:branding", "predesktop:dev": "npm run sync:branding", "desktop:dev": "tauri dev", "predesktop:build": "npm run icons", diff --git a/desktop/scripts/sync-branding.mjs b/desktop/scripts/sync-branding.mjs index c93ab7f..624836f 100644 --- a/desktop/scripts/sync-branding.mjs +++ b/desktop/scripts/sync-branding.mjs @@ -3,9 +3,10 @@ import { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; const desktopRoot = resolve(dirname(fileURLToPath(import.meta.url)), ".."); -const source = resolve(desktopRoot, "../plugins/vidxp/assets/logo.png"); +const source = resolve(desktopRoot, "../docs/images/logo.png"); const publicDirectory = resolve(desktopRoot, "public"); const favicon = resolve(publicDirectory, "icon.png"); +const pluginLogo = resolve(desktopRoot, "../plugins/vidxp/assets/logo.png"); const artifactLogo = resolve( desktopRoot, "../src/vidxp/assets/artifact_download/vidxp-logo.png", @@ -14,5 +15,6 @@ const generatedIcon = resolve(desktopRoot, "src-tauri/icons/128x128.png"); mkdirSync(publicDirectory, { recursive: true }); copyFileSync(source, favicon); +copyFileSync(source, pluginLogo); copyFileSync(generatedIcon, artifactLogo); -console.log("Synced VidXP branding from the plugin logo."); +console.log("Synced VidXP branding from docs/images/logo.png."); diff --git a/docs/images/logo.png b/docs/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f9c9d21139a9238061cbfbfccf0710132b0cd9f4 GIT binary patch literal 94054 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 Date: Fri, 7 Aug 2026 16:08:02 +0500 Subject: [PATCH 09/12] fix(ci): avoid requiring generated desktop icon --- tests/test_packaging.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/test_packaging.py b/tests/test_packaging.py index 3a5452e..c2de7f5 100644 --- a/tests/test_packaging.py +++ b/tests/test_packaging.py @@ -383,10 +383,7 @@ def test_canonical_icon_is_packaged_and_desktop_derivatives_are_wired(self): self.assertIn("src-tauri/icons/128x128.png", sync_script) self.assertIn('resolve(desktopRoot, "public")', sync_script) self.assertIn('resolve(publicDirectory, "icon.png")', sync_script) - self.assertEqual( - (ROOT / "desktop" / "public" / "icon.png").read_bytes(), - icon.read_bytes(), - ) + self.assertIn("copyFileSync(source, favicon)", sync_script) self.assertEqual( (ROOT / "plugins" / "vidxp" / "assets" / "logo.png").read_bytes(), icon.read_bytes(), From 503fab994130e6a0e26a41741c0da988e207d24f Mon Sep 17 00:00:00 2001 From: Talha Date: Fri, 7 Aug 2026 16:23:23 +0500 Subject: [PATCH 10/12] fix(codex): reuse existing VidXP installations --- plugins/vidxp/skills/vidxp-install/SKILL.md | 17 ++++++++++++++++- .../skills/vidxp-install/agents/openai.yaml | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/plugins/vidxp/skills/vidxp-install/SKILL.md b/plugins/vidxp/skills/vidxp-install/SKILL.md index e648216..605c420 100644 --- a/plugins/vidxp/skills/vidxp-install/SKILL.md +++ b/plugins/vidxp/skills/vidxp-install/SKILL.md @@ -5,7 +5,20 @@ description: Install, update, or repair VidXP Desktop or the VidXP CLI and conne # Install VidXP -Help the user choose a local VidXP setup, install only what they approve, verify it, and connect Codex to the resulting local MCP server. +Reuse a working local VidXP setup when the user approves it. Otherwise, help them choose a setup, install only what they approve, verify it, and connect Codex to its local MCP server. + +## Check for an existing installation first + +Before offering a new install, look for every `vidxp` executable available to the local shell. Do not modify any candidate. For each one, run: + +```text + --version + desktop-probe --json --desktop-version codex-plugin --request-id codex-install +``` + +For each successful probe, show the user its executable, version, `data_root`, `repository_root`, and `model_root`. These are the installation's effective paths; existing downloaded models under the reported `model_root` can be reused. Ask the user to confirm whether to reuse that installation and those paths. + +If the user approves reuse, skip installation and upgrades. Use executables from that same environment, preserve the reported paths when registering MCP, and repair a missing surface or dependency only with approval. If no compatible installation is found or the user declines reuse, continue with the setup choice. ## Start with the choice @@ -59,6 +72,8 @@ Ask before starting an installer, changing a tool environment, or downloading mo codex mcp add vidxp -- --repository default ``` + When reusing an installation, also pass its reported `data_root` as `--data-dir` and a non-default `repository_root` as `--index-directory`. If `model_root` is not `/models`, add `--env VIDXP_MODEL_CACHE=` before `vidxp` so Codex launches MCP against the same model cache. + 7. Run `codex mcp get vidxp --json` and start a new Codex task before testing VidXP tools. ## Updates and repairs diff --git a/plugins/vidxp/skills/vidxp-install/agents/openai.yaml b/plugins/vidxp/skills/vidxp-install/agents/openai.yaml index c5ccc97..5ffa3fc 100644 --- a/plugins/vidxp/skills/vidxp-install/agents/openai.yaml +++ b/plugins/vidxp/skills/vidxp-install/agents/openai.yaml @@ -1,4 +1,4 @@ interface: display_name: "Install VidXP" short_description: "Install VidXP Desktop or CLI and connect Codex" - default_prompt: "Use $vidxp-install to ask whether I want VidXP Desktop or CLI, install my choice, register its local MCP server, and verify the setup." + default_prompt: "Use $vidxp-install to reuse an existing VidXP installation if I approve it, or install my chosen setup, then register its local MCP server and verify it." From 9847f7ac6ac561c4d6e7eaefe1bcd98dd08b67cc Mon Sep 17 00:00:00 2001 From: Talha Date: Fri, 7 Aug 2026 16:35:29 +0500 Subject: [PATCH 11/12] fix(packaging): correct Grayhat publisher metadata --- Dockerfile | 1 + LICENSE | 2 +- README.md | 4 +- desktop/THIRD_PARTY_NOTICES.txt | 2 +- desktop/src-tauri/tauri.conf.json | 2 + plugins/vidxp/.codex-plugin/plugin.json | 7 ++-- tests/test_packaging.py | 52 +++++++++++++++++++++++++ 7 files changed, 63 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index b27524f..6722152 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,6 +37,7 @@ FROM python:3.14-slim-trixie AS runtime-base LABEL org.opencontainers.image.title="VidXP" \ org.opencontainers.image.description="Video indexing and search" \ org.opencontainers.image.source="https://github.com/grayhatdevelopers/vidxp" \ + org.opencontainers.image.vendor="Grayhat Developers PVT Ltd" \ org.opencontainers.image.licenses="MIT" RUN apt-get update && apt-get install -y --no-install-recommends \ diff --git a/LICENSE b/LICENSE index b4255c5..5e28035 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2026 Grayhat Developers +Copyright (c) 2026 Grayhat Developers PVT Ltd Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index bb979fe..8faed3e 100644 --- a/README.md +++ b/README.md @@ -246,14 +246,14 @@ Contributions are welcome. Read the ## Credits -Built by Grayhat Developers PVT Ltd. and maintained by the community. +Built by [Grayhat Developers PVT Ltd](https://grayhat.studio/) and maintained by the community. Originally researched by students: - [Abdullah Mansoor](https://github.com/abdullahmansoor321) - [Muhammad Haroon](https://github.com/haroon10725) - [Sarah Jawaid](https://github.com/sarr266) - [Talha Ahmed](https://github.com/talhaahmed1234) -Working with [Dr Shahab Tahzeeb](https://scholar.google.com/citations?user=cryeRB0AAAAJ&hl=en) ([NED University of Engineering and Technology](https://www.neduet.edu.pk/)) and [Saad Bazaz](https://scholar.google.com/citations?user=mrJo09oAAAAJ&hl=en) ([Grayhat](https://grayhat.studio)). +Working with [Dr Shahab Tahzeeb](https://scholar.google.com/citations?user=cryeRB0AAAAJ&hl=en) ([NED University of Engineering and Technology](https://www.neduet.edu.pk/)) and [Saad Bazaz](https://scholar.google.com/citations?user=mrJo09oAAAAJ&hl=en) ([Grayhat Studio](https://grayhat.studio/)). Email: info@grayhat.studio diff --git a/desktop/THIRD_PARTY_NOTICES.txt b/desktop/THIRD_PARTY_NOTICES.txt index de97bba..be6f47e 100644 --- a/desktop/THIRD_PARTY_NOTICES.txt +++ b/desktop/THIRD_PARTY_NOTICES.txt @@ -9,7 +9,7 @@ VidXP Desktop and VidXP | MIT | https://github.com/grayhatdevelopers/vidxp MIT License -Copyright (c) 2026 Grayhat Developers +Copyright (c) 2026 Grayhat Developers PVT Ltd Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/desktop/src-tauri/tauri.conf.json b/desktop/src-tauri/tauri.conf.json index f328a1e..e4d9a19 100644 --- a/desktop/src-tauri/tauri.conf.json +++ b/desktop/src-tauri/tauri.conf.json @@ -34,6 +34,8 @@ "bundle": { "active": true, "targets": "all", + "publisher": "Grayhat Developers PVT Ltd", + "copyright": "Copyright © 2026 Grayhat Developers PVT Ltd", "resources": [ "../THIRD_PARTY_NOTICES.txt", "../../LICENSE" diff --git a/plugins/vidxp/.codex-plugin/plugin.json b/plugins/vidxp/.codex-plugin/plugin.json index d025467..69ff243 100644 --- a/plugins/vidxp/.codex-plugin/plugin.json +++ b/plugins/vidxp/.codex-plugin/plugin.json @@ -3,7 +3,8 @@ "version": "0.4.0-b.3", "description": "Ingest, index, search, and inspect video evidence with VidXP.", "author": { - "name": "Grayhat" + "name": "Grayhat Developers PVT Ltd", + "url": "https://grayhat.studio/" }, "homepage": "https://github.com/grayhatdevelopers/vidxp", "repository": "https://github.com/grayhatdevelopers/vidxp", @@ -14,10 +15,10 @@ "displayName": "VidXP", "shortDescription": "Search video and inspect grounded evidence.", "longDescription": "Use VidXP to ingest and index videos, search dialogue and scenes, answer grounded questions, and review evidence boards, frames, and clips.", - "developerName": "Grayhat", + "developerName": "Grayhat Studio", "category": "Productivity", "capabilities": ["Read", "Write", "Interactive"], - "websiteURL": "https://github.com/grayhatdevelopers/vidxp", + "websiteURL": "https://grayhat.studio/", "defaultPrompt": [ "Find and verify moments in my indexed videos.", "Set up VidXP on this computer.", diff --git a/tests/test_packaging.py b/tests/test_packaging.py index c2de7f5..0272b94 100644 --- a/tests/test_packaging.py +++ b/tests/test_packaging.py @@ -20,6 +20,58 @@ class PackagingTests(unittest.TestCase): + def test_publisher_metadata_keeps_company_and_project_links_distinct(self): + company_name = "Grayhat Developers PVT Ltd" + developer_name = "Grayhat Studio" + company_url = "https://grayhat.studio/" + project_url = "https://github.com/grayhatdevelopers/vidxp" + + project = tomllib.loads( + (ROOT / "pyproject.toml").read_text(encoding="utf-8") + )["project"] + self.assertNotIn( + company_name, + {author["name"] for author in project["authors"]}, + ) + self.assertEqual(project["urls"]["Homepage"], project_url) + self.assertEqual(project["urls"]["Repository"], project_url) + + manifest = json.loads( + ( + ROOT + / "plugins" + / "vidxp" + / ".codex-plugin" + / "plugin.json" + ).read_text(encoding="utf-8") + ) + self.assertEqual(manifest["author"]["name"], company_name) + self.assertEqual(manifest["author"]["url"], company_url) + self.assertEqual(manifest["interface"]["developerName"], developer_name) + self.assertEqual(manifest["interface"]["websiteURL"], company_url) + self.assertEqual(manifest["homepage"], project_url) + self.assertEqual(manifest["repository"], project_url) + + tauri = json.loads( + (ROOT / "desktop" / "src-tauri" / "tauri.conf.json").read_text( + encoding="utf-8" + ) + ) + self.assertEqual(tauri["bundle"]["publisher"], company_name) + self.assertIn(company_name, tauri["bundle"]["copyright"]) + self.assertIn( + f'org.opencontainers.image.vendor="{company_name}"', + (ROOT / "Dockerfile").read_text(encoding="utf-8"), + ) + self.assertIn( + f"[{company_name}]({company_url})", + (ROOT / "README.md").read_text(encoding="utf-8"), + ) + self.assertIn( + f"Copyright (c) 2026 {company_name}", + (ROOT / "LICENSE").read_text(encoding="utf-8"), + ) + def test_wheel_contains_mcp_app_and_canonical_plugin_bundle(self): with TemporaryDirectory() as directory: subprocess.run( From e31d16cb29144ff47831287763caa47cb47043a6 Mon Sep 17 00:00:00 2001 From: Talha Date: Fri, 7 Aug 2026 16:42:05 +0500 Subject: [PATCH 12/12] fix(branding): use Grayhat friendly display name --- README.md | 4 +- plugins/vidxp/.codex-plugin/plugin.json | 4 +- tests/test_packaging.py | 52 ------------------------- 3 files changed, 4 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index 8faed3e..609d6f5 100644 --- a/README.md +++ b/README.md @@ -246,14 +246,14 @@ Contributions are welcome. Read the ## Credits -Built by [Grayhat Developers PVT Ltd](https://grayhat.studio/) and maintained by the community. +Built by [Grayhat](https://grayhat.studio/) and maintained by the community. Originally researched by students: - [Abdullah Mansoor](https://github.com/abdullahmansoor321) - [Muhammad Haroon](https://github.com/haroon10725) - [Sarah Jawaid](https://github.com/sarr266) - [Talha Ahmed](https://github.com/talhaahmed1234) -Working with [Dr Shahab Tahzeeb](https://scholar.google.com/citations?user=cryeRB0AAAAJ&hl=en) ([NED University of Engineering and Technology](https://www.neduet.edu.pk/)) and [Saad Bazaz](https://scholar.google.com/citations?user=mrJo09oAAAAJ&hl=en) ([Grayhat Studio](https://grayhat.studio/)). +Working with [Dr Shahab Tahzeeb](https://scholar.google.com/citations?user=cryeRB0AAAAJ&hl=en) ([NED University of Engineering and Technology](https://www.neduet.edu.pk/)) and [Saad Bazaz](https://scholar.google.com/citations?user=mrJo09oAAAAJ&hl=en) ([Grayhat](https://grayhat.studio/)). Email: info@grayhat.studio diff --git a/plugins/vidxp/.codex-plugin/plugin.json b/plugins/vidxp/.codex-plugin/plugin.json index 69ff243..e845b81 100644 --- a/plugins/vidxp/.codex-plugin/plugin.json +++ b/plugins/vidxp/.codex-plugin/plugin.json @@ -3,7 +3,7 @@ "version": "0.4.0-b.3", "description": "Ingest, index, search, and inspect video evidence with VidXP.", "author": { - "name": "Grayhat Developers PVT Ltd", + "name": "Grayhat", "url": "https://grayhat.studio/" }, "homepage": "https://github.com/grayhatdevelopers/vidxp", @@ -15,7 +15,7 @@ "displayName": "VidXP", "shortDescription": "Search video and inspect grounded evidence.", "longDescription": "Use VidXP to ingest and index videos, search dialogue and scenes, answer grounded questions, and review evidence boards, frames, and clips.", - "developerName": "Grayhat Studio", + "developerName": "Grayhat", "category": "Productivity", "capabilities": ["Read", "Write", "Interactive"], "websiteURL": "https://grayhat.studio/", diff --git a/tests/test_packaging.py b/tests/test_packaging.py index 0272b94..c2de7f5 100644 --- a/tests/test_packaging.py +++ b/tests/test_packaging.py @@ -20,58 +20,6 @@ class PackagingTests(unittest.TestCase): - def test_publisher_metadata_keeps_company_and_project_links_distinct(self): - company_name = "Grayhat Developers PVT Ltd" - developer_name = "Grayhat Studio" - company_url = "https://grayhat.studio/" - project_url = "https://github.com/grayhatdevelopers/vidxp" - - project = tomllib.loads( - (ROOT / "pyproject.toml").read_text(encoding="utf-8") - )["project"] - self.assertNotIn( - company_name, - {author["name"] for author in project["authors"]}, - ) - self.assertEqual(project["urls"]["Homepage"], project_url) - self.assertEqual(project["urls"]["Repository"], project_url) - - manifest = json.loads( - ( - ROOT - / "plugins" - / "vidxp" - / ".codex-plugin" - / "plugin.json" - ).read_text(encoding="utf-8") - ) - self.assertEqual(manifest["author"]["name"], company_name) - self.assertEqual(manifest["author"]["url"], company_url) - self.assertEqual(manifest["interface"]["developerName"], developer_name) - self.assertEqual(manifest["interface"]["websiteURL"], company_url) - self.assertEqual(manifest["homepage"], project_url) - self.assertEqual(manifest["repository"], project_url) - - tauri = json.loads( - (ROOT / "desktop" / "src-tauri" / "tauri.conf.json").read_text( - encoding="utf-8" - ) - ) - self.assertEqual(tauri["bundle"]["publisher"], company_name) - self.assertIn(company_name, tauri["bundle"]["copyright"]) - self.assertIn( - f'org.opencontainers.image.vendor="{company_name}"', - (ROOT / "Dockerfile").read_text(encoding="utf-8"), - ) - self.assertIn( - f"[{company_name}]({company_url})", - (ROOT / "README.md").read_text(encoding="utf-8"), - ) - self.assertIn( - f"Copyright (c) 2026 {company_name}", - (ROOT / "LICENSE").read_text(encoding="utf-8"), - ) - def test_wheel_contains_mcp_app_and_canonical_plugin_bundle(self): with TemporaryDirectory() as directory: subprocess.run(