From fef7e05477a24a6c9a523e5bfae45bb96c7382a8 Mon Sep 17 00:00:00 2001 From: Josh Roesslein Date: Sun, 20 Sep 2009 17:07:09 -0500 Subject: [PATCH] Added appengine example for using oauth. --- CHANGES | 3 + examples/appengine/app.py | 23 ++++++ examples/appengine/app.yaml | 9 +++ examples/appengine/error.html | 11 +++ examples/appengine/index.yaml | 11 +++ examples/appengine/oauth_example/__init__.py | 0 .../appengine/oauth_example/callback.html | 16 ++++ examples/appengine/oauth_example/handlers.py | 72 ++++++++++++++++++ examples/appengine/oauth_example/main.html | 17 +++++ examples/appengine/oauth_example/models.py | 6 ++ examples/appengine/tweepy.zip | Bin 0 -> 28678 bytes 11 files changed, 168 insertions(+) create mode 100644 examples/appengine/app.py create mode 100644 examples/appengine/app.yaml create mode 100644 examples/appengine/error.html create mode 100644 examples/appengine/index.yaml create mode 100644 examples/appengine/oauth_example/__init__.py create mode 100644 examples/appengine/oauth_example/callback.html create mode 100644 examples/appengine/oauth_example/handlers.py create mode 100644 examples/appengine/oauth_example/main.html create mode 100644 examples/appengine/oauth_example/models.py create mode 100644 examples/appengine/tweepy.zip diff --git a/CHANGES b/CHANGES index 357a440..bf68daa 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,9 @@ during upgrade will be listed here. + Google App Engine fixes (thanks Thomas Bohmbach, Jr) + Added Retweet API methods + Added Retweet Streaming method ++ Added set_request_token() method to OAuthHandler ++ Examples + + Appengine demo (oauth) 1.0 -> 1.0.1 ============ diff --git a/examples/appengine/app.py b/examples/appengine/app.py new file mode 100644 index 0000000..a1cf44b --- /dev/null +++ b/examples/appengine/app.py @@ -0,0 +1,23 @@ +from google.appengine.ext import webapp +from google.appengine.ext.webapp.util import run_wsgi_app + +import sys +sys.path.insert(0, 'tweepy.zip') + +import oauth_example.handlers + +# Construct the WSGI application +application = webapp.WSGIApplication([ + + # OAuth example + (r'/oauth/', oauth_example.handlers.MainPage), + (r'/oauth/callback', oauth_example.handlers.CallbackPage), + +], debug=True) + +def main(): + run_wsgi_app(application) + +# Run the WSGI application +if __name__ == '__main__': + main() diff --git a/examples/appengine/app.yaml b/examples/appengine/app.yaml new file mode 100644 index 0000000..6f9e636 --- /dev/null +++ b/examples/appengine/app.yaml @@ -0,0 +1,9 @@ +application: tweepy-demo +version: 1 +runtime: python +api_version: 1 + +handlers: +- url: /.* + script: app.py + diff --git a/examples/appengine/error.html b/examples/appengine/error.html new file mode 100644 index 0000000..417572a --- /dev/null +++ b/examples/appengine/error.html @@ -0,0 +1,11 @@ + + + + Tweepy OAuth Example -- Error! + + + +

{{message}}

+ + + diff --git a/examples/appengine/index.yaml b/examples/appengine/index.yaml new file mode 100644 index 0000000..a3b9e05 --- /dev/null +++ b/examples/appengine/index.yaml @@ -0,0 +1,11 @@ +indexes: + +# AUTOGENERATED + +# This index.yaml is automatically updated whenever the dev_appserver +# detects that a new type of query is run. If you want to manage the +# index.yaml file manually, remove the above marker line (the line +# saying "# AUTOGENERATED"). If you want to manage some indexes +# manually, move them above the marker line. The index.yaml file is +# automatically uploaded to the admin console when you next deploy +# your application using appcfg.py. diff --git a/examples/appengine/oauth_example/__init__.py b/examples/appengine/oauth_example/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/appengine/oauth_example/callback.html b/examples/appengine/oauth_example/callback.html new file mode 100644 index 0000000..58bc2bd --- /dev/null +++ b/examples/appengine/oauth_example/callback.html @@ -0,0 +1,16 @@ + + + + Tweepy OAuth Example -- callback + + + +

Success!

+

Access token

+ + + + diff --git a/examples/appengine/oauth_example/handlers.py b/examples/appengine/oauth_example/handlers.py new file mode 100644 index 0000000..d9726dd --- /dev/null +++ b/examples/appengine/oauth_example/handlers.py @@ -0,0 +1,72 @@ +import pickle +from google.appengine.ext.webapp import RequestHandler, template +from google.appengine.ext import db +import tweepy + +from oauth_example.models import OAuthToken + +CONSUMER_KEY = 'e9n31I0z64dagq3WbErGvA' +CONSUMER_SECRET = '9hwCupdAKV8EixeNdN3xrxL9RG3X3JTXI0Q520Oyolo' +CALLBACK = 'http://127.0.0.1:8080/oauth/callback' + +# Main page handler (/oauth/) +class MainPage(RequestHandler): + + def get(self): + # Build a new oauth handler and display authorization url to user. + auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET, CALLBACK) + try: + print template.render('oauth_example/main.html', { + "authurl": auth.get_authorization_url(), + "request_token": auth.request_token + }) + except tweepy.TweepError, e: + # Failed to get a request token + print template.render('error.html', {'message': e}) + return + + # We must store the request token for later use in the callback page. + request_token = OAuthToken( + token_key = auth.request_token.key, + token_secret = auth.request_token.secret + ) + request_token.put() + +# Callback page (/oauth/callback) +class CallbackPage(RequestHandler): + + def get(self): + oauth_token = self.request.get("oauth_token", None) + oauth_verifier = self.request.get("oauth_verifier", None) + if oauth_token is None: + # Invalid request! + print template.render('error.html', { + 'message': 'Missing required parameters!' + }) + return + + # Lookup the request token + request_token = OAuthToken.gql("WHERE token_key=:key", key=oauth_token).get() + if request_token is None: + # We do not seem to have this request token, show an error. + print template.render('error.html', {'message': 'Invalid token!'}) + return + + # Rebuild the auth handler + auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) + auth.set_request_token(request_token.token_key, request_token.token_secret) + + # Fetch the access token + try: + auth.get_access_token(oauth_verifier) + except tweepy.TweepError, e: + # Failed to get access token + print template.render('error.html', {'message': e}) + return + + # So now we could use this auth handler. + # Here we will just display the access token key&secret + print template.render('oauth_example/callback.html', { + 'access_token': auth.access_token + }) + diff --git a/examples/appengine/oauth_example/main.html b/examples/appengine/oauth_example/main.html new file mode 100644 index 0000000..92ea389 --- /dev/null +++ b/examples/appengine/oauth_example/main.html @@ -0,0 +1,17 @@ + + + + Tweepy OAuth Example + + + +

Tweepy OAuth Example

+

Authorize Tweepy

+

Request token

+ + + + diff --git a/examples/appengine/oauth_example/models.py b/examples/appengine/oauth_example/models.py new file mode 100644 index 0000000..d76213b --- /dev/null +++ b/examples/appengine/oauth_example/models.py @@ -0,0 +1,6 @@ +from google.appengine.ext import db + +class OAuthToken(db.Model): + token_key = db.StringProperty(required=True) + token_secret = db.StringProperty(required=True) + diff --git a/examples/appengine/tweepy.zip b/examples/appengine/tweepy.zip new file mode 100644 index 0000000000000000000000000000000000000000..3666b2535884a3db3dbe16e13110c0a54fd08508 GIT binary patch literal 28678 zcmaI6Q;=rS(k=RxZQHi(F55Q0vfX9dw%ujhw%ui$UDZ{$&xw2PKKtRnDG)D!e`(`)IFg;DDB8bfjDrx%wQz%btgC zBE3#yCnm(|dGwD5gM2>1cwUM}2H}=yg^7*|_oP}ldBQo1y=22sT5A~tIHfA^(ZmDX zfbMqwK2NWoDB`xNFqP7UZt9I&Rum&))D7KG@}Ef-c*rg8vYiRSE~9HR7uyPN;w82x z$~bC?*@`f=ZVNS^KQMIjeh<4$KBAh5sVY|rSA|U@V#%oLS8K?PWF0qEPg!7=pf|RR z?K>J<6iH3(EJf@euHB^UA3a%@!}$tLjUPUBL4WCqmQIwG*89el9$(+l`KB9{Dq+Zc z48XEAkAc60WQ}?!wR0&BG^N7eq44tIh(Yp5Ru{lW>?Sk6#*l$u0$O)oz>%6ZUA zR+-OHDhC`gRc`10Sa|+?9@%h+-eWQ_H0<@3W__TJDl(T&C0)Zk?C}~%fkb3QY4fOG zPA*SeNgs-Wz6nmFrq)zFfK2WYp`xnjq9>u+0-YBaG`_5aPEG0o3ngdh0N0l#9G@!$ zM+p3cm?|$B{TzsA(T_`YEZjiFbu$Zn7waiOI%C`j1OC#H?d&F6vWTp-fW9#}v={7$mu+BNtjy5h+-`b*+ADXEbL6a5%;la`oZ}iYK^? z*AhD*K9nNMn7WTBm{qmO*(98+*dFv4M?)OSF<}xSp_wUgF^|9&E^A1^`<^d3ZK79S zN%Lmoq8%Y7R(C8ss5oXoZWWo*E^b_eRtmD!M8Vw?X7SKnw;I$k_o4eBZ4^^AX+x2i zYFpdrty zCbJQ~iM58Rp>W@%-1qX>Xfh;CUMocxnX$>_ubufJ(dngl$;Xh&`&gd9@NwJpRD9d} zUI)kJsKZFY3Km$*vIX4?JChywmN&%Vv4&qZ(2bN}l;l&R3AhrKJ8He&am51kL&r8W zkZ480cIB9eoj;8Y+j+v=>5utHT?6k##VlgKIy*jMqF@5h$;yKpiZCm+lf$4>eMPKz2sQu^0Ap*6PE ztcG_JI%=Ru`CRz(?vMtwhxG$Ae8Y+XtEg$5m!(~40Oj|5Ee=-fVA0RU1JP57f2VKv*`ui0;`lF~HgXj4aG;of$NG@)j@c@Oi`KH_(=7ix=DQJY+;5JNeKR zw-Aw;$(_Uz@>;sv?T*ZqzMtuH9x`;=zLbyI-;tAMdw9)xJ7Igb{6#}{gMf2(Bl6Qf zm)>>FAWm>$xRtRsBV=%yRx|aACv^j|&V|P?Hig9FapxOd%ESZZK2p{Si0Z$#Z9)7^ zD|j~BFvl!@`Wx(JUL1LOXtZYe?VBuYgd4%@t({#Y+O=Tq?C}!_4-|R9X-dK+p1bdBEj1j@TOC)qZTblQ$K%;`UVu-DD68 zkit;aL1|FOt4JTxszMRLyiNfx$Eywe3nVgH-Er?xI`<3g^$!wCwTB5 zDIE&{00{r#5@Sc;|6!5zu|}E9fAN2~Xhqj2eybhjdoMp|oj4(vcelqTu$8CXigCk6 z6Vgq|XTq-$*iLJ@x z<9Wz2`eGH9O8(R21uJw4HJXRdo$3ZHUyH;%ems=++1c4T`;Jv&lI4M=ar7};>A{3@ zz3|^!4Q4zXMIkm@8=tXK8!0uRi;u#(U)toH11Ue)b=Y(rbRN=8lo>ZZv9hT5!4X1K zp!Xru@UreQtU3FVcwC%+KS$V#D{#8XTA>GmL>RD*jH|Gw*-DxZO*m^{#7)~YuEHpr z5%>2=z$uU(xwpB2g27wQ`1eej1oQf+{(3qq*xZYwMOHmaN=ij$`OQ-N1Mcm3VKbmhE4GPw(?8Y_r3NsQWx4rO;Vuc>fn~!rW7ly!NDS_o9 zkJIp+by>39DJzF*IS=GmtOOMVnQYYzZ1>jA)mEN7?W$FfGdA*ZGY-@*m146kHicm$ z)(5b^4syx#hUEODxMjdW)i5wZ8#|}7Xpug@qPS>8wkRVh$GAU`vK5bzYgbLEK;~NJ zeR^gkB0IwoF}j1PzHjYkIy18n#` z0#=LIYBzN;1|G7*+F>)tMDbc8wfo#JE5$JI(ySR(j$8KgeQ5iWh16vGEZZe*#97ya zwB#^#O)cX!Hmws(8xXjD*6!~A5gH<-7V6p3nLog0z^;S(1<^1pzgt~UiVKq3Sc!@e zb!-&NT^3%EfMnw&Ydc4H9tEV5RZM~1JPW<<7hThf6|@+2sFqF79yA8k$t#OkH5Qxn za1heVCG9E|2D@WVp_gst2D7EfvPuv)U@a|O=QJ8?b;Y(HYsPzQ9cw&%@QtW=btusfL-m3c$|p0GwSqbh9>qucj1 z7zDHp;nBVrhxavax9V;I^DfjgV1tbGEax0Dj;8FOFJc=^p)0b>s+-!T*Nd{X^w%ag z)*{STQifBW7RQ)UsEib$O=G=aqXo#~)rASsR+Z%F>PNP;&F^Apll#GA!iM5+oI;%q z9I9Eka2dmp*da$y1Wv}KcU{X>ZA-Dr8WxGDVgHccJ-r4SSE!U3%CA@J;8Ed@C( zfYezSK0EEIahcqz=Ysw*qp}ftD)bwNo0tc>!<}SV655#24mO$yO(!Yj>aLo~`y`!$ z#=9T$&tBPacqS7ShbPPb%tGU`!miPFjh$78p!%3hWyIwDa7`hkzYOF+v_YCVPr&rV z;(OUq>COP&*-eJxR>ddvhBxUa-RftHGe(bW2rQ4|~AOfh#y3fFr9Uyjp` z)?|`@7;J~73@v2Eyr=N+s>0-O{rrmAn{`;k5Lz+DJ0ln;LwPRzv@k6U%j(xUgJ4= z`nU_XyXW=b#i#{A%_F%dd--?mD9Buimgt!@X(IH7+*-%vyauAEf#qKfg@{{ok>bnL zkT27%!pz<}#2!V%P6y!Y6O7`oty*frCWurLesVFLM_)J+Q!Oj{Q{wyrW9r^YufeIZ zTDcxR-v9{8GN#j$tOaZ_^<);Lz+};11q)}JPTqMm?}sDeJUd-$C+0IHwouBzg^< z)xm!SZP$822%6k~R*O%4VA+DjH8_csyvv5ngdGSB(JaFFS1ZmTY%6>oR>7b^|dBY28~^C9nn`Qo`|E{YH4REON6_m{Sb zwZW?*NNZJZ#kWgbe16_0bzxiB)gfMxwz7}Wkr_Xod>lE&O&BXT2Bcnfvee3N_|1nM z5iV*-%AZ2g3T1x`b;i>#J9SV-7v@=rN{*Fg$+c`{Y$?dmp4^`)vT$-0fbRHEhM6=f++)R=2s#hN^?+B9bh<<%+tv~%0Gp+SOL z;t^0LQ25K9fS>?CK+_*c!V~*cG;gl!wisNTPrpfTQ}7uttwKS<$U=p{4YaGEsPHZw0J<7)QO%bfFBQs%4A+`f7@4Nv3`!+Z@xRKF=45V7f!-mpV(H{Gjz;TSe3 z|C5@Fy!Ch~JA3r9PEZNQx!J+(_QYU&jk{-gBjB@Hu;6GFkH>DJ#Imn=X(8I0kGe`f zF`L+9)3upvvBTpjv<|ZI=~-e?of{e4L)xXt0lKwJPuxc*^xG=xn!#2YiL5CEpmZFm z5gzkA0^Y)||GRIxk(9WGAb@fpDpG2=6?+dcb8QrZO|kP?nWcJIlPDP8CnU|5NuXKH zEK@g(DHNetZ!oskL3L|)PXAV50H2k;T~wOzL)brHVld;u%m<5?+l80=@)y|BD*+I& zBtco~(oESO+x=xb^A@>5JpKpen2ZGKM+3e*%j3_UfKh1oF23c!b?FKmS~R3p5<8OT zkk8PVp8X@3_umI&LUP^&;Oxx8h$Q{f)#r@o79w=$Alh1|i9_y8M0Su+DaXAiKRT+z znX)^zo$9wvV*-Umlj!v^QeFtAIEO+s?r~0SQ^l&w+SQ~7f==;Z>t@A@?IH~$_#|+BnU_}i10Oz~PTT9naBQv0& zYAEEV$ZXMVRwEVu|Uv<&V+DNpP5>qN2e3JwM;ahxZTv-{5_n ze+7Kn5TbZ(qtFef-;;1=3I;s!`F}?FL^v2N%0G#g;J(C_Gj#+3M_9z4;hpUBikgK` zT*{uNdpX}LJ&{<2d}?O9K`(|1o1W>El*4Cvy@GBY%sIh`1PK-0>sJ;A8Pf1?K(k^| z3)ejt)okvvKN%1#@*xz*w3dxcULT66J?8p9^EcP4&PhBaf=rb8epPq}{&K0c3*{JwI{|)eP0FJ?lup;<{YCnZ0+#)!fOCPSQOi&OKs^xvfb<^)Y-((3 zW&VFOu-`xZ8}ff?;1O-zf0Gn+zt>+z*-%>f^nXes?w{OUC6`ZcsiTlr9b8RK$g<5aD3!6ys-sy8$w5&7 ziabTpG@>V|ZKY4N6(<(2+RA62rj}?AyyY4qPYTttw$N_WerNVszWl8u`BD8y_2R(%01C$JE@S0VJtpd(N}BJR+g9!Oi|-sw{lR z^&`kz8~ggFO`wPU40HSfT?#jqco|z$)G}W>}dpC@C@@MIekNAs1e_lCYD)7Xe@Bp_grcOiXU* zSM0|-jar3CC|gh;X%EM()oxd&{;Y7vT5JOsi!q#T+-$ZV8upahh04N4l-m}h$?kJ( z`X4YJN$QLYh-Hq-MZ5>u|7U0 zRyaRm3Rs7yj8V-61$#l!mO{2?Q@c&4x~_rY9=?@RTxW?dsy45{dg;qb5Kr5#SYjrA z6k5)Jld?SIHa~h!xONIIm>yrZuS>x-0Rmy|7mWOC<%FCC}FECs6zIOK_ znhNrn%~T-;tE(ez#KQ>NFrTofuznP75MVg5U7ce3hClsbPWHK|ZHKyw;vu?vl;*kK97f;XSO#lJ+S&p)BP1*OD^m=9@sgE z{5HbdWB2tVY$!yDP@~)nXk)A_XPmDiT(BDya>(?>7Di!(7&pH}Bi1L881=FkL^(etmU}rUymm)4o{38fv8})?)T=IHw_#;5G zQ(?A%mCn9t(=}d_6w&xnm@a>uD?zI6N4bi|0|A{vvu2E{azphUYEd;A&Du>|B#@^r zcbyn8_Jmoe`Ml|2tO1+?j(<_?QGW^Z5AB0nU;Ca|Dt61>?jd9g-PTbPedfnnKu5P; zbghAOPr#?^CslPWOKNCI9ltG9ffZXJYUFeEO+%kkdh=7KDiK@UMZ`-J5L?`=@)dR~ zK{8Se1;k!}uf?o2Bs)K>1o`eTe0}aSf120Wi2!ev6e@^n|Owax5Vsu zzvbpOZzZfK2hEevJd!49tMJan_ zPD-VJUkRBh)rY{=oFC!PDVNDsGz-1{7F+HGz@uqHpqtmw1NH^6hf9jn9X+CchhEcR zL?&Xvirmk#7(6rp9*GE#+0|&|uM*=FTO*a_6e=cjrlRH2`;Q2+F37U^cGy@bYn?HW zr~=Vb3STcX7{%d=A;vlls+4*QQQh|}9hgvFQ}qH9eM#nFfj_h0Udq#d#;>@ikkac= zlc%am^8c=*8+av|)^g=_c;-UfG9p zAb~}ZD%nwD9%$u}8{)x#+!mYhB-)N$o}>?>iu;iZB|d>`Fh#78WcAlpASOAuAnfTI z`Xlv0r>?>KVO6LFc9Ta!{djx+a(_QI#u4{5gsCK1>!f{i`Oujf>=wtPd0`HZk`7e~ z+-mt{lcF-NG1%MufjPBkFR2`c=Xqk@YJm|?SN1quDI0(h>N#L5e{0+KMk*s`6wiyb zVe$vqkwr;-KbIw|*Q9eA&8I;vM+!|i^Ga=ft#B&J;cv;6h{3+PMuQVI;R|}3xlQ}W ztB=iJszRMD@I&4PA*Kb~m2m`a-zF;cqzJq>P|YN)^aLDSMkFxd0B??&uj+R;fVG~r zDag#%9&?qa7M4 zN(0ymp?6kp@Xr)%ke`cx*Y*VWPqVN#XeL)1<9YU7sSvM8%2)Q-Q1&88y~%j#WHR|3g)v9c(J%>^_m`{MV9{d-|FuIN8;%~&VgShz;iyD=oj~)C z5tK^4s&kezLe}+s$`2$dt`CrpF7tgVpX!Rsez@{RucYT+s~xskrf?YsRYXjwk&3p} zb|Y&lN`!R?NeM%5i4F%Iq15pcN}3rSrqRB1rKT+xXU_Y)*7^2;N%eT64)Z zKGA*oZ*?vrK{?5Ukj22eO|24w53vn)NCs%6L&>7~ftOZQ%kv=qz2eR;bOaU4F1@P& zeI9I0N((zG#Z8$k&v&@a^;$a+8ZwI3u|*;S`%2KpQ&2WM#WB_cyjTeR=^1H7TM-o2 zL$QDBU0qo<*CBn;>%|;rEZu(l6lfqHkcFhZ2~RnFqoL{0#+vy#noxBZ-?K{Q&~vkVBR{*c zHd3R{@(G$3{elI7(X6*!F=mgJUOtwI1)-fcuM9-<#WmPnhUqbJ?A(FC z;VkXjl{6zSLxcu(%85BoOam^i2zp)cLs}+{Wk$JZ+if60FG%>(vKMNX8rCu0HA>F6rhm}Q%2O%1=v%YoR3omx-;d00Ook|fz8n7`9lJ54r2 zBbwPzA>15=Y;rTQe$e`TFr}gdG-*6 zov-|v+vV$;)v~<}gHsG7Sp!vBvfCX$e#r%)|Atn_Lm1q&f0lvsfAN2{wdT&w4*w&v z%EySn1qmaE-agVn_F(^zY70_mgd*cLdlk2xhS*5WOnumEYsKt6eBJ#}>F$dNgHfU1 zW^V9uCw%qt>u*Z7uem>wDxoqRDk2?})vmB91!VPNMmmgKajV{jK|18@;Dd-Ikw@B> z7@{Hjc0sjNv^0#`iGSe$VG3W*!|9`*BrZ6 z)Llb^FPLvNlP%;o17#BDNtx#MQuME$4g=pF{T~Zinh<6`R3>0yYbxj%k#1|fA;nV{ z^jxhUF~yT^Pf_+)CW*w=2hX+)?C)O>F}m~rqAVEF>BzP(V8YGP+3O+pruFsjNO+b%55Nmya=zDSNV`1mt}Dz5y(P^{;96w+OpuqAs?nfWcx{&w{Dr$^@;{W{qcOE^qu@>YhylT_}$_wzOW7 z#N~>-kC+;#s+~HtYN&j!rK%nc^Vip8N-KNxwbsY_laEk7 zw}~}-nCS3mrmF+fk?b9rYBwvvb?V$ZsJiujKE~wiQqjcQg6e0jbC&z&tvnl^Zrb)2pCGA`_m4-e4ILbH`B}E-v z5L|+8SR3pl<(#^k94PE6Io7h1*op#BjjSVJfIn6HAmcY=&f%N5cq`mPk2hi0@JSph zUv0G)%kmkg$EOD8ivaxs)RKwW!o!y^DS7-sLcABf_{X%AzACwE!eCEh$l6O7nBZ~j zI_Xc@nz)yf=jY)yfg^kAEpvAa2DV^6OV<8-FHRWZygjSfj8Uk^)&Mm=YFjtY0&49F zj=V8F5YVvHUC+VG^^4E97wV$KAlgj)mq6p7b!?1NXA&?lKg3K7i6IH&mjhBD4wW}p5Cz(?;d z9M2K2k6a`0x5kAh&qf{3jWK0w4WfEJ+C-HKkY(F?|qmhoAvo>!_H{s%2?#=w}t9jmU2 z{r6uOU|@2W2R>7*BOLueoV@AUAr_mpvAvzU7jW7OK+&21e*^9Kk0O1Le@?7p?f(K= z2V*x^tN#g(X7ub_wj`3iW(`@YQ$!m@2b>S4j@8EW7EtXPG)UFS%^hT_O#=5LhGD_6 z0nIgT=KddUb9g5R=oCIK<(qC&MrB>)?+^?Z1~3xJ|6P>BF%_iP(fVdd(m?i3=?{r0-#K zVEmDzvzcKE^Sx6>f_xgA-wQL?zW**&@^wKAZwJl8FEdez!_obR3zPY9%i!PVBhMQ~Z+YFJ zenTkOcYtZ^2n9)S99Wg$FYrkHm$CBGyOvjXN0yAQRbV%sT)5QZj+LDEQ59DnqQWmG zZ&PPCfnHqsKmA|uvoW zgI`Zoodr9&FNcQOekRnsz7)-A4-_acc?VA+@?7e_?7nLMLQ%rus>ex>^X0!iBs*FQ z{?1i^DkecZbY;(p`)vay!IM{2M+BAZ7ydLF3`2Xg}I;z?00_ZRch?)Kg8U-1Sk?0;hr(9r7BWm+X8g_ZFjagIk3mdN=U)AZ7 z&%nC4wkD8xc;r_YB8@tfD82_#3tx1Xespu(Cf`eZ%;=UU_MGoypDkai-k`9uat%Y+ zeJ!6EHM{d$&o+qv*o>xAdUD+S#_P6cF9IKg#d&T$uF5~v-o>6- z_o0}|EX#ec^m*ItL3?f5Fzm!up&kV_{v2C5Z??L-e_4a6tCoajRJ3gS^%l7&G10;B z+4=s6FT~vvQ;yPv!(%UFr`r(l-R>| z>YHuHN_Fbb0qvWtID`GooHjcLQ0~$|zM!;;JjVT7w(2>L$RV}oiPDn{KUUKqn+f+u zjNHG&LC*1x}p-*({M8To( z`l03jFI^~TH$C9YNRldy3IH=$=^DFKJ(+(Ey**uO($Pu25&g7S7Gh+LfH z2?lK;HKlNRavSxGBzK;H=JFO*63B21ysi1xoIN0w36^gN$P<`r{K`{N&PWn83cCbt zj@&F@c7KD8AEFKl7^NPZK6!d&Xh+~?L`GOwEe$RvD`R+(Squ5ngXwDny_W`mGb5CE z?X_fcTdOI zUlBm%_F;a=2sTPCDxp1GH6yv2N*bQ8hB5By@R8TDyPY9W&5N{sW2^p@g-y)E& zCDvlw++6po*7{4bmcrUz>r#OFAa?)c#b&oL;&&;KP7*-(7B9>#g{xMv?3!+AQ%Wr_ zi>x@2vCwZccgWBhn&T`_LI6&lKKz=sU1#5!FXaDa;1jdw_UD2v-y7a&irYwn^`l3) z-(B(Cf>Uwu$?t_m&Zyz67j8g~4sG8l^|g=XTJ|T{x;+q9H*Q1A3#&2| z*X@exH6)iHDZ4Jgc=TEnZ#@;axWG%0a(WV%O|T-eEtJ}2dSsKCc)$x@i6FuBK{=xYJ9b< z%Ql-)0ow3}&a2r=d?58cTFy6hrS?iTMk-=REz3j+KNq>kCQ zj`}7V;AWa9dMzQ%FT1Rb3P_dN4k#_u<3fTcS$9obVaz9>B@ynichu2?wF)@dN69g- zyZEXks=xrZp<$gp)``fISht4!1S)ILP12eq+htpmglkCi?O=?B63d_`jbG{~wTgCF zC4Rsn%0~V#s%n0K?K1V3@$?)eoy-p);Sk3O#Fi8D6lIuRET!sg&bar~YvVpBFlZW% zz2SDt&Jz3RmPz@^ZVNksO2EYqK03q~|MsIR+)3**9@#(~*0Gvn42lhBPnR|64A+kD zx9Ia04l_40O9P$NqZZ5v+7=uEkFdT54L0zL+4l0)X&J@gz+;$HI_c`L`8 z-w%RVwz4{&Z*j>ZTxGpY468KCYgabi53*r^B<2sq%Ts0Pt!+(8qGFPt%Vnfr!RnBxgmAn`Gf=!dKT?Yp)0gj` zMZqSI#?3RyO7eUWmY3FOg1~%yM`kNSplczn9RCM-uV-AgEPJ&@@zn;rIeSE ze}oI~$p+GO_IR~2vXGgmjhS%N`+oDtD9CK#X!OEv)z4U3XW=X_7%pc@$$=iln|_i} zL88z}%`@H91!G+a8hsyRglfg)VA{43pyfn=Jq(ruMyji0H z1;Ek|6?W?-uscfRY$^OU5jhs@PK%bKf_dl4dyU(dkhM&Mhf2nJN8x;hgZj$&Wxdnq z0$p{}`bJZZ_ z4}60$+e{2alq7)$wbe-RZ4S=23t4B#$et;e0_hr}6<`zRIPA8@^7Z_goBnvwO!%`d zXH~!Jfk4ae>tQ-Msuvb`e^cc@Atzx@QDc8b6WG*%iJcps&*XgAFO!sA3LUF?(DVCv z=zkQN`@)+sYLlCKV*G8fKv_wpXpn)Xd8%Db)(r{Q*l=@@Ebt1A&5y?6<(r@=N@Lu* z1(PsyI87bJ5&ldufc2J9mma@c&L%OyUfbZ>MGU}axk2FbJ6!hGGL9GTyZQSZ?c`#E z&)A-=N6@|>BTx+bLEP?+B2wk&^ziuMti-E zB5JutM)%$wnZk$cV!6hyN#2h_@|XU8h+8A~j!N`gM%{h;{SYl9umOhb;$EQx2W@|_ z7udppiiS^=rW#kX7)Q#SjEiE{F4{SR=w*k7_E1k2fj{e@YEWkaQW_V$4*VTsALrn} z(`=l5LnAa-!R7grZglbULu82o%_Zro(wMt-2Zu@D=Fx;??F_jrGU_Bbjgnw%y-0KT zb-ikh&gf(L^!ge>wlZIM&F@)#L`@Qp!@35yId;cpTk08~?kX{yzV8$wLCVa0TKFK8 z8y#CCdtH_uCHPLqd0Lp!J|Lx_N=7_aQ%i5in*fO&0S%qVjkd?!}J z*ZTCvIXpcZ>MozWRFV%%Q|i0TN8^Q<}(a-wE%dTPA^llVjQ_a``nOT*Ms zF?FL0F?#rjpj&Gti^^E*mJQ}qf?&Dbf37x86EMJ%k+-lGv831#>8L{|_dgbNbjYRL zq*Q$uHN>38%Vf^%yuvcWh)wzDq8sbk`uABp%gv$sYjT>CRnv6um!_HSXuXiV6@MMXzPeUnVedr4EAUm=FdtC4 z+3>D#dvYYDcRjGl%N(gUa%nBtwoPCs+bvYe(8T?w9!$NjZ;fAVokkpb?+3bcZ46IK zz5nLMr{@p*Ws$nF>B;k_CCkJwUrFfm#S%x3)92N- zq5ZjrM83A?yya#hz2mVIE$W;<-1%{m{PLc@ThbjibaguYnPHJ~%wsT}ib!plDI15C zr~L=zDnu^z^`_84ySN!di9lMQtzXFRF}P=#n^fq#w3-og|Fs+u+qradHvAL5JA<pS@jMN^$r@gmaX&d{QWy%uQO5Hfp5X`&ej*0c)YqGthale&2< z(jjd7M)Mw;>N3bI|I1Pj5Kf`^-llwLpACM2QOhuIOHYtnTs-EvUemPnH!)xncF`u2v*dBs@9%GHb^W0f^jpKNr4xb9o3Ydtjlw@i4&#yB z0SN-D-pj+P-!d9t6_;y;f8m>X*PDF`oe(Zj{UONptxqemcxS%@G{POLPiiolWXx`9 z93egqJh`^k2I~)*qDpz#-9=pqF_)<#-R^*4*JkQF+LSNyT%WM1c{()FPeKkxIAwnV z87V6)Ls7#8Lp)5YqlgfTwoP3XPh?wlH3&&iagMS4y7AJ~(fG^3=dlvqjq~7Zvs_mk zNVRs;ERZ&3pMzl@+)(Xd-FFbT2-LydqLJkae57ud%Q)+Xj=%pM=b&2f>%yJ%?R2^pyvv1JPRi z$w?yzc0aLD-ub?oAXiouw9;IAj3u+qEphE+889@(){s*+fr)f~XXPT`UfQ1sf+LYfoI7jnfl zlaX9N!V%)A6WU ze()ptoLu@af$*L|^y`c67O!KMhrc`A6GZNFEn#h!#>}A`*JlgCa86Jet@VZw>VZ&6 zG`ru~L*5CofT#S_pShl=;Cy;Ek_J0B$;S zjpeu5Zo5Lj=*4nr?nC%z%XqyO#XWxKU+mBD1;AeYGP1uCtJJxe?Bs4@Pml>l@2)-~ zifsW&J@-&P;roZ3eHgl?wKhCs2e5QrJ-_pS} z=q?)l%gNE%^YsmPk>B$}^RP7uJ7|ko9iG%{ssUfONS3vO(B6n3>!Dk1MTQ z4OxeOE3Mv3O?YJVBsekXmsJ1_tgEUK)(m0R4GjXc4(^7YYKe@B{Zi5Q&+z5olw3-n z8?)Rj*Iu_IZ*aUJa@WTd{O-lgZp8KM0MY5`uYCtQ4}owb+}c!XbP{{y-+v7qetmUx zOg4_5Vaf=bHiImf+T3i~h9V^)fsV^Rl=ZK6Zwgo*+M^bAC2J*gf_ zZR@pdls4sCw-EyqjOs;#s|L|xW$38X`q1Gw+dlZ5Uzla#J9jH+svQ50jxknY?kKFW z&_OYZ%S+Sf92TY<;Mpj|7(0L-9%0do>j+Br@eR@A_?w=Z9*A%CR>JPwW55c{;9*o?Z_Usj} zBq0{jJ#2OPwnWu(oZeN`hS5&vdWk`t*`eUNUQCx)nFK2g;xtd0_T$*SBOkbi9_Nm%~cYIJ&PXk`{jWp9>r+&MJ|hMLv!ck&p9+okJOjD5%tN}XQu zRlE*rMwIaC0GDRoaA!^(nZFRR=BYQSvR<6sn+^y&tK`X>_)GHKdmd<{yE@8;VR#Zy z@9ke9+g7Tob2DrK^XD5Ur$SBK=Ib!#J_!36RF5{e4_{>SD{s4n14bhJG)RhT`6= z-8~%VW!L_+l^Zn3SfLCZUoV24@Dx0(agyO|?SJf`4CU@oW+=?f`ofB^Og&X1!XkNq z7nqh1@_4Gl!Lr-tge&dHKU?`+c*16QzM#=vlK5aSy=`yicIXv4f7a=+`Quo;pjFqu zx6$BMV0u0NI$!q_E7u_7QVQF!{WIVh!CCd1Pz<6Us=3D%X<#OPNAdJNrhwlQgn!Dnn+L` zm>~s01_O6z1ZCo-f@b~9HopJ+?z3a5p;1x)Gnp0qm(k45-0uI^f&S0v?6Sq3cINRH zw%NBSiI>%sW@AHN{U|r)@W$zQC6&8rE7emSU3vmvwIr;>*2ej9@74=IEF9FBW5(Lk zro(nEMeYc|$Isyk2qq%5i~3yPS0EBUZ_#p?nxemU?cA}ak~*Mf7@>vZk|xL0X4F`q zy$hbAM*sPib*w8QBz`vZ%XR*|yCd%5lDqRivD=ak^TKUj-Jnr=M zJ|-wH5G#;>O1=fQHN&n2ya6HGrzvvAz@AxSk}6`ZUR$af&y_s@NJ!x5F#sq(8b{~- z(sguZu83T2ga=7ubifUlIL%3bpK^*<4x<1BN;I=nG2H*t*Et4vvaWkO{AXg@wr$(y z#I|ianP_4g6Wew&v2EL!cUJ9l)}D3Fdv*s*1jxNaZPx_BmczS)hglDRJO~rcutaK1Ir&K{4MgELm$r(ZPsCC=0 z{4wYpRNkCeC=5uo%SqS- zgN=G9iom#&^^>;=qZA{35~?wY!J(1nA#I8Zk)qjE$Lw=*C3iej9~{8W{L_JxP+vyr zjWpbpkA7dW5NQGx7omDMqN(ms^iP~)4!N?l?>VVF{80n}o1P8X+zF*oHhJBq{wYcy zRC}t0U1n`EKXQ`STvVLLytx^dB(9}#bOh&o2^a6HkT(D`Z762*WN}s{UWN z{p5FB0cll>9x5m;3G;4LoYZVqG>Q}RMyYFe-gBG9^+WQ$N~I^SYk>CpkQ6kB$Y5Po z%FoDocna8ffdGIDn z#ra;I7bUyNIp6)SOQ>JjUkg&8hQF2)Y6np%`0n$11i}YdcTVmdn2g5B&&$v7V}{?% z%oyF^1ccW&fZ@S+w#3$GAwei=iOln;yoG?_(Be(`1Ir~BerMSTgH~; zmqdG(q!z^szhj@?lF_FzkchU1g?WlkM*0zHpHRA+su9<m3d+A2T?-ks_QZlo2_` zG=h1v#XeDX_hpF$rH}8;Fv}!j1TA^lFaZ!Nm8{U}@gmu2>;itsm}nVKsBA*rfRCm%Qc}J|K06-SrJhBR z2~!6wP-);&Mb5-}Ibom&12hoDX*%XyZv;gLL}Lr6jm%z*!rSl0(#Xe{_USk$E`i&j z5}U##jRWvRwg!!oW6PDdY=LPpxk1Ra160!LdCb`lhC)=>5##HCy0I@{6=A|J)sUtB zsL!;a-0!7FLB)kEL#p^Syt#QZF9u%n3qn~R_qQw4^?Flsx*a^Ci@ct%_ap8OkFW3d zM{~{ZhQ=N4FNY7)G?v?g%kB=hhYR#}@>`wUK2ukC%)ApM#cwbU^uP~XQpEJYw{ezNzk}*u9I$}<;QZQ%k*aE?JiS6!tiynk{hW=( zmP&s3&O=>KAiW(Sd4@!UI$H8xJuJoe^Ny^l)1w-%#h)Y%Uk)*Bnaq#bvnmD1S5BY? zXR6(u2(9S z$XR3+>hhNRpn6F3%j`7O!9&01R>{@Tiz+7o<<*?!Ih6GR>rs9K=@)}$`y?mYs61Ss zg_4!&>DTHqB1UT{@nzWl-9D2d-*YTp4wMCQ;DQ%MLKJ}Kz0D~kMss5%bN|50pwKzlSprS$ret(4nT6%Bz-JbBUIS{ z9?CpzV(a1%LKmd6+Ys1lfYKJGq2iI*HSwsv`%{s`z|v}vc?Ia>2cRLckzy+4hwuhr zjkY8Jf@!K&kiBBUZLai3^x>X8;G*Y^w^Wf~l(1kEz7{|nll2caQk{PbMD0yfCg3>7 zK?5n?5?!zjEY^6sLr8VT(Md={1s#86y=sdXDGx0to(_a28{)*maH;VDy;M-cR{%8! z&hp+Rr?8~4XTY+UC?zXOxfH6`IfxD~duDiJW?7*R9ohwKI16-yR;p+|_J#J)7UQ^$CNNg)CjE^ zd4dXoD_*%@2K1#W%9zM%(_J!#iXd993u9*SWxmimSTcZV)?A}~Qpq(LawW$qT&>9K z^JiwSG2953rbTWB8Qub!o(VD@M?i2`>2`!h+{TaG=tzr*FE{dm9vx__IG%G31K7Z!Sw4UARn`Bvhq zLF%suw1>|MK~YgA^&wagoJmXd#VP8Srv&oZClGm&+v}@`9nm4sPPwAGq}dO!iSqL& z5j%>ZNz?KfpIj|`F?4heyjQ-i(nWImX+Fc!DNrQ8&28Xr)1e84~}Lz;_cFR&$NLsMT4L*)p|5q7{_y z$Dx)IM{{c~(Y9&~BIe0}3?7JHC}~Nt5iGckO@3pvP=XNoI4R-oAz?R}_ z)GWL79B|;eUFGLRzt!s zuEm0t+}&oK;mp^fChPrkBaNPP?`Rf6r_= z5f4Iba1TkVn7!Yh?g=Gj*C7$*KJlQ^EqckA;bASMZ?%McCZOl?1Kj|p+Vy7_r41`s zFiABL=0)jOw5@WUCsfIRZNV^3PvxB@7$c#Zi-x6o8>){FPGCeZupsp>dA;qNLQ;yJ z7@5y&0JSayTU>m6;yt0cta5pi;;{485W;06rPq8+l_XYmtqkbXal8r(W!dG`8AwpO4iP-fI`{BcN@{-|5e zKpCelx2-A$4uJ;B&%SrVhSzSc- zq?vW#Kbv-Bs?d5x!r8~lsA#QA;jZEh_SE|j>y&SEq^;xc6pH{F)W|`z259!BCkN!R z1UaLzW_o=5_N`=MG?x|v$M^mB=or+?K)^@X4!dZ%VkN8?fOmYSBzTNi8t%omA1~TT zT{Fz1UF-}|-?)P@A@(St%uLwEZ{0bKR{C<)K0N`Ti6ezrK0nm*-1Xa-5d-$eMJ^DK z+42L4CxXpJ+elB!&cQM4JS=7jEJ#B4MjMDgrH{&>-FWHXA(Ps)kty!nA)yMYh_=HT zIAu%=o|N*JOi+>PpADqWH}mq1>?j_3P9ssm(UB*5TEJK%dDsNDr6<_?k>pJDBt89*X_TsSr+_#ezIF=fQ?x{qYDm~*eSLXBJsANjRvar-Ex`-V z0X>Iu;E|j+i0<H)(GlA z$n|TvH8M_UaL0j#YfMqlGckTy{GR6Y3d=g?r^u9Yq zy=t`L4Xt4Dy(m@RHxwzz*WbpvA?-AO@|@CzX<=v1spiVmvaqBd-yLbliw9<#S;7M) zf~AoJ%G|M!OL~+|TxMMZuw@j;in0T0LVXH|cr!K1J>_b>VXqq-V{#b@Rt2`nOT|Zx zXWCGQTOS-2L>rHK!Z}VVWz+;2?0wPo@%Ney z3u)wy+8P}Tg1r^y79D=04h!PzMD;x=AiNM<9#|`IlLt9KN9?61Jp!s=Hl0(<0^iGm zV*TE4ZkClbOH=utS}ouZJ7rXgbFbBxxk<(%kr=hbm=p!L?@o1SD0?aJQ@xcP?z0LN zQSIt9omR}BARzREGTGy|n}4)k(k%7)EFMU&%irE2g9NJvpFC*faA^UpZk9x-0$D3? zvSOqkjS8$*vLLZq!!+8&_OV(WAi(@fYyJH z;_mTWik2Q z%*qwlB7lY!$-M)5PL`Tp)Q9%$38?C^XU5} zrSr`Y=2w1)lMBi;agCy~$oZ2H3;ZwcZOz?t-|!U9UwYBU%{p5`d(C?gHpheWMb@2D zP|hviq_I-2-2`d}7C#iCS-Vj>uasFDj2`)j+ZfnJn|N1gnSyjISu8Tj;*Jwu`N)XN zQ4IXUw8NC;9I@3re*gV|K;_@{(ZL$y+07DNbu4c>R>3si$6$yQDnRX<#^L^cS!*QO z?_jOdb`(kqJJ#rMf`^?#m0awzH>*BVaNy4wmr%&y`eNin(!ohSzg$I;JQY4m6YAKX z4mfq%q&OCr&4Ej+PhH}ouQLW!_Foa5A0r%$g#(^7XqXD5Dp0s27iJzN>8X)IEw+bX z5m+=pe=^@)0V1CjHXeRF;RxXPiV&OK_oe2-Nd8^DQ2Fbq8%x&M94rHZK!%4UM@4lN zWEJT8&6j21eUb+9uwzoVANDWL8BE+Ns`Hnk`3WI}k{rR&-40PzCG4p14056EhP)*A z_Ny@)qOl|RIL80rY{t7OV|tFT38@rYi;nOVa@N! z@3WqJQ8nfa1h;QG0yrY1o#VdF(xIo0huaYLyJ(1>!Kw$``zNZClf#v9oy!^6Fu6b1 z<2zNukgI!3*T1DfIcm+&jpKx>)@&v@p7_@hxFC-jy(KZi1`YIM1)3AU#kttlL8YS| znAZ9)2vNoASw4b~zXLcz4P{X6H#(r!zX<@36hm(@_stYLco4|_1R3B={^o=5D_h+F z0|IL!rBxmTww`@LASb&i1kZWI1cou1r zh3Ekyw|jsBX;I>HxdASDTut#B=&%TEz=NR7Ok9-39?sNU%ONAYykSnR!O|XmdZF0R zOPuk3yg4Bfkj)X$RhI)D$1O3Q>Kue*4sl`06rB5vY4;w0*i z*)!)W4LvTfamstSdc>UkEa9baQ*jw)fDk!iLKetk4@in8Od&CnZMWCIl;f8fU*<+D z1^uaF>rQ&h)qC?j~8xi`wQcsnfL7&u85%DSlkQQp|yFDe3CYCQEQh4Xb@ zvld6*CW>5}amv(qOHl&c5?j#<{p}g(7oo;Od-g2dtJ|USG9VZJ;9$;PWg zGt&lj_SZ^G72Uci=%tkqZGHP>rImVX9?1yL;>J>rudjwieWDZX(shS2bfKBlYWoZk zAs9>Ms1;*cIUNNPueH!;$R^+%oWyIzAYyj{YSZ@B=`Aww4cdU%I4Vq5jF?NQv1DgJ znw1?ZV+v?>gqm}gLtb)sv0WMKf4O=zvGb>N^CpI3qi=gY=HgR0JBToUd4QzWid`GMfVQQ*1^ft zd(2bfXP`}r^BTLQ#V;nIOUGj=T>rS$W+m?5U$jf!q!KOrCh#gR?fQ|uQsqW^?&Bjw zjW`g!U){%FDUkX7G^Xz}OilE??_kD(m7H1i+lyjw+ON2ma@9pDGe_0Q#E?;2;=P^Y zzE{pJjE0q(Ex!7PCzQn|lts{hHgjD(fCHX&yf6~z6mct|u8Z>sAPyzDMTr*5COr$e zQB~6cMAsZZ=i9$h?{&b7VRUq>Jmcl|d3bShmyJ#3o2kvPFnmF1u`R8res+o%9wbZU z!=7z5djA46nAhkE_!T@zd?E=yX-~!8`rFO2pJdBG@8+2-K)N6g&25j zFp=4rcMhBLtr(u9&|H6)J}OT*appx$824920@7Z>bA7!T*vyz4fMqzu(ecS5>Cso~ z{aAP~RR_nVr=@IRr}*$u4PPz;C56d0X#^SjcT$TV_QQ@>jv#og1QC2*Epr&Tk8=x$#Syg4_ z0|y3JLk=|Y0e~$LTxy14&U8um zZLA3L1}JcpmpU2?jA=1Y3kZmnRlk4~;|nMzG$JTR`$_N8QTxS5F#}v$ZteCKOikn> z^06IYsF!`hYZpUf0kXr*Npw&!5gcdxpjo`iMXr}$CKs8|x|QoJqg*5@ix%2_qS2fE z?VQEb?RQ;kB@?t9D=pgQkxZ`a+Ewrl+7m2Ikb$f&LAw$`+NA5Uv#@!b z^7%)B9SQF9E_s!~qo_7?`zd+UlIv=1;63Y%Xoo zy{ikaR++KNeXP~)V8SbSr+iDltjD6VeeuaL&zlIGGYIi@`)1NYZGM@d?Yu5}^tqLH zoOtu2)BqfQe3w3$rU2;Pu`gzn3E97S59bT@t)N2?Vki%V9K(-6uEnS|%{VM3Z;Jvg z6sFO-3J_(~)_C zsLFg4s?0*siz!)^JE;@g)xctm~FXkBJrH+l|Q=V z6!n)MLY{#(2zDN6!hfv*F})qdXD|+tjZPDKm)1u;XR8+9%S9Zhi;`L!JsicipZt0r zcrW_Z>MM~K`04jw?H~{1ZxE-9p%;5YflbUpmJpT41r|2n^NB$|CSrMr4^|bAGDbK| zM0DW}Vi`X7Auzc6#@nz24+E*vdnGd}MuU_%ae`ssM0pAlcNH3wOOnac>If>@k4pu20O2b7dg{AyBGozHk1 zPJ86s=%2@H&mZ4G2$TNxv>fh**G0sZkXTS!gRIv*Lvw{|u+1!3#?k70Jq~{=FfC?r z>bg<5Y@i4e(rGgHj`QWFMCSeU?$A}LGb!WPh;Ig)9%vt1OrVXO2KFI9amOg$ifMN-zm~p2zwbR)*%s3>hU`@pSS9?j%rRP*#$e6;WrJ&btyJh zm7_ss*?Ia$2DsG5x2;H&aZx}VpUme&V4(3n#@WKfr6F&FLj{R=3-7mV6A3S%VEhjiEgHJJ%emw?KKeyH%F57zlG461hiEWma}pRmuS+KLD-6 z*H8WX_TGX@-%rbUo7L~ixA_UQ4EiJKYVftlpfa0AkGTnrG5mKSSR=>UVZI{mT zA>M0Mjs;fp9d_bBiV~pEI^yYHw80M0Qn4@$9}v<}z!F4fL&2aq-Z}WN&MCCG(xd5A;6Ijq<8e*V(xlx%H*yaa|#diwLH9@BDy(auuAM(HW{XC=;myIS?@nnvh^>p#P_~Aa~oq}jKv%o^ z4Io92hU=3~JLO+)M`ZF_0yZIsoZDLJT7Y5U{l@Oz)$zX4hYwk9od!|~yU{#-aX7Ee z;|BALeNjip!Fa;%@bh`xnhd<{1C~^Cw)KWLYj$%$kKj!2p+-pu7feY1d81u@i7);b zR%@C<(0J1aor=*0==BIn;aV>Qd?xIa>H>~K;e4C*=6L{vrZXRu_>ph2&b1XfBe>J2N*W#Uy^O}Vw!0|p^V z7m;dhNT(v6*^f|lAA6wlZV$D!jEf7h8D1zCnFVr4Ly@eKjUi-T2TVHj9k00EYl3QT zQp8UX=F12kL@Ujap>_jaQa`U1?tk8%!lv6tLMdE?a(EWPXSWV?-Vqd85VHVN&)cF8 z^P0ubp)5*r&vGgVr!hIPe!|W}ES)9?$Hd)xJ;v^c6=HoWGH@OjOAUM4d_={vOd2_e z4d7>Yc{?=Wyk#S08py%<7{<@Mai^I#q)=&C<1S0WA_`W36Me~|jDOFyr*?Yw5Ll^* z9xe8nIp^Me-bu16SpfxpG!*d4mg2*ar^C`O>XZk+RB>^oVQ5HYts3D0EuLX&W3AU} z9EaTI?69XId<&ygUAItST%?AVxB>>8q%g!~B<0M)f*uUl{gnhNE|Wr5u#L zvK}RN@_iJ&qg$T?66IKokQ?m(9ywjGpy-e=Dgl}r64Hebqc%f(E|g*{=muh6}|Zqj{2nmzw6 z)@2*8fsXUhYsQo{>bi+QDd`P+33Az!VO{WZm`VAEboI8ARXeQhT(XUa2=fvmMpII+ zzPu)3^D@_Ib(5o=K=4NRtAu%OAG~jAXc+BMn7Q4N`CwKTxW>*8HX0Y;4A2NC{Nn63 zQ|iK7Fd~+|O47BaZA+Z4#)=L=)l_=ai{Ok1o)2D2MpbDV-6o)N%ti|qnrK|Oj|-|} z*hr8ZvW#3{vf!q>5t4G4!kUi(Wh0RcH1A-9-N!8rb*c|W7j>2FJLc!@i2}L%PibO< zT52dpEn)y4T_D$+$c0vP zVsMnIN||_+QH~maO-pywYWs?|b@+q)6ki7Vl30K|ca>jZOUrbc2gNryjXX!;NEG>v znarT>HY!Nem8o)wx8^D~aiy${^2`Kl!~Q+U=`{Taf^gLs6KbCO@r#4mR);xLYN$L6 zKkZr?#+dx{lx|ZWCsSWEj@S$3xc(`d;AD+?FoRY#_q`&2k%%?~Pzj#anevn70wj9$ zu^m^WkQ+G%!Af6{6fAWvEqh6N7bDhS(#~ES?z6JI4AJ>3vnfrgQ*;E0yOCij{W{xh z_J!7o%x0N_v}ddh)|KIY{dmTgw}KLRe0*5f#P$w-FiCHX5>cOrEU>d4IcVO^pmWQQ znO28JI)_><&*lheP+@dHqGjM!g*(v!HB9Ek&)bv=l|g*Y?mR0~@LZd6i;^uS7kxf7 znOfmm^D9ieKE1PX+Ipz2w!VD-Z=yiW67lkQ+(#>!X@`{>%(IKk9audZ%w5{sQ`s@y zn$vJeCZfAdRsE-#Byv2BUYqtLTUcID6#dX2zB+SwvG=!^dE%@(-CMSF^FPyzH+jQe zZd{$gh(r9uWHs>Z;)c3=d+Wb~OsvTl7+1&(t^4isc0U!Y{q&{q zHYUcM6nfJc+SzN=dTkxm8G6LR;uh`DazyZSM(x~WlK>byKerhh-06M-#Lk@0d0Vkp z^-9!-BAZar;&_h5QMeQzKYiZb>>Z98?)%9siQ_9z+c#d}nEw7B(-B1QtF~fVy*=n< znXnz>)iY?KyJCyEfLvWPMQ*UXe+6+mG z80-2nx?y!51&zoIdI5u6%JwbRB4{8!c%A%X#@rk^j_0I$UjFd#B+DNZ@&IC;yv9hx z4GyPv?neqnGm~G?w<8p~!$Vm7fa0y@JL5fo7;$cpPd_(0qz?|(Rf z{)!yxQk+KU{oQAb3I_xP_iuO3pQehxl864<{yXiVQSHA?w**LFDZs)fk@-C^&%Mmi zWZD_IO?R_~1m-8pheT0WlC&;+VvEZa{+$_ELxW98z6t zR=1Cn8C#<{LKo6vDIiH>{znwGAO!gIM^P0Eh78M64g^ILOkEz*&v^(+iKOq^fwM;S z^iU%ZwtoF69ezj7yINW`N>^vR@k%4F1BP0uS-tx4#xj&l!Yj}zC72@;)}H|)ab!Wj zy?RjEeUU`mN=Ecb@iw&njGX?PQO+`tJxcMGGEiigw!7?9$WPpyoN1UYhVz6=JO=4e z9g9R-2$~zvq}a5hEg+7h_Xl|++y0*MZ2G_SBgy#;uhzn3DW_YD8vs=ThhKgIsh-M> z%m-PB7`A!*`av@?&xo~$bSqMb06RUuF9SP@8R0n*ts6$=_UdAONlfy~HVx}D#y|9N zsxWZdz=osMHx(WooO&igh}5LC*>QaEC}Yr4c4^6v_Q&z$ZNW|FQd??f&KdU)M2F1q z{#Mx^PUsxvgS7j?R{E~>T`ju0zG+qT)j4cE>!Q7s(??MYr)g7~3HlfFUHDL*M2@O> z0<+p2p48wGV3mczCM%(&&2!Y>gvoI&9R>`1hEn=l*JAJ*d7-Q+yDI8(ZL9~~IOmFj z}QHc7FuN{j(Mnuh6}K9GevyLXV{JeP7ze+BGo!!c!6 z`|6l!pO3MvKI16L8Van!UM!1s+#-WvZ$Z3`g;O~sIjB@;4R_jl&6Ytm-#wqbUBnIZ zx|6%mvUV6jN1YB*NW^7Be~y4z3tl9}2fhgx{7-puzyI ze-r*0M)sTbR~XswNw@j^;P#uQ;0j$@$+J?>{-=zfEEP#rbzj z^>5N&Qt$sC>7VM)KS|k`f0O4r1 ze<1zSq4p<EEn>%aHy9>7TP;{v<*3{7w2}PRxHm{j;h5 zPZWf}zfpg-*#94}|6MizggKf24g0%>{s#T4e*X2~fd9UQfq-CsuU@~)u8Z|wNB<83 CJIk5? literal 0 HcmV?d00001 -- 2.25.1