From 5c37e330691b3e6ee5692745378166b21cc5cf7b Mon Sep 17 00:00:00 2001 From: Alexander Myasoedov Date: Fri, 21 Feb 2025 18:57:03 +0200 Subject: [PATCH] feat( FastAPI(default_response_class=ORJSONResponse)): --- agentic_security/core/app.py | 3 ++- agentic_security/static/icons/openrouter.png | Bin 0 -> 21348 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 agentic_security/static/icons/openrouter.png diff --git a/agentic_security/core/app.py b/agentic_security/core/app.py index d73cc01..3938ba8 100644 --- a/agentic_security/core/app.py +++ b/agentic_security/core/app.py @@ -2,6 +2,7 @@ import os from asyncio import Event, Queue from fastapi import FastAPI +from fastapi.responses import ORJSONResponse tools_inbox: Queue = Queue() stop_event: Event = Event() @@ -11,7 +12,7 @@ _secrets = {} def create_app() -> FastAPI: """Create and configure the FastAPI application.""" - app = FastAPI() + app = FastAPI(default_response_class=ORJSONResponse) return app diff --git a/agentic_security/static/icons/openrouter.png b/agentic_security/static/icons/openrouter.png new file mode 100644 index 0000000000000000000000000000000000000000..b7b286b4c3b20d39958d68eda822ed4d27eefa2c GIT binary patch literal 21348 zcmeFZ`B#(Y7C-uiC^!MFR#BPS<7sKD42mEG1GUytD+HAcOo1RGDx;Es20~)3T5APc zD}xZQRTD@c1d%Bih@w)9LN&e+=2%3U7X%bSAP~4a_S|*vAMpM0d)7Lu&E|QZVL$uX z!)Nc^^Lt6Y=F8SELlDG#_cvedN03GEuZxf+rtlB0?Z(sakEKc91SccN@>RzF~y^xj92EnlwuWvIYDSC%>A=B!HrFt3 zG#-scqXZF_@H+_+&1%gg0oud(;0zP3dtgb^Ez zUlfR3y>7LLoBbQ9@Ke2(Vi}*95cCS)lc;yY1I4$5{gv;~KubFBvLM0>2vT44x|jP{ zX}E_$4-@i;#dh6qf}fb3n46r1KO>`GYroIz_eUR~24VlZO*x1hs=3~Q{6uf#-%Inb zN3R=ol>W_zKKRMorM+#@x*81>_8a#zatF(^EzKA25t#)v(tw}}Mk~E+IyOz8G7NjtU7fcvZnBKh-~DPhCCCPv#VsD z**#c|-NH62iyUD<=|ya|o76$Gq6q!D4}sv45bV|XL?USwlM3cbjkEe`Prp8!N^UEf zzhnIQm3HUrY~$5(M`3tUadz`S>XUaDBkvp|&MHu3FM4tu(9-d-2qp2Ks z8*jySDf<@#$tD+b4k+T3cc$|k{J0K4k&cNLj_FI&p7h*#Y*xE4nQG+etU$j}8PgMs zxuP?#j0EXwkv-pA8J;{Q4tF;Yja)ibGOwRpH+8o5cXrpL&NzAV4Sl{crrp}zUi}Mp zSJ`i5p3N1kSz!g8^&!g5^Ufd4rH2y}^lO0;4E!dCpW`I?q6^|#fBQW!rnCYZ60|Wo zt%@YA<)o|L0-y!$L}P_*VV$&vD)!UKV{ng(t0j_L@2J5qO0!e8N9w1IQ~8t2i@XB| z75@{GWAIWHQp{W#Q({xw_UKB_|eoZyfxq?3MTS zc)bc_N&OxrG2h!dI?h}1F}hCK{2`1wca7aVnfK{+Nr_W2DbITiFxBIWmWDUur?3Le z!27^H{C;_w{_*9ie9Q5lGy^M*45b=C{v2Y5vVrM&%4VZ5&)#77Pj-G1J6s70E>M^i z2(-*V?Ojc!Uwa?rog~NAV%vmmPMvGZ%M0B&kKu6E*9ax-FSNPX5!Ak{RnkzS9~1jD zZa+SUHZI6zhi7KrMAP45WBueDM{aqTX%0s_R)${jozZ1_&H0RujtwR15*O~j4p%O) z>O1sNHEEV&9kcJPPDoANpQB5gdaJvK)wT2oikoR!A>P6?+k2^Rf74Wc>;7j>&Vb<~ zGfo_A;E8zLHKjUR*%sD>C7syM(oW__ZQwNM z_e}s_8K+A}w>YQrX%1(&xAYg#{*w7<*39u+Gn*a875pIjC4HZU0M|R$w{#w#-Tb;O zeAG1JcF*Pv<;p&|x6_Dw-%-tzZ2=u#AaiF{%?&waohahgubM;ovu*xGs}Zk(>YG#B z*)k^+MDbA6S{%ODkfi03edwHPvXg{2_@28~;>MF}cW%NVj13gwrr0+T6)O_!53YMV z^+>bTGHC_1a%XE9DOXYsI`MZxrM?>T1rhEbH&S{D{C1p$B43Kd%`gNLwawc3$*+9HOozTSf>*iW*0n8`djyH#PUorH3RDrdJBx={4}@A4JWR zg?KHOn&@)GUR_L&H$KSNn*=#~e#@_k+9eA@L7=N*O)$|>`<*7l5>aFZ6MqSj*XoP1 zt3>vNq=$&t7JIeB6El$KYr;2;2ZFQo0!*O!V1=|PAtdGNx_%}o4~CbimS4H(@y48b z5>lEI;EbmPTpb1N6ZZr5rsYz}9#MZG={D#{9o3mX`Y}AvG3NY)Xd#U5$`8Y-tb8cM zNLe$mp;#8cn!0tCtNq3Y>DIi8o@v)8SegqYg-%hriUpF$4Oon!=N-0RQLXb3aubBN{OWDGJ z^2kcw#e7RCW*_6Ha|QGN73|p=Yld4oMljvA|JkEP4EtSeE8!XD2gp5u&Po zt*6F1_j~cD5VeJO{bX^VaQ0)P@wKDzBjiU2oj8Tv+}EsD<^l{}g5t#!1(SH`-S7xv znoMYdl=9IHm(h*cj_`wKQUltX4nC{1(r{AMf2#J5{LUSRv}Y zl&mn*kLhmwKR^Ry4=6(~NBRCW)O@<{hQjFclMzG_T=WuF8 zuQV*qC!PR$vcBp}|4DRKaQQuCe_ zEgfSm6Z1#}Fp|NJ57OqCU^(2$tUtFrStwJMm?9p(|7!a@`!)A}YrY@(|4-VCa2B%_}vSlNK2mm?Au0P=DXc-}f55sw1V0d7F>mL7Lk0F)36@(G+_=whUgNh2 z2^F)CvO1Z~W=PPT2KE&5YZG4CKH|~N99@f&ZilFyUg5Vh39dL$b9O->1|Gega0a!} z2_OnxKS1Js!hXf(uu3K022p?Iy;Z;%iLHt0&6mtkJhLk97I7x`WDP##6 zokT-2N2FN^p{8qn4iRE;idrlfbta|8fCVhH9Ip|j1;jWbx$DPMD;~{*Gg2obBvy?a zBV52KPKie&750d9pl=_MOUS_~c9c(W+nCLZk)TyMw58 zAL{(NGaW$=k=rDF$A2|n0arKCfO!dAKSaE4$lA8_F0?eO?ttA-p^*dlt=}VYb=Ydu zH|u&N4oR9z2!G{FJVCHGkw%LuMI9qMD@_o_LRcm2_9VgC1l*=Hu$kLNqpky;%ekg+ z)r>4roE6QV(B{wffM@05;S)+cN$@q1ek4-nxJB34GLlUYHKXU&!8%t#^2f-q&&x3k zfAni`MhpKHGuKa$*cwWh@369g7m%O9P7kp3YDE7fGb0kvxk|@VE-J`ZxB)m z*G;5ZqCin2y?1MGGw(PJIX{;2>5 zxIbipzEATX3Pz@`vD38=HKRDNx%z+O5N7paHK}yj>Kv>}^?Ahl^U=N3{x zL2DD@^_#u{Q~G||3O0D}J8`qZ$CY6?G{7ck9Xuv^eLTS)A9oWQiQWS%2Q62wTgMQS zbz!EG9s*qr_IFB9xdkG#!hQ1DSkWdheCIWHR!HB7E{ht2d$-e{!w{!jxcKd&W@=)s z`19ppoz;%$grL&Z=v0(7xX_;%$AnS%fqWM}ALqWG^|e-+N{I%ps*JHliL!GYBZ}f& z=DnE?q7AG#w4WZv_vYv0+^MXwo4Meg5M+1Q_m~N$s>A3u$6+BD?A|+N?0M!PBjpi# z2F($Q2?)}2*EjpO=caQwn=I@z^h#>!EilO=A^3S@>MpkIC@Y+0U`E5Sy;e-uAFSGd z8oxh*?i3fvIad}VJhye@sqM^gQ`IuyaExFhI8HsS-C`@hm}p+v-d^s>UjhGVf8c9A zjaT`iHI5Hf!_T`hIXJGap!H8AG?KDcd_fc{+_)VeSm#wJWDWeP*j3JkbNOE8^^WGYyATW73!z3frzqNII)L%OrxAx%NQo>L{5@~ ze9<_9?4<|G;aM8*I*Us4r?Ek$b~Ue<#(R7S3|x#pQKEJb)3bWFsK>&MA8(`t1lyIH zAiPJg0>AYk5?VrtJbC*l>n5C9U^+*PB3Oegp(u*Q2*gD2D29m;OC)brP{j@9`p3)% zW`GIM<=fA&pD~?GRUxP$rwU$3l1d^r!X*3)xatsXvnY#1fV2P{up$ub&~icrp;7;gIS8u=(|dS6U>Jx3{Y}lE z-~*ECGJ;dsT}(Su)l%bC3dKIKzisNVNM-O^04ie0f2nZ4Bx zw`jrrK`N%OxXxbW8!!~k<5T&eoJiS5o*bkCvhnu+Dn*F=mlpE)trW_D?LToEb%7x!pbT_$0j%mzx58{RYs7*&W)c|0jbDH zDrfK3R%k#cDca4a>r2^l%s!)5ljn#l#DA{a_{QzLeG%R zQ%!^DDkJp*`W(e_g!RC-(1Cb#xggm{Q(wXEU^0yb=w<5k55V$R0h_5^uC#?0P?q%i zR>5SU($k99UD6u-<5n;-mT+_J`&fsxB8?M#)4pQbE0!=|k~EZR;HJvs7~0s!G-wO4TFq&Pak0YW?bj6+xItRaWaU2rK{iRj2fipJXll*K|RFy z)~|oWjwn0V@VxdB8FgQRlr&?10!Rdu`n{YO?Hdh%D_}~3K)L<>&XUx=n;jV2Vf^Vt zc24cE2OG|8Ile*jk+RPC9e-2;52D%As3(kseVjzCm(muG@GefaVxdA;M@P7n0Um2~6SWIFgJ{hF}lir(Tvx;$PM3uic%Q07!-N8lg9 z)mp=qZmfzZ9JK*=_$53wQcMVvd5yhG`?E%3-1W&s?Jdpr<%;*oS)vR!d@ij@kVwkB z_i>8#Rd7sgOYgnzg|f4);VI`Dx%F{7(o(q#8q$2d*Sw+U^*n!@WBH3e2es)C`j5X2 zY1Etb$WdP7LZqA5QG(JWX&d!&ka)s;2Cq(Nf0J>%u2Q!VZKEz!=pE4hviYOhCR9g> zp|zD21`!+B4Az3rZTjhB_IvqtcN&FGW4bdfX$zN8&zA8Xdq6wp+i#VQ{yq4g2i!2H zukKW{dyl_)L2o&8PMovcBI4@&v&gK5TAKk~;XKDAX%V_@(_K8THyNB>>>|2QUvO>y z;-FJsOZE<_Wo2|n0d{-vyQTqAW%dR0{@Y=3(^g8e_q^iW9IztmaWg4y#SC7xG$Lg5 z^N5O`lMP9AuAHgkx~}Uo>r(x&(rm3)EG4ke&0vi%EJb4yZ$hspqO#gX853t5t&`54 zMr%s#_7#n8vnd@sV(#HLCJEod8No}<&<#1fC5l%waoV$kr1^-F@P_RxGu|?}kzZ?l z0_=Ys`6-L$bI|iWg=sM<_}=dyagqGZpDlD`?>NSd55BNatO>uTFUg40Gopv-HJfZ@ zZIf>-6n*x(#-p+{Kmi?Q#XCwD;!ZLbg2flAmGaY1qy@Qmcf6i^Q!Y9eU_XS6?9l!i zT@;11H#=m%?x%*9dpF8Dn2n5N3O7d2JG8N^T97_9`NmvfN45;9KDMRTp3&~u(rdVo z!+Bx9wReNc3GL^5|IzvRSOhB446FwLe6*rxpT38wLsa`ZXo(@8ylMPhw!lne)Kj>L z`fD*8)7g(Mnf_=J_g%ElkdBmU$+HdHkT!VyUZbc)pq&vR)%!Wm zn1*xR;`zIimfv5r8P^qPqO5pCX{){ZFS`r!^tzUXOPVgr)SG%=rOz7ohh|`M0RhyJ z8$El8NcD3R^#Le}zlA;#>6~r*iF!0$q)!Ho7S~Q#pasB|9Vhd!XVC{5lO8`T$w=4x z-tUqfsr%yKwv{}8X_qtmv!3=D{76x3!DOYQh)Xb>J`is<2e{(&B8DZk`x}Z+2q!~! z8i_maOkOy2@=pJ5pU~_2Mj^h!i&p%*92MC#jO`xzWOv%d_@&)$)t<4eYp-pjT< zr8a8yxJy_G8Y`$bQ>>Z(hP6*St?9BbE7MykeLNoKY^5`jK2w|xig&KsI)?H;M>3zV z(8kij2)+xw`-POea8%#i{DXDQa=vkoBqBs_q)T$J(LzGT#u-W++ETwXB$=9Y6G8L;R#ixhUjLzYQ? zeNh}An|eTlx%X{yvNpN>mH7#huOM)FQE$b2{vjSQ&MwYi>zf~Mu4@N>#{8Bnlw#Pc zeW9^1k?zQ-09?q;rh1n)Lco1)b0uHI-Ahc;t8kzLR*CJ4Gop;Qe2GTu-$HMS?B29< zAc$MzII-R+Zi~cK!7T?D&?qr7!jYmEgs~oRVgQ)AFKwP0-CO&O$jH8Tfi}FP4-W4+y|D<{r*uGidHB}^)qt+mME`(Gps@*`}i2H50T8~3>4#_FIfH2 zqJ>1G)SAB?#p-)C-!)O>3Hs)?vHCiFGkRK(wcM!xzhOnPo)};4hxX#uO1}N$;&31O zqUj%v?y)_f2RpRq#23WYLN7Cg>CE59pH7A=SvD!b+C9n#jOMazqWrMl15y7mJlmMI zuAs6jdofQw76|~bUabkSNdH)Q=a}r%kzz|4x9gSz&y7mFEmP<-cu}{y66Z=`#N4T9 zvA@NFMhICY9oSm*N@uinKHyursxPPNawTsRPsM$1^slNF zj;Ieji+OL{wEWf7_gM4xzb&QZ;S}Og*+YD@L|>)(^48++eD7#|+9GhcPG@UrVnaL; z25}{lhD2E_zPX$|#@x}lS4{sM(nki|$nEIihGe5-)?9(8e8e*LF|hb-%aJV1pga?e zcjieFT=-iJy||GZ=(Q{0wnVqI2O=YlsFK{4E16Nui@ZJPVeW?&MX&vFrVi6wns(Km z9j0nVSfFA2=nok4wb@kvtGz@wR@BxeZa_#DnClT*-ps zZi)9+`r&rfQSm=9B(5(~KYd~WyU}0GLCy`NLc|Y7XdGZ#ClBzb*1j23_M0n6#iN}1 z%NbcZyp06ie#I<6XQECb+vhnEVqXq`O0xM5`w1{bpFqwLnI1oK&63vd-D}BfqHyA5 z)1{|SbK$~GuyZ<`v`W-W8*&~N$90;y3{*!et~_d&p3biCtH;_0&nwUQb1fkPBUI>L zMK52S)@t&2_98Z;G~jXrIk$QzLu&sM{OJF!1qjVIv3dM*zEXT4b#9rfg3zaJ9Ag$C zhbToyYwomN3WUrtF}>4OPeHXxiXE@KB4lj#7fm>>^c<#qeKugz%yZBUoD;Vf>L6;% z&-U7bln#BrU`EoJGdSdq+r5&A?4rIzeWj@?NQ~66(~q9~p2^y^nx|#OYYj>{KF9}+ z>F&dE#TN>*^5%cSRYx9Oc%r1(@`y8a=(AFdok^(>n}{#!ptR-9$Kl++1s^v?#2t3> zQ9KMjqqi>@{aC>kH>jpg7@fDa4;UNB4$iSN&ZUwtJH82H;!YhQR#uJ-m&<;8qRSin z481J$3E=skC|$S{eet=ww~48APeQoU-&c>DkL=dobnh^4;Wf?%a5ItNJG=TV$qVex zWy^T4$72B(oLwOe7Ug$s7YoS?bnPFI)Mb>Bg_Ia)nlCL&+x@#GqrMc=KL7}UXr|hZ z=5%i=FK>v{C*y;bqny#Cdx^F_iYfg!+A_f4Rbkf517Pt{MxAW3AAFRg!{;V@*}3$d1+4?f^M zsa~I<4FK#?w~Y~#ecdkQ;%opKCG7W7&_m4WBD-MD@Rn<13&EpUXr-khW9EeRwUTJ5 zvPJP06%P%^wHK9R>r^ol5n|Qr+`td0?Dre0ge)>3&R?bS5Kf2B=s2_?L8n0e-GkBk} zP3E03M>5f)pLGrh)BY>17oD^FBEG&(c93-}Qg6U{VaPIT#71ll0Q4&1>;`GK=-gN` zr`~9W(Q z+u4`2(qHGg8N!i_e(y8e5RWyD@~-Gtma>%!cClUBPpsEn(Vr=a!hXD>qjTs(GbD|r z;m7Y-F14VZ{wC{~qCZbrZmV{(-CK<3)xWJri)x2k7rB%ZhCel%};T;^F!w-ytJsL$j}?KVz2TJwi}rBCQRafa)fO%OXaayqrDC z%))z6QP&)H3Y36oI`C5Gv-tlY#+nEFliSy*nCJ%M_*UlrMU2?=TkK9|1mMC>e!^Wy z^}T2mKPKvcFwa!5Y6AqP$*85DZVN=$41%YLw1RrN!mchS9PrBZxuh&4uHfHmNP|i! z-$=qP6Y0J_dDr^k!+MDFV-FB^n@HbJfJmN{HwyTc&2`OJOBG$SW!U28t{6ZgS1C(Y z@~TpffW--43=wlKDH|!h89?c;vgeorT(_C;f(!Cmh|sDv^NZl``J_Ck)@Y**y-qCx zbkW~W=ns!AUtB48muNdoIA-F4y~6HcH%^bZ0hD=4^Kz*oS4VEk8{G-Z|Du^(s`#zG zOjb+KO4;VHLk8iDNm8-*e)$QR4sbOF;k-%GVJHD`c?ywk5MFr%Fk)RN*5;?PMv$}q z!u^QF^H{O3pKd(>g9_%B#p*A5_VU3S?)~>TOIPzax@zpa(qKdzUHSWQs%=hFpn=*=Nd@bw;FF4a5k3& zK=Wl9)$;1-M-XCP(kxo8*f$f#>SK-p=7jfm0K9p`O62RWgVVS_XI@>b{vn~%shCtS z3e^^IQVkhGcfA%1R>}e9aCG6v;c5eGs8%$gpAHf%)%ThA7ORKnQndFpfR-t;^GJ0_ z`o%qB$VD2_lfwj!$@uEVKu!lU0M@(U?+}i#qv19(jDzz@a>Q$-5gOH&J0O!e{iEjl71A?(bmAV!Co{_Yga>(!$M*m<@h3AL zz}|9Kem1W9AIU;xW5b`owX3lmlyVgToCVJtC^)P`6SUVxKj zmnOdbPR;|jD$brv*8ZyL0w(L#a{ey|oT7hTS5cxJq%T+(yITAd?yAa#ILcsMCb z)-x{B8+)`qZ>B#tUh63h(_AVD4U&G62$Rnwc*jHBpZ~ETwzcntqE3Vd-$!@d9 znRJkB{APYFu3bSvYi#}A0n?lLGMs5|7@f=~&@TW+uJ9Ko@;*u|E=(V%0B+xYpJ`&| zaq#RM4w2>yE_*0GvYhdXk^vs6_(AiPMbeUt>x4AH{|-NhnEi1H;Gb!chG~(++c{tO zcJ={a$tk_eFU?dj#z_?XJQ9Y?-Zu`b^-`Xc&uXxkMJW;S?C!%9dI^kEB_zdluPfzEo@(N$p1!b zry|5d0Uf&m8e68+*r`cjq3~L^(l@|8#`+11Ai2YtOX*qJc&9MnERmmB+O07WY^M!UE z8_}?#x-2xFpvCvJ4x-lu!;oK$yQ#TtnPk=h$tj^8xQ$jRgkj8PW@@Rl&xX*!uX3@`LA%9$AT46 zf?)@k|5wcimPt1Ci^KNzM#(Z^zhCE)#*t=ChscLO-vbAF?eCDv<3Q!pZdMo59~4BD z8*qE-DT)^5O2n}LY=M%Xz}1!#l4T9>eMlZjgP6VSGRl#LupHD?B;hx_jWj}3xRo9Y z6ZSB-n0YMPMz-qO@*Y6@?)*P-7EkL%3y1zE7+Wop{s8SO8TATe!SFwrE6vuv4Mq0| zjyl5&lW7)NNKHdc3y)2sfM8p6GT)j8*rzd->#B+A={3kQI<8!K&U^;BXxsN z>j7TA(IjdDnEz9OQK;Fm+Luiw_u=;v!76vf`ue9z5R|x!#wUU6+YeE%(O4YIBcX`( z-=+beRisY^tK1Z4XRd&ntOB)~*~R?DRHYW;NZa)yIOR?OJV?{DK(E%Ohf{x)PkMlOy}X5; zI!7OZXSmU*sWNB2(jIqQ0-5P;{O@rof5k%_!?9?@Kyg(H0zs3_?$yp|yg?;q=8_;$ zH=2$84jBCZbYugP{-B)FRyYbzCaywrf4O3;z5+Dg5g8m#dPbmhLL!EqpurGKfQEME z9|sK$E&;#l2HS+T5{ z=>tOY#NUC2Og-opIr!^70L7zX9$3ui|DTZq8y>V%dBkYsy091jpON!;uSn7mW2}#n zel1w_IbsIIl{lr`Xu@6iemIXLdrA1#-bCQPJO5jp#|JeOus|dofct0t9Kfcc<+Qe| zm?vD{RnqSuneUtmhgmQM=iINIL5zk;k)C4>R+2UmyB|P{zuu03)(X#Zg?SOLp9qu1|iZ! zS`DwHltlO`1Dp(8J}Cz&mDiACY?(fgMdtYnzeU{dS;bi`fto%*U&F2^yzIurgm!8UM0yi+7Q*juhE+~;QrnkoT}lq2`%*z$#Y(^ z$VJHhqxZS2hSrv!aS>@Ae9!3A#jnmRVy4rVGDuqKhUazVt!5`iCSwO#c%V@S`z?>UqR^uyqtbN2GUToi!mi@&_VgE+yb&J|RaEhPPGpe$tm_Cb& z3)8+~ja`MRkVnQiW;2>fgRpZ*+(@O94HK9fIxDueEP2mF+MRKWt!73nN}*{lo(t1u z$k~seCVG0kcA+M9Y~L(DI&$a4|5>^6t3@jnN8j7~aM|&Ie$<}% z#E;*4kg&(WmB1I!N%@jz>!Na$R|-v=id~<67j-yqB`M_dMc=8{w_f}5n=d~4KG5X9 zm(pY6dsGoo7GusQ`}?)tZ4)!4+PS>BzL+sXSO=?rwxPVy_Jy)KC?wS`egXC&nycY><~-l zeuk!0Uqox%OOL&YAiBs$t9&X;J@Q+l6jS1cvL?5s`Z-OkiM0Q+NkC}*weVm$hw#iK z=~H=R=W%y_4evFT6LYR@qu3!J!kTwF&SUyJC;_^PwQGu(D}GBFCPb$9FeN6{%4gr- zZqj6GqdS9@9ZS?-I1XL6tN2zef`Yy!D-^{!&X*r3XO=>=oSIt8VRLq;Je#aC@i-(( z7F}r1`^zUc^FCseY+usACD`M-qdSxP51mM4-JR5$fK^)|60(}F$%Pa@l6p+M7vk88l%YEA;X)FYZbZ!M6pwHg8TRvWbSWISS?-l>X(|~B}v8PAquw)5}T0m$Jq}{2k zTclcna=TJO^!T}pP-fM!mJvmEpteco69CTq#zIkO_*N^`Y&Wq<7_NBMJ)&n_X*#Ct zSkD+BX9WdV1!Yr%ZIPr}LnH*~b$E|EqQ;(t6M;~{J!~%3JXut9GZox}8o#cL2h2Xi zq6jO$?PcUpg|fqzF+j-@XZ)_GK^9=cc4VQ@r?}9IzmeB;Q}5hGEGn6wdbT7@ugAxo zx%uK-?RVIZSd(&}9na_FY}NhfUC!gXhFkLKtSHvgTOyX;8;R?to*JSqTx0h$Z+>wpz4!>EV}%8 ziBbn)E+wY?NlbWnueYrhEcmT0!(M_3oXd5{w(a=m(#!~ZPJ2YDGi8V=F*e8Us~we3 z?HSE%d{{6sj$nl}Q?-|sxPLCmj?is?^MS&{xc}6CaHHrdB)Gi}9O=@ZR(e9QlxU9t z-}aF%6H60}tumGjcpliIUZo617-pL`RTOKKS3S$!_8E*BcR_I>Ie9DNTzf9 zwHhcWls@nd0jQ>jIbvo(()#$D<(nT5)!vKl#wIy<)!-vubhM&OxemwJW1vC+_}I+i zYwb4S>Bpve70BLw&8(Sp*nCmWK&Xx55@}<0V2D%d!4Kn#uta~eT=OXjz?Hi97(z-! zFr6$GZV>y09leQGfNt-D?f$}thD-!o}M46qN?Z7EB ziQY?zi@rep)^KNljI%h8<)J<)zd*1PlzG^YC^qwNPF2r~=lhs0ozLcx0~-{Pd--Jg zwFu(~YEb7I#9E}ERqi-=A!=Z;QfI~6K#r(teb&Gt>_OscqxWljG_@8se2mMtunQf% z0+`~ME0Vg8D3|>X1*8J-Y>LX}bFda+6hXQTZSyzFv>iW#*;8Uj{fWrv@9clrKPo~6 zm5UW;WygqDwY8dDi=KMSo@Dlu?X5cpA;dVTZ@?$DUBpM+X+TZX|7>cm$e3VmG8+ws z5`a?&%;YutQ<^kO1+lm_h_?7nJRu4aK3-z6s5zkdxH=%T#%Ifb8?@2@>@a%wRza2C zQk+9h^@}m*884}k65(mva*8X|J1Fl)Halux`joX6W~@PKt)Mz(5Oq}M;Td?HqHv3C z^C{FNTrFo2#?&u5Q6dkZSM5d9nn|ik0AVEf+Kn`%TZBt|@W#NF{w{>6I>DndI z;8i#)@>s5Mii4db);x2?x%faiQ{Vi=a6Craf_C`%>_kTH-b#-pz8bU?x-L=M8=ah3ta$3SEPa7Fg{WL=Xf#SdQRbj@sfgykaM<&&6SaOnLFT6b zCpByNr5*bP3skOK#K6lF_+EJs6i;X5SYtW7 z_@N{fxzWvlAIzQUg#ybWPh_f?9iq)wcH$X3d#e*HJ-D4m-E5UFT#DykPg-7%8U@fm z6JyCEio&H0PfgVGCp%;hu#F(~exh(6L)5`iAH{04Nm#T4>I?}-9K(G)jSNy5(?W&u z6r{dbmZJClqd1G|vybm#*kl45?-o}z4G$UFeYU`BoDcUFs?O9dI(0#Gj?|p$@eLX(;3nC~=8=9EgE5PYPKZ-UusO#!8f+Ju8vLIY z_Ykk9Ci*OX?vCAOi1mTb_IGTfaks*bs{eR0{B!A^4eg*8*eXl3Tfhyn!E$RR^9e`v zo{J%+>Dq26Ey{2G5D9%H*zgIybOj?S*zFIyJ3<*lAH0~6C2}A;8>KN6dx%-J$D8#1 zTCq=*8nD1qtu6n{9(pIp{o#gIY8rAV@wvd`u_gej0Zpfb0{Eu2P&WCY8;Hv$~Dr-XANU->uy# zi%kw9+vmidvVCoCQN?=@Z&vul`xt<_1*;#2d2b6{nB^??%ac zwdtN2E!jAWZ?(QkORvzO?5e`;(fS!vhGpDx#N*fOS7kH^nA-M-RoaX41@>{(?Pkz2 zHy|iV23VFe%rpQS)Cs)}l9ki_VtaAneyGn)H6~Vs_6Mu`Zpk(I!Xg$jrKkqbqMI<7jfGr*g`K*w_B>~QTgc3(4h zuM|@%Egihz7>Q2Kxq>1N%z6Zegw|YS1aD4y(v>v+yEf=cv1!Uz+C0s^?`CPNIL2?m0#VIY^SDI5 zC$ct_IBtd}Qk*4Dp$<#uE3tZUqR8&`?eEsLEb`Z`MmvXp%yggyh#QjSK31i+U5ze= z4=X0JLGk?#s`YH~{FmBOpdb{#RgJhV7%+3RMPx;BE}f@p1Bdsk!A~sLXR@y8@3U^+ z)kIXk$liU4<&x1(Sj)Yqw=Jqps0;G;ky`x8Wydpu`MKH1&dj%!kgjS3V7A&(ZGYl2M3gfx3AOT*wj&vuJ@SWpEuWW z-nn<}5AaTvLB*H%rsi+UTGqI&f#~#9t&ET=YXD+tj9(+vsT=W?gov!qd#4NGZN+=~ zvf~d;mVo5|JgU9~knc#@!^P_GQhq@Mfe#qD>cm)a;Wj!{vDvq8$n@UwFRevmGvwa^ zb!r#1n_doXib9YR*9^F9+1nRNHz!1QAXrA>Fy1Zp#=E-kOF)FzTk+lrb*U`sUwR*f zGse8QTp=$mq<}90Q%F~bhjV(3G-5F+oQ6-2d`Erb-8f}-;y#maq&J{P0p^){^dy!G zZLz~)(Dcgsu@6Wi*L9nG_Xl)9(R5lOPe+OY^rQNrSOi!ekS=1kSqtraWv8*2Pg=S~ zehYGx?Tgh3hYujFYCUu@I6WyA#?rxGAaLk_^&+#;Cm%5*!R3-KSJ27*fxRyL z&tT~1(2(X$A2vy{Lf27^h*jHY*erhgaakV}$cY+*I0p&FV!kT|94Swdiu3qV`vZ1U z8Ejm8VjlB(W{;>ZK|z_fH{VzjNJuPgU>QGMf<}otNYM6yRNwLe>^Djn8;($0R+d3@ zoc!|L&~4=^dX)B0E6WdCLypY7`LE&#x>}iMEUaXOvS#+Dk~$iI{FNf2G~w#MW3wdw zB>}k-C<+Z{waff~qZWUT0it1~^s&R#&+4?;Ppvb4?++KZN*D{Zu~b7RM*nxHt`!_jt+Rq8CI#oj^m_84TvNq{ zwiN#ksD&-lC!^-z*utDOaXaO|1N;efw87{)aARVi3qR#vb9)2XvQTmws#jS%SQAWW z4PZEIB9=JiN=_LoTHT<4sS@g6y-<6#wO|+)C)?K8b-%6C#KG=K({r%X_mx#H3Q`E6 zirVPPhs#&3vyYg?7i^_N$!`I+1HFk_{X541QIAJfloalhrxGA1BMl6v5Tj*lOjVxf zk>S2gkO82M7E4N73nk}pDI{o}@fErn*B;Df#bS??+Jhh7d4V7+=Z*he09Y}YaGTn= znGcnoDo=oYoE&JJbx3pT`g9-Szr@5KJ=wnlO8IZH!?cM4SCC7up;kY)go5)mOkNif2p$^@}f zIiMX`Q2EU|09ofVnm>%y+OvmQ$5{867gs>bI8=J`GmVwrcWP+;L^>3#S79FwzugFY zU17kr@+Cjxs=Kxfgm4ZM{x;@{5+Wk@^1bOBjBO3?qvZj<=?GGs5CT`{L5HIHGRXD? zD&Mz95K$^rkr}_HYE{r!dYuTF8A(ZNzT`5ldOvGUHgeQc2y$n!lgryEauvox$v>I1 zQ(LcmYKI`yZL}Pth+V-|lUT=D!K~(--<<%DOiN|mWtOdwUJ;FzN{TWk0q6dn1_k8C zfvv|s8J6jcHRTtgZ(>(kp0+Es&`J@U9a=U7O)-kdH*dh5-EAaNOIju2?zV#fDLeH+ zt-8WnoC!tp33aj0ArBB)E-56?U5yQ3p>L;=BBV8*NPG&X%ltX|40b^ag75`8A+pY* z95kNcgyGhgEThCPMf1?|UbmHyPQbB^*W$QBdN~^j>t$ZrXY6dyRY2n~*o+8cH9Ot# zkV%CXGu%U^hx0enCrpyQezBbXNM~K_7an25^zqluLp^s z%|lRWgwO|wvE0v^^|-jJSP$0k7Xzsw3pew5qj1cp`ukPY-Tp_)DhH$~Ti}eYZvJEenEF#sL;HysQb#^wvjv@KzZnS{ zKjU;`b3jK9Vsik^q2*8@CIxGk*<~#r^6U5&0=|!rk;k^{3xI1ppW=+5(>};(4yd~a zsLM39=x->rl^=`&>y{nRCi}VPwT2`pSOi<|n zX^WGgTB5Sb2C*?Ji^8flQcNJg`y*$8OG}knYh?R}pshBFy@Zt;A&Uda;b0cVgapK_ z2%475lzD5Q7s+yM_uq)!>($ZOlp2;*{grq!o1FRtydSu(1O`Z1i!O6}*=in&- z*^4B15ys==_x-ibLf0)IbafT_is;oZnZ1jVb6;v7gB@JA9$^&q$RsK0|1d$BpChrt zK$G@qelkbK5$iePaapwqZ)Z9CFZPq~ zi3)z;LHC0GMX_DO=x@-p1>FlaFRsHi!SPlipc&4i6cijBJ4AIP;^=s47n1{Rk!AX9 ztV)?@kEkA*au@EfpEHSzjE01&#Wdf7#aUV|YB(mF$MN{pq(woH@38qk^~ksxa?X#H z!FtWS0`hYvzulDUK7vm5QPC9TM@-m|3zWj=)2%0ylB{;Ia5IE%fZ*Bqz#;&fw+xV!*5%#db3trSv{EG4=YSl^Oe zJ0X~GMij-^uy~JH7eI>v54Vp@OeJ){)qIY=89w$MjauVJivuZ6Pois5=9n3a5s&90 zrP#haqvbObP%8n4;qXa5lq`u;`0V1`6^Pm;5SJ1XFpPeoB)Ld9*-3xWg5_QcwVqgasTjavS_g2XTLCgA4s*6RDdw#lVE>4vDcY zNd$_d)OWcPKM$uq+*|Pq-tYvJ-=s-5p{0csI#r$~y9x=m^>ffvdJZ~g5%N%3j9X&@ z2cA&G+bQro>!917LnYqQS715fEI%6GD2uau&^OAurJ!p&zDd%Ir?a%3nxjzeliDKN zHS(L%6SVM0duoQTxhj`CttmKOS=_kp4^6r;6&}c^7#z?GB1;lYg7hRhmltm3)8Mte zhtkS?&BGfYqED9n4pEl;I{YUbjO7+*#diDTjNUEM0+*y&=FQ~_E6#1%3C}et1o%#R zMikg#XObfs+8z7(lBBp^8R^eLcRu)@s*ljqq6yJ*@y7N_f!mrzD(;>*xd@s>N5C>V zhh*|ag;h@e^5gsu5cPaowD!4X8f;8jywkJ+`e4d~bP|)Ku|6uNjky9oFuS4uaRYT( zScUt#=Yfd2-)-9K7y;rNC`_-?E}a5N#8|zPS{AnM48<{}kOG5Egl& zSu}1V`-nCh`+wTG)~BYfAbypK)(Y6pSlc3@7RxYFMC-G}5TPw<@FN3jVh^-6*+R@U zdV04j!#5^1R=GcpdhxV1XzlD^azSTNy-TBi|C=RzM)SFapEHkJI8D^?g--GE(ffT< zA7M(<>V#*lcWoY3&){WmE-KWus~+^JT;mv|de-xx5ACxC#4M_#tlN;=kDc-AaXiRO zpTD8R+T2;Zh1L^ZE4^Qxc@z{a5h-h@pG!$EXAR6*V*o#H=hHOSh^=`8A3JQH=bZA& z4&+PkSFQn!6hc?P!h^iZUf;Yf&%y&C zRs2vOS-v*=qdrvkAFKygM=8R|1wdQFHLqKe)qm>FbzJtyVCt~p(R2%&boXVCJ_%&N zO{f4o_L84sNTq5)m0(sQim%L<^}T+Io+j`h0RP0x&`5(x>vb}A2$&+yfR39{vch>Cs=Dz3Y(qF>h<&ht6n@YSOrB?K#`-(VtsFbbv*a=B!NN>k<_K5wIrs@ zFuP2Uc@M#Gkl{cY(9yDEajp>e-I-IS>LT*-8LJzr1PB3P2wAA9lc{K{XQ@qK^}&!@ z^-j`aHGO-Xn}d2a2Uv$#c)(mK?ZhWqBaX_S^?+{fH91Vy?pB}IKBr_1x=mJ0U?qh2 zjeFsIrD>9Zk`)cN1HCWaJxhT|l(RS+-EYW<0?HqZ@h|Y5jO>U2@RV2B+*zNTE6t;7 zaK)IjMi|QoThr*dQVLZ=1Ij&y${5ZoZ?2GQ4hW1sKpCn9pp^31^E-W6y4++3PPn8R zHJNl-z0tdVLj$!`!h~KolOUGeXTmKR>=F|R?^GEzyphzX=DKnYM)H1@;Ezj}MtT<$ z4tpQLZ4w&+mzqnIeZ=H9zmiqtR4A}=e9+3NU8BCvcYgAvp@P}ZJ_=H{nd~qF*M&Yj zG%e0ZnXx|6&jSHjDzrT``DJ%P2<%k}&S!d91RiG3aIQiYH8b@7NCJfGzw-ODhUW zwTU4SR(5UwaIa;{9Pzk~3r| zwgH^sj%vct^SO}BYfgUCuLui>3#oltSZ9R5omlJT0L7%n;ad{Y-fO(nxW-F@p$Wbk z8gxhv)d*~2XyOj#Rl*BVL%(yZ`(E>^2QC=xARt`J1R}s1012A#&jS?Jh0ih9^`W5bWgB{1D20g?1;r5^tMnjg~}kQx0%NA1_D5EW5Kd>m>cLF z)bYaSO$Rq|NO=wmfbx1Zs0QSM-1AWN6Lc~xA96w`^-?b&!L5WLzfrC!5MW2~dHf>B zrVeW{{Cm#v$7dl2P%OjUGVHa2$G`PSsLgmouGuBPaDl~pN6^|zKz^l;`_P1>3pNTL ywenBxR%jwiE5N56s{*X~|KEQsfw{)Y7nn<3(XH6xv+4LsBK!7GcQ