From a302105b9fda249755f6b1b27e010d32587f4946 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Mon, 18 Apr 2022 12:25:24 +0200 Subject: [PATCH] Fix duplicate RTL text and alignment + fr bugs --- src/library/text/par.rs | 200 ++++++++++++++++++++--------------- tests/ref/layout/spacing.png | Bin 2705 -> 3306 bytes tests/ref/text/bidi.png | Bin 24575 -> 25815 bytes tests/ref/text/repeat.png | Bin 6637 -> 9342 bytes tests/typ/layout/spacing.typ | 9 +- tests/typ/text/bidi.typ | 4 + tests/typ/text/repeat.typ | 24 +++++ 7 files changed, 149 insertions(+), 88 deletions(-) diff --git a/src/library/text/par.rs b/src/library/text/par.rs index 4717c3af1..6e8b59179 100644 --- a/src/library/text/par.rs +++ b/src/library/text/par.rs @@ -199,25 +199,48 @@ struct Preparation<'a> { } impl<'a> Preparation<'a> { - /// Find the item which is at the `text_offset`. + /// Find the item that contains the given `text_offset`. fn find(&self, text_offset: usize) -> Option<&Item<'a>> { - self.find_idx_and_offset(text_offset).map(|(idx, _)| &self.items[idx]) - } - - /// Find the index and text offset of the item which is at the - /// `text_offset`. - fn find_idx_and_offset(&self, text_offset: usize) -> Option<(usize, usize)> { let mut cursor = 0; - for (idx, item) in self.items.iter().enumerate() { + for item in &self.items { let end = cursor + item.len(); if (cursor .. end).contains(&text_offset) { - return Some((idx, cursor)); + return Some(item); } cursor = end; } None } + /// Return the items that intersect the given `text_range`. + /// + /// Returns the expanded range around the items and the items. + fn slice(&self, text_range: Range) -> (Range, &[Item<'a>]) { + let mut cursor = 0; + let mut start = 0; + let mut end = 0; + let mut expanded = text_range.clone(); + + for (i, item) in self.items.iter().enumerate() { + if cursor <= text_range.start { + start = i; + expanded.start = cursor; + } + + let len = item.len(); + if cursor < text_range.end || cursor + len <= text_range.end { + end = i + 1; + expanded.end = cursor + len; + } else { + break; + } + + cursor += len; + } + + (expanded, &self.items[start .. end]) + } + /// Get a style property, but only if it is the same for all children of the /// paragraph. fn get_shared>(&self, key: K) -> Option { @@ -307,12 +330,14 @@ impl<'a> Item<'a> { struct Line<'a> { /// Bidi information about the paragraph. bidi: &'a BidiInfo<'a>, - /// The (untrimmed) range the line spans in the paragraph. - range: Range, + /// The trimmed range the line spans in the paragraph. + trimmed: Range, + /// The untrimmed end where the line ends. + end: usize, /// A reshaped text item if the line sliced up a text item at the start. first: Option>, - /// Middle items which don't need to be reprocessed. - items: &'a [Item<'a>], + /// Inner items which don't need to be reprocessed. + inner: &'a [Item<'a>], /// A reshaped text item if the line sliced up a text item at the end. If /// there is only one text item, this takes precedence over `first`. last: Option>, @@ -328,29 +353,31 @@ struct Line<'a> { impl<'a> Line<'a> { /// Iterate over the line's items. fn items(&self) -> impl Iterator> { - self.first.iter().chain(self.items).chain(&self.last) + self.first.iter().chain(self.inner).chain(&self.last) } - /// Get the item at the index. - fn get(&self, index: usize) -> Option<&Item<'a>> { - self.items().nth(index) - } + /// Return items that intersect the given `text_range`. + fn slice(&self, text_range: Range) -> impl Iterator> { + let mut cursor = self.trimmed.start; + let mut start = 0; + let mut end = 0; - /// Find the index of the item whose range contains the `text_offset`. - fn find(&self, text_offset: usize) -> usize { - let mut idx = 0; - let mut cursor = self.range.start; - - for item in self.items() { - let end = cursor + item.len(); - if (cursor .. end).contains(&text_offset) { - return idx; + for (i, item) in self.items().enumerate() { + if cursor <= text_range.start { + start = i; } - cursor = end; - idx += 1; + + let len = item.len(); + if cursor < text_range.end || cursor + len <= text_range.end { + end = i + 1; + } else { + break; + } + + cursor += len; } - idx.saturating_sub(1) + self.items().skip(start).take(end - start) } // How many justifiable glyphs the line contains. @@ -664,7 +691,7 @@ fn linebreak_optimized<'a>( // Find the optimal predecessor. for (i, pred) in table.iter_mut().enumerate().skip(active) { // Layout the line. - let start = pred.line.range.end; + let start = pred.line.end; let attempt = line(p, fonts, start .. end, mandatory, hyphen); // Determine how much the line's spaces would need to be stretched @@ -848,16 +875,17 @@ impl Breakpoints<'_> { fn line<'a>( p: &'a Preparation, fonts: &mut FontStore, - range: Range, + mut range: Range, mandatory: bool, hyphen: bool, ) -> Line<'a> { if range.is_empty() { return Line { bidi: &p.bidi, - range, + end: range.end, + trimmed: range, first: None, - items: &[], + inner: &[], last: None, width: Length::zero(), justify: !mandatory, @@ -865,33 +893,25 @@ fn line<'a>( }; } - // Find the last item. - let (last_idx, last_offset) = - p.find_idx_and_offset(range.end.saturating_sub(1)).unwrap(); - - // Find the first item. - let (first_idx, first_offset) = if range.is_empty() { - (last_idx, last_offset) - } else { - p.find_idx_and_offset(range.start).unwrap() - }; - // Slice out the relevant items. - let mut items = &p.items[first_idx ..= last_idx]; + let end = range.end; + let (expanded, mut inner) = p.slice(range.clone()); let mut width = Length::zero(); - // Reshape the last item if it's split in half. + // Reshape the last item if it's split in half or hyphenated. let mut last = None; let mut dash = false; let mut justify = !mandatory; - if let Some((Item::Text(shaped), before)) = items.split_last() { + if let Some((Item::Text(shaped), before)) = inner.split_last() { // Compute the range we want to shape, trimming whitespace at the // end of the line. - let base = last_offset; - let start = range.start.max(last_offset); - let end = range.end; - let text = &p.bidi.text[start .. end]; + let base = expanded.end - shaped.text.len(); + let start = range.start.max(base); + let text = &p.bidi.text[start .. range.end]; let trimmed = text.trim_end(); + range.end = start + trimmed.len(); + + // Deal with hyphens, dashes and justification. let shy = trimmed.ends_with('\u{ad}'); dash = hyphen || shy || trimmed.ends_with(['-', '–', '—']); justify |= text.ends_with('\u{2028}'); @@ -905,10 +925,9 @@ fn line<'a>( // need the shaped empty string to make the line the appropriate // height. That is the case exactly if the string is empty and there // are no other items in the line. - if hyphen || trimmed.len() < shaped.text.len() { - if hyphen || !trimmed.is_empty() || before.is_empty() { - let end = start + trimmed.len(); - let shifted = start - base .. end - base; + if hyphen || start + shaped.text.len() > range.end { + if hyphen || start < range.end || before.is_empty() { + let shifted = start - base .. range.end - base; let mut reshaped = shaped.reshape(fonts, shifted); if hyphen || shy { reshaped.push_hyphen(fonts); @@ -917,41 +936,41 @@ fn line<'a>( last = Some(Item::Text(reshaped)); } - items = before; + inner = before; } } // Reshape the start item if it's split in half. let mut first = None; - if let Some((Item::Text(shaped), after)) = items.split_first() { + if let Some((Item::Text(shaped), after)) = inner.split_first() { // Compute the range we want to shape. - let base = first_offset; - let start = range.start; - let end = range.end.min(first_offset + shaped.text.len()); + let base = expanded.start; + let end = range.end.min(base + shaped.text.len()); // Reshape if necessary. - if end - start < shaped.text.len() { - if start < end { - let shifted = start - base .. end - base; + if range.start + shaped.text.len() > end { + if range.start < end { + let shifted = range.start - base .. end - base; let reshaped = shaped.reshape(fonts, shifted); width += reshaped.width; first = Some(Item::Text(reshaped)); } - items = after; + inner = after; } } // Measure the inner items. - for item in items { + for item in inner { width += item.width(); } Line { bidi: &p.bidi, - range, + trimmed: range, + end, first, - items, + inner, last, width, justify, @@ -1058,10 +1077,7 @@ fn commit( let fr = line.fr(); let mut justification = Length::zero(); if remaining < Length::zero() - || (justify - && line.justify - && line.range.end < line.bidi.text.len() - && fr.is_zero()) + || (justify && line.justify && line.end < line.bidi.text.len() && fr.is_zero()) { let justifiables = line.justifiables(); if justifiables > 0 { @@ -1104,7 +1120,11 @@ fn commit( let pod = Regions::one(size, regions.base, Spec::new(false, false)); let frame = node.layout(ctx, &pod, styles)?.remove(0); let count = (width / frame.size.x).floor(); - let apart = (width % frame.size.x) / (count - 1.0); + let remaining = width % frame.size.x; + let apart = remaining / (count - 1.0); + if count == 1.0 { + offset += align.position(remaining); + } if frame.size.x > Length::zero() { for _ in 0 .. (count as usize).min(1000) { push(&mut offset, frame.as_ref().clone()); @@ -1116,6 +1136,11 @@ fn commit( } } + // Remaining space is distributed now. + if !fr.is_zero() { + remaining = Length::zero(); + } + let size = Size::new(width, top + bottom); let mut output = Frame::new(size); output.baseline = Some(top); @@ -1131,12 +1156,12 @@ fn commit( } /// Return a line's items in visual order. -fn reorder<'a>(line: &'a Line<'a>) -> Vec<&'a Item<'a>> { +fn reorder<'a>(line: &'a Line<'a>) -> Vec<&Item<'a>> { let mut reordered = vec![]; // The bidi crate doesn't like empty lines. - if line.range.is_empty() { - return reordered; + if line.trimmed.is_empty() { + return line.slice(line.trimmed.clone()).collect(); } // Find the paragraph that contains the line. @@ -1144,24 +1169,25 @@ fn reorder<'a>(line: &'a Line<'a>) -> Vec<&'a Item<'a>> { .bidi .paragraphs .iter() - .find(|para| para.range.contains(&line.range.start)) + .find(|para| para.range.contains(&line.trimmed.start)) .unwrap(); // Compute the reordered ranges in visual order (left to right). - let (levels, runs) = line.bidi.visual_runs(para, line.range.clone()); + let (levels, runs) = line.bidi.visual_runs(para, line.trimmed.clone()); // Collect the reordered items. for run in runs { - let first_idx = line.find(run.start); - let last_idx = line.find(run.end - 1); - let range = first_idx ..= last_idx; + // Skip reset L1 runs because handling them would require reshaping + // again in some cases. + if line.bidi.levels[run.start] != levels[run.start] { + continue; + } - // Provide the items forwards or backwards depending on the run's - // direction. - if levels[run.start].is_ltr() { - reordered.extend(range.filter_map(|i| line.get(i))); - } else { - reordered.extend(range.rev().filter_map(|i| line.get(i))); + let prev = reordered.len(); + reordered.extend(line.slice(run.clone())); + + if levels[run.start].is_rtl() { + reordered[prev ..].reverse(); } } diff --git a/tests/ref/layout/spacing.png b/tests/ref/layout/spacing.png index 7bb74ad9a05e2abf8cce0a2a2cc9fab9f2c5cf98..6fe539f091bc7623f4bb0f841d932af771f54826 100644 GIT binary patch literal 3306 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 literal 2705 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 diff --git a/tests/ref/text/bidi.png b/tests/ref/text/bidi.png index 68bd6b732615e1dfaef6bd2150c360aa8b23da25..f31bdf0a6b2546f2615fd54fe8820c61f92756e5 100644 GIT binary patch literal 25815 zcmbrmc|6tazb~vbP!tkY2q{AuTFaOS3zcMwB4b#jQp!w*)QSw5BJ)_JG9)q&l_6tD zib^tM2xY2}c;4&Y=RD`^y?$|?!b$veX>GKWJ(>cPtX~!lyIyz>} zqv|K<=+>;Gqgz|Tuogd={FKE_M@LD~R97|h_%K=JX?A>Sb-}MHzxTuYbCOX}n_|TG z?!9?}F)~-|^wZ3W-4o(17lS5ye7Is9Xp-0pvne1Is&ePjxJ&i-T#Mg?6W9# zc3!?=rKR!_YwUNt%Q-zaGjycM^U>qSg1dGdGJV?|vv1E?<6?(i&SX<->s@5~zH(P$ zs&ScToY>92*l{wEY)t+;@P$x-V zl|-RXo*0Yq@uf~rPk;Jk7R9xF``5uilGRJ<;NV~Y<*1gHU}8Z*K^^nc(mGX{!BFzCr_R
  • 8rIQjS#yT*2Qc9Fe%qoO&)P2RqHcY@vZ&##LGmOO#AWlmo= ziGHgO;biuyc@@t0;DW5x!t?;UM*XW-g~no0q%+U21te&;rz&&qQ`6SItta*H(W7tg za!n;ID$j77FfcIqDJLT%Gc0^fht+%V=fr#Sa+iW<&-Mhly1Me$<~No(k9z(7e$l~U za&VBW|MvR&&7b=Ea9hR1#P&DDN?K-#9OGx91_bON5EfV3;)pgmIXNukU%!5}o{IRP zOi*yizJC2>C_zdj7|Zdo>S{?)kmjo}UNtgVB>3CMlKh$)KM#-6fPf9LE#ji0k=~EU zr2UHvGecCyZAH(XnVXrlwzh_bhJOE4rsmd`e9%Z!lTqM)Mh40KyIF8X81KQXd-raz zobSx2Pd@1WrmHI^Cg!vlM_{e~O5N+^gQ@|R(KAD@_>{b&D|gB|7`wX4EQWlUTby{G zFFcN`_*mhd-{F5pNPBR`V|cV!z^*lJ;KvVL$Kng`zkh9sW!LC__s+}HGqUdf{oSE6 zxuzx6CIQtxe|~-Ieq33ZDX?*x_z)DDCYio2&%(Ev?(sW(1{nP@t*xpUc&)?d% z``Y=gEapCmvm}?Xj`f>4BHp{XxjFV%Z*QLdHDwx#YYX4QUTxpG%OoHpW7oNJ=L&jF ziXA-hY4h(4%#U|**^~#W9q)SkmPhUqPx8}qT|!ir#j{7XwJ&x*>i+Zlhw28E(yeV@ zoo;^UrJn1`5;rT2cq?vhZe9?0!QQ^(+2!s>C)clEPbQGn)cpQT$;~cd;Xi!%VBIqQ zsci1%X3lDz4Salj`mcC+ctUUAju-vA^mFL4d{9tOvVv=HcsOVCRubLYL^($mvZtqK zMuoSxx9r6a>iTbQY~1>x_~O1_mz9*N&bFsSzJK)Sk#342Yx92Zh3O|x_RlU2H{B68 zEoL_jOHUV2O8S{ea{2x#zRiyN@3sR64oJlAV_}F(HPqJDHZf6q**CH z{>?;3L*r&njsp(R`=&GJ&p*n@II(w2dXmr5{0pvdg46~IU7g^*eOm5m=SU=yhvLqM zy4~H~4zi~6u~&b8@5AAq$E(|n#LGFRgoSM}2*&}ZvW%-p^%mG13EaYa=xPdcQ%8-T zU+5LQ(QqyHe*hCMCnhGk4AxQKyg3nig+kd~_{!n$9`T^?r=5)yi#n<|ue<;oQ<8+Uj2be+wObj$sQ z*T!P4&!68b?a#u+)o52Z&a||&L{?(n8SXwas1cljYb7>3&`Duv)?)<&ufYbe9 zsn)i(pEEO8oSeuEuH$b|pN`m{82nsy_2S23+XCZ&fPlMq?>ad-&9l7A(oW3D&5enU zZV2bo^<%-O7^F9UeQgc>g17IguD4qRC&j*aczC#OC>k-ZsF-Ey)yLB z;DP#|3dNn0LP7zRVZp%}51v!ci_hK0VU3H5ddV}#s)aS|AXIzK9Tw5Wj=^oOt*tG& z)Rzz+-{im_sU~4wu6`oVyh6xC$J2AM^WKr)Qy*jF;*MS-uOVE^4}3MGp`jrobk@Yg z1QpuHN2%|Xz0NhJ=c`SZ$2!svhgnYbRmknxvtB@5*Welxzgl6G>io){0<$WwXGKLt z#l^o03twXa4c3C#wIihyXI)owpoR1OmrHT+%N9No-{AAXKkb-(X|o&MNeE{ zq@1FdCsBEM#=4*!#Xx-h`gZ~4*5$BK%ID6>cUHF!8VUnx>EvZp?leEj(F zRbAbFM-$v(AzpUZxsf*Xl%SB1t3SVOH>gJ&Y?pYvF(H>}v^_QU&YgRHM{ZI)=0tn0OVUt8@Ku1FR*Z z%gPR%zARs4S`N!a*649hOyI-8k+jdZAa&oZ;8dfBpJ3 zb|+3&9Tzu&5b0o)Z_(Y=WpL_LR_r0vJ~lr4b3Z+ zw(*`H>-_fZytsI-MU_{4e7pb^bu{hpb*3l^!=_DGfbuIthkbnh&W*NDO-?Gfep7!Z z{q^hDi#<=)2n>J!ZeeVERR1lC{n^&IPJBKz#BbleJ$?EVbr}ck_gLr9h;ZBmzj!VJ z0e@D73iRkvb8m0_?$;?w+yd(PDydRu!}Kb~uu?c)_l|_$o$lPbckkP`Z^y=rZr;3U zXJhni7q~6-?va_>unc4S-+uY;qfIy+d z)AfmoiH~!0lVf7)#nf^7$WlQ(nGYXoS{R)=^@gb5+}teB^SU;0t7ds_ZthsYW)88j zw-4_O>z=)INvGxVWDiln$<^2Q5U-%fp+goZMdx=ncBC;09tmU5-Gv%f<@GZ|E+izx z)x~9gejc5{%-r04>cgJs)k2b4>E#zdQj-#BA8%fkc`rWg;Xj26)oSTd@Yn)XW}Ibu zGpEG-+}yUdJITpyLo>9S&D?y($}0W-{oz$z01LcsT(7l_&1tc_@$tQBsyEa(ujViv zbenuqT+C5Hs}S?E@AJ$LUj60J$>jdy^TqdhynW}{_QmAoNmO|SC@QE+x1)KZ5B=L~ zr{(44WoEh>uIuy{5*8K?ohiQfv6>u!(uM^O%8HGRZE0+L`~Ll%EwyhS8feTV9dHf^ z`?zh}Ho+YqUFw6kqx#J|OE-k^wuF+}mIKc{T2NM*i%xeQeH|PeoT{|^^5$lMRw+3- zqZ23Cn2-NGP0&eE6qS^e+_5m+uDm+=;n_Y>|O^u?r^)=;ij$!x`8_wNzx*?&DF0EXjd|MZn!xe*#jnlr0#(>``A*mwE#@#9Q| ze`U|Txethd+Pr^jZ>48pMn*;leJm>K?mc_<>~Q3zBdqxCRP=amSNLasyq3vF1~~YD z^GL+|wfE9SzcZa7-JI( zoa47zhpu2Ob~h-9amwQO@z8{X9iGWaNuexk!I!jG>R8C=q*?tfuV06?d<6lREhLs* zvy)ImlciAZ*VHJJ8{69@aRil>Q{%1L5@dL`JkU;*U9)BlE&xaDX+eQNdg9Q~5Po|2 zQWk&wRvvkN+;wsBDm2q_9x189ExZa2OVqI&3=F7}8GIex-7)dPqN18QI$`nY8X+95 zt9Rn!xV$DW025eCb{3v(ud`^~qjgusb-CNtV`bU1Lz&g5@=aT!+>Ptkd3br1l$1&? zemwk&t*_eW-~p;)c7Wn`-J&GiQKC&lD9-_>7uVOfCSIpT+oY&nzI@r(IBtwS&B@sr zr&rFtBh8CZ?~0r5R<>eZxS62Yb_3TH zN;KOTv1VcQQvJnNM{kg$)OL^_<1(i`bD~9bjU71@7VdhJTPSy^y_?rvzwka!LtXuO zCOsh`oe706)kk7m8{n{2?$*W*MbE!W&&K99?(RTqaP-brq9aLfqh@{nZ}K_iz3_^-acRM2l*p!*cIhD66t-$;k4{Z*Q9mIfA<4?k00V^_#L|c_nYYnJtLzM zm+=#(rXNuTuQNTDYy+GJm0@FJLv3D9qN|ba?Cfl4Xh3I2Ed|;_r=FM{tlzArrpC<7 zeEM{6ORVG#rnZRL+1cpm=%l2i20o{i{z@RwF5*;{kPj>kN!WnY~Zp->X*y% z3JMAq78WS4%6%~#2`i>z=H=0CcA#zxeHHGzzmBve@+!EfF!-F>U|`U7sjpmSY7v#C zp{|bFX7^`d;a1xd_a7Ei7NsZyOUu-xq@2f(AK$xYU}m=bSHkezIl%p;pA%>%N5Xj4 z5E8c1%0OW+$SmvMeEU!)-h*z^a&nFz3;^GT0m(oT*xA_+0pXt}FmTH{s4z@{MI1EG z2Hz<#&cV)pQ^U!Sjz7D`)D|e9768IZ@|$Du`}@<#hJwN>OCp_rIS2lU{=8R2q^HtT ziaZ9ccRPBZHC~EAK>u-KFt86u=npU>ij=rGvj96Q>l*B$L%z$6Lo;6UV*=%mtE;QC zv$KnfPdPCHeWMy^dmKYocXM*e5c!5v;2`_4tE(`QH2JY)tANYW{P^MO&fdbai{2~G zF1#Oko&52sZ3~XJq(VFXY8MrRjUMmN*#5CGQn03cosp3dP@$0Go~>KAmOmW&@`Ybq zT--!k!&XFG{Mpl|*z86_{UQPaFIrp0P}CF^D{&~Wgtreos;*9{Y;0~OGl*MO^HA)C z%*tID1%@Xk{&es0@bYSIY}`L_?8J#T*mHT7H5OR14*jySGQiu6@gMy)Xc7CV9I?-y*)(yWjPQ&EJ3WE01y!Ro;t&fM`gd?s=56SfZR`?K8>|qzrI#B zacXdI*Qo$htUbPi0RI3Sa#B*xZf+8yqO4bEKY#ul85!B{lncmVOQAS8IE*=~F|@@? zZN%qf=it~y-LQ4%r=tWWCMJ_-=T90L9T5)WQ{HJ~W@55~i|ZCqRz}9W*x@w(4s;(H z0VEGSf#Tv~AQEhx;(`KIhN;h0iDmBrP+z>T;-H5pArbrM*VM=MUj!UBimh!`Rh35j zG8UL?2v_Md^mT`#$Nt!s+?<^IB9HFhUnd}K)4&vwzL*BpW}%=H`|wQYy^M^pXfR^| zYPs7~vvmQ7nDKLm9l7Qe90Kz=)e2v+<_rQ(9#BRyGi?)PFOF3$E-qq!Vt@D4ooS6D zGNgmYdY{@5oKfyFo{^Tu&%!``lW$%Tz@p&2aCt~l>(Zr5Dk{%W7UF{dDAgD;Gc)zs ze-6}cq;?dY>rx3AsfCtNYWDq(u&%m$viy}@N=oKqsq1VM?K}7t_Q=a~3DkXc(%=>V zWKm~8j}HB=6BifP^WnoA0=DK2BKn?iB52N!t_R_I0=PQt@7J&Mh$LfEQ-HG0>Sl;P zHTF9EM54Zd!8U;+6u3^O!J#41U^a$zTtkf8glOjxTFo&{&9c%`hM$L0m9D-61b&}y zx%sPO_oMBBwVK-6dlFF-8@PV-76!&YC@OM6H^kz!4kS-cU#3Qchi_HV5r_v6J{V4z#kdfw3pO&WwYH0<-&Ta(N4cm3gPDK%g zCphr8h$C~0fB*dEleT9GsekkK?fmcGsq$9_@dtfC{YHS?Hj9H+_>*x6_rhn-6JKv0~tda4q2Pr8j zTtiZ4U*Gy0Dj*=hAb^u?Y1xmObVNe~_5F~9#P_pVQFDu9>>?R#uuxF_m?ox(Yb_=&9CM>gwKVI575D7Bb(TVnnb0p z>vRACeaY3HbfD|gr=&JJsTxj>kj(6CdkW<(7&ugee%!~N0vqf$-0Iao{j2gkVS#~1 zz|K%nu!}zyoxAto0mKEZ!@sxkD%^kcXfKq?yu3qK2Gy6QP~_iscQ1NZqhmp78s~9G zrvZ=so;tngef8?qrn#>WI=^?`+nCtaFsP@me+AH@!cDwS*JFMx^1*`#5Fl1pek+Gw z3E>c5OHUtf?g{u6k=}d4$mlm}Q$SYg`3o07U%)C*tB=~{YbopN>#LsFF<7x>)lam( zzFt&R6o(#a3eL?mK1@_pl)CASF+bR{93r0le`G)P+DERP;3IP^Th)|?m{Q~9}`u(D<`b9a)` z)l)h;5<)_UX9duOz>uKT0D)Ss^32Z75gS^cErQzN)^QD?uz3H9#^yZe`t9xR)V%EM z#+NV2mX@p7h`TfM@-CrlZQ8U60BU-x?4?h)h}95`dZ7o_bNT&Zl)%2&DS!D3Al;5l z2Eu#k8DHNZa&RBjx&^!u9~URxv@wZj6M%wo=~ABFQb)R)YQTsjy-$gk%_Y+s5SR!7 zwXuU=^3BSw6FD}e?K+lv$Y%@Rp`<%^ZV-1KbaN22&CboO=L)&)AxuSuudZGxu?()P zR3s1x1zK0nwk515NjnpM{pbhm_Cr6oGSu+Qq4&hB!ghT$(Usnc<;|Nmv2Wk5d5aZF zAZ|tHPYG+=#+H^^F5T2ae+wTBOit#cr_W3o+2F4;E+m|jN~iB@wY?P*GV$Tr1eg#i z`f9y|yciuNee~MfZnNvW>eja(cLFTYA|XtKeaND#&?yf~+6G z%*?EMX3aL7TQi9gbaNMA@!RW z7}7?imzS4u(#Qd=t;eYyKpHhO^zsJ}wzRa|VLdUcRpT);7(mK5Ei7(n0Vu zDY6$Z%(;F0He3U|BEZ`XVpcvQ;m3KAFPl2NDe|u0*vZ+%+F#OmZESR#hNJgI&clvk z5SU#@WP9a|%V&-`bLrAf9-hirRdw}s4RHi3qw7o%Af9t=UVkYlG*q2|SN`%f9f5S6 zgDzuWqM)bENzFawuKOC|e496TZdlt8SM&*#3ChJe(~Nuf5{C=upZl2yfbje2x3-~? zLp}*^SWMGBfX0^Xp8w_iR2LX8^aMqy#)j zIp{7C|D5CEx+u0Wx+qAxH2G7<$nkR}!REM5Rz?Qd+&no^EF zgYMtO4z!*D`37;#%@uDj*3r=sN#fSfuUTC=$f%^PZ)j_qN$qS$s|e>JlBIoqe(PpP zM-TElwLwl!ZcE^u)KtmnOAZdL)&(fNjU!0!|vOMg>dt`J&~nwr{E zA|)-Y==v?%-s{pO3ECanwTHB@un@hX4f)L8KD(!e*IxydFqC-8(9p%j1*l#!q#i2v z9PS-_CZH1+7YBeC0E$ca9-5OQ#F~)$^Poc^^^nAYm*2g62cSZTS-}#j1u(%B*dg-` zZ3}36W@ZMT1GV>w!@V-*-0!`Guh6esz6NuI5ij*V%?u2D1x0LJwiPcN$jqIUo7=WX zg=REZA2Qz4$*vK3<{tUS2`K6-av!PwUT zK|y{;0|J0&AqOkCjO~X(2ZPa$LV>Pj1qE5$qzKFpjR89e92BYu4Ky-tQijUe`LF@n z+-VaNr!q6P(=z=0Y3ZZa=#&eXs30`x8x|FAQ}|eCUngPtO0WLT8&i{9y@4hP3Gzn! zXqQYWx>sJ__mE4Amv-|V@`mopY}jijQLB3ljRx9rgU650ReE=D;G=Qwl~)$jPM(aZ zx7JLV-k=g-7nYwd+0X;tbKn5s8%yJ~R?9THVoy)ck51x$)4Bbh1Rp*x1vDRB`(J+f zGVJ%?`h1G(|3vWrC*%K*6#w7x{r~YzTObhBugTsykO|Ov%VB`IlwFXKU4XBl6FWE& zCMPH1xpgh5c|*@vQbLQ`M560Y-pY3fBpxJu7d4FM0NY#;)THu?3Y$!g2$yM2+v?1WKvf)Q-Sf0+h*t+CZRbzyJ^o zVVxw8!8*p^j8l1L53{mlVRS*viSoml_ww@U%F^D<%itsftO5egANB=|$&*{v&y04q5bRSBO%gMtV!9X;FZ3ZWW^ z2AjYRNERTGPK-sbTkDTKg!2FwmxYYNj=P%QwBL8xgWB=fD8F$86_SaW8EDXZwV}55 z#;YN#P;9oN`i9U5&CBF~W*qwudCft%Op>|4QFYqP?6|%mwmWzfsuHYJG&c#CV@7#q z;~nYr=fni4cCV8dNp!1WOps)7%z%PjnsJuVMpnVJM*PG1lt*SfP<1mz9u*h6VHLzU z9s`qsp@1KnJ*6-{A3RtwJWNptFDxvyZ%N6> z26*TqiCI*Zf-}tLLEcG(r6^TVRwfR$r;t=vSLXs!b0CMxl0dTEgk8iy*xx|*2|(jH zcWxZANu)Mja%{}LiF72F|p9kNr!yO|M6C1vY9>>U%V&x_|c=` zuV0}ICvkCca|=?(_ zIx{r5h9G3#y8C5(ybQ*-*BrPDa5&lX(&x$`7PhPMjdb4b1bl+oUcZ3BL2G~=lYs1O zkx*LKLY2ekXfRe)RR!GHX;|g^w_J}Ai;u;$ez$_f#Dba4?`CFVf;tBx!a$-^HVgpP z!hI+-&f%83)IkEg|F*mhq8e4t%#5dL?#m1MPy2CC?zhm45_}nLKtQ#q2&Q%V z?<$X(UA-}hiCX%G=$}qbvpA4rY9O0qt!w?So!+7J94e>s8q^R7owzQ*Y!@}HXk<~a z%_A!+`YS!>Y+f@{=zK+nv#PK|;bzd&-w1emGavv4sXja8uY6!(eJ2|OrNb`h{^75+_%Ea!oR}ol2r5XPiLHh?ta2!tVC6u!? z{fWC?bpu`6e@_1RDxv~deKy@dw`xuRBSTg2MZ@_qe*l8z!^e;J38c+Sa4ny*Z)?)W_QpnN{SV~ex$N7!H|{rM2nVqF zLBAF63l}a>JD?)`RUVj_xNzo7+M`E1wr^kWx}LJ2N`eHdldP~^pva+@)L8}37nS(T z=NxW6zV@8&NRBwUyXzi5zI$_Rpx+?GRNUhX5iPA2cp9HduiS$mI1HTr7kt&m#>TSR zyUF_=>|OzCoE#%mMnEDR3ybQsG`dHd8>jnhae=VUK+rngyxH~QO&km(XL+7Z4FScS z;THRj`gXFC5p&5BX@eQAk zTLL~yHBJjs?E9;g=G^531lHI<99MsUwAa|!*sYz7(W?9`m&-mu8t%M$($MgAsst1mB ziqh4njfr-)w%B?(>D$g6ny~%a9K&qOEpt9vPx595>ISZ;pm!2D@ZJ0OM-Cs38ZCdF zC>O4nZC4w>jLmr$t)--7^;c;zT_ZnU?pH^+rtP68L_xtDi|bCZxm-kuL3NjyNzpBW zzA*G#XfQtKuR@dgq(Z6cN7*0(7uVG;e4;oGHO9O8%@FL=`og*D{23HRsof5=>>&u z8UQctef1hTYVex>rV&T`wUr@QX#eUMYG#!7}sQhGVP!@|BZ&ANryMa=RX$b>IDE7peXd$%>4QVLc51N1`8#Mrhln1 zAdym@UP6;3$f)C{>>9~RS2<{Y1iDqzXMlp|&sDGu(O|(u{h6M-kHV-!5J4~>M=6Yj z?R-VZEP{-pq7PAQiMCK!npi-5v$NwMHWWv^eEAaSh_GYFDI=ph(bulgQ6peA`K-k~ zg_+cGmd=+&@Ng(CXyln37k7&#N;7$r%^=2F;)Y5#*8oMp~pcl>-ZbU*g zsJWxU-SJKB7A7Vh66GlLKok^O6mes<_ad7OBCc#49H{RNpT3Tddrp5*r9lHdtU0#m zVbgyoAy`jhe0(3}%fNs?3sl#oO$2I!CS(tAcCykew8U8t#m=?J%Pe~PLL!F<4p-@@ z(s3Of+G-=+OA8bxae*}RQ}MFDP7|IM7Vc?*T81Pd(BclkTI?ceY3as^oE$OeJ=6|V z8r2P7j!duoy$T%4DQU5P8#08D5716;3WeXK<(aLl2F}`!_17pjl%}O!(|MSi>ofhu z-`*eVbeJI%>18asBQ%>`R5+lUY2+42!o<`xBuX8G7hxubTW1ponn`;xeih(z@`6oZkZrt&$z z58l47vZ@N#0RBssZP%n^~1s`_sMP$5(i8*m(e*uH4jd5zUkcaQw7ee@{HG0A=V1P$Iojd*U)_8&{w{|XrV*Z(qoq2*r{ zRQybv{`eRA%Lh07SCIyq;_)vs4gc;fr$Zu;GPry96if}$G6VEc6vnyP*@Q>WsZ=WR z@w0HtffSdpG^>Lf*%{VhvCy%!PoDAiUWW45IDst!0E2qxr{#|b+u_59!3%7KIM~_c z<>g^YhH=YfLVFaRxXk?F3$Z*y^RMZAac!;l^k5#cvu z@c#XKn^587aUF*1O-`Q%_6=M4dYA#3Wj%-2kUJhfd?-M@fB!ywD(*)eXxJJIH07dI z9lAL{yT8g4bUSJXFq&#Wmb$KPKIlF4J28$6ka2d;VBHwf%`4pS-lgT`fRRz}VXQNx zg9H2hz5%1u(ecL*tE*O40%ZHwNe7s1^Kx@F7=Hffw{*g*#Lu^HTa>#K8_NgHLqi{p zrmxb|8JcZlN3@vnlQTGBsDOYfXbQV$P%0VHv8iRdE0}gFf{ps0-Y%q_F#p5%vW7;z z>WvLDC(ohD+`EXNkOl)J7@vDgL5{1Tj zq?K{&)*9Cdj>c(ico1LEw_2l7MQFm4y+PGYoGtP#Urquc9;evPwcq{AbN~L&)C-U~ ztEzkqd{hty&zj;I0<=I98GQ%UfFYfhsf;BxpNU&2q| zkhI9j%Uk*ASmV!Rsj06Y3AlLUh8jeze#ktLNhHzZpQJDt`KONvC+ugT}2L&j}$XEM?2`@%W?se44K7%*78-)@JATr}35K z-ddy-5ENh~c~s&C0sp7w zeJ3x^yy9a>7uHRQpxs4KYsNjoLPC)2wh&0vUimDMy$25_wtOuwD@#`NeDm%dhXBRi zegQ?Z%4i$7dIe^z`@*8&RcU^s$n;hH$<% zO`*n1bh)9dGrCqiq;M(wDmKXDe%- zr3{G8_tFcG>FUO!%g4lgbt-d^JqX9-^Rx5adpSZh&adLQH`P1hP+hrFFr1Zk{rYvi ztuG)Q9XawKBjaUDOUN=Y?{uM%tgIWdRmka&g+I>DJ_>q!JHm_0bJvTx^Ha9E)Y3wgr%0)%wr@DRr)Z}nj zH=cBJr{^Rrz77HGnT(+06?Y}fL8osMQSti<&xS`ZZQZHJpNPCQQBIE2v=RC!u>lGa ze=rF7=`KOpTT801Y7WJ;Vv zlYp9)B}6s$Pvjvn8B*We+R7f~zhWsPB{lK6>JMjAL~QIR#%5Maqz?x`pBAK6ztSeu zBrzemq{g6~q8R_34*5|yz)=n#dV3#cXTz@TT+~fgxXHry@xayDVNLivh^U@3!@qfW zdJ-$raU;nLRi1MJ4oENU;N}id+DBTfy7*D{spnXSfZdIk6BV8Rg$P)iK(|MS$t5;kXyY+J3lkBdl>uB(Rck+iCgqJ9mcW7G0*G z7j8Kh7S4OH7@{pSX)_5U)V_La^b=+X-q=AqckYyskf5k1)mwXdc}2OcT|6L1BF+Be zTXD%><_~`*B_osBkJOVUVE?2jnhd(Grj}MkMTKsHbW?Ztb^+h}4AEKI3w z%iZAwgozQH@j?_7QtL~ut~mqd?IA=VzGA=CmG9rbGYHt&3?cP&8(joKFj~ z51H-{1QSyfT+gFQ0wWdJyqf>{6HB=sIS2GKgRJ93X=w+{VU6JR3QsD0X8y!rc z7Ow{jLOflw3*jTEmgym(#CM&YS6p5Da5~Y?FkY|+M}g%{M@QOf$Btbj5}QB~DkdsD zu%KN5$_V0{(9zr4E{?y+gtzml_+lae5-3SST+3Ia&4 z-i&$`Io59oaccAC&9wPIjZHB3qZKa-d(Fa60=d2VcS)x3!Mx={f<>iAWNPYGp8&pf z5C5+9|6=;>H|O6Ak+LU%5#-)QA%Z>aQ3=STPuDm-1sa0BgyvaMS_)-zw$R{p{|WbS zo&zKZL^P+WgXTV$XQLycb6H{lqvh+S+^97w0r|q{(11q(HE2bvd2&f%T*T{UZ_o`j zjvVpR(g%HFNC%tst=VqHPoLwz5{AhaSELgAOYNdAkH6XDB`WlPgtE%C^yR*NkAKL$ z67xrsF*Y{dZ`3VKQ&ni`LmSan&MVlISxUDX8;^R4zoH3Mf`Z&8-kY)g5Yj-2T|Jgb zBoZU<-1(#9KiJsZ3Tuz=*A;NApq|!`{)q9$w_K~{Mc+cQBH}%0s|Ex7)wLA+9YC=f zoWxbGz5DjXw*)2J#oT33L)60gqjhK`-(Uh15K@%=URxJr9glx{;k^X40~kni30#GR zjNRn$s67+T!oYy4g=M+RL(S{M*O}UqfD(66aqOzAM4qxA6c=xM@j?|B;c(|^Ru(OZ z4?KyO3NHvGZl@+KkIPEl&7gKi<(*yRdko@{wXWl)-v=5|Qu4t^r%4uBHCKOMg4GB4 z*`(5A2BsvGj@6|JNhA;uOhcj;+8JbdgeBf$+JF`(&+s;2KY8j@F=Q1``l#1tjCx1} zM@G(!rus=h*3$9DJPisWr1sSd(qIFGU3fFrT1qTFZKOzkQ2O zSc1L^I(iic2M46T+T4K=e*+Aw!GNr#n7n*k-4?+YRj8oZnVH);INT5e!D8TiVLxgke) zECwWuuguIno<6H9KGY6e5-7zBpbAkn6_snW5s&8M{4BuC(z_v|LYOiII-MO=kCc2~41QJt-HXD+kLSzn|F;YzUg4JM1ceLbd zRi7o5)YYlWCMsR}ByR^igrVa)rVT%DyTIWO%bQ-9v7vUH<$Q6S$x`$NvcPbcq}VR# z>FHsph(b7e5OcQoA3WF=37kSRO)}S0ZXPPUs}&(|;6S_%lJ_zVaa+!Hd0-Zdst}6; z33VeRG&Gv!&JPqTMn=Yr3uXYN_BJ+B=<$p{VEt=9wM$Sm^jF!rt`L2rA;}pW0^yTk z#ea)c54&QVnQRY)#b4_lNt=$~vVp~jeJW@7LO9a@yQHi-7!q#4J2f@Z{j4m~HrPrV zx9$`xTgJiMBu?JNYU}pnvvz|5%)&8aE-sr{BO!Ij_(3}{9V@x_IIutdf_ujebYVzD zzo)19XIjQG-N*%(chGX3IL^Blt|4rJGqz(>)ab|vEgxesIyx#y#hl1ik~b#-Oz)^7 zTWA4h>%e`7FPpPbJaDdHFyWXEBEw(fx0-)f6}<}cTC)%M3pb%`-ZOxb#7c%Tqu{et z1Y;2p5Q;8DbR<@^2cBsG7+^$E3PdO(@IFF-K0{1W6(MadTB$c$f)T5#-Rb08%qxpVocpax)tj` z4Yc~?$&*7qOJ_pC918p193{NVx5SXk+O=zG**0j(xSQTaH17*~R=kxk0tLhd(5|xu z#@Oty+uAbSG4F-qEMffQ+5s&j)wPvJF%1oq6^UV~{_9MA>gwvZs{a5i17Vsy$LsM^ zkGdRV6FWX1eiYLX04~fvNf6~}Q%eO;pE{w&#K*b=!eh0{pFU+1koH+}frZpK4SjJ$ zy$Ahmk8+S&4ihLA4mGrLhbX%fHk34xW?22T106F(G_Sup$Er4~XtTNgInqHmQt;N(4={V#5s~LyU8-TC z!CojGzwi1NMUO4SQ`~4Ut+gN-=of{&8a5ZtmcVKQK~d2lm+eS*lS|%0>kB4gbjIpe zc)UT&afDT=#H=C0kG_i7of}vf)*%rMaBa1Tz|Kx(fxfbhH@DpBYjd{#Jt*{mwf}_L zgzh;@%gV~m7j72~29N+(+(4*~!-v08W|qF;S~e3rHkTgSz{FEyF-EJ8JI)J@PfP$c zL}nvQ@etET*!cY?15ke>N@LMbaURj!xNP7R!#juMP>QOF-01L(N9!vRzVCVcT1Qi} z>G|_7=-c>Xz*IOENEz}5eSS4G14#kH8>kw%NcdrBboF6tA(@^D#Y~Ilyw*sKHI|)~ zOe6Fd)x~%mJ_ifg`w*Xv0~E*c@m|P?zJHeh$09{uBP$A}L14B0e&z>&QV2dDF!R~d z!*J6y28Gb)E)a$%^gf_Ikf5fUI>(NkII9vc47gEaUB3xq71+kGet>lt1qHsXQp+a5 zol&s4Y<7mf$16hnX-iQu#ZRz70sdrUVm$c?bTUL@x2lrB3@kNZg?smga8S`&LB)8vxa^_({1Xqw6={6zoD#$}f!ndLt)h(>k9)3MYjgs*udzZM4(Qna z50*4_Hg0PQn!=J!$txtq*9fQ|vDo#(r)IF)#a|@?CF<_oU$@&|E|y)};vxlekrvXa zw?>|SdEaAFbu@In*^ic|PW|c?mBmvq*m3i5Vx}+`NN)W6d1c>s%OxY4Je=AtDJnWJ zw`jR^-z8!Vi>|k~A}vZNp{Th0U_qCk7C&G*sT;RnbQzZbzK#nqtL zScoAVSi^zA%b zq-{jVZqxzsko6H)ETYZGrS{|HQkDI5woJas)B-EUq#rP}&IuSSNXQ`U%?0l`N8V$a zKeato(UW9;#=~O);f^@rCqR1ChzO~FylPY)#&1fE(?g}sqhZvE;xjMS24?_x-&{pJ z>cFrHHh9!a>jIpAJcz($oXv;70ZH9Ih-7Ej!hWyxTSYbpiZ4Sta7^}Z{@U<+$Vy?8 z;v%be*`Gh(P+zalj&bWl7v7112q9bnN49g79?_-=?41UAIl0&j#AhBs^I2G0QaE_f zCREb0dKr#9LCS7_%VgJstqtd{m{OIVRc#tI-An5&pOLLKqh3Bu*3o9ynyJ z(ZGjiLSfy-1tHIiDT>xqKOq#nfq{W2TVu??H^_^M{_~mDFiqe*lM|uk|1rv zTVOElsNFFn1R54_99!!=k!R$V%}FnT=xy?p5){D%LC1432&@SmaG!|CabWGexT1Rp zU=<^-rDuKR3Xz;$T55bW0DR+C^JPeq3SSZK1iyv6hDmhz4O9vO892soy1O+PTz`C4 zI&^5~dBw(Q$;+6rg1VMo2OEK(iZLZB1&6FAn+dVP`v%wvd*mF^_wig2f#P^Wef@Nl z_XiJzrR_IgV^Y3_Er%uByk}&1n4gNScaw72&5a{w0EpwZ-$6`oKs1tld-m3?TPh5> zW@T*Wmvx0|q59&wJ~L6^f^XlaW@ncb!Gt_Q1}Q@IK|>2dcnbj(Bm^B(VAd(x(b{#6)0i=@YiTj3=JeC*XlLGa9shV|*Q9I9EK;qvh*Mrg=Yon(TxA#w$Q$2P;e<>V1k7 zjPJ4~oInO@;Ie$iDifjt8KfixVM8cfctVcnU#P{WO))c+8 zUCm}P>WWR3uCl%D23Sm4MTH<04S89acxA8-&Z?-0$Yf6e{ocQRMe*~!G9BsZ={Gho zE4Y788oT%z6>2-fI(7~1xcycL6wz{Y?-?;}ci!Hf2ZDrzL|#!*^zIECHiTh91@;T* zBwP=64bQ7r|12(cu1Bu#GXMQ_H+eypk5J$&c43n3=vLF&h)j!1|a40cS#W=+sN7J%2r=$Bx-RZFr9^g zP?wb;^gZ0`p!aw_%L_~x&mtMp0XGTH{K?NRDJ<;j>>QZ!n4cX){TzdHIW~3~@#PY0 zn6C&sr?o%}p%nH)uxmRR0J0@W#p7zyKd(lU^w^&Pk+VIFZ34%Q)AD5m+$L|XL+z9( zs*KCXMs6BTQjkwRCa9=-zP`SN(N>5kGNc1?k*iiu+cGdR#w%Sd)*B4kCVbQ&FbFlL zV@@8D0fbS>=(g@|SI}OzJeq8tkjjKo=72&AesJ@yExqy`ChQwdpS*TNGXY7&_trw~ zqEc9bSN;I27N6@n{BqM7Y6s%~iT+GnHpmTk>2mGZfiZI@I8u~hx`orW)2Io*e{&u) zE40%_;n%Re6&echlwf}kCCAkC4|J=j{6^re#6TuiR#yB}Hu z93LGOjxL3A-sx5Yn*m9Wn-rFBEPif-i~`XZ6jY?7C2IbYQoyGm-(DTJW%2S}6G?kS zf?)t!(xxT^+LkhnhC>DwR@h0{JTP{l-XjU4mbn^Fi9_l*GLqF`gWVT(lK_CL;AUD{ zOn`upXU%*t=83c7n^g4QB7s0`!11LXTa{|!XSaw_EIVl!0DnKI`3bI0fPfjtSPRy4 z3y-;o^vX&zfIO&)(nW;nA1#*$>w-Xw1gPkBr9uAS?Ga3%=Ik-5_!YwdTF#snTr0b9 zZ^noMtw{N2><)~=Lpltd0gQ{^>LoZ}i3ztthu)_U> z`LYV719BC|v802)SD(3mw$kU_%$IWZOqt3Pb$aXLWCt!)iC{*qJk`!u!H2gIwOI6+ z#DmpUG*nnv)y0l(TtnoqIx2ace;2=qM&_;S*<6!ss_WFQ)Qq+?DP3}lw2x|+Z2a+e zqIEI}3ZQ5E0Ry-9I%kY5(Z|rLFT|V&+rCkC5AC*4Mszxr3Gx_p4> zTd~}E=<}3m>*KBPR(z_yk9?gC*j%qIV|%kKKAYG$%|UyL$_1IPB|9EDzO}S3vv416 zh%sgEZZnene4*Ow$GdJ*qu2e}q7HfD50w)=Gc(d=UiK!5^oQIW7uW92R%o0qz9K99 zusY-Z!zJ&Zy-5?X`|?k1H-D_;H}NeqHLv?qj-+FDt7D$H{iDXJ6A4}g`=>tK%m`i{ zzP^z5Y2k}h?@Tt@`mYGK5mU>PpWe7EzR5-Q1JEIu08Z&(ZuUV&a zCg%DlPJ7vF>zkOLwy?dloH>}2vp@XN_2Hz_FQH?#*=mi`vMf(NmOtJ9SWL34Sh}RT za@xUb`0Lz*^Ubq)-FGb??iH164P)prx_c*r=R2qS+lu{CD=*_Gv%bAac$)NRc}O_J zoAgrYTXTs1?TCR?9q=|(iH%1)`ubV$HaGuiuOiDUhg~XHtDC#V&$0T(7pUGmr{6T-OCSn7)PE6wCEeBb!K3z( z)Ppe=<_VT}Q+?Cr<)nlb2IC!kruN9?oia)~rnsF?FKMU#=?JgUk(k)35JdeUzjTO1 z3^+DGyaX=#_8UzdP#S5KCrz|Rg~Y^YFc6Fb_HnkS9AoIU%QB5mP2lF^8J{>|o^*$> z%`l1AU1;CR@l%7h%jcA3-hC?T_INm4S5_I#{gYE?_p)*Hc6YHcl`kn5-%m)6@NQLz z<@WnKyC|&Ozi(f2ONe}_SN+TRI-BJ=LkQyt>_Ousc>OY!P=h#TX7-7W5r`L0P7q*0 z>ZR}9J0X^HHa5;M4wb!MVdRX=5Zf}f7z0}b%2j*3RAB7@P)L~eyWZZ#K$2l{lVT#P zPhH=y6IV{Tndv>L(7rg{bky?w;5J6iU|lnjCJE&jljxnU4@D~Y59I9Lw_fH3IiAH91*H zv`$9#rNzbihK4Okg@}3sC;7F)YXxWCC|{49TUnWBb_<5sBtQq7gi}S9IT0&> zIE7Svl;&kv*vG~(Qx3U7`}py=Mif@KO=c)Xm|~xL0p7r|ZJWW^Rs^>ok<7KE-Md$7 z8QRcrn0yOQpSsW#!RfbKyyJjNxa$&eb+VLS_iCZ@qUe#WAO2K)Olb-gOfg%5r195~Q9hNdrg7~vl^4BtHLhiOvm z5d8+xqn+V$&LhWVGttcM#H6PW(51qnxj;woP)tGk1q}KL6M8gG3!)a&n7f0s-uFyO z_Hy{o4Yen=w)Dg`EL3Fj&9!T7`u*YDKzaS{H|@{Fli@iH*^ez1J%0am@N14yh z&RzUQ^pjHSyR0l%m0x}Q5XYDAPkKFD8XCW-*#(%HhWyxBa)@1|TUYsS^xeA%&eSy& zm6X6>{(z@aR8{@`w`VK3J2~M2dp{;7w&i_>90WpkV47jRu*UWypmx3x zZDDf$IGsDRp-Q}e;zw`gq06a0)c%wOes@l-Ar-laqy2qh$~hsku5Apz5A3W|e%CMa z$@y$4#-rZZDKAaB6_FUXDqa@r81lAymv?dGit>_A*|hT77y}CnJO)8>*DgGO;rU@` zE?N-tS=hL^y7VgmPpYNzBeX@89<9bL_4^y_osU z@Av(FzMs$g8u;@!U#$oF4#%s-L`N7+AG28x9)_~s8gp~P8kq^VLUt-!2Hm;}bp!sIyp9R*-xzUOaw1vd%`c0+1~-7Vk9&+Lz#TEn@n z&o>=jI7{$ZOL1enONOAO?rC|$%L?!Kn{7_*cM_fV1~4tmS}WXQ5@Mw`?qVcsaSae{j(3fmgicM~kTe6E=2B8`wKC4GZzmL1c}Q zX*gnzZDp|()9+g^JmpB$(fO_3$yv3q5#2UuRTSZgg~;1L+xW2^qT5Xq z8Bm^vwj$GrO64B$^fctIh2P~WZTHT4Xqm#}h;%`a<7LAbX)U}vm9+;Dj96PMLBIT_ zlnCWaao>IK@N;qbX|)F!T%h+;B)mH$xs9D&+_`hrks1r3b%90!w+eu#qLLrP7_!8J zo)>=5Zg^&Y@e%C20?~>3YmDCNW-qVQJJ*)U%Co038|G)#IWq$%x!%mK_Jr}~;;x9# z`kj_Kzv(`D(BsIZxq)Lx-+!#yX%OL?IL{zJu;-0zRc@BYixTEHpjgip09Z+X+17UD zT+-U_b0j8DP>I1s)Xay(4Du=QMR4vxphdK$-3iV>cQ9-;C1Qnu`pRk~ldw_`P$74A zHdJ~s14anxsJr43&|nc4D5#B~Y08FE*po)Z6u4FamUQy@lam3!U1duapgbbq!?Oce zArMQo6=8*i((BGtU?8{?++RGjsLG^T{2LF#p@w;CCu^=WX`MXulr!dHU)3Dcsgg5U zwX)GT`C#GE(iz)!#`Ajvo0F1)iuOP66{ei!aQY^^ZF@XKmot0rJ$@zh-`2W=pVgss zWY{9Ft%$18DF}F5=<$B#wqARchbDG5N!dnLPEPY^T%Gk0{W#s1to_mp02`|8)|Izz z+<4v7Gow)oCGLHVs82V%zsLjuMC zK+>T{?z7z_!^0Yhwn(0Z6H&v|7I0~Kxs@(*KVAanc8lGDrNdPhPi-kCw5s+tNvW@6 z-i^HPOmcX=Pn4eVV&^5}4`*(Typ3lFIVbw}RJ?cgdQHE`zcry(_x-i5bF@XZa`)Fzu-?vLuF zK3{M|n%hpzRyrQ)^0~gU=U%}`i$R~_urobz@NPvzOLg0`x-rLqvy(4l4LSN#ip>ngd?lG=e}>rinn0}Eh zxC8tSX&KshKDsw0nEP5snnzXjk8BG6T?ZbzO0j^#lVU-#mj+Z^&CEt4F$;&N$ ziyc;4ILZ85wf+&9TudjdZfk}L%bzh$`T1$X_hf5(cj`n^eH8oV9rjx%38FYB*SR(2 zxNTKbQBjfki#=v@mLM2Ahk2}dtYx4H9vy&5>pssv2(KZeH3xpLS{BbgMuT*ET%pGH zBa)VjrkiNLC({5-1MZYA5u$4b?8d8uiWW>CR9p@=I61+GLOL#Z@Bn-gg8hurhl)P5 zRWfoWI29H*+ z9vmFpdK!DpWEgLQr^9IRMm{!TOdtX_Ct}eY#+Q=XrjIrVB_GOGRW7iesRN*i{>^;} za0QOzO%Q=?2+Jh_%X+193pAR$1=&@>N&`<9H(VZbiKe6##FQ`wH;|U4xoP=lC{j!8 zN)hrWPY(a{6#tj0`qOYv{5t#+a_Ij2Q_`+9S28W{;D5*bze5539x?diy;2td6GPR- zXi%n1&|UHIqkGKoP#~vRUV#G!YBJF5R*XlaInk>|hed|WS=6HltQo%G%PFbvQiwDvsp--)Q!u?&(8<8iv4-_u0uyU+H)VIw}>DY zSxI~J;>GNLUzA5de*S7Ad)$EATKIkZHsr9x1D``+M6^*c7UG#R)8$XaF^q>mWED@g z*4A2*n*@H00A%w1%ye{eI$1y{dF1D}g6EhJ3<0iFr5(G1<%DAb+X_%E^rwI-P25Gg zTw;Hk!B+OqUAr!rK|pB81>dHID=FMT1#dv6fn?_x5Fy92S?HsZIuI*BrlBNBm0S)T zIkjU z#OH*PU;Wy5*dXO<-|`~Z*U=58L*%o=k~H4DVD4ONvKd=yDz8mSa%o0)&RRcVxp5=(Ea8>-bSGg&;?-dw z%iMj}+Sb+sbeYKUClsu%Iyh5sg$+3KV9f{hq`{g9EJk))Xy`QJa$Y#xMs>nnBfRCm z(e(6~NJ!Apxr|NY8?1|&WI41M8?ghQoTV!6je?p0Jt7+EMd`Ra^!wk?k<6c)pZ@_M zG1d$?cc|JB&yMGbs)~>aX^amdL7&6Xh}|vs>ZgEFM|B1=11K3?JA{1DlMXx?V8c%O zg=tObY-ly1mA<;#k`z>+5>l!Q>BMFDsGC(SNo|lPI-hIHOKQ)j=H|Y4mQOZ9$?RZnzbGBHpTo13`3zA&4S<6|9RlCZ z8E#ZiC`p_alD{b&aysz>1vVAxLz#OP5;t_^hD4#(g<<7E3B3BI1M)$qTZS^Su=imD>k&3+JrR*LuW64b)_T-bvhV zZB3F}*b%xU5O{FTj3=w!^&xC-;mToOheJ^D73AFNBhNQ404W$19laP#C&Lt9rC@IZ zwdYiI8qDMNeLX$l`1?SG;QofC5WImAlp*_Vm5GVR@#Ay8I_TxK-N=p9R0eaXgU#>) z?*7^;$zmMvJ8Z!3O$EaVao#=vA+sy={iobumA%S?C|YdLhm#TqXtvx@tz<7-_ug4$V<>p$~@cn*1@9A>|YiTHN-pH|$j*f2gNtF|4 z=;+q0qoZ4EKv;|KL>jB>(a{-Kojf6b*7M6~ikHEbud8pG#-;Ta7jk42&)nDQJa?9Q zhB4~VYjfk4*ilus_HCWBDXQ-krI+k47u z^{~r8eWKUh!ID%-m&W8KE_~*{`s(JSGOf9`u$H{e9A~qJPL6?&jzmZI-~Y$8D|G=I zwwA~$+u0qcp=;eNsFS%gH(}P`bxKvW{iX40;q98&79VUHUwKaa6h4+eH|I%h9%*~_ zz~aD#S9Ih=zVlYilcZ`;~X;8yDbNlw~`}gmQnZCbi67=K8kHAfA-;3Nr1cIf#XVmz&Zy||M zQ>+%Ihm|9CKO&vc*7lOVTVC$x>FKGY#Go#Hx$kCD($^=aAAB#nDySKR0~c|yuqb@H z_iW$3eQx{c$$O=xyFPwoHlNdtYU4}Ox@mz^y~%VtCFMnCriM1hp-WmuMjC|qUoXou zmV4H%eOnpAW_`LTRW^Qhakq?5!qd)GkxR{7lp36tr}S?1;cvwfvwaDcEuYdgpT(v< ze;)ctZNGp(q3`m-)L>I*U`%XmtO)-2SWd^A_V85IGo6=T^6Y>8_#ww4xPQM~P-+x@ z(c{XwHM~6u$K3J3RG$Ui<=FNvCB(|EcAF;czIP;sC zqM@OocCzKX)|+%9yNH~+x_w=Y05$T~ty?Kl9!G3HKR@^E{HMq2Jk;r-k31qGBGS?Z znwpyY+Xwpl+k7&1k~(~r=A2ufoDK>Ka&T}sfByWyz<`89*S#dmhC7ea()^iPT3YTL zwq+&vMaZs1s_Z4CF>L1ODsbl6w@*=9JG#1;aot*V(${>)4J6+)O5r=bhMLJm(oR3# zw6vVL63i4*iBm`$_FI~$9{W}-DHXm;>iphqAItT<)Dp$^iHJn%@-!q#_)Yv=PkvZZ z(p6o3gV(6=@_I9$<%Pd5W93KA#UC`>xM|by$o2J`Vq#(vRH@S&A3T3cX`(^d0*W5)$OZhplcfwLCn@^4M^Nk)DB=AmO;%(B0M5XKG+GUj-JINY&OoGBG-0 zWb>7!`B36s2??Fkr?bA;ZRR{8eRW~Fz1HdHd&W>vmm3OCtQQs*c$7j-w$%h}=47Hw z*EvlMG$@5}l=`jiHm8$Gd;R(h|MtsYI%9%a_*NEvz07eSkx1u?i|^jut-Yysvj0PN zcD5vmqM+b6-_KTrYjIOhsId89{poQ-s^7}Io7mjqqRTFx_nn=c@7`TcY00+I^p|7W zv!}br?bjx@gHDqHL|G|nBz6}MRZLvGkkdTYt|DkNHL}=a{D}RRoG;(P!opIey(say zxw(6eUwL1PrFievE0H3f(T*&f^LhR7#6;4kl)sO}R1|+s%@3qvBXMuv_$(u%BlWDZ zvhwNEqI>sJ^$*q1F;ONbCz&W7V_iKCk>_3)6dc_j@c1#WN4DLPJpXo9HnvaaqEuXG z#|+(ru#|>}hfA;gy_LB#KbTrqSJ!ohAh3V`ne*ol3JA;}BOMSD%FW4{d=?O$?L9lj z-g~hk$e$?pmtRm&T%wuy`r?`>l@q_Tt*r%8n+8{0SYEpfYN)EJTB`4-muedA%-*++ zQ9lA3pUPC~Z<%fXH7`y`-*@a#f34h=zaxR72lwyK@S4Sjm>uu-t4|PR?|t%wKXT0v z%BpVXE*Wa1l*d>?V&dPCwvdxtIjS+=Hr@&k|J>I0DF0z7@xE<)=Er_XmjNsl5ruWD zk*TQ>qTx4hnrwUMaUfkI<;>~Ry06V^+w0`8{Y0u3XUDDh%DiX8!yQF-KgRF$4Ggfd zvffEZ7#bP5?BFQJAa^T0J^lLi>s0vztl1kr@N-HyoFFg;QdCtxG^R+Y?%fue6%?f8 z;BZhsNHzZ8M~n6A17GOpUye9&Gdw)}&K(XH{$Tt`xmn#SYSv=Rqu}hE zuSs*6)FwM+US8g0sm*v^Go!i`m5Ue2RdaI_yUQ|*FDlab& z3E4z>f}6auvXU$xj2$dt|0SlnH!(4>^UIfvCr?BSFSKZ!lai9!yg4k2M_Fu-`Rlki z*1!G&H>StF=^tR7y**K=VHBBG#_j!_e?U9asI;z&)sLd5_oeLW;^!Co9w;nh%b99H zLqnH}e9!?b3879lLW^=%O?TB#oid%BKdXBBH1itvO-xQUICJKV zu5N9YS*xHNL!|uv3V-?yHqqL;x?Zzm-%g%9Ng!J$tTm@2jl>hX2IKpjhFcyjEiGZ? zH-#MwAinX7#_rCtI@(%a7b{pDvBy}rd_!c9)s66mwj+XM?7F+Melj(5Vsw8=|Du)7 z<$sVPcuoAQ{M_``D`Pj^NILQ3$B%?GvO>_hIwv6)pQySc-I!@?}a zDTK}Hw%cl|lh5htotH$Kh zr%zv8Q7#lK@m(7CPq>PM=LxDkwTvUAh z7-1JNp_{rOi+yx5*El9O_i&1nxbKqZop*y%!+o#66?=Tr3fs7GV{mY=7N4II>8O+W zkI(Jhejcu_+e0da^l}J{jPrkb=+#qY{mOVMaCmDvN#3^;!=KV?Yir};;t1rd3u-Kd zQOy=%PmD^hpc$Hm@@d{xBRIRcp$`7;Dip8k=;}(gEOs5fot2e^DkeU4`u>X->Q_x3 z?n6_1_3Blm&n*-}mOvej>x~~jMl}tZg>Kz-?5v)ijfqL~BULs*K|yL{dAV%s$;dQb z()ECVhK7chhQ;S~b?2vtwUw2tv9Lc$s$-L&pePc&u3Q=D>tmvPFZYwRsEa{&lkxm> zFDEDG-aRf+(bMP7bBXrsdiZC8OP&QJa> zvE^us^zMkO0ZCC&zO)jgb?evAo(%zZ`kxg(o`=f)E-{iX6mX54oUQPJxU(_XZ- zw%*gYPMkF7LjCC4&%G(C1-HsFtmNwAdG087PR_yp{=(wo@s6y3=v5anl>l>HeSMwc zllZtir^ZxSV|%7&9UT{DWUu6A8$EyVB9ZA&U%Rp2E^$ku#0D~23U?G?WN!_ZCWEP& z*@Lt+<~aetk!``$6d_*Tpz2;-UEROGzsBoN51QY5`)YJ_G~?UDM~@W8Cv{%v9X6{X zj#*M1z7@5Vc)1k$^j3x0JQ5QVGqr4DS{Pw+*rK}{i?;l4_v?g?PWziTKbYbby25!W z1_lNqRr+~$^Jho|GX9(O`t{Gpb=<=I0s`mGpKsv|Vr1cUa$&kW*>{rHAtI+df%9uj zC@w|qN0VtnYbew$6SX@?CoEqrM=y( zwk%1yWMX*k+&PCIEV{zyi`{<@O=cPvA9EXd|4o~<{syBhU+mk~)|gT^fZ3|5s?o1w zByr1EUper7kiq%B>6FH9%$*!v_SKUn&71y({#5c%)`LD92eIodwPhii(a62CAasYHMlzsM6mc$8f}B{Coe@JhraYjWUkIHm&uE;=`A5 zCHW5D64=^Q6aq~{QFrDQ#rpdDFNW^gwJWjx=z7m9S5O!xJ*6L8owPB*0}-tn8yj=6 zK-);F?mcY#In-Hme?WNn7DEjc6*+?Qef>`%?35>H1NCWZckbF1NC9rxEXx+X>B+cQ zUtiye6DQU&FmO|=LP;#l%u%tim5r}1_n-2YYsT5%yLS%-BHyw5`}gm6gB;47dfvSc zW*M&7erO79=5zFT;in z9>2e|ef{eFAx=o`!0F*^IajuY`y31Br5z++%MRlr<`)(klO!URwV0G8XC!G=GBD8D zm~J0uRKjs@_imiv^e_ttM_n)hx9-Kgdvfvk*bj_R>QA3P@ALT%ya=%ObU@ zOk0l~q3Gq>JbL^%h-n*P9XDyMzZ`cIsx}JMa(kI)WRG#xeZ`PDpA`_9@1@?#+S^!I zP;-Kr7LtkYTUuT#+}PsgErWJu_xU*~wP|*C_T`ZZP$p)In&uWP2Q?KH5izmbDtjHf z%a)CdS;+JA^Yz??SN>*XW{$lL*dQMSst;g1I5iIj(f1G-zg;Ql{0lvl;`ZMHScwiD zuikcc>Z+^%M&(M4?%DG>(=ddI2G%?l?r+(7^iA)CM#{0uCF8x^R8VyWu~s(1aCdn* z%EF>-#N=$ZU%L_m;Gm1kRM9aKMdjqlU?5y~_nE3NPG-uDt$Q*b5pn(}2+l7u1qp>$ z7v1rg_Q?3C=tM_HGgE%Gzr+(@+#~C|J@`b*F}I%%k-5h&ySRM#@WJ+A8oDWJm75!2 zd`*oCdK9GwzcBApmY?q-WYLjrwUsi2eVr@a{8T&rz3BuhnN`D`wpSM`fWd{2HGyuB zspm5d7{yvyhPsnpz8r67mFxQU4Y=Ufh!24bOr)lL-(PYC1q7Zp7=f_6l7)melXJ{#w?(GibsFoEq-x2@y}_YNN=sv7 zVmjRVffs>E@f>V)brVZU(Ro0<3!YL-{8o+5or^7u;7dAU|BijUGdo?6q?dE4hx>uc zV54c4CrW$w(Uo)JTX##p%F5C$^O2ll2EHm^SrDwz(kyWQt!Hn+1x`$3!nisMK5$ag z(BVluYjt&X(SWqHo^HR@27x}{Wy4~3MMCh2`-Lupm-EItvMMSn0(5!6E`4OW8ya5d zkp`Ml_Xzi*DBwuBuU}twb8GnU;n_^z^3oDFH+NZo@%{q`&Yn5*IzQj4QHYa#$Ynqc z7aSQK9l$gK7Aj;Ra`>=4R08y!XeF@xV9~~=CJ<1us*aYH%Rs)OqN2EU*l1u$$&{Tt zccP+N)+bzabc|s7Qs~0x{VXITBs+V`H3-%E*U%6l@STL?cPEP<-^C;A>(wkQEM#S6 z$Gko`$cj`!E?KR5`3(JllJ=^gAc5(2eEbcjJ7N|aYqX5HP8b@N=3RY2wfma4*^EXj zc>UFqk1~^6GYzG7N8q5+?w>BTWt=0VVb6;*wy18P+#EAHf8Ns87Tu1;lBc$=?u?e! z1+-xXFy$lvbk!V`+NN5rN1#JCHa2K*$}85!ki?9hRS z8fomeyn{U5SIbhQr>oofTvvR~m~=5(VJrHN|TPa=~Ba*`8@QDve?SS??@xzsETB#tk0o z((-bmys4P|mqXx{t%faGX384Rf@!dCcSN=C#wU8DQ>RYl({TRHanItS2e!Eat;-p8f9fBtV5++Pa4@Fzr`+7!LbEO$7;Af`gH{Q3udK}1#N@}&#|IlWbMy@l zTU%IE_D&?EZUXk)ux?$B{nxnaUI;N4Lx=4z;j-p^WL%=inyE79w6r`|SB}s25jtO6 zY@%GMytTuQ^bg4wjz4|={0!7g8fu=Xjplo{9168efnaTGi$gxw%^m>5L~{U>I(}t( z2(WFSG36`t8Z-qeQ$+RD-@gqtHPF@GuuC013R!0sr-$z1BU6r&rWSQVQPJYZ8-J`3 z9#PScZ{NzFJjrNQKRER@*A_*ty5U3(^bFA|u!P*ayn(6t(eA+N-lxx=B_$;RdtF6? z0&kh?jgXa=md5Q~9baA1Dj<5{pP0@P%?3o~I$hos;Tie=(8=Rk=e*u1SRz~pvtCXZJbV*dY!>8 zJw3g~#zy>z=@`qytr?!)-nQ1(%iXKXd#Vbsf};5}ExYSDNhE*b-yPQd-qS--B|Yhr zlb6wLcI`@u*dyEW@s|$?faH+k?(W>hRaLLW8GBH3HMM#Wa_lBNjjR22I~;8PXrovp zWaSkxn9m7M&ivNjx^-*l1PIiRMLH;nXbdP~SOKC{^>c!BVoNd2q656@cMM8Anaj3D z_M{JhAA+b`MI5954-iF5AItKwMv9G@nf6!4^K@Fq78i1DVzGyC5)fmSUcb>4szA#F z3sF6F>UDOutb`#u-AFDGtutO_FK!;nH~PSz-nFvNh_C5#uv)*B`}yTY=wId+78XWh z$g3y=l%%RMdfYx0wiC;^tI)-5k+$&1y36-Kx=u+^Zz})7uS8e#=TRgiN-ip|TEd%e zay3{^pWTB&z?TDwz2ur(Q(Pv zcI(cgPS7>C1+UvLQuBv#I`#JDkye2nJ7R~1hVFROe)#aIx%txP=ZSak8s)Oxc>erA zsHnGtuZBiAz-`rBlkDnJ7l|1F2F$g+HvL0GLvB_U%JoS#wTC#$4k)ANwYBLZ1fYg4(-5X%^M3Ybq73I6Ok&RLW)=47Gk9LZO zPW&T{&0*(1g0Y3bmD) zN9mAV$EyLa{RZYA6J%#&%5!udL9Q)RVf}*qcVsBg>J8<*avuAhj ze$V%1quPBdij_)FT;p)>S22rff~1+lT+WGOSuj^`KZ|-0H_k7vbtJ9@x{0p)6ao{nK0pmnudlQ z8v{|AOh!KOggRfikWjJ&*!8Kk)jYopB=p|%=k-q?oMjLeerX;A4lXNO4*lMs^h#_> zHn0UMAwcLwzAbxXc9KuL)Ir}leB_8_naEz&5XWytm6FfU{XIrnQL}m{fV2`sH;Y-; zvt$27_5g?w(%gQ1zS_G18W*0;qvH>!Q+?lFUq2}(Y*>_odf`umrujlImjaUKaL&6) zjxgN%G#VnO_ibN*qeqY6Fpw9k%z%XmX=vSQ2_kFE?CkAJZQ3$`oq=p@FI_rxsrj1r z^U~7NJ9oY;%}+s$3m3I4W1%b-_pLWrGZI3i?v(Z2Nj{t8;LR{h&t_H?da+t%FZF;y z0TcN|HqKMKZWj$m~QGvKz@?DcslPu}N zuyuF6`aW|!ctRQkXD}Xiw61O)uP(Cp0$`@3@JUH|*WTWT z!b-E6ICS&uNMR)n#8{OF4HKTyRULkf_PB+~JVAkhZI*Le=NxO~l2{02fK)6tNN!gb zXLd@7%e=Zsz9p z7Y%x5=wm>2@9@yjx^?U3=I6byJA;*t0R^dXRFz_lEi4|40vAP)N?&GH5CqnqSb>6}s^1TJSERKnBkKo%^Ju^yA;w*N2wYe*K!% zd0(~KRe?frEgTy8^$XD9tkiYq-m1-49zdyo2_>L+PfI2lu$Z1c04~VP*f(#i#ivi7 z!af>==LM~Ti;1v($BwH$KJdq|R}WvAzQnQJ7uIZ7nv(9Eo4&q&nwARBGluo+YrVG; z{usyl`)}XAy$kyX)w~*=7N&uLK^GQ5fpF=P4osZSPqq27F4VW0SXXzNo>_TR%E6aE9-evEFX(mdl#YP7U?vGU<2nY%$NqHR1R)Q2B zchIozdDMojyGOs~N2II*(y$#gh}7XA_o4gj-@l)b*4(TGF+-lX^C%NJCN;HbFHO_I zg1B|!{`Ko??})jLoQ3cK5$qp_e4lDu3EVl$0-yQUa$M{(KAz_0=I73}!KTDg0Xw-m zJ#?Bvv+G@5U4f>y@7kq4_3}d2yN(V|FqyQpG}Ol4yDa3lZ{GqHg7HOR)z{E1y)=)c z)qN_{r}y!7TK0cw1Pfe{Yz~;6a1rQS@ceU=&rYtc(>IxUhQv~vgoT9mQJ))?-sueI z;pRS?4k6CM+}st1N3kMP9ln<^iqWkKl4=02nJJKQ9zKiMeH>n=i>oWq^fw%`-& zy(k#Wl=}}JBo>9?gNm)1c3W;`_0RwTq?;^Ls%dU<+^F!td|!EBfVee;%Xc8Oa3sgPxwg@gq*GAy(eq5QLuD@CdkZ^Sw2=P5dM# zy)4s81`^-|I^8Frn?z0q0b2cEIj*m#hfUDj4;9bF#lD97szC#L-TKYOr zkZ@vuf4^zgQ6ZtQ%$B$_K0eYoC>IIvQO+@hPa}B|hbG z$n~38r$;-ZJ1M9_*4EawjiWt1Stf6`=;rDgdh1q(ZV;^i?K~RUNkOLvN_hV~3f*6jpWmri`&snc_I3{t+h8Jgf@#(T z9i8~^PicpX>p?Jry%!GQ=kpA@R+n%S6NKK^)(RXr5UR@q_4?o3;hwr5ze_DXuv&(} z#($EL0kOJRq@bYS!i5W5)C78e94R*K;lp)iqkVm6vx%rmmLvR7MGE0LW(QsZ3xVTI zjl^TXRx%5{v6-{#n=x+%072s6%YS~z+uGV{+=aJA)ygf#Y0bvTe~Dix6r=|Mc>x8B zhaN46P<25;K>>=Mf&#tS^T&@LKYdy|{q!gH`Q=ldbAQtO{nr%Fz%Qh=yDsgRzXH~m zE+HPlY)W#7+O(*NyBT-LP+xzMR*Y|K z`8zXH<~ea6G7D;Qc{#0^bXqPfE_w{NV4qrB7lMLEu6bfh5IA@+{AoChID=VEp+zO^CVLNAG$-8PJOheuauu3NPKy<6$Es7IUGa7zC8f{6~ zauCHy7+(6G9Xrn9`tIDRJCswJ1tctG4wzkE?;3`A!>n|re=J+kf2~l<6oSJ*UTshKcNY;mP+Y?Qe)FN zgNuW-DH=gWyx_P682j|_*qxM#KYvViZ{I+o`=N}M@IR^7Zw7u=hKyQ$p!?CiKVUQ} z7Ap*VZB^>3hOx0R4-b!*J|h{pNx#tU8y*_WwnSy&HIY3xY5-u|sZ8J}8$Q1@C_FPY zh8T%?#P9USk1Z`ML~ZxV$do;Ka&tLZBwwymyb9s0tn6$B!e)*`{8~zKa@TOX^73Y| zJ?`aQBg(1-p^j+)=8|(fCrlw46NyBKtyR7kW})GXj>v#tAoYU~)iF_@$WScJ^XJYn zQ-FyfLU;kkKo_}F4%G*We@JjJOy~8Ba#&N!gseT=5W=wjUQ(EmVdL(8|MTBT+n0W_nj$!KN(aFJuJU6k?gA-vZ8+cyr60K_Dmk~QRxdh+yX@Coj4 zVzMAISqBb0&-^J&$5ml9)SN~i_GTv=8>ByRt1WyLxN#j9-3eqYSPy4s>yP)>8yl6Dq1_lN~8e&TyC0~Qbvzs+W-=_IDVMMr=$BrFKJ~=^Gqt!0PGzlly z-u^fC?y-<2AV^@c=<1r9A>=laPiVY<2V!$0C`e4m+d3fw>8<|0K9R4FbRwWjyEDRy zY^!q`X?@Bk2A>|aF5}s=4{CNB3sbykrZ zLIF>o3KTb0*VYCvD}|PnNc+pZ@j7aBml(z=kr#9E;>EP5Pf6Rht@UW)s)&fB>3XB9 z-%vL~ot>OSqPc$a#j5P>`X&>bmXUFaf4fncPhuzkW^K2DdXi-r_GxuX>H*{chO46m*%Nm6bO zd&fFJE4LWCE6YQlFA*FG_32`0XBvfe1Pd;6Fn#1i`cr8rAanvIsEuF%@%Zsll!Q5qy zkjmnThwefNljJMKJ>iam9MY_g-3DE0O{$pBoD*t&9ua3f*~mi9!6xQ?;978ui|ZZ~ zSzs$H`ite%$9kko$y#Gy>FH>93b^Sqzzl%J9%kmZzR&ql7r41;_+Yy7G5RW&Q<-Q0R!_n`ZjoNSj{sD~8MXufDV--Z06~MVS4+F5`c|_5Wr&{*Q0`pKQv1$N7KC zuSY`lhqAfnsM8NskG<4&8#Z{mOxzW@`0nm;ZzNJXB|o*aprn}qQb2=4ONa7uo%p6a z1e6sf%l-Q;8RrC1x@muFY3ci|N;s*Z0f&;A!Ve)>PYFsZls-K0V;*A$r%%ggBX9~; z;H7RhFV@rX<5%IANbh$1l4I>^`)>rSqY~;FIKWm~s{{pjm7BYnNPN#O>oXUbO{3ya zAXfY1jjxknam|l?lL{C4hrPdM!4KbL`T~2*aF>L`P6|I4*R@U!pQ}*Izhn6k$TVOu zJ8Lyw2E{{2=!LQG{J#DBH{xTMa9vwAZ7TMe7o!XzjL~nmnLzmQc`FsIMwTz2Rg|iw zqCzlSo@$bXXAEp!XU7Mzl0x`c^gUg3Pv``yWnvgIw8@ejR~DuPYUq3%RbYW#IG~}a znI85CPU>YbEMov2-fM50nqI;VC!_&SwjWSHkoX@Fesark+s_B6&5*zu$q3<5V3E8_ zNMJ8Q+9MxD1>rsW? zu5N!68J@z251YuYupxzG{lBVl_kGE=UF(0%MS10Cf=_Opi2Tu&F5q(jz} zUl%EqwKP^yQc{9A#PGWxKYyZ0M=;$v>il!iTm<3Zm%0oT6$k`}4;`}MslcXy&@yyc zPw!4<=0QqLdpjGJ&${vMa-=4F&^)A&n`wFTMhiw55 zg_#I@x7A_;_tnY~BwdG?syu0>?LBl$5(ft@$L)QV0zV&iWkR*YN^Pj91N?U^H({JJ zOfWdm#l?#WqGlaQAnPN8gAnTAqkuPR5VG>}sxGUjtM8-M-#z}dww945U4ByyLNN5j z3!y5{nn*I>^ynnO^RrUEM1YvoCN{#la5ow`K3+1(#sD z3^2|v3Bt}yp@k~HF|oJ|x9poyUr!Gx+zHRJASt1@3P8PO)5eWMOox%u=-&8WM>YPv z2L9(n$5Ot|gs@aYb;8Bn+`L z-OiaHgN15fco6sD)~zDH)s@wePs|i-2NYLWHX|8tkY<4C6Gh9dDJv=>?DR)}W69e4O)M9L7{F*mpER#sLZ zAw^5@oT$y96DvA<5}6Pl4Hn&f*ygO^jty$s~nXrDt2EPZyotJ0{IE`a3nGNeBkkS|WbGE&lT-jH1&8Sr08*jJUCl+u z-ebElQR+|MynVano_s)ACgg$)_-H=1Ea8z@{>NZjwr!Y3Tl*R=x*NP6sci~{#-x}i zC^L@*Fl}%H8BPkq(PC(b^VYO{tbWd=kNCer`gxd3k<-zcjW_lMh`im^Wq|9kvKoY* z#v2CtY$N%Q+emBCvAVum#8#kKJ$MFN)cETOGXDOnBa4S}3E~mdc4Kd)_wU}_hrZoi z>mH@jH$J|aE5`KYcx7DL7t1p!Zji-0ztI7b0vPIh%lMur)u5jL{ri`hvJ13VSlDWR zSMeR;X**2PAmwS>DDFLDM{Neg8qUC@K;dam`GZA%$&pBTf=-UQYOE8Uo9hDot3370Ru%Y##ZX@!+;eTFZ+?}s0bVdMtfPCiIjap74< zXJ=wU!gKxn@TNiWU0kaY!@w~3{tQhfV!-3RIE)k_IaKqj$ulPSB8Uop404`X`A{!%aZR<;}VlHFGrzx{20 zi*EZfiCykf37r7`(WZ^~eEaqd9KG|K7MH?{x!?KS*pILnKjJvNJWxZSRe%LgrisJ)ITu5!O5w*_x7JZPS6l{M|i*&cMpQV_}X6L$dR#+ z52|P5(y&R`&EiLBS%n%c{Yz6y2Uwv#U(*$8YiTicPzwfQoo&CpdEt_cO`V_!50BZO zA8*;s0N9ZetFEjR)vp2SVxoXtJa~q6Zr7ffQgYeO&hE|;`-PR|MZ^+@M@I7OI&a$x zM^t-bE{41p{U%)J&%6(Uv3F!g;kAlZjgqZ&baX5%`cVWCgaS_rPVst2WdyInnpV3$ z9VfSU8-i{v7foQeU|+uS(9JSkPq`_Oit&ruVyTycaMhq>vG+nLX?1Ix>on)uDF&^ERWJ@<24}w1w*6o@5e)RvGt>|SBQouKYtm+f|nM@ssD}@{f42!1W*FZ*M4o1>KQTwsl#ia8>__1Ch>dH4x^25iE z-O)TXEDo@M}LX%t%L8FI#OS=4RO0YYg;l_EjKW z%0%hzO$$v`X8>wop*G{G4~<|sVG+g)=_~0VwuylkK&!;jJ`7qA(rg?Xv7oneaM;+{ zsd4I{aLCBWjDBrK>WPPHRPL*;vuo$h0|yRd92Yz`N7F-#uKakj#(nYD7RQPCC1_d~ zLvf|`?AOsfc*mn#in;vd?jc3owQ{Nn<2Yiyp{qz`i6ivvFDC-WXNH-Xf)xs*>QF!a zAdvCs9)FO}K(Z{IHhtUr9ky zW$_=E?eFj><-OZ<_4LGU>^peyATKX(+ubvkmX9GOqnW3t590i=f0-#5wqhg_M-g*? zJ_uy2Qtq;E-y_sHWMy9hn6aB#`rN7!WHnQhwF5YpK7O2;0%wwiPh%&FJ(@Ub9=7WDiSJBb&faQ{tgPMTM;jK#31zotb2_M)XurX2a-GYe54>n3b z<@WA_q4s{v2>Bzg2A>s4GeDj;cec-65$~7M2e5oF-`L!C`}Q_H6a0Kbg?m>tUmq$r z!q&cjM|MQZm0A3FnaM?!222(de3p5No+Ly6Vi~4y_nC6rkkJgquPP8+x-Y20xe?qJ z3}QMfzNE%gF&l&^TgZv~mNpAHuB*w`9f^uhi6Wsjaf@Zq82xz3haQvHdt zw&KGZoZ%ax)A;r#pQPQFgr^DrlL-CqdFmy0JYfh;tEE*5whz&%ac@R-54){Tkz-?K zo;d#aoewh_Oy<{5Ku;zEmm@I*rF7y%O_I+hBurWu>)?2=MxXkG{2-!0Cz>BZ;s}C?vP?}&p#$bK1dBwn{h?*K}Bf@8cGGvE1xznsK2Xm zHvfQeSu&^UPusL;*kf4 zvl+@j<49Roi$tF!?u-HfTE|se`TDc4am<0VAraan#h`Cs44@diZ zHgHgxHow#2YcAAvm6VaWE546lK6eU02ECV-(ttwlz5vX2{`mz__t6fRT*%W%?B73v zp{L9|Dj4)mSeyV1Sd_q!sgQ6`1}?=oQZU}~7ElyFq4ud$d<|3`Kz_f~fd%_0{IvxtN9!+_8#&Ju}H|`Z%P-i8J{M`%z*xwC_tIqw26g} zwQ+}H=&L*-G91!3H{V;8z#`UGSs5rqPc{edVDCi$OoY)K50$-F`0C*`fA|7a)HY0fRW+Yp5#E~}qUV)2&g*fH+@83WKLXOH56;o606mfOq47oJn>z&0O zj`od`pfl)E1JWqNhsDJ1e?Wvvfgpqgk@?&~vF8Sb+ssCXhCDH!_(g5*p_s^Q$Yf-r zY8AVS>G7KA9^j-=ppQy4fHs2_JeQ-{x>;L4*6KI|7 zO9Der-T{OpuDcx>d5!4{g7fGBhYlUW@&{;iN5TR9wfSgRa?%%g4`gZ(k@On5HEd^x z0u{BVxTxo-AG2lTr0t4N~zwe@@VLN}v>D9eLJ=h(=28NAA zMN`L6NsH@XF200KyG06oK|RzNYtmEN2zv-Y`vjpDtv*Vc6C^^l>#i|!r%y+DHSI{m zq-NC|<|IcInlqCiExJSqdFK--H-k6vU!`ZD+*C?``1V}^8#g61H1x{MsK9tHKw?or zfk`NMGPJp>l`A*4?7AiT_yg1%LK-53{={xY+U(Ek4ew}CvZ!WtN@ zTQIcXqQZ&5C_L}oyd0^Jl?(J6wwQDGEGy{gaa1J;1;8PdGVezzgQ_Db`Ui;}W(qO_ zJ-ZV~pG=fKKYVK~QdPdXB4sb*Y;4V^`kwv6uSbtOP8|vt`e&kX*Ni9ZuzJ;ihbg@T zviniF$h5rXMM;f5LO2oQ#O2E~oKgV*v?UVGHPK`#DNeKcb&_$DK&0bB^!5Ux6XL6+ zl;0ry#g2ohz_1dnF;^tVWpcMQa^^;hejw1Mn2=iwBJ`oo7!%EYHocN?Jg0sDV2j<1 z_iom-;zl)zYdPBT7zYI;w<9CK#Y{oet|vxYPwxu0KD-dj%|YhYq-FTjya(BDmX;o$ za!?dl>u-XS=c>jhlD ze(3Pw@@GVxY`U{B+GIEKRxB(mp;`I)vsk+binT+)2404BI3N*I7MF(lj9Y=^6?}a> ztIw^ihmIV9csYZmU_C7ZevUUAV0N&l2QdS42M41I7ix~bdd>#r)+7|z?9#OA%(*Pc z7KAitvU3Xyi1_6?eB&S^3MpEJZukBBceFkXa#-QL3)b7Mz`M{mT7HS!KgH`SOy68v z0}41ZGn4G}3@xn7gYg-igdZ)MF^_IIi4l6eBG;$!@$vseAk$z_ zmfU4pxV`1bs5;1txP(MCJAez$qpR$yH(Vd!LX5{?6M-C9;euQ@~YH2Zf6JBF;Ia$n|LJYxnKIRg#@hnPtD35s{^AZgA%ZZDK5UJCn+p6h`4BF8aUlz?HR1!ynwAzmv|RIadHKD2KU@^- zxahT{P%9Bwrj3YDL7zUw%al)---ot_tc|d+<^fi};iMLMhI>~I8Wda;J%9Q%z>0kvd{nb@wor| zUKd&#HWCus6>+#)6-}pgfc>i$wS9biFv_f%d~}U*Q~B8-Ojf~J#9R~Jx`G?IFrCY~ zV~2fLLDqmY(ieDn2OXa?EJMt0nWUF^P0_~fMq~aBZCxBCXb zP&`fWE@@AZvx`s?sgckgxv6MOBc1J6pz{HtUb}Yf$B4?QQ`}UvN=#QoV8j*2z&yYs zDO8_46jFrFu>BqhV00V2ndVPz+4A`OXm`2s0oDjkiEshoqnJ|%f*WP&z(^70W^X<0 z1ZD~*Rs-&A6*pACHmSiJeErYG7^q3P5SrB z_^s?D$3P^CO2g(eAc<(GshMw6k&}~aXyC*t0Z2NT-)ndX>Hg}~s}P1X(qWe`aba)- zy;(B&A6WJ%J>A6|HYeW2&lfptn z&z?V@c|HiI;biXQ?mkd=P4u^G#tWj143Bbn3?JqX3Q?Qzih+_v#~;S~6`Y)21qavu z+plgXtV7}ha$PtP8DX5W4Afz^+8?lj;*fF}Q~!e5|0+*JLbQI%2klX(0ptQb68J)6 zRGNCy5!!EHa)_q1fkP5_ru7ogzG_rr8S}Usvw);2n1^JV|Dq=j_qn) z^`lh+pvTIZo{+I!t0|a6E%lkd9gV!5${sb-DTwsW$Mo?&7*kWzvLPpAbrC&ul|(jd zp4)8Owrw4qusbt>d|6ngCVG{htgf>D7e>#2oaQZyCW4ZGWe470E30gn1%7Lv`WlM@ z`U-l@yY?yJSn`1b_20hjBDcZ?MZwoe;u8}3jlUd@M=jXJ;TW>nqw3Xx){Rzo@nVDg zqyGCxHb5Dlot{2Hz$#l`$A0{ZD-?F9uc#jkZ7bdU3ibnXNbZ2Z%|glSx=~_gdeE>4 z-9eE+!tgqrla-|@P0PD<=y)GLeZtZ3T@fF|~B!<%64^l8Jt zz$URS`Hp%aVb`HW3&0@DszSi@FCHrrh1^j$6OGiucOSO_g^5z3QpjQYpqAkf=R_1w zP5=E1w=ym5;?>w5RK0()!%yZ{PeP2vm8M5s=>(#VKi(e?Ev`C|E6?rM`NnBeN)0rl zmGV-Tt?Bz0Ip=)y<|?%sZjwJ~XH+g<5j}~Cx5P+IH8DBBt*$hGOfE&;eS{5jK!<`{BG;$AtCwr?*m zILJ#sGt-T@Ek_vd5a*kcP+-ciY4`rpU1r#=w-oRSAq69&?{DAwOSsU5o+TklYi?l? zxPEzg8P&!a#{hd2Av8(E|mBBT3)d+RmLmJ(0S)Gzga@V2f;v zg&a~=YP>9)7Ut)B+Lsl?Fj8V7WFeQJ_NioDk96#Qu~Y zjk^8T5%Na?apOjizG`!f{IfeKA(Eh+NF>zhEt^lwE2;mF24yToY8Ab?Dm9)7u`KZk1~Z{L0m!TvfIJ5h;C5i30}?+7mq zc{`JqmT;qJHwc_ugrsu2?|AM+A&GnwFG^zmhCJU>B16F5lgQ7k?77lgx)Q7O0Fu&i z6#s?Qc5eFd_x6HxE5_zX5zoC}ZPv74-M-yK9`JMYX&LS~L}|hizS!^S?F|Nqx`0l?sckm{|D zY=g;xYS)NnJE(Xqo%gfBy3(YS{3~C^X571m9K1Y>2ghE>d~ewR@1p3l`|{=AZB>(F zaj>%w)R1aKzQ_^4i8G%)${V+F(e&%aFnBfyYJ)e=yl7O{ z2-(ti;x2#fPvop!C3JGn4j$S5I61<~LTNF-Elz=3KIml%9PjR856$K?)aGY8!oucN z>4A&=yn*{}EId}s(&kw!#zJu^I32s5v}1l)K=keU;geRq3cVHdrW(6ze?8okyHBrn5qwx@Q)))kxI*iM^eW@C0w>fn>aC(rHK z6KOchU-x9%zTpY$kN%0lJ%c|hULR$)Z&PfD4Lqz!YB(3z7Dx)~_tFi%7=Owo^zZp; z*F)_)QUrc7#9O`p%$8bwb@|r4Qg#jw==H33)|=10J1Qlmiqxpz&61KOOkyFq^W@Aw zA-~Sfb@D!XL4xu7LvC0679#%I)YR`>@v~!hLw})ea9Y1)a*LgV^-SX3yby_F`VO;h zN6sa`6gc|z(|1pqc~{*de7w^tH{+LcXH?e?Kc&|YWmHHmNHq9~OGVLvPk~_oiJtCxyjEq16HeY_+yWD#!Ep>y1W1zQLFLqD$ z%mLZdt_!|pS={M)Lk7A^KH9n(&U$ARkL2?TzsR~TA}+9WO5y2dv+Q3E*;9ktUV0c@ zmNapDlqDv>{knMSl(W&1ym*i_IBUzQe7j*TAgxQ#yTycQ4vc13UI!#a>LB&ISV-k5 zb@l!T4C`j+=AP5?qDBS>pLBE_zYzZxZ!o|BVzy<&nTMD;)hqFI1|)bX2OxLyHlo!! zXU>?4u$SCRPVS;IvOvHA;&`$bY z^myf2c(O~_5`Z)7=sPjLLXC0v-$CfBRWYUsjenXBiEymWG5R#l_ zT34Z^ZPb<=Aw*#u$vJfCa71h+yAjpSj{8nIQiye5x&2ugCl`9`pTvKJWMI z^?bedUhz_nrwA_Y_^$5YeXTlGv#V-UX-8I8@|LE^?3)!x%BYew3Bz-83c(SYf@R*M5RHT9)JBi4}wq5;$x-c*QOf{Z&k z%^?us1tf?2Ff_JCvOt~{U1PC8$H~ylzy=&SlII+TYjcQ>X2Cw|oUVGEzp!-n3B z$1Wp1{Y?z+5V(NTZm9a0n$Ac{GPS#|NH2Nu0tFFJ{U0hmcY7<|a}UOkz^bi)3HUc! z0)dM44g~BOS#@>%DDnylAqZ#aW&}ag+Z>lgS2`YeK7F`QzrWIgFkK%lqGope`*H8F zQ*Wa;&E{)T|DHI>s-ZB)XRj*S?_mcGM&tLyYqMMI_Y?S=Rk-G$E{ zyKVJc+L-^;D0p_mqc%X)xbzC$oC$2Ef2|a(gC(C)Dj2Q801#hTno(;<-*wX{HqSPoo0i&{+>Kx&+Dt5m2B{`x!MDkc&E5H^^{ z78MmmMhcZlMb&xYq>~abk$=6Bi(Ms4{|pV8fzHlt|1@4{rkWR2p)Rij`)oo&j=%v- zLvNfkP_brZH4&u{yloFzF#@@l8|sc>f*XZ|c!`AGF$o&BItaxM9GH9X0&Up|$kn4w z>Zl5lSW{m=-a`I1L^vz5`3 z;rNI3sN$^WAKAKwE1OA>S$b`etuIE(})o?YqdOf;G(); z-jg%AB9gvd+Yk6YF8Vur43<;eY}u<3r~;RQW#Ouc%kLECQ7K0@I662;2*9e5RSQi_ zN}?yKtLCblmc%;=pW{}cnhlNi3bR*n5C}NyAAYz~UY>5WO+mrxcGJSw0JJ?`(vV~U zSo8J4>Q9yRk4&UX)Bscv47gUM!;ANX)-X^2OP%~;t%YwuojW!8-Ce{EzWp|0 zt`B<5q}3CE?W3RRE0KlpW$)hIrGl8Qcc%n`fe<8M5TH4N*Qa{U6J138y~zmGLt|c4 z{%?=2rr}df>ueK2iL*0m+T9*LH`FK3mK?RW$<(!LZ#c)5bpEtO?(97--6~^ez=w&x z@vQeud#!!r!~T_TsQXk)ZZGx^M8>#n)Zo@Hqgz?@P)14Mt_A1 z(nls-rwDK=eXiiXILsH3)hb#>NU0R}dhFzHJUMU1GuboK8o*ylm)1l=`x%v0{!DW`H zV$|<9j8+xhDx7?{5BCq2Q+&#f$Zjv?-=VQ>JM)IdorZK>k9nQvTe{L?_qKi*tvy}$ z)PHCEk5}aBL)pR1p^LuyfuAPK%e$P*ed>djYK;?#e!hQwLf%fm#JYMn6KitCwCM^0 zkyzp@bkNy}8n%xY6iT99h2VGMm|s(-&=aA<5$T>@w$iSqrk_9lWh@~urRUHun2(K)!l|lhztu7ftk5BW;|>ChQD=NiMJ%pQ zB&@Pw_c!h+E>fZ=>LuSXzPJ5G!>VKUQbet#Sc>Og>+x!|;&2=UFWg`pSf_jRyv-43Gwsf1*wxP<-=~J=`fl?Em1||}%lOh;I z5{Pt5J{!e5j~4+##&IOIEeTS+tOG$$`A1c}4rbv@n_g=1b)R`!`wM#DdU8fJX; zbH86yBtzu4TW?4)k>E*XMm7yF|DKU?vScWm2!khr05B!PD0YDS?dIccmq1`rR@t1s z@$oorrTer|edy*KNl|fe72#JcEi-HmQ>W9Jo4obXZ$_>v=j{}?JQwdW!^pez?P3@Na&D1SNfao8ly0h`%8OA znqSFb{zpA=1xt^Z!G;497u71e8#vRcjxBaW->sR;{#qT*4p~cE@7qTrO?IE}wOMas z6uzpiF0KWLpF~tO6N+fW=(Whz)6v0&fh%WZYh#~)o}Ue>K0$+G#Z;6P4$JY~k$gFQ z$`rsnzFNQKM4W~!-gq-U*c)Q!eVCN)sw%$J%beEcW+@_nJTUJt#jTnyoh>ceAGE`} zHD?lUZ5EH|+B7su)^1!rCT$ZWsl*&_{mAfoqpA>C(JcI+!G0}Zo)D1o&S}%I=r6r5 z3=CGBWhKDQEDvV*-Cx`V$bAp)L{(MQ5d)W+7lugXfSD4hr$BB+E_@d9@ z7Fvmmi>IK8x!M(g+0rACjDzHoFPG=YQFqT|Z{(8=Esn-SkLt4!H?AT-so9-G>U&wX zk-WjpDbgz5&RB?%-#0wWS+_L(mzv)HOR6*SIsfL);BRd1I-gEu(an1oS9kF~Lf?Pr Jhe8@7?0*EU#ZUkM diff --git a/tests/ref/text/repeat.png b/tests/ref/text/repeat.png index 898de96f1687e10bcb7d88b9d202a45b6922e896..d7786befad65643090b96b8c3cc4b91691ceb4d3 100644 GIT binary patch literal 9342 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 diff --git a/tests/typ/layout/spacing.typ b/tests/typ/layout/spacing.typ index 82531efc3..378c11b8b 100644 --- a/tests/typ/layout/spacing.typ +++ b/tests/typ/layout/spacing.typ @@ -21,7 +21,14 @@ Add #h(10pt) #h(10pt) up // Test spacing collapsing before spacing. #set par(align: right) A #h(0pt) B #h(0pt) \ -A B +A B \ +A #h(-1fr) B + +--- +// Test RTL spacing. +#set text(dir: rtl) +A #h(10pt) B \ +A #h(1fr) B --- // Missing spacing. diff --git a/tests/typ/text/bidi.typ b/tests/typ/text/bidi.typ index a180ad553..7058638ac 100644 --- a/tests/typ/text/bidi.typ +++ b/tests/typ/text/bidi.typ @@ -45,6 +45,10 @@ Lריווח #h(1cm) R #set text(lang: "he", "IBM Plex Serif") קרנפיםRh#image("../../res/rhino.png", height: 11pt)inoחיים +--- +// Test whether L1 whitespace resetting destroys stuff. +الغالب #h(70pt) ن{" "}ة + --- // Test setting a vertical direction. // Ref: false diff --git a/tests/typ/text/repeat.typ b/tests/typ/text/repeat.typ index 0036999a0..13e99b519 100644 --- a/tests/typ/text/repeat.typ +++ b/tests/typ/text/repeat.typ @@ -1,6 +1,7 @@ // Test the `repeat` function. --- +// Test multiple repeats. #let sections = ( ("Introduction", 1), ("Approach", 1), @@ -13,3 +14,26 @@ #for section in sections [ #section(0) #repeat[.] #section(1) \ ] + +--- +// Test dots with RTL. +#set text(lang: "ar") +مقدمة #repeat[.] 15 + +--- +// Test empty repeat. +A #repeat[] B + +--- +// Test spaceless repeat. +A#repeat(rect(width: 2.5em, height: 1em))B + +--- +// Test single repeat in both directions. +A#repeat(rect(width: 6em, height: 0.7em))B + +#set par(align: center) +A#repeat(rect(width: 6em, height: 0.7em))B + +#set text(dir: rtl) +ريجين#repeat(rect(width: 4em, height: 0.7em))سون