From 4be23616308ed1901c22f410474b560803e21baf Mon Sep 17 00:00:00 2001 From: Galih Muhammad <8222801+galliani@users.noreply.github.com> Date: Sat, 28 Jun 2025 09:55:41 +0700 Subject: [PATCH 01/21] improved the readme, added diagrams --- README.md | 200 ++++++++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 111 insertions(+), 91 deletions(-) diff --git a/README.md b/README.md index ff0b204..c71a056 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,19 @@ # ContextMax  -> Stop AI Guesswork. Make Your LLM Finally Understand Your Complex, Mature Codebase. +> Tell your LLM exactly what parts of your codebase matter for each task. -ContextMax is a **free, browser-based, privacy-first** tool that empowers developers to create, manage, and share highly-specific, reusable context sets for Large Language Models (LLMs). Guide your AI with pinpoint accuracy to get more relevant, consistent, and architecturally-aware assistance on your most complex projects. +ContextMax is a browser-based tool that lets you create context sets for LLMs. Define which files, functions, and workflows are relevant for specific tasks. Get assistance from the embedded LLM to assist in your search. Your code never leaves your browser. π **[Try ContextMax Live](https://curator.contextmax.dev)** **[or run it locally using npx](https://npmjs.com/package/contextmax)** | π **[Documentation](docs/)** ## π Quick Start -### Option 1: Using npm package (Recommended) +### [QUICKEST] Option 1: Use the (free, no signup-required) hosted version + +Go to the [curation tool](https://curator.contextmax.dev). + +### Option 2: Using the npm package (Recommended) ```bash # Install and run directly @@ -21,7 +25,9 @@ npm install -g contextmax contextmax ``` -### Option 2: Development setup +This will automatically run the tool locally and open it on your browser. + +### Option 3: Development setup ```bash # Clone and install @@ -35,53 +41,99 @@ npm run dev Open http://localhost:3000 in Chrome/Edge and start creating context sets! -### [QUICKEST] Option 3: Use the hosted version -Go to the [curator app](https://curator.contextmax.dev). +## What is ContextMax + +ContextMax helps you create context sets - JSON files that tell your LLM which parts of your codebase to focus on. Instead of dumping your entire project into an LLM, you specify: +- Which files are relevant +- Which specific functions matter +- How different parts connect (workflows) + +Think of it as creating a map for your LLM to navigate your codebase. -## The Problem: Is Your LLM Lost in Your Code? +## Why ContextMax -Even the most powerful LLMs can struggle when faced with large, mature, or domain-specific codebases. Without deep, specific knowledge, AI assistants often provide: +LLMs often fail on real codebases because they: +- Generate code that ignores your existing patterns +- Miss critical dependencies and relationships +- Suggest solutions that don't fit your architecture +- Force you to repeatedly explain the same context -- **Generic**, unhelpful suggestions that miss the nuances of your architecture. -- **Inconsistent code** that doesn't follow your established patterns. -- Responses that **require you to waste valuable time re-explaining context** or correcting mistakes. +Even when LLMs succeed, they waste time and tokens searching through your entire codebase, reading irrelevant files to piece together context. With ContextMax, your LLM starts with the exact files and functions it needs, understands the workflow from entry point to completion, and produces accurate results faster with fewer tokens. -Your team's expertise and your project's architectural integrity are your most valuable assets. Your AI tools should respect and leverage them, not ignore them. +ContextMax solves this by letting you define context once and reuse it. Your team gets consistent, accurate AI assistance that actually understands your code structure. -## The Solution: You Conduct the AI +### Without Context Sets + +```mermaid +graph TD + A[Prompt: Fix login bug] --> B[LLM searches codebase] + B --> C[Grep through all files] + C --> D[Read many files] + D --> E[Infer relationships] + E --> F[Assume architecture] + F --> G[Generate code] + G --> H{Code works?} + H -->|No| I[User provides more context] + I --> B + H -->|Yes| J[Done - 10k+ tokens used] +``` + +### With Manual File Lists + +```mermaid +graph TD + A[User lists: login.vue, auth.controller.ts, user.model.ts] --> B[LLM reads files] + B --> C[Reads complete files - 3k tokens] + C --> D[No function targeting] + D --> E[Identifies relevant functions] + E --> F[Missing: middleware, validators, utils] + F --> G[No workflow information] + G --> H[Generate code] + H --> I[User adds missing files] + I --> J[Include more context] + J --> B +``` -ContextMax puts your project experts in control. It allows your most knowledgeable developers to visually create "Context Sets"βprecise instruction packets that act as a guidebook for your AI assistant. +### With Context Sets -By defining exactly what files, specific line ranges, and operational workflows are relevant for a given task, you transform your LLM from a generalist into a specialized, highly effective partner for your unique codebase. +```mermaid +graph TD + A[Prompt: Fix login bug] --> B[LLM loads context:UserAuth_Flow] + B --> C[Read 5 specified files] + C --> D[Target validatePassword function] + D --> E[Follow workflow: login β validatePassword β generateToken] + E --> F[Generate code using existing patterns] + F --> G[Done - 2k tokens used] +``` -## β¨ Key Features +## Key Features -- π¨ **Visual Context Builder**: Intuitively create and manage context-sets.json files without writing JSON by hand. -- π **Privacy First**: Runs entirely in your browser using the File System Access API. Your code is never uploaded and never leaves your machine. -- π― **Pinpoint Accuracy**: Go beyond whole-file context. Select multiple, non-contiguous line ranges across different files to give the LLM surgical focus. -- π **Workflow Definition**: Explain complex processes by mapping out the sequence of file interactions, helping the AI understand data flow and interdependencies. -- π¦ **Reusable & Shareable Context**: The output is a clean context-sets.json file that you can commit to your repository. This allows your entire team to provide consistent, expert-level context to their LLMs. -- ποΈ **Auto-Generated Indexes**: Automatically creates a filesManifest for robust file referencing and a fileContextsIndex to help other tools understand how files and context sets relate. -- π€ **Built-in AI Models**: Two local LLMs for enhanced code understanding without external API calls. -- β‘ **Performance Optimized**: IndexedDB caching and WebGPU acceleration for seamless experience. +- **Visual Builder**: Create context sets through a UI instead of editing JSON +- **100% Private**: Everything runs in your browser. No servers, no uploads +- **Function-Level Context**: Point to specific functions, not just files +- **Workflow Mapping**: Show how files and functions connect in your data flow +- **Version Control Ready**: Output is a simple JSON file you can commit +- **Team Sharing**: Everyone uses the same context definitions +- **Local AI**: Built-in embeddings model for smart file suggestions +- **Fast**: Uses IndexedDB caching and WebGPU when available -## π How It Works +## How It Works -1. **Load Your Project**: Open the ContextMax web app and select your local project folder. Your code stays local. -2. **Define Context Sets**: Visually create named sets (e.g., "UserAuth_Flow"). Add relevant files to each set, implicitly populating a central filesManifest. -3. **Refine with Precision**: For each file in a set, specify whether to include the whole file or pinpoint exact line ranges. -4. **Map Workflows**: Define step-by-step workflows to explain how different code parts work together. -5. **Export & Use**: Download your context-sets.json file. Use it with your favorite IDE and LLM (e.g., via .cursorrules in Cursor) to provide powerful, curated context in your prompts. +1. **Open your project folder** - Uses File System Access API (Chrome/Edge) +2. **Create context sets** - Name them based on features or workflows (e.g., "UserAuth_Flow") +3. **Add files and functions** - Pick whole files or specific functions +4. **Define workflows** - Show how code flows from entry point to completion +5. **Export context-sets.json** - Use with Cursor, Continue, or any LLM tool -## π The context-sets.json Format +## The context-sets.json Format -The core output of ContextMax is a single, version-controllable JSON file: +ContextMax generates a single JSON file you can commit to your repo: ```json { @@ -131,57 +183,44 @@ The core output of ContextMax is a single, version-controllable JSON file: ``` -## π οΈ Tech Stack - -- **Framework**: Nuxt.js 3 (Vue.js 3) with TypeScript -- **Styling**: Tailwind CSS v4, Reka UI, shadcn-nuxt -- **AI/ML**: @huggingface/transformers with WebGPU acceleration -- **Code Parsing**: using Regex -- **Storage**: File System Access API, OPFS, IndexedDB -- **Testing**: Vitest with coverage and badge generation -- **Package Manager**: npm +## Tech Stack -## π€ Local AI Model +- Nuxt.js 3 + Vue 3 + TypeScript +- Tailwind CSS v4, Reka UI, shadcn-nuxt +- @huggingface/transformers (WebGPU) +- Regex-based code parsing +- File System Access API, OPFS, IndexedDB +- Vitest -ContextMax includes a powerful LLM model that runs entirely in your browser: +## Local AI Models -### Embeddings Model: `jinaai/jina-embeddings-v2-base-code` (~300MB) -- **Purpose**: Semantic search, code understanding, and intelligent file classification -- **Use Case**: Powers the smart search functionality to find relevant files and code sections based on meaning rather than just keywords. Also classifies files into categories (entry-point, core-logic, helper, config) using embedding similarity. -- **Technology**: Feature extraction using WebGPU acceleration -- **Benefits**: Helps you discover related code patterns and dependencies you might miss with traditional text search, while providing intelligent file categorization without needing a separate classification model +ContextMax runs AI models directly in your browser: -#### Using the Model +### Embeddings: `jinaai/jina-embeddings-v2-base-code` (~300MB) +- Semantic code search (finds code by meaning, not just text) +- Auto-classifies files (entry-point, core-logic, helper, config) +- Suggests related files and patterns +- Uses WebGPU for speed -The model is automatically downloaded and cached on first use. You can access it programmatically: +Models download automatically on first use. For programmatic access: ```typescript -// Access the embeddings model (for semantic search and classification) const { getModel } = useLLMLoader() const embeddingsModel = await getModel('embeddings') const embeddings = await embeddingsModel('your code snippet') - -// Check model status -const { getModelState } = useLLMLoader() -const embeddingsReady = getModelState('embeddings').value.status === 'ready' - -// Initialize the model -const { initializeModel } = useLLMLoader() -await initializeModel('embeddings') ``` -**Privacy**: The model runs completely offline in your browser. No code or data is ever sent to external servers. +All processing happens locally. No external API calls. -## π» Development +## Development -### Prerequisites +### Requirements -- Node.js v18.x or later -- Chrome/Edge browser (for File System Access API) -- npm (comes with Node.js) +- Node.js 18+ +- Chrome/Edge (for File System Access API) -### Available Commands +### Commands ```bash # Development @@ -206,34 +245,15 @@ ContextMax requires browsers that support: - IndexedDB and OPFS -## π€ Contributing - -We believe in empowering developers and are excited to build this tool with the community. Contributions are welcome! - -### Ways to Contribute - -- π **Report Bugs**: Use GitHub Issues with detailed reproduction steps -- π‘ **Suggest Features**: Open a discussion in GitHub Discussions -- π **Improve Documentation**: PRs for docs are always appreciated -- π§ **Submit Code**: Follow our coding standards and include tests - -### Development Workflow - -1. Fork the repository -2. Create a feature branch (`git checkout -b feature/amazing-feature`) -3. Commit your changes (`git commit -m 'Add amazing feature'`) -4. Push to the branch (`git push origin feature/amazing-feature`) -5. Open a Pull Request +## Contributing -Please ensure all tests pass and maintain the coverage. +We welcome contributions from anyone. Please report bugs via GitHub Issues with reproduction steps. -## π License +## License -This project is licensed under the Mozilla Public License 2.0. See the [LICENSE](LICENSE) file for details. +Mozilla Public License 2.0 - see [LICENSE](LICENSE) --- -
- Made with β€οΈ by Galih from 51 New York -
\ No newline at end of file +Made by [Galih](https://github.com/galliani) from [51 New York](https://51newyork.com) \ No newline at end of file diff --git a/package.json b/package.json index b19ae49..6c6308b 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "bugs": { "url": "https://github.com/galliani/contextmax/issues" }, - "homepage": "https://github.com/galliani/contextmax#readme", + "homepage": "https://contextmax.dev", "scripts": { "build": "nuxt build", "dev": "nuxt dev --inspect", From a0974358ffdf5ba469aba940b02221b39009b3af Mon Sep 17 00:00:00 2001 From: Galih Muhammad <8222801+galliani@users.noreply.github.com> Date: Sat, 28 Jun 2025 11:45:18 +0700 Subject: [PATCH 02/21] added videos and images, one left placeholder for curation demo --- README.md | 31 +++++++++++++++++++++---------- static/images/MainInterface.png | Bin 0 -> 596116 bytes 2 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 static/images/MainInterface.png diff --git a/README.md b/README.md index c71a056..b2b3a63 100644 --- a/README.md +++ b/README.md @@ -4,25 +4,23 @@ ContextMax is a browser-based tool that lets you create context sets for LLMs. Define which files, functions, and workflows are relevant for specific tasks. Get assistance from the embedded LLM to assist in your search. Your code never leaves your browser. -π **[Try ContextMax Live](https://curator.contextmax.dev)** **[or run it locally using npx](https://npmjs.com/package/contextmax)** | π **[Documentation](docs/)** - + +**πΉ [Watch: Creating Context Sets Demo](REPLACE_WITH_DEMO_VIDEO_URL)** ## π Quick Start -### [QUICKEST] Option 1: Use the (free, no signup-required) hosted version +### [QUICKEST] Option 1: Use the hosted version Go to the [curation tool](https://curator.contextmax.dev). -### Option 2: Using the npm package (Recommended) +**Privacy Note**: Even on the hosted version, your code stays in your browser. No files are uploaded to our servers. + +### Option 2: Run it locally using the npm package (Recommended) ```bash -# Install and run directly npx contextmax -# by default it runs on port 3000, but you can specify it like this: `PORT=3005 npx contextmax` - -# Or install globally -npm install -g contextmax -contextmax +# by default it runs on port 3000, but you can also specify the port like this: +PORT=3005 npx contextmax ``` This will automatically run the tool locally and open it on your browser. @@ -51,6 +49,8 @@ ContextMax helps you create context sets - JSON files that tell your LLM which p Think of it as creating a map for your LLM to navigate your codebase. + + ## Why ContextMax @@ -108,6 +108,7 @@ graph TD F --> G[Done - 2k tokens used] ``` +**πΉ [Watch: LLM Performance with vs without Context Sets](https://youtu.be/8T8y31sKncY)** ## Key Features @@ -130,6 +131,16 @@ graph TD 4. **Define workflows** - Show how code flows from entry point to completion 5. **Export context-sets.json** - Use with Cursor, Continue, or any LLM tool + +### Visual Walkthrough +| Step | Screenshot | +|------|------------| +| 1. Project Loading |  | +| 2. Context Creation |  | +| 3. Function Selection |  | +| 4. Workflow Definition |  | +| 5. Export JSON |  | + ## The context-sets.json Format diff --git a/static/images/MainInterface.png b/static/images/MainInterface.png new file mode 100644 index 0000000000000000000000000000000000000000..1ebd6bb7d5a09568eaceae4e7516bf0b75cd8c65 GIT binary patch literal 596116 zcmZ^~1wdT8)-Z}Y#i7OBrMSDhyVFwK-QArcrMO#hcW7}a6nBT>R@~p_ocrAa=YMzB z%6kA&fv3ln>$PK|zuy(Idd+}sgyl+qtS-zu`sD6hxSqwuaDj9eh%PSQkRROGp ze3B;O4D6*Oks)wD=MyR`GvDr=LXMQdu7|IazS7zk3ZE0;i`)bS1@+5>eP)Le-}sf; z0jdWE3ZwG@l2X*rENk>`SL|#d%7}D9Q%K3)i6Y0KPx3=>>{6+% |$$|ZvK7j-jz=j7E zatL4XGZgnfHY`S8p)XQSxcR>{AHbB5$o}H&44Bc5vOxc(jYzP7HX<=#mms{Th&_SP z(415FgDyATq U$;r; k>Q^O0J+0K z`igZssJ8ZU!rtxen|{UPj#UOYuMl`Cj+{W>wl)$?EzOA#B%9E7pO| 0(- z8j24HLJUbg0q%vU0mp+T5g(|OFD1^mtY>S3n2v7r%0gbsn@|cyLqkL9&nDIG!yP+1 zI{I5O (VFrpNgnY`{#*!JMX z!~XT8q8Q+cD22oPU#Y vBLKd!MgN{pa+On4zK~J5LDxU%aq<<^|jC#_UTX!lHd0 z_8d3&4-v1XMO?P*zQ3#_L{5ewHJstXsjjU2)P@aFX16<-MGqU{i`;s9=k__X0?W&U z$nahxKDH?cG3E5>SkRAl_M!I)yz$ZRbO(1Gdbd$w2#C>7A`r>%{R61TWJ}z}1Z(GP z9y7w$-L*9|;y+Yxo onpPfxkxA7ZlJAY+wI>`N}t7Y;5)87u`R8@N$KVr@X=z z(2Wyiu rIT;UG@ric$(m-5269P$~vGMlS^>bmNxIe#o8sRIvfLIOifqkXHTrVSsZfP)E zo2cYu#Kc#=+Ydsx^ZR%bZJ8z7@Xe}-0AV`{vRrvPpPd7>qXWD)6LZ5Sl=22gt0)^w z#g!s5LWuHe-pbCY6?W_TxgxF)jg4X$k_rEs{Dc9G+gS@&dS%)IqMh@DU*q#_$&+Uo zRMuu+dmbQq{6c78X52Rt$;N0$i3<*}1s%*zansz|tgk#B^Ze&%L}5M>T>fRKlnO*V zDG`z98-$Z&>vGte#h{4Nm }K4)zy@ cK;&2z3v+4+aL*(bv}A7}QZn7qG>)0Fq~0%+4Slfqyj#tkVIJ%*J89aL-H5tiyvk zFgw^wC1M_xoo@MOXS_s|FxD65%a*l~3^e9soZI5cb^_6=90%5=r=;^VkV87rXAs>pwXEyLQuQO^s)pt%Wqx?|l=SdkF ziz=zq)ZAQ-&3WKM6D9`_jIS>vm|jMvrp}%TEtl30Sy#`>T6 v{u$6nSfrTMnHFJ}$^=Z;`yrZ%z zA%1UsmBvPLNpqq0<;;z3*ud;*s&pm0%yUv3o6+}qVyG`v8o#;1Q z9B4qmFx;RO71rp;s|1$_im^<^VN{x06eK>FjYgn;C&=#`YE2B!vEUFQ=h$#ExWvfI zkQ)mmc4>Wv(7+u3opPy?2k4&dfGPrgVe0~5WCn(2lFrW2o41T?iyEkuDruN7BC!Gy zNoD=>^IYeP_b294C5iX8oP_6&P)5wggEFe6s?5l_Z`^OssqnbnMess-|3iByAwUHQ z41L^3X66P`3!FX?`+5#p l&|BO%seKHE`F3Ga~Rv+SEu5_5ivD5~&vY z9DpE@Uhqihw@3-gSt&tqJe|TszNcfW*E_3UA`5Rx{+!sVOBf=85h6=N94)rVj})i* zxSwPGOdVSj4)Oj<|IuIabD>glxvmh@{^9XrRREXEUJ+I_$p4WB^Guo$-RWkP0ZM#+ zo$flPVHy=ow=!5eU&iM4{=0y>C%I3U^&icRGO|R&8DUry@uWg?1N^}>5*`vqweJbP zoM3u*h_6HMoNq;>cCFminnbP$cR`Pe*Dis&qlx)l`d(%scW#5 wvkS=ko)QlB zg72<=4Ls&(KjROgx$FWz1bqPA@cWe3;~IL3yg}3}92xQ!spslfs5d?bXW?3iN;`5R zluu%h+S_NRsZhS?hEU*nc@FF5LBR(dS7d;y=C?mhr@a$nt&8}F9g}j;W&cvw-rkuh zNd)JOUnwRe+uwGS;|tiiA_yZWmZ9MQm^uxN4%!J>Z!sA%n0LG0<~~WcKVzLIg#$dd zl(~@<=p!GalL9V BrEM7j vIg<+VU~1`Foh)DmA?=*Q4xl*$|C$DWc5e3=YLh z_YVSQ=jZEa8wHOci1*Ux2oMsXR903Jb9+GBKV0(>rDKkeLBWUwePM {NGGezmsps;{5)ag^L#{7B=S{;#I{a8&m?97 z%I{jZb94snP5J4zJ=yJ7a!fx9sX~>_n+y1x+wWT(W9;s)*T+s^!FW0t6 8^Y;X|7+b1vGoZww>YTmFruYcq>&0m;wgWJpLZAJj3{2n}Kd zR6;osF>zzSbNwYzxS8Q z8vrt)d06;`c*oC~mt%U(oN`+u)W+MY#*5Ov D51}u7km-`K*0%iN)F)?X?L{*7s*1l0|MF>c>`@8^cikJdqE??-$K8CBk~E? zRw60h9}JwxR@G~wOHSi2j??yq$(!Z)hcWt yerYG@VNLO?($E%P+>A5KuHHfE=5 z)tOK1)mfb9@U=b(0G{CDJCW^_u>ar2?k9l^%)O{5sDf&M-gk-iQjx;|0VR3p&=*rV z;wl&&I$GL+-svPCtn1M2pvC4>Zcc9sK(9AV`JdsfIO7`w+)fT(JHqM>Uqk2_kuz2V zir1^aF#$qJRC{2#jIYo4IWyCS1s6n={3Dnm(Qg@3&%ZF=AIlXlmP({{?}tLd6&Xrq zn1V-oSNU<5$^7K*xMcPCUe@b4gIA?R&Pug$)~{0)2^Q>G5QK7Qm34I_{674*zmEwh z_TOPalsoe{2o}(CBK)~oKN7Ri(Nho*@a?+(0&`C$tY-eJhzv*x$m7h=!5j%ct0zkm `78r>(<9Hn!_tDI(IC*+%D)H0EmvXFfoRb9`ry|dwKh1*khbhdT zVoUeMn+T?4B4KqXA~OX@#G-#q3(hsVu7OQGmL*kN*jjz~AbfSipJ1iM?$;>CUant= zNvFLBHFS6ar!!&8J(9{mu+<;;`N^aZm(wAh<7i*KVrMGm2|)Ze--XPvMlcwc^MTA< zQ(9~U@|Ii*Pn>QcuaKD8mBZGc?BRUF%+bEJ 4q3PM{SKl4%hCs+82Wx3xvM z*s0L($P&JD3I0k>9GAkhoi(WHlh55?^Q-5Kf>=o;VUtR?9&T$eJ?0I;qHu*?@F6~l zLsFVbv6Sp1ZL3@|eOkhW#FO-=y)g?IAlo%QDJi^>*Uw51qvNnSD38~2&gOm?*mw~& zB;D+=kDbm@zhc_F6K*=*N`gVBr-j+!y5`va Q+C%; UQl$(v$>h9vXm o4InsGd z<2XOdn{py;(#t72bRe2(=*!{F0svxVB8&fTpoDmjU(_3rcmGQZMn_kVUmb?5xvs8` z^ f;Fr}M5uMK zQBxZTEi%+9u4$%&e68lM@>*};$4*J^OrMsm6rH|84TaJ9S!_R*<(VKcjK}f%y!)p9 z`+$s6I@(BV1M!nk7QSDY&r+fxl1*lws?S3<76A^ZU6ou_7g1}U450H3$174F&6M(C z8JaaD8QM#in!ThiayEj_u!;m947w~tXrTNoL *z9}v8ekb)8M zO_6p0fCGIFz~AFjwh2B(p#fS9=rQFk!FU%d?9=z_^e3tZxVu##(tY$j6*%LJ_$P*C z#1B8lTYKPn&(2IysIrS%*2zl39ayec6Z~g$0PQ}X3_)9Hhs$kU wzaiVeF#2RsWoMsADDpB($ET2i;P6enf*lT z+G@X5tv6qU=|ByQECd{a4#q)erZy8Q_ww>Io1ZMMH60Vmoq$bEO`WLPpqP_o5$``Z zzaINgqR>w3b$2PtV11d^G}$bR(`M^(#h_B4B6)j#8o)+hlJXX<(RqJ9ky^E6*t(Ri zwoi?XT<(j6!>3Ud=Zoq6X`3u;R*StL_O1QJW+#gh^^SHu9Sw-`j>p?nbXoYBjT8Fs zkS>FplG&e9nO*Sf)^CG!?jJf7o0yCdxTx8!7ZWh)9=ShaHm&5@ec 0lC@-i`~Gur zWo1-BCGR`x*G|<=WH4EM0vl($i*WSRok83gi1OT!i*YnCZB0$(ASu>j`??iUC?Y~k zq4n-&Qb)g1 TC+7U&6tEq77A>p|5wCqE3mka>%(H-T_=cJf&Ovl zK|H?UhMpn5_Mb04o9|CNZ!$Bl@4L56*01j;IU2 `A oc|zfyfn#U8>!G;=^v0lfl~@ zf-rrQOs|~uxKJnEQqjU_bPc0*-!NZQYP*)>xcZAIz-Zy=;(?${w??V~CfuAH7^m%V z62|UPvs%Q-v&!M=(TiHYK2om{Mk0y!-BQz)@9?mU>Zy0TcLJTor(2T&rjiS7I@Pq< zo0QHvi-sc>yK#{=&o$V$Os+6=+P5)dv^huH^g21{RPp=ya}6#8bygEn7}gdR(%YO~ zC6mP}YewRY3@%T(sd^mGq2W2~7p+vqHI#fR*`V{=I4&ZBk&gUQw2}A@k8X&f@J^@R z1QbSZhInMia;{`@IqP0%zf!PryP8XtZz7t`;y!Zl+hRvGa#YNGqyo&uJ{g@&I4NSeF0-pyw_DWuf_+`fHIZEV$1){_q9+1}u8vMG&I_Kwu zzgZm^>8PMCq?MJG?Oul|CvZytmQWRyX;@BLB16KRHK|RjKb)T!)~t!_4Pg~(j8ZGs zi6c 9`wUA(8utJOR+>1P?r04^r7R^+J^wS&O~apJZ_$ckNx?w3(hPS_3aBMV ic*;{%>z2N0 z!fTz(2&sOlRxWh5YPNk$tCs#T3wiA`Otnc|?ywtAwlhI76RS82 j5)$oMt(!=rzQ`T9(R{qq-hKKXY4 zGztdDN{8#3!kC>^KRjTGgGQ}cKwPF(AA7W<+R;xO2zLXIo}bqA=W|pUUYqwtBoIA{ z?v9(}Bv~~}m?*Bjr^XD5+V69zHG5z>%+{_wk{XCF%Bx9dJsx?f%4T1*}HzgW3>gD=k zZo@z}16Z3~?M$A61AB5Jr;@8*nO#8lel;aqGJgoZ8gFh(rq>RFL#ORM+`vxf^$P6v zE?>OaO-4vD8!i9oxci-o&ZCNG-e_Qa>!v5d@eg)WOG{P2JujEfZw@!t#?tZd^kGeV zTW!nED-XR|_n@^=K8o#0m2yv3snNdLni`X #IU^D@H$~o0j!T`{v~-#!_Q#s %P{1tOekpjz}gq)q54?k&9w&g9ewACk9 za=V)n$|vK;O@`&`FR5;Lbav8*z`49WV$7W8*CSLZev|n?ty7YL(Bizt-|YD*f;xkM zQt|VpazBx#Ieq|`+1Vh`=GtS%cdf$ur6*!|8f|y`CtSRxme4;K<&ya{4LOs$_5=1K zw(0blQ@9h0i{T}cM}nFTNjaOtzkd#KpPw9=ae29t#Z(EFxKnYn)ejWwOgSg83F}Gi zrp19ZMQ7^vIL*>Dh3@CHOj@z|$CRZc8XZrYZGNB8a;b8#%_+buP#n)Aul8Q|>~Ryn z0Q0lBM`;AseDUQgtwbH%){B*K-9um1D|EL`c@cTt?gIxC>8>VzD^?l^0u~C7L8;&? zbMv_UI|`>ZrGp=T?KqwvtucH>7f4=+I$d+0Gu)@2OqHrT?v9gTPLCvZ^x$&13gG)p z4{Ne`&7WsZlM%zp{QO3_!#xVMy5BVyG-L2xx7#Z>rh%d(?;yoi9@XUad8|`kAX}l{ zbGJAPOQ^RI^@cAPHp?r^EAa9j@emw *_s$2_M7eZdUJ#9O6kn&|@ zz6O i> zt@c#7Jbr(xmM*7lcRg8cch B`(%fawO`Q@776q#l^5&hCbTaMpT0^0DJpW>k(Px
yH5mo9{wDSd2mp6Fyo5%?=FwnigPHxY zJ<+a<6JRH`8lB!!WZ6_bSnlj~J85>?<|j5wSbjQHI%BLoLw;Q~R_H>Y)nP5$Z*Tx? zaJ(gqy^9e_Xmi2`XY38guyT`V_-zUy-K)IY_w4#bGD!MHa<=6Oq(QTglbfpr80g^N z_qd=FJ>H)@;? rSNE)Qj7SH6p#0VuQWNOPnX|H)BIL}C>N@w>JAe^*gyK+OU!6d zU0IuOb!VYQzdo8(S`rSgXt3~xm??pXuk_l?|mE9K}u3-o~LUP4dq|tWko}Kj@Si zX^_Rb#=rqSQ4D>|CvI|Sxr#Zwb3AzQAZ1etAnc?%Kj4*_rg%>nySS(`Fu;icqyxrw z(L##E%AlzIO27X;Or2qI`K@tydWVQh@$O);-EWWGQc$0lr@wnLuv=Qr2t{ZJZ(-VO zA_CDa=2uxCA*RBo_%#Cl)?|NG;5gEJs~HBX*>d!9hnH}TNo3OLy8Nv^lk%OMPdwd< zw!54Acps8YKFGx6WI_g?n}jsxPeNt~9Hxd^5+8nf%&%`T!7Sh-3!-poF^^{R8)&`G z-$yYwXA6f}aGB1MzGHRy?dpCfM)Ivxx#C@7sfMgQTFw&FR;g*t@nXH-NIER$mFhR8 z2=giHqNtfA iqAcgm6rjsHkV}Jg?mfLEb+${B z1CBcqSb)@R;vt)Q2AEW=Ih{!L5aww7p^S**A!BUy$Di3!xd)b74Uy%#ycGvxb6f=w zC>o9YAbyLa5dz5ih*NplY-LUuA40z|b3&tbRK#`8q za#$nWcVJ1hoztb=;8jgr1lYBjvfx|h%h#*M)hZ(K_WOS2Pjp?4hf9~}3B8$Zu= 9;bfbp=tfuZ_3k$5AjYH`^38soE4i5*JC((vD2_pYOCo+8aA2dXr0L z{rA{#sIKG*^t$>cV0Hk v1^)!Rd2;k`Thj;|Kgqv%Zuo Uzv`>*6Y#L0~x za5SS!<5*$WBrl+JT)%Sq9LE*}n$bH8?=K+uJG~6DAt2HRs?7~8H8{c+jGGs^lHYgy zg~e>VI%0s%xgKS5G9ojRUv(>lg(&C?v1(@fgK2j^${qs$C3OOg_|?(UR0O=NM2q2r z``*&Nd>hYPwXuofHmq}H^<)G*0zwYh&7WT(NCfBWLcp}s{hcmfFP-cB_JT%rx%mS7 z*GdG|=cc9 UuI6Ae2{_NKAueDs2 zB3q(17Ulx^!eV9e{h$zpP+By_3`W2G9mU+;ilDP%^$I=~^WmM?5OORmENY!f-@PuQ zy-Bm3-m(R#1&^v6QO&@M$Vkp tHGN4YrD^oAinL8vefXY(20_ddrF^rdq+ z`;Me>k?s?xF?(F#b(Mc8U~w3fxb1&aXru^HE_gq88@41fQ?5m-DMk1=aa!f)zQ%dRK=1?iJhvgo|84Bwo<#BGSF9tdCUjsdwn?? z9?;_EzbY}fgE3>> M!!w)a=`1rY=(uas5=!ddq4ytrxDlZSS?x zj_B-Rxm3>Ghn3BJaB#B{9hEi{wWLm0gwT?xW>Tn4RE|JpYc mEHM72gkeLtnEG?Bo(@AIr$pMX>q!ax^tQ?@s`3&Xiu=RtJK}|ytBMB z da^#yqQ(8NUn7y4&a}igHe5{7cnEdU#3_~Su<*u5i5mDvztaZX;Yy7v=FQYZ zfasuibC39dvkb6DOl_?y_r5$-M_SEP?&7P(k(-xS`}jj@-_BMI4sGQyt*-3P;TsQ# zhBhbZ+h0rjA&Gm^Ri7Fj_iKe@) Mb+r+Sb$&!)L!SDm&7jws0(FvBl)t{?e1lU7g2&|! zQ&XjaGVS*&)zD9(OT0~ UV ztGB3Wf(n4FP)^Koh7`q8YVxH-!`!zfDaIJ4aY 96NaMSZJ2Zn*5m z;x_!vokE*4qi&wHl?C^r-uaeIL;a3I8ZCxlS}NMP-uliXTUg|-a}UQNTrN6i{zB#V ziA9LqBjH=OJ-P>KIK$ddVrvAz*@>7=r_tp$l{`~J{F(UEptG5LU(Pf(>7wCEo7WHn?5VU^Yan`K zxTd96y*bgwB45*3R{-?Q-NT0xohGJ4TGjCMV||6`Z`g_)5ap=Kc~7CE)^=6h4>0;n zJnSE#R(+k3$5w{okRG5npnH-2-m5gg4ISn%nC)U6Z@8y?dCU_80+j)j8&isO%_mH9 zbw1aG0rPtltLs=_B>vB%vNOcqu+H?S!%uc0zx{HpiG{yQt!dbAFM|hIf3sO>-P#3_ zX1*dA!EO#Zb-u#)8E-t@5DGMR7DpfujCh*nX`Pfs1`>TRVx_8O#66MCZV88qxqS)@ z&e5#3wWiByZwR {TO8x2Xg?AE_@eF*PdCzBdq_PRS?Us~i- zF2|iyLE3OagPmyu5Xu=hKCf6Ce#e}La|~>yI@a`Ct-V){The}b@S*=5ih#D&38cI> z`l55)&VE;x+B$Q&tog_5)Riliap|@=i{ebTdx?J?i7p{Z2KJhidI-wP?~w3wa%i0q zn}A&EUIE$+qs6o(&z7?srWxn>o+^z~uIfU^gIb7MnPwTBvUByPk&m_flxD#Qcw!IG z2nx=1`)AuDiraE{yMGcb+`rorX1D1b2_mgH-|tg|o i)cx#7w(>x3qm3SqPk6o6bfm5`ttl>_ zJ5*DvyP(g{OyZt8DfcStv1S?!TAegD8=W5I_RJ(jS#8H0;vT87a=a&V(FUmueWs7u zM{U9V$;gg)IuVJK@=>XE#(uj_S~d3B@jB%}*LBCfjGL=pXb;|$)7mbz8{+{v3msLp zJGnLubWPuSORb+deacL7cJvtQLrpckl7?m01wd{@(NC!79HJZu@;`N@B1YlOi6{2; z_9g{24QN7~QR{IwvYC%3g(p+XSLpE-202ieqfmmWqf`b}oNW=zXr}tI2L{YPK}9C6 zuYCx)8u#;BaLUcsXq4|5OCZii `e`a=h>7o9}Q*W#i#u%h6uN*0d|NAE~0Ve;{)ZbT-iK%el!rzZio4%AL&z zJ62qsCz+YLF=Ovj6K^C 53JoXRV(-TSh1rz8Ptkf{r9)?9 z0Bx--eNS0L0qX~GtEf-~Qkf)TybIjs#J;y4e{6l^Yx<@?b!9ZvM+TSmDUUHlZ9Y~v z;qC4QoJ}?!k^)%^KXi`==2E&gS5!}*ZyyoL GP@U@|tA> z^u5vjm569nlfqfKYc?$Sn>_Y@G0k`IHfF+`%qd}LEB;B?H9L(|(~7H*NMk7uYi-|U z#vs%ukpKEVD{rqQs<@c*fzvV-oeJLWY*>-iZTKROFV|Tat`OnR*Wq{i;#1@aT%uE4 zj4(PwCs#e=Q0-Un!QfEm$&@C;Fzp3Ib0eErcSarqX`IaIycKrmeD0f+b?aCtJvle{ z-XZ!QD|6+`Gm8|ug#Ppd$6oMyp2KYYEVVl);5A2h_`%Ra9YMyuM8M(d+W`*6?X?f5 z<5Q*@q4rIO{&P#Kb2fEiX;J$=tJQSE?~&9}bZBUGy0CsL2|pUFwbLz!O*kRzSLc90 z{3K9ffele<1@s!CABkSw76}({F|igWpahRr3p@UoegGKOdYG>GvL%5%Km*XHaSY?V zF{A-^p84gF-}&Gqb{3*sJQ}|c?7;q=eUrl-8^3FD_XH1AP~`X#yV-bT!5@`N;zK&; zo>qtLH{1qGMj;a| uWVkS5h)E8IA0*nvdTi zVsF3A$2WRddw?EHrAW4p?K&)-vH8W&VY+DKh^A7kl2Y*#afxusc_giAXEy9J^^9Vi zKxkACc>Ay>Q|Wj_`mNLc*jx>EcD&xlP~ZOdis4M;w&@&(#6MHY++y8-AGl3{i;^90 zN`AfuH9P^IN-UjLIOM8JG(FUUaW9m~AiavZ2&;tAse=qQ%vIhlCoSk^sYRz!3DphO z#||G4)~rNZEuJtz)XUwUDaUbKPUkX)`?<=8qZ*N)j{!g1T)B`-^U&bsrGkNzZO<|x z`}D44;&<1>Q{2%0w)+ G1)S|P6Z_V#;;h1?{15zZjj~8dX1I6WU$4c%L|1PQ7uefDnLMG}OuJaD zLl{235nbK8Jq7>yg-OTh3y@;1R^9{IWofd$SSe|Y&!?#hFs9+^_FC^JiUN^DX$)uM ziwR02!UFzIiOuR=k6ts9$t) (QR|NlPz0z^~ O`WcXk;2NdS-=!nlouRl>=xdtqCcm3wZ)bHWEpwvLW(*Eyy> zmdyGb*M_p}^{o=s-T_iuFSTbnzhkbTp{I NrtqXz%k>gN4sZYrjbAz1JzmhAoX zvOAYpmhHZG(rLeFt>`!Yh<1Tj?KwSX97Cji*LrBPs@m#;JWbVVvBuCx393)D EU@D?$5fjBg;jNlU_f79T9;(IXBQ(+Un($v{7Pf6T>q zTOnHZggZnA%jR@hO4300<+3xiXTTErWAq^U;%ar~T@v}sA1vm);Bzp4jwaSiFr7qn zu?27slNn4GN(i?ehmg=qKG{9x#CLFT*k&3o?lk(E)z5QiPtyjSZFt8L02TIo)>yH9 z&rspSo+Z#7ac3su$ms=}8Y)(kLmO6TVmJ9n4j? WIH!)p^yzonF~Ds4M2BiuFb#7yhNzF5LzfU|JU z5&$7{$i|HUIIKVfOFxZ|CHgkl0ctd8@jmZZa^K_7DbM{ZHLshvLGH>G^1(Fy G=_$q3nq&x;)uL zB^BMe(_5@lxp>%RPt5wRS#X1f !W{uk%>CxL2 $h M&^!h-TYM zwN0#i#FNkrD|c>}G7?(R;b|cMr1E|Nc>6+HtRP+MYan5y!u`8u1GO#{3sOv4|LX;i z2>G4AH>Kg_eUYob6Gg>57Z>R) zrIOBnSEA7~QkyfYmo#F7AH0GOesZm>`J9wA&2YcL5s`IF`6B;e xN~LlWMC;&u1IUi3dkjhVlvSwE8aC@I?dVr~4WiLy((CD`2N+6sbVRE#8)43B z`=^A{Cx+w21MdK&-6}7Qa eHc{&)F$c+a334dbyn6GCcsxh61dHMx&EFD44U? z`ZT`-s;b#5S)=93PG$1Og;wvRDVToYE$CEqdVRqP>p+zm4{^Asbx0TFmK0ca?!mcn z;9y3+g}L&QexWt3?QAsx(rOgfZ*g*;vKOtYXvW4Bx9=CZp=Pm(>*dXI4xn_b0#I;M zoh9h)lgGr$K%#UBxZB+Ua`}YaI8ZXX(cxEKRQh#UGMt(NC$k)7<6%M?SS-a#(O+?v zl#3`;rOswOC*>@N9;0kjrPB`m7fSk# xKtg#hqngH6pnHS@q+=n#E=o!DHpi6ww1gwc3)@{S6xSN|=^DikLAGYMi zvR717=x51321@3}q>;XGQ`L8sW(M(X8UX+O{$;tXq+ukCgHGl-V@m#9L*>Evm-i$| zAA{|fz#huk$sq(zlcEwcNRV4jy}33W6}!pkfF^YL4ZBW7F#GjX61LVwZ@P80lsC+c zEsxlcFa}2;us8Z3Jx8Q5Tg**xs=Fe8p=3CFIZd#71Xy|`=5&{ucxh8xlzpgTcEISI zT-Lhvs$vS}7!?x@Q`n6n>JO&58@iQ}i8pvYbaRL`Twa++B)(jO!P-5D15G##V4Q8j z%Q7=w^<*+U W^A*EK z@&7z^L-G;8$L~6f3I{~x&*s-Unc45+rsx72LZ ~hUVVOW4%H1&tJ=wr!;JZAT;ud~q#&-@OT@RB$*^)ohw z#bzJ75|hTZ3uqQ|YC+s>`V+#Dj3;Xr>UM&PgPNupsm~@E*lMGH+%uG;jl9v5CZQ9! zS0PO0`(P4k5I&SMPHh#Me#91^_iZQOyFh;dji4Gy`%iESk1C2D-B)v7?zr?$OkE5_| znI&8>Tbwfy&Ue|}2e+Fi$PE`<(V*jXkFjCDmhNUt5_*Il{{dYc9^D}r4oFuO`pjGy zqw;yD=%mDYXJZmRIpzq62SP(q{Z0>!cPI9hNFGD*r96qKPd+uU$ft$MHPAV9Z!_n%vqB+ zPL(Z28Kpr-i_rsrfl3s?N%n&yQr@S|ly~KF9(E3idlRca27jP3HL3b4*=V^g4d$)= zs!0l~c4fldaoKNfsMNdTqq1`b&5#9h($9czQ $v-@^Z<6QhqcMZF}<+Rrz zJGVFt4MKhGlzF;Jvf`OF%<`4Y&@Vw%gp&@%wBb{nsQ2ei^n9tcq+*|wVda;ke0Ham zWAs|jCMX+Y_PL7r&k+MsAFtmkCNsCVKcO5dfCDm|F)AZV&DKr $Y@N*) z %RxaRfK$N?b!e-qV>`O&RIsS zYiQQR At<9*2?67Gyw+`6gsF&$ zdL8Bps(Q+N{TNE4%?ZaxT#+#zMn<2x?`&{o`xl2fQtg3(b%@PCJ(nvZz7ALNyT5a3 zAUO^*X@t^0x_TABNIHDbWzF+9yjmkRp1QYAH{Wd9cBsJ~{gePYPs;T!wsf8 ^>1h^Fc_(t6s={UUm|qgBWmK@2AAn zg#~#14oPCK(Ojn*{F@~}BKsSIJCG$HNvJ#)Dh41n$XNLNH=EB;=Z_V}U58z;I1l1s z+)CSxrTYGl9LusEvROfU{(Z>vds{~ep0hvoR^8F#_<_&9z65y5^LbqgWgnKMeL!{} zDkZZ-+#*Usci*qFMIj<{_+6L>vjsHi7}SB+Mm^lC<&gTPLcao@*{NY*EiBZ@;_Lwi z7mJ %I_?~Gr*Q1D<@+|L|nHxT2qvF<22YxW`*kTxR{eADpQZlJQPZ+U9Zac}* z(CLoz^vr#IWncRAcJy`Hs>Vo(*gD*?$whC;wu8s{l#xGscSghui3;>WVU*yY5^aZ@ z+-t%}4QqS_P}qy D+ZcOtD~ZAQP8 z`G6j2PR5!E{ZY%2905{|g +V-KJUkB7STzHbDR(d3iktI{B2#U+9Xm2dNf-BGp%8Vw(E%BCJd7wETdFQc>l zLzR^W3!OFZ2zSA?E-S>ug3rG9rTnoSfaRu;SXO8^2!UWlE^gPp`ffhx>tbc kz^w5g0 5jz KO5^Dmh E;&tyl}EX(3t0kGH|kgbDHr%@p2D0;`1`bqHJ zE}F&+LNKe6&AhUE%@fn}gk-Mto!hkY+#hlu(7$F@1l@{))2?Q;Ptq_V-6DRUrB6c3 z7H=>(e!HtPdK=6i+PvbO@n*6LlZNLL{7fun8cVZv2A=7{Hm1MXM-uxIY&N2{Yh5QF zLySu5js1WfruXd1$CU1`_Y6x^a^BL5f+sknnDLg$8#gS&rxWBEs@Z!by_Wu|vz?Ki ziLS1L3A-$myNs>B5)z{n6@6Y(qQ-DoyVkHhv ~}%MmOuUy |-PuIZw~i(*5^f@mY!|SrpHJlTl -Z~jrpf}efz{8PyvnI+KDf+iFIcqmmA7I^(bXezR(9PuW#ScZkwmz_?( zw^2#(mpk{8Y^y)k(};P(SPcw(+0`NV7DL~&zz5elVw25|bm?Ml<=;UtK8vBZbvuHV zM3#&g&o0*hVS4eTa`sRB2Wz;32Nq6QY=#Qn_3KQ?bc*_VsDZQLgGS6HW_044Oe2XG zN?Rp@Z_a&7RjAU$vSg^6mzz?} `pH=mfPEXI>z!MB&`DB+DUeJDxUl8h{?A*P1$L{aUMSLVrMB{;l)!6mS zD*E_E=V2Va&QWLL#lgk~L^RAf!V$5pw!H!eqsN3 zbH_!N=J9C*--JXOYLZqx5MGB~fBe5X!jndsxEwxJ!!sc2K67mmJLH?L5RVV?S6>9ix2NH{O->oUAPO){T1> zixZ(O;>0P DT>@CM^h2KyZ}jmdutlu(UjJwzG&==&MmT&166Rf_ zmVjtLPSQDldni* aQ8BjWppP{c$K~N4AN{XI%F_qj z_>YMY&oUKGBuo-$|4Jkt%*T%~{yQGw|CLmH6#w88oT^E%$CP;Xv4gBR6q>rzd*1Qq z;h{FnuxWcDjqmpG54z?Lj&tztkA|}NDV4hKJ$A|%MI&6Z#RH^^6sc}(;?Z>1s!Azb ze5tVe#8!+FKBW L`9y<>6lf+442;@J=Zy1KE{l}#E)S#D&cm)zV3bIBuA=CBwpU`> z9YHIa$zJZ#CGWoS>orK%+|!-VoX14G2!Lr1Wn`VU&o-A*m8k+Tzdp@kO@3I*ikmYC z+J p;9nnxz64N!d-vvXFb$51? +7f%j 73swn) z`&?!|%4J{Yu(QBm2z(oA>?|axPM#+@e!KF%=`R}RO>?9JkOACxCJvANGpX%N_}@+1 z(QdqkeR=r+ce(1zdtoXx%K?kgsvcr*7709@ggdqO8i7GXpvCt}w8FURgMrQKislE^ z_o#<}&F5IO9kqGp1LCuNp@^|U6`s%m_!rwz#GJ>j9FTsC(RL};-6**kblu(N)_a~K z0MDfKRsp@}dHjl#dLs 5Q_?!vDi*dvRVMv&4Q+`&K&H!D1f4 zRsA?!N{Yss5!~K_-5@Xh(HiQWVQ8*&BWq*;uifm6NfGuhBjapj;~iMvhoS9tiglvb z_|pDV6$>AaQ22Xw cCnbaV#ZNcUb(@|+KZu$B2vcGqa76>aqcQI&A@ZN <`<% zxT05S2D _)sb3yPXuzsmGfQT7^xaO>~w-?anxD zk5( >?|~4e2BJTlDw$QRnpS=<^3PD=d(Bd%2AGfBU;TF2sm;v$tqkK#$M&Gl!PbXy zOn)`700ZI2*I$~=Jc273?H*%mWfMhET EN$GhLletHQ$=TC7Ih;vUUhH2^ zCTRcoioU2?b-z581IykA6aUGUAj*;mG!`khrPuy!7fzaG{kVBN%))z!%zYq*qf0d+ z%&56jL;g2^gz)PZuio9`M3i4EMJR qF$0M9uo| zP-O<>0${H?=6;&>0gTK2_yW(N3Yex()_D{w=CB?6bxziM5V_N%Rk46O*&!hXP-pi? zbDek3yL_WRym>U+aAU1FxYDtm5Oy?i_}HcCLH9i(>DLa8&P><79RR$d%yLYf->JU3 z(O=yYjZ(tH! dR3f1N>r`0dYej4X<5%;PxDf{;#z_`r2 z?0J_5obRZ=c$qLVZsSnh`}*FEixGlnTgyi5A4*dd0c{am<~Klm!a3lLx%lj^Hq_(T zx!u%aC>*GfOl^d(v;1PN$v~< W=PGts{y zZ}tBbHyMAS;d7BBevmNIwxeThl$YdZ%GCp3MDZt^&DC*iKJz3uu9-R*qo0dBptl;P zsW@j2wQfV+JYk-zbk1zOmWkszuKzbgFKwkpUvvYufADs+URQVakcJU6prG#W47ddD zj>_qaHn()FK&STKf^2Wz=M}w9eVvX^OjRkPBBq>BMErUa5{lGP;1#IJ&6W{Na7(ve z+q+CFCWZd-*WqhDqpOM45VkTe8F{MD` m3QB4?b_)DZC)#2$eYv`0jcDuOBb3!% z5)Htq;GPH;A%>mC@@)n|y#V|ic3XAiD{qbjT$Y2{eNwcS{VwsNE0qXI6Y*B%lp*_~ zzj77z3EXgZqJ*0F_E%9SQv%H4*=qquv2XWMY@ZH$Z0~|kudC$CO9p?@{ROA!USpr= z%?OV`t%SA?wz=GE`u92#VvanwwKU%S^paO ilPc2k?HHrY39T?HyX0J-mFOjypZJ07oETA(5Dx& zZoLRrCmv5wlX?@uXXr+&07>9RZ@0z%&!&mmH2KVh0$;V+R)>sHTT*(#D4+AuuR3fh zsj?@VM9t%iO}^o6h-WE0MFO_daYH$pfw5OseNxxbPDTzh0G>rkFE&!xmta2sje@OA zu4Y3&+>|_3$V76s*@>rZ$?Ey|n 8CO!IORi$Y%(MA z*e`T>FdBJH4j4#KfthVo8=Mx`ZGJnApKPjuxWB+JeX0lgQmf27f@|l(p6J%aO9|qP zugL^#%UvWUqE8MFbIa5Cwr}_CT|9T*8{Z7%H%)AHn}F(6mcGmT; UB9rJKJCdg&2K( zx4dBx85-{0#Koc7E-l;|FesJS_C_6|RhOLI4qBt=oPSu 7H}vtE0IpiXkN_j+!u4!Hj*gq#V-+@$Oo!{6SQz18sskC^h&gDMI_ zIr2w@ Vho@7orC93w|y@wHqR0;*z(NR|7V)PX7*K6 zRdY=n) kfXk>E#9 z|J!RRqtNS!oovwOA&RI9+%;0+cva{mI?kddnW%5uYVjEnSbQk;d~%bg&x%pC=4?M# z#<%as=&({P+}N!e+;=R;w;r3*rga`G@9K5l>MGr~EKiB>_pOg0wMYFZ6uF>tp2Sl| zwkdkh{}l7hx1T$P!b{e58%CWDX|~4$6RVm$0{yrK+A>*h>@P;Qc9xN9DR`TUkXCRB z1Ql{+KD&lzi!?NwDe%qV*)$5MJX)yNw^P(NqxC%R?Ge2KJ0)$iU+8OSSntOi>1*cL zvMfP_{7w?pid@FQ-*Xz&7QD7CXUe5pAn?dq+c`aV^wiW|v+mV4jdP3hbnqCqv7_f2 zVHKs`JABL+A;}2)*>T)U-{yBy^%EU|9mbowO>h_%WVdzOkmBLP2@1)8gv3O1kLXA5 zQ@WZ s(GoEcXSH_*{6l0$ Z^jFDXVV7Bm+3}87qwG`n>t+Gz{5IXWk zo>}~MvlDP`JROc^6Q@(g!ELG9F{#SePlNu!zw@7mH^{p*l!o*|m6CG;xQBx-aFHQD zKZuf?TYxhVsh&!kIxw=ovANTk*@^BzliMH^2DJC0Ow17*JmrHsY>$kQpo57dHZ{?s zTQhJpV*~O@;6R1zRmk0`OTtS+)a%2*ele#OE}pjQd=Gd4V9=0PZ92)`Y_suOiKq1i zg<~aT%0gAhWUk(U&BVXOP(wrW&-*DIPfEEiuBF+Ex%g`9sv?a9k4>Dfn{}_ugoqxR z*rWH-$51B)T6Pb%>hle9yn37jEi!7ZkEvNJe;Zu*KB1WRWHL?l1b1l#%^Ybixp#Z! zMq}RQtpL+Bo{s cQBdwQ#X@9qt+`N zksYO`8 m&5sLTLqy9@L|*SFzmy+2-52XAg@l7noSu~6 z6Fbb7L9)*KW0VK{<-=p1s|09aU4>2d+cvfBX!;UVi=n8wXgVQKUV$ j3k2l*9t-)rop)o*wkE-uByYu*}R)DF@q&h%T !9_vw+)dXoe8?v!%XzEnPOI9Q9p5k?1#zryHJ=<--iZ#3_Rl7x7QFV z-`Rv>6@$`V86BEMB@oK$dg|3yTpnqcrPV>@r#{FG#%FZ1Z$Hpen@+z{zu;^^Km#Ow zBeab-^V20u{3fa>qHu4@y|E@9F4W!4N^{OO7boX`x6zi&pJAK5k?4un*Ny^c$v*O` zvess MH%aXFR||7BS^EVQ6T^3f=K0@)7VLA` zZIk;XDV>es7n O}jPJYbV~IMV3teZ6nv+ zZ=gvdk0L$#YyR-+F;nlW$+@+2Mk%4^MOL+OuRVu!Hk~8P_XZN#4nzjHf6cC55U*!4 zX+~M-@MLfhFTjWG`@Jg4)aodm_a?2r-iKR%uj66uCIs$K2D!3qg2=XQWRS_78 OQJCPRO-pgBC< +cX){jy*A` za}AvdLGCmk_&;Sk7nyNP7jaF46dreP4z-n+M+Vt-g^{cupwIB`)#MaZHXAPl%r$91 zL`>RX`q&D{ea|0z&sJM-7W0!`m9^TeZiY{}xrc 112M(5;iuL=~elVLFhtf`11m4B0L%oaFgoOf9ABx-&yf2Dl&3od=@Ea1kh z!bjPeueW&p^VI>hQQD+S>QQH;JSBbacFd|!OzYbPKR4K_c_jgi5!x>y;dAP2Yc)~F zvfgsO-~yyaFHOP@wVgS{lRDpumrE$vF$}igqjk>mOh`y)AB1OMMDp83_oVAF?Z}OL z!)EB}@nm$y@~ )^@y=BiCR%ilt{X1=VFXoljphY xRuuS-wWv;G-E_Fy$}TtD 7)L;o9=f_xXV^}qFuGXaD>~(;m!HI| zDAVkjBlI_NIEa&J{yhmnSvacJ`#ihYm!p}75`e)!0%!M?p0RPvJ?0X+Ng6h!V888>tK4(u2eNqBUbS#{@jv_5 zf AJWxp!#tl`b(y)+U35Dx>NG|k&l{L-+pZIz1gfdNJHari-W5Gp%R$e@IbPC`bM zAt3*? Bd7_y}{YB~Gnd;7g(y+0berUj}y zgT+33ErKj1y;_q9j@H>BCE8N)Cu_X@wMskP+hdATL kLu#EmD0_lk8%P< z{cvSk6IL!$c#Pu0jO8f=-uQAIm+hAy?;WB)?|i=c>@5%{bg~+dE9vyLEK0-V6UStr zrC8J|@EmkIw*A=u_PNY{_&iw?qpQ?fKxyFq@%qkNxKCjjj6v6gy%FWSrY3b`D<0E| zVylCAswrnYCxfyl)K9)86F>au9nf=M w@|1v-)?+I 9#fa_ aF~=LB+hRl+qujhwET7W8f2*Ic}Bv8I0}4>5L?eJW {sKH^cp)cj_EgWYTK(-_Vy0VTxh7g zJ|0k0J$b@*VU|C4EVwj#aLQ-CPv;~I?sELuSgK39GcmgEjdCDF=+&4ce6}L3wKIw3 z)cx@$%tYjm4LsX<)5vpx1|6yFDdT~sW904G4VfIPuW(y8nj3L4ql9078jMv H0t%gA zK#?yDOJTq6F19H=pTCUb)H|*6JL@AF! I6*e3-F^@EhWtk@sdGBLgDin(8xcgFQq-5OhD8lzv;WX?r_*0&&La z5e4?X4u1lVuq%)sd l^fJqI2*d$4I@-Hit8 z)G0vUbO@h%P>%0n;bU%cXb!B9P|GLcKI;j6kT+K{FkC8r3aD4uxvYsJO)3_$=N^6S z^1aTp8Hot2LEa|GXO#&RA0NvoJJB@agQVNb$u)_HEmdZpzFeZiR(3?ma}}wNpY=#u z9xRem1@20>*VPY&jW`G~F})Ra-^%SgeO-MvT*oaHTM9ep(yvdfcbNSxb#u+q4Bmq{ zjs^`!epAs(IvXe|e4$WRAte(1hlz_zhCW9ZEz#3 k^*9;Q_*FGwbr40AThp}|`+aY$M}gtc_~%JANvt89aR#~WhrKv0 zQlc6NBcaoJ!zAN#w)>LEUATR{+Gk}wg(QAh(v3a{0u6#T+h)VtfVr;Pa`5qLRmedZ zJCB+KIwaek-rZSU2Ur?(gLwXufAxxDx*$o=!opfD`pDq*`I8~d$;SqIb3gn~P=C@~ zceqv^*k}(t?#P~>Y!!ge&%;0UeP?wYCET1-$!c3-*`91}0A{h{f#J5_+gMfT>xt#q zZwoOE!1$JpErzrTf{!i~kl74Wr6>te=Uv-F!6khoU33?jWZY)9zcvnISHTa8U7kuZ z9@dEMfAY#X2&!UG0-|=#5?^Pa_3t8?vKSQdJ>O4YP++v7o^9DXyX!hoF_Z*4IXPax zSZFc7I&;`SNw%cpA?|_vPhfWoKu-%N%Cbhy*xm!v63wI(J#@ S8iK-=@0o5z!MV(Z>lHnfP*#!m=)9S+{J zTkl2Z?EelF4;bPm@AS-bkB+|PJ?Un%KrXf!%&n5(d$5j_dn -Q;Ib^Oya|3VC4fjReg2+QW5F;H#jQP@;O02J6jv|>ERC4%y>*vMypEnFl zf!aO#CC>ZN1q#i3DI#Xe3dHOEpL9|SrVx(Em_#+nD`iuV08QX+dPT{-!~`R4r &-D>z#7Npwx14711LG?c+Du ?h#Z6T)T&$U4U{?nyX z=OYtySzqe2nxDLsse~H`Tz{$~mvuuVSK=WG3m?%2&b6RglQ~Tw4{Y0T!C641&Va)q z0pf?)^Z9&?t|fwmUR(_n_%S}KWziAN0F0I4`|$JkGx?o0S7-a$c}ong!$v}SP>L7^ zzELmu@Dx|Z+C_qDLN8+)XEWH*)3(>;O9`G1-&gUI?vhMtKlq|q53&rRSMPG~wJ(J; zGQLSA+s{5?w7Vc?+abiu!`T_Ldj5Db%xsZX;psF!W_HhgntV(nYX`1TO8Vzuwn|3O zQ5TB)(cW-)3lD*c%_pTY@wu!EyYz&%B?CjpO|R}`!=r4syNzL+E(Hj*T2PQ3R%~PW zXD^y{X;v2NVv~)*m6w*j$|R%qSNQLNd+_&$W}K9UXr2*w2Lrc{PsoOdPHcaOe t{1HDQMvO~10)(+$!qpYtk9;dE0=z4ViHsb z`qT(AKFgOKXuO}wKMHg%hrbJA`;v5w*7? *e>i=l-lbQV$DEF zvucCf(=8ioYrj8*GqAI=c7w+U$(;ybJ}oFnWBQ(GtFgeYVw$)`M6FbA%POY}rSs%l zX(PPL(t=o5ePf;RJ;b?|-O?!dv)hn_nz7$D>)iXPa~(29?vqV_Yx?uEXa|5lxG3rE zI{WA)C+Dm5(N901Fj}Z|dH6sBq J6qq|Nv`+Q%Y?(S< zCM@PV3>lNWZo>6F^klJKa;)AZ!IIbZ^d?Hm(93K{>G(u#Q5fBoxn$Q4stjCHmsnq6 z(t#=tUVcx^+~r*oy~tE5I{#ME@6=Wv-{fXFO C^~d8!Vk3gbQp8S)7D~ zms6H%jLtEcv**hHMwtF|O>JYMEAe#9kSF2qh8O(Juco+;=f}xJLX-Cdf8D|V#Qvsz z68o9&fXnADR$!%jv$*Wu;tsO%!DqKSjq*!xEmD{@fD Hr2w>(cfkEK#ElhnXj&8q@pF97wjU$PfKtCd{f#Y~v+^efVs2ij zGdC GE^JSE@8r+;_&PZ#3#9YMUEpW_toTlOO{V4E zOp8K{*clBdp1ap3JA0&5odtCF)YoSERhJEJg{Lhsk_SFw1K+z9sO)#Q5# IrgNPi!TKMkD;%^cMnFEmm6^ZV*4^>_8;o z@~T1P&A!IlQWBIui^x(?FsnRB*7&+x`to`l)%6p1%g`e*Jhrj#&ME4AF|b*B!G8zz z7b=T89)UW>sb)1tz#g`KLh5@AS}27Rki`d!F+6AOW _<2rumBF@zFVh>{vCvgB{5L8vio8`Nm4aMk|LmF|< z_1NR)%iM&}=;|ixgUw>8kJNsXI~Nqr(J?Xc@dZvvVD{79evO9Vpf`=gK;s;EYglyi z;r0wP)*Ry8znL@S26?a_F!(!7rd_}_hSm4s3_eiauP)?g7be4l?EL(`6qX2SNEO%% z9Y^5&C4X;1FOGbv0){*NgRcJh?@4rKJUo~D2(+p;Qbtu$|EE W>+b2M#VdTU zr8?3)0s+}InQncc rN+gH<%b3GnoWplf$ERtW!Pk4yV5U%fg3nz%VF926C7-&&Tz769b;4w{1bUy9FreNn zi&*7wwP7)l N7S~)2 z!svBB(C8_&GFenbi0$IB^W@IX(}O(<#}sZOI9z-mstrqgPr=q#*@m;XA2Pawc)c`R zZNZ^eWt%k6-|W %ap2Zi^FirSRE>{_7h!Q=6CCyVuC9y@)bYm!Dm`w7_|B(L1c%IbU=FB*}IBN$4M z5d|k(Lh`E_+@%neSDKQ3Hy$a=+AUEF4evcAAdCH4p!KP<_$~OueforwGRW{t`J^tA zog4mS==RM|;HO)!Dt_s{J=GGv74c3T6_5qRKiWZHKZOjR9n7uPiUi`r;8mxmVXmu< zVytqYOxzL@v7P}^%Bt_Ub*ob^C HHyIuzK3ktCUn ze`6mO18FmKZMcOX10uE=8oa}%bwGB6A|Ea*+eQm6*=AP(^DQcVnZ6KUBaA^j?B1&? zejhXt94L;?Fo!~>OBreDO5cVvqU-gcd$snHipR&t=2!I&)&5uDnSAy)$#atW+#l#j zG{googi;7ZpS%F5$%5>KsP_G06}s}+59ft+#cCWD1^%Z6XJ>nhY+~TuxSRk(7FJf) zY<>#ffm@x=%)vc!3hrK4OTlFEjz~E4huP0^gY$-a_&BbsGdUd3%tML Q!N3F>S{n7Q(#6LZ*Cbo%J}K-xBa6*K$2^jfyD9<}{%m*sA1v`Le9q_godU zEa)d~C@NkaI|r1=2|~I#*{7zrfSUCuuRMwVTdZ1gNMWtMO@=)Ao2SnBa-mK6GO!Lh zc2+@2In(^r!rH>8UKtij W*~8%49@qvmq*yp}%scDqVC z1ChEoEX;;#l>B!9eHu~n)n`}h8AuDH@Vru8qJM3f^6y0P^anl`lfzYlrhAqXc$~*+ zT>I)r^!Q_7;rXBwNM$k?OCfI%rmGLN1TMmuMkwIGfHHaa5tTXgN3MSy48D%d(RnFa zNJE$Mtf>1EC!|1(R(z_BJ(AV4Sq@yb#^QZkBdO4DNT8p)iC0AD;Bq{cPE`K|*agQs z^%9V223@iI?Ho5I-voTQ!aEPvhcf~T)`AJor QRc z;UwpCDv4;L(;*7>o8- Yv`s zmXQDb#7}@r71pH=X_k~%=v7qIPk`_IV<7(zUhJ)7w{wW%b%$TNd=dYL^YD SB3wc=Iw- z>Tj$O{3ePcd&>C0=kgyVLd0*(OmNHF|I=5S-vSOItB3&TY xok|Q{(ji^a0s_(v(xDO}ozh)HOE;o) z!_W;w3?<$0-RPs@`@GNle|~FyYt~}jFvHyE-e>P?UwfZ@_F=6SeEd7y#PECO6_r2U z&Zm5wQdvpO>=;rf2s{ByAlWHk*ydFhV_0-F9l`K9&DhxKS~9K~7NAtw8gTFh_G`pw z8nVwMqbrZntyXB=gp;*VBBJi)KG9MkTzAPpp=DFTp{0W?EFI^iqM->qw_xU?)K0}0 zmXdGcgIu 0l>=)pY}dK`@6uHika>y*60dTq3rlz_)H86E~X23bqxYw^&-U#&)! z^S9dm(0?65`lPuzFJFKPhMww!4&Utg1VR?N^>XF`eqH KhQB1+2ZmrKM1xBF0i`E314`gI3;4*)0EEF#<|5 zYM&*2I%)1}!yg!6PJjC5Rv3_SGiW`kjqY^;AJ>jlBE;y}W6wIz0k2u-Cy15AR{XQ> zFSPG2O2EJ7e?kic7uzOPy#PU~pRpmbx_S{>5zq290!%?5dGn@qvGqWylj&H!xh(`8 zR4epbjesj}l8}f2x$`D1L5%V*lo$ey1aO3A5V( Hw8|=SU&}1e1fQEL zt6G|45YoLncDY!qxEP`@@fkKB?@aV?l$4MN%{A{@PW3v`jBq&OMIFID#QwpRe+;B? z=F~I8+w|r6S=02jq6iFiczK`&v@vRXcYD~p9??0j`fcAoJ}?I4Jek76hFMD-!|H@c z?jY{i9A-<#WY~}HN|F`DL`(`RL%Tvd-tTa&qsE~bz$r6G%wrEKSK1dwL`P>A!2ASX z-mP{vbrnoqpN_;+<8Jxm+u`6v5mj5ypM(zv4R%{EX@o&CeHZBXj#d_{YP@#e0I%jL zi2Q!E)MnJ|$sF*qcC@!Tf7^Uc%EY7=rl4TZyQ#H_PHuZm=>=|hsblyB$cBAM-&23} zkrGp&5!WmA^Ftik?n48}jRO7SbOts?wY`S0dCmPfefy+(M5{qo92IzL oL zoh#vzGnV*JO2 TL8{~n2ddOWuSchgIf$=bx%J-G*OppM>WQhrh79Ub2N!Ni)}USjZOmU; zA^_%I!6Wa+>+9F7Y{}-YqLDgMhx@*sp`aC5zQ2S-iRtn|EdR{H?zh}Gy~|DUk2TRX z(KBxx-nFXp*yEGJMfDXLli`9z0JqxD2eg1 zUZ>|+BiP?xiplOegh7YcSKxfA_Llbw+Wt}ll0AeW**i+sck7x3gRiMZwk&*cF>+W) z1nph?FGE>VhB}zpig1L9bhKUabN#7Y8@{K38iEB(unUZ&kb=+d2C&dQ5rv$SZn*{o z0N%hR^~k9=3%-hs!FZ_8&;>5>d3J7@?hg~@I@A3L#_3mJOzt9@b?xSU0$xC3N |p&p>Y RWLPw!NLY9{RR8w#yT6|ZxI+5iS+IhS zO_0SWRDlp@*XIuhhv16cN80y($A(5VrLSZFi$+;luGzHcQdmgUE>H!+6L|Uttyv6& zR5+DV0Yc55Eh`uW_m0`@e~c`cH02kzsDxxs$Hr4S9a9|CtUpmn69`1*U|nH_Io_0E zU s}_ zn6tpsvKH-m(QUnm1|*lG>uMY& jH%T5wMZ#t^px(G zl(On<2t`EPhvFX(TlG4g40r%qUBng9lMonGhM*xro36wQ6H)yNsK&25lSCj6u;5FX zndPm^6Q{FW1NEQ&F@-{)4^$c?_QVBytVx9-2VBACXF;NNdUy*v%AEA)r;tcy%LG0+ z=Zc!ShB?E$GpbD` B?KaP)bV3qcy4Q-q?Qs`*}{T zd`PX6>B5`6dA$n(x;^v
=KfuwNvS$lh(g4WvrhLo?s!UdS{?`!_*1AzO z`d{sSPCIZPK@}3fFW`eLC?_h+(Z=`&n6AC~+ZG>*B-_Uwlz7Y#(NJf5L>4}RJ}4pn z8M_O(-S?C23hC%zR=%U;#&3Gc?x!1eSW3kG_{3DnDp29$G(d){v{!-y$jRA5cS;^b ziZA)1uX!!s{q+z6qsZw-tYM?09KiaZ>gav~8rg4Y|GonDR05vy&C08NVIZYBU~uC9 zOQxQl;R2ej?}fqd3jk;TnR;v0g%6_81o0;=rTRjVnT;lzLvCa7$}wX4`aF6G3>q?I zRA!6Y*t}-;x~)m?{rd}lUwNv+b4|vE#E@TJ#O2UxjYU=O ERQGER>k}{*~?DzXdzpn&h zkiN81i31R1aM-||o}SL}%vqZK8U$r)lkhPK(b9Efq;r%6yj7>I%x%mby+~2_3u>iE z7uOVwT{HkU LQX=|j`HHQA{d9pRUu2>SVY?Yo&QfR^b zdHC9mk%|NqBw1)^yQ1FP?E7l!hFq3z*5e*4rFny^T(cWso?ylqb%lFlIr?i}i`Qnj z4oh5GI{N6XFpkZXa^XQ-g2=D?T^nOE8v@|j=I8a=yT^10x(6wLsR-Z}X)& QeeioxQG20|OE{C41O>s%s9lqOvBL6+m6NHlsgA*aJC(k*}_~ z6|pDR=(TXQfM^;e7B-Hg~WBh{(?b z`gwm1*2@$1C94@d6I1b9&6|u;Z+-&MFWCZj4JA)*&WAz`N<4HRX=-G~m!r79{vQru z68TFDrNlGMuzO1)(}$k{ymsU!q8-Ezk9#mTyt6Yew~BRsO&du#;9>H2SMlyrP=JKq zX*x<;TgzLOcdGmb#%otdH@%LI5G16fqQk-z+S{iIZt-RYTpJ>SO7c^?yf0MgQo8Qs zw=~oAXzlHl(%AA>@9Qo2(;#Se3pLaI7S8!SaTytGt!@xIm6Xj8|E+5e@%x^z8bEVl z9r 1{cF#Tl3LwxY0Gm=SyL+Gdwe~s?9zy<2=i%WHeq%SJ9 zk2i?De~$tyL*x$r{k~_<^Cj?y3}=CCNyl64Giq_i1KHGCO`tEn5qIDVNZtKbh<<&m zKnOx=S{emen!hl}PXVI&DFcYX#Wf6Bem~Q-tD!p2g7MhcD8@*fM`~&{8MU>wo7^Jk zzlDR5tq+&x_ey0E2NMKX?Rc!edh6=a>!M}FCP>8cZ;o~YE naCs0P zTw7ZdAZKILW*#8G5B^9^!$`T(A#n|BehCdD6y6Y`a$W?9Uw2bbP & zo?3vBbb91kE_^-8D6g{B{y+d^k(5v)Vf?mras(C9xN)a#zjX=t;^zno3Ij^e_da1s z(L!yJ;qbpP=hqcUDncx)Iit0;b*_nN`N 2O-n#(P_T|`BI_f_lKiM56J;UHZ zk|PwlEUDe&PV=}hI|*YQ^h+gx1Q61wveo{JV=J{UK$rzf07CL?V$ze}$cjM=gecZw zv9XN)5;O=}LeS(s^uOQfD&aN1fGvC}1=y$enQMDzZ`42-R`9R^>9r5TJ_)27(lcD8 z ? z?%HTg!*bl>d$)hfC>?Q~w$kVMh2q&tFtBu|*#HAcLbd4fH&mo67GI FIt&U>Dk@|7tJZp61ygM#iTosHo}U%4Q7owAt_S`^m3;*S=U|fww8b zMmg~K)*fBL`3rWoJfpinqN`)~H(B-s4mzYw18OtnvF5|c`AFqcl_N(cFLSH! cuNmVFIEoi>#djR)2e)q^*qmM^ zAsBo{Ie-l>vT!Ze2~UJT#+R=xQksI^+d%69DkhkYwRK9d7m)o~fUxbEobt)lB@ 5OnCL#v!pgL+*K+*|(Xh1upPMJYL0V@-xrOobB zpXs@Kfcr~VlPwVJTA2B{6*B}xpaMeN=rHL^!1mW#h8FSximgw3|61@u0*`R?RSe;w zu*2{8@~7Dg3VQO(q4_rpQ2mq mE^ zC&ZM4nD->;*Mt0gxD*nBO3=L^c(-flLh=AUG`6@@$qK?hF?w;q@udY=aQvVcZ+=Zx zF-+jg`P1L3a(dQ_8 SxHWgK`F0YynLp4G zBv~exbHOr!TxLCCXYIz1Ip%R~S}^+H-)eGR_xwLJAsL9EE%LXFZk%2xBs4#;uEkRR zmlNx*yVI` N<|VE0pfe=Dswy+9GDZPx5JGT-nD!7T#M;_uY$ z*S-OGWiM`F90dTQ?3-rSsD{@!ERuD6?bd+l-#PieRMK-9{;fK1g`UK R)yZv;Hy#uWC$^p}!3Q`)Zte$FkdL{8x#c z^V|{YNXPurat+W_*qcBFTW?N&g~6|Lj(C0g*T(W$-m}P*g9vo;;Xkxk;QU@+!$*T_ z)(6O|7P}9x^KAWDT90wjZbI3|$7M=Z`#q0Vq!gP#D~o0rzp&+o7ZMI2l9by~Q-7cv zaA%Sah)88V+f8X}*Cyrd+bi}HvLgS2OZO@;>UcK9CBxqOhBpbNAd{!?+9ydcp2NWx zdhMrQk9K}cVYZs5fN8fV{U1Ja8VNW|`c1-?-MSG;g(aZCqk4XU09V|;_u}F2;R0qS z=GkbvQ8_?+&9=VZc3(~4awqan)XV0*0yomA%X|DM`d7&ihO3CmLC}1XO-s|oHzw+j zN%M+DKx!N&|KfU0?%ziYOS%C!eB#(Oc6~+!rG6lVGK!KC8f)op^7LLWfEA^A3C==@ zs#I8%*TBwG;5ib8-`#*_VX8mw2s~I3Hc635YZKD-$9Y@(UCLYe%Y>}7mCp6Ar|2aR zN2;xjz}E%*2X6iMH!#M30 g{2L#oyw-3Q-ik2ceRHGupl>eE9$P??3e(Lm*iO0U&n666hvI zX;=Bc%
E)V{iMY{vUNiAX)N?r20YmzXo3bYxUjxVC^)e>9T=w3y7T*8qhfz zdFf1C8do(z`#)AG|HW+7;{F$qoF>aQm1_cJPnzBNsi6O 1i z_yCK=WyLPLN<_ct&GH7*^!^bKUPp$1&^r>jzv%I&T-+!}ugQ8~OQe3l_lT%f(bM|> zDo24Y*TwiFSpAgnJy^A6{+l!Wr!oD~#pnN(kqVtr1ODX;I>yxh6<)Zm;6 sOhW9s8*pih-n-S}|=w}behg;uS)@4NrR>3`G$B+wr|1~gLW9H`(l zB57KqJjlQ~N)4il*(C#MJv5=>Jbwx#ST_?+JU`$=-5Sf5ty|lC_6bbVq)PF;-~*!F z8MJDgaaE?uY@_WsYZVbpilqLxnf-qE|3zDKF-d0C@1lKzrvx?vyog}^w+4-22=9QS z*_^ipu^$0wYo+JM?5o`CZ5KWqO=+hqsRHE}bB O*1mey_cQ+@YSp3r**4IKsv;aSRdf7M{ubwNJ?bD$~XQ)L&Rr5 znMWhFG19+85R$GdpXH-A170hTZz`)s6x1aG;*B}#zT3bGB*`o+j= Om2o7fPO0&NNM&8i%Mk7$;k `-UgPq z>43`2u<){(*Ha}>Vzp08E@KszI?ok`N*j)kk4=(n$wx-F&UZ$VOreMT?$N*rf gxt&-si~ji zmd@4L!r%*l%q38xC1WEzLY8jO85I_rsH #+a?nP!Z@D#HS7N ir-0nsutCg#Da^B2s4a%m0Y?9G(B1Z-hGf%KOOii+vU$&E)R zVc`j6V`FM1?o-b8=9i=z6&BDFv}s+ve}~4iqW>)}fOO0FcD$smR3Y?7qiuYBFl(DJ zvuY#`R3DSmaORj~`fdR|xykv@zSUuR$MSn5V!H2JL6RTe_dAE^HWPcC$@8gI3fyPZ zd@$s>Red*(oR4vuuHs-r-Q`{kY`CsQ6Lf~Z>Y}b=Je^wAI??Bq$FA)mt?hAckK;VG zx$V4p|Li=t;lqovnqz+n|4l;(M_o~JQH#MId@t`|9*@ Og)`yGk^NCS6)Ehi$b`qip@3L zfcu?rw;#^hPn_TnjD*!^n&_{j!(S4EO%-pyHN}7U=E7Dxj=}L+yxgEk*B`mffAoUr zS5WU< `}x{w4TEj;m)6#*QK`dl^|Du#85tQCxE!nL;Rf^R z+<{h66YqFp C+q}x4 zNwfc0nfT{u0w@GfV2J{<*VPZ=H?T{E%xddZtRTu01+_bpcxi%)z}aHpi#vB4CmV(@ zD5_&;OAMrL_Qf7bBe-~YobR(c?akd*HfRgJiN$JH)>@CC3G`E?5E1E#l(JvhvA|&_ z;IhjGOCN*G`%^`1rrI$1ly?KuJxvu9N 0-r5OJa$qHH zGEO-ms&2i6bZ2odD M6N3NJK zrwhATfIiKyOysgIUvmy2 b_P{jRQxhc@!-yxpx+cvNw`;l|k0LRed z*#WRQ-RnW3`vGUw(Y%zaiOEpeNQcW--NIn?rpkcwJ7SL=8plrwnG?4(3-Q^8kdC<- zz99UgHC=z>o5a5h6&)#IVm7^rEUM#WyBFKjkg~OQ;Gp#7b}h$A(uoSo-Iv>*^or4^ zr$B%5c2IL+ZX|6KFfZt@Mnr*9v<=M(;y&$Z7mxZ<%b6YvXA&_xXcL|Cjh+cHKQYP1 z{ZakkNL9n0s3nHj+hJub =o6; N!O&B)+Mi zAK|gS@;o~mlm)T5G$G=)?-?cLL!PY6e+_`1tcl*DzX3DJ0{j`Y-#EC_X*prb#35g{ zv$H##N-5+pCoAzAch>~4 ($Cj&VD7AJ@(*67=$&=1saSlP3+^Yqm$5lyJ?) zCL}Pl9>QoYFKRlAC9bc5{bTGY(1?D;Y28b)O~6-42W|sO6T+;xg{DNEtHvT7z7^6j z)C;XMdI}?}V6?PJj~Ta}FW7@78N?~&SDgZwPfp}h--vtR0}^(Cy)Igxsu@`kTpKoj z*&iK{Au*Wg1q&0~Sb;fLhZRx@aopD2=j2!os(HCC%?@;XD68+9tg?lARD6h@pMR88 z4l?YLwppHXJT2X1U=QA 6Teauq^4)_F=g@~%3HvaxP3Mty zi$#Umm?Yov-mW@oMQpi_TiLT7{= ;CBMFcexo2l#AE$ sbFiGWJ$TTx)Q}M1>sQShYQPkGCv%!gea$9q_&~ zQH9T;ijju^Q|aV< flg(Dp}y`yVqouNi>mOe(p` zZ{oK~EqW&lj!ib-ac&;Lnq03IWXFMgX`#t^AAZGr9QQrlLZHQ4RE3gAxs0zp$`~)| zVp?Fcu7~|M(=U+bjMCDfLVaMX^}ZjYZ)XtUN1J7>aD%SVVt4bIq{xP&dDN=)umBUY zM-OinR4Xh^vd=^@c5vPEeav^M$w+LIBa6dOL+q69dNTINKgeQszhL#r>5+APf^8kZ zyq3Bv(4RSvdjb83+D^9`)*QCQ(JEn*?bUiVGlM7X1iA0ci+rRB*xQj?4 Yyme+arif=l@1z~})8 z##QAAJLdy2!GKMTKqs$l<0%cx^Q5z_17z(&4W;MgREeWfY?kBe`_*}W#E$={&mh#5 z4+icInUY>GSJPKe{`1vfAcfI=s*@!pY=fwJ{$S;h???`jUnW;kUzW{%12ocho49tl zJ=G!_IqMt}sY&eq4X)yJzWt64e1Vw#7G-<8M9KPE Chd^;CZLE-(cYMvBj+Qp#63-3V3No!#XJ=%T ziOS6l0@`nV0q^g9=IU}8%fMBw(FWY0eaKm^u2A6nc%bh|vbwK8Z|&U48Z^IR`bn(Y z%AA Q*Eh`jE%_!CT&ODH>Kd=Qw)&20#x0s>ch9bHL?7`w*Z4<3 z{`Rbq`cZ7;>ey%9(g>iYe(02-9Y?dU&LRDo+ia5@KZ58b$`0yFflK!**LE~HV>Lcg zQeva;;c>DpmUK80?YYJz<`|u$NF2d(a(L)e VWQ%Jn-4+nA^T&H@7D8hsVko#};6@)}5%-6~_Ug>)!0ALV%sq=})c9km;!HqY4e z-dXpkc0HVO)OJiW{$yD4svpZ3QXM(6rcxoOq7t>ZxF{*=4AgIBDOY5x?xLWg0HhK7 z<$_P3cD_-~w>e*8#(?{e!((DzO|%o$9cIv;)@*rD18oCK#5N`v_jYCZ2@WH6c5Eiv zYyVXQ1ypGWo3toE)%0kUMbw#024i24vJvIrT(y@YQLDCd63FddZRNH+UnU+avVLQx zbm_1$N(1bs4;Mn?{Bo4l% `0}083fxauM6N5zc zZ{vB!+VU4Hqf~VgRvr3}QSVCvG=1WDN=Zar$LFlpRjt9jP7GY1pDS1Y?ehoxXb28c zG=s+6A?OgI+PN5KSs!W+i=9aAY4#Wb_uMKs9nn5Fr80+9y>{KgR*D?e1|8&7BibPq zY#F;PZZ%vMSTIHJ%B tN@K@m-THbgO$FNVQZb~^@$4EcP|@4M3Ov6fsW&0ye K!T_& zr}F5v@mT7+c$ 5d@~&KgVtU4iOyFJk*^RME#u zt;5CE5}lSvoa_%C21k`?iCc=zG`nAJu>X5Sx~j;y%CPbOD4*v4QBM--k{@f)-XxmC zaLd-6JTo9IEzMxAHL1P7_2I@yPPO?Oo6}Ls?L`2OLEf^P_?>NSA*hU%au&xk<^urR zaSU)`b^G#dZfC9*okx9GlUnW++{|%Oyn%}AP7bsKG~AUb1iS&W-j_0)=0JT45Cg=x zo*g^UWs|dNEy#a5Pfu$YKmj11wdi?sTw}t@HN1*far(7wf$L>=MTz;Tit@Ql4dD8L z=4|hQUA)58j@*(m8xyLx?mQqlsXXP*10viWBA&Ko!yhXRppLcueX>&ayqVd3=S`Kq z;63ec{ZuyV*7dybTDQyi&Su@5mOifTOcXX$Pkfl#(+}blwRpgyatn=Ta2Xb}yW~ba za;KrAKucCE(P`7EY9%#*S8K95zP|8b7I6MXK>pxlos-!(HnZL6lPhkeQ)f~p&pQ-d zR0|fxeSEH7?XWR#5;b9bBEO-9wzcR`U%>*f&8Vm-|C*5Og3aR-Q`?sp-smF4*t?0i z#7QKC=o{1tXuQvE-R0}#XsF!)SDk@bj5=_Hd?oC?#`f2SJJ-hwJ6d7&;4OATemy