From bd3b15b89710dad25c73dd2ef9b7c18395507b87 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Mon, 28 Sep 2020 14:39:48 +0200 Subject: [PATCH] Use the `cidToGidMap`, if it exists, when building the glyph mapping for non-embedded composite fonts (issue 12418) --- src/core/fonts.js | 19 +++++++++++++++---- test/pdfs/.gitignore | 1 + test/pdfs/issue12418_reduced.pdf | Bin 0 -> 25365 bytes test/test_manifest.json | 6 ++++++ 4 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 test/pdfs/issue12418_reduced.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index 40a1d4b560de6..f2b5df5e1009f 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -622,7 +622,7 @@ var Font = (function FontClosure() { // attempting to recover by assuming that no file exists. warn('Font file is empty in "' + name + '" (' + this.loadedName + ")"); } - this.fallbackToSystemFont(); + this.fallbackToSystemFont(properties); return; } @@ -679,7 +679,7 @@ var Font = (function FontClosure() { } } catch (e) { warn(e); - this.fallbackToSystemFont(); + this.fallbackToSystemFont(properties); return; } @@ -1308,7 +1308,7 @@ var Font = (function FontClosure() { return data; }, - fallbackToSystemFont: function Font_fallbackToSystemFont() { + fallbackToSystemFont(properties) { this.missingFile = true; // The file data is not specified. Trying to fix the font name // to be used with the canvas.font. @@ -1339,7 +1339,8 @@ var Font = (function FontClosure() { type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-") ) { - const GlyphMapForStandardFonts = getGlyphMapForStandardFonts(); + const GlyphMapForStandardFonts = getGlyphMapForStandardFonts(), + cidToGidMap = properties.cidToGidMap; // Standard fonts might be embedded as CID font without glyph mapping. // Building one based on GlyphMapForStandardFonts. const map = []; @@ -1357,6 +1358,16 @@ var Font = (function FontClosure() { map[+charCode] = SupplementalGlyphMapForCalibri[charCode]; } } + // Always update the glyph mapping with the `cidToGidMap` when it exists + // (fixes issue12418_reduced.pdf). + if (cidToGidMap) { + for (const charCode in map) { + const cid = map[charCode]; + if (cidToGidMap[cid] !== undefined) { + map[+charCode] = cidToGidMap[cid]; + } + } + } var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap; if (!isIdentityUnicode) { diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index f3f92aae53059..33b9df646d6c5 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -370,6 +370,7 @@ !annotation-squiggly-without-appearance.pdf !annotation-highlight.pdf !annotation-highlight-without-appearance.pdf +!issue12418_reduced.pdf !annotation-freetext.pdf !annotation-line.pdf !annotation-square-circle.pdf diff --git a/test/pdfs/issue12418_reduced.pdf b/test/pdfs/issue12418_reduced.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c51ec0cd359f2146fbdabd0acc78311a670a4e29 GIT binary patch literal 25365 zcmch=cUY9i_coqrj1glj7)xxcV#5O4ca0UXgBWWROHfczia}7ZV2TMU7NW)ydx=pr zMzKdxv4Ua=SWr+CO+aG%h@d34_rA|O3+wmy`Tp^{uJ?L#CCi*=X3m^B=bkfX&OEzm z)Z4pDOMNS=OQYL&E@Zgqb)LHL5o2{OZQ8hacm+%d>JlCnsq^R;92zvCSJ0$B;h_Ox zz5BNG3J(eN?dRgrH)=#=^!Om1N2l)IY}pTl!NtRSpw4PBy6|b==n0WQq20qqh3gF9 z-N(g)?Yx5~jEo2#9~mB@GpeTpb^bx>5LP@U1F^EaDJI+NWKghl6Xvg>tr z8ws1v-=??f3|8Y%oyk*Y(zA!ogx)5*L1#AG@ff`gCW~T)zrxpGHJ}E)!4rJ-Lv?0P z#a9L~qpyYI>C9F?||Qd!Z#Xfvp>t&oZ}c7p{qkc!Q%7O=8GDzw)KOp7&U6PnpDE%w0!5MaO& z?KaHB=3wB7aWDmGW+ZE<#2+(Pld)5)kV$552Lm+G2r$4HI+M{nRHyf(2qhF)7!5Y+ zhIL{Yv(mrbQiN9G7UFa?7Qw$`%g?)-SSU7SCg+An< zxWi^*YO9e_S;++oLu*pt0;?-E>M=!sw9@*~ltx0&NI76jz16N`S3ONh6`L)b8BFhQ zHad9Fm;@FYvQBj17!BssQw30w9=LbXhuw%LRw@U7Aup`2;9!8w44y^;5P$ifmFmS` zv|@7sjR7_>K>Gk1{sOaRGh{Y!IYH9|n!$ka*j^xOFaWcH1g;l@0cJM{d~^m(M35;YZN#*)qx8snnvF0$aEaL(_3*4%wVbdKD_499II;%) zF&C&nDD=0$OeVTsqaOWPC#%v(G+AIYalS^Pi6E1?7=b2d3S6A(z{QG{X{Dx(MsVS* z#XlO2;6l)76u3B1;6h4m6#$eGTLjq}iM?XG8i74$iacO*OckRMi_n^bqCSc#Gq^ZW z;6h65Y9uzfqBRO!;Ex=XXjL`^j3E06=R-$sBsOJsiUJoWid;%sf=dZSY?6{4z(~Wx z++4awL8fC}7_Hzzi@}j0 zNTrgYL$oAXDTd7xe$+_BTCkv%Zi!ek>XeSK%VBk4d(>kD6A^2{2exri^s#7ZwLof< z>@%o?wn=HDLsn2wGWKf&wmPA-(V-dE!PyW-@OLJ7Im`gtkSE175vW$!%pxoaR4P;4 zo=LeqZJC(}R0|Yg_5>JBu&`!ka)CQ6F}jIBwL+(6Zb>Er)e0?Ij93`Nm%kO3k!5Z& zf=jXDO>~oH>^NpC+^k8Uir~Z~QxK>E(k45{gNXh{>@ffuDNYGH2{tiOlm*j*X96Wq zg|K?SjU zm)^^S&_|G0_m%0NzVE8c=^O1y=MNTs)c>d~7>H9_s-{Y*qERmW(BxFS|%OfzvRKE@0znz85l zTVQEOK?*zwBWQ~h=i!i*u&1neE{Mf*)r!8gcz$O3R#LJ;%)~4;p;6QXC|Lz&LYAvl zqriof%+pNBQbvsuIm8iSbV62Xm$DGDP87H(`K3;qjjUZWAxpa}SqNDPjHw+nA#1b% zl4inHI2fQ)7DW3Ni?k9s92^K&H8OQYxR%UYc74oL$xpDB%tr0{j=2%4C3R}o=S;~{ zc75nl_9+BmN)|Y3)^Rpah3tV0iv4YHGOC{gso;y2bcpb*T&-q$R_Z`}shOVDjGz?D zhwZ?Fjg*avQ>zNdP)D3{u9zVyazR9G6DgHv)pi53?Ejp()IoSNLQ5*fEKvXgSWF8% zR3xB9>}H~s{FSAMRr+c?!D&SBiaLv4D8z{Ht#p4DK`R6`(WhI8R!Rk9k`f*m)(TBp z6k@Sbh+hj33ua@2!c!tQA|s<~3t|BA z-@t=~2Sr*C!4qq=DBLI`Lj*WbtSQ?S@6A+c$L&$8%&Zws+WNWzto0v8jGJF?0x z#3rYQZH0A|1i--o2Nb4{a~4B&av?emm>dEvQse?7BXlJNE(RQv;Fd}8Fd`>X{6#OG zkZ=INF_?JdQ9#buR*6fYGC89_(U20#lvAx0c(h`2>}sX|q@A=HEFEA{)nHtw8qp)h zVj{q*yr*_BwsON~7qn&_cnCwBw1`Ho3dJ2J;=zwht=!&A`oN~xm^ou0&Prd&W1@j* zvC>x>pma4$_)07Mq7e$Q0&!MMSokTtIb| znDLYz#EbR}JpgF*AWo1<0zYB|$2*p=HNo-*I6Y7Nhtn}WX>W3Y6UKk+3zw+zv(e`u zX@pu@SVpsPca+hT^N=14!uyi%4;6-e(7TUmTaA|=*cQhq4>}G?__>A_Id2km~l1jYAnPWLR=7F8d23vs_ zEM>!9g>kWDZ14sA#L|V;_zV(YSR1^Wjadl;3=TAblB@*GAnVb_tOV_W(Fe^oDKy#fRD%*GTwoXG}wfulR7CQeKzC_xY&RQi3jXVP1409++rPN z;oQjuxk<2L1R|9n!N-C{VwOCbr@#@|GgJAf<*a01g{DAKAT*XROz%mI66%6$kQ9ki zp^`yDCKH|sra+Pv>@MLQNU#DPfkJ3O@5w|Z4W!jF+7Xly5vaxb^+YW}j{>I$MF{*s zf)fJ(iQRDOg8%RYf*GWs07eWnpl33om$Cyf=q{wDC|Llg6-~hxAWI8*#AJjrNNUNk z;y{88BLrC>Ai>7Y8<-9U#F;)**`EqK(X$hnCi+4<{$X zA$7(+%*fJ(YPEzflWKZTE3l1fEJ>EJfyoerFflHP2UG*Y)DIHMGHHpBImxAO38QwBAqQ^h*`_Pa=I1}(P5O#8@88mWkpvslPxEl(AgL~pn7i=8{QS9R zA-<5-oFqVk=}`B2dTT43kz^4w9|mvGKuh0)GH&AXUc{Y3jLEHCT%v$T&)uEr0NHWEX_XL;JHi{mh}#g zEoU4w=HjQ*l*F6CKQB*?GbJO=K@51w) zcy4V*#5NtdgCr{_lB__&3Y4k@+cH67n@(QhFw}xo3G#VZRI0NPLI$A+!VZv-ib19}E`t&~G=#Gb8w<2~;9>3>B%PWZ z`c*AJ#NERx&cHyotq{Y|R_R!lwUKd#GBw3#0vR7XR^bnLz+1>;oTN?I?%_2gbF4k4 zFO+i+p0XpnpR~ZP%|#M2U10#uXg0t zn`mQg611-oTRN3)lBls5&2;ogEdpc=lHsnwk4aa_EPw<@-c(6;93*&}fjNnHL4q$c zFDAK~H8XTHVF@FJ3sz=^j`U-4m;x!R&{!fm1dw!1z?_6y2>U@|vruR@GjwFO*TgVe zkKmpI!3Q#81qoJi7|>G~zz{!ijs9vXGf43}qpnLHwy-$%<-RXh0(zwox31WI;_( zH5juY11-8$6H~k(iA#`3!U;*%LUPqfF4PF9A_XTT^5eR zmMKq|54IL(#5FB36(oSP7G+$=)Q}dV@Jequ^EkB0Ln?N80XcJ6{{ zQv8E#XUr6z=FhEMya?_gu%|>jO!XlEgkAZE^T5_De~LE`9w>lN z7)2r(CIQik*(dzr&IJp}9J$Pu>y<Aq7E^SWDihF zR#<8h-vBveMb3;SKyoHTI?#jyIPp***W@4xasZ3_Bnl!EGcGa=fyIf+85LlJOx$P8 zyx#x`PRzzTNXkSm4BSx*R=mbQ3WOxghnnfKjoE6rQkYmacz7vavCpGp$K{!E1 zMqwaDD9%qbN2v2cL9I8w=LeAq6yZduQ${&mS&4FdAoAl<;evOTm`G=UCAmC!ZE#X+ zNVF_ahn6+QggW2NbdX?0d`dEl90;?j2e0Ch%Jnm!YY$@S3puKY(RJcO=?9`IHEAu zgj$~U&=*UD;h2hWu>+FEh6PQ@m9hv$HA*amy$@p)pT|LB3?9Ihtt`}`Gl`iylVBrW zS1`e#Mr{RxYKAv&kYL5e8fPlenbcURTC3!rh7#TPuoio76ocC71&4OC!-;EgP#` zxQGI9AZ8z~L%9}3QKf@GYTY5G)T-{qwX`0XYqbn>NlJRfihWV7O9u&7T&4~ZtVlw& z=CiZ;)W+TnkntHN`R_<0;%hl2r-G{GKyO zR;blife5MQJrdSlDn2#IzYMb6~#)3!CPO^q`X&!T1dt9sgdv` zZ;+76xfT<2Cc%oNlG#SDpavo~Z14;kDPk~njhvOH4PFsL?GD5;(fI~RR;b0C$%;r< z$`Mvb*5DZR%px~A$|h+tkm4*#NO2Y=q&SNbQk+FG$xY6Q6$3hF z@=aFU<(zBZWW`<1sa8^ZB|>h6D+9}AMHd^S5D-cti(q<)oQE|kzgP>7qG8`)L1!4 zjg^Dcq;imCC7S{9BlqIYBw1l8%e5NS@@uVLo z4)x&!cMR}>D3A>{c&4RLfN(aL0H-rHl|9=NP{8dGR~g<>#U}p712W?ols9@PQ5Kv5 z84jXAIk6rQCbIyw@U2RO%VdQZ10V2&a9k)*43sP=;QmPNlvHR3N*>|80fdL}Ypi2h z!4sPlO5n=77~HVqwFzDh<8^1~4|+fW4#mc#4vKIly!w?gJc*-BH^Q>IeTSdq{S`6` z+@A4v3Y<_G5Z(17v6W=5b`J!i`cOpPM40RkIyDtL~WaMMG|gUa)`qF6&#W$6qyLEi98@u02~8{8GJ}n z7AO7Mxm*l*T_7LpcNFv zS9f3)A;rZ3mb`PuHjYstyc97a;VCbyqXul8NwDE8@x?D`3^tslY!o(rIZD0~rni%; zfiX6O;(*M;;R8_OAIzVZj?gI+XZYa7f>7we3mr8$zd|L)W!cfujQx0)p`qn&k*8Lz z60rwfN|QZ{1ugWzd+8jVo`Ru+k#E7^tu-oHUeRK1A2i$(po9Wl2Vky^&k%xVd)Z>} zq8r3<6ro9808#)H&<-a&vL;59u?%#~$PDu-wXgJxTL*xYi--d<7vOK?=7-ng&_fP-9kE%G~DAR(+mh#c~G-z?v5w9%I%X9&CT`>=TB z5Dk%;mm>6nOI{YKYSkXQD2wo-(jI#ga;sQv%mcyWV>(Jb>h&{eBc9ogq%CKQSL@Km z!exu1jE%t%gg6ypNUZ_YgIAB)fbpDqD(N`&R4(zfr&zO&28@)nr_5z(MS(NeXk7t0 zysw9JKDHecq&Lp3A{pOH#xsTybnO5$K5)E{rko^iJhY~OGAhYOn#u>iC`_(!wsx9Z z>Lk0OI?3&oqgXs$Ns?$!F&n%i$fyQ<OqE{6i< zF1ST#22;uFIVfTft;m(>D3&~>DQE<7E_RC;oGBs{0V)i{BDZxKQIV3_z@VsMe1HvI zt}}Rdf(K}d)xjc-DC+=4jDlr>r+k?gceTJZiU1lWAVm&_odq@~NpRAes_r(fDp>${ zgNW0h+mM3x@!|NL2I2cuRn{FG%R&n@1=kFvBMkUi=Fug7hm` z!tJpnPr--V4{3NZeDXpccNEktHv{qVpk+tJj6@NnF##z97ziBrDXCnRc&)>D1JaS= z)UYk$Qe4rHmS1TQ6`~%Bhh5+)xPg(z%y@^4`$e1SoIj{!9JQ3x?3dNO1$em8(L(E`xR`?jQE za?FylFfqwj1EkDj7GF+~I|tOs77lf*?`nWXzv5Q`SdYHN?*f39iy=Tu-dG?_$jG>A zEI}<}cD{?ndhp|Qtz3DKhI_y#6vc}&+$6z4;1fwr_zRYh<-sR!uT?!%2pVS7>fysc zqfVsyD_kq@Wal|QyqHJ7tx~@*9$+a8Am;B z=~Pb#iyJo_VN`!^-EY*(e1UyOz3?ND)cokn@gfe_nv9R#P+}Fl#?SefxaCP6pEqTs z!JktruIK!TQ%61Q{YE|K?^F-yy-`mbzfn(l`0Z8(6)e#nJn||1n*_fQ-NbKuqlQ;M zoQm9OlZHHOiUpwRxej2y;`We7Xtj>9u*ijpFYb=GfFvq-$H#bvC8CnC5rt$)q>=?g z`>VYhP34}0w6ubEQSz!yTIxlgyaa;_K`5^3d657&gQtAX?{Z*u!Z`Gy*u$tTgqKq0 z%yFROw6Q?Z4WE2_1Mfj_cQ1a`g*26bl^}N)q`3&8Pr1w|O(npHj(YAVte1BsP%ohj zkPI0)8iFUK)Z+FUKdcc|4}M%Pj`jpO=O=gX=r8*UJes3DLH$z>P-XSj+1ulPiVG5y9;wR5t zvPe*Zs_==k6o9~z`jib=Xe=c>MZBxktNy&P!z587pD?bxSAYk=13wWY)AOJt4B^v@ z8wf`@bw>l?2(a^_6df4j@+uQ3;EW9nD~MpAR?*l#oa>rTg{!(NQqlB^T#mIAI@8r4NAff@t7}zfQ^Jldg&%@8zGg~VrVYsQqy?G| z9G}?qm9F5xNn^f*DN4c*xE9!e#(Zfkwah_7zLI5bHZXw2C-|xH;lSl>7ktB4^aGEo zXuf92mLeY`3&Ik#=nvE5xdSv$W+uQC;wT#Y-k`aim()`$5}6K_9}?;p-nF~8Z@_pR zztn}F5#mn`>Ey?RT-vpB2?`68pDn_fzU23d`bLc(9}*NAgkLc7bn)mDG&*=fWJI*C zX-BjTYUbkM7ZDf~5gayJ*R*>e8U;s2H*@C2fr@_%sY`H3WKaYK3<-z~@(vmq9vI}} z;S&@#I&uuoOa>!6f_qRvsLSM)53-^PvMqbx`s~Xx0~gjBrTz2mx66zFu|K+M%38E^ z;=UW3eu{qnG$uFY>cVZ!qfd>z@IpUxTEkv#8q9K=Gp5vuNuisdsS+5@P3pZA6=6fbSabxXfe(v#eHdfiWtQ}w`{DH zcfR?;%74C_*YVx>!+~v<`)(?;az?!#-3A&Kw`s7T`wYXvg7u46HmsQXjv=;9Bfk`* z;hVIE2U9*Utm)V2a*D3cs{8fLDZLU`)YeT+ZI`$v+s&LB5D{OyLHTYi^S^k%@#&Px z5sNQ1-j_NweZ{3lQQg|6e{rcvg;clnS*H5)y7x_=yIXgzd(ZSa*$sZ~UMs(0aL?+P64K&y3*tJg=d*NnXc7n9qko5 zc*EP8(b814f^W5jolWmo=(#UF)Kt5IU&D*DB0s*-ao8g3pDqV_H2f{a2El`Vcs*%I-?%2uOO zmJb{H%j%VlMxV7uY+uk?B>r>U*><&rfJ3KM~9x>Ec)bA)UvWp81J~8vJr*T>h_z>W824 z&)<8f;iEHC^AAt!;CFFRLDjat7cTC~UpLLI-q|MkTc$N$bGCZ^kJB0rKWokZd0LZO zXDjA!XfVfp)BgO$z56u#@x!JYwndy7*nV>d%Vw8tUu|CNzRYF2*XDTl#V$V|+dSU= z(44gm61ur3&RM_y`e&B?6#`0MEB|zTQlLjx^QQ?(qkhS%^>owJoYe=bKm2j(U&9Vs zAO1Ww_vXQh4>$NtOIW|mm|{xbHi&AwOZ7`w{oGE(u-&unQ{VMc5o?0&AlX<$IE_E~am^WbLrBBVh<_&bc zQnt{qsZ<%unHy4U#EEn%Bh+^hEMk6}Oh->Vl@ z>&Ae684se$-uPrv`l_hvH~LS?xDi$HM&D=YNm2D~41Bih^N=C6E}Ys|F2rj^O5?rz z?uSl2eRI#VkSZ%KHO_ch_*UEA71O^itkkw&#f;;H@3rl-Abmq&jkW_8JU<;ec)?ZI zm}_h98rM7@cC_!^>IL>dO@SPfM3SQEHd2Mbq-9zRH-{;+^u{U4J{#qH6hb z$9C*!QM>$w20Lc8s1ld<@6M(z+*F)^gY$7hox5{I;~o;{wQIITtd=0{x; zy|#HaKQ?uk9N8MYovNF2MZ_15IEiG#OUwjTdG zamu!KRpO02!IJLpDy@(y4RXZKNSQ|@3Q7{Zb9_)j>9i4EeL`! zE?+H(n%?QwrF{i;rVqT8@vN})%iitN7Zkd-kBdoIlb8GNH!)j==Ux4`!o8DI;*K_$ z6|?o$?6nP+#r)EK*6$5wzSqnvZ$XDIO1ZA1-ct=k=j%qsi1b7bYxRXTWeduMk2a&F%Q#@FuCp+~neTk2QX_@TaYi*9A} z>X#0j=@VZwvBQ9rcdyki`{(Wj4_s5q9GITheE9RyWBz))>)&fH?#IkO@_SasjJKMW4q8`xajZ-4%I+P5 zHkazZ?xTLOAN6(}+c9+W$TeO=H`us!pP&--g`cGUf_nzF_v%V1>MPieIlwyRM{GyhXdc6}Jq$p7SkUFP9)ho8N&voNG|R#DdI z(M__NO-xwzwEw;46EB?Kk@3LizXvGVyUO~^3NY?{^0R~1Mx6)M z?cT3y|IWUj3^Y~s?cB3&&)t>lcsKd2bEIoqZ;#))7Pyu^q0@W6@7nN0Q+=1YcOIX3 zN8jDYb=QeDJG-@TZGPgTodZIu`k(Bzb71YNvC*YI@3*q*=#!m4|Gr6O>&c;yd$;+} z{|KOf|^Wbu!I!GpRi zsc^U1=;~QNzMedN{~t>Zt{Gl$(69kZE(e7UI=%hHlQnTiVmI`%jXzxew%2~oR$s;4 z9s~iYy^?lD=!-0@iOV8%I92l{Ear0dF17o)@*?Q;i>5uj_oLR~1z54&{ zqhR2!W})sYu5a2I9NK!t%~3mQhBjVtZPd;|p_Uala(385Tdl~-*%=+$ZpE!?JIaLC z_s^`hvva84KYPiJMxo98uP@md6l(XsIbg?!p^f~n4cOT~)a-xb$_{gAOaH7ZJEKC| z`roqbs1VvPE7P*mH`JJwy>~~;(B@g!UyaGi+`D&GX!ysO^Y<=#5OOec``#4~!lq`f z-n;Zc==03Od)GV&FPr)0#P~WPv6<^8E~^vPHS@cPi|d4*&fGb1Wu5RQnX@M@Z2Rb= z1E;pn9{2YT2XeN5GcIrNfh!NYUOlxZ>cNnySCgY6R}C3`^<-4kjUkh+9xsec8WMi> zbYaxXAv3H;D@1;s{h9Sdg{b4%Q44#YqD?TqU=EHN#Cf9>`3eJ zbCJ8UL#(IIMLo%$w(n@m$hhng`%bisI-4D_@7T|gTeHXRJN0waz3eIbl0zd`WRKc+ zGBheHd*Z(174MgQ{Pn-dFMf}Cul=95p4@!C?#0E6m0NcleYe!mb+sa6>t1x7(lPvQ z>FMk06~w;nS?S&6&uWzF6j0;+*vg(&x+IUOQF>%R?YXh#JS#U&4qR5MZ@@=Bu{Awi zMef z2LAEUkl0$|UBi+?_m`gZN8Rk$vj3@6H+kgbQhtBbY!h4kKUIb$kDFXN{Es?^Vk;K3 zN$TK{-m}1vRH|MD{Uy)i^G477u1n3(qcuj(GamjY`5nWTzLi`ry<<#npA=&+_jpru zMpDh2KH*EOSu5_GE6j<0l2qoVSNM1PGW~D2EL;+OHtEBgJ;J}=cisQa&xKc_?xLksstXC>9S*(-eMzO1Y}4+@_~KTj%sv*V-qNtqwtu2VQa`gD@(&F+sD zPrCl`omGYBqjQtW-|YNo;iPK^Zx1cp9(^^b)=l3>OD1Ip$h()IX96hDHC9WWAZ?@ypw;$7Y(=`HXQrHPifu&t%tRZ_{@^fvzXL z&A<6Xx*k7a+UXPGdiuo6$Z2g{Z@GDv^KG!GsBhcZ-N!Cm{%7NFx(D}JeyQ=i?&H#z z7c~Alb&O$oTI0CXv5Cv?H;zpWj#!@EctPs8{N*n;ebH=;%kpEJW;Gi-XZh_-Gn@U> zYT-^-cO}%NY0NXEx2*GB#oP-*2}xm+Eoui$2ZQUa~~_4DEa2lC^?Q zr;HSn#n-2AMw-dm(x+#}ncbH5KUg;X96b8^iVrqz$O~+}qSdCYd82+^QFl%LGgFdJ zc*f}h^Glx@#-s0>zE1nhc;bEY@wD;AV{=U#(#9B1%{AXin`}(>F)d09G@kS^XQV|M zkEfY-rG*$zr_ zLiR5EdDMz)VH20F8nyIV=+k!!9+{t~#Y{L_+Z3A?FyTaP^XatDCmdU8`l;Q|g}dz| z&;KwX=g@&ly$_CQwft<(9Qdu}_j0~H5FEBVD`)KLAAauRC+&WJHREXA-Ldxrrk<#~=k)#0v9Ij@>3;CUxErG;W!~_+ zFzZ2}e$cUhQy!S?gL(~!|GA*`pdL%U3!PXt&&#rC^%{>&2ilh%7GM2#=jec8Csw;< zm0R~R@2!JRmi7#5d#%#NB@NbQ7v1(6^8C@QBiZL~h2=Jy+iKAT&sV>UD*r6&fywOKDI-17)b`wey5?V;JLAR=uPhtd zogQ@L@0zZ?yDaj1{q*@?uD^cc^ZJl==BR(83_sXEGd{ffV8+F?8BdD7G@bp)HuwG4 z853SD-7x5N=iz&A)m*Xa)zTLgYpi=cW6aU;8voY1Re8+A3;GMW%brb0duGph{dZBR z;g`$D^!F&}pY)%4Lxxu#ytvwilfmT%FI=+z$KaZSmn_-vS8$oZ-wjy*eej2azaOyS za&U#gi>|ES6I^HT(kmMZgTHRS?8qOvnRh3Iys%sTsl6h7)NXs|W53h;Hhw+hvSsE6 zKmL4p^S)OJuTOuGp0joD-r@ZQ{5G*#yFDK~@Bi@W?&Ix;o}H268b5L4sxi42o)0b6 z<7#-yypMiTJvn%t0hql)Moc8{PFSUm0!$?aciGg@8p8NyFS_Q zT>oNOOpEq=U;k5m+nUoC?&UtYQ}p@E$uTb;9UMIK)uIE(Z%r-p-}lP@wtxOVeD?2= z^M1cKDRBK~_RC{2m5*#5p62ne$>T*akNUs-{za9Tm?K{dzvxkrH1MncZLj~oE9>1! zA#N*PrFmW(vN!(c%nuG;-@bF)gVqOchV7{Jpz*=w4+0NnhV6}g5cE7VX5trh0%J1+ zCeEzWXl9*}r>~WpxNwzAX8St5&+pjvcGiUZ(~dqZbugvX&a?Mj4xZV*^WOb;4>n7W zdw>1rrj6&sRcTXYLE47@Y+j$Rxp6|=N9)%%b#sYpuzvk!H}^RA2EU{<$&V{FVrypO zy>WF${F2$^XD`u7X02Yo z;BNEQv*x#{yTIe!*~x9*_DgYne4in$Goy0x3LAZKLJr|sr1$aO99Za3R6r*BcecJusljYU4~ z;x6P&C>qjk!G+xNMP7$zdF1pg>T`ImM{e_?9*5`rk~6Mo@ZtHtThuXTR=u3AMW4jXt(V)RsC&$uH94b;2F1)@lUu#0 zbIk1FIRlIO$IKg^Yc2APiM#dcpS zpSSNgVI*_PHoG3bW*-tTdVg zD3>;#ctO__@6qCCth(U8PWZ1g-a+<~zn-1F@#9y3jnv~6b<}xUP>1gisQil&<(0F8riU7p6VK>zlaO zdh;1>vTzOe<}-Y&_y5xuH(a=hd$S#$;U4LKKI6C8|K~Hl4)Z^s*>NXV{46peAUGr_ q!bLFECpbU#0