From 91273ed9b3c048d5758d414a32d64447cb372077 Mon Sep 17 00:00:00 2001 From: Lana Begunova <70295997+lana-20@users.noreply.github.com> Date: Mon, 5 Oct 2026 18:11:58 -0700 Subject: [PATCH] Gray box: the guide and the tutorial, launch --gray-box and a tap that waits, in every client The gray box guide and its tutorial synced from Mobium, and app_launch and app_tap each with a new scenario in all five clients, recorded on an Android 15 emulator: a launch with the gray box on, and a tap right after a quiet refresh that waits for the app to say it is idle. --- data/runs.json | 18 ++++++++++++++++++ examples/canonical.json | 15 +++++++++++++++ examples/dotnet.json | 6 ++++++ examples/go.json | 6 ++++++ examples/java.json | 6 ++++++ examples/javascript.json | 6 ++++++ examples/python.json | 6 ++++++ scripts/capture.py | 9 +++++++++ scripts/generate.py | 3 ++- static/img/shots/app_tap-3-after.jpg | Bin 0 -> 28954 bytes 10 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 static/img/shots/app_tap-3-after.jpg diff --git a/data/runs.json b/data/runs.json index 333d549..7ba127f 100644 --- a/data/runs.json +++ b/data/runs.json @@ -714,5 +714,23 @@ "verbatim": true, "exit": 0, "output": "moved label=Volume to position 0.3 — it reads \"3.0\", was \"5.0\"" + }, + "app_launch[1]": { + "tool": "app_launch", + "index": 1, + "command": "mobium launch --gray-box dev.mobium.mobiumapp", + "verbatim": true, + "exit": 0, + "output": "launched dev.mobium.mobiumapp, with the gray box: every action waits for the app to say it is idle" + }, + "app_tap[3]": { + "tool": "app_tap", + "index": 3, + "command": "mobium tap testid=busyRowB", + "verbatim": true, + "exit": 0, + "output": "tapped testid=busyRowB at (540, 1095)\ngray box: waited 307 ms for the app to go idle (busy: quiet)", + "caption": "`mobium tap testid=busyRowB` on MobiumApp's Busy Demo, Android 15 emulator, launched with `--gray-box`: the tap waited for the quiet refresh to finish, and Row B is the new generation's", + "after": "/img/shots/app_tap-3-after.jpg" } } diff --git a/examples/canonical.json b/examples/canonical.json index f6d43a3..b8aaae7 100644 --- a/examples/canonical.json +++ b/examples/canonical.json @@ -332,6 +332,14 @@ "args": { "app": "com.android.settings" } + }, + { + "title": "Launch an app with the gray box on, so every action waits for it to be idle", + "cli": "mobium launch --gray-box dev.mobium.mobiumapp", + "args": { + "app": "dev.mobium.mobiumapp", + "gray_box": true + } } ], "app_list_apps": [ @@ -709,6 +717,13 @@ "target": "@e2", "double": true } + }, + { + "title": "Tap right after work the screen does not show, with the gray box on", + "cli": "mobium tap testid=busyRowB", + "args": { + "target": "testid=busyRowB" + } } ], "app_terminate": [ diff --git a/examples/dotnet.json b/examples/dotnet.json index da20055..2460f48 100644 --- a/examples/dotnet.json +++ b/examples/dotnet.json @@ -169,6 +169,9 @@ "app_launch": [ { "code": "device.Launch(\"com.android.settings\");" + }, + { + "code": "device.LaunchWithGrayBox(\"dev.mobium.mobiumapp\");" } ], "app_list_apps": [ @@ -359,6 +362,9 @@ }, { "code": "device.DoubleTap(\"@e2\");" + }, + { + "code": "device.LaunchWithGrayBox(\"dev.mobium.mobiumapp\");\ndevice.Tap(\"testid=busyQuiet\");\ndevice.Tap(\"testid=busyRowB\"); // waits for the app to say it is idle" } ], "app_terminate": [ diff --git a/examples/go.json b/examples/go.json index d6cb7eb..0d83a69 100644 --- a/examples/go.json +++ b/examples/go.json @@ -169,6 +169,9 @@ "app_launch": [ { "code": "if err := dev.Launch(ctx, \"com.android.settings\"); err != nil {\n\treturn err\n}" + }, + { + "code": "if err := dev.LaunchWithGrayBox(ctx, \"dev.mobium.mobiumapp\"); err != nil {\n\treturn err\n}" } ], "app_list_apps": [ @@ -359,6 +362,9 @@ }, { "code": "if err := dev.DoubleTap(ctx, \"@e2\"); err != nil {\n\treturn err\n}" + }, + { + "code": "if err := dev.LaunchWithGrayBox(ctx, \"dev.mobium.mobiumapp\"); err != nil {\n\treturn err\n}\nif err := dev.Tap(ctx, \"testid=busyQuiet\"); err != nil {\n\treturn err\n}\n// Waits for the app to say it is idle.\nif err := dev.Tap(ctx, \"testid=busyRowB\"); err != nil {\n\treturn err\n}" } ], "app_terminate": [ diff --git a/examples/java.json b/examples/java.json index 25531d7..1533ce8 100644 --- a/examples/java.json +++ b/examples/java.json @@ -169,6 +169,9 @@ "app_launch": [ { "code": "device.launch(\"com.android.settings\"); // returns once it is in front" + }, + { + "code": "device.launchWithGrayBox(\"dev.mobium.mobiumapp\");" } ], "app_list_apps": [ @@ -359,6 +362,9 @@ }, { "code": "device.doubleTap(\"@e2\");" + }, + { + "code": "device.launchWithGrayBox(\"dev.mobium.mobiumapp\");\ndevice.tap(\"testid=busyQuiet\");\ndevice.tap(\"testid=busyRowB\"); // waits for the app to say it is idle" } ], "app_terminate": [ diff --git a/examples/javascript.json b/examples/javascript.json index 6d529f0..cadfac0 100644 --- a/examples/javascript.json +++ b/examples/javascript.json @@ -169,6 +169,9 @@ "app_launch": [ { "code": "await device.launch('com.android.settings')" + }, + { + "code": "await device.launch('dev.mobium.mobiumapp', { grayBox: true })" } ], "app_list_apps": [ @@ -359,6 +362,9 @@ }, { "code": "await device.doubleTap('@e2')" + }, + { + "code": "await device.launch('dev.mobium.mobiumapp', { grayBox: true })\nawait device.tap('testid=busyQuiet')\nawait device.tap('testid=busyRowB') // waits for the app to say it is idle" } ], "app_terminate": [ diff --git a/examples/python.json b/examples/python.json index 3166f6d..06964f2 100644 --- a/examples/python.json +++ b/examples/python.json @@ -169,6 +169,9 @@ "app_launch": [ { "code": "device.launch(\"com.android.settings\")" + }, + { + "code": "device.launch(\"dev.mobium.mobiumapp\", gray_box=True)" } ], "app_list_apps": [ @@ -359,6 +362,9 @@ }, { "code": "device.double_tap(\"@e2\")" + }, + { + "code": "device.launch(\"dev.mobium.mobiumapp\", gray_box=True)\ndevice.tap(\"testid=busyQuiet\")\ndevice.tap(\"testid=busyRowB\") # waits for the app to say it is idle" } ], "app_terminate": [ diff --git a/scripts/capture.py b/scripts/capture.py index c507fb0..7198028 100644 --- a/scripts/capture.py +++ b/scripts/capture.py @@ -60,12 +60,21 @@ def app_screen(name): PLAN = [ dict(tool="app_devices", i=0), dict(tool="app_launch", i=0, setup=[f"terminate {SETTINGS}"], after=True), + # MobiumApp links Mobium's gray-box library; the launch says the app answered. + dict(tool="app_launch", i=1, setup=[f"terminate {APP}"]), dict(tool="app_map", i=0, setup=settings_root(), after=True), dict(tool="app_text", i=0, setup=settings_root(), after=True), dict(tool="app_find", i=0, setup=settings_root(), after=True), dict(tool="app_current", i=0), dict(tool="app_state", i=0), dict(tool="app_tap", i=0, setup=settings_root(), before=True, after=True), + # The gray box: a tap right after a quiet refresh waits for the app to say + # it is idle, and the result says how long, and for what. + dict(tool="app_tap", i=3, setup=[f"terminate {APP}", f"launch --gray-box {APP}", + "scroll-to 'label=Busy Demo' --direction down", "tap 'label=Busy Demo'", + "tap testid=busyQuiet"], after=True, + caption="`mobium tap testid=busyRowB` on MobiumApp's Busy Demo, Android 15 emulator, launched with " + "`--gray-box`: the tap waited for the quiet refresh to finish, and Row B is the new generation's"), dict(tool="app_scroll_to", i=0, setup=settings_root(), before=True, after=True), # The horizontal case, on MobiumApp's Pager Demo: Card 8 starts off screen # to the right, as mobium-app.sh checks. diff --git a/scripts/generate.py b/scripts/generate.py index 336e716..870a23e 100644 --- a/scripts/generate.py +++ b/scripts/generate.py @@ -535,7 +535,8 @@ def doc_text(doc, lang): # section's. SYNC = { "quickstart": ["README.md", "cli.md", "mcp.md", "python.md", "javascript.md", "go.md", "java.md", "dotnet.md"], - "guides": ["README.md", "autowait.md", "cli.md", "test-runner.md", "grid.md", "network.md", "inspector.md", "mcp.md"], + "guides": ["README.md", "autowait.md", "graybox.md", "graybox-tutorial.md", "cli.md", "test-runner.md", "grid.md", + "network.md", "inspector.md", "mcp.md"], } diff --git a/static/img/shots/app_tap-3-after.jpg b/static/img/shots/app_tap-3-after.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f443f366b6fb3c98e8db0db57b3ec199d8e3edbc GIT binary patch literal 28954 zcmeFZ1zc3o+AqB6mTm+krKOb`krt7VP7#q90qJH4=>`D-0cpvR?k)ilY3c5oAqNYRSCer000&AA8@+@ zJXiFzeG35U>HrS_0Qdk#m@R;fK11IEFrX^{V12;=u+aZ8{#^Tl`A^?s*nGkIr*o`( ze{Q@z03K=DIJ!Ez*f_qwCnE3=c=S|N9s3V8bot9U$6rp#ChkVh!~s>Zr!SF+W4`7qyP}~=i!===+z+-iy5)Mqr!Do9~*-5QE3S$>}?HoivNJC3U z&%nXS^?;j4R7_mr(PK$@1w|!g71d`ib#(Rg4GfJe-&no1wz0KyadmU|@bvNy{tyxx z79J6qnDj9@CG}HUdTw5RL1EF?;*zTBn%cVhhQ_9@?w;Ph{_g{WW8)K(Q`5g^W>;3% z);Bh{ws&^n$0w&}=NE{}t3Q09pXXoMLLdLi+28R+j^+y!8ygE7?+;%Xm>z!^C&$LQ zFN8}Wr-f(XM9C@~h)?x2A*ZsFfK5ajM*Z4(l#qs9bcF-{hqb?O_8(&`=zof{|Hjz= z#n&7l4`BYKU}Iup<6>iD+XeKrq`jR5h_NuxlL?C)00B41+{g#Oe^SM|{qhDo=Gjor?7%$Y5Q&H<``N zS=Z^JE;u20s%6Un-XE*nkzpR*BsI%%ajtDXPoL+m?HhQXJhy5&W!Wkms}ia=+9F01 zRs?x%`12Nc6*=;-Lk6MoRSGt8=} z^8{An#8f3y-E|ca1gfEDN;z?slM0k}`3#6G2FQj$Q&0k)?fvgP>r7dcCd}1FYrgLb zh!NPoGIa1CapN1{i~PxA*Tbgmo^y}F=XGoFihiI2iV?vu)I~d+f7Mg>CD`S?zhzQp z2?0Cnsitbjkxq-%ia7--nX%_ZM;yV#!3x;$phAsL!hNIugSBR#gwhb(!7E`oY-ZqL z8w>bq86MLgBH)$`$4#HLZ_Bgw))q^8H#WdL~jqzNb z)b|t^*7q0&rNI|rN?}3@ zKSqLXvddfUuc=C_`ms~?5;+FseoMF3J?S2tdM&E2yrT1#<4up#89OAk5}`L zEVY9Dg0qyJOB4dq4^!=Pc7{%77@vS31j{N`R(!_N!qGU=mW?;&(7T9fn0dE3qc7Jj zfPdJa-rB>zX|#|Vnn-&T;FN69EhvA686azR6C=y#>wt*y@v~pOU`PqG`6N;OKvmBr zsIv3{=8MPgqQCY_2l&Sz;PAC>b8Km`^Xq++-PC(gybs@xJw$OHRzl$t%a5V*u&^Lk zNLbdL;7$}_2>(h=c$smh)aO{U=dUW?Zp6JjFemn$JLiPo0zDcO^N8x+HsQ$4pC-SDq(qaj$#Pad-;+uh(Jw3b!<8Ih01ka#lR zoBbpy$-`BsZRO>~-`YLkMo>_gzBU2THD#Q2qa^y(S(LcX?rN!eivj8f6}T3>U) z*2?<*h4fd+gWLc@bOqgx{wIsNu|M<+itY3mWHV*UOP+l*HtHK2V*AX)O7f%U3J`fA z6o$a5i;zzj@7)5~M7ID|*k#nUH4$(Qlm~U=@)d%R-jeA&5Rv^poZ-IxXnXX$vVtHiBoA=lf z#VoVBbVXfu3&1!vP^|xq)+!Ag4~Z~GFoAx6>fW~xBSg-!B9Wi|p1Hh#Mkl02?iP@x zMd6X2kRE&%Jn<*KvCeJh{FgfSx6dgLb>EQ;G7^I3yBpd44?h1fp8uG)|D)@(0~Uv* zddnO0nis<4>1y=*dx!LS57Q3#E^8@L0sm$-?eA{KR)gd9w8LV1z3v7W`$QFUB^yq%)kPGz z)MC7LFYdr9xAn|e>E2e^)Ghf$QPdN7k<rrm(ebT!Qc zKfP~gQNXKuDFyZcgZ)wqj`Box^4ET*gr$#~-YHsPq26vPGh(hRG@V@>sUNIQp;a|^ z>Nzxy1BNeaXWz?$>Nscq}TjxKl|!2@9awZC4&WMZyj`+?}8>2{BjhfynL5R%Y3$fEAZb@rSR%e zBa-KtD7;1UgdDf%L=7w!3N15S(7l4F3b=5RdfzOETYgGR z=}o=c)c4(jNY}ORsb@u(ES}j62nnUAu36Ws!ZceS$2-k-R^J-44tWWnUli+-3qQ7e zT2$rxP?D&!&amEsx4Iy>@}p|b^T@aoF72L9eWh3w@w{$jBb`>wu_nN`n_GJWSJ&H( zUBBN|U)0kmm90QBrpV{O&x+gT!kp1a>Y(DHJ|_7v_3TZ%{6w43;?C7{Y=yK|fnAYa z-DI-Enl1jx7t&imVEjRcUKk^wRr3|c^AVIkH}Z;@A1ADUklaH{?~=dn*T(0@{Ehhs zxsluV&0rk_!xa;{!s)dLyx*OCvK}=#lGcKij_rt{(3lv(Q7<_2p4* zf;XJXt=+dkUuw~ATppSv%3ikScJc;ULAeSEJZR(am7PQqxp5^nWmb2w?^TXG_4`)#elAdhOFvB>2N+!5UZJhjuir%AkgWp2kv{JvFPkm^c2 z>8f&!%DwC5*ky)I(2BnA3$#Y!h?WH%+_wNC5|v~Fo#FNzjnaBnNW*_-TZ;f+W?`*t zo2yn|R^0+2rf?}#NUQ!W02KXIf%&^DyjSYEP!yXU8!C_uttfzwX|GyIw;)c)8Aw+J z0xguDE|%T`0WZ;gqxxr8sBbt&m61wi$~TzGXcY;v&a!(7%Dm}6vAP8an^!$OznET;r4NP=4+9#Z-X<#E9>oQmW*idZ`3-)%?WfNlYD<-hxE zK4wn^>9Om9{9=c|xKMH^sQl&9JVYFAk+yL`e$|(t^**Xw;E&?>cNZY4HRx`Tmy+KC zPZH42FZ&YjAH4o!T>mkL|L?5VpCcdI(Uw(oo9GnlXifH=C55qvB>X=pPNoaga9{I&&kEKUNwHTs z_{}q5kJ>rElv)0n?N`pfEf_zV&Y_LhHoDWe+o>DmR|g0C{e%4GW+x^sZV&fIgeAhN zG6B?L&i*pDKmw!DEdV9TzM-19C*A+-rnvp>umg%;DH8T*M;AIv{?IvI}iwoqzv?rAv7MIxdLq z`vx8s?0+ALh2URN_a<@a&SHhF4|{oSIDqSFYJWJhwcW*4ev0L8@p)>jz&=77q;3Np zZf>7-T+@x~5sba!46|ZxlE$*Kl8q?pC;d4h&9UUAk@bXhxW@U(J!f#*O}eZ!5{xKV zEobE=4bNhN`xO>hvDsarJz7#PM=OZE%vmwjOxPXV+u+fdF5ipK9j5P&OqB4#mr=7U zOlvpU*09q=qwGjH;)kc4^33#*uxQ4IHsyu64a~-!Eb!TpM&uz8{=Er~lP#6WHy56>t1@nJFCB2=#L6$j^?<9i#ncGKmUd4Gh^6?D+ zq9^;xbvG3JHWEOl!6f$0ugwwi%bhowWo`Gj-OXsSxDU2$M0ePmj~&v|t@J&#P8=r`!T0VsSG^rgdXy(9o2z8DsHsA`P4gT7tTl52Az0UaTF%Pnax$ z>1|W$qMFwm%3ERGOEW}kG$G|kHMo96i+d$F3luamIC1)kVbNGB>Xj-lqX;P<1)0Ep z6;>j_Ff;j05=sc1%_z+c4_=FH&KUs(YnxXOFQt0?v4YHj}fD{0M3Ice_mhlX49A5i+5`xQC9}e_K><+5xbJ|3&Tl__=M3w z=2zR_%*iB4pw02|i*dlv`;an+M0A_!qboz7ww+p5odgA9>{5wkFf7Jhm z_g6=B=;r3)&qcN7Mw$n?+J}cvOG=^>RhNOs?7y%l^!Wv2TPPii)XFr<3<~n^R1Qd) zD6uKOqSyUg_p68O2^TvVSmPS<^n^yRuCsAjf=9Y{Ai(V-@l9uT>-b_6M!BNZ95|hS zA8u^8D94x7CBUkXV3F}wz>L1uFtQ7)JhyGnrj#B)P) zyIcA=pBXHR*2HAV$Ih_w?Yzq~YiGZ@5Lfpl;=HCd$b0yX;t3ud`)YE)_I8<}wCc)l zw|v+{{rS+>?^&;n(llQTg2I(EdwkZYjY#PbN?TfS%5{_P)|)>y#NuR$u+a_Np~iBM zQn~-_5nDQdCZPZq4C9!}?sl@H8UEUrWjPz6`J?z|joAa^C|Z|%4T_!d_za`WAj3z; zkTdmwd_RUMzU-ixkS+-05q5CwM}s?sk;fWzNLPgZvMLfp8eSXD#{8g(Cfy~kw4W{6 zdfrr3H;z!w*?m3mbAr(#Ga{yFx6XU9prZ383Y@!3Y0xt5(z)^d+rbUYX8l$8T!W!_ zLqE@>qPKXtqbApg>aI}(xsrk6S^n~0{KS24$iGvoQN(Gn6Cr*7nRUG919I$XpV8jj%)t2kTW@4_H zH<}kP&uz?rFd)PaXAh63^{Z0u%G51LnkWrnd8^1-4OewFQ0B&Nt zA2kDzsTzSzj@{}k%SYj2*%<1jp61U-3sDPW?@r-v!eCnQc%DU*nKjpuV^u~WJ)41j z-VjIt3uDbl$Rc5OcRI&p=3=Q&Il|jmm`J_A)2D|rHC(;kz0)rIj!5_r&i7vbQ7xlu zJ%N`eYv*zZ#We`7uL@jdI+oA6z7|%V&rAV3Jt=0f9XlvW-*~IUwn<#o^&wV5Nm4M|wIKk$x~^4Uk)fkZyaM{wzs>m(28YOgLnjD86`PW4-|Z4SjM@v{z%6va1e7 zJ&yFTUOU2DF!fB*g)hXQvR6gys^&6fjZ3v02^T3p&5((jTeFD2a8F1CIUb0rvuI2R zocS;sSTwaim=84!wbzn>5=WN$|MxMNvA*^Z^Uy;I$|e+UlJh8>h$tv*j>UAZ9N z>dVo#q&a#p_yu5pVDRb{T!AyGLDb*I1W63v80o)pV4*kMh1=0)iAEWXyMak47{9%n zQkliNDI3eFk9;uE&xc265~9x^ISxbH5gKH+v$A2UzgzB$GT)C{J*_`pC{LpW7s$-_ z4360^oojz!+Ooit**m9*^q-9ShGK3u2SnMkT)7OLH?H4S&nTO@n8V@@a!HMGvYR_(Jv@~2_ zHGnB}=7mFbZj? z+;NTiw2+WECdPBm*3d97N~qNR65KlBPlec=I=tw~dH^dxRjyA_tBl4PT-`vaI?E8*^oAz=l7} z>g-q*%?*kVdAYrRqETb=U=|X}-i4{k*_PNc$^|#y?=JK7SYC_(1y{I{@M_kNyIw9E z6WABUKP&z8>ma-(%<~l_T+EM4@s4Rw|C)auEPbR8g5fK_A{fd-SZhw|8A*zxTxdE! zFLzFNSdp8^%`j>4-FQHat!aLxX&E#U*@qZkSqjf)$mn0Z2RjO?z4iegVeLrjR+$;7 z5|7WzmGD*dGrghVph}8uzzLWOg4o%V=qe8S`wU-8AfBpA0R0ZByg-}aOPCYH5nSJHSc}(vX%3g00Hp%Y~-`N-|nFMC}RJg9{w!B%f_n9-Bv=d^IGdwJs+75 zHRn+qy4wLTdnVfV$OF^%oq-LH{=MH1OjO8{GlDOpss$y+9)RV<^wiQ@OTihKd zA9FN0=~obu6VC?a5ZKwO{fYB_PBqJm#MsNbsXa12Mj6Ue(vK}y8_#592VB8x#R~Sp zz3dlV5)tc>Ld;zO&+{-+S%eu6BF=A%1{+AUKzKIB(;x)OxhNf+M~~~Si&%M(M`EHNaG`s z^0+HV??I0G4i>lPyjtT#fCMgQD`^ii8+y}-;_tt7SiNu_%5GA6n_aw@B?4#8F12ksTWFoE3ogTL zBAbnvDTi7-i3{W-rv8ZQ*=8t|P{X8&HLnh^|Ld>Q+}124f` z7;&LL>8lR&>1^X`p4b@MXleO%C}345lzR*0s}VRqk6h+S`F>Xt_xoz2J)RC+FyzeZ zY?xOoMa^f49=(JussuR|5=@estxaV((C8LNTfE5HlX7YC^QL_UX~Res&c0c_ z+7kg)?#4{)GCB7Ltp;Qduy%KO*A_HZiz20IZwiVz^REu$a_qEbYx};Z716pEy?GAH zE%vNP=a>(0;$%!nFSmqattO0$m2>G#9vp~)h-L~h4<@!NJ2}pVJC5_`wUR~NQ5E0I zt@+Y$PZMv(jcHubky1knTLCBS(;vk@=@%hfFw{(>u@#n5?^a@NvY?hX!lN=x-pO8R zAHp%y_UlrgjwJp&)k$T*D|O$_a^w@ZU{nj~YCEYJSa^PRWF@eKH?`U;(1T}CZ-KCv zDg230rMuSX^)I|_nzRzz^vP)N!Z;`Dg_>@mVWJ2&r_WY~s@T@QCU+6_z3JKEZS;uj zUhk}kl6lkl-v}3t#M#BQ@8r=VPK?7F`A*SK@jj_^tRG&w2fikyK|XIXHYIQy;bc6p z`#C06kkWT}V39uS#i4X;d8}k4W;3AvTc(2^xF*~^9_zwwYD>N!;obaAm;Q_^GSkph zKIgl15N~JO1G)Tc22X*J-a_u0Y)P2fd21nU15N*cFfIm>7qwv?V(wmNly?D zs<*|rUN!|fZjQfWwb)dDm+D+z*P$Y-*G)(Kh$z~f3gh&dI&q@3R#UaolUMj0s`T`C zs~#7F*Nv`$_=TRv_lcO=B;vl}vL9^%<;wuqJQc?&^E z+9L$`S0p4I6UevxfW;ahJ5|UY!Rh|+9TSsFkd%HB zQh3r)+GQF1Razc2w@Ry@!tI{jd~MpI-J<$X$R4PQrg@Gj#~Yyd%9lJ&9@Zan7De}5 zPw%~FuvQQUA2qGS^YDPAiA3P8>Z83U%)8bhZ;jpEC?2v4D5>04VV>moHC?gy&>r*W zS^!Uv*3Sryiv zGZINXIOGUj+CPx2em1l@fYU+ZM4&rMLqPMS1Ey*OT={->wo5L|D_TmS5$P8nY2Ent z&hNclP5rt46fMLujpJchta|jFexk(k*k}yw;1RJ)baZ`vw~c-j{o=xt8}wWhjE4`n{SyLbI`KgKIJK!a+R$Ps(Jw*Y~(B6D@=<+(nCG_B&) z>Y(8VDCb?>dm1T=ijOclU+Kj3bG9<}G4sKXKCHuI7UN2W_+;sWHG*ar^6K$P#_pwW zz9okW1--%IrR!w3Uk3cVblYaE&%28*i_ZhHtdkoYf4`8h-;0K4r9tB}`m)LMesR|N zy`_3tB1cRivk_%BKxAB#_=HnsxJ0c1FYbrp0<-?(S@0(YG!8*p5h4*Is_wl>R4Pbd zV&a!C=a8t*Q9IwMr^9Mc7y6X0=jp)3#}M?4IVf3rS1l2yK~Xe|NkD8Idh=mfe6its zpZD7qseTk6oCSF=i)G?8YWws$Mq7orLzPPS85B!p)Og^19N~8rY_DJ(c|e{F+|?g0 zEw{=zm(6ICe)fY_&x|}}>j0C;HPM#8;t(@JGs1F~9^aCj@D}h=(SCq+h?Zc@N0G9; zX@W?VrjEMSZ_VScYDcLp<~*n;+z)#~Uy9H_ufm_9!=Cy6$nM7!O2qRP=w?8}6=tnO z<`A#JrFZ3p1a`JsZSSNg0ew_Y%VP;LvOZ#*w^AR!$Xf%^BV77vyx+F3k_z*BjPq@% zS-e{xd8GK!WUfJVqUc;weXYGJJ1zy_Wli#PLf7L@bjh#_h5Ufcdzep zdkN@X1k8I0eYO0YVkV4nxrAEU1tvbEJv>anV)A(dH$MHRuqwu% zFkhh>)ytk=KXOJp_4Memnep$P;bxm0MJ;FTb$Mr&e{Ha}s!gLZ5-#X7#Akl_n2;T{ z!wxv51I>jtM$D0M%rVwDxdRtHLS+_}do{#Uw&N{=1$|izaT*c#CY}d$-)*yaP3v-* zq5tapU311bEUrj|zxu=ND{Kb0!z9;qOR$loh_b!g+iA$2!uNOU?wpDkzSD6V8IL-7 zO-;<`;0E>bD+}VNIaLYox!=Z3DlsHAP5$2lW7=#c4?R951l)Vr!9)mLi;1=hKSF-2 zi+JhX_A3&1y+f~0vSKuN;+18A;k8WrtnBm#G^744l4Q>1vvq~YPu`US<&~`F!X5W3 zv*5x-MQT(`-c9@9iHE8ia}LI*?;VFHdX)Fwe;zarbd;L$!MMUt%U@h5kG^9M>ly_| ziOdlhI^MT2e-VvqY_qPMc;6*)_d~!fAoMc$35%ut$_?)C`3xUk&*4q=zTXpGjeDD~ zd>4E+YiOn>*}W3QNbeE;0ETdWV#st1^iQ=JB3xkSa9`V8GtW@o<~e&2<@h;u52|?l zO>n=>^q?*KEWGRK7k6ud=;cJ7>|SWtY-)s<1|wMLx5>PzV*YQ)8#UTb^bVTywBj2o zJpuazX5M!~17x$Jx@8%IU!*DrYt*T!M%dmnh*w%a;|s9o+T~ei&`Y(8xLaPMRp#_5 zp63A(eV^v5_bqoM_4~~pBm7qR8FeO4+i`vmJARS*nc(C?{C>!ZsWQ;Hp2NbByzue^ zi7=ak6;tQ{o`eppuADSPw47$M>qvV%KUFJ*(@%UOr1`N1Cw3(*W8TZuheIO%+r&Ud zC?GrCFm^iBD!n72H>zf*b3bI%NG9*gtkOfFj^0PMvz`Dx8=$%w_tA;#;>z#HzZN#< ziPw8I9V{l}VmuBloaXm^oSQ+LG<=eXV*mKVlKvJjf!2GmNLY53qkZ%UpVgFzRa0Xl z*h1#y4_VqKw0Bi4f`HfC&G8J5F>k#26z^TMCf4FwxL+lR zmX;A&WrERyjQPC95~J@(<*5S}@-$qv%GOEQl!?P)9h}-O)b9O=i=%?kNb-v^^3vQK z0V+1IMX`awj8VhNYNM{syjpWcN{Cd-Fl}rc<*#_% zOxwl|R-GrStU2GVgEqiQe#**^M*>%eb4sK8Wwg(#YeIQ-?v-&fl)VaWAp7#lW#mQ6 z^xf5VMg&(^deC;$uF3_&NA2gYgT}xqi4W@Xs>3ZI$sRn&#V`6lmq#o^$#%GEro+Dzlt+M1r2m3FoxCV7_`F=y6AtF}Hnf9`&T=#AP+$FXA8Y9je zvQ{$oQGzV6C6nVOFGglTLpNCw6~;a@RRgT|D6HJEg>fD7_C?kk+?l6+x{con0j4v$ zpWY`XlObDy-il;dxhgXOK3V0tr)3GyhuNA+^ml&QV=Q&!FV5Y@ljluYAxZ{)bn&m zXp2a`nj6VynyEUA!^mEWui7PQk|lvBmeR4{^>!wt%rqPP^vW+%!^(n5oI7X8)`EYg z_IN-zJYO|0cH!c9Q!DH#20Lahc!^|>-1q5Z(YG3Xu##v0WjjTBAp!W0^$3h5FXr5Jr?$!6*y97$u*4S=4Mx(!H6nWIC z9zYqqR63vVeD?ivZiaXF5j4Y}3_)|$>CZ9RoBUx)ZyfO&r;S~9sx@W}>&Lvt(bH6> zlUPZNIGN`0TcE1NE5EI=Xt5tUvbw{dcCPB1_Ab+bq=|3lco4ttLDXYC?PtNmfM1%A zSZEB`t!#)KLvw&TQuz3h+|2~ee858h`zN!PqVC#%_kZFf)6@V)nMuzh;~ zq2>Z#kelUNt8&K`B&6K6+|aQmj(AVpgYVa1$+SZPA2(B2gyCSN(o?y+cV6(8HNZR~ zkJ|V&JSrGJ6-Z{5)xGSs5WNMqd6_J7t~E0)LfIl{Y!-yoXfOuQs*)Wkz2^&}RuTDe zDt;jQ$nM+@_GTW=L=oT}B z#b(ZrjrM~Bg${umW=m}iC)wNjV*xVO-L#9;aQhbjN2B~})}K`g=SAh-@>0bxa=(_a zbj}iqTxcDw@q6a!P|K*|z)@%at0ked#(wuhkj`}^g6F8CP1KL=S><$jMb3Cg4AP19 zw}v;&Ow~su0{i_Cr6R9_W-qUm5-D$%H-u(;@u4H*tj0~Im)K3_W^A!{UDDvmT=56f zXAU$kNt#}Luj(jKbMAj{-+^@yUT$xX9AOpJ5Q}R2g}W(D;WQC1nI7YMAVYzlh~G8m zf=?*KjA0&cxv`wk@4&lej7EPVwPcy#G)b>gRTf$5B+cUIBEY4F6*Q~Xahuvd_!ZuB z&*wKa5R0UjNz=ZUW^=AAzqTFQtve|%^OlCs_HT3yUhgxzIPu+?^Z3xmfzfeK=nH9u zAYTj1N+!>RR!h*>;P+s$xlf~HfdgKTfa@fs%(88U!sb#NJsXnAxWxLj=eQ@9^J$K& zmk@#E<@AvdF%TtcXnK*UdDK*pBxWSx^`OSx-K$@+Y z(bL8UJCAW;f}=xXve63Kz3gDJILOB^oM#n!a?#7w4v)~i(eGwvQ0K1^9WM__`dr%( zBAx5<`D5Rh%YpvOXX9)d{QSAP$1R_+HKp4REm=HnvXYO@gOFUS4JclS9eBj$P7Y0} zA75g@hhDB~h^QRnVj40DKf1q4hiymRd5j@EysVD2Kj1c^7}~^W7g!G zH?@rz7c4?|eltDOT2$_M1H1|0eZrz(Xzpp=M{XyHA1GikF5utqL_CT`mtYyIiTSM) z9V7W5X#MHC< zc~kqZxgHS>A7Zir!OUj$`dIpwPo1_FhRJ=vJ#hjS0i}Y}5TqQ-er+)VtTBGX59MG8 zOR$rViceg829JKzwnmT5l(d8vK9n};B8%O{GWndF3+{^CF&=&G3wnJzK7`-SX@tG9 z-U!vF4~`_`xd@0S?JD6C>;#%~AfLiy3X_X>C5>!S>)o?wxJko8BA@MneVX2WJe0pq zGo0l*`5YMF?|}cf=^{jy*8p5SgiTAUnpeimA&(*Da5VK`IepmABYexRRpMD;fNXn) z(&(WZeyvZG%A4j7_OWkco`;iKIZI%SSSsb@*)misT$SfbaAF#X@Y!t;EGN(3xg*27 z3Z?aAGaGmHV^C|Az1E$`8z&CMA|8KwQT@X@`E}N!qK{O-L7+%b;6u=d$Sb^6_NJ`V zRYwBE7o&xF!`~zC>%q2+^O9auKf{e4b-p!4U&e85X{1kjD)_a5{c>qQS za3??~`Eta%kTJ-$ongDFU~&)P?Zt1O$em^5U^OA|gYPNJf@)AR$7{^Mi-5fg{a}GJ z^L-ybmL4MRiFf7YiHFut*;3wy(+agKUsfkdGC#no_^-(}SbtDcWsYQfSNdpg(g?*~ zVmROaeXmUyzo&?-^(&2&`vylPRsEvvxzRyv3vMulpfZkY1iZ!s@XS$VX+c zWkJ$8eLDjri}bqo^&Ib!Y|6f4#f$?V zLHV6#Bk_`MfjIr{8vV0O0qpNPy>b?8MQ$D!tr}roDICq$N`7cNkQ5WKg~niCX`rys zp^ARAof#JB>w?CR`*Ga@80)vd+9d3Ny67q)5%P;kb_HUy3fWqdMI-zE{h{r_pU3@>hh zddI%ITIEYx-$skXt0Gne?eEX<1Ytps8eY*wUr+beXrc1oWS`=ZHh^lJKqv5Qr+>x~ zXl2=)=@!^pQbmV+yg-OEUnxbFT_yCVC-1L=uazlp0TBK9@YcZ*yi~I$rR#iLHIaTa z&rSSzB{>v-_1!VgUEcEpM0d{4uN{Uz`UUu1(4*YQSw#h{UjQdG>cRhegZjVYME#%S z=|Je(9cf{zRa^UQG-R#ko^9JO=LtpStF)80?YCUag;4bC>EB(!r(9hSnC4RWRC4p!~D3XxPFTM)t)})V=cNlhKN-8j~dnxLJgw0Rb|G&^W|eH z{geCV?d?@BMf`teQS-T=BD;^1_m1PJAH5VDdOzXxoA4RQP;xVdw%49P*VSyIApUpSa+w9d8}CT9KYSMF{2uZ7C6)B--#iAOci>(+kQIVbRO%Rpkbp+9;Pu0-Wc$KHl-N1Ct zHp|@_qE@wTSsu9ShU2?3=&8?~Ydr}j$B%cFX8oAh;Ysc9;1y$Y&XSXlWVsOFXVa&1 zysa;~)?SRCF1%)EFw5k~Cs&8OgO_}Le|M;Etmlia%m`D+`VIH5UMo*=tEYZ z5vaScF<;Tv_ZR9bY8k~xuXOKyO<7lICh{$tdrT+u1h=^~E|QsLOiW#JTm?>@+!}ZO zF}2T>OXXpWLKmF9o=6-!B={hOgP72o_yvx;&JPzJ?e!S;>2~WOP}O=~$>wB!fqUx) zud=R3dVyl;QoZg58hf>2uOSMn?`WqsN2EiDJrl=#Y?q$3v{xNJcjoV&yU+7=*OXo@ zro3j|M?cN8w9}sprns)h%v}RE6kw%P@Zil)NK{&P<%<@^U;a!c2hA&lA9eH7>_gs~ zbO^A>P3|AEsE4jH;x;s^f5U&3u^E$rGO8*mbn3^RjzSFeq>DqB1@UZ*d_yW+eT*9_ zbc!(;jEj;1_E#GQ%#yC<&PWHza?imUnE{)dsd6ic9~BEp8*pn{=7jXEz;*rUUI_a~6#gjf{Q3DyQz1n3qyB`Mz)h^IEW*+tRlRD|STE4v(nCBp zI#JNF_LFe7rt;QQV;sV2WR?~cBDI7Jy9Iiu&-n$|2X}jQLIpCjFV?QAmkU0WWqxLv zAHmLTJwnmDoTGiNIWN#}$@^$Duq&in!2ehKDfi+nuns~AK(8U_9Jntf5CjwCM|Q~+ zO8G*h^8wW776>)D$$@OYY`q1(Ly)E{u%YZ4!5c!4_DeJ-KPvCP|Cwy5@#TN8xwr#l zJu0Xe4dQk}XV_hpJFY`qq$wgV+W(d(G{la$@%kw`udfK*lXx@|z6n%+ymUoaga)zq zBfEEN+Y@enz@G7po8Z4sD2g}UyU-w!o}_K{Ei>e zLmBmoD$|X#WrlHIu#Wf4>t(TE?rE^=&UEV_S7-IQG>3RL3BB3JmWTc9*XhXM-XGUk zkzJY{D_|v;%}w8O(L{B-sq`fUpBWm4d@i1(nB?-}sZm901ovtGUoor4EOA*vlhPP4 z#~xXM(K~ZPQc4f&FHFBHIwA<(p^;<3T_eHHRjm0FteaPivh0XvSbgX8 z)-$+9xa&1h&Oj(Qe6oL1^*d70WeGNFjtSXz7;A@dg5c1t*v-||<4v`p0S4Q`*T*XB z)l$rALehyE+I9>#SE)e=F{+Z)H%rFsse6~%LIU@SA@2C7@b;D5Hf*#QS}1@lKZmR- zBSrN)vac9xph$u^B=~Y6w+0=n6GF#0zNFoth1PvY88swi>R*!IkVCo^eF@OBy7?K}azQ5?_r)P>pn;%M30rdnB@1Huq#2!w zgZq%>loHegT4&kAF<)0cRYbq$snPj0p$EL^%pS{IfC2QkoSOeUKWs6gyZT_*Am@Q3~$%s{qdv2I956bHfxX~9v6&yyB66tXJTSF-|uD3 zCNIjz{Fp5Hjm38>ws^U1MTkN+fV3<@hrXAW!dgtrGpAEiBHub5Nm4{F!B`uS;1iV8 zG9Bzp(z8rP|B>o(bE)WoTis6nwZWP2{P1eVhrG9OX1S5PC-T#Og&Y6pWS?Rs8~$d+ zR9(gx;4EyYZmH>L4ppglT`X`p9rgebK-NnT*6m1j^yUYr-uhE*;t~wgp)G1fcFdfq zy=1$n`@w2~?5ggzl(hp8vFLT-!)Q^pjhL8FY#5HGVXQOEGhB1M$-Q}6ZE%6o$gxzv zHl;|H4^$J37KWuP*i(h&IeXs3m7NtcBUbFA5tfE)HZysSP0J6li~I2k{G3)Dv61w! ztfnbF&Oze?TEn{9*hxX_bny3c{2$UZ~F0_*#gH7(YLs#)x*Ok^FpH(zLxH^M;d{GYKQT9nFW8<^p88b z#*t@mxx7E|D-clcrg3vjW|B5!eE85QIC^p2y+H>yF>?bL zb#_nlU5Rc<-{+|Nab4+RKR?SeN%FrD@*cFoIuZXb?Ns&8vXx3HU0;g`!Cq5-4I)Qte0?52ZVBaR`e}6jc+L5PS|+RDn39ek!smP zZ2$e~8u1X(<7N(RTC|#x5Xx;9J%-L`X1m%!J^g+$H^Y*FvUXj-j-aBt7RxATX~h;iDtfwMvix2yp@EL+w8AWMFbj`V{lRz77XkbP1A(o0S$Zo2HQ!rP`oyq?2>3-KJk5D;yaJ1J#-Mm za1lclTCGXLAGGAAjs~mBiJo^}r&#Ndh~#X);Wx8TR6cj0xi}YEXb*9?@Nqb8xIycS zX*XMnPOBs2roYW?J!qd#U1g3fE^yLPm(G@&&_{yG<>hnagaB z@d+j#90VyG;;w9lnCnzym3iwP%jVf^obgy!&ks75t`IHJwwU^hlt%ewO7Ax+0 z*G0gKRs}<-W)b?@U=@l@9BJ(Gke%uE&L5bGhrZN4v*DSY7ss$Y@wE zG@Ph>Xceao)2m!P>Om+A*M85|AlbX)AcxBUqHdSz^lfPZxE_RPcdhrTY}!MzEw$(_ zNac8tU5i%%7AFepeXY;;1=HYWEfSv2!?WRO6raqc&OVu$XykrcmlbVSGv3-^-8hWi zOCvD;U)$$TN=q0q}qQTGqN@M6uxlv1z8oB6a`)Bix+{jqN z*Fl_F?)c$EB0?R2vntmYDvT4ss9V5tDZpQ3%4!;V>R#8788vjSnjd&Kjw6zLmf$Er z#H1bhFmC?@9b3}RM$if(rl%NQwC8|FTbl0f)0WbAe_}VpO!}S7MO|(#uNLJJsj0KG z#=~BBv4OJY`zFfRT-dg@mW{Arnb|`5LP0PAb9f$#PWjvm9h%}DK@z1R!TWYW#-#?F zk&Cv}?4Ocj3<6973_|dV0Sc$zZ_!iDq#Alfg7&rqwx7^WJiG-?4*dGRv%tDQ)g#DD zGsv<@JKCiA+b;f|&_Xp@o1ZeiM2FBJn=G2>T@XfUFIdpQk#2m{2V$dB9~5~uZZf1>`l%dVK2J` z*!BKTQ9Kv>OLF68fozPe7j}J02mKdS>ilTtkY9I)vSz3t6^7F{xD#mkw{#iyPmgn; z{eP3kc`o)ZGuRLM2ZR6rSP=h z`~1ov1QCaKud=9+iNe$cA+rRIp}`w6&wIh0xB(z`(N^U?5V4MDSGW9_^y9LfY|`|- zXX+dbI+H2#c-dn8hhG-2-YX;x{O*Z}APrLVKCgra_cG%&O*^(cUZY3D*`Y+nHnWF0 zU#V*|6A3D;;xy}ojg=DO?P(8GzBsD4x(i3%5MJZNBCL)r7aRzC+@rs+VRQEn;xDh& zzN~_wf(w7E7T8XSpPyIL2+K36Bs4-=44(jpM+qa|03vT$zvn1Aiw}`(jm`}0mr&%Y zs&9nj9Ea=58|;E9ZBu#yZ5L0ydEFD>PyO>GIXaakUTT7Mr#Lj(OXsNHcW4cbceRGgFZlFKJxT zXT&}`yoITO**0EZUte9XW~?&xAW!paIA+OLwA}-cK09`dY{wJLj?z@LE!*`t*V|)? zAE3^YuhaQx(LOED9do{+P)WBA#M5cwbvdE)p!X^~W5;HPbnCxm4R&`|&-HtGSXn#z zog?n2?5gHwab{WYw!|x+dpwE#Ofpk(Jh!UR+scC)>KEEeHL9O$FYX|4~A9V?UG7ytDV`Y$E_!FxvJA>Di1h{EBEIr8G_xbTwwI+T7D< zZm4N*XsruLXEeC~l9-VrnL#RMKQ^*)p=BBZcUfbJLZ`EAw8-Qlstz|DNzH8ZUdn$R zD(VnW%5$O^e2&Q?dyvJgam0E|!P;Qj%RaL0%FGBmsB8p-iEM_~A_NF~f`{KbGdw5# z6#Vmry5vcB8_R^FzV-y4{Z^yG@suH}()+Z98X@e!ET?hlUwE4rL1LMXUHY5KGDtl~$Y^M9$ z1=LZN>>(U-yBKT*inL+AAgqO<|I*%>N3*qWaXiJvtrD%$Drwpnt{PuUC_?BhrKp*T z3az;*YPdBgsn$HEiVCU-YD|lWnHt-o<|&3WQB^J~v=KG*<-X~!d+&Set=IR~TkHOD z{yFEY-}$Y*_S(OFe!tKDZvMmuC|h|aTsZbXRswo`e(`N?Gaj(LMU$?WSJ0%tX?M*&SROLGlOm5Z36`3%gajY%gcUFYTy3~Y1|&~xC`B>h+)!##EpWX(T=mUJ zyYfx5=E1tekDtRYf4togFO@L-;(+|HW@?L5-ual+tq26AN7LcbiSqJ1J}js3wKT5J zZLiu^Q?IJd9a;}he*#5mu_bItH`-kypeaJ5ANjJgvp01>3jac-;%`+mf`5UQ^5Zsr z5-5)g@^`@uWHrHfeBusX>(iidG`~1*x>2HJ#Tt8RkcTkjn1SSAO;xZ&y z0a?9SWumS-8lIH2>B&Z%Y}65ZW8p`+Y4cJo76-AwXEMZ;eZl?V25J{v$g}16evgs* z8XL{>wkAmBk3bAupVe`KL*8rFea`~`|4G26C4fbpH;tuWI!$96qNBl`*TdBIauf>p z(pEeRmppFK@t%t16o<|3dQVp?^1~_@4xkQjG(_&;qTK^gm4#{&o+-CAIr5^qH!`d? z#YlS5@_AgO7$>N&$yqXt#)zK}>;&`veDa59tni|xE#DyJj(Oy$y;=IzzIJoJ8xg=W z_B#(IH}lw;$6VB| zpyu{bzjCX!Qz-!LrTi9-n!U0X8F(b|Cqo$YP=;~Ck5dMN%OdG$x8iW&EJUxuSd%N^ z{^hD*oSaXq*=b*C#8$@)XPrX@jf{IahX!Yus*Potz;>pbSh#XS6+Bd$(_s@#4nsmGO- z`EZbDlFgFp+ds|ea*!>}^(>(e*N0EBe#S?T7gH~_82C#r>KeJgH} z(Gp*L$*1(%gl3umGb{gNC%aS=hygx?P6a~n~K}YG(I9ISC08zp_ji#*W_bi5lVMkfi%V;?K4qw zPl*yDb3UnozU&p+tu)2ZpUXnt5_a8+JKzTZXA0mLjdgZ?oKHdR%6^|MdDvU2(yIVB zJLEEYu{YqVvLId8S4MWqObq*{v&%=#c;c2EtG7B7elYYpC>L74vNhG@dyVQaBM)hJ zt*cEsEMKwEb2NqkaT0fW=WD{IJ&2KLNrp3Pz`CkV&2J8|d<8dmt;>6>))f|?PByd= z$>cIGGI1dpzhbM z;(e6Lmn%6xg^K&+RIXnbmaSEPA$Kpy*P)QDKegVoE4}~Sc+>G8cGQ^7k^LDtWK0G# z2Cuc_r%b-%i(_XM+dsDDlDP9u7I>p2mJ$5SOn7wB#F~$arDDL?y;psK<~6B{{hKi{ zW!!Fw4^OYIXt=KmzeV+S4*z8DU}VsWDwA{ee2S=1mKn91uX&V!TQGvCT(91EwNYn7 zuLBt|FR%A^XDY_#&nc$4m$1TBv=Ev`0SOLuEyYgUPM`{wH+66qsW1u8&BA5vbTK-7mi6@?tFP{!P*QUi4D1QZy&y^ z%9ve9jE+)ttN zJSn(wJq-$0d4&m9XmAhs*UM&+8x(q4B0-gG=XiJ0`9I0aeq39N+dqUD*vl zMY~WAfvq&(8uJw(-o&O^tWGGF`Cu>s=@!ejhnJWGe&ge2ITgOD)P}6P2e}<$yh`t6 zhZH7dewUt$DsI#om^v)%lD+-ltlo6%^TTLv>-v`n(e8UzfFs|8ctqb_fN2K`B(rTEE=xJ#A;H0U4FsKnq zid(*J@}wbk-!7B0q>cZX-~h=$+CiC_$_gxD<%K~P9H;dswkQbdjJ?VolhESeBKiSk z-+G(xkE^N*61Zo0iN}X9&b=rHQ`3o$`iZ_OObug=?2x2K``Fl@^!?8!C zEI{IC#6~#`h?nd3vTm{2I1r!3XkYF4zQh=53LEd42DNI@C-Y!ln;~=O{Bv>x+_B#S zS6$aj`MI|`@d+VmITaNT5!uqA>cT{Mx6D&USyl^#3md1pIkC%^X&IVq#;8UuG9Wbm zJZV+VZiH5ky86DZt|}mE*nW!3hVf>*&E4wUPVE`8?{sbR!zkb_k;-|@up;u~*R zeDI=_s5oz~;DfF$*}LQiZHZ6eH;IwSg|jF!>M6pL;hBNxs_5?`;JPr*E_sXi!N)EK z3$LCz*jFy9Yl-iRXWp*Y*qKExGkS}Nao#W!aj-kY@l&H_yxr=YsT!AeZpe8Z9WevR zHStL5N-ptdG%&jDu@nOqsDX}u;uwUvcy=n-uLHDNM-p;S%We;b+`S;97i%xy>5}*a zth1}lYNiduG*ss0d5)7Q;cGcZj{&*!yvH}Rn#aEaAOZZ@1&?O@qbvyLN{DJhEmFIV z)vUt2pi4a(=q&!$nC?7?9ik>VxcG&e^3km$A3X{U&&5oes~SRNlp;_gHQ;FYWbP3X zIK~mRsZAv;eR0H9i)nXA^*wf5?a|yHN~}9RJ-V2z#lo!T(lPg2PTxeUPLTGLZ8W+% zpnZwOCZI`@3DvzO&aqa-w@V<1Ln$-9k$(+=)&A9Ei(fm+_?3JAXrl2e&;ApQJ2?M4 z%J|<_^yC}a<`?^N{<2f^O~?PsFV#1+4?7+Grt@bf3g2}6zcrEhM&J0u|9`&$&>#N) z&+PMu|Nq`P#QEP4z4}J6;g9(L`@a8I`~2_ypYtVJC1|JHQD9d=g!DESXhPR4&bi@n zdiK#^gi%V|ioTAxKrwzBwSS_3dH*XQ-+>L!ht065fBYUNyEhOVPAi3bn0}F(Xx-`` z_zDnZ^QHf