From 6498ade7dab0fca3c917fafa3d768d9f9e2674e8 Mon Sep 17 00:00:00 2001 From: danielsanchezprieto01 Date: Mon, 27 Oct 2025 12:05:16 +0100 Subject: [PATCH] Add TUI documentation (index + getting started) (#313) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: add TUI documentation index page - Create docs/tui/ directory structure - Add comprehensive TUI overview and index page - Document TUI features: multi-terminal support, teams, parallel execution - Add comparison table: TUI vs CLI use cases - Include system requirements and supported terminals - Document keyboard shortcuts and commands reference - Add architecture overview and component structure - Include quick start guide and documentation navigation * docs: add TUI main interface screenshot - Add cai-tui-main.png screenshot to docs/media/ - Screenshot shows TUI interface for documentation * docs: add TUI getting started guide - Add comprehensive getting-started.md for TUI - Cover all 9 steps from launch to monitoring costs - Include prerequisites and system requirements - Document API key configuration process - Explain model and agent selection - Provide practical examples for first conversations - Document multi-terminal workflows - Explain team configurations - Add troubleshooting section for common issues - Include next steps and learning paths * docs: improve security and update model information in getting-started - Replace private IP 192.168.1.1 with documentation IP 198.51.100.50 (RFC 5737) - Add GPT-5 model to available models table - Add Claude 4-5 model to available models table - Update model descriptions for clarity - Ensure example IPs are safe for public documentation * docs: minimum change * docs: rename getting-started.md to getting_started.md for consistency - Rename docs/tui/getting-started.md to getting_started.md (underscore format) - Update all references in tui_index.md (3 occurrences) - Maintain consistency with other markdown files naming convention * docs: simplify TUI launch section in getting_started - Remove alternative launch methods for cleaner first steps - Remove 'Launch with Initial Prompt' section - Remove 'Launch with YAML Configuration' section - Focus on basic launch command for new users * docs: prepare TUI docs for PR by managing broken links - Replace broken documentation links with 🚧 indicators - Add explanatory notes about documentation in development - Convert inline links to plain text references - Keep existing links (getting_started.md, cai_installation.md, cai_architecture.md) - Maintain documentation structure for future expansion * docs: add CAI-Pro exclusive banner to TUI documentation --- docs/media/cai-tui-main.png | Bin 0 -> 86396 bytes docs/tui/getting_started.md | 345 ++++++++++++++++++++++++++++++++++++ docs/tui/tui_index.md | 216 ++++++++++++++++++++++ 3 files changed, 561 insertions(+) create mode 100644 docs/media/cai-tui-main.png create mode 100644 docs/tui/getting_started.md create mode 100644 docs/tui/tui_index.md diff --git a/docs/media/cai-tui-main.png b/docs/media/cai-tui-main.png new file mode 100644 index 0000000000000000000000000000000000000000..9f9f9a77d0b54863be7a624c2c688d0c13b3cf62 GIT binary patch literal 86396 zcmeFY2UL?=+ct>DgD47EK%@vFAO;912uMef-U$KeBE5GI0z@pJC?H*WZ-Ed9C4?3g zsi8yY5G4c%RZ3_fFnG>+-|zos=KuaRvu6HTYi6FclIOX1_S()OYFfd zJzKw9V)w)(ZrvA?k&u!Rdw5G<=a#Yx$cV!3C`?0hi$>$gBcm4?t22QwjKIeooBhq= zsj1q*e-sQnUONBo!I_JKZ4u3TEi2ct>t>_w6%A#L4awlJiiYJ$|3LSpsEQ8^7o&y> z>C_*e=V{gzBOf2Dzoa?i@bX^juQ2)8*!JljX>s4a=0yl*G0XO&4^!ozr@j5>dbqS2 zKQbU7K1qJaS1!BV^1Q)le@$)c*QMW86ts!xkRaTX{}XkS#Ej4D$KX_nsPNDs{^(^BTUK z&Kfu*|2CHq*e_k4(k-H65MM<-NrIY}%z8?8j^*+P+HCUr&oqxM6+Dujythq1v(@5w z5_2{HTX7%NT(B7Xxo}t{%#`ERU{${xBRti{1S+4 zRFJ=SvW_m=A9p_G*k~yZa~50u$D<^PKj-gXLKECI=^LxK1m_;?#+d935hswQ42M6G zxBUpK!E2>SH)5>Vq2F#q`|TUmMON$AcjStD0rvK{$%Hc9kwInOLBTdHq*rTl}{5m>x zcU6+?#U>`KRU7?CLd)=O$)WBqKQm&QpgeeKz;x59*J64)x64dp3qDaEzUPsADKhN1 z^~|A`b-bc%CDTZvt+{~Z4G*0RG1UvzieTlMmA9`u3$KjHmq4e-&0VcSjWJ;_3Sk)& zGHyeg?D6cAwp(0FlOZrc5yK=t^XHi%e!uP1?`!Sdp|~p#v^q^jh7fV@soAb+crbKy zD*e46+0p#}_ifSi&-JNppc7D2b@Ji4ER0Ohu z8_&F451!k%i#`Sa6o7?w)YWRB@YPOPuEpId|F%$&}|ACKTd6=V3tL{inOm*e(c zp4vp6tP%@z{W3>+cx>^Js^ZNDsvXfjOZkX8sF3P6rA!Ex;qa?QD{h!%&~@m7o-#F) znI_z}=kSSkXbwv{$BfCl=qOjw7T$cq@Qpa~{i2@9NwnumUdpKF3S~{~s>EE+2ft%) zUI`yBJ$w5C0RPt_rO-I5mQBH#J)M=+o4l68P>R5eBpiVpnzP>?EqS(C9DEoqu(Kej z=XxT6TO3K>X~cFoJ7Kg7JG7!%RLpiTDDpmj7MHht6M~T6dmt~iB1a}=3Pz$dT`@s= zu}7QIp=Og8k{OgfiY4CjiVE{n_~?PmfpuGaA{l+e(~ z-XE6O-B%Diva9Mw&FcD+aa9DJP}#uOX?bSo<`2Q&MnC#?v9XfkJ6lTDBhM?N)pmxa zeG_ol#K&Jhg+y4M^#Scr6g-H{O;#p|^PTZ_{kk~r;vxWcd~+jHw-H&M(+wjD8d`%`0x+!8xo~_YA$zPkC&8 zCuv1ZSJ!3TMYx(wtsR(_O&IKRjKhgV_B_T z(4L|lX)}I1{H(5Ky+Vfs?yRAPAs3v4)~0jU7Hdsco;lf!JnMT%Ha9mi*hop8R_m|~ zOjr+_t^kU!kFj!Th~aGK`E)cbiy$5?dRUHv#OeDDKMpx|j@~F7{^S>zK!ia~YUNZ8 z@gPsvN8Zil9=v{o{S|}xu@6>OwXBR4SeaK}@Bd6$nQ%lHExcm&KZ#u*JJc7=+(}6H z!{f#0KDdb-AVl?U5$4{w^)*J zTQx+NCSmi5gqV?MQ-(k$&ARYnQUib_21F#whkgjVw+*2^XO)M+1jAL^+@Wx&~wjCGIa&THLS&Yyd}mk^NT4nkZ{p#Ev2B=jCxTkbe57? zp-^3{5OQbh%(MD6w!f!U$-LL>czx<{ZYSG$868M^`^IEPBUaqMZQL$stO-80knDE| zaW&8#k1(oQ6>p|^MD=)`@YP$r&7`7&?JKjE*?iA#^Np7&btn9iCKRLR8mS`bhDXt6=B^qSiVQ6xj97!>XX(vc7|mej zCS`lBLl1;o^)VkGPB1$K9S$Sy^mK;EggJ?O6Nx`jcH6ay!@ON0AU?Oie*LXDf<(8? z-O7+cV@dO^3e&=)FGkVpvZ~i03i(8pWWxyVA~{ez^!@R{(R1*=Fk72FtSTS`{wwBU z_FAP7x!cyUq!`e(ZX5wfZSEVn=34}~1u)tS4-5F2VD@FJlLEJ2{@!PusH0p_Zvy4q zP4%d^t<${S{az+XmUx@GKXmPZ_tO}|H3gi}1MJO|@~A|4y^-@tVdYXS^^amXC5)x@ z%7@!$5~rG;CvCwAiBrRO;wn|lbA6hrW#&60-F1#o&{>g2J*HUagRagS#ROG#YidC9 z=st?u9tRv?#TMXW+4Ekol-WSbt~x;eakY&8y$98P+euc`gALTm2&iHJOketw0$q++ z;T~g6$~W&=nuJh}z24=?EQxth6$yo)5q~WejD9yuM*o|6qNol_b4MvZX?t5VmF4iy`{3RXlEbQ9qIIL1;SqNT2`*v_K>3AUc$lT zv=iv?WrE+zj6g)ylK>?a7XKj|XHD^f=tk*om#q>5Mrq5q5r)V=v53j|+i+`qfMlf3 zChpjM_-aogb789P&4Wl3nJO=PjCQWZnq?F*gIvZpyq~@J7xrJyBLHB7LKEYShivg_ zFv+rS!v_hqhNt8APDMwDN5V8-e572K+Z+L@w(CoxnXYHp|~3hT{TWZN!KCwFs0 z(_n$|y=bJW4kuubBfGSv?h%g`vV*Lz8wi>lne7^+->&~fd%brg@uxVyMjg+X)98wc zv(lzegI7DjtOry}r|b3lI&gbw`90ymmpbjT-Mu(JUT{a2hI()>z^^OcoxUVCkMDc@TY{Pz&_oYba6W?VzsTNovLnh@MhqJ(w za&*a~>>&OLiw07;w&jSB?t4k)3m3fE<5EhhG$_ZD#>%hPA&pPQphgIt#uZs({q*I> zNWQ`y-I4hx%8Vu%?K=TAat9nDjkzzB5I5UrUU3E#K zUz@W9x1${~;7VP1zC=Yj;2>pr*15yw$3VV>*OFc4E_8)CG57mmzTeY~!pXN6YsH>v z?6&%K#oj4HVL$a`UbFx0iHl9Gk13eRkrUyW5Y>QvO5DaHEz~7I4bzw&Z)l!w>b&7k zsf&A3i%hG@;94bLlZO%xkGXN~cSjD%vd7gnzRdv|1jz>_U)2qQUG^O%CdL1@rI%w~ zL}QMPE&V@h*>fuv2tk7}9?c7k^3_cmq-zzUo+3*SrFF}|g1d?~uEROo9ypx@-tkt+ zPY4s}Uird$Ygp04d*u;kGn)>merp|#@=|Y65UrCVxcd}{PXZK-}BZE=f&P&0whR z=fKhG#;UP?y)C?<9X?E@y&gLDu{R4_BmqXXR%Ix8&Fe-#yZv2i4u#MZ^=PbwgyP9f z`JKtG;N>9;vg{&PsGqU^BW$93akXvbttP_2!2{8w$gsURC;5X$HS&|}#hq^gWneD# z!KJ1*o!8clqg(dzj}M?h(Z^oV)}mpiB`z493(Z?2Gl@}wGSdqC!ZShU`kv5C#8$mU zreCjwOxIqVN3b)HqL)wjQ;L+$)RHTnb(mz8D*dD%)2Q!S_rgv(A#ujs?0CV%3Y==Iltt$cB@5fz3X7O4}k!+t9U zr84MPQ0O&n)8m&>*!0?V*KYlinZ(6#!xq145%m0TV*}C-)Jh}tiw#p`TEbX1ngG(2qTvzHo`glHXF+P2!&%ygJq3f zEF~tS2;5;mG`UPL?|_4cNZ#$nG~KT&v;>_FGOq-{Dr6dWJ>X40L#m>ofTDqO|V7PX82$E1NHB` zMT1#?FArZTvqAogY>9)cj9K)Q$6#JQcIAtp)$poyreF>oRiX zgmp*aT+`OyZTGZ7t7dInZC@C=GU%&<)oB4e*8b2F@)3z z(c}>JLt5NV*1R6(J-znh%j9I8EU2*vlUpY9nHnATrUE8zg`&wRv*8RseT?B<@?3(w zgN9Sb*bwGbum1Bt{@hLtBWa(WrpKupkUUFXPMZ6}#|@Wx!(NF{$to_v z2du%N_O~W+XJn+rO@^TXk$3i-GGkeK#vsrjC2R28NkxT<>=?}YxtmFq>Yhhy{BXA) z8Rx!V5(lI6JIZ47jf61fMLyhA)_44Ld=>YGa4!gOSn9N1uIIW5LQ&KR0^)=N0$o~d zhnXjLv7g)!c-S;PYM!!{?q?E!JCE>v(Ng_@AApq zXuZH1)FK`n1Ri{jbX3h4*09;=B; zWZqM?iqzZ9R3v_%bxC{pxTQr`dN!+YpZ?tX%~$>C50$mhzI#^_16PCCNtyY9Eh5+P z9uLNuSvR8G7GiAx1FLb_qUE-4BuQB4bg4>!vcv8J%P^~5E+(mriRGlsyD9P}sqfn# zF+O$Ils(e44DyJ%PQ`PRodMC$`?)@r zdP8ZXs!W#oFfR8+BLI5qZV`G-*UlTBP!Gh>*Y1vE?y>4AL^X^8AiP$FH&~m{D}Rwj;rcPRO`*ESOU2 zK=!@vO8k21#u^)Y$Tt?5?fS2pVo^+1==;&f*S9Y<#y9L41ykG4ZU?tKhg;nkxNe@= z9VBy0+p?B>A}M`BFJ)(?3_#N8uH>Mnr3zL6aZt%}97fZ{XePA`I-qiS?9N9}n=917 z9U*x!r(tUzy|n0}Ag3&yA_p|_^_x}U``FKIgtz5N?BT>U?IQ(Mxun(n^ftbY1mUR;#b*2FqXa;Kc!KRf~!k1-EiM7l zJUCB_l0v$wC*qD#BAB^L_PEe8y;IjQR7aYUx+)~Ls5vXcpKk>A%aJFP*q zn)Zmh^aY<fU?x>bRDUf5Kpot2*qApAtl_c3(_ z9^ae{nR-GSnFXKBw~AlMztMSW`Wat}JdAlbfBB@H@sJ}x^@sy4G9JqqzK^oqtze&X1<7u2y$O%c3e$AX_LxN#LwCaR$~Q6KJkeJ^l-_}4iii;i;Xz;YU8`3jiV~I;@2F5ZLW_&PL>t?n zNgUHN-u{wB-|!kKnkHb9gOSS*?uJ>G&MO{S%_xY(u5M4cqTxMuL3)@cxW$`gMPE(n z+YanUjk>Jrb=MbjvpzB z`sPV)qii^BE-Xl5pMTcmx(6OE(jEPgMe;dU21e$Zy_YQYnz|prAh#E0d0(Wo&~kn@ z4|2zyYN_OEh0zfWF~=XK*(AI2xsJ0b;xt;T6XSm*vN`Fi{QM(SfuaKxbe8T@m$4AA z49QX@cYhMsuXy#=y0lZ?%r?>2`@*x^rEY(5iz zxKtpFRJsIvDgCZyNOyF#*DRv+qXFykh=y_^j#v4;E{I1jNplM`RJ;Mrk&uXkM?90b z4)fB=iio^#j@|Mw{94pbwLVAGX9<8@Q09YB-A-|U2O|7wVH1)|Qq0*B7O#W-L609dWdtZEV>JB1 z9N^Cw-K1V~N?(8~?7Y^5sHt*Z^pu@GtmSmo>M{1Pg4!1eV0p6T zYWW4t8qEqB+!5~Hntdchh6hPgQ~MM4=cgHuPWlJ17bM5-*xjv4np3$RRJ%~XN zX=v8PPN$o<(X$!6WBqqvgKUUr4d%|o1)crsaLauwb?w0*pCHg zrXoswMiXG`qSD7<&B2N_h7qBO-HIVbwG+vlP}jz`!C8XTob?>OqEq`6Io7g|*pfw@v+i(>Z~uoatH1T)|zVo2=vVMe^E zGhpb(Yr*s^k*@f1<^v|Jnc4w3gsu(Eq8*??-&qcyx_*S6YWUNno~Riwpc`(3rXN2N z3*j-nz_z9HIXCJ`bAhjikxMQ!`va?J+ig1usqRY+L~cd!agK>YLazSqPZ*kTo4+sA zs6xGc00NZaW4qvTcwj4tZomlV`;)4I8(+-?cTe$}j|TP&Q3+yfKU=I@fg4q)`pEtN0n73xixLML@>MOrj$>*R_Z7u=j?(mUc2Hk7ygO+Ngl zTuCAav9o6Sg%L$BKkjQYC>%e|^nR=3&(u;9l5O{W@h%E=y3Ra#tx(2Uo`7glQu7E_ zMkpBMSP2~KJ7zViq-P!JUvXz)QAGo@u|W-o-Cf8*WtmI1&id;6w6Luk#IOT| zd$?15wy)vF74}c{RvRZPEbbncI~`Y+SIZ` zOXCZCJt$`^*zO0vQYyxsGUkbpj7GOoV%8XK~h0awE7Q;5Ww zRTrp+*BjaIall$T_?#wCSTKu|bhZpA`0k8B{t*k-XyanHpFc?VDrgsx;S{q0qG!R-iGfq#hw}z(!>p{?V!vv&JtOzo}%GeE)Q+i0l$_-hmsEJ%<`~^QS`arwoaMZtEr^E;KG5@5Lbht#m-@gHfG? zx|D_H2F`lsXr(5AEEts5ycNl3o}rv9U_5DVLQ;!}7iSuVLoOMkxYHBw8=>}Q3b@^z zW^h>Fgz zGy)&3R2Mo=GK$3&`w8c`RF_WkwZ+y5(yvS(j4&RB+^iDu_`J!nDZ1%t!kjIfZx=I5 z@ylO!n_&0;mfEmSH?uR@<5=6&Vq3xXvn}Xv6Hr$6k@q>xrs$F1{MPrznYMyHwJp3-`(LZgqaHnJqsotQrx@4 z+;ZLOvS65%EAG-ax=*7|SU za$VIC3|W_>EhlR>ADI1(7>!D5iu1kLoTfdsTR~^uPxf)vnMsV)aJ5wKBavmn7EJr+B5%(r!W5x)V%MySzzW0*Rg4nF|Pol$wv5-e_#! zSt|>t6{sI@0-ieok&~o*J9bIw;Y8rRwEA>kf*l ze57?WmFN1m9#+0_@2PYle#Yomkm0S>I3d)D%gEqXLAqflFImPQDNxt*Kn0a^3HwRH zt1=`&dEr;6YWR+@#GPISO_n{u}TV^f;GCbMy| z6}_4nwks`I6T*(yXas1{-{BV;Y0~#D$w5=j}XvYLeZxQx; zr8C!AcPTSAf5hmiei5KFopf3HB!`5q((iO77P31q1&XQ8-D6k>!XdU5bv4rBroBQ* z7y}u&XT_Y+oovXbb9P#9J%L6uXCB5yn0sL7xEcLr-5O%j9~cM8H)7qlv7n8F)~uZ1 zKnPHfPl%7LeU$j{RlLo*^3)UrtvYv^p{J_mXS8QcagyY12&R$VO~lC5DbFxL2QW8v zDGcm3o^#0cI#AqPsNgWqKl4SharwKNOs*auWtiFV+fi;vT;EA9XuBn?tPML_+TI@+ z_G1vgo0!?D<`|Hb73;h z`kGO0E*CyE#)u5W_B^;5cYR{KHF;czH#5R`qm;_6H2Y1uVbM6-1G5o)6FNO1W5N?O z+Ek1`IphyDx#s$w4-^hSmCTD4cP%3AD7ygrlb^m5G6vV~3u@YX{=zzaMvOp#ptX(m z&SgdI*+07s0-s@{?pnzYAk=a{*z& z%cF8ZHJ^T^336od4T@PiX(sLgZYeJ)R1DfmTrcs`!UXI+aY`-34ZL@BZhO@?qstF4 zx^E(?XjW8}Q0#p4(b}n-Ey)b!6{A3XQ9-|KyVf4Es0y7j@s6t2vf9W(h^uBO2hfiE zz)KHbj_+SdxXKwd%oPB?M9X4GX|0qOpYP^^4=RIj_1@8=%p;}J&pPAA&8d;Qa$eMs z;zKrXM(InS3#~<@dK+0>=e+{6;?;Q5wMs>Hoa#ClaIETNnrWUDxr1dQTC7kNdAST>JUtw@K(P(bisb5)_%YQ3o zg$H`N-&&I*`W0y=6Jb+V9scMvn(vl-gkxO*@WswK&K7ZrmVcT_&utK}HaK`Q^Q1F+ zCFxf?bpEb6(AT$Scs+y)gNm%^&y3M6L zL14UurJ8FbZ0oNT00o})AL$Tk4$F?N81d8V@As*jtFnC6SiHc45vN+w^ z19PEs4yULHbuLDlt>f1H<*FkIw}qwj8#S#l)tc7*y2gEmDT=qymLhDE)Lwb)23RRTdd_XqyX_2!u~?aYf2ui>D+WFW-<3|x!YS8v z^B;z}Z|;i8d5}4We5I1y4@~C2dZ(xSf)G(hg4PmxE3Q*)uW6gF;J<%lxIY{FDhwAP z42aLcZIuRCb8INw8&+LvP&|6P$lzBR{FM`^DQ^a9w=AVw_gOLtY%T*=AvZvMrGk`g zHelDJXO@0ntTpNTDT`5zrKiU!RiCpw1>Kr|_UjrYtxi^}U#Qjf^cPK^jRi9AJA57W z!sdoT^XX#qhK-4#&#QUofr{c<`Ph!vUvuW)rGSRkb%o+OPUA>fqte#7`5UL;3HXi~ zKSOoLUp}d$T>Xxznuul0-A}PO;=1txV-WJ1e}b-Lw}QJY>_y<))quA{VnhyTLDP)3 zMzY&Q)^4^+K8g*DI%s!b*`B3#o`C_#-INM1dXJ``&^GOwaLKy&^pW_q55IH<@{%(0 z4>6QmT=T3z>&6V%8&vTYMy=-tw77m(|uiU6%5QZ+I)t zi+4#Z9yAQ`iQ=RfR1}OVjmEPCWIGvtWffg{-Bw7cRWo=P>R`uspOe`{{{SnAz*syp`^7qBVO3tu2Ln z3U2W{lR-53;tA*@4Xum#0^8nxJ7GKQKu0*Lv?LQ4 zvvZ2LL`*eIx434DiCu%wQaL%y!?+*1G_d<-#LMf-I)>hk!M}sniK*GDYjDi3ki2r+u(I!7Sm1%~x__7ilZG*22I11$3l?jRPx3ICcWqa@ zHSP1dP4nOYj`X0$x#-=R zf*aPiEJACYYU@TMwY)tF3$*z0K=5f02`=(9FB z8bwAk2H9Hm#E4PX*^EM&qb4oCwjk%UM!SSp7gCocLXbXghCv0{zL8tMt)l8*R?(?A zH|?>zhm3N5Og1dqnz=K3K)EYgtJW!WhSB7mzD~GgP~S)iK%jJ~T4JlAI%%@$$;E9~ z`?r=ArHOHlD{soh;8x~2QNajdHJFcTv`KRJj=##(#TK1S0Lf>HA+^+F;^Ra9f?fRx z#ky&=JQ7|3zUVut*Z0*!<3;YDHyUsBm5Ij`Y^BPsE^4sZ_IUw@L0tjOd(! zMp!s9=0@RQWU-5_^IP`jGhH7O#I0bW6GMI1lr2?+_jnNt%xHJ&|7i4Ftj1qO1W>nIq})LUWQsm z$gjEir(9}&KBvZ?mI^$*t=&G39t`ta`i{AY;zNpSeEqm{Q+#(5K;N#l#qW1q-pmKM z)!~XU++c7lIYg4SK6Zm{_3}uJb+y7Q zyPrmN!gKT-EK50Eqljh(GxsSnPYgZCVui=c9hx(T)xPoF3e&6;(8ti^CR$HYYH_#Ux5O@)g;jv2cN)Eq8N-0_w81M2uSzjk|oSToCHQ|Y5# z9{}@Yu*H71uNsn_-sov^*-uklfbpqjz6o_IJ_aA|_nrXU+q)WmnMH<3@S9P(WPr1P zXW(bi3PIGfg_)AzMQbVL+z3N>X0`E$Emw07zPF|o&TN{TetCTlWh^}+0obve<#_Pn zVG?wyI$n}GwwlX}s0R%Pdt~DtkYJDp8fV}^RLSOF?(*(;w0BUQroHJkbLO!~$~-^_ z@>y(~6A8F$4QhscfYqWKOydicdNqMo;{{Dk77U!yPwR5j{8`Fs`Jk_1d(xk)<^fiD z;LX;gbXl`h?}*1O!AV3D7p-W$WMK(b(V?ph23Cll>=XSwjW&QAzp!Kag~6V(qHHju zuigGW4Bf+(gRkul*o|siGz(oee$0#s=~o+GWPNZKVO?>^xF%4ngZ!g+YlOvhEm|31~r=s1P|1Ff?~8+m|!~iXC${ z>G?E#sdGv{AI5++YI09)S0|ii6kf9lbgVzjtL8m!t61`k<2`oASe-^=r@Mlg`(yub zfaG3EtUMjvX{)7K8rf={}WNYB`L*%wP$}48~q&sG5$w1W6OQDgH>xu>p5H2T5LrjVSeKD>^ISR7dvAq3d?`N+?K#cy{Mp*G7pO$KZS_H|k(>djm z)RqXYPtR8}l?N&g*GV?2*g&pv37j{d{5#M^_UE+im$YZ}Y20J27&G9x~~vJ^PHZ_Fb+LkZ#29(;_%hFefB)JmMf=Q0D8C)@U^8_dO!J9 zmL^zYf6wdEZUles%h!>oUw^Y-3WP-7U;6RImUGbbiogbZG>48h-1}pw1VrTy0Ek;A5^zf7^V|kXWjy>5nW;`2 zx-&Th?+O(Y9NScYWBE0&TbED%pv2ZSZ|v5D|2L-|bI!*7&pxF%&hLD<%$D1Lu@5r3}KpI1e{#`8aqK6k+H^K1OY7b39xZLwHZ z+Uk#w?(Sl#6KTLB9%81>9IfZt=wwydXPwcQ=Gg*4D_NqY$(^1%604stypO&he#?&Y z%j0vKf)bAnmCFi~56SCvwoYCbJx~plEXc;jUR%XzcFUsl;&lEZVsYB{jMJ5i|2n)1 zeE#*H6R$Zc!vA95)x4wq=cwz;>s8PGIUhT4`})85Z)V?L{c|u@>BG~1;q?DVqatJ&^&WaYWC~`>M`b2CpIton=?A8 zwXL_5aTKFG+{gh+*Ot-C?$C@__XfVUp5dU?Qc)tMgR4tDKMQwuqlZPFZo4(1-(Iz% z)t4r-tYO{vU?+yDNU~ZnP~OXxQM-q_dGWOSXD(K+pgddz_ww-+Y>|&`en)yYnW5ZM zkPZ&sZQ(B-`@`Zha<9n)dq&IkbZj>&3*DKUr55BlBn#s=FUfDq9(>5B+Zx)jb8xWg z{?!?{Js?!5R#ELcQ(m%xZCP3Gb(}pwAkm-FJuAT7E!N#xXK9xB>^IDPg4Ya%ASZVr z|0;gz@bt9pk#l?VLz;09!ZOri6(O_nykis6r|igp-+e*Joj$(cy;xWCUUOM!v^cHc zeyA{S!eW`cPiE#Ri_*#Dce~hxvotTW$A*^~UM@6mxy9wBNkO~cSvW2>Xc?S5@t6qm zJ(p0hqy>#*7E(-u9#wFNCluTdGFdRenDXCT~f0dfQ`tRZeES|e2`jpi&|ANrqCNi6h zg3lz<#d2kCQ=ZMs$d0)?=u#gY|C&`)k7p)_9*nH(In1Cvi5wJ6Mt=3iXkxnT*zFi| z2$vMi%R=M7=1qi_S|U%0BaCKsFudF)%DOpoh&yidwTfnI@CsEEx2AksBT&Uwr3HrQ zyRXll+-ekUk$Y>=v3ROQli&$Ta)#AK8YS2LH^8<0&Bt6}TQL^3E8-KQjl7ULs63>u z|Bz6P@A=Sb-DQAg?9V)5KI5d-mNo6Q=2%^A%$H=sl?|RqT0u06Z)l0hAGL+74eW^l zP;zME!vz|@8*REL|Kb85hW3Ec&DWou>7Lzg0HQcMIG_5R4zN&k^$E|(`j^2YD)7WV z03NC~3NI-Z^A#*^=fVyPFwTEGRm+A^G^Wp*J6J)eD7#zB)A$#$yKt3KxQebANN1^) zAR&6gerW)OTwJSfcNz85qwRaod>Ilvozh{~6r%}>+JrCMaF=ShYhm)2-f|AaM9qYn zNa=dcj4!X94n)q`)kAoCS~qoR?-*G+J-)PA ze;X(z4k1Z9Y*8%Hk^_M)ER!rkJWLs^j$Qb*>ABd#%d}u*``*V-a`DW7dsH);B%j@1 zF*&_AsFT?wA1Jpwqb;)S;Lk~6dx>7E6{h`NYX?rWQB+o|eujO;EI&5iEQ|THa*ob1 zRJ&2?HMx1hQabVMZ?nhWIXIC)rxcj>-?30H%A_il$NOoTvaGO%UR*RY8hA6VU2#9L zi*>?E@+MY6<`o>A+V{8pxI&k;4vwqT#D+>7$zNoBRr$--Pd+3nh4mwc!fx&vv(kSO=ub<`*cExEB`C~}t(~hJJp^_u1mu|uvO6zv(-hT}) zL%o(X+?h>e@@%~C8uk8?e5h-S@BFhqNrxe)4D7^aE1L{NFq*%!xhSocBTN=^7=!Pn zlk~uTFXgs#@(GRsCbl$2US1xhE^d^cdtn8K9FFKATU(nxlx<%?mdU zS1qCTu;^Sl@12UKdt=0!g0aorE{VqM@VAru*r~Mcn~fU+I>b8y?P=XO;~lA_*G~{h z=4lyLLTbL4=A4q)`mldKm=F^($OB*+CHP4ozZ*1>IH^a7Hj zx~fi4h%%eqoF32@dK+5{_LyBfql6M9`8T=y&|Gdd_HgzI1}Y_J2H*5d=NyP@!lxGh zXG_TaAv3+uTUa??U`Tz)sVO6OaB;Ck8C((VbMYY)O#>K!Ah;)u;brTd-$BSXOm>1`#4Tgih0cRwnMJ3Pgb%J zDshqIihuOm5&gP@e*|h+c>y7&&GvtJ_21F9a4R9y1L?sHXL7fnRIAVU zVFC&f@v~i${9hYmiBD~P&5sCv5vM?|w1}L){(?*RRi2?9bmQ<6b2W54<(MT@ab`X* ziwkX!y^lh2qdc%lk4Y5-_vEuVSW>NzR@|^FQFDY#GqwYr{D zNF;|GP2zhN<}9*8x5l=L)nfY&nuR}PLNfERB+gEOvV(7{wX61Jr?{q1zv_FfVmz`( z1T`wA`Y*O5d9I%L#ANNAQ$iCv|9La8?qK@8Mcv8^S>p8jOIla~H)pzF__X0^Kp~w5 z+9iy-quYwcMD%nKZ+(7UFgJ5qSe*&lC&n(uOHe0#4%W~%%UbA-@3|ifv%-&O(8#@1 zxsa_?mHy^klRl-2mc!UBp>z?A!H20GOl#O|%!}tS9m<`xAdlm}z_sY#6zW5hGu92% z(M8ZY8A~GwYYAs%;%Lnm5dXE|A3S}<*6ZgW5w`J9n(@r8$e|Ckl}Ad8MB zGjBYBqk`%dFd9{`)lDcBZ1kbl1}=nZ6h&e_BW@mA-LdXX*^#l@oetR(r^(bg)tabN zuj41wY>c24dFl^xUvt0qnr!Szx8|_?o>MODmTeM_gn;*Ty8u(!x;j%MeSWn;d|vDv zd=ym?(GZIt9!{_J|21UPv4L&w4-rrkC|Vp>N7rF{SLB|CwDpvJ{3stU5Xs#=Fy5uz zRr{c0`fv5T8zqFaT~R|8j;73NN+?ocxh}!5vLSQJq~-l)^vV8D)7VFXoBmBb=;tjI zwx=c0m?n7XbQL9R$jHOzd3mXYy9yK}{UYfUrOc-&jX@dxHD@XYOSQp3zv8x4OiSx& zl>AbK@Rzq(I(Ld&A=ZZbrw-=#CH(RKj&NCBuT1Ktz0rRi+P2I2Rx)Qml~91)g`&L> zg+>=&yqc8%*6#G?c%V4CCmrX#>iDuRXKaY^cdfy{EpYEE_msQA6RH!HsoW7)kWMS*8wL^JvtJl( z6wlVkHYW%CI6B*q&{8Y6>bPWg-L3KQ|Il;v2+(PLJ)rX|Z9krFK3SN~Eckb5yPZG1 zJph-!_wyUd>9pUH{|kHX0oByjZVjW@QSgX}bPH9Q^bRT_(iISpDqXq|dJA?z={1xf zA|Sm97+O>m2oQP;C5V(z6CprILXvNT=e+M}_ntfM|KIPz@QefwNbqEz0f&ms&GSI!KUl z6HH14xqnz7XFwRbnu3^^-nc zpZHf>CLPOx8~`pFuV5SMy@Quqfne3iPpC)wL zOEi=;Yp^~s+D@eHk53F4nAqO~m%BZv7H{E?&iuqHMCzX!&weA3QW+@)(dtiY6b_*N zC|2kfuj7PakYcG%@y(X7r+>7tg3p2IQ~_c!X;Qb9|CvqLGceshz?^*WDzx3)TR_f|j9MvS z(V9zc)4$_CM{>h;krQ;8z!Ek}8%?^+>Eb|St-y#_XSxoJ@?^K?f6pU29{<22Jp!q` zY>350BuX*RrD%pQhjwmG%w-+`HGasnOoRnxfsw*a`i>4O@yZH2x1P1?J875YDWqtk zdLDarHWhx4S{Wt9yBBWe)fplU;Md-zLzjv+Oic3>!@aO-;eo^UaoV9=;-IoLT==0g zt~26ZZkGa9nzN;oGcwP*T{5-kn=+1(&Hr`WqJA4Uv~kYJQcZ8xnQ9t|aaUS76OG%| zOEh9h z3^bm&QiKfSnH)rngWBw;kPg+byoq7SDqw`w>oy~*2(49^jxwXxeZ3-0E1yTfS42i@ zo8Dm38v`(`K9k?RmBi{0oGO~-8ib$wd~1KKF!XuV!W|i7>WQ^P`E|(C%{%``goE$$ z;~+D=p7gU|5)APY2`O7qbmXMN=cZbnB{SXp-QxG&)&G*Fl0TFIyPwWgZW#hSoF&N^ z@wB*%Y^mBb^SBVX(qqLmkxtJH0`I&*S=Lq3UUQOa33ACCAv?MtSl_3)!gI#2GXPr4T+6s;SGwH=b%UvN9H&BBbu>hp9pmG_ z^Wa%Gv}0L(V5nsB$2f5)V8>In!rOvhpK?w;aR9V4?=%1FCE|HB|H@Q#ys)a}+BMnY z70jK2*}r2e4@J}NWlI0tnGo7OhC3D`;&jt2=I6Djd zY_nz)XwxOH5iM@Z7$N(+Hml$N?v(}C-B~VneXWCL4Bn!lKNl*meNpQfu?`JcN>oFD z>@Q-7FLO#@PHn=3`7z42Y{5J5g}RkSg~wWk8+q`XQOP_=weXSXKM+{Jc^F1VwZU=) z|9S;TGzgk?jcOghS1977TP-vq=~e?PcOU}7^Cx4yKwaYvj%e!q#uzLJ?AuAsEg2!_ zb?lq$dgL*lju`#&AU|>N5=V7?T|%bYyx8CX8+Xv<7LQan|3;tHAa0QdoL+C<4Gv5- zsM1$k`1JiucanC~9fs~?tGejAyN+t*ihQQW@*2?M-atnT{JV3#dTZP2g8nj)hJuru z;gO&#BbWRMR+I8ge)d5Aeem7JWJ0VBIRj;x*;#EsHK%SY^zk=i^8SzpiQAT;);el1 zK^3pPr3(RBu)rTIx!fHlJT*$2<5cMpb@yRS5pMA0@T%?zxAxO6yF28U-B}P2dbtKd zfh|9@0Nu00+KjrFy#hL+OO!;VKl9cr1Z)JWZ0nIuUT~@CO65YsEi1;u|_y0Mg=MjfQuFO1D-kIfsxsEtj zl?G^TxzmET+_N{^oZ%4G=kWD0tJ`1mEhQ_a3yL?srn_^05c&F2Aeg%PP5P7zWK%8YNr7sAEd_X5N7oo30VYF!4m>yfvk1H*owt3%7Xa zI&=4?SO4zxQk>gvUSp+y4i`Wt)d+bNzQX223+M7f_m@?d>|yRQzF3QQy)DO9xwU%=7X?F9A%A~>6b&7qg!`s_EOAiC)qo9u!(6-3gK>XP10g>N)d|XezXDy=>l0gfEl%gmjLa>9Y zxqnI6Zg(_ib1}h8iZ-mWo0iLUYb25cV$jK~^CY+WxA@)Q7JT{J91PhWpZ#J6DsOlL zFXZf0FCTKlIUStVEMWf6tl9R)5J!m~8jA{iR5*gCisQf8#p47JGE6lr(8)BEUUGvMypxQs>u}>J9(Y zlC{uoOMnWYQy4f0E>a_dy{3(!f#0(+ZsN@ujAdS7Rf)xIlc70q) zvE0Z5YuF^by*)TE@D!$hdyBFX_|}+=TJyNJIDeS#y&M2*S+P}wTTQj@e|;Hm^t(K@ z+L+{tXe*~6-Nm}+Py%34aPY=`<|%?vPx`~vLIaifivZ2{q+YIjy|!NDM6fBCJ@e+T zsNqzS(=HbryI+#F7Ej`C=9p!=Q4Td zx-`dCP_Kpm^AxRoa@E+qgO8pgyq;uTf|!5UY1kO}9h04E^Xp7$0%l6xcEicnxu-*X zT57V9-RAMe)A0P%Cs%p_Q} z_i0gvtD9HG*^;_orNG=m0iPe+4`1CeDS+213K!QnIPqR|=I;2!ibG8IVWg<8fxHC; za?Z=&@(N?7QbV$d`Z4;tJ!?8TnHeL2LD_LnsB;R5_2 z)LNW{|5p}N<>p0{;j)fb9;supX=uaPG_S7y($HE6h_=>J%{^e;PyE!_wl7J;!^#WL zXcCc>fx%y+AEtS`@)aQJ`>S@K)i=is=M^pF4}oW{9Ip7Ea>RY}?9^-BNoMGpwR+2XS9?+vh)sojpOJ^=k5yW~r!QmP^zdcL zcq;>4sqqR@4@V63ADV9#_gb1=h0RproO~d1Zs=VK$SN8Swyuk2r85VXr9Z*=jC< zn|@=K(+%V@&rEcE<vwoqE_vpfp9NshukF7AEEaiIfa@u*OQY2NYAKPPdNS(?277fpubWJh`Fi~sv{`0K z!RN9whm?zS_uR_%^zkf}ah0}#QEYAY4mN(I%3dSY{`B(2U))a%$7G*-HO}+eJ zhx?v5XyB~%2XT-*9PsUo>0ElJXIJZ3QOQaOc*}E4fv`{5#S=YqkS@hW3-b$IQX*jU zCh6}U0u)o}{(C`C_BNiqO;S4eLNsr5YbP6fSU6TGKnG&+F>qhRoM}hU0lGPW?dbT7 zfy0kG+l=FmMu@Ra>ScKNT=(gL089@SF8VxuF<3*zO+5Hti4*)=s#x8}wa=2m|7aSC z2VjYekQ4qLYY##(!$NI!SuvUeQ}IUiL0|R*f%ynmvFZS*qdII5=Tw~nPNud1&n%zN z@x{P}nkx`dC)z5kH#+C;pUffTM0BWP%S9%q534>5oZ=$YfAWR25^mf!FyNT|8PXxP zKxa3s1~%$1&hPbB@rdCK$85ELapi_xBx$+~K>wt_vUPzk{zwFI?dZ6p@nQoX4}43m z8YZ9WoV`=Cv)Grb7dmC2;&!OEKy~wa%&X{3HJi^9k6IZ-jsNNlJ!|s8{O+@r<^sDg z`m%Z#k*jj^{gdqqCmd zPy@y84rGg_PC+^Ho0G`;oE>IMYztFa!Xep+7J+QY=IE2X)Mn09)+*tRw`45OSgIO$ z?F(n@9YJSL>fRht_&G<4NA_PKCV{y3UFHFxz~~>cm`VM;EarSNuh6gq{-dMNeEqjn z8M&#o{dBBlfAECLE;V!?y~+1mEx_OSL%!S+Q{HqH%DWaST}nD&59KW7kByDo&x0>p35`0f1j-o7fo633>aA@qnC;Rj|oX>W9kXk zH3DJ>&wcpTnHs+)zy&stB^VebGTQ?>Pt-iO#@7qIZky)X#VdGBE!0{3$}Uap&8cxx z;Aw#Kxc?t(djGv*EI{9gDEkL@=ti;JgLuF3zTMI#2>XB)%j`dy#sagN}7!G?)LoAt*}fkwalFAf^|}-uZ)}Aj(_+j7d(T>eIg~& zNUgnhc7qcR%Y+eQSRQ+oRta$1kIby@%F#;IPkyqIN0S~ID|pe)QN#M)@Pf}2v+YYZ^~JGxBsNPJ+%0% z@^-l7Ei5ROmCh`jFH4i|mVU4(-7Ur4!>;GcZB>PDo9)7iwAcsQBqdSTk#3xwy$g}j z3DWH1&i6NnFx-TwqvyUo&=C3;vE14{+|4*r_4wSx$t^piWF;frsVubyS}mt*{xZvE zNz($b*rxLKL`P@R9@*4S>~CY}Ect_+R;Q+6FJjN^Ecv@aEw~Ke2CXk#L#MthSj4pp zO)A?xoT1bH6fo*9xyzNWy0UXZ8^u{;tr?O~K;Z?HVe)LcOk!o^w5~wm9a$$oFFu8l zuF3WSDdqKh&&Gdcq(8blsk|mw>r@Cv zb8ML>KK7gq3$mRD3HYGqe_>!heCrqh!>e?<5HbwvLeN|q6SvS#Z4 zYR#l;14}T%@0VcU^z>h)Zi3*YGY_o+?l+(BxuuFuWw-?_F+%=T0A?or)8Y5502Y%z zIUIYpbOcJoKL5AMTmQBa>~}S@8}EbZ>ka=a4$LmXnq2x%l_mY5-{2Jx!}s8ofuXju zWC6yHny3oz_Va0!6C67Ih^u99#Qjve8yrgJ@ERE{1(9e;oo&+6bygj!?f_r01PeUy9k|FH6NdCjSokh!G2* zWRJPF^W8#|1P)apl>7>_AO%l^%ab;Q^RRixV?*Uy)Ce}lfRqGBXqE?q4+-FUrZ{)9 z*Lxw63gI9H5S~Z;{qw(AvC8;jC(uX0nr=Kfm$`?W01P`{{u#G>Pj$6TF#XRj&{aX` z%Xc~^_5(Sd2;8vyBAuWBuxb*_**%ptldQRLF4#-byRs#FeJQN0XM}(K| zhV%htOFLRn4h{v{LAWpMU<|8v(LbXw3@GaIdhn@He9HXq7UoJnp)1sF7rL5TYDJL_ z?soD6TCT~_cPA~hx@ACe>x;)@mA8kdUK;H|Ki{2S3ux`On8^L`H{x3Tf=i1KO~wxo z0H}WlEVAi3v;f`B#rbC-?mZPjTqG@T`=rZLZpO%!bws0ZG@7~P+5L% zgiDDtg6C=)-bCra9PX)K(lY!h$aMLA5_j`#1_)Tp@(+Hw-QWA=%682&boYXGYn13j zWSY(_T>G8kI%)q8Mme0F`|oV>o&Hmpc^T{bOn-6#tnTd%VD)KJhqmEZ2c1&!rexP} z5{u^F$u2=({sY+s5M5th*&Y0lpMzih+Y0*3uL{E2wYsB#$kJce1baI0M|WuV_orUk zN|3$guF3t}Z9^CF^uL0%!21?B?PIfDHu-_Wj|o2^1UTIN_rJ6M;h!%1e}r}ZM;hJe z+H5(o>DSrB1$1T{t3kF|(o`;>DbU?=0+io>Z{%pt%&wq7zSdXo{=x{l%P{N$5G_Cf zgzo$jT=ln2LjP}WG5JFmE0lwY;;QMp|BWpnfh&kO*azIzIl})x@{jJTe~r3fQg(mS z1UUKQ=Y<+Nx*zNewY^SJBvj}IO*MWwK+e2L2zc=_AoSDGHChAJdiSVBiwz6&D@_jS z&=69wf;9CRB5W?f-HPzgGN_LQ_O2iWQaIh{OH#wMwefW646vFXh}szT>LAPFw5&5Gyu@W0UZHLF1qyuXMaN~Sxs7#-5IDDD8p^83d{7d!<+Wa?&V-rh zF~28~h$tKuA3hV77}T>Wj%k9+Cw7!b`u7dZpzbUqTEJ-X7`0G;o)s-a8Hf#Ijdl;i zIk5(owpZmn2a)^9{s@1lbp-M%&x7it(%go4hrUkaJ*w_;(nIGeHcGTo*P)}U{rxA=i-0>2i`^)k^W z7;dq_2e?CB`H-Mk_Z4X8wEa})Vxg-^*%-vej1a$4nu)MEp`wa;Gi$MhJ=41z2zkS@ z47Fc7Y&yiPwmu!#S50WM2^BIeol@3xm25Kzm7%#fi7=}Pv)dcY8CReDuQR(1^2J4|C8q zik61SXV-!vZ`$ior{|YJb3bN+c7~KHUK#@)0m(sMFVk|T;eq&di9}&)Ms~`W-J5hC zS~lz4VOn8|(Li)bbMOU=!@)jw!|6WWbAe@JNz&E}h{8=H*nL7^ZHaljKu`0jH1qh7 zaQiTp^d)p({B{9h3BWR>Kiyu!Pz>;;guK2 z7*fD)rSIL2NjE?vCS}3y?;Iu;GsiYn1riJyxw*Q=ipzTD!e~MQ20i88-LGgKTTDpO zCzODcxn(+`90is6Iuo=OJrmf8p4`7Xb1ROg_{g zZF*;3vCkOH_QtoZucM40cm3?k6m1>^i5$({C&<8ZOb_OCc-d%CO74wkA+M8~f**(sZ@-k(K0pC@O&y;1gI&bXGb zydxI7i0pKpBEijGATYs_hMCBv6NnX#nGj&h3n4UAM9JSEuUv4wKUWz4k!J`$QxG+x z54Yp@B750%kikKUn=cbOuE(c_H%c;vHbFI+Sj(04mK%Cz!|F0SlT8is0;aNEUn@eEnhw2gbsTkw)hKUR`1nyMtQK25sPOjRrCSPVj+0Cuy!eHrW#Z=RRZ zrQ29$A?wsCd3P3L^L}w8tfiMd(Z#_vhDsW4YGB#ZC+Sku9fiP~QEs&261Wp6I5@O9r;ZgL6Tp6`Fbc1G@!)W zGE&Jm$^r?qI|lvK$er&<%sQ5a%?n-15WrW0RZ{A#WU3bgLMlD^H;sLQhvC|TwONSr z&_!eajgt1Mome+Ka*C~;c?d-OK?}V!Zqh@FRLDXet2ei8^K&J-+jt%i+>Wv$rPm7{@$BBN-D_bY(U~fK2HZA89oYS)9AzbmHWQW%d~GzY9X3syp#eMTW>$)p z$+7V6Nhcf0y8`4Jr_Nm&rGIhcz^yBmC%>{R8?M^rmBEM2-D>=bhcA^5z43DyG7)+7 z=-s(v*UZ#EpJ`XU%a2%D&VnryDH2Cf{0Q9yM3z#J3Qw%^IfxX2tb&2!nlNE%Q)Cr) z#FNWrhfcT_3Y8wKK>$yC6&(0;Bb+_niGQH{3{ts#3@=_a9}oY+t|F-eyKoo8wK{lnOCPxjW)3 zwYzzVhT3Id6o+-n1`r#_(Xeon?$HUm1j9bkbzF+3KbTffhi+v(8$?fPO zuKuNf4!ZrW6xu*sSY8}k z`tE+bjyG(LxiWkCVZ-dJ(?&CKHXH>)2T^(w=Ag?S=IM|`Tj!bH@e|}XCGgUy&AK~= zmFJK`oh13WgwxDtHmiMat6`ceAMwE939Buc!>V&xr8{58&!1w7Jg`p*S2Qm`yRD5Y zv*#RiN^3YN3$DpbS+S-pMh^VA(50rJ^J=s#4|%QCD$ZfijRa9p)4Y3{GxJ6=ElIfSDZw4Sn0mt;lO}Q@%Z9jndUx|rH;rY=J<66{lM#A}XF)Yyh zD3eFXE9`?06eVg`O#{ikESVRu>IRRXTV&PO5p4_EeiC_k^l~T!E-*7@lX7unR%d@l zku~z*CSFSxoXwI|swvAXC7BpBlixeBZluTvVW;1J%@9#AI@;u6`q4e7K}}C%QLn2E z(mj^{%=SRf>B5smZ}Q?ST8d6&j}LY6ewS$9B;abEn8f(zM@#o6y1uP(X33~8|28LO z)BU-FMR{1}nq0j?NrZ#Nlh7lTfzb4|k6VvDI3#CQq$}ytrdl%KQw&d%ZtSb-k{9h^ zj*h>01iP=vP1|gUxp#z#wOLHVkMmLgj~DtoDdTR$uPV1cFP%=MS}~Qp9H<=+++6pZRZ%Hc*5Z{GZ%Xy9_7Kj@wL@Yf74{Q)0MJ~+kuRatY~Iz-4i95kiFbL7C# z`Mj%FbTl7qhxL37q{?}B2dS$`!ISTWU2>Ses}Rg1nzQz!&Nv0=N$GdYLL;qgYHQJ% z>{f`!7TjmkcE*WEmW9ja-z=I|e+b};_1)s^gU>GhIF50Aht4y)X~ z`Q=jN$IDowLEV63PQ3i53gT0%j4sD7o!!VcXJi`$QHotUtUt~scpo^8Mb|FMc&Foq zmU7wVvr_H9a`k;8bM;&%Z#+2HoBYH$Wo2?EuF%=(1+D1G#yxn*$*Vyr5LNDcKZ!22B?THEH3W~bj3h;q*e&e+By98}@(1B5o94-?*xM<%*07nT?06jK!Htvhti7tX3nZ)72N zsu0%|Lt=vOj$N*Px}}?mh-BZNaCwl*A~>4vMsWNY7_BdWy#SxlT)d{Zvx`n!FEYP; zFU0(^x+B3<^|B<#FW~;M{973j(AjfRIZSq^qFhKvGhKy>E!pH%Gz!w$?7G^n>SY}psGT`P-Tt34iRG@u)kT;cd4`_=(JO5>KABE&+XBJ@sL zRMqAuNoaHNE1BYpnmbq9(Dk@thp&DfmOHJ6vXklO=$~YH%a$@IIBP)%%V!=>Sh$v} z?tgNU+b*L*_*1LQkE-H?R}Jt-wJpBND}r-~sSO{BpO#aqL)tLpTOZ~I5}6H*!P_@} zcC%w5u+S?Pto5%fTSKZduOF|XJQkr3duIvEm=b7uAhcPR@Nwn@4E)r#OyxSyCre?i z1YWL-7p*H){NH?;k>NdZ#Ln^hqqC9QftS{S!VZ5!;=?yiE}Mq=H)PlBoEg@(1HX$? z!f&SGcp>8<)=pP~hVn#8pjx~oc?BV&;`v+J>_pzM#o6Y`Ba(0N=ZTiAO^Z;ghcX7v zWcrm7SPY+$x!F)v3a_6oQYKKNM(CJQhOB4oz~V)ciIyUeyg!s?&bJla6zjgl@w7rzTc;D69Z(XRa7-#`I1i$#;?OxPol3P}eOdG{ z@TN4Kor@T;&PnX}c|sryjW}m0ndM#UaU#tmx6WOox_#&=Di-Jdq%csVCuAH?U;Q2m_ z9_dV$J5UlRscj?6E5WC(aX^uv7;Z3S-ujv&%~V}Kd)6s?8X>w*z@YI3$O#@5*sJNae%HjaIaU-!;R!ghIzNJ68P1M__zD&1 z+GvZ6+^`_5ig=mpx%ON=f9m>8V-ZJhD=x?QBgD|dT!^-yQ1WAUwbzp~;_f0d-ArHP zXIib#i0et&?mw^?fkjHNQ{!IC9f5=gKRXgP#aZB3-oxc{LShVmiw7Y=Ns7BCoHRIJ z_zqqC@Eq@L<^;N`5g2-W2OcA&YB=eDJ5=uU%N!{OT^Vo7VMf zlBhF^!C2>@&fNF2F9k}|+>m<=c9S6`sfQ`VNgs{j5xApI_qwpav0|$4=ywA&!JMvn z4VlgIL4dtJ&IRW&Q;%Q?#qnrsrMvTKB^dKErl==QBGpNh^`c1iVC5{cu9~myyQuKC z(xal$TzRS@S^C3G=osWYQ5PD?O7J1h{lZOrkz=xp`o_F_4669)ZbfpG~cdD%E8 z|GPk)^eJv)#w94qe8GD6npp1AolCuLAy_T zm-h4Vu`iEGe|sf?mj$@j&%e*SbdsU=UvEn=K6hrfLw-HE5ZKPOyQu#8XZXmd~D0y3zr1xG2)5e&*r$RaNF_00iQv8Ap1p44k^t=mWTDv~um1nW;=g9qpV20AUy`Ywh_Bk- z=qp~SY6!YH4sqMVs;?bh|GO~t1t6E45Qa&nJ#=7vFi_BQw%>mb>$MCk*E#+Gu%8mv ziMBmmh^N?}Gx;zuFPK~!0OGkg!MxYNjc5PM$R5d3PoHo@Uok6uk;WW(eP750E{leq z)jnTqCA72&SI^qKe7~6t`&1pTOUatzHT$9ajWG`zT}mWr+L~U{&0hZ)Y;SLizc4jC z!}Kfp^+#TMaogNl|9vkd4v5(_V_!nWiSnHg+0aeN&s~YSjo+PI(?4GeaCzWZFhGsP zF}?n z$0l2}SB9ThT_It^L0!5l_cob(dNciZ zw7<@#%|^YBLBqENxl+5%(-v4E)Tb=RWxq-^?iji6kXUAINVd=g4<5%Y0Uj>j5EnT- z4*jO9k%S8(OsGBRgroKFSH;SohpC7ywnM;q%+HCY0xxV&yXU^8es6H6Br0(F%Fou` zCU4bAP8UY3Kur6I!^MkM^%1%ruU-c+JHnfz>n*VPZ^;MF-iln@u=1BJyq-Qv)r9#R z3S-T@5o~faGJEps-IuJ`i=StdZ(Ki2J16w+9=6l#+s0ti1hL&D)SuzJc4LWepcME~ zoI5z-l>y*4dCla|c1|07-G5=z^hXTG5)&-wmSN8ZNn6{#8e+-DiTTLxIKhUS&GJg? zFrtx|c08X8e9cinN7+2`uGY8p@uU~`TvgoO+_?3%=v|ri$(MtM@e%VIl?yXw0T*87 zMpT(S(UpBZFu~{~5A%oTp3S<}!`j^4UA%lW!^?TBO57-gZIQ}-?d_wDr>wmJK2JuA z)J34l*z;p!H%?wZT3n21i?w0h2STlV_vZGFzxmPDS>ZT7cqdItAoex$wBnogG;rJH zHj6bW+8K1@<(O7$DpxC>uwC$&q#r4P>0f}HypXuiL=<;X zD?k1D~MvJQ{tdLKKFyqDf2`O5PRZQI*XDZjh)+KrNabm#PgX7AP7PL%M9pjE@=#Vq&N3!WjC+NM;GCaBU zAY5+m%^^7O)0`U7#uGG=$a%p+LU>FoQ>H$3XQV%@ANc*_2m4Lk`CN3{d+S~3Clgt3 zbFp<;fT39A@_po)wTAh$#Db8{V^Gx?(Hr^J-AbOpCyeU3G1P21(6mf-to`!WuC;v1 z)3=Is)z!U|f|u+caB8>(wm?{aR2H%%VJSU*2dbBx)}8&NK6nqis&0K@P{vl-HXIii z!JauEg49G2w}=|1CCR*8!uCHDzdy03igL%ut@i9Fg#t}w(Gdf_U~M_>u7L+jNAZLN zayIXlb3r1bYx~fRi2bbYZQ}XM(WVK?G+#sfGGaL8mmBA9`kxBx8nS67-2XHI2m4CviI zh7FCVodoMm_9Wp|wH$-bu6Dyxva%cEn-`hehmx*>53f0=8ijSr6^2!D9cj1P(3FPL zPLT}KZJJ!leaWWM%g}aCxI(e2k7i18 zPbEpLt`y4$^o8b+7`&;kimFODLZoIXuRn%kQkMgIyp9V(e8f^My$=@jWZz(EdM~Zq z%@ZCZAY2FNsUkO?ED<|D*rE7DGEFqK%CcIcSB-DvOy_ynWo|qZ_ZfiQp~rk(iTwd# z2%w2{rjM((5_oXv%`|m)xp(tPBRdM^mda1lqfT8wahtP4XFoO2Vhh+0*D@4!e@pg) zJ>(l`GfMDq8i;z1vJ5|i$uu;mz)N6>h*+~B-=3#8NY z;0?(st*mC$mps)=d2`**s^Gu0io@dF#4NugY0VUhM8+A^_I<$Gh7&qN%mySHN9HT) z9zM$g-Bo^qGPiZ*$f(`qrbr436rIl&SHGMYLOEVD`T7;9+8SB)vfFO>t#?w~8*!8d zd8}c3&7;#MeKN%>JcbPZ@Tm2fzmHTI<}ag52yIYK)9tmg`&V*8pEZC4Ci1Q+*f}C8=$<&o)1{ ztX5RI#KORhhFv?IgG~~aw|BMs7F666r{lbW)q@UWz%50sldODvx|Y6Tc!4{&PsN^^ z9pF`}s}5Rqtqs5h#~yWs)NMF+6^;6xnH@K4*s-nMSf#l$)qv^8ZwN0#R06mYmy5LG z_))0#`5N)6TxT4iR({9`BjIrOID691_$z?IadmKxBYei{$J%@Q&(k0h;Ov)5E5 zYBC>#Z6xpQJV_)j!4%N2&=YR47^BmLbMNzvP+RTzMqk$?-I+$I3(AzyGo)C1(-;$Z z!sg1(ET2PS&n-%WPrZ$bS5g-1J{ZGPTdhr4x^Wm=e5>=jo#7ESFj?_J%i?|CUrGZ) z6SsomwqprWGs4A3?R4%_H%Asqn6yG?n!2{f(yi<PItTyC2!T@T3)9Y-%9#PAZR4TR;)j$2Y z*oA^$ZeI;3&aQZqVmYcK&2;iSXtH2*E4KU`$3aP#M>kJEs>@${AQl}|w>|l%M)t)= z`qE}nUFxeCkDM<#4{}|77>#WXxYd|x=_eG&*N@VuXi!ZUt2r=oYy9BNRs>Ws!(CcE zuAAB9l|a*mxw(D@;|T3w&51ah2i#4VF1{5UUxKgz2rVfIJ00H~5lUh6-5JU#4E^So z#E5ZGaBm1Ya%q9wJK_>LqWt;ZNWcB0gb#Cme7dp0_7}oCvIq00TLd{lfz5TDo6zPF zz0{87o8nC|^WgIH>*?^EA_dM?@8R1Ft_q8vi{)Vi(}}RQp8HEHZ`A15qK>U2LymzX z7ftcq1Z$nmRvVw50Js4t{M5_T$@b+bEA{!}x^;JhBL|X@U}jt}=IN{n= z29v4|I40f=T#Rm<&lj|^q3&DmKbfTGxb^C+nMyRW53tE2>nQ=(x93IGoXHjFF3I=DU208!>FQ@+edgPI{C2o7 zQ#jcxP?G&5B$!363HbftI*Y0wdW|!Fc$9BX>^7Cep8z}SIFy)XT$LDRQjA!6Z98)O zmHLE-!DF9BuF}^I#~6APGlVMrYrU*nhP$mLuSce)FmGYGukWk$7O0->LiKK3a5M3X ziykpl!#H%yH#~CY2FKK{d|Y%1;wlNDvegeLT*zZiQ}o*Rvgb(PdZkQ5H$^#X znR_-~Z*EXrHM$yHy|7?}aFRpt_Wt_j7@XjP@=(H?(^ftA+@FKU`d|rnrJoj zXhj*kD7N&&bV^mr7rDoTxIi7!Ajv z1JMMZ5nOFAODX1kr*)?VHE_RL^PH0Mh>9eRO}#VdXY9+ElwFL9AezS1{Ptys6Gtp0jKJa{4p=7n}gviHt#rnA%*)9GKQNdal`7W=$mHO%EB+fYLn@`-VCw! zZT0E2-!M#~wza*Zk&eCTbMXa}idPyvkE!5-Sp4ARU)G4_`7`T^M~sptNWbKx*F`cn zOloNhDjT@uQvWF>L1oNi=}^LQU)!&iZ z8-h?M<{&CTZ}wuM0w$T&sD|1Wx>|eqY#_v}^O@h>C4=x8RZ*v4^ZUyu7CN8Il9ldz zcqsn(8t`s)e_Wo&%s_}=$YEr_E9YrV8w5h?O^F4ZJSVMZiuX5X54l@C6P*9v-44Gc zBV9J}v1&x$KJ>}-!M>dL9FQ&rQ>$xwEgn0|1hCF>SsPP2{{w0=L(Bv4d0kK2RR;0n z8+Eo^Cz@tH5UnuYWA7VAn;iq~`Bpq$=eUTyEZ_{S9e$Uccjxr8U?}5iB}p-Tk^aIQ zqQ&y^@w~|+cM=N>p_WMI*fKjjb{Us1%9-1ce4n*#yzhlXIND{f&Hu;FjPNK59Cz__ zl9V6XU3)xxrV_(`cC;jUD@M9NR3!^0CEM3riOHMca8h#daADha(sfqKS~Tod1FQnei<8EzXElqeN?G` zbUnRg(tN&x!f+|A{u}S5M7O~8#hQ)TeTs`gXF9~>UqXy*-UbacQ;`0+*M&9qJ@Cy< z?t13juFMQn~&+fp@#;=+F zAPrp7^4d9}1}-U-kE*%eKCzwpKI@M5#;0JqX*NIu*PNqZoc8P9UeEPO%0FIrR}3Cu35yoMH9&CG4_Jvx%1}m(11t<~}m<&mQ?4@#F2&xAyzu zzZN9K&_V7DhI;Y!`5v*zcviPFh_+%kY&d>k__Deg%}3Eo9@6zi^5)zjr@&XSaT)S4 zaji`}kbC2@cIRh{iV%eIbHKfv{pMzcZOvYOA4_+u zBL}Y6hwj5K=S*+0_;NjF?a!%Is@T?ibhN-4AuOi+95%pj$c>C!(NBDFr`Jk#lr34H zOa0`Ebj*>TX>!WOcH!SMdy?1Ba_^hrtdMuFE74LWlKsq zaCzkeb6)6oWhZ2sww0ek% zcU-x`tmv>9U)(aE;ZyN~_tW17X9`(X!A;d1tfzTZg4%2Vi2$hQyfX$0h zvCOou%v`y=4BXvMI$bDfyq&t79BTxkS0McS78=OCcy zDdPG_rH7kY(59IhlsK}Z)bXULXMKevUC?cD)1&vwxI}oQ%2;NAZ>+OE_r%!`F@neD zZ64073Z{V%tHj5 zj>j5T!gu7?e~C~e+4vzJF6*|Pn$6uuOxHdV;V#gZYrWqYz`m;|5Hx~}e`6Thnox`q zW%_hZQy#uN`{Ks=(aDh`(+`H{&bl_NjehL(O*=2YAi&WwI@Prge%zKP-XZ)RPlxui zN@hjtN9)=h7ro~jr*(EFH_23yQ<0}U%ibtQ=mzmQUX9{XX=!9d+^)?yc5yIs(;7{F zhFS?-!0dddmip#jFxG93C@!;6d{l0v?k4x{UCxDtyc}V__8G|y3fB&yMK@h!U;IVO zT!EFz>n+_1kI~Gw_fkxH1fh9%j^7{z9gFh{il9-=nK70=2QgM;TQRVn@UrPdCoY^! zmr?(6_A&9obfA)<_jie#d5jcQ<}b`&+WQkx@cuY~ENyj-NAjFI)Qd#UphNKE|A)P| zj%p*`_D88w18S5~v}o}bcWCiqMN_;KC=SJfLlxKH?iLCu5-6Hdin{~}RtUiZMFWJ8 z-_V|Oe&@b*-@WU-KYr`|-g~S?Rx+7ZlVVaADqZ!`x1SNgg~cWjic)EefFsr4lD9BzE~-+dNM{Fy!t{c;Mes1KuU?t zOgU^HgXOea-YWjb!=bUL_X9mll#5(UgB}+|2a5ZRXInBoeGB(Cl! z#FO4QOWt1(%Iou1I`ztv2&9Fj`#n|&qNuEqyO zw@Nv@|C%+CCsVMtnx@>$^wg}6D)ZlFC~tk>0fX%m|EQ}Wsv_fGT|H0uVI zDPz??4Sv!qX+p`?kTB{Faq3ObwrZZ;_e4F2GUwQ~77!M#F;aCwZ0gl_^hU(8h?vHPzZT2Q{l-i@Rm_>Y}Wh12Nk<02^nL(5h0nP9ou zxq0zkm$B_z2hHD8+b>ovX%@n~CHmCyr?#ug5YivBR0a){OX@X4jCtE>ksGZZc<8)oP=_ww)Dnybw;qr=Y(6sIq*g5!|Jl?1_P{g$lT@0` zM9SXD50~km*@h zSvsBkM&y~hG}68IV=r^0=3HCmuUNdvSDd1cs=r{jzRodYUj?{waqCQbH9`yq@2(42 z3Ow9~XpUoa?!x3G3u6Jp@l&9f+88gBEvaHD@FM zUE%iyk{r;h=z~=`4(motw0EltYc(%Xn1L`_dw4>`-zGNHWTgr?{~9RI01vu6_E}Up z!8as(?(`%RhqICdc6$aWB9MhsDd45Fq&?@bOaT_yo@1!yOePV*u9%A>BDOQ->EZ>jHax&_di+;LrB7sgQieFX2y4gwVm}#n`19 z?cJQ{+W~u;D~%4fCc`eqMy`hrWNH?=!#ZfzPRU2iqjy^hzphPmi|iiGAgsC?h#|OU z3tbvi-mZNWZoMu&y%hQPMfEpNIl9}o}1==6qq)5FmEx>5PdX)fun z?OX4C;3}U-B^7wN8c{qwx(oFMRk-Si%*RY&&9PN{Kqvx+h9_AXG{2GPGLDDT+v+N0 z`{zgXyqM~9es$EO>DEr>j47mP-~JADT;yaE@ZV-ti+r~GHhMSY`Id-LsWQOQADKlp zcj?F+wtUG{c}?0AWgM7vo`kN=7J1vrjZ1IcJc?3xP;E|RO+rBW5N2}F#!S>H5E&R( z5nTiWCc&u>Z`$zBaC?!V;S46VQGSmuZ?&9ICBuW$#}dyC)afu4@01>;8QEahnA0di6619sPOp7^Wz3WFU9gIU z>F{LM@H-9;4(xYIt-8}MMQDor-dkcO6ELV3uYa|v!kwIAG*w}$`bbA-%cySe zcHK?W@MrGiLnFibu1~jKTj{af_oK}Eiuky>_pGotMaf!@rp}9%b&_twMq+R09bQ@) z((aL#?7DQjUpz07N5XJL-Rj}(qWl~6G@j%;kvSE)$sJl@z9P=c7w%ZU5Xpa)V5KK_ z!9HrLe1CVe%qriOyu<<=~i$pDd>b+aM0k>S84{y_$QjyAb! zZ%n<>aCv$|btBGf%LR8%CZ)LD-mVTlcB);EpO36hk>_ZgTY-#D{2%)wG%ir7@D+`H z-d_J)oRsy$RogqA37_S`4h4%tbK3YVnZnmP6+d^mLm7xd0>aHf2eoD@u3g5J=-Y#H z3Jz$yg{A^ohEFr`f%6yCrcUTlvxof0%Mr}IxLb~POwHzGn6v}@riUFXTE_MIQFLR} zVlKy`s_R9%vY%OV&+-M|E#92!E3=r+3Os+hgLUW2&;(CktgI7^EvI7{b12w5I*8?n zpeUL-ur4O7%M^fdbE>@gtDafxIuCBE9AHsSA$SSnV5$DL->(JleaaV}>90i~e_AD( z{b&Q4My5ip)SZG2Yj~HFG-c#=%hLjjM2P8I0eLB^i6-4`<7Us)Z9l11X4FJ-+1ki3 zo(}K)#(ndjHu|nz=Z}nW0V;e!R*R@%=fN3^xa+K$|v2h&1C2 zccdg<`feF!8jg$oemZ<}D)Q60gzM!CLVTrplD8hJ;Ra_9&qts9mO1iAo1#VdLwB8z z?}F5(1WH$b$Q<9Gf>`xAGNAF%p1%DzV$qI=KTaJbiC&Q76t@)Zz-w{KY#|WlnQ?Xe z61b)ocj4h=6!MGlP{(v#mDuXuXL&c3dP7r7WPM~cgG=&N6(^In>sH|@Qh08*jte`h zPN`$?$|`1cWo6=6(aScbB@MIQRkzzeKg1Xd%heY}ZjLfiq&QoRtnJ71Ciiey^DqLZ zTayz>ccW&z1)qR@*%!v{n=D~1T&0mIr*ij)gG^U>*_W9~`N~JY~QJ!{81Bdsor`@l2yVSCj z%bA`Ij>s>RkQUcrBy?q}h)O08hZ+z+;;GN^I7?^k9o~Q1L4I4)VHPf{tGp*-_GZoc z*v1>*mj7lfhC)X^&GV*NZO~4Fqf+8rFJfu#$-{j6o{=wE@MP85lZTwQW7cL{maGGR zc%FGK_@F>3`WoWgBxQs??ah;pK?CaEJ$mifABk080oa!MTFBl6C!hYaSl@Uie4*2!!T|l4Z`3eC z!t~q^(!L!@xp{A7A-;bs%d=N}^TPY~a(eB%w}dV4N^{HEL(ihO02#pwOtMk zT-HoEDzFX~cB@+y1iWo$0PU|HLoUW@@320(@{CE7KmqRw=lb&e^Q{-cXl{*ijo~q* zY9R0Pwx6HVt2SOgA16`_R7aM-=8>Hk`CiE5vNPoqZkd><+eqs?JjAu+a`(;DQHup` zdt%hP(XpSK7sgY>bXzt#ug;Cs)6uXa(AhD^cF%-Y`Loq&LfG_5*V(y0q@?LcbKe69 zka6W`{6m?dhAjmvPD=5(x6YD%973TjPou8`p38{9FG;af1_xd#DV8sEJ0g{C;VPuH zGY^thZB8ZEZep?BDOW$rUorzq3;@=YmQVOAjE7<*QQ5l9rdRc0%XG}-^*)sI!{?4*VjVP#cE``-bMSGhAv9=nMy}A@bb6bCa&Te zOJ%;r0Kk9U>3-FUXpc{5b&G@}kho9Ywtwl%L!d@Z{7ogx6gY<4UF1&*)dR}jE}+;- z&b&qcL2G(jZiSs-=2TvV=5WPZ$pOcX*mlkVN0kTO&0}_79z-r5*lfhPb0-HDCZ~TS1SKkm!5{6Gxi?a|5pXo;p7(4|Npcc?4oM-ax;MTqU7FDFhmVNuv(|e2N1kPp*0_`3c)&4m#6!;|j;qgEFIGlZX^~WdR ziO+xjv0S-R^UwGHFZv-QVdc+gT$15n-&}TRdZ0ZhUFmF$DT(aKjWZXbjmRehxEzVGnUX4tpw5zq~J-7XRo0M@R+1rpGCy~0jK@_il z(KAyYICA}3=Dc|U9WZ(?pVWs(`&XJoraZroq7Gle zRi(Ei`>JbfJ^HS}J7O*@yhl^WzPVN`^3BYIAA(7knuln;Xlfz<%<@^TDU|+I>MNNG zve3M7Cd#)b=Q`E)$^5ccip1 zCq@mqJsyGzwX=;2#jeVFdxrVvqky*5&KcCeK4JiYJ>tc}H?JKw7D=$NJV6`g;?!S$ zd3NW;%;wa-SKmF4sauoa=z3pIXnBJP_(q+ln6Ba}V_dHt(zS+`=C zJ=cskIvBJQwr2~c`Uw@hJY7TO^_VqAsw7(NI85`)-LQ^M^Kn~WtQ&M|%RM!Jd3&@= zp&{$sjd-_WE~xQW*7`K~r32mLLRvNu zgt-k`+qTuTviZc=jXu;w_3|f>t74i&Zv=AmR=D0;uU-`XSsz#0F!7v1l=0oVuj#Q9!>}t>?qLUfqi%`K$qRBbltu;0jvE#@mmm5A4wELrYPw zM2gGv3~E@Wq_gXz{0U|p&!eU}+%AZok}&G9V!S0kyOO-SD-UB$x+Vs+D3Isj7(jEx zUx-Qc3UWkM=?X3s9WN$x@Xr?KcK-tb%30tRk z0MUZBXQ63@#vEBJ)U}el(Gl1rnZbe(7Ky|3OvBw6JIO^2_S$IAZ4SOQ>p_+oZ%MeT z0KT~Wc+{wFg2EsDsm7uU$?bgYt;z_Sr z0Z^@N@GsTUHX%(Eg{tJ#EUW!!j>HQw;KNUjm%mPntS%X3>DR3eWzyBI5bf;o{!!1X z>+?zn)Z~2Wkz4ww@^JRXLCEy#Vod7m zy4zxt{pgZ-^m9wbW?<~zZW%WIjKpfB4!04*!QDY!6FjJTtgzJN z#PopU1AzV>ya#9s5`I0`%nluPQW9l_Jww-$7+`(bYRIl+rnnf%YRJ_owO8Zz*eJXZ z_!uPEB4kj-e)_D6oqij;sWduqoNbrazwh4?Z~M|Tlv{=WGv@%!!;v|Lo34wwU2Q%m z=Va?2SHW$@L>U*L$opZ3L;cCNxQdxTI_pY=W9K(e*<$9>$LkJkWq2tUg zrlOrD-imp!O2ezPMdMR;?1H@fgYYGtw(gPJ6S_cUJ+|R;Vd7=1jY)xcVED7e1&G|W zCwW5Nix}wJdQ2s)_@Od;a3yV>tC%Zh#b4c72rIcDtgPZkuep>S>LGLC{-fm=Al$>GyT)Zf=A8Ttiu2692u1%ncN6T9oX4a(VbraDSelen()N3>F7AA&}JQI%| zWNfaOEQA}^mI{(oByZ4|vd_}-4=fsCk%}(T;6)K`yvk0OGtt6);2E0v!gK$(QthmR zrmmPQfB@l|QKsSVpC2?ohbeHc!1oLp;{d?I65lL;R}uBE5}M|RG#SvO9XxUkat%(Y zNELrw@jRoh+r_Nd+e+tHCZ?-Emv;$G0?0Q6kZ(3pl6Ncc#f3BVAsY_?WR72q#5Q!! z^JgbSq~RsG3i#Vo$Cf+D=$3xE7N-{`N>vUjHU6?5bogV$vjpR7n9FZzNn{J3ckg;# z!vGzGfb&!R10$Ig+_?^6s>8Ypq0<%?bsepfrNx_#MBE29I00PX2 zwl@r9pW%GgBDLU|axOC-#Z!NO_l;fA)BZJatbE0lPJO6M1SSflm4&fVWzja>tH>E= zG8wWTPy^1DB^Z!CgCdFhmZ>2p@AW^kij`?oe&a4FLR>yOw}}ipN245lS6c|pFPC=_ zR@^Yj^4FLYX2eP&`xK8#WhBUeBj&sqV7*lHV_8k&G_VB`1m5KD&ppfbn#1&(N~*?^aoq z`Hy=~!rl3hs0$+YFLRVA^EStF2mO8Wywgs0I0poDER2zcQ`%B1b)IwAmuycC%~s{C zS}iy3InIF7G94T?mk(|(YI9KGT}Vh$IK>9gC1(TF0ql|fgYH~^x5Pvxe^uDn@F|;d zL9}ZS!`QyD*&qBgvpM+5+&n`Fd0@n#i_Km>ZhqA*$PJTEWJ!6JupAk)x*y$I~uqE9RBT=S$lbP5{h$@u8Bcgam zU28Yz_C9=A>{lzF+d5D3xD(Rk46y2XS#C(vvX$Z4MrE+t1XIDkyANL9{@s0uQ^nJg zrI(eYAWLegx!P}UY5Ro#qOA|VNZS#B8t#~>#eR;|P}s`Z>xR(MnB z+c+auDL8~C$^C_#=nnR9oP3

Ewv=$VwD)c#($Hdpb)S*^kN<;_;fnQ6mz6wuhzI}(3|U7{$gtkJ2&1Dr z$jn~^r)n|aX8(#gyOI^SG6lfiB-)xp5eZUA%!r6lD-ZKz8oa`G;3`a+HEH&2UlL`# zv*Tv~Ry+yGTW&UoSSD`os&Gt!~bkQNvF_=yRVN=2V7PVomQ6Q_x;*^ zOPx|(3;ZCK(>wRO7X4m~r&qoFH%*({gGCE#1IJhaRpNMDt=UL#NS`$!D~Y^nlppec zP@AQCT?L-xAruzg7#B*etjs<=NeuKK zYzeIPq*o2+)!=4no7-_tzHPDD45WUh*D9m9#K1V_V{A96o_(Auj`pTzyKkDb^sdDN z)NXM=?G8J;@X`HkHt zxBI9TtdO*B6Xw+9-KK?kC$D zPeQ`Q8x}6B^Q9K%Oqv?Rg5h`(ThCoPkJz3N+M6ILzIBWvKAvv2fWXdGI<)jo$CYEs z;8FB$Cry@U0+w65CjW)LaGgNv1ro;Qzn9HKHfZnC&ia>yb$_xu{830BgZ|NIlfUKF zfm!DN=fW`myM>xm+C_H~EN)AMc^Z(LX-A%Qwk3&~K5H`iGw7-jNyziq_Q-lAk^bY4 zPBap#QSub*3MuIdhWzW)1bm&$@X^sGu<5E8hGqv=Z{B~W-n-WU!{Q?fu~Z*Bv5j6e zdox|av6+AW7O?EQb2;PWmwm7$XKfzuhkTI-8saT<|5t&fJd-G;w$HnQ!xkl_8TKZZ z+aHbN0@U{p7YEh)?i-efOpS96oAH-EqinY2?CR5ZL+haER`@6>H1r~Tbw%PS;tDhz zCtb@j9o7ctTYvVBKc|rgoZb5Y&!5~GmeuQMifjzU!r2Sa-ZyJo$s6-P!hV3Evo(UTvbLRFY(Um+sv53pMrkkg zBGkt<8x#r>V;z<9zqlq)1wI@13SQAH4a_!~pWyn|m6~mUMwEnyD|LFWgo9zz8mi*+ zTE0u|0AIc9eF{?--b3BV8z;XDbP{KLVt$>`(Oc+EuZiKW-7a~sJ-QrU{l)wv$^mw5 zXUWEW?4Hnez)nP!Z_?^#c+cLmTvFHb?QYHOn3t8l2PIOz-*&Fwv&%3znZKX}e# z;$4vV-1P>ba5LF2G(FbC#}FEl*E5y|I!~U>6 zX%G-BTWS5o^RC*`I9#YUUoFu`&xjyICNE zBox%?Kw^tFe2>*I#$rEu_Vy&qknO+cS$p(;^VQq-&v5p4=@nZy32zZ9OzkGhJ^2#* zv;*e%>$6{nwl9(Cl-IjwThs|};8SMp%0_Y&sFw{=g*UV#_timlzR8mP#$pk7uhy27 z?LU;N*>@Iyr3wKRu-4i=J^Bp&9sg+R6Xlh$Qn*ElX^GFvhL2#i^#qn4F$HTfgvLm4 zuda$lPC8q$?5k+I2Z1>V5F$rIeORH2eps@0v>rEdJh|Cd*{8-My{wcP=UD1Jz`h^8 z=2)3G9Tk;J9LDP0>+$fqc76?(H*Bi|BE?#w`yX;c+3&E%<9KT_m$Xeng z5o&HX3MFG0+dXv?dMIPmK3gEvko7`Nl=~=atVc*ySL{vL^J~kT&Sr2_uJnxv$+oPa zw$Gony*?(EHJHFW_iuQqM!0?LIAe9SXMn*z3TT8iwqkw&VTOblh54 zRbXxp=e?32Qo56ga*1798V6np;;l+DMr_x#9D`>{%4JLIKR8~SU^i&VF)l9J61vWD z-$8GDo=DdS*V=#?-R*rG$wSL*A!0l5e!RM&Oy!nNeuW%c8!ozlx=2M%sq0a`zlSEY zIqRbk3VrlzXQ7rZcGDVOSY}kip=Y(NE2iP*O}Gv%Kl1RHfFwvMS#S9_EMHo|p&y>vQd~!i} z;dGwZER*{E3VFHIz`T1MNA<6IKX(f>L8tImQl?GMP2PNC1I@yERJ#SOe&Y9i)`@if zJ#-EFG@jF?l-ROskBl}qTrn5N_e>&F^KQw#;p$MHKM3CI*++m>e?mrt3|prYQ;&uF zEEO7NABx*=U{m8WSU(Hf97QqMdaEXgGeLTUw7m~Z$qujbvQLsX>`N2&uy_`oa4Ds7*49@83c z_87$aCSwil4lj1m&^3r+okXIh#){FPJFVNaIIPWh=7lLrj#OTlXQkg8xFPzh*^dku zl=Jt)zOM4YiHFSaFZM}Hg~oAV>^<7@8D)H>Y}_ed{4n=bS_o?{W@SBW{@MjnR(4a3 zW;2i-T5kY&WhCH%Z$1S1X7EEI?9;pPyrBaF)OqulMive5Voj4C8y*Yn2Gg&i|Dfn6 z;KuzGF_IV+Aj17l5b4>M?UKH**7Eg%k*QW3k3soSYRqzcf`A;e8!e>CM8c3J%6EX8 ze6&>Ru5K}ot_k_o^p;AyltL>lB%xLoot|ikw_0ulQR$w_GzFgYJwRXUNsPs$6hqLL zM+*yU^q^Q&$x?YAYUEhcaeZR0cGeWTJxjS8Quf*PWs6aTeTgRg%K&?D^%HwZ@ z6dgXF7>zopvU%1hT6Js<6u8{$v5&A6S(W`IUjRsq*zD9TEs!R z{Hbi|4@kOx$u;A|QMZLs5o~#&jem!FJqtqqPMGydM*k$|6YYGr6sX3I8>DRW`#A*` zu?VF}^5FFHXLS)QlqHQ`q21AhTWAP#A%5VK9*E#UkXq-eFLtl&4s#yEhdB=~eAjnG z;V-imN1|~*Q=J@ay^eA#iN&BhVQ$GBIFBJf_aszM%-c{dSna*bOec!EKz!~0M zom+G8leNEmsQsAIFj+>^TMjn#d2%GaAO>Jsi8eU-LX8gcZ)TBQs$wPeHHtWS#%&*;;-kX?)h`W*jzqJ?!T;|ACGdFTbod<5& z=#RfkaW zJBe@Wd><|UTF7+{M-RAUN!k052)Flz_q{!L3)1b;m-@Zk}&a43|z&-gji~o$yF+8JhIst zjS^k2^XXZEYq-(6M9r1Z_cP^Dv!;`k@o^#`N{u2~11rv+(wOzmm&H0w5X+#F+*j4c z?GR@Bw5zjs+CNu>+S=U*Y|s*BrJP66J&I(THdT{bTmdKFtz zd}`99SqE{k1P8?j8Va~_Prgrr=dR97eVA;)pk{ByI4at=uh{D*0?pQ!ubD{tLAWm= z2X|`3qaIjfwnqoP%u3ysn-N{Ft*^9P8A69UXnAzB%teQpi`Y7VYtlDy_Wgr7m3Q@x z@Z#`}uZ9kNXOY<6xAU+&64M2SjF^QmVgIAKM5;3~q!f`8D8g z3Drm!qvV`9<(yYD>giI&p_Q;=>C(s<0+LyEwsLDNyx?GdxqKql(WmHmi*#<0^t2?& zlSljL+wNi?@oRbd(L8fNjge7}aSlSz16MVD=P~Ai#EC$?D4(jf{QO&(1DBFPyD~WM zpau)!>52k3f%C?;PD0t#8cZxqbOe1DKBoFFI_(k_DPYHS4;&C+p{DZkhvAsMIyF#+ z@8qqLkvg_I5Z*AUwCM0PrXGe=>Tl48++8Ka(VLvgVWs>&ui9a;k;N<>c|#U~r4k(n z{!%B9OdtF@%FpJC7Jv;F9CIQ%pA{=FNFXPCSC(5*b9Hh}4~l5V-Srj?Q6v5}_xg^5 z3PmF=y(vy_!3)%{-qCWZQMIDAHzG<)&lyeKtD)K}n(w``WB`b^$oqQ9H zPR(28Euy^!tvJ<0xhxiZ2WO1w%al{=IKNOCLadH?XT@1sT5?Sj;!R7YeD`ErlljSd zxWv5RsT{iAvsY5umzbRjkWe1qtiihGG~I!%e2wjTg|^aba~BODOs8~8QXQ<*dLF-pb>CDg9$&Ls)UK&|L2n%^ zNe-Hm_TZc{V2Q3$-u$wWj0?G|ZPEwCCMq$%{p7>Dm2kdoxRU5)QRiR|q=AJq@{#Jb z8lu)#^*(KuR?!-{gVwL#1wYt*0<@|dmK>W*8r02!^qEkT0m#Gn){Pped>IFy7wc08 zCG51?qPj(>LbH`^4+oDPdvV#gN2RZ@EuA>f$xo+!< zPJd}nRN7xW_N`{U8S3v{@dq}KKcU5?H@0t zF~xFHoFj|dbK{tTRx3|}BEp1l9l4t+U|TS^{-z6bJXc@fnj;BCEu1G5n7n{|8cs#qtpl3}i$dOy9fZ_Vslhzh4 zquA=i94J7x&>D84^7SeBn}%b{*ZL`9 ze!&#|aN*{u6E&;KtxI2WIQyU@i8C@|X&%mNBovirq1y#+6TDWv>iBph5UBVr>!NB& zLIR0QDEp%9yfZD%IoW=JMA>foHZU}a#Uxs-W*Zod^#cg;0_8Elgu=@Pl?k1eG-vV) z6ko6!{oUd14Yt2g;j_&oj8BvQ7BBqy^zI^%Yy9)>&&%ykKp;$(7$N86994N+iab3Y z)1A;^bzADj+1JX_d#HF>U`o?jxJ(v73vE2mIi9Dh()(c+mTv_-w6iO70-AZ8LUlH= zizG@Brhe%x6GFalUVudTV#gH|LKegDf_Ysx_<@2?Ju)C$L9Z0F>Kr(i-!ucxReEGW zonndjj$E|c@#Pzu&cqyJdm_VFd?c+?EBYtw^^`p(>YfUe=D5~6<+kFwoo5qY2% zk>x{|)_e@Dp3FX%)M24n6fI0qP0Wa)@%Wm5-SluEVao@ueNm&&(tfnJB(>SI3DWej zsD@izG%)NM6lddk# zb;Qy@|4?F5=E!hlV!t>{+q;84H})Osfe~_WqP+iW*;j-PS!9{r^jw@bDCBHBB@ojL zzxx!pJuG4XVw0$}>cbGA*qAce#X+G=^1j2v<$YlIhDQg*IJ9c3M}MBy|0r`;kC;cg zx2`_l{DpNc-_3o7)Y^7wTO8rsSdMUmwny;9OH3E| zr;V?|0{u)%Q-3HGE|#X}m6oR$RCOH3&rB6&*z2#Bu!C&ujlN8o>-x+V)Xy(yLGLf= z1e6yjgBqYBhtDD5WU`PzL}}3jih;5;9zgW@QwWYupOzL#h2GS zYge*}cvXUVPtKDEm>XGNdStxHmo#`|HKm|)%_;-Z+tAr*8ZR8DDSBvw28Q&g3Mzgy zz{<4(YK`LYIf&+4g)_TV>WUuG`mcl;q&^Wh6Kf&Y1HrlGAW(9pg|AHz*CI8f+PEpf z+$4M~sMKSZCr*gj`C}rS{q&yo8Sg``{*7snykZ2T?H$XjI#)gZO>Y0+-9vVMtI>vN znf(FUzD}tlspD>{e*Lk++Wn5;18B)Or1o`c`OzSYx^ca(v+yU)reuqxwe4=yZWO(D z%~MiZIgd?J-cf6WaW*M}P_17*35jrJH_hdn4XEjbS{)Oj*GDlt}(h_@VN}rFvDI?n}YZo%s;i}TbFVMr=d{Vx2 zjTmf+X;z8P4d+ESf2kki^|%yKx$An@&dbw$GH-dkUxKRm>lzthJ9q%v&pRpxGKNlV z{^s-=*D(wzzKfDV;ScP64)=kCSS$Y~Q{Oj-3h86-;DbQy7HW`7MRAiOd=E3A30lbj z?fs71U+dx;TNJB;uXJ*KKvy)m+U|TAa@B9j-_NKyp{cb?n=P#>T3UgNG$_D}Xhu5#a zrxYKBeW^ch;)?7%7yVefL6L|n!ayUHhv^-shIqDW%LkEL-b$sX#;_2*?CY@1vWG@y zgX4j9hCKdtJX3_@+J-rpJ)c3Dv(yOfZrR6;^2=prwMP55R3r{cpv;=MX=yz-rRE%| z26A4WK^NIb6K&9U{cjB>fLMz+*9XJxtrAkH)Q2X~Rn=e}WyoUj{k+gka2aYs{QJ~{ z$sG`AHG>Skb?Uc!Yp&*+$58OHy=ANY@qwo4_-qV|kjbI@^434=(sy(_>wjZHm-0yhK*KF{(e}(2_7eiTG5Z&b;T_D4PQF{?(Aj=_}VlTXYX?RPrt+V9(rz(BTU zD>JaE(;3uP)q3yg$5!@;dR7$!PAR;k$#!N}sw7kvK=usBrx;OJoscjkti3J5Kk>o@igJ_R%Rl=ae9z(9Fve5-=xCj``VNRAj`Yzr?AL-XGOjw z-@DF=;ICS64Fx6VSn9So4|SrTubTaeLiyzHe5^|xF)pRM!pW$bDD;jYN^os|e0_fwr-6*` z0NZ(dFY3|>E_TFfJ5tcm!NUfSfqrprF zQcJ#xtiHiY^r~x7_bK~`*{8dC7!+;*&?EwpcG!w|khJ=^{~k9Tbh~{$QRykxK6+t4 z(%e_GFXzcfd#6s7B8?G6*`$6?q6xHN$w8easUU&I!t~L9MuRSv!F;L6nx(|Wp5d0) zG}ja?T`LnT^6!|Y$3Mq-0K7z^BL7r(da9IO4ATYA4{*vB^rGFNTzsAp;GtY8L0E&R zHv1Jt{7{PL4c_q=(+1Vn0|N(;;2W|pAx{!D{30vMf<*M~S|O?)Lt>_7CNhQsipTJS zk_U7~T}*h9H4w2%Q!F@uf3Q60oUwwVC%8mlI4=PaC?7cMajlk(hinvZ_{$U|Vh z#tW3GMMdHle14wUamr8jP{~8~q|Hr5@_=;YUpdn|DU0#8YAIShH3!Y5G0b*fruh1( z%PYhb`%X`})bk4zB@8oCJ)H{tN<~U|G?JK&!&;_U8<&P*BD@Yqf~riM%H3V z#g!JNndNKjbQ`*T{rw~Ki8B>O>(Hvb<}SI#K>ytmGYSbNJPUP$TeR>-VmT0bYMl)* zf*08oYdLRmyezN~^jJC9bQs58U47aa5yK~}R5m$oMf3qxC9nyUodMi5t^Awrc%bY1F9i*w zqZaW-`ni70NCrdQZ;E^;9>GigC;s)j=p&z{47SfZVS<|*RYE8id0zd@+v*wO&%`ny zo`<3)m6qjf@UmfoD!!d+5|+eZmUHCEJ%$M61Znb=Y85pYFY_5>+hR*Sh%#vw0F^FP zyZPqzChU5QEWAs^ZYFkdX+Kp;nEkTD;L_&wLT><3P_}HAuW7ofJEF>GMJ&&JKNjpnGvh9h~_ZWwfP z@For@_XQ`7Lz9SyiA%HIvCZzjnVA7D4R+!M={c=>mig$?!&eTlSm)vUk-xWw?yRTj zdiD;~enI8Ux+&Rr4_cu{Y*Z6fn{!MtFOPP_BWRsq&sD?jk{=@*5$tPI*?%~V^-m53 za8Fvk|FLRk@(4Uq;>*w}ccKu4?rIkTq1RB$Js!;vpj4VRS7sTTD0F-jZCpQJKUt62 zy&iAzV{LWi1-b@{svy2F`HI|G(mB?!c`v=!EOxwNE#bHKfCTY64GB2Q z6KMl(^0!CV8C4V9nrqRLSP*jSwHntbi)&;+Y@(aN2MVv9q=bEN$n4f2z zq0QM7OtL;__2EEqJIRd)|FdKka5xxCT`M;0s*L#p(6v4_Pc(3G)^OmR>AomSS5 zk3Z5NGY=Y=M{1}@Vz>(fZB=yZJm&n_py`M_4rsc>Sm?b(LL$&|&Dn9dMvpky z6gZW=bfd{JTJNzI!_h*4I9Cyh+!OPy7Un60D8-=MnHRy&R|nV&tvtuKwN5 z<(}yqe0rQl1xGq}c>3#?@E$GhiwD}wop^rJA0X~&`ru{L$J27v`dLhHpTm*6%UP=> z(6_n4aoffTNo!T0NTFrl-vEgsvUGDQXvPBPhUF9W{pyF1zAY(ldgY*aoxh@#LxXLuthna!bW!Odfe zeW`TgVpdP2Am4baOrQz82(Nf3NDYeZR&`Ct(1X5?u0}E}Q!1wJk69o_P~6N)UEKbM zJGmpKmiqJeGdxcxQ^jj^6*9RM>JRLJnZw7+Txp|&X$#IjBMWrvmmUL;T)lU(+shy7 zp2a0X#b>3;dtWs_b2%i0L~5Pxsd}{LGGPPuSqbK#v=0VOl<{7pNZ+8~59or4GeYJ! z>v{)fkvARKC~mq?t>=xWv+njY?2ja^B|s?GV($7fq;Yl-z7N{RzTyB&13&2ED7-qQ z++!$pFycrW*vUC6Htr{T=itO7x*5r21fknJ0-ojcY@}T_r(g3t*t<;Y{_fI6*>`js zOjqy4-c_I+S!>HRjJM|s%bVElQ(ySG%~un*UTr@oT32(&D9lm-!mVI(k0;dRf3Wu+ zKuvDl-zevJlw$!@6r`&N2nZ;>qaq+6pj7E1CG^mH5*39*m)=37*GLJyh)9P-Iw4en zL~0;`gb}ThB9@ew=T5JE-+G|}C4$%3d``p!= zf7viIznR$DrJT8W-teXu^PBKnMHrISk33{9HhY0*w+%bu9%94Dx9fJs0E3o@b9kX{ zmWTAdH#E9`X?rpC?VZ$;f>@ppCexe%hX6-i-V>_&24_`~eRo||^JeS(taJu#e*wm! z2v?F|+&~>znWn15^55^=84KG|A}@Tg1GREu)@Q_Rl2}FE>ie#n z#^{9p?~ zCB0~44CRB>1`d)OS$?sPdE;C2m0RelH=ohyh^tY96O)rB3hlfJkjP3VTyn(Fv!Kv; zh?xByehJ85;#of5a4|mJb*w($=HbuW+_Zh|1*TT4gO9dsN2<5_j2grSvzN$y_wtt# z`}S4LX-CP(**a`w=xTcw{Ix8 zcMRyF{$6nQuYmF*`?0evgo<_Z#!vil_8??yfrLluTJf1jqQ1VPLTV|x0by#iL#|3Z zZYnIxhd>6)VBI@~Ajie2MnOf}FC=?r$${ODHkSiV2z*o*wn}Ar!N(pA_SzO6&PYQxh*8_+d7bfN-%&MuJC= zdIIn>dGI{eAo+YJLa0_PcYu0RJGyVg5^P=*+%uk|T&beh`!eF(xw_DWGo<6d{OJ4_ zXBgsnS_lJjc1CQrq1JGuFHn_MD5h}O#~*sHB_Mhb=2LAYO2-_EGwQxI+I4f`R#*H8fMCC=l*`ARDRH`VR6)!lsi z+KAwrA{I_gE9X;{1My31dAqE>6sT2hOw)Wa6l52w-+Y{o8}5$?XjXFxe%^<9}tU#IZh#gPzdA3Y?%Y?Vv^ z6f4VGn`r2SnsnahV9hjZu%749E9(&2&&DdA%nGsQCFiXyN&6LC`yo><@?d!f86+Rs zrTQ1AQr`lGd0Kb3X`N`DU{@;svOY5)0{`euJ$@ZOb` zbtohSL!{{Mzt2zT84J^aE5cN_uwm4%s6Yp^JktJ<`>aZi1?ruZ-%fNpwxf`gFQ<~j zL$;CB3Jhai5@(glI}D`iQMWr?6tKD2!4GY~VLi3^I_$6g{Y!*)Zr5x!o6LmyAWz%@ zh16}<o<6DSVV(< zewxM1vTnEc?bYmGU?1XpVrk|cIqWrg;`}a4l5}o}zh@XZDtHCnhFkYl+F{ zOYf?x63#MwMKIBMNhYuEHc$yWvr zsZ5zml!vOsL&kcLvUY$2xhaVwKg3d8DKI3j6Pud8z%kbO8~$$(GQ@kt`aJlQZ%lZvacS-P{Fi2kcE+T0LToM zj3V#;7|yqsv{doy@|1anFvh%R&nT#&Wsq3`SBJzecp+fw|R<4@EQ*a&p?#r zY?M`)H0W`A&0@AeWujU>GHc#TSx+$v}X*8pu3rLDFll$NI5$*%KUc!?Hk z3+cLUR!`cHL4pQ16ew%Q%EXh!CoePG?w3jv(V3XGgk)W5Jx^X(cTH8O9e#0U2|a2~ zehgGSs+?Ir*3BCMKqgZ+?b;Ir3tjfdb1a&Kn^cs%zVb&@g0gYnSrJ$sTUo$_GeDK{ zcEaa)M60f_GTG_DNVZ;**W}V0A_Uh_J!2{W&uZ?3#iW?c4@iK*GO2^JRUMAx{9e9F*iDh zGRR4f*j~hrD<;3ttJ+nvNlA5pXj+wskqPl36X44<4ZPBX zA;<75+Dp!@tnrz!lyS6Mh0}z}(g46TzyYpZivBqa9TrlZ&5#H?tTl6=DRlHfpbDCF z$9!J1A#|r{3%-%<+eZGwQo(iPlN<e< zV2+sz9Z7z12K(f&uKv)e0EM}9CJ_sLcoGR#)fMbdK%~JIF}R~vH{7nk#fkmZUC>+H z-HPmVM_r3Ld~GD&7~!UN^rU}=9386Xrxskc&J3XuHz^z6iHxvq3(Aw}>SjSK>8Uzz z*xJ4_buw*Rp~|iM3a&~SZ@Uub3s#ws||d5*60Guq3A z-LoynEhZh|5;P0yltkAiP(uKwC*~rYq-}i`eWNTc-cedZB$XW~Ea^c);iI_F0J1s} z!$=HpL_AHLMgrDbx#02^jEsDfv#$&Sm!;jYA0(hzMv_o77GefCZgsO4C!BN#kY*n-J3F<*j&<)kw( zaMRZ2_$R#{i?_M!=XK%9NX4^^++A!fgu5Tz5{8a!PMLn)f?;{Nr07dE6SKo7#hlVE z8f+f6!NB)e^Vs*}87%Yuvi*hy-XZVCFSYMJp|n!@qyzH?hYf|8@h|A)X~q3 zwo=T`ru+x~TOg*X160guBp5yPj9u_Dm%I0?WO4w z9LTsRc(CqXx%-G1LjR|K12!<)Cd`Fz`iOapvOl!r(=bK9Q%Xcb({$;;5g1jd>ftdu zxcoe#o7P;^=(#hv&-m;lRyWnXa!JzzYWFKaWV$Hv>3q$GX8A+kh!|U| zJ*&<`+phf51fNXN8D1uzok#uj8aYj`TL`b#EErx%mXv(qnf)kZx#ffW%)wzpazBpW z1bj@ag6zdtEfHy(Hg2^A1((>XU4UXq)>`s!EX1awRKM>%kBCWYXypEI*r_x2Kn|}| zv4Qm6<7a1?DavnBcTb=D+E;~4vht;7W*&Yo+)#W{S9u5>JR@qh*26A=NIGWq8UO0r z0_eF?M69K5&-(qvLNHqP!n|k@A2N^GnxG`dA&s(6IWNJZSf)1J%hZS($!LA=h5|n|7_h3^6FWETnW6tio(z1ds>#~FZ%Ws zstqJVy;X{PxR(APCbOD*N|L+6Gq$PA0;^|`xRD;xG&->Xa$IpwZJnS@S({B{`IBM! zGM!V0VN+r(=n~rgtSH8`0i6@rDS`1I+jRQT(hi#n>$z`1BP%PILbC#OE-(f6u=fZZa|A_eNE?L9EiWow5eD!N+58e z;sbq*O-@zCQas@Z!1_ffsAvUI;jl3N0)`tE|=-OgoW*5^gVN5`rC_|(Wi z{V}Wu6Q-pNoFSw}NNXpvdYB*Vu?Bk%FA_tI$OnFxs)h|_4vS^G_f42vI<*yJDNEga zbTdBu_5{3D5|~r3giz@cQzB~`x;Z0G>J1R>+k@&x6h0P)H|%s(o93p)SPz(~G_-w? z_IAv*FY>tFZRYDWaA&$(LJr+<*MI*n>s@Pj@>*lLV^B{=%SKF_?_ny&saL}Kqf4Ad zUnF_FW4(O-c(QdnC&{gL8xUp>_QUsVv{S#elY7!j=DI}PzzxEpLagpa!@Kz>Hz7t< z12XJ3$t*U=q>@$(&4`HcE|5_p@2`RGTBa6qXhI2olpO<-n+6mC0Mm3iv!GjI5r@?0;Q#Sl9!&dM`L!iha; zu8D6zN}_nQJc#eQi+St47*Q^KI3~W~NG*0>Z;j$Ta4Nzi+o^eB`??)1=s3)JHP$vU zB2fi-vJE1QTdR#;G-`%c5R{XFG!uhq>ySrq6>OXWW;0FNLHbNv8}8(cC2qF0b5e(E z$!?p*Y)5}tIXy;n!U_(Ar|lQXabP{Z;i)fz--^q2#ixNp$UxB=QJbR)mihCViNJ+~!ko zp_32Fmxn9F*%mktwqR-GV9VW+eDF>=cXw)G$-^iVJ))%$Jr4o*yicDQ-Hb1 zx5=rdhjxYm!9Lu)5y!{*T8Yy}>5eZv)Ty33d){8cQgl3QwP#C>MSo-q!s|ody{ndQ zbs7Qmrm#;Sk?sOG((sbT1J|FPh5((muPZP9orWvr$-no0KEL|mpY&S~wXgj<^_IZ@ zUk4`rJee+rb$-AP@t%gPp2WUgiYYK7lr<}(C1&}ee|K!18U`Sbe z1DNgn<;;UTMfVw{OaR}9=q%3Ap2vNcrr7gOWZ8cYwQVM#kj(|sp+QI6wjKSRU+og< zJ6hkYzWqOb$t&{4(o^H}#)MPn^zz>6Ox%|HO^U{us zfa>;nUG*|VNacf$RSAiZakcFs#wC?Jo$7&2n!FN(+@oWYrAhHxBor?w0OsDBNd+t& zoFMt60SC?rU7phE)Y63(2XmRYIBiXl4b=EY_FeZ;(31N|USeU#H}$*G*Ln-s>B7VY zx;8hHrduVW2&D^iLWXj zjYQeAI82pfOBn~!E1(hctZd}6+8UK}?Q>gfs-1a8iy>c>(({e<9J}tzdTe;XJ<1UF zORmqbF>=#!=t;R)tjbPXnd8cOq05oogedxcds`CKH7UZv0_7^~s-YPY9Xp-0-&vkT z4?V`aBJn%$Fe3R-TU~~ylnIk$unmu7(?_sV%Y-S=7~o~PIGIstA$-D@xmhH}u-`K< za*dQhl;5O-fDA@E&BE?6=wTnEHgM=*%p}-}Tyrne_uFr2oTKqIT?0E)Z)4kUNT16y zFnAyY%mO(%T~7eui_SbvY;BEj2m^#@26Q?-tY%(H*J|7j>{-q_U=u>q*UJFS{b!8^ zt{tqoT8RX>Tm2Vmi*h41&HYBDfO)IJVo zT&kx}t8Ka-|E|2rh8ba9%80OD8mzCz4t^V~@~k+Wi(enyhkfv%Y&Y0a(ngd$JVknx zB=?rZkhQM;cGmDR*%K>MV2ETJW2m7=i>j`TTlfB3vs@F4;enSB*K%F!#P*Q&)RJMJ zjlmhGxnCW@UX%sop;Wl&_;VK>|1kMgD0Sji?2M+-@a%8cz=1=32j1R;ksbM48?=DN zxG5W(8d}tLS*HXZ<>YwiW#*EeAmYS?`MFh5UNn#<5r7U|DmU=Q+KzWrC@erbxs1eG-|G>=QC-J?*2#pt`bq3g>DYMv8kcAh+xlgCRA?zn-&6@aV2OTQ@>0blt4$HhRx)YWl82u<)~6B^U`B2oKgO zF!Sxh2CRGR@Q}8#4Mk8z85G@20N2pL#B4X)@tl_WrNm@S&*6js&w=?gZDzmd0obW@ z=f0R)9`>u`;!>UhAphfW-?6bGTM=cBYg_?)-^_e#2;QBi9XVVihM!{>?AaOzz4e?3cJ_p;D_^d<{DJMat;Y}wTROC*#psMx*mLV)UD70SzfEJbTJSBkyW~x zN)It0$b7QYRyM9@DLYew>Zz4i$u)$cei175-wniA2q^7t4zPeBnx4mu^*$3_IcX;9 z>Mc~3W1k_g?K5fHAK5Ha6m?`_Jjs$aIueHOf;m#0WvaAj$bfv<%ux!k~o#DLw?2^ zCS!?dtvVKpYB@~-mmHk^EL+LEqjT1k6GW+)8OP~%1Aqo*Wb*pdrGqdfwMEzt!&}ea zw{m|dXN|wS!@sI7%qfA;5VFqRSY^TVyJ6wKUK*Os>FSbgsb`%y86k?S zCok)=OKH^wxg-_zxmy`Ipc*1#+uiO?h~F5@Y3*~*{(dLg6_j_ZWmGW20?t~`J#I4Ume&n}sp>V~J znKT}IZNvN;+Vdj3RH)DXp?xr+QiAbhp^_7ib1EN(s{x0T5Qmt_3B|hI+B^QM=G3U} z29@c=u44(YjcP${^=Vqe!2EEC?SrCfqBH=}##n!_Z85#8=)Bz zu-7Y}od*Lj?P%6I_eI<#e~2KLrrV%{fo85G-B&|bXZ?MX*BfCgu`IEIUI5gh^EeZIK(7XIEw|9zC!~&QU@;-nxD<5EiTfrsI4;$1n12jP|D)2e zFZ!(&p{C%Tm1166tAm%B0MjAtAaFA2ny_Mo?@*G%1jJ2s%`v~CG8;G2N4?kOD$SH2 z>m&^uX@4cpvk+(A=H!E?o8^Q=w}eMEV&ikc)@>a`=>hKesRg3 zoV%9P-at5q;(CR&9G2ppwK*MG7drZ5vKl9#VWGH~c>Q9U)2n{HU_S($U;e7EGJoL$ zhxWK!yMhv#cer(N3*YwvII^*mfbPySqkbGYI;uH{!|E*UT|_GW$QEU@O_x$MT`$Oc zE1c2q72&3>W$i23shChrVIl9z$}t@d9{qT(4VV$sPJFwoQvoaLEXdlZPjU~gc63u9 zeNLQY*G?m>_hla^PmWuq-?3K+4whj7)^KZjNsM>33MU+1=it^6hakL4WbSDA?tHO1 zvR>LA3GA{>pKDmLB9lRbzD&rDB^Jr+JW~zEu9+0b?f{T7U8!kUUQ95S8BKL4%JOS( z5t5@$KW*(?$W!XH%FpYzuwZA##C6FWjkEvW+hCCubKANtMjZiaS2b9i`xvvNmhu6D z%#i7U-D~$!rm#pm;@@^n&?P=Iz4kKB%F;Z;2rz<(uYm%HTh-O6Zng?n>G(B6$;dUf zMs1J&a3t=-p^Le^kbjRg$IC8(Rr|=!r9|QJAIH;H0pBt?c8?$P&ckH1LQ_}O4IIg{ z(IakIiMOE?u7|KOCZx>V$KbdLBZpT>-R`&Xvx$oEaDi1j8lILK2&+L8s(9JqGUu)NFOW!Sw7LKSoonK7U z8?IL&Yt9)BE(Zx9sOErO5Dow_FOxOiR{7jq=Cq$3F|qffAq-PL$`Rt-%2laAle3|I zE}AwPd=5*ShFe5)i_Ehj{VjE;L1l87j#?FjnsSOjsc9YIB9lNGfi6N$lHE#WXV~-r zj$n1mEcTO$6Wlur);$07Ar=z>7sCJYT^c|q4Oz7iQcp313{E49SwZb;h}*fmImM~U zU~@-vxWY=({j! zTooMLI~3$|pR!ZK1(xTIMdj2x<>!(PMeD)tSb<1R6atzk9rJVJR-$5y*e=b7GD(|KLme-4hr`u*1@@BV4Nuzn>6a zvcH`;QVAT2I1g5TF~U96rdBVcJ4dkTtdO-zk5h9U9Llz=J1!r3LHb-sBoLI3;k#Cc z-RLT^yS--eBthC?!53x~2A1h*lIC7+DkgB*Cru{JJxVJ-ltz=L22+7N1F=e|anN6H zX9DCfiI!x1XCSk~iwS4_`H2k1yr6}XBUZW{(nQyv!!XziA36`i_iX)omkTN@nJw)0 z#mKHaa;u!fm+!CW2)09P)Tz+c8cbnt)H1N<qXW*mJiEjyxP3CpV8x8|tX z6%)-awN7Id*}{$F)ksT^==A6kp~Z9n^6fq)VffzooVSO5e&hXA3&3$m{-{(B^cm-& zn5d8DmRA6Cfa4caU3HY$Spv5Hu0^m=7f3rWb4-W)FEyu5L!O$&sd0ITv`4A~0*nH#11x>}AistgX;{}?8meS_ zK3RH%Pg_fXgoK(zyPs%U%61mZ0m)D6Fld6iACkTV58_F5gE;X{y}cCQzG*nz>#SJ; zGwu%^R~t9m#nP9T|1w9<^c&b&j*R?dg{S~_DZgdh87vo~XzGs!H3CV6^G$%8+5#SW z^+slydG!V)AqDbvmgjm)a0EJ@C!26F6n2S8IW^aw9_YBXv3(=h|I$4}VG$SiwtJY7 zoXj*GfvL^iZQh`}EFPp6jj>ZU7Bx?OOAJDd^fMnukek+1W@@|i zHyRaeJmWCc2X*q>g(++m4I8R0=I$;6(VaU6jzLM;K_Zi~O>0VBFY@uKlli{lT!Y(4 zZF&}lKoH2Lx%2@=Lrf@FDN845^Ekq9huG0`bny^rqQ_?3=R0l=yT+AV0(YG&*=c(B zIjwI4MmK`pAp7zDqz&vS+<;&#srX?K{EIqWwYdrJ#c~a0oj zhA!Cm=8hOFmS|SDg-o0G4>W2eg8FMQp}C}xVmY(*`hZQPgN6A(- zBWip3~*5gUzNb7B&rT*wGsM=R7=4jH(EfX+W3RBxI}C->5$ zJNIu>jp2N>|%c(Rj=B>0>r{Xm6Y^3LvE2Nc89VrF!!2hz`yuY2%h?KP?3k z-bYoge>Vug)+I)_CF1n zD&~^q@>h{5Kk=$!MT^m#%46RJ|I~RJ;yqoqGQ_iyjy9XEA*K2`LM8UgrKyO}hh^M24bigoyI?5~p9*ML%jRZ&c}j;fbf%7`^?^Fya3~QR!CJY11);d{KjYtO z-%14*ztzuY0Rq~lz~IdcW;AAjk6MbLdv_odRDRCS#J`_|p?~ge$jko#+y57SlX5yZ zteq6m!V!jLti!07IXMru$I4wQ_S|80A@7<=u9id^sZqz@aU7f34)rBSJaq-R&;Wb` zCtX_$SZ`AY@&Zj*C6{rxAO=Od8AIEzws8IXIhOqkPQEo#wzrS*w47Xa1A}OGp!>+I zx#;*rv*Ltj$kF)YuktRDRCyxIg7M~ z7)>U91{~ec|0nW(d3i|8J%(`U1i!RoIn4~!?dPL-JAnZvoBeZA0fb(T460vNpRG-M zz})o>wU(sUt9_Fa@(&6{YldEJS-Wt}HhulYpGg_U4sG9oHJzZUD9LigvaOQ!i+Ib- z&JNSQOaDv;8>1F8#=JmKK$kB#X+@fb#5(QLt1U(>j$I3H8{gZj&IFSqC~P$j2b4>gtmTs; z9Bn7#v6Ff}Q>%zlibPjxBOuhUAvfhM3#HJV(kF-emJX3vz$&QOk1|%r|3ifM=p-m( zJM>0%CCYN1*P&%!S7Ol1KJh2AbX?k4*YR+|g6_nve?^yt}R&J*=}NH)KsWcF5r@pUfYsN-}ss9 zh{`DtMd-qw`b_uNZ^W|*xQqmWlI{(ESvGNp)AUyF%FRG*x~vD)!N#kMx1$@m4Ue`rlG3$e?-qcLNjNsUZ!Jm%v)!ZPK9 zeHEDxA`cY1dsH@5Qs(JtEF;H`0srEkHG^qmC% zYRl~L|E(%7|4weM)Zb2M`u)C2aR1*{A^*=@?|ZbSz@;&7YvSAfF05YuBSvk8JCCki z-R>ZYMBf(H`7BVWP|Kw1#bN-wEP~tDu$R6Guqsu=VF^2(9$k*OqzWv$IQ0s+}^_888%Rl3V zfU_6=w`6#dGVs3oKbQFD+mong^r5?o(a5NU&ritG?=LSLv{;D%P@WAaH!>&C2{54-3dy81kJU z3Ce=e{P#aHnogKgw|(zD-3nF$?MSvOiXp+R9IS8PID*qPL~1OD`m>yBrQ4CyE+yO+y_FtUI4-LwIB z@QC)cFI&CWW6`$R<7qH!;Xm@D6#gqOBzHk%E=kr#ej$PVAw$sz?}OYd zRcM9}zC@LNzqdAq1xG!QQw}K`+v}A$q5!Ttuk21JzMH(F?_S~;(UxK_khZ1sn-dP7EigGQa<1@A2YMw^T>^wun#J=hxdHY zbGDGtS~}^!t27qJBhJp_L;u+3-d0wN9&wxCeSX)^ z{)L|{3`FEL#hj2hjaaVC*q&?OQ5N*A@{b5Rs*kOk^0HO}_RfLC(mz#*9P=D3FMn#h zxOu}g4Bs{)#e>dWYS*pB;`r`8n>|r8U#E&mgc-_v9jd?IEVyM0Zae4*I~cqC7c>Np z5J47Jjp&<}LF1m>iuY1dd3a8R?@2~VljV)y*FBuuM#+3R;KvBUra1B0%sw40?|P1%{h1)^M%`Isf^cQF51uiT;@mQ2+5UQ}z3+*Z7||R70R~^S?p<{5ssb)AbtY@+*tRbs$R=zT%JYRs~OKwN^)eYt17p z-xL4{n#=T)y;3^2c2pUMERZKUqIU&5>s;j3p2mHDQC)QJ_*{axZprSEzAB~t0#qRH z%0{xbUPGV<>(>dZNXF;YypL6OcA2l{h5_%We6P;1Pl}p>f7$8HopcsKXBgLE7W+4a zH0@|Tcr zeGH!+m{eEqItk!B!ChH665%8%)a@L6ZC=>Y76vx?1QGzTEv(0UXHq-aG!1eeJ=41) z(<3M)fO<4W+6}kUOb7+6cTMZ?S-P5}p&qvzg~be7d`)p!r(U@rqNtSs!xMvVDUMty zysDRB(dv=zyb4T1J)Kf-f4N9IZ#m_%-jeC`n&Dci9-e!97QMdBuoxs@_uG~nwAZ9H zfr5&5KB#Dp03>C;e%$79)v7zIGoFzzN8>(_v5jE1>>KO!^IPcb!Ba_;&618wf36~O zN~zF0S$J@e*4(e1#k;1aLsoq&eSpF{Pr5y-(9u1wH~6Z^sGyNDcT!g3^zpF*<8aON zL{q4h+;fW|m3A`^r&O`8TxZ`}&aC!uE2mU^+Ek2Wk=dJRdDPC9dT>Xo#1pupA+lsE zJG)+OB>l6X4XPFd_?|n)zq+Wdejwz2J#`&#|I(9DrEFD3Se`ZKBq)Rt!OOCY1+h?m z0)a*4!iF**BHBdK@mJ<7pJ;5TW>1*bgUv6PC_#Ed`!{Q@!ExV=&iH*ty)WwD5nU^; zE`KY?w2aKWsezqF zp3b);^VkEP^_}W`pK{Ug8RP3Oye3@j|7;3Zx1Ri2aM`3+;5)){_{a$ALk$QMIcXH` z3VcEO%PCB44Yh$%=A-K#yCkX>OO?X2ykDQ(5kPsh-Oza{e@Xa>eKWA9L_SH{;7vY+ zdl}Q=UOH!z#2_8l<9KV%|K=wn3#B(Q9iPAWrR5d}{7_fqsd&e~I7Ad82aC%|Khz~x zevix5tiax}R9jRhtq)fU7aWbe;r4oUckr2|A`4)H%?1^GRgNKb(m3>s%He%oC%!^= z$dTy6!j&SL(vx3D;?|#{4~r5SeQ@ni)RJ*T+~8MJ$h)NJ-PDHfTyljipp&gMMJg

ts*lc=N7=|9=12^28aw-gQ=Z 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 **⚑ CAI-Pro Exclusive Feature** +> The Terminal User Interface (TUI) is available exclusively in **CAI-Pro**. To access this feature and unlock advanced multi-agent workflows, visit [Alias Robotics](https://aliasrobotics.com) for more information. + +--- + +This guide will walk you through launching the CAI TUI for the first time and performing your first security assessment. + +## Prerequisites + +Before starting, ensure you have: + +- βœ… CAI installed (see [Installation Guide](../cai_installation.md)) +- βœ… Python 3.9+ installed +- βœ… A valid `ALIAS_API_KEY` from [Alias Robotics](https://aliasrobotics.com) + + +## Step 1: Launch the TUI + +Open your terminal and run: + +```bash +cai --tui +``` + +If your `ALIAS_API_KEY` is not configured, you'll see an authentication error. Don't worryβ€”we'll fix this in the next step. + + +## Step 2: Configure Your API Key + +The first time you use CAI TUI, you need to configure your API key: + +1. **Open the Sidebar** + - Press `Ctrl+S` to toggle the sidebar (if not already visible) + +2. **Navigate to Keys Tab** + - Click on the **"Keys"** tab in the sidebar + - This shows all configured API keys + +3. **Add Your API Key** + - Click the **"Add New Key"** button + - A dialog will appear with two fields: + - **Key Name**: Enter `ALIAS_API_KEY` + - **Key Value**: Enter your API key (e.g., `ak_live_1234567890abcdef`) + +4. **Save the Key** + - Click the **"Save"** button + - Your key is now securely stored in `~/.cai/.env` + +### Alternative: Using Environment Variables + +You can also set your API key via environment variable: + +```bash +export ALIAS_API_KEY="your_api_key_here" +cai --tui +``` + +Or create a `.env` file in your project directory: + +```env +ALIAS_API_KEY=your_api_key_here +``` + +## Step 3: Select Your Model + +CAI supports multiple AI models. For optimal performance and cost balance, we recommend `alias1`: + +### Option 1: Using the Dropdown (Recommended) + +1. Look at the terminal header (top bar of each terminal) +2. Find the **"model"** dropdown (center-right area) +3. Click on it to see available models +4. Select **`alias1`** + +### Option 2: Using a Command + +Type in the input field at the bottom: + +``` +/model alias1 +``` + +Press **Enter**. + +### Available Models + +| Model | Provider | Best For | Cost | +|-------|----------|----------|------| +| `alias1` | Alias Robotics | **Recommended** - Balanced performance | Medium | +| `gpt-5` | OpenAI | Latest reasoning and code generation | Very High | +| `gpt-4o` | OpenAI | Complex reasoning and multi-modal | High | +| `claude-4-5` | Anthropic | Advanced reasoning and long contexts | Very High | +| `claude-3-5-sonnet-20241022` | Anthropic | Fast responses with good quality | High | + +> **πŸ’‘ Tip**: You can change models at any time without losing your conversation history. + +## Step 4: Choose Your Agent + +CAI comes with specialized agents for different security tasks. Here's how to choose: + +### Option 1: Use the Agent Recommendation System + +The easiest way to start: + +1. Click the **agent** dropdown in the terminal header +2. Select **`selection_agent`** +3. Type your task description: `"I need to test a web application for SQL injection"` +4. The agent will recommend the best agent for your task + +Alternatively, use the command: + +``` +/agent selection_agent +``` + +Then describe your task. + +### Option 2: Choose Directly from the Dropdown + +If you know which agent you need: + +1. Click the **agent** dropdown +2. Browse available agents (scroll if needed) +3. Select your desired agent (e.g., `redteam_agent`, `bug_bounter_agent`) + +### Option 3: List All Agents + +To see all available agents with descriptions: + +``` +/agent list +``` + +### Common Agent Types + +| Agent | Purpose | When to Use | +|-------|---------|-------------| +| `redteam_agent` | Offensive security testing | Default for penetration testing | +| `blueteam_agent` | Defensive security analysis | Security posture assessment | +| `bug_bounter_agent` | Bug bounty hunting | Finding high-value vulnerabilities | +| `retester_agent` | Vulnerability retesting | Confirming fixes | +| `selection_agent` | Agent recommendation | **When unsure which agent to use** | + +> **πŸ’‘ Pro Tip**: Start with `selection_agent` if you're new to CAIβ€”it will guide you to the right agent for your task. + +## Step 5: Start Your First Conversation + +Now you're ready to interact with CAI! + +### Example 1: Basic Reconnaissance + +In the input field at the bottom (marked with `CAI>`), type: + +``` +Scan 198.51.100.50 for open ports and services +``` + +Press **Enter**. + +The agent will: +- Process your request +- Use appropriate tools (nmap, etc.) +- Display results in the terminal output area + +### Example 2: Web Application Testing + +Prompt example: + +``` +Test https://example.com for common web vulnerabilities +``` + +Press **Enter**. + +The agent will: +- Process your request +- Use appropriate tools (nmap, etc.) +- Display results in the terminal output area + +### Example 3: Network Analysis + +Prompt example: + +``` +Analyze the network traffic from this pcap file: capture.pcap +``` + +### Understanding the Output + +As the agent works, you'll see: + +1. **Tool Execution**: Messages showing which tools are being launched +2. **Streaming Output**: Real-time results from tools +3. **Agent Reasoning**: The agent's thought process (if `CAI_DEBUG=1`) +4. **Final Response**: Summary and recommendations + +### Queuing Prompts + +If the agent is busy, you can send another promptβ€”it will be **automatically queued**: + +- View the queue: Press `Ctrl+Shift+Q` or use `/queue` +- The next prompt will execute when the current one finishes + +## Step 6: Working with Multiple Terminals + +One of the TUI's most powerful features is multi-terminal support. + +### Adding a New Terminal + +Click the **"Add +"** button in the top of the screen + +Each new terminal: +- Starts with `alias1` model and `redteam_agent` +- Has an independent conversation history +- Can run a different agent and model + +### Navigating Between Terminals + +- **Next terminal**: `Ctrl+N` +- **Previous terminal**: `Ctrl+B` +- **Click directly** on any terminal to focus it + +### Example Workflow: Dual-Perspective Analysis + +1. **Terminal 1**: Keep `redteam_agent` for offensive testing +2. **Terminal 2**: Add a new terminal, switch to `blueteam_agent` +3. Send the same target to both: + - T1: Offensive analysis + - T2: Defensive recommendations +4. Compare results side-by-side + +## Step 7: Using Preconfigured Teams + +For common multi-agent workflows, use **Teams**: + +1. Open the sidebar (`Ctrl+S`) +2. Click the **"Teams"** tab +3. Select a team (e.g., **"#1: 2 red + 2 bug"**) + +This will: +- Automatically open 4 terminals (or reuse existing ones) +- Assign agents according to the team configuration +- Ready to process your prompt in parallel + +**Popular Teams**: +- **2 Red + 2 Bug**: Comprehensive penetration testing + bug hunting +- **2 Red + 2 Blue**: Offensive + defensive analysis +- **Red + Blue + Retester + Bug**: Full security assessment lifecycle + +Learn more about Teams and Parallel Execution in the full TUI documentation. + +## Step 8: Saving Your Work + +To save your conversation for later: + +``` +/save my-assessment.json +``` + +Or in Markdown format: + +``` +/save my-assessment.md +``` + +Files are saved in your current working directory. + +### Loading a Saved Session + +``` +/load my-assessment.json +``` + +This restores the conversation history for the current terminal. + +## Step 9: Monitoring Costs + +CAI tracks your API usage and costs in real-time. + +### View Costs for Current Agent + +``` +/cost +``` + +This shows: +- Total tokens used (input + output) +- Estimated cost in USD +- Breakdown by interaction + +### Check Stats in Sidebar + +Open the sidebar (`Ctrl+S`) and go to **"Stats"** tab to see: +- Session duration +- Total agents used +- Total cost across all terminals + +## Common First-Time Issues + +### Issue: Agent is not responding + +**Solution**: +- Press `Ctrl+C` to cancel the current agent +- Check your internet connection +- Verify your API key is valid + +### Issue: Terminal output is cluttered + +**Solution**: +- Clear the terminal: `Ctrl+L` or `/clear` +- Reduce debug output: Set `CAI_DEBUG=0` before launching +- Use `/flush` to clear conversation history + +### Issue: I can't see the full interface + +**Solution**: +- Resize your terminal window to at least 120x40 characters +- Try full-screen mode: `F11` (on most terminals) +- Zoom out: `Ctrl+-` (on most terminals) + +## Next Steps + +Congratulations! You've completed the basics of CAI TUI. Here's what to explore next: + +> **Note**: Additional TUI documentation is currently being developed. Topics marked with 🚧 will be available soon. + +### Learn More Commands +- πŸ“– Commands Reference 🚧 - Master all available commands +- ⌨️ Keyboard Shortcuts 🚧 - Speed up your workflow + +### Explore Advanced Features +- πŸ‘₯ Teams and Parallel Execution 🚧 - Multi-agent workflows +- πŸ”§ MCP Integration 🚧 - Connect external tools +- πŸ’Ύ Session Management 🚧 - Advanced save/load + +### Customize Your Setup +- βš™οΈ Configuration 🚧 - Environment variables and settings + +### Get Help +- ❓ FAQ 🚧 - Common questions +- πŸ”§ Troubleshooting 🚧 - Solve issues +- πŸ’¬ [Community Discord](https://discord.gg/aliasrobotics) - Ask questions + diff --git a/docs/tui/tui_index.md b/docs/tui/tui_index.md new file mode 100644 index 00000000..ccaa0691 --- /dev/null +++ b/docs/tui/tui_index.md @@ -0,0 +1,216 @@ +# CAI Terminal User Interface (TUI) + +> **⚑ CAI-Pro Exclusive Feature** +> The Terminal User Interface (TUI) is available exclusively in **CAI-Pro**. To access this feature and unlock advanced multi-agent workflows, visit [Alias Robotics](https://aliasrobotics.com) for more information. + +--- + +The CAI TUI provides a modern, terminal-based interface for interacting with CAI agents, enabling powerful multi-agent workflows, parallel execution, and advanced security testing capabilities. + +![CAI TUI Interface](../media/cai-tui-main.png) + +## Overview + +The TUI is built on [Textual](https://textual.textualize.io/), offering: + +- **πŸ–₯️ Multi-Terminal Support**: Work with up to 4 agents simultaneously in split-screen layouts +- **πŸ‘₯ Preconfigured Teams**: One-click deployment of specialized agent teams for security assessments +- **⚑ Parallel Execution**: Execute multiple agents in parallel with independent conversations +- **πŸ“Š Real-Time Stats**: Monitor costs, tokens, and agent performance +- **🎯 Smart Agent Selection**: Built-in agent recommendation system +- **πŸ”§ MCP Integration**: Connect to external tools via Model Context Protocol +- **πŸ’Ύ Session Management**: Save and restore conversations across sessions + +## When to Use the TUI vs CLI + +| Feature | TUI | CLI | +|---------|-----|-----| +| **Visual feedback** | βœ… Rich UI with colors and layouts | ⚠️ Basic text output | +| **Multi-agent workflows** | βœ… Visual split-screen | ❌ Sequential only | +| **Agent teams** | βœ… One-click preconfigured teams | ❌ Manual setup | +| **Real-time monitoring** | βœ… Stats sidebar | ⚠️ Limited | +| **Session management** | βœ… Visual queue and history | ⚠️ Command-based | +| **Scripting/Automation** | ❌ Interactive only | βœ… Full scripting support | +| **Resource usage** | ⚠️ Higher (UI overhead) | βœ… Minimal | + +**Use TUI for**: Interactive security testing, bug bounty hunting, team-based analysis, exploratory testing + +**Use CLI for**: Automation, scripting, CI/CD integration, headless environments + +## Quick Start + +Launch the TUI: + +```bash +cai --tui +``` + +Basic workflow: + +1. Configure your `ALIAS_API_KEY` in **Sidebar β†’ Keys** +2. Select a model (recommended: `alias1`) from the terminal header dropdown +3. Choose an agent or use `selection_agent` for recommendations +4. Type your prompt and press **Enter** + +See the [Getting Started Guide](getting_started.md) for detailed instructions. + +## System Requirements + +- **Python**: 3.9 or higher +- **Terminal**: Modern terminal with 256+ color support +- **Minimum window size**: 120x40 characters (recommended) +- **API Key**: Valid `ALIAS_API_KEY` (get one from [Alias Robotics](https://aliasrobotics.com)) + +### Supported Terminals + +- βœ… iTerm2 (macOS) +- βœ… Terminal.app (macOS) +- βœ… GNOME Terminal (Linux) +- βœ… Konsole (Linux) +- βœ… Windows Terminal (Windows) +- βœ… Alacritty (all platforms) +- ⚠️ tmux/screen (limited color support) + +## Key Features + +### πŸ–₯️ Multiple Terminals + +Work with multiple agents simultaneously in responsive layouts: + +- **1 terminal**: Full-screen mode +- **2 terminals**: Horizontal split +- **3 terminals**: 2+1 grid layout +- **4+ terminals**: 2x2 grid with scroll + +Each terminal maintains its own: +- Independent agent and model selection +- Isolated conversation history +- Separate execution context + +Learn more about terminal management in the full TUI documentation. + +### πŸ‘₯ Preconfigured Teams + +Access specialized agent teams from the sidebar: + +- **Team: 2 Red + 2 Bug**: Offensive testing + bug hunting +- **Team: 2 Red + 2 Blue**: Dual-perspective security analysis +- **Team: Red + Blue + Retester + Bug**: Comprehensive assessment workflow + +Learn more about Teams and Parallel Execution in the full TUI documentation. + +### 🎯 Smart Agent Selection + +Use the `selection_agent` to get intelligent agent recommendations based on your task: + +``` +/agent selection_agent +``` + +Or simply select it from the agent dropdown. + +Learn more about commands in the full TUI documentation. + +### πŸ“Š Sidebar Features + +The collapsible sidebar (`Ctrl+S`) provides: + +- **Teams**: One-click team deployment +- **Queue**: Visual prompt queue management +- **Stats**: Real-time session statistics and costs +- **Keys**: Manage API keys for multiple providers + +Learn more about sidebar features in the full TUI documentation. + +## Documentation Structure + +> **Note**: TUI documentation is being actively developed. Topics marked with 🚧 are coming soon. + +### For New Users +1. [Getting Started](getting_started.md) βœ… - First steps and basic usage +2. User Interface 🚧 - Understanding the layout +3. Keyboard Shortcuts 🚧 - Essential shortcuts + +### For Regular Users +4. Commands Reference 🚧 - Complete command list +5. Terminals Management 🚧 - Working with multiple terminals +6. Sidebar Features 🚧 - Sidebar tabs and capabilities + +### For Advanced Users +7. Teams and Parallel Execution 🚧 - Multi-agent workflows +8. Configuration 🚧 - Environment variables and settings +9. Advanced Features 🚧 - MCP, Meta Agent, and more + +### Support Resources +10. Troubleshooting 🚧 - Common issues and solutions +11. FAQ 🚧 - Frequently asked questions + +## Quick Reference + +### Essential Keyboard Shortcuts + +| Shortcut | Action | +|----------|--------| +| `Ctrl+S` | Toggle sidebar | +| `Ctrl+L` | Clear all terminals | +| `Ctrl+Q` | Exit CAI | +| `Ctrl+N` / `Ctrl+B` | Navigate terminals | +| `Ctrl+C` | Cancel current agent | +| `ESC` | Cancel all agents | + +See complete keyboard shortcuts reference in the full TUI documentation (coming soon). + +### Most Used Commands + +| Command | Description | +|---------|-------------| +| `/help` | Show help | +| `/agent list` | List all agents | +| `/agent ` | Switch agent | +| `/model ` | Change model | +| `/queue` | Show prompt queue | +| `/cost` | Show costs and tokens | +| `/save ` | Save conversation | +| `/load ` | Load conversation | + +See complete commands reference in the full TUI documentation (coming soon). + +## Architecture + +``` +CAI TUI +β”œβ”€β”€ Core Components +β”‚ β”œβ”€β”€ SessionManager - Coordinates all terminals +β”‚ β”œβ”€β”€ TerminalRunner - Manages agent execution per terminal +β”‚ └── AgentExecutor - Handles parallel execution +β”œβ”€β”€ UI Components +β”‚ β”œβ”€β”€ UniversalTerminal - Individual terminal widget +β”‚ β”œβ”€β”€ StableTerminalGrid - Layout manager +β”‚ β”œβ”€β”€ Sidebar - Navigation and features +β”‚ └── InfoStatusBar - Real-time status display +└── Display System + β”œβ”€β”€ DisplayManager - Output routing + β”œβ”€β”€ StreamingDisplay - Real-time streaming + └── AgentDisplay - Agent message formatting +``` + +For technical details, see the [Architecture Overview](../cai_architecture.md). + +## Community and Support + +- **Documentation**: [https://docs.aliasrobotics.com](https://docs.aliasrobotics.com) +- **GitHub Issues**: [https://github.com/aliasrobotics/cai/issues](https://github.com/aliasrobotics/cai/issues) +- **Discord**: [Join our community](https://discord.gg/aliasrobotics) +- **Twitter**: [@aliasrobotics](https://twitter.com/aliasrobotics) + +## What's Next? + +- πŸ“– [Getting Started Guide](getting_started.md) βœ… - Learn the basics +- ⌨️ Keyboard Shortcuts 🚧 - Boost your productivity +- 🎯 Commands Reference 🚧 - Master the commands +- πŸ‘₯ Teams and Parallel Execution 🚧 - Advanced workflows + +--- + +*Last updated: October 2025 | CAI TUI v0.6+* +