From 80d0eab8b65ff36b6aa2ee16bc5cae86d1a96602 Mon Sep 17 00:00:00 2001 From: Xilin Wu Date: Wed, 21 Sep 2022 23:06:44 +0800 Subject: [PATCH] Add initial support for Snapdragon 720G (sm7125) This commit adds preliminary support for Snapdragon 720G QRD device. It's worth noting that only UFS works now. Basically nothing else works. We're adding sm7125 support to this repo, because it's quite similar with sdm845, and it makes no sense to create another repo for this uncommon SoC. Signed-off-by: Xilin Wu --- .github/workflows/main.yml | 1 + .github/workflows/release.yml | 1 + build.sh | 1 + device_specific/atoll.dtb | Bin 0 -> 465091 bytes sdm845Pkg/Binary | 2 +- sdm845Pkg/Devices/atoll.dsc | 27 + sdm845Pkg/Devices/atoll.fdf | 626 ++++++++++++++++++ sdm845Pkg/Drivers/sdm845Dxe/sdm845Dxe.c | 6 + .../Configuration/DeviceMemoryMap7125.h | 325 +++++++++ .../MemoryInitPeiLib/MemoryInitPeiLib.c | 4 + .../QcomGeniSerialPortLib/GeniSerial.h | 6 + sdm845Pkg/sm7125Pkg.dsc | 340 ++++++++++ 12 files changed, 1338 insertions(+), 1 deletion(-) create mode 100755 device_specific/atoll.dtb create mode 100644 sdm845Pkg/Devices/atoll.dsc create mode 100644 sdm845Pkg/Devices/atoll.fdf create mode 100644 sdm845Pkg/Include/Configuration/DeviceMemoryMap7125.h create mode 100644 sdm845Pkg/sm7125Pkg.dsc diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9df6f5b..ab75408 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -45,6 +45,7 @@ jobs: - ayn-odin - akershus - equuleus + - atoll # Steps represent a sequence of tasks that will be executed as part of the job steps: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f14583f..a12826d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -37,6 +37,7 @@ jobs: - skr-a0 - star2qltechn - trident + - atoll steps: - name: Checkout repository diff --git a/build.sh b/build.sh index e3371b3..7f691fe 100755 --- a/build.sh +++ b/build.sh @@ -27,6 +27,7 @@ DEVICES=( akershus equuleus zs600kl + atoll ) ##################################### diff --git a/device_specific/atoll.dtb b/device_specific/atoll.dtb new file mode 100755 index 0000000000000000000000000000000000000000..741bd1ab6c437c483426d063103339411b2cccaa GIT binary patch literal 465091 zcmeFa3wT^tbuWHKcH-Dch(a9f@KkK$gpf%k`As2A5+@`OgGmAn&(UaRBn_UC#xo;X zZlQlU5E38>&V!JLO&mLk6D(76DTY$oii8FTaIahXfR+}eEs(xVTMCyp@c;eRew=;w zoEgo?viX|tZhc2*uf5k=d+oK>ex5z&969~x{~Rn>`a}=}>w}ZuvkUk0ah-{)6Boj# z&O>@m#UuX{8k&du{2(~^9o#!`8TgwX{FOIfvk^&>za02q+?pLJU6`qj6pP8Nm0S>l zD#|p2e=_htb;)&ay83EK5+0`@ZEp}HKCY5%xwiwRY?NaGaBkSVX>HG%Zoy(2>1x0@ zRZ@VPEss`p+{hkR7ore1rC8bWhLFZQ(k=q;FJ>yJR;4tyo~bIGWx6^f?ny{{Yq^>& z2$sU59xoGhhIA~>=+(%#JP0O8X5bfiFnH4@CV%oLh%-&&PdBAky50xd^g(I5q=jvcs}G|6*?P6&gU<*4iSj|pW^6haKC;T;Hy1wg ztCnADKJq$^FLk1i^d6Iskd4^xc>4$&n`ytT_{dqnKT$qH+2+zmRy+LW!be_h`L*UF zS89CgBddy1<5Ff$ZtF3=_6|$eskd?7h8U<`N-=vzV(qc$K)fNBAyT*;hevn zu?F+%6Xqk7Z7zLeox^V~eB`y3Uu!<{290lhWbHBe2&eTk`N+xN&^Q>k4|0Nh8m`lI z8akqb%cE!4I^y#}d>L!7Ua&s%4C1Vh@u6wNm*ARRKO$YD<;As(!@F+X^o3yl z1W+vgG~$$X_CC|m1@Z_#E?Et~_I)PN1@Z{L6kx-zpcgtucUb2z8o|HR!Ozv>&!6z{ zH(LBypBzVagg>_rD38d*Ir6$=@<}csgnyGc@|^f2SG`7Wod3+^lS_f~%koLeYHi;3 zTDjgQH#q#}!Y40r__gAbmpS;Y_~hjlzcruSr16bUCQF$zl7d9GI9jdcE9}P@64{YT zUIWG#4kMlWHi{PcJ;V%sh51}l+k9?hAh`5gPuYAfViDYY&ZTWW7cdBJKIc(3pOaSv zH=koD^A(P&lNPgKo!F;Zo-uWze;c0Wo~Vvwk!;GA{YbM9$iAQZkp_m3PW~2=P51=@ z;*=ZX@WC%u3#D=~pX}E=gQh;yDE3RhNfd@*naXInmduU}*DBb<%vVx9>oVO8KtQm( zxF0xJ$R@{>at*IfXdJ=_lOMuAlUG69$cnLS@?FG`8Y>*ge=xUX57L0OkK=~2 zmOS1icl;9_hvi@wr@kCxKhqz8EYct7dXSL(MMm@&2fmdnR5Sg>e2$3-URhY_)t5ya z*3m7CYhF_iUDjqKwNn;mXZ2;V9KS5CoxHNjZI-nmt}MgTtry~cSv%V-t3R$Ru08yE zonBwop*G9P#g#=L^ULB|!qivW>qskQiGN@&oh+9|fiHYJ-8QtIIco4@nFt4_@Xsxu zzRLQW@^RmT~E_O>hQisL3L=cClW(d(1GtgG6URVJ-)$sE9+N$Sy#6!>qd%sTx8`u z-IevLzN~B7mG!#gCaala86WtXFYDTNWz8KoS-Dnm_4<@A>$-MjtsOU6xo&c0{koA= z&9keeB<5|URL|M$X6_Y=s)i1DL`I6*-*wx7JxwFq6cr=NY`%<=HVE`r z&Vz(+xll}PSS>Xt4#pbaR=_|8g2Q9s)quZ>OL*i8nZdNECzV}KOoba$Ut%gnDm0g; z@H0FW-)uHL)(cKiSJa*~?$x~yq z|GeD#W2OoVmv?PO zER=8gxy%URrF~a=@O4o*lk?zm1YX`3X|D^H_eJ%$ypI+L%Uj+T>7RkWKAP{zx4iFA zG{2Afclkx-U*31Mm+#eo+LLEGD$j~ekURWWOkD55k^X<-iitiiKdP^l^T{xj_aYBo zIe)R2AB9)WkNES#i#&Mc{H_T7%K0liI9lJ8^HW}aRDUby@A2{vdGHayq5rR3oQmXM zCs5}>W@?11OD$hmpqw@4Y8du+aogUof!4$`_PhZM|H+yiO z2bVo~!h?5u@E#97gQq;UM0^EO->ubr9zUx~tyjl3qyifEbX$f-A`yb+eM1+R;6h*; z_IwWyCAKPb?`{~Iu6)_9-%Jtw~3 ziGR$AZ+GHv({YsbN&3Cv1z3FGn>sB~EoBSCVs-Enba0@W+**Qj$e9(V>`(G26?MvBba(-H5*Az6emz+n z8C09~>w3l1#0z~}ArPPGQlG`|+218cE<(LK&sshSG?~-u@*ewVz-)sWmiql4z{=Mu z!-J`H8_eMY;)Fg{!k#zsk;Y)l54KazPLqcFV}GXe8Gl^IQHRG4X%@-h$hoe^?gfrx z>&I>Y%rS&zbb)S2!5#0x-2~)oc>bN!NYwJkGhgig2kUj(BKYmT!ayeLJoF{5@u?$- ztGe^Is}L|fl*^Wph(J8F8PkqY|7f1!@khYZJSyAEwUJa$E^i)clSin-tyw`p8Uyp7 zIP6dVHDch9_-+b!Tq+N~a^SF{Q2mpQhr86|0o|H&CkYw?atUwTAA1Ypl#O_VFTtI` zz_L;9z$+zJBI%NXK*1*`CIViz>_`8~iGSINA8_J# zIq~0g;`ABT5#iD6@K47-Y5F0w*+(}a{iRUL3f%eZpYhc?uJt4B`jd%@P6Vl71p=OF6ZyO>GM_YfJipYv)q|A5x+lb6TFQw9QuSIg=eIld;2E9e3^U zEu_hLz_h42JzPy^`;o>#ymM?@Rh7ArCpq)uH8h^#ErO-+P~XW;602;l88 ztQRX$tZd5x;|z?zxIK!#(dMQ006;MHa_eF1!u~N?sku52`?mT#_}TvdRzrhoKcfTH zLKe?db3B^WZOem9x{pP!q$)XNd`oAFD2XW1{o#qo@HmdpEqzH_W$8EC`%zm2;MXFk1;aptjpJjd`d4NJdBd06Ny z$G9JZmkAu>0MBE68CWKCvi~!iu6kpz>5}VB8s*r7avhlc7W-AD_bQ%k_E7Wdvg@_t z$*ZZ}gZEAVg_o3zo7FokhcVSrY`R*>25v%7ZwSq&%h7!w(x`Jj1mXRi`u;B5DWB+G z>l>gA%!A)Oc8K+Im5p@fK_4y8Df)nK0`=Vo7BlJlB?$Bb%L!990oh*@wD(-8jk%$wE=aJ zpk>>Cdk|dkQ=}O9{pjv?Y8bcuqfVUdn|NJFe`AmUtGKJALMNJ?51ZP=9ZEXuCN^ zNLpM6zBRH1F~tk=i9Y@maHtO$I$bRm#?(n_(qXQy`#yGJ$)U_J&O$irPU0+(aiCDt zWFjlz5{Qb>NzZYd)@%g6p*m$bRG~{`CQ;4>*0m=>tw5aQc7~m1|J1nw9*m z$c1(=*%^|FT(n)V^km4fz{-I%$Z;~tUEq~FION(LZ3n>Ts z-5)HOp3n6Zbp-g4X~3MnNximIwvQz9l`>!k;=mv5Iq3bjupmEq$niK+wyUw zCyDjtV15|CqsWp0`AGTm@n5kvY0@^jn2JC=TnF}zhjIgczszh2iJ6zXATkKZQ&W>wMfEekR0y_|J7*^LqG8fI%a? zaC`WGj$`ii*deOCUf!0*t{uv~z)gh^KI8A0!t$?1dC;-=1aF-0C2+04Wdh?&V_=*< z%fL8!FffijNCMN|PX8C5+QxB9V)*S8oWF+O-dGSP^K#o2SgwqWZ%>Y5&!(1FDb*VG zQZm^s8X6j{O z=FM;|w|zekdWp2%ah9OU0RF7{6zb7!t6tj{y>pVH>mluvzHI76d0m)o-`EAbAK8@6 zRm(_Y&@^J3S7;bF+x{6h?VIrp8V7SX)z<5Iwba({Lx07&u?a5BwoAEED9>r@9hV}F zc^BX^fpOE;8KFisu}yk9w&?OXGtKd>#o5*Gu@frqu#mZ8T_UO*k1#ta^;gZhmi z=bDnq!@K6EYElktYUWrZuFHp=A71X*CdxAdno2oqelVtG$Gk)HWVsHGv$M`RqV0>n zT&U@Adzf>~NEzvYOtpqGkj_B5b0Yk8J{~xf%A@E)RnYt&`UTjLmN4}E(D!l2{7w2z zrXf7^HT*Mi`l!{JDI2R~;f*bo9#S9>KUz;uj%2pq;BkK5NgYyE)l$w$H+w3J>3dzc zj2xdpJXQ~mENZ4c_p-3uc4b)w8iu*n3;A_vzPLTqie5O+WteMO;ID1VvPLACds)yf z+m>bRagqgd%eG~~SR`StZN%}a3m5q!wB#@A74Dq-3;LV3W#PEUFc*3O8@rE*KFIbp z7%SSAtEZb%%|b5I{m1uvo!U-q*{er)!foql23gp?8QSrk9^DDgwJdDk4CD*B9=Z#6 zrunjkV??o>sp9uD>bH$zE#kH`r|nMxGf42CDenfvlN#o@Sw#L0A|MzXtaSpes|gcl zqlbfWR?TUP<$_t0GFqCWxh)0OviR#(S%>Zq^JQ*p^ap*)y4I!V+!neLe!zQV6MY3R zgDyknD!-y(+-98HrhwzjJA=I-Vwt)rA*SL?V_-V%$-p?vW#IkF<2dhh=QN#=xt%qn z%sZ*8*m-BMn9Zg($lD2YrCFDA?fi}Tn7H9(7uD@mJjMz1n@CCnIaVBj`0%ZRxrJSb zU5-noEyCRKFv-;hrcGyC(M1`%J+w4PNxqubsdq4wl!@ezI_vpreIEIp3LM8*9wJ>A zF47|G`yT!=4&2FUpt66Z9aVW!N4$SypyZw@!MaSB8J~|j%bM?n;KM-v;Co=-)?8IR z$B|^e9J5^~_*hfAW!OAVwu}*sWnd4)u_cKE$4zRZMFd|enE?z5SO%^yScPEz;Wg3R})%X z(sHil(&ih`>Q~lTT+(uGoRq{dqn;ey7~5{EZ&{6^-d* z%jan1+U#{v`d;PTjq8v8IYR$rWBSfk}IABU;_S3@&LgkBQJOYecIXm`i(=N4vZct!`j0?dv_-6^&@4?{<~3 z<_#Y0%Nx;ZFL%qm+N1S+Jk+zcuuHqiqxJk7GZ>7;%E^Ek>Xmxt*lTz_0UMc=H_Fr&@sUT zO)vQW09f$LCG~(U%m+SZLm@2qe+O9b2eKt654Zul&Is>+F}V5K0A$IG5COr;FS9!f z3;!P>U-;*16}(4bFp94p066j|n6L2%SVSu{#1|T#s7~kbgos?M9IQ*H1B+bGAio+l>s32*bFAnF183kSbAP#DkW zaJUzkNHY56neF!(81u`0hq6P3GM@G0n7BD6U~u>C10t1aY%>kf{~R!75IN-eR_KJp z3)i?zNBLXA7xgh8-XqVxHY3i!w3E1Bj>F!nMz*}T@`Enmhh^hXvVKJp`C#2>)(&`R zr_MG@<&npH=rF?5$b!9N3B-{#lsB)}v|LZfdz!-X2eVmz5W{(Hg>|-(LB1~o46~lH zWuROCGJAHtk(cs7$WOQFo!ObJqF_;xO5 zZoAZzTd*9-wTuUIi;n0L+LAl+%&k?q-;R<(x$$ziG6f&7f>WmO`GZ<7DlA8E;DoXt z)f{bFOFG{NDo3ZWI)10-tkz3|iIU{hc>~(VAOMidK`@$C9hvk!Sd?a#Wt|;9#BBD@?4tt z9SRP{FPTORZ9?jgGk2_ifM!`3u!*M?fDC(rhU z^&BhY@*}8ehVReQtwzcALa*IuOsBTihG;v7z?Gh4(^|1>q|ajg;@bE-z%!H=Yj{Z8 zvwoHRwGaJhiItVzGEWqZ@R=a{DT*YzrtNZg{{q0p!BY8c2k+Mlta0Es2M&WYU0kJh zd>Aipt7MA~h)os)gG_j1T-tXQ;%~+EYq-diaFKPf1*$-)T+r` zcC5-;uUU`t5y(U!KFZX6GM|ACZA%sf-R46sb7n8-LMr63a$#(eKt50kbhGAWi7MSt zPX>4IzY;)jWh8xQ7gca5CyzM^N!xOs3o>6$dX^(6n@^{<-HdW#E+BG>tZD-gn(W29 zxO&zjOZYCJ9`)v+Nkbvf$pt)*=E@`Xc{kErejB=_`H-|ZzlEm~MH-5$%QO;0U1GOV ze#S&p#V@q89t-#@r)<{dLtlHJ24wmb!rumr{zc>={7uB!$LVtSK8`rYAp?IFake!B zKZZE_egpHFDEkfr--$T&VBilS&Uz4r9Cc?&P;;J7<6KNmD+A5Y`fY?d?x6gxj=OuV zurGaM84YcgFf&ohUu@QA_zi6{Q%5PEzOUYcCO9%BGyX9EW|KWaG;NFmZA1J!9jwh$$H~ZHh4Id|D|pU9E~TkWU`4#ojZ#3@yil zN0CoC^0+L&`e%3I1I#DgOg=y*>vFM1MAaMnK(GtAj&DtNdS$~e_AZZEr%!{9aw{K@ zLW~PY*~jJsnQ{g1l`N*Cw#6RL-ZPk$8O;?&($%pn1VGTbq)n+Jc@D~m_Rn9UKZ#x< zme+P^>JI~uJ>n0}`8CqdhaT7`zz-tu~RWQ?NB zO6O9@9QwmAwNHTmus)TNYr@mld3|>9Z;;t~(MO(;sy~f9$_Q9qL1m ztCE8wW5__D4NkY^l5w)QN^(>lZ2jOg;OlWk+W>LX6+QF|pK$Mo{i*PZ39QhO&Kbk28Ny<91Rj(s6m&}6VnC& zpN5NbB+^0Wlbs$f+F`kuMx9Ng=)VMw(g_jL*;=KD6vYcZjXqIV%;u;(l+C`KqKF+r zUlKkA^+phdi+N_q2d5UQ1$>nUpBLfobXsG2^uvY$>x6YpV|t6J^(gZdk-=_$lgC*u z4>eXr@^yWv#?U6hOTAdvY^0Ny*mdJom%J{$@sjH%@k zO^SLR^lzVsI_ax$(M~WAq8yiP+9(_v^N7kLzFOYGMGXSw!8oq_&1jzT4U>jVmSibc z>J~ENZx3GU%}2rS!Pi9RXAiE-)Y67BtW(IhT#-qk%>F44eD=X>y?GDx{@`n5u7T;J zU@F;}zS2vNDTDT2-JQ%1*OZGllpp;Je)q{XHA$@uniz*5I*F*BBruoOJV zu;J;ji{PXy0U^oJsa1M@Ds5V&vKLEHZ#@;W&B68}d{3(q%_@ zfn-KGx5x0^R?G}TP{mlwg+6A_v&;a@!154g`$;yS(* zQ18aBt}mgFGrElRC9!)0f0>Ohv6UZBU*ZrV{2gDa!;BFoc4LI1V5=? zgMRH;`@9Pbf6q_XSnI3$#`#r)e!Ali8uC1LKb_LNeVgm$P%Ad?fNypTfe(GqwfQE% zzRig@lg-(8&E+_E9{3$cn|FLy^AB~%GZ;9dk;;ZY?gb9@gT7VIn~77xPCF72nAeHC z+-dCT5M44Q`v~v}$-_M5z+r5p@=F$Yp8>fVmI&PnV(^ILe^BE?g#d=EDyNY~#pA4Vp%vAb?JIgv> z>b{ZinZap&isAEcr&gX<#vNX9T51n6m?%6^E}kRv&m=9MKv@9OAjGDR@;enf#5zBdZb_#EIvA+Je}(Z-In(``{+oQrk* z71Gq&sa#syv!+|WfkTxKpEkWs)YQz;HT=zgMQ#ZWF0Ib zV9JL+d;i5-$~ioW5AgcY$efM({*54b%|eZf+n%fwf3p+kGDzECWLSU9RO@rkO5`yR zM%Z%>{+T?q>45WDR}aH!wcs>3q^I&4(N{FR@EFVFvZ+tCK&T?juj9>PZ_J7e%-`Hhu_c=iM$M`U}yhCu__qBt%e>O$4CA3H78;VKy+Fx}|v z0~!{&#_I9n`DI5;19W+D3?huWLar!IET7S8f4VS?pWlqiuDQz#dkeyg{dZ>!p39H6 zl6q>qv2?C5mhM@L}vWP(O(Rn%g@S5HP`T!WI8v3 zTkqFvSo|&q57`fVD5QB{6!EWWxOrLWRo!fK8rRtW0u7^oo9wjZMR9>L+cI%pLlx@Q z@jbds^eJwc5!_josfM$NKHs3rf{%V*5!yF#Nf4E7JaGOKdPsW zk+L{Xp+2q8d3dfL5Kr1hsemK=;EARo4MX!Ve(+KagBH&cfd_mfNjWY*_G79~L9@kJ zkjA?`4W8k3NYi0Hh<-rhN#8Q&@2|)7$-pmX@B#6n+4_pq{kJvmrG~e`O-Bo0y^kZkgiam_?;)rPM0t zw>p@I>NzwrleLnbI!JxtZyf8HM0b-kcTQz+nMwV?7W*%*4OR4T3w}~SKIca4hj^!d@lLz*Zgd1*lhc52!j*{Wr&v}Fd8R)@G}Z@2KMnlW z@Gw5!oJYMc8hYciP3arh+wd^;ZpK6EB6~UfflLYq+kuTh8^NdCH4_nRp0+o-;n3bF zm-_AaYb1tzWle_yc@ZKN4Hp@>sgYW-m3nH6Jm}~ z_%%>9;B<9N(}S&%_kk<$c+bp5Sf5`(Ucb)A?SZqMIHE#_+b4eL#Gll0(0}4nh#P%% z0lqs(y&x5=8JrH1Pfi6ZU%n@J=?5l)7yNBsaK@#nV8Mf3ftBSGABO4P=D-->=DGQh zD+0d(xH$)ZO_2ED9u4F6iRXv$-9OfG$hey}W>D)BTNp{$D3c>=a) z|H{A&2Fb+TAi8jemruTKKIDkNCwVaa!o{cG5GJ3U?7t{B-riXm!G6rpAl?Ot$9l;u z-=T_^E!6mdj>f52PL7r_CCKBDAUGYbYWMg%qI_C41}pu z7p6{K*wrcVsZ+xPYpDGfkJM0OYJ?H!0zdrW$D5P*eWOkpDrB>x<)9zufil?|US=B% z6$YV*(c1Q8c6+v%#||0ZQkK+hQ~fFcuObZ4BuyG0bsE+|bz1?iK*q+7-nn64!XR~( zz7dOq!a%CW`K_(?PrA3&W!cdsGZ>8S2$P@D1z}TfMCBcVuI`xc>W(mV=hC~nyNEh_I_8!mf@8yE-E5>WHwbBf_qZE~Ace_@qrz>qO#EiQJ(Pxod?; zochqIc;Sj9u8+)M|J! z2aCW>V-@p*nJjuS>GAYyxD|b^vOQTH-jbx>x$ox=+osIlddy28s28p87Z{Z=ZNkwv zGZ>7%45ACW`eweXZ^EwM5q9-W*wr^-SKrrD-+YBHYL>w{JBjvZDqDgKTa%0e63dMY zV?ZtSWAimA;IUGzQWzY>D>m8JS*3>YBv4V5(*~=#OexhLGZuatXi{C)3v&oNzc3lh zWFF>%ZMkMU#aO^u_sUfU%;Eo*si_!8|+hSeQqtJkA2LnMzJ4RK}fzfeNM_8CG57#J$K%~-yE9NMciwzdu{V2XD-> zUg+^$LH7yBOpdK#nXKC>NQXUeyg1ZZx1%#=xWOXoM8YhSf&5-Xov?`FSg||MkscH2 zwRq5DWKRb$eJ9v~%hVxR4ZqoTrj?(+2_Rpc34E4o_#tXw;dcXI;U{x?89ZbimE!vx ziHtyc%nP)BRPy>uLp(#3e|F_F~5mW-u84h>>a6UD14zaRO-~qrBk*b5=a; z$GjCEd0c}Z*&-8xWraEr8S%4HY;H?#M80<*$;t;A{NI}HdcQ`{^6xvO9?#2DBrxqE zOXi`zb-!svdgPl6z}dwSu!75}_pWy*R{Ru65nB*P>RB!f^B{OC8~y$L8BrSymg~Ps zF$ESFW)VqzAJvGJ(2yBmG+IiGuY64$$iYt6X5U3#@a2 z^@=-rBkTfyqpMw)B2GOq5B|05LfknfavbFT6&1id*jD=6zd=0V?K_8X+IiZn=)h;! zd8!hiRB5>FLjUgamFLlvgI6ME-_c8p6h!%KIbL1;a!R@kRZgit&8aog81UUq1xL7h z^;o5FStjNNyA}2V*d@@Hb2h8WvmsEnt0~L(bHsQA)b9Err2C zdJ5v|eyWeCxRm`onbWElTpKe#&KNrKg8$k6&1Ptxq6_oPKzFC43HvGi%ph6NEm_q? z%eUGs$MlsHm^=W->I+$t4<2@&a!p7>9R)Yz3jH4dg5jA%+~6bHaIfFk+tqbSdPc>| z>#KP7i^Uk(CV6Nv1)Yl4J433`scaFr)72XdTkr7j%)T*}Tc(2jLiI1YQkakU3m|=o}#gUL` zV3x^18z1W&?*rf=b!hWUnC>^&3PrqT{stV8)%0Jihi<-B=V-%oa>k2&k$zm2W7(8Uh_VMIFyVaeMD`(VW zei==boUo{I|>&IxI6-f0WojebzRjQ!ZF!FW2ezW^=P zFGMdfw)K6WDSZ<=89qktW_(1JU&5LY^Eb05EJhZE5LUOFme+-&pfUb{y6<{-aL0R* zBz%m`h@Kv7J6Y@?f5>B5`4*H8XE!}C?jxm!AG8UJ-JFy#fO--Xkc_W z>&(r;|Nb;k=u@O4%sD87mhFD0{oVgMoo?j%0btUKPc~@FiTd=2z!7P6T8q>CJRtX$6ev6xa7Vtra!2XXI$f%qsR zc3sClLa(*9m8z+JYz>h_Xt3vT;9L4kKu%IsdN@{&iQ{kry>eI!h4B6M`8i_av_rq2aZ=_G?LF)Mo@Dh4~ zspXyQbYRf$eu}kAn^mZ-*L^=xKT9z(-1oiU9k)*Cat;5#2P|!CI4e$W%W&YZ44oMA zXsL{UFlF>tIZZI~;7oJ~hh^x*5D#U%?sI(({JkLk2cHjN(bGQyj<%0tK37fUnylYt zs+R;>axCmCVbey>GQNc(tPh~Co9q-0NJXID&`M;iqhAo2fdmF7jtj#E0yF(p^c%_| zzeW-F!7=0{evVhhLkfHul}{?7$)n8CiQu4Q!0o=TJMrIk;{2T$%R;#CBlu_HGz#Mw zwC}qfcZ`#Ki=li6o#~MCzN>Jb!lmJeKO0|?wjh0znnkN#L(#ijAP-IR9$ z)b?Fn9@@%%X9^CEPU}a{$TG6r2j7vPY482NQQ7ZB8=?se{=I(*Q~ikpKZ*KY?!X5S z&xP>hG+gVS0ZTh^>SxxlEVqUF33~JT^)#%X>0hAh<5ItWiK(9+%0zE1)KAcz`gM>e z;n05g6hH&}IsH59CvVZzypG9!@Qv8<%J}TRM(T~RAv=_=^IJ&*6=)L`1GFi*w*_1Ee|3w!FxJGa&~K6FbQ#v1&#v zAP$LcaVE$tOZL0^@!|9$&fId~MqqlkGxsosn7IaF)Lrm65EAB{biBGa_ZS(&%X2Vk z#Zl&@jI{!VF^vm8k+C1i_ui!QX7cg>1fH6&OYMX=l0=5M@#R$dD^b<198m=qGKjDK z1aQZhrBX=T3?3K0u|4=cF8e9$sVHXazu8FaUy#t zKh{lHYq`$=o2{wfyY#0|YjG(y%`N(QKK;qAt%^8`Ex*fVw$Y!zrjj)m<>Pf7bip+{ z1N=?i

{@Z@aTSy&BgQxHjW@J1)o}cfw3(KJm`SMY_ef$cMqvL9h*Q0&@C&1@{wK z8I5}{`LPTGFGt+;CA1rPJMca9GX{-+&(nxg2EqvUJc)lMeh_i70p#%e3d-T|Jz;XJ zLb(iD{(C70;|4wv`VgJSTo>&R>nL+NgffJFiP;<%P)K87-YLp2k05IO5jGN^{}~f2 z3SHNQzm*qq!e}%1Jc>L00<*?TQ~0m(?%9Pn17Wo5dp=kzV833Hl>G)Pd3^-h;7oRU zX)gan41eQuvHbgsqj^=F@JIiN^=mZE<=+v*-}q7-|4`rf9Hmw%>x$=l?lWhV>Fs0? z4;R<1A|YX;^Z!CTL5A2Lac!vWG|g;WQYZ9{`2GZO!w-&<7v$ajl%x~W+63$JH>|wU zfxj30#yxv9jN3icFi-6N-+-l_nf_D`(g2ilwJd)P(8_|e1BWxAAi9pbpUU);Oz2QY z$Z$pXlmmY+c-P`C4dYfP!?Q>f84CRn!t5ADM9Sh`YJB9oj0dX)Y*Q*qi{kG9cdpmr7ONHKbM#$w^WdrPJz=D z0HFb2=oK&Plc5Q9^~R{BdOid6#5xkGAn*QSlyZar{)@?j^A@tun{Ld5Z`?z{tvICj zD-}KAMNflP(-U4W0nnvS{3BphKJ(u){M#D7O8A}qkCy;ejd0A6x+aNS$3x%5rIP&PmxfA{ymaxLn3J(8Z$>A2nf6&;6tq`&(GVAY=G z{hjGjrksX((>>|v`zg<{?MJ@{G!y?GOZ18I4$^V(WuV;8>X!HQN(rO|YFejjtNu%Cdy zrBS?NH<|4xTk=F%k8Z*pJ~cmuI|I{E@4G+Sg-8k)g2ugj_u}_V1iXTv3zwv8-4jJ* z3FQc1tjWw5)XO5To6V1rj5RO~;z72jX%RZBVe9#BsU2%AK za=M~_*{;%M+*rDdXo+CyGO!4`36KUpV$VQQW(F~>(l&-x6~teZwly$zIU^_+q?sZ zhq7sYP$yf;ZIy`Ti*{-1*s%j?I&^$MM<^?7wf|z!%aVOtCGy@m$ba|Sfb$!;h)ekO zxYJV!Bizl20OK!4d_{2b3nvmi$sqB*@l?mpj!vBPJMe7jpEAyoy~Y~D%(;I8x87cV#hSm!f-#-1=g^Jow}K_lq=H+JE9bt=q9p8D;) z&L8a#f`90<`5gZ`t~v@>=Yv*_iK=|k&O1F7=39O$pS1Ii?6mo$P5j9eV3j}b*^7f$ zym!Fn&%bjzSp566lgeLQd_1^#0-!EGgsHm~(D^hoeOsQKxaJV;u;kA_5c~oG7{te1 z|6^az3=9;8^AX>n?LLG2%k)KDrtQN0wYa8mF|8A66Sx~Zb2oYY4f5dIa$e;n$bTm; z-ruF~Y1~QQ1)P0_flM|ppHAf)7$s6*f&nxxWqZ?^PwxxpvpNmF_OT?qa!oH&6i@Vl zAA3=7M(#qDg#U?Cf{FR34C#E_K4$z7GQ_Q==213YXis?r$8eH~;z zm^)=61yryHLtNMwvwfUNbNaU68%)&Uul1dDGxcrk%U}a312@~3fp>ggcG{vVCN#eE zW7lrHrU#R}jo0Aqd-%VmJD|68Gv3p^8kmYV>ZJNHhaSGA`Z341AdB>4z&Cb&>;}ZC zPt*t9g_@_oxxOFk=tHInI^XTbn16B#N9?+Qr1KeoEmTl*=+;4>M;>a2#VWWj~F$sSEn#JO5nSD1yVa>-$2Qh`yo!I}ZzX z$a4}f=ie-&KzrDM8Nb3$X9fo=YRIk|#nYq1g>q#CFN0B|dK#m;7!Jk^YU62q{vh9- zu5KUB3WG{riV}q7rnGHo%RyYcv+leP=zB%q--CM>E(YeagX5jfsCnJ_31`lV<4ZBwN2^Q^`x)v2_)8QW2-RO-7vnw4)p9Yj-E3`;rjz5}qJKjSF1hI6UW_}%lDd=T8UhGA)J@V+$Jl)h zqL617=Dg^CB_#0QT&4pd4%2uCugPhE=%3WMgKtjbmv!kf2SNnmVD4@9G$a#m(zkig zr+iCjv!rMq^6UXS7|C2eK1VQs@jlCJ@}W~0;iG=k5aQo4tg{Zk4CCGkNw3ODk70=vX_{B2UUCvSmj`@FC;DBsPk*Nt8ai@pP;f zddA)hIJh~Q$2&R3ok0&i*v~TwD!4me-PCuP6wE7`_Guovdt(8gl z@w(dLxrWcN>Y4Km@4>J##!s$LpE2P4#SOWAyCPwy0-mHFKqB z&evwrv)@diR{D!ouV$EpJYDl{Z(uKB*lX-DNTD3dY ztlYC3(yp1Y+!r*YRfBZ1aydrF>sht7X0&W;b+kS4Hllx#m$5Hx6qy^S^&jk8ZzG?U zHj1aMw~+I{(*3F}=uIg>%)6Uo*^1b!)PDl~M z_D#+D#b)CW#|Vx?AHc;viZ(~E{UhS_V^IScFc!^f&9wxDn6XIuNz?c1a&(tDr*&mL z+o`KB1M0fy_caeQ?tWFn&Bk5yLrv?dyYe}$E97gduD%SY>%uS3qORvOs%wKaP_wyI zqrE@Zf19qm@Y^i&HdTma^^3aAYTfn18S3Wy%dyt2=~~CuEjrfDwr($)p>Do^9BbX0 zt}kreqT|eL>-J*5Zkds4HQCKCU?L~<3)YE&eFWRLy9a>1zB}GEiU%|4Y8eNeES~Yj z8zm*$<|1=Tb?%2Rs2wN_M(0+TV?J}GQ|>abc}BzJ@9sfMU#XrGl}7N52K80jQ0ADu zXTE=1>J-Pz^uY;?>QISQiqXNb>cs44K!p1B`u_}_^cY8(E1gj1?l|;6&`)~jS|`-U z|8SkGYDXt*ig>nCPD@Lbc0 zI~cdp$GSQ(^N8o5PTCrGT%8~;zV%$wNwTNC`H8C&KI@=wJqL9%YdsG_6n>@q<-8RXl2g!LFj|w zIj57X{PfmrpR}zLvnTMJ8h6GDx%`M(?I@eK<0ocM;5ns}T&@z%*xJ_#+s$*X?QC6} z92y(9j>7u2<0sF}y#jfc|EzWLoZKrY?GoH`{hU`<&b_pk8v-vQbOB?dLhU zUx3ed&sHDL$-M%OJK>bA?RN8=+$$I#QC}W4j-tobnZ}+*^AWRVz6pG;*1T{#uKU#C zv#KF{=W`3bzpXyfZhFX8`hr&K!+m-3LO4P7;is>UPhH-GN}SNT;9H7bRa$C)Guh>4 z)Z>~HT^D?}@p$^#wI{kh@@=1}b>^bYd^rk=JY$j5b!~Ls2if)gFv^HO8$GMv z^93J9A>sHE^Se2em(JohxxiyE_2Jnr(h@f3Ca=XgLJ3GSJbBk=EE?(sD3-5#_M|Pn zR13wie8sB9$cb|ye=_CpU&g`^n9s4?KVxF#7MXkS3&IArG(3zg4cwN@gCoV9l{nPF zG0DucEY|x%p3U~{8p&+tI($}d_O1}E_eq|b)+c<79;g@8*S*G> zoJRgfaD{e=@ky5FIHloFpCm0|Fo>In>pyE$FJZfv!mF>dHUo?dfXO@z538 zR8w88nnPXP)`G59HP97lU0wO-+C5#ZJ|4O+cZXu#8o|!lf3QitpdoHqaMoU48k#)d=~bfA7KHanKj$79s;~vF&gzik(Y+-Ej>1B5fP` zIxgcO)@e=kwQi36>&_PRwXT7Gk=E5$!{77pjCD`)xQvOI=gpw6x%IERjzM3fZAoAH zoIYM1F#r;wVIR_L4u2-{-FHn46h|W8k96nqh9~aQCMgp_{coQrM|ZeDA)e~X0(-We z@G`uL@Mh#OzuCP0W5^HtocO-1(Y&6tuI^A@%Zog@UTZYZ^=bJVEXXaF&~lACmdiPA zZgtKzg-_3Q?tk$@o+^7hLT>aFM|(GDOc2^q>$D#?gt#l(ksMx&6p_4H+4uPL89Y#m zk~gh4->GPVs&{+z<~?xaL3(o~^s`|z{Fpk>-_7_zKXdm6j6d_N32jN5M(bE))sH>8 zOy{T1w(eNB&gR`n!Tl&m^y2XDK^lXp6L^1cj{`4jvF+>zjn!A&I~lTkILLKgH!#EU z=!2At<(oC}F4?5PKctDgigw%~xAKynW&8B*nmXaq>k6Ct#?iC=M1Gs=()Xe;T^?;7 zNB;?(&ob)dS3k3DD*po>z11t9CmJVoWN6h7;geEsTYktg9Vaw;o2?J-fef}jaejjG z8ufFeb?rRl`HAK0?x)A=YrzrC%Wt=hbYt4{jC<-O_IaVkLVX3FIpmbNOuti|`OU_p zhmg;DB^vI<1)sYo$`_E*Q!~B~0!R3U^7hC97>qTBp1Mf}!S7CJeuP_{nlA(?^rZ4qrxo5{v zM;p_R`n24`VyL5y=|g>5?&&bp(W+M!M0DlTa*u$TVK{o7JX@$j<)3wH3!6?uGN};N9clkN5O5`l!!?Ft0iu86^et*dLI7pT;$Q z%JHkA3>hVXOV2h<*rjK==8DuIqa4Sj_vQD;PZ|GZP^mB5mwgw?MZN6Y+sGh#s8#dB z)l{}uzRm(91j>PTI+%Bu5}|kX__)pMly`J4>tezwr>&&&62HJd(yhdMT@MS-bhR>4 zOXH2$)j~E?3{+YTZxl5tz*aQSw|T#5;%Aa7{}TVLolB4A^9y(#6hHw0- zlx(F?lR^{$@eywS7yM%!b>I81xYK?bmS-L}0*>kcUxe2VNxT+xAlT5sX0o3v9dM1K zLxS(aWS~69LkFD8iw@*nt%dAxwVLX|7akZ)x!51kz99Kb7I|Q|gSn*>fN<@>trOQF zT%u`(^K$wFUidDba+7a96-LG~>Wg_Hhz|;p41x7Tn=#*33Z?)XyX|!Rgna^i8X>{9 zVd8t7_=8S-uM^+r#2<3vY;%SW+pmf5cjAva@yB$WG6VPaZ{bc{!U(s23I9wU)k0bW zQ-0DLn9tBY>A-Al2OKz$_@st02fF=D^2!W(ZHDk*+PWb5Y%JgSI*7OljMF9z#97a_DgL8A_%(nprQ<`vnHpZvo3B)` zC*ox0GnL}@WVVv24kZi2Ir5B6^Dd zv|jlwg@CCVexwg8cax90$@~A`frOKB@lHJ6Ptx%h0cW3iAAJyhc!qDX=UeF+NCUh_ zKGy;s^e^AjGJD#Xn?H7lRg!88J0q*S51x9_vdjD6OQk^2i{}7(PZvwEX z_d3K`al)wUBb(~Wlkax@7V?!X1~5FAQtPBEKq3NZ(KdBouvHLDy68U`?}JXI-RN=; zeh09T8FfGSO$SEw_OtPixCoOhThob;z7(*?QpL+$Q)_$k_#~&>KZD<%+kj*EKhMfW zg5>ZZD~v#%=$a1Z`u_>Bj;WyknH27O07%|S_E99EQSI<#68bYUj9D^QfGiRo!hgnD z=8M@b3>$uo%f!ht`aR0qJLGEvw*EUY*P55od~nk42^V z$?$ZxA6X&~Y-9Ry;v|WqJ}VyLtO)zwPUuAf?9lluPP`j&qjS_%Y}JJ{vDLQh@Tv_P zh$3Z%?Y6%*P!g%C#Z35)Yxv^MKMoRI9ZN{9XwE{~A4Jj9g@K&SCk^&TA~Z&hbAd%p zB1?ZQ?T91tX#dSz=wxW0+j%qS*iRdHE8S$xocbUk`Ia}NUbN_)DvZYEA9-G z)#_e#`NMq6Bmddr1yhxKs`W=~q4jT*9P&h;_|Z*e&hM()Q$pRn3i&9fql!Cm5kC3~ z{9_!K-!?wV{^ip;-}uOKz@ih8Q5t<^WPCgN^Fn^OhD-$V!@JXTdjU=o-QhR}E)VBS z_TTZ@!UJWt)Q_Vqiey6wU;Ty@QYjC@ZJZM`j?1sB*n0)?q;ADxHj5YZkES+sXW4He zoq@DyU#1Vwj+BxH)8@mb2XhNgo6_h)1DoKx@%VO&_bpzd)0YD|EVqAK)XP-4(igPg zXa5Vll%K7!{fOgdryMn9(HAjg2PiT+IA=cX;;de~HU{TKPr5j3WBDw9!o^wN9ml5| zx>0qfJR4T6iYaT|E{zlV9Usu~67_5ESM_MrF3@+OUF0j6UzIY$>cvpBC+n@-#XRz7 z8iH*Xu#vO_>XmugX2E9=ZzvDm_ypJKU+d@>zHZt>p_EPbZv)P1@L(X{PVt*lvjQ$W zwI6q~mpsrOIIOA$M@!so3iK+tJm}Z6#fp*$)9&|)~x3A z%*Q#!%1l1%)~=7iId!Ycr>DC|7}fJS+{MI$YUV?+4}ts#a?)TO`YG+sozdQoAXacINldQipMWs1D9?+*p^9s<_OgY{>PW99bY;MyHKQy~xOFF+fu z$J*nkTg+!#((SJ`lgZKDOuB_#MYq%w6k>EIx?~w~y6hHRcK%%J@U2>hzpHfk!n1-a z&jH()B$O^!JP^F~Kkt|dd5KOrPjh@jJv_w|RM%ly_FVWY`S5Bqmo)x*eN-knRBZ-j z(~8JvwtW+9+t!%;x#sd{E33NAWM|m6Gr|}2}bcePhx;u;A6?BI- zgKvB-3eZ-9K<0<8E?*&^wuS&P_I%v$d z(6?h->+{M_F>ew-#oS2zROUXeZZGufvi6s&+b=Yir!Cz!^HY}7SeN3T(4F`vbSD0Z z`QW)6QZe5XKb85MtIMP>yBhDcn}#RiNHg0$v|V5Q-58lhO65^}&rVH1kWYCqx6t!C z&OtbJisrZDr!12^yQIwLT@V6qQOc^^{*o*i* z@RhY5gk+$+sFU6EVw#l8_0s=a4=P=?wI1YQEMCf3)F*X3+rHvHWe(wixs2?4(1zrR zD{jv$_;GuuDOm@PrQ?Jop0+{^>@9dLV=xVO(2D908NSiBV(%FH*bY`eu zR(jFg%y_|F|AGFt;V4F1^zM51eUL{hMCO=30?a@;Ip>^?+0&t2OuoDRMOvI4=g~kB zJ932)buHm{B7N%*n#)A@TG#FL8?E`)0;&bq0#^5!d<$!9@hzyzcQ4VE>tF0+XYwzw zIVS&Vhu-zCYam;@{zcog<6k{m*$Etd;vQnHzlapYqt)?b3ivILCp}@G*B#mK#omdYA2VNANqMK^ zc=}WLhCQE^r^76x|ARSv29|Bnv`0j5d%Knc^2YVu@||yAo^E_G8e@9mnN%P7xKairRl9vi9U)1?xh zfbyw)t$#E8@XpLPsQeDTFaM_O(hadI6-V!ggLw4^U3*FYn=cDAZ7;E9etA1h0y zJz07}>p42w)2=Mh{V8Lw{+?CZ`J34b^XuJD)e1G7eyfd?W99iY*-$3(L71sO>-ZFq zd^-(rqNh8M8RaSEsyJbWmomo5b5yv*$wS$UFQW{}NvYqQ8eV4WNF^O%3`ehNc-Iy-KSM0~A}PRPKzk}x1CxJkDiHpm(wgG8kVM)YaAn zQS1MdbrK0r;39v*`*8oVhLIML{ds`ZdCJNNj)$8gltPR8%Jaszffnl$NyF{dn{}ML zS#QquSr)>rRs7TC(ti`wnWuwHKOAIT3;lr1YsRwpu~XLRxfOr##re`hr_{h7a!8qe z-H>eC9&n_Oe0KwRdRma@RQi{k)3oj-W%7?9XKgGR+ zXg3tfu<)Kv>Y|Z8j0|sy=%5hUgN4rZ9J5p{C8K$uk3ByMcJ{2}aB?W0DW}we0_oZp zFrNy7b2N-T=GMMz-*)YFmv2If#i4!X^#Ts{gYq@MbwosP`MoHF<*cj&-`clv(uT3=JaKa>!)4G&st&A&)CF7h7xIS#$t{D`B8DgI%eiAJWRCPVp??XHI@AbWx^4$^C!wV1 zd7)eBB?*m#+pQ@let{ETs^gUPB*ZD7w#_X^opa{MmviV})%oM$S*PIpNTUP{Kg6Zu z2{U#eDN%CLhn@I{6E8dQtxmk+#MxJpKV@9PewcfE9KUef5(Y`!HM(XlfmKhDHH!aC(eColl})zd@775e$|P;+KIo$ ziC^r*U+ctEPTcW_#HCL9Wlnsf6TjSvU*W`G=ftmc;#WEG*E{hyIPt5UIQvFj_rx2W z_?w*gW+#p|ZSgs8Gql$_aSjM39es(7^Pq%D|1~Fmy%T?%6TjVw-{HjXbmHuv49|}_ z@w=V)$DQ~+PW)acexDP+--++iarPaHcs4wPJ}b@c2nh(fPl=ofN3uQF4cTIU=kp-C zK(+}J9N2!pbp`sSKUDqd0`#c~l(o1I1TRCej8BAdBZu^_FGYGH!x5l|J5bRz?y4PER6y6A!f9WSk?nRG$-`L}KSwU(>Q+EPw1!L}p~@JkYk? z?p^>hoTOODe+Rbh4t&Lb)&L{a8TL#aoncGCxKJBDbPiP|I$MfJ8#+4;=riiQu=F34{jYx!y|jdSY-^-~zp$C(_bBpXNE`$q?pL{ddaKKwy`TmE&VEigP~ zjGjGDG&cKt^@J`7trm_9sfIG_|j7D2K+V}GX#I+>eeedPQ6OIC z*=r$*V=JlXI}IS;EjI&)eLL%Qx-EOKEci%cV4l*;1Y%gxBIvXOhlz?O1}1IXS;zf{ zV5)yVcH;l(#DC(%f9k~luM_{76aOzK{@+ggSskZbtk)Rs=)a6!ZsBALb3hAUk2v*1 zd{>`u1F%%Y~GB$AnOl24j%6 zJu<~JCCii@Sv!NDtgVSbT4f(vGf45DPQ!1y^YU|UlLr4ku&W;k(|B_%}5S zUEANdkst6){cbtC<7Y=F9GGRX?eN}>SFHaWck0gs+9jm{rkj4pO(!ip_9OpM8xJbu z3YlpOX`fu7$}^HVm2BjYHuNf_Idn_!W44(yZy8(vZ-Y4=sAb`U%L zk%nD6(SEbF6K&zz!`R7BpRJv^$Kcq>{>pcb>@)@TDO_`6r;XqUdHx+9>TYfuNlh_kDD9J<9JIv(0}A_f-^2nA)XlCn(AGT2mKzQ&ku3EoJa_o{v%xTG9A1mnDpNR#Pk&^+2Vgnr*rkPvhI6cmQasO%VcYK5l6tN{<#9USQ$Bon70qt!?^Z`=^Ufx zJ%sBKT#q81zUugEgMOuHj0BQYv!c}JjZ%#31HrR-= zTCo9j8)pMQ{a9@9U0sH02Y(g9ZQ0-w(1kYOCRID_06T;YZ165*9FKNz1^BjN15CsH3hS{X;l~g%P?byI`PkJY=QotJ%hpJ#9 zvS1E@dCkpJ08_Y3+A*z{H-b-`&d+w|czS-~Y;TydWq;#uz~gVVJn$3gyZ;XG_i_Co zO#jG3i2La;*6))%2YCn`rjO-Z>J_-=U`kD&LcM>Kcau^hvJB_ z-Ve>pVn1{e9D^?Y({jb`hkhQ}J;1p~6)(5|>-Izc0g3hdp;p3U*$B za=_F_s1v=vnZh}3-AQZwHuppKfGcKS2&9LvHro&FxKS|WU&jZX_)SjyW+yHqf`U6f z?4*ChiQnSHZ*}6g>A0y^+~jqJp;vf6_7-JN>hUT{~rwHd{N14nd#7#bE5@r_a_-uLDovCGDxv9CWsJdW<5c_>b}( zYkRs5JZ5XBf6+1+JN>JMT|4EGHd{N9&TTiwPJa4q?Q|vhJ9cU?Po1@$Qee+(PVDqn z@R_Zhj%pcaSo2{Kr0&Sd~{Pfw{=_>FSJ8@mzaC~aCu6`8Mp&i^hXOQ94 zdCt}oSA%byt>VTD>Li7W!T2}hZh9lVVQijp%=+kLs;guW-MFCd2Ewsah!8F zHfYdR8rmQQa$Zs|*9QMTdv6{mNm<{Ich4-au&A@Jz#@wdf`Ulv%nHL8l%xf;~Mfc7>yyGn9JY$ z{i)}ydaAp+x_9&Y!+K3k)l<*s`F!4=<2mc-30ylIKDY#Yv-p5<>)KlTAb!0UAMhSL z%WEI-KD{IZmjRYfFH+NgSZDX z$Z@Qq;hb#HS(}&l5)L@|7>_S{wMwHMc|)V3USx1+Ug5mkfS7s%$48vMxq3kNH#`m3 zxKTFg9*ZOCs4F*(i9YA1(l?Q2nUnq!&Ohs<|2UR@H`2q{Sx=n0k}^(9tt$&CUdFER znz3mW*PxHa*SGd+BY0-1E7Xa$DP!lR>q`7OX+q=MEbZ0LQC8Vs#^`)DMWwyE(y6_= z2<3=N)?zDm)q}i%qr-am-3LKd#xAlEGsXusTss^-xD0%=_<;Dim$7rxK8RmuIb>x1Sve7Fu3A2G@?8<%iR! z&9z1Nna(dFMPrc$+dJ7F==1+k=b#hc{5R6X=k9L2mDeK^8_Q>jZ`2vBYuos47lXt^ zc?#p;r8svn@m-5;_+Y61VPevrY<#bRF+c-;H@yk8jty?Q8tMPVuH@Zx1ia9OJG`QuSb~9ePBV+MRxMiw9})?Ha}>m zmmoihX;pcZ^Q|ed(*_V?OJG`MulEbnOTjXUX?1xO0!m{LOcz?&UOcU~*CR|PKe!2( zh&{5?X*FPxWc&k3V{Ww75Bd_zo%f@4MveMjwhora7G;p08X>o5(j}0RGV<1Jk zW~tHIB~(Vo_k2?ER5EB!!OJxEgw9jA&H)kpD6%ldf6vRSjq%!49j``2FchyF=@;EM z!&f(c5@}-B`5(q-Vh`A~*y`ylBV$f}v;qliq~D}`OMh_VHJ)q!JlDK=&U{S++2&lY zt&s-f3@OiZj4uqY8pl7a9aHmFyz^0-+q}871HW`Px1-=)iyk4LZ`JTid3>0B3eHuh z+Z&Umx$Pwwy;e}?t+~x0!4Gy7Xr)qR8s9;HNK;>|PgRiO7r^l2N%$>CQbqW))Scyu zmUZKsIM?=Jnqwtyv%>I7nV$%ge8}_SNb`OM%2RK> zM{~}!b^o+^|2>3J=0ED?&N&%Akfrr)YY*s<`P~Bc=ci-G`iva)y|fXmk#KzV1MJ+i z?6RcnoHKr%xDktq`&#g~oyR#h^OgTNpDQ~4<(#ufTdI6-&WW*V+jUCn!m`Q-dI%@H z{J7)2co1Tv9JGU&Yur=DDR;T%`d~AzX?=0*n-4fv$l?Rmcj7E#=SJVqX7TH!$?F4_ zXe+VpJ4Z4^-{Cb@K-FfOXBv5P?u`D%MVwp;| zmhqaTjFq(!d@IL1@e%0;tV#~DQHC4koaW16rbLuTU0E}9ahndKT#b&R7mhl52q%jR zM;&_zN1X4(p-|;N%D^<~-uuaL9PGz20p&+%=9;?-_?B92VoR0BnJIjAH2RrQoy+1< z-u3%=xCV)G9e()0GYwz$BbzD@H1B}UvJnH)H{Nx$d@@YR;?j+8z(3|;yKx%-G#%Tw zjVjH&OPoA*v4~+qdj`&jo%9Jfr_U9y8-69ZQ5tpXhJQPG1#+o@q1pcs&UKk{V5<)y z%`q}!K#r8hy7X9eJXc*`f+OW%D&zcaZF6E`W`1g>-jwhAz|!Vuf6;aezE5gC$7Znp zBbqyoZIn%J;241CsDJky*wSpMaM1K`eF5@@6%90!_w9AvV0t(5iYouhNKfJ%I#5-! z+4RwmUBFeFK3-;MHXY5SZThr*hdlZ-Cj9i1Z@$CJANwso{mc{m^kujD>DN4TsNmw6 zJ#E2D?;aUOn)bnb>4rbUeUj?Vg1Ldh>#)HM2XOqXqC=YZU?d2c5C7fpZhVuefPHd) z2d+f?P=Ri^1$2yG#J(K0ugP;eu5VDZOtUZ0X`J5hTqh58@2Q7W8oX|Je4(&u(c^g~ z`h6{hb3d-NHp|imq*+jM!ImiDdZ%-|~pZwkAaiqGs=8}k9>5@(Kg^Stn+bf!v~haru8HrT_+1=C8GR@S%4 zSMdfWc-W@NOF&YduVZ6JbGp90K3$ranvEQx@wFSTpW^u;$-~-E=e0_aHw?zMeuh1+ zXWPI{;ko`JIM@9&^WTFsyN9H#$njba+L@c?bIa&?3uPz02j_@elh4>keKYAPl^?cS zS%Slr<;2GIw><4b2oKAvM_Cd;t}J3w>FaNK(x0zcaMG0J>Os8-M$>oDO9IT5#dBTu zmNV{KTXxcWaL%?w=Z9pmeMzyQtlp`z63g(f;dRTY?|trqlcp?J56aSg3gd!$QSTI4 z(&oFeoU!2bx14m&KORI`m47{Dxx6XMrKc=nNs+Y%S(=yV<;L$VkNMZ-2W`H{a(Pph zYX{0AmK0fQk>$y9aigu5&DDz+begib=`>|=qpYyJmj2mhT_#g~-Vc6S#;@yh`PcOs z^>q(o;@9;VALu!cV;bFGmXCOSjz%Y@erBrA_r&V6+kUZsX8YB3|J>g`vwi>E-#)W_ zeeQ3c*}i}7Z=cz|f9`Le*}i}7Z=cz|e@5(b)BP3ODQ-HQr_YQ=?S@CDI=0)9$v)E^ z6R?gEPuF$qtXF<(L6zm0iMl!Szw4=++a_~7&}RJBzK-=b?%UU~{>FX#I@aH~Z(qmy z8~5$&7<|o5$2ntzn@;D6dr{8v$Q1WiSbCZJQNG5&xDSs@JIwtacib$B8a~wRu*H2K z7UQzqF?xqO);{h7vFO%c`poT{DeGA5DK=~$_c>y*%^azH+yf&w?RWZ%n@;D6MG1b( zBU3Euc9v}=+hEt0xyL!@{n0547DuoRcIWRM;-h^VoMW8RroC?;i~Viy+s9&{j>Y3X zUdP(34YZHNKpk^=hw50HxNqME=cr@El2V`7AWPSo^S(0D(fzb6TSO=e7C~VR+%hml1-oH2-d;C5I zc@Ojcg}pfuzGVSA(vtsE@p$d8R2qltAMc#A-Bfh@58-qi=^}pYU}bH5TdUqgD$2L| zimIY?bwaYGJnGl}p+Gt4Y`!U~c>&YDUltZEIBAi+2^Yln5uaAQx=lZ(A~HH*aAlE? zt5-$ww!XzZ9XNFjU-d>FH`2o%>b@WHt_i3E9dOr_7gRhUi1C&FBB~L~vteP%) zessit@_ib77Twe1y(E6*TW-WL(Wq7VyP*DsR(&fpo2TT%N`}9=(MLM8_4gd8;#0yn=f-Q`;eGp=>D{=l*M5iXy{NPG*az8^Y0@>M z$qVgKu6sMfD(-n7k8L%Nq5F80aVF!Rmg6nC>drYi>fh%@ZQzHJ_1!w9ALFa=V(e;e zf!|2cYZEP8HFjv*f1YS#AW=Tax9!+%-w#Bp+txrKgQ@L0{JtM7`N1bxoUttNOk0@R z8tHPf!7BBY%t_&WFV?LuI*xFZx;WwTzM|fotxr>=_?YqjF}dq)ct;e9J8karcE%UN zyNY~+y;3Vp&Q(jen@{$_f0^OWXE2b1&lT$r8I$)U@@qv7eTy3xiVYqgStxGAabTfv zEHvjW^kYF)82qO~k(w0Bh2lI8#g9knVq?KvSLKg=JLyig^r{>#Qs!T<{#LeZY1T*i zA@1mxP$WHO(|A&3^VAlbM#VO?TX199Bxb7P+oziI5to^n=;Pi|3cnwRr`Rm%RHNe1 z>Mvg#PW%ZflfVarUD}G&1S^ONQWvzNA3RsSzud$_1bD%+G0qd&m_LMkcIdPywj#$E z+?c21gY~_LQYG?XCN`D7??HT0x2)3Ao*G%Cis*3I_jPp+p8Gz7bH;=tqqsy}6FG#5 zG&fhyvs7B-_^JpUvJ-Mx-j&1qWt3fUNy!eCl%A>uq}f(6ctY)Xje&md3LP zf}8xY?Ry{oxw39U+RB=)l1Sx?tZQrvvsQGcz79%Bp&LUF_vQaIv56 zBS{i?XhDWo>wom;XR4-AUFPJXv**7iC@P$$GYz|G)-6-ANYOSQ{Ht4UZRP zUFFJp{zfnVfmphethc(dswc!#k|AAP#ldO%dteF{i9x3&U?baZ6iNlL8 z_VN)MUb>U4Q(RfqS+6YhdYvn4!zErm^zzc3WDU8pT9ac)YCS}+SKBn}mzR(F<)u5x zV!L45jTx^j^o zR&~xROMC8hWo>womk)b-=}xjvb7i$AS0U-?#kr)3lgppyMZR?C;=C>t4$sx5)m|=!3!i`a#*3cy z3YRW4F6TI(n6V|slsBiR>i2+Q`z?eudS*@IhL*%+s%$=(S%;uqN% zp9f_J#_ern7w>XqW89u5n@%vYFyj-ADX@#LB?xOxaCy%;~0IfP`Lu#Hl>vuXyc0 zge6-PgmXMRq_BXI;nP8PH=RvPA~<>{gExP}b<-tnRox zsmBr}14fMe5ugQ$(PJsj_c=7iA&O6mPYxkFw=SomtfPxw3nNRz6S^$ZY2y>SZf0n4 zVsw$%vNT2&`c>&+$}!EAKW;kT^$9NTTjS()inAAi*60+i=i!RwP2U`?((qB_n;0Fk zjV`F0`}Vo(f(|dXvD`H7e(G^K_!>RbTBIwBdgyjT+8frZ7#--19=IQ}Z=biONp2Q9 zby;xIlZAl;NE+Q-pU`KW{J=#wgI}+Sk|8#2FY17GKuH5%{aA=_XVA9zd2J4;>&T(!ul@0a}n49i-2&G)4=J8Geb!)d4MoI&~XYoc9?$RJ)imuB*RA>4J_h zYNJxoWXQpj@Ugp58yyf&LuOu|d)0 zPsO>OYtZlL#EQDjMEbh_Qu7T(FY}K#qKt=aE56B$Yuq&72XX#Bl?FeHD?r-;({&Gn z57t!-Z(>ASsMB$b*L@H9@T=tGaNRc?+Arap*d2WaC)Ks0wjJ7k{gR`r&)ZZv#J8hQ zk~WJzdfcpSo~92(cEnHH8-MJaDb;6Ys<@do(|$E8ZXt4EwJiyrZqPqRPkK)3O91u#a>#LUjs>ZPr7E&jAD zd&$Ulu$$EP(~;I=_Q&DcouG==B}&^iw@Qu4T_rr(Q<|MCH7oNR@L;2TTpN)PkNrrV z_6zN#*KTCYp!^-8&0;IqAd}BQ)-hJ6L1getyEc~EuIV)(zg-K{Qx6wsEOw<`(_>ru zl^BDhCZ^cp_TfyT9pM)r!5H6cfcm~D&8KPXt8-%ak-<7iPy6+ z+p|$z#OB7xZ7Q8;&tkM$@VmBO4BPgCe-^kbel%3o=B~#49N~NTxn@p%OpI?0(-J>0 znX<9i5c|j5gEah%9kvHt$f0a(9sNP%o<5j!v!LsX-%@GQu2Gj5T^2nkNAu0=2e7#A zPb{A6aDPCaiNGaytiU=m*uXWT8z4)Ssn0h_t8qMt^Yc|&##^dA3ejfKQLhug7gDd& zd`y~y?Q51Oxx=x(hAKCj zQy63Vy$$VRY$J6`#=oV>%_F64vs_>W0XEmqzoXKRHSHqnWczZo*|5VWRzJnZn1g6J z(jIbrtmI04JjJHPE-j?P*hf>bzeVu~V-J@*9N6bmu(vjQ(6#>3AKj|3!*;4avUX1^ zcQ~+b^RUm(l(0U8OCHvDsI+bCl5`<#^e27381?#L9Ce$m;}6%1%M}gVY4-7qB{xps zTS?=PXd7_NbYCdR_F?R5KsYO`0sHyHmGG43rs9{Vu% zGq67a`?Q0^#r`zxBiJ!)DUM+W&f+TU7^4-} zU|)-U9rpFue*^o|v7ysFJpfe_6x9YzuZ69^C2LnsW`l`%$V@F{7%+?X91yz_`wi=TqoubF>S_UvAx9tm6Ap`1&$SBe8M0 zO-n4i8EF#>l`8t*;Pd3Boip_=g_gJwFKM`>P1%I}2}Pr^z8F|vV#^8EmpW<2@yk>i zhpyU|T`1t`h;`}Gd^OQ0+^+bWc&Cm5TIvYgK^@@}>R4P*`Q7OEa#aS0gnmb>Jn*OA z2Cqcg=)}0f+O#`~9Yj88rC(-!XZl1pu2Sf!Tc@~s1@!wZ#gqE7k8^w_am6v1#fLV! zI@8cCx{K}IijSQ?g=vXvSkY21H{OW>HZPP_em6FMr7D9%!sfUpc4JLji7jECc@H z!?)vFQpZ+8$Ll~B*3qZUpkuMDcxCY+Nc*DaJHg1)lVgt(zVoTD(B2Q?e4k2tz6{V( zPvF-GH-lEcBU48m2x>By@zZiZv+`4ic9?~^x87-CvL3g9V zc7lmP>(@Aa7G1&4)3s{ThsCegfWN2fOfB?YPT^#Q!;JsArVyabq9c8o#h++1ymd7c z>q{&zfRU$jb8a4&3?}-Ob&eQKdq;g^bkwy|-*}Ybqual#O?&=4T)JKhd7iG@>$BTh zBe?48i}eT5*N(%XZ-6$7e~)%}FGhVm(mL;k{G`q${3^+MDFus(?MKT&Bj=1ZZap2LckaZ5ePpLWu5 zT(fD3nu0N_LM>HQ`8pOJo@HLoHXo(534F=ct!)k1SiAfP-g5o6h zDeSMseg*bv>@&7(2ygLb7}b zY|MFAD(0x0HTI(aKdQ>7Vvd!`f_baOBzEnDd7p4^>Ttz~)h!R0D;(E$}PxhZbPz5_ef z4U4;M8L_Q{SNcV+0lD~ZK-$KG#xoYgzfqM<;!o1I!@r^pe$06~>cF{&s{_YVo(|DE z6|NdO8T-FirEPx&eFL<_zSt@2wj0{^al2>1&GE2{`z=UY+~_+S_(=;kI@lDQ;C_=z zKib4}n6@2mv==f5pgi)1elmZ-xRvpvNLE=ikDd%XhTn|u%nKLU_ZXw<_oqxHZAsiKhg%9 z9`n24EIs4isCz+Nj;FtZ<2`O+@3k5Orf;~S9n zbig>?g`;^t2>ee}WsQB+xIaWs>}l;fuu2_0%3=}hdfkor{{>w-VK?nzYkGTW>ugIs zgKO@NI@r(F_W`9%??B%PJF%gS(smT=w4-BJdG1o|N?EPuc6^LTKG38)90%LLL#nLU zwF5n|!9H46qFsn#lQ_k^H1e_0Tb|Ji+UZio+qYAgK8u|&_cvG_e)ojk9$6EWXrZPTG}N-)ON3Rz0TEad%+?tAtPx>wzHFFnu1ZdfWqSL9FCy z+LEob)8xb$o<1JIb#B^6uJhCCnJTqA~Q;0FqmtYsN{`E+@(Y*c)8ygeg{rPU%BY>tfveyGxDv-b~KJPF!< zV0t!WdG?u@o14c%-V8xub8+dhv*)`M`hH+r5BVN8w5#!L9HjA$&&QD?hHE&?LHXNjE;vRN=t8m(~({){1>(~#>XQyB`kgZq`^OF_k#|JRC zE87puPf1|L`xn)DELr)n$qTd<>c6csd{-kz+Yd|}NBVKuz=unB;;N774Js{ja9xk9 zN!os3+5lMzOfyMLZ%o4!qwNQ#7bY;tI|3u|*nSYuw<=tA+=4zUdZ!>k-w$lhk7KJ< z%^*eBIpX5nlW8xm0<`_W#Qx9oVXfB0%PqRObL-^5j}$J9Uv0dn(07SV#!hcm{L{uG zD-&3wZy{;4t_@jVnD%_DzMT}O?-FZpJW@)-rW-3QRN;b-oSP3mOQnZBn<~9@*?HSY zY90H5c~u(bs57xbear(NQ|Z$~nA?=?2j-{6G4rLy6x%*Y;q=B1DfD@;p?>Q6vHuXp z{?ChJ+cGUf8tpUqd*JJ;%<-=6Vsv@1#K(PHGx6#*p1(<}*DqC=yn3BNPi%`7J!3e& zKFDIexGWp?;Q+^~w4dk06#9PH?U@N|iFdLF-mfruJ`B8*1^eju$YrOe z$Fay-uW6bMZ^qSvlI7Vcg}zHWN!$F}R+pephmr5a8$KhTUFya^D+JSC-xi?l5@Qe( z@1J{^Qto#?I)o`e+a)Hk+s%qMVj+leO$cLcrlJP)X>IV}1&XiN2Fv>-?aOwlLlEFMo4Hp60eU>O<)Rs2YV1U5?lG0lC=G>(?tPHqqxS+iK{`h3qeeA z+J0cV7_z)r*B{vMF%4`AVG7XZ!4&r$)`w!4_zOu>^Sf}Jn`5hiS(WzM2Khy$Bz+!i z@wW7Q$n)*x-j(pN?G9oK(|3tY#v!*@TLk;`Gviq2tF0!kadT}rr_x>>2+($kF^GvV z?AdRA8V}M%k?msomcrzXTx8pBoJPXD0NNlZR%KQLho7_bvpOMFZ}QRyTm zpSB;ERzQ~LJN1znJ<4(Y_cMjdTdPT-?+3Os64>m=9b8--=Q8ct%lWv2rtJqNt^;}Y zik^2hgB&gEL6E&z;X>PQ*Wps=`+@B@!q^g{eHY_L6-M;qag3?u`hoR=1lCr4wuM_8 z^Udi{?EPHfT<+maFVhc<=eii>*#rCIbFK~dDQuXZMm9{L?FXi^i;4Go1JCUt_6AW$ zlXW6Mn+4P5iWlb;i?MF>J2oxrX_v(@@wqBo!A^qdw>(UEUIg}+2Oi9mHJ*LWewo6AXF60}Y+r_$ z;16Tt&>EkENqqMfOD`B-g0!_8jT>ASd~6e<7h*l#fPu9 z{KYtB^MKsZUHHX<`C+m?de%N@SN9O~@YF-}DLRX5*HJV0as@-Dc$oj@KY< zaPZk8E*EoX9KG7@Vj4V3l{GeMLr;9eik@vyD9$TRKJ+ZU-KGWaJ8W98P9Pn`s$M*E z;|ekbdk|}kJ`dJ+T5N*#cAFNgRTrzoKNpN~5u1Z^;FT)v_d`kAkiUzTm-ySUr(oEG zd}}Y>f2~ZH)az~zhQW1;kEw&~qXM*9FtBDR-hyE|fuVsbhDPqwtyk$KI@U$LPnSnF z*U>!vx%NA;V`h$%Rcx*eI1Xdl8~3Hq=fT1X?qg}p;F5>o=_>85k=A^=JhCaslRYJ4 zFpBr&pRdy1m^?t62LsnRJq*){`*(xSQ1U(fV|00BPsU}>R};49y(#+NlO3bWBl`+Z zHriL-M@YV_Hpu%alyB=`n3foZ6|HVpX;&4?(hkJyU=8`k_Rdq_FhwgN#;#%?UZb7U zFvZK{!L-%Ggm$>nNIWO_AYi{&VKKgvXGoK@#IRV=>UfFw8!ekJcG-cnwF~0VPN7^M z$!~Gf9u`BGwo42$=6zQT)6O`iXo#r3TH^WX?3b&uwk-#)6#6{a-fgi--+zrwi~U}o zf;IkrJp6bz$EdVn2y2|4SkXQhAB4tKjxWWI@3HiP^$wdBtn)})U+-*{>}y;`4&&|l zs+{$8n6^uM3ML)Px?XONV+y}pHt<=6$&8)00#krC52p7i-Wt<37n8J$c0x%1v2M{$ zFN|YKp(Q4iF*fetOYv0`^u||ERc^ht=4Wu(@F9kaRNC|jrt6VIcn{Zz2zR0BHD_?CqL#1td-o6Ymb*g{YIx-ex zPV;`77W@64O$+7)q>cSB$8+I2akX(+l`}p~p$++z{1q=5AM8nTp40W*iTD+WBO#9PtjTa`a269$e?-)24UZwBWzTrUm<6q=VS~ zR~$X;Pf$F9*i*{o!Tv#uRj}V{(}MkageYL?dQn%e)IOSmBVVrHkK8PK8_uj7y;P&viS_Nkw$G(^0$nDF~ zLCWCt_Dk@OH1N^w7vM;IOk>-BBmSwp{p=fc9%!jk;a{*9anE7AR^L9}theg(nkchX0yyyy&{hU9GK zn46m`>kUZ9_3K8K)<eaLX zsW582Zf+}!MvfQTAbn@2dZgq8b^6^NWhHe=uQyx|kLxAv zyx5}qdV?Rel{%^wbL$P(y?c`7=~dOOT@*(;9=NVvoY}@{s>I1LY`?cOrsmeH=Owvz z6s{e|YjQ>POR=^iR1PwvohJ?*yY#chRU{^*xU2WuL31QAu|640^UbL(bKB6<<03W( z*TCgS2XU<(GqkKr$8mx)UY(zks~zm+lnvR-!`736|h&ggItV*y!YT@ z#2hp7=jzo3x^U&n2o&|o;@5WNfmix;a#VIQV;N&l2Xkv%t5Kh=2>{2ggYU$Z|7*+| zFOO)~#Lk$6xsbJv(x>shiHjNIx5&<;Bde%jR{Ms^p?G3^7{Z6gP8!qOwu}R(8x9^$ zu16h4obAVSSex9wa=cX^8Rv){qxTj~QqKNdL;q+&DUyHQ>V`z{Ng%zle>2>R_Sknj2} zi`*u+NEp0541a$V%4^>SD>G8`S1i+sPS{zmY{ z#thx?>!g27r=b77+Jin>{Mb)@Jb$iE_vd?Ee@1kv{`}jR{-&)MiyF?csNo!2EAAXy z2Xfz+t9d0{2eb0Z?8iu#pdY^m3~oKlDm#l0v-0Yshv&bM@u{(Dxc_?}bz*dq(xP`OSx4K`=w>0*2T|24MyY-M7) z?wU^Q0lj2g{ChEc#%H6dV_yRTY}6@>4cnE^WJ`tDF{g+3F5qx|-A>-&!0XNL7?)hx zYSy>926p}bff!yJV^Qy$)vlp(ne3_YIRIZl2mSHgF7RgYN4I!W{jqX<)wW7=-p-o5etGcs ziCfo^mAFH{xw36~9*gd+CjNHP#O^q+@K2<7#`GuYdSdG_m&aGRYZzJd&B7<(C;z@< zQjhsa17C*+V>*~I+^P|(n|VwfDi^>g_vFmn$zr691)ekREBtc|n~4KuUu{^g9qOWA zaLb3V2FFV)#}N!-8ZQ?9Ukt0U$4Yz8%Zw%3U<{QDU`z9L(8u3P!{+$7D{M}=05;FZ z-uQV<`kK>+h*8HwM3>qgJ`~f(tgoz&77y1%c1bR>AfnN&#zh;t^G!KU{*;_ z=J~J9SlsB{fmde#MY;t2_is7%=*oXR>f!ls)W2!ww6%kO;QCL|xejz_3qOkKZPuvQ zMT@=bqQ%~I>!LOMbx{i#)f3&$jJ6pscEc~TAC*qVkECcKd`me&8J zuI2v(h1{5HCohX{+LaICeHikIU+<>>TAS{VKO$z`&qZ{p{`hH3KeGlFHIs>F2}adK zL1H7e#*|hzq}OHXI+^Crt@}UAh%<{1y1|)h|8?p1|6|ww5nZbNe;(7z#E0!uK@qDD zZN?Vu%4haNggNMkUvz;ti!Zvxo9d7C>HfH%n00-K=u-XhNUDBOg;*8c3X}H4^eb)V zN>;yQ`ON-^FbDnd%P#PC=Z|c7Q~iOljC=Ffsmp^Oas8p_T!%Qc#bTO%b{q$aSp8@- zZZrM}l+WxBh1obn$wztK3oJ_8=&ZT4li8I|GGb2miGOp*vGd?Zp@XR-qY+)2PgpM8 zCz^2>C}KWoGxjp}vEw*XKD$pM%xOLWpUjxM@<~R_37>3kRmSlkBOYO#t&G=a$7jp> z5!FI5mZxp0;;ZnVFOwnpCv)jN!zC* zqF7M)2Ol7vQ$Gxj)zRRhYy3{R0DkjKDe?ag{+Y3qi`5Bs%GX%`@yA6aZNuhKF6T*x+cOpm+PjgPgvukjbe8>bD& zNf9>n+7Huzta4Z5BKw;$TBb2`vb^>K_0jsVj;88oyy3-45jZkq&Jr{2bPizl*5ait zsaB^(oQG|k*pc6bbK7SlYcyIk8;!zL?7`>wj{`3b_MoEJCH|gJyYeWKcn3<`*5Y&? zxq+eMvi6eZXq^64%BWZxMDFO|j_#;11g~x*sq$0s?H*tvj5_@?g=?rs%Pq zw^DqYei#gnAl8mH9ZRvPtUHB#?>)(z!={1qS!{~lE!C#7CUfMlcCcw>25+a#w&t4S zGkC5or5zYN7>fflP8+r3OnL9C3Vvh+dTvp@otxb}wMEj5=}=i*HvLApKE-jS+IR5d zVCKebNM4UvGuyOTuQZ*Ib=#}KPo&{o88ra3RhIVO=;xH{#-4)FF{jg}4u10RVhq}m z^09gIiz4Gn#p&keocG|ei}zC~81(&EbXSM8UD?zrM@;PRl|1uar)~4&7#*Y9a`KGu zUm|@Naptls;~=Gd9sG1E-e@x4yY&hQ(Og#r(H1%;tV{ z^m?%jT1lT}%$inK+ZAgG()QtyeCAQ%<|~1&eThAO&Bgz<7=Es?$+uIY;kL-jf<07D zo7Suuvnp}1Mo!nv%4E7{38 z+2%%71p&gClD#(VD28b<3XloefkPfo>W+vP0rYHe@J1#D>gJlfE`$EVwkqI`dG zx-nClu5YhTw`fq}9Wvi$Oy)t(ecuEPpFvQ%-N$hzw}>CuRj0SL=IhOJ1kcdbA~KUs z<3qmK_YYlU$12qCg}9ERE`J>!J9*5nob*}9dI;$_j!3--jmGR^fj##RO|LBN*gS>O zmj6lQWz%~hYv5KV{jW&B+)1MkTl7Pur9BqgT3aX#QdwLKnm^iG!O*CJ0X9W*9WgjM z6T@)_ZT??dHS50+tPe4UKl)){=;Uz&sT`U0H$hg4-z z_TNjKS{ChyI4C>=yUvGQ3+Fp&*tM_=yYF8kJGGvG-~J(0Ni=WD=DAKo_P`UJG-MB6 z=cFO~=pU&x4pJvrmgkSdzZ6WVbz?CxH7is2ifxrlG!Ei|ElirYcn@0V6W3duG;lrU zy(*1E5LX;qIqH5j&(yYA$!r^6^c!NTP;)T7HkM{gkr#L9EirWp&JkaSC5E(biH$LI z0d{S_!yQ9Q99fXP=vz)2vKPNcrEv)QDp05T5<|G3Yis~q$2`+X1J_A^*Z~(~NbeEG zCOWFtd}Y2>uC6qnX%-o1d(?ND4Gl_1@;OeZ9WR~yP~rIBlvvmCewuuvd2$zKfVEn4 ze1c1y@8KfzH@Eb@M8*}EH*F}85u`y?+ z6Pk9<8$h<-FFWvTq;<@R4)gfo^zxdCG5Eoi4SXuztRA&(Gc)WfxKW2weI3ZDG~K|* zu<<_{!9{c+-NSM$qjmTu&a>)ppI>(1IY@_e7+LS@0RP|ju}X91yhanhL{Y6zPop3< zg=5b|Veo-Tm6rHC`oPUd4r!X>7+0c|4J?*LKkfQXC|WxzbNa_;NCSTNeh5d@57~H) zae8N^F)`k-_oEdS@$27%CaX<;AGA){feVlh+N9F6P3{2e{5J91fUa%w4-lT!CbYL} zlMP4*Y_d*1fsZ_Hr0+gX_LNa9mrb_YpUV>2dE$iqUsjtO0Ih42CnFuQ$y$WT2=ch) zvk6DUooxb|Jr^q(82cvbQLS1fpWL?jHp*tT%^xT^s!bX=7wM2~R#kho&EA7x-7#L4 z1?W2@7L=BYd1f#9t6 z(Bn64kMqLzShtElsX>jf<*Pe;%P870K0vca&)s6<2iy08h#PU_uul==*v$6%BPB=K zr-(6cC|;_o*tj5%TR!`Is)3>%?GtKG@Dq7PZXSF55T&!m%O5NKv^~C#bfErJ#C3rku9Up}w{dlQ2o&o3a z%1-)IerXgyfQgq)79~vb2f$1eIha5YF5FQ8~HyE_|NMjTk?c&Zv9^zU!r6n zeb+rWKSQOLK<0|=wORrDcy%YPMp(2@e}r__cyQ(s9N!iH4rPP!peH~|R`=tPPcas9 z$AkJ=P_cQQI`S}tXSK;kl#be-oXdDNp}%AEAUnsjbCJ-TDpvo&$KR9=`$MQg%SDVJKP&el%$sn&yeu}bLZSp5dj<(7FLporS zb*r$D(wj~84uf^a7>U&j87s_IwxeindklUTWwYAjPn8^P56NB?1(??nB zd~6&foNTR+^n+Zf_moNA3di6-;XJDjAM?u={{?AJhp67;9(1ohT>$6KJ`MHlk@8VQ z<&5*e2O&JGP5unDjy;RtMmlJdp2x=vWw7oT=UiX;YHg~;k0IAkfE)3p+bUX|$ZM;A z2Jfu4a_%?CSb+18fUT-yj3DH3Bd+fIjZZ9~SVvoh`i)Pg5NC#}QzIWT)2F{&rgSlg34m!WBITfvHMObs#WS|J)S#9!3 z&^k65I11^YO?sY(-Nsny7%v#xq}aqv%>{2ByHL-pcKKAyE=MQqB91ZxGxE+lE{pqJ zI5`6|GcHF7evnvWxT)jmoXiVN$4Q+vGtYM7zFKo$NO8MK5|FZ&aEISabN5E zxR}-coZ-1~$+bN%E-?=-uN^VXJ!w0S2bMg*wHneQe(tLs1FJeQNgLmf3rn$+2KSZS zSTr+l=3(2zK1lKM)`@tH?f;!^?q_wgmiQSZN5#MZZxknOG1{Xo;L(6BC@X9WJ3a(S zPqz307-Wr$&ni6H7U*9BwixTt7H5I0ZL4%#P*&Xc$ru@9+1zo_&6?`xlpJjfdN3Im z(T`edOx@R!RV-@SZEXw6>THXZESuXF|Aw+z*qZ9!RKTdXF1Uu^O3;FHxB zUr;i&Eim5=*kVnOwy1$?(iW5zw#6FK_r(?ugHKjld{N2Nw!nH|z!qzJw8cEQCT&4k zVOy*veP3+xAK;VK7GF{_wJlCX+G{&y&1&sBdDIMf+=#z(n-P0%=9oP!YTAtBFfIr^ zHxrsC%}rNXR^;YsGrC!;{%a*i+v7B(L-yb!Gtz)6`tI#<6H0crM`#{^dvm4M)b#dx zlPvPv)E`j&#T_6FuAI4dC3_E~rQDm{itcXqPQ>(={?+jOK}zpQ2n= zn|wvd(KdNJ(jlAle4po-ec;^LCd&dgsWj|dB#%9Q2EkeF@i(BQ-L*YcYs~{6wh|<-GroROK{Km-uolo=J8JQjjib_3VHevxrSfYbC#c@ ztk|R_Y_!g)&vOf{dbvQ^N8W*8>2}X$eiiwSJ&TVZt?e1{v~v&Gye&@@-OYR2il039 z`L{ML>&<`U@HcX_&#Lwb7V_xcXP+vgSVx~>4C&TuKBS*Tu$)+hAk^G_YtIh`>ethpFeGtl|S#bE87bHk0P!4>thkUMTM;p2Q|p&#xhxA zdP>nE2H6g=xQS^!rm2`#DB^pfAJddxa__CePrEsmztHmD&F43{4Pz&^JTcGq;z-2& z-z$td=D&xuv2`C}p7(-XpZ=-C-^fuuH7^RNGTr-hf&T31(~|=}m3ym<2y65r;yYj2?b=h9)x=&&|b0mDtxO9E-U8Ic<`rvEcA9nfwnZw`6(Z24v{w~m4 z`F$OAzZ$RjdP3npoWA}~$T$+d=5xWWFa8N>O|6k*G7@SN1`j+5HKK{8yXiykek)w6SfMbqG9V{`~{XQ)KX-m*dBQrzT`1 z>k&wTaiV4L-jU)dGJa&!qQ}#a_Vq~CC6Kh0!MTeo<6)Z?8T7a>BUzt7(pCo7v|SlL zwrP>Up_nftS*JkKR>n^(PqEccZCYf|`o4@cxMFa%oy%)~{LIpejGx=I$e{Io8EbK+ zI~l*Q^um)UeV*&cQrojFZjdGB@SImVaa#N;(mwz7xMFC8KlBgU9+wmRIhS$ye+_A$ zfAsM-MI-#XX^+|ex%?kY@|Tgl%fFlUm}5PcKc8dN`1R4W$Lo7tSG%-c!~_3yD}b?kkR#cXn+QDdD3wvCM5QGJ2ZliEJ|sMgP`D|5Vu;IE&5aslj3-AP+NKh>{0vVM;D zwW{@5d~*g2xGBuC26u@{55qt4^;TSyZ>8`^!921o>Zh#3@|@RbXC6sY#?I?G+SEnj zTgFuj46rGj{k~T?0BoAKjQJjewDDI;n@ZiX#s$U(F8|`e1pn-H5k(XAhW)m(4e=M* zulx9u^^){i@w1O{`Lhr5`6ugT7h_6k{~Z2g9pj&@mtBl02iW$x{55v>XvUP)mF6oq zEYtls!{B^ zS!dWkWsPY%$mP$nn!i5km{=<>bBur@D${jL9J9cp9b+OqHq}p|M6&b51ob=;F|ibK zT$`SWw6SGMI|`D_K0CqZU;Iphe=;Vd56O1_e&ECy|Ia4)C)-i#mo?^=#rU&-_3e{v zN5yv;@nfFq+Q0bu1pj0^+D)B7e0u!KSZ;J*%642|IDm@cb-G1l_prwOr}_Mgf9>!$ za^#-++I4xp!QlJ!jo{wdr_ed!)6jFR+PBYBI=H?aw%5A7_qIsJc1OUsD-=fU+b1Gz zY~Baop6>H6e%aw~&bbX^ zCk?K3U00?5Is!h`7`0E&23}+9KKS$uWdp^(_%{xJBS)=Eu3g6$jYmL{y>EqWwTryAEZ)g`+Nm zc0g#jo>a!Jd2rq}jGgl%9yyQUkv#IW*~g;Xk*NFUD2zI`8EGaaQtCc+&02S!?DH?u zk3Roo-KPz+@;^7m{|^%UlXaiI$;$sJG5#M;@K4r##!puM=f(K{VS<0M?$dr*`Iln+ zzn|croUb$1v+{pxjQ#Unu`J-)c+s5L*BkjlM zdR#Fy!k=|MEB{ejcK;z1`wygj{>f)C*dAr&&)UN_M%CZqPm=rzLDL9+wsTqev-Y_B ze}=TiuaA0-6un1}&yyB5g8dM7k(oB;Li^zM9cs+AwK6}!l2O?_Z7%w%Bhu!w#c*so zzz8|BQ8Z{j@F z#s37PHGX}xebcHQ`=&)3!Mx5h>151x6Vv4wf7T(*Umw-;Hxna0KYw#z0qjjoq|J4g`7t5ux%@2~l-0J7`R;R7 z8f}uS`%&*<=Njjs+{)PVwp}uIJpys`EQL|GUDVCkKc(#gN#?fY0-t~J_Y?eki=z!O z{vUGq8$EP?Hepvy=$G#Mvjb%mGjY`2xK~F~{+N*Y#u12#3!$W2_g{##v1Lk3bhFO& zY@fgUE|otFU zEY8nV@l$1HB9}FuD~dPTE{xd^czq?-vhb~x%0;)+NnfAMu;kjp?asWquAn`8P4r z^*3VRCy}9ixCu$qCgJ4X`z?RtN@9xLi*~4bZ=05a|B>+DMUdm#cO%lqt||U25?f$? zgc#uaX#*F>c)ldTGua-2B*+t&6VH4y#$3#dL5*1-y_gv3{<}ebOf1?25k1DlR`tsn zCf2&H(`YA-NKCv4a$NgfhP1J3N=$$xv;P=lE`P?L=C6-YdpxpA4^>H@WqhIAV>pXz zC<`byR5<$RGSE@1$b}u9c6p*QV`_Djk9F+38N;|Awdf8Uht>IlIwuyi6}ztm>`S9v z>(jYiZ=x_ZrT^}&g|bO^)6Qe8w4Z*#R)k#&MeNE(A9&`(F8m~Db#}g4nrdz(iIKPe z5Og{bX=z)Sfh|;*aXC@%C{N)gp8>{+_7{)E>ikrB?Yg?Y0j=UZ9W6w)(8DFqB;F=FsBYZ)oJ~_inO(;)A|DwId%AQP90?O zN|||LiO&8aPO+vZD+>U?t= znJOQ2@3|N1UT)JeuETiMvw{B1Sxy@;26EWIt_9_(PkesW^`m|)E2j?Sd^*_mraU?f z$8^v)U~=lPF`o`no$|z@#L^it9rU6~P8~Mo)4@KYlgAHFi0PnzDmbSOjeI)rPEY=J z?M#$)>qEEm;n=u$0qk*}CiGR^6So53!J4)%GbJhAjdPlt6Qy^R?c z4rI{*^S4+(Uz))bcWYED^84dSzAoky{rUW{2i!XQ18WX(T`J9)-h6VluZOwOollRw z8?)$v@m^dH`7ro+ZJKKjv_iOiDp1qCLZXNDLPmF!z{-mDxG3fdF&heR^<_72bdamnD&)YKT8PF&CSd0^( zjHf(p;8SAy^wtL6mZ=R)*JtY*9f*1LInUFlQtfR$W`Cyo7Ff6B2SIyYw=BhU=`Ggw z4})FDwxf+MJ*{m#HKt2%^O*f3J?hfa8pqROy7V@m*i3Y z>jVc_bV!#^Tk8nK7;mojTwfTVt}eaR{R7ma7hQU)FAPvum)`3Bf#Du?>8ZXjKwVvW ztNRB=deo(-`odKNSC`(_1`iy{sY_qRGF(k?bQ$ZdzI-@SeMuXe2F3)@7<{@h)$5pm zb1PTR3wl}${qTV-K1Qf!-?f%Xu4uT!)oY*(5uWhG~H0r8+ zp1Fg59$CfPs^0pjPYnY~M|}eI2R{gR<1m|lL9?2AQopkE8A9_|yr{3nTkI+ONH_&UjhQMi<+X*G{%!OPPf>wF$B@Yu~ZA%~y$+>LU4>XT)aev6)ubMgD+ zj{0_d6dXy($1{!zog5OOiPb4LTg&jC1A z9PwQi!a44}Q!F^0y51L@mjY|#Q)A0&t-c*sBV4u})J`vX`G_O&Bj$**(T3QseQ|ZC zNz*0|Aw@aL#$uzls%xQ`+OpXO70cv}Dd4;IhhV0IDiJfK)|eAAf)ABb$IN(Z%!Z7@ z-fO&w?w7UEea5OTc=GBl^=Zbao~$pW*2=cJuRJ`uvo6PCE~=phkEt4>KVs1OLt#=? zL&sCEb%Q>UHbrpF?35rcsfLJt$1|w9O|uncZf<&Nc1sEMWvW^S5jGtoT-TtUOfv>c zXs%dyo%$QB6K?|zF@)+wYo<|g=N_@R*xsDU*3KTyI^i%2)Cmzo?8mvbSHiW9??XP% zRT}Nl(luo#{T)Aj?P-3RHeYlR=-cVbzMUIo^sKL97SLC6D8tiN(JTD|_5S$ZIjFFq zjYB`N6hkay59sUVi@xrdqNtlx)sNC8>=U{5MPJ1%ps(a4^i}lf`absd1%)lr_wmCA zZ5sM|`P7%;p6cJ}+FbwQ*w8Q&zN3&c;*>TZKu1l zXwkdwcF`iB`?|KeuRA=tW4@8@cZ?gj2FfjEQ{>P_KpluxZU9Jh{u09!BilleLArmuqDwqKqTA5)Rp88#wK*~in zJpEA%HVqqk`5_w)ybAPfZRm`ld$(c4>~Ppn!3@~Y%FJlP&%q?xrde#b=<-fBbjH!W z+c08wIBck325e|$X0&0qak%KkoowigrF*ww#O!d`P{9n?(8>(k@UgFP;tpf6czfvO zhwAd8mvpkBGoJ3muqDwqKq zTA5)RdUGb&aO|~Z*n}8KpJh(za0asG09|AjZ7 zGtW`%_%LF2IBck325e|$hHd!dGs`MQqBxA#WiLMzhl^g(#)f#QUf)U=Y%v>lH@^q7 z)O)D7@9s|UY2&4Kt}#8{awhmz-@tmMl+*PP^^&XcwqD+ZbMV#qTpuqy0ee~u;eJXr zisIhtp}t?HnI-1<(BGBg%(I|-ltY_@W5By-1f5U18l+lBwC7&F=={HJbjEbD8qG@j zptHlQ@AYO{-BeM!dNxxxR?=;@{O$#7BiQV5&q30$nU^1`H-&pZpB6V%+nuk(>P_ah zN8-j|b~tS4;`D9UXuS!%p+6Q=hm18xT{t5A^awHeB>u z9c<{%S9-RgVseU1m7Z;=m>muqx;T9sMmZ|Z0%H#^&QO=* zV=*s37>6C!>Z7Quo#s`gPai~GR5qp!Z(Oix^eJ9`(1xAb!*$@t zjWT++p<;G8Z0O?jZ5ZV!8wKLfTUUn-<7*^de$a+osA|_QyYrQvZK#+X4jZ~SeH%tO z={77aDXSO>_bFa}(1zn3Y^ZOn5JO%Y>bWUC&;u?}O!xJ^J;&J2eX8T#Iho37W5Z7$ zRG12OB#%w4#htr1p+t_eoZlZs4J%?G$ zhR6X3Y`hNr<@q_L>088xx&Ad?EIj6da^Z1%7jQ;;Yzu#ge}Or3oUgvWJ3X#)+Sv7b zWUTVhMxH-?(54xiZobrShkpMdB>22O@rQBgr;8&Qk8$e_u<2YEA6F_go?rO#GvQ-d zRi5}3Z9>}Co%-f2^;!FHZ+YFiy8h^=DtEG7ABz!#K+)hijr(eg-`rq&le&gB=v|+0 zN)cYx7#7}!^P_C~&G7TU%TyYNH+|pc5wGNlJzK49t%-7l-&KviwjA+1!QiXysFpyo z65o8B0TXQ0Td*Cs31>stqid+g_ukLfuf``TE$8`a#Gw8ii=)ayZEy#F$5ZA)_7xb*EoNRqOqenF7H}N3h$EZ zjM|J#7BNwNUf2h_y&RWR`rS7n{R)-FVPRIC1FQVr10R0ehMmV{>bOK5cc|l)>Ub57 zLm}Y-^2IwrpuiV%z)-J}`r;t?7EbA!j?ez>SSO;G4H_ zOhLI!bBElwTqb<+c3gcPSEB2PlZ96v^W$q@;-sHF_{;LWPMXiM}HqwLUp0`IwUFIJ8Rm(hx z{7Iyr0ejpT*G5F2^I|M%6TZWg|%uYs?wKZWaf5u2jD=A)2q$4`TVOhuoCB z*X@atCXHqWO@Ph6JeFQB;TK^f&d6u*2m3(%@e@_v`fDo)#?SxD_!f&jo9nK(;*RqtaK?=4^hMMjYSzFE|zokD6I1JnB#Hz!|Tf zQz%^hZImm+U3cIJKMzo`yK#ImuHA+sZX^sWU`M``xfx|Xjq@{c4fJx2dV{X`MjRKg zpNAdoKyfdQ)Zve?myx~|N7#>i`EKI?ZHD+C7{>ACIG%;$b8#%=2y6ov;`n(SpNHcj z952EVxCb`k2%H1wN|3_@-W3GNL`$*v920d7>q)#5^1#G8dU%<{h z*y-Lo5i0CR$6L*6p}HAiGKmiiql;BEu$}2s^)=Z2EthfNV7pY|2m7&2m$8Awf2##5 zRsj9g^hoXsue}nY($<+qsn#grMfM5l(TNYTSq~O)3RgsB(GDQ)XBsx_nG@wfz8AA; zF$ub>e-}7kt;*qWHDZf89EF&;dNa(%csK?-wxI?5V;o@{T7`eW#ck<2{1aff&N!jY z*oGLRn&wqFKbcoSU&BAPS=g46et~D8KY)L`<+L#LQ5-o2!8Y_U{QFlqEesvRQS;w~ z^P{n28=AyF#eb-Q^EJGR>)(owa{dkc|IH{p^azd$!_ZH0{<-M-QtAu8avQos4)Sm4 zb{wcPwxQeb?<6@b4Bd<)?8t5Di=!j|58djVKkS^Bajy9f;ap=_fpeLhqU^A9eHqTx zHnd!yf#xintA2dw9Goj3EgQl4l8A2E-{SZfbxz&+ZW6X-w29)i>=B%EEQ)Q}f8*Z* z&!8T4V(ei%3Gt(Cdr}SOs9)Tc9mGFHv)qxp+>yK7k-OZHyWEkx+>v{#BllEC?x~L4 z<&NAFHUR_ei0y>;^Pij+PGIb*csPMRJyu=65Jwd=CvU>JDtoe1_GG8*$xhjmow6%F zi?VyLV_WeB{8Ri_d>QBO<5gUz9m+hz`KRzt#qEj(oPPy7wiSEv@9}b4SaAc6Xp_0E zsNo;KAAoJyD*W3fr-kLt`RTMRWn)`$JpR2$P75ojlRjUD^N*+1S2 zj?&P9&sjKEvAyCPoU8HLiu0W7BhGc=(e&$_>*qVy%Q$Cyi*3b)_^0V=lVu_ z{c+R_{TH{#QLjxr1D{vnpSI^6IA4Sv+ln{hA7x-$(ZIidk<-G8c^p-&uGoq5vbuhC zbmadPAH_dq=M@KVzK>UN{bTrdqMR01?8i}L@f!l%qU*vNI$sU@o(@?nzJdK)*g?Aj zBr6un&$JfKU5*6Kg$FaZQ7`EESn5iQBdV{W&927I<2Bfav2$aZ^F7c;I2V;!F21ze`jqt2AaxC`4aNQx~(SJn_-74E^Q*+~6F{#y`G7uT3c>SXgp?{p>``aiP;egHb z+QN`(>!d8?T)i4JyrytmP5hK8a%CQ|eX3R+DOdQ>QMLF%+Q%8WSn?>5rXbY#c*gW} zlm=DA7xedjbuOwsEDPUa?sW&whOt}ODt-hDFq=8Y?}LW6)fj1CUQ_9-ege3!QR$WR zZOYmJhbqj%7v#(t*9_DUM);kh;_8*)M>#xF4v%cpd8BQ4WWU5b$h_+#J;+4+bJZcm z4+q)En;ZEf#;*Fz;)lPoFm%dy7M5-JpTepCxN$+{sn}UGfpk%nnVqZRoEyuctyk~( zYd@U_D#@07=(K;R>X!k}tJofD{g}QRYQI?Vgm12TD`uga=bAH>*{U>=lm)+DwHsm| ziuNdm@Ub44n8-NUkSz-?^#A*Zq-@D6r?LH}!lJQ}G5J24*cgtbN^|vyU)JIq-njr; ziE;k2i4QN6-B4#VK5{UEh@lh4uIx8EH#^>{SGQrsuu3Omqm0v%eyz^U;&(9SF{yXH zMT9hDF^E2u9-TfRV1wi!)|V!%AavvC@{Cusc{6EvU3$Eh2Fi zuO#g$HZ}di=n?A|2#I*1$FKVZWs5|=aPnO*Lzea{#}tdINdLND_;tVV>wbYX6P!SVg+7ckBo$EU%|>$#ApZbUfu?bS(Z9N21<|z0lx4@+yJX{qxls8SEFT)q?!md~34O#66RFe(`ea z=0+1!J50q|Q`O2e3u0qg$kqLe+?OJEYy;27KlVY`WZhSvKMxm3!?I7|Jyd){e6A^X zOn20_a9mTD1U^(KN8IzSH!&aN4OVVSruMcX)iN2ZAdR`!vTL2|yVW_%POACJ zt8vb?93Ig}%8~0WOruYiBiDVHUaF2Ksw2h@a{VNA$`=Q*z{fZ;QS1ghHiIl+Fq*_u#ZaMrJ)z=n^`|hx1z3-Y0Mc)S;7)L(j$Wf2=VEYfAy9J+6!;R;e#+Zpo(7g}q z9%fDjIaghd^q*t@3+(hI{BzYaG20oR*dcnUQ{+VXko()ef%A7rrHGDk?w`765M^8_d+d=L|=j;5Bs3iV53KDsyO(v?wt44(UHOkh)TuQ~_k ztT#-rg07D*p7luKsGoheuw?52**V88e(sYCOMdW)0`ms`^Wg;^na|_W@7{@`(YRj5 zpq}he=4l-%Tg!rNL^j8+o@~k)I_hTGc|LIds!f#P%4R;(r~KVs@+Xgg-eb&jWoubl zHuF5$Cw{Y3UcUI{1@4qd*~^c5!9iCx^O!#Ui!#Sfk-ai5Tg%e2ar9-My8Dxb$9?!Y z2f0(`qMefm&-~B!)natzy?3aF#{8MDZjlSMmmX@vSh4D9aIq$unmHqLb`u8$r zpL^+_El`%0&3vYx_90Z0NH*nL3|z}-pn;Dz>Wenb>06LjLd)Rf6A#-nZlp(=^<`iJ z=Lx>0CVt5qUqM73H`1eRjPXy>Xr8Q-K2NM8Hkt+z`Pq6#U6T2l7j^V`QMc*29VL9H zwmw_kg?w(^*g)3{6ua`rsw@nB<#(cQ#5FZPjiHJQK89`6^UX>EMK>78kM!6K2E@vh z-x1bP2JYF zHw%A2z4CW`{EL$Hin40+Gjxuk_3KqKU&rhe=zUwz)-zLM;>pMkKCfiH=EeAn#v<%P zl+Vbj)M!qr&N0<@R-}%FE8V_?@i?J$Q?YX83z6pL#LmE0q?7uf4hRk`?MjKLOfZI0 zaOgft<8ad<9PG5xam?47^AV74?LnSef7*kaP7?>uReJv+K%g7bactdI$%(^}BYuh7 z!@(&yD5f2bDRyqy$hRB6z#m%QOgOfIJ{?D^K3i!@*ma8oV+9Wfk|rJU%XWn$jHNzb zi2~MC9O8LwqW@rAYg$UQGS5}Fzgdnki@rzZNKE5=*CRM`qu;czRG!$8_gnORSYB6r z=*vY{s4~gAuCbI%MPs>caceyN#+@7ovyH0a-W(?Xz{!nxlku0N0XDG(n>F7KJ6aXZ zvoum_MpJp=duqaeim$mlZtT44TZO^_jYr8Ecq=X>aP7<)^b~jwKxLomaMoiv2ZF<+A;#}8t zKVBXAqek6a^3SyL#Gkh#os3sUo;7bSc~6YVdsk3ilRq>dRotnLx#W$+cfNUayVG`@K%`R`n)teN5g5I>}qzo4lvTN$0& ze(9#G8~(gsO?q9wcHlfMK6O*o4gV!E{+zm{^N(hd-S9sy#-9rtY5eujqZ|IXx9r*H z$~OGu4>D_ zdwp=9K=Tjkb7LEM>vQOXbzv<}+K;Q-^6y@s6Jz{em&Si$zJ$AAW-!}@PdKIXba;IS z8IcxInT-APNW34tCQZiF?0ji6eqhd7!^tWm-WM%&kda4^cz<+lnv98h33sS?M?8-% zg+t)$*28qaTRA!ODSS63C)M|&OmlAME~Ad%%jlcJf5haZ`rpdY>U1UN;h3BSq=W6( z)GVHin#Q+I@T5{Lmre`xkL#ntx?OKZ0en_KKZ@YmXc6Pfjv=G+ zQ*+S`D*7zM-^~ZsUAiwMJ+@uEH_CI2ne?-jL$nz;UdLE=*UKbj@4G0S7wy4yYsal? z_=K8L43ryCV~Lr0!foaD$hZaWop_055 zY<%aPNXPxZ3D*R(BTG1rN5Y8N+OfSXXPg|ARnf90=BDdS{O&tm{^RD`MQ7?KJEHuv z`Ru4?ig6+?M3*$;=$ht0l&9^?dZyC5ILN?ty!W8+P5*!Foe5xF zMfLx0(xfX(OM$WzC^RXMnxtD&7E@YeNlQx?C~KOv3C;4Fq#K|_1Vm&hv@Ei<>`Os# z0Z~EADw~Ree*r}bxPUC;Pf--K|Ic^s%)N78UeYvdicEVlbIzQZIdkUBnYnY9x3G}M zObeS^78s)yUwm(<8zx)dcIbac`|3VAFEaHKcakrCyEe0{+sdDb@nx@6x8?cxPph?C z5BX1!4mx=K)IG#Xx+TTiNsN1&M<(sa+;ocBg}96*9-Xu!M{Sjdy32XiP=cK2Z2T)5 z|JugS+xRy&e!<4;!#K1pj{2IbYT8=MCzMPmi68Fv#v%7J@C)Z!!p;v@D6B|%%)Q%c ztE)o-e?=S7gHFUK9%~2beQ{&3>|TcbMa#=LExRt*!(3)$q2G2sX4PEP&VvA|Ev(Pl zPOj`FDKp%B7pEi1Yo43+#{9M)o0`J1AA(&kyTHn2b++vE>KfZ(B>yr|uuCI9w(6c; z&nk#GgY3O+TJ`LtXVhb5nCH-iF0EP^KB#W%lKu|!$_bwc?$+!pz;^>z+lqB$}TI+Vr+B07CBG|`!>=D8@fy#pYArJ0w8UupVf_?6xn zz{VoGz;2?psc-4u((qqcJZou9ZQ0n;Wt@T*wl`HRse`T{y~V!MF~uCpH#SYYdDe*R zk+uwNnd`Jyz@?9{{)rju$G@+AsGLtz8OdZg+5ocK>MGRokY0Zp}sW zSJPL9Pmugp*4$!?$Me?}5@*P3`dU5T;ErbIZ#T}%@woY$=6hWGOCLatmteN?EcbmX zw54m!s}NEC(o3uaS+pCQbV&63RATFl`}ChPzcntB6`eA_t3u%|jlD}WpGVsq@iN!C z%wc8QJ}2hsd~cp=523ju&{>tUi_I-f<+b)JUum5;iAQq~-5I*(m*%>7l-AsGeSmLS zcXKV8TbNU9!C^aTHqHc$IV6WaxAp+H{WNpy54QbiZe^(dgP2?C?Y?T;bvn$_VZ6Rg4y&@IoZN-rvSEjBr|LDNVnl zby76VYth_%6-{Z%W=Ti)i$KskaP29rAp2Ci3Q8+qcH{V5+U={!(leE&3}-zNpVF#l zgpG-!wC29#Q_$X9d~Of!)7)NMG^N#dw|zvY|wU4bPB^XV#04_9VFTA5ull%X!a%;LY& z?vZgji=XRSX7RdU&}(*V)tALL!N0*Pb9PX2%o+ocEQ_1c+QI)0plv7X;seug=3FA5 zv5N45An4ejXYhEpm19}X7cJ7*>QX%ITvJ%xSk+DwrVZ@9<7HQ-dU5z-Q{2AhXwF~2 zWf#$2E1rU;j^6LH;(~50UQxY(@HPKEb2oUThq%8coOw~`Bg;njXHHGb#!Hvy$!yS*+E@`;dLIum;{vK&J7qORi?ZtfjX)zPTk1cQVo?#qy zK1_G2ff|7BWY+=pzyhEFXar6K76SOj>}H_Fw)p_%ziD3q*4vF^iUJ=iPGBVli(Yhe zjNzM%4vXIA6rn~h>$(>)9Y=H*#S!#MpwiysYA(yY87$mXW?sQ`xd@#0KI%L4=VtoX z3Z#HVKpTK_&h7vf14{sQYuU?y<-kb*Yo7TY^5==UmzsSl&@~pEz%{_Nz;(d&zzx8S0P{aveZ2)(3)~uxY3?!T;4-PmJ$~m#HO9knwYXjzv*Yel zy7GkM@AHf`- zN|ZFDaS7o8ojmX)S=PsFmW z#BoIlIXh~b$Bdm&Iw7G7M@%Tg5=#?uI%1|e%Mu#5oMjVzkwRiwaY9RunCPY@mL$6A zh>31m;T;n3H%q@-!=FH2RN~1*?8K*WbXzZwJl59ne z)2}G*j>lQ-IAigB5k1Zl$LZ(0I>!bc=UB%XcgRn9oa2H+4==7fWac5$0{y9+F?SA> z5>aM}GRsoNR!*KfF8~aV7G@tct8(&G6v3Zj5ob~|rZYBEr<8Q1Ga6H;jO|KC|5K-o zOQVOH*5C9N3@y;#^fnC5iwv=5<>v%Icw1iC1Asvcj=m z)>xA@JGHQFT3vld-l2yZnP$(dD9)3CC}URRf(AdQ#N-?~IS>7sIh!!ZqM*B+Vn3(Y zH{z0RbH@5P3|u_z#&w%BUO5{4G*K)yA%>|xG$c=K!x9=%CTd#KwqDb$Q;A`TCeD$Q zE0vxytwN$%vKq-imM$`oC1^U?b}<7vQ{8Z9svB}Qb*m2<>Q+B9kSAm&Ps~7O{wJM@ zuN2>z#Pp;yiRnpaV(CUN8otPv#2MI~6yc_8oKa#jB2N-$q&bo}Bh8P*8EI}L&Pekj zaYmXGacij7;Qj6T$$Dwlj+N0alW zrB8zXsJ1HcCv>=o37>c3X(D}bN4ffDG*2F+>|>86BYH^Hwf`OJ)Os&`AoX$$m-8p! z&z8nnb=w8b-x&WQ$3v#gr_bg?53Ua3lJ_q*pEI7e>EK+q=9~`v6`(KSnMYHqkq;xc z)O55p@#xXSDe-L%BM-W=XCN>ZT1GWYu<~-RL#It)aD6%ebW1=u;fllgWAm;!kaV`i z)!(A(i`IaeAfEl8?G&Pj9^?TTVYnLz-in}l1GF6^Empg~Cj~FJOp`#D}Gjy(>X77it`TaCbgo}#x3|eJXO-G}9 z_(gRili_l?Le?7kdroWZ$< z>ATg(8O`7-Z|d;mGr#BuUBQ>{@8BP{e3He=clj(YeK6^CS!=60s(fYovi_|*S-riw z^xJD)dgU_c^74OmC!eQGU%q!f0{J{$F8T-UIlXp~wPb9McB!%%$Gwycg6iEQU3%p* z=(4L_TKPOxChQX5{h`a}>9S|LMAn|{@}J$wT1Ez8lXdBp%b?4ycIo8vlT_S5wcKPpaWgSaSUvwFl%b?4ycIo8vlW}>v-N|eBK;rGq*hl*G%Jo*Cp?vYq&6iJO zkx`#sJ0FyM8T6SPfA=h5nt}TAD(%Y~&xz0g68a2XX=qz%`^-$`HmXlwzF3`!`J-!? zk4nB?>(e;Tc*gtsq>gUn4Gmz^^%$1QFrvd>?CG;7JlF>dhl}neGrjqj~Azy5uzCMS1gz{~QK1;gMr><#z zea7QIj-1}FN14iPiatxci#1=Lx(@%S9*uK2jL%3fW7wGiEJYLh= zIp1B`-s&~YjV9zoj~}_58T6a*SH`zh)zOujjkc#Z`SDw5%vGS98{v72lofUDJ25)t8*C z-gVxGDJyHU=9R9=a=DJkWp9zI^-waCr}?Gp$y~01a@iNut%0cB)DnGt z+WQ_h?WfSMX;8o2`Ud?cPcQhT)Dm^AuFZW?zDK>BltC|z zEuTES$S0wfMyC|(M>5*V$z629_xU}Qd=lml>#O{VQ%8?Ba!MC{=!abjYpeN!xbB|2 zo8;2Vj*0cBdp?cFK~=R&CXOF#uBz;KnDy@5F74@qIsBGMRjvDMg^`ysiQh^b7PXz3 zU+c(t>Q>NN8n2^zIG9IK^?M<_5T;SoYZY{L=t?aQ^`1yAR zBT_!T3dF6E$k)0g4L>>!=RUa!uKt~p`7P#N3pAT=^m(3mqBYV!2pxB~u*lSyXkhSqhz;_Es5+>`3;t)6{7Wzw^s|8eN~eEQO@p81wWU-azt zDWjgh+M}M?IP}4uhf=2<>x}m7=YJe}mholObJ*QJ>DlX3Mm?XiQ9We=W_>}3<*qoY3i%u~-kI&UMo_VYguU0>Lpu5Fi{QEOf% z_wL>MXs=Hhb**)wdmn8Y4viYVP4UyaS$?f&nf$b$|8eMgCGusoYun|%=-TU3MqO)d z=w8?6TBJ{QU9=Hh`}rS-uFd`?)84~&xi7l*`jk=ED>km{KG}8gMs)4xe;m5L2>CMF zwb6C#us6krczw#K>kBrbYpx~xWY^^z(Y2rdap?MDssdlp;>Rrx;S$qdiL`_4n1Gmou0$) zI+HfG(%U_V*Qbnn*80%1o;Q78eZ)re?B{6EE4~P} zN^mCHCMdH0npSFgruewzNww+G^} zs#?;~*j(4f3no)P7r$Vl`nkVlueB_XDkdmzD0#KjFPL{Va)`mB`$oHSPIs3rQrXmA z&G)Zs+X6>ub_7-BIi{*6JdwRb&RZNyC%l)ae>p}9Wb~M-Oz8Sys-R|n%KB{{W3^lE-O^q!Jd?pyPnmG|QcjMx|X#G+M^D0wS zA!_7BcP(dFiu9=SvsZ}I>@MJ&5}|CS{>oHaYmKQzWw>|Raz@v7GuFfRDg1hB7Pqz8 zU!V%*<^H9utFlX8H?rlV)!Dw#{-~~G8xq%-pm$eST0i-6lj)|>74x>`jGENqC6#=Z zq@%5o*K=B1c!8_Q!WsSs2g0tj{@qqP_~Drl)t0u`upIep%{l#Z^corb~M(y(=64W+j zZ#*Ea?C2mk>)r*m?KN$@`&Yl9t|e%0*TS=paBjmw$n;&Uk(jEYnO~paS;FvuZ?JaVw=T# z8FUl!HFiKWPlRi3t|z*hbf$STA;Y|J`-48roB1@;n|UKXGtU0J`HhGK$^GfP3Fkw1 z^JW)xr1{1DM-z`Amfk*$d1Ky&)f_6$G;b0_Bnahj^Cpq|UpQ~Bp+A}CjXp8!`pO(L z>y7v{27Q<}DT?)G-iWWuym>)H!l(0QK9Z|05oy3Cs&i%9r%-fVo{8X01Q7{BIo!NSS;j*o4i%WuRoeW8!+@snBVBYV*1N4U<=)?Pt0 z_FG-|^2*HKZ`^z$%d`4Uu3ai?>*}i(H+2L`w=Zr_)rB9V6%S*h=gG6tNA?}I95g*g zp8XBro0f*onspZT2Y~Ag6O`V{OY53SL3CYLDX0wwz4>~BalSz8_9re+_mf2TL3tA> zcj}ZWhgKe1GNp3rNTNPE}0%{Aapc=_{4tG~9bX6(cKhLXb%1i!}1pG5j)4=*6C;P|zl zcJCk{d$Ze5yZj;E_(Ds!ebd()s3V@c>Tf;2w3WH9qrA4&*HRC!Auah_+v=;2XX@)n zk6(Q~z{5X`zTQav$-dSsZtrMqj(Z!+ud)58`zxDv`uiZp_NFfVHDjAwyE*m&g0KCzN*XB*B4v9ney@Y@&+T1 zl()8(4?nx5l}0%mvmqKDYY0%IV=^HhFsG ztb=ABG{=~BRQC!MAlSAN_6jZG|7j=M*G#r$M7!3Fl%@5j?MJ-BL09)ZSuGR1wv4UH zA9S(R5^+T`CC(h&{8Jg#yQ#K1H?Fs-CtKaUceY7wp&Ue!P2$rs*ks5@UIu%N^IkDE z`nDM6(eFOnA^VAb4_Y}HFJp&4hW3!9VbhTv%Ks|J4s~X&V8`!+u)~r7n+)wR9AsB_ znjJQs5jO4GHg@Ue0A;$h%Y&@E@7FH5&hqRM125#^kao8+L^?_MQO4F?pG5rXhV5fw z-OzY0RwlveU_NPlM1&tkTEXRO@_gIF3-I;c`r5>J^*s{W9;3{!`|4t<8}7#Hd9=$M5e&K1ufc z7%F+#_S4z(=V_@#oo; z4X?>P|J}phqBr)eI$fXSzkPf@%}Kv5Ka>9^JIa^8);i<(Um}_ApVRHRyS?@9pYB)w z=k_bIJ%P3H@C>y&^BJo1yWO3k;-Ag$ojX3^>=8|neKP-eUgW_$NHR?#o6U5_DjsLk z-JY@jL`($L4J7t+wEcmeu}WaAGj6Xm-Cncw@tKSNxHDGtWzJYx-<;mf`KsG1`u<<{ zGZf_ib&o^Aj&G0GmCi0GpFA^VM{iG1xy(%L>CIW;E!6+NaxS`-zQ*(MlYK6FYnQ%$ zvd=|t>(bv(_PMCe>|$H?_D^HUAjoIncg*#G_2F6=HhTT*cqwbHe|>yDb#BV_z)OhX z@0adpKjoc2H~IU0_PS|jjs6iM4HF~_Av(w5Y{{PEOn9@?WQ9D??HNv2`YVPn>*;kK zzxsNkhi}RmBI{(oM<^@VScA>k%}+tyJtW_^n}r!Z`F7|gsGQpW0QUA{IB3#;q5$ZT9+N5kHVv>*-T;rg*UB5$)PdJX4gdChWDcy}4N%bb{LDT*TU@o~JkV zoXGd(%7Ud*?W>B)Mt=A)4629ydWL!mYpOk-J%ZpS_829#-z71~E@t-2xsBFXZ@KL3IHOH+VR8FMMM_xw1{Z@aLad zm%z0bvt<=W*5Z| zbkRk7LseT{t*SJ24v;?5Xc=|VzdS0VeCfp5aJo*qwCU*^-md!Jyfabv^FL4Go38&8 zQ*{eWm8OrIsDC3(9>uZA&DRhs9qB)=+S6@j{eOdUo2-iu(iR(QQkC^fks_2IAD?M% z)-QD*hO>N(FY~R&OfU5teC;IM$DO3R+PY=5WqYIR{XAQLiE;|)db3WG3e#)i^yW5c z#v{)nR<20SSkIZq;+vFMdTl~|4|t#BUqaW^&655O}=848Pbl{lt+g@ zn)@ot_;C)TyY+fEMZ5+vFSV$cc!tt8=SM<^27@2WBc3TldCW&Wn@1`qk3WXS9-Ffx z)kj?%)Ohsh{Ugq}O;8>34POej$)X)oUU7HK9iQc`DuI0{ zg-!7*MJj_`+j39U+4(HPg8zedb61`&Q5X}3nqC%+-Yv!@fgK)%JZjq<)HFhLg!X`+J@MC(4h%WH4(9^R7~?O(d7&;=MpA1=#W!D9?b;{(a?x6{p;%wy+Hd&?%sTQ9dg>+mpb(O2c@T*NW|A0kx?N<}srWwt zoqi=vr|I}6>D0*d{&l)4O{eL&)2WNYc|^N~$?Hnic<<~qna4es6Yns4y{hry%iP8j z8wwsb8XxBSi8q6>?zs7WqShQA*V^fDk|&;Td9kTzPv_}zJiAJ5DvisQ-O)y3Psu*b zlNRbHk;LM z_J540d6d=0Y47Wl_pm42jsECNe434i+gN)-(Ra7;NMiN9+}{HZdF_5k$>83%7By4; z$Ok^BEY*eH!uP$sO@`=OVmDvrIgf*8O|Cq2%FHo!P4y~b$_ym$3#75iERBiyfylOm zV?(#DC(tPhWr3m7{)sJ!cbDaxBHMtkvM90)i*flKj%}D}%_Pj!Jrir6 zqcP^X-^A4M{>OBuD`Yy!@Bxmg=0!ZFTF>0|K-i@Eyj5at=$fBl>^XzzQkBt#=Hndd zbZgg6;8T`xYep9uTxXb=tBmj>BRqkU3_xU)p1kggMTaKtRbAIkVtwO&V!XZ;Pb@OW zCf*s8+F%^RvlG$56+~y8b>`7YawuSE#xJ=GCJ_nZ4Q)23lcd41foN^}g@^>(R(LLw z))v>p_IxAemChzGOkcNUkClzv^{lRqpQ>gB^U-CE;lT~>uX$e}(c-5yFztB5(9D)J zampbXovrtD#^JAHDzkMa{}pz{=_m9-wlC`26noE1<$+A&tbJDETSRH=NFt9q7p~fP zow{JgZmP$+!#1@~*@WGA?ZA)Wczwx5R()ru)}w{C^0?R{TcJ+;*bq}xZBUM}PnPrT zFD`&zcXye4au#vlM{%x`mhTPeQOJW-dqwuYv%aIf2s_NY|F=gRR%oFU_ z`d9evG*O-GG1+@CW)6Oo`c z`#NV@Kd?EoX;v?p59x!=Z_K8fda~(s`;_w1LvL)h4>roUSsS%pfp(<>=qGL_+tugZ zv^BGId}`yrNo#)ZZE4tF<7?hNi1Hb2S^hA#WjV8A`TXb$1!~vXvfGpN(dVzBDoi@E zRr!3;Oy4%<^M5Wzg5*isZ*fFN&UByO_yXPgt}XY!=JSi_w`@WhQv4YkJD*=@@i8`b zK7Su@>G@NiANzdSP&`lM!!=FZ*VZDNHa_3Y6Xt6leg5O~X|5ZeKZLyA`TVD-MB)9+ zng2GQzcHI``ULuXo%>rq-7BB}J@{i=me1$jO-CIDU6b(|QM{_(yUulGq7A?DxxNqg z`=&Yw1kqWa*vCB4NixmJMzc@?q}rO_xlc z=J#Qb!*#Fm?GtURgK7DC=i|p(e4LHtR}%**|bOR>HC|? zf4_V9@6%2^2k__76wt#ZWD+Ec+xxgVK-;lTH)WzJVEE0s2YWQnj1Aq+fpV%8xVqT` zZ5H8_HT(DUvi=-+MuiEzodY!=*c|A2&+cR@?}H6@XQT6bve9&#lK_6$m<@XS^4{1S zV~}xAPT7q6>U)qSwl6O33gZV()!r779d*syfqiUvA53L**k^8mxf4LsOVy!0zV^j# zzajh~5BFt@WwCYQ?Z?$crta)9an0)ad(OsGu2RC7p!SWeo9ZgVk4HljJ+$=)*OM#< zT;14u&U%NN{l3bIKu|f~&Yv^Xkj~oBt7n?xVw z0i8mdAQ`w8TYHzS&RK!zp$$BgN3tC7Y#=w!;qcsefGz82z770JM1t!3h;4vACTzgs zMjRv0$6^D%R8}vWVgo;*Oza0zsYab!$p>Uu@6=Q2o$;{i9sJ(86~1QeU634KINm=I zswTYg#?!_4jR$yTys-{$FN4|7^F?QzRu1O2`DT0g+3&c{^z-s)Ua1_AaX#oq zUtelV8`Z^aVj`sLBG1x1U4)-pwe-H~;(p4erQ7cLci)p=EPnE|8M~P-&+j06DB$$U{-eKW z1~>bUv~uV#y4L))7zt{F!EyJPA{z1~&Kl>KIk{=~lhXDck|tVo9O7i?%X(8zVfoO{ z0_w+2-R(K_d`zZiWGEAC_QLNCD4ibkTL#_zp22oopBo4=g&r;HI-M@mFcU!Fc4H` zL}ZUXUuAJoOLN4-y`5W!PMef-tWi%w0;LJ+ zhg)BcBkkH|uJH^|J$nOpmm%au#>VfdAVFop&HH4cS-kP1aPVuyLEgZ@e_ThLz4hQ%-V$LSK)f2yyJ(>jchep$scx(fQ#?tg zs}w`ksi{fWGX5I2BQ%Y@_O#9>6c4w!@`P_=)9z=CPjY#qB&p;k;E% zYg=dqOWK#Wgg+(Jw7A3AMO$kaQ;n%>C(k}aGizDa9`Bg7(5{DSQ+$e}u;aoZf%p^) z2+G&|oMoA26JvjdPIT*6Y#Q3FSCMwUmNM>raa?ieGgKFR-TFA2-|#0DAUOP`7d6ae!zuY$w=hv1G|J875s;#lPs%?4D(%MoN{t>%r2O%5I2y$jp z^?XM|)`mr7=UEPv^pe5^7HJ8hCjlGlJ1Q01^*6mX*bGW zfQ4@70OAi&RS~UBhz(AL0`R8+*Pi<9g5|0IXE3l_G>5+&nvW|} z|MPHM^L(EBf&tg~`0dE7LAUMHU(U0o>qCg@{gScDxE=Z_pJ4KltNz#}e65(-9f6m3 zsCmyZoAJp`0V~Lg>McRucRXIrZ3WE%)?J+=Mr{Ze-3Q4``*pu1#@0-p8#m>#&#L=z zI~LnfDc`fCB&E9`VV#U&-M2}LUv-KfA69oMaUM_#Ahe#TGPWlA9l#^NdH}hzXxqtG zcT$jlYk30VyrU9y@r8MLv`5>I3t+E@x4DU0v;xvATKZ=;){Rb#q)6@(F(`4gWsPr))jSU!C+DwO_$-JH33_ z0e0@>tDQsI=~CqnpbwCu{JgY$IY@VQL9*sA{81k$TZ3%si@}L%?)TDbZCZTilXh*2 zZ<)teT z8sW$}wA{=8f|s91`FfkD@;$+J@E*Pq9@RJ2<3T<%KQxB~@^#MN<-yA}OOI_jdEl*j z*W=Apug~k&4o6e$%D7mxt*KY@Y6JfP7ff3D%!R7kL+XaNh#hUEr73bW)*A&=jiViF zX(Bq>K_RW5qhV`RTrUxZ?Y{f&V~<)&O1z@8_7R5dK6dI{^R*32pZ{k^uV1><p)VDtl9;M-v&^9(~RmhQ{p!EGgBs}kySa;=1cA^!sfy@RcEnE$K|OL z702b(PA}>-rl)=+`@(~MsboK-PwG73JvEAU-S~;7@sxFW<9@==p>?LwewcypX0r?@ z%U*28C`*-^aa0?p8B@+NaynU9OK>e{$K$JnwvKlFvWL;`K2{d5pZfR|22{xhBr0pF zO)X)2D8*f?cswD4+TP6DJ4+7=q9ciHIp-nLUOU)mZB++$!S#X(;vJ;-dCes^B7|gD zhk5^AJhsl8={wSgc#(alnCo^m5rr79x=F-zJSh)XOR+enomd|7Y^|>SuYpU;4)^6L zxAGugw$=?7V%)eB$#3(s4}A-!7|&U`9y}>uQ)6>uhtXC%&-sz;x}}Y^9SuCD;BrHm zShG%;AU9AM@l-BmR5_J0bx3aJ&k4J^ePnx0Rg+b^@)*w($TvEc9Img_d;B{g9k*m= zm+>9&n0-uA=IW)sV5*mENaVu8s+Ss(6GD+M9&Gc3-BNXJmB?19lY~Hsxs(;s(b`ef zRM}j$j5_qFwq6^kX>AFAQoCk(z{N}gr^c{eoI#g9X-=pkYIlCrw{X8W%GQMCr^FoHa`i9!Q^9)y>e)}np>mSgtlDt$^OI?#nhvm1V z{KGm)HT==f>zKM3JQHem9(wmiPJZ9z3ZcU_gLB$3AZIdHeutM0wi z@{Ix6y0DAm-sW1gvU+hFzw2bq3+k3cKc8;e!yb?OO%wfL@KcpV#U*3I3N?0w) zOJC)sPxI26$Bt*3m)6qZ==cef9ufq{zQ=**f(4jg_>bi&CnhGS~_##m{a;^sje(dYSl+yj+rfcY3TA>Ovhl0dM??? zaSXQQ<43;&?&PALqaO#C+!KK!z{-2{4K}?CJYT7;=UvCf=H|NE#;T6GO1@@M(_qZB za!Gv(M$1cd^dg&PULSpI>DTvOH}RgicT9Ze@zT=q<#(4Zx~tsgqtl}gBrShtb$Ik% zq}`Y+A6v|2;dJ@)-X`s2Cx6~^;Leum%e)7{{{To&3RYM1)-tt!XK_cT{H^P$-;9%a zd`NS?5Um#0@}^i*)$&4qF}ty4fw2_Y4YBky@_83v9;LQ!$+QHY`-q1hLwW}f|19Y} zJbWZ+`5mi+dDwvo7C-7uFzR*rN3mZq*W@n$uC)A1!JQpW2!f+dEtAHA?0*L~asNP@ z81E=YY{-S@;vjoiphQWKJz7P=HrZnwRcFZsCLc!YBqRfRKk9R`#imr`xEy^{1{)QB ze~wKD?lE%Uz}#$g&5hHMZ;>|A+SvB-$fw0bke(d)_Y7#gJ3n31Tx*J&Hj40f8T~X| zJ$Y%#A-`&TG`vwqp<5Y0_0jnHPpFSR@_swcM8|xT{+jlZ{&fHA&+Xjrsx#N`xBif` z_TPPQ(f&1$KNH(v!nZTA{v-UW?n}gT^;7@)U+Q1m8~JrYf6u$CeCh1Q=EdBNZf#57 z>Bbve`Nt1(e~Voo-_stJ=8n9^&WSwIC$U^!$C7wX5PTl;fem4LF>ArD`jPCVHgkK{-t2`b+UmZZk^Tm z5RUZrC}v+I{C&>b>`v;i>!bEXS?fLg7}D%*qkQd)e0*dYo@rmyKQ3?fMLw>5k@gC< z{ki`pt>Ew%Lo~u4PQ!0X;z#-WD)umQv8O~(y~udfsU=3UYT5)xuiL#VU3;M(_fBbh zD%rl>dKtM@zJIXOfB_?S8!*7zOEKnM_EJtDNnv%+n|+n$ePR#Ay(xd*Cw5NptPk7x zPuVkllyldgZ|*uovGlIk>fWr)j9-NBMOxc#o3Cq|E#0-vrp$M2)|6w7kGFkpXBiy zpXB56NnZI6!6)rDXppX}2KGZ`p)IB4lSYTW=Z=25kQ8+_-zEvRH%4K}3!znXog_Vo(H}ZM0DTADII@&pJXsWAhYi*<^Tclh#B<{aX+J)Rx1s_^@qxr&#CzQMN3( zWW#B3uWY%5vI?Fp`*T))nd96zU$*So;ynCvzeBwIKG<@uSKm>e+VV$Y%UKQanEfZ& zvXKj0PLF%E<;dqpXUFDQc$r{s+tGjaT+Vsncq+Cpn? z{4egGSqFQ4f2Wsw?ZjR>hjn%yx^-(a_(!r|-XXSqv-j`r+8(wp`(F9j_p$FyT)Wa= z?HzL0P^a_1_}eb~V9!6w-v)Uezx=JPLtXhy`{03bzS#$>0n2avt>%x#-_Jfc=Q{0g zwGm}4+K^`x?`GLV;1XGLEhYOPo5(GN$#DHCFVo1A9Y~~VM++itOe%&U9-E9-Y z&BmD4=XF}j(XP>BT-LFUa-8Ei{)?9R1jke9c-o3>Rzp9V*kE?rG!ge}C!3Wu#3r&g zvx$DLo}4W$C3mPz^mmB?E-~;cHfzw?HZgd(O$>2~&9VRews-RE;KbO`C3bRR?CcV|I5Bp0iM(U1EJ;vwppsO+3H5P5fqnO}yX|FS~kPbd;A|V)QeXd9S@}qQVXC zv|*Mq-6`R4C-V%KnCY^PaPrLRw54V{%8@QH$2B_7CFbsFnU9@f6URB`%63bc?-Dhx zgSC!l!9dH?kYf{V**0-fr%jxEflZv^diweKmU5~aro}Gtt#vl*+pdW_U1FI_EO&`c zm(Z`em}$OpuuZITiL+hS<>um)nR4YFmS=U1OFf_aqI_$nddBM=^AiE*! z`@!J;3vwO`>HY2>`j#!c&W={jzWoNfM#sB)e&>ei`>u(1vveiQMQwOTm4q&djlYYo z7a)fBQ@dXKnlr()d;7W`?dF;|aVCg=&v=dO`Rlovu8}=|Y_5?#f4#}q$jBOp{FLG5eY9zf?beYe4Fa&z-`&CTr>pVRD-!3I^oK=$b3?rbyS zP44eoI>t_zFtMa2z8OYc>H~A?_!nHRp8m>9H7#!c&$%!5VV{Bbb>Gf&LMABISSYqO zF-LykFb~%}{!)zhc)t#|*?*0B&7K?7)ot#lIh^<-y|2%FN!+VvzD3Vr>8wNNBhmq( zPtRdd|E=rU<8!a({aiO>I%6C(pE~XM%#*B-dAR&=sfUjwP2VE^On%r~XXJ--U;$NBn*XRzCA3~`CgTw-&V80MV* zRu|cNwrQ}5ZQZWC)iI}BVv$R%acfVsibSpde3t8%Q*^kTL>ru~qesTf*hPCB=soUn z((Z3+-O04a5xsvfa?qerdkh*hsK0UYvJvRfJ_EGdeTMVp#^)P@M-HIM?a!8GD|Or%cFd`pFu~HwgYul>KH7{)^(zKFuF1+uFNo+m-}N+p1DL zDy>Xw*Rx-+X^U4s4ldb*bKQK)c)B9HR}hVPbIV?ODp4{UYE;)M-PgX)@^Ky#y+f|G z^*CT#8|&Vg>cS_iy*7UJ*L(v(?}W!M2*X4Wuk|D5y_WF&0lj5-M}TKIZ@$CH*Y)?E z&U-JeuQ%@u96pj)4gnWD+`Kc8j)!Zx8`r|7rka}gr2+LLDWCGgs+C9BWchYOKEQ>; zV?2~E4NsG=uDUT6&*&K&^Yll)t+}uA^XCJ1stjA0ZTb?#SCJfiImO)|UjV0>rece@1D4gW0T1#PaQ{W^S~F?x@YzRdaoJb8e4 zgs&ma0~~%9X>Tv6{Y=h}poM-&ithSuP{I~?kbVLD3bsyT3(}XvPb2O6mDkJngKSwN z&m)vqebzVX9W0I7;uh~sE%9RqZVhqoX+?Zw8+p*F`_92;*n|mwTaQA?(3aOySP%X_ zQ(N%Gb^2||HWmD~w5L;BaeHQh>1l4gKEYS<_}Y(MHB~NdQ;*M!rLbXX;gXUuuu;iUM;6c4&U?XB$j=cI%tPA)k+bV1&4`azU3n}*N2SrM0F_G zHfJrPd&kFk3+Ze(SCB4RN5y{}pz@0KjG1D5nTZ)&6XO?6-BUH6tC#bZgeI>`RJPSD z2oe2Ks>w<G`90g$yJ5L zsS;#RusY=1KU>Y{^zbQZ_}-jF6?pmV3r$GcmOe=Ge!gXtUcTr43{ZdgIu4(WHL}Eg z31xHmln{;jN?%NH`RRShFjx4rOE^{BhXPfWa&~@dGQd)}WbBx5I+(WD_l5IBSsoqx z%QR0gw_w1!wC`Q9wuJM9Is(3Jg)6LYt7~uYri$y=tOhD@V?^7trp@hV|C#O@KK$@3 zH})Yl{M$*SK5?^t*07xwLb_;#BeWJ+ecigADf9$*Xv6AUR};3p-G0|4V_7@gu52xB zCjw+LU_>iDFKMbf2ZM%cdVDpR~S*Cid)L@T=hz8~iF}!)4OoSJjmqzG-!f$?y7Y zt31)4G*7<;)dhSDOQtt;;CY=yLEhjuRX*5j@T*#qRi|llxv{g9`Ta0@UA1^wK*YPP z3l*n|%wL%xMDty&C{?Ufb2A^1tKs9#^{KYjX7eSaMqYR|rJ9<8#qHH&D`Bf?Z4Mf0 z`Qc2ArafXPmJkH#6@fDPe78>#4+=SAT^xLv z7BNEzj(_^NQ3-rPX)=G;{lppb4=mU2Ey8F1d1{eLUI5qKj{cjkz{5I0J0Hf1n3%l)oh)IWD8_ zYt1*K7+$k58HB+xZviJM{ujt1w&+u2`tVeuoGisuU=s1xH@P5&SgNW`FP^q{v^5ve zvRgZmFw&RtF+Yy+nP`Qr#dRzYO5DimQ=PbHl{6IH3sm4a-}0?^>lB85-mL-mV*y!Q*9qU4IEO=z7%!$${Uz@c>T_ zTV!K$jNb%ZjL)QtA6g;ahc3o5K&BSeu@PO2XMiGJr;Bxl68_n!E|#`eRko)Vw(-*l z#W?O3U4Gc|D$9K-yB}_D*Kfzx6lUaEeP`9;TIY|IO!vjiLF0?RN1dt{-1y<|#<*D@ zehaS6QI;oH$wwg9J+T}{F6{)YoJOwSIk`|nC2DXYm5(naC*=L0b)|Xb>q<86%k+Ej zNLOY(w-=_CZ+J9zj7VcECo=Vgj>Fcoyxj6ye8zkFE~KR~Ml%?XeuH8>@m*H(jc%SN zKa!&*6<#&lGQE|7x?JBf%AlQ_l`*3Xzi~3Ou?upa(A-2Ba^p6TVcuDwu1%u{e2T*} z%J3`ljUJG}Q-dkfTRrIfA|8vbGPr#o`pPK7ubm7Xebd^y_Zq0#A z1$7I;cd!d-PmhvSa^DT5!Thw;9=SaS6x|Xu%O8O|1e<~FnBwGH+W`*NN z&ADh}YuKpe;aq9QrR9(uJ|)_DdH9sz*mFBQeD5IZ%rzb^8Dtzi%1{CW!M15+5Pu{?WAz6jgRO4{XG`Y( zkJ>PDWg73wmexx8Zku+p^lIF-tNKqF_wM@_cFulu42dIs_o|O0{)771t*(2pZT5xs z-ox0`SkwEc|JZop!|R|q`~3_f7A(-5GPmKyY?FHAD@5JY@=-IaYJGiHZVY(dkxEz)#+LnZo?chAMtA z!p{#09!uDmYkL>gJl(GnPMG2C1&yC3-}3>wKj99t<8@`Dy3zNMY%w*Ww)&!*oj0l* z)gJ3recL|9O@Fwy?WRAWGm~trqvn1~rTxOm$0fVY>g+ff+4H)UJ)8+$Wd9iTzGIr~ zI)}_W$HtKp_H!p+@7^18AD8}-C!zn{!87+^yt-g`>33*5?zvz40Y}gL`)vRFZPfm2 zI0W@3zd@5z-`dj*%?;*LqJJa7GxkrNBdBb=C-Z!P$&KndoQwIK$1Oj5$irU)f5PJB z;eCmm2f^_*CdQ|mnEFkOZ!j^}AtvU!%fz&8;%#hQr|3RJ-+kpql-1rVS1O$_=Bw`v z_nr16KSbIWx2Nh_w2KOLL%+;<)X!1#?=21en6sa!EY6;KQ@>ew`2SM_1j!H@D-8(z%n(yk` z1O9OT;n!0b9$MA#b=I1~wq>T)uwHbKq2BKKZ96%-E|rdAJylnAa1_4WJTnGNLDLOCbTnKo|1gp!HHm1D;i6*W(8Foj*&YWwY4haVgq_+APQhkqvgwpD~{ z?laaAj_!wE7UR?ZLb}%CtS-}E?9zN?)e^qwyMPbhPOoaGN3)wCR35gtrMRS{p`@s| zjM7p4(;p%2>cc#yf79fOw%v(J)&Y+MMNcb@{bt=CoWxKDSr4GPQIx2CV1*ZP}2W6S>d+A!JeA~&UKIMh{MAMxP znY+{3w@t&3<=t)bMVrKY{V}R^zEm{)!69^HuYL? z3p?tXQ-%Eg4qTxeTf?ifB?Ww&9dxy=F^OL$uy4H;i zOnYv_h7EtC9)(Qxi%0dp25{E0*?ZKDeQ%CUZ}xA>#I~KP30qiF>^k7&>q-9g)Q?W{ zhX%o@LxNz>PKFA6@A)aWu1zW$YcG2%B$U%B|tn%`?DI`g90=>I}aD zH~1~oQNSZ3^BJy7xsCoLFfhE|p1Ta6dI#!%1vnkZLk;LYdmc9XS6~IOPZ0hlitJti zUF6IUb$QDVSi9IkuRQ~}8n}UH4S&Wn-PqVI-vhAYTOQ~6zu!Uc0A2*%1{kLs--Ui2 zY3jQfKYjB^Xk6FbNF6tU-*f~3AN^Y;78y?0oIkP3t0>Q1dX|}W(rUN90d(oS7XPkPX%au^;to175?Wc z+P~@t0PS3Le-K=`H}Eas|A2o&L%mnD0*`>_0qFKh>b)GjU9lIi09Xv11ML{#df*qp z{{ztRWu!0rD`{jmFcti;Ao$uJi79*8Nx*5~mjuD3ef&G96U|*nr5M1;+@B(S{dJ*zn^gZBfz}W!(GC2LeXa>L-UUVODIxrES-Bo`h zUIok{y#e?s@NMvg0J=8#<;2UuKL^maRaXPZu zCep~Y3calw08aUp$g}E5U`x`s0F#5@Le|WcuK-s7^z*`}0CcsIwpQ*+`T^hwfHA-D z8GyuvWkGPk4}d1p*vkcf04@g5?+W^I!EHb_Kszf)uc)>7PNW|KQosag(*a~#fo-ig z0T>BhO8igYT7Y&}Yzg0dFYqd{s>>pSgpMb_#!X^V2<5_E!=V{uo5^Q zr~;Nr60KSFaeVx1(;3vR8f#-n7q3;2F0f6`VVZ?t1u(NCT0lo(O8=QH2-4N36 z;cx#BKl}sII|2s-%-3s2K*#>BX0BaBAB`VBh?se>=02N8zpp+Es0WaHO($?5a3+AB z)|>;Nm(`B|mlD+g`@)&Q5|PwyrV{axA!d;_5EOUb`@ z2k6v)3H`i;ak=F0z}xu28_4?^X>@-HvR}e{zJ$JBGz&U?y_oXGx4%sMBJ{0+ACevq zoCqueTJeX<+YfjGydN+a7yuoeuUZei8MqFhzKd>z_5}cWFWMHMor~!IMbn@WuR@or z?g!|H-VIyz4`5FKy{$sutLXbGY)y5qq%W&B2X+JK^QwhF9dzVa`8xo8o3f*b(ZR|q z0pwrFyje+~R=x!M7@*wBi-4;D@i1pr(zlhRzyhEhm<{ZKzeb)5H;^s?4g_++zXN;` z_#W^VXo002PrN(O0HEs&*8<3QA^N$1b}t+R910u^^oNFiv?g4@IA8E6@ECwx7fixW z)9wY>+y!O8{s41%#hn1M8DD=5@zub|z^?f6-w;m)(A$a%U>|6&0_g92#{Yck(|WOD z8`3`qE(6fp`M-iT1YjJ`zYjPU_!{s{0DYeS8bCkJZv&9~eDrkwjeux#SUcVZkm0-^ z0rvxs0O%|CS3gVqF7al>d$Fc`m9^w2{4O{1<}Bvh zS?Kc1=<3Xic!m0%AUORMfN?q9_O&j5_mm>r;f7aDVn>L0<;Ctc7iqp+WpXe2@St8nz{-GL&L5Mv3Wz=2HGHK zKZJ(dhPD;7fzW;cjkXO9ISuVzXb(Zdc1P1@!2tL~qn*8vg|>yI-2?4zXh%asR|WWq ze9>-$b`&&Z>q0}eh~~iR3g}BdeJFeu+A?UnLZi?5%$>rgp?w}2zODd&Z*>0)Xv`O*dvuupxGj4Mv@!7Q z2o2p8{u(}w(Ku*%(9p3N57k!&jXLwGtMFy`z6k9AXa&%of%bc7XF{6_tq|I;p#2fr zh0rRX6+!zAv^Sw$2~D;}JNYj{`-i2?gH{Udci0g6-ur9t9S?1PXs<#;Z+l+?4Sf|H z2<;7M^l|U2p*27|1lpgW(VxA)4y^^+bZBow+YQ<`pmji-1&ubxAp73mghrnWj)e9e zw7sEy8yfv9I0o7VX!K`q#%eVEE2sqeLHi7}N1&Ypj%{j;$CN;O7#e*ps0Ri@+XvcD zpI?lJgD>10eUH8YybZu^ z#>|AqxQxCXdk&Ct-r=yl*{0?hR>@b9x7 zw4Z>V2kg~*S|*>IxE5f%dOTmEzyE9JGou*GQ9EO6*iXL3suBFVz!Tt%Q9kyV|9{|5 z5zBWn$MVkseh-a#k&jK~&jql}{O6(l7Wg~q89tD ziK#1piKQJxT7aJN#i#m|mOP&W7$>9mV$#!qnE-8#dWRU_m5==S#{=})j0O71UkKno zj4b#)Bg-ko7XY%24aBNPHX!}=BhCR-&vgL$)mY}^HU$&c%pUQ6qSdR)u z0Oyb%4$z z)}Vr=q-iU^8F&Fa1zbvcA|U?1fL{q_6dRt#;)QP z;1XaFbkftxNk0Z)j}_R^wC8~a(k}swQ^hLqe*(;{iq`<_T)flX0~pVWS3KG~(3ley zF9SCMv@?ylJq@2wLA@2%0jdwXnpQ{p{{d?NY-rk_f#XU447eOP7yNZ#F6o~DPQLZf zu$77@0Bp4a|1*s;)3Bq8M*;QiZ1DR4?7re5OZy7=9RPEn;sHxzzD=V)rtJODn1>Z# zwtT8jH0EK&m!N$Im||)4p@Mld?Ji({OIt~ND)_Cy1WTh|6`u#c9vDOV2LS!5I2jz> zPAeq+U4S+#m~Ye2#Wdzg#k~OXRxtMs-@&9cM$(J=tA1$QehDCd#bw~%2k4zaEHbCF1^|6cQ`y5v zKL==h(SzwPex>3U0A(u9hX%jVmB#lfK(;2ml#>22Kp!eJ9%^G8=|=&ld&yl4{xE^?t7pA`&U(rqjm%Z&n`awYBq534xXwnY=8aL_hTwoMwY{ZPYXy|*|?%*0D*^p=| zzbonQ0nXM=hqfa)_F!yMd?y3jgKI3+57mDZFqkxBVA>GvP}2Vdq)*zbSPtzV;&%Xa zAv>#B0&NQMn*h44I0Z;S+l^S`gDzw%q8S}IzVpDPgGt2y2gn9wf7EI8`B&24v^4dh zg!JEmI|1qMOlTvB-vzz}Fy0l^*;`sBpFHkUpWNep%>Dnscdo_+!6fEU**f5vAUI%p z5bVnsOu~jIu_q{dH3;@+-1cQWC$)nA4fqM=u7g$zEe{-AL~uVHy5t61FgD3)0wO8MaV{Jx#){%3cE20H*>S(2gN~9H8zpY`hGco5cJo z!#|a+0I=1vCTN=z-vuyV#8cJ)U|VI_Q5iN_wh*WRkgrVgVbf)G0J4=m3ovKOP6Flw zY7@U9ISuVt;<>=v9*wzGHj{RDCSD6H2h>M&XK3iBtQ~--4Bu4tFF-m%R`HbKPs?5g z@N-743gW4NWD)H+fVo;W8TdJMW)VvswedONMQGxA4p;%u{-nc!<4L~v zl@XuDgLyWIc#_)s2Eh1~Ed~D)uq|ng0b?P3O_F|??`8O}vNiyGlKS#1;9Q^?Kwpze zh@S$^2Bdf7nuMqF)#L~V@Tm{UAHo($URcmn};^!R^2*KyA{0BcJdkz&v1oU_9_uKs?ic zi9jK62B7xJEk2U?B0%l!3lspFuWtd2pRto-Vu8l69XJS3{S$yIfJK04r53OmGk-*z z1e5^}0jf{-C|Oj#m$XbidHkn7xksNoW@r$6=I=o;?ge}-<23OU9u;~t2*xw6`+kY< z5pD>AsRM&x!Z7Ufy&xz*BnYO=<+G}1@Ttyk;=f-ZA761WHZ*fj$_(N+60yre4`e;v zhwr*DNA_nd56)$6#bytu%pC0Zv$SdUAlU7Ud-%@J<G$8|8Ke@F%mV@3?;e$a=!1@NP~0KO_xJzc+bw2XGMmoEil4M?hze9Ep6# zpTxIge@-2j0k4v#joM$pLmy6<90XOJK~Q~K5G=n59A9*71vGqC6Ju~Tx}HZl{WjDw z2lI&zAsoA5GZ2n`)H&tZH&i!H!g|1ZY%XVfD$)u z3}Q?lhYtV3eQ6ur&7jTMFOi4r)dx@qyoX_%vvQzKpnnG=C%T%9erKg9e-UloPTqCB zr)BcV6F&9HJ^JMR8Ouqp;$PncrT}~4Lw^G8Io87A;Mid4G-!;;r29!TuS%N$Y-+zp zp?!t)dH}m9#cuaI3>vmriVdk;X#sxvx776x>6?H9fsxQIg!VA$%YjM2uF$YQ?d3|z zD^(pkKm)XIDg7!?1Yk3h-h%ce(q{n7k5X)I61J^*>%G)AJGM_PbSFk|$vN5dXVhuHd5R(#l$8KXzxQ(dCx0|VfbENWBq(ZC>R zPe7AwlBWb~!ZhN@mfXg?1(Bi-2Na1hnTYpW1OWrz^=P+IH}X z_BGOuwmmfIB!X8IV2aLX!^8CjA9Kc2D_9zlNr<)cn%?knU+m z*H5Kq0n+`Jy{BdH$;%VZT_E45&-*bz3jKJOr5t@=uiM_sbKx)ZT=;D~7mm*y_C=rq z`cu&V0G)B)3f^Ii>9Fb0Uxoe}^tI5Lzr)S|4u}3O^glzt8T!64eFXDj>$job2pt14 z^~~VebjEgTY;E`r(8obP4GIWw%o(wU!z&V1bp+Zxsm90Wggns(2DzAdyxz!d0v+WN8Wt+s)dvh>}dOFv&t zqa(xC|Au~kS31Q*`Tcr!g8yI8&rNF=nYVt=){o4QJka$a{Na)le_`auM~|SMZTj1K zc7(ndkRFg{8^*xY&%931#eW|4NS{8x=+d+FFMUeS)Va+T&@X~M3Yx}CbY#;z3d7y_ z;#Y8p|RZsD=O9A2$IhOtq z^crZF0Vgo;*asN?N1@k4yAqfWzw|(#hd%e+TI6p)ZAYBS8Bja-q}b;m<<< z0<>E!y+8B<=+8mdSg9Vz&v={qHMWeyuoJ20v+zs*ufZ>$aU0MC9i47768h`VrTcFH zEzl=I$6km31^PMA?gCQKr$A?nhvPf8lI|G?+3u#&Gp##`XG`ewr|V7-hJNw7qkH{& z&P~sq?S)U?Yd7F_?jhGf9}XRRAI;e8#rW;@6X?~@vBQFYK>sDQ1A*UI`u}I|yW`}# zs{2Q_+-3;KXn`b@-}igYz3<)o-hI0(iO=t^jD5B5o_qQ|x4!${D**l@ zz~2MdUZigTUI%O^(suxVxr2`wm3!%51srX0GjKM8AMb&0ya@?$xamoNA(l3O81T;l zhW5Pi3xGcwu;Y+ki9G)D92f7a^Gw&KUjhD9eo4ZH;SDY$+s(w`yyp@H9kXU|~Arne(~9_e*R za=(wiXuliayG=~A^D+4QANULXHhd7* zr1>A@_ai~C%`XM~{eV%%FOWYEiFFAbHoOn8Pv9E<-n<^^?~#DB;k|&r1=r^zLGR7* z_m*=32i>M;Aiog_dXUGKZGgWU@CoE`z4;!be*ql+*#Mh1z5)3$q-P_23-Ct({!YM$ zkiQP;uaMyHEe8NcKXDa&M%y>P39vJe&~FL+0>IEmF>ba%{uc1t@OGSu0I$uzkAyne zg81N>KY>#}=)PqYQUwWiZg?B;uLT^sTHaewhXTJ8@XG*4JL37)Er?Ztp91(R8N9%6 z%N&Dg#G6j(idK68;mgS0SOD3m?M21UPt(z5;2J zfqw;m{|WH#0fuoX2_HWfFtk4p{?Cy6Fu-1H;NJ(2uObmX1=vd*d;=f5KValfeg1EZ zKZ-aTeI*k0|2L$sA%PF?jf}p?z<+4q@WmM7X7uR>{vQSo+r~Bk_Qy!%kG^B%>qvyJ z1?+K1XuksghJl|5*dHKmL;fd720ltZ+>Jy&F8o7)%_Cg`INH+4H<7@9^nFNeq>GXN zITHGs5%_fUqe%48MaZKrM!t;%+eXnZjNXWZ_CE3pr0*a>*HQFEqgNxXM&8OLpU)x{ zkxm1geq(*nKZHZa(UXve&eVnVI7*!^MOukGc@vI)a}++I%+ceJr!MfN#KZZ3os8?> z8o0q{eU1DS>DLMPJ;+nuuMC`gz<=y*_=~t3`5z?8wQ$zmKO+5?fkSuVk8j4`&mqwV z)W^b`xF#R^(!vq9Jc{Mxo>AsesczhW~chHFgo;s{o@d^a;wgBTmMs&pF83b_&@$ z(5H_*1Mmw0XB|=YR{_5laQI2uBik2kCO-Tuea%MX=|8qp@W1+Yz^lODV&JCT?L@qe zgJyIBaK)$S*8d0Dl$Ww<3Q4>1L#TfWHs$&jXHmMhX3234L1WI=~Tc zyAdC|ZbBYyxpY0!9>5XPyMF~Z+EZy7iGOzij&_FP+^%bpZy0z9aPZuXK5N$)V8jRS z65xA32Kbi%N4!OF(C$Ud@BTR8n*g7U@vq+j_`3n$2-u^LpgZN>0Q+{o)xcYTQP16g z19vz2AK~8xjCMi68&8LxXkWXE$j>9uZs>Hw>j4M-F8HeS7^DXx!M1(ivj;ludKU73 zg7kYx;I$XFTz4hl|A72oAXSjy^S$V=_OKoN6!}*pp)N`f0{lF{?}AQ{U-~~t)aha1 zfi}74T)Tz?hm(MYrlv9arMNNCrkzeB1c(LeC@ zF0^Oy!H1E51QPvu9bky1T@S%E+I*>;fM06hk96RO$z2yC{~@Fr65|kl-US_Y<#GKH zB-+6EMP2TCJQD3BoN;?Q(oKNfi-h_wy${s9vGPkf|Z|6<^bg$mMkq!GY=gmf6`1ms!2R~tCv0T=uzLZpA0s^+`9DXZEr^@l??hrfycBu(umr!C5U;yGfb<7|zXbU=BQb_h zm%HJ!-SqcgBL8Y6@`K%s@!fNPe-Qb0L;O_g!o=uR;RP>+VAvKt1gK zd%)j=1YOw&9w|I`Tn-PB%6qizJ9Z9x=b+a8@3<2hck-XYb8_fYMp0kaJ_UZi1@n*B zV~vfv9ztA=p9=UJ&<_@MuED*F0%B(3CcrO1KYJeP4t>gI&=;SHIm8UkN1YA$S8)F6 z8u01hY!%{|XW*_zY+v8Nc?(-fzUbV=LxOh?DKt0uJ7{ zTnL?h12|%D`&p3jHt1JHL%<_-FE; z0RI%~05T`u2Y*0^;%59sn;jVe9PMG^8sPm9K7;Rez}E5ofd2~c8vuVL66%fjWv_<5 z_$OygB4A0v!Ft$;z#U97Jc0{&6J0lW4$!2c`!-G?&xh;>U|*RBT~ zKDdUqOaT4_z~>cj&ouu20_j75qo2xu8P^|!9+yGp`JfwvE?ZEBIxE5F`@RSLA$Koq zE<6eFrvi?8-ggaR6L>doME(9ZXnP=WRQ2uIi1@1$8n6 z{U#9;*C1|hLmRmhzRsh*w!K#4>Du#f_UR&=_c|Uv`zqkCM@+p9GX56z1>JbgF8_4E z9}D!F@^L)VYO4$yBaL8oT`{(a!z3!R|%_7?&69@zD4 z$h{f(@PnLnJ`TEn8g{{siJt=Z9`J{(J%_*>aW?|LOnegdejB|16$$l`M|=-&2ORqB z+5do z&i?oQ4t&HP;^~AE{DC%f{&R7E?Q6LAT*p1OKSa6}3Gs41+RIwh>zYR*k2qg_eT>DbM5vLI!w1;)y1^mT;qy30n>IL}uXoqWG z0(c&I>TluDVeQKR-wN2Hksg2qo6esF{56LEV*q;~()HjETi1RZa9pqcBP9Cc2EcoO zqkXJ-F!J#2>W3iR1UUY#MH^W2P~@MA#J^~R>)@lcuK@h_k$)x<|Dq1o?E?Hy0H^<7 zh*U*_>~-|d9N@Pj{{|#nuLjP#3BUnc1D#jD4GDUzegxpB1CFvaS0N97te!@KZs&a- z@Jj$c0r|%vQBUY|9_niCT3n;;irPp6)! zJBc^e@0EZ<_UfM_v3_quf=|wekJh4oMDE@A`#>b*&wm!+^a=49|92pvzRv$Uz@Gxy zIpkUIcOt<*7n}n4-vE9_0uDRYehTpO0Y8Xj_+M}z;NZOmdWrtD7y4iDFSy5lKfs54 z_=Uhb7dUGs9XRZ|5WYGWdP{rhql|nAew(%UcTq#ak;;2aIeNY&)#Zu#P@dl4Sf8L z|K@y{d1tf*HhTx`N6ic$$b2z$J^_7-)#2ID@q~?W{;7Y3JnGJtzvgSmZ%3X!Trtya zcFK1(4kO_BqaRMC4++nw;IBC=0EaJM{8s0al;mOcLLB5)EOc7s`7W*^{;xR;u=zGV z@Tp*ti@IyS4QhQGc%qxZr(e;Qax3EeOIG2UDpMAI`{7S(-+shc^sZ!138nD-*9YjCCR-zs6Kf70(@761W#x`7( z8;81$dUMdI?<}roey&ri_IDQY6YFc8xqheB*f|&+zUB5?3R{cCvEf2tZgPEPuHNf3 z>(x$Yux+-|s~^P2OLuZX@0BFTy|Q+rU7LZxR<~VlH5MAJ{x@H_J4c4Mg1FzjyRmbmFadoE>-kB!-k`c|y4k|Jn|Brt4UbH$ z?>Bl2&03?}>eMQOPH$Udj(j1qf3VpZw5qsr&A^9Sq3@vAX|=$jGS2TB7q-<8)<)Jh zD!tZW6z-%Pd{?_!2JdF2wY6}lGC4^FTAfaJTf2f!TU2_3op9VtuQLxwquuEp-Z|H~ z3s+m`I{i-VuEt<}b-vlEFI2!{Zm@G6yy}hW{EVj!-bUS=ZZ^cj{Q+ufXQx-0n`wAR z2==zTtvX@KLbcr(RJPR{w14MqyB_$UJMOsgx}8&n+IY2r4-i%wV^jH&>B-^z#OUx; zez@3}nkr0BR|=y(f5WG;P%T5BeiI%jZYy{yc%sUx>HHjAepjO&LY&2Sv&xm$%uc+J zet2v=gd#ONHZ?XJDy%nW8vVh};qmE4aiTUcIb1A`j2EVc3ytdd)YN#jS{SX=Cq^2R z!?m&TT4Ag{IyF@tFHBF2OiWHsjE+wMR;ko{*6{V@wJr8B0YVgc;b~dI)N2eN>y8lIZM_ZV0$okQjeI{ZF^McnSO?YE#`e|{R@$=X@2tnWeHgO%n07wemI&B4wg z{_9cH2h~owSwEBrE`S9(lDqVc>{z6Ks*Wouhhw$;te7jQXbxPyI=zQ=asNBbwxU|VdGVXwk ze>*A}y+g4GN+=BBvxf-@+K*GlcaKWOz>&eOvM_|t8m44O9cpJ4*@ZFewckVTBqaJ0 ze_uPBz(G~Xcd~N#0D-@&pCNxZ?(t{;=H4&aT&|>lt-O3^dK#a`#xzW2oDF{ZeRv3R z3r#uX-TY--uPEUk{z~$1ZpHicua$G0$y+??4}1776H$qIjE%1z!{3XL_!FHPbB*52 z;e4&rA4o6*PTVu7SHCvfsOJ@f1o#=goS&@x2jo{sFp*k=nB})Y?gw)#?*k6zDJOpd ze-QVlVd{%XaPG_}^Y0b8)u-|AXl~5}|L&0^=4c$bbuVE4_j4B@)bX%f?!rIeU#t;C z_F3TlW?bVh=aIB2cOsIbm)Iq?MY!nf0a8AQ|;XGpHy8|UXih}!8vERd7v$D+s&>*T+CQB1 z>D=XXF@n80$TT*Bl+y#Zu<_ zc&++4w^n_eJ70Z_{*ucOe&1YtoZDn{+M+(r71hW1Mgl(-fDJPBF?^*{%$1Yl3!#PA!NkxM#Y!iLy(e$6qUKD+l7O{lf^C_SOY_u%^@7%8^X? zsE(MWR3$5XQQwXZaoGwb7DVdm%NNE`8Tyf%Upj=*f2hi-&rr8j8BBM2ZRxVTiNH|x zaDJ}RZVWlx)jq`8vo6LbUPe_l(QPgGKCjo=TCMbYP0UJ*TQLc!VZQC)FixMwp?oWc z_Mb_4 z8c9BSxo;48x#Ly7BX{NJtXxjcvBWbGrE9Z-A;X`e@-H@|)H(JxI-!{n(eQy+5V80&8llcYYMdpEiqk$c<$X0Dg1&eV#i<4CIC`e=ADz z$FVbaAt0X2f$g&dRrFg-9?JL*yZDE1X#EyBt4qgRWA1*l&h1Kq%W}dV$(&ZZ>xp^or9&;$>W=Cy(2-WADfvQMwiw{6c}!UkO2 zyL$2h_F;br@{&AMpySV#U$XL?ewjBQ7#=aZlvt zNe{P}Z#oPuPBDQ~PvD?k-MrDm!N&$$RjMR9Va<5+<#9R2Fe#F<^H6q?SLRzq9o7M7 zbpprL)Z(0)!ihB{4*Yl1ZxcANrjf2U{dbImO+ZiAn||t*1$DjY2ML^jt~Y%>g_G9x z3kjT%uAhl`*i0w<*F zy(yfuu1`qdgmisujDzWquj?VNEUarMffLeoI)#(g^$a`aQ}kpGeV9OL@IkD=!R}iiHZ@ZRycAZhWYe zn}twmQmey>ZH$9A-YhuSL~hP4bna?+So9Ox&y6L)8Qh(3b!JM%(eX+J_x&jdKjL6s zdgFx3>dnoRCZ@P~Af;N4@%+ZkT8!R5DJWa}RFB13NQ7(&lvam8%NO>O)D-vU(#?4Vj2IdYo{L09Ho(Jm##5_(5 zSuFCwz116j8RPJtW@Elynw)eLCLa8M!w+4&erdEIo3Sd8I9CDZ`!PDz|l4<{R3AX zMB;9)S5M^i?3fpJ7l1Za@amg5Pl<7`n+Ke!si+1hk9B!>j3Ya56zFWnM0(A|c<79P zRh%3drj=A4Kk`H0bwfQ1PiwT*Y&Qq}e7&~NCxJ9f7 z`M3dtjvEq&(PbAW1w(a2JGxhpYa9}xQTM#8jGZfRsoy@9XDpI3wwE)ctX*lgs+~hHY zG?id*uKz_WV+PB!yM|={T11H~*l@jbW;En(3lVF}sqfp9ts zqju^O%4;r3#|>NvG=%ge?Q+_X>dCrIyFu*29OnA{NjZX_a)aR0o~wiSjyb)0b!Iqn zgV15W`}+Ly=&T!rj`g}ONGF}R9Qm@6X#YmwuMFa=e(d>`NW~bR?fZF>M&dXXI@V|V zobxd1W5Lh#*}g9Z`6qlfW-ZYefY0{*?ege6pP^3oy(>wF_7n&Ku?O?gea_gV_7Fd9 zj^Jb5*!S|7|ABTlk1?@SOWrfVd}7}VV!VF0-7MAOX`=8N1?Ln^Y1poNk4oS3U$LN-XtgLY{oTDl57#=CuP8+GhU z&`UkHar3-{L7J*Zw!3Y03Hk%wxo*DSu8vvyJ&=Ffvh)}E5xpu$PWgrEd_U6XI`G?j zjQlX{N-xHCH3fc?%jbt9u=#GiJ9`*IpYf9VDGxr|md6J!+InC{EK=HSpuK!qwAES* zlV&TJ`ctlsj$)Xe=WHkv}Z3%uJFcj5j3I}4!V@M4pRfD!w&G#F@Gr?WNz!O zSI0215k}-QjOW($tm0C9y3M)Tpw}vKr##l<{-FQXvg~o`hvpXA<-u$NXHlXn98;aH z%(n(H?>oW!lSj_GUvHQDcQxmX06*(Wq5Wtydq21=8R8%9b#SV?rfS;$V(%N4#l!X& zQB?{(=AnC?elxSbDQW{7t2C-iybcq#kOyLF@6(QeM<_VS z2Yv6}dzQzCjcdd$<2DLVYCYTv`mrOYACg;A;Mk9^+;EpV#_gEB7aRp|bL3=N?g?tkO@lmX zY75)f>C2HfW`@Rt?S83>K1RF|@wo1{N5G?1t5-`6p9jXA>zp&!*|A~thK#WH z^7-b`=rS~Cc6QVz^7;Hx@u~Jr7b*1#|6b>;k(RcrQSX=P(Jc(&u^T+zb0oT09$IA@ z6V8}Ge(t<6V|;9ttgl1-FbU(2?TP$ebgcTJbKuYNTgKcnOFwkIwb^pQ-evW7VSANd z!rlW%Z?E!m?7bfTs~kN)JoSXL`OQIOG<`^(5BQz%RKqRLUB45aYCL(eeT*If&x5eG zRJXfF8ZUdnW7E;_(Dp%=d1)jJK>Vl|dD^{Q>}f68ZX>-Mo>I}mQF-nI&vTAZPpxQW zYW;WO5%BCv|7}-Osu${D&obtiiS`yvGsR!1(LL_kdZ|98(#BIW_1KP`p#PU6utVvG z$OL1FuM6hzdp>vMyeicax9?+}FyGp9Bz?EhsaXXhJG!xsu>ZH`!?8ZtY$_FH+uf0M zHgMh{I6UmuZ@1@hI#^W^|6+f0&#V1%ZXyW=WsqL`;D~;{=Fn4z=LmhY2Wf7sC=z*` z1DvM|PUdq}d!Fo+C!edr-u0e8kaFD1z1L8z;i6*v8<7yK6ILJxK6mLR4wx@9xa$<7UF=VwCSr zmk;S8B0soWv{JpWr?W@rd>*eDcWBUScKhQ*T)Y2b z5xRx$tXm;AE5=#+XD&@|E5y*N0+wFy1BB|cl{W;oLTomYk1=xhV-}HbBglBImA3%l zpmjtXGP^e~|%Jiu@FBLX~dL$cq;!=;Dvcnqp*v;fcv zGofeOcwm5@ryUCT&!GmWz`d>M=8QUmbwT=lne@d3eKAPCJ(GSoL65V60r|Qw>DPnm zKa!xwalrunWts9v6ZE4&dcB_*l0TN9A4}1rZ{B@!hWuj6|Kotf7SR8o-}T>_^hy7Z z<3?4QUhhMu^)Kd={+|fS|4OF(r2i*U^3fgb`fPx{(n0tZaN6VGvyyCz zZYV>aezS%5QA8H0PpHS9qtOEc8h_LS^UPgWD-XPGrC+KI%aJ9o+{_(qd34f<^q9}? z8WMV$&o*mweV($AGav3;l5%t|d0@KR>)`B|pm=gF5k7sK*T5?XxW{G|G?asT)4R0a z@XB??+U#)6!GbbxBa~~^h%cTKDg9TP@6f^8+z4I)65*W%ydMc(bx?K+jg2Lp58Z`3 zxp?sdZq;|X-8>$uZ8e00`Vw=P(#K+7^zl}ia*h8)WQt6l)az|AE^djH;g&;(%X%g+ z(hF;!lJ0l$q!AC~;dWk)zKMC^o@eR#!b@*1#z9#4%AqvkYTWz=KUn|5;TmLzVc-JQn`DH|ZfBhR%Sp2kNO z&l8fk0iKuP-J{#R=@tU~=H%=sHE|1*d@Bl?0A+hQaWu!vj7aXIzVM96soG zuemaz4~|#j+`J;uKg78(jT0$tan4HP;Mj)G$B7})2eNR~(8JlO`wp?~z^N8Te4Otl zWlgh!)OhN%2Jh1SlHiy#jX397#8GPNW0rp;RbG%IkCt9z$DuF8VnZA$e5SR)^rh z@jLarTnKNd!YM|vJg6#langO(m$Z7{Bb#>Eq2+;IYX_!@J4eLkAZ?p+XQ#^rhddgY z=?BtpSc1Oq(IW<&I3)df+4QY$rQheP`(pW1)^zdP1n9NR1og*RTXySZbXcwpm=!uY z;GEjk`aUjcQ+Th}!U(XlJQuIS&dcIE+it0UhY zVqP!8O2UtRJ_~rC6hHO5O&p7d{!tyWO!w8ajOT`3I^9RpGCQlZJaw;3%BGTZ+J85P zYXNyr7G1O~NvG#hwTz0ox@h~-vZO8#k9o3wJi1$*GFKkvoL65fWwtK#ootg*Ym}`1 zV;xU;c&OuIRL7N29p7&${B#{h9FujtHs)pP*m>$FuH%ygkM&VW*6|Lr#*wmwUw8Z< zrc3&6hsKxiOxE!ZjVabgTAs#~mbpGhyzS7K(z2v38dF;4)-n3b9nTj%DOEL~5N}Y6^v61OM`v-Jg6DSjgYIF=ryJrcV2kEGw7Ahj*OXnD>rdSe&9HGwRF{4R zqv4LyVmeHDrsL`Ud8`8Bx%Ca8*S&@;Sz&q)+A89qp1A#!=j2i7?DI#NUUVVvFW>@6g5iJpRGBgLrS%$gMcHPg4%Z7S=yy+KHX;n{n5Kq^P2|ONXbntNhfBW4DSwqzt z-kw@pAR1*7N7t4PFTrWmT%1RR__S-{HOr?O!s*X?I1dfswA&tz_T346Y8?;frVyW6 z!^7Df!ZCMGtCehU!1B2ugwt+&IOl|L zYMls&@o`EB2R(xr=G6U)5MF;4(~KxSrgR>b^ijvd`Ei(!EH;g8Q{NBbc)p(cdKky` zVms_@bSMaA!ieXzwB1hlFs^?nAiO zhjH;lGWxex<*;kpL>PBCiHkmcO6LHMAEqnSd}U^)*C=wyO}64Q;+~)68{rOnxa)zN zYHP%`D{;e^aR9!P{~hA1w{tzd7-uJc6vD+5RIaYrSD*Z52yX`OEOKOHJf8eQ2#?3p z7Mi^QjmM9AlIJHvxNW>4z@QS3Jl`9{YwIQk8RBPo>KZEHf9$R%_57<4PtIzraKn@S z)HQp8r@lAVvK9Gw{&Dh;LVS&%lJP?Pb_n12Ac>DXdcHR8oatcQY|6qvfVDAr@<-lSe@KiB|^s0vGL%i1gWd z;5{#d2Q*Q)G3Z%b)Y-(JWZ>cfz!A63Fjt=FhHwv1SBbU!>~tYNKgUjs5>y}3J$OmF zVu}uDEGKp@LD!%5$ZQ`mQ4G?}wRxMy>a`yHFAd_s9=V;P(_s1(?Ok(k$qJJ3wj}R_nkvGWkZic*JZ}b>X_0x=(3g_eg{C+)n>v@_)Y!MfI zTYgZBd~rE&-=C!i`Zl*wP!GiIc&ZSEkZ$XLEEu;3&>nRjYrC8X|C%6wi$Cn)v#y4+@U<_YJB2sKpRvr??KbVO zEx6d<8B5KPZF@KUh&w%E9e`%^$62}v4eqif)&pqQqyHMBG3_*ok2%}u--hrR!;E*A zz}QV0nd3g<-X$?HJ(`NUerq9rU=Dr1%-f<-i1_5M=TDrzpZNXW0yctVv0^LD^1nN2 zL&RU^L@EB$A^ezs6cpr-xE{SNgirlVAC;Up&<5QTPuL(dJWCM=leHl=R}~v(=_8tJ zo2QNI(Q|`35nt5z@X^jj%{|j-&kgV7KphZ&wmOVwW88fa;E(()lfUA->v8mjBj3x! z@5qdbcA|eB(R))#zfcbxjRg*W#H9|YHJH_zAICr^>&{&-2maf$bU;1f{r8?vwgLaS zOW@D-c#;)Cjo0_NYYRNDK5}RY+K3dVeJnBUS`XUUOxo66`Pv{lH-r9YqW?Aq#C{ z_^-3@XIc`vv}F%*2n^UgR6>7uiS1coV51^|l`P zskM>yC6@eF4HG}Z`?7RM%sp5~nSG(GZSbv?j5;E%zB?cgOJ-e^Ma%lijKgl-t*@fq zLkh@{ao<|5af3du`1LH?yLinbVt_yT33X8XbQZ2Gfc-i^n=gJK6F-gw^1d9nuUiBc z$7UkMiBG-5<2K?Uv429`%otAWxf3_FA8X?VxMq4N{vd96Y=;hZ6UFgeGs`}?35Jg& z0+&DQ>(qXg)gv(Xq%JpS@gLOsvRE>_Suf%7A9@d3n4HIJ6yoMH`4U%0TIx((J);tc zJ>e_c`(hvZ)#9mHe9gv^t#HG;@IRUO@rDX<(PtIDpM@)H8p~OIjq?$Oe^?wp)uJf} zbKt_;GU@o}0>)N68(^i82J`YlYOjg)D)T#TOaKW#;=-SWKhNSHPtj~F7M_-c%lWl% zRld}FkcHdk{I88ZHEwX!1#|I2IY@(fCUlWWU^J6eIf%(Z>RzG5FlZ7wtp{%EeqiL6 z*jVavIdD_!AmT>*1M)&Qv6%R{-&D9NqYW3as4KkJ12?sH7r&u>*6>)iS?ZH7?n4ZHDa4oKqVw)uw27gQ zX5sPsVAX@(IRcC~L+{GO??&SdVsz+lvhbSH2E;JxN}hTzKF~k3;yDNL?#tpis712r zr|?_@b-?k|*{>3Zu8>YuvLZQD}ZZHWG?>-9mt@QXGjvxBGYl=!KAE6dy9C-$L+!m)p-pO3c| zL>I*UwqV>J0B&L*g1Fxf=`D2>cP@-2)cv;4hj77GrXu}86epJh_k$U@X1msQ(YF4# zy*7l;w#|Oa-9&&cR-YG!Xwb*F=)}c%v+Z#qT(|GQA!ld%L}ZXIbx+sUQ{3mI=+=U+ zD)Q_xKYho!8^5@hu!B z=91es2jyYnRKyc$ca`mzpLWU-69q;*(?oVCn~)t_!edU{u&n$9ucRGYJ{k1K+;nXS zsf_Q=IK2b=N1RF6^4=wB+}=q0O3aD2==vjRzm?UP<0Gw(IOz*8Z`ty^MdcYfM4ZE)Ti`%c64xf{wK4Z?-%lNNek*7>tV>mq`=VrLqae#n{pDO2x%x zi}D!`+HuA*X(Bt6O~{VT|8;b{l6GwV&Z2xqLUwHa%ra>rJCse(j&NJC@es>T@JiY7 z>P2-L4chUXWzs~ll}*r&@SM!r5z9~TO4%{Ds7_-+JM`XFvfr?>W12{|f`WGJU8ej5 zFV7CF!8R8bT{c~$!H9jmFm*Qafrq3S@562$#$D6`yCmTECq4~xp z-BZYlx0ojKfPzBtwn_JekC>MiZ?xk{i~3?RXh(P)v$n@HksS&O+VSvZ%1`j}?7-Y% z(-LEyzpyZ|fEeF2vZ(xGOcyC&V2(A6&1=9*?|o#|$s)WWYcxh_kKP-}A`pPcnI>>{xu=H5s%+_o}mG$25^0 z3JTh>Wl^7G@=DpU__}K38qy z;q4FodKvTB_!_U5!^_`<0d2yAZ&zJ?MD%eblb-T3_S`9R*paW-0r}@;%MZ}|@^M!2 zsuP3s2eDad?k~jKn&LCuSG)2*m!OHgr16J&^p#%^(%AT$EDs0f(YrwRiDlD80ce@U z#=_V1cM1I7a`gNnv&akk=~wExfn*<1t2GPGW`mK9{qZZGACxWl-X??PAKp&~zI~|! zc=Jbm@_$?we?+prOia)PpZaI)r`MXpVf~v~{1ItM{@7o+@&RG|3O=8NvlyLTxsAP< zfUmHpedXlxXj5{rA9UrVOVRckm7ZfF{YQOISr(lqQhW*84L@FrcDjczIy*v5y}{NE zUs@imC)nt`;r&a|($+wIQtm63N1Kw1J-!XkT#9zknRczEzNniGdOj=FX5yG2og>lO zSzSsVV=2%sXlHmWf$SKXxf%Wq&xI0l!)<3nc&(qH9dSLZ{Q&H};=9Yy z8TSAJZT5;!Er)hAEcb28qfN=B&f&ha+dhOruu&c~hV+jon6ZJg)mMbq-f3D_u!*ZH z!hI}h2Yn-KD7u0?{z!{`i!1I4+G}XJrEUb0fs>7R>;R9>Vmx#RcDQ(eh!1_B&&4F$ zmC>cwXyJB$gL;_Di1u>OJ~%@Md0~(T=J<-MGM@tg^I*=;Q=B4XewQ+LPzNJg+m^Nw*xaHZrZgS*K@$G;Ky(UuS z*}OD3dS;X>O*^y7cuPZYtI)gZ0t)${>z0M2V@-#EbrCtvZxft#7re~-7i}ccc5~n=PN^r?b#{);g zi}3nXjEgrkr)<1L&y9=TTD}Ocx5m82L%d#+EMJ6|?stgXi4ZT{TXf1Zc%fgtsj&_9fG)@-#EkuU_KB^~9vSWmPMZui4s~8(Ek>_s7r){D*Tw&qDtE2-y+&V?<_n9`_#Pt- z^tf2}VT~TnqR;Zwd+BcZ(t148)kAo?G+{lWH4gm|zp_5^$E?Sb{&IPS{jq;hnzSB> z=Zp2;n~m4Wf}MSuc)nQ2D8D>glc*hBe4^-*P3LP9(OvX|CFnx&3_C9Ribq$e*_Wpq zJ1+V_pnMs2T%`Ls)(++C(q-B4)FtGF>_EG`sJ{eVM!US|_m-dwwM)v|xdh!A=z{p{=V=tOX!*5?+f3#1YL%| zFZ|0T=tBNRJze<6OVEu6>WOr%CFmwH=x$wtZZd;zbP2kt03G(>FVr0 z-37l{LS8WuFr-8LUZCqDD{m?}j$febBEQ^?!-P6^{J-G;c={+`moA}>&{3Z^d34j> zcP~(n7u**pcll=N^XMh$vh>k)bY#CwRpGkG&YL~HQ&PSheKsvY7t)9JpSlEHM*BYh z-+t>N`X$u9F)uk^*CRUbsEzph8kp;xuY2@vxy#kBea1Lx zDq=$xjqhnobKRmezLzb{m5b8&9=0^@d{FIm?eV>9Xx4peQ8~V6NrQH^?u$ZW>!UVe zKZwF|#MQcY2g+Sde9uPlzwQM~(D~kt>HcsDI^V-eM?1WAg??{PR*u$=+g!e;d^vXL zeunW+fG*39jZ4T2*+GA=S%S`wme_B(CFuN!iRjMLbw##)e$>QtUs^(5#&~<)hnJws z7;n$hGg8@lhQ?d;8|S@3QQy& zI3Jm@JawIFcuKj;({E*#=Asl&mnN)-u1}4e#624L<6K=|xaBU-pdRNsYsQI5;px%@ z^*HzauI}ThdO7zcsdATRSP!o*g{MoC)&u>;@?CFnBxjkVr596bUm3xjS?hHZ*Jg@1pkjy|AVE+@du8iib2fm%HY@i_#=l zI~qTv`|HK&{9rI~hkjtqUkIJ)2jGpw{>U1QF~8jPRz^Rt=B@x=moBLg?Z-S|jlaHB zeOx*}Le+lSq4U#7Pk!pi?a$VD^Adarl;tkpEIa&t%`{zx9jkxk+nMAE)_Wwef5_LR%d+F82|JQ>Av;iys~@)no!@Ij^|*RIL6?Zf)!G-u zcCg&FBcmQy`}axbqm_xlbF{Cqb)e<0CcgGsw}^>zp62;7P3Kz> z)6FeG=UWled2<+8&r#RaGZcf=b7~2B{^+Iha9{VFqR;x6O#?FGE+t2#qv{}a(wkUS$@|4#O3nM zxCH%K{~48!%U!8txsE}Uk8(SZnmC61vve+G%H!jKR==~p?egb6VbJnt>^n>E^BVg2 z=v`F)WtZOGKyc_k>z30&!ae5yNw=I1N|gVtTW$wfhyRD%^7xiyq@VVWM*ny!AC>Dp z08?%UFo*wJT>iFUI_0{?F!b@Uy@uC;clq0mErGoARC6A_8{J5%=_g}&~Q z^wT{fQ=V=gXTHecKb-c@nSbh*?@qO!Gj&ZM{Abz|=3g65xBoLA z=#)njV8{MlarqwS$Ux-3VYfUWe|=nDD+c^`mQy~S_Rp$c$K}(3_+0e^w>-^%l~e!I zlj--0G?u6J-H0 zHYQe?@p)#RauP9tuiCE~5njD+do~|^(--fPZ!NTj;(WI~jxX1@^8I4I)mUh>s0@DW z_sB#0onzyn>xQG}fp=D{I{9d9!3PJdE#Ps6&LNIaj|7kJ9-|)E*EmDx3QOow!}}ts zJbtDw&iG77Ha;60s?dCYI8>i!eC&6?0c7k;RxuT zaSZf$j_8bgj)LBVlGG=8XrFRqK1lM=zU1h6;CbRRbpIj9qkSmPK+Ge=Bosw=tVzyz zP{{s%yIU!y`WAF8KJ87%K&yMO30*07G$0p&!XIOXI_v$vqobY7(s?W(7ab>mR_?ZA zpxqpzZPhy=KerNoUVjXC+uIuU?L8+;?lNd~Z!#cvBp??LHm}^cL`dk zfBL6`v>6?DYa;IWO+Ayx`+o;K-WKE$o*d;{lR-Un&oJr3N6?>Pa9m$j%>XeGoqglBdkAe2`OxlT1JHoV2$1Ap@b;m%vI+J!X zBp1t{SnkQkKzn>9ZK%U4N{?myeA+LMk`|S9+7Cjs_y$#I?SsXvH*iosd3^16z~fWL z$OF&)pZ0el9+<<{(p3jjr0S&4Cv9--TPE#$LUPf*YU!@Gg+8Al6Uo*6nRGw49NO1r z$xU~kkgJnP)*0>18Xs%Rpw&I2fX?ae6LNJjY31IRrSmdq@6Do3cfF9SlSwQ03CBQt zPZn*u`-EJbOj@~mk2>J1Wzg#0Xn;1|^+K*rCav7*ES;A@Tg{?PcfF7+U2hc64><5NX?p%GKpU7VLaJ-(UB*i`O8Tk*;iSB%@886{fS2#;7qhgSd|s9+ z$H!{t2YAAt8pS&4eMu`1U%qPNo38jgoW-G^pO@y<>Kx3sDuc#c&3w?1epnA&9hV}0 z^Q{3sdYix|F5VS#>K~{1^22mxj_K}^2Ik@ zPSyTC(m`x$;B%nHEWtYuczP}~!dvJxyB-efO#A-`2Y${2uO=U5p}g~f^Dtk({$Rce zN7frP8i612&IO+K=^n4jw0_=2a9D5m_j%PT&HRD!{A|756jp+V?}VMYI}@+m?klR` z(uN&D+bf9>Gvq{EVrB(#I*^H~wS z_EnyyR5L95z6>#7J^I>HzHlV^<5h~4o;GaSkMDS%qW5Jy`Sf&S zQ1RVO{L6vw^mXi?OdQAf#=YVn#QiC+OzT&x*Yfykp&CNIlfZj!CZ6xggMEB!TN&gF zd40pY)${>iNTn%hscq(4&47dKB}%9y-@MGChVJ9+-8WvS*okEVwRp z-jz=tBS+4|nj$ek9y*U&+7?F-Yf8jJ=R!;K=<&vp#8(s^5s%}SX^X?dR;}f6@=uSP z$FK>Hh{rdNoX1F#$7he6$7qtrhmM@bSdzz^kDSMNlE=%AoX13x$9>D>F>vF#2kDSM7lE2@I);;WX!*3J#$(#6mP;G;1Tk%5{*$e96eTgOt_{8Z z?7(=)-l+G8Y0q4)&QWB=w7M=_hTN#fiD*yy?Q-Qt(HPVIV!55I#yje5ga?x&VZ8}))QZE!vpimM6RQe)cpEm!WO?R{g~ zw=bVIRY$L1F6~rW?kkp0>&eC5)Jcgoaz^{D4)R!)TFIOzk~T2j1lq5mHIglDVtt$; z7q7U@Pq&kDAG<7j4Xq;=YlV{r%c89|@>soc=fRat`sR_+JMyu+e$wwRi(Z8HI)@Hh z@zSP9f9ny_+X|=OvHN?{HOr!J&fzodE$lntYvFZI2lB`t1rJvb?0%ng@saRo&-a_P zNDVu_pLE)h^N2%6;@}-MC+hi*NS6pF?)nteG#_@R4R}83#E)n2R=NY@ z^2vB1r8LzE-?cqa&v9hQbLoZ_I)g^J)x|fo%j8y`J*cdtF0TPEz1MW4yhN#p8SO!A zo%sA^+cQ+{v>Lq*mrIU5*MrBij)un&X4dUWt=B1y56g4&y0J;U?#ShCPK?8e`tke~ z>y_pSNV$IyUxTRhu^E%lJJGK$QwCOhk>39PG4=kpqw+wrPDU zxYkfBGqB$f>6c-s;p59pv{frp+E~)gyf8-_*_TXTYbLoFmA03v{mR- z@8X`6{Ky;khgO>VmKd!D?Rp-MWZ)iYe@MQ4p#PS;awmuQc&1~e*)v=Wzt^e7GVol| z$}!b{5t`b3ujlU>Qr6}r>H2rs8)nv5>zAZisLMnJDw5`M$T=@aQ^9TLA^uag6c%5f zB{-0Obe!N+;g?P^{91>K~8+ClVp7EEstM!{a;ZUiK zC!V1u-gi`f4QCT#yu`EA#MATl34ZaBj7aW3g!n}#E5Hb9;=cLuA93(%O(-`SKLAS{ z?Cl=^)*y~HZhls?Kd8*rE4_M|A*tpIf5g@CFJFRo8jFY|9oCY^KW7QL+I)Y|X~&e* z6=&*?fASJ^BCp$;@5iK(Fa9t^8$VcSec|lC)YM9LEbYrO5!R^9!qm4CC*Qs~xYaH*4xt7GIZ}r+C z2J|!NkNbtAJ3suElK-e~V7oB|ZhH#SH*4Jhxx@nYn2vMyGQ#@Tu$fS<)!P9k z)L|`nd_1U(|6X zs#dipt4MzyaGbWcFx?kst9rj#?zUQ`N@I$>bi@y1(sAb|al00kQ75PpJFJ5<61eSp7d+$W zq(4A%TrL|=J0G@6`Q9I9MCDp^_7O5xIPI5T0_^o`sK9B~ORP6+T;ZPGp^d%HKwj}v zX;dZ=JCTjJTJep9J_%ga2|%7#%va~7#n2YC=M|q_4z1V&2Icv=*dncaoYY?N(Ies! zbD$15Yqvtr;OiXJ)@N|sSWK}X)$J6Q3GShsq&TyOTf ztqSHEjpX|l(66lc3%sVM(VIDpjgS7o=~pnnSaGjcHY8iGMAMp3-H7*u3_N%4ihg0m zd;$+6FV?LhSy)nk;!S7c2}|Og3cQC8O*eb(gO#3hw(o4fZ^3EcextY0sB=K-m=jj2 zFXrbfb|=e+W)FAqb;TKMMwi%0@dp|FQ5NR5D|igu<2iJw+QLEGZW$s##A%l$A`SMk zS8PhrFb*o+E63imutMcw}*vSy|5t(#&8KuquvJ`MMJ~ZV~IbC#C3S zV&6}JCb9lNOy%xQ(H!VEaQm$t$x_F=vMvYRU72(P8zaEdI>uTe_lOj})D;_vt*^qN zsp&YV3@z*Vh7>Kx=5aU2ba#dWFk^XqgvD>eHGbEb-D7_?vQ4LEu5FCRD^j%eX|&^d zB{HovRd+f8)*HT=oI58?hyJ+S!&_gXE@#RSNjmi5xl>YfPCTNVKjLC6!42@FUFa^# zjs)W1cbrM5ND**y!jl*Dno$Z_cA2qx2H^V2fD$gZh+I>%5|Pi@$bp;OEU($f7>xFs zjer5|=Fygzwe89lMS7Em1dT1x9>V6>&)93zSJ|v~cg*=6X08vIjUHMd{WbBN4nG$U z7$Db}q98gh8k6?yzvK1??R{W*&#kvVs9el>*+Op5ZFfW^_Og)E!5H@?IT&-Ygwx~R zcpv2oP!uyR&QPFboRR5Dj$pJQ#YTqnDB;J+mm-rpDTO_zeTK8l6=Nx!Ip(jBAdl@aH-o`}GD1&}h7b&V8q^+T?* zLgGbbEN9nWWiCQl54a!M&0$sN14I!Ig+}=}Sjr{<*wmQrH4c=Ex6IyM#yY>4<35Lg z%wpRIqPw~|g^8{?0#a$8gshWXoy*w728VJX#|r^i{#u6nx^bDIJ22l&5Gq6|qtb{}AQ5e4;0xs~ z2y291LlcJ^a53?7kbzr zr^hqo4mLuy%p)5HW{zwqNY5$cxEZCmJWirlJdYBcUcs3cg8&!C8Q89;i^_7Ur#wt= zc#t@+=Z{zg2EhP;!FWeYICPk$amJR^7_kb+rEnaSrv=C_%i{{LD!TDnhlu71Fep7m zi2T+3q{&Z`2Ji`!pD_7x^LH%ztMsD=Z`8m?On$`VhfQ8Q0KP?&FPid#$rqT%q2U}V z3%t?79zv)7u%e?*y!ZNRwpkuI(f0t$%~CnUTk#o zVk5>8D_`_=@}jSk7kwGi9)SxG3LgMBx_}f9QG#*JMrasI`{biNWj@kW^s@!cqF^k# z8jY?-qO0NP$}j*$L0S+c$+KWM^--1w$80BF%-Jg;#$188(rw@&ID5?y&+(x=Okem= zo<6_Fr~PtRJ9IHm>gVK{!f0^FQIbA}h^t{{F;o#36BvDn5+KzMQ#sL+Pkk1ntAe!V z1DH!=rvsx~j!%~ILJA6)objR6oO!un84uj@;n>}`?k?}T)rAri<@x0B{$g>D11JDc zZ~#-e{ZmeMGPi%y$xh_r<5d&>LwK6vl`+=H*Xu6)bwx0{^0q1?jjIQAE(b{YGShyKM$Cl3RP z6HXo$6vv%BOel^ydDu`Kb@DKxIO61CMRC~4i+`QGxHrzzyK!#PShat0SHcc!@BWEo z30)p@pvU7J9UkZC?>I+y$2qDQ<++#gZR8FIIe z7!?_KQY&|=F>xT4Eq;vbVMc6+Z8Z;Dv&r!KeTHMM=Ba@(x9I3mG@)Vj*pt#DCV)|H zAX(I0vs9W3AA4FKc4B9!o z2)10uUP~8!1Ft(REE5Q;_XsbRnZZ;x2|_oK1Yu$ug9>Rv1$l%DQbJv2VKq5u3Zs6r z(ZkkOWjum#F?qnxLPZKyrYtuAqf4tcV7bxX2BOxBR$SO)sy1j~ zVyChQY4+z=B47eY7r%-Q$=LM_T^|GB!oLK(bma}N`@!3HLcMDCs?>;IS1b%#~$!Z zBU#4Je`s%zAVL9l6Xf_c;yX#ElXrYqzTlO_Zku-DxkyTp`Uq?BLoqHX_$8=VtC`y& zshPIK$`H#OOPh1W?4n3xrJ~A?=^mZUfSP~*ad83^cxzMjyt3V zh-#e@hX?g$iH@7bXMy5Yt6iSywCam+AWFa4TEOA`Y(5;7gQX5IfZ!N|s7xcM$<#Y; zqs+x{H;`20~65s3fQaoJ>xG`o&p9&vbEXE}1dsIDo z#|h7y3L6i=#saX>0Bj@x8xFwyT2#4FtCbpZD&48EK%hvk<+MPZLs*$nsrZPK1e`aF zgH($hSx$gSnff-O8&3=J8M_^d(Zok^7+`X0Mv;iWQ;K;`LU>W6gI&AaZSqb+g0o{r zNO$WJGs$Ax*9n+AN;-v70s?Bg?v9Ed*a+w%W04jzRNEgy);uK^& zcv_BIY_DZLX*kg5MpuHf890b^wW9-amPJ%zSk_y3JU+TMR3^`DiHstd`eC zuaxI13rPx%2eT>(7IK~D6*xW>z1>24t%_*8VfPH%Q`l&7HIHI!{6z3R0+T zSvf`ltz>2nYRViYDME)y9FfYzbTpDFxZ^~Ui9v) z?H_~}yO0R17cfotiCm9yR5TW7spe!OEr=&wH+zO;{j=#?xRIw{M3q_ek ze0YdaWRS|y%0*I6sh-8@Oq|OD8jJMQ@TgMi$`6w}toKBQ6pm=2T?8TqYC6%E(qSz% z%fWV87lARgsr7hmh<=89sZMk-Z_wgB4}<1}2Fpx+3YxiYp&P_D47OYo`xN3S#flV7ezq+l<2^b1fE7`4HQE7T3`ukO-E~H;sVE6I8@^lIBape z#TFcx?=GMQ8N9icQ8+Iq=7_E;Ezh%^W7lM7*i!^Lim^cWDJ&sGfu4KNN2eN%!V7|?< zj|wzrifV0_gc)0aAc{yBQCff_Op;M4HYYSiJ)>@jY|a!pa&W6Xl7s75j>*jB=BIJq zy|G}%&^o4eIQTqBfDLfaYPWOvC`1Vwy!%0LOtKrS4s6-m4yb50|bCL?_d>*cz_|7C9py%z;l2%?g%xmxpuMF zO}$BEvt0i~*EoY$J=kU>(BUAgb>quQ3yUR3IBnEYuVzx9Sp+QDp(f-n59iC#OEFPE z;#_r6M9oTyGAPq}k3>Q@ECTV&6#l|+TW!=irbNc!DpEYRo23$;mh(8s@qzMS7RTN3 z&ayy}D-Lab1Sf^9#~9lTQx}CXTpo!~Bs=V9O-)1NfgEx%{%6E_tZ*t8TlRy)5jFdT zD1(tVW`sUiNXHpk}s^$FM_TVaq*+^2$QkVNr?`xlse`m1|BGy=iUGii^!-a~W!3wZ^CF=Caf_<*xi{hYx&o z;_9q)uuX2&!P%ksdbT<&j|W7B3W$Rax4M(@TPgY=_Jj-;r=7B+hhn6hpW_)$ktnUV zGBeX_2vgMpn3Z87Mm=+kCW2zLVuXe_%#{xu!dYn;YDWPJ!_zAT4=7^=BE>_TL;DeS z@mM1aEZiA`EMpxlES9m>W*xIUkeVQ%S?pL)B&$jQcA!88cQY|kgrL~Eqp=`nyR)(?%;$8>HFkSf!{nQwQT`VG)fG zDBzu1t0VVKR6ot=)w?H4FD>g~T4hX<{=Y5R?k?e0nRw z=P-h8IL5NTV4-xGbv!L(MMz9a2BoG`j0%z0>)1D#)R=g;M3K{qnI#3c1iZ{>L=ILb z96gIfvBQkGOYfsuxB$b2jUwiF3awgcN5$ICYzR@34s?Qmtc*iOEc@1okbL7xmvKlm zfRKtbO7fhp;547M`GqE?g3Pzs{fnQ?{7rzhG7+NoNEj+Fg@@W3C|Gz=iHI@lf)(cq z(Tp;eYX)INVI)X_sdWP-cf|aS2u$A4%_?54 zWAJA6uS__|xYkiZn5cxa`nQH#I4p1Do~hvBoEHB!(VIvf&*;ftY%}w38)x_U7p7|- zH@%pLsrt9Jki%n$Vy0Y38?DsKvuK@sRl^LPYrLz`n`^Y>avsYJUgYqJ`;j`IB*SyQ zCL?8c&GcKCQbMB+9*LA^1EkXdgzU_7rqKq6*+Go*y3-bCWkHM+{I}r@Ino%?DAEYh zFjDb0yVH#aEa&lYrcMtsbnko0Ud(ixooG+f6cX0Y-FA!YlJC90MXk-^0SSXLnZwTE z=;&l2(nhx8qMU55MLF3ni*m977Ugt9E6&QQH_FPEQoKx+p8Ka=n4y(|gSzwAkMfN*e+|FL zy8uG$lx}r8^k~X^sV$Y28aUzzz@_0E#{7;1Iy`$gs$^Mjxbt)t6i&ZM zMR+3BZ_W&<8ZzesjYA5c7gj?e+1Dm-X^ADROH;)O7)`4nxwJN!hSIq8{fnAb6>s6( zRLhl2 z&;|8-sU7oIRl;I_TVFXKZMj>yIb8N2q2Ew*N@oCcnYL&|=MrG{W5c!10~g7UGD?*M z27RmkI4t4G&<%;^Nc#rF1OkM4h#=z>9QWHS-{v?7lmi5hke#j-HBR@{@LWZ*EBt1e z6!=yLzRq;sgEpyRhVw7FIb&>&hlIjndVKEdxZhaqCGOYi`29!^PPiCN(6)^BZf83fkzd)kK@UZ6F;Z}Xi14fBqGf^ro@$VLk z`MW$lz^d9mPUN{`W1rq)ti%rj=0QBaF1Qa?!u#PB2OD?{y4-iy<<`I9YSQOM?oo1X zrOW}(!Ntv(Ef1IZ@^Bh1W>ck>--&BfZW+Wjn}qr&X?PsD?u^| z(JJOvF=!p%&3MeK;ef4Cw=VTd%zeYJN8%~A%~t)q4-q0;?qin+AQJj_KWBI#qh~A z9XU4M5V*Hjea;vA6R*E6^$R*JZb-A1(#F^)`%V7dAGQcs-q|P97mT)LvsCeIPI^!j zcnpot-|QXvTgT!YU}5I(*Zd{?@Iv$|H5)f`Dx9AE{`=qm&TDoJ#D7U2zom~~)5kCA<0XAOr;l&xgE3?ghzBxhxxLpm=Pb1Q*LpTUPf-6t z2UxYgKhOXB_rJ~YL&Z6D{*UVWd-eT~l;FF6Jlh`*iMaOd1;|5XDj>eCfCQf>pnp8u z9|dsj+6%y|m=!ROkMI8RY=0!=Mz$x!xs4}`kMDE)c(y+ha#`CG;e-$eLUMA z3AxAZ3FW0zZJ)=-cmH^{KN9MSw~Z2hbUa~ve4pFLv;C2f+uxorlG)#Pq+-8Ib3~ju zar!!ARo*_nEDt^IxP7aziGd$|Js#vG`@Ftg?8w18Mkn4<=#Q_k2*;DT%H3QJuV-yI zugED;EL^P-t~LLGjPXHY(y_?4&B@O=a+l`w!Y!#VZGp`kmb4q z#qg-u?^AF4W5@cmUU~m_EaPi;{W)+GbXb0IGluST>{Rv)UqZ5l>Mplo*#ER36{Qg5 z14UN~D!bY-*YnglaK2n^v3=Q7%~{W4%M_Rh32#qG@v%4xqqYPq_iK?C4wWZyw!4|G^{Pdr06q!>p+kY(3ynvzS!e z*$SWJs1!fIOf`IM!iRmIKS86udl_C*6ybtK)|H`0Y{*j{O!e&?bp4A;7t3NP6fp5f z4yB5dk%@-HvZ$<*>4G`y^2&3W?1F&_QE+#>#Ym>YD@gRpR)$sSSliD^R!qm z-h^(udu2CcNnUR}mA=-fNG{5vU@419Pu(+?IR%VsO#!RQU$Ze|UfTV}jCyx!`1(VA zdh6uTEIK=MMhCEH>AX6JTbR+cc3Am>@DhXpV2w4b-4Pbr(}!J+@S|i=bsF$ol~U;? zgDZn8_f1x?h$F*;*Eo#W1D_3@Vy--uAlnDXka}|?`_JwT-)gzBXf6Jo$7Qb9-4SY6 zga0}W{>wC&=P0HM`E?rn%QP4?o+{*d8vJb<{B;Bl>|!V2!SG{Rf8JGJ9NLBMS`VP$ zofpS28nS_4@m)732t$@@kBZI-IE!jCGKoT)^>XE1h}Y}ZSC}o=uLC2V$$sB`8|a{i zEw63`@R00n(;*~Xolgi{3Oshy4oA-SGnC=53xZ*}s#s|8I2KKDcflu7$Bt1IDey{L zFy%c&{5V}Epv%>ehGJCE`+_$~V9LtswuY$=i&A+p$uk@6&gHd%dofvBG8g%5>=?1f z!4WlBvl0Hi>kci8wu4JvR*nEm&AsI+15J!jg0~I( zJrhBVTBfisCA0OcNq66^nCeloe)R`_ox3ZU&z-XotmQy4C>jh$cjNX1G}?(?&?Il$ z`NYFxnR6=bLulODDTIA)z1kV6i2T)*SgIX+Ayp5%k3_v4SyV#ALE#7FH1K9^4M_gr zbu9PWbewg0GM5jUN2z>x294c#ptVELbzYG?zIONMdo++;%C|4@JkzHf2m63!)9Jw9 zxe!II9+k-kd>W>swjK6}%;#jjEo>4@Q61-v=$CII)MD|bTe;Yi1Ys8|X8k@I>eQ2A z-Gj1Ly;3#+Tl65_REDJGPeor;31_<3A*m$&tOlxh1Xm2Lm5z|Y&^y{i{ZMs$y=I+iyc z(|lFTM2=uZ6&52GwAjO@eoUgLqSziQ%=KD>B10M`@X#40R`zIk0uDpx5n7L{pCANm zm2tC)Nvv*m_&;14?IFk+ESkyE`Lj~QYxcVn@1x$2=3l4?D0K2 zrtQ^_6~W^PowsWcg)`r6+~208|2M&(EsLh4NI2OZEjgO)Z7O@$`mzdGLm6_PGo|GN z26a?4Kre7|I*45@snQqyC@b6u+dh#;SjmS0idf^|M;W~#FaGiuY94XLQE*$yndtruOZ{Fm9T7XiT`;_R6T~2Iqui{iqXe zI?3f$`%0QX3XdqKGOjB)tL#fVNJxS1l9;1_mWVAL(zPWbU*@E`lg7bYuG|L1ywAFl z0TSxAkk=lG^9c5yne&|Svip#BZIo~;aY0)iE3=xSoPP^v!4 za2GBb3X+5#DPo+vDeisuI-S!Z>Z}5c#y}wX&WG8MlsEUUz?)VIoSH6`475dNNjaMv zO;Hw4qV$)y62V!o6A{o>Riq;7UyAu)n@reN!-Jr-qm?o>r;a*T(`ucLkZfB6IDG23 zURstS+x9*j#Z-8l+PdW(BPHndml}u}^&`-nO*1^8uv+59ELmW6Vgo7hve?- z2wtO>B^=?q4%iLSAZzQ?uA#qfD-2)3CnxGyfyLxm)Nawe>Ft2rD#b`Y)J?|7Y-%C~ zZgO!q@!YsHj}iTEtJ(G!mJf(FRJ2Dxj?Eo{y_#MQSYLIvNwmjy&6l!V&T!|roU9O9 zVAe$G)`b(421lEO9i*!*PUR58w&w?AWc7JCFu|g5Hs_i~8jubn6c|YoRFuU&tn_JV zh0-55k)Jumv&mDDbRfBQa8Nj1@%+jls&>)FG7*p3= z4luiy@jjZtO>R&vN7RG~c-vnAbl0z7Fp#Dw6lR+d4jHH|$3RU!R>I?646tqv!STER zYD)&tlxw_Lo5Vnmi6lpwNGNcV*b!0N2Pfi?Aq#IDp2RIvac$|IzA2i^Qj$G!yhljg z6t0*yyC6+w=u4Rv#XQxL*N~B#7RRIm=Pb*KvwsM^c&xb(!B-XvNEr4AH^qeOxuRkd zZ$HZ4qnyGy>u|;cJFLJ~7GW4z^8>LuX6SvqaAx75v55^T~ zh^LQsD)rKCt01vL4~yl<4mnTPB*t{lp{gkdV4FRQYUp0lR^nt2I;a7O7Vdzgdr{j-u7kKq9;6(8=yzGG0k0&B)sx+I59LvQqAp z8UV&y!e*#M9n?~&!)&{7!!^VP6s;qV+AxYR7&A<0FnYC5B)?rK6^U@)JB;gPCp_wY z_V)+aU>1bql!z;MM9Q8e>JZqtP?jf<;{Ebeik-zJ#$zKwY2wBR(gfZ<{Iw%C+JcKb z+b#AW<0iIb#lV0u$8s)P7+A31ndd^H-QB3OZyxQV6m#+)kq7LNJ zxiXlFLsez}TN4DQPZS#VdAW&;DxW9&gfH}jQtU<-e^3-g3jIR&T)fu~aubjS#DcIi z!bsH5sL!v4o%&uLp@1&P6ocpqY+lc=`zu;5=vY$Q&m2@!tbl--p{tKH6pJ=j+fn{ra1oOMjC1nFYwA|NvA`m!q$=_xgKT5)}>n47+7*mK^7-Ld^I}< ze3ZnJAtZ}MTR)-!oF93Bq~nNVrZCR)PDfKuDs(ER>Dec9+W8-4BGU26c$uDbve27q zmCMvYuTLW@8C2ULb=?eaju_rdWmkf-e~miz${Q*Yok0da>9(g3u~n*I$0tik1;~!D z7UA(~l+-&bEIjNU)3}jRzp9awC`;4P+6_GZVI&o|Z zb=nRqeeXhgX>dArR9wk6E)zxtH<+fi)h3jc%W4NZ4dM>potg+RMhoYc?hreTQU~y5 z3ivz){MG=)5lVk!D{``PIdk%3R#U1KiFS-lRR!huvewWm)oxa=?zMLI96S z05XyNPv*=Ja#V;Xugd{xs}uFP3E`;^Tb8RW%kC(17efl(jKi>%%Lew`r-69JZ45Gj znG*@m_6|AGh+g``z;UkZpG53v1M6JmS!^d-x|~Nl5uiqM=dTr}#cM5)e?T$0$Eu;C zS=^*>{oT-?IU#tlilDtUy-9n3s!O{rqcNFXqtxbB@BqKsVLO|4m1RGeovt^J1kNE| zbf8y9lSGynQFREbH%?_4_t0#if{r)_fx^%S8^YTT1065H_`}QUo-B7TJdo9kZGL2e z1vpi_AP^=}T=_h89Hf|@Dq#z?Ryz<6@*Nm6yOYNShB9@G@h34L%XF5_rNg$EnXVPF z>aO1AI7e0%-Lt0yX++UGEx+cy9}?3Rirv_8l>{KQJ}iBPwQEGCriZ z9inANSgj;jxIFNYS!7EB!Et8akk*F<=h!sXw$W*$vW{9@^fXmRQ}p^ERE$)UMQZ0k zj9cZiwBYFo96g&XNo-$wZ;%fxy=&D_)tI^oD-7h$Cv4*11NS0RZQ-G;Uid_riV$5Fx(P}#`uUW zb35oF{T1x>1iOsCWk)DMD$1x}oL#L>v*zTSUY`ps!U1ljNqcnLT%wC2&v8)D;LF=B z&gGUFqujz0*n;=Q6u4`tGxl&>%S049;yLH&84_Hhs0HQFcl81;mt~^9a)97Iwlpr$ z8iXD5B0JWbj#jwdbETDaNjdHlaMd0*%l-w620x1`^zE-HWSw4ba3^8t51$=#?IUl6vcf&I+69tngjIxWTFSt?J&NEm2XeKtXUys0#1E49F{-G@sVkP> zLjtLVCgRidm+J$mWoCH@TEC$hm$`OZv28&NP)t**&IVJWIun&~7vJ_8&I`MP4tmx; zh?FIxcbYk6b!{J)50As;3jnUT5AuHG8>d0HyZX9^raryfUVi5b-gh%*Fnq zBD5R675L4)A%op*gvphwu0k!jQpAP;f#K1-IXr{7J2jO_p0VjL8!=FR=g4KDdM4RW zd4)1h{eT%@LZib4QC|_{Br!L8@bZM&M$x`2wpuqaow%c&nZ$$u8~cNxhew z5*oWxt}aEf^}bYBSHmR(jeEo0<(tQFB^DK~upw1EPBDs(cGYd-<<2nAUUIn$ehcRY zfM~pbfLmza5b=6Y7nEYK>|sv`-Z3mlWaP~uidl-W^~uIM+j(`_h)6ER75y)<{}~br zK`v&KOj2Z;C5Rt+Yw>m2VIfzm`xZ5%z1_1Ir(GT%K=QiZK}cBSQrtNc>Q&v?+S79I z+U+%O9}r98VemZ0;cyY{{~$$dXvl@bIMWOYt;4crUdtk1y5QZgO^j9yqTf%#DuYE! z=GAawZFu#Pf##ic!Rjh2S7MsQPjW~++m8D7Zuf7LqL~d*4bkufETe5gV(Xxmw?Ake zJ=9LPI3qd6_A89}V`wgtm?NPmi;j@TA^Mf%<^VBdFQ)iSSjv?`b z8OZo?*UVYVoODp{s-Eq2mTKCcQ-}+TWl&(3?QU~5wbknxhDdJb!GGP1v@2b!Gd@b_ zKI@lDGBXnejAU}$z`1j?FmHG|?wWxUF0|4rT#J!3s)6N`_fcwn|LRfG-j8V?F1db) z_IVOrU3>YA;)wBm3cR$Xu7j(O9b?av{cis4KI z?TR-Hl@COgQSqP~(2;;ky*j1F%p*rQqoAUEhEZm@o*H_g>uk|Qh6fI$3M4~h4P3c) zr*@Ul62n|MQNWg`Ie2K=ACDu(*&teq*22c=%wenL{GMsj4wT>1pNt( z)u7!TSwOm{EK$;aFKd0LF{SM}#;;{p5w;b9k9d&L)-P7fwD7UGwoH)fDaH>9aV@WA zUhMw%o~x1hC^g?Brl>+(gseia)4wzT9wg67#BhBld5dR3Z_;C_u!IvwKPut4G4ll+ z<{Wk{7MfThY;$1w%WPyKB9Lw(hU1N7!Rv>zBw(t5lB!Ll6?l|V2q|vR2vupJIE@VM zCBBVL8=Ay|(f*Ft3cpVK?09hep`%ddHwbQaIQp<`1USp*Z(W-=xcG7r6jMz~4CD)j zubAxnStj?oeZ`d)-N2V(MLF!|tQX?O0=h5hVfxvvTY_%VEE#lIt+2!>^*9~p^rmc2 z1d|%T1&OwFKmS}h{Ec14K(#Gv`4 zaKDa=3OEKZ<-fzs+nZdo#ON{A^77*bK-SEFcyeK+_HiHafN5XAl@NFSl2!)ZDO>;B zS*E)Q0jxZA!|tG_``>Jdi2+K878K!h#3#jxm0*Gfm>+Ng`BW^uI+2wuK@1kG!6apA z9j*mCtE>OA@SD6JSKZif)l5Fv<=6q-|18e>|7om_?4RYdI>(31y3SAItjK>mn>r`dzO0PW=YBG zK3if#{Di_LXw$JCGa17KODEd=@^3H1qtvXfx)=D@2RKa1;Uhsy!fYB-K-s8Hpl?)j z-qg-f0R6T5$U~w;UUof3;#*_g#o0=Zrr7u-Q~W?A48;@wY90#-*n#2R&$#-80}Dyk zIe4ECHDN-C>n)fOmi;g@P98}j%mF7UL;&!TS{ZV>s|^ZP&%|QzFnWt^W=_VK8V{0Q z&P534bs=)#m9Q^!3%&{=tKgD!GNYxN1MTFVEgP4%BIB-+F8Itf(J>J3%jFMruXS1n zwYciAlIJ1E2)9X}&{1Q*T~tHrA}ZYX=%{%(y_;^$DZB5l_8nv{*xjtuODE-k>m2Py zIMqSawrtyJL{9LB7NkSuFpZ9#6L9F$30FIRkzghhL2rU2!D7|-+Po~)E(KQbvfUdDn>n0mJ3kv0 z##)X8gtroewv&$=q8@2PHN#d(LV?5T$ER@#J=y}rZl;q{U6kPE9Ii%k1j@Wrmf@}6 zg*{&in)w({b!yZhTy1hj6b;s)hzupCiwNXf3Idcd(pra0xkM9vbk9YTiEr-C8KBFS zYf9NNi8@RI2_0#)&&G{5kTf$~U|5@db2Lg1e%xNS=9DV=Z;Ixk;kV|p=nvD)K2kFrgeW^yTxs0q?9F@AQ|py_Px6E;m9FZ2`~wB5P~Gh1w&He zN{&Pt6U!-^W0&sYr1G9bUZx4aG@4CGWEZy*(PfLk%YanIFnlMMvsue6N~d*L{Okq7 zfJ!=s4ZWsvFJ%Za@#umi+a9q+=sAjzT%7KDQkg!#cO_$Z8FaB=Vd}3uWhR zjHzerZ!}ueWg+e}iJO$P;1V7(4%(sUoLYG2M4k+jQj|H_N3G%pLQ81O>Jw)d~@lC}a9NA!nuxmk9ZJQxC5DW^Ntu#R9v>eNxy#6JJ}yZF9Fn zo_t3kPka(22FE{rQSWt=0haC+0W{lTF;#DYu_830Y%$n#C!$?=%}R@xMah^@ZO|~A z1CzW`>^3fnT&PBfZe{AKPBU+fK%0yCu+k{J&yxemo4M=EkrB)Mj4d(`l%;GS!l?Z-Ctc!WyO$Pag-B|eNlb=j(VLa0 zhUoObaL3^*`~nx~ibvd2Uo20m7)M__>HX6*BR3U&l~-W~xp*E67yoovJG~?k@=1%n z>l%b4wGCuu%QRuNBLls3M~)59T{BY8IJuD*SYK;H!L{T%(d^K*B*H&~^Wg;$2+np3 zHuF54Z2{g8BhMICF&7R%4aU6_V>q)I5VzQsf4wMe(8<=_CYPFAJa&;>Dz~PhVrca2 zG8QKZ)A_HHM^E^Qs9q?Ohz)MCDxMOXLE2`XFYS~=<(McZ6^T9GBeY6H{0&@1;K@iQ zKcZ2C<_UeStM=8ndOMCG^rY+c?65e=+?!n{tYq3NtlY)l|HOY4UPcXr#0A^d`4mVf zEwY5WH7)m5U)BtiN{c0Jh2{#`vYRL6;Z1u`eM=>S+008R8M@{|#0;yqVi3f+xD8tA z9Ns`%EFpR;0pjJJ5>bhJY4vKr2@Dd$pR@go zW|*6YI9jeRT&B|XI4o*Jdl*&nKNI%3&3==F7ai=CBDOVNA8pb>ycLw_G~Y#C>Xj> zwmrGFtr`;ZiBMGkSySt9To6{;TQ!?YBs_iC-Tt?`{f8@t98e#zQ#z2jO$Q*-aS%fL zuj`Jc6mW~AM8i3Nod@ZGbo<5`aNy9qhYayYJ<#06fCIj6k9f>XwamfNL8$_h-w^P zd6*m~4T0P_&LPevupNb7D#HCa(5Cn+&LI552h(bjfvjx{?>UNw3TK5;-7)s-qalSD zqv&j?^J@M=w~zN`kom`dgC3r5GK95EUfr$r@aF z-pb&-!qCJ0;5mYZA66>CcDh)p!_^Em0oq10b4UzSfRZ3D*edH(MEL}+ocD5E(=MMd zTRu}*S>mENDgHD%mt{gwD+mSx4dh~?no#ux##rl3$g`w&L9wqgNZRJzVC;nZ`N}AR zPWoaOj^{ce(2?Fp87AQkv@=P#OU23zSZk+dOYfG!kZ8`^X|xDCoi>s3#xDXRqLNQ0 zh_M;MJBKG zu8^JCg;Xinx!DnAh!|A*{AB#2vy#Q&JB5>Cz;NMsgPgG2(uxz zW{BIAPf5R3vo{B1O}tPtJBrp>Ru0{0mS;%#-1108uo0BNg=mrf^%oAuacWWBWLTWEOXWe-@y#~O(qmWg7s`>+YF%4W@dBKSu|u%u tV)nBqJBoV`pVE@{pdMhW+wj(3_DqS4^j-KW-j@b}JZQ!n5ZuS?{{YR>SD literal 0 HcmV?d00001 diff --git a/sdm845Pkg/Binary b/sdm845Pkg/Binary index f80b7c4..30a2de8 160000 --- a/sdm845Pkg/Binary +++ b/sdm845Pkg/Binary @@ -1 +1 @@ -Subproject commit f80b7c467c7454e7e0eabff77adb8ffddaa9ef7a +Subproject commit 30a2de8c7c8d0ff9cde65db046f28d7cabe6c480 diff --git a/sdm845Pkg/Devices/atoll.dsc b/sdm845Pkg/Devices/atoll.dsc new file mode 100644 index 0000000..614203e --- /dev/null +++ b/sdm845Pkg/Devices/atoll.dsc @@ -0,0 +1,27 @@ +[Defines] + PLATFORM_NAME = sdm845Pkg + PLATFORM_GUID = 28f1a3bf-193a-47e3-a7b9-5a435eaab2ee + PLATFORM_VERSION = 0.1 + DSC_SPECIFICATION = 0x00010019 + OUTPUT_DIRECTORY = Build/$(PLATFORM_NAME) + SUPPORTED_ARCHITECTURES = AARCH64 + BUILD_TARGETS = DEBUG|RELEASE + SKUID_IDENTIFIER = DEFAULT + FLASH_DEFINITION = sdm845Pkg/Devices/atoll.fdf + +!include sdm845Pkg/sm7125Pkg.dsc + +[BuildOptions.common] + GCC:*_*_AARCH64_CC_FLAGS = -DSM7125_TEST=1 -DENABLE_SIMPLE_INIT -DENABLE_LINUX_SIMPLE_MASS_STORAGE + +[PcdsFixedAtBuild.common] + + gsdm845PkgTokenSpaceGuid.PcdMipiFrameBufferWidth|1080 + gsdm845PkgTokenSpaceGuid.PcdMipiFrameBufferHeight|2248 + + # Simple Init + gSimpleInitTokenSpaceGuid.PcdGuiDefaultDPI|440 + + gsdm845PkgTokenSpaceGuid.PcdDeviceVendor|"Qualcomm" + gsdm845PkgTokenSpaceGuid.PcdDeviceProduct|"QRD 720" + gsdm845PkgTokenSpaceGuid.PcdDeviceCodeName|"atoll" diff --git a/sdm845Pkg/Devices/atoll.fdf b/sdm845Pkg/Devices/atoll.fdf new file mode 100644 index 0000000..0c3965c --- /dev/null +++ b/sdm845Pkg/Devices/atoll.fdf @@ -0,0 +1,626 @@ +# +# Copyright (c) 2018, Linaro Limited. All rights reserved. +# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +################################################################################ +# +# FD Section +# The [FD] Section is made up of the definition statements and a +# description of what goes into the Flash Device Image. Each FD section +# defines one flash "device" image. A flash device image may be one of +# the following: Removable media bootable image (like a boot floppy +# image,) an Option ROM image (that would be "flashed" into an add-in +# card,) a System "Flash" image (that would be burned into a system's +# flash) or an Update ("Capsule") image that will be used to update and +# existing system flash. +# +################################################################################ + +[FD.sdm845Pkg_UEFI] +BaseAddress = 0xd0000000|gArmTokenSpaceGuid.PcdFdBaseAddress # The base address of the Firmware in NOR Flash. +Size = 0x00600000|gArmTokenSpaceGuid.PcdFdSize # The size in bytes of the FLASH Device +ErasePolarity = 1 + +# This one is tricky, it must be: BlockSize * NumBlocks = Size +BlockSize = 0x00001000 +NumBlocks = 0x600 + +################################################################################ +# +# Following are lists of FD Region layout which correspond to the locations of different +# images within the flash device. +# +# Regions must be defined in ascending order and may not overlap. +# +# A Layout Region start with a eight digit hex offset (leading "0x" required) followed by +# the pipe "|" character, followed by the size of the region, also in hex with the leading +# "0x" characters. Like: +# Offset|Size +# PcdOffsetCName|PcdSizeCName +# RegionType +# +################################################################################ + +# from ArmVirtPkg/ArmVirtQemuKernel.fdf +# +# Implement the Linux kernel header layout so that the loader will identify +# it as something bootable, and execute it with a FDT pointer in x0 or r2. +0x00000000|0x00008000 +DATA = { + 0x01, 0x00, 0x00, 0x10, # code0: adr x1, . + 0xff, 0x1f, 0x00, 0x14, # code1: b 0x8000 + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, # text_offset: 512 KB + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, # image_size: 2 MB + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # flags + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # res2 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # res3 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # res4 + 0x41, 0x52, 0x4d, 0x64, # magic: "ARM\x64" + 0x00, 0x00, 0x00, 0x00 # res5 +} + +0x00008000|0x005f8000 +gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize +FV = FVMAIN_COMPACT + + +################################################################################ +# +# FV Section +# +# [FV] section is used to define what components or modules are placed within a flash +# device file. This section also defines order the components and modules are positioned +# within the image. The [FV] section consists of define statements, set statements and +# module statements. +# +################################################################################ + +[FV.FvMain] +BlockSize = 0x40 +NumBlocks = 0 # This FV gets compressed so make it just big enough +FvAlignment = 8 # FV alignment and FV attributes setting. +ERASE_POLARITY = 1 +MEMORY_MAPPED = TRUE +STICKY_WRITE = TRUE +LOCK_CAP = TRUE +LOCK_STATUS = TRUE +WRITE_DISABLED_CAP = TRUE +WRITE_ENABLED_CAP = TRUE +WRITE_STATUS = TRUE +WRITE_LOCK_CAP = TRUE +WRITE_LOCK_STATUS = TRUE +READ_DISABLED_CAP = TRUE +READ_ENABLED_CAP = TRUE +READ_STATUS = TRUE +READ_LOCK_CAP = TRUE +READ_LOCK_STATUS = TRUE + +APRIORI DXE { + + # + # PI DXE Drivers producing Architectural Protocols (EFI Services) + # + INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf + INF MdeModulePkg/Core/Dxe/DxeMain.inf + INF MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf + INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf + INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf + INF ArmPkg/Drivers/CpuDxe/CpuDxe.inf + INF ArmPkg/Drivers/ArmGic/ArmGicDxe.inf + INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf + + INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf + INF ArmPkg/Drivers/TimerDxe/TimerDxe.inf + + FILE DRIVER = f541d663-4a48-40aa-aabf-ff158ccae34c { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/SmemDxe/SmemDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/SmemDxe/SmemDxe.efi + SECTION UI = "SmemDxe" + } + + FILE DRIVER = 8E9BD160-B184-11DF-94E2-0800200C9A66 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/DALSys/DALSys.depex + SECTION PE32 = sdm845Pkg/Binary/7125/DALSys/DALSys.efi + SECTION UI = "DALSys" + } + +// fucked + # FILE DRIVER = 8681CC5A-0DF6-441E-B4B8-E915C538F067 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/HWIODxeDriver/HWIODxeDriver.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/HWIODxeDriver/HWIODxeDriver.efi + # SECTION UI = "HWIODxeDriver" + # } +// + + FILE DRIVER = 10e193df-9966-44e7-b17c-59dd831e20fc { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/ChipInfo/ChipInfo.depex + SECTION PE32 = sdm845Pkg/Binary/7125/ChipInfo/ChipInfo.efi + SECTION UI = "ChipInfo" + } + + FILE DRIVER = B105211B-BBBD-4ADD-A3B0-D1CF4A52154C { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/PlatformInfoDxeDriver/PlatformInfoDxeDriver.depex + SECTION PE32 = sdm845Pkg/Binary/7125/PlatformInfoDxeDriver/PlatformInfoDxeDriver.efi + SECTION UI = "PlatformInfoDxeDriver" + } + +// fucked + # FILE DRIVER = 9A00771F-36D4-4DD5-8916-C48ED9B16B86 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/HALIOMMU/HALIOMMU.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/HALIOMMU/HALIOMMU.efi + # SECTION UI = "HALIOMMU" + # } + + INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf + + FILE DRIVER = E43128A8-8692-42B6-8AFA-676158578D18 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/ULogDxe/ULogDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/ULogDxe/ULogDxe.efi + SECTION UI = "ULogDxe" + } + + FILE DRIVER = ABA01FF8-2CCB-4E12-8B2E-CD3F4A742993 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/CmdDbDxe/CmdDbDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/CmdDbDxe/CmdDbDxe.efi + SECTION UI = "CmdDbDxe" + } + + FILE DRIVER = CB29F4D1-7F37-4692-A416-93E82E219711 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/NpaDxe/NpaDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/NpaDxe/NpaDxe.efi + SECTION UI = "NpaDxe" + } + + FILE DRIVER = CB29F4D1-7F37-4692-A416-93E82E219766 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/RpmhDxe/RpmhDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/RpmhDxe/RpmhDxe.efi + SECTION UI = "RpmhDxe" + } + + FILE DRIVER = B43C22DB-6333-490C-872D-0A73439059FD { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/PdcDxe/PdcDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/PdcDxe/PdcDxe.efi + SECTION UI = "PdcDxe" + } + +// fucked + # FILE DRIVER = 4DB5DEA6-5302-4D1A-8A82-677A683B0D29 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/ClockDxe/ClockDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/ClockDxe/ClockDxe.efi + # SECTION UI = "ClockDxe" + # } + + INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf + INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf + + FILE DRIVER = 0d35cd8e-97ea-4f9a-96af-0f0d89f76567 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UFSDxe/UFSDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/UFSDxe/UFSDxe.efi + SECTION UI = "UFSDxe" + } + + INF FatPkg/EnhancedFatDxe/Fat.inf + INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf + INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf + + FILE DRIVER = 2a7b4bef-80cd-49e1-b473-374ba4d673fc { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/SPMI/SPMI.depex + SECTION PE32 = sdm845Pkg/Binary/7125/SPMI/SPMI.efi + SECTION UI = "SPMI" + } + + INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf + INF EmbeddedPkg/EmbeddedMonotonicCounter/EmbeddedMonotonicCounter.inf + INF MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf + INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf + INF MdeModulePkg/Universal/PrintDxe/PrintDxe.inf + INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf + INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf + INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf + INF SecurityPkg/VariableAuthenticated/SecureBootDefaultKeysDxe/SecureBootDefaultKeysDxe.inf + + INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf + + INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf + + FILE DRIVER = AF9763A2-033B-4109-8E17-56A98D380C92 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/DALTLMM/DALTLMM.depex + SECTION PE32 = sdm845Pkg/Binary/7125/DALTLMM/DALTLMM.efi + SECTION UI = "DALTLMM" + } + + # FILE DRIVER = 04DE8591-D2B3-4077-BBBE-B12070094EB6 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/I2C/I2C.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/I2C/I2C.efi + # SECTION UI = "I2C" + # } + +// fucked + # FILE DRIVER = 5776232e-082d-4b75-9a0e-fe1d13f7a5d9 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/PmicDxe/PmicDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/PmicDxe/PmicDxe.efi + # SECTION UI = "PmicDxe" + # } + + INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf + INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf + INF MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf + + FILE DRIVER = 5bd181db-0487-4f1a-ae73-820e165611b3 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/ButtonsDxe/ButtonsDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/ButtonsDxe/ButtonsDxe.efi + SECTION UI = "ButtonsDxe" + } + + # FILE DRIVER = 11faed4c-b21f-4d88-8e48-c4c28a1e50df { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UsbPwrCtrlDxe/UsbPwrCtrlDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbPwrCtrlDxe/UsbPwrCtrlDxe.efi + # SECTION UI = "UsbPwrCtrlDxe" + # } + + # FILE DRIVER = 94f8a6a7-dc34-4101-88c1-99179cceae83 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UsbfnDwc3Dxe/UsbfnDwc3Dxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbfnDwc3Dxe/UsbfnDwc3Dxe.efi + # SECTION UI = "UsbfnDwc3Dxe" + # } + + # FILE DRIVER = beb12bee-f6e1-11e1-9fb8-6c626de4aeb1 { + # SECTION PE32 = sdm845Pkg/Binary/7125/XhciPciEmulation/XhciPciEmulation.efi + # SECTION UI = "XhciPciEmulation" + # } + + # FILE DRIVER = b7f50e91-a759-412c-ade4-dcd03e7f7c28 { + # SECTION PE32 = sdm845Pkg/Binary/7125/XhciDxe/XhciDxe.efi + # SECTION UI = "XhciDxe" + # } + INF MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf + INF MdeModulePkg/Bus/Usb/UsbMouseDxe/UsbMouseDxe.inf + INF MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf + + # FILE DRIVER = 2d2e62cf-9ecf-43b7-8219-94e7fc713dfe { + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbKbDxe/UsbKbDxe.efi + # SECTION UI = "UsbKbDxe" + # } + + # FILE DRIVER = cd823a4d-7dec-4531-ae5d-4134fa4127b8 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UsbConfigDxe/UsbConfigDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbConfigDxe/UsbConfigDxe.efi + # SECTION UI = "UsbConfigDxe" + # } + + # FILE DRIVER = 0A134F0E-075E-40B3-9C63-3B3906804663 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UsbInitDxe/UsbInitDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbInitDxe/UsbInitDxe.efi + # SECTION UI = "UsbInitDxe" + # } + + # FILE DRIVER = 3299a266-15f0-4346-8318-716336736d3e { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UsbDeviceDxe/UsbDeviceDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbDeviceDxe/UsbDeviceDxe.efi + # SECTION UI = "UsbDeviceDxe" + # } + + # FILE DRIVER = 7DB0793A-4402-4BE1-906E-D0FABAD2707E { + # SECTION PE32 = sdm845Pkg/Binary/7125/DDRInfoDxe/DDRInfoDxe.efi + # SECTION UI = "DDRInfoDxe" + # } + + INF sdm845Pkg/Drivers/sdm845Dxe/sdm845Dxe.inf +} + + INF MdeModulePkg/Core/Dxe/DxeMain.inf + + # + # PI DXE Drivers producing Architectural Protocols (EFI Services) + # + INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf + INF ArmPkg/Drivers/CpuDxe/CpuDxe.inf + INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf + INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf +!include ArmPlatformPkg/SecureBootDefaultKeys.fdf.inc + INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf + INF SecurityPkg/VariableAuthenticated/SecureBootDefaultKeysDxe/SecureBootDefaultKeysDxe.inf + INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf + INF EmbeddedPkg/EmbeddedMonotonicCounter/EmbeddedMonotonicCounter.inf + INF MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf + INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf + INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf + + # + # Multiple Console IO support + # + INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf + INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf + INF MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf + INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf + + INF ArmPkg/Drivers/ArmGic/ArmGicDxe.inf + INF ArmPkg/Drivers/TimerDxe/TimerDxe.inf + + INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf + + FILE DRIVER = f541d663-4a48-40aa-aabf-ff158ccae34c { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/SmemDxe/SmemDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/SmemDxe/SmemDxe.efi + SECTION UI = "SmemDxe" + } + + FILE DRIVER = 8E9BD160-B184-11DF-94E2-0800200C9A66 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/DALSys/DALSys.depex + SECTION PE32 = sdm845Pkg/Binary/7125/DALSys/DALSys.efi + SECTION UI = "DALSys" + } + + # FILE DRIVER = 8681CC5A-0DF6-441E-B4B8-E915C538F067 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/HWIODxeDriver/HWIODxeDriver.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/HWIODxeDriver/HWIODxeDriver.efi + # SECTION UI = "HWIODxeDriver" + # } + + FILE DRIVER = 10e193df-9966-44e7-b17c-59dd831e20fc { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/ChipInfo/ChipInfo.depex + SECTION PE32 = sdm845Pkg/Binary/7125/ChipInfo/ChipInfo.efi + SECTION UI = "ChipInfo" + } + + FILE DRIVER = B105211B-BBBD-4ADD-A3B0-D1CF4A52154C { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/PlatformInfoDxeDriver/PlatformInfoDxeDriver.depex + SECTION PE32 = sdm845Pkg/Binary/7125/PlatformInfoDxeDriver/PlatformInfoDxeDriver.efi + SECTION UI = "PlatformInfoDxeDriver" + } + + # FILE DRIVER = 9A00771F-36D4-4DD5-8916-C48ED9B16B86 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/HALIOMMU/HALIOMMU.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/HALIOMMU/HALIOMMU.efi + # SECTION UI = "HALIOMMU" + # } + + FILE DRIVER = E43128A8-8692-42B6-8AFA-676158578D18 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/ULogDxe/ULogDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/ULogDxe/ULogDxe.efi + SECTION UI = "ULogDxe" + } + + FILE DRIVER = ABA01FF8-2CCB-4E12-8B2E-CD3F4A742993 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/CmdDbDxe/CmdDbDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/CmdDbDxe/CmdDbDxe.efi + SECTION UI = "CmdDbDxe" + } + + FILE DRIVER = CB29F4D1-7F37-4692-A416-93E82E219711 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/NpaDxe/NpaDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/NpaDxe/NpaDxe.efi + SECTION UI = "NpaDxe" + } + + FILE DRIVER = CB29F4D1-7F37-4692-A416-93E82E219766 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/RpmhDxe/RpmhDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/RpmhDxe/RpmhDxe.efi + SECTION UI = "RpmhDxe" + } + + FILE DRIVER = B43C22DB-6333-490C-872D-0A73439059FD { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/PdcDxe/PdcDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/PdcDxe/PdcDxe.efi + SECTION UI = "PdcDxe" + } + + # FILE DRIVER = 4DB5DEA6-5302-4D1A-8A82-677A683B0D29 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/ClockDxe/ClockDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/ClockDxe/ClockDxe.efi + # SECTION UI = "ClockDxe" + # } + + FILE DRIVER = AF9763A2-033B-4109-8E17-56A98D380C92 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/DALTLMM/DALTLMM.depex + SECTION PE32 = sdm845Pkg/Binary/7125/DALTLMM/DALTLMM.efi + SECTION UI = "DALTLMM" + } + + # FILE DRIVER = 04DE8591-D2B3-4077-BBBE-B12070094EB6 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/I2C/I2C.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/I2C/I2C.efi + # SECTION UI = "I2C" + # } + + FILE DRIVER = 2a7b4bef-80cd-49e1-b473-374ba4d673fc { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/SPMI/SPMI.depex + SECTION PE32 = sdm845Pkg/Binary/7125/SPMI/SPMI.efi + SECTION UI = "SPMI" + } + + # FILE DRIVER = beb12bee-f6e1-11e1-9fb8-6c626de4aeb1 { + # SECTION PE32 = sdm845Pkg/Binary/7125/XhciPciEmulation/XhciPciEmulation.efi + # SECTION UI = "XhciPciEmulation" + # } + + # FILE DRIVER = b7f50e91-a759-412c-ade4-dcd03e7f7c28 { + # SECTION PE32 = sdm845Pkg/Binary/7125/XhciDxe/XhciDxe.efi + # SECTION UI = "XhciDxe" + # } + + # FILE DRIVER = 5776232e-082d-4b75-9a0e-fe1d13f7a5d9 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/PmicDxe/PmicDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/PmicDxe/PmicDxe.efi + # SECTION UI = "PmicDxe" + # } + + # FILE DRIVER = 11faed4c-b21f-4d88-8e48-c4c28a1e50df { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UsbPwrCtrlDxe/UsbPwrCtrlDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbPwrCtrlDxe/UsbPwrCtrlDxe.efi + # SECTION UI = "UsbPwrCtrlDxe" + # } + + # FILE DRIVER = 94f8a6a7-dc34-4101-88c1-99179cceae83 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UsbfnDwc3Dxe/UsbfnDwc3Dxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbfnDwc3Dxe/UsbfnDwc3Dxe.efi + # SECTION UI = "UsbfnDwc3Dxe" + # } + + # FILE DRIVER = 2d2e62cf-9ecf-43b7-8219-94e7fc713dfe { + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbKbDxe/UsbKbDxe.efi + # SECTION UI = "UsbKbDxe" + # } + + # FILE DRIVER = cd823a4d-7dec-4531-ae5d-4134fa4127b8 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UsbConfigDxe/UsbConfigDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbConfigDxe/UsbConfigDxe.efi + # SECTION UI = "UsbConfigDxe" + # } + + # FILE DRIVER = 0A134F0E-075E-40B3-9C63-3B3906804663 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UsbInitDxe/UsbInitDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbInitDxe/UsbInitDxe.efi + # SECTION UI = "UsbInitDxe" + # } + + # FILE DRIVER = 3299a266-15f0-4346-8318-716336736d3e { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UsbDeviceDxe/UsbDeviceDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbDeviceDxe/UsbDeviceDxe.efi + # SECTION UI = "UsbDeviceDxe" + # } + + FILE DRIVER = 5bd181db-0487-4f1a-ae73-820e165611b3 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/ButtonsDxe/ButtonsDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/ButtonsDxe/ButtonsDxe.efi + SECTION UI = "ButtonsDxe" + } + + FILE DRIVER = 0d35cd8e-97ea-4f9a-96af-0f0d89f76567 { + SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UFSDxe/UFSDxe.depex + SECTION PE32 = sdm845Pkg/Binary/7125/UFSDxe/UFSDxe.efi + SECTION UI = "UFSDxe" + } + + # FILE DRIVER = 5AF77F10-90DF-4E7E-8325-A17EC09D5443 { + # SECTION DXE_DEPEX = sdm845Pkg/Binary/7125/UsbMsdDxe/UsbMsdDxe.depex + # SECTION PE32 = sdm845Pkg/Binary/7125/UsbMsdDxe/UsbMsdDxe.efi + # SECTION UI = "UsbMsdDxe" + # } + + # FILE DRIVER = 7DB0793A-4402-4BE1-906E-D0FABAD2707E { + # SECTION PE32 = sdm845Pkg/Binary/7125/DDRInfoDxe/DDRInfoDxe.efi + # SECTION UI = "DDRInfoDxe" + # } + + INF sdm845Pkg/Drivers/sdm845Dxe/sdm845Dxe.inf + INF sdm845Pkg/Drivers/SimpleFbDxe/SimpleFbDxe.inf + + # + # USB Host Support + # + INF MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf + INF MdeModulePkg/Bus/Usb/UsbMouseDxe/UsbMouseDxe.inf + INF MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf + + + # + # FAT filesystem + GPT/MBR partitioning + # + INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf + INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf + INF FatPkg/EnhancedFatDxe/Fat.inf + INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf + INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf + INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf + + INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf + + # + # ACPI Support + # + INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf + INF MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf + INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf + # INF RuleOverride = ACPITABLE sdm845Pkg/AcpiTables/AcpiTables.inf + + # FILE FREEFORM = 7E374E25-8E01-4FEE-87F2-390C23C606CD { + # SECTION RAW = sdm845Pkg/AcpiTables/Common/DBG2.aml + # SECTION RAW = sdm845Pkg/AcpiTables/polaris/DSDT.AML + # SECTION RAW = sdm845Pkg/AcpiTables/Common/MADT.aml + # SECTION RAW = sdm845Pkg/AcpiTables/Common/FADT.aml + # SECTION RAW = sdm845Pkg/AcpiTables/Common/GTDT.aml + # SECTION RAW = sdm845Pkg/AcpiTables/Common/IORT.aml + # SECTION RAW = sdm845Pkg/AcpiTables/Common/PPTT.aml + # SECTION UI = "AcpiTables" + # } + + # + # FDT support + # + INF EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf + + # FILE FREEFORM = 25462CDA-221F-47DF-AC1D-259CFAA4E326 { + # SECTION RAW = sdm845Pkg/FdtBlob/sdm845-xiaomi-polaris.dtb + # } + + # + # SMBIOS Support + # + INF sdm845Pkg/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.inf + INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf + + # + # UEFI applications + # + INF ShellPkg/Application/Shell/Shell.inf +!ifdef $(INCLUDE_TFTP_COMMAND) + INF ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf +!endif #$(INCLUDE_TFTP_COMMAND) + + # + # Bds + # + INF MdeModulePkg/Universal/PrintDxe/PrintDxe.inf + INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf + INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf + INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf + INF MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf + INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf + INF MdeModulePkg/Application/UiApp/UiApp.inf + INF sdm845Pkg/Drivers/LogoDxe/LogoDxe.inf + + # + # Simple Init GUI + # + INF src/main/SimpleInitMain.inf + + INF src/kernelfdt/KernelFdtDxe.inf + +[FV.FVMAIN_COMPACT] +FvAlignment = 8 +ERASE_POLARITY = 1 +MEMORY_MAPPED = TRUE +STICKY_WRITE = TRUE +LOCK_CAP = TRUE +LOCK_STATUS = TRUE +WRITE_DISABLED_CAP = TRUE +WRITE_ENABLED_CAP = TRUE +WRITE_STATUS = TRUE +WRITE_LOCK_CAP = TRUE +WRITE_LOCK_STATUS = TRUE +READ_DISABLED_CAP = TRUE +READ_ENABLED_CAP = TRUE +READ_STATUS = TRUE +READ_LOCK_CAP = TRUE +READ_LOCK_STATUS = TRUE + + INF ArmPlatformPkg/PrePi/PeiUniCore.inf + + FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 { + SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE { + SECTION FV_IMAGE = FVMAIN + } + } + +!include sdm845Pkg/CommonFdf.fdf.inc + + diff --git a/sdm845Pkg/Drivers/sdm845Dxe/sdm845Dxe.c b/sdm845Pkg/Drivers/sdm845Dxe/sdm845Dxe.c index 9d55a89..873daa7 100644 --- a/sdm845Pkg/Drivers/sdm845Dxe/sdm845Dxe.c +++ b/sdm845Pkg/Drivers/sdm845Dxe/sdm845Dxe.c @@ -48,9 +48,14 @@ VOID InitPeripherals(IN VOID) UINTN *pAddr; // Lock the QcomWdogTimer in a cage on certain devices +#ifdef SM7125_TEST + MmioWrite32(0x17c10008, 0x000000); +#else MmioWrite32(0x17980008, 0x000000); +#endif DEBUG((EFI_D_WARN, "\n \v The Dog has been locked in a cage :)\v")); +#ifndef SM7125_TEST Status = gBS->LocateProtocol( &gQcomSMEMProtocolGuid, NULL, (VOID **)&pEfiSmemProtocol); @@ -60,6 +65,7 @@ VOID InitPeripherals(IN VOID) } DEBUG((EFI_D_ERROR, "%a: SmemGetAddr result: 0x%p\n", __FUNCTION__, pAddr)); +#endif // gBS->Stall(5000000); } diff --git a/sdm845Pkg/Include/Configuration/DeviceMemoryMap7125.h b/sdm845Pkg/Include/Configuration/DeviceMemoryMap7125.h new file mode 100644 index 0000000..0641c7b --- /dev/null +++ b/sdm845Pkg/Include/Configuration/DeviceMemoryMap7125.h @@ -0,0 +1,325 @@ +#ifndef _DEVICE_MEMORY_MAP_H_ +#define _DEVICE_MEMORY_MAP_H_ + +#include + +#define MAX_ARM_MEMORY_REGION_DESCRIPTOR_COUNT 95 + +/* Below flag is used for system memory */ +#define SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES \ + EFI_RESOURCE_ATTRIBUTE_PRESENT | EFI_RESOURCE_ATTRIBUTE_INITIALIZED | \ + EFI_RESOURCE_ATTRIBUTE_TESTED | EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | \ + EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | \ + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | \ + EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | \ + EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTABLE + +typedef enum { NoHob, AddMem, AddDev, Mem4G, Mem6G, Mem8G, Mem10G, MaxMem } DeviceMemoryAddHob; + +typedef struct { + EFI_PHYSICAL_ADDRESS Address; + UINT64 Length; + EFI_RESOURCE_TYPE ResourceType; + EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute; + ARM_MEMORY_REGION_ATTRIBUTES ArmAttributes; + DeviceMemoryAddHob HobOption; + EFI_MEMORY_TYPE MemoryType; +} ARM_MEMORY_REGION_DESCRIPTOR_EX, *PARM_MEMORY_REGION_DESCRIPTOR_EX; + +static ARM_MEMORY_REGION_DESCRIPTOR_EX gDeviceMemoryDescriptorEx[] = { + /* Address, Length, ResourceType, Resource Attribute, ARM MMU + Attribute, HobOption, EFI Memory Type */ + + /* DDR */ + + /* HYP */ + {0x80000000, 0x00600000, EFI_RESOURCE_MEMORY_RESERVED, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, + ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED, AddMem, + EfiReservedMemoryType}, + /* AOP CMD DB */ + {0x80700000, 0x00140000, EFI_RESOURCE_MEMORY_RESERVED, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, + ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED, AddMem, + EfiReservedMemoryType}, + /* sec_apps_region */ + {0x808ff000, 0x00001000, EFI_RESOURCE_SYSTEM_MEMORY, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, + ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, NoHob, EfiReservedMemoryType}, + /* SMEM */ + {0x80900000, 0x00200000, EFI_RESOURCE_MEMORY_RESERVED, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, + ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED, AddMem, + EfiReservedMemoryType}, + /* removed_region */ + {0x80b00000, 0x03900000, EFI_RESOURCE_SYSTEM_MEMORY, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, + ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, NoHob, EfiReservedMemoryType}, + /* PIL_REGION */ + {0x84400000, 0x0F800000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, AddMem, EfiReservedMemoryType}, + /* DXE Heap */ + {0x93C00000, 0x04500000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiConventionalMemory}, + /* Sched Heap */ + {0x9B800000, 0x00400000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiBootServicesData}, + + /* FrameBuffer */ + {0x9C000000, 0x01800000, EFI_RESOURCE_MEMORY_RESERVED, + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE, + ARM_MEMORY_REGION_ATTRIBUTE_WRITE_THROUGH, AddMem, EfiReservedMemoryType}, + /* FV Region */ + {0x9F800000, 0x00200000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiBootServicesData}, + /* ABOOT FV */ + {0x9FA00000, 0x00200000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiReservedMemoryType}, + /* UEFI FD */ + {0x9FC00000, 0x00300000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiBootServicesData}, + /* SEC Heap */ + {0x9FF00000, 0x0008C000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiBootServicesData}, + /* CPU Vectors */ + {0x9FF8C000, 0x00001000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiBootServicesData}, + /* MMU PageTables */ + {0x9FF8D000, 0x00003000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiBootServicesData}, + /* UEFI Stack */ + {0x9FF90000, 0x00040000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiBootServicesData}, + + /* Runtime Services Data */ + {0x9FFF7000, 0x00009000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED, AddMem, + EfiRuntimeServicesData}, + + /* 4GiB Memory */ + // {0xA0000000, 0xDDFA0000, EFI_RESOURCE_SYSTEM_MEMORY, + // SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + // ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, Mem4G, EfiConventionalMemory}, + + /* DBI Dump */ + {0xC0000000, 0x00F00000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_INITIALIZED, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + NoHob, EfiConventionalMemory}, + + /* 6GiB Memory */ + {0xC0F00000, 0x3F100000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, Mem6G, EfiConventionalMemory}, + + {0x100000000, 0x100000000, EFI_RESOURCE_SYSTEM_MEMORY, + SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, Mem6G, EfiConventionalMemory}, + + /* 8GiB Memory */ + // {0xA0000000, 0xE0000000, EFI_RESOURCE_SYSTEM_MEMORY, + // SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + // ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, Mem8G, EfiConventionalMemory}, + // {0x180000000, 0xFC8A0000, EFI_RESOURCE_SYSTEM_MEMORY, + // SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, + // ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, Mem8G, EfiConventionalMemory}, + + /* Other */ + + /* AOP_SS_MSG_RAM */ + {0x0C300000, 0x00100000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_INITIALIZED, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + NoHob, EfiConventionalMemory}, + /* IMEM Base */ + {0x14680000, 0x0002B000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_INITIALIZED, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + NoHob, EfiConventionalMemory}, + /* IMEM Cookie Base */ + {0x146AA000, 0x00001000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_INITIALIZED, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiConventionalMemory}, + + /* Register */ + + /* GCC CLK CTL */ + {0x00100000, 0x00200000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* SECURITY CONTROL */ + {0x00780000, 0x00007000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* PRNG_CFG_PRNG */ + {0x00790000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* SDC1_REG */ + {0x007C0000, 0x00020000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* QUPV3_0_GSI */ + {0x00800000, 0x00100000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* QUPV3_1_GSI */ + {0x00A00000, 0x00100000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* UFS UFS REGS */ + {0x01D80000, 0x00020000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* CRYPTO0 CRYPTO */ + {0x01DC0000, 0x00040000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* TCSR_TCSR_REGS */ + {0x01FC0000, 0x00040000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* TLMM_WEST */ + {0x03500000, 0x00300000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* TLMM_NORTH */ + {0x03900000, 0x00300000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* TLMM_SOUTH */ + {0x03D00000, 0x00300000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + + /* GPU_CC */ + {0x05090000, 0x00009000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* GPU_CPR */ + {0x0509A000, 0x00004000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + + /* RPMH_CPRF */ + {0x0C200000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + + /* QUPV3_SSC_GSI */ + {0x62B00000, 0x00060000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* PERIPH_SS */ + {0x08800000, 0x00200000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* MCCC_MCCC_MSTR */ + {0x090B0000, 0x00001000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* USB30_PRIM */ + {0x0A600000, 0x0011B000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* USB_RUMI */ + {0x0A720000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + + /* PDC_DISPLAY */ + {0x0B2A0000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* PDC_DISP_SEQ */ + {0x0B4A0000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* RPMH_BCM_BCM_TOP */ + {0x0BA00000, 0x00200000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* SLP_CNTR_TSENS */ + {0x0C221000, 0x00003000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* TSENS0_TM_PSHOLD */ + {0x0C263000, 0x00003000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* PMIC_ARB_SPMI */ + {0x0C400000, 0x02800000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + + /* VIDEO_CC */ + {0x0AB00000, 0x00020000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* NPU_CC */ + {0x09980000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* TITAN_CAM_CC */ + {0x0AD00000, 0x00020000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* DISP_CC */ + {0x0AF00000, 0x00020000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + + /* SILVER_CLK_CTL */ + {0x18280000, 0x00001000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* GOLD_CLK_CTL */ + {0x18282000, 0x00001000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* L3_CLK_CTL */ + {0x18284000, 0x00001000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* APSS_RSC_RSCCR */ + {0x18200000, 0x00030000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* APSS_GIC500_GICD */ + {0x17A00000, 0x00010000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* APSS_GIC500_GICR */ + {0x17A60000, 0x00100000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* QTIMER */ + {0x17C00000, 0x00110000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + + /* APSS_ACTPM_WRAP */ + {0x18300000, 0x000B0000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* MDSS */ + {0x0AE00000, 0x00134000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + /* SMMU */ + {0x15000000, 0x000D0000, EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE, ARM_MEMORY_REGION_ATTRIBUTE_DEVICE, + AddDev, EfiMemoryMappedIO}, + + /* Terminator */ + {}}; + +#endif diff --git a/sdm845Pkg/Library/MemoryInitPeiLib/MemoryInitPeiLib.c b/sdm845Pkg/Library/MemoryInitPeiLib/MemoryInitPeiLib.c index 66b78f6..94d294b 100644 --- a/sdm845Pkg/Library/MemoryInitPeiLib/MemoryInitPeiLib.c +++ b/sdm845Pkg/Library/MemoryInitPeiLib/MemoryInitPeiLib.c @@ -25,7 +25,11 @@ #include // This varies by device +#ifdef SM7125_TEST +#include +#else #include +#endif #define SIZE_KB ((UINTN)(1024)) #define SIZE_MB ((UINTN)(SIZE_KB * 1024)) diff --git a/sdm845Pkg/Library/QcomGeniSerialPortLib/GeniSerial.h b/sdm845Pkg/Library/QcomGeniSerialPortLib/GeniSerial.h index f92035a..75a964f 100644 --- a/sdm845Pkg/Library/QcomGeniSerialPortLib/GeniSerial.h +++ b/sdm845Pkg/Library/QcomGeniSerialPortLib/GeniSerial.h @@ -1,6 +1,12 @@ #ifndef UARTQUPV3_H #define UARTQUPV3_H + +#ifdef SM7125_TEST +#define UART_DEBUG_PORT_BASE 0xA88000 +#else #define UART_DEBUG_PORT_BASE 0xA84000 +#endif + #define UART_BASE_ADDR UART_DEBUG_PORT_BASE #define RING_SIZE 256 #define MemWrite(off1,off2,val) (*((volatile UINT32*)(UINTN)(UART_BASE_ADDR+(off1)+(off2)))=((UINT32)(val))) diff --git a/sdm845Pkg/sm7125Pkg.dsc b/sdm845Pkg/sm7125Pkg.dsc new file mode 100644 index 0000000..b35ab14 --- /dev/null +++ b/sdm845Pkg/sm7125Pkg.dsc @@ -0,0 +1,340 @@ +# +# Copyright (c) 2018, Linaro Limited. All rights reserved. +# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +################################################################################ +# +# Defines Section - statements that will be processed to create a Makefile. +# +################################################################################ + +!include sdm845Pkg/CommonDsc.dsc.inc + +[LibraryClasses.common] + ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf + ArmPlatformLib|sdm845Pkg/Library/sdm845Lib/sdm845Lib.inf + CompilerIntrinsicsLib|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf + UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf + PlatformBootManagerLib|ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf + CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf + + # UiApp dependencies + ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf + FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf + DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf + BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf + +!if $(USE_UART) == 1 + SerialPortLib|sdm845Pkg/Library/QcomGeniSerialPortLib/QcomGeniSerialPortLib.inf +!else + SerialPortLib|sdm845Pkg/Library/FrameBufferSerialPortLib/FrameBufferSerialPortLib.inf +!endif + + RealTimeClockLib|EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.inf + TimeBaseLib|EmbeddedPkg/Library/TimeBaseLib/TimeBaseLib.inf + + # USB Requirements + UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf + + # Network Libraries + UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf + NetLib|NetworkPkg/Library/DxeNetLib/DxeNetLib.inf + DpcLib|NetworkPkg/Library/DxeDpcLib/DxeDpcLib.inf + IpIoLib|NetworkPkg/Library/DxeIpIoLib/DxeIpIoLib.inf + UdpIoLib|NetworkPkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf + + # VariableRuntimeDxe Requirements + SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf + AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf + TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf + VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf + + # + # Secure Boot dependencies + # + + # Cryptographic libraries + RngLib|MdePkg/Library/DxeRngLib/DxeRngLib.inf + IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf + BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf + OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf + TlsLib|CryptoPkg/Library/TlsLib/TlsLib.inf + + TpmMeasurementLib|SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.inf + AuthVariableLib|SecurityPkg/Library/AuthVariableLib/AuthVariableLib.inf + SecureBootVariableLib|SecurityPkg/Library/SecureBootVariableLib/SecureBootVariableLib.inf + SecureBootVariableProvisionLib|SecurityPkg/Library/SecureBootVariableProvisionLib/SecureBootVariableProvisionLib.inf + PlatformSecureLib|OvmfPkg/Library/PlatformSecureLib/PlatformSecureLib.inf + + # SimpleFbDxe + FrameBufferBltLib|MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf + + PlatformBootManagerLib|sdm845Pkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf + MemoryInitPeiLib|sdm845Pkg/Library/MemoryInitPeiLib/PeiMemoryAllocationLib.inf + PlatformPeiLib|sdm845Pkg/Library/PlatformPeiLib/PlatformPeiLib.inf + +!ifdef $(AB_SLOTS_SUPPORT) + BootSlotLib|sdm845Pkg/Library/BootSlotLib/BootSlotLib.inf +!endif #$(AB_SLOTS_SUPPORT) + +[LibraryClasses.common.SEC] + PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf + ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf + HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf + MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf + MemoryInitPeiLib|sdm845Pkg/Library/MemoryInitPeiLib/PeiMemoryAllocationLib.inf + PlatformPeiLib|sdm845Pkg/Library/PlatformPeiLib/PlatformPeiLib.inf + PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf + +################################################################################ +# +# Pcd Section - list of all EDK II PCD Entries defined by this Platform +# +################################################################################ + +[PcdsFeatureFlag.common] + ## If TRUE, Graphics Output Protocol will be installed on virtual handle created by ConsplitterDxe. + # It could be set FALSE to save size. + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|FALSE + + +[PcdsFixedAtBuild.common] + gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|4 + + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString|L"$(FIRMWARE_VER)" + + gArmTokenSpaceGuid.PcdSystemMemoryBase|0x80000000 + gArmTokenSpaceGuid.PcdSystemMemorySize|0xC0000000 + + # + # SimpleInit + # + gSimpleInitTokenSpaceGuid.PcdDeviceTreeStore|0xa3000000 + gSimpleInitTokenSpaceGuid.PcdLoggerdUseConsole|FALSE + + gArmPlatformTokenSpaceGuid.PcdCoreCount|8 + gArmPlatformTokenSpaceGuid.PcdClusterCount|2 + + # + # ARM General Interrupt Controller + # + gArmTokenSpaceGuid.PcdGicDistributorBase|0x17a00000 + gArmTokenSpaceGuid.PcdGicRedistributorsBase|0x17a60000 + + gArmTokenSpaceGuid.PcdArmArchTimerIntrNum|0x12 + gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum|0x13 + + # GUID of the UI app + gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 } + gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|0 + + gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FALSE + + gEmbeddedTokenSpaceGuid.PcdMetronomeTickPeriod|1000 + + # + # Fastboot + # + gEmbeddedTokenSpaceGuid.PcdAndroidFastbootUsbVendorId|0x18d1 + gEmbeddedTokenSpaceGuid.PcdAndroidFastbootUsbProductId|0xd00d + + # + # Make VariableRuntimeDxe work at emulated non-volatile variable mode. + # + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable|TRUE + + gsdm845PkgTokenSpaceGuid.PcdMipiFrameBufferAddress|0x9c000000 + + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x20 + +################################################################################ +# +# Components Section - list of all EDK II Modules needed by this Platform +# +################################################################################ +[Components.common] + # + # PEI Phase modules + # + ArmPlatformPkg/PrePi/PeiUniCore.inf + + # + # DXE + # + MdeModulePkg/Core/Dxe/DxeMain.inf { + + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf + } + + # + # Architectural Protocols + # + ArmPkg/Drivers/CpuDxe/CpuDxe.inf + MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf + + MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf { + + NULL|SecurityPkg/Library/DxeImageVerificationLib/DxeImageVerificationLib.inf + } + SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf + SecurityPkg/EnrollFromDefaultKeysApp/EnrollFromDefaultKeysApp.inf + SecurityPkg/VariableAuthenticated/SecureBootDefaultKeysDxe/SecureBootDefaultKeysDxe.inf + + MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf + EmbeddedPkg/EmbeddedMonotonicCounter/EmbeddedMonotonicCounter.inf + MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf + EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf + EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf + + MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf + MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf + MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf + MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf + +!if $(TARGET) != RELEASE + MdeModulePkg/Universal/SerialDxe/SerialDxe.inf +!endif + + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf + + ArmPkg/Drivers/ArmGic/ArmGicDxe.inf + ArmPkg/Drivers/TimerDxe/TimerDxe.inf + + MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf + + MdeModulePkg/Universal/PCD/Dxe/Pcd.inf + + EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf { + + RealTimeClockLib|sdm845Pkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.inf + } + + MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf + MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf + + # + # Virtual Keyboard + # + EmbeddedPkg/Drivers/VirtualKeyboardDxe/VirtualKeyboardDxe.inf + + sdm845Pkg/Drivers/sdm845Dxe/sdm845Dxe.inf + sdm845Pkg/Drivers/SimpleFbDxe/SimpleFbDxe.inf + + # + # USB Host Support + # + MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf + MdeModulePkg/Bus/Usb/UsbMouseDxe/UsbMouseDxe.inf + + # + # USB Mass Storage Support + # + MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf + + # + # USB Peripheral Support + # + EmbeddedPkg/Drivers/AndroidFastbootTransportUsbDxe/FastbootTransportUsbDxe.inf + + # + # Fastboot + # + EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.inf + + + # + # FAT filesystem + GPT/MBR partitioning + # + MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf + MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf + MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf + MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf + FatPkg/EnhancedFatDxe/Fat.inf + + # + # ACPI Support + # + MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf + MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf + MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf + # sdm845Pkg/AcpiTables/AcpiTables.inf + + # + # FDT support + # + EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf + + # + # SMBIOS Support + # + sdm845Pkg/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.inf + MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf + + # + # OnePlus 6T A/B Slot Support + # Op6tSlotDxe and BootSlotDxe have the same goal, do not use them both at the same time in device fdf. + # + sdm845Pkg/Drivers/Op6tSlotDxe/Op6tSlotDxe.inf +!ifdef $(AB_SLOTS_SUPPORT) + sdm845Pkg/Drivers/BootSlotDxe/BootSlotDxe.inf + sdm845Pkg/Application/SwitchSlotsApp/SwitchSlotsApp.inf +!endif #$(AB_SLOTS_SUPPORT) + + # + # Bds + # + MdeModulePkg/Universal/PrintDxe/PrintDxe.inf + MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf + MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf { + + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + } + MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf + MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf + MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf + MdeModulePkg/Universal/BdsDxe/BdsDxe.inf + MdeModulePkg/Application/UiApp/UiApp.inf { + + NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf + NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf + NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + } + sdm845Pkg/Drivers/LogoDxe/LogoDxe.inf + + ShellPkg/Application/Shell/Shell.inf { + + ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf + NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.inf + NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.inf + NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf + NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf + NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf + NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf + NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf + NULL|ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.inf + HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + BcfgCommandLib|ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf + + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0xFF + gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE + gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000 + } +!ifdef $(INCLUDE_TFTP_COMMAND) + ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf +!endif #$(INCLUDE_TFTP_COMMAND) + +[BuildOptions.common] + GCC:*_*_AARCH64_CC_FLAGS = -Wno-unused-variable -march=armv8.2-a+crypto+rcpc -mtune=cortex-a75.cortex-a55 -- 2.45.2