From d831c08306b157195a84e01425dfb5a8fe7617cc Mon Sep 17 00:00:00 2001 From: Slavi Pantaleev Date: Wed, 4 Feb 2026 03:17:19 +0200 Subject: [PATCH] Add support for OpenAI built-in tools (web_search, code_interpreter) Document the new tools feature in README, features.md, and providers.md. Update the `!bai providers` command output to show vision/tools support consistently for all providers. Based on #62 by @yeslayla which migrated the OpenAI provider to the Responses API. See: https://github.com/etkecc/baibot/pull/62 --- README.md | 2 +- docs/features.md | 17 +++++++++++++++ docs/providers.md | 20 +++++++++--------- .../text-generation-tools-web-search.webp | Bin 0 -> 67284 bytes src/agent/provider/entity/agent_provider.rs | 12 ++++++++++- src/strings/provider.rs | 14 ++++++++++-- 6 files changed, 51 insertions(+), 14 deletions(-) create mode 100644 docs/screenshots/text-generation-tools-web-search.webp diff --git a/README.md b/README.md index 270fb3a..9ae618d 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ It's influenced by [chaz](https://github.com/arcuru/chaz), but does **not** use - Supports **different use purposes** (depending on the [☁️ provider](./docs/providers.md) & model): - - [πŸ’¬ text-generation](./docs/features.md#-text-generation): communicating with you via text (though certain models may "see" images as well) + - [πŸ’¬ text-generation](./docs/features.md#-text-generation): communicating with you via text (though certain models may "see" images as well). The [OpenAI provider](./docs/providers.md#openai) also supports [πŸ› οΈ built-in tools](./docs/features.md#️-built-in-tools-openai-only) (web search, code interpreter) - [🦻 speech-to-text](./docs/features.md#-speech-to-text): turning your voice messages into text - [πŸ—£οΈ text-to-speech](./docs/features.md#%EF%B8%8F-text-to-speech): turning bot or users text messages into voice messages - [πŸ–ŒοΈ image-generation](./docs/features.md#image-generation): creating and editing images based on instructions diff --git a/docs/features.md b/docs/features.md index 42414df..93df593 100644 --- a/docs/features.md +++ b/docs/features.md @@ -40,6 +40,23 @@ You may also wish to see: - [πŸ“– Usage / πŸ’¬ Text Generation](./usage.md#-text-generation) section for more details on how to use the bot for Text Generation in a room +#### πŸ› οΈ Built-in Tools (OpenAI only) + + + +The [OpenAI provider](./providers.md#openai) supports built-in tools that extend the model's capabilities: + +- [πŸ” Web Search](https://platform.openai.com/docs/guides/tools-web-search) (`web_search`): allows the model to search the web for up-to-date information. [πŸ–ΌοΈ Screenshot](./screenshots/text-generation-tools-web-search.webp) + +- [πŸ’» Code Interpreter](https://platform.openai.com/docs/guides/tools-code-interpreter) (`code_interpreter`): allows the model to write and execute Python code in a sandbox + +These tools are **disabled by default** and need to be explicitly enabled in the agent's `text_generation.tools` configuration. See the [OpenAI sample configuration](https://github.com/etkecc/baibot/blob/c70387b0c38d8d0f30bba2179a2a21a3710dbeaf/docs/sample-provider-configs/openai.yml#L12-L15) for reference. + +To enable tools on an existing dynamically-created agent, you need to [update the agent](./agents.md#updating-agents) to re-create it with the `text_generation.tools` section added and enable the tools you need + +πŸ’‘ **Note**: These tools run on OpenAI's infrastructure and may incur additional costs. Web search results include citations that are incorporated into the response. + + #### On-demand involvement In the following 2 cases, it's useful to involve the bot in conversations on-demand: diff --git a/docs/providers.md b/docs/providers.md index cd27132..7850d85 100644 --- a/docs/providers.md +++ b/docs/providers.md @@ -23,7 +23,7 @@ The list of supported providers is below. ### How to choose a provider -If you're not sure which provider to start with, **we recommend [OpenAI](#openai)** as it's the most popular and has the **widest range of capabilities**: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision), [πŸ–ŒοΈ image-generation](./features.md#️image-generation), [🦻 speech-to-text](./features.md#-speech-to-text), [πŸ—£οΈ text-to-speech](./features.md#️-text-to-speech). +If you're not sure which provider to start with, **we recommend [OpenAI](#openai)** as it's the most popular and has the **widest range of capabilities**: [πŸ’¬ text-generation](./features.md#-text-generation) (incl. vision, incl. [πŸ› οΈ tools](./features.md#️-built-in-tools-openai-only)), [πŸ–ŒοΈ image-generation](./features.md#️image-generation), [🦻 speech-to-text](./features.md#-speech-to-text), [πŸ—£οΈ text-to-speech](./features.md#️-text-to-speech). You don't need to choose just one though. The bot supports [mixing & matching models](./features.md#-mixing--matching-models), so you can use multiple providers at the same time. @@ -47,7 +47,7 @@ You don't need to choose just one though. The bot supports [mixing & matching mo - πŸ†” Identifier: `anthropic` - πŸ”— Links: [🏠 Home page](https://www.anthropic.com/), [🌐 Wiki](https://en.wikipedia.org/wiki/Anthropic), [πŸ‘€ Sign up](https://console.anthropic.com/), [πŸ“‹ Models list](https://docs.anthropic.com/en/docs/about-claude/models) -- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (incl. vision) +- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (incl. vision, no tools) - πŸ—² Quick start: - create a room-local agent: `!bai agent create-room-local anthropic my-anthropic-agent` - create a global agent: `!bai agent create-global anthropic my-anthropic-agent` @@ -61,7 +61,7 @@ You don't need to choose just one though. The bot supports [mixing & matching mo - πŸ†” Identifier: `groq` - πŸ”— Links: [🏠 Home page](https://groq.com/), [🌐 Wiki](https://en.wikipedia.org/wiki/Groq), [πŸ‘€ Sign up](https://console.groq.com/login), [πŸ“‹ Models list](https://console.groq.com/docs/models) -- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision), [🦻 speech-to-text](./features.md#-speech-to-text) +- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision, no tools), [🦻 speech-to-text](./features.md#-speech-to-text) - πŸ—² Quick start: - create a room-local agent: `!bai agent create-room-local groq my-groq-agent` - create a global agent: `!bai agent create-global groq my-groq-agent` @@ -75,7 +75,7 @@ You don't need to choose just one though. The bot supports [mixing & matching mo - πŸ†” Identifier: `localai` - πŸ”— Links: [🏠 Home page](https://localai.io/), [πŸ“‹ Models list](https://localai.io/gallery.html) -- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision), [πŸ—£οΈ text-to-speech](./features.md#️-text-to-speech), [🦻 speech-to-text](./features.md#-speech-to-text) +- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision, no tools), [πŸ—£οΈ text-to-speech](./features.md#️-text-to-speech), [🦻 speech-to-text](./features.md#-speech-to-text) - πŸ—² Quick start: - create a room-local agent: `!bai agent create-room-local localai my-localai-agent` - create a global agent: `!bai agent create-global localai my-localai-agent` @@ -89,7 +89,7 @@ You don't need to choose just one though. The bot supports [mixing & matching mo - πŸ†” Identifier: `mistral` - πŸ”— Links: [🏠 Home page](https://mistral.ai/), [🌐 Wiki](https://en.wikipedia.org/wiki/Mistral_AI), [πŸ‘€ Sign up](https://auth.mistral.ai/ui/registration), [πŸ“‹ Models list](https://docs.mistral.ai/getting-started/models/) -- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision) +- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision, no tools) - πŸ—² Quick start: - create a room-local agent: `!bai agent create-room-local mistral my-mistral-agent` - create a global agent: `!bai agent create-global mistral my-mistral-agent` @@ -103,7 +103,7 @@ You don't need to choose just one though. The bot supports [mixing & matching mo - πŸ†” Identifier: `ollama` - πŸ”— Links: [🏠 Home page](https://ollama.com/), [πŸ“‹ Models list](https://ollama.com/library) -- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision) +- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision, no tools) - πŸ—² Quick start: - create a room-local agent: `!bai agent create-room-local ollama my-ollama-agent` - create a global agent: `!bai agent create-global ollama my-ollama-agent` @@ -120,7 +120,7 @@ For services which are not fully compatible with the OpenAI API, consider using - πŸ†” Identifier: `openai` - πŸ”— Links: [🏠 Home page](https://openai.com/), [🌐 Wiki](https://en.wikipedia.org/wiki/OpenAI), [πŸ‘€ Sign up](https://platform.openai.com/signup), [πŸ“‹ Models list](https://platform.openai.com/docs/models) -- 🌟 Capabilities: [πŸ–ŒοΈ image-generation](./features.md#️-image-creation), [πŸ’¬ text-generation](./features.md#-text-generation) (incl. vision), [πŸ—£οΈ text-to-speech](./features.md#️-text-to-speech), [🦻 speech-to-text](./features.md#-speech-to-text) +- 🌟 Capabilities: [πŸ–ŒοΈ image-generation](./features.md#️-image-creation), [πŸ’¬ text-generation](./features.md#-text-generation) (incl. vision, incl. [πŸ› οΈ tools](./features.md#️-built-in-tools-openai-only)), [πŸ—£οΈ text-to-speech](./features.md#️-text-to-speech), [🦻 speech-to-text](./features.md#-speech-to-text) - πŸ—² Quick start: - create a room-local agent: `!bai agent create-room-local openai my-openai-agent` - create a global agent: `!bai agent create-global openai my-openai-agent` @@ -137,7 +137,7 @@ Some of these popular services already have **shortcut** providers (leading to t This provider is just as featureful as the [OpenAI](#openai) provider, but is more compatible with services which do not fully adhere to the [OpenAI API spec](https://github.com/openai/openai-openapi/). - πŸ†” Identifier: `openai-compatible` -- 🌟 Capabilities: [πŸ–ŒοΈ image-generation](./features.md#️-image-creation), [πŸ’¬ text-generation](./features.md#-text-generation) (no vision), [πŸ—£οΈ text-to-speech](./features.md#️-text-to-speech), [🦻 speech-to-text](./features.md#-speech-to-text) +- 🌟 Capabilities: [πŸ–ŒοΈ image-generation](./features.md#️-image-creation), [πŸ’¬ text-generation](./features.md#-text-generation) (no vision, no tools), [πŸ—£οΈ text-to-speech](./features.md#️-text-to-speech), [🦻 speech-to-text](./features.md#-speech-to-text) - πŸ—² Quick start: - create a room-local agent: `!bai agent create-room-local openai-compatible my-openai-compatible-agent` - create a global agent: `!bai agent create-global openai-compatible my-openai-compatible-agent` @@ -151,7 +151,7 @@ This provider is just as featureful as the [OpenAI](#openai) provider, but is mo - πŸ†” Identifier: `openrouter` - πŸ”— Links: [🏠 Home page](https://openrouter.ai/), [πŸ‘€ Sign up](https://openrouter.ai/), [πŸ“‹ Models list](https://openrouter.ai/models) -- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision) +- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision, no tools) - πŸ—² Quick start: - create a room-local agent: `!bai agent create-room-local openrouter my-openrouter-agent` - create a global agent: `!bai agent create-global openrouter my-openrouter-agent` @@ -165,7 +165,7 @@ This provider is just as featureful as the [OpenAI](#openai) provider, but is mo - πŸ†” Identifier: `together-ai` - πŸ”— Links: [🏠 Home page](https://www.together.ai/), [πŸ‘€ Sign up](https://api.together.ai/signup), [πŸ“‹ Models list](https://api.together.xyz/models) -- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision) +- 🌟 Capabilities: [πŸ’¬ text-generation](./features.md#-text-generation) (no vision, no tools) - πŸ—² Quick start: - create a room-local agent: `!bai agent create-room-local together-ai my-together-ai-agent` - create a global agent: `!bai agent create-global together-ai my-together-ai-agent` diff --git a/docs/screenshots/text-generation-tools-web-search.webp b/docs/screenshots/text-generation-tools-web-search.webp new file mode 100644 index 0000000000000000000000000000000000000000..e2d921521280b04722425f69792df01dc5f76869 GIT binary patch literal 67284 zcmZU)Q*YM5=tm^8gRw+w~ zi%&rS1F4G%E2=4S%J%)oGfacM0|5{ZTWv|#FZ!-@Pt!B}MP&nw6r``7Ob3QhJ1D-y z4-!7DWSVUF%WkAcMX&yWj9MY4T2E$dEWp(tqySk91`CWjK>&^6(TG)dX*X&{bzOdp z@^!~d%ljloDA@RrliX*VY3N8C-k`pkG@@F{|~@XEU!Zgm6M z&4H=g_x}O~m=@b^rW#!!xY@Y1V_j8y=AMS;`F!V{SXLug*9`q@u%HNbsKpaC)=2d49aQ=zFu-lYQ=JpZmY< zlb_jWS(n0X*{d&4PqyC7)#udnx6jV)?5npfz+h@SC2kB4d6_`)YzhN=fS5?vzaJe1 zr&yYnDJuaAd0q|MBAbxQNpP>fX^4>qi5OYv1c*qpa;+(@B+}tbGlKeWd?aNdG71Vb zFv8js0lLs zIxSQo3RyyY3@!1PR6NW;wb@FZt|++)t9-RrRD824w)$E26f#l8FVGJNu?*>Oad)_^ z7#P$zN+Zi~2z??MwWgB^2y<~nKqZu!tDv|=1X_ie7^+l_t#)f6om3zc6i_Gyuuj@9 z)|j$yjc4&_E8S*gE8nROVE6U6=o3s44LTn5kJPX2Kr5;v0A#F>- zTR-pbZ)KP5%5m-BlmQflSu5FN47N#B42Vo4nT%Qdx)Jk8V?U`GbEHv52!ISnmRY=3s-gs?waz=+?Yw6UPmwK%`c-+KwVn@$S)xE&RqLJAejqpnod0!O)1a4tk2_}{|}#&W}y4BV47Q?rNYD<{w&Sn0Mq z*`e{s^Z!J!ur&2t)O3-iWOTHs&4cwkgxO{-tgW=_!e!n3-}PWUbNnAiFR<;~2|u2G zJr%tYUl|fsjEZA{lbG+Sq;BZH`O@rIeVgx$MFQ^s%3;~am;Y(6t zAO8sfXiYN7qTgI^oKCh4v-wT&GC4+*k~x|O zNM1uac*^ zN06w*V~n~9!#Xuocv@!SS2C8kRjjOqZDXq*lBp5TYZ@FsZ?_NCE{nI>?4F~w+h~DJ z#QqWyp`#Y1dyJ4ym<8D^n6N0YjpvR*mdt;Ag83^Ac)Z=~rjJLrdsEYj)jl9OS7$K!R5l}H@5n*>W zZTe41)26aAIYC>r%3$9bF+gKjjbaUcDO-YBu&p$zq!-rm4dFcm%8nyCbW^Iw3<{>~ zeJPb5(}$3I({nV z=+#j%$x0^!+!kBd(M$bSw<%OU)t}~&8Sfr3_P)*c8=>Rp$Au<$QwD)l{@)4T7bTas z){i&W>CGC^^;C(NoPc$kSrZ-cTobf(D@=9UN5(Fp>wLO$9-n9cZg9>xt~Jbzg0QQT zBCcXdX9E=uU1a{UAI~Z{kANLkv)v}IM&xGE#&H3wK=R4Q^JCk~-rwbksI;KNR{+CK zGr#xNt5MJKyYa_%P+0BFV92#gOH?g_vI>5$@-uoQYgZhGiKJiIUzL0;P;J@nMVwl- zOaYr0e~s)93k07Vw{7~iZQCawy^HUor#1%g``iijIBk`(p3KGELyc7kcs2%S%J|857Y;i$&#p0kPfeFM*|!Vm-#hHrBeK^guG=fe<&of%)v6x*)vTRbsGXWMW za_kM%2P&ak-SL}f6;WVQG6_l{e@LumNLsG;KNost$$0c1{XbIfA6K)t6`~;tob!B4 z1pG&Qej>jgOb7O(4i3!`3vjR^X^c%(9Y;U6qkOGf?R)L!7itMj?QC?GuEv$z;nt07 zPr}<`JWotm|4M@Cg$|&jkRs>dJY*tt^CbAg{+%9ND$6TtkrJsqs;!}xlV`Pr#^=h5fv(tmj6Pr>g#G|FE+TC=$->jKOl!p~aA0NJH~xZDen$LeN<+k_(SqBP@hw1ej`u@>;|FOPFiu><2)VuFf+y4IqJSe>0GGCvT!PkKV=G{60 zuV-S{i)prTe_Z*tE_}NAUQG4}X{_%|Jomi(4o1_lrlzrlYk8W0lEz5k#>4Is3Dlg6 z%tjsMFu4v#WG ze($B-u6NUQ?_!~}ZMbppxl}jYR6+m>Or>~16HzIuVkd9~F7hdnCmAtA=#pLX97r*? zWGzWzh)&cn?1k$m1NTqo_ER3k^DbZA&udkuKi{wT^GsD`&ME^N9&eTJPy4fz>p{|E z`%qv`x+BUQcL-{U=@9#pc93)fnukfORX2})adV3nt5bPC!Maea;Z`- zV!|4>s-(>&7Bm4jDkb6oq;s1DwqsNPvF?V0m|jKrI%4GCwqhpMeBLI zN|R_2hPBN7IB{q)C3Redr%kRfU8dLlRQKIzX7}}zPh%(lda%~%Rm^>8XxzqMvzz62 zA!|MBt$Gi^;j*||HTvZam+pm%%=Rv|c1Ip&6M3 zg=A8jM2K`a!jnv+4kAEYsGcrX>)Rh=HA_|Wa)V&vtQlmZlk3^;gJIS`Rb&Ugn$&4= z$7F@-LKv3S`y%Rl%GO!6W0DinhL`H5af9VmOjY z8WG?s+@nkZcP}`@03vy~bic03wn-h1l0&Lc1)I`^dW{35f1^yaxFfhm=MyF!WLY=> zK@Ga6+*mYe3te*k1j<)Z)JHIc3GoUp0%Z`gq?xG+Ak;N zx)|IR!(akoow$*3e2g)%DpTJuuGY+tXw=K@<#(>qY`Vh`?*1+~{cho-62b#Cv0|p9 z5NXwM(j-x4P044llm?+BV6(HO*7?xV1kU)*B1({gUF69oT74(80Bt2>MvM$1RH8o{D9 zANOudyP+|8YdS<0uwegL0imi+Rp_K1u~Gh6L4&$EI8mjC$iX34_Mo5Yl^7YLSs=!{88+swug%POIzmG`-&CkUGvcr6wYM=iVAr%Vo;mwh2ysgzPc1K`x!^~Dq6 zAQ2f7D6WSlXs_EjL9)Nc`B<5uMIsXGpr&bNM27ACBf6vEoEsyKy~z*ro?gy2iyTLN zxQkUK3j^-gmA%s=Sp0{JCOxbCUPaL2NSs6+N7xd|oG2Q!*9L7u%+N;kPLvb`6*|b| z5K7=Brr-=uxLCvk-h<&F004Fy_A|{`3C`S^-XUr!L+Y1<#E#^NKi?U?GraC9o3JoI zne#N4E45)iwE zm0=c2773fHWd=6rbH`NeZXQ*rUG=CgAR&T7h!8Ebktuql7w-jCF(BXz9BaymQ^trA zM}-jTSmhaF{oCJ32u>;S7M(2qiV?cw(i~Ez7(LWeQ5>6S~l9xPc>eYvlFU z1f!|jLHw0em4~7W4kesPaxji8nLZTjSy3ju#ax3!0$C~>@&Fnr0PAh$O@?J~13&BZ zOB`_{gaIW)G8bC-UE6xQ4Qc1~Os5A$h!Y1cgC8}-%G_KNeghM%AYvJp7o#B`4hTG% z(r0`sucVh3{y>UQ!AAt`Lg6c9I8G+W1LpA`(LNUb5D{IFM%mqNF>qgrJT6v4kmV(- zD-De%dB-KG1FV-n_`H75u$-Va$@rwBS1Tbn3QP`p5SWAIqKu&(s0`f!37UjC5Drp63VN_Hq`3u4i+LUqN70hqzH1bM zgTYYzQJ`w&m+UQDq+wCRT`|6x7H`txHU;tYFnY09Y9h1Cj9z4f?x0#c(F(_;{=$Vu z)H#W7Ag5VK!!QbI7P9>Yc##H7qGE)wyg5c|>2gYfFmmr43h5r~+B>){d;En4DA08!k zgwN>T^nxH!zZK^ZllC&O&luxuHs@Tqxs?K8VwTzg8fgVG_(-Q9CKLfJ-Swkb>e!3Y z^!%xNqCq9dxiJYpr1Z&t$aKnRO33Bs91Sk=1}eOm|D4;yq=BTbD$P%|{$0VkAiPnb z+;_K?%o{U&TNCI`e(8kTuYe68@QgnNqlRRjo`x6puG&3n!W~lW91>9qq&hJr;|_hy zKT$?wgGbtha0)+gK)p~$cSIW3&P}+ z%>&Jy_xGHPri>ty=~2VAfW%Kw+|A2oRc(kiyF zW4iKLPS2-IgHD5F^;IgY6Hl2#xyMQSSjOzRmVmQ9QYHLmDdP4D?kAOdMaDT2Kx%YM z^aROSGS)$i*D1Hn8&#%7ePi+LfrQ5?%0`pNun6Fkf(Rr!5^Rt#fC>y{A4FJjzhfwY z5`hlh0|>)327cdA)PM=s?(Q>#qW>g8>ogFuZglkTH##dJ?X-WgJ!3I@if48bZryN$ z4e;|s_+TtZ|0GlSO&<80%nK}36xlq4NaZ#R#DSPALcCB9_=^qyhUDf@&-&4=ONfoS zS`aW~d^cm+-4^-kfiEUsliUo1V z4T5N7&^^c?EoVz#=nj*AuPyx!41CEDnTwJPlI%?ny!Rhy*YS%#O}{*Li~h`?yLKVy z9+iW43d~>a-uIzY0!{P<6<09JSY1rsf7c5?ulQwsoOip>?F`?;C7*kl1c|{+1BRsz z6EM2wUbl;s95L8RK5fZkj6_HO-X*2)nkhZB@HnYq@lM}o9(~(TT|h!Uw93E>UPg)< z?(j)mKDK0SwUB(?+Bm0TmqQ}0ThvWBb@*ilwJ_pf6wLGTP^dSQx^(=aB<`U9a?u)n zmR#j$@1QPt1D^EIUoesHIe$3d0qtC=qvYUwYB-&%x3Seo z-}=sGefzp?l2Z#vo9(akz>?&l!-i5vy}V9J7hN;vcChJ_TNO#sXHvpPK`7m2qvFkL zlq^oOP&-Ut?(4mq5`y3%@#jq~utEF3GnzShn{qT>a!4VLyQmU$kIq4gmj_Dz^TC2c z64po>N4L5GbNvsRM{V(L%efI zV~m#aajP32dLuMjW+R2zi}k{ugYnQu;idll{2I$AX5N#-R|AJ&+sUzd5db{NbA1O( z=r^r7+EB{If=JSGVNoUzFD&GF7Ds5aIZ+PA<3UH3+yo9Az=%_ff-lH@Pr3SfI4wk^jO&P>vt{FpoZk-`>`0>*NQE^(~@30Ik5v^`AJib(=?_TistseZM z1&{#$DK&0V?6wtMC)%%M%m^_p*QHK@m1_+xooJBdlXx*j&5B$IaQ8FwQo^XugsxQQkFVJ{`vN$)XP34jK zsrwjU_`5Xb(5$F{{tP!C^hb*~79)-acSIgi)m0^K#7rB~^>$}jSeI?6qs)jC68v9!pjURxElk5%?a*h z#tMe;?)ipx0!bOq#8}5?9pXh{E`k=L2yBa+2u$lnJ4t&+X61hOs|w5*m&sb!^N!n* zjq_5ChBMucMxYE${Rgw6z9mf6^(eQ@CXm-f<=jNW;-o<5h!wIYE?*r-T77**2rpwFf6*HA> zD{W>s^_7-mheM>=USV)9w5E4{Dhum2pnt8nv2NNkOD43oZ6((ZPuH=%)64#S>ws3x z2|JYpCRR<6w3h1N*yHGPJni1=dS!=Idf?d0rFpl-5w&PMk@-fG>>ImPH3t{eCTA~V z;{?+B%QSpF80Jmq{|hz$KX~)wqT792hXC+zqVAtO|CgJ%TsFR*^zL1JeSzQZ``NCp zeVE@ozpu`Z(91IWKH=|~ZUmU$?Cselzs?uP`NKB=oIew97(sj066ro>^=^J`AhN*o z@U1-J!gQV9o9hJjmWHhV_I(s){2jwaN0e6koZZ=8Ue~9vklgg|3=#28)HT8KPx3z3 zRv7rq-8X1oH`j;&s(^QJB8CTdU(uaHs>(D^8~UR3*Ou#1TXF&=8MeN=BR-0QDN#|68}es7n_ze&KUuRzj+1U z78Fjw=>A}LO)Y%~iePV9qu5`hRGKioZ$$xw|g8^DZ5E;w#Nqy1nMUYR=*)?Z*5EBk+*PPW*>h??F(20B)-))D0hcU zU4_1Np0lb_C-U6ByguG9%x(ILeN&LR{ps_IzcE^B=k|ptelqt5NimTtJ)(5K0Ecad z6IW3elkcktZ01Qvap}GEeLCO#UyzU^=l&S-G(OII9CXU|$37i>E_C6`ZP?}|$Semm0c_wHSJQ~Irq=3g7G^2fLMOlcZvdAqG8$RKHhY%KRQl`kx5 zw|ae2&|hT#Ze4OeG_O~eR^!OH5rw5Thof$gVg0B?==3!GzdahY--ZSLFkjJhFn900 z`~S=!X{DroJ)FjAVr%Pri#k~Y?-8OfCH|HN8A`1Vg}KIQuw?)W_IK4)sP%vQ%7&}M%1oxDh0ySwj35nLW~hO z60|RJ?wN$~C#L-<=+cLvFm{bKsToY?L!+t^vq}{ew@;|v6-qxcVo;uVH~k@-jksjN&2;^rG^K0)CKAUPZ0;aFb1oMZB?^QdhtHX-Zo$NXVo~5I=haD*ZUN$IkH35@jDKTf{vy3I#_^5gG2f zlf%4ilTh};M!psGQGy@#r|aD73I^&+#Rg0bz z^+hy(M5C`~B_@1?jjfwBvjqZ5FeTrU_EWMM(f*jFh^*@p@65b?m(TfX#o}E?AijGw z;3|+tzJh*9kCdy1s$r<$VquM-XHq%UBKi3@E?pnVAq9b54}M-wlvodjqq0k)ZAQ04$H8UnvlWLu;QMIM zbJ393^P=@ww}GQ~7{Fi)vNc@g8q)JnDy|-WE&`|g4K%*=R7G*SIxE7*{&^(NnZwJ3 z87k25$k;87`8liZFyXK2 zCDk~3sM|AnVQ=B|)=ZB7DumIFs zMGkddA#+cQy8Bd7<+7sn&xN>lsK|OHI3bN|8~p~woXD+O_yc1;cKVGtakxZ%4Rh+n z7@ZMULXiqmW%V%!uq95C$e`z`l%{}tnEb!@Z7Cyu^=4nVQ1ZuxrK_$g=mASz2d4R3~_!B(#KNM{|-ZHXSJL8q|Y+h)ho7%464bFE+p|# zQOT`7C!Ql)Ux)@!4$6UIC5ON< z97^Skv`ZD^d4;QjC8TZ|(UIvz zO>pfLV&udI#JL4c;o{4#8i!Xh2rODFPz{pb1h1ud@h~wGrVH_;m=OZ-f#y{~6cmnL zMU&S=5UNxr6GGc4td~5nFP8*b|Mc*%UBZcn9>&xjs8p3IZfxHW9HNx}Tc?I zG0p9*2{8$U^JOJfHk&n6C6#WaAO)gAIz_T>knYSL{|&|`MFAlxl9zmA3|r|CWXM#k za!FQG$Ci;S%!{c)ZAZ&hd+)B?$NVj=Ab1osJc^LL2XVeMwKEDQI1As9(2O%E5mv>7 z>}EdGr)*fvt9(%IEdLQ6LQhpwiV+`L2F*;fdA@6!dXGP-pndL3ngx;q$`=C@lfW>A z_y{4T%!Hy56Z`Ram@UbO^F~o}s^E_5YJ6lmjI16eSav_zGzw$QS_!gA6W|qix&&-j z&X5>+PE6e60oS5r#w)Kv&8C8(jr(;E)v^|4Cmy*;AGS>03?6wT@_B7%vQ>0v@ju#m8JrSYX!RV|R5(Kb!D_-ZHKOR!Xc3MILwBG5V7r(cRh+O? zvQ87S*&>4gt=UQY_byN@*d_{n1JENjCQFLGrk~)DI5E_&4D9+(2iTsv3#EJs<$W3@ z)JRS<+EdR|b?@#|Oxj}CjScn3LD64Hpk=m)Q5!_eno^xnf#iSD(z+J2N*8;mqMSl) zWzA5CoQp9YqD*@1!D*|?`wOXiqJyBKVM{cb_WE?D%>p zg{CuTm>xAC`G=CY2j$KnB!pemjwWg=xwrPjh{%Qf^Zd>d^q!v`6jIEbqHq@_gNq)3 zd#W~u!`zAl8?vXtx)L7!0kmwp@WEsSM3k?Tm=s#`1zJdAX> zwPCWi8BEyLubI$tjy0ItZvXDeLiesIrNCCxyLIw3apWlM=i z%?zH@&3v_4gos!cb3K2!d4;SQT&$?|zl6NDLFmlX65>C8T7fpq+2%)g2c})qxj&Fe z3_0j1)7#7-j|aq-(;+6AOW}1mTSnsdJpz%8>MaR}v||EsaEqGr-a)BrOA=#9Z}Mlf z?-B=ENf`e+mtS~#ebQofC-|UQm}yj0h*3S(4sP z4I74ltx0P1$yHRzRU2OGu*Rf;5jGx_G&L|!#6c3_JHU+MjnEmb4|FrwhQ1nX!u%SV zxaLcIs^Y?RGc{nLj7X;sa=&YAIDh?|^52k^F+5VQ56m4>oieiF|7tyK4GfJnvJW~J z7UivK#a69n83~`?Op)+!fgkRK#s6C$#OU?Kd-n?`SFeolb znCB>8CAf|4xb9MZCfPjEw*>ET_aFgMiN9D9jDF9#yvXkvB}l)}_j&(6@@_e0iORGi zIr1RaoEu{#p5TEO==pxN8qZ|9fZ(Agj!Uti)Fn?(q+IRP%v*b?;)FYUM;l?p`Oe(T z#Z`P{jsJ&-)oFqY?$uO6=nskR1R>lA-z(`Z4uOpDKt&sB1@h`qd!&*$gdtu^$ugr8 zN#XWX!(%OJiV6wwqZ*z%i?Yt%3U~(86?1t8>9M9}Nw)l^J3(7;(AkFya?q{rjYmxkGB*w>)e7iS$3KkAj{ptODLV0P!x9<@7_-o4hT z=*nTRY=a%K>$KTuo5wX=3QL)_5Kk6SxvTkTvy`xGC**ar4{NFB913JZ0uLSaD(70~ z-@k>=xmOo4|8AKwW%pUxjlS`#Y}dhHVhr=q)}7^Q3dYz}@<{DQ@2l+7hD>($$W6xA zNXf25KLW|{4{8r++E}6EVN=2$B(`YZ`y81HWr^Ox;QBPRvW^)SVN~Y zT?o0sPUD0sVxui-!i~F7Yu2{dJdhsGO_9bSO9;0D4~2V@?eLcx$m8y0V!=_yf}>hW zIT~)wxc~3WK-uvQQtyCh=}~+{s(ChUC5w}mcV$S5<7j*LwflEOkYIa>&_2`@QWHDP zn+*;k$sAcE` z^GaNF)_zq4LO=|O$^`vnzr4A_6nd^z$}?f5;j-S_tMAWy+{eeS{ZCPz9~R5fKR-0F zx_`4GcvngO;oy8eA&?|mvnXauCOp+-n4`?51`D?{2F5vpA{iaBaIC24mT~(*r+j)c6i8- z-bb6MuL?`$5r-RM4V5$;52Dq9OZB$+gbW-BvwX(`WSy|4_*}RSvMYX>_Ggdqo*fgi zqt2*ZF{i9|1x|O6NS#} zc0?)(s6w9PiN-GxP{j5Sr|Nhu()2RZ%d-ORxg^U?%IJ)L@+C~%(ffkTfF3}wxCI3R z1c5|=DRBrn1z82v$GTAjMniy@k0CKWTWOrO0J-A@aZk=p2&zT?cl-P9e(&E=-QVAu zyT9Kbb^f*9U!pJ$lD!jE9O(YHfxNkI-`dkVidN@)c$0J2U1CgA{K(^z_mA+qtt@pE z{#^!Hm@lL2vLP$%5g#*}x-0nJVJ~ZORkZK5(3hCc;_Ebmczu$?)SjeA2^uyvr|i#L zT}^o%DSANiG=|{1Zy;xg{cfN(hyl<655TRMgs(tAKAO zDZ=QDdZ%ZD%fVcqKi|2w@Q{y3d3FkV!xkzcldCq!5pQy7WwZrV--*D)X@)yZ0ykzx zqPyEVj2RleaXy%Dd(lA@PNB{!Gd5{$xJURQo-xhL{QUty6Ts~_1VG>5XO>++UX4JC z$bvVyP6~?@{SlQwa5#eGT~S1h4rlO}8wkQpvf8zO)YZ7!%YNF&a2f9Q?M0bxDf}Yp z+r(TP^vWnPe)d#*POI&%+GDjCu)pN)`HXMLEgw7{+IDH*3WfmsJ@>@^Dri+bPJBaW zwmj*qG~J%fjhC$mhx4~$4fT*!0&S=Kadr*<|H;bicJ-0X8$#s@@!oL2N`-eUb{Ek^ z7rgNU&VIx5+CT_kW(|i%Ldlm5;5xdo`~?1hkMGg~Dp{anmZ`nB(Clc{( z4fodjp))Sj_(s1(^2J|vl1ATUeQ*x9*zdG0TzhM{W-WZbjIsqL{tzG)I4k=>6W|-Q z!^z_5RzmyxHq2lji{+n0c@Y>%$<5oq(VX&>Bcuvu3O(-B2S{DRHu#9iY<#jXZyA_*|$lCi0hRoHvS+-D4D{ zvfLYsbdrb1mP*Zkgj=cE(~yDK=*u^(NRFViyn{(3q^W zRhR~*?hz$k$rNG$KF}dz1m`Nw|_6iM@s0P-= zNyIx@dstWkRR&rzv*`=5_(^&>K|>+?A9)=?QpNtE-S7i6#-pF!v(HIl+&22aflowa z9DZM}Pqg-{P4_6HJ5UtjC?ekbD38l-6#OwubwnQ(8Y0NfHUtlJ^7v?yj+AVc6W!OP zNqAZSq}A1__+~e}^O)EtZztK@K!?|?Cfxx49D9akR>q?=;eSmfQOouR&`at1Z07Z) zQgY)$ctLCmP*b+V-gq}Y@Jcx|wI&JHhy%WT+sFg(rbC1)ojJNdtgCRH}Xv6$s znqdy+>%3c5yJ_~Y$h)AC?JqC2M==}`AiS~hzbCK|1FbcrKGX!a10PLR$0vuf64Qk0 z5dGAIRXq&F6QxYBNtz9%hhRJM?UwpgHqwYq-L78-bp*!#kC^CkOn19CqO|fyj`u6x z{H7y*;oJGVJIC2=J@?7F{hBY{!7O(BZ#*S8pEFtEtMP{D{GjXR8;O4q2b+AsyW3IG zb$7 z@!e{@-j$6J-;$jk1+-n3CqLxa-vP0P3mT5-^V?nVWWxV))8};C`xp*`e%8OFzKFtO z>sCffoL*ndMZ>n(s84~$wNC`*)k9n2VSCJx|6C<=jrqFjdxPUAwV$(WX3q&W8}#5} zDZ@kfSY=l}W#@_&hQE=BOYH24^YR2=yRN2z7EK`oJCT&X_1BQfc_H__uU<^05QmGm zE1#-y|Eswqe64@IY77}lfNtRO4@`pG{VRSt2yyO7s~9oDcQGf^(+VB zYhXuSof{(tb{vRt25WrP0EHJ}!ym;;2)s+-GGC?5gThuX(3Um9X-uvY*fnfKR#wp1 z<$mKF^+K3wSE&wKzQs}>+^{lxfcDm-kvFGpP8!V3?um{Gnws`v47;Ap2f|KSe{^ zZlQ^qMTyB(y#w!f8rg)aY=Xs*s;oH`e3>Z3*~E`bTq&K; ze1;O|u}~BcTQvh8)0@HhtyT2yUuOFLqJN})sNicH!i{Hre_K(e!0!1i+7zg1UWdAz zt1^?#)nuM$Ji`v`mJcHO70*sHH(jeG^pXut!`rrp!@#-n{scOkXXW^Nej>sCn75?4 zDt<2hRbl_gyjZAnxz93v!@tTa(!^i_3LgxSU^Y#_&qz#`ixzPjK8jNoI>CJkE?@;^KZg6>SO<=TY+>s}3htJ>^+epem8+X}F+; z5S|!MjZ8L#D?_MMGXUTZZH2RL8z6qOPP*tm!GeF~tlq<;Iw)lF8+)Nl@@F-B;0sCB~1MRIhDgV`Q@Sko;m0(tWNm~Yw7m7Bf=lHEbgSZf{6>SG>iS_k z`6jtNdo|IY>~5j!Deo8$k>stKDFS6AcJG{xpE?$YJ@j7%g#jFm@S>aA!>bzBIFIBV zTtp^9Z2R!(06~fbF1I5?v8%E4JKJiQCYnbf>`EiPa*&m08^)*WcV+)PtT%hD;orso zI0R$u+R9lmXW98+%yBuAXLLzay#Q}WQ9m_N_4e>9t|$^Kt;RoobYeXUVedB6+j{#9 zCLBw1-vcw>T9IG@EAg>}IQ8K;QHTNEHE;1Uw!)1E@qhA9|KRbXEZsR`8oU2-CsD{> z8}>RQ5-W$9OyHFVx3viWstpGOQW)ulf08|c4^lW13>RP@*faIUqeE0M778C_i1GZu z{_lfm`Olx|=Mhn2IM3_Lj~2C?iRBfp>yer zn0-2$(ZimnZ#ef&EqFH($E^fWEu;>3??B<3BuFnvecB2%>&-K}IQa9}4cQxzx1l%Gf@bW;`i`bA9`86jI z#`xp^j2cFAa4g>*shzN85;c;Ly<Nfymf4{HKM(G7oCPsStuY-TTWEyW5Z`$wV;x~46Q1k$K zb;kEM9Rmsa`-`LerQ}s^lf;REQEERfw>~>!(BEkxbj9==6`jf|7MMS^NYFN>s9)iP zE=|30c4EJ-u0p_<<|#`RJEhNM%TKA~7X+|xDSS}WpD<82eRi-2Q+Qr<*~C!qNq|KK zAkHt15G{p6bCc=tg2vorO>oNTeDnIv8A4LdA@BIGpm_S^mdSJC$-+#_kN zNsKG=e5?HNkCt|j5Lf1h^2G@xr%_5(?wjsV=EB+RC{G~V zmwdlThSZy-DGsM{MZef{bY$gDqN}$P)K00kPxLIxd7a!V@!H?mu;FH3F4>vcvV3BW zu!X>;fCmJVjA*9>u=FAwy5>N2i;4VAV^_)ONRyl%OK@N|KMX7yt-jClL0sF5r7uqW z%}aHu&Yu6wZ2&wnM_TN@0USbA9UEKSmh5Iu#-9U3u5v9(HsVi9{38J%D%>@K)~y|D z$~>W|2v@#!!z4#Z13`+{Qu%NA%zQl3!o&lB*go*B+>lSL_*uZMM^G=M;aB#^xQFVG z4j6+g>1r40rXER=YV>L)mbQ=5!miW-6k3!tB4scuY6vDAtRnyg2o;#cU$Bn3b~sEM zv#Hhw7KXgtA|T6qGqkFQwwL3CkHuuN+mXJpAjq}#B@~{au#rGG%-2;@Yqw0}GT#Yc|IGmI$&Z9^X ze*G(^BShTC}L%F|jP%ANn$u7fmgwoI0k@OdLpct6So-#}Zk*RCjdnijrJ( zpExM^JZ%^n=#EuFEm~620&!6cPsVJTUw=ogKmgeq7Dwa6h`MG1Q6bO2`U>R8_I99g^giZYaaTr#cZsXaaW%-!d@Na*^<`n%?huG1K z71n?~>5eRErcVTXnGLZ}jA%q9D*iSg@P3^vhGU|zuEOdUkMJW)#6+op6Q`Nrzk#-q zb{o{cFM)y1%*X83gxn7S%I|c=8g2v7WIEu?_14_4PcWBAGj+GBHs4t#9E+_B~=JkgYXiuYBe8vs1Yi( zvKUW@v*N32ukf+R#`FQolpodLzIo$?S42QZ9JP+c zr2wxYSh?hqG20zB$Lsx;Ig$8eFGWsCQCej z^yDZIWp9nL`}2%ph;vAO64W7@Y#5_niwT&@I`%&Uqb;{_VxRhON!MiKwhV*|Pp3mj zVR-h$K?|Fp|2fB!NG(#x7ktz_O_hAApMWz4(1k}pDJ;s&J7Ra4J;|P7xR)&(+N5d@ zUs2P4#T7(_lhh5fR1MY7{EI^pevrYk8e7RQey$qaDZS(-!{)mixhZT3?y7$geQ!z% zd(3-mx&3!!#jt1~!Ug5$CqacV^Yxz`tHdU&MV#e}|~1M!aPnLII{ zIG>wEjRO+`g=L5bLZYy1EY~FYIqLbF1v;V=*j9|W;jY4i)Snna$7my*)YRrCQnEQ2 zT`*`t$HVP5&J7JSi}*}6KaEucQ;el5P`6oGF5RO1!n~%Z*6ZdTdT#Md#=^C+qtvG! zJc)J*z7^X6wu~<$XsoRz)ytwiwabdKien?t)jo3>{7=nh3u=CQ>uQqgjY*SZN&r_d z*Rrp*hFn?tze8&UxPF{p!0__s{;-)ivkXV~jc1+H1|VYOFK=&<||)iWKP$ZK~Kh zPGrzLRC4Q^O6*V@lqw~W>I6dz+uN(QJgq(iQGN#f#Kk@Ov zRh+?FJ4`J7Ao*5hlGbTx^@1a8gR;Y7P2$QeU5(9)eeSZ1=hr3;c`;we20g`g4(1*) zv{Q^^DN#0WE7+7I)g0M2jyX|ZN- z7B?-gKv3Clq0I&u+R(}i;Zk$pYerFfD)yE>Qg=5;>%_n-F{7AwEe#(xH!_m&{U-d} zhX}%QP*vnBH{l4mU&X@A7@GpYU|zN=EI?0ucL~|FqBtv5n^u>3mnM`G5VZP=oc@V? zmgOOYQmquLpUzn9uL9!G`*77}^kETNv8epd(`c7f8cw8~^ zngZsqO~XO~RG$;zFh_(BS8G!R=~bQ0Ax2$L+8_LZCrc3ua2f`DgB9AnwC%>cklPPD zPnkIS3=oy0{A>`S#+1U{3y&H1T~+y5URH2OqC`Em;_|CT1~EZNX?KN0b@H^w3HHbO zf)CL*J$=|#~G0IHtH21QxAP=5ydl0)dy68Q5hwW!wLZK&J`8)L4~ zXKcXyhmRYck)hjGVYwG51#fL(qtfa`ew!gZI%jdG3|_mA1b|hk*wvU#hHWy`a@JwX z?1_Th&^0NSbLv`NdN784Ky+&6X12aiG`qehWOlK%`|CBS^SAdAE&pLHJ|Y zK65~6QatjliGMI&BfDNb?VxbQ1l9)C1>uItn|#ST_?vBW{vdUl+9+IL1@> zD+<&z!{>4Lo0P0(rbY)D2E;erpxjQG%jUUm$)W`4N4sWJf=|SvCXAG~S#SAO^`w=s zip%bQ;Z< z0x+c>SM(IN(`6;EDIv0cHDS|KnZ8GH?UPev!)>1))8t>Wm5>{wV&uNztPsK>=I&n? zMx^3qI|Ow;v$}UZo$gOR6=gKaNV@KU1%|>?-YID0xkEn~bQP|@Vh*PMr>e9KzXWNw zH9=H8t+cSi!u7u_8gkA~WUg>%NIaleQnG=4%cLX2X_;oB|D7Q>MV`ZUNYbKXJ34R@?X_Aa zb5qbS3<*58I1{5A5MK;*PXCQ2@_l>dmJIW~uRW)a4Ndq163 zwdS%a^JiLWDOk;8!aaYbNE1!}x;g6(v$@#7*fDQSbU(DvLLh?{(AZ1u-f~A_4o_XM zGA5$SayJ$zUqNe^+u;-qqa5|}X>Nw+U|&AX$Qc9E9uU>3iSU5khbt(8mN>sl z5S$_;=BCjl7m>YFq;-n$Wz2NZutr;@!8&;xXMYdAAd4fxtVL?n<%dTYhWs~(ay9`) z*d!hX+S5>ckGqb%s5vzjU&3BnC-KzJk5W`s-w+j&>pMp}W~{!%5~Q|bpX`|RAZoK$ zgC!d4qTMr*=E08&lG3SCRygUgTg?VYn2D%z2hRRXAB05t;*9tF{U%=GQ&|&dT%Tm; zB?jX6$&LC~9ToJ6J>Ddv6^5%K_oB6JpYM?S%?epmM$L_*2^E~5)ijZgcOQm2?dQ?7 zM!l@`k)&wRKhUl^T23kKy#(DAJcqmXlu2UyI2me6NPSiw6rS}atwfD(=_bYsL#b#% z=pF1mord#1gSI{N=!SvV{j)be0U;dkIYsx`y!mtYsjAsXoq40Nn-;MNlF!hLv8G zbgXV~L-WHOoLYhW93RY7%OJ*j{Mp?q09`Rr@nLT&1^v~2A|VhtPhG*_bkfdcSS(F0 z{P)wnas}Y^NqGSMh@tPNO?FXwZFZ53SlG^b;{>i$$;HQ|-g{^;$exD>u&7-dz=bhd z4Ciaceu|~2d{0uAC&=5vxpr;MAh3_8ShCL2*swl)=ANx$F%v2I`^g^xt~Q`b1pd#|P0xc{#bjiezHDpafw zkog7GHNw=}C-NxcecJ>+Rti|4N$^vTa|&}YCO0}gv=^BNFtifLKpd1ctns|vT^6;6 zkw$dgqsQ0O%5XQ~AWmM5t)|>DWgx?bp^?K_GUBR%80!V-ss`;~0l2bC%x&RE0%y_w z5-D*nE54G1V2Z1KX{8vmqo8<4sdiPupZM@YY11cfc4h4PAq?qU|GK|X=3Ny1I<|o7 z?!q-CV0c;dh_X`hV{t^WQHdvNKbtoDnpBL&CrY3TYX1;V#^i8^f?_K9K8U;`nz`je z>56;ebhg+!tG54kFOi{}R!_LDwr5T9{gqk2rSH%k7g*XaTyxgd_iA_lNFZH_Wnjz0 z{m!Pw8P2Lm>x3nb37<_58s|xcswSD09{hcu#vSSf&TMH z68Q~Mg51?ExO-|wt0AvjkDF*+*wc*K4o<6D{9(F9JbhE1#LKpHW!b8y5jN#qm=2P+ zL;G0bY6gN{yZXK5m3ubz?Qu0f*R)nRC!xqduZcRD)-dx48sJdGMq(7A!($@}(m&@w zw7C~Pb`_QkjbqUQ_LK`(BAWc@%1vAeB839!-eT$n4gMF^Z7TwIW$9-J9nO?(*|4FZ z`i2z&o9Jzq&#Co4;yOiAKGs8D|2cyc@mHTqMY_Au>we~y!*#W6Y&3Dd>WE3}NJ0o-jv$u(N8LSEMS4iEO=(auz#i?(UDz;?nc=9~Z?vHKR} z!7H%}gu%fpz;0Hs-5kLfzK97$%O;HcmuQ5|izEx%y)T41YH~2|XVVTSrMMl*G+AY& zVbm$uehq-LVI3)1UjZXAv|5y>4DP3Ln;qaNZ2!6}iE}aUHjQiD20vM+FSEC590swDvU>tmys7MhU~~I0FE}+P16x)f;9; zAh)*H+@y8Ipg3BJsJ~B%Yf%k%3aT7^F0=T8Q{qw|5QZ*_h`v}e*yTF7t{{loG0)fs z`m<0=alRziFoaZ-AbxVF{TbaVvtxdtOYL|tIT7ZV%3Jccxs+lehw-R@%pfK@{1OPv zDnD%YsbPps6Vpka+=WrfIon(O&R+7Xf}}lJ5^NX`b=^TC?(vSuS?}dS%Y0#-BU%K{ceY$Ed=ZW1mA zpC9s*4Ua|$ffs+VqUj0mMuT*ceLd(F+hxnt@8%C|tEWv+ z&fkt&8^Q?Y8Ptt(nz*vOVW{m5(q$6exTDjR^IVsqk_@iTQUYw|D2C-lwZqs7;B4W^ z$2o)Ek?3uf3v`PQ5|b_WuOK@x^VwfbxxXpr=y`V)LEDOwJB$_vF$b53g=d3VX`NIz|Go~!4ursPHzg^V3^hl|cjK57{=zsBbBSBnC;oG|5nH%8=C86_! zYj63@^Bb6ZJLu;1O3H8Elbv|zBJE#7A046{G4z$VqD&W4$}W5k@%rc_MY4t5tMlFE z=vP4uaKVVWn`!u$F!o%~f^G8^-u@+BkE*w}^qxy|4xz5*GK8#ge$snKsF8?b`7gr{ z^uD%gEc!aD|KgUSf6Oyz$Y>!~Ip!3kIliqeG}DNNO-k^Iq&CTdpjCgz;dVug0m?(O zeIroi6CaW_=ikDSH)!JZ6tFhR(_9Fo`g8`7TTxm?MX$oC4LQeAF_VVo`Y>plHeLk+ zAieI^wNM<R1M`gX`oCPCUkFqq!tZrjhq2TlNWHjg3qdWH48E5wH#@$UsC@S86Yn|BdEV!TKSqg-%| zgPhbhS8gNlX@HCeX5GNR3}y7p8_5u&?9l!JuCC1)$DWsH$$cgC${=D+Ddn=CrtA(9 zdBe|WvMGL$Z(0|&E^_4d+1HM)=6>d5WzLWuYEE#K>9qJI2!67n zFfVXhIviCJO-~E*3c^t%5CXHe2|a09QGBOypeADuMlgpjbm-^oNva+OZ0_m&SS01! zw~R#~!h?1HVQ1j}6>%6WK9(dgoF>LR`Bi;|TccrOn$SHX=BiqU(U}LGq@7eZBMqmz z5m|Pn+mcw7?k6PYk&p`}c-DsjPh*d7V4aV0y{i|_W2T>q@K4Z`_g;s(`*7Fy6D1+Yjm%@XMqt=mpo(@* zdrB|*>}V(CiIQ?zU?=<(tEyoDrzm1rzm{YpR+)l(pix$!QGa43!8+x__7&oCy4;*Rcy#+I6l@;{(B zM~|Rxc4A1mU>|knBOVvz%D*LtR3jdF#$O5$nHA2MLn#4?AdQo-6>TBy{i8favpuh z*CVkOU8TFkd*y+zM2miwUl|V{lG`;Qmd)ikk7M7O>JQ3k zmfrui>`(X(tnunaotInqQ(K?^A{$f%tAH`1khe6!v6g%({*8QExv6w$Q{O5o>pnsX z)Ma%`)M|@o8$;G8P>1mZvNbZ6AS0u2ot}>^Zf6DUtsTz(D+u3<$yT!&Q@I_0`AnhI5d!dS3Ky8HOCZj?!5g%PfEqoL z=WcP_XrdTt?vInp-V}Q~>8SBn)LQ6vqxMhuRK~THl@F1Mn_5LQ^g+2?D4Qn(JHt%< zpt`#2vW=d^RfD)A{dH$wZyR>&wJE0rXJ0;_q9E7xB_VrVs6`cuCpttmtYn{ zY+0wD|7|ZwsU;O$fTfM zlO&ct6rj|!&`L#wn-wV*9vcE~jZ7$|T4+Lr_EcR$!hyNdWh)zG4{KACZoSQTgXKSt zJidAmaUb^QKKmSzYE(gOPD)y?OTKq~(`mSlZ9q3(6EJF~)xahCV+!;rg&MsMfn( zs1!Xfo`ys>64v22>?gBs^T3R$4ueieJ=Cn?E+$dSR0Lhc^#tn(W@esQj{VpNDh42Z zZB7eIea2|CM~9Dw{{H&^#7tl`irb88--nMq(#-~gwKkL;Ma%)~oyc`E1JzF>jv1xK z8hR(X@-*l+b;C0@!b9?5AIg4v9R?rv!LvQNaM#Y=-m;L4pK4KG$Aq9yjueG}_c3dv z`~z9eW9}3;tg#va!j%zF{6+6`fk$`k@o%EF4yxGQl-Q{XrUH_!b}ac9?7-(l9TI?cY`k9plY?b+ABSUtQ(bv^M_t{ z`j=^^k@opjTAdnXY>Mwq(6^yhDQ_u{c{j1Oe*y0S;}^=yd>kp?j%q6*SN=$0OYw2N z$QQD{stfK=(t8C9HzpMvG6d%T;C$Qw0k${VNsFWfvZ3<_`elM_1npTZV&O0iJm|iZ zjR__+XkO*AQ$sLFqd?Pj%xV0Aby>=F-HR7k{>%R*w#N8=30D?UDz;maCJL=k?MJtu z2?s2OB-WRQnMx3t{KF^ki*1K5&!q4ln)^&C;R%p%hsgyqrbIpFke01m_)F7IZq7Zr zIOejM^t^bL?L(BlFFTZt95uPvbb^%gZ!^SmXWFaLn_;E6AIfn)1;gX&2zCcxER_$|_xlc` z&R@<25cH4wp{@9m9rM#aleM_fr#6$b@<5mCebgyY40Xe2GEI^L_TRnK!|Fkb3E#5~~;ElA%5M5ul@`+B)zdVE>Uhz7KQQ=Zvf3F;?Yt(PCf)7o*?}hq> z!(p}Y%B#fZ>I~Kr#*9dNspcBd4(T{!4my&8;RrT#XW%Bb?4`ro=kTK58{>sf4+mEs z?JdSei1tObPzM%pz^IS*jeu$$Z-dmgEh+W_n^3r8dths|UA z-V2F3FTePtShTOg@LFZD$r^i|Md+-Gk?9gJRh<*Zq;-|0IOR~EQ7;TqrR?&>59P&| z>!zoFg81Xuo~1@XXkD1>ybx!&`^!7Z!{_%`rEK?y+t^6S7e$;;ytn>>L!E+w5cJIg z__9U;)(M*F;kxNRIio#)Wz1$ivT z4+XhAv2&SEe?6a{z12F4y(#^LtPkSoc)q|!Uw`eXOZW8b##KTv=e8*9jh`Ev zdcSH5*aNK+Cm>;(~C%|r_9j` zNV-m<@14)_cU01~+kWp+ZaQ#)&W@2&$bx*MF_E`gH5$4`PwzBlGbj8*bV=ghE5#Mj zq@0{Ct_;|IF_t)JK1l~+ChNLx@{o(zuYrX;Tu4y*z;MW*RO8VrgpSn8;okWhXZU z$hw7bJ$)-kTD&MMdw)1t5ot6aVAj-FBTCFqpN$l(@DpzgAj*g;paKU)KqsR@nmOFj zJ}3)njg+wLixZclqUBczi$u-wkXzx5Dt4mU=T@hCrM;)|Ym^C0 zTjgJ8cDa^G1@D0Xx7e4Y6l$ro5WTfe8L9+sn7KPbhW63)pP$~uA#QRxt%~dvSYn77 ziD=D0t;nS(kGYK)y;R|HP~hSz449{s79Q2hcb&$w9@e+V7^!`CEm62a83idBlx{$65)fkn6U;HA7J@DiZQ6Ayl80plkh z8ax>p5^`A})>GAcPwI3Kg3tB?IC`tvNRgaI>eA>ttCc&1)#?Uby%h)eMaO>r%t)7D zrQ)h;46@Sp5&U@_`PY>wZmCy!>-@`gHUuD<0&5E5L{k{M;_6gZ0g$>)_|W3UUPEqlS|x9Pjw1Pjm5l6oVIoybi+1!NR$R7bj@PY!ER7bk+ZY(^gSc{ z46rvPnPhY_*hBl$F+uBBP1~JmipsIORX;P;vrk=Vt#Gp7L`$8lqNunViX17Xr{L%I zRDene@E$DTYY^2P!#2_h*_KFET>-!eDYn;GC1*NS&AZ@6UT*3B|hXU2ms4=b3K$e6Cys&&7(v| z+F|}tj1xevz=D?)Hfbe|JN8S&j34|lnve?UN^P5LdF~RYOi$}m)Q|0{$!HlEqBn|= zq(#@uMlL81I308U$rJFi14Ke;*OcCx2CUGLKK-Nu*r}uKe7B%^%pi#erWVT{p$gR? zZ>^QO+|%1s`sh593q1_X=duC;%95Aclu)r3Lc1I3K_Qz6E|!uo05=P3GB(L2;59d% zfkLqZRROx*;r9VX3cdRF+^kGd;-7TB)2B>lKiE$rl5=1m!oT=H+Dt}kWt5c2lH&$I z28r74h$BKlnsaNf5!LD~hI$fr0fu$n#I^pq_INpakMH3c=;0CV(h|Wq*Wc7QtLgK( zS^@A`Ig0$@CZ^VDWJ1ipMJr$M*wfZJ42LV+oO?f%CeaMn8=aJ% z>%G=4yDD)nwQ80!F!IY07`m_45~uFNUAcfUKgHfu=JYJ4kUB)Bm1DwaySdN#F(-IP z-M`TJr5Ku(K6Aaqq8t@`3mreL*7L4d2+h>EMhi&0&?LTiLv88Jt^g~@ zUfm<#FJQ&ef-AW7lf+>Gr^cy{@Ca+E>;RSypJ zT#6=sFOAgKZrbsHcTJYfkZwaiu^q8g2vIyAM%@hjd?Wi&YT68URP}f(D~y@`;c+|B z(eT0&rbNX8207cE0^+$KuM3G-MmDBm7OQD5KYOkO;auXc9Ar-UeK_%%h%b04l8-;v z%Rw?>72CH9(9-YFqixw+d=D@)vxQ|2*fgKL3s_N(KT?EgU z1N4nAnwH}mAmneH6^qGR5ko`bd?udp;VaO>o6XMgZ$!RxGEpJ`Cw`3y^W(HGJ(ak_q!+j1Bwah z!@dmINjTn@q|RHwo;|Wsy8xy?iaFrpuHSeT6xln;qrVSB2BQ@>pa3BtO0%S@wggdU zo*%<7^P#7^^6{9xSkk(2OgGj+5Ow7c1&gbnG!3%%XUrh)%8j|s{4cwAA{X_uPV7s| zZy-aENs?w4Zif8Xc&@h%R`IPSg#gEr$uuBqV%v0IxAK8xs zf}v7iFTg|wEAh0Wbq{GK zB)pQtNFbgoTSSN_ESDaT6skWjz1oJ`eDA@%t%#G&u zbj#E_{?K9&i-$tCrA({N1h&TU3Lh#+nx3w-+7SetFK$&=dS-pE9%ms9T-P9stS*ql z+?eJoX#Wrf{m)K_#MID2Gq9q}f&@JE2zT<|)}JWTxTmOHSrA-Q_(x{t-HGnwIlCdz zz6y%?X8r>2%2#)f?zmnDm-CxL4p#mEvO_;KYuy%!Q@`;h&b(7BzytdV^cLqQx;iOb zz`5t?^*qE&`}}~>*srOxtSP%+5Ud@%I$K$Vqw$_*!SRNI{j!d@==*N@AvzAR*RE=C zfH4&OQb#Z{1kzX`T|pjdD=$TVyUyqAw^f7**R1z5&?byYp^AbWTfju{0FO$u5A5%5 z1WrCv&xGx##1u6z8x4pWQ&hS7^&Ovr1kT^R978e1k2bXm4FCo6q7J;tP#62pW89x$z#fj> zj@_JUwrRUv>maBLw=C>4Jv(-`Q#}_2hKe!&r6~b)^k-&>@OP?Uhpq9)R493Y zl-tG*fH03xy)29|&zJS0?{H&)c6Qc$cs9HH(FROF|8o@It-4)|YhJ7LV8$^Fgy;ho zx&e}wer$I-nn01|xZ5CEuBJ-xRh$QIy)_`BM`sXcy1jj6W6BabWZnOKxIP~tcB+Xv zd(quI`mD|#b%T~8m9+EX%UvnHszy4_JA_H|_e|IvS4^DKf8N4|H~B5`u;jGzwW~BCDf)udHdesss8g@1z1tipxB}H1#SK0jYK|JW%YPt z0>0pTw(w@$Z+EvHm$sWEZqZ5x@O&%CWEO1I2@gV4h@X4GlTAZUB<|i5Wq>4mtMG}J zLg$tte42sG75`nL_HcOF?eok3qNt|fLJ2Z~OOwdtO92xg=G6L4CG%tQ5_6tj8P{V@ z$9MKUxD@xQvVBP+B2?Vwr)Z-RelX{l@DD3Y0P*84=QIBZJlVQka=HGvU{bYV{!zEtKqnH7^q#J1kgU$$4 z(ZdAu=67hF2GSd8VliZ+*UjuivH;LTd?PnS3Qcs-3BA{IAPu|P2I)(4yH^ZbD(Fx& znt$>GMm!!LSIe~^!6|1!y~T0>ig7ziYjh(H=Pi0GftxgHKhllm07yTaT*#b)>-M#~ zLY@ut^k~v6B;gg<0v?asqvWc~pac0m<0VL0w+uBLnC1K*(!31_EI5^^zlr3I|BQj# z99TL<>Pe6c0KJY`s<_jfg79R!c#kk%@zqXpcVbpX^-4uiKt9eH*`il{V%cVH0%d+6 zC)G8H6T`~-v7_3v|9g3K=o7VcOs1z^DS)Mw1dZMNbw3vnZ7C&bpWyLK_U)Qsa<)wa zp`J%R$MV$=UjE46D++VOdUgh5me@$y&J`pjWD>`h?+dJue+CBl*{c9LW$38$Sp-41 zzl{!yt;(M;c{w3OjlxgMpPVO;B3$zLJ6q5-f~Y!wl;)_j(-<7kZ9q{kT2HGU&7`O} ztBH@yu4E9D{>k|n{TWKn{X3GT&jk|rvtF49H~B9)A4+(eAGu);eK_Oe$NV?E-~T$d z0dWw!%;KTWCVjTB*v;P7MXVC5Om5xm*3QJUvys~2>Irshwg_s_WGWx@yE>`6$@Y*q zeDahjYe`40H4ZbbH&AXdkfh}b+fphqe$7m)kPfT--T_kTuu)@puiYP+^ zyAR(#6KPa1P_&W2fQ7#UgG2`y-3tl>#cvgwMRSTbs}cG%$Osy8P=fdVRsN zdyXanKIncMz*v`Ksfl)KbxbB-Z+yazYaNennoTfFUiGd}J;^LgPnie?c^rAu^Id1f zUZUywSWeRN4 zEre3nDaN^gn(B5lBrwf8-0N5W`?#8V3mU*DEKW1DvD8ZyoUaPGu~WQ&fgoRzjZ#Qe zY>O%7(uKP-4NcqPMj@x`5*c(YZVLAtDbM$Ap0L(f%@HHEnX3Y)(8zC+f@##85y)1> zP=#2xENEZ4s#%7f<8dKb)1}EN16#hM5K`MMo9Cx%YI5e#4SiNURwZK=FNysldBVz2 zs#67=k+}}Z&pmPZ-D`RF{qK82u5^|4w_=e@8>SVTa6bKFG(d<(x~K5h(pmJ+iP+$> zZ_7sha@6V&7DQ;aRTtjX`AawTuzRS!sr!DhoPY-E#B+Xco%Mk{*72KyL>m9jFQYfl zBH;#-fvLuXOt43?TSC+Ts_QnP1PnGjXVuwo&h3KkKC8EK$Y9~tj?{Ggdd+dqdf!$v zuPRC!$7=>LMy(A9z^HlJn?LizrDxKra$ZliK#a{|m*OVwA8BjAWx1V@7BukVGqy^k z*JR%9EuGt(zkb&7#bfu{tKKK6x2`Tc(d43~h81T{o=D6bLRFm4>DQAN*|iXuKZe~X zhAM<7#PtJ{oY2uTD?J-)%DxnxybweGbXOase-r*&M#LP+@qSU~!au7q0rM>v1=e}Y z&OL7)(#FEBVLw;&H=)n34XA>YjAlAxYQY6js_SnJLe5V^kM--MdRQ=frb|mpg}zmq zQVdvIr1^nH2otk(gkup_l!;4Bs-9r9i>tIb#fVHx0)Mj+W+8KZhChQvPSH3mTb$=u z65vdyS^E{8TtQU6aO|t~Yyo)37lZL+&QJ5Ksl0`sWIXyd_^E7;t#JUyBtqok?b(vk%5f zVcSUl@=V+(Da0UU>d-&T)UvvygS_7_)mm zCw(eiAzxS{6BefRv9rCYyNN;;l|DC#9K9Vn|;bTkT5m%aV zHXoEFupXI+wT(|wR6XCZq$DLqD@0_x{xB6sp#%=2C`HLHyRHm~{H{Aeyb*qR`R208 zD{>okLnM38UlaQi++MsV2n0jB0;ODUst*3p>g21_AF%5Q!(-jSkVCJ7Xl))n4bb(d zut4=N#11c>UF1`4A~PF|yilb=^VY&Qit%qkC%#H#Gn#h~r?F~#FrKBQu}L3?w<7+A zyr}%Y9@EYB$(~#*&fg5L=aqu9D2~(p%4|rIjC7hM8G|`g1hVRrbrf)vKYh_*#MCw{CgH$F<4?w1tqkLb> z6xmrpSjlxOG;7VFEjEa9-B&QC`f%;JaXqnOAFjxdqqB;Mo9QaY5B;vp8Y)t%<|8xM86eX zizBBT`+6H|u$1UnF0w+^wpF}78hi75q;eNiWdgB{-wpfj0#g_zJuy=_%5Nz)2Q%Fmv9lZN=&lOS@250&y$mD5E5Q*BN#tK6u`uLcBhOj8&>xR-t0A01cBI4~&TYlpoouw1v~B~Lp>rgb*KYiWLs}n~jQ2!Rgc`*mA@TOKbrI*i2*c@=Ft4NIZj8A52X7xJd5B7gQ z$WzOO-Y0C!q1?P0#*Ey12i&{oNxm3R%&!;n^#O)DDApy9i%|9p+I%n6T~?z;;&SSb zejr@7cM#~^H;D0>sme=|$f*0F+k%?{#~1e}h;Y*VZ~S{=DQxlKu@{@Agq$1kNawT) za&NV%o7HmZRte*lPf=eHj+@)F?hmr)L*0W6jRdFOT#$1K(^Jyk!I27#;$L`7G{^Y{ zSd1ECNDt>o?XgVR-Ay(wM_=SSHCvfkwh4G0hn5JHNIos?3&uEYxW>5~h;BBJoK?9s zijB%$#OXB-20usS)Cg%t^Tz~lF$hxkTiGSO3Njt-Dy_M=X?0D`OpV_)+_7oW(9}rl zR7>f7V)`d?Un|u!$Lkks35o_@8g3O7O`#^Z%y)*?NcC?AdmfC=?r3W!ku1F`2k>G$Gc+L6rx zs{`OAKKvUi+rloGDK}3%;%GN_&g? zgEgY|e^@ZCg(_o`3u;SvvLR$V)-bQ`*G{Xpxa)rzW>&ucP4Ii)B2fSnR9URud%_R8oHR#qL zi0CqMd{5kHqBVY!$f8^4%LjSQ)Yc1qn&k&lkbcQ8Cq0d{SF4Jv4Y3{DU z#dZd2IKK{`CnobQm%j85 zi3Z3FLe*{stD<-NKvAfUG9u+@i8DBK{bH{PbtoU?;n@wq zX~UYzrVsTDGDH}DbD7NfP~Z{(KR7!#SdAIcsKM~j88|0pr?!=gdb3_a#BsHICH9Z` zxsOAGM4`jR#0pVW#W8f5(@nmqVmyBAHGN~6>U!?UGghMh$4_#Jj6Mbbm}eKkl)}fu^JguELz22$xXX+IF^2&|w=+d|WJKZqk>}(vL0&Un ziQ%nZ2jC2`&qdJm_Z%|n5*7$8&Y(u-S;ILJWnZH6v$ULbm!+CpS-ji6KaNhHEPV^& zK@!`4jUcOz3w6qJZ*ELD=Cj_(SIggY%gilGD)8-^+Dyv33i8HTPB+~GogahtK3*b7 zrqc)*!kP~$IJh0$&_w?QRXlX9Vu0_Y7A2YaaTHI=EHUs z2i+2DeT0_rwev=_bqyWoA$!Mciy`O>4Lb=Nxyn}H*oEOX

;1`{9GqM?>59`xY4xR@OpA$ZF%&I$oR+Ij=xOMs#pK~YRUfVi^BP)p-G#_ zw#a6J{?%(f=azK93_))XkMZas?9Y zd}($JW^^-=z9PjJRFRvj+4D5orbQ)ECGJ2223fnrRrt}sPGa_!9I`*9zcl&9 z+yEFTAV$8U5jq5+y&EwqcSl~n7 zDYoY8NbN})2tWSK+>!%M+&{R&tYqDXk%a0t!oW?AC1S+v0sf2tZoo(^5;u{+vNw@V zIwDdgCF?sm(1|PV7UG4+{blTe{ZZvRBVe13vq8_VGB&;UYaHLGcx?$ZILBt7CiB}M zm_2x%tbVg`m@)SaEOny5iD1j51VS zqB_YKnS}vX@>ME& zx+E^>EX$2YC_&Thsn|8Lc3w*a$8VYs^yZTR-}ujq(jdkQe-NOQa#No@3NU`YUZ|fS z2$Uxlr~8<)X{W_OxO&iH}}} z9+-Uv-aQ&Dt3GqQPi;vmO01l|u4(UiVsIua3TQfVoFT&mt^)iS z*-3UWn-jB-$^ib9lf6e5r99ZHq~Y^S2lD!W!AS0jtQPESo_}DXW|xGjw_?`WhGWZ$ zieP+7!~PU$05QY4wgKxL3WCcOuamDu_X-}$sFR>`yo)e?#TZ5nw)`&Zic<%k!yWSl z98ItjKWz|-`qTc3NPVbo>dTdYEgPENsSGlp(+ zQE^&2T3;y#_c3UX^m`!=#S@<@k>g&d78yj0}%^S4N18I%9&R> z&DxS69-I!fA+bCxCN~qrd{Um=)XtU|A?jshmsDu>p1xB9wrzszKz@}g=%R-G-E&lMW%)C_2^ z7iJfBIo@@hQ5c70^kny~M3*S~tAE307?R=1V)FBPI-;F#68Uk2%{*2Ddvh<;bPeX~ zBK4G})&oOHaspFqVd>~vjt9G}`I>JR%ZzzuoAj>sA2fk;kNMI5!hOTt1;d^I$Bn33 zUV{CA&kU^%YGfm&r;aj@{DJILqhWCAH;>?r8CGE-Wpav%4C39tdJS{{- zEPC=bqu!GcCsi@TMYP+1-7%6%*{x$w$;{4jL+e(U7}h7y8o?nsiAtQ_+q#WXZ#Jj__l^t%COv9saEl1eY zZwB>gTx!WsIG`00(3<6Dd49jdR4DJ39wp1ZHz|<_7TOsDOP3iN6vt^RY-dlW%WbIOS!u4zr683rt}XkJ zKr(CE08_@sCetmg;ypqDxCJB?GhgDZs zdO?Kt$h3qSenR|8Fh-^>CmAws7xFP>>)&I*#X3O^6Pmg=M==K>EO~B-MQKWCnyxj` zheX+Kn?6Zyi9ea_7A;H?g0`-=0RF|uogZFgC26HY6TGeXQdy4DorD8$Hk-xi0b>5c zSC(NJK`)RE#@LZfrG*5DLRS#M6rLOlKeO zssiX?hcR+{QYVZOBt~TRr5vU})cucubb**ZcdXF=jVSP)&9yy?B9bvKnBDiP+Fl0^ zRfS#tMZc(d?V`lFqQOHQ9}#vHMg^6kpwvK^yjD0lw%VCq*DWl9>dbwqsVDlr-OXjf zkwTBVQ|E?Dmky%z$g%x}$7l1Akg(Jd`J2;sagF%S5AXUQJ^p{{*}!dM3ilGNOCdX> zEd+oTXIR^Q4arfsp4sJ+YX^XBU^Yk&>a(Zk8}cp5z|7$OIeJ{B{(lI2%b+-erfqa# z39iB2-Q8V-y9T%5?vlk_gS)%CyF&=U-Q67m0nX-m-nUNGIrY`|hoZLX-o3i}nx465 zy01BgcP=&|q^O(id-$AFnCTvY-vPYU4{0ZHN3Jw;vSGlVXo27jeS%dGnK|J#Ftw8!Y*1Aul`5uwh$UK z=Di*xr?d5CXtYY_(!c{gA;@7~5EicXpNHGhJWavuOX-93H)o5t%r9CTlo$gKgLrhy z2^K4QE<0%M+@*Z&LvEbrPU?NnS0Tm~N@ql|MFIjdVs@EaA^f5Qsjmh5LpZ@z5+qbgtczUaTc8^_B>>l9AKXP0d1+Wyl^VYt9s!$$yR;IJHUKR>v z!$uLg<-X1a>#*+8I^$umO<4w-9>)e>tUA3m?4Qo0EPY(d9Q$Rud2Q&l?TOFvp`_~7 zN4=o?o-$XiT~TfOtU1Dj*uFePAV!P}y--y1it{BJSD2L+JGAk#{yaKH##Lb%16-S$ z{XAe-?AIl6YM(PW4P3SrR!U_5PA(o+USE>7`~3O9&&%3VuY6NX*~YcDK#NqmpsJn1 zWZjDSL6-xCFPeq$<|U!GccJHVK=cK=_d17bL5@khzw|(sktMp-PfD~sO`r0!om$~Q zL_-==L+N(D5b@#pTt)A;^GmeCl>THfXLaed_4`mrGq-5|nII>Mi3~Zmk&Q>ywZnrs zsoDai{?87Q%=r88nnkB@YrwIFzm$-$wZRcAiP2622B!kZ;HvC<2w6RvR_t~}6@BA7 zox-o^B3G-sXr#XwR&NadPurjW-52dKA9*R`xc3&OpOv5UN7<_u$y@I=lCI}Qg@w|~ zdJmXeW@h6_E71U#NmF~NUqU4J@Yg)K2+Pl@pvA!twoL%ESpzvzQ{%pf^VA|5zW=z- zdd$*k`84PHsg8+EX~K{Vlm<$<+%Lzu|I#^1jIpfu!(x2v@K&r%dZ=)KkV0b$JX-|GyD{QOsshs-q&Ns!pr%UT7 zFlPMw9|^?-H0kp@%YLQCze4HIHrll?f|SO76tyQ~k6{S)w;nnc$%> z{C1q^wbZ<6&X5k^t}E2{3!vt+lm8Foywo)1SgVG#MyE<4A9k#Zw zyW$F7>#H+4PJmXdIWqvgVBTD{g5(ohcG6xgq42@^vjq@4*Has3L=eGFNGqyA;n$CU zs5T2$=otaKeQs6|hQcz3B3qRfKx#ZQ;4$$#a@o=&U3Q`zjt>FitU%!q1VkKr* zK`;#79dc?%5L*zI78!zOhien!MZi>%l!W~^dKrY-lY#M+9Uy1k3%XB-pEV|+(ux=+ zYCP@BWy#ICjDV7*r)!E{IL}P0`h#~nAg2Xf<^c|*f#6JuMME?)nK2Ic^$y!>bsx1m$hX-LLF(3dQ2|6)p-$o;saZ~W3A>W- zK@v&kQz){=I9ix5P*2m)_VC}Vpz9(E2oCoCe5niEGzCSm*Z1S*(kQ<4%1P)hxS$Cw z?|uRNt{>SS0-|q>+=Gmrui+2FCntD@O*geMuYT|YjQUvO@(#sFHhj?u2F_Ku+KvyH z44_coB3SVuP`nale<%R}REo-H(*-pYn^4lcHSpP>msdNiAC|0B zFjLD)LqVoUfk1$>p=-)C$3>+dC8OrQ=qCfALt6UA-fodzd<75ex1-e`{wPAlutc-x zlcdcD6ck3K(@lcbB%Mnj+vs`r1hG@ow5|kZRy%YO9s{ipF{;3=sV}>O)WYF^T=mN4 z6wn9NS9l})6!B_ve_T1h0kTVc0Gk$o7nu2ZhUUkgh|DZ+DT5ndL{{u@UFL`V$nt-A z2TD89kao^W2}dYYOf=nY6+wN4R%a=WkrYl@ecXL*li{03-Wia;4eDUD83;^Fiw}0LN#|r$&sg6aFE+ zWSqfyS@<_k5M)Z3bJ%^$uRTRf=EFeMpBuViGp#T)r6kw5D_saOT*7yMW-fM1!xiX6xEDzus1d7fNBd) z_LTvFqV$M+JyMXwIRO->oZVES|k^`CfUVVFR_mh9@z@v2FjH({$ z&I`W(J};*w`Qaq}5R9|yB~Bgcy*LSrPYm2K!%%0ihB8`-bH6NMd*(<)q55G7C)=KI zl!SC0YMVoC_0;dQpWW($Qvufzm1)l z>Zs1J@+V*FL>rH!!E_p)`IrhxYrt=(g4CQCM>;Cgf2LdllnoEq6Gj6FZ@-eD#(xs| zVQTkEcy|w`Q6bM4Y9m(MA^vc*Na--4Yorvq96n5u6sWNB^e7LB50o-1R6_$_d@Jex zM2}=+50*`Zf97#t;DeK;aqIn(Vr$3HTJj0X?mP)Z|TJNR!u;J%fyYrG3Z+(0(lVY2pk` zZPVO~j{2v7XxcjM3nBbjBuHd$U;U=N5nqeX$crM;F7icCe`u<-)3gN!qb1J z_+Uv4?fetnBZKN9-x!o$c>&U8oCn&7J()Q%R_yDD^pkTEH9)=?8fxC9Ugz6v8tiJt zB&V~I-Hm^>208FK54$dG#DmebX60Q=iJB<~#>Y&b-Z#CCuzH)eJ{pd`#mAC7ny`{9Si-Ul|S>4v1Qgz02bR{EXcHJg#W>X;;e1$=pT0dS$%N z>&DT$8mP=N;Ew$rF)0>*w5^c`H29g~q|B{POxz9eto2*nI&ARO z?@$HR6FMh}Y@bc;9Msd%b6)Zi;PFJ0$8Q%BuXf{y9E6K&J@s|NB&@k4C=Qo0L(Wfq zXs^R&;VFkh9fg`GFewYW6ZX)cf+>Dp^I7-@bZRb3=(D=WYvgYynAI0t?L zCGV1bxk#%-8DT8sA#I2g#}$5u=QxEN-?R57bId1A^HXm>*xnV`5L!2y z=DNGfDg@wJ^Y5U)=t%EFp;&%s0vJt(sd#0nZx;E7N&nVT0K)Mny1PdOc9ze``m!2g zoDp(YV#boEU+m9tWRPd=Mzs`+8va;+<4cKM?|js|o)w=;@!Q9T$|+I|8NpG*DZ7Mi zwE&jwimSs^=*F>4^#YT~u&Ow$~d^P7V zLsR+_dG`7Y%Q{TiziR&^RFnDP^I$`Ff3swul_M1?NzzO zb#Lc~{NC86d^Mxo8f&R=ysHms5xWrrym_>^cAU!{`nGI-1YhUzDUokXz5}$|qSmVy zfn=|^Zt9~mgLmw2_W4A0wh>Z`uT%=KeoHPj+hePhrkYE=C$n^N4+>m@+I}zznL_Bo zh)^bqRqS1UOZag7_TL*nFW1FJPFBx~2%4Tkc%-AV>u%|-uM_pj)B=ai-cK?!fg+Jy zO~0y}`3e}~XBW}hQaAcUFPI@&nm)(>i{4TN-}PYja7f9+#AS~xW|K)}?~4Q~>>!W$ zqKg1M8wyh*UdK1d+;o^i21SVLnpE7b`ME4kz$UM7*G9f04Q-Sa{{mJ5+nzVgkrI7D z05(B!MYVb`0cS!WVl$AVg%@;LI!uL+7udXDk5NTfv}$6#;tGru(xr4_~u5W153Mm zz16PKfRBb5Fx>-B;iHN(5<{1twNghn2{Nd`4SY5H zr{=-NrY$#dw0Ny{rG~P5Rp*8{eBKTE5l6UA zRy-vJ2=j;#Y{3SCz%@Apy0tuclVpR`2wfR@pOmKvr;3;Arqn9ihsbd&A=Wx8{9VFm~>Y!9jBcFVoRXc$A4_J?2fz!{5c4 z2uh)TxQ0V1GbT7t*|J88OC|2BrD_dU>R2XpXATQNeunm;xE!%4haP@f0uH}Fv3g`>Io1zM^SJYS zY$z^;DRF*rHDy(xirYkCaB`{Mgd%we%+#-|`fD*a1xD?gChXcU~fES5HnUWCA zzsy?6enaPpDT5OPdZ^H>Hot%FdO3CwZSvP7MC5iPCU*|hjIx`*wkJM&Of3*{zl8OB zQeOZqP5}`>LEMkl<2voGR0bC0%&d)J*CvyHlMC=6K&GS7 z=^GVD0|O=isuw@aX0`DCG`kt)B24%!QfI7y0; zUH#fO;T;4w-SzR;aR4;WwT(7`vQpO3wCB6jfXCNpVmU(qA+7y3h7<1JmQ+MO+EeA5 z1WC8X8gd5@LmQj<_rDxk4Q_Q~8Q)kHvgoKX+j=#(a^ddIdXB34C5BV93%|Q~g#xRs zawIQZ50J~jP0(us)QEdnz;7t7>9yUJD|>XJjEH*!$H)Vsea+h{y}`ST-;Ty6i4|Un z0$UAf_Q?|m8kw9gVgX&lT$>hB2?H;heIyG2<&|v9!_IE^4~}p3;rJ1F)dZX5Lqb~w z_TE}|?PfQU3LlrAhY4SV0BIN0rbxF^+}H6!$j?7;SBu-Z$9!w#=9zyP%VV+1ZdVEj zYg=YUy~cQr_;Z|iB~J$B@~g|cJC$j!;UOj=-Lc5&&&h1`;`N*Z6yw)n^V&F|WR;+p z=zhTsf^R3?X}ymfZ|Jjl2qM7nk8-pFO#9OCnLsu7Zh6`NAVbj$kT~kwp528 z@$YTSl9QA3F%pg~c9=2iQzU1M){CoDacw2w71Bpoqn&KawDk$~rC zL4dXfoCsUprs)97bS{K|ad)rGUnaNnO^D=w#yN;9vE{BA?26Ae$zHY|H3=GvS7 z`cSrsCUQNI=-A0x^h^c9$;@Jc%IkACrnQ>jw^z%Uh141T{4y}+S~mVv5YEr*1I?uA zll?7^L2DX5yBNo|7{N9|R?w(>ldf#gw32qc80+^VtT4T0z!x(VXSxN6wvF)iiC;=i zgCr3)ZG3+z=p`H!9v7Ty~(yYop1OKGW%+B-ij$8k-K)>R}@EP$v`s zPGz)cdXcX=1gTIN@f`iPVB>W*Z1xJxdAWKtRH1+ZQswyPCQ;92g&%hPOjp1$0`sr} zfMQ!6zC)3@1J{Y^9c~eoy?NSMpSK#;D?O&}YKzwT>xa8}2>?gw^=EoF|5QV(k62Px zn9};2cOL3}w}Dm#DQgw}OYaHbJ-@OL!t9E2>#yZ$;~8kcyV0F2{HOh3o2~`$iY$Ps zezyljVt<%tD2!KCzQw6XGxGx~Y+(m5lBw@KRZ(zHB2RtE9mC!ZY~~r`a5EGHFbb<3 zpU@iPq&A|aF_PUiD1}b20*KWZfc6OR;AJawA@xFplbjDgGPoen-Ny#z^XW_!(lEr3 ztYe0O%T3KPDF)Zz`I&U*f;j}m_YX&!xWe^UrUYTfGkLD%%5v22CS{o)>cWy%**`I0 z!rKU$28N9P>OBY^4N#G%LJNHydR7?DY47@+Y4ep-p4_uv^!x zEWA`f_NTE~7k;E)XOER3kI7%&~bo4%+rMPksXpT{13F4wP&dTF)jq`AZehmBfv z9g*eq0qV`vVX8YK{E zjE`xMMtQ6@D1*b86}Z6*Da#GTHgzR>?ZQNkzl+1rU(r8c_I7sFQ>e?UFRUsYTsWMJ z*5bbyt?InA3_tIDMKMPM=%2EPYI@Z&+C#<9YOkjeFjB!d8dlf1;FO=^mSuZj2n}%5 zO&^&gjt4@__?-D!LvTF>vqY;oP>ZNFKXD)r!FI&xbD(MY_~MNGj%FO{a#^q?V@8OG z@`1j{ye(zWg(`hU;6aV-A-_nsY5XpF-%(2GsbmabG0Nk)wKPBC=q#W<>=tNK%)~sP za$jQU{^Ig9k92@|YiKp7rMfmnq@hE}wXBT@Fd6dmlwx(G6mm4Jws%ZElYrR868@-n-Daq}NtToU}dWF@7as4;blvISKudBU6droqP6fe#0 zej`!VD{&i1>BY!T|EbSGeZQ`Gecr&9QBlios&(|UA@1F>%aOjL{}WpI@ibMlQF_O1 z?ARx8Ay9hfP2$KXc5$1{I)$4fXQrJ6YU{oyTki+nz}XfJwp!Z)uj>_rq;@!{d5E{( zxvU+|m^<)92A)v7(Jr^Y(*XHtn`uS&psge5~Cbp zKE(B;r@r~(j$!)T(<1}U?6^;$?N!`=E(J9FI^6686;QXTI~!bk@Nbr9DFL*F(!j*$Tggtl_61;U{BL5UB; z{XdxJVC3Y#myUccx?XI!L2?Y51d@-vW^cdVmGjH<#>xN|88daECwY@=TH*KB9Wch%bhWz&{yRwzunscH#lwHvqlMqv~|p zIKb*&VPAQFB1%ogbA#S)S*`pR=DP$X;DF+ut{8CKp3T|cSB9kB3BE}scsgKE#Ok0m zvlCcO{j-dpHAOF&|C!t#;#xgZ3c%(QzD#|C5Hiokb*DlGA>ylrmY|RTP(H|7>8NgdM{Gc`hkPWb+{b0d--tP22!8mr%W|I2bae2C)4O5-4}X3c`Kcayhb} zP<5747%{UE-@S||2LcdBDq5^)w~0*po@g*4!?t6NZS7wS__02ga8O80YnQik%%wiS zH(_o3aL9)l=|-qqQq0xPS1#I*X)6O&OtYL)7I!}tq&4pUxe0CU{UuC~@rDIC_BZ+r zN}UG7^f2lfs!uKUdXcX!Og%{+~KrRK{;Zd_}}-8B3lDLqD{{!WxOQg9ew-$?8P z)2)3k4m!WUXQqy9EIoo(SO7dS2VQ1_Xihj~xrkf6LQ;b+V*axfnws-ziDG+>svYqiqg>Ac_Z;s5ubE_)1 zQm2EzA1s=`W!oqDyupRFgKQ96~GJPykh&o+cHe>(I<5smCWR9G6*Kjy~!f&9vnErjvjXt4~R{WLwaa@o$Pg$wqC~ zBlnOTyU>-k0}@GNL&ExmP!Tyx%|CWbU|=YmK9GGjK10x(REmeYBPRiOd=Fdp-Q;!72GwttO}49#WvJ z6Wy9l)RxdG!BVE?0tz$0=x?mM-_xcRV+Zx3(N0AW7&# z#W$S%esSAf-g&P@zW5T|YCd8#;ox+zu?-1>=_;6Y@q~^Vg=?D?y`>wU<$ekiW4hfI$}wpK3hNu7bYQ zq_tgj(>b`r5tMg#KXtCJeh(-lhfMfdDR_Kv8l;yEwJN5B8REQH)_ne%%E&?gl_$)t zqUNcf4zltoAwkC(@{W_^r{YG6RE+|$dKFm)0}=7r-(T35x3j!f&7C5b*bhw!kZH-l zU?zp0sV!CF6Axjds?%Y>XqB#{wV3J4tkf6gR2Kdgx=7Vw6ZJCj`Pme0Th*PMb*@6W zs9Lr_{aF!-A(>v+16$oD3T|67h^CZDRpbnmM5pndGHZRVaTQrBhliG#>W6 zfw#2N|NPSwIiJ(5MS4yNJXanyM4U{89S2_#|7p_CV@?^@`L`GTNEMI>)3^`@EcwR9 zTn{C0N-7DyWT=kHo8@*`0Nlu8t5%s+X5 ze#aI;F=mByyImBrJkt5{q80X?cDo5C$k}FnQ>O3kUsAHRdm%B!{B3metnK0J+if<4 z#F*V91f;Pn09YIV^5uRo-@Vb&rXc&2xx5OZ;u;_T6&RKStj9sB=9<*%JAa&zRfoKP zsN|zTV_w2KK4UoQgv`p}g$Jhl)5>Cv0Mld7VH19z zvPINgb7-t`X)VN^p=U{ak;V!@xhaq9y#bWGj05=RPhyFfgQ8w#jp_Qer@qd^Xh6It=*JWLzsyb z@f*pzhJKxtUZzl+w&Xr`9LjkVrh~rOlpMyDqU%#84X8#z-s;x8hoDv)g^z^%Hkgg@ zm~nVO1pU9lz6;#!9ps6nN^chpM}h>q>fa!9Pr7Ajk5d2qV3AIvM3RsglJA8|<5{6u zyNAiOwxJ0>A%mF(W=mp`zgZ=~392y5GTXgYo=O|IS5>a;GFb38!ulquQQvhy6BUEW zQb>pQ6FbaPc1Y|lulST^R0?I6Jp+<2C;&}k*jC}*i0to7l}~wEqNp48E5{*@1k|o5 z8lF4mpBe2KMFVTD2bWTOSWECYX~Qi~nL(j3#|r9*-c;b5ZOJa?xzaziSil|TB%V|twhOTf8xF!J0!_dg8^KHxWH&n#_Yv-mr z!R$&tBRntIP6{dM(GD6=zC4JK4qt*d$xnrVOh~pckISXLaOGHZy_zcAt+eGYuPu8x?9f?Xe=QkthB};rq^S{|A|9M&SB>8{KdGlE8N06Pf#YoP z1%`621Noc?4GI67XPKMIm_|4(p?g!zzQzC8_wf#~l)lT`<$~Q2DK8291XSoM{j>F} zGBkHFR#xzaj=T=ewuE{+sV1vuKM}gXq{J}rumo(@2pNnRV>(GPtMva`6#cy7Q+_l> zcAfvYwH2slf@&02N$w<{MW)X|b!vkPgDn`&rl$rH&iNNLM}_-5^1n0DckriQEbyor zoVi39k%Pc|m4I$3J*4582vZssXq3P})+#xi8y3 z={)O2z<0Ai@b$CCkr9w(t3xKrhc-^hj}qAED<0ZZ`H7JQa8G%#wlG|CK3_)hNK-jb zQ3k<2Q~4Wi%xo}gXfRvfS>gXR?)g4@=iAvl+4T+S>b#f}8W@t_#AEM<%2bqSvO<{H27u8h6UEP6|dRrnwk0rlf;mHMdrqs3Ec*K*17GDu8s1M9_}u>`UX-oJ!3~To)KaW~xG)ud5VFZ< zqp)U)ib7=uxr))6Dh zC1gjap&JDQ-v)GW0ysm<_&V9qqyETy%ypfbKEySWbr%JAVo602jFnU?OF4VY_Siv7 z9e@1=rlowjr`!T$TOVDdT2x;chQaY<4J}xUMs*)!KqkfMl%>8sO?RMo|4!Xy`B;=d z6P6H0R)U0g1KGNS$F5u%>~V~wEGdFf^ndXEp8xU@&KR7aaib~@fhm!X*!Y}y9f@4% zQRA;1G`MQEy(S(8P8il;m;3!M{J&0!)@BES#&mq&STeSC@ICvWqx;|^GjVLwnR8ub z2TX+Ks1yE{Xmu5T&6yKtwj#+1>33g%|GDdDQjfE<$kUq2!Yq5_Jzep#6OyBAi{WI8 z_UuV?vmiMJ;4g}=S@BHS6U{RaPY5s%2+=RtYJk8O35V_uy z{3i|!FDAGB)nvpz`K5f$HBn51kly8glLD0eoW6gfCAljQ>)g?{jX%L5=^95I+M>Qs zgx&?006CNNp`tmDLs`wMyJqQX2;bhGG~C|mo@1hof+>W}SgV^4Jdc-%BWC$lLt&T0)2PEwUOZ z!5Fy}J670jHTW}+J*IJfGi+Tsq6pnK`rOls7pF@W-2*~4KQ5tZ_8Y{Usj!X;|1MD1 zFtzszKqP-g0KJ&3@irg)s5FcJLr#|%77$Fdx)lEmkj4Y~Ki$`((x0T@wxIo6Og0H| zP3?Cadb2T~xE^+-i{7W)cj0AS9P!&YZBp^$$rng>E$41Xq>xIApAc7vjZ$M30aZ6c zN`Gz68KX)6h*!mvCKgQ>EV!=MBox2pzJ+}dK4PQ@55eP-!Ik7-S(`myz4R`tYrmt? zn}th+M+8Gxuw09iiholzL?O_!v_-~pJa8|H@`3~-8BWy5LMznO39!jkOOLS-rzw@q&S4LuTKq&%$zR$EW-XE&s!0sgbSVCn0)fR0 z(LEh{3{MUa#$XE$(jTDPZ09esp}U-!MTsEdoi4f$Ve^bSA~$)Bx3vlXJ*M3fRhM|F zgWh!YKr%wU%6D%vdLbUI)P;{z6D-LZY;Y%bjPrq=MhUT9`N=(5P9~eE;W38KAQa&c z__OGz>l7dU0CP0yc9>YG;~Nf+z2be0Yg~=at~{rRN*IAYxFIOt#f*R#^_PMMrZC(x z`eLp}Xt*H~;gQJDx8i{GFWUe0m$p1I&)K3xU%@5C>0@VtjyMZddeB!!&cr#^Gh5hR zmQWBGJZ@k*iDN=0L>05|N&En~J)whWT1~fFP_%(@GD8t1EzB?667t0=;wxVmUv_iV znW&W3zNrx5jPy$Z&OntHDc^_w3qP(fqObx}1KbM>BVCXi*FG%=DL@i~4eG$raAjG; zKe*!reA6&<;m^-l^Dx?{Nv>lUTyeqOAqYn1#bPp{_mZqbMv@^UOS`C-f)qq9WV#J< z+qGq-Y}%IM_M(E2GhhPoq#a8`0%q`eVbJNkoAo6QF$I?SoVAkSPG+!%QOTQ{d4j1B z7?9f|RGh%3b%IU%M}pOX*8M>7{5jpE@kOHJu*z;?s?2$57<%`F&K1l5Jjp%}e$wL4 zb-?;h7}?(TWPKd*K9mqdQqEM){G%N)aC;Leg3^O{8W}D_q}e9ku+YPHIgb9U`&O#! zwR;!T<9e`Au0aFru?aUU*DUnB6bGf~&%56+^Ur zITBqWaoMQ)l@=K=PYZBNram&%&U2efqK@gUJ`MhiAgFQ^A-=~qSzJN&H%5f`N4Nqd zh@6~QJ1yc`enr!90kf=M!i{h1&h>BWRm+mv_D`z$Op&C}f8*XKKbjrhp5>!mI)fM- zyTi+WpuepPpkPx0g{{yFkv;6d>mP0ki)^GF>=9H)2~zR>YhoFJOCMyq27O9=IoTgC z;`=zkf<6vO@NO!ItlPD(Z_nt$Hy@-|qHVKkVngh_a3+Y5f8HyEs^W&K8c8z-U`0?v z5c6Z)bJ_0N;<$v8Y_*m|w>iq^Z}MmVi|Oe7iOt2Y`f z2WfjdvOMGx@#uAVF}j(aTN`(>w3G42`$4G|<~A=*25E!yjV<%S2^&-oy}onTE&Ulf z&xRN)>m4b;EWGNc`rcTZ8>eX~1Pi_!+C%J5Q&SUVKQ(iZ%ufk3 zyO2{k6zFKxa+L4v8lI~xUk7fA7{TJVlc3zBuVbZKJG+Mh$nPqOsu0f$G3bR}sAd=- zQ!fcI>gf!2Z`UjOyTVka`f{VWfiCpO6_m%TA>)2HLyQ!dru+Etbp*W=yJRvULnr-3 zLI9=b)NGu=98LbP_1Rshiv2s0ax@avt!7SlSa`$WeuqtGhxs3bgu2}z+dX8uMi7K( zJOMTey)UYfDz11A-m&}nBGl7eUj-WePo+R3>Vthu$8DQ)ZJJld=AGs-5(>U7^Q-8? zskK4*a{TSNA4I>f5o_6h4Gy7AuYI=5m&JRYC%u((SJ~{CZ6%j|>T20O*$BoJgC|Ut)E*c?uC10qk}$L8j?S4@jO>SzDwg zz26aCVNkRT?grGXq)w7sxil8Z;Lo`9?p460DVf=BxBFg3pn?n$5@qR_;;a5k{@`Zc ziGU0=BnAQ-hc{sy(%t9(!3=$oKi~^sB1HI1F9bVI7P5f|9Ezs^@DFde4O=MGDYc_) z)eTc{E-xa@bvK@VQ251Y-Q|C_@{#KtTP}v3Q<9)?ASt;rK?#r@XOEccNOmtnG|I(s zUIsx3SaupcR!=+9$NSWZ^W-~- zdfVS&!SA*Db_C`;gCDfGMc~d0OX6S4T8o-MeR=&~yyXQj18*EDT0vuxC=GAjAo})W zLdRnM&=Mpk6{)Ci#~k8xkT|J(0Qa*UL-nh|H8koH zg7E;7SuJ06V|F<6#iXfj2uKFsRWw(uNt_7}T zjMtX=++zUHmA`xbUjt5TF~u{vC1X!SRkn06zp10@+=yBSDxyo8Q94Q>kv~YyA0)|k zQ?pIdk9>22)^i&+P^kOGBl!qJ9_bQQtDjh*cdLc z0LW8t@Z`j<&2&Kr`D~=makoJB^$=g$&Y+2)#e~`y)ckIJ>#Luv9`hKbZTkknhX((U z`e{J?0=0xY@aqsNv(FKQ5$zW*VxLD_uAI|b? zl?gbw5dm{q(Y!W&JUu7wY@gh4nYn6EOQ_5Kjp>U$N4roeMzDc90-%ZI&AGo@IhnR zM-8^6H9Q9BZFeCN0LOp}ZWPPQPTSk+1SBI_wc<~?0Ksq9w|`mvv=%s5AM6@_oT4^k z1gdlFGseMwyrj4H#r}CzB$0|3lgEzhj8G?^ZrB)v&z-=-Mz}&xs3s|`XrYT%i*}_f zUbaM&vV@Xr9~LO;yCI7bf|4y2^b){cgqW;SXnsOe9x}k;GA+(#G%0uL8eP+W7o#YD zCXp<|Bpxb7bXqg=+mLgH=fQE+^o>VaOtS;r`3h}q3@s#jt)DhGEDu|fHFOW&y#EHU z^o;vlNk_1cch&HGMMq3s3~I|a86yRVpI?vb*ZFs69LkPD_}Q_HO@^Oz1~C~>X;wpL zaa0Me2sqh~?>xl~w!4Qyc3WAE2CTvQ;(4*2Gk8wQwU;;O~$CDi#cO6 z-`B2^l zc2pd)vw$bO=xRz)(_xr&NV1dWy5RL*v zEFZRb2!Qm|34rTDS+~>+7aR^J!f=Bf>k&V5lxUa%xlc{%TPD@|)4v}$D$D&}oPOA1bs3Z&CC$taHv+n(SG_!jt_1^xen#SZD0E& zPZP%3!i{2QQQixP-cFDFK6o7 z|AxpY--u5CM|Io0pGFcY29tPSe>>@x4HLF762UxuE<;Bo0NGEwyGWRb^70Gv5|lJ^ znXl#7pGz;myjTb&VU^bs_dy4I*~XM&^Tit2gs#Z69=UaV8i|@0;GhD`cZO-G0z>nZ z;^aHN#8A{EaA$`^>I#+*tAKRVxQb~zhERz>S{2o+43NiJPc5TbP*K`s1 zg=9jv0Em^KZ0$!4MF}gIu0TK{5zB6Uk~B}lJ@d_SYPIH_j4<$}2rsEAT}Q))V0$Mt zCQsQBYjWSVAt;Z3rNcg>zZMSjsn+H(_HD~@<#<%Qzjj{?P}xvH6(nD%{~!L9J(DPa z)|I0|8!y)x$9BFYMcJ8nvnw z;GT3GS^ZMOO2=7i#Dbm82;*ROw{};7SG$TW09?$U_L6|h^`JKjt@KA8>hbxX81B2fsX<627FwFD zxkRB$R)SRc4hs0{yQ^eXANl=b8+Y1&IGlD5)bbK;?F546#wCpl2FMbJ^w~ZB5=UmI?!N^t zp#fSBXAon6*A1x#HF}zn{iRR25Sw>NPWBF!n708_tn`zhc>}K38ke;Is?{MmTeqx@Ifp4NLmMj0h5!D;5mvp<%3jHA6V zxBy&@Xe*pSLq#<_hUh#Qz?gHI<}f;+BQ`Rz_bby~B`vBvM{DS@rYq^ru86drN|ykL zvIt`FjTwG`AQm=;=Ix8Ff0Ay+O_ zwq^t1^W1g~XbU-|!5qnmV-%9Tg(aYFg~)fk@{w~w4Xik24|Pt+(8^M;kg*cERDwi% zP~71cz=7?%!P{VRU*2tr8D`zs{&emkWSWBqc==Ma8rYl966e8p(?Viy|Xe#>l-s(cjC8U*!n~R$1Cl8nrZLXElQH`ck%cHRH1F;7hex z^^KE15gTvP)RQz2Y#aU^1`u#f9u_o}STH-?Kdg(cPkze_OqDvL|6$|QAI{Wot` zKa-p-1URbw>|y+usjd>4hZ9sx1Kj}?MNQH+OACQ(m5~fE?ub4_u2*%!xKxU;H`m4_ zd$gpimGrSoP(PZZhSFxl9qauI$6u4J?P5$2>5r0LeD7SWG$8VnD*uHv^RysMOb?r@ zl-~cBgyrVM!I!?GajvvY>|dc#%<9P9jnLPCj|L2pk?QG_S_Y3kJ3viyFJ7D2ViYqf zY*)>j9~0UsEq|IMx|75Ro(qD)@Qx4CO$k8B#uqS@Te33oG?xU~o=e!tH)^}_tzpxt zB-^VU(ma@aQZnu0fLUT75=B+y!ob0SYx+MXW*_UB7-(R!{qPzLbtxCgeQUt(J2lHg zxgBpdghX{P8!%lWNDPnTBk z0zo3@4^dMBGx6b$=?fFr&t&V_cl!A(-9_h;wf;_|K1a(G?*QD#P_%Am940K!kbQCz z{sf;Jy$$r0<{@5_uj+Z87=4#;7>og(43K06D4c{n`rbC=lHTFbcJ3iPMb76iNJqZ& z=dUmiC)1T|*GP%E{=$rm7c7pc-cWQEc3l^LsBl15h-hJDj{|og=CGmC_ww9=>~yIh zyC31;<|Q_c^?&0R{Jt3w#e`1rQ}#CAvbgk7MVO1kTap5_Y4@mQsDh)L@Ruj>pKY?;54CTjS`zgb@a5{_Pz7M%|AT6TkEu)As9MOOR_ z5y0DTaLDnPMhRk~!YeN>*7}Wg`da@_S?>THXVkR~Pi)(^ZQHh!#blzqO6<=_fY>MJoZ z>!&H`H3^)Tq-8wo!2uR1_PNGI&j1Q-xR3#+&zIEQo zof=172Nu2WMF)Zw)qXB+ilF7wTC`~tt|yqf)P$?k39`W(*f_%o02St7fztGyEj15p zn-Sw_@qh^+*p3x7!q%x`-*6qk6IWgR-A!N4mban+pr60^^%EuPX2$o3Ml$vuJPx26 z!rkeE1qUENau2NBD9v8N7_oNmB=C@V5PXf7$;=l;R6{27E9yL`8`$ixI|As)Pe~-!b~dC%nHg1IpnlF3@Mk4Kmik+znwxKDb=+8^5tiS zi>Vn=kAIUzdw41_T8Yp0Xs+mfO8->Mx=a@cb8XivMJ#in0}T<=!?sR>Ctq_0D!vI+ zTLfx#1nrAcG+|z=kojfiN!K~6b95pkvu^fsHizGIL_vP(Xn_~;iD`qEk4X+}mOo)`#THJ$uwIFYT{C4Tt0 z%S#j(mrT2v>($;&ed`^o*29^4s&W7I1klFFgy3RXRT7_}ipPTb?5|mLm>-w{YAeM% z-v?2@+X2pv$A0hrG6K+1j3i4Dkb{wWrtMwN9F&qb9$Z`$=k0nRcs^~NJuE4L$I`{m z`ATq0$O-kuS_C+`M)<)g;d&Nn>h0GBKmgO#*n0?)<-h;#V}@wf+(ARZq{H~#468O{ zv?APw3-D1Csm`Ll&2&%>=vE@?%BSD=eMn~VBdKiD)0ZnD*51jI?QCq7ho5AHp z0a&46_iguJomy~we6Pc4SJ!SrHS;9|(6^-b?=jhLY6Jo*AVPo-aLn@PhvhLVGtj&0 zKB~urk1PHW79@<4Z#a^)#AudqJh>_!(;}4Gm2ZzQZ_-2()8N^yCgq87ujB=)qU-NB zD{#JCqz8CtHQ9*!gl!MM=N9_N^X!9+$eOn2S$+`3WMz7pO~jnAj97qD0bhRIiOy4H z5$60Kulx1S7tm((T*z6=7?MebgY;gq!CIRBv4?R8m|MZ3u^R#h>=C;0 zXW?UOL~leD-GVb-XKla&2~QfJXxzTaV+hRUSwlp3)}s6(C-f)NEM1gYNu% zUY-E{+l6BanH`fe%=Twzfo>ni9&+`&zLl$xrY?cIgDbFMe^hfnl`U>t&x}EFjInkv zqZM>tx#`m=an;Wd08N65rY>?413rBT@$L&$U4~Jj}&0(E;dH&o#TXH)Zo} zU0|PCu|(}y(Eh@P3J5mv>ztL;S`yaX^>tK3 z1JTv?fodOLlCuX05CC2HF3i*r0CqmOKX zNrzZ5j^(%8{FkLGsJ>shg1L2Is}Ie?j3x!x`bw67cDYKI)ae~s2VRTSzA{`uskp%z zbDvf@O7r1E#!VlXYLfHz$OThwU%z@oCf|X>K+C7=c1Pr*PXC3j$rgdE!bNN|lBoY` zUJEvv8M;KiVtkj?{!O(A=K}DE_E&e=p;eBpo0D;5E8z{}cJ*+6b@X%46eE=)W^~Wz z0;?mi;!vIIBUvNYV(JC&lc;&jo~K56@}hjwJ^#0C_8;yrwY5i6;}_fRT&t;#%_frC z4iRxyQ={!kD#jcpJNcq0DQ|Azcxeyf=C6$Z-xc8qX7{sL$DTJ0xADmn({CRqC6tKt0Im$jowA?_^)+EKA*Lf~u ze+{RI+4=$^USo|vB3iH-w?Hy|hJeT)g~==AZogAIMJ`=L`}VgKFtoDlBP>9Lnl)&1 zqsO8#`@+KyVIyMn=4%cG0k)3(x=h-B7zXeeb|4#3^S1jK1Nv~$td`SUDcsBVU`G7d-O;~)5DY(x;YVZN(=zUq` zxDvv53Ln5}mf3$EpC);&cf}kI*dz1|!z;nUhyB7kv$t zarZMqmI~iJDyz8fVoVzy`+pig6(?tE7Y+#O{>-`BuXMoN8F6UN!08dYFL90#QXi5n z#De}dmLNoYRJu2H{gf7EW{!!5!h8t<7HzPLFhv^Ioh$GJ{}!?G^%rV6QcA)f&`Z! zGW;!muLxR^T(mH@3wGP_Tb+_F`UvcF0+Qd4K}EvELultX^-f29y>7yC31w5?aI>&uJ$Ywy-kcVC!uhpzQ(+KhE*e$%ym+cY?>@Yz8j>8Ln* zgF1MWd_tRx#DTnQPEJ+qOaBPPqDR(zR01s{x4Mg{iNhVE@Mwoi=rp|>6xyxZAT7BV z4BEWZ@vHEs`tclI>{}*x70bu`PRUVD=yT%m)XqgVrivR@hp6yvw1@#E^h!cL8S9** z8a+ImEqmu?r&IxO`CJq#rpkB9taw^}=GSAyBZWE6&lkET(-l;S!MXa?P@;X=%y_Ww z?2P?+Hk@KiV;Ga)M##y@np`m#Fl`hNf9zjrNiY ztG+2t6G>iLEG^+D&R2*Z9+uBiPbZA>QS}98vhz&i9GclHYKqw*O+{0`XA95_WLyw0 zhF8vTy5s_ZgC=De0;P;K_f)1_i$)EPZ+so9Xinb!i2Q3uKI21y2(U%jp>#3um29Hk zP0rk{fdh-u+2P^&a>YwZ5}Oi0L6#et9?l{Pvq0*@S2m~AI+^F~pq(z_N#Q-UB^9@t z=+Yxl9Iy@?GiD>!xC~?}D113?y)PJ)I(aBiMF{p{Gh#llED0ez2(VBPxq!5k$BM!e4w^Lb&yh!Y zVRvPQu@m7mhKZR12oX_>PN~y@z+ZBW#A+UfBXD?QS@{Vs6=i`;St+`|idpW!Zp?f2 zNoOwpM1()$7$vOO^0}SieyO}lis|RmcRj7`hnak^q-KXkcU!cf-+x-dKCc;CDNc_TOe}vU zUjkTuWZt%;yxe1<9dM^YQs14Nlw(S z(K}-9(2l5k2;+;6^$lSl;*S)RCBr9^;ZN*)>PHCU<1X|$aU!r%cEZEs_4pFT(;X^F z#l!yVj*OApZut$G%5(Z=j8l(K0rQ)u5I1n`uL=f_gL;mCI)*_#$0O3R^LJ+IS^wzt zOF=tigR}pk)Q52PEr?_=3A=Gk9YTMii=Lxi9g+r#j;<2Wfq-`9N}U+tpOJjfS0@>s zXok3eXMyjcI=0st_p{9K65{LgMEn}U4M_I-qGM32FY(b!Do2tD|J1shUJTy`YpFjJ zh8Fgb7(TPr3GSc46;pHPMD6?@JE=>+h4Y4aDQp!Eer+Qk&?Ye4&2^>Zi_LmoYH5)& ze&nN}Q9ZV>;$`U>xo!HnkL<{r*8k$#2T2SijiE@{nPO)~v3=_olXblH!OgyQgh+_+ zGsh2rZvKTnl1=oC%|(w|7B!-imN7l=_@4E1s(rL;z+}!i3(`Fl+f4|3Uo^Gj*6NzDl&e zLOn?#`9i{!2iekvd5?0JQ|rohG#jiwmEc^2R^sP1CnP@cQdo}(J+Eadet0afLZ1sl z?k2g_;50oinb7h~o|wH;t|LBxY!+j}k6|)xNqM?I6rEUV@XCr0iqv>Bkh#VTJIFIa z(zU$~p2*Fy_uM<_D!yJz5KYB-_21=uMgpZ5fdx9Xr|w_A{R^&P3G&X{sJ;ohC5}mS z2Q@y;4k(gtPsVcn4cM-}-3Qwzd_T0(xD#HCE7!=mcz-5V*-?;Gn&;JJ?l{_+N( zAmho5Zp)F&+zsBGTO$a&T>Uj3DD4B!zm+q;R)4%Xk6BbMv=EQ;VLL72PeBbVPiV2l zgYjeWU!FUNO{)yQsWFe*-H;zI$LAfRrwH+27D(cXOmYqL4jjiHX3bGXpX0`8d5p3# zS1PpNfcjcL_Seac`hO}Sy2{CvQ{6JeUf9s?I;r;`hk&C$w`FL}!l1Xpjtvpx zB6&-+N?<(W#r+ziQF!8TBjk*f$u!r0q(?U(>=RvM-dU;edxZSr!rV+K<{A{QjYx3m zyON?i#C-k2g3iW-(Jytbn{-5o;LQfTihidoE`ZgBTfAIcmNK>Ea~IAu4_7 zdTwDB_&;B+QXV|ABW}sUR5o6S=~%xJhr@TMMctR~Jff9aU@p0*=u(*DQ+o=a?dT4I zlf%DrZy@T!BjTK-k8ku36#%9`Ty1@7Mj zT_c76y9Eec{sH$-1;6m6lopGDUYl-|0U}}>?#w8&X-G4XB3$xC^_jMJ$P2t& z;twcI`TI^!QKzc|aCK$!D+TfeEQs%yjEIfmoLI;n)M2RY^?Jb=6w@k*V4{ zJFki5YWnU`kD8CQpyo}2Thl(f>?MzN#q^cQAkhD$Z2SH+L-S4Ep%VI$Ex%qk9{(@L5wZfzVo;YPy}34TLsE`6f58(3s9!mr4fymNU9%20ZRz>#fEKL) z8Y)<%e6jbMFnUQ&NO{7~tonhHAT)+d*A z{1dWI%aR%|md&KnGQf8KXboktnU3azG!2StRh!SSYWjPFIX)f*-Y=AjWlA%)%p;e6 zc?aa>c}pI#zVYEzJjYdNQ6AEag@tE1KsnZ>uxS^(o8%1AtMUCbn|JJ|)I}O%BC1T- zBB^YQ8O2vRC7tB#z~OfekVoTp`PBQ%u54;Ny%%DQw!s}j0&S|Ga4pf|V&I(x6*WrQ?_Wd95vJDNes2-;?Td0s6}U zR8JBGJ|37grh(Dh0<;|_JIy-&lOiC`Tqi^GzfzL8e(N!(M>j9}+biuO|T~jod1o}v0R6)9PG+xJfujL+tR6aHixz`e#g9g*aPo1j= zfyv6WF#fx9ziSM%r~N6uzVB!inF=$SzMlzQW!F(Wre3j&m&0F1^rD93R|WWBPy|AM zs^v)yhU%tFtEP?VEKSjQZBnf>G!9cm;|$VudY()3=ZCcaavdStNhjT`IstZZeNsFv zy+Vr2!=LY1r)o7%E>syWQ;B;aY_`=JU8UBy;3efJewr#%7qv5yg{nOtAxAGpRTnU64U7k$z8IVDtzOQR0sr=&){zQAM6 z342<0#w-Q+`ar~V5d+%MO-sP~Qvt`)biV`RQ{;&dp`*om_EF50*$QOx$g@c03DJd6 zl2qSN_lW|vwk9a2Vbwbk-e+YMJE1G?^iPI9n_$`y(WdOSl*6fi zV0c7D1Jj4#zCL8zy?^lDgaBiz0pDem!chzrv0-4B?0PR zSPkk4xDYB`8~j2II;@xwprnDCu1*S?s&OPIN6VqTK~~(N7-VSzPm?U^(oX1$cK)F#LHLf;e>2mN5rt*hQzJvMYxBPHi?_vgum9&T2h*}HbzHNP5s@ZTUs@c zninf?RVtZ1IapqavW&>G_N$0x`=rAC9-`~tC27tFQ5o3X(D~A$&KM(yZe;9|Ai%ii z=Fce54em?2Ox1@jIZz8_FS?TxYeWH-q8~YT4xda5TV2+pI~|#ITAF&_+=t|~X?SGW z6PulikDl6F0?gB|eMAW9$DJ%ZRJe~}wz|NJz~$%a9nLxgsvF^AbZE@Q`%KbOt_p7A z>%Eg1g`c-AvV)S}*XN%$KS*ZOY*3FBY#yZ=xc1lj_$^6t+hupE%BSCE(e;D;I7Sy- z%J(cjz8M+YW9}Xfmk9FdwE0{dZ<-thC_5D7l?bus7y~s$#;<@R5a>N4D_=PP4&=X1 zyKU{fN_H$U-}ms-nA@4JimIy@It~WnGt#i*Q2CPzPUEH>UB6J%fC$8F34WQ-3$yRf zDcs!uEJg98rO7`p7Iaz%8m0Asag*t z=O_YiqNPgLs>NTD{LTF{!?4K6Zx?2e<2B#hF3aw`rirquG&L%RP|@v`Rf$h{z?l6o z(%AIkiX+&b8st2W=c;naXjv3b41#FHrcou_GT|Mxd%8?ikmnGjMG(;4oLHH<^#&W!D?E5Zwvl*Mn#owb_O^bi7QSA&;FxV1*2)dAq@_Ogi<%bK!+dARcMaXmJ{2Jp^P{)V1={tFY8DS?uxROyuo;q|w8*wlJnue#p_iPbE%;TX zDL3}vG9Fza@sWk|t*$iPsrZL{=#rkU8t=`el!_>Q2-+^HTOQ>VU)}w@*!xw#^W(2u zjk2%%?FKz+7{}7meU+^0uWt~x3XP7`OwT+sla*zqb1V@iR zDS-OFZhgC>ct|Qt-^D)Jpt6&z(EedQ%seFT*ix-%Rk1$ZQ-2Fai_hU#wsT^|I@cTg zL~Win_&+8LL#c(Z)`|sVna~Pte0vLq!sn^#fZkQfb4npJA^Xvg;vPbF|C}b!H8j;2 z#Jx~qc~cGWQ<#4lN0+1cYH9XLx_6ZKGwbQB%BWx5I$=ZoLq*TL{nebBmT zWSm}*qNNUi??{#byUJmu@I7v$7gf(p9nazy)Pu4qh5i_sb{z5o2zYV>-U^9Y3C|~@ zx#$~W?R7FcCn8KfSZIQsoU`l??MfLiCtg<6SN-d~VoF6^M4DNdm@>7&nZ6i5BR+E1 zth+;G;6Utox8qlrxdNATboHqyN|)*{^=KTGwmyJs?d`_+7940@uagvbz~Oi=&sjFD zyfimzRVDH{QeOeJpGvaI8!j%3sY9Yqvt|(?-l6{8HBFx?OP8RpAIaO z#96Gk**xiwJkkE=emaq$#j2qZN6xRVm3_#gLa3Om#B>TjZPuKajZdrvs|wFO>8x#& zlgn_tl|lLJ^0zR(HQVrC#-1~DKV{*hsO6msm%XZa2T7%HB*u&wn?w4Uq>Kpw*M!I| zheArRyA4KyzV(=*az~E-MvK0M{}PO5VC@eNT|=URmY541tt_orTYj|0PA)%U2^QvBJ$*#I`x*FM zNFkF*G?No5Gj3um)vU{|UF%!mZz~{8yY6w7LCwSA3hX8y`7Tr0o+fUWI9;MdzE?-- zx__T8)xuC-VD2XMs-IK&eW<7!ave_AM>`sH(b@)Jn<6&4z;+b(b8d#ZFy!u^SGf9; z%K)`hZ{fhjULS{BZoA8e0Ee??5QW8%5C&2TrdP$E&z%ES$_+lpS0k=%bNrQsIZ zzPt0MDp%F4q@;8Og?mhXLtS}a#_fX)XVE*e6J_V+^o3ML<{4)uyQphqJVpZ67(jt@ z&E|+fN3xWPh?T^#VPaG7XC-~i7zI#m)}-@$%bt`e6fg)R!r|9C4~mk5t!q7P2|azb$Y%Aa*k{@e*r)er)j}zC z4v!dAHSSQOLBZ`69XAa%TV#R2Y^(CPzt{1%9n3FlROCxFrN8nw4zJCgk0}|DiTufQ zl|6>ED1wT?xmekR-IIumHgk93u}OInT<{1p3kEYd6>De_)Wx9 zUf+mibC~Vs)w3Hjjs0j{3()A`IxZu?1#ny78Y5bZ3Zf=%7!yMD@S8yMr91GDkLevx zm4UQFZC^Ud{WiLOIuxwSc!jD1X#fs^j|E1Mt8{op#UtjpF;2Zu@vfrkKP_mgk+etsY=G|A@AKnMT8j5}0C;2$Ei$vQ*^P}EG)?Ja#>;CDJ#9 z5GJt3Mv$Y_Yfw&TP3RRg%BnFcl+lcqwd-R3)?|857FKOq^zctn%g9=8RDXo5N4Ggh zFa@op92r57D+e!#pn0aA7)p;788rb9Yn`2Vf=X-Fb!y;P6T;;7^^ zQKnq=$l&bP3cQ&%(t~0vsI-D;C1`>+KRKZ+^lyd^Kvu42&gvC;cdvJ_({eC6lcf*a z7+2)}^h#qVYdAm+n=Q)x@g0~2cLmqLY&wx>R-V+cUTcSB-;O`qWkoWbI@HDsw`%wq z?hoc+Jx2!PD2GKK>`xhcMF^ZGdE9~Joo91&Ev7=C6>3yesF7cv5$oye`6|sNzo0tV z=xY1Xe*5$wZ3xCLtXEz;tHv)*)9$f;;XP|+Zm^_p712b!;6=G~W2g{x1mM6cs}(C+ zCE=G?Q(~)22BgZ;Ry=81@sS6_5yYw#5Q9PRKh}akc{5sl+TrPvnXeT_#^cZye^<{c zjR!QrYDe_AS?j0N0A{LAU%kEuSIWsSY>MEX)0v1Rv3=m$S0ioWTXYkqK$PqzB_6o`n3qMDFRB zbN6UEvEJG=k-7iUjO-$NaKiXpLLVnJBB;QdyfjCMLHad{$ zs}c28(|pXK`w3t%AZ&lSurV}`jAeV{WI0*zVKj>Ne3QEkuI&p&6fVD>mjEgTRt#!t zdPyU7OiHj}7W@l#CvLWw<2V!v4SNv~1H#bY{8vkQyH?iu(D1NAEJZJVuBhU#qXjv- z4j>dg2BE0hin1H3&ytiwJ9Y=bTEP@lyVAaKXdtkFl3-=p(cbJ1GkII{(+Xm0Kd=mP zIrz76O3MLomQh2Ee@e08u$eA$B@?S6WQu&3w>W%jd_zyx3f$E@_PBeiPa^)V zb37O_9~A-~oJ%e<9+EmHb%*}gJt{tLzf|i2KCi)I9ERMDf4g+46P!r$lkljbX_1bk zu<^^Hs&YNlr2efFzazYo^MZAZjtyCGUNNZ zL81f^_NiX7%R*b|q+(Six&oxZ=`>A2YV$^bHcQQ!`cTW*(~sfi%DOl7D{(U;bu&fcu`+4b3VlNEPRM3R*iFdX&=N-VkIP+@ zL3A`^LKXjdzW9{4keQOH(S=7Ea0;Zc9wfl)2xKoN&VzH9d8OX4lTj(&YuqwT@SO_|p!4 z?j}I-FzF|?r62C80Zt3-Ily?db5{bRO^N(288&OGA6a0K=YdHNsO{Lz!oRW}AIL;RoS+%rA0n=GWh>W=Sds{s^O-;jVC?|A_#<0@K_<_#kf~|^>SG9I?*uT5h z6gL-kHyC=FyQ43?rms(#8YUEBj{^0v0+!9Gf5->c~7R$&lIsZSt@3BBun{9Bbk)@+|y4L61yQ{ix7M}=ML!nFW(-Zy4= zD^+0V>PfrxDzHM_?XkYIe^td>$jvswVuo6Muw?#OFiq|K*DvyX-KE-Nyz~sfQj~4q z?=&G4il=_UgW~TfmdR1I3FG+kaQPr>?o|#50s55CajOj_OR-IiBbE*FaZBw!(JhP- z`gWks<>PM66SKS9#{F1JlV^=B;rv$uwwxXA5ut2Ya%yOuNvuZ2nIj~eRta9A~{ zX<|h!i{*aFs%Z+qZwnROEo4g&9AMEbWQnFTDo{hI^N72an&N=*SrwglAifTU7Jd;l z9+bJ3rb!LVP>>`XlA!WYdUKTx^_cR{d7aAKAcTz8jp8tdpdL9&Ki;g)NgOKOpS__r z%#u=oV5a{x|5G)xf@1$pG2YM&0Y;OVh4jTyYjr54SgBd?DMQRgn>9?d7w2WB9_`VN zI6=VN3)Nerz^bcZT73G-FiYZ1QwMuk$FOyPuJ~iu@){>?yjh6dF#S$j$xMCYAVQ4}w5!>3$8m+KaPik4 zu`CH5ncKgV8JQ5G%~7qu2I(BJawn;r=uQgr zIaLKyaN9XC_(G+%8=_(pp&KBp9n6xxf0^|-I-$qQ5<&BIz0HmX z^E?(mO3-bW-|cLP9VDO@>9@~VScV+ymd}MhDYrxJ(aZ%u$hKw1z82+LouP8`8sY6S zD0959SWd;}trGPm$*ZxhwcU;oXfJwQQ~ESXX}Tl6@AZV*qE4?Q+Wp~$ksmO5rO_&~UQ*DQFgPJE8iC&fH3n7zo~@5WODJYt=w{7b zi0*N)N%z-EnQpr4ahZi|ammwgIWqS&@Wu`ee=XGRGzBo-;lVq;!HtQpOEv7U0Q;BdoN*M8xbANJq$6YS4LOLrd=(~AV&PmQJ$HYO7JLQ z!>tXCHNio7 zTn(-b8{*_;(k5YlC?PoN$1GWEwJKpEEB74R??!2hX~BV(BQy?0XzhtnKMWW{3)VLD z1@hPOiASP~BM{5sd6GSKn(u7E=7w@aMR$AY`B0nIOFUjEV&0LvHyo4DQI5T$@`j*r z%#SX~$}S1lF+s7mUOIu40qx_ph#JP3{LCC)%Dl+SH6cH&m1N>1Ko~MsBl0SvbPln%}y;dFlN$dV!Z@z{dny>`LXt5wx)}zOlVk+3TEf z9vLlpWwLr6S0EQO2Ll*WY>m{BMv&beA@xJ9K%1*z4f1cHy+$b9#pt|RS_HjBUDff>(j=f%)MON(uW+fd@nXBfd#-V?pC z;bXh;zLO}kl233L41x=CB^S-8LTXlmTZ+?kg^D{?k?i~y>m;{6uH8&wW(RZUIArG; zv&$U2@W3%5XLw{Ukjt}T#%9YFq7)RCvE zKO=HU7`?V$V8~HbRbgIcRXd+y$T^O_KhPNX0a~R>@IosVdiw3pW)xKXPVtdgb{Nj- z@MjVi6(^f6*|jYXPTOaIWSfd+>DAR)Iz$$fxD{m9+k1|@g;)mAc;`oWUN+1LBV*?^zU*}_s}no4Pw+%r@%pp|#0U?r|CGHOC5#pN27FV? ztgfU+?mnfio*}r0)s~KSiLizN0UJEPqSfa@Zr-r$pyFG6Ch|R=KKlK)R?CI|3Jz>ce!Lrg?_X7$QP-;XFHA79DmD&tCf+-BHG&75qFh2xKttB$(+vtjetg-4jBx zoLG$Al65@rEOfK^m^fTzxixU9=zr8&6muPizx73w(8qNi;I0TEl_liv$zKEU3vD0> z2%4DIj?AEfD*ux;W=@j^=83AykX8tPfr7cIB>!L~6lnwz!WSH@>A5U*xgYVb!GAz^ zN-;@Vpy8G3Eum}S&&NFK*q`jb_%z8nZ!5T=Y}K`cXmQ5)ruJ5C9CF9IAkNy+uCEdZ zT@vo|xoJw+oh2Q>c7`rPvJVhJ-CB7rs=bvKu>Y_UG2WxyGvr%=Y42y1Ge$1o!fpC(6Ek@WU^g8`)EYis@I`DA$&wE}tkQm49P8QntVgV#tQ&ExaM{urpI?$}T676>l`#NDOzwe!%i6nRdD? z{AVj!mcV3jy=k%Sl+a$0R69adQhv@gGzfAk8dq{@!a`n7;&Z{FYh|VlL;PU+OWdX4 zE{2?BD?Nihia2iK0+sk%AAXGE!wWwE?n>iO$E-gFqA{g#`IPk2DH88Gl)gUjzl+%M z1YLMa`(wLaxP!9n#YD;nLmq#~icYMLUOd89(&qnU-6d#=%0+7H<>zZxr!MKOC7DY5)6vKo4WvC(>@AMfnT`0DPQSHrvbQC_ z_k3MRp+YnfW~))17-aGf*1X}bwZ80^3H<~zvTuKIgLEjq&UX3+xDm-e_W-#Ayz|HW zAVAI)s+t{irr>Y}N~3}>vFwK}2PEDK_XkY+UyTElX)mJtm>16%bz30ZgU(02GMqa3 zvuyt3TM$OZmt@F_(MN=>BqROwwwS|YW)XnKb6a+=G?1EbUfI?j8uS|@Fgk!62r^A} z$#(uCNyQU8N+hCbO`!NZKOxSRno2+YO zPRQvA&~B$c8w(6$OaF9};euP;J@$~@h3Q++zu%DkZVJTFnzv}NZWdBHFq?6)cz#%N z^?WPK=bcB(pFp3C8GIS^B~mO(NP5_hm)AW*x?D*#JV47=zHA+n`kJA;KX!dq@BkNV zr{`2`brcAL7fB4w&kMwR~_=0E@eVfkS89+8L7`oG44s;bjva(nvSIS z1Q^h*17Z4DOD&RiyU?<;ribxeZ|v6^EGY<53_oLy&;99L*pi*fiT*V5JG-l(j>cl* zU0YS(wRYo=^6=7f?i0$ z{Q$&GFO%o=Bt5iEU1kEQ;DaLe_<%&{pW(vXk~O6EuN+judwE!^X{s6%;HlN0yOui$ z-<<{eiV&4I5ZP&Rs;A-R^XOPhM;3lw!-Wz*dywq*n`LrMoE+q!jFa1&v7+b^;6G!9 z(V9K^+O;mb(f9x}`TTkUkYcEaFU?dMns>9K!_zHzCVm&HHxl*RUVAz0^r$xMKOdo= zCyL`KnAt;4k%rIps;x*DGpX>EjxgRmqt8p!9_S6NbJuT?%TqtZ{BojeT;N7Zj zI?_rOA}+2G&FZ$(C*6)K?Oj`qMVSBc-ih8PDVSnU-ME0%N+Rjt?~6;(C;~5kYoH;q zDH$=^p5Nl+!`16;sE(S+NAgQk*GM|@O>8y>}RpedPXY4y8d$9K{k)5n#GdtN_)Z2xCrce4sXY z?4@2*;51?VAn0*9Q20Y0pJcKLu&Ttr1wYd)EaRY)W&)CX_bp@RfS%7hS* zn&Yb4iq)~%1XkZskR}ZsIplV}*76)}PCzyc;i#ncNuG+cW`+7oV~f9`%QRD?n+;@k zznF)m^^|)Ks)m&yhP0vCz*gw}KTpKY?Gw&%fpnfmYW+G&e5Y?RLm1R0X8DQyWX6uN z;GM(u-p?wC`psS^NZ!7B6pZ5*c@j1b|F@MyaS36Hv;-cwHN^tzkY?Foepvh{B>s*M z5A>W-k*w2@h1;;heJ)%aV<%b;5U-1cZlYvpVtyEY;3nZ?1X@rUaByo9*^hGRgg$kHn2Yos`rmRVEqijXc^T zuiCA%#qwU9(mOl63qBOsZI}-N&_Yg_JRyn=a*lKXRlh{cWR+*+twWrY#7idFF0nu-3ircu z$}cl%ucTM`XJYB8@2)Nr)`ifX?ok{)V;?qICdhN3zw(?!A9Ga@h+43b{h#x@e}{N~ LUm)fHV1WM*&LqVF literal 0 HcmV?d00001 diff --git a/src/agent/provider/entity/agent_provider.rs b/src/agent/provider/entity/agent_provider.rs index 5d4f85b..5533531 100644 --- a/src/agent/provider/entity/agent_provider.rs +++ b/src/agent/provider/entity/agent_provider.rs @@ -69,6 +69,7 @@ impl AgentProvider { models_list_url: Some("https://docs.anthropic.com/en/docs/about-claude/models"), supported_purposes: vec![AgentPurpose::TextGeneration], text_generation_supports_vision: true, + text_generation_supports_tools: false, }, Self::Groq => AgentProviderInfo { id: Self::Groq.to_static_str(), @@ -80,11 +81,12 @@ impl AgentProvider { models_list_url: Some("https://console.groq.com/docs/models"), supported_purposes: vec![AgentPurpose::TextGeneration, AgentPurpose::SpeechToText], text_generation_supports_vision: false, + text_generation_supports_tools: false, }, Self::LocalAI => AgentProviderInfo { id: Self::LocalAI.to_static_str(), name: "LocalAI", - description: "LocalAI is the free, Open Source OpenAI alternative. LocalAI act as a drop-in replacement REST API that’s compatible with OpenAI API specifications for local inferencing. It allows you to run LLMs, generate images, audio (and not only) locally or on-prem with consumer grade hardware, supporting multiple model families and architectures.", + description: "LocalAI is the free, Open Source OpenAI alternative. LocalAI act as a drop-in replacement REST API that's compatible with OpenAI API specifications for local inferencing. It allows you to run LLMs, generate images, audio (and not only) locally or on-prem with consumer grade hardware, supporting multiple model families and architectures.", homepage_url: Some("https://localai.io/"), wiki_url: None, sign_up_url: None, @@ -95,6 +97,7 @@ impl AgentProvider { AgentPurpose::SpeechToText, ], text_generation_supports_vision: false, + text_generation_supports_tools: false, }, Self::Mistral => AgentProviderInfo { id: Self::Mistral.to_static_str(), @@ -106,6 +109,7 @@ impl AgentProvider { models_list_url: Some("https://docs.mistral.ai/getting-started/models/"), supported_purposes: vec![AgentPurpose::TextGeneration], text_generation_supports_vision: false, + text_generation_supports_tools: false, }, Self::Ollama => AgentProviderInfo { id: Self::Ollama.to_static_str(), @@ -117,6 +121,7 @@ impl AgentProvider { models_list_url: Some("https://ollama.com/library"), supported_purposes: vec![AgentPurpose::TextGeneration], text_generation_supports_vision: false, + text_generation_supports_tools: false, }, Self::OpenAI => AgentProviderInfo { id: Self::OpenAI.to_static_str(), @@ -133,6 +138,7 @@ impl AgentProvider { AgentPurpose::SpeechToText, ], text_generation_supports_vision: true, + text_generation_supports_tools: true, }, Self::OpenAICompat => AgentProviderInfo { id: Self::OpenAICompat.to_static_str(), @@ -149,6 +155,7 @@ impl AgentProvider { AgentPurpose::SpeechToText, ], text_generation_supports_vision: false, + text_generation_supports_tools: false, }, Self::OpenRouter => AgentProviderInfo { id: Self::OpenRouter.to_static_str(), @@ -160,6 +167,7 @@ impl AgentProvider { models_list_url: Some("https://openrouter.ai/models"), supported_purposes: vec![AgentPurpose::TextGeneration], text_generation_supports_vision: false, + text_generation_supports_tools: false, }, Self::TogetherAI => AgentProviderInfo { id: Self::TogetherAI.to_static_str(), @@ -171,6 +179,7 @@ impl AgentProvider { models_list_url: Some("https://api.together.xyz/models"), supported_purposes: vec![AgentPurpose::TextGeneration], text_generation_supports_vision: false, + text_generation_supports_tools: false, }, } } @@ -192,4 +201,5 @@ pub struct AgentProviderInfo { pub models_list_url: Option<&'static str>, pub supported_purposes: Vec, pub text_generation_supports_vision: bool, + pub text_generation_supports_tools: bool, } diff --git a/src/strings/provider.rs b/src/strings/provider.rs index 858d858..b2d0000 100644 --- a/src/strings/provider.rs +++ b/src/strings/provider.rs @@ -109,11 +109,21 @@ pub fn help_provider_details(id: &str, info: &AgentProviderInfo) -> String { let mut purpose_line = format!("{} {}", purpose.emoji(), purpose.as_str()); if let AgentPurpose::TextGeneration = purpose { + let mut extras = vec![]; + if info.text_generation_supports_vision { - purpose_line = format!("{} ({})", purpose_line, "incl. vision"); + extras.push("incl. vision"); } else { - purpose_line = format!("{} ({})", purpose_line, "no vision"); + extras.push("no vision"); } + + if info.text_generation_supports_tools { + extras.push("incl. tools"); + } else { + extras.push("no tools"); + } + + purpose_line = format!("{} ({})", purpose_line, extras.join(", ")); } capabilities.push(purpose_line);