From 06dbb6acbbd322b3123820c73ed4371560efc558 Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Fri, 31 Jul 2020 15:56:14 -0700 Subject: [PATCH] [ENOMEM] in GSUB ChainContext subsetting check maps for allocation errors. --- src/hb-ot-layout-gsubgpos.hh | 6 ++++++ ...-minimized-hb-subset-fuzzer-4880059756969984 | Bin 0 -> 45902 bytes 2 files changed, 6 insertions(+) create mode 100644 test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-4880059756969984 diff --git a/src/hb-ot-layout-gsubgpos.hh b/src/hb-ot-layout-gsubgpos.hh index cf6afb5c6..6969d7870 100644 --- a/src/hb-ot-layout-gsubgpos.hh +++ b/src/hb-ot-layout-gsubgpos.hh @@ -2777,13 +2777,19 @@ struct ChainContextFormat2 hb_map_t backtrack_klass_map; out->backtrackClassDef.serialize_subset (c, backtrackClassDef, this, &backtrack_klass_map); + if (unlikely (!c->serializer->check_success (!backtrack_klass_map.in_error ()))) + return_trace (false); // subset inputClassDef based on glyphs survived in Coverage subsetting hb_map_t input_klass_map; out->inputClassDef.serialize_subset (c, inputClassDef, this, &input_klass_map); + if (unlikely (!c->serializer->check_success (!input_klass_map.in_error ()))) + return_trace (false); hb_map_t lookahead_klass_map; out->lookaheadClassDef.serialize_subset (c, lookaheadClassDef, this, &lookahead_klass_map); + if (unlikely (!c->serializer->check_success (!lookahead_klass_map.in_error ()))) + return_trace (false); unsigned non_zero_index = 0, index = 0; bool ret = true; diff --git a/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-4880059756969984 b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-4880059756969984 new file mode 100644 index 0000000000000000000000000000000000000000..0a0f649ca4182e461bea21447e9cce45829a09bf GIT binary patch literal 45902 zcmeHw2Vk7VmH*7QRjXBRR$p~lTGiF6SvHa_OD?i3WVv9PWm~oka)~S#90GFY97VcXqZv(ZS!)W-!LRAL%T=v!{2#Txb8C`>nhO zxR%ZZ3#V`C7!EL|T^Z0nfBv33w!UjTNM=ry#@KYG;m-~SGVy0+StYy7E@aH|=uk)d%#I5-?IhOljIQn9 zx}o~8K8Yd?@%`+eXKi@-+op%eOO$^s{x*FsT6_$!^0LdmqOj^9vQ}mzuJQ1H)^k`k zD@B)O#zZl9fByv=18iu=q#f^xP&meFh`j*^|B9{);_nZ zkHrr4`_`e)txlw(BdkcbAV6BgSF{a#7-VkM6Ldf;c#LM>wCP$rim|b^{Zj|fj64hb z6Lhhj6+)9xij{GGJypaJJe}7HpR-YRL?rn|9My=2BQMc$4#%t-<8~wd652(0sUc&H z;b0GqjhcetL{(S>L;#V$^2ytolg3WAv*>eRGT1bc;$pGj%nC>2BwoN`w21_ME{S zD8gtx*&-t-Q>k<>0cMK$R>YJ6JC6U+yYGH=YcxFkrR|a6{QqlvB)W6l#6^8v$oLeD zQ8r(jYIJ$`GV7`)+q-sV(i!GyOjq?^3P_?1ruHm zW3OCAR=EF;?op;`4Vc7{mQD%{li!OV$Dvbxsji(Ts?Hosy}_V1#rbT&(zr&cLZ)p9Be$R%M$&95Y zW6HaORv7#M{|xD5Iy~$8*ABedI0~Ko?k%uqZ*Ew>apd9^xxZ%YA@J+oMg57%=bL|- zx09V2*YYv5SWqrwFZH&ZMgGf-|5V=*xY&A!m2^+8(kKD>EUyIKS>m8yb zN--XetRQ=t--DTIHqC)5MfjK^F;7t{v3v;GvjrQ)yh+9u~9~tPYrVCrj5FSglsWlDU&5Yp1bV{u(RPu4M&U2GTBM zOSM|md=+cpI&08gWiIV5Oc+lwm!+7w`KfRNY!Xjo3$@Lx2W|nC%ahqj{1#TB-O9?e zS*+Hw0O4P-7PgO7@Kaa^T&b3bdXWbzUBJJ?=E5)Jf7TCaJJ=k)ljUoxSgUp_tJc27 zV!_uG4Q%g~0U+9j+FZCt9I0#^lhFXE3w ze#Pue&5!o|2)G)y)KUolNw_zWzSZz=fe(3T-QfM_Xy4VW)Y6CWCBTtubLz>B`1e4yjs zMcQkulz*M&Agx1-0>7`Ij6^u}4M%_Qbx4Qo$ro~thvtxDEr>0&Ly)aOc0=x@t;aF-(Q2jKZ6^xq>W1CDfSOuv>u_h~$! z-}yX!2g)qr_28o({87IyhC|yyFLaXfTYnFps2=JEck^!T2Q{$|3((Vk~1kX?bup=pQF@(Ab9GuGQ$z@|$6wD1JVC8W%L) z!u`YZN0y)xFFwA(ojrs15r|``RnR^wW(>2Vx*=dr>5m-Dam$+qc#;D_ZHT~ z`P`YQS-EMG;*Pon!SHL6-?U7@Z+-2ev^nw3LbIYzs^qmxZ>)WBY2e)qkK5hvbZfkr zSV8+M(0;TO?Vlste{c7u0u>C9kp0?!O<$=HOnC0)TM4kea zwFHuZN`NQF2U*&poqw<+ z^_7;(!24X{k-f+MN$}o*`rgx?2mWl}?d-j7lX`HB`uz~bJ(I z4+K%~9-}@OOl@(DQ6C(m{*I8j}adH3o)y% z#H?B>W>qW+8uIfCu$D>i$!SgmFwxNhfoy!5-Ojhv&!{ZbtbFE%j=@vg+fN%@IAdCK zc1moD-4|E)L48fhNvT@H)|LEcfq83Y&00hL=1rOD?M3OC(axfTbgH)lv+aLilY)&g zW^=07Z?_lZV^tDdb4az9*3Xzym)=%Zzo2Tc*<0B<*fAxjQg26UO>R!vvL0R&_+4vb z-E{5?@Z?zqs?M?bhUQ9Xw?8uNHs+gsTDCFYd?c(qW=czmu=4ZJbq@9}j#p`BEx-)= zGf)?^wFdrXacmw=zi0ybMJzJ?4HMAc5JGXrQ57({RV-FDjLd-R`a&yF#6qmhvq z-Xa<@UogCgtrQJO*QaS*G-N&ScDAUUrrB`nciFchQok#x8&LK_Q8vZ^gmeS@zMux4 zKQ7ANAj-a>i^`VN)C5WWXLd;tHE}Mf|J+C_0vcYfJ;mY}^Cif&bqcMm?I{U8bINmS z($ezdGvc+AJF8=&7rC4n$)7(){A&yOTJ0y;zq~KHr9*Gz@8Mj-&Tgl;{we!NYv)~v zKLO6LxZ(G+hh;5EYE4Yb;MCN#?|ECRJlPeKGi)|pw`DDFuB<4_&nedOrr>yqa$d`R zj(w?xv7{uQr6BpjY5ZE=8h8|U07&B(h%_9NQ)(XE`=AKCF-9gxQO*u5?4tD-shw%{ z7=OmXoS3-Uo#V_bF3!j*DJ%WRRh(LokyBVyFnNxL>i?EDpF1sOlrKpRAq-Br0Dg)x zS+U$lERz3d4<)dotD^8GIc)BJmRk? zt3S$b_NHf_y!;c&kKv2MV0j2p0)n@^l%A|INAD?Glzmo_ z)$+A1GnZFRPVefR-t4eHd9%&NuemWQKbH@m9@kR3B*_!EBqk?u-noVOD^jakixP5T zm&AFJmSp=gR^mjg7JJow;2{Ghq?Xky8K42i7A)9e1sZEkvv~!c1r&2 zY13wTvNNW(1l}B3y?WE8)vHGqcAnJQ+1Ywh=R)nJ&v65SD;_LnZvmekx~vk*X9%JM zLX(n0FWViaZM8tV(GBR7kE_~ZCOPvGE8@D_rY@MeuqZP~~SW=qkZfsxY zjJ7Utrn&Chvb1aN?6bNuFDy$-Om5FE($24#eQsfQRgo8RT8fj`g{VJ;QVY_b+FQ(@(2wSnP41a`U=vH}~}Z z=-j=T-l?+-x=!P_@f&i=@^Ud=U8w6m$i%|j%#U7y8d$Ik!t~}#fFR6WeF1b@=?irl z4G&=(09`^K3L0{Aqo(t3H_wmnb(W`Pk^d!!zoz{_=nv=i4P3pi) zc=yzp*uc`j{Y`okqtCKYC9Wf#~_cJ(#Qm^Zz;pxCvWUvOfLSUQp$lbN1` zh9>ztXE!!9q$gHP>ONkZY#~xFgeFcIFL_!Agc@N8I(Wo3)Q+iUi2N^}u^>M)C3W_c zmRYIEnR&hKIYmV|*~P`#zRXFf+1cUZpEE7bA0Ib4qpq#3F3lSkU+=0-nwML&3P8{flDHF!QzC6UAGgxhqX=$@A2^aKCtiL^G?)UnKD zL&s*-W>m$-_@QHgKb^1)QpRMEkNfxzhWi&WVnSpbK^&Zs4|Gfxh@dBSbA!7{uc z`a6!5FdyC>kZl!{TwY47Mnmn3XlbeF(K6mp{V4ZTV5DApB7IkK_DyrUXV+~%w<56r z1bOGUNjl7*5WM5O$H%vdnuX@m+N%&J-~Y;g414=B>}5RGVyA2Kv|+5-;$U-g(b_83 z@Zm|Ulg(#~afq~4^L~!;?8?c_%?bQ0Hzy~T&oje5f%q9A&L?nxuAY;7ALR@@ zo12^Dj!ESALOXH;&x$fvgM`SCmdif|Rk4WX6!vMy-FELW`ml`rLYLgu)Y z#A;w{mP00G=u#hTnUR?}qXjTy`n1W}Ii+xp=_~7M2HNWYSI+D?wW@Z>((2kJsM&?y zyn^qdntf^xYlFlvDapwOG?T#9NvIWd`i?P+q(__w5h9i22D@dg@ukY=L}w+)a|IOjGNs$ZEm+GGb=YY zE7L=q<9e4Df%9mz)HFe-k6DwmZibogpa1nrEEzoLjxO+#hAkWx=CsuO0<-A@$2LpO z6SG1ZONKONfQv*SZQ2}&Z9Q0#Yo}mwoH}_wzphS=s133?H7%m%_w};e$<2q~U`VbaKQY#FOP10<0bg8bgq?i)XSc zv|rI6N(vi9nL)z{+oqFHJBCrx7am4DGxEBL1`8NgSEk1qOFU`r)V#WcxUzJAYpWm2&ji0`>f8v+PmCr=WCr*Uqbcdjj3%BO zHk@)H4^LKBE@XnE9)2s%{!(FGl5m%m@2_iUz&K4ygQYIWFDXg7$Gt7y7VW&<8Rc@^ z=8U$*Z*%i!%It1y%+cuRqcK*uy)00NlG1Up>(iFPXALF1L+;B!p~>!Carft@1BWCO<^F`AY{<4Vi7MB4&?bjHRz zMgsTF;ZqyIShTHOGEVZnZlg#0vg+U}^=4HSie}l;c37P3wX@ zu?J~DyXzaEv#_6OX&irI{5x!R`-}ultJ55KY>j;C9Ps3fi*p42Xmz)d6nSDy48+L0 z=LU9@d>wYQfLXo1HYZNw=U))FjkE6;Ys#W}%T8qW-!xvrb>`HXxrTO$$>4CgVl60{|7Tp3bJJjb%EI=88;LiHP`5i z_ybyiYEHvQFgi3L(kMwV`q*Lri!n+jD*SdiW+w9|O=i&jlLO60oY^$I@;zuN(^kU@ zQSak4yhzp`-bY=7d~R?r%@5pDW*_8wfKLl**EVPyjbWNSD^PMYN=~JcBa9~!o(&c9 zB{Z(@;q%Rr&N~Mq4XbHX9S)hg^bE^vaom}KSFdoSl7wPxk@>caAIMa35psk#X=fdHyiCIxHIEJEJttEW^fhadWxLi|Te5P`6Oga1mV+3tFb(7S;zykhUzEq1+ zeqP|hQmM7ttlnOfTL6A{nEZy0)w~oj8c0Qg$LnN1C-A^z`@zM@LDG?IOLj%MOnV0N zN)jDP<|WYkEOZ16OG9P`M}vmWkrDIzQpOZq``Vd3J!hUeW9$6+TW16^!W+ZyIDO6F z8A(Zt&+q6se{rDiYNKJ3CK=5lEnEl?P<7M6zO0gJ7i>&a_d;3gsb}`gU&g;$YAveKlaGX~e39;s>#N5&t(sy>Wa3M+M+v{n&}6?K#{STOxz_UiMuw2TB{vogk; zEUg;dhBmHbnU);1F%w4!7-@27h zvTWHU^_9NXIg77|BkPHSO3Y9^n`Wqgo?~@pF23TF)-4q$)Bs!c8|rrF&{? zmx_PXQ-OJgX78YSXsS`h6qV4p53c8Bw;koHjT58Uig3L_BYG|%aS5GNDx;b~BOt65ShcC*$BbQZP%GXtOr0$6Hb=c^g*0zU zV}JRLZ#=tU!=oE;hk1fESfKk3m~ZmU8g#KRd5o|Bl>N@^iekH%2|A^l$&r^zvvEV1^ z(X|y+9((?JKL%TYcnuQPkR@ZynwBbVQb3BiMr<{R4*!xKIfa!J(@%=bK*~z59$+gX za>056A#A9~hU%z36m1Z~oM8Pa{t>W)4PppI(whsIW?*p02IDA2Bmjdgm9KWY4*m&6 zw_+ec0TiJ&`31U|*5G0B&NNh?MZK`A1ssH285qB>EJ1FRbj@rn9T0*H(> zVzPkpQ1ffkh%u@d4K1M-%7#+_XetKnHj=5ycvpgoM#IHk4JjZ^OHIlz!FdY~AN_T} zpsF-9$(NGc-~)!3cBH=JY)p^Ojkh{1@$RSur`wUO6(qUc(GGXtwC%I!Y;~=4^c&9y~Al2`(Ijl~uxombvRFXwYbw@?J ztT8rwdS+s#W=(Tg6Ox^2PJ4#S5fkN3w#L}GBRVc7U9-hF?NRZrSi4iRIc#xGY@4E- zHqC-!ELOK8Iw>kWPQwQbEp}I`DLD>2$(u_nY=Vv{E2WiPfT#mC0w#KmMqJ6y4u?(}HQre)2{ zswuB%Nr_)PEwwJEAQKXqfuwX)kJB2hCB(TnhrH~zSg4FG6|&@3ZgW~)`RE&qH8!P^ijK0|G;5SKI?fhr)sn0U z@vbOKva`$?9Tj8I+$e9a)vDP! z#PE{MQyj6mJ3H#WKRHSBZ;tBy)|_eW=~+D;?v(tzyz-iXx`a9H9pCJGa%Nw8bW%}s zdqZb~(-Ob93y1SqVB-TT;_X5JdRt9~Y2QR2bR~p_Q#gFsR)j4$^-VUyR-AUH8(|wx zCp|`(KFC^XgdO^8VsTxZwdB@_=^j#LjmTs?q2fCpFi{h;w8G#hVU zufVyy2Ok3&!k;IojEy2Tz&0Y+FxxEhR^l3tLc^%9A1Oq$2$!!Oh~XWS*)Qr?%{HN| zeo!qEv>UD5wNa^fv_;*E6y6U4&40na4^~^-V{~R3BQkeE_ZgYBh#)Ky6Yr zRD`uDoYsTZksOGZ5wy7ZYd|ksBlT()Fr;@|KuvU=$WQ#PF?4GI@=%FXS7^>qsgMlU2`Q}* zbfl%h^#serlvJg#QlafVRd7o(AwH;OBjAkMOf8aa-2{GuOAqCR#zcqUf^sXqBFl|> zg4#6%N25ZPN+B9~QWhTcNC))29Ig|uY;=iHNBu|TlUzuKB;g8_F${jU2rOw3wSi<2 zsRu&aO*NKcd{5jTlSL^+w*mdW96VDmc_4MEN5lcOec@O;Rtrv+g9EYT>wzPk zrt!TR`T79|gk3on2OiL@6>?dLd}Lp!cJgH@q;(_@v+qJVU5(WB$U$88fvz9)tBh8x zKnjf?;*G4?M)124ajH?(vsTa$mhw_su!MtqnCuJbBlX8hk$=1%P>pNxw+WOaNh(oU zJL=mZ$k_utQEfnMfNdR%t6Y>r%E9dO<-m*x?xZBv3)xC-9v;&jX?aMFq&vhfwVL{n z+C^5H^pfxn=W;GDw)`$y8C z){uN@ojC(sg|A}F6-+OvBF~>*k-HCk$@Z(6!Gn)=lWqn}P*O;nr|PCsY4l2sQQAeh zXM;fOAh6p?0@)5rv~jMNBX5W3$2$%8R-&9h2~T>7m?)FL*i7bvNw{F`caN3 z8Y%tAL#r&Z;iMfjI!SjZ7tLL5cqNX)Bj`mJ@WDO05w+5cvjJG@8PdZc_+)oiqsQf3 zMZMxeZ^^%4iS%IY)-7t855EtgE=X&Jz%BsvAYWvOcrd@w%9K{69pIbB)h2LBUj`&s ztkrl4jOwirf1w=oU>!9REt`kcSr488({0D6;ZrUAJgnfy+tyX_E=gwH9}}crg`fupYZN|SSuTv5`vrJAH> zP#x5RG%|@BrCp(8nrc*iBB{vIN{-cflVnHorMXp(dcw##YYlQMOQ6~$+bH{l#_V$B zBt4XMNeL@EPjwQH)Q`lm$*G(Nh}wfxYOS1MNQ;R>N|$Y-m6EdFa$ZuBFk40(lVsHz zL28cd2P#S0(lx?L(VQqXUG=ooY|=yOZz&yW73m1svXw&frp%jTQ!ZAakQwG%1c8{HH2tafF+X| z(?H6hLmi~lmg=N|VJbK^+T4QBhIgVakjBECB#x4_~uCy5&Hgupg9G1rK;S2%(8O)MQhisFo9VWM-&NWn9&A zFZ8gErUSXSQ2HwSMe#l#CCDuvaWI6^7Ku`g?Zbq8EB#T+54o^V3k0c6rWD36m*wOy z4{zjxMw&W;YQqygC4CwFQ|+7w&7^Y8N$|wlsro09k(Am=DasVn@`q}XlO&Ba(lVkT zt(IH3)dHuc5;`c6OCp-K4GK@PD1(-5a&e(-hBRuljG=Kh06N8=lz4Ej(4hcnsVUu1 zn&b4m;8IGQ7EDx+JVc`DpRC!i7@KMVNO~x#)l$-wg0z6g(gtahXmdgQZh=o+(~^%C zTpEg~gOPSkP>Psc6_Pos<^pblYZ zjBG(3+7ij}C;KvZf}`Nay7dQs`1E)FMwTC(-(#O%rXEda+@djah)U zlr$fB@aa&p%@l4AohNWKNLwTC%dC*5KGOr+H`j*!I!r1N4Nswow}x)xT2LsV!vFNbfg_!vYtME@)NI4KC!N zf*eDttcm%MYcsMlYGlh6P$|?Ns+sDO8%5gqlZ=RuwR)%}Bxw>gZNS23KRK34G&#n z$nCcpA*NN7_JMj*>4H4ckQ+QjFZ+v*oYY!f9`-4&W$s9;e6?C6?WY+#bdyN>pthWH ztr@DHa>FZEQ>14VLcd6_sVtfawhEp?*O!ABH>4$W^+FP-^?`Y;Mx#d_n8=m6)IF)0 zrVMBwLbD)2c?eE5QmG_Kq8^A?I@ukvx>O_iG;2==j#j%QWwm)#^{Ey}F6daCR)q5K z%xo3OnQ})u3RrJQR<5yBJ)v@z*I2aXCc95#mF9aXag3Yan!PVgJY7i8L7mUA8Z?j6 z=-iH+6RhPxaiX@(94E3iv-V!_6uKohEt9dPryUL{9}RSKNkFPVrbSMHktf^G=~XS9 zRF{*g(;WygAPtwfq?{oXA#{l!yy;R(E(d@tgKndUPi2TnJnM`OP}^KJDTFRXq{@-1 zDK(G_7#e!=d_t)MQA&ZSMFWYFI!m=mbtj$sP>0ru4(&6h5LKSqG=_HI@mg)>3f>L{ zEfU8zqoL)RT{?b)B2NM3M5_)3LQmUN3+3>n>6ZGQOdx3h9TU*7rok$Q6b(grl0rQp zQ`A&;ya`8^x)r@R0G%LxQwuJ-l_&nTphsyK(L%$NI_XmAl2cB`ro`wC0@X+3<(&JM zVC_=5A-L2M?+6HH=)NDpO1)lX0aXtGZXt+u<#sz1#xq>$<@IY|MbP^CSLeG5V^e z4zb_sLn#Xo>HvN*=;%U=Uc_1eNY`8QakevCyd2fe@R3MRPzutqhbEOs+h|L8(?J_CvOtwVSF%xA{sq;}El|4_qkTM(Tl8$mvD;A2~ zX*XV2@!-Nu*4K?(R4-ll(XN(y4V=QC52$Jl<%&v{^$}-ME;I091j%z7%BHJUD(e)% zC!L@6fd|DWNsc&egX;n8MJio4E)BND& zwv@7>op=xGCW=nTwohBngGKg34bkWM)cT%9%K%-lrPXS&P}nR44JQ_#vGoT~ZvFQlU{s zoKQ{F*A$}~Xe5v(&4)}WjYeVc#jq@kv|RP+LQ#&YfyxNgcQtYpoyvDCYa!*O_@J^) zIgqB1%p|wcc92YtUvBVgA7lY(Nkj|eiCz*|0lT{qFAId8$yb41z6e%{&>-ANu)VbC zT8r;*AzM5Z{L-s%XNo<=a@0dF(#Y2n==>r0l@mG-+=Rs_EeYtw1hV#Y8b!+}I$N(2 zAv!6e6AIaawZJV#T)yBmf|ko2*i5neqig4`u{1NZKybJQqe`9-DBsMbFtb2OFJPQQ zA0nYgzm2}nZ2W`YOTdrI;0uID*&o@P_&uTb*#Y)vc96Zr-e!l{$NW`xgull3v3J-9 z_yqzBUZ1w%~wYp z`f(ZLu^fFvr?{)oPbBZNu;d*=pVN%F0oQ}H%%;=x&FJ;5kli-+b#^ZM20M?PkA30= z>_Yqw)J6DK$BWsw*$(y(_zuSJuuIu@@v~FkW0$jk#80eT!LGztV_t>d7`O)C=Xfpq zXLcR?0lS{>$M-wl$Zo>-O5VbLgcr(x%wNar&$qLmushjZ?5FH*b`QSI?Pu&hc0YT7 z{R?}L{hU3-{*^t97q}l`zhsZHU$Mv7<7_v+d+|y3Yy3{cZ`jl9x9l1AEZf6=$DU)) zvlsC~`pfJU_HS%2`#pP=y@p?f*w0?acjv#s{+;~-pT59{2RJ_8fsa~5aTkx~ZXUxv zX8|6|<9IyBw_Nhv#w+JIemb^LRf01AhZw zuu_a~W-H~Bc^NO~US7c~c@?i_pYR%9i!V~D!^h_9@ihUByb0fT^Y46=Pvz6_eL8>S zZ{llZX7F}ClXvh=d;`#1d=8(>yH1{mFNB%Td-%z`moMObd?8=N@qtW!3cma2ZT=2F zou7dZFfYT`*eqwCvd{Rt_=d{&@yjEB<_Gy2eilEQ5An5p9beBk@UQVelhcLm_?Eoe`A_&A z{7!xs|0%zl-^1_aKjZiD`}qU>U-*Ok=lmi5ul!;D3;qcIC4ZFvia*95=ezk6{7L?6 z{uKWWf13Z6Kf|Bpd-(78bNqS!0)LUegx@kbiXZ3tg#X?;bJOs8$EI~_s;k@D9r%@{ z6~pV-Ir^n-hH+;%fGoxMPu9-2@(KfSx#io$~NB@BE zqi3vGGrVHc+EqgXTccN)Vb_e6>qq)mtQc4~;#x5lw70M5N7eR~(rX7F{UeT<215e| zLo+2q1HyC79Lwz*KyYAP|H!%(j+q8~1Jbw8lqC)bFS^rYBzms}ociJoQVjUF_^)>+H@hpmGE_SqwAhE@*P*9gxs+i1xeqb0LtOV&uy&Ng^n zBYoSN%D&#YhG09S-(IcFo}-;|mJ{3!4Q$+aR`eXR+UT>)uzijYzx^!Xx#tFP?LIps zf*(U0SU1$aZsnR4_AZ%eNM`B^qQl2z9@`F!Zhu_B-GCOhN8iJeIel4V2EPx`gY+km z!t759_-jBbsP0Dkoj`j8Z85)3{{-fl*`E?rzY*|h0e=ff<=#!@>W8UZ{e4mHGa~(2 z0rvn>x#uDMr}`@>_a27dHACqsqTJtYr>|FoWkns&3-|({Cd!Q!JmANL>@SLxmjF3Z zzDeISWPh3H3btc1V1?e2C73Yq$>oV3{Xp4;;i7GjhOfQ);*Wl$?8+~mD>z5l zwG`7|EW05XD{y9V$&9Eu-FK`rfh!@ynQx=x>+pM)+x!F8#9SLgN%Gdj)Ra zc)Y@tjUxRWxPuCV@L@9?5_%&f#>zgSxPGLZ9DP~~Pq|zA3YI7850y_sI=%-<&=!IQ zeOF$sC=jlf;d1;E$3##0bbYjZ7F_p46cgd~J>`8etvup_NaX|FG8I0yU%u+t>7l9M zdC0_+51V1gY^#kS4=r5MPfVS-w@gwE0gU2@` z<<)O2e-HE@BK?SdsQfcQzt^iNTK!Y6Q{Z-aV}*ajn{4 z^thIgzjwPn>b-ajal!%br6)$}-Faek|20(lZtpczGGukVssZ6!@UwKctGGzt zV5SqWd4#_y>EQ+ zjNZ4tM4kv%&im2$a=b^!4jUO(xhK;25465hbqo8@f90_!kdx* zTop(D3lZO8xgnIBvWq4sFu! zCs#S7UtKvYa8%}=%B_?Z_Rzu>Pvv<8QPxG|2S2Fu5*e?&JQyDw){j)mxjYy-E?jvX z>bVK-)^SN8h|0S_bDu)#hg2xouY4#tMqzzd<)gwMt$Y&vJVW7ekE`+p>;)n`m4@_C z&XLO3nXB?mDbLFHLWq+qKcqNlj=+5;!&RE_N2{DhJeGXq~Sp0e!uev1^9~`T?9cA9Fk5)Ypj0Im0Qyl(d zVfd$HylRh$uX+jjUj?skz`dpL$Qz>J`ktzf^xaiQK@%9GIZ$oIFA=+BygGgif22Ch z=2d6ud#dyGBh{ru1HV!qt*%q_D5F{6_g1$e+@bFlG<01x_8?F1Si}hE`>U4#e}=*% zypqEDf$FmaF1>n#Osj^Ct3FrXTYVw?9W1^2GJQMfMys#X4^>|a-fl4Hb|LQ_aQDji zM6mk7@hR1hpzPhq`?Q%>{hS$AA?%8c2mJ1X8&z@XSHAQmTy;@8351a~WotGP?!Ywk1rhd}!%(w>B*pMeBkfZGfAI&g2Q zGC=bl;vedJYL3AFjImn$(0#2_AFYj5G|JbH)F$iuYcs~;hiW}4jC{p#UKQ8huC3J% z)izRG-%~pcY3+#5K^Z*)cc6Ar5bbG5Uyft$b{uVAkK^Wxp>YvwjesN6$r6uZ!=L&a!ZG+M>s{kOnospzKFl$`N_~&74(ZLT#n-BGAl{+B?duwg zkNSGW`tFwsgK|cFOF(x9@~_k%@}0$8z73R$_-5oiSHBVAy+F8p7Xr5fG?#(?O4NI; zL3ac2yYwTzU^Tjz(&#}MSR?yze&^dQF}|mzPtf-q+$(VV6b`hb6xI*<-hn%a_+kBk z?-QA>rqDXOqGznmE$9!_B_cdY;q}qF9Q{aLp^77|46ZuDI@TmXNZ(&qAA&ee)R?F5se2EC`)~{qF;I6TB02eEP zkl!i7^h>;W^bhn8j_cd-mXq-dz9&QsBV=*y<@ zkZq)gKEFv%9scN1`4wKp75#srulQ5Gs9)6^?kheNK0KZY&gltHS9FH2zopCBNwq`a z!~1W)zF*%>+XNcC_x?O}- zdn5YRpKb?{^=`memMSKrENtx;v0P}>Y4~ZAT}Un#rIrXD%K?`&FH#5b!{8(}94+Au zh$_&GuwJo^|Djk#+=H}jDEl6i&8+td_%i|T6Yzck9}w_g04;cv1K(JRw=hUXKLqq3 z--Fu`u>M@YhXDVpxcpa9!@~mpLcm7^{H1`83ivBPaEX?JOZ;vmxP%-$;O{Y!E-p>2 zyAl4c;_?Ym&yxbuwJWneC7`%mwLUGv@^UqjET0kS;&Rox2Vu^#(08zcW4~fbE5#yQ z_cGBw=$!RA&{=@nE84tAw0Tst`FW%;>k9(DI3d+bBK>6nUzw2V-$eRe0e=t3QR4wN zQO&Oky4M8U2dD|^SfMk-^L~-?I$#3*0uwYf8*m-o#bMABJ|lY0QK;rW2q^FqK|croDZd^X_Sd@kSv{A9p~`6+;p@lyexLY;ruj)3(I0smdV zQ33xb;F|*eNx-)Rd|SYG1bkP(_XK=jzykvQS-^t=egGKW&JTf$wH^XAd-5a1EEu=r zd-5+KbcZLT`#6N|$b@wN5khx#Lb|_((0wu?-KQd@2$nIKO%}GsFCepiHet%=H%c8D zpC>S39y+awIErmTHEbN|_&JCPsVpMhDxeLJr}z23*9-0Z$XQe7Ue{gRtcXge^ZHZ24Y{lOGCAVzziu zUV?y$0wxKVEMSU&sRE`6I7z^CKv6%o`(Lg83{hUDfLQ`&3z#Edu7Dl^^90NnumCWM zHidW}(4+5!kHcNSGQ4{@4Q<|!FwI=;km`$&PA}p;X!CCP%vQLaV3B~u0+t9^3i#zq zoh-^I6R=!BuYeVRU%u2zQAU-3)dJQCSPS?!vw}9CsIyK$zku}uHVD`#V3UB&0!|UI zMZl>7P80AX0b2!Z+s-cQ!g|Qr+5SWae?yyrA?N)_XZf8yy$j|#`|sRlO62sFF-_PFjtX(iSwf|0L(9d*G3O$PcIktMqVxHXF z+S(2*-jKU|!~HkKU{O*Clkw@M}wjbrUn<#%w_#|E?E0*lbIhG9!x6!HK+MD6z_%>?pW`&lE zkcWTwDpn%C?D>tKU&s$Aa`OML-SLPv{r!$7xQmVO-|u*Wg;FzwyOm+MtqS}1J0AA; zJ07JBHy$;rTf4|oW(v{F4?k8G;F^Es6IQ&_` z_~7vWu6vyvYD@UNPAjzs_*;elf9GDuiS~SjdmWMn^T!g@U-T!Fk9dakf!izM9u=3q zpHBOX$M27vo1xMeNSbeX5kqns-H&>^P z#nS!DDJ-s=_xfoQi7RCPI(@%?go0@8HuAyycHtR7|EB-q;J6v~U#h~WXQzI|e~pSq z^7ZQ?VI>avuOCZI_uoQc!RI0W?E>%e->o0;KOpdj{0|Ep^FJni3Bl)627XU49_@Ka z#Zktq;PVX?H~bUWrG)Hb@Bv27{&GV|DJc4_5CkIPLc>6!TCvkXQ$HF<_mKan!htTJ z!l8b>H8egxrthtH!NrHC94{k|?@s8^_td8I_4zWXzSJbCuf)qV zb#R#K>sy2H9R_Vz5Uv+AOM>EOAimO|JIlm}hw3+&nEK6Tm_qgEhQ?1Urr%$GVK}9J zsD8&d+}`@j!f_(*s=qQKJ_Lzhko-bV{SD*E|GQsQB97|sm3-AdD6co`A2H&)k@mC^ zeoh~)e+9a|54cgnLI2*7X$0#J5(Ld*@)7@p-ZYkP8#hQ4Yp~-$&#fP5NYwW>OhP!v zNC@&83WFjO1RKgGNC-kVRHOX*AcPTYXc>=-glU)_32WjSW|`sRg+9d(_8pHVEdBMc z_%Wjm-N#IhnAp%~q8pZ);n0wrYzfz}%uH!mWrk%)-_tM@ifb4SjjLG0Ru!7qZ#XYB zt>GdWZ@453f4PCbisdw1XM}G8ueTcEyBNFReq0$?#80q69S=0zhvbLg9%ZEsPa0&; zApQc}UY6bvB>09mjr8|`|B%Hsz;ZTxCUFECH4%0-I!&AkHO9(NW3u6As1)VvdmB9{ zqgcfw`;A`E)J9G-vHGsYMl*J-P~$Y2+SsnY*f5}C)<+He^Qjvb3 z3EzX%RHvWU)T|$BYK802k2H0`^&*TH$D7W8TPey=z}9q@zN2Xa@@-Zq)O)TdZ)ekm zj5X~*p3CUQPk*uL${?C+k#>WOH|-Mi=QQ1+-`{jE@DIX00=FCPX}IU$UV+;OH!AZ` zlbYUvI|z3e?i0qE6J?r$&6D(z<{aP)C8oIy;c9(PbG;F7L3}#mv*35DT>6pbJ{30T z@Ija6WuZ8VHLsGm<{^ZKjqp~(KTrAun=dlMkwVRvfX4pjcBI+=B;Z>DitBUxJ0kq9 zfbR)tr+ac{|4=}>8E5v71f<(7Xhp9%Q6fPw7; z49RqTjPEZIkPD~@D6WMaRuQ%dXcv&KftkZ8V3dIPE|kBxL`YoKI@}^0BVeq6bZyHV z@dAn~S4W}u00*4B0O2ZG6BW)rNb-2bbZMjl>&-uNJq5@i)%Az-I~vjm(i z;2Z(x3fLv!JOR4}oG)OHfF}#sE8qeF`vhFLoq3pJkq9pqaEXAY2)Ic{@2LxQTo!vlFkDPh%HJ{9}S|kh-jEAFVJDlTe0fz)!E8sc- l*Kgl8z>vOSqlk_OxJkgx0&Wp-tAOVSxJ|&X3wSQz{{vT0!iWF> literal 0 HcmV?d00001