From ca734ff0551234c2fbb20354372f1801580a4bcd Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk Date: Tue, 7 Dec 2021 20:14:01 -0700 Subject: [PATCH 1/6] Add inital 5k Patchset --- payloads/Drivers/diags.efi | Bin 0 -> 116280 bytes resources/build.py | 20 ++++++++++++++++++++ resources/constants.py | 17 +++++++++++------ resources/install.py | 14 ++++++++++++++ 4 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 payloads/Drivers/diags.efi diff --git a/payloads/Drivers/diags.efi b/payloads/Drivers/diags.efi new file mode 100644 index 0000000000000000000000000000000000000000..1a28a9b3f79fe82657ee6e49e2a9f8f2824149ab GIT binary patch literal 116280 zcmeFadw5jU_4qvl84Q^51SN_UHQHG5Qe})*P|%Fb$QhjxP$PJuq9|g$A!alx$lzo& zhr?)UL9s=pmbQFbwe(vIfqIz$CPAwLRt=&xcs;||8ob1S=)9k`_n9Q9ZQtMTdH;Ez z$2^2{&faUUwf5R;uf6u#>zu?cYVh>;csxb?=JOs;6Ic1EQvd(w{}NR1bLg6VJSzvj zcvzD+`r={d&$#-g@|m-4xN6pA*OgDZ?E33(s42hv%JNz9>&vgczC1Mkyz=XAxZ=v= z{Qf}|F6s$kkLQZJggQU#z3S5G*{A>B{rZhm5AJ`tQf}n8@FVyA3J-m*9pG@`2K6ca zPq%&1{yVs0cq^95jMq~lY_9cse)8{t|1ZjqtGTkaM%p#F{1>i$aFu&JQ;)mivYN}J zj0ewBU<+3s3qMmmo{r;YU3u*d(>$72cviBKYo8zBEo7VdmOfr)njj&z{ zWX$xO4%6Dpw8D;)Kh5KD_B-9T)mzw>f2tMU^^@YMEO^;8_#oS#^1ru`@G<@H#f zIOjg5VAl$4+W*Jjcs+s55vx1jP{nrAOl9IHn|8RvOqU&poTBNlvsxk#;lPIcgkq^4 zN~;S&(t{KA7xXr)szU5-~|^U{4kqaUy}*t9y$dF!Rc#h3mx_|qxtOl!=mQfd2MLlS|lfenGp;Xp=u(jY84 zU1Pvt`!XV@w14M4T&!qCIrnM$gar1z*Xs#33A@47<@}$YFd6uI;G?$hYH&xA8IkO3 zzZN0(O7Kdc&QhdJs-Ir*bv~~No7S%U;NYJ?n11A7mo~)?K?sbS=Aat6%D6o zU$+Qxn&z}pGynXk2}L#i^ApRd{9L0L0rA1`QLNc+>ZWto`~g7?m2O^*$PiRBBOOhj z^b0CQUd5*MMfM^3M!TD(%n}A317XzmF9MeG`_-jv(xW0idXR5Oz?W&YnyI{zno48m zwkrOsXFzCti*S>k(-hcjT08R-hK7t)M#yL!*UxAi-`{AQRAe+>>N6VW4gj`NP$x4} zO)FGkTC*#vtV=3JTIW}cU<8JTC@hbreWwi&gi3yEWW+%0y!30K<^K|%9N$P?_WCJY z)BdpvylnXwu=MCC0rSlsEf`{LrWKU#T`7;2m%DXJ8sYXn!&VDKxV@#SNE-eE{AOzv z1QfXiLM}@*On3g)!ANo@bpHAoY-KMHF&}fhqIi)sv?q*&pE1J7mBO1{W-ky%{MSj* zxw>cskn=B^Y9`lCrRE%%cN&*_JZlm{vVYlNL6r8-mhy)w2g%py8Q?Ml7fJEmy7)s~ zTt)FxDW0i{eH*1%bMhN0zK~*PBeb0=LTakhqKNYfR*Sws4o)P&1nQOBMZFOFc&F6)moVb*+(FC(mhrSm)caCf$j4M@*XSq&QkT%!~D5`TW>hm z(tyVG(s(NOtBc{pX*!8J(0bNvmd6t&^0>Fq^+6Z#qv0)TeS$f39%tySElzS*K5y)u zc%eM;WqEw`{Hg=$GVzm~uX+S{>u@vKQeuw!B7O<1RSPr8+EP#a9C~`a^x_N1WgB+q z^J0LUJNAO?s2)9vmpCh_59G7^<@5Q~CBn*Wdn*yB#=E3(H>IlwN!6vgs_XLt-nS@i z5QE9eP@Wj$XCOQ^0T_wSm*L6O9KmF6R}%8?*^3wf^VtFL!B3*9{-lgX@OhCS*yT(>cTB4rS&g`q)y0*%EVQ?1!1{;1 zdh#kuIfHIfcd@QpAQzX5h2O;m7I_%p#|oV7pTb2g3&AGOw$FX^Dv+u7&8_!(M*8-J zOwEt!*?lnPtT_>d3jB!w?)V`DQ<+;a?9I+#`k)lusT9ST#A9x!uzUfUGTgLYGE-f( zd(oHSvQVb|HL8=JIM;yAY@&($%r(88t4DHUCc6*3Wp76Oq?5fKJGw%IK*Q|IOe%#` zc_x7_(~3L%cF>WtACit#m5LG?tOZuM@&(xiGDk>?;fe?VtRFrU%Q&;P(YKta%gy=vai+@V?=cS}mq+h%xp#=RXVRnp2_u z0BsXv-u)HWja0oT!QNta(*8KynCWWA87?wo?xlVvWbByZY8)***;V|P7_&?_j{u;% zb&IU@t-fr^>nQ>PbnkH6;`@zs$r+0tn$L*u!cW2+)oIlIi93kEqme2SE>bcuLc)3Q zOVvwfA~rGWe8qzvimmE)Oh#zO_k+Y^JA_i%3JRPP4|B&gu-SQ;$%+^|ekrPEmMiwP zpXHPTCUQx28CF{GSv#DskZLx;19o`k$uMvZK!GjVS?jQ_Hi39Ri)E0ncpZ{Dbj zQKps;MIirxKxao%XdLRfhRb4ppWydheh;UMm-G8DzbEnB_g9Ryo-OAw2}fG5GYivG z+RfJfAQVyNymT;&gaaGshP5lg`txTIDaK(q1Jo{Kd?=E52|dR%?{KbUxTSWGId4wK zVzAW2lKFnjoXtQ0xJ52TXd}p1aO6pdoM)-9# zZ=4OHaLM%}@umyQfw<%&MQg0r@XC!V6JZjO-e~DdaL&mSZMBN z=G)@iX*}SYjk_a^>(>2*h>UfOIKewUmd8(=k47-%`)O-4Z@sYnT|KdV|Fc+JUUMYg zXqDoMK4d+@<V~ubM9A-%QUgCA8?8FCG_6Dicrl}V180iSZkff*t0?N zHQ-&EuM5pZy112M{DBpHu|fYw{a8HV-nmaOD(AjtUyx2!NOw7tq_y?6-d}x7j>(VA zKn7)Ok61u4u(t0i>9XygEL^0^A`88qe1j-wpFuhfnleaV{+K~Rw|ycHrQ&u3_qMEv zMxx<+G&~xn4saK$wKU}M5ANe%Sm)(EA^uYhRJjuSqY(;5-P!m*iH{T#@n)J)|-Ke10 z_uwA;u22tK`&P97J4I5ol(x5>%_*@#iek=_rOqJ;6 z=6qRB)=DA%4;I)0rO7^?g9gOgpg@ewF!G zYnfmTWO{%f=mT6VNSlBz)CVUOf-+JXv0e+=1KHpQi}-Ki0JixT7W3b&1Nj}q1AI*^ zF&cw@qw&UljK+w;{F!0ZR7}P0PiCJ#0aK>-{UJ90BSSom2vOX#^`E{S!KPykYpS5; zOo(|rG3-00A=bbK&6&SUs{KK9lgAvsseg=^t8{gPbK`@;HL)OJRKCBDdiA63!xc7qecDS?f*fb+a`rmP2%Blr&D4oj|M!{KQxmOSzi4wb#Ky zhEBCfct{sbi#)TBv=k<70vqYFHd;Cdi)~Owtfm@ajAQ|G9#+ob7FN(AR{N7>3fp6g zByebtEitWeXqNAg+ zLSFnGcj*{wPZ|R7?mXi*OmVQ&<={zN0@EH>6tRj3JB%xdpbN$JxFJE|$QMwYi2clo zDe0uW5ZiL3CYJVpCK#XRQ3&TJim|)O<#MHz>Rp8l_$9%g7KXf_vj2p1;1_lZsfO}-;9{sx)I{M*uDpUF5}}rm+&CtLvYKD^Rbeo{X-Q4yPQg4 zAeFB<65f=XHi(v&(o$A{wEsqIjx04LfMvI;wP#LK^7Q^U6-V+d*;Xk?ZLOKXNUwlK zTQnVml`Z*6L(#C>Gfca>Eo#GE+J6`HoEGs3Z9q~RaPCA0s_SXCm}ZYT^&(`o%H1k) zq9`Zz@Xg51=|4OcB%Dge^-e(AOL(%PK z=T{HQ^95DVC>I(XN67OXRpK3fN}aJPH12C0O|}GX>06XeZ>3ZKg%o(s!I?Pt15{F; zk}cv(G})S`U+9UYgO}&4+3*wD7aSvwowY-R^Rx_ka!$rmb3q{gOeq`&wrbQRBSho! z>lDsYr(|Y1*};M$?f+ENvJz$^1cIX07ZM|ww?08zWqYQqqkJ#Qv)dRM;wNu#Q8623 z8LA7mVR%?ek4H_m7?R&4@d z_Hh7>XU8fu$?nVMRvN3?k~@zy>V7R4cH-U(L~`e4M(S4WhI}Rc_QA*Wrpr9pD=18x z_bJ@P#@&kmM)VQ5V*@|m^lr*;LsrewX45aE&Gnw_2-<|}@@#3W9U-QA6BRD!@x9%$ zWt4>j|I8Y|8jT0g2hhwEH1ny6Og{oVZ z*Gx(7oNlE4q@hj~s8bcxbWiq|y6|Wz{E;f0<;kXWp-&12tHK&jRw9;gQzV7Ev60i8 zZuVp^)`jn)l+K5$@N!S~ObU%v{gd5C7c>os??|rwI=QRp zmP5^HYw6C<<1%@QnsfV`>ga=!Ok|%?&#Zzn zgDcN(i)y%ziy3v2=nB$#&~SbT(r_RjTsfDBuJqMRA3RyiV|vV|yWubW;~Jo|NAq8l ziTN2W>ihu}bH8pIU1Z$-FK?}sM~-w8ZYo#8#Q!-*#b1x zi-dt`Me|H=TfQUMM7i)YNl`DGy^XdDbX&Zy#xs4?MFin36lQOSrV8*|vvTTh|@M#LOrSu|~LUNZkeqc|}`)gcJ2veiQ`ltOPC~}S!9O41!^FNBW zFxtq-?4V-bz7-i=@$uVK?DR?tS4zLv74J$#hpKRUe2=bpT`FYp4>q}s#&yLDQt^bU zfRONXiLUsQ5NAKsOJl6A_^njT?n~onU9m(eruC&USXV5PinCP30FR>4&E}U5-Xj$O zRpAnUTUXQyS3^~W+rbuHag9{uK@x0oJNUS+m@X9`s0z1(3w6bXQXyNlV3SMyc3p9a zRIF4La^y?TFV__}OU18L1!pf(5z!U5OU0e4g3}SH7@;eMQIWeg*i@oRf1peEm(mM@ zO@3Wkq)SVrv?|yno;4W$wM#B#L!|WRV3VOs+jZ&ke^5Fk*tD-MU8_sSQ|f%NK$fId z44d;2x8k|H#}(b=2=tu(X7jdUb6~USeMu}tXkzGhG)nLpUL>uHIHru`3f zgXwXa{kQdCCGZDf7jNP>!|&lZ7H@KWnX80Ty{rvC;8#unZm0Z2t}%Y6^E;Pc+0!2d zoc#Wo`{((6m*1WI%5r-Izo+tBfSJgB4K()#zJlK|{9eFsVau#m8qUS<6608Q?w!hC zc3f8w>n`U#QK=-3+{Uc2|g=B!WrPh2XSTBcqL`)R2dsbDN9#3;a=n~z+cqf;10AJpuf35R|=3F zYwC&j(4t*0S`zdTe^uJmTuPfYw8{RDw71I|iG?d)`38-z0_~!K^Y(nH_CFxig%Hxe zL0JOIQ8ZI$%I05X67Z8?3xJ32pGJ+-`UAxs&t>zj7g@(MY+uFeo>&EAQF{Q8R|6?K zj$aCJdhBjDs>y4#RSEXwO?@{2D&8Td16;gUD$KxysB5K=L zR|jFW;}usm^=Ehlahn8dot>CYz}TK-OzUkO`=JuNaYl*5)r=%B6c|0kWpu}Z3I)BS&382%k8q1NND-Sr1(W@n zxx&Cdoy0wtgJe3K`#p3XRhqQRIY{-&S4}kNj%my$<|1BmfO zj)@v@N_&E7k00t%HBUWzXgoqeId|pp(~VW*jt*>?e(Knx3jju_IX65sA7-x#$iR$_yg2)ddVSGu9$0YcbVv8}dWXjtKslv&!RcaHBCRdbYc#TENL0lM z_VlfvMfE+wC+8ZCW9jtS1xp=GR}jY%<9&e|3UlCE)BD=|qP=CroOp3CF}s2>`-wK^ zPTU_ImA`4Y*!1{bxpH|pC~9q!Fv^Xh8>|eeOw@X}W^wiwxRLtf=wqm&AH57!^mqHI zn|#y%&mO`6go)FRrs=nR*BMww)o0m0MxK(Dn;#wGSj=o(%I|W1SMb}wFVZ9iAjex5 z%d{6oIG3B4l&D>s?OTdJiYnhaN7;hKy@8JwN^@V(ijJMKzqBSeZ7J&!h8Dr3VzDV{ ze<@3u0F@Pht|$Pdt6>PhQVn>F3-}SyScUCW1?W3iSg>PDnb4oyuGm=7H$JAlSd%=c zxx%XKI8^>t+4~AO)}%H(>NtL+AaujwEY*T_g)@s)QG#a4IZYhIirZo4UtqTh#@`4= z_AqDJC0VG~XzC4nQdhfNJJx`8ULkhAMvM(QwqGRwT=dlInr1cTE{|FtWD|;D7-Yj7 z3G~DuaE4;J>{N}Iq1nwZOQvVY@qGtZ zZ?mYe#Jof_%3=|1R{A0&*oNYSvoX zW6OId$hzE6MEXG&j-td;e@H*17yInT6}Q1p+p*F}vgAw|N+}5lHoc^#{l~gZw&G=) zRy)RErn^olZ%aj!zjf~Ru?WNVcc4-X!=~ErICuMj!uyGn1g|=G`>Sfh;;hGG0gYJr zzkTkObZ6*U!Vqy{_wiK4pQLk`@F%GxWri9xXCKB$4_Su{*+NuHL~HvZielL*ic9}5 zVtH0Jmn|gz4(rja>;n8Ia8S_LiAt1ulO{i#-3S@gXLT(CW;{NNLu_} zl~)a418SB6@%jLfh2p1jk^_+>3_HIsg_7D=30t~arz>$TsZop&c(sVAL|aS%%SWi- zSUc~@P6VPyK=cHcDBb~nH&IezIzqEt>!Z-^c_>i%8VQS>zIBKs*+(PQaj~P1i#rj? zn9VS~^&yzHee2zp1DSV@cuQBvjhM2FaUVMio&LnRc&WheBQ=ujwOiWRGbcMIpDi&N zlgMfLF;-~=j1Q(1^s(e&4w1gmd_y2Lsp zgLpB*WxsL|wZEYl1JL1w#rL$D*_hy9FBJb|La$cTI!n-`WVbhd2L!e<(fSaWrU}f{ z1XlDRFcIJ<_5}Wk20l*%WAb{qsep|Y&ORl=1`BX(qtj3BugP3NPVN_74$#_%?rHlwk+Lp;gwyF8#k;dg=qGhE)+kFocH1DkpLP=Uri z7}%_rZ~vXl73WyC-3;DSGH>u94(8F3OzLDe8;(Ch9j@QMS%zJm{5q$pI&b{;s#V@9 zqRIzq7TexImk~yD_vuyT-BtCiVLqfKt4SfoJ=ww|wp2)<3vyNiu#+LKn*@tm+ zIM*MF#g+^nwEyInb>y>Z1dQ0R5i%ux_SkaLtkeF{s@Ir|PNx)I5#NekEQL{PyYn@& ziCT`#zHhlD1=pi0!a;m%xSd|2S&1?G5}hWYO%#nmd{Sc7a+tKgevV0Z>Epn}NF2Jn zR+6?F5zSgNxjkW~&8dmn10-Gbc}a~X8|IUrO7=n(M~##%CAhPVqNfSVD_@h{29OksQ4?mYFNAi{wW zZ|yIiq9R^8FI&v9vV#>Yr>M5+vhL?`!;zOolZZ_aULs`t!2HaCL>J&4tLa|>688Mg z>OtUvs&nB3LeBpVO?e^xDY?F?ulInBGm&YhU^VTNW=f|RY@|^=GBkh6h^XY@ z<5ejGI-DKKIvMKx1#%iGS*iqR=;D6P(IhqKHBkD`k1RH(Yg!nc0~BJG0jB6kwL+=L zr~qoS2qVymbvsMC)q)crjfd7v%d(rq7a}JsU3TB4EYq1_({P#vHbh4as@ccPH*4WPkJemFd#{dgXKa(ifBz!t81T!V*fl+BmODmPd znDPoPd6U8Rl59iBKi(n3pIjgyZqVm)k>_*t|?r>QcD=hRs>0T*J`Yj%vepbRXWXl-ZY- zsGjhK%Nr*ftke0>rntb{LYKFJE^j|5OqE0Een}f0|Cvx_A`C`^Lm=H!HPw^5EwDLP zL^s-DGCvc3lFd_HE+3i)yj_-6rE90c>GjZXmhUCSzU{(19s%uI-FD6o#)?XabKv`n zD$7hQ_y|`Ed+DH%X7mq({t2M7qD&0gZU5%TS3hl%BKEJ!aeG3{Zp9 zVkS>#U1gp-dgLUir4HMj=dijmz_uK*E0hOmlvOTDQ4_fJQQA^9SS)J$4r%g<(~Mb= zMP%N3QS?HNW+B}{C0;TNX6pbleDJWCU)zK$ z9YQ0W(+w7$%(RNDYaQtC-Xs3meH%kHyak)MRJof(wqMR~zY0!X%RjlQiHH{n28K8Bd{ zPV3M3-g05{Gep`f>~wR^1av_AvwlHM0WHjn;Hc4glV+34s&6Ktq3%^kOL${bCP zIZuIKw-ij>2mxcVf>6!2sBBLPXAXs(d~0~Qo&*v|3NMim54O6)(2v|pX zjJgLw)ubAYYBuU@LCpIv*Q&Trb~cYP#-aJ%kd-OgIC|hMN3eo2rs<+Y#CQf{6gp$0 zs$H8{yOF8{dj1Z+gPR!`%(q3XO*O}ni!yk6SR&1vY7PrzLiI!Xi7^e2YQBlr{8pVG z>?gHEp5yODyqkh8qADBpg6yIQgys(p*C_-)3jURjAdO8yxs-<=**$x#J7bZZdZx_U#^83qReD)W&@gnnn#O;8l)2IcKJI#J3i3q4*| z7s+w9uk{*HJ^#|HRUE+LDUk1p1Te#{2j({lrfk7g0wbqOh+ejQ;=~ccIe_+_e=^di z(2HDvMq|%rwTj2-jS7UV z=SG4-au}TT0VjH?QzJ)8My3@T9<{>dI4MJWU-^ZqQMXyTX#3+rIkh2v@aja}As*-6 zxZrCxE&nCD!l=tAS%im53SGqVt`RudyEa_~XmZT27;_N$js@O*>5SB~g|!r>&3?{l z3Za;sn%nS<2MAVzFg4U0tM-{rzMb_(&5>AoF6DvE^(8ETw|Pgk-sCq{MK9>50CvS4 zs!i{%mVQF%XeeTQ^ApO|Lhn1P@NDJ|Aen4uPTpBKQVC|Q(|A4O?!F(@yEhbXTb!b| z5x8=Y@TI4g_GahwnX2x4(;b|{GYR$(sH8ML(j%QX0qX(aTqii$q{utFFiG6<=?O%C z+&4FN;`9*iaUMSj_ta`(mUAAWk4TKh^NKhh;(gwW2Z-Y!d#5TAe0yHvl|2LM@wfFN z+w=rB&ub>Lpg47hsS()M?F<1FRjCEUBH5FkncF`yjn@qQMLEH+NH92yu9J?*5+_~k zv#Fsg8D^SVY(+f73)YK@-}kK;QK;zIVX|1`C*d`Ua~PMc!0)7iI799$HNm=LI@%zc@f z6yh`{>Kj`$72qA&8h%r_Vz1VruEe=;wIwg!sQXGPY+rxD-g~C(e?LnxnLJm>+>CX& zI~R^IqFAG5QKxquT48M8L(@edHOf0oY6|@nh47m~ zMU02Ci*cfK{yPD14wtwk`yy%B%ifqXRpW!7BNPW~Du5~J)cVExlL2M}*r6x|n`A_A zqTFiPJp25L4>4A`eFJ&kCCHP)|Li~j`AIB9A1?q-bpe|-U~M_>%HLOCEkLV!fYL6|5`cu=+bh;`XKcPD4+|W}RKkBdI1FC?TMR$8&yS8~!s{>;whGPbOuyiNI z-2PCw>ydwNI<^V`%krG|zXi1OC9gr?fjKR_glx?uP;k--LPl%{AYIapbeSC!FIUtd zxVn`8^A}8(m{B1&q>t}9?;{g_*{x-8k${BZvQ3xEILek^8>AONDyKv{oJZf{WY}6y zN}*~0#7KRiCOBjEFK*@^f}dH(spwl$+T#i1dG_Bf6w)g&NAPw$PZ6stmcG7UBz<%L zoIg1Kr(Tk}IRP~DEmnKc7o+>l%JK4e%?E;w#AHuyP;mZ~yatdmIVnhdIVPSBwuHa- z1QT<!Ke?lx_-10(MIqk0#0?!LzYf9eAW^3wM?Lmaj-Pei|u9sKa`634o z3@MT@>NxmdK=7abspf+3Rdx?i>k2iwE(IMDI_@mtF)aw)#X|CtpH?KxD!Ix&wqzz( zyX+1|LcK*rQBsQ1Wy4&E8hNyKioCAYHGa3|A|BUt3%>qkV*~+>&(t8FKcyNuC(EN< zc2z{z4p+7QH)UAS(bqp$GCdI9RX~UKQ*V$e9j$m2x+Bx{`k_^7KGR@{>Sv z4?xFxQzU2m{+BV)M+UWOXRy??Qp4#y7s*HGGF4w@=*vufsg(=w$qT0Yz@)z?vClQa zhd9PY-Sq@PrEh=VTdr!`n#xhOx)Uy(_kLDz<&CnmocA4o{T1N&D(9cqDdMCmPiJ`1d}pgFX)(P_)F&sa&g^h5fSbYr!WJcSCTj7K$QQ=Voj56Rq3NpXo3TT=+Z z#FvA+3H6h#HX`FvyIYL2omSze^pg@pLSRdkTxT#riIa#l7m?1&1}tq-Z`8HXhP^af zQ?Ry%7fS=dOg|T+Fp~GjS^x#3{vkkd_7=xPYZ?@-l$LohlU@)=q$JO7*X%!MF{ax* z^+_Qz>-QM!t)ki)bgnTD4SC%zEOy zc#)CTyQNNkf~`tj%&G6)W%wkEA+{?bPnDi~@ zkEENy)#dLAGjBL$Fe72GdF$JO+G7QYB%kwTmBmT>v%-72>@=`T-{0=!dj-;EV0MD- z@DEh=p;XID6B((Nqy=6LTT1nXx>`OBE*}o~wNwx4tzM?9x2=NZl+^u;1u&AX_VKY4 z1|+bR_dU4gN&{P?)^(X2zL;nQ<7oTtzla&9mqmIg3uT=uQ8^eA0+S&|TAanaCi$Dz zC-C!I2TBJ)3Gf#IccmJ!A6SYI@<8c{dA3qc-=lkg$f(5ZyZ40ru|N`ckS^>aBDHH@h{S~?YkLH>GV2XdAML{p@yP_+z&v&aFS6_i-ya1r`1Bn znl5VPYRfO;kH~_Z_P?2$Z{VCtgClnw}Rn zGFNFrKRr*MC7#E2d7U}xQzJD}=~MMabJKR0AIJGfm?d@N&zHjk$7ks~ij;#fQ0v}c zg;)DNhQ>Ppyh6CJ+t&m1CLFOLHCWS6S8#Kdt{G05I4Sk#W2pNu`_u(J%$7Bg2nr^^ z^1Y1SD-HR=oI+H+)H$QT<=&c0IE-3f)?9;_XDVEZ!Ln;Tg75xU{_MA&lyyL zWAEF)efEaQk0$Fh#&m44d;?DB!eYC8tC$FdV~9UaRH9s}&hSK@I_{%5uiLFQYHv87 zZC46_R+m~e8{|gy> z9P%>-PHpZd@3EGFO7z3|k?KvX$@%zFX`s%p>+aX=W|&puT&DWIT@e2T)|Rzq&T_I_ zCFXjWcu2IhZoxoy^#*y|Pc;E?lY+pVTI={)h1n^rS7V3fh9+vgMKvRhMw7(t32x%{ z^QL#>{9-cb6FZA){*l-@H~uzY`S_MxSugJF-gLUvGdEwvAo*q~v5c+ao!w8}GZg(r zG_6LGIl#8@YrW}N=E&A62^@G@t4yKF_YSMnm5}%u@@%b>M5^E7 z*2I^pZxTtchg7V82>X3L-03`oHOSs38q;&^lD&q^OcGNI4WdCP#DPkqdVx}nb83#C}%Y+~sDj+G9fkWYS?&r|ea z)cZlmzR8SuyJY8cBW9$aeTRWOYRze~$DU{nm~P!s6ir_*2IeVIMY~BIs@b>0+)n2Y zQw21OqO*t-&#s*#l9IbJob4*LBi{= z?ung!UX>j24~_P}t_heBFd=)a35*M1?T~}@(SjoFznG3WZ-1cB9i~P*##bX$Zo7Z1 zUYhpp6BH{#mV{6v)^of89zP2FA59RGrUSMWy1}++A&Ms9Yy}PAUlpK=s21U8ia8hn zyrgGc3jP0154mFp+@?cwi&6W+@k_IYnC;F{@Q)5c()|>M#nqeMzBu2{k=I+z`G_C<%yZ|NFuz zrQPpIsT=_oUPaQUVx%x-K!Hom(U=NVU|PZ*i7_9Z16_T11sit18;aI)Y+OR&J!2tV;zYd{@DD zZXyM1DR54ZUf_=_7RstsP)Sm&$S_$f+-V6O4oE~mdS3zj0ieAL9bkxJ-uet}#F90* zKOz$1Y%|TK!}k69<2PSi^GDMnQ_QOFME4wk1!cF%Hz+KOoSQF5QHME-cb$_`pRV4h zPI7y`yb=b!*nxStgVp35$73uwO&*hT+7K{-OOfh>s1gAq(||w!YsdF5t2f!o!fSZm-X{_##}o4(%DAp&>nzdDmzX2 zMpL+(9df60I#9x*Mxyvk4^iON4)Whc7o6Fe8Y`%DW&O-4>!$N_oN;KKPT)2oLvUOAl;T4?OWDhr)v=-|P$}hq{gNFaD14 zXYf~mscA6M36c+M$&0qt4oc9$K`}?5;f+*d1Hx?*o$I3*!k6?5_}Ge;@ShOhCTHIZ zD3hR>dV9)Mi9RFJot-Z330@tFeyr+j^$Ok%G?5Q`9u5`<7;P zXAdo)F^iJTUa~%%2dWk6dPvuQmoju`b4(f1euVFNbC&=t-w4KER}*6>1UWQP|vJJc;a!h>G(@{5sDmceGioJt`ydLec2rTpV?dvn|;A|!q|W4)iOl1EI6;D z6R==&M^R|+@Nz`8Toorfj9@a;kLP8r;iW*(v8AVmml^jy$URt_?AY@Dv8Buq_%)|( zGM*_ZwPgDwl2U5Mpp4r1opM5Z|38xxY$;7zn!OlJ$_l61HR9uI!+C_}mKi2BFzySF z>seFkSx~TRSyww(nA5755MqPn9Tp6rIPKiBTgGpH3se8|sNi7XQ7fSPEn8NWdFy3* zyP4H#-%i$i{lNDD)xG{wblR8isbN1e?<0{tUWO!#@CD{G@Wjk7S}04@_*?g~xoM(P z`5gX|iZ4xXJ)^X^pIY(G8k#v^%^Ca2* z_1pm(pKP13g=vXawLop&dSRiE!g>KL$%;<$7;AQU)Hs5rB2`1;3 zFh`H1VZ=V2bV~_|&S@g$Dn2-B-@;nZS}JLepPKfiosns=lE|o+j644fYQA0+E}i~A zi6W!!Q63|9j9-$Oj@lHwCSKk@XnhfE{`kk_ZZ5_b1Qrb+fl##!G}VbrN|!EWtfpW!UP`B3zanER#2<4@3v zw7PI<#EK7PW5mT1w&s+FkNS{HNr?T1JqKIZ92wOTG|p%dUd?G(c)o4d=}Z%3N5xAb z-Z->5Jz5tzswHTTFFC3?XpJv1QXfn7xOH4HR6M!jpnInhStR44_cJ@H|8m62j_gyg zwhoZRg}pA5wACZ`!9=XIN@g?rPlZqG+mqiMBYYP|M128*u)r%3_QGj(?jYHF!6s?y ze2QO`xV_YK>v3lC_Mx8mk!z|bj#&g+wmEl0-n7U`9V;rz|e;|uVeqBqr)$=TfS&-DSt33aN$vM0Ikjwz1 zaR7%QIWs+h7r&Cb2HvuNU_-jdN|&6WYbcjI<&Tm(zgB3B@jG(|1vaNk?n|F|7fxg)XjBIEAUS!em0WMo>&JyGwD{5B1n>^@pzGyTbrD>kjYZJEd} z;_mDXFqD|n>M>GRatG_>*-N-d#+tm@^SDtl84e?oDjp&T$Ymgs`*Rj95*y{1QTNKZ zOhHtYx?+u5Pm7S%>*#|7QSxb#HnURFT+tP4t>06Gz_j<480Fyu^j39K_AME{KHQ3J zWvs2|RCzeThXW`9L9(p~=Oz0%b{RMGVrna-zIK{8ZAQEtNmC}r>e)K#6Q^Ap z?@t;1E6v_S0XJ1y`Fu7AmzTy5US1VHzH5EI`02eY;PBhAdaF1$#+)YRoKID9SZDDO zJN7Ex+>zgeoDS%|-z=;zCZODL3ft&oC9!5&w{w78wff6mZ@7*$vmRol??6&aV!pbZ ze?^4+DR~@skm6HjtV&58pCLohP441{R}vg3_dZ%2;$A`B~Mh$)Ip!`g<6L*6;dSUpK2 zwqi?@-FwYG7&FKGP~SmZ>{Qds6u!&*H3PG=*?-6cqDehRG52m{H=PYo*cEOnHBz6$ zZ?bzVhp*i9%5T1>J|!Pc3qB?N$?nHc$_(orhp0VDBN#$evim&tIo!xu&uILr=(JY; zZUafpJDt)}(OJnBGV1yfeFz`5J2+~0$Qb`&_Fy2H&$(m8syxi3)-;8XrYj-fr-hB| z3mP=Jp|q>HG#=<`uHtlL218+_s-X+xxGZ|AS)0shys7p~d)IUQ_|9W{_RMbs*hAgs zS@{A!Jb*ZNfP0-u4##!|w!*w=tNfAaA-iZO>G0^o zsj_|1^f{9g9Kwb(56zWVS?m75!WHs%jOwPfaj##X`IO_R?x3|k{^y{zJG<*!Bg8o5 zrhY?J?4eqg_sg{HV`UD^@z;pI&`)Dgp#n7>tiJ{4y*C#jq=?v>+d>wv zY$*Nb#X`c&2ar8B&T3v66P0q zg7xFbse9RM&K1SCXGvy5qZFL}l2TeBv$iC*?UmRt0(;t=!;-fN&F#^2Ew4tr)3w%X z)cuHtiJc>ix`VlC@r+=V%I+&###=%+9iLn`qW&S_3fywZ?t(W?cjmJp5gQ?CEp!Rp z%1Xu+vrSg92#ZcSB|MX?UdY*aIkM)(zv&-B_mMB&Y2My%-a9Di>FJ{TtT&EYn|Pit zB6r{x2J0vBHZzJPE1=Qn365&!ga7i@Qqkyq{2=MHLSQy;?;nv@Bfn&2dF7Tza#Nz- z=IBv;uxODiy6p3t3Jh5m$Eyg_XuRU7;S5PU~6_WCF(=@(X^T&a&!x8a^ADknS#yi znUL}kW_Qw|RQ%y7a{7*Bu3jKaXFYVGADOnBuBfT0Q*{)Fylo-IqFL<2sBR-Q0{p?2qSM7jW%q{ylT*_Z z3KWJ$y&JWDE4vy7&WNqUGx8?e^XUowx|%Up8-q&uB_L;ED6B;zfUNncID^WEsyjgR zEFG4G(GzJ6OA5IsAKqhqG!~FUBrNwVktcjAOJp?txN=;zW2yi6Kvw>+gkZN?k9ys> z=Oxf3<3j>{kjz2D^9qq6waaQEQ=DMB>rWNVS#+oj-^BEXt+kj*_pM`VLd^uTn# zJ(#ZOE0_bniM+<2eUfI{2@fZN^L8gdqBE_n)?=QQ;cy)m;~owMTxspt=t^t+zn9jY zUdtoorWCvuiQV=}>bEW~k<_2RTT-+6VAh^en$Uyp(ClXnV!^3mpUX^ZCeEO{G-vrS z4~g;__sANM{8EPc!~*l@{Cnny^_AMYoxQxv>Z*8OC!?HwS<4~$W$E1iHK(onj!~Yy z2dc$=P>ps`#jH7~q}ut*)>9NEwugex{$XEkstYJwHK-}genQ_0Lx{RWtbA890TVTP zMjal6$69yPm&QH!^~j*yWqkI3k^#o5M=jqb*`zRjX_s75$>7zO{;Ldx)7hN;^`dJ~ z=%hS;26iOY-G5Gfa?Ud3FlB{N_Y$Kk(AFDKcAd^N1#HxZZFmsat6Jc|8Ktq8vp4!8QcT0NdF0@Z{6kJ zfUT#!)c>qc`K&(oecOK5z0m)Mi=$Bg1pSk;=iR=qb+2!7y#w4${1)njzTCgvhvp&V zO9?J1chAfCg9F6*S;&RFHxm8e*Z0KPgwO|I|z%>=9kAVgPQ{>~8KMI57y zFw-g7I!=TBj&%yszVZcq+gc554@wlpe#odu}aSmC8+>g<(?+5}4E*+Z_ z;)Nif$ti~IZ>*3g-r6bI7g-HdmsIg1h2q~(+@Q}&mIMVZ_{+*zOc^Je;tq!40qUkeIL*X3^nnCWNa-2{+Cj4(dZm}`$=|N9%s zYr(yx%d~eW!P(G+vjVm`N z6CKrMB)@=|ik|$7n~;4xe|EtNuQd5y+tDJ^a08*jVHM6sNm^08k+h?9^<6<+N%H5b z8`R$9Zee*^8()Tqj@sdV)m@UCYJQT++;Mb>V2+g`$MP=TlP=3rj=g%+Y zj;3;Pt4GODMGjS+{;Xq;jMQ)@WDU1tD=m|AL-`(A?Hsfs^F#geXVizh z>}U{W?x6oScm#&9xX`LERWv^Dp)udf`!9U|qxqD6aXz22cD|Q;vNJm6V+{Nobd<}m znGWX3i^2_s$1bx_EVxeuam3m%zhAJP7o4Q4F?lhGKP#{nOio1fy_BieQiPcqg<62& zlO7Jxya~sN=53O_Rl*-n=F+#8nRczrQ{vO2NIGpQZKTP z=Y^w4^9My|r)LK`ZNt8WPoUpGTK(3LeN{=#(Gs~jg6T(qO~o*S%AsP;EtX^m`NlHq zv%8qiSt`veHuo2UxA`3oJ;UrIF=;vjHeK@bv(o2}=%lzINVn3pD6NWOaLbDB1{|tL z>T+YtLN?eDm3N)hmQub&|C;PIV|5@|URhi@vxw7$P~{8`9{&}#-VIewE@8`9i+bA$ z>3OmnY*S!XZR~g>i2f(L_c2myF``zdtP|DsoLmwj{(HpY|1BY_oqI{PYHVkV7qo{x z-2AUnp7>H+x7E`8FJez~mIo^@?F?2fxnH8OV=I^3;~|{EbEAazfo(GyUlqe-G=A3X zNMmQLUG#9Ua@_8*m34PXqoDOdb9N|CPw1w+&Q4RSd8|F;{$O*ily9T1YyNm>uyRs& zuySFernB%a4ZQFf1+B&(rC0v=J z)-JinXlw~qj_(LoE^xcI$$ABDeh2yYAgvIHs~NOM-yf`;>jW#GQk@Dyiv??Auz5SI zF1TM<8!K1vA_k-J6-)Nk86^vPpgC9l4>tc(n!XxDkZLScQ^ta(QTy=;C_!#u)V_|R z)o$z4p!Eh_TSq6<&4!S*)oA=8XuVD8)}Zy~SbNw#&D&+Hp10O2W~RspyOQr2VZ|8y z>d}3bFFEKjrbrKQcz2<@*2{{q9;SOo_^#%UORM07V=*|d?k2mUR5%zN)XWf*6;?cHdLcqk1wkB4AehTRQ33B>yGc+j4w|; zgX?#;&0C zDtB)Lt=Gq)qe`E)s?iNsMk_kQl?&AHa(!56a#b?pOqiJ~LrkB)F~q}|#g|kt#(GY; zV~inCJZrvW4)=`kKM~{k72h?)PssR)n;I4iw3!)%i^?-6om6c;r^Kj8Rqzmfcjf z^i^3rMwz4KIrVBzoL}+Ycl1?Fds@F>H13w~GBgq{UN;V#*PMlVv$YB4!mztB>{=YI zN}stZInm^KqmjcQv70TLXSk=2(TX>f*yriNXS!!D+ z>wq49-N|s6aNLhvG>h8WX{``u+F|(ECTQ4ci>RDHm zkPyfdEO}L8(v=~MRN z>eF8(GBu>k)=ePW6|^=7Wwt6C$)TE3h-k$Mr9_MmS6ALBnbKX?8WSe|yXt6XL2sWb z=q+|$$z2;q#O@llVNVpMnKm$&R5T&Z`?V#-fH5X&sz8RXn;=VfSiz?jRi(Sz#X`No z7&FJtuUJ{Ir^ z7VhGthDS-6mNG$m$5Mvkl8VI$voJ*qW2pw70DtckRbv^(4r#q*EVpPmg(?;nCaBUF zHI{l=Rbwe07oFT3v|i~mmM;hSUWV%DB^8N2qp9Yo8dW`-u8-)>P7#)@8=^rA3Zhlh zlWx0;pyk^;oL#J)^fOvf-)A`8e&U8f1_Od!q^~RV4BgWf&1q6>hAQx;)?cuf9^|s$4-|XUHBs&+1mqo~oFk>Yh?{Y)Zt6hU{VU@Rchh_f;M%m#A8q^H}tZB7$yN_+>-Y zgLI~|Pzf2SlqEb=$%9n37b>A6m7VNVR6Wm9&%DbNKp-X{G@(5Y)Z26F)V|JUXO#TX z8=n}pe=B@*P$s?RWNfm!#2a!G#f6dp(H7P&1?`@j@m3Y55VqNA&-^T8&*%=>Q#nqm z>O|R==7Lhkms^RTPxvgFu41>E+09WG+OyQ&$KE$+dxE@F^IDM8DeJjlpq0s2A-k;r z-wsk+wU9L^WSvXO=WT55E-E3(w3EM5z`;FXKD94StK&U)KT7hk^E+b598Aqyznp#F zx56NOzb(Osza!S`A$xGxI)Jp&pf#?@o>&~TCKcNkmJkXG1~#&CNBJH-xk%O)S3~Uu zmR=T0{>)+`j{AbuB3Znxi1n6wLbR3sR$kO)x&&Sc1=a;#2n9Ap(`D~+eq}U%9<-nO zU%?T!a`e<_+!3rC{l83dwb(Kl%ZI_ z*D|uqhdb5C$Crn#8|cK`(x7$A5R{XRYtUYx5Ckhr?kp%B{N5?8-Gzq-(VN&~xmWNA8$*@nSzDcZy((6wm#MV&YV>N6G3*>^8Lwd+zeiS*?t%aIQ^-613p;!Nn z7HdrpxoaV(I`&wBQn>Qi9!eNqtsv{HDNU+Zk7;tQ^M5aGWas)3pe+FKxl-u93| zZC&|&BJz7mb?mACJNf-)rQ4yp0;OCQqJH+2rocKyN6$r;8a8qEl&6A~ z!&sGEs;ral%0dA=Y2%K|vQFKj?h@y)<150}EyIG9w}=%eCsZbWSYSuk8eb8rj6KG6 zc*y!R6kuV$^w?0~gJ57ifFr`zRVRk5wosr0n>f;*vNG^#$m-OOqXDf7Ssw)c0c0o` z*a8wW6leo78Vcm7oe&Ou1cvi_FiZ{yKF1ne5_lVXG&N*(1X!2GT@eiIr0on=THXBG z5cc1iJ2M>U2wUT7RPzjgwF*M+W(U|5JdnVy^Vb>zuLP|}>bMUEHia$q4Hkvx?gf+u znE4MhsLHmmb@xK%?0z++taRE9(p$(3Xpp z#6piNvDVoWaR7GlhVwajbnVdE24N6YE2jD_00Xu1!MY%*vIE z1wColp~{nXub_s%QX6PiUSw*cBEude)y(kETaJ=Tu9;ljbXpv6uM*3%vV3NMxb zb9$%(;+0Aj=nlzyTLMbLxDH;w9hF$N};qz1syQSX;B}< z{e=spfm*?bEa+XqDW+90(5wxN?p^g#TXsOg-$=#ZGR5DB9{!a3Y^@Ckp10aVC@{P# zaU!uoFp}L&U4h3ZJ$h|a9Kzcoy(%69Z&222FtjEpT8}AOW)CfK1Ve#NPTT_R1-|uo zrL_p6i+JZu`vQx!2pF~nnuh;{C#2J_qSk73`RluQFbfGHNho78PRl~w{|$=6l?#M3 zE53pkeE=nBFHWh&@fK2DB%UcT5vDW!6@dSf&Yr0l!Ik=t1A#=fL_*dS@dL2=?vONv z0$U37oJd!s%*&_&8}T;=hwmqt<77riVXVd1BA-hbt-8!_SF^tecc5dU%eo z5|VI(Si83{@64%MB>)LtC0H5c+ibR)>-NHW!R{uQ*eeT9GDk!9g2JO{O{f=E=Ayks zRoV-hG=itA6ii*=QOru^5Y9257Bf=0P?-pxB&$@O#8B8zm(r;6#3p;r5)2me`NK0R zS1y%~Q71DGUs`HMXmFVTAy}~IEb9U9VPk|w&aS9{ zUCd79FrXV;=*lGp++u}<6ACnH(JjTu$^vW;AEIgkOM!;ew7>=> z8eB~pds#t@GP6RJ6|{b=r!|$jwM;eDXG&;Y2$h>@-xGht`r7cT26s*(M9(<$7v176L0N3aU4k1hwct2h5ej?=jTr&rnB%V%cr5CqnauIPCQ52}RWcY@Pm9_>3lwH+ z3il>hXVscqCpT+ZlIywQAS)DjN4x-x_#+D_ao2lmhhV!`7W@D&=RYg!Jrtm+7W`n~ z)v)!ar4%Y(<&kCT?h_g>=PnrN3R|llQ)L_pJ=;gRP5N%qktYuKm_cl90hBvY{aA3 z08z>RbIpGtb=fOnGN;N2huQRw7p+uILJ4FRaAfb9$C= z_-_xA9Pe}1aH!##VPaVkE4WEuKq)X|wQ)LfA(q7JT!u{uidmn3$wb&?KXux-wKz!$ z9-I<5#D4#nY)pt0J`PI>Udq=@C2hQcUs&qm*byBrUoXay9br0}uZh2LhJhLHDN_UM`F4V4ftG0kuYA>~-a%1O2d1O&W+aGT zJ7#18U=l?}0qLS_2FPh(y<@m|=U|*zTZF{gQPg?HWO>dTsDpeLaKn%u!>Q`}(_TGi zx})JKQzMLqHj7sXQLp$h?UwDS2cGXoZ46H|FrnJxb7KuuZzalr8LZ&b222hzLmy8g z^a)wm4h z>xFlk93ua|z?Os#-Uo~X$P^yCD@^mzSOC-L_Fg7f^ycYIu2gT{uu1jE-P{ziVUpU} zxFf06!jIH^R)gjYDN32hI!-?3Lr`CEJC`Y3zFlsz12 z?G-aZgA|D^nEsqKS!zrI)PfkRWhu8t;VM^i1*xjfwL1Y)M-pb;X>=LM^jO`4F%p?W z3lz3&p?M}$CU@qp(W7d8eimyI1uJHl!fCODq$X5cYjxHXNkV-0`^0%KV>>Q1LYJvo ztAHvsvS}>9btVQ`!y&y`o{+Tw9bxpcA>eC`)}npk&^gl}@Lo7FQ}BeEzQ8W!FhOo= z2y!b|DLuCCL5i<|uy;SELY}PEX2%5PYQWXoV zWh**^5KWEW1V^q2_t%|4oE2I*Leai&JNCi(cbXD7>}JxGFn@+Af%(^}R1*$ge2=PU z4K}sD{MNvUU7)f%5yzy^8yOhHu8bNcdCClv*lqA=?a@iab>6 zVf#{+W@p{su0efGlvH|*Lkv%|#U2f4;C7A3r?E#%(C~Ij@HsQ|&uylPHfU!87zAcB z06PQ2D^-Aq!%4bx-g)`H|6V5u)%BoVC8OQSf|ZHU4_IteIZh9l;eZFZQV}g9>R#Y0S>~3yPnods1vook}=QnuW zi`SHIie@~F2k#uUQS{&(r{vKFyorXuIOPdW(aNa=Aif|GcI4gqiKJzz4LzKiz?3RH zjFtytFmxLB&=ALYVGlNnz{ojxPy>YdiI2pn93XC+ESL3?lE4#_th^dL&EYAN)g~gD zvyCIFY7~*msUy!)m?e+^xNWK1a7UfncFwJptB2c!HY7^TO*nLl$)>3@FI8)JU|mm@ z>-M-7vxi;VX&i-Yo^{l`j&;4jMAZW4B1Y>xCA<^>_w#J%=85%CYdk15B0$GOLvq$R z9-Q=e7tkre^|&b44awQ$xNb;Kcbqk-R z>adhRktc|mb=9$~xd>dAVi2KxCukKalBj^Ou7q8ObLm_5~)&l$N~ zR@h5M4QE%`OS%%XXPL|4bS7?^V=oy#yh)val!W1oAKqk!{St;>$)(2qg4Jpg5=_8> z*$a4*U_uVerhVaBK?i0pG}j6{F#8ey2Gdt0%vSh;+3Fc2%vJ<}+3Fi4%r+g3+3Fo6 z%r@U)%vS#(Vfq682Bz2WH(|O04@_TSt`&G-`f78nzys4?=Wj~FV$+GHBfCLtQ#9d&0LffL-`JG+M9qoCK)q&|>a+#3+Twr!c7iOcM!0d0i zUNwCae_5QV?uYsoJ9Ix-WqtM4?fKiz--W*&{ipKR<3DcWX})ROT=-yF>a=Y&gkUbF za#6-|E`3&-tZVV!@_*=)A)3U9R2!W@cW)pV^!<$ry@#%k8^ z$p+d9uMO*;b&w28hs%DpVMI;fWu^ySXNM!R#Q)8-U>P41PwB2>am$yvedV7q?76|$ zh0#7XxzAwR3g_V$zAjk5ACVT1S;elM?&^oP(_k)>kbL2s797};BWKKe?L-+m`CXO} z6709^{H@iwLGI<8CoDqOK6B<1mUMPO3a0ncQIRaCHVIJ_+d?`NNbVWP_EqPtZbI7M zCi=8#NT8+N#3L>g{yZUZhfK3Sh*XUoZCKiyYBqv!FKN!vqWP74Zu@f!z4|Ei?Qhcp zd5co(Uw2o0#v@<3chPp-uyA&(alv45R!ti7K}I z&kLJvJR(&eX1C*S%Z;u18@G|&_FieBFMXL1ZsuOnH?XaI`FrjqKbCJl`Z9NFPW#1a zaX;37j-zH9*SnXzFWq~id|RP^@y3f&gKUT5Ynd8g6OEP|=i|o1n)B*50o<{J>RFss zH>rif)1h?=UK>KNCh(=Y@f1V;($+2xr(aaMpUGfbWsohhwj;y*0f839;oG{otP6I( z*t~q}rS5BIk{|brY%DR_Z7O(m=AGs|yuI8rF2osK(vu~foc1^QOsbW@OcJ<%T9B_0 zYJAo4*RUC7nmeV&h*Bq%CCzMC@s7Jf&Dr4UHpS}kypvjeWqcf)mb6b|#yl>q_lD9o zNi&DJ;wsR&O=X{?#{E*KqX4TjXFIWf%;$B)uJ1!)V|T=Jc6IyWP%eq9dx-kwUP2x^ zxhwp5E8jNMe|7n`^W2s5%r|j_xtExS z9Q)+1ILM@=vIGfBFW78sDdKD+aT@o1je9C#O*7n=eNlIUV%2 zuS8UERE#fg2u&?b@a+Mn7+}q1rCb2U> zYM_rVxPMyC@-#l7*&*L_4MSa=te->>k*q7H?ut#nYhrHHWE868m>TzTotQC_6E@U18->AEu=~5Zm-KQkp3s6beBy+N^qM3FYVJf$J_PwL6bQy9pYZn zklPI#QyhKR*vHhkPOgpJ4CR!b0Ns>!YD_hy2k_X?OlV_Er%Ik(ozfLvTbJ6U#=T?! z1zp2F?68M)>zXS`iV0c*OzGOp_qKL}5=q7ot@}vV%eY(wt_GFhWQt8#%e6MG-5nhF z|LN~!;`#t|qPpZ@m0u2YEo|qyA8FbE_M^IA0$TB0xSVHM>;-Asz+v{IkqIfmR_y+I zP7D5=zZZIOsm>ao%(KPWt=)^y-^aZ;iB%kzw&mfz?!~Emu9bG|IBCde>B@Q1noNC~ z?$f3wiD|s(r8bR*jqL!<#()r51|O92^@?e=YeGJ4g~BI4?6hb_Y`)}5Wk{mBZRRg1 z)iVfR|LEAn(eSoQ>%GPwpVoVI+4oAm8q&02>Q;TFMh%Rg5gqu(16Xi#MZ=Tu=X39E zbz<~5ro^;wd+|v+Uq?ls^A<{J&9nZha}!%|>gf4m);8>UJIgy7!RlBa^RkQ+ddx9- zwc4bsy1JIFR`h8;Zl0Y=1q@ABgsgW8#$U@W2Rivl_6Q#_&6QJaIc?5iQxd}VigxbO zP7i$a;bU@yj%kSEq()K5Swj>G(=mz4cVj1*9nCyO zEbk*3<}S&-3&!;yAQ4Q67D34uIt^BjNON`dCMyBmKP&NtDmcssgRK57e@FL{Szf(Y zK>Jj+*-K*Vy|pB?vc+DqAQhqW>7qSkY}&U|F<{cQUW|0G+_`Piuf&3PKFj7@-teZ~ zN0jZu{u-5s|Nb*}B*zszJx7WqgDUBnL;}!iGaYHVDKyF4@dD*I4GlAAjz8;i#bf!@ zguKe}v=xd|`WP!MIMCNJEkF;-OJTc0!;vkT8@8;%Ch42{(&`X>R&^+9%jbshi!93@ zLs!#!>WD$SL|dk(CoQ^~4@);5Ks`IFnR{_EJ8jptOl!s0g3D(%JND|7UNvQ3vZq9S z*(Xa0!Ntd9?7`jmtU_aA^1;_@`mpjsrQt%^mp3bknx_9DG>c0H=Fh55JN1X^#G=}0cJ=n? zYsAILWaKO|@>xp^skj!Qaub<$@AjYOUOb4mgYDZ^%T~2;n~lQt8R)jq2`0g+Ed@3u z+IN_5L#^CAvC5%i&jTEv_2xe%nEdi9kNh14ys%l>&%WxjTZC*KvfHLt;b2jVs=cZP z##LR!)+Ymguez!^u{1Za`~bD^>DV^AhqQa~KoXb{N#MRppmwSo#7CNJKS*W}OE7-r zW`3$W-1(zS0X|n<7v7|o{ah&TQHVvd560giclO+mz;?2-SydjxK1#)$9nm{nEVser z(Y`?ZSbGVv#^;)t+I~e$sC`JmzhTm_7fs|ebRA2gVw#>*pE^N~(7UcgzOjva$+^w) zgKaoywckPRC9hbw{`m4=TaIFyqbPR1nTa11;Y`89h4jra4wOdiQJ;3Ck z!+dI&xNA5;1${XV7hlK)%6tgsYT$>!2kZ~b zw(C+ITX}r-wYc))YT6{mrQ%$d?WH2#_^xlMsim?U8XOxHqW~$YJ zBivL~hi|pb)QvSZ?VFeFT^7H2`QHAc=y&-$vVB-wn)`*;Xu&u92rS@7F?5(i2-1*94U@V?wfrT z{q7z$Q?HB*e-i#nB-WYD_@;b66sk%elh15szXShKdpS@5(Opaj_hogBPBf41$c#>tDNh)DfX!&$l3PP!ev8*{wmeI}2!lKn(m)WVEknfRHQhJA)G|LgP*FA-uVo8T zs|UuVR$s;uzps?7G$LbvwC<_BS0lF7GqYB)MV$ZOhN!wWii)@S&w5<>FLrn3yS>{s zzvRhxr|=V3)>|F@o~c{ba4_HJ#FW~5O`3b)a$og)uOe1YGVo)5pf6R#3<>srwd4n1 zmrZG1YWOyi2_-}Z>(End|2bdL8`I&vIgiMs0?f&jf@l%Jyfg0>_p+mwuD62G(2c%SZI4j*5Tdm!$N9k<@wA} zJ>nW)C+s-a@33yWEBjTkKw~*wfp)%D)GA$h%+)sEmJfX8pYP2+2&r9o^Y%{R!TMPY3j5;;uyjzZIfEQg8hKMsMA4|snsKn{Z%{HRJ7m@jdxf428Yr%-?fn+ zj;=C8LNpnlh1A%m&ue@#ls(0cF?y7WY85D}l0n6uC%wJ%{O6;#n6^3#4-2i=hLDPC|>z;&nFPy43nrX?-~gG4N8! za~tE8a0RvP8yl24hwejtHq0kpbKF&@+FX37*VS#mUs&YuVJ@}Q$`l4tFyQ}uG-l$uNj6O1NfFo_}ud z7i9HU=@u`|S$N^{nPXB8bK@%T1sfIx$7s@HEPUH|e|QKhQAC`Hn$WLfDk8qvXnEU7R^XW1OC<*k;?sCJ z#J;@HzTDcNh`c_C*tZfpXCk*_V{l`!;8O;0Vx)eDjZfN0c51f+25ggtJG0HvV!L*mm80&0O90{=w%?{y|3pOs_QWo0Ba66u7n{^%JH!acIjDKCOGHojPGO ziyQglADI>`ZJFBT&D7qT)7%3#lZk4ok+1nalxD*yLt2;3{+{V^TND}jNFp_kffpj_vc2qGa@WYZ)Yz5|b9M~;D>VmT0is(FUbmZWMl=d4XtIyk>MD2u-{5uIMHM^eoceJbU9p&Clo@5dBhQw z3ffh7tp4bVq6jfZ5$B_CY)|xBy04zAI07mqV2VY@%fy~9quyt}EUENO`2p{DI#l9nG{c}1W7F5Nrl+Qme}{de4d!hPj2+;fIP zEn@`x=rZVCLx{D}3BQi#PQur?UuaqWD~=D0ei+Wpnz|2EM-_z49zl5>AC<=`_()E5 zx`NIcA(b?~NUF6mACXdi(ECX~!H~~S>iQ_$h~J2m*jX+5{2k;op^CnA`noFb7R;bf zXfHF;f|yJmtJ~TRlg})Tvo17gw6t+7XUtkx=Y&Dn>&z&NMr{dn9gf!cw3n2sx(YnL{&Pi_ zn8=&e^?FFn)ge~ZN0~UuY<1f&k{QT;LrrNo*En11M1rsy@@xvEad~)Tz8@?emy$I7Ot0V1Wd^4P&>eP~qkeNh`1Ws&v59O$nJfkRI zs&7Q#B-av-r>XOd%xG6QeKt|cqZ9SCZk*CF2kV%`t+PU!bsn!Br4OO>weHGr1zabw z)Lmu6A}@vwm8W&&yN!KJahP1Jvq6}5l}{=|y&VUttJcrK(T_|~hW&n|>LE%}go@pU z7Mpiy#Gc&3oPq+1R>7?l4!s;o-b!6(3wbFf0^Mp#rk8GvaO}>()mfxGeQW4YReLo8 zeRb3fyCTeZ!6p)Vuj$1Tx+>n)Jdy}&^xLDRYMD{gzFC{9(jRwMnCfHrRGTX<vYyn-Dc?F1CmvjNN!FW_kEKMu)K@NM3=&N;Mp9-6iI!DqT%y-a-P5-UW~u z77)x3TF~4K04MdX2_NUC5ZKQ$5<(Y+V2_Mf@HE%8p_!s^g%(Vu&{Qy-Z#P&9j$>tT zlY0Ef#eHN-xKjv!JA9$WpXNom6IocJ%)6<)7c!aW_zxx`1yf1Z;HJnvrp`=i$8Cml zD+Ars&VCI~eC^0s$RxAnMo9>{JIxb{W)DwtSpIapIcer)qEW%R87lXfM!U{72hDKK zzp12*ax&Hq%|Y1W9c{|nmUBl*&^R#ZwRJrHl8^N?(MKxqp4!gvGSR9!QZ>v{68e9! zuDTmntLqjKv2}`=28M44O=60eg;u0T+t-`IIg$cz3S~LkjQcv4Xw}z=ehY@I4s_~bx{?5s>$w^IEHFmHMr5{@x zD9eZl`jRejY@@~iXaPgzrbuhzWThwxlr?*j)`aFsBRM4#owI!C*vqzk+Em`VnY*Hk zvO|DD#;Mx+OKJSZe1`-Hy$b-_? zQIe8WjWlQNXCgosQPq$>_%QE8DK-yH+0Thi*sHuc#zX}pO1ax!swUlRlTG?2wd6Le zb-#QNDFL*ur6~mjr%Ed33tMw2OUqCX+ucM8NiBWB_-BpRsb<2|>MTz&d4ogf@*1q{>uKcv{3gc#n^(74 zKmJWj=r=!|vW6>yp`ut5%{Vp1Vvh7&_v!d`pVY07fB7FS*C(&6pYl3EyiO3WD~Q(# z;`L9b)N+Lna%~NE>VuDAb9c3^bBN*+mu>Q74bo!TTT}3C$7>kAF~3hpsaox=VmXwx zGE%CtHdJ}PZm2dU!5hkX(Gr7Vrl&=~iCS&0$bQ$+-Hk-A9&9s=^;XGU78TqxY zI)~y31TUy?1G!=MIpsC&+cgCH*RmWwt%?+*rLkE*23_Gftz2b;@x&@P(m>si&1!p_ zQ>Sb|Q#+9Yebh`dC<{ah!mRg(La$O`jfONAy{lSL$y?UH!eJqGdl42Nw#{$YKd3arFyh`i%*n{a^su8D%1zn+9MXN(Hec>-l zDlRiY+UBsrs~E|Q%(aSM+*m<~$eI!ab8>N^=dlE$g;8hXcGNMPF3KHUl^jv23yt`s zFo@3dza_zSTE}9`VJXMtB(Y5~U#^yi5U4qAB*h+6>YkCW#;!X4_PrFZS@hT-+TE1f z{*97K0+u4mP)sG5B5H4L^m5&9!du=UHtQxAVRfooAz4Og4lkG5B3fpo5gKMvgBZe* z)m@Jd3baAj!afp}%pj-zY0K?pp{^YjX_U7MjW-@dWWIE!&!^hWcVMCZ@N$g%6L&~h z`s&aI zYv|E_(J<8Q&%~0g6ehB8Ev52k$NoqK3Ga^O)R6*PN5nsiLZjK33Z+8u=)Ak)^#4@Z z*T8=}WCmd@jjI0UgGl?eV}r7;Rs9ay6PFww*o|`KHHu1Fu!FL$kx~BVl(oYS;YFmn zdu4sV_>R)LKc}oyO$~|iwi{)g)3{DFsjPh(@$Y|6SvO%R?NGjk(JZa0E;z~>Kw0aG zAfw$Bow>gf;MER>w9K?UjFCG0&}{c{b#D|`BRWxBiR5on zgibyQ7c3)d8yI|!itYyL>29*NtX-_Qj2RH2p-oXVwAj!9J;%lA8(5mkz>$-!CX4vo zM${Tp#A>Hit@%}NOI-Mz+tf6Bz><&Nq5ROVvkH)p%#DSOGhz0Q60tEih)p|O!Qh$5AQuXRHSMWM%sp{*(xFn8ys9Ig+z0(FTS6>$F z7=WJ6G|TRvnS!@xM;gCw@2m292VU1vSkkJQ1jHm0YcH@;$u-F!56xxDh~v1X?ecZe zAf&RWSBp%x!r7fV<$cJUuD+Uw8ao-t%r8NPPNwI)hoMDEzQF*Aw&u*|gn??6wtGfj ztVV2)GRDWC^Km?Dusw)%Q)mJQi=db^mQxmz#KL%!#46q`4E0oBa+P-u$(H$bo;>S_ z`M%yNcX@BQR4dEDI-!SfNzGkANKCi!z z0-9Hpj*J8uD2&V~gD?SMg_BN8YzZ#?z0h_sl<7-UjJHYIlduVL(MngJh~Df`%2rlh zhCnV{Svip(yHjSwYBygJ2dYyfvKeb-C{)M4ypM8k_GoA*XB)^BHjpVZO^}k>f2hqn zD}akk680#YR`#e5a@X9$Oz-qPf6hhLd%EfzsxTvff1%pXMq~$D# zU{9*>Oj8E`k=*KhP)AtLZ09Fh&u-#dnXq>LX~o@Q6j$`)Re*^kZ-HqkrM{u3{z6r_ z&xB~I!UEeEE|N|Dpy7|kg(}XYe=p86uVQP}1yNED_4*4mXUAu}3xXPs8l25=)Vptr zttxw=@{c~c`PGWf)V7oUVr{d;k{Fe2qb$|xg72BK7)FWwF=@3{*qpj&XiW)j zVdyJ9Y^__MPGNOc6;C#WUiykx5yI8?-o~pT+);)U%^=8}Q17pK6;PqWo9>FP{{dk> zX1e>0ix#Hb4PmaVEF*nzlQwbKftxz>Fi?Fgf88^*rW|f+Ya$9CUl$%)uz|o$3IuLa zkci@c#ZAji7krQM`X{+5#Q9-+s3bd4w}U$% z|B9A2n;!a}B^?3Aj%3WC)nL@rJEuDsP2GuF&e-$l!ewRqi_uNp!+)XhFGD|f zlC*ElAjuv{BCMFP-AmJGUTy5!#@e)NI{Xl^?j&uQe8x`8CB zLC>Grb5e=vz-sJF4GzERz-rIAon&|vulA4#XVTaD&pH1L<=3?Tt^Z>CZ+&ZKH{8eD zBQ3zUx`MTu3!An=ed7yRd+;Rv>va0o!m(TH>u+Oxua4`h=#O8ACGdF|`_b2K4ti1z zF9+)xD?foYML7TG`uelMm0Yg^4fCnh@dX|--FQlk=|EFdSkj@=w?s{hXW7ZHGApDt zKKJ9{$pdxE`o_7-)o&&X_|%{ToRD6-(j`f*=7rv@rr#HGmv=LFW~OLesE0zgL#22$ z(bgEJmQ_~Qt$-4Z9mLa+A|)XZjv_@&b`IQ`j~ty+RpaEP%KJTzw))B^Gf`LRbo|5T z8`iyJbWF1_OmAz_P;-t!U&~OXu@BKwGBULnhS4p!WTfSLX>Enh(bXHX(rtvh@}!1) zUtIaGN4qNzw>g!vJ2Nb`;p^JEU+qhL%QfEB0dn%z5GI{P6NkyBrb<7xje>PR9N}3U zg)8E%t(zYeZs67OZ;lV7uMK3aaaUwH;Rn5I%R`!{b5|tAJS$=;6UJZ6vyy;!g`L_o zX)}KPbaL$ih=%kwM9<*760AHcJw|j5FL@VkFV5zwL6C~EL6EU>+cAtCGHe390R0a~ z%X;Z3b%@NTY1~2j5XkyjGoY-9s4buJb2E44MZ8#wShdBR7KHR}?VjC9jx`m5Dx?M3 z2PJ+erTMHhC**p`)PY5Ho*f*W(%|UB<;Ky%x?CI)Pjh#r*EnZVu-XhGY*n9XG+!Vn z9=fSZi3^4O+!sjp5Z^b4G5lmAObNUbnq`AqP#4x+mJ1LX(mYFlbfr*2YhN?5uBLi2 z#pf&{pg%=jQmr)Vq&XQT*+VZ`$McBSx-d*5F*P~=nyFDND!*Oh#4u)kCA({{ZLAz| zS{+lt=%p(xpZLz?#HgmnBs2a9=RTYl7PIjJ_nCT6QbTQR%1|P+VkN8}A-jrlo%Ys@cbz;awT zc7oR$&f139+s4GcmDtTH7!!Lf0fi|k(Fn8gc&FB%GP&!-ErqP|Zm_fV9 zlX0rCWW#XZSVmjtFx&?X_hE(`ZwdkyZeV!=9zkF`K3NxWvuvJ*e$}`xN zy;-D9VJ77n?D|wp1>za(x`@WaarY+#)6*tuk7aJsVgF1ah=yWMwc$0$ruSbB|4#~) z;9YgvbwpZW6;t}nNWR*17Ddd7`4_fV+L_8jHQ=+_WwjjxW_2+)N!+z-?)^FPpc#81 z#5`zj@3bJfd_}u(1&!s0@cK@c7_mCo8(5YGYX;KU^gzpTI;@8!xun{3c+Xx^<2(Ge zSgLq^qV$vs!N+xJfmhR6g^wv`Rsk_zBVL|$DjB8~c#CcWYtX%XYOXq;+8qvAlM>7# z7LE764e@I~6c7Fv#rQwUDUe`dJNd;+%1nZTbXaLp6Lu>TY1)dZxNU;ZZT_m(kc4$T z-U;Wf%KIBk#3Hcxt=E!5nr|+Dv6oP5{2^p8Jvdbv)Us|An%t@BVs*En&;L&Ljv>h? z<8QPvZ$V$xjPI-ZR7r77KUh7qv^az3%1?z6wP-1byf#t25Hh~R$rV`;H!}KS_+)4DcTOl zy)E+&XLA`Yc7|%Bi`}Y?6N(m3Im^(gAn`%s(vmrbv{#ujcN|&{jQ`2LM=EVYTv{zz zMS1DCRjVaoAJvB_Kf(Ck)`t%{+Ewg}>cZ>BiBI-;Tri6xBE6de?NB)M)*DKx!Xp`N z&@^X#H1z@zc|Qs(IuyFx!fJzXA}B>N5X6?xUNOsp+$2$cv~i+vR8 z7W94;ST?P0Y<3}rD_rjuB(wCF9n&!I2 zekpM^Sk$<~KE~Xx!`7(B8E!&>xE+_hN+4?4I}jS>bIX(ZNmTi)F(p3FkrKb!XG%hE zlFwKVEIX&X|HlLoQQ*Wy4GR1+FHqpq_=za+CQ9#nw3g2oWS+ELU=kpv>M)l}v=%c~ zi@>6_Ru-7)*S8|7mEQWeI>wWA!Nez~idi+<=z9)rSEQ*=6Jk~vG3Dr4%b zHjW8xJ)>Vn^UNR8bTFZXjv<(U_sd}VmmweZL7Ts?(Z@b1Q~=y;YloY9I{lQ%ceYH@ zm*AeVXhjBCCE7hL*kL;*8suT1dJ;)XV@ZSE#F?$vf^+R7roqyJw@=`8QvJJ;#5%Rk zX81IcXpU7!q4hynrH`zv^3LZkIhxZ@spE2-@T;0Z`rmM(>~|RCRb7w zD({`2Qk4>46ZFnE%0AzA-!J9$QV)M(1D?kd0-on-2>7W-O~CV-2zXvN;CUwCc{bn! z2q5O`l}&Y*V$E7PYXHT5HjCsQ@CD=FLko=c8*KX;m%*$rO@(T*@U=Z44blVUTj|CP zA(~a*8*OrLB)Pp5Z*_d0P410K?zA842C)r)tTb*6C;CQ{=o{-^pa52Szw^{xMgTT= z)`i>PRgaOzoJjBkZSZq;8vLAa@N-P?b0WbvA(!)!MvVU5K^q&ohruB9Y3dZzyi%pR z$~#Nx2zqCQ%c`1%M-;Yq)=J7%&rMvj%;$V2JcL_=a3@PAjB(Poh)aY^bMak6tJ9>A zUsll7ZCfiP2a^(~rCUgn5K{}({8q^zID`hz`yFS8q1jr2fRUAE*CNOa33mA1x`KDx z{=g+1MeHNLqupDG4}Ig0VMSVAVq;?S#lKyPP|wa+-lgSJz9jRc0aemp{>kD{inXAj zBlqNQKNE%F;e}Egv(NwvHdTk;O;EAujJ>}a*2j;ALXD|~StcrWzEo-W!nExdj1U+$ z4YsYdm$l^KzDE>gz*-cvBpRjgTJ~qWSsmo+c%rIHFi9iupo;;Qdwk^~cB7&_nxPRB z%QLhQD_vS}%@1KZKLn$%M|yPY-Yubf$*HcPWjQ%{rKPUK&c}3Vc$isIoLiRT_oSwH z3Q9ela$CESJSBOTmKBub<$5NBUzX&R7MGRe{2@^s2>?TUIlC@VGAdqGiwzaYD?;Bvz749WACl@t-> zP=B_+tQ42Id7e(^5yH4UkCR3csHjWJCQK+U@#p3CG3nivi*Bxg*#(6J>n}FR^<;aL zj@*)hiFqZS;u7vN^8A+-ms}El7VV)luf(R$<0lcNlS}=1<9GMolUM)qtcSDdC%RZ+d!CX82~fHzQ^6 zknqib!5PDb3{Fe)ng>Y(GL3)p>pgE6F1;p<^r3@BB@IimZ*?=2I|X5`2Mjg7bUiRN zd5Cv_FDWC#o94XlkiE2z~SUN;w(9N=qLf<rkk8_QLXo_U_G6Fru0h;uiII>l2uK1Yf2T$b(68JAm37!84X z3dvl~N?X_m!jhSuH#Db z@?|fSa#@&NG`0-d;F5+GFwyu4{xo7QOs39zx_ZVY5AAx!pt6F21x3aP z*@-h==Q_>kK=Ngq&DKr1Zt58krC}zej31j?C)k}tYI3KTQ^z9>*SXmR{(;3MPT<8w!-~mRLFqUn)6#UL7q)|3-CP4) z-Fuvp(DT&OPVdz_drVGlUVhYrq~rl9-hnQd%TrL~nV3JJq@c*3-^Vis6&RCUn&;|Q zR90B%DfRPw>=`a4!Q(Ytn_4tcdGlmumt>F6LkzC0q6SmWm5jUOviyAPrJILx_J@>SEEJY|;@ zNddwY)HA4X@`Q1ep?#W?SBUgHGHlCARJ8W76-48wJBYDgzkZ$+Z*tZkPkMGvNwFuZ zRE?~WWgl`~GCo_)unG?{kkMQ;_9)L8XPnX6HR|Hh;-XP1i{czllK#RInY1w;)0WDL zSNFl?;h(EhVJ_8}|GRbSo{;Ox&n`r0{*tmhm(;^`cIMDw{24xkKbhyUX^*SORp9c2 zY*!(FFXvZx#XKL#bpcQFT)D13E{`jVXW6bX=7|Sa#XKuta`_2_c8y zZoElxc~R_6xFCtHOnl_=rj$3wyM_WMq*B*7!t$H2id~nPP>XRbcSEAwS^s`wD>1Go z6Jwcim&4U~*8~$v9#0hCFn%W!hE1pPT0|;6t|Z(|FgZzSGUXnV8|A;q zY6y8ubq#i9aIbWF{;TnwKn^6cG?O3pBji^)GL%x5{PU2N?o=jLr#+;kjHhGFGmp_^ zrAwit6Hf9TxQ~q`ow#!ewU7{;5R-W(&CKOlD!LzeBh8olGNTn;Nu8}#wq__b(e=%# z6)LxE6PhGBh&m`a=bGG24Cly7K<_hn;-~KD$t8{4bt8tMMt^L*$#YF24St^fH|li~ zAzA59;Mb{Tu^bVp2Ro~C`9?-6!NH`}gD&MEtzwtW>Ev*I@lv}S9*WKJFk)6+kw#eE zE5W7G<#F{l&r~jwb*w*0JK|G%BwuBwHd}v_jISX)E8;&Ve=7Za+?JsOVy=ANhztD2 z^-$6-EtEvOT&et(G8>}hrzC16)NFi@<-I}~OLztRDix)s93A$QJd_*7VAG(yG!@1r zQBQ5EQ)1E@owhv*qbZh`f3NF2n4p`ti;wM zXfGtGyl_39$lDx~>k-7zbW5WUqnTCQsHv;}MNBG%Qc|c^$4OTwG$5DQq;(M~SRE`i zokIRElZTTMuoXdITbgG zC-gfI$gWHQPVLSlFDkECjZj*hJc|)6_l*kYTfEsgj#&R5!<7*>cl67qHHDg25N=&0 zorpv|4Y5knO2zJdSXtZFHM%WV$lcNFKOc7_Bq#RWYe>_wbjrKw)Jw9~=G;+-q9w0X zI4!Dei)HW1%C%1;@@XvZ=+-mCXmTlK=-6g`kcrbGCsU?5rnOV;^%&jORbQ@U1E{QZ zFU__#yp2C%GbCfn$!fTeP_tblO{u9BQ0nwVzY*J9p(rI;4Rxidx2d?2jTzf&59diC z{$y(mG1sy%Y+j<@MTgyVNLF%c)y1p%q&DKNm?yFgJk%HEORauHlcTMOLAYxw1aX5} zo4@LR=P`~ovhM0)pn?4FOou$UD&{{w3?+%F9anEGI$X<2)*5Qcwc=<>w}%m;?8p+r zw#?Dl)rGK|3ggfDR|(p5*k0)BylM_xNG2U}CK!y2jHb8JW+!i>}a z_2pGZtUY6En`-r6_pdr-?W7DsQ7yB5Zk3R&&rW`Ao%!oI?SzEH4&7a+z|iU+yIifn z-k>GWTyI;zN7IZ!$ewhCxxBlp7d}pGxRZbBvS+6*dhXW6X}fiyIGtF;?UKm<<}c$( z{C6ec=ln;w5_x!Boe4uaF^2kYTk$UDxrf@V{}h)-iiX2~1Nc?VNW9#BN$@miYJ5Q9Bqp3U6RgKQrR?KOKqItqTJDOOJGXG`K zXFMAWCiaZ*vq-2(q&kzd|G5+?4L)3_kUJ|E_3NEG#hH!_hVow$c1J4l4f>NI%U=pU zlK!N7r9^xntHq83s#T31F>z9u4zmuSL?)Y7DIy))>i*e$>npHA>bCj?YJoKt=hW$F zP7&)54!3{NEvj5QeR0bX;=yRw5f`!k#MTb4H1=cLARDe_7HexLbqw^QE$Y47etLAM zVvA9fjau30u%pAeER`c^y3rF22|NUU#3HntaN<8C@H zI}bx+jp8hSRLXXhl7XZnx`ZWlNhbq)H;w-kQzXn3+F0qjm{}v}PT9tecgnw`t2U*@ zxG$xCXjELbyL!~)30L-5jwx$L>VDGhXtiAB@SptJ*8G1lN)z3;E2Z6*G&C-InfX=U zGt&3d``Gc>=pJiixt*Ox**0k?#j0M>-elM|=P=*@+i-cmez;dtULTgKoMK%$? zs*|yEG)`~L8BLDPOKhKCY-nxTra~EJ%0Q!&ie2TCXWCmk<`79s<1odgPS5iHqU@qa z6e42)mQ!r1Bjx2VRb);|;}E;{_2W7lsNIx;U ztp02ayJD86Mw7*RJI?;u9+J`+Jw~qDFKt$PpR1HgMlp+eUb(m!OQ@Rn%Hv5H zcU=jo(8Q#%T}OM>A5x96qv&?*%l4k6&$9A{8HP$CB=t!YcL^5ZK>Ve_&R+VBinZzR zBJ8FsafsqdA~q(MV?x}S)MO1P#>m*e&E>!_r^_zRz=gk|@2cL8Gq$Iirnw!JsJ&KN z#n4JYtiOoX{Ta=$t);bk>^!OZ)M_!s1>z>9S~h!hY1o`Z&t%x#>?#CtuF5>p_B*wr zsacj?g%qpX(K#4|ZcK8WPbpfvL?d>3G7JrnO{*CXjjk&Fww-q7kX-1NMy0wU^Fngl z)!aE_R0>CBlWH_6#gv1}!*X|Q`YqF1_f~FJzlUJUrsJpa*qPHhMr@MUP&*m)=f(>IuzSx+WB+Y z+p-6mmaElKA3d*8l*0hZRDHq7-L8B^r!~4?(}TDi{)rvEIMb#7T;{Fno!CQpjMOgG z!2gSO?^0qPW!Q17VVx2)w!0BR>oXFUv(m+x5k1+2XluTeV>UT- z*w>B^D7}`)a>Fw6nN+Cd916D#pgkJ~CuEt{tm*n-*=Z=OkwZQt6UA{hn2c|&v&o=E z8|FHTD~+5S=en5C$8e=_)mUb-%=>3UEC`3#ne=HiV;Ey+ClKm!gsQedy)U)>!$^}I z?b}_9v8DH)OElI3>_&dAUOW7*R9a?r@*JB2%VOh6zqrA$>u1F(u#1ut&d_&XU@uF#xJB- zmza?YxmGG=`C1DlGWKJ2Uahb!cGYZ+a#+8PhF(TKH47vAPkFV>V9QjxlN%lp*nPUv zU`e&s)}9?;Bx=_mYJ_D^)2Z^19b?BC{%k5o&?k}BYAsG=gHNJh>qi>QPzgIic*xywNR%7L*_dHas z+|syXq}8^ptdR)2Cd-znW-aX4Sur`29y(*8S`nl*L5|KiR!&ptkG4c?KgF)5lMYTm z&otNO;jd!oM3~YoXC5V*8ycrEms~jO8;&x4Tt|Y@+7v0JrqUWIqv-N%%H?q6rE;|E zRGsw!yAD0_R^v6|aIJDEc1EPRO}9L{jY=u~nx-O|^{=$MlZ zJ>79#R8wVQtx>zGYAEqY=VVJbtwuC!H*U?E>iN3T>OA zaXr~F(l4=%uIzeb<-kh(&$^f9SDEv$T(rJ>QUUT#N0vZ%Qj|nb}pA8RRZ9vg!1rlhFyy97V>nG~4Uc zFtsGHeRkFM#x+9vZs#4XjbO(iC1%&PlkrmwP)$DwcF_xM%(^e@_QPFmYV`u@nasg19+UdmZ_W#2_Vao+6g z*T!%PI&^Y46z8fZ&$ODz`jq|cT**(iN!xiw_UW|2`eLd(oS>Cgj)ml+rBiKn+U;mJ zE=I@HgD;}gWkqSOM4Bjz=pgEP9UXBtD1J6Q#OQ{GN{=;)`TcQ!nge#D*Z z2j$2zoLIAQ9Jz#UTP%%16>%p!PyGdr$Vgl4cSp`TxIq^UB z@r<=W*ZTb)|H##@y#CenW_PbY^1wc!wCnahcIezs>ql>hPuxD|%;SbV{dHVBPxT=W zdm8=g-soQ(0XGBeNM+Xiu`Lu5aJdq}RG_WO)M7aQG(x6TZQ5q&3h*Pi1QY{py3-vf zOnq;6BG?Yz2M>dZ;8k!9cm-&m$Zg<*FjHkANUIV0JK4rHqYq+wC|bnxe6QuUIHD#O+dTe+zR#v`-7?AbFdK{ z51s^NKYYzyOdA53UPz45p@4!;f9()2W0{eguK`l51^Z~6wD%cAg3r2wD;9c+t7z3^YbHSHj zGS~oCgVVuyP!0YCGQfkN5DW)DgKt0{xEwqNv?lghFbQ-5-N0ese()4n2}0mw;0H&7 zv%&Kq2xfu_;0*9I$Ok^q9Bc;rf^2XqI2Swvrh{eRaBv6s3~UASzzL z1egKpz?&cobOxV-S>P@Z0BymG;A@Z!#(^Yo3+M{mU=bJw{s|5Qko?~SP>u{v0*8P@ zK@qqBEC7EKz~2P$Hvv!)#)1>UcJMxU7)%7Of@{DlU<%j<&Ig0QCh#a&3+@JwgZbcI zPy%Ye67UDO0UQTT180IQ;C0Xw+y}k_KY&ZYI?w}j04=~Oa13|}bObkncyKG&8|)9J zg3rN5a6EVtlz~>@Zvyz+0_cPubOV1|00`j{Pz+uM-9a1}3;rg6zqh+1&{n9M0)8Mb(|NZ3?UVHzzQ&XlsJ?5TkKY8MU)K1SHI@bHmzVk+IulekylgpY- zOWU-6^}w6&x#ZnnS2n+P)P@e%&!79^_{%rW9diB$YhNhudY=ENcT;N%y3BrMbxPUt zz{Nk$o;>N6^Uk>B_-8Kt_=V2~FWyx3=s~Y|9?75bW}l~WK0T}BSBLbt=H_z}MvobK zwfBkK%WD65$zv7Ur!6?_*On*VIKemWylcIG9DL&^g)@d+v31GArSBe7a(1)Nzc}*R zbMvzvKHE+F*zkJ25@1EZBzV4l8{CLcZ_dVIH`Nhxv`@m~P%zW#x6CarT z)b&5@{o|&Lg3s^D`{3s{_KJVuUvKvubL5Kqx6ka^ZRqWH|CF^Le&%PV+`D;W**@jp z_D&rA{X-XBdgorx7qvU*jH71$deg^y_5b*c_{Y+}etzI}!>XUYbj8T{7JIEN9-Y~t z{@{7P9sAz%bvFkR2fRLZ{T-Jr3MD_kcOY1`;ou8_?K@(>36B(BP?GV-zV*MkD|-#^|Jc8dIIU~%<6FDe=Z+h3|53MHIPC3X zPwUpFP3y5w+;Hv&_fy~9^vf8@FQg3Hb>IBfqz4*dLvXIs}SIN_^) zN7oM6|ImXD-?vrUeSQqCdbI1}h0nA<;=$GD{%~;R<7IoNeRs>p|Gekw(SK}-JMPXA zCBHnElHd2`3xB(+XK+B5iLV{A@}tH7{(aoiFMr5+zsEYiUHl2CM@F^#)J33*`_cKy6R;};#_Oe;8-o1U^+I>#D|CecR-FNvXoj+JI z`?xb7eevFt`rQ6y=A`S}UOejc+lE~=aLnfF1D4NOw=~qP_m+#UdFkMr4Y#d7tN64xzqzy3+AfQ(e6Pp7PdAzp|>ixBI)+|bRU|okFTFg5u>Dv#sT>VDoz6V{m`Q(Y|?^O@@eo^}C52X+L z@}?G_-tqR+U!+}Jb?CB_j$Ar0@0_b|zv!D5akEYxxow8O^tXMIy8UD9;TK&0;X6a> z+6_+_|K6YjZhb#{*6DY(x%~XC?PqU1pkLt42ao@5N%kwJesxE2CPg#gAv z0P`S#&me$i5WxNrz&#MaN(f*B1TYr@*a!i900DG`0N#ZFx*J~096n`F9_g62w)HdPzM3L0s*N0mqP$P2;dP2AOiyU4FVVr0UQAV z91j8HLI6iW0B=J8eIS4*AOJT6@D2oU2Lvz}0=OFjD1ZPCgaBGY0AE1>10aCIA%J}# zfJY&KXCQ#p5I`jakOl$#69V`H0=N?bcn$)183O1D0ZfDdK7s(oK>#@rz^f2II|v{V z0`NcpQy_q?5Ws#Az<3DYYzW{d2;f@?U=0LN2m#yz0c?W+j)nkMKmdn80P7%t?;(Iy z5Wq4BU^@hG8U*kb1kf1*I1U217XtVa0%!{X+y()RfdH0603itAA_(9Y2;c<>;7SPK zK?vX<5I|oD-~kAr2m-hQ0%!#R{0sraK>!OOfIJA`DhQw@1n@NkupR<<69QNZ0lWtR zJPrZ$fB?Ef05uT6=@7vE5Wpe`paTSO76h;b0@xP!y(07D>v1PI^&2w)Zja5)4p8v+PG0N+6Xr$PY#h5-6O z0OvyhXF>pzA%GVlfNvmx3n75^5WsW@U>XE)1_W>t1TYE$D1iXlKmb7qAPEAv6ax4J z0+(jY02?8IZy|v1A%Hs}fOZhTObB2v2p}E; zcpd_%h5$xF0Ba$D4iLa^5I`LSFaQF$0|H2f0D=&}g%H4Z5I}1PzzqQ$0RgD~Plo{h z4FODm07@W$dI+Ew1n@5ipf?1t9s;-@0vHAXbb|oKLI4{efSVwI>mY!aApj2qa5e;R z2n6sf1aJZbPzwPZ1Oc>#09HW&3n739A%KG+fW0Ark0F535WsN|z%LL$UkKnT2%rlD zuo43J9Rm0P0{935sDuEHh5+`10FH$K`a=MxKmd0^04GBL-64P>5Wp7@z=06JGZ26e z0?35`W^uz8U*kO1TY%{co71)9Rj!>0(cz)7zhCz z00At80JcB?k3#@cA%GhofUXe0{t&<|5Wo}&AO`~YCj>AF0_X?A3Iezi0(cSvI0gc^5dz4E0G@*YUWEYGKmh9?fO!zW2M|Ce1h5$b zcn<Q#R|F6RQKLqo?59WVg z%>N@X{~y8pKO6JkgZcj`=6@CD|1X&TgE9YK#{54H^Z#kg|4%UgJ7NBNG5<$m{=bCz zKMnK08uR}W%>U+?{~a*@U&Q>Mi}}A6^Zz`||5VKX*_i)jnEyXx{@;T6e>~>@3z+|# zF#lh{{GWpPpM&}T73TlVnEzui|DVA8|0m}EcFg}@G5;rE{$GpveU__|L~>@y_o;|VE!j!{$GUo|2*dZ8JPb!Vg7%N`JayYe;wxkrI`OM zF#ktm{vV9_{~qRl0P}w==Kmth|GhE)H(>rx#{9nv^Z!cBe@z3qF#lU&{-1*Re+1@# zA?E)dnE!6f|NfZ&r(yoL#{3_L`F|Vc|FM|=Z7~0D!2Ev-^Z!uH|EZY&*_i(qVE!M5 z`TsfQe+}k;Kg|FAG5`0){QnX2zboc{d(8iHG5;UO{QnN~{~pZ$Etvl!F#l69|1ZS+ z4`TkmhWWo3^M5Jk|NEH#$(a8KVE$KN{#RoDzk~Vz80P;f%>TnN|3AX~Z;SbV8Rq|q znEwxA{_ltRKM3=GA?E)A%>Ut-|3_o~&%pd&kNH0f^M4-Z|NWT%_hJ5jfcbwW=Ko2U z|CyNo7i0bp!~EZj`9BBqzZ>TNHJJZ*V*VFk{ug8ZzlHg~8uPy$=6?wD|3l3GH!%N; zF#o^B{4dA+{~GiEAUmp z|7$V-6EOdO!2D0b{J$FW{~*l&iJ1QbF#li2{Qna3{|?OmG|c~HnEwMY|8K|qkHh@m zhWY;+=Knu1|F6gVufzNwkNJNq=KtxK|L0@=Z^Zn66Z3xw=Kp7y|CeL_&&T}F!u;=u z`Cp3pKNRzS6z2b@nE#V7|6j%Ye+Kiv7v}$R%>M&1|DVJB?~M6hkNMvl^S>qL|2oY7 zT+II~F#rFB`R~L0U!&2DgI>FbAvy4+H(11)c+% z^KK2cfG@#$ARa6Q{{UXF7gz&M0_r?m3p5*}*%LQt29|-x!SkRwhyw?Jncx!82V4jC z14&>o&_M4;;2Ur=_z}DX-UOS#Q{Zb*3T^_A06#byYyg_^ITcib&%v+YbPxiEfimzZ zC<24P58x1RDL5Q-0WX69Ck3JB={IC1PP!D>Xj0Wd`tHFcdVDL0J3$z7Y z!B^mNa3{C{yaMKf@4*643;Kd|@EAA&`~nt%)nFs|C+G*t!BB7u$OZ?26G01b6?hh0 z2Hpe5fzLnzXb*Bg7B~vD0aJjP-)_b4#o%9{J2(y82YP`QK_a*Z+ySP6pTPUzH*h8R z0`vygfZM>ypdQQsJ;7`+0HlBw;1f^>UIW9x72rm23b-FE2giW^;5(28=7N1dGS~)Q z0vVts=mzcr`Jgjc4~_*-f{EZla5qQ=<3SL-4LX4muoY|uxnMdN2j+nT!CG)H7y(`f zBS9Wm46X--U;^-gOz;QzH+Tko04@R@z(8;=cmPy`+d&1G1J;3uf&R?`&w+PAYp?}; z3C;uYU@7`Xa<&n$HDWUIfw%XfSKSD&<9)x_5(>^Fc=Fy z0^fj}!H?iA@Fv&Vu1UiBjz@gxGFdUo#&IT*NJ76;KfLpVM(a6ecMjsg9_cOVVS1^a+xunoKf zGC)hv4crCtL1(ZY91ETV6TyYxZjcJbgCKYtbOI&dZvyz+0$7M1{QuGd(44U5iZws1 zc|^@KYi?QdpqgLT`T)&EYyMsHhML#ZT&(7pH7}~UW6hCjURm>un(x-!x#lJ{SF1Tu z&F^ZyR`b7_#t$BT|8_;~N=9je=LG!d)d!V^;&G~EoSL-M=FRS$onq$?RwC4LYZ?Ab{%{OZu zg4Pje4T07LIP=Gv$JP9{=4Z7ALF)^&mO=CIT8p6hTdmK~e7)8iXbpqr&NVl#wFjCv z*E$Bx$7>#5^Xppopm|`;cWW+O^Uqpmq4gS?_tjjn=BzcBtu-B5yP>&dtx3?lz1Bf! z{f6elH4m@#0$Mkr^$A+Ppfw#@Z=m%HT0fw*5SrW8Iu5PX(7FJv9nd-o%~fk2UTZ@% z@2#~DT1%q&aLs>f?S|H8XpM>1T4?Qw)`4iPgy!WnudaE2t&z}L1FbL6Jh|32XpUTS z^jhnobrD*dp!s*L&(OL7t(VYR49$yc4qa<2{=ataJ+8+40pR!v5t~$!SfgCSM57C{ zUnM1yj&vhbE=|J}lDlkJEcfw?mvPQ1opZ*BCSph~%O#g+%r<00Keyr)GPeDmPtW(X zt+D*EKepG-^Llamp7ZTF&-2Y8&*y!@Lf{9mEw})T1m*-&f=|I7;0Q1P^mlqat^%)u z0l^PoAutj63oHrd0JDJ?!O_s)F*4W=JPH;Bhk&cV8(?5C5VU_9Jx&5ggZ01*;482c zmJHVIVV(7ev=d;l$){!TZfYtmwA%yd!OF^!b2OlPEb)6Qv=v|5@deV1NK|E2NL zt7)$^T6!eyI7a#lfNoEhr(M!o>G||vnkb!<)=g8T`Qr@m3UpfR0R0wkKzqh8(3~+0 z*aSK^jg^LqE1(zC$*~P|Z(M=FDA3mF^|WcaK5l@XOJBw!&}p#;v~rq1{TD|;m&G&C zSZUJqe!4x~nBI&-z!6{wZ~=yXOvj~f(`PXV_yQ~g9UhB7zr|+uE{2HH7o9D6`F z$1%|3>G1S*+yfn$-c1XqKjSR$8gyS;G0mEmjp@K{(3UX?bbA~GeuExPhsO)xCZs&M z5Wj%wz#HHf@B>%~+BS{@tAPu^4&W$g)pU4l2;Cd|fF+@a)4#DB_za8*)&hHi1Hnqr z<>~5le~bjy0AD~Sm$GI@8aa&~>w$~FCeYvU8Mpzw1QvrXPD965U?K1W*cMy>Mgnt! zDZ!^;4{!t+0Qx(<9#?@^!GPcgun?FC`~{W-bAZ{vi{NPJ?-&_u2Ob3rf7uk_8Yx|w&Pea3 zozo_1wKP%sF1?oiOXHhm#1CQTIu=pV45hMlh#dBrTOCw@CtNV z>;U~1Z$Nv-FwmSa4A=xZH;t8siYuTO)5)<7bZ=aN!6?wy>GiZ}x;}1zo=acGBG75E z2efjUKm8X+L6?3VB7K4BdLkcoyskwgrEInZfJeB`_*j2#gM|f0{6@m_AHLq%+f&>7ev=d;l$){!TZfYtmwA z%yd!OF^!b2OlPEb)6Qv=v|5@deV1NK|E2NLt7)$^T6!eynC4Hnr_0kWX|42pdN56t z&PnU0snYy$26zSO+kY4A0R0wkKzqh8(3~+0*aSK^jg^LqE1(zC$*~P|Z(M=FDA3mF z^|WcaK5l@XOJBw!&}p#;(zpMQY5w$I90gq#&p>0PNz?o3_H<)^(FMylCC*T(_9e4x$0)7AsLEFZ0U^Q?7*Z~{` zt(p#x4WWBuAFw3!aQZiP1D}C0!CGKXa3EL-x;$N-?vIhc8sH1)z(SAjRcz+fO~|1^4>1daylfftaz{cnt=z)WCe zuoyT1+yTA>7lR+bW8fz+8n_%x19kwiBseQn=unUDY;pj%U;H+e!we>J$!j1{ZLh&A1s?z_)VaRrPkU|a#?3K&2Z>?jdn(3XpdDgJoUxWp=wrtg{Pe?{$@>)gZN7;46JU(lN z{lj=&Rz0u1K@Z>9yR+iP%J;(RdrT;_T-rmSIu<+WEvEXq%KJAw%f)Q@qwp8pFLwXJ z8{_`|Uh8KkzEUQY@b`~jw(>^u@xK0&^X#kU{c&I1W7wa=OU`RmHBUYcF|4{V><w_lGBXvS94{s2L2HSNzuo~AG{dHzf%3;BN6s(IprYBz@Sb$iKq?p5=i z|Gb9%RleAzxiy_H#F(w7dB8lj7o2X@p92qhT8;BSeQY)D&r6*A4i{R@1ut)$121KW&ZA3&3Qn>G+iLG-=-R&)4w! zK+>{RpO>kUKQCUqjzFVq)#oYI^1N~}4=T@AeO{TE7ilTaA0kit!#r`fVwac~S~bt` z$nS3r^TJ+oUieGS%kow(9d#)#jnu*{aX;)X4iWtP9$`a+B{i zjH+(uiRZ2Uy#~{(-^V9a-;LK`?|z2YYSm7E^Fh5P@@MpI`q$h_KYsZ)oAh=X{qK*c zY^yv@-6r39X8!*1-yGU=Kddi~_qh-L4em6Yjd{0%&E2gg+_-buv=UYS4GztC2*wpK zu7Gg`j4SXDSOL2Q@H0mOM8pN{nlZ@gy-8*DsRhh_R`7 ze5n}M72}O!Tu+SkV$7R?q%A31jO&Z>Q88{H#uvnxHxx-*(hV`@ZIO&0h;c(Pek#W1 zVqD)wKC?z*+*pixo2axUIf${P7Wfx zabj#M#xup(@bCR%F&68uP>Hcvf5k2_He5d{5Mz0FiX?HXkRGr6*db!znjxcqy_U41 z+O;LM^J@_!S4)q3$k&=$Rhu7u<%f@suPU_sw4vf^YVA%b&YeHGo!t4Hwr zct5dAxs!?2fVH9ho_N=J><~LNZN_+IU?1(aSpSC;#{5T}r|de6kn5<1^b#(<3~w?Z{VM8U$qS zd$ixFMf*1zp6=!nIrhMaB}XT(@{8D}DXHhLSpUkL-kImqV{TlZG4j6o{%*$>P3XUO zW9+v}ifnR}>Ae<>h}`41V42zB;YqD+Prf;Q_0l;bXL@=>%7ahOTyttUK)#7hb~TuYxZh-CqxzI4OsNv zSB(n>DPv79w+Q&s{oVfSkNTg~Wu;hKM0?NbxOuO?F6n2lwZk^PzjJY(Ys?tsfDQXj z?E-uXAJC1T5KeO?5z-3xh)ITzd`-K4ko^<e^_McjALJwQD)L4$e3k z)W~W;wsPwDc56dR+pSpG|H~l@^L#gIttWN!snd7FBX^sRW9+6L_uX*RMcW}H$aPfT zVULa+UGMtH_reahQALCAY>GR3uInwIqfv8TnWk{rxw(&P$lKd<9NN14&$P(o z+1a}BTjOr;oNnJNexKs|1(y`r(L0Kpm*3lA8@;o*+x;RFdc+Ucj-*yCVSAg@h38K9Q1Lo*BLeMN0YCj#uOV~C&pXj3K&LgA3blpWR_&-( zs-x6n)zj1}b*6f^I$vF;R%pyLwi-{3QWLHjtI5<{)F{#%)0An`(o|{rX=Q1)>7MCh z)0e03PQRKi{T%yE;hT~+={B9&RI$lE!!IK)BQ+y8qa?#Z>#hygMro6@$y%K@Q+rXX z&^hXqx;Wi5U8+u{%hl!U%5+M7xIRihRv)LIrccr*>zC_O^_luyeZKyTUit}3(lu{C z=@d#-Wh%4EqjgvNslzLeH(8yk)>R(yMRkd~Ld`KdYTPw`l}9~IldMVA=rp@E`I>*p z*ZWUSlmBZsmwwshnNPwl%S3VCe9#v+eR{3f(tC}@BEHMh+gj@>@miasiTysdpWoL?>vG`q zPyZSBbIhHDa{oC_=7pnD&Gbtwwzw?~vHR5A?)3$wv>{_F{-1)1Z%X)^TMC2P;ReX?C$3f5JuIXLM` zr-5Hb|J>4d=B={ZubjH8zS4B|AgkjYHf+eBIAX#1=?)&-pL`dwDkbdlx}aZ1YKy&F z=-ZkXckp&E`1-it%|i=T4-JiuD6;nK*RjX=$4}F5#+`DW?-+42dVH%^t`;MM?}WB0 zUvsGY;?9}g=XToFT77u^q`kq5TF#4{H#g$7kFT`soVTaXsq1T-`A0am+Ww<%|7*^} zB03H0xzX-q*0QcvtqY&bUX=IYxDA~i1~vTPNI&p`|LNT(O}97mS!DKGbq7pg{2z7@=*$2B literal 0 HcmV?d00001 diff --git a/resources/build.py b/resources/build.py index 071d221f0..3f9d08967 100644 --- a/resources/build.py +++ b/resources/build.py @@ -726,6 +726,26 @@ class BuildOpenCore: except KeyError: pass + # Check if model has 5K display + # Apple has 2 modes for display handling on 5K iMacs and iMac Pro + # If at during any point in the boot chain an "unsupported" entry is booted, the firmware will tell the + # Display Controller to enter a 4K compatible mode that only uses a single DisplayPort 1.2 stream internally. + # This is to prevent situations where the system would boot into an enviroment that cannot handle the custom + # dual DisplayPort 1.2 streams the 5k Display uses + + # To work around this issue, we trick the firmware into loading OpenCore through Apple's Hardware Diagnostic Tests + # Specifically hiding as diags_gui.efi under '/System/Library/CoreServices/.diagnostics/GUI/diags_gui.efi' + + try: + smbios_data.smbios_dictionary[self.model]["5K Display"] + print("- Adding 5K Display Patch") + # Set LauncherPath to '/System/Library/CoreServices/boot.efi' + self.config["Misc"]["Boot"]["LauncherPath"] = "\\System\\Library\\CoreServices\\boot.efi" + # Set Diagnostics Flag + self.constants.force_diagnostics = True + except KeyError: + pass + # ThirdPartDrives Check for drive in ["SATA 2.5", "SATA 3.5", "mSATA"]: if drive in smbios_data.smbios_dictionary[self.model]["Stock Storage"]: diff --git a/resources/constants.py b/resources/constants.py index 3b51cddc5..9a7cfbed2 100644 --- a/resources/constants.py +++ b/resources/constants.py @@ -125,12 +125,13 @@ class Constants: self.latebloom_debug = 0 # Debug Setting ## Security Settings - self.apecid_support = False # ApECID - self.amfi_status = True # Apple Mobile File Integrity - self.sip_status = True # System Integrity Protection - self.secure_status = False # Secure Boot Model - self.vault = False # EFI Vault - self.disable_cs_lv = False # Disable Library validation + self.apecid_support = False # ApECID + self.amfi_status = True # Apple Mobile File Integrity + self.sip_status = True # System Integrity Protection + self.secure_status = False # Secure Boot Model + self.vault = False # EFI Vault + self.disable_cs_lv = False # Disable Library validation + self.force_diagnostics = False # Force diags.efi chainloading for 5k iMacs and iMac Pro ## OS Settings self.os_support = 12.0 @@ -215,6 +216,10 @@ class Constants: def xhci_driver_path(self): return self.payload_path / Path("Drivers/XhciDxe.efi") + @property + def diags_launcher_path(self): + return self.payload_path / Path("Drivers/diags.efi") + # Kexts @property def payload_kexts_path(self): diff --git a/resources/install.py b/resources/install.py index 1f7c0a4c5..ec776a1ae 100644 --- a/resources/install.py +++ b/resources/install.py @@ -190,6 +190,20 @@ Please build OpenCore first!""" else: print("- Adding Internal Drive icon") shutil.copy(self.constants.icon_path_internal, mount_path) + + if self.constants.force_diagnostics is True: + # Chainload Diagnostics + # Required for 5k iMacs + print("- Adding 5K Display Patch") + Path(mount_path / Path("System/Library/CoreServices/.diagnostics/Drivers/HardwareDrivers")).mkdir(parents=True, exist_ok=True) + if self.constants.boot_efi is True: + path_boot_efi = mount_path / Path("EFI/BOOT/BOOTx64.efi") + else: + path_boot_efi = mount_path / Path("System/Library/CoreServices/boot.efi") + shutil.move(path_boot_efi, mount_path / Path("System/Library/CoreServices/.diagnostics/Drivers/HardwareDrivers/Product.efi")) + shutil.copy(self.constants.diags_launcher_path, mount_path / Path("System/Library/CoreServices")) + shutil.move(mount_path / Path("System/Library/CoreServices/diags.efi"), mount_path / Path("System/Library/CoreServices/boot.efi")) + print("- Cleaning install location") if not self.constants.recovery_status: print("- Unmounting EFI partition") From 83cffeb1e5b5c2ea8d7e7e52efd7d2dd3a8ceb89 Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk Date: Tue, 7 Dec 2021 20:19:14 -0700 Subject: [PATCH 2/6] Adjust comment --- resources/build.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/build.py b/resources/build.py index 3f9d08967..3ef04f4d7 100644 --- a/resources/build.py +++ b/resources/build.py @@ -728,13 +728,13 @@ class BuildOpenCore: # Check if model has 5K display # Apple has 2 modes for display handling on 5K iMacs and iMac Pro - # If at during any point in the boot chain an "unsupported" entry is booted, the firmware will tell the + # If at any point in the boot chain an "unsupported" entry is loaded, the firmware will tell the # Display Controller to enter a 4K compatible mode that only uses a single DisplayPort 1.2 stream internally. # This is to prevent situations where the system would boot into an enviroment that cannot handle the custom # dual DisplayPort 1.2 streams the 5k Display uses # To work around this issue, we trick the firmware into loading OpenCore through Apple's Hardware Diagnostic Tests - # Specifically hiding as diags_gui.efi under '/System/Library/CoreServices/.diagnostics/GUI/diags_gui.efi' + # Specifically hiding as Product.efi under '/System/Library/CoreServices/.diagnostics/Drivers/HardwareDrivers/Product.efi' try: smbios_data.smbios_dictionary[self.model]["5K Display"] From fd2662717c925fc6e95daf883141755e35e0e427 Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk Date: Tue, 7 Dec 2021 20:35:46 -0700 Subject: [PATCH 3/6] Avoid incorrectly setting Minimal spoof on GCN Macs --- data/smbios_data.py | 23 +++++++++++++++++++++++ resources/defaults.py | 6 +++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/data/smbios_data.py b/data/smbios_data.py index c3ef68851..03af3377c 100644 --- a/data/smbios_data.py +++ b/data/smbios_data.py @@ -1787,6 +1787,7 @@ smbios_dictionary = { "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "UGA Graphics": True, "Ethernet Chipset": "Marvell", + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.AMD.Archs.TeraScale_1, device_probe.NVIDIA.Archs.Tesla, @@ -1806,6 +1807,7 @@ smbios_dictionary = { "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "UGA Graphics": True, "Ethernet Chipset": "Marvell", + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.AMD.Archs.TeraScale_1, device_probe.NVIDIA.Archs.Tesla, @@ -1825,6 +1827,7 @@ smbios_dictionary = { "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "UGA Graphics": True, "Ethernet Chipset": "Marvell", + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.AMD.Archs.TeraScale_1, device_probe.NVIDIA.Archs.Tesla, @@ -1844,6 +1847,7 @@ smbios_dictionary = { "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "UGA Graphics": True, "Ethernet Chipset": "Marvell", + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.AMD.Archs.TeraScale_1, device_probe.NVIDIA.Archs.Tesla, @@ -1932,6 +1936,7 @@ smbios_dictionary = { "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "Ethernet Chipset": "Nvidia", "nForce Chipset": True, + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.NVIDIA.Archs.Tesla, ], @@ -1949,6 +1954,7 @@ smbios_dictionary = { "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "Ethernet Chipset": "Nvidia", "nForce Chipset": True, + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.NVIDIA.Archs.Tesla, ], @@ -1966,6 +1972,7 @@ smbios_dictionary = { "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "Ethernet Chipset": "Nvidia", "nForce Chipset": True, + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.NVIDIA.Archs.Tesla, ], @@ -1982,6 +1989,7 @@ smbios_dictionary = { "Wireless Model": device_probe.Atheros.Chipsets.AirPortAtheros40, "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "Ethernet Chipset": "Broadcom", + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.AMD.Archs.TeraScale_1, ], @@ -1998,6 +2006,7 @@ smbios_dictionary = { "Wireless Model": device_probe.Atheros.Chipsets.AirPortAtheros40, "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "Ethernet Chipset": "Broadcom", + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.AMD.Archs.TeraScale_1, device_probe.AMD.Archs.TeraScale_2, @@ -2015,6 +2024,7 @@ smbios_dictionary = { "Wireless Model": device_probe.Atheros.Chipsets.AirPortAtheros40, "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "Ethernet Chipset": "Broadcom", + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.AMD.Archs.TeraScale_1, device_probe.AMD.Archs.TeraScale_2, @@ -2032,6 +2042,7 @@ smbios_dictionary = { "Wireless Model": device_probe.Atheros.Chipsets.AirPortAtheros40, "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "Ethernet Chipset": "Broadcom", + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.Intel.Archs.Sandy_Bridge, device_probe.AMD.Archs.TeraScale_2, @@ -2049,6 +2060,7 @@ smbios_dictionary = { "Wireless Model": device_probe.Atheros.Chipsets.AirPortAtheros40, "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "Ethernet Chipset": "Broadcom", + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.Intel.Archs.Sandy_Bridge, device_probe.AMD.Archs.TeraScale_2, @@ -2068,6 +2080,7 @@ smbios_dictionary = { "Wireless Model": device_probe.Atheros.Chipsets.AirPortAtheros40, "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "Ethernet Chipset": "Broadcom", + "Socketed GPUs": "MXM", "Stock GPUs": [ device_probe.Intel.Archs.Sandy_Bridge, device_probe.AMD.Archs.TeraScale_2, @@ -2535,6 +2548,7 @@ smbios_dictionary = { "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2045, "UGA Graphics": True, "Ethernet Chipset": "Intel 80003ES2LAN", + "Socketed GPUs": "PCIe", "Stock GPUs": [ device_probe.NVIDIA.Archs.Curie ], @@ -2553,6 +2567,7 @@ smbios_dictionary = { "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2045, "UGA Graphics": True, "Ethernet Chipset": "Intel 80003ES2LAN", + "Socketed GPUs": "PCIe", "Stock GPUs": [ device_probe.NVIDIA.Archs.Curie ], @@ -2571,6 +2586,7 @@ smbios_dictionary = { "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2045, "UGA Graphics": True, "Ethernet Chipset": "Intel 80003ES2LAN", + "Socketed GPUs": "PCIe", "Stock GPUs": [ device_probe.AMD.Archs.TeraScale_1 ], @@ -2588,6 +2604,7 @@ smbios_dictionary = { "Wireless Model": device_probe.Atheros.Chipsets.AirPortAtheros40, "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "Ethernet Chipset": "Intel 82574L", + "Socketed GPUs": "PCIe", "Stock GPUs": [ device_probe.NVIDIA.Archs.Tesla ], @@ -2604,6 +2621,7 @@ smbios_dictionary = { "Wireless Model": device_probe.Broadcom.Chipsets.AirPortBrcm4331, "Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2046, "Ethernet Chipset": "Intel 82574L", + "Socketed GPUs": "PCIe", "Stock GPUs": [ device_probe.AMD.Archs.TeraScale_2 ], @@ -2636,6 +2654,7 @@ smbios_dictionary = { "Wireless Model": device_probe.Broadcom.Chipsets.AppleBCMWLANBusInterfacePCIe, "Bluetooth Model": bluetooth_data.bluetooth_data.UART, "Ethernet Chipset": "Aquantia", + "Socketed GPUs": "PCIe", "Stock GPUs": [ device_probe.AMD.Archs.Polaris, device_probe.AMD.Archs.Vega, @@ -2656,6 +2675,7 @@ smbios_dictionary = { "Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable, "UGA Graphics": True, "Ethernet Chipset": "Intel 80003ES2LAN", + "Socketed GPUs": "PCIe", "Stock GPUs": [ device_probe.AMD.Archs.R500 ], @@ -2674,6 +2694,7 @@ smbios_dictionary = { "Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable, "UGA Graphics": True, "Ethernet Chipset": "Intel 80003ES2LAN", + "Socketed GPUs": "PCIe", "Stock GPUs": [ device_probe.AMD.Archs.R500 ], @@ -2691,6 +2712,7 @@ smbios_dictionary = { "Wireless Model": None, "Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable, "Ethernet Chipset": "Intel 82574L", + "Socketed GPUs": "PCIe", "Stock GPUs": [ device_probe.NVIDIA.Archs.Tesla ], @@ -2706,6 +2728,7 @@ smbios_dictionary = { "Max OS Supported": os_data.os_data.leopard, "Wireless Model": None, "Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable, + "Socketed GPUs": "PCIe", "Stock GPUs": [ device_probe.Intel.Archs.GMA_950 ], diff --git a/resources/defaults.py b/resources/defaults.py index 7b2fcc6ca..822b5929e 100644 --- a/resources/defaults.py +++ b/resources/defaults.py @@ -41,7 +41,11 @@ class generate_defaults: device_probe.AMD.Archs.Navi, ]: # Allow H.265 on AMD - settings.serial_settings = "Minimal" + try: + smbios_data.smbios_dictionary[model]["Socketed GPUs"] + settings.serial_settings = "Minimal" + except KeyError: + pass break elif model in ["MacPro4,1", "MacPro5,1"]: # Allow H.265 on AMD From e30f8be03d99d0da42e434bc1142538abb3722a1 Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk Date: Wed, 8 Dec 2021 09:05:13 -0700 Subject: [PATCH 4/6] Streamline diags.efi injection, add GUI support --- resources/build.py | 22 ++++++++++++++++++---- resources/constants.py | 1 - resources/install.py | 13 ------------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/resources/build.py b/resources/build.py index 3ef04f4d7..24529fba6 100644 --- a/resources/build.py +++ b/resources/build.py @@ -53,6 +53,16 @@ class BuildOpenCore: else: print("- Adding Internal Drive icon") shutil.copy(self.constants.icon_path_internal, self.constants.opencore_release_folder) + + def chainload_diags(self): + Path(self.constants.opencore_release_folder / Path("System/Library/CoreServices/.diagnostics/Drivers/HardwareDrivers")).mkdir(parents=True, exist_ok=True) + if self.constants.boot_efi is True: + path_oc_loader = self.constants.opencore_release_folder / Path("EFI/BOOT/BOOTx64.efi") + else: + path_oc_loader = self.constants.opencore_release_folder / Path("System/Library/CoreServices/boot.efi") + shutil.move(path_oc_loader, self.constants.opencore_release_folder / Path("System/Library/CoreServices/.diagnostics/Drivers/HardwareDrivers/Product.efi")) + shutil.copy(self.constants.diags_launcher_path, self.constants.opencore_release_folder) + shutil.move(self.constants.opencore_release_folder / Path("diags.efi"), self.constants.opencore_release_folder / Path("boot.efi")) def build_efi(self): utilities.cls() @@ -735,14 +745,18 @@ class BuildOpenCore: # To work around this issue, we trick the firmware into loading OpenCore through Apple's Hardware Diagnostic Tests # Specifically hiding as Product.efi under '/System/Library/CoreServices/.diagnostics/Drivers/HardwareDrivers/Product.efi' + # The reason chainloading via ./Drivers/HardwareDrivers is possible is thanks to it being loaded via an encrypted file buffer + # whereas other drivers like ./qa_logger.efi is invoked via Device Path. try: smbios_data.smbios_dictionary[self.model]["5K Display"] print("- Adding 5K Display Patch") - # Set LauncherPath to '/System/Library/CoreServices/boot.efi' - self.config["Misc"]["Boot"]["LauncherPath"] = "\\System\\Library\\CoreServices\\boot.efi" - # Set Diagnostics Flag - self.constants.force_diagnostics = True + # Set LauncherPath to '/boot.efi' + # This is to ensure that only the Mac's firmware presents the boot option, but not OpenCore + # https://github.com/acidanthera/OpenCorePkg/blob/0.7.6/Library/OcAppleBootPolicyLib/OcAppleBootPolicyLib.c#L50-L73 + self.config["Misc"]["Boot"]["LauncherPath"] = "\\boot.efi" + # Setup diags.efi chainloading + self.chainload_diags() except KeyError: pass diff --git a/resources/constants.py b/resources/constants.py index 9a7cfbed2..66b9a6ef2 100644 --- a/resources/constants.py +++ b/resources/constants.py @@ -131,7 +131,6 @@ class Constants: self.secure_status = False # Secure Boot Model self.vault = False # EFI Vault self.disable_cs_lv = False # Disable Library validation - self.force_diagnostics = False # Force diags.efi chainloading for 5k iMacs and iMac Pro ## OS Settings self.os_support = 12.0 diff --git a/resources/install.py b/resources/install.py index ec776a1ae..091ccd9bf 100644 --- a/resources/install.py +++ b/resources/install.py @@ -191,19 +191,6 @@ Please build OpenCore first!""" print("- Adding Internal Drive icon") shutil.copy(self.constants.icon_path_internal, mount_path) - if self.constants.force_diagnostics is True: - # Chainload Diagnostics - # Required for 5k iMacs - print("- Adding 5K Display Patch") - Path(mount_path / Path("System/Library/CoreServices/.diagnostics/Drivers/HardwareDrivers")).mkdir(parents=True, exist_ok=True) - if self.constants.boot_efi is True: - path_boot_efi = mount_path / Path("EFI/BOOT/BOOTx64.efi") - else: - path_boot_efi = mount_path / Path("System/Library/CoreServices/boot.efi") - shutil.move(path_boot_efi, mount_path / Path("System/Library/CoreServices/.diagnostics/Drivers/HardwareDrivers/Product.efi")) - shutil.copy(self.constants.diags_launcher_path, mount_path / Path("System/Library/CoreServices")) - shutil.move(mount_path / Path("System/Library/CoreServices/diags.efi"), mount_path / Path("System/Library/CoreServices/boot.efi")) - print("- Cleaning install location") if not self.constants.recovery_status: print("- Unmounting EFI partition") From f75f1aa87a6718255e8172ebbafeb0a23c2249c2 Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk Date: Wed, 8 Dec 2021 09:16:28 -0700 Subject: [PATCH 5/6] Ensure boot.efi is copied to root in TUI --- resources/install.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/resources/install.py b/resources/install.py index 091ccd9bf..4c0991475 100644 --- a/resources/install.py +++ b/resources/install.py @@ -5,6 +5,7 @@ import plistlib import subprocess import shutil +import os from pathlib import Path from resources import utilities, constants from data import os_data @@ -168,9 +169,13 @@ Please build OpenCore first!""" if (mount_path / Path("System")).exists(): print("- Removing preexisting System folder") shutil.rmtree(mount_path / Path("System"), onerror=rmtree_handler) + if (mount_path / Path("boot.efi")).exists(): + print("- Removing preexisting boot.efi") + os.remove(mount_path / Path("boot.efi")) print("- Copying OpenCore onto EFI partition") shutil.copytree(self.constants.opencore_release_folder / Path("EFI/OC"), mount_path / Path("EFI/OC")) shutil.copytree(self.constants.opencore_release_folder / Path("System"), mount_path / Path("System")) + shutil.copy(self.constants.opencore_release_folder / Path("boot.efi"), mount_path / Path("boot.efi")) if self.constants.boot_efi is True: print("- Converting Bootstrap to BOOTx64.efi") if (mount_path / Path("EFI/BOOT")).exists(): From 52225e15b236a4a3079edfbb387fd48aff6976f4 Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk Date: Wed, 8 Dec 2021 11:12:19 -0700 Subject: [PATCH 6/6] Only copy boot.efi if present --- resources/install.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/install.py b/resources/install.py index 4c0991475..7d919f3ad 100644 --- a/resources/install.py +++ b/resources/install.py @@ -175,7 +175,8 @@ Please build OpenCore first!""" print("- Copying OpenCore onto EFI partition") shutil.copytree(self.constants.opencore_release_folder / Path("EFI/OC"), mount_path / Path("EFI/OC")) shutil.copytree(self.constants.opencore_release_folder / Path("System"), mount_path / Path("System")) - shutil.copy(self.constants.opencore_release_folder / Path("boot.efi"), mount_path / Path("boot.efi")) + if Path(self.constants.opencore_release_folder / Path("boot.efi")).exists(): + shutil.copy(self.constants.opencore_release_folder / Path("boot.efi"), mount_path / Path("boot.efi")) if self.constants.boot_efi is True: print("- Converting Bootstrap to BOOTx64.efi") if (mount_path / Path("EFI/BOOT")).exists():