From 1716d656c502d82eb007d5547ffe925ecc4f9b79 Mon Sep 17 00:00:00 2001 From: Adam Tyson Date: Wed, 29 May 2024 15:28:23 +0100 Subject: [PATCH] Add brainmapper example script --- examples/brainmapper.py | 36 ++++++++++++++++++++++++++++++++++++ resources/points.npy | Bin 0 -> 103040 bytes 2 files changed, 36 insertions(+) create mode 100644 examples/brainmapper.py create mode 100755 resources/points.npy diff --git a/examples/brainmapper.py b/examples/brainmapper.py new file mode 100644 index 00000000..c8891a00 --- /dev/null +++ b/examples/brainmapper.py @@ -0,0 +1,36 @@ +""" +Visualise the output from brainmapper. Cells transformed to atlas space can +be found at brainmapper_output/points/points.npy. + +For more details on brainmapper, please see: +https://brainglobe.info/documentation/brainglobe-workflows/brainmapper/index.html +""" + +from pathlib import Path + +from myterial import orange +from rich import print + +from brainrender.scene import Scene +from brainrender.actors import Points +from brainrender import settings + +settings.SHADER_STYLE = "plastic" + +cells_path = Path(__file__).parent.parent / "resources" / "points.npy" + +print(f"[{orange}]Running example: {Path(__file__).name}") + +# Create a brainrender scene +scene = Scene(title="brainmapper cells") + +# Create points actor +cells = Points(cells_path, radius=45, colors="palegoldenrod", alpha=0.8) + +# Visualise injection site +scene.add_brain_region("VISp", color="mediumseagreen", alpha=0.6) + +# Add cells +scene.add(cells) + +scene.render() diff --git a/resources/points.npy b/resources/points.npy new file mode 100755 index 0000000000000000000000000000000000000000..de886a2bf58628bca2f0fa0bf88b7607867278b5 GIT binary patch literal 103040 zcmbW=e~{mGeJAjbG>4Ii4tjsZZXY7n$piuYST=#Db3MHV=f}>Whm7c zBc&KI(ikHm?jd5#MO@<+BgVKw#BB(;d>SD~b9ALN6Op5P6uC5$YK~@Ta@qWKQ-_Q5EpMLv)eB1JOysEmP`rrlET>JiaufO1uz6%x) zEV^KR-vtBjUB6-dyWaDk-n;&qYdifb)_>sI$?o^Beb>5cC!6yYT)b$}{JuB8X@1{_ z`u>go&Z#>8wmnw=KYHtPwDoIWm;P%*%l1ey{)cI=DJcD{H_mSK%B;iZlW7~*kI!#s zoL$x*ZCXG7UdG|HC~fw;69daAGft5B}`=g{)`CKZg&TPNz*D`2Kp<(VrgLZ_2oN z#_2(>_Op?r-#T$ZkH5~mr$X5Q5BlS0-1?u6Uhw}w_!$4kqRrkfr~f;l^klDjAI>;A z52np8^n6wH(EeWL(S!b|_4v^fe)O^)|8ImZ|I&-xof-e5Q0wqP;k`Ta=!=TKv5Z>> zmj}}S@zBzb=8>_nj)h{kfoXDdu zKbZFik%NzUsQQV&_%N;?Kl1RCNBE%X2tTst!stWKC28XiSN!=)8*b##2afc%&OCac z>QY}JUml?JzCH8srH6K@2i)+XKl${c?|&%x>nBHit4sK(AMms8itrQX^n*LS%!eOp z{0)U(?81lr^t66m)|qD&Z0_KXR-yk3GgqTH0g1cw!$t$i>HeZIs+n zKXw|oo*w$~LCvE_X`g&T`59k&;Pdn&b=CQ&pB(-`^|PB?d}cIthfT#l@G94vub*D@ z6sM*A+Vr&Ee0b2$Jo5CT__0gdI(8T*&$u=m>`Sk0>JALmKvPftKY4#{>JF*s!S4f2 zJ=t4TtD3q)y7Hx)RU{K3O{iPFYEs$_OOF~__2%r{0&$A?7^2j{bx0GN1Y0PdQBw_9zN#LA3t&j zntF2e8NB(6esB>F__7lp^Q|9f>PfCu#V+g3L+MLD{PE!jcHk#|jpK)wIGsxT;!7X; zi%0sfk39Uyr4N0z$;S`g>_f??Ke+=Gf0p=@V;wp8(O10vFm?|#^(5D-`lqz% zP2Yj0o*b<@ zRKIoPIREe`Y99LfrtXO8)^qje(dcVj8-Dah;R469A5LXlvzwpkFD~?($L@iqp49rx z`HXz?*ryF={Uu-VXntQ)ci2~`etg)&UU9ANs|WNYm!8(c17G;-C)a%Z@Il2DK5!gp z>Paik+=s-0Izf*0{0$%D-k7yaSSF8qvZCD%N1(2@@v=%LQT z!8&;a|NZd;iVq5B`p}d8^g!uL4obeb`tgGse)PoGJbaAv2RqHDFZ@wjo2N*?**LVxLR zxUq{~+VsVbKdcj%>_*AaF6Yq;fBNZX55Jg)k8$hBft%-Z+Qw0N4Oe*btMfR2kWVf= zw8b-g@ImQ~PpOxA`aQQ1fBf>bN7^_=*<(F@^z#$SulQMKKD+1vUpSZ#FLu!vuK1w% zo3AZS%%h(+%3jaSNBmoSl27!(-#EF}na8fFi<&kGQYGRU;Wzjgd4k^8`;Sp?&Pd@aivY)JA;RQ_R`Zj{V4p*Bj3I* zPQ(+v&BKQt&O`h_A2^$bAN$OApD67y4o8$e#>t@{eA#bZDW9J7VHb*@_3{PPPY?Xa zCl5dKtRt5_^c5H6z>l5ySzq?kn?Bn3O(h>6`qRgJa`8otJGbG(e(_Q2>)vWUJH>IGbGP28J@FTL5TjZURM{`flY(vM#BWH-L#!2xb4xh2K7jEldDeIE^l103-skNxyQ z@i(9T@*Y3(@zI70KF*QarGEIclYig?FLKxgXY$xZZ}U+4i3k1Um;R#%IVC>is@wRL zcEF2Xo2H0E>&d|%KmO$hZTedWhYv;$KIjeUhbMk;ww^xx1_wA=PriC&oq6(uKH@>% z(+3~8<3n%b>?R+sa59g4_L*lrzT~hI4ybW_#bwElpWhdJ-x*2{T*W`T%{NXz{Iv0* zr*Zo5zxk+n>`>2*i%0hHk9^QiPkNVnz=QuvKHB_(mT?6K_G+8Q4)V#PAIeT~W}g1* z;~)Il>z;1DxPl`+;7w0@!3#flIVTwxmn9C?nMWV^nqS&auToF72(8d>)N9?9AJ;>1y7xedoBfIb^ab*WePjbW$JG9>!{^Z#g_=TLQ z?Bs8Duv?oR^hViBU+dt-AM~^i-#0Yva~gi82Y%+Wk00?TUmIWR$%Pj?Rt7JAp(lRk z>4!hQ^g{Xd7sFRxm2$-|KF0gAPMe+VrlE>6s&4|)73pW($$`l!dw zcjn`Zk9G2k-p0k{?*xa-L-Aub|7w%VZzwyhC#Tdy+j){++U$ON^dZ;%SKE23w2!{< zpcgywB~SeG4>|n9&t*TmQFfDSzJB`tM(h$N^dKMA&pvv?i#__>R;-`pQT^m zOb_$4*<+o&buNLsbC>;?J^1T)ZYBp`>&=Icwt3q0VyF2if4~KPzZ$>bM=$p3$HzM3 z&OazU&^LxZT&%;-JnP}eF8XTI$2$6IJ4f^vd1M`2FUh!d)^!U4>dkLdXrPOkHzo!^7AX{H!e=_H_k8gz~8v} z{A;|llYIWNzlzHeFZ@yV*?&>~F^&)VrQpL3ajGt#3=Zt)KmIh1KmFmMKAE>G^6;?^ zf4Im`dcX%Cl%2-a6@J8r9P{y|hjl1^sQL*vbRzih6CBkm^2sBgKKjk04}QkgE%F8n zx!<3n&7bffUtK($b@Gfn}s8Cj7q=YCik$XBWBjWVdzVi~K#|OE2^2 z%MbW#vs2xHQ;EZ4;ZGjC*ePD|{ch$Pr$2k>p}w+Toh1*yL*YkHddq9_;156J+Q#9e zA766GqhAyG#_cQc(60`eKU&~so_dInew2LqfgiioPxAR04)iw85Ae0#I(q1blXco~ zdMI`chw>A-=F?kUQ?HC$2M_ks8-D7n_@OWT@MRyI?vH--vW{H#n5XXPC%=>{-^_y> z${uZbuT4*FbwK>+FY&cbeKlXdb>ySw!2w?8^M^Kk+;DV2K9XYQHE%l@ieyBM6t*l!cN!Y8n=eoBl^^(vA9|=e+TuVQ z8D}@V$X92Kld~{(&kx-bJBAB;tRt5^@q`aM)ouO!#cuq_6&Kd)zaV;<&%g8#cjm*B zAMm3ue%kVjUik5cd2^x%yXb=+$~Zf%7oWy^i+TLOuiEe+U;A}g|C-R5q4Ywn!>HKb8IbDNpdB553I70kKXiBFV=?-eAQ)ovTIuAi7)ffI^$*B(Er54ZQX_!yyZJN z+_Vjj#FY27ASy_AAlLdic_pUiw#LzVRock2X9|IIy$C*F1W%M;`O9^NfCa-xB%y z<-2}(+E>`Y5BTt(Jd%gUVlVl|QR}tYq0Nu#AU*Zd%f4Y8ANH81Z9Tn=>z^6DQR_;| zKh~kvl~g>yrHnIi1V8@MM&YJiQtQMQzD?{>XYsi!aqw~|Jn0Faa^0bVA3eyyZ%^jo z2Y2)2rG9eIlJDX0(~q)eIOA|Y$=4=NdvEOL$9ZYP(YSn6U*VvCH1f~SdXzl4;5!u^ zEclp5PD%Mq-m>eZhuVG7I6F{rh^~%Y$dh;4@`SypbvMQy_3=GL+c>`Bhdx#2 z%eSTRv-$eTMfIC^PWZq}|BCP{=WCagzNmdi+kE;P7tiImb>^XPDk=ZScjNeKi&yQE zk_*pr{#C&XU7of)GhhE(Gme&g?JM|MU$*t*Tdp%7Wf#4);iQeqSL;hkzJB$JJ@#wk z^qdv@>8pKy`Y#S$JVjeSziOB3$b&O_N9qDSUyht7(yu>1>^kPPuk-Q!37 zDE!EsN)K_V-kN_=^v55?U;I89eamrt;DnmTKK$52&!O<`DfHk+e$z&+<7fTkTc?ex zEBwq4FYa&8wes;_qg$hIIS>CUGcF(Ce_i_Jx%sGh&H?&MY971Te>!$pkD7OOYsK=t;4U>XR5Y!#_`3cY(E$M^rP0J z>O_f~ez=;C52}8k>NX00?IY0(B^M=6+qx&RuIyKz%v0~oGkzfJ)ph;m(_eqtel~e! zy|(qJ`T`%g;irC(W1VsB(jIO6=%HU*UD{XJYg~Oe8hhj^d(1OlQsd+pr?)n}w99dP z*lnIReIAdV#!>vH8aI!9y9++r)@#duZR_F2f9f+kjE_Z*Ha*QV&OWrnlm5n0>+z$9 ze$==&J9kDu{p{2(sd4sLPe1(+gfD%x)$wf^*I&xfZyveqR%i92@n@F)l9qOre6_`2$^XLeWgq_L8E3b7GYWmkp^y4tUop-u@vlt| ziqBb*qhA|;^R($j9=-LG$Ig=CgOW>*`TFral{g{S`qxK))Ov09;Dh2f6~(_C-xWRd z<5yC0pU-^pYMy>^Kwsl19DW!+XxWb+iXS~u>-p{J@I}qTM?cE0avr`@(Q-b1?9_gH z^idZcP1}0%&8H_m+ScJiFKzU`@W)qsyud|2J&fZ^zH$7~JHwA&sCX*d`mIOx)Aw}Z z-}v2A$id(E(X7Kqo1G|oZVg}f8pjtN=Fx|~sQw$m4=(gl2ei%8Hh)vrPbKg10vGG9 zFYv)1ACx?8>rm@fh95lGX&pY+U7h*n;iI2j))}{6Tb}HUoyPS~j~xB%rx$v8=CMQn zCFvjB*Y3~8$=4>YKl80a@jox)Zw$50xcT_vSB{tK=wm(pF*EJn(3i7*TH5B5|76DX zA50s)H|-lk@zs7I{rg5+J(s7wIP~Jst3r*>N_#3gFXL4~pNpIwp$9_O6#ewsn*KXN zuPf&1w|-eMU;mZqN6ouA{TGF92%Q}|H}vSYT72}E)cBIj>nYYfp8lsopDieU#?Q|B zZJB5N4lUZ~t)cG;JtuTl=*a!8+=FT3vp4N3^g!lq z4aIju+DGqe`JA2hWudc+w(*|y&&ax`Le1Zn_D!L;hhA9Fv(iRSeWTUm`Ov2eI$pGQ zrCri3BQ2lpp*LjS%FwGr4`=+`w5J#S!(VUtObfkjPuo5bx;S)s=!UPglz={|&+UmgLR6;J|;@?@0X1 z!!_ILs`GCobjO$4_VPPhI`M^;4u%d7we4x4<6mssC)1t?-Jkv=!N1P>jTy(MKl41d z7$N_2E#LDpekyd;&bD8CF3S8nGd>#ryVCaDWnI=CPh2m*yXB+*`pjRFd1!C=ZA<_2 zna5ssTCcw^^B089jh^d1TUVWb){&#VEc3R;ALaOropon<#lM@P4_x@MYyZx=Grbzy z(b5IULwZ=hF!h8T_*aP|>w7bg-+SU;aif0Xvvzwc_tbxFDgBqr(>vOJdMru%nv8GW z*^XC<$F0Ffzj*5XOgnFJ)-6x`z>hws?rP_ahr(fZk`-eP-nh4vVJW3oyt1?S(1MGjVDgkzdH7*WAL1aoW95(O#1}8L!E2vQ}i3n zeEPBPVC>hfWB0cBO}(ZUJx(Of?C;j|+sfEI6usa#5&QZQkNndcxq}%W3jdzOS%2~e zp3~FjH|IFxZZKp$8lm1#kZAyRFq1e(XAu{a+mS$KUKn z@!>CWOMU1&lKRf>>8TgmyCR3)_{yLD;M!dcc!@)Lh-*0VgLz}gCpfZ4{)j`k>?-OUzmr1`^TiST&0~-Fkw^TyGI=Hb%;P8g z;0G7D@{f2!;Uce`OVls>4BY7}4)Dc?pPfJ0QOct~T+L%=PvV(e{u;cstq1UghdiYR zKBXLat{(Fb{`9wgQ|gs<_@VR`H}+F}HYGkLvVZc6Iw&9Ea60!n^6?WlC_DLqeE#2% zyq34(pt7IkykWk22j6*_XFsF|x!UxU&vpF6KKk)Lf9hAa@RN7q8oulxUtH3kKllsY z6R8XKe|*T}S9L}`=f6|QJN~h+h!?o3^YoIB_=wLs^%6h);mi*4&0h2QS^SpcY06;-f-*sFXvwNpUQI=>nGw@ek0fVp^vwD30L~^w>qmXkni~p`{ALk@DG0Ei8uLc zT)dDg9?+4Ti@N^FeNXh~Lqpx@%U!1|qJo~HrsC>h>8;?aj zdunGJkNDf)_+7mtM_q;+yzR^UKrWo&A@9^z_Nhbs#;^Q`4}9dU^P6~t?|AAFeBr$) z=W@?2@b&yi-GB#s=%Y=Zd=Ss-hC0b^@lP+*J&ym_C!bMvIp^>%zc`nv-}I4R>V|s4 zzi<)n?Bk#Q+%Lto^N#uUW$|75ogVV*gnNGOf9f1R@vC|47YE{4{NwAnm-h+mujJDc zKk~${x`Hp9;0YIg;D31FBd(Stukf{Ad!FY4#rciC>?Kb;p`PE8D~~g`k_9_v)=53^oFOn)#hh7kPBDq;W!w+{7nz>imy7mK;6zg&blt& zoM+TAes!;gE4$!jp1P*~yJy0yFZX==KL6mWj;TBJ;|FmBCv7;1UwMR|eFr~rMIUhh zcXfXZBnA!3iG5_vajFA5rg*#!uvzxYF1DM_>K$5s&sKexj%6 z^qx!eJ9+#JN9)+HKH>|1{?^Z4^Ub4oU+RW9x1ZOkAM7x`Jo`c4$J+Yjyv2U?1P=5i zPruJm^vf&pBp%E!@i6Xl1~{Yg+viPiH7+jAgAe)Ssc-DH{#5D>yTuFK=uJ;~CGXTz z=VJJZ19qt++BfF8xqaT}bo`=Dj%5F^kEp-=*_|JM>UW=-mFJ7%fnKHl_6K$w$G`iW zKj&ESU>^L$EqOj)#a|sP{R4OUq0YtdFW149T>9{<{IP%Gryhw{pAY(6mOpkSKFos$ zeZ&!c*?~WOoWJogZ%zCwe$~6a)cG!M*{A!mzsOho#i{rdKjI$W@z}GxxL@I`zRDwd z$|Lxz560m|ANZe_=kMZyKJar6g%^L3Ll60HJ-@4i>_*`s4}89SD$l#zAK`-1(|YGh za`=gy^0|X`=Ft=GBRRKOXa6zI?_K`MH}w_1L#ZF;SwAEDp8UK#_>;>H5g6F>Y=>hJz#zh}4k_C@DX?`L?wr5k^#pY$S^f7uHk z`iV>9{Czrjh-2pyZS_Qcx+n4zyXxSxEA`p?3id6ylF#4lV6W#2o>$m!=_`Ktb0qZ$ z4(Mp!Z=fF>tP>ydQk;nka`;*O;tzJHN6T}5p^rMj59}wO-R_;@*85rRNA?f=;LI-j z9{<8keU!h}!O?Rg>)}9Ob-nw3SNy8(!>2pX`wOXS>{U0s=OK>aMIU)+|8|ZMC-Q_{ z_-KE=Y1*j)e-Z=k@k_?!^HzV#2q=}%6#~F zPmVq2qi}PM#ix`4D;3hp+dr#FcsWO}MiUesHC?yrUny ztRIaZt>b6)*1pCL_`u&f_M!B`ze-%d2afgw>q>dO*?;PM zjw;U0hl98yhn*!}+Vu0>1HSUSC(pUb7f<2^p7LLv@SZpO)IISD5BPg;mA}M+aqH!W zIFi@ShxUDbpkEh{+_&JO-}$UR=jgFKcZ0Y1BNu-1&p5x3PcLyJp6#RZkKN8o-izZ0 z^;$gIH~7yv#rqfR79Zn@JAU%K9Io;aUvk(f&YkP!2mIU*$+gd@d+c;yS6|`Mmvg%J zue;~#>?h&|e$E5zp)Y-U^4ta5--4t3BUe1*+pQOo z%TD^9%a2!Pn=UHiqGlzZ9<-9e;dm=uZ&;s)5>pk zVKi~+^ILI6fB31p{KiiDi#Ks0U+Ez~@kRMVTmJ9|KUgoG)Njw5$cL}GHIdK1#F4t= za|QT`Yv)`0;E6mBlz05$b2WJ*PSgu|2p{t0`-%8VeS(v9o@3G1I(YFLJ;fis{9D$2 z{;VQjy%c}=lW#u#=>sou!0+}y`+>OW##QPDKKxF9_On+W9~x=vi_e+(O+8T$@FCCl z$mE53@ADgVb2Rl_+`?C#hX))={qU!cIHZqrgE--L=XtpM-p}&Qt-Zc)A->@y59!5T zdW$>p>Kx54>}20~&QIE&2l59$o=Ux^kGN5f=)oR#+Rv@?9=XrI=wqK%r`$it7vFHC zw|XI-J;zrsoGa90@nYW*XX=9UpEyO*?VIY-MC!e9acf*2+rRCH@|@kCcf*CBtrz#?^Sk?p`YoTVH{U)>Kl!BH zm6PXG^h4DxapU`B@Dw-f#+MxR#rt)A*;h~Hb1ru9pZHmubBKLGT*@Q(TkkwWPjca+ zj@y^`g*@Ls6z}q%JUIK_nmFVS{JQ%{@PwanaqYb2z9x>%!&jb)4|eWK{n(WABE7{K ze`v#rJbvUC_gsG0kH7lF9`#M#RL9}IDE5nAbyU2-LA>B6Zo2g+`>S>0&bbaw@NizS zU&B>Bk{{}qdV|_`;BDSL_qY3q@AtsL=ePDf_1pKH$t&YWeu{hZ_)T3Euhx_2`_}a9 z*4KP4qAvM9r@T||ox{Yr{bTHw)=v55oB$v3C@y`p3(EZi?&4gX z>`lEDzxF-xA}*Yp+zaT-FY-j*!xvuS5w7%Dp7WM^sSb#HdZ6-1e98+r*msDiO_ zkmV0K;==dd#RI>JH^1AkYG>=m(c*i+;zVAM?{g6GvM$em^xJ=(gX9~#;NtyL;>r1uzUtl9_-Q=# zSKRYA`|08P{_t2Cd*C7N<-L7de8N{;iVOatKb+{pZgx6P!O?k6Jr-BujUU8~e)_OO zU8FBN_50q4{1bQdu-}v8T&_Ox7rfjX;ek5Wvm1`~RrQCRhohdS1ZVXa{@U!oZzRuq#G(8W$MT&$^xl*za_7VpVVVG(o5a2j^Fqn9-b%53*+qN zH|Hwn#qK_qbC`W_dhS=w0roTJ2Xz?^@&NAQT)vX8ezC)RIGN}CBJaqD13v1c{E@Hl z)gDhh=2!aZCx0~ijP?9so%4Wr9oyLEn|dhDQT)*($#;HLZ^eiB;YV$L(=R^MU;aK7 zJLR1?bk9=Pt2{TcPJGi_9f03Y*q1z)fAs6lOC3_*b2QIm)j$4(M;E8W zvHeCI%Qx|F9lTD(|MXGUoM)Vy#IfInggbuh)(>~_L4R>--{gOFdCiB~JXH_*ga1zC z`+MHw^_+`e$YBruaOXGo0DSquexn}BXV0(riQMtjdvWFWDb#;?W!yQ)KHL2s`O-j)e>smjAHa>@?8na0-F(mIZ|;B2P3ntv^s-JIbn`OzG3SB)w8aTL)M@^=e+;H> zvQNC93Xc2&C-|v{*5OmZj(W^)ab>^1ak$l2T_4Qvhlp=+rw;QY zd&J#X-Y1Y(p68J(eyp3frTi{GCT-<}4f8b1C-}hy=b@EOAiaX<;6Y#4zlK+*@ zn{rOvoO(KUSF3jy$K<(v`|kz=QOO`Y}R(FcEd%O3X@&yV~rq`2~V+sW|toQJ&b zxh(lCe#FIXsTXi02YxHU*YEejSABG@mxr?wxAMSzcH2+Mn-%%+^1K_)^i_B9y*%&z zIcJM6^VI?OA^P*H`av#xeZO`vcAtoTyU0ttcm0z*fSY)6u7aO>C|<<1dQF~l%>2l= zKhmGS><>qC?|_%MvM*i!)iz!|Z+Ry6m?v&-Oh5VRh3A~&ttZckr$s;b`CaGg=2qU` z@H1{byR7$~syG?j*{)Y-hQbeyDE{zckA9S0@Hvft>WzFm6nn&(=j!JLKl!ch!4qHg zPQD+E{lnpFT)()4xA+rR_19Y*#&h0V9DYNg_}CZd2XFTG=N@Dq)QCK zPu}6MfkSugmXg?SrG=`4->el)d`p!`|%6;z4~OkKe_SedT!SKfdY- z{jK-=h;X(~@+UjYBVS!p*UhtzzSfaDKlNF?pB3Dkp`6K?-CG+4-E87l?q17};tfvDf9eu@#i4tc z_i6oJJ^zU}df4yCfg4=AzlV{0g@?LEzTbxy2lUrA?_}_w7k}D^+{fjOc(8BLm!0w$ zHI5&=`C;s1ZC^iwb4i;uSWkza5kAHMAL`#YXL@T2+WvA5(4XMTY{yWuGB zM%DX|xAvM(E_}qP`#3w6=N`xoa_lGMh-?1E58mDLXYPyQo!#~~c8Ndy?a%zNDD{nA zThnI0JhYCT=932>)Zbqacl@Moc@81&ti#_u%J2J$d-q}fgNt)CJ?*RNlzH@3AK)tv z$)A-xB3E17I=75$ZR3Hz#Ib!Ae%6Tx=LYNKiQk*FfAEvIkYD1@-^HLeefgW+=BxkW zmLK_By`k@p#DjI>7JuvTasGn8dGICI?<%tozW#m)`ShpPSng5$%zto@2js#HzVbre z^u#`X;SaxmjURu(0iN!4?)l~$CtuvbNt@r~o!@O9O8i+*FMQ=S9QeWh3TN`Kt6OVsZ1bCa;tF2yJ(eB4jX^E_%aIGYb|dca$ozn@B8!i9guBR}`&yaR9gyXTg1UFu^W-yM1U&JXyD zJNBwK{AryyGEd%%199o^4zb62`deonKbr>^`+_V)yU(LP(Z;)R^+vwX1D>9f$UlEy>QLg9|KWnK z`p16t>LNPxrlL*$>!5FMcffZA%=&MSQ^5=Oyk7^rEl%>=kctVE@?1TD?{`k7z zixYS{=dy!c>L`2E1%C3mr*+~PZqMeqJiOVVK2@H3=JQfG;YUti@`wM__44@+z1amP zaWAgzXY};pk$LpA9zW~V4eR{<6?(JJ z^D2DFU6uF|AMyrH_A&kR;79WOel2~>=U4OOOHbZAnvbC-A z?4ghMIJ)&9`+<0MzaCFq@uP8ilW$y}`kYAppci@UvQE5;XZ_}}PyE73{gS8pt)nkL z*CQ<+`pttUeCgqR8~9l#FZdNs-M{0RJjO>|5NF~TKJYZoF8a~m@8_P#K1e=(_&DFt zmmc;@{!pjQgS+RK;#7SUPjGfmo*R4RnL1}b?Vhy9)W>l3eV zRG-*QU;4mb99Hv5*au(h)e+}$^5}0|Jy(DDS>E9XkFuXW z^oOhXVV}6ipFDbz13&(-PJQBE=Nov^LmZ;?B6m?fucw!DwfzgO^pbaQUKzhw&p*zW z{>~u1;IXNwbN>D>yWs2Zf2-s26JAHNe>{`?WT$w9gLpfTIDxNrU-($ZU-HX5_Tmdi z`p_SK^pWS{QX8)1s9X5s2Ve0(9zNoOUHEF7FJAm!f_UH`eE40PKjbfd2ZMXxEp45L zAHBTCir-M?ivxLQ96xnvM*IRt>)=8k`tuvSQ2eb|XW8L>DRFI{eU*RcfuFYc<3GPQ zVBC6fL=O4lLfnWe^R)R(9N^F2>Knh2t4;o@;41FnL_WFv2#?|1qmCqxmS6Nh?Fa7p-b-eu`@QoceE5UD z>KXsSP28FN8mIyi{qw{dacTu&eSCVco$zqq6)T<9s^=&MaGJm5xua^y3d z$Ro$|A2{%r=jqn-r*-Cw2l{&d2@c|GbNo+Fdef7Co&VV9@7sHR@42{ncjkE(zUmME z@T2E%_)VmaE=V25&;I4SLT_@^C2e@(t8RE7!@QG`M-G3AlU=a`g@?Fe2Y&4259{EA ziYs`+o1ZUBedAB}25tU#jvR|0dmd`*iod&yulj?Jyf#n2_wm$w^7iI@;#`6+yu=sW z*L&#ydUpD|$rlAD@qn*+-f!vuM!S9_a$iaPd_Ml= zzrpldkFWPRk7xaG=3O1WH|4qE*64Fy`aMtFlleE>w?bEDUX$?+>BpDe>ob0N=I_Y7 z`_ew1HoMME|Msj~7ybO*`JHL6&A5G8KRNWKpWm6%&tCh{()ics4@crR&m*q-i`EYd zGjDm?>?Qxn^q%8yednxB+-ff|Gh29eSLTH`!t3xmSR?BZ%+UB3g{P%>; zj{d$Mh#z_E@&0db`1!uY;_yKqPTTmQ%-8RGb>3Td&RUUqYeScY!pZkVd=F@0#)9I%ly#3uU-#_p^uIB)#dz*LSBMz4MWF{wLD^eA>GTs{iNG z|4X4i&bsT*&lGmR$J6C7@cS9e|_^*a8XzGr*YB=LfsPS7f z?~j_gGp#z7@zKzSLa)v|{dMg4&8F@wtN73On!jxOt%v8ogwG3!o3}LWJo;~sJh;ye zpOfiF-;ws=(6hp4OX}s!^zTeuuFCj7ME>^ZzbEtlB=lt73)+|S;aAfCyP@=ZP1=K@ z>|7nbzK69T`dha&^B;^pa9tF6pULm_xsa+D*TRRK71z9o))?yl>K$q zqgN#F*M-i>{3i63&_^GvtIofT1wYTN@RP68W6xmb&kto^7ti$fMz8g0lmFS^`Gt&c z41HZe<;}~9GkJ&4oXr32@H0=I$`k7jM-S`fXZ@ipO#!{90Pr ze{SlJxSAF{@R=8T)nR$HBJ<$2K5g}b9dO)|aeAnqjUie*Gz2JZA z<=d}CKE2M1-Sqh5jLR$Yrwz4o)jM`u&wldxSDw&^eez^&?2=dTxg+r-PEmS_x01hj z7e|-JKK8>|-Jy?t<*xWyo{1;x*ukIl;0NR4QT*Zer?HD)E{;5W=%pUPU%bd)eEET2 z#KEsej{GtY&f5I6y2v;BpdU$GuhAe;CFbDs~_HPOdWVG{N$BPxN;FRG-B?|M8DHNk8NA7T)|JKJ?2+a@BM7vp0H~Cr`u`dF+JqSk66rgDd;t z$^T9KLmzsQCx1}<<*j%Thj159`0$%`?o}&dpSaEI@A_?iFV?s)@zPR0-H zgrj-zFQ4FRKfvF(_4JqTy}=D%`oLA3 z!Hs|T`>NPsAIA@ck2nx_{4LJdBY(&z&ps(n=m~G@;J_Yy_?sNKz~Q#ofe*X!Q%8Cd zSK>+k<+=A-&wuKZ{Z3v?B+ljpfAi(N{7^UO4|jRb4sk%^&g%OCbrcsvw+_=7$R zcGgwrpZl=+f8W%d?n>Ut7ktU5uXSj7AO2C~^Ow3W@5J?W!T+Z0$Lx}4@(5ny2Os;r z`hIEnI5*)ZKH&)$lwZZA`1bsaKh!Db26dlb#Hsc8(_7sThtARR8z1Y%jeISsbBptU z=ezObv-7KivPZsXJ*`y-D83zRS{{ zo_L|JxaJqQ^EZ3o3J-X~mwnEMK1Y}qzsYlTxr`6z7r2mfDEjl8djfpL^@8j-;)K5J z84aK7;y?Q1FCXY9Zt;P;{SrU>A%C46oZ%^+?vH$U=@)0}6n}oBsXK10)HQM7d^9(5 z>{sxY-|$pN@KvWud+~>#yjMrWpS*z!|H6x(Q1PSgzpbe|W>xa%J5AkbRzBC`Px0C$ ze$+AY=tItZiEH?>({nxNDsuV~FXGUBO?`!@xD`k66zA^q@(4cSRNRO&bp)=?5$sS` z<+pegALffYdCH&S8ouy%KM`-v!}17!yDQ2FMZ%ns}2jr|>!mv9ls)|*HF!-+pQ^Q$_A;v>(*Z<*)nvU+WQ zmw)0>Jn^@jBL3Kg^1}m7-C0)23;rNS z9En4DGo1Gy%xACp@=g9a?>!WK+2fqA-r#TF^F9?Ed=AYo%M#D>Mf^P$Ij=-d^4J9@ zaZC^AB+t9O*Klj^`Qj4(>HsPZ`J4aXDX+z`c>LMmav=Hb zc_n|adnoxQZk?m~176M-a1&SRj`N`BrSwF>P_dBJ|vK1U9}_9k!D^U@CWo8IzF z9D2^Ao~w)M5We06ux@+eM_qygzrf+D;ON}Rj$_eVKB`mvrOluGB(B5@{KUO`nsb@B zB#)i=i$CX!(jIjbCI8KdBm1%aTztz*=Uw|U|Cq;qxI6EN8+fo2m6z%pzUry?QkUhu z^NIOzJCwYY*YFVM^g-1lcB>;z_?(-%AfBBE#KDUAzl;ZVv0Ge;TmE}0=Njh;@hLB? z^B$S=3%leqdr`;xr8Klc0lke}tv;n)p7b&wy#AAQ&d4|zq7`XG+@ zPaMFD|LIA-{gxi;yys)&^RswTm*oZh`xrrk$Nj0=&fGxAAQ+LKmH<@pWq8W z`>bf>1RFs#kqKb>yP3Gb>2Bk9KjLp;#9oICvxG; zKkBb@opEssclo7WpyCa_?j`gSXXJ?oc8d#ndVBVte{Skd8L51J<2-z`=P$`m_N&w6 z@;knp;t%_P_(A!JU%nsQ#i#eH)%gdTx}#pzU&MyAr(J4hvKhZ zs*~Q=!OwFaxbvrdMtzY7;#WP9KY!5F9W^TVs}-@Ef87_{U({3iYrkKZb?$ZYm7m3r zI_BJ~&KZ{vC_eC3=jAQAyPLXWMkSs+Z?}#d_PhUxFa9x3Px+=_y(#xkabRC0@1~~i zs8y+>Z%rJEcb}uek^k(6&a2|H%nxw_5A{jh=oi1<7w5;95})d)xPd!;#hG|g=RMDb z4}0)+Zh1}e17Cg-AMU*_*{4ACw=+S9j>i-`e(J^}+Wf#m$Q7 zNk96FQ~aFwjH^@5Q{qYdlmGFi#ldq<{`hkG)mQOvALn=Z&?K(ZC-~5hzW*)z&%u0; zO}!RR^pYp=@x2pxo*ZiR=3n$Yw-h;twI5;?0 z_#UtPmlyQIAMWb?mC>6V`q`J=xAlutxZ~%%=X-_j!}xkm2M_!f7W*c>&&#=3d~b{0 z;)Q(vRDbBv}U6ZEm)xj*uQbKjik2Uq)ldGCh@e$HX$i&OEY-q{bYPF%tdZm9D{Ca+8@b{S?&R?kJ;jH7poizF_9^(vM{)T|~Xxj~Aq$U7pW~YkuNy^E~(Peq}lSw(w=AeDFJe7iL^t{&3pj zKs^%wPh_9-9>&F~@A94BN`Q1-S>l1$LtFa#;(Em zS-dz;sq^yBzOg^`7S8G&{nQ6}C2#H5?mO(A9sJ;Ho_$XJu;0oX`;k0b7C!2$xMYv` za8AdU-t6_9!T#rbW*_yugI#bV7azY1@|(d~yg0ABN6UZudJn?AX?f}eJLtn6=N_xmP?69;fr$DJ?chadaIHU9G1@3lBjks~hEFMjj8B<^eCU7Wb* ztFz8;^56IF`N{Kye}AB^I{(BOJ$|{VJKdFibu_1S)N{% z_`(l$|Ja*xc#6LtrJh+Y?!=cm=Nv)Ld$J$OFY^3uAA6lM)OmUFVC-?u8c5r|jGsF1 zb7}V(=NolYeu@wAD(;P|Q_fS)*=us%HqZA++!y4b`u=S6mDlbM8^TBas9*HpN54-e zPRsq+ear9U(TD!(D80z>oXzhWibuci$v*d#C8ymHc-S72@J9fHfIxo<}zQZ2Bf8@El z^QwGdzr6K+pXV{+9xm`ZtEoF?R_YNvwdL*H#M5x{6n^r~?-R;1`^d&WZ~1#3POiG| z_qEvX_Yciezr?F~$K&6Bmvgb_4C+1o* zr2dEtb=`Tuxy8L(p0XQX@u%OpQCzW4p4l(d%V)pU;(s*s-qc_BVELqXoub58Pn(dV)54dTN7xi9*tcUJ^& z`jcO;*jtN0CHap)Z4`MUeN=Q_?C^7WI^&%P&a;p%*UAoJL-{_(f- zz2~Oz^&9|>zMsz?IFsjj2|ef!4|yn`#OG-4J>v7zsiU4t_}<&l^Q_-<_j|tVJtuJmH~NYn`;E^R<(ua<7O z$6xr6r@q;b-E-hXUwNco{HWjjjP~Ev);V_D7oAi16F>UXOIux&U+nR`nLN+!<)8aM zd*q`!;GE?=A#UZD&$Zzzf9Q*^&qKAviF_AN@Rx7yxt`CkL)-f(J_lhp>UW;u%O0Pf z(%bx954Qdw2fm)u`aMOzk6iMjhv%y9R{AIYUYPzLq*>o$n2>N4`48IA6Put7mXA zpFc}|&D)db<@Rs!rS5vpfzO)kzwj;Xr9Ztr_vUB#k`LF_(E~sGpnI|Vliw2;U(ToQ z+s@hakdJ=%UtM)RQitU){qTP(=M?*qaeDim5_Ml3+5hO}9L_#@Vm|-Cg+HzLd)JGC zKRvEYKAG>H$S(Z&Lq9$E+qssX*zfnr%_Bz}4)A6VKX^WFd}-ll&n3ha9PnX3x$aH) zdH%~jaY{ey;Dw*(yXF}uAN5=WA9-QE^>A~q(qHNYSAOxif%^)-h!^;&5AI3sPxyJx zX`OQdd;J{=>+xk5%5Ll32i#-Tb9LO`b+CWYN1gL~1y`l+ia+N!`>r}PZK&Oc)H(MF z_b2$UL)^ff-t5yx_2c9I;W-vL^gNyWoaa2^&OGN*{M23FN1dH~fDgUc$*%^;gv+vTwa}E6Xm*45_y;8WZNZxxs#=qhfE)N86@gT0* z%|3eiJk5O;AM;T9xktONlkanJ_bC0=v$t%+1%LKBN5U6f7#!GRU(v?L^I3Y}3s*SP zN4 zgU{0Nfe(F8e6FpR&XIoS9Nzfh!)|fF&&EB6;tzP(_vD%H#n2o6_9gd0_ig%$FY)O< z;YLsS57!b0^U1Z2-`NEhd2OA%bAI*w1fQAl zXDQ#hu7C18$2o@__g;MX+kI8M@h88t6XloJHfBC>-u>&9HHv5Qsu;)%y@*O|x@r8r%Tbrzql#$m)-2W@y^yh`FgULtt1Lt#b#oy+ON4WUB4UV1< zl=}0NI!S-{kjszkWIz19=Ozz5PZqEAfrt2gD4#FFg*@>z_?gy!t4HvZcj}VgpMW2Ipu65$XJhH zWAta2_;+3|_Z9aZ>-fWcg}(BSKK#f}{O(-9kK)7Ur{V!F?8RSQ(l74SGjZ!)qAqo5 z{6W5ZhTq$gpYrvsnJ=%6t9#xT7k~6~4>{em^;lgIH||C9SsdDT=+(6&dcfa)X+NX~ ze^}@9Ch<>Cc8D)}vDfDf_}jPO#2@&0KZD#$lV{|4|IT@o|I}&sA^w*y{;sU}6puH2 zqs7&^NW92XdT7&^-{pzlX=ew$&#Fg{2aei}Opr<%6@0H~5g~3JqsJC$TeiVJ3 zbDR?og^&9Vz2JxPyZB-sJmd}B#MQRME5E@}T@@$vx6bGJ=CQ|q1_$S}ALLxY9&u-# z{!%}BofRDEXFqhVQ%~_zzr-=V_@S%9R~-7gt)(C2FTD9noh8?K3trwo;}8B9SM26r zc=-;VQo1W}fHu+U!@4#ld*q3sHCIxia@Xads?mDG%6pe(ZM+D&I5kUY&UM{+480+_8-DUtKRYiDALk0+PqM#?Kj$ZYa?TMS=Ishj>Q5E^^p#)yW1Ju5 z1AO_*I(*a}=R17%@q4IqAUpAqxA2x1aG;<2KYcuxkzeA9zscv91JQ#Y$)i6xJ~y*} ztGoE&BaiWOucL=J6leV7Jl&go5KdW&zV*X-aU9@Rzm z@fZK0^iZed1$;fHr#JmBi#+G98L7YW1|R&@eR`wt6c6z7J&5P;Y3u8z9h0v|KZ4Cul>TlN`L#4=Q7U6`rQ}k zsbAZD(eKQ8?)}EtN3QRSs}t^5D7gbU_d4&>%kPT1&#}XPLl5%gf%jN?n^VW&ifS?W9@bmuI;cvEle7^?Wmid>(&(`%n(9ZYXj^C;D{qS8G_kE7L z(^miS8Baf)-Ot$DA6%dRVk_^wwDm6>Y5V=oU7hx!Q0KS9X{+=63vc_S^R@hDw>JMe zPil)->-n#w?xo(7Q}2CFYrgzjmCtt;glcb28(o(+YTowPy(e_Apyl}bjBg3u7-}9m MT<|e(@?Q9V0Udb@q5uE@ literal 0 HcmV?d00001