intervals/0000755000176200001440000000000014447301252012263 5ustar liggesusersintervals/NAMESPACE0000644000176200001440000000232214406126567013512 0ustar liggesusers######## Compiled code useDynLib( "intervals", .registration = TRUE ) ######## Imports # Class, method, and regular imports from the methods package are not listed # here, since we depend on the package. import("methods") importFrom( "utils", "head", "tail" ) importFrom( "graphics", "par", "points", "text", "axis", "segments" ) ######## Exports export( "Intervals", "Intervals_full" ) S3method( "split", "Intervals_virtual" ) S3method( "as.matrix", "Intervals_virtual" ) S3method( "c", "Intervals" ) S3method( "c", "Intervals_full" ) S3method( "plot", "Intervals" ) S3method( "plot", "Intervals_full" ) exportClasses( "Intervals", "Intervals_full", "Intervals_virtual", "Intervals_virtual_or_numeric" ) exportMethods( "[", "[<-", "as.matrix", "adjust_closure", "close_intervals", "closed", "closed<-", "clusters", "coerce", "contract", "distance_to_nearest", "empty", "expand", "head", "initialize", "interval_complement", "interval_difference", "interval_included", "interval_intersection", "interval_overlap", "interval_union", "is.na", "open_intervals", "plot", "reduce", "show", "size", "split", "t", "tail", "type", "type<-", "which_nearest" ) intervals/data/0000755000176200001440000000000013642043060013170 5ustar liggesusersintervals/data/sgd.rdata0000644000176200001440000050530313642043060014770 0ustar liggesuserslM4[*$Z%1#: 0 'yS'-<[~q/?__^:wl{~xx_͵~Ws~~}/;> 6ugx~ks<]쟛:.&}y]?\w]~]s}rz?y_swwm99w7k칾t}vXVq}/qf;y>?5]]ϗ}ڽ|>=w|<'iuz?wѽ\<ϰ>}~9l ξͽ'pv]^?{y_ g<}{}Mc}^5o{c/o>$-b͏wwz61]o,qV׹{Wf,uFhרr5ZO茶~VڰiLhpa:G{.I^:OJ1KTpl1g=yb &Kzmݯf/?=/>?OG?S#=7W~{]y_룯}}Q׷G 긺Ʀ{>Omr?S75iq5/xsZy8z}os|vOsoĢwe߮F,]XsˎiS4j~z6zwrų>ýgӛ/w={ݓzUo߀V!>-_OW{MϯՌu>EԦ׹5>oxfvcz§xqa/~} Z{jV[k׭m Nkya+|lj'LU0uoXgZXX'nk~~Pl$zI vn/j ^kN޵q=즽kj|lZC~ CdoEK<޽?s+gGczG_gGUiSoliCGخSD|5~V[1+9H`STA)ϧZgL~|5Af̧^6řvKlRb&'0I]H.j/^?f =SϿ_ׇS/uzR= f{uw7N˼kChFxу@j9ZX'ouE}>G36hm u9{?LAȜG~fjƆt_#j#G+o=׋^⦧ ]N1""⨿3s[8*ěAuB ס q;U{>+'kSCY>ZMLJ)y?TjmsMf<kϝn3su5ޓP&l:Zya"ݳfdMG`Z;32li+'l} +'t*'"CkDg_:%hu岻}42- SL=̅csh:ty as@y8|<:zrw.rlSluMMO⯬vdž7bAL~BiQ_ջt|ykq_ V3Ʀk+o9[xSsCG?jƲzMYcTI)Gô8Fo gӺj<7:Y3ve>EL|P9/Z93[Ʀx5}mg~@t~lf&jOkDLt_:%S \n1KcSZp6-ڰqxu+o־nz,#}2!"Qs7":ۮkc,_3Gښ ;?sf}jgk oߵzHvNy5 WÇ^#݊Zxc~FV ق8_96T\o&%hv'Jٿv%ܡu'l]sv=Ԭ.8/-9eNMfKj)o5d{~{qqc}ڹ9S0ء+{9.ctlOw8[SƦy72zQec9~>}t EKy kl]b+zlZoKluiӳu%x.q~@>O~oN}9p2 vOLnP^gž-avSlqv!>[X]/f3A;uV_Mϔyg2V ǧyvq6lMQg?r.VrƦVdž55v7]jie_\=WϸGz{v{v,ϠzGMo՘,؀y5F::o5$L//}ƫC?jܻu𾈱S>cys5/ KٮFhcC7)c9݊~Fy5g~='iW9:=ߋ32MתjFw']  ]!fr{3kZ' ,0Ӂ)lg0B.*N͊<)2dl|GAzǸ<@A8`aJvRn_p¨Nؐt߲axZq2}{gVL82u!e{6pe:8v֎g屾=z_`O2a1#f&鱖|qg>1{78Ο S%=dzj!~~u NX~/8lp2|Vt3w<\2`ɴk6mL$^-KEtL.!3olLmy!&w1gLB<c , vcӵY40FЊks+#ӳroGNkOS#з˽D'9)^DM`9/~][*ܭcG[KY):}YιN_oz[z[?8Ymo3 S]Xt*̧ GK⟻\^-V~M[/:6}ϏQ?F|8s\\g\< q3swzcsV`\/;x <vQj|~0Eb?]i?hbrƙ>g]9];$;Lx)&];*<1T?37q}Qaz`9pփ>Io&56]rdzsR;;'^;s@;{ pz.{;,K5WajTP*~ugױG_^ZVWƦgAcÏoWzlp_\ix~gNojgn g|a=͝yxlFEw8;l <6ͅA=wS9XIwfdSTn1Laû26mulr[{򠝷wJ}x\)O5ƦQ\ƬQŢ ю;vb ,vn8wn*wN[M=Ɖ q}0rt'w=5 aa#٫<6 #/eabYp0 ܆TwA3Ԫ]󰈠&|vobvXǏj`M lmFF|0/00;ϗzϣe8P僗h ƹ.T`){/P; 3twt^?cU TQ\|)kX(vq^AT)~vlOD]0Ǻ`aflKt2hlK V>8/{ؙƆYCE_Xsw ``;ˀx'\vOj;6-0ش"}REG/鄵cGw@eGh=6L3O[+8KEclZl/rlZl06d- =Anjv;#MQ ]z9[Žc~q~%v7o׵a^*(/Ld궗Uil;t[R:Vn) ܻzM4Qw9Zr5ϪbԪ6;0\Ui\p^P_ENmcGDbG~*򡒎=zts\^D:hl|m oPu7a_86c_<̊緫Y(Ȍqc=7?e˵)w5Z&^&I0"Vʼ h}x-5kQէ`[gSq/̊rZì5&`Vj46%S P'֚ƆN>vdžΈ̊50+^cēU]fEr0">"aD|aD\?PQ lul}_)0Lu%̧tgl"ד562߫D^(Y<ìxìxìx<<єaVYvB8x裏0:b;<_;s?:Pgw4@wMnt]wt=^v]͎van1QQOe2u#|iLڥjl<6 wesˤ.& D] ~U~쉍YuͩN,{s~^ǭin滣WyTiEaQE_xp0ɾãxuIxZwEݝ=ptsD}P_}p8XOT]dL7%A,5bjlD?!XNeM])\ʗ8Iw5Ͻ/Es4{^Ub.}ڀw߻9_g4]x }f(UMqN=M?Ў٫3)faܬqR <#niV{6כ۩ve6]pqyntw6wynV;6 ;bpug'y<<;76=OyuwlɤUK686cC~ ͻӔcSQV}t񹛟4g.{GE<ϭLGyavtl5b26a#@k z6"vOʨʎ2(ut;ܡW'V^ q$h;ܡ)wOnj5%icӪ ?E]ܡr㞙M~@H۹;tF ^ixA:]ŝ 5F*^pxA/ޝ~86Q{061V|lZcW#; \/:78Y=kul÷I06 yi.شColZׂ}o͛Ջ}OyQq&G2*kqlebQS Çi89;m:χ9Ʌ̷ P㻳xcSRI'0% ز0Z:\[" 9,i:\4%. ;:q/kbǦynq;cÔ=sOyi+xO|'?m6qׁQ<Ax)>g$x`DD)rlC(}l枍Ʀټe;elZ xL3DFL4xL486R:6ԄcT? dw)t兀P`nYcߟvƦ%{ziMkŴ")<8X~luI:~LM׼6e0h. DL+WOal]`Waxt{?}Lsr|GǕ8KH?_czTdK%Z8ENm,OS<~W=8WƆ~<_fŸ~ѕÜ_x$?rZogl`KNؘn46%瞧q|;6>:w:\͗N Wzmsǝ{4^І\&19p;D`&b;nA {xx8deN\W!$_f36| =O|09l#EOe?w>˥"thOi#]΍Msa4T&6.;.} [͕syRϮnyAMϲ;BbYޝ8aٛ`n} {+acs~nK,{@EMEOiUdlȉ2 /=#l`ѯ6ԑݧ-'E_ƦySPs(q+=6@:O^ kf `kmJE?!h̶@PydžXk B-wy`!^Rp |wos  bbk*Pv_zV9b5ZpG,MF!/TƦ}v}53A<6=˻;ׁqtlk5_ڋj/2]z`ymVCez{~:[PHNuibBO|l$FuT%pb?|fkM ʼcӽ\^DZaƧ\^ Tu1;k]`iŽ.t/pV` ՂmZ<.pVou/~X=e6L[`2Gӂk-Z.Z`x-bcCMX%^ 7xs 1]DԵ}>שF\DbqKl3G k5| #~?s{By.~[T`V+]"ۣ+fXlem.0fCOϹg%9>84SƆ:8Y퀯rC;{}W0:@~H=ט}'0z̲]eY`.$XۚX[̧Zuƛ)S۲*_;pbl+H'p~.tO !{E՞jxDLfÿ hPhfY𯖁y~1Xs06ՒF,@ذ.z@ęp$n2 o ໸Q[/8FQ EFٴ?<8 33jN>#| vh}m8w:^d-oO- z~??6D?C埨㣇ةٕTȎA6* U dٸD6f.Ӟ_ Q݁ EF&9{@?;Џ.Џt^@?>L߄^ %㖺蟷rT鹠f[^k^ZrrcDrlk^6]ȗK Y?rgr]?r+x_d[Uos9jwQ͹q<yX`&\^J{zVpU-Џ|)Kݮc  b^C}~f_xoQ~oɿunOF_$s =a_0o쯍Anmons gA㟍>Cч}:160sdžo;:ӫ^tlS͍ ,*o>ռ c<%v:( 0D 6cI~lT| e+29sчn?@:oYn~lmc}>?J/lF*}L@Ffd?7~:260#F7m4Ɔ9>Uvx7z'j3Zan{n}ʯsp;d<6h޲Y+ay36·og}ύ>purmMAkzFuȎF*=FDWqGv%#]1,ˬbۏcUYkjYxЋ|b`RL(At;<6p?c}XvNoUhA쾵:6p?܏ƓVZ i}lua##{k'6Y#Ypu|ˮ3bmء+tFkI|ERO&ӔpYDU.h e7:AFp;l?:}l?:}z?;}?!>W1_ZSa*NIn^GK! NN']<;S$ۯN6T<`]zVEV8ssz樆`NlZQ>_' u]EV9j5YcjQA2s:<ʍ9J: *(L16{_ BbMۯ LP?Bw EĦ2WN]2+=CZ.*? ]JY>O<~@W/-rc/L|՗9.#s8gN,*QvӉ?TQ8WІe#2E( 8kghAr MkDN aBx&[/J.ќ}1jD?b"Cl/9d51~Ľt020U&)^-H;C }upf~ʛ1PBu6%&ңO^.np&;A'Ú=7~@1lHFkon`ap;5{;߉\{G)sFX?65^X;89sPr4|j.s2hOerO |8=|yCiZك0K=v&^z);>p/V}]}WOcC!}(ip7 E݃~z梢8b@')NNĴB8cx4=+dLjTw Cr[Ef?F /Ŏrj.@0;,>P=Xj[sXim,CqKozՠyJO %/8bӮrM<63Ѡ_~ gc~])'RAnC+jl8+[`lRj Zle/vll8ASG8p$ޖ8=vX&Nٴ 'Q;SΜ٥GUWtl.';UǝC@Bѡ;3Ps?47\j1ḱ?Z-;Sa&ٜ83 w 9 rm<:Q#=jpζ4X<$ΚI=(]_s{pM%oIɗiN2Wd,:6]26tfC12FkPצsvG=|Sf\`!2̧U*pNqo-leS"X .PZ?!NS_\1?vQϿ|)PL;:2eL<7v^=Sg;Z6]FݙwN 7C$LEv5;N 56ׁ9~?{Vc8qϰ5Jщ יitJ_/ ?sU~W F!A^rY-<|վ~ܬ f v/QI.??_s,7Nn3}xr}̉t_T {7S'S=4"rL7y>75س1Shө*.TXR۫W(M]~c_wz1[p3i^Fօ*8?\ߓ V9Ʀ“kVU"kd=BtCUvܱ}5 >4|:>g?ᣖdPݥq |c=7jyo(46}Ze,tش,B`ꬍf٧zm_Fzee2sNDj&~w5{Gg5Z( 꾱Vg']Ghx&ҏ;/?VL/@vTD>:4UbpM3QANPKR3)w'=7>b77#ށ{? Yvdž+e iemZ5qV· S{y͗_3[<4_9/w/̾/?gzĴ~?~v5R7 ?/Lb_s{N\8j.ϰ21GTU֦3sgBdžj*:CI r~pMEV)8ю=Pg.}Ѿ_X8ᙑ|j{mLkC]ܪ}d4]5bk3lo\7ݠ)0"lqTɉTsmfFV󗲿2uj w R NAN${ONY.46xS['%sUAyϰv̤^ޘdmNAa Z$Qfyeud8> _1)9LM)WƦ NS|؜вa ;OcGitkSY%ռ/p03y{06;N\΁=7F::~ō)L\Knձ!^`~ylzvql/_5mjdڐ:)p煚͉ =!*ӾvA6ީ+`Q{~ zٮUjU:{m3ѳ2PQЭylv:x:8x|ү>0=  *L'1g9_1vWR9,ZP씓me} >*cR+Nr;ckQ(_ϻV)0+6Tr CRjflZð=:6χ~. S0߮UǦϹcÔ>F!^؀X͎N\{:L6Z׎\I XOlFz]=Ǧ.$WaPR~nN 6tꀿjQ|<&FCAjD%O2عNn(GU9V::6e@. ׆Ow@}BjCbwC~ZPys4 LE"J(j좱0Ć ̛̲p]Ĵh X} _Wx+B) eP#:F=6LcEjUd{;`w| fj@lU\wں݆*Jchñ_7>O_ཡζLPy[lŭ] 8 e{bu6ٞ[q}\| SuZx46NiyUA`Ci j2O'7$/fa6(y%5+4/I3k_LXo _EMc ԍoTo6Ԗ2ߎh޳hvzu|!!Mgvl6V[5՘݁ilLaC|zC|/Gy9OQNG_ol` ;cU. `r=Myslޝ/nB,;.cfdNZ.'ı{./֐kl;\wƆwyϭBj1whV2r{f|3Cu!.7r| _~u&kK_.\:o~ߵۓS)3#*L. 7q$v[.|X~ıGQZ9Ck TE:_0K<vEVNmuOAN̕kS抱q{;}3zz 6`n{0q]} Oy96MtflIr,sHo?`{`C`ϻ[Z?|mmMxl).>a< Y-iy J[Mog3倕tq%Ҁ r n̝JUT6Qpy"C&Z wQa`,>ä-S>EUMB?8Zث6^Mz6rM߲.p2MOǦU=dV}2e]"r *aT3d* ^> ~8a)?:Xo6x>  ^tq2֗:\F.}ڼo xNn2ۏa x wu^tuh4N&:AV'MsƦ1hg$ʙڴ°7OAUfln|_~/l|W_~W{JFJgH-. )Y jj̈́gUk"Щ]V˱060FCt|\d@{M #3h]VvQh3&zhE_6 6tqnC+ZZǦu6߫616}}C}vuR`l@FlfgJ2*M A2̧9sJ.eE}kqVwfMc8ӠqtC= pC}{Zp26L.~(?r *X滨009Sa/dy>91OjlU|K"k s*5XvxǦxHO8Q7Ot7/eh!סz6('ΏfϏZy5~ ߭2̾`m%Fgiw%P4=Ê=gc0Q_FQ?zuO;PQ_EMOj+QERaggVı#-LW,:Y$|ԏo2끾t grNe"g5;y@y>exC.F;uk/؀ׂoGԞ_yѫFڴ;0L|}cSLrgx|U}ClW |O%bh\ñiB5l(09UdTo\e9<`9HC A?3;%:r\Gm*d( 0k \%: 1qBFjw>̛.:G 9{I^هECLPłݷ7Tahl<6KMLGG"WÏ;$/Я/:G7÷:T<ï:[ wnl F ,?LlTd~Zx×NQrWql@>~Phٸ|m{j)~Țawћ Jڠ{\ l9VNTԑ3M.x=::>U(ʿREl)qr'FP 7#[x2V 1k<ƤDV7!P9|t: 4豁 [ {FrM9dž9ì"gSyew1_9X :46'wb$|B ooMұ!7yU.eJYj*T H/ǎÚG(>]?~?Ͻ`xyn( ^MʏMhOsشj&I:(u: ,ej\Ӝq:6 6Pr?ycZzGޜjشn,z탢J55Uz!4BQeס5l=`^wvB@YTilϗ hsJ wxvkex3"PEh+ l`߸vFaezc&F|g{TRN4jbrX`Oi.|=6;cCL =4o:􌣱6//2 CDgO8Ǧ{ΐrblV+(cթQU(|lNe6'2d`"Y!+FiU՜Ȑ߉ ȠO1t{lZoQDd `"̉ P%inc?ۏcTiSv-3>^IC$fcS=íSoLhcJbyl yjSkU9sQ\CD,YٙX}{\/]*Y s · ڪ,Ν9AX ͠79[{Q6* LNAbO3p elm~.u`g7L-s\ EͲ`aW26 `2Dd~dd⑇IYI  jƴݾhWZcc׵+׷3eGOu_oajF?V|MY^aڋƿ1WSqx2'91s`S78*l8/l0g)"J ;o۫jU$b+i^yəcA 36f1ւƬQݷ).q?̃`P׆9ashM͓!qІ 868jn \868р:/aƗvƦY30ӕ~59~jl}Ѹ~h51=6ánţ%SV7f46#|f4Eˌ3;/sEE?̎YUt얽9)N-%sw+cS?fjhl6`, elǘژ76F^ܘ87~G#gFckfl6of TEVwE Mql{{/=j;~Uc{5Folln׋GF\[UfSx9AY`L>Y_Eg3h}s=y\ݽl=sl豪|/_Q굑^02㳫|[2;aJ2=T<3fh4H}1<iϧ9]q>(ܪ̧i׃يSɂtUщ±i<'W_t3gӼ)Ioo;0̉o0t6}Q6̭03d樓 c ,&'zlozujul/Nmnu0oxob 7*-9O6/wXv>{a?憵*Nfl}!z8~\ YtT UO_׺p76x6Tyњ jhc| u9 Z-c5B5'q 9ߴ"_?&ʫՕ Y7'nj2w+0) Ÿ&|d8/~AN8hblhtl7{2acՕ ~5 N̍ Q%9l& {ܬt`'>6]PMRr6 Z]N ?o\xi;prs7.x6.*U` x*Ou‰qFXUꜙG&QK1?[*:}lwָU[?61 5jymȗo5X5N  5 N/ŇX:aY"{?7HEd&\o3,gbc)_Ui`K(r-s103Xb4sI\fRnlqZӃ/Bi}5MtaK2{蟾†f/3^đІy+x4&~AcZ;cCص\_~!p8ck.T(U487􆐼 1Pg9 1"]/*|K0ot=˱ .,{WMLj_C09rĺ/{ۙ9)L Oq4|m:mgχnbdȻܳ}O<bb ǃ4'L= eofZm rSohFe86eklzT5cls8y87Ϫ(('^Yת_x>hI_hIJd/ЛW7㽣x{7BKצfcjIS1U@#c'Vo7͛+=:ݧEONwHM^ (| 7|O}<0NGؾQ(Ö`z[]ce|O$wƦlF6ϰ~̼SU }щ8쭁06]?@ʗ;6C*Ŵxΰ5zmUrylw@!{9O@CMqhe~gl&:]tq:me~WkSQc39mΟ.XׇYccxޘbLncVVYz^CNlw;|3Uc|cu̧n&z.dٌ5s|Heoxm7:MχPg߈nmphY 䌰잭GY@+'^Q ]? g Z8lgllk2+v~d[b:Sy`nV``*;y'<8N- 132Z}tZ PSd'SƐSt0k FXم6TyQ叚K)qd bfؘk/TgsSt9SƐ*NwCX/eHtTSy8ŤȊTcl~#9gkOOǦ1_mg=ڴ"]Lbh/ C}SΧZyTsgl2~&M'tf]Wxu?=@Ug"s5_ f̱cc}[J7 ~W:M+ɝΛ1;ּ?L9 ?,?9Ji S_:LYt: ^.KA η3eAqayrRj*glXvSU=En홂%z ܡcS*Q>1CԄNԄgFuFƆi/ 2 Ə!n Me\o5_2w6O= ]0 wW3hlZϿwralcq:)zII}N9V9uǦ}"[ Z˝;[ e(4dx|cB<xi_IU$@G) 976>0h?((A9yѠꐠQ F {l`mZO4G[hS>>>:Χw3Tvl]N|Î{|S#~xu0d" _|m3_e&|uwlɌ0|cÜ&:vا9Rċ5joѳ(r6us66z)?61秎M X4TusƦGXާzcޱ?];?PyN8||@&|xLqiwPu7 f"/ԑDF)xCckl< xc&D[,*0 O#\ 9Z(h ޭucs`*a؏ҙ(DcCm 7\'p=vKS2Rz8E$[שVMadF)(3 L| + >gs>0ergMrcӘI% Mc$~Y!:$μƫHX8ׁ S˦!g]醻g顩(嬳D3U )Vmzly܍W/C,B@ƦC ^OXe<jjE,Z 7q`{ϝ}.`)شv'G]ͩKZuc}6Lb=O7fΕ d)D6{Vrr 읮UX Qym`)|Ox1fVyF;ܻ(yL+TS(.Z=d/e&Q_n'__2rTtb~{+h~j0K r>cӛ1[u'g,iIx_( Q^ڽ]-cӘz9arҌ:)uBXsC97f&d![sR `O1B`S+Wo&~~3>܍A5ǦCnEQMjƪ.k275"k2O=ؐSڱW#ll `0x ^~7EMQQ(ìuڅi56]3:t]u-m{6.1 J.XM8 gu=6-e ܜ 1g56ߛN=9(ԷX[-ѱoAy,|`ug+s|ĘOQ#fke-~;8F"U^~diT0̊C:IzsM=Ek\0v7ymJ#}lcC﫹*҇Ð{S(]=QGWhnEs͹ c= < .;Ul:l"ngvlZq> iC&+sl Sͩo䛹 O|ٸ!)h]}Uok !mo[wû;6\LyyǦkG-syQ= ee'jF:6Ȩ3j\[1ε=>C?Es#f^:I\yhݕ ䷓w@uNυaG]ɉ6eGJnD)'ӆ\=;}e0qؾ(t7cUS9'&p?k0L^wf=>%)}bj!g])>gfc<#{І[ĴdQZ pmJ {| =hu|t" SQ-i}lɌtȖUfQ5jٌRLn|#iݦiٻ~ٌdgyJ]]tlZ(Yt+æVƦ97R3V\)9$4me$4/"hqtǦѻ-W44Vx_2'8CjWX>Lvw>0M*NK|3ֱGႳ!omylsnΰArʐ/rVAǦ9~3t~=6[&:c#Er! #C ?bcT&;3;1&۷ î1x7Ͳj/o.o'6x闼[MɲzEc<,ptlt?{8em{C6@2HiGE"lS0@ چa8G]YU+3PP刹$F0.3eL[Pye,_-7٫^FϑxmͶ:q틠-N5.%cfu066x55,W^xQR{fw5޲^*GaXD88\X]+Oz/7V`:cqǖLԑJ5MsNv~hu UǞ^UZd\ƪ~ZX5+;5slJRV--nRu*—ƴ_D鯢ţpȪ2cf\rbNd_7)`|ݓ0^g"u@єf;d4}4; JgѐLh_mbF8Υic]2uTђ<{Q 9VYғ!ؾQ ?Z%Xxnl|dMƸMU!ﻱJd 8=-d,.&8-_ogd,Nש^ZJO2_s|1zV2C;fjKb팋5'DHkWuLY5Ic_m8^c;`Ir,wXcLϴx&ZsI};ld"as5xLq/L[`ge wx\@Z?@٧Unvlt2|XG{{n-KI$c)Dv/ȼ_/|%|{i3홍6Z% lr:| 3x'3yh\ƹ7lyMUH&g5\nmk0D:읆{/^YDA2ƩA&8nUZribI&U6V,'s(59L<A O2u=1kJ&VqwOs>Y'L\V{hn\G Ey}Md:mM̗fXLJ Ldxx*MP[6*{bބE4t8gj" MLij;ΝI2WhMoY|= ?ZMґlwa_;Yjv12_2}cw8{_Yâ8]0~Zd,St:0>hgyI2q $cvQ7 I& X}I&ڨ-Cq"xL\0Dͣ%P[nVy 1o(Z]dJoGr 2?A D+EV7^CͲ?XU6Yd,n(cּdI^xGS2"O3^V8kc)%>8ŵL kN,Xc ,":Z&eǢzKhhb41-^=sN"2Vd͈XSd-Iª:c0 V81^=2/y}xZdieymem&x;.,ꬎ b-D{w{x"LԽWIWn\2jѮl]H37V xUE^TV 6ږ [!bȠQ媜Tgg"ǻCjfk7ĩ㜷oʎxjm1gMuxVVPY++hapkFu Y=86LCIԵjc2l|7s#FJ&ޛXų`o:'x0v&icy[ %EOOǾG?c< jhh[NUH,ffNvLsD>m}7d,MM*M2UeYn} 㢝M{o[C{pa \=J(3޻U vu2KE>1;c X4e@{{,Ӭv+#gdQԙeN).yW.sr+c-*x/d=-e&28ù{E$$,ޣ)'{ZnO" .⦳U.]ŸDbH<~6YUKi≦<-X$a7q :yxcJjUd< 9/3:mm1ƪ7ƨX3}s%c\l:XUC̕'V3Q2mvcP_̖U~hcU+7o%m!`U#Lvw%{c y]{=}̪cug6fE˘*lV,(bo;d̎m{յ%5i\˾JUOS2f=*#Gy].QZ~駧|)=4Ƌ?v[#$c~xw0.h9Uꔌo'UYj}{q4V~o rV3Z>x^X{͑vWkUC[2nV>}*'c-k}rɫG"ij ֻLԟcDyP_ĝ1XbEiQL}f G Q-iM\'1EA8g$c,|L䬖L9@2M#_+E[M+du$cw9XCij;Fb?_.\[I&ΟxI&qukZEź۪X﹑I2NdeL@X9t=3ץ"&Ľcb~Ӥc۝(CTƓO\_"=%f$oL\_Va=[lV1ɬk'ZlAg|qҟmZ`̹gͻvgJsGףUx_"d$\K&=Zw_թYD E'XּAc=q]O6uO~+9)Z*e,"hvvv1?W2 w=w\*'޻!▧m)3{^b@ߊXk^2CLmvQ(L$,nЬұ;D>It{oQ2fk;c+,/ހ$)y$|YWouK~":❺ؓDXm㝺֒1ŪEzzߊk'QK&YERw=;wl|#P{~=7ŻުgN2qXEXE2Q E5w7И/;z%|VMw"Dݸj,rFh7&F?Nw|xO| >ei]1G4^uۥ 7ߛx^(f|2]#oҘ*87bD_[*+}Hz>3VRkIH&F4WlDap}lDV(LX6wA#c]e!O<1W2k*+9w8b.a6ȇ/n:6Q)O4ٺy⺰\IƘM_ɳe[Jf˾ y 'd9M]#c'0UzU&=S1"H2Vd&mw]<2r)պݏoպݷx]NlU&h׊%)bd,[cMґZјm'f7ny)F)r,sD $ -tLdC߲ci~cg_:fvH<+n-~5|alH~F]*yoQ^do%hspFx;+#XgZ[168XWc ib"d> ѲQ2c,OvG[j!j&;ld,dq1J{=OxLQ|L#18{Lbn#[d,;7I&7l4&!)_͟x_.=(R5jx_">ޗȱ)#9Cb=.*Vž )fdHw/o[avVJ2CekXm.d<+˪*T'U8VJgxc oU:ٱX?E2^%cn΍`wظk{G$i"w,%㬤юb^}`wE9؝:z%c,`,$=%cq˶}yr\Phx_޻-y }|j,}ϧ6!ޗnˇUJxi|wCL,؎d:!ޅ #źӒFѤo0Xr^q6>vRX~\ficƁtc7;xaF-]ҍ]&x]_ Y8~b67,?4`7x\0.'l{mBzoʒ2%y04זcueihYNWߞj;vH<ƊsqZL<=#Za\*el}v kVCꎷVU|0ƿ&VS/cU8%c^FWD>85*9Vԝd5E~$8󀍳X~Y;lK{|vF5J{1X2fy/S7xc-K1VM29ؽO214OAxW kV#ZG ӳ"de^G,Y^XD×x<8{gc lu8Ý.3̋ڈqM7Wq=x-ݒoed.\O⍵x1"ݢ}L3(S=K=J˵~Ydש\^kje 4ڱE#;͓s,X+3Vq08bjnFb},VkRx|y~fl7߸qxN{fܱXcEoVvёdn1[bv >r K&A Els5Qұ{ĬƼTD.ek[c='ϔ|[!]:rV+֖fF1Dd{_VOʽ9/v_$c E>8 $ȨL\΀!Y1`IN}pcd-t-LZSq6IƢ5D=jXO2qlky:㺈+yVA:[|Q+H1N217K&ꙑJ2vG]WUpd,e,Ѣ'$c> I&`9G~=bVOJd.cF*+?W{\cLNb@1\w'KNNJ V:VNL `}W%-y^B^{o]fL\_diYlG _2q}YEI&P!zWA& h*F6J&jDpZEbijhGic1i {I&Z#)-2}O[>FgM'ue[L GU\)1^2v=(j5}f]6v$ų$cCܗcۨ1Fo+&JdPƨ}?=#X]TVt?&u0+>>j:s]O4u}ⅱmh_} h=؛m0 X_Daj+{i-KT16NL%c* 1=*bI&FĬc{e|{ոd8Z/'5%"[dbԇy-[{cuT^yĢ6dyWE.b XV<+{=f`c^e2m0ږU}~ˬjd՟ٸ(]{/:d,ȴxߑF2a0NO"}Mg⟣gvrUο#u~ht6o99KVB9&cИ!; E?N2,q l~Sa\^kEYe(f٢dce=u͓YO=z-FPL2aoUpǘ70<(uuC?$5QtFáV׵4N}dgǸ MA2Qdywj>ڻ&F1%Ӛ$6W㽻(}/HV]]јqþau'#+$c\1[2qX>V푗֗V12msTOwWњ!aq˅1U̚θ8[*cȴI&Up¼ѳ?eQ L>fa {kΓE]:!2Xya c5N} ?Gdbnq^b EbĈh{/BQU.s cllcht>=2VvGqxĦ "|&cz]ǘ=*IƸg͖s'x8}%&[e2*6G̲-#lcPYE1 07jV&N2 uB2Q1nw֒V29c׎{-dsn^Gĵٙ$c< }uԱ%홓Xݳ|W:fHtcL{R5ZDkeYmjUvj<‘lTM|Y%cQ2Sm̷XND/yM2G#%UGX[m-[5hGL1[2OԱ"k3G]+ eHKho)cMUI!;,j1ʊLxWrcdnxeqpeԖ1:wzU,V6w@)ra6=*{ˢ-~_HeEf<87-V[Ws9H&W) 1;IX[7(uaM?2]aFk-s}u]&xx +z֞ǪbEmP̵eOk9/W:z|CLEE6-;pTNACZ q}+Hv̠WSsINF_Ļ4'8jl1GLws[;vǏZd,J1L%.ju cMV_X2{XV]dޞd|ό.6*<1e| -ogǛf9)*T~2]7^ ,2?u ϵz篻>ϵ~v%/.~u?o}}x~ss>G}oyq~9??oֿ6[||9~~~~~ߍ|~<;_磽Ǐ[>~=Ͽt_w{~~_j={s{_|__jGK??K9~9>{m\ Ϲ??q99c^}O~οosn>޿sϷ?|}|kÏ|ןۯO(߯<᣽GǏ,v.}y?ɺ?>}^K/}_q|>羷=9>_}O̅؏_گ}Q[ǿt~yc|>חj_9?V?mkȕ}_X~(s={h_K=w[緹nxRk=Os^}۟~y{G2ouy9_?{^H/x=c}u~;|΁8=?̓w=s=?oڷ޿˟?}g~~~kK=#8._#=oGs<~VK?k~~q(裌G|Ϸ=>_G>Z[NJi>ן/_|zo?>$xw?wo{4ſ0O~?Or?b???,rDÚ!gx6 {? Ǖ[iM>cV%h򣍍}_kk_c4 &4~/yrkQQk=U篩V9PL?xt8|W>d:$dS#{kCxOTȧr(lhx+ V-G9aw)67?y2%: R XɻTVA݉fޝ;oǂWHw>MEcdY!ק2L.aڑŁcx>/K8gl]6o,ٷ׊zsˣ47H H0Eai U"`ş_xU%`X+Έ_Zͫ[nn. /n6'Ŷe͎e3   Β4d8pp8p^p-%1W7yJ҉^ y|U=7 ȴ3c灣k`_tc\W~kvyx-U|̫]n.6"{pQ󼳞zvm~4'φB3.ݞ`2J R-[]~?K0 ޚ|Ǻ4k]L0ygxe;OZհé= 6lqxYrfwhUOoaRa_W/UK1V$^yrZyzeE-wN0N'afS0;e';؍3Lw\qK7ܻ_o6ƊfY)Y,mܼKr/ &S uqgY9:KaKaKaKr l %0ey&mI yl$P/Y-Y-k>& [[6KN0B&:kv ^:KWIw^yhO`>':j^ %:j:j TFs/]C0 s/_LSZ{Y#-]#Ͱ-+}85o\6Zwffg%뙥wוpO߫I3#SxN0ϰ bgΊ5٪VX fbgEQaw.fc+YlFbW& 롕k8bfjuVogyXݬ(KϢEO*p 8muWW]+K+K+ :`K+K3̫ ]ng ^7T~V~V~V~~m3LzjKwjydj!sъъja-bububububububhEaubuˆ{v H ^bfben c&{Fg,+ N0*)Y:| KP 9ȚyaG<0#9fG0;rّ#Ɏ=Ëa0xCs> GN:rؑŽ%&őq#G9 AcGN:R:V6"c^g#GSy #Y2ςTq`4`+Wf+7 R0 O0aeyؕ'_<\ B0w$a9 Y0s/I/` -F0lH74ũy+MͰU ^Z0[^H0[r O0]s/i{3.yS`%]{Kڐ ˒,₱%{7KԼ ({|!]0Fk 8KrƗ_RҼ`%qqc4`~̽}: ^O0t{]aԜ`%]>s/b3ϫI\vo0;7S`5 ޞ%/@;VKV!M%ü\\6o/&V xI0o81҉NDa5+ `N̯tb~%8ՁW)K͜.DtI^ q̉`Nqt88q0'8:mh̽fPeL32}_VyX3D10kr" l`Ddxs@ѱ-B<S3inoiFB4: py @#!s8ÐŐa}3rDQ7f4wS&?LGQ;ٶC5 (*ᰜ"'fE:q,`^[*Gʜ8R,I'_>1YsHA,IL9nnDaQLy62'9q`ڼWq0'U0|"w@T$9.]Rķ`[a[19q `܌l^h2g2ڜ8dH'&C:qΉ#pNytbΣS )L7 !#vsPΉrNs旌V&*:q͉coN;l޲p,ΉcqNCtb"k-g}g1(3'f#:1щ؈fs"0d;a\tbq0X =`gd]L"tbfR q7ʲy0C0y4*ه%{^;YE@ƞHf̽f==bAw2ӏ`%a%üqQ~Ns" LsbBKֳ byb ~KR?a 3c$ 12=?2 |;a8"UU6Wlӕa^Jexe#I>Qf99$y2G*wļ;%s&wG0u69Nq*W&{&49NUlB_f̽d C|0h&̽dBsܜ7'91͉9n8z91Ǎ`%z g71N#`ߜD~0w55 fv%c!s^͉9ms/Μ6'91y`%kdis JbūbWai%ӆaޖXBN|b8m^6]$N.Y[P0 ZD5w 5'f36aX[/͛JRbdb%)ذذXIJ$%/7-DYF/Y58'@ֿ_]W"Z f+2XJ%ֿM0WbWbWbWb++2+XJf%VYլj.+WbXb+E,""{OVg:5oo%V[Ȓ[v^yL%Hviͩhռz&X~;V+Dyyشش06~lZKLlAK,.7{c^Кǚ-j5[jlQݢ{8k6լEVY{f-f-f-f-f-fS[yE̽Ĝ jz՛$`UfUfUfUfgͪ`ͪ`k55DkVkVk'555jVk6լ n[6onc5q. [Ụb}5k5k5Hkլ֬֘-Mu5;OkV߾)׬*֘3`^.fv֬lYëkZS} f]ƻw5GDH-{ƻjjjjjjj6Ѭ9f]O7-jXkؘװ>pTZƻծծծ= ҰURw75pZ9 a}agXXæSO+ DhHN OVذNװNp@[3͛u&{:^ֆuuu}[wIrt]9 _?83#`B0Μ|39̙g?33Ϝ|f8"(̩NϜ|3>GDcs9;<:sl3'K6`cϜ-'?ꜹs\9т.y3D/RDzoWF8S9t^q3ej/7gJ0M; .8Ɣ;˿3SϜ}3t9L)݋Ua}-iqST`!?/S}%M(3'؟FyRH`pPexYx$)0\ˊ†dg"C0'ܡ[ry_C (1Ǵ`xz70PcO`Xoia2Co\<1[~o7 ݣo}csIq7v1eqCfg-7&^/;2?z؟U[Tߘ\fp!711S'=o?a^'T]0޼ߘo?Fxi|o_3Vcu) %k5+I\IcRIÂ[.tj//Bw5Y-ϗ-C`hS-[v Y^3N.nm޲ۼ%yy-P(en-[v&oMa%zr-{2ﶜrEt[N̽tt[ rDU vsmI-' Mse[ʕ0wє:xE -Wn9 -籶\A L$^E9 s/[r"hˉ-U0Miw6q@[-s'.1Jтn?[N*E/7HaV`0uP :cV˕[r^h˕[ sB[r>h˕[0?riKV0\N<0\N =`@oA%e3]Rfy8xgG.Wn9D Rg ۻ ;anYr0[Nl9 RZ3G=a>ʚa EĜ̰]f(ʲ\6b`ͭDn9t@ư%.$r!i|ÏE\/Z0\/zтqjcET/za^fDž[.$r! I*$0dnC(yӈa*,O4¬q(*Srmټbf5+l|a.4r M\hBӂq(;ls MThzyQ^IJgY2Bӂ%[.4r M\hBӂybnt{.4-wm6a M ^b}b;exe*Sa^qan4u˥[.M-8cccX-s-g_X-s-gXZ0d-7fx4.?%v~p;}!50E.L` S_)¡pDžC?.qa*KZz ļp ȅb@bzy.pa 3_8D0}]8B<5 yTJLr0Å3':Å/ G\8: PtHyS  s6\($(/l(cw!rܼ-xa @7Na#L]x˝_gyzhhvȲy{7ǍQ.ۼ"X6˝7"X6o%͸(eW$Ж \8|"ȏ _8D a=`P.* Ojֿ7DybQ,˅( =﷘.l`.s!Έ qA0P.+/CwxEJfQm^:*" #6p΅#p.s]W,͹~yRr`A0?"$fxML3&S6ܩ{'_8.BqARl#.2s#9sLra 3 泂 ToB/ytavLc0/a_]8k.DMj S_82L053S2/t$12I0".t!B _oBGd ]830`\g$LBs)WN Ttaz<.$gYb҅wf[[.emPl<n@`a^NF#…Y/:ᘦL/0Or]8ipL`4]p`~22%(1M%¡K'0* ]03 Fx'.D%fP:Y:QO昿0.L%!* r!ۅvGqs|k\T~)-qx0\Rp`.up)rT:.ӱ{L0U.tuTg7 鸨Oβt'ֱO#<6'gYE}sYqQt,Y6wkw\j?{:uTg~u50O~V91KG/(ڢ: YO^b]52*mY C;f>/>4+sc#ز>VZ=+[q%R{ͦ3d1%KNW:r:eW' lZDaz̛1oJG]q2oJN'OGN]W'ɝձ7#> Ӕ"S[<(JnـӒf]2FNy2ϥo:tyMǥo:b0bW:fMǥo:fcŽ=2{ jUwq雎Ktȑa~2FhCY s/Qg~Kt̯ 22̽D73YwvpSŲߩd=1y61Od*Ev\ڦc &:.m#{Oܼiqe&kt\c扎':b0ii83Mt4q &:1ӄ`|Gk,QfJ <x `J)):.1%EǔQRd_::lf a^MSPt\ꦻÁK^R &;M 5A,5F8Ny3lټyγ".@o.+ vL(1DDŽJb& 2 Dw }% 8FI0L( ^f/ɍcnt`x󂹗dh\dDR[anL$kƺ7 "5oX nDt sݓl޻zat8H0N.Z6o nma]t"<ȑu[d3q"wGhqэÎ6|;/:2x:زy5l)Q`n^& Mq<9,y k?&5*8V0 op@:8I0B8IT͛Z Fh\1mdB cqӍØna\ X0&Z+da4򷯜qӍnt&G"ntz+W!݈ }2.ݨU/uU7cqݪ1ݸnՍso\9%ꆞfK 2LɊ{%g>ttT7Nq*s?ݧg(i~qݪߨnUyZP7пq,ԍcn uX(yH{6آn\nTjټ f.NпqՍͫ~ե؆w 7q,Սcnw2u㐩L Y}x'8dƥn2u ~I2̽D'8U^0K܋<_8W7QF.xq\`~hDḬg8#qY7ݧWc/*˺q\֍TLP0OufnHU3Om8NqZ⅁n%-ހ"{;8NqZ7ӺQš]W0%mJ 0$_2q Mq\7:ʸPVq1/=k}=7nu㸮u8q]7quݸ`̦O wLɂO~nfal=JgI֓'=[Ozl=9;'It,Dl,9)gIF&al4h31`_{6s XF&=Mz&F6ҳmԯ s/gH϶R2̽{Dϙ\=@z90oK @f sO)gkG֎{v\gqkŸ{!ٚѳ5田gzSzN^gD։{:S s/:ѳu焮z.lݳuB0W'['zNճugD։z*KaZkl̽$D|}=׳g#DFiz6Bl艖/.)g#DFÖ)7=%;nD=%w9d0[J̽vIJ߹kfdHs2Yd='Ls2YF*,gg8y{N&9'[IJy-礲m=W79ǬgD϶m=&zM\ĸgD϶m=-3> ^ɡbu> ^wG~g_:2l!: cW0caܶ0ԱSKԱJw_2Dž%dg=5q9e=-7OocS sYâyzN%hqq?TJg6z*9a""gxeQuϩc==`vr"\X0}݁k FݏfmF%=m=o^]YsAg<`sAgR(=t05pȁ&km`~3P e&m ^ӹ50y@m*nx`V7 6piɁYfumҒ L60ymG[@5'<Jptoӽ Da0bwmXHfym`Yކ#fymrY|y_VjL60oӿ L60@otખy?m : ohGCifJW8]Y0O}JW̽&{@Ljo<,:ܰ9|lq0 <"2]L7p9́8vr ށN[=w̻!%fpH sb3'+7peu2y6D_YL(iYBɂ7p-΁kq\sN(zC'7\ipFgd=pF@73̣ O .909p\s*ƙae>^ܙan`sanV۷H^6g>pYDTty/p/pсKsQQ}d QƃKwaH9x<8;Ta40sJJ0 % =pN9т(7*w^y,{+<.LlfгjyމՂy{yY;?FyuDyމDY4Y m]7J^lS{h SSYC yڷQXSc1{R3Ss/ِXO)l=p)lafteh/׬VBOG3. }]-VLSRN8{PJ7J^  J _^,辥wxkxsOYX(UgA @Aal4oKWVYVYB.4h m%sx\XgDpb=b=̛aNF8Fq@ڻ 孪jޠ8[0z@_y(cg|o+K8^2ݑ]"`%s/YiOo4!`%U wIN.K2 wɺQI!LyR`% wIVͻƈ` [2Sy8Xi*҄(&ҕe4ms?kSN'VB`܋x˿iC!vyX+U';_Ųy0$pud 22['+nH!Wź31`:YqCwxgwX6oa;a^"ڂyKpEn~Fy P;^xw>[7h/;J &3`',VδL{δq`I>8Mܟ`%0gE0.uDdxg6 Kaz`%h{Ţue3=pqlQNjMxgދw"V;}' swĆ~;- Ųy؟Y{w&xg )jHy'yΜi!w:-78^މ#<< EyR.^mӞ߉"KWXaDn@Ua-8~>`~ɬawe3t6!w;Nd{͞bW> ygw暘a3wx52 `Zw;H(X^$PI$DBa%NvxgJwxgJ;/;ow.D)K2;SJ3;SJ3;QJdf\b0Dexkx\B)$P;SH3;SH3;QHd8@`{T s/l:ba~hew&xg; ^-{;ܜ2-L>L>L>F>$(m#~(w܀0 ɏ0?  f`/!u +? T0 ](v\ ~)C#;ÚAa%aYNgvǒ#G̽$sH +<؂:kٖͫK 3(?>]G6ḷ@G/=F6lzdG S|$ c/Ѫ?Ud+}m 1~dc#KyT4HY~6 H1d#Xdjv\.Ho=udّ,zKG ^mb$: f#G2s}V WՖͫRlY< j#PgD#bG?; "{H3-'?Gfad?´4zd{IG׏D{Cȵ9'Ӕcx `ȦM#G22O]'02>iI>Aݱ> ;EÑأwxkx *<.73O`d>}#F ɏ;fM}#F d{I>Kw;ߌL@=2>}#F&zdL#;0`TaB5`%Nm#SV iAAvyZP9)Gzd);C2̽Dӌ(YF"QNpw\lȝzd jJʺxߑ)c1$Y0m.|&;3gd G0wu46Y׍yqC sY5"KL --0z$ FƝ]]wv1/H^C^ks/Y¬+KV9.,#8a%[ f]cn{Ec 󾎶;= #;Da%e i; ϊf 9y̽f sGbexf ӜGhB=2G`r 楀N;意̨,̠<2 #3(̠,{Ɋ/wYb #3(̠,{Ɋ]^u33s/YFLF iEBGfH!yټA$fؐe$e3 E5ry.- yu[fX<Ce,H#Ln,{*r="7Fi edrc.1R e ɍG&7xdrq&+F{zRLU,{,*X0\DU0 XHw72U`~.Uqyquiټr0d-/Oϲb B񎤍qU@/arLQ%2G&xxdᑈ͛G""=`vk |V,/yP`6LlKC &WU}! Ƀbl1b|-&Uucd:|PJZH#K!B6+}1JDF3*2yu0fEAi!Hd1|w 1 zC_\Əjy>O K6/]ew/N0p9n54gl)ڕmq}Ÿ\\Uy0irxh]o)ڥi{RĠO.CR}ixh񯌇v) NS<͙]]f)ڥxh€Ҩ_R.->r4 8D|ីn!.I>/??4\]ˡ;wq.H.Zoۡs;tQ|9g_X+2N)8p9sq*HtDN]湋8C|]aWױ*|V FLM""q>ɗGqKM!DLǿ2#6냐|9me.ME9"ϡY|b?tӪkԐop<8Yʓ/k_ڹ-rQ2;-H۟4\ة7o<)9z.Nz| ps]^)WglNh`GJ5\({3VVV<׳/~y/x}zc "d@ #??gys2:32ߦь@{"LsF*ˁ5}|dd]ԪQZ[~`LsD7i0n0[v'Gti[nGyƨn J~ᤕt5Ok{u3@oK85FK6jtHmőoS;渱OGm{G+M3Zi22/n2wX3Ōm)Vϩ;34UvYwaYkeֺIֺu'\Nzt{˲EeS]L[}GwQa&(H$sz]V_l GT{;Z2Fҋ^*#[ #Ղ]jͽ~zuEz|<ȧH ȨչQQrh]rY uG[YFii61໖(ZoD"[EdT [,"J%S](Qa /b[)#aTA!Iv#i/.'@].!]1 Zg[[T6]]]6Hؗ#˚.ptn/ktdUDr$|!o6:Aw/qD-v÷aN~| c="ZjݮjuD ꋲdA'\85_m *kxDtaD (qhuٷck]7].V>j 1X4cc7׏~zDc:"zt'h=5N~ Dp|G OuB;;э0v!aPGDwq5mb?Z#߈貏}eѝv;T3w;dD`ܣͪm*FہQmU!U9{]t}"#J}.Zu/r`%fDn<.]ٙDtλ/pD56[j=kFDUѥOO#KW "qcG"hwI8".83āGҕUO) KľCx$ ]s]kB/<%3"*QE%Qz\Nx2Lw4;C:EDZ{I2"ͦ"2eĨ,ҩ8WAZ=uZErz\˟Oue_ov|:Y>d'9$rҔ 8?z_dR1mlڱ; r7t繡92CĄFdf,#.h2GIdD z3˧zЗp]!YZ~9.򩴜jZw񈈨$e higB=Lȿ0 2 j햨[nz|%#cYF e+/LZq`("goer$g3$TšhhGՄ#ZVvarR}H|"vaHpDNҝ׉v<2УLBx("tǽm@ *ӮpD@j.ڵPkB] xZFt!ʜ,ǚ.]WO)N] N]E ke^;t1e~w;6Pl;cDdv#ZCgKD7 y#z$&bK;DjHßcpPfoh_De!G  heҭ Tb!GMx, MӇjn7ЌG%a3h-ji":&~w2b[ҍP;1Q4sЌ/9h=v 42|F;7qZDtxNF;hS}O I ujȈ xFDt/v4mЬӞF 6h۠nF 6htA#Wm"۠nFrLh@;sѥ+Wn"V}m7r&KWO7gFw#Wno"nѝU0nOϖQROIDdt{> EB$l(` ADmHNB$ 8re$#Dᇅ=!K89EDWx$HPGPx(SDt J6"ml!H )!GD]ď<"b_" f lKqh "c"LıϩuƑHεte Swj/$CD7X2+/.VzVq}͖QLuTU|X/>,#+WVO2D"Z[yjl% [y.8d+/QCcO2]G5G-!ē4"k=I_d>,_l("ZlfΖ^K_qʙTL\mޡmi"@TI>G78]Dtg?gkQVB")D )Dt%p*U){-ADv$1"+#K'4$eDD64.:شǑsoqC{gQ%>'6=/"aG$,_DW"aH/`k@وhUAY 8 ;DD ѥgJDDnl#+xD.H؝!2Z3Rޛ(#cg<"fǎ7DtN@Dt͎Cݚҍ_$~#v"8G!"tc78"ᠡDx聈7Ddq "txHsʒ@ЫJNxDFU1[ $[dP!"Z#벯cאѥBDEK.8R]k$ ѥѥ=:IxN9d>GVT.D#K溩+ KW۫$}"#g$M%ADwj@)Zuxk@.ش;*EM$>GK$ ~b ک ;Cuq*6F;tgh)ѝYnx5)"㥱`imFiCDmM6)DD@mN}V_)~Q[8#"˞l;|W'""Kl;zV%^hdEDĨ 7DNe/Tkl`whmcľCmsThm~NЭO$mdو7AD$T ľCxAD)C""BD"^VE]ѵNl!" JRHdNZs MOb*6=mӓpQDt_gADnF.]mhklƈ}.{=LCdg1Z u~IԇZԆ8ٱ F!NVB )=QMv Vf|{ry~il:4UNd;8D\7YfVf![V`(\Lz]ؖ~-,CDP:z'"rDe~>CD@la"Z2jX_}.{9`"]q=Dt StF.vOѥ+ ;iDHvCDra'1VI ]wuݍwCDkѥ)=OI6 CD]mБtnw7㥛OeI&5;ۤo6MKKz2iˤͽͽT66OeQ Ǎᖉ8nVV6!jm{&m{&Ǜ홴fҶgqI۞I۞I۞I۞I&Dtj3i3 Τ'8LLz3ۤ'86+6+6+6+6+6+Mf,#F'mϤgA=MLz4i3Y4> :["|V VƯ۹C+HIϑ9YFyqӸ1;lkҳI϶&m'󛜘ߴ^A%@Kd,ôʟ{Um'm'mL56ɓMz"6<@.]=tpsic.]`ou$q VzՑĭmg`gKDVOӶnoV7njv{Vmeʜ}+3n"mS<%ٴS<8j3fvVn岭6[ej3fvt%D٭6[=j3S6^m`#[nuDqwhh3Anj1ȭmj뻕D[==@v|%l6&z+m"j=[.VA3AbߡØ[m5zVsc[Dzoq[=}Eup[mzlmV۪U[mVmVmqQz@;d0׶\O.ϵ:s=}G)v?!2 򷩜o3CD7?H8v@D)"* ;8  :"t1T*UO 2mH%>G7Dl/|Vf<(ED+3 #8#"ZO1n*a*"x#SfdtiHt UU"L9$8>Gk<6جG>9jn!=&P3ʈcZ/F@DسH Gcľ#4{QcŞdG=Cw"CutC6x*oYOʔCYwOR2y8g-PvXP~|Gr#7GpH`/:#ZqZ I 7\"ޝ,="ZOrQ^?E vJ"K7^.80ҝeDXz|T#;09>j-OuWB]'gP|nqnQN X8>"-QʜB͚k1B]>C~6#{ rkDio#Dt\u/8Cx5>GUmJ+m0mnn%%\_Mש8 ՏϊeDwkNW|88 >ѯ8 ~Ӻ8 mD89j.z%/ӣ8 |Ԇ%du|Nk+Uly'Y ]+ĆT7 bWT*B䨡.-3"euDtCD;k!"+s/Bdj}KrchjVG ҮZȦަr*,6Cu&;fKDםxDDtcVV&tI'l:m X dDњj [se)`ח!_Q~YF/,c0.N?&Eh=+"|ff1 %de Rk tϰ_({DѲlS D5<؆wPq =*׮Q"zyCD+(ςgx8nhCǡ z>""a#7DB}#}DºHY!6@ DtS%ҍ^FDn]]4" ]w+"cmD7>G޶ȓxv#HDY ~aO6DTV8Dl\u!AD8c"6g*C]z`kh=Qdʌ7;"(|h!68>GH("DD@HfD"@Dq 2"E@dD"Y1"G$ZG4 -QU'IJll,@D+ss̈bY0"`DtS#9^ $ ʟ5  )rxUϖR]Ԙ5v'\KxX2"-0}JO-Gh'|nND(#8Do1AwV(!^:X0"]'8BDʤSN!7B֎#O8]v%HX-eEd@Ȝ>'VB$T"y90;C+(n貏~]qDtǎADa"t "tW"tF-WSݑ7]S^4Dt7j1Ⱥ++D" @$!wҍ#HBD7ا..~b"."DtKLG8#"Ku#^ >>G7ED7*ED`}co|JK cCW"k{S~l#u?W+A?T/^/N"S6К:Nчn:q"Qh袋S!{8T1ᄈvoz͈.]mڤI[ DYEnu7VhJuW$]qYD֡NbľC6ikmҒ%~Cu<76Zx]I kvc26I8xxe"Z$IZS&)Ya6I8"sҭp])Ŵ%R{*""_dy0"xwDdR; "n\]gFEé~Dt{ ^$Y b DdR$ȧrR ;:ӭ"^iL4mfL>'^$+"!YАeIۢd"Zzzp#meնh'PxU+"$]tzv, q>g.+mVd%'U{NuO;#CD+J۷$&8A*"sC9}6]I*"tJR"Kwtex)WՌ~)WQ,~6K?S~he1w%)I_穮')Q} [ʀR[ʀz]*DT? KWDtޒ-@DܽDtfD5v8]QXؒqg=Y Zt| >GGws D|Dk#Tzrc JNz~Dti\.8:]c'!KWZXn@ۇeFD dPŐa[]w&ҍ/A?؀9*>=Zf *vF2D,C4"s{Cgҍ"!KWNg 5KWN y5KWN9ƈ+'QY^cDd3}-^OSd2֜1D[:T1FDnYwu Ȑx/꒬emP3ˈ~Nx#ZzyYcDU:D$1"uL.]9 Gr]p$)ѥ+'{:["inƧml.g{K^uҍM5?\β#U #JXB`D cdfKD>m"%Y*Seh$FDKl-+Q$N~5z,w-F;t7ZFzi\bi{p_:^,̈66tʘMDb^/Dd6ڨmƧNg^ `^Ddodx}׍zy_aϧuZ n-_aeզֶiw֬N4}#z2׉G6]ښmd`ӵ:&"_:MߌWΖL=3UMFϕ6zT#uV^Fuk#7]zTgDtjUDtNSdgF/Dt-Fϕ62m4h3nt2btMsFPm*MDIO62mdMDm62m-wѥmF۞Pm F۞Pm*MDlj5Ouw2"SeDQȵYm˗9cH>%Ƀ9aB$Q$rD^  ."aS|1$[n#q$"zʿpD5~FjQoĺCGggK9rPǁP;P&9ɈV##!ŁoYi?Ui?Y2~h٥ɪ*~ .c #kKc.Ak _l#8 qM7,>DDzy^kӝADD'm5heq.-EDVDk)EDUpPD q^9[ꆱ%> "5@JO/]BB%MiqUl#"B0-YI|ZB{u=N~#]wUGeLjqlڔӦæE0'6FmHnC$-+qs-DшqDŽ5H؍ vFĶ"aEd:,T#)'؝ud<H2FDk݀{6bľC78]DF[Ѣd W ]oHD P,DFU(DPsZBSu#F;F_-(^HFD8dx,xacn , "ZDta׺Tu{x"ZeT1bߡ/@D+qclmĈ}*GDF՗?yɄG*|T5@DHbDD[ "T>&DdOGPѥѥGDnDDnN]DdC]I1HNu1ZjbX${?"|9mq⻲ AH>G7mM#ѪcZ ٸ̴M6a$^h/vKb?9 x) "%2ngDId$@ nJd"+ѥjT*s3ZGFQo,8 ?L4y|Q$ ,w2-- rd;#Lw9*#x,lm TL$"vy7[C{wY O'9Le4[c&Fޕ~{Y75Y߹6^a4g\\5a fxei5-Z -lyGJ>atm/|i[6-md(BGbg| `[*u8A]uY:S/ʨQΕQ+]FJ̙\D}0q#."s2"s9na!#QΆA[Ē0]X [9b#~#5=@-rr0V oeEc+a.jǪ3eP-0(QFreɕ03chcnTsCZƼ1́0L# HuՕaJW)]t:=U[:-]Ft1O;%>J1J8a Vltpƨ:eiU#{w|15,"fwW[˘|.—FELc{Iʰq+cҸ2lʰq 赍iʘ.Wk[zmj%ӫeF)V#|E#{2r~n]JLtQ`0uQ# 9ĭ+7|c-GzW\0ҮXV3KOd1#/@qFO:;0F9F9kKb`>U[HG#ъ}vfoث3cgm?l$d<Ǩڛ^𮔻 0F9kRo͂F>Yz>M)aCz):ulǬW{w|QF 됸ҡu6#c=ޘ9ޘ*7S=w[,E虾ޘ1,aj< K6,ڰkR6˭nFClٗ݌08>hh$#>d mxiݩdTdBOd4UCF[mˇQ΍Q$e]a׆u̼xV#c 6c6ˀѻ1[_ =E(ga/zzɒ,d m5d m>dZO|RE!uV }`V*mf٬22?H$df=2?c:3{%Q όQ^8ՍBݻyAЂah dt?Vr"ch0Y2F9DFg{<Y6Udž`w- EHDFmAFCd'2F0튤;#{Ex_8\d m68[6ZCόQ Ń#c3FXי1ja7}dr& ֧e$F5[ a]u A}{^h  Ahbzj3!c7 KBSzeXl26 KExX(P'P'\ȏ5 -F 4fˋP\\[{UۑOeaÓTu6KW"#BSddOLמ"c(N{{.ЌQ[1ߜtu)287C1]1=CW"3^g#X&1&msB"chCdtM,2F9k[7lV&=M"c.$a22FB"}Y(!qbk]1QEOfrH.s+,|۳8}<ɉ YH`LCX"cz!k1Y?յՆյc tq̖Fʻ-MCdmɨhmh{eiFFtj>KЌ]˔$[jM6ۿ<83x mv!R`L2qf(g2D(g2E(2,|:Č} Y5Lw!Z V2qLw!chd^B(g 2F92dN澐1ʙV1ʹ13!c3,E(gSCU&Z% 2B}mY!cd xQď #ciQD|QɨCd 2*.:le4)2 ޞ !#[XfO57ZBF :3QduOֳ`t/Mg1Y}2F9!d2ٳҙ!dr&3CY2F99dr֣_:烌QzTO|1Y[+tIAS61bhAی}E2 cy_o1tD"c$*2V+PvLwǷ=/B.GH;2HUd@ cHd 2@f j ɼČ1!D5daE'BƨdN!cF5$ibƿ†22,怤ݳ(=[BFk6lYF fÖe{"a˲7˜,s*2F9 [ve}dZoX,#26 ȯOu_0-g[s#chZ0a {e5A{H $2F901x92uC.-xJd燇̩3Yf,M 'P'>΢oP{z.-c"<b |Yd}ԹeqoeIL+~^tȐW) ߈ OoUIlU(>x/^DDh1W%+DHFdr6",)$2F9~QXd(SH2!{ c :QI,2 Gm=jQVdW 6ƽ1E| ߢuN#u(FFf%Xj&f[ -MY~/f YQ 2[2z4$O2F0#:1#:1!АulD471! i oHcxC i oHcD4$s/2F}6ÃѐdB(gnoƘoMƨd'2F!Vl̖ы3i֧:3,ư|#1~moc4k`5[0-~o\#Yư#!y91z(a2>7[vݖ?= )C5xcXa75xcD!4d)y&*OF}2Wl2ZL4O4ռe\WXe]ɰݓɐ < |I xT+- s}9k9;:yIj2DvEБa'òOe >aC2B ƾŰa'O H"dE$ Ep$ 7@2IE̖э ^\2-I^~j$ C2B&pH!d8pH!IL/ᐄad!&3ړ5՞$hOs\iǃkt _-Fj'c>>diH#kH"^dx)H}2V-$K /E2Xɘc| gKh冋 q1&EȦp$cB*5*z&SmekI(ْqOZcCkZ 82jbYf_o,h AkL 1a淆f~ka â/C ~ka淆f~ka׷]v}+ْ1ڱ4@3#@zm2zm k[Ô/`ֈh1̀w#o0X( %Z42 7 5[#5vܔ0G3s2o#LacsA.{ɟ{6rɜ.d) <3k B`H2[Xo?dP\$QC $PC d-0ddL7!3E Y>)Q 2F V26ud mL֑1ʙ#3^΋T1_4>)ᓘOZ'X*dfYj dfY e-)f[t+d{f5`CW$ 2{T7o1@!谅+CW5+=`w  *ŌbH2+d -(d֡c yR:"3K2 sζ'$ 'I^3-Ff[%Yi Yirֳڐo9 Ӵ$}?ˌv^a;dH1JD1C1޼F7<@(gU c3YQڷK7<@hgM7<@fgqZ"Li=Rط4" 1ڄSE061ˌO&m 1?t{dJAf3˙m|hAY7c¶G@Fz#fnaG0C:6n85\ޢ<q-̖Qwt<9K00724 .pBC$2Fs c*5Pq sF ػEkj=ϵؤ5zVmئ(CWd0\o3ˏEGqS>5ע[ }ԇl+I&!2ʬ\yʿdt 2FDQ@Е1ߐԠ@[ѠA2ˌs>lŠkXgC" ##nǀx- Uqld6|hHEdc!M1z)#mǀKqldr6Ï~5/mڀ6a[ lW!h*O-2F9.6SЌt `?ˌo{p+.-7%1Za7FLCtIUζQ@Fk#YfT2lw~6]'IMmhֈ`. N'&-E$|& ۄ6a@h!\C& sPRcgF2^:zLyg&k2qmE&.AdbM k#0d> c3^!72dr&-x܊L#C|Lz:dr&+1ʹNl몍7.0$C dFW!$d -T ۘ O/g[tKa!{̽!uԐ@dtߐTdt[`!c381ʙ#c3G(g!@(g@F9lcKdy`dhvAg!czCƨw A"czEf8՝}S&uo1@"Ӑ1C#l!+#1ʙv"cv2FO֩"cs5L1bhl6C dVK,uF(g2 QΆ-lcزa˲d^VQ{Q$K2F9lCdlز $"cU [!~Tdr6U'a5dr& 13C(ggQddj2S~KhOdt9d& ],~],]Y|32>׆ⶑ1ٰ8Y<:2zW'#c3xQIL2I2F}6lɚA7Hdr&yG1곰g 0 ƿhd0֯!c=$v CWYxOPduc'5ך셎6ٚ]҆n;uIi- +KGhd7%d }aslz 1te ׆%]tm #5ÒfY71fYdr6,i2Fa>mƌcVAЂag<>ag/zV7㓌6aX5XA\PȌkc`H>im|u+È/Xv/dF+ e?dQCFMXV7dt/r!{9ydt?Vv? dr6+cDƨkU `[kUt/P 6,*2zXc8*c21̒"ct3KI !Ɍƌ}&` ۂ9jXf p?԰ ƿФaֳm1teLndZ 1&YJd~0>HPTd! o#2 ʘ ý"B1aL>pn_I3-F0&-Z0¹+# zƌpP-V>0ߨW,Ԡ!#ި=FDsdm!#[݈YAȾn|s̓1Yz]a 9F9k'9<Hn̓ϳqm̖i@}큀6ҡt{ d>HۉBc{ÎdrKnBmQ<݀2ƛ@lnd7?m؀`rցIrefƨ:n@ѫ@22,3[GD!LuǟTLL\;5X5/nIėL>lfߚ%'k63Έ7xL$G(i/Ff3c! DL 1ʙ,UBF_ QĦX!SI>RcƿIb"6:&S{iB<-x51z$eAI*R 2F9,dr&^Cdr&aW62F9aaWȌl|~)d6*T  2~?)`H2W$=%hlݱ7gE]!N, H dh,BF7ľ e4>hgD1Ji!c4Iцuf,BF9X2F9/25:3 "1ٰoYDB;>Іa)300m3CSo1-F!^{d MV6@F* jVbᓌvE憐1ڕa1dayAdDhF$m2F7m6Qd~ItbxGІaWd m(u@edgd)dwaW$!62FOE"i1tf,B EZL1W\GiFvBFxXRϓ}ih?%#[4BЬ2#{4ai<26GvیFm!#  =sj2re*Y̸m=[2Χ}QQ[cL FѨ-dDm!c mho4j mӨ-d>Hx(2#=JC\gk1Y{zE㲐1Y{z^~-`e!3o̖1ƣ:#1^iEF#1ZYz1"KY7di:2F s51d>2F9TeHdC&cqHzdUJél1-F%3$DFk9AFk6k]F\&#ձ0lb#Ze1A!#g]皙2g1b ֳ4_Z0lڰk=3гk跨}QQ CFFhoDF&caQ=KQ:ڸg.1ٰ_YOdr6ڰ_HވhYRVd#zc]@V!dfg1lf(5,fccozbCd%0d%2F ұRQ$62F qb=KS+KLh85:[ --KH\40XްY:~d @Ǽld& =dd mrmˍ1^f {Ƙf {( 2F90ۼ]n Kml!` Km~Q:g:!ưum [1}c޷'u285 ~o1tel7d9j1@tC0cjQ Ӹ! 91cj܈Q ӘHQu Ӹ1v4f;cƍ^߳M1N`lL6Ӷl[`].2F9AQΆjclWfdl1vF7 SƍQbbfl1FfqӿN9MFcN5L8& d[$E Е0I<[2Χ9<6O {w|tMh}r2aV'ìNF8uҋ6=>Hb yɘhNYpdL4'1<ˌ u &7/<7m6w2ldLG'Ntt2©1tR>6w2ld܉D(gNz!&cas'@OF8u2ldL'N͝tBM(U0&19 ;6wZ3٘N͝ ; {dNe <!I$~-{"{#c̰ߓa'~O =ihF0u2$lYf1 ooHUX87`(yg&5Ly`H{F&5X5|H#d!_d~E&=2h O?2F=$3 dzHfT L(1ʙu"cQ+jYeͫrm~ҌUb!ch,}Eh=d).2 t$z5f[/0d&C 2񏌡ч{Fw0$AfC(vTDfgq EFJ&˅Vcƿ;+wD2D0dB/肱o!9ɐm?CF &*zamȳ3-Ì.=wwO>5ԁwA7+f/1`X,'2FE2 c3ɍQ$I#2FdXld 2g1ļcW1^R5#cToÈ #F(g1#ԤuöAh#c4È.SS[0+cGh$!2 #ؙ1n/_w=7̿'Ȓ uFI"VXWߣW*쾜 қ͓ w阎ݧc:c:c:c:c:c:c:cq411c:c:c:c:c:c:c:c:c:c:c:c:c:阎阎阎阎阎B=c:c: NtLtLtLtLtLtLtLtLt =N阎阎阎阎'țc:c:c:_q阎阎阎阎阎阎ǗMtLtLtLtLtLǗ|k:c:c:c:c:c:c:c:c:_q阎阎阎阎阎阎阎阎1111111tLtLtLtLtLtLtLtLtLǿ阎阎阎阎阎阎阎阎&}_qWV-1wʳ/~~U 'MT%6/OV˓d<(N<)Aݔ'<)A]~Z'}m+K}~eƶ=[E'נPKS_{@{ ȣ߲y;v ?(zP~{kH= ?v|aWEm[ooy>뎀@reՇA~(%(_3ur~!>ߒ.f\AC(yeQ( w\y9 (o@~vA^Ay_x?u O.cVCmglK v(߾;sv,_vȻNoPU(?v;ȓ|w_ o&_w_\ S.GyA<sC(h7w(v Ե}(x|#@sQ U (ބ2z}g_\SJ%_R|(_s C_ey/EƛQ( Qʷ_~/? QMA~>{P~%uG=(MA~RE=(,m]AGA|'~e)䧪 }Q7MO\]@ ?K|1o9g~{\~aW]M{={AC(^?uW9>Eʣ+ wf?;(Cyk.;Ε=(;ܝ1/P^ׁkEْݏ= ?P\ gߎ(_Mro</S_XAv (_;/Gy g8P^F@KP^ڡ@~[y7<.C] QzwyQ>|7g|A9{;'<&p%ʧߎWDƏR=((v1 +~-Q~f.};Q(".BQ;{oB(C7=ɳrύ(KQ>-뒿0+/E˧|e(">+NۏDy7oG»P.򍗣QO;3BW|6W/A7ȍ(?/d=:9]z3oރ?ʷ_ݹw ̃(p._/𥳐oFk?oAyl?O_'Fyʅ(O;s(pګP>2/>7sQr%ȯ>U(ϼ #WP~Ӆ(r/8ʃP||yݮG#(wYk=tFY.Y{|~/_sQ~ /A+\._YGuy>`K1\AW|E(}/ےw|Q}69}GC(_x;ʃByQكA~m/AC@ wQ|_\(7(t;oygނ9gGP%(_7헢Џ tDWGwDu(GP^@^ůCנ|sQgP(#GyÛQ~(?|!/t |5(g>> 忻BMף|懳ܿ<(w6[۲|Px68קCF@+߉NG@yם//E -?N:W<(w ez:'?;GDUA{ nCmA>WQʧ /Cy1/jP\?c(Nw.7=呋Py7_ a'/DyEyP~u(~-ʯRQkQ>z?ygףw|u(/9ʗ=+nGy5(B9kGDyM(YQ6g쎡|GQ>(_(z)١3@yC(ܝY?2nʫw ʗ( {P~R>f塗쏠,[VP~2w;v9eKnȻڏEP^ _A(o=ӟrm /F](?xO_|n3@r(t8ˇ,׎|a?^>#GAOyޣ(s.FӾrKC(p}(_~٣.GzBC(=򭧡=O?ABKPj]oɏ<=ʋZ{=v8 g݇P~i(=P^s;?qʿ@gؙ?ϯkQ^w:_+Q~ͽP>(PQo| ]򾻮Gy*& :r|\v}o^rl+@AP^x)gw(9(_*B}(lw?GP>RjѬo\@^f5+ = 0}3w= {GySc(V@펢 Yx ;{>U+ oZG~0ȏʏݶ'n|G}7E_VPް } Cc ?3(o %m'Ҏ8.y=|A?Oٍy}ɳy7A3@v3=Yސ;_{ ?Qz?_?Gw@iYy1|(Nۅ#(]W/wW|6zI/GF]mOyP~QϺsWP._yע< OCףuWV(|;{/'UQm>RFN=tq$5m/-{HM2OqNH*vie=tX)TIgfW|}~O){yS&wD8>x2إ{ Ⱥ<,o%[0G-K?ɣٴ8_Dэe\ѳ^{b>GS Fay@:CO_wPY'=gp_HGj[tn(;~_jˠ u/YBt~GR#%[ݩGR<OfF?-]B?6.$jgcz JŅipAǎM/i T4?ݢrQto=:#mL-ɴW)>YJe~#}e6ErZAw#;?7&42jiY:\'ylp)Bj}L3+h:zE.ލ!nhPNٛhz4]q[KheZ:ZJz*ţ{ v.;UY2PD!Ĺ%-}%L:zDƙV~Z,zu' U-yth$nON<\Zͩv)ZAJM;ZhItRޑ oj\l5]DWF-OGhe%^/0[ M OQ"-ɠekY1zsm [SuEGͧӉTB4|*Zw2觗鷃iQ ݕHuFz&ϧuh`8=I>w= ]LQm8NGgivt$g,&87f_?ia:E/PGmp>A#Oh?g 鋩tl@W.HS/*V_u!K1@tD*ѸR:L7/%GKZwIwWъpЄ |:9.ʡ_t =UH=F? oO{ЕT;FҘxf?ALHdbo͢<_CӁw":NsgQRq}CgJlKvKBe4g*]g,Ki=󑋻~Jzi(œneIt4|(}x zni?яnӏǭ5=L'M\.M3h(ڥvMݽ]2bX}6}<^Bcϗѩ#}7E/t2\CkϸA_tctoOh0=5zA~JuІ)pHt굊vYJh^*]AKŸҗN\\O睥 /hY_߉űEkh}zV t1]LkWÈ6& \C{ѧ]aH) ?JAn]n>OӸtU:'ߌ8g-}×wݥA._ooЂqFl&;ɝZ(q{;K+_;hE qNvza-[iH8 HGGt$:>}I:ٍ&VwQ%|u+ە.WҜ`jB帶btˋt7iBzstz>^~4k_Oశ |T춒jbdX<9D~I#q4n?C_AXi-:w85yij].~\FלE~yM7t.^re+Ez2P[ߣݾY '|-vb ɦ:*G1ѱ t|0f{P\<'̫̓?Ғt9=tz-ǽtZ<馃v:m6x=Tr詢l. =je^|5]Tķ*^os? t,҃FxF`[!;7t4FO;`83-^x7Q lۡ ,t3^qa } ¦DA,7L ߺhZMUq$}TS?qWu?o\_L7Zت>THenuZzDZFq>7d[L`!j:*&h=G~a%<iWoDO}Qlf>e4)n1>fs2H|^;fض-6nsht%(~I7vrbB%]jzlF{WR]!]^!*c =v16w5G=*\a8b]ܒ@wIxyem5]L?H?BjO7isM;>lIE]IhOItc$Gϗi}:q:J14QOߎp?=O./LΤJzv_h ==fj ϯNMb< qygtQ؛)ChU>.>Ic#%zmZ*W0&0"`7-;EG{mK\mdvz-ȣE1+UN*0Jq-k9%6aʗ.2Z(V^F*΢r=f~vA:w!.O?L7f- HW.pfz(V$*={6z>[iH }r=sa#]~2Au7StM*~WO?нyFXD=BѿZPix4=Jj'Tx=Wbm3Fz/<f=c[ pO3q5̰۽%~u.vjqө&xZln6^ kr1/fGLA_9@OqV:DerF뀍kD5;5-l1R1.tj!{1is_ AGt<e݆dg+z=*+l)a9 4TCzC62Xstj}?]VH0BO|:nC<IFjȤavfjiMlC/^=Tg8}JE>|ks;- w=W '6ءG2}NN=]%޿.;z:N?RQUOrPۃ6,xYN-=hRt#=mèV|փOj=BGҺbΕdTKkУх tG&=km|Yu#ݐ =N4Etw$l7Aˡ[a`-}2*o.-z}Ci ES}$VM1tʼw-vC&腧SB:L2Lȇ9y ty ]IϤתKbg3Efhq4ן#jz)tjC|]f&*Y?N.\2B1(Fjz2ѡTΗ(~UAzOd%Txt*_]Ÿ{ׇr:+feӟ*UMϕPG"zXiTY񛩣KV@e :2ZoݼrTG߮KK\x:L[C{hxϥoUF*+~OKc(ؽeqtV]E?ҕl:~AmT+m175tM1LW@gݐNN P*[UأK}"&T&j*=+No6s,}(|3ʺF_Q.AFF}\_@z%l2߰9  :6A |)&SPɺRA32(B4z KRa1s OVI"$5 Ս.cqtL#ugjhl t8:'fUh~Z[Foѻ~02mo&^Fqq.}z)Aӹ;tu _Rӧ 3Kiuq7]GFZ\J-5ˤE&z16T~H2Fuq ![FSxh]枥{SImۧS\ϗFg*Fj.5G ._;b~iVS[MMaxE ;<$aT+' tK8ao43r?ΈKx1zimp>!ﭴAxϦO)r: ]IW[YK-G:z! u~u_8}b-FS|;Ge4GG vjYH/ttяυ ˴g>}͢OVӸ G]LUTT=NKFcyTWBZU5ah4}89KTW54e}9*]+o\<.\j|Pݢ_{&/yU ZdeUp|]Ӄ9zFU:q|I*hl2oFgD\ifxWEWxHbIR^.WmjWew~M4LMh`]mTć(^fXfTfފ4ShMK5FxKO-}GO߫5q>'ywV;1qt6 wD=*5sZz^=jWҍfe݃RCe Ӣ:/IU5V4T'+·n+;|+[#0k%t@_ˤo/sqlVFe8řZ>AhGkە yωHm47 vf:ha2=eitt2mӧ#;ܟX5e?}@4:.WoT VNqC5cgbhҡM8ZK.z:VxRŕ8z8vQ[lѷ]Bt' ϡ{u􄉞j@颸w$ O-z*O[|ߝ.7o - 7}TКD>JS2C*x]OGi9W b=nFqqXZQ5Sܜ[u t^2͍4-L6*;qQ }[{aZ*Sk{/|NwSd6M:KG7F+ݙIxT:頥&*۹ŶtbBmz) 8^IebGOzsNw?~K9ThZ^E R&ac4N\s}1v62i뵴kSڧaT;$SM~9(K&K6b2љ4F+D? dڜ;zTD ?ѿmJ}kiR*(&PC ͬCл5K@ڳ-Jctr{eh.s*BZ`ǓxA ԐNK\#}(zvDr9N8V']'4їL]MK <*(NH2nQzN/a.v/Xl5A_uw1.HITn_t>Q@')atVXKevEAq?kawV1ԝ1ҡq4ά5xo F̣սsٜ~h?^nI{BQ.Χ^5B_Vz};= e<#+zJ3b3]W>6ۨcij?#t|NM&zH3k)qBZhb{uOY*֚z> ַҗt4KfxCt8tś\|\͉b{7h .p*-lqO?iߨ lqh=M_h}Jnjb3i]tf*|JUxN)a_3EKG;k%vzE [] }\GX}6k:[1tq#,\m667@TgP/O>ۆd:#&R'Jq?a:Sܫl0'itvIA_v堍9_!d`'=/2mvF;}NѯJ/vv:)VJe޴.60FCMu] ZEDѿh/PNXOGѨL:6if8-GTQJiβRc<*nHӋ9(ϔ)z*:=H롟+>M߻? RS(>+ٹ.kˡ)<+U#}'~MiAu"in,]_@ӟ螽\Sx0Btzb=5OA)5V{D*>@WQYzY/o7D~$Jf%)~e *>KCL3hP \ 6 Qû*MRS9bsޓb5:JatΡ2/VBjnmrhTn|Uzabs~&XN-mȧ{o+O{omzmf~ TRXG%mqtO>2F0k2=VLo٠B#= uI'VnhiOmk@ 1~Z**^4U,^,mCd; i>oN)\CefiͤGuTôMRO[PFWeMz>̆[IWJGQ8t'ڧSL˥_$z“'IWMMRz^]SY\qL$_J_2UFrmC{37*hèO8n T(v^E tN ]QJn3=KoC40>[hf,]@ tVnK')jޗJЫyvtD hn"ˠ]N!tO)=᢬rTe֜,U[G9LatM:IMXG3m4{-]?nGЭtxZL Vh껑jwQ!c5t&zMAWЍ薍z~Z*޿Oy 4i/M_C3+$"->n۔ tspt';y +g~+~wsU-yXgG?2TXǨ+LvQ|oώ0sX;SlI gtQ[mt]nxi^ifh:5}HwiᵑFZubQNK`}ޘbmVo3 l4Zz 6v/ZZaM)xw0 Vx/XCWt]C}4N, ˁ"T#q*s(uȤ m-lݷ>L?4]V.9ζQYZqI l@[9=GoXavQx| 2RM-y<@9ίn2*** =UWchYIʤtN+sksaPyC #}_< >6Ѵtl*#j:)i1z%tP3ұitj M);u@s+Dh0*1ˇl4`NRAPJ7,cݕJOBB=th}|JcSTYU&|UV"}OOץҟb_iU$v(i48Fcұ4OKOv#;}q!}=AuO+VfY’X\⾹*X =`M:xKZ1f1?=f'bZo^mb=<+AqJ?5 r] fU{4^yk[aJ ti^0^f:Rz6^Kh R?-& ) mcMWqf[N /D70^M_Szx[Xߪhx>kij4JN4殅T5?ki~{Qr=uoVC@0DGzZeAeZ[DNSi+TSS*7Z7{Ba694ZORLv&视mkw'j. vk7P|v]u:銇GowҾtN4qK)F&h?^d~Z{E^"(.@o/-}4.ɤ9EPS !).e@>[襡}cvʟ~C_8dDm٩lվ5o*CЏ4s=Aհj"tV4C0@jԛim!N7-Cɢ9+mbLǕ׬mwHxW2$z8C+YtF!SAOG*'>Eg۩@w:DUәdߔQOP% Ѩ8T$O<5O trg+5ӥ>"; tNߋi|yICg軁F+iAz-yon2 =1VGӻHڣC<:w }fo7Awz!^L ~.bdد=Z|S̥쥉atv8]PJWl=)p̯ع-ZO'/et^Wќ4~F XJl'hVQbNC iXxRN9gEpE2N^2<-vx+=&"ZgتUj#<5IO؊QfzzJC/๣z裏,B/=B~^\/o2K : /W>zW{Ck=-Tbnbb;Wӄ***ז`Wj^BTOLe7-3.flot`S%`JKo{_it*'|QN/V4$ƍ[hm&tOku_Lej/,H_St?utN УNoi[pw=OͰT;mLER?Gqshv2Je=GfE^պh^UTF v'ފ2NFQWd:4tA2PCYo@!=N[K)Oiil8}UG"*`Okз t*\g| ݙFyҿJz;vH6:їN4h lH3+iV.砲늡_D.v{AߌD$~I_TjO݂3qdnM4&NIWԪ ߯>B'х.i|#-v HH6}">'Sw}^15*z.^u^GՅЬj|"Ӌԡג`GhzV$ͨvo=|8<7ҥ0Kź ŞTKҘ$ME^^8*E R1A{4TsJPSQ*#Z"ثCAǧR|4Uؑ#d*ƯNzēiJ:]Y{'ve'"nL[t'=7:&{;aov]I_XC_t͜B?L?/_PY]qK#;ue{gҀP}>FH`5* zr+7ҝXz0hxzq[#h#YOU4ԝs1{$:&I4*9(~I7DJx0^EkiF5g0:s5[aTqV朠7MOwFoЦoPtX 1iũ TLgUt&~KJ2ӽK *_0U)1K%28F+/'4}>EK-Ufz!S-h:؃G-i AMq񕴪:"SCuy i{w~Vҿ O#.oT/)މ0zgҦ8j+iy=4;XCjiv*It<z8F̚ќJkWޝR"**onbR6?ʺ9Y7i~{Zdۇ=)^Zb9 VtjM* b;I= ]FsSIq7N//}Er5O[FŸS?}#MwCh**e/o],OvVo[0YFQw:1˩W4ѭzM΋nӿJ+=AO7Sb_WM{7ttZIDzّ66Цh7Pac:G #A24 աTSMjZ)SOJhP4<:%4:%% %`)~Ah0""F|99g絮dg{?u]ͦmhJ'zP[ wy3lݚէӠ!B DW{!_t5t;ЭP'虱"ʥ>T+ʢWCd:a-hSEePhO6'cִ6>izSlCLA ٕZFoRYOQqc43]边X=ՓѲz>D:`z:ڤW*tF7|2Aw'BtFd:TI2_lzau7WGzأ}*D}@ޟ=ONY=ܯ=d~ wүTt7[VP[=6Ku?y+C+N!tZ]rbv;F&>a?}n'}'ɡfojzt3 4j;}{ Kˠ_R鱳Z {iBh$:=TֻTۇm4~6=}@3|ߏu+yHqI:m1|N+qиtjOqs:A?9J/?2(rE$zD]·tz3wBN6CɴS /‹^WJ3,ë ̰V]۵БRDЛoUgA*4Q-뫷[;`MPD/iFaw:HeΕvUJPCfx/TERYk;\MEr7pn7GM-|< _9}BMnVEz%F(d"C@H*(qaг~ mN_K o>ns߭3 RG=Bi`:<~Ez#O8>*_RM_h'eOCF*_J}/:/M=MO2'Uh@G8|Z@O{*Z[jth4L ]C3iQ4RY8tΥ`*Y.{;:@&ѡt[Kc폣G2eJmi̧R|ʺmzPMp -33(Be~X}/.4v̴o8]i^N!ӥqӔA?2T7m\(} 7/hNOQV-TD1 ldۈ!yp'9@ #ءw%(8MҶ&Mt!:·:0UtGCzp?-YM/he1 ;6ho$ёtBMHӇQk,뎅2/]iq=;yXh˥b}[3ht*iSt[-k7`FnLjIFq/3]AӟXMΠ/}zLuS3t7Mўh0 jF5 lV}jȥׇQcIW0~f7M?xItEX;}z(=H|hE5674h:}@C ntjr(-NOv }xvךZ:,cח됾nΦj!9Mo$O=M;KwCz&<ngЮF:Ջ.]3C7w5 KR 7L/!bKc/q;;4BZd'Ӳ2z7 xN9{)McrilW7Wиnt0>]ډfk`'YIѧ_=tXҿ(V5oǺ)N;fK{oiCw7I+iR>H?_2蟃nS9~x:֮!n>9m{*4+Lbًʺa?7MN )Cjzl#Ov˜Ut>3/]ߣOyl?{T ?o-npm O6R'oTD(-GQKw4#6x? MS/~o`r@eeWKAb"#bfxVLAV׳^:CoN"1ϡI[5\>纾 :SlZMJ0 CPWsy z cC{++i緫v /6R}l*x^diFڟaV~i[aU+-M5ބ#YC2 db\[:LE[q6:WGmI)G9tޖIuw[(xP9NZ f363=r^F(LhcR·T=\覚-ׯOҏЋ:Ic< NCYmXN3o-l(y)ˡCNZad}řE4VCV8.&`ZMe}5tbE7h>?>I˯tZ+g2v|ھGЂovl'Yx`%6j7 }ݼhCNnV=Z[5R V>2X^_͸B#F ov0ѷ,75vXTo:KGwy\-#5Oiu˟y77:x{9&z :<.Ou~>s>Ak#Fkut >*>Jȟr VT1t.vS^!FUBMjƋܔs JǤЏ-z˹f*ځ.KSLv>Ns+=7ߺ ~YB 5o9Y#􏥣tz-]Is3P[hkzf>]ZLhQw Чy?:l;+'о:*N(C+^΂]PL_NZKl435ӭ1TU=_'Jt3ZB|>(z::ǭQJ'YC-:j *sR]tNV<^Mr%L_[q}\xD-ϵrRo;U)!nۼFR#h5ty =RIZ6U됿F7;@~&2tM]Jo$v-U;4!N-JS UT;3^0m]Juy:^E@DnB?*?Q /zArA|y>J<.PY'QqiMtP ;Yna'itL2@'ҕ7pғ!JEc2i~Zp^Oho }J#G}il(|&M7џqt{5-ivT۩o1 А%z:h<5짓t tf?;hAOL'Wҋ% O}e}6b~QwwKCiX }D'TdUtZ*.wI:}\XD-ŰtH>۝&я#['㷊94[D14`p{}:b%OY ij]IA75[?W?k2G f2ZGEfxONӷjlt WH-0^E3,`"t^u+ߙaB+3svxuVkʵ6xݳVXeF:*ōETL0+EZ VU:@;-auЙkEs9O,#7NgY`[h_#(Uv?!&n rV *'vT-mYS.CSL/гa j버5y47ʺu6]]R`'YN { ۚ14JZH^.n̓YN̢&1qc I/M>P&d;8#xwy6mIG':G}zuf#Jh:i?q|$ڛ³O,z[%~v?ؼxh$srB*M ̣!:ғ!5h&tLFH7=z> hsvi&^.4?[iZCe ŇЧu M#S:=0nŸ>q} c/YO,.c祽̌GZv*m],bθO=i**͟K2G|W)wӂr*E)تY-4=җiD.<ފ9y4LWJDئm*)^N? "рzV9_bFF:A~m'1H'=Jm6]ttISQ֓> h<+빌+:GtN)kQDQtJNsbzVCk}m~n! hxg[,*پY$L{ѰT:HS"4'>)gǢPZ_Y;KqT_u2nK"zv)zVBGm]BxQd:Fܡ t7Y`,=WF/ӛAب;K<3i]O':1ȸti$,QU[3#C#EbZNMK$ZHs& n@MeSEtU8ΤT4=_EΥ5&='~N.>ԯ5 hPN>@s.Gtǭgإx++he5}z眴_yL=<MKЪ,* nU@帲ba8'cw_*u+OKkhuDWgQUKGcPZB˦_xetHt_wj_B/{D櫩Ն.'h|ˏ5VwYszBe:{6/Ҩ:-.rtӇjԞK+,0hޡd:}55ŸItv6"~eV?DO:Pz>PJPMn t#:,Otz/L̠{#ѥB0:1O?OӆiZEO ǹYCD|9𦏃`ɏ<4rNOgUJ73Ӎ!Nt*ZO#zi-TTNݧ>~GOooDMmߤ'/ otu9rnmDO 'E;WW*t%-hz @gMbh2=ܥ=еttXc:f0|&yRYKq^ؗ.C-hf4͛DMǛӧ)b%pjG[<~hԿ? Jbg9nstD:sʺgyn%\ ο>3b:M +Q4!]-ݸnOiFԖ@Hѣ8o\v}do%,}wEV[s&O+ڶ; z>9aҁiteJKd<~)}/~3:e?6 W3taM]{_F-кكJ]R\j9 B5B7aHKR38Hki^vA>O_{M;G'D_KUӏW@ t蚅yt 5㭽i~OjI蟢?6t‡*zb3=;^oI[MiG=:;OXO7ӲޑfX*yvZXfާd=:/+b\]jw# ^J_=j7D~dG1mW5f77b&" =LkL3`LTmAFzFin7ӴԮ,TqP|@U1n>4m+ӍZp|@ yh4;-Dz<횧zҜ/{CU5tCl>vPK:ݑE+4@ۈ~`0EYNO'WH11bőгuC5-:E14&нPL'z%R>ȡr{v~ ,EwC-Tȡ tm 4:ʼg`6IѥvCGj?:D7*(޷B/=e. ͚9^|fll;9١˫8N;y3 sܔC|:5~4NE038fNT8@2Rz?htƸ1)w_7#UHu4>΋kfm8>2. Cg8}D=A>}K[v]}"*;P~C3 JZCoзamhd}UG c=N?+4OGe Qj88[`zeZ 1Dӯts=D+"IۺO!_@e'L7ҳ%c8:[OЯQmO{ji ^JdVGDσhZTVοS|%:Ha-̢2tK\/޿hs4/n,u`;S:]l7)de@r3v>NS# GSw!x*^K ҤPX6tR)Z;wsPIB'lڦ'7oY1~A9t]Jߊ1nK|;2>PC'RyS赖-=VZ_Vo~5w6šx[u6ѿn]a)򺸔yqN0R0nQNvp>tc9Vmt9B+Q"xq \SH;hB:1~ZNMRKyG;]O5UCYUQzVKLL&sU^kOߨ,,9@OT9u^ fzK/fX /Vx[0-*謂+e}:ѱ}T)mE|Cc!s]^[<"7KE?*ƏV-՛*=5?e]i9oz`-=j4-t<=.+UKzZcb, n)8#;t8Tr[H?PY?TL:uVBC;hw1>*$Agg,?nq]? q9N[df|>Sj4YtҝiVGbM˩@;JLؾ^΢/xҏ'FNҩ~[gRh?/:qw(Pm ?O)0PAeTD_3ӨJg 5t*=cWPcmS>@;Aj:l>LGq괹~i/_;Qzc+#~O[G[Ҏi{7NL]BwrY\BzNETC}jڵ;UF1өo8{>|,]4Le?ӅԇVd{'`!TVlvɧ/oqh|6}I*"~BП莡to&=OOARid:f+h#7ʼkjH_z=v=M{{Ӿ{+!Ԡc[c-]0~Ei` iXKuyk#4:^M1i14+\OWl0N˴Z:Vo:J[itl:,֐=+OUʇf̠G Ioq6f{L+/ӡG!9~&Eү|鏧Ze5τGWh0z}7~KgNShJ2]{nM;a8 e1 ر>wOIٌYij>-*=V&Q!أQЮ}i~FhH-4c]C?Awޡ{|!h'$*ֻJFiX'! ҔL=Jl&Lz?|iyr9CU/'; lۚvC6kil': M _ӕitX+zGr zIao. pv:KgLsM蚹47XEKչz(6F^CNпϩ!QOUlzd V2OG%fxʢsfhO05XWx^|L[*xE~:7sb^;fX7CPYDݼo7X-C?sxKknoU`@ T𮏕j th?L3v:soܾ܎~_yl+>74gU4CkUT+> RnCiDWs%?Vk/<R55~tI/tQK4H:NCGX0BQ1RI4љ)t f ]n6UHR迓xQ6iF3PRW -C~l_h dz ԷANPɅtڢBz>~t~,jYb|bZ؞O9;lO:GRK?K}in$6 `{MtEMe!yu)$3rVF4Q9_Nz~>_BEЙQ4%.`[G 3r&]X{;1n=I1]h* UL?+_DP9_^q'Bf[f#7_:?rbUD \8L߯evJd?xʋV`vtN)&q.Rϥ+b =!_ﴜw:q4b"ETVNK :NOPs)l,MM^?-^Aݹq%;q cj MOTltlnC"zTp9TO5s}G!4J쟮N'QyQD 3TW+K'ҳ[SOc9_PRr{zxѵ!05@_2:HߌS|t*#.' Wvy/ ja#ZiX˦K ts -4QY']3Ke h-I`~/$l:IE.N~2Oo9 4W˩!=2'M I17󱰭vi?7GNҏn;0z@.˝B6M**iid~m´d}nݽLsU𨿛"bq PI_,3<d\WAo b\e ^\e3ZX>N;#⫷"zxm*f''񩛝 t)]mE=e bTa<@~j1Ϊ^-~CoYD[` ;aǍk+}w^ rQw<3V:EE-4̴ps^4tПim 7_𑧊;7N:H~SD[f F'"z^19TuV:F7h|>NE/̣=8LP9(alG{a&F*dZ-lX?uV,*٨1)-3Mȡ"wt 5Zxt]1dQ!1¦KxzzSOQ̻Vl&)~jn]Jo:ؼy0}36AM(l XNgRqu.һE`Z>}?"M#>c3 //O8'Bo[aV54j `PBcɦзc:DR-!>)W`+`**b#<[u#5c'6AR8ئڧTku4S<1Sxs$oW⨣5pzjڹ>fK(*Ήr?z.>8 rc8͏G ?NTS"V/\/lWv-1|:/.ٵIT3Im[IC"i?7_/qt^$ t.IOZƛ3vSsiM1 lL,n/NI2t^8Ԫ|]OUWTIw^*MC ϧkw?wiA#khh*ߺCRϪXk~ͣi>~GP-NzBa6%TSP/ԙN))Ջz?8q8͏ aHp*r)>7Eq l)Lzrfd"cOK92^C-tS=W:F0/:"fB!]Cwѳfؾa, !]#Do/= |N1949Zbz5TӻѰg}!F-A]s`zk9TSCsb4ۇ>AiDӚzOvc“}=Ǹ".`G/5mEv1tp82wTwůi*VKߧв^WةqO@e34BMqTRK`֓LKs:qq;*LhT0yiݠOA*i2*KVI:>0-[?)ך} _S<GD=Zcmz#,ɥcQ^̫Pyϭ8F׈碬}7;@3,+޳+!n:B.w[շtV7Z thoџRSRT.HhrL+;B+3\2?@Ύ:*=*=v0ѕ9Fk7s#1>Xu9A/vI}KCz=-tfm۠Gx:HM4zֳR]!r{tM b0妜(lMO1Oti9=i5X}P=utnwҫ6W]giYΦh+M΢WW$DC;Zh]<>o2MfgAoYOEQcV11{qzσޫ aITr@iq>Ո&@5eܮˠt:,z KVAe>:[K]lTC_#4ҩv,c9fi"cYDq]*=^>>tNMj`!tz=Z@˦W#=."}(HrN1/u?**>0VciT [?@*\qZ-4+mdbhKb"OTE7H-u/e{ $yґ6:F|d>TƖ2S2-ΠWMmHڣZ(IhI!=SF@e:>~Gtn]`2hDov iPeԪ;dz87nt=L:} *=*N Jhf9]EwS1`z3R9RJNI8Mѯ"iZ%]k tO=AxAtD_ UuAQQѐ a??=52QQkIFF^HƥɸjD5RBgCJE:))8館HϬ~u>Zk}=9}AΜ3]{d y wԮ}jq۳~kL^kgԞsvF{j{փztqDу<{x>@n{<]kֶvh?~P<1jOM[=DmmZ;krW˗i/ݴAj@ SN]=jF^zO.^!hAHR׃ko~ mWj ~inuk7<NZڃNxm~~1~3:=E{wްL{z=C־k!㵛VH7hMu#k~c ߜv"mZ矪ZO6jޢ-QC9EgoGhH.[kN:9ۚ?O|[wXvk8,Q3:No_=3?EɹN=^q]}@;xgmZS~a kcr?}=R4Tu n/bhFv-zK~}vxߓV_Y{kڏ_H{jvR%k^b7Ѯ}q;~?{3y֣7j@SzkgYEv흆C>w!ҠevQ=_ovRZɼf~~/p;k^{k;~CW'EWkov_?]G ︭[=l!/NWxn}`vڟv.z'vD[S ֺci?h=ive'xjoD{#ˇjo;U[xϖƽztRЃ×k~t3i9Mڛz4t|w~q|^mGMdko>M{,/iW>9Ie k"M\tڏu|IzD˔~%^_q~MK,^'>uftͤ6Gtk>3et-ס-~{krB=zNon֗+lN!`-PvB+S{tMtcvjuAşO.q&}Yi[^lw1s^"t=>q' oϴ6]ҷi?ҭJtI.nl[%oה-~cL??^핿!WԎXKBIwpkޮ1?9G%ivk}19wȏSz;ܮ]ڥ-zkw~Kx>ܫv<)LZCxi`vwuפxYJgtkO¼O_9rjEFj-އ?dڗ:۳qE?|v/qot8__y?)c6Z=kvA V~_!{Lo^H{_tzK;tv0 7i Sk])}߇{4m}q_ZcvLv&j-[o;,ݫom~?~]?nsho/߲J;dvb{ڳj!}k<_~yLҮ^}[:`Zw1k\l>yPڀ+}˵-Ҿ>]3V{lGkOwi]ǓGhONݨ߇}F׎=iU+3mm~͏Fj}tРI#gkOH;}vqU?mt+gd[ uskա8GWo.]?A!_G{cWZxȵcWi?A{ivE?[h^/}]gi=Gծ]}etH:?T;M{Zzk'׺reޠujOlvthѮ Z;Qtm2M{Dm|Z Ӟ-v*=Fh_}{O:"۴'-^:O[wxKmaԥ=Z _M} z|diڛh́ڇ}2?_De z@TkvmYN{{iOZ=g Ԟ7NuK;k W>m:zcRcgXjǬ /՞@݁=zӴ ڴ i[OW'/,nZ(9Z7Y=VhO7ZvD~z/{o*w\Lح=dvډ^:[{fk?IӮ;Ee!Ƣzڴ=v8WO=ewhf+gh]hBm*{j'u[u>8=jgiNU7AѶN9F5C˵ 6kv3w޽^3~K;xL[>[GgWh.~}v֛KkGk^Pk:[}˓;=4m0Yړ:_Y~vVoSs更iܫ}q}[HT?mzk= kۇh'ҞmiQ{UNmb{SWhӵ'5Mۚm-y}Ep;1w~Czo}uH|EڵJGi!}[-?!}|lm~fvh&} >w"]n}ڴn3_(}߯-rܨAtݸv_E~Bm-[/ѩj[_QCyxxði囦+av^tӥf?+SӡEq~ujTi7Nў1L;Eq9ͧ^IkvY-nY;Ev:EiGؠ4i}iE+aZV|~_ێP^k;׭١-^-~__vRNlٮ]HMڣ/^J{¼w䏏v<=ʴOr톑>~KcNڴ?ܤ[[vg3ioXLѺ-ڸK{nK}wE{ ;h=E$K{9Fϓv/Z[&I7|SKlΙ-I7Fگ5H;zک]R{sҽ5H{DW{kV{-ڮy՛w j,~v}x}Zv<#zt[#h=vhϚh˴lҮ[!`OF+#ypxO hqZcJI=]{bgho~q {_gM\̱ڟj}v"{knq)^ώ^fioج]O(Q[ZG88>]G~jiﵴ/^#Կ6}m;G{d7:Lvn>.ݷj3A{`omZ?U||R=eOkZ|. KkkYӵڃkgn0^۹LJm~F>7Qv.~-^x=ks_C?3k#rB픩گQkzۚ^D>6=x:]-z7iݨ]7@[u>5YO-~oMyP{յkO-.oE뵷GWM>EP߫ﴤ8^;PԶT[lxvC-4OjX]=OvxGzQcjzISNѯ`B>"?4_Ƿ&Oiמ-׺e!߳=Zs6=4~v|oОi|hO{Z W?]t>5S)7HEv5wNОqhߠeY~gc=mZ׽4DQh h״ɡc#5D;8mm:RۺB;qy#r1=gjWneRg{=|ve~GG˴Kjoߢ}t)Rev[ڑiz^~{%w['h;mpXtZQ%wܬkY;k9EzcZm|CILvn?i|TtM:>H[Lq;u޷M>wwtg9Oڤ+H_,~_{k7Paҗ~a%k}LJa/N╇yeio!}KI~{^+Gv\~_0=`6馣[?꒾-Wo~S[M+Iڡ[;G,|t--5ZH{{HKԯGs7h߯w}ox^ ҞJ[nyվJaesOx$ًޱI{id6cw,"=OL^ѭ]{ ._ua/;H{5KKh]-6+;vzvY=qv^os~d$m=B/c9=sU~|?0^簋ǶkZjx]Z7I7S;]{0纴 iA~jMڃjyڳzs"->i_+ݫxZ/߯(_nvik-}֓VjOYAN]cWhߠ}]~ڏmӦ]8B{Gh_:`oO;bSieciݰH4 =!}Kjs"]7hGNH{(S7޻Yato:`6X=xyڳhg,._}|nSiBMMO5]m}zq}[6hyuB㴧]vvJi7 w=5[IӵW>O~;=pvX+ެvoWj6D4GӵN[YCzmGWMЮݸB}j?6^{q_lNFaWGJXMh?mi_]zvsd myoH{2k1R;kۋ?ܣkjK7Co&jeړjOA{\v(/v:c*}x=^txSžUk~v~hxi'ߠ>vh٭]sv[˥öhO~P{گ/ѻ,~vyj۩}`=zqj?}kϺA{Hc߿T{*uiӵk^|}ϓZ'k{{ڄک9R{yޜϓuۀ{ϗiߩzMzD:umRA=O=_{ ړ3ܩڕiѮ?EL-ڷۥ'h8EXm@;)o~^mztڻ;:?NҾK{iY='ڎWCs{vZn;'%sW6Q?鯋lw>Wm׹-UI"7Sݻ]~'[_'֧.Y(]Hiٕڵo;-]0Itatҗw-^֏n7cWl?ss ֋{wԮOZN#j|>C7 =]{so>7kI_'vW)Ss[.o>E{ak6G{&폻OԫwG~49u^?fOOўG{cթZ6ڥ&'+khztsfsvTw,>ؒcK?=H{RcҝҎ?ML]Kzʹ3honϛ}Ui6R?o]b[oΟ}ctcZO|v 9޽u5IƋOmKs{Ҧôk_j[%s}k]:O=g6h>OoZwx?ZǍ^Dkj.ݫ=U;x^j[z5EG=iyA:B[T[v&j/]0S{uyWkCOϖ߾OОi~okwڷo7Q{ .~oڇڤ{vv|`>{^=aM{hk/.ut^ tșC'N֞i=M{흫Ook6=C^t6Y>R{8etkGL3^{]Vc?4]L۾R{$Ns7wi>;H[-վevΗ@6qֽ@{('kǷiҭ}|פƮ'iR&'#n^t7=Ձ5;k_XjRiyڸ}zN1;|kOM{ϵ[ڧk_ݢݼvZo6E{ޥ| }yG?Ňj\{q_uKQ?OL~vigtv5WO/:`?wQ;-փ=\k9Qi+oZ=^ueh7mFkim[\Əi9Cz'[C>.yn2c u{nyο٭sΝ3Z[C,_UЪ:M|o!}(퓻>nnػ]sU~+-[]gO"]rvU{yzjäk>ܶsvJ_I7җ[iooӊϻ8p+jn\޶GKˁy=hiv߿WuonilԻyhf5SϟW=UOY>uuo,;UO>UVUY}y+UsVZqQ,UMkVe_ꝗ^=fݿgߧY۬\*ʞF_՟htnoU=Vziu]~ktT|{=+ߍ^WގFo_>T=UW:Ue}.WuM6\V5VeޛnYsU\6TxUU?GjH96V~ߪkӨח]U;]UE_ykt4k=6k=7Q?QeSuUuކF[UemkZ^rOjY|eKS+{ꝏǷ{˞f_߷Yϯw]T]eY[vTFجQ?:Un{ϲ^ʺ4:Ui:lzg[vuwVFuZv4:/UoO[vn/Zl﻽{\T]eCʺm({__zwޚޯzh~^EifkW7U_Zken리{]5z^uUQ{]sZQ~UfYQTu˞~YUv}7{~f>FYk(F^e^m/+UU{z/{:ntWf9wzy>Uo_y.j){;o=oU}~W~fϪkiz_3]յ_ZkT깫ޟ=O͚zjtݗ]߿ӬRu u^Vڮ~6k=7mow7.F糬zѯkֺotlt~k^z,{߿YN=eUZwu[]r_=̟5z>o:m6<6z^'|zo^f]7=eo^U_u>_en{{TwaY<7|4>uRvܿe5l e)s_ކfۿw;v]ry({~Fow}.n5USu=uUGկ^iϫu]vily){?ʮFޟWW4Yޏ=޿F]k~-yUk]USuWW]ez)hUIiy+.Ӳ?{T|FT]eo>eooYeyAרf::w^uUv]U(c{zW~~VU]oeQYW~;Ugu4k=6ksl/CZ{e۬ot]eb>h|7TUCWYQϩˮFc]oe7k}5eCb{]:^緪Ǫnu\<5zʮתMW5zY?׉ި_:^/Pu]FyLKT5)sf(.ײPUDz׌sTJ5Xkc{[h/{;5Quz^uܨg{}^|]UuX>ˮFYu.uڬw7~Wv]U|S?zz;}ޯmt~]?F=Uy=߷mz~eEsШe?)k^UV=)'ӧ~oюtoթ'9u3li_zɧOqv=s7mݖm{w[Y˞1b10f dؗ1cc(c0pɰ6a3=FȈ>#`Č22F+ƿ0d|1aA0F1>hc81ơwN!3r8c (#G3q ㌱O2>8qSqO3gZ>8o '1>hg8y'勌I N_˩/1Nc|13g8-g1aLc85t0f08ML2.`\ȸ-,Ʒea|q1ƥ12qc2.g\Xqja\ZƏ1gߌøSƭ3~XF'.Ɲ_33eǸAC.o3~3IS50ccPa 2ꅡ^ꅡ^ꅡ^μ gކ̸|g>3Ùpq/3a`g3wÙ3a(1b3Ùw`> `. `> `> `. `. `. `. O)4Wk5d0k0k0kp2c96sl0sl0sl0slp}2^\ S'zep2F\ Q(k5ep2&m U(k5ep2F\ Q&k5ep2F\ M*k5ep2>\ S(k5Zep2N\v)u:ep}2>\ W)u:ep2V\ U)5Zep2V\ S)u:ep2N_gt0^\ U,k5zep2N\ [-uep2^\ W+>k5Zep2v\ Y,k5ep2f\ [+ep2f\ Wƍ30g`={ 3pg`:fZffp-384php 3X4hp-3i`I& L40i`E띁M=6 X50j`G|6hbĢK&&M,4hģE&M,84hģC &L2ebĖ-[&Ll21ebĘc 31fbĘ1c&L2ebĚ1c&L31fbĖ5k&L31fbĘ1W&L\x2qeĕ)S&LL21ebĔ)S&L2cbď;&L2cčG&L1cď;&Lܘ11cbĊ+&VLX1bbĊ+&VLX1qbĉ#&FL̘1bċ/&3&VL̘x1bċ/&^Lx1bċ/&VL̘X11cbČ3&^Lw3L2č/&~L1qcČ3&vLܘ11cbĊ;&fL#<60c1c _h&~h|;l; w,Ypg;}ž= {,Yسgabgb/ -B}b?-C}bOoqC,ZX -Zxj«W ^-ZX0ka¬W N-Zpk«S n-ZXjaªU V-ZXjaªU V-ZXjZ^ha¬a v-Zصka®] v-ZصkZ- [~h³g -<[X0ma´g -[pm³g -<[xlZ-\[žha¸q -[0na¸q -[0n¹o -l[Xna¸q -[0na¶u -[ضmaºq -[pn¹q -[pna¸q -[<޷xjbn¼y {{ -[xoa½{¾} -[ط0oa`q oa¼}k{ -[طpo½{ -[po½{6m۸qoƽ{6mlضmcƶm6mlۘmcƸi6mLۘ1nCm۸qmƹm6mlضqmcưs6mۘ1ncƶm6mًmlmcƷo6m=:>=:N=z8péSN=z8péSN=?c}1cǸq>}X1cǸq>}SǸu>}8qǹs>}8qǹsǹs>}8qǹs>}8_}W>}W>}cǺ}>}1cǼy>}1cǼy>}1cǼw>}XqcǾ{>}1cgqǻ>}1s ǻw>}1cǸq>}XcǺu>}x1cǼy>}XcǺu>}1cǼm>}lcǶm>}lcǶm>}1cǸq>}L1cǶm>}lcǶi>}yLcǸo>}lǹq>}\8qǵs>}lcDzk>}L1cǴg;Οz`:tL:q0`:`8s~ 7o5k^x 5kVx 5i>x p4iN8 p4iN8 p`4h> p3i6l `3f6l 2g{r`4hπ8hk `+V[l `+V[lgc 0`,X[X +WW8 +WW8 `+Q?  0`(PSx 0)SO, 0`*TCL<x O< *UW\ p*x;zOW!B\ q*TS!B0a!Bx 0a!C8 qυX υs!\>2g!6Cl b3f!C  1b0`!C  1b0`!C  1b0`!C  1b0`u# Fa/b# F0a0bO",FXa1b#Fxp1b#,FXa1aÈ/eLj=/b`DǬ{`F{_F{W# F0a0`{#,F0a/^# F0a0`"E/_{"E؋a/^/_"E؋0a/`"E2e"EX0a-\o"Ex-[o"Ey"E0ww"Ex/]w"Ep.]w"lD؈a#FVľgE]{Va&J;v"D0a&L3f"D0a&L'N"D8p$I#F1c$F+1Vb1c#D+16bX1c$H#1Fb1c$H1>b|"E'1>b|scc؈1#G1Z̾m1{[m1{[m1{[m1{[c31fbĸ&L31fbXc'L̾c&L31fbĘٳbĸq&M71nbĸq&M71nbĸq&M71nbx'fٿb}+PC1b؉c'N31fbĘ1c&L#1Fb1c$H#1Fb'X7M1{S'I1{T7M1{S7M1{R̞'I1{R̞c*TW1b\Xc+TS1bLŘ1c*TS1bLŘهb}(W_1b|+f1c,X+jwg %Jp`,X[ %J+W_ |%J+Wޓ`+V[ l%J`+VW L%JpC|%J$9 %K0`,W_ |%J+W_ |%J;X},aK},aK},aK01a <&K1c W  &xLp`2b ,&XL`1b L&L`1b ,&XL`1b ,&XL`1bcʄǔ {[ .\&Lp1c>%L2e &l&c Y^%8Mp4i >|&xM4i ^&8Mp4i ^&8Mp4i !C&xM5k d>O& {d^G& 'N8q '8Np8q '8Np8q '8Np8q '8Npb71)S,N8q){d)S,XNq9q)S,XNW)SLN1b:o)vS XN7M7m)SM#S N1b8p)S Mb9r)~SM7o)nSܦ8Nq6m~b7s甽4p)S N1b8o)vS,M7q)vSXNb8n)~SM5k)6SlLb2d){d^b2h)ESMb4j)S8Lq0a)S&M W~2des[)c2 [\ _2|e+W _2\e8p+W _2|e*U W2\e0a*T S2-T c2leʰa+VǬ2|ees\>es\>/_ 2 f0/_ 2e/_+Z֊VbkXkX+Z1֊Vܵoxk[+Z֊VVܵ{k\+Z1~~~֊Vk_+Z׊Vk]+{Z+ZZZ׊Vb{k^+[׊Vb{k^+Zq׊VVbXl_+[1~֊VV,b=ﺎk؞ۢ);:HJ78p,`N~О&]&_%5ܣO<>y|'O.\>Y|d'O,>Y|dgO{SǞl>|d'O&L>9}2d'O&>}rϧ=u'O>>}ݓ'O|ޓ'O6>|2'Ol>|r'O.\>|'O.\>|rԽ=|'O{2d'ON>}2d'OV>}2d'O>|>|'O>|>|'O.\>9|㋿/^{݋o/^yq͋7/n^ܼyqK^ҫ^yqӋO/~^xzϋO/^yb΋G/v^ y1b͋C/~^yqы?/zbƋ/6^lxbċ#/6^lxqŋ/^^|xNj/>^\ybe/_6Ϳle/_6Ϳle/_v-l7/{~˞_=e/{~˞_=le/~iKs^v]ݳ]{^yk[s6Ϳmmok[smo3f;oy[wޚ֞u9oyk[{ޚ֞ư73of޼y˛73of̼Yyyf̛7+ov켙y3f̛漙y֠7;ofysɛ7'oN>G}z̼y3f̛ח޼?oy[wz֛sԛ7colzfқ7[oZ224Ѩ!,,,,,,,,,,nQWFuftsz3ڨ7ktcnQgFFFFFM5ekԘQ[FFFFFeFeFFFFFFFFNxxxxxxxxxxxfҚIg&xx88xxeқIo&tfrMZ3iFh{{{{~M5888888q88q8888ioҾI&||4nbqbqrM788181819198888888887q87q8u?{yyun333333w3w3w3w3w3w3w3w3w3w3w3w3w3wFF μͼͼͼͼͼ͌͌͌͌͌͌͌͜͜Z7s6s65566s6s6435435444444444354354444443543544333333s3s3s4s43\4kڬi͚6kӬo\\:75%gff9njfmfmfmfmfmfmfmfmfmfmfmfmlllּYffff ۇ}0a܇s>}0aڇ{>}xaǍqc~ЇC>|}pG>χCv> }χ?~>|LJ>>||tK=aʇ+V>|Xaȇ3f>|XhG>Ѥ&}4ЇC> }0aЇC~>|a·7> }aG>ZaG>aԇK> }0aЇS>,}Xa҇K>,}Xa҇K>,}Xa҇K>,}XaG>:aЇC> }0aЇC> }܊>>}|&Ӈ[>L}0aԇS>|a·/ _ |2ek_n/_l|e/_,|u?_W՟|9_f|YWg|y˗//_^|yeʗ//_^|y˗//_^/ž>}}W՟|:ա/K_,}Yeҗ/K_,}Yeҗ/K_~|ϗ/?_~|ϗ}ա/O_}9k_޿k_{οvk_;οvmk_W':mk_[ֿmk_׮}mk_׶mmk_jצ6mu _]¢,z, , ,zb/L,L,L,L,,,,,,<,,<,,,,,,,,,nm0000000YXtdѓM66666666..YgџEYgџEwYtgffffffffffffffffaeagagafaeњE{Y4gќEkYgўEkYfњE ZfњE{Y4gaoaoaoanњEsY4gaqaqaqaqaqaqaqaqaqaqaqaqќEsY\\\\\\\\\\\\\\\\gўE-Z8]8]8]8]\]X]]8]8]eљ0wn[x\\\X]\\\1cs?~ cޏ{?~cޏ{?~cޏ{?~ߏ?~1ӧ?:өNXc?,tS?ԏ?&,c?7>7.7.7N7N7>7>7>7>7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.777>7>7.7.7.7.7&767&767.7.7&767&767&767&767&7&77.77.7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7&7777777777777776ܴsMK7wM#vvvvvvvvvvvvvfvyYٙٙ5m״ݝ33k?jdddccee׳]vVvfv^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^vFvVvfvvv^v^v^v^v^v^v^v^v^v^vMYٹٹٙٙٙٙٙٙٙٙٙٙٙٙٙٙٙٙyyym׶]v}ٙٙٵm׶]vvvvvvvvvvvvvvvvvvvvvnv-ۙٙ5lװ]v kױ]v5ljjjjjwzٮgzٮg\\thӡK.tҡK.t-]:t``````ЧC7QЫC66&&&&&&&&&&&&66:ܚv0x0x0x0x0x0x0x0x0xwpxwpx0x0x0x0x0xw0w0wvvvpvvpvv0v0v0wpvpwvuuhӡMcc[[kk_g_gcccc>tvvuupupupupupuաW^>||||||||ٟ͟wٟ{ϽikL1^?.??&?.?.c?&?.?6c?&c?&c?&cz11'y'}}O;~'魯'|{}O'O̟?Q'Ox?~'Oܟ?~'Ox?~b'Ox?~'O?1~b'O|>|'=iIkOx?q~'O8?q~'OX?~b'O̟?q~'Ox?q~'=iIsO?IoOހ7'O?b 8ړ֞'{p'{p'o[p';p';p'=iIsO{. '=yNކm8yNކ᤹'oɛp& 'oɛp& 'o?&GM 7!&ބxoA- !&ރxBM 7!&ބ[x oCm 7!&ބxoBM 7!&ބxoBM 7!&ބ@..FV6A=X  އxA=888711111111110022111`0`0/0`/`/`/`/`/`/`/`/`/`/@k 8 8 8 8 8 8 8 8 6`1`1`0`0`2`2`1`1/0`2`201`1`101/111`1`1`1`1`1`1`0`0`2`2`0`01000000`0`1`0`1//1100000`0`01ŀŀŀŀŀŀŀŀŀŀŀŀŀgǀǀǀǀ@} X X X X Crw?83wՙ3Sg,Y:tfҙ3Kg,9:tә3Kg,:3tfЙ3Cg :3tљ3Ggvά9tf̙3Kgv9sf笁g C>C>Cm?C>ԐPCB?CBB?Cm?d ԐP;B?!!]C` ݃{0tjPA!/!/!/!/!+!3:jPA!?!?!?!?{0d(d(d(d(d(&%/ 5(d(d(d(d(d(d(ԠPBBBBBB y y 9 9 y y y y y y 9 9 9 9 9 y 9      'ԞP{B 'ԞP{B 'ԞPsB 5(ԠP{B 'd0d0d0d0d/d/d1d1d0d0d0d/d/d1d1d/0//1d0d0d0d0d0d0d0ԞP{B Y Y Y Y Y ݂LLLLLLL<c>c^c^cNcNcNcNcNcNc݌YYYYYYYYYY53X3cncncncncncncncncncncncncfcvcfcvc͌2͘ߘߘnnn1111111eb8f7f6f6f5f5f5f5f4f4f4f4f2f2f2f2f2f2f2f2f2f2f2f2Xc6c6c6c6c6c6c.c.c.c=ٌٌٌٌٌٌٌٌٌٌ1XcNcNcNcNcNcNcFcFc^cNcNcNcNc>c>c^c^c>c>c>c>c.c.cNcNc>c>c>c>c>c>c.c.c.c.c.c.c.c.c.c.c.c.cc6c6c&c&c=51XcFcFcFcFcFcFcFcFcFcF'a4ʄӄӄӄӄ̈́Մ$\\kkkkkkkkjljlhjhjiiiiiihjhjiieeccggcecececedddddddd____]]aa__________^`^`&&&&&&&&&&&%%%%ڙf^&z0eddbb n&f   F&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&,&&<&&<&,&,&,&,&,&,&,&,& & & & & &Zhebbbb``ddbbbbbbV&L& & &%%,&,&z00000000000000000000000?)))))))))))))))))))){))))frr򘲘rr22rre)k){.̥ ܥ|̥̥ڗ򖲖2j\oΥ:2222222222aܥܥza<<ܥܥ̥||Zj]YYYYYYYYYYYYYYYYYYYYYYYY}ڗj_Zs)g)g)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)W)Wqqqqqqq222222222222222222222222}˸ʸʸʸʸʸʸʸʸʸܡ;4ӻL222222mt-ӵL2222wfܙ;3ӹL2}-0ӼÌnjŌŌŌŌŌŌŌŌŌŌÌnjÌnjŌŌŌŌŌŌŌŌŌŌŌÌɌÌÌÌ͌ŌŌŌŌŌɌɌŌŌŌŌŌŌŌŌŌŌŌŌŌŌŌŌŌŌŌŌŌÌnjÌnjŌŌŌŌÌÌÌÌÌL3=0L3=̘X0L3=xxxxxxxxxxxxxxxxxx888841L 3-̴155c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4L3xx ^/^xz V/ f/^xz ^/^xz V/^tf/^0{a f/^Xzamzq^ܦE/x /_8p| ~/<_xp|/^0{ F/l^ؼsab{Ş/v}-_tb{Ş/6{ً^lbF/yˋ}^lbۼ&/6yɋ-^lbۼ&/6yɋM^lb&/6yɋv\lb-6/yѐ\4b;N/vzӋ^lbES.rq]tbf/6{׋^bf/6{ً^lbfMfsm6fsm6fs{˹vlnmn6lnmnvmnvmnvmnvm3䶛pnononvqnonononZkQEZkQn׹]zH~zI^GvZkGv云~nn云Fn云Fn云Fn云Fn云FN:333333D9[9[9[9[9[9[VZkE9c9_9_9_9_\r yyyy99˹˹yyyy99˹˹yyyyu g,g,g,g,g,g,g,g+g+g-g-g,g,g,+,+g+g+-g-g,g,+,+,g,g  `````````````````ЅB ](tpn]W (tpnB/ (r;`pVpW  &  WUU**c{````pwV wW*4дUpWpWh[^^^^^^^^^^^^^^^^^^^^^^^^^^\\``^^m  Wh_ada_a`````````^\bb^bb`X\^\^\\[][]:\yvە+oWޮ]2w/_9rvٕ+gWή]9rvٕ+gW-jUˮZvղ+{W]ٻjUˮZv+W,^xղ+W^yxe+W,^Yxeו+sWƮ|]yvٕ+gWή]uە+gWήl]ٺueU׮vչ+kW֮\]yuekWƮvն]5qWjUۮvߕ]jڕ+Wrxߕ+wW\^xe+W ^2xո]5+W&^yxe+W.<^92ye+W,^Yxe+W]rw+W]wԕ+WW\]y2ueU:wؕ+SWL]te]W 2ueԕ]5͕n JvJvJvJvJvJvJvJnJnJJ*)KJJJJJJJJJJ~J~J~J~J~J~JnJnJJJ~J~J~J~J~J~J~J~J~J~J~J~JvJJvJJ~J~J~J~J~J~J~J~J +5԰RJ +5԰RJ**************Y*Y**9+*9+*5԰RJJJJJJJJJJ-+5ԲRJ]+++++++++y+y+++++++++++y+y+++5dddd’RJJJJJJJJJJJJJJJJJJJJJJJJJ+dddԸRJ+5ԸRJ+5ԶÒÒ˒˒RJ +uԥRJ]**+&t؍c7n|1ucٍ[7׍_7n|uc֍_7u׍_7n1vc؍c7n1vc׍_7n1vc؍c7n1vӨFXvcڍk7nXvcڍk7nX1vc؍S7nxuӍO7nnlظqMn|4I7Miҍ/7^nxrˍ/7^nqӨFt[7m1scE7-iMnT1PP1PPQQPPqPqPqQqQPPPPPPPPP1QP1QP1QP1QP1QP1QPPPPPPPPPPPPP1QP1QPPPPPPqPqPqPqP1PP1PPqPqPqPqPqPqPqPqPqPqPqPqPqPqPiN9TLTLTLTLTLTLTSiN9TTTTTTTTTT\T\T\T\TLTLTLTLTLT:SqQqQL3TTTlTRJ+TRiK)TRJ+CCrU,U,U,UTUTU U U U URiHKKKKKKKKKKKKKKHJLNKKKKJLJLKKKKKKIKIKJJH)33TRiKNNNNNNƫxQ;bbҡJ*י{rUJ*ݪ|Ϊ|үJ* 0ff kFkFkFkFkFkFkFkFkFk6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k6k٬٬yy5֨ɚ͚ɚ͚ǚZj.k.k.k.k.k.k.k.k.k.k.k.k.k.k.kuv:VYYYYYYYYYYYYYYYYk]u55555555ZWk]uZWk]pppppppppppppoqnqqoqpppppoqoqpppppy555555555555555555555555555555555555555555555000000000hj 6666Qkkkkkkkk66666666666l6l666666666|6|6nɆцццццццццццццццˆˆˆˆˆˆˆF/666&&FF66.>llllllllxmxmܔv66666666666666666666666zikkkkkkkkkkkkjjjjjjjjjjjjjjhhlljjjjjjjjjjjjjjjiff^bfffecfdd__[[[[n65555555555555555555555hf__f6ٰذذذhfcccc#B<<,L,L<<<<<<<<<<<;>;.;.;.;.;.;.;.;.;.;.;.;.;.;.;촳ccЎՎюююN3;X4}۹o;mggvZii۝vZ1qq1111111111111111111111111111qq1qq1ޱݱݱޱ1111111111qq111iyyyyyyyyuutvuutvuuuuuuםvqqqqqqqqioxvvzzg<#ϝ;wly|;w|0` >{`m|p7~pw={p݃k={׃_|=z׃_|=z`iL=z0`Cе={0`Cе=tg={C>8|p݃w:б{={`ۃo=x{ۃo|=z׃_|=ze={0`փk={0`؃c={0`؃c={0`؃c={0`؃c={0`؃c={0`y{0=4ۃo=x{{{p݃w={0`ڃ{=x{SVUaDOO9}"#AQo}Jk;/_|/__Wp\gY|օgYpgYpgYpgYh[h\h[h\|o[5`-X BBス`. BBB߂`/.X `0 `/ `/- BBB<c,b0<c<c<c<c<g|g|h0h0kkkooonl0l0nl0nl0_wapqq_< 7h<c<c<c<c<w]p\ep\c<c``````pip*S?ir&h2&h2&c<&cЧ%h&er&er\&er\&er\&c|&ez%cX2%_Y%cX2%cX2%cX2%cX2%cX2|%_W|%_W|%_W|%_W|%_W|%_W|%_W|%_WL%[Ur\%WUr\%WT2L&&WUr\&&&_W|%[X%WU<%GQ2,%GSڗڗڗڗڗڗڗڗڗڗڗڗ%{^%s`2%{^%{^%{^%{^%{^%{^%s`2%s\2,&^%{^%{\2%s\2%s?\1WgYqVg[ibiaiaW{^W{^yxW[Vw\W{]qWw]qWw\1Ws_Wx-^x-^x-^X-fbx-^x-^x-^x-Vb-^x-^x-^8-nx-^x-Nⶸ-^K ⵴-^-^K-vb-vb-vb-v,6x,8,8,8,8,8,8,8,8,8,x,8,8,8,8,KKx,x,G\~55ݪg|6g\6is|6g|6g|6g{a|.>6e,6bsך<6c6Z֬5kZ֬5kZ֬5kVl5[Vl5WWs|5[Vl5[Vl5[UsZl5[UsL5gWl5[VL4Bl4Bl4C<4C3,4EL4C<4C<݌VlbZ[Z[f^Z:L5SX3l5[Vl5[V3|5_Us\5WUs\5WUs\5WUs\5WUs\5WUs\5WRl5SWs\5WUs\5WUs\5WUs\5WUs\5WUs\5WUs\5W&3\ Wp5\ Wp5\ S4l S4< O4< O4< Oe4<[sooooFFloFamXֆm8GFFFapappGFFFar&ar&ar&ar&ar&Gr.rxs.r4o4o4o4o4onnoo4o4o4o4o4o4onno{yazXayxyxyxyxayXazxzyxyxyxzrazazazayXxxy8ayXayXaxayXayXayXayXYeyY^xy^y9^y5ry^yy^yy^ezY^/^ey^yy^x9^ey^ewY^ezY^eyݲ]ee{^e{^{^e{^fev]fev]fev]^eu]^euY]VeuY]VeuY]Veu]FevY]VeuY]VeuY]Veuxxxxy]nx]vew]~w]~v9^w]~w]~w]~v]new]vew]vew]vew]vew]vew]vew]vew]vew]vev]^s\>es\.q\>eqY\eqY\c<c<8<c<sqxqx1x,8cX<cx;c;;;;8;;;c;======OSOSOSOSOSOSOS<.8=><>OScx=N8=Nc=Fc=6c=Fc<c=.<.<.<.<.<]=6c<6c=Fc<c<c;;c<c<stt<&c4t<>=8|>q8|>c8|>M|zcx|<>6cX{=cc1z|=[qz\=Wqxz<=_cz\=WqzL=ӦM?gO?,<c1x <Ϯ]?[lgޟ?;vӢEO=-zZ8x<cx,<xx<<c8x<q8x<=ܓx >tөO>}xxO#> 0 ) from[ ii_match[1:3], ] lapply( ii[ ii_match[1:3] ], function(x) to[x,] ) included <- to[ unlist( ii ), ] dim( included ) interval_intersection( included, interval_complement( from ) ) } intervals/man/Intervals_virtual_or_numeric-class.Rd0000644000176200001440000000122413642043060022362 0ustar liggesusers\name{Intervals_virtual_or_numeric-class} \docType{class} \alias{Intervals_virtual_or_numeric-class} \title{Class "Intervals_virtual_or_numeric"} \description{ A class union combining \code{"\linkS4class{Intervals_virtual}"} and \code{"\linkS4class{numeric}"}. Used by, e.g., \code{\link{distance_to_nearest}} and \code{\link{which_nearest}}. } \section{Methods}{ \describe{ \item{distance_to_nearest}{\code{signature(from = "Intervals_virtual_or_numeric", to = "Intervals_virtual_or_numeric")}} \item{interval_overlap}{\code{signature(from = "Intervals_virtual_or_numeric", to = "Intervals_virtual_or_numeric")}} } } \keyword{classes}intervals/man/expand-methods.Rd0000644000176200001440000000554013642043060016245 0ustar liggesusers\name{expand} \alias{expand} \alias{expand,Intervals_virtual-method} \alias{contract} \alias{contract,Intervals_virtual-method} \title{Expand or contract intervals} \description{ It is often useful to shrink or grow each interval in a set of intervals: to smooth over small, uninteresting gaps, or to address possible imprecision resulting from floating point arithmetic. The \code{expand} and \code{contract} methods implement this, using either absolute or relative difference. } \usage{ \S4method{expand}{Intervals_virtual}(x, delta = 0, type = c("absolute", "relative")) \S4method{contract}{Intervals_virtual}(x, delta = 0, type = c("absolute", "relative")) } \arguments{ \item{x}{ An \code{"Intervals"} or \code{"Intervals_full"} object.} \item{delta}{ A non-negative adjustement value. A vector is permitted, and its entries will be recycled if necessary. } \item{type}{ Should adjustment be based on relative or absolute difference. When \code{type == "relative"} intervals are expanded/contracted to include/exclude points for which a relative difference with respect to the nominal value is less than or equal to \code{delta}. (See the note below.) When \code{type == "absolute"}, absolute rather than relative difference is used, i.e., all intervals are expanded or contracted by the same amount. } } \value{ A single object of appropriate class, with endpoint positions adjusted as requested. Expansion returns an object with the same dimension as \code{x}; contraction may lead to the elimination of now-empty rows. } \note{ Here, the relative difference between \emph{x} and \emph{y} is |\emph{x} - \emph{y}|/max(|\emph{x}|, |\emph{y}|). } \examples{ # Using adjustment to remove small gaps x <- Intervals( c(1,10,100,8,50,200), type = "Z" ) close_intervals( contract( reduce( expand(x, 1) ), 1 ) ) # Finding points for which, as a result of possible floating point # error, intersection may be ambiguous. Whether y1 intersects y2[2,] # depends on precision. delta <- .Machine$double.eps^0.5 y1 <- Intervals( c( .5, 1 - delta / 2 ) ) y2 <- Intervals( c( .25, 1, .75, 2 ) ) # Nominal interval_intersection( y1, y2 ) # Inner limit inner <- interval_intersection( contract( y1, delta, "relative" ), contract( y2, delta, "relative" ) ) # Outer limit outer <- interval_intersection( expand( y1, delta, "relative" ), expand( y2, delta, "relative" ) ) # The ambiguous set, corresponding to points which may or may not be in # the intersection -- depending on numerical values for endpoints # which are, with respect to relative difference, indistinguishable from # the nominal values. interval_difference( outer, inner ) }intervals/man/close_intervals-methods.Rd0000644000176200001440000000456313642043060020166 0ustar liggesusers\name{close_intervals} \alias{close_intervals} \alias{close_intervals,Intervals_virtual-method} \alias{open_intervals} \alias{open_intervals,Intervals_virtual-method} \alias{adjust_closure} \alias{adjust_closure,Intervals-method} \alias{adjust_closure,Intervals_full-method} \title{Re-represent integer intervals with open or closed endpoints} \description{ Given an integer interval matrix, adjust endpoints so that all intervals have the requested closure status. } \usage{ \S4method{close_intervals}{Intervals_virtual}(x) \S4method{open_intervals}{Intervals_virtual}(x) \S4method{adjust_closure}{Intervals}(x, close_left = TRUE, close_right = TRUE) \S4method{adjust_closure}{Intervals_full}(x, close_left = TRUE, close_right = TRUE) } \arguments{ \item{x}{ An object of appropriate class, and for which \code{x@type == "Z"}. If \code{x@type == "R"}, an error is generated. } \item{close_left}{ Should the left endpoints be closed or open? } \item{close_right}{ Should the right endpoints be closed or open? } } \value{ An object of the same class as \code{x}, with endpoints adjusted as necessary and all \code{closed(x)} set to either \code{TRUE} or \code{FALSE}, as appropriate. } \note{ The \code{close_intervals} and \code{open_intervals} are for convenience, and just call \code{adjust_closure} with the approriate arguments. The \code{x} object may contain empty intervals, with at least one open endpoint, and still be valid. (Intervals are invalid if their second endpoint is less than their first.) The \code{close_intervals} method would, in such cases, create an invalid result; to prevent this, empty intervals are detected and removed, with a warning. This package does not make a distinction between closed and open infinite endpoints: an interval with an infinite endpoint extends to (plus or minus) infinity regardless of the closure state. For example, \code{\link{distance_to_nearest}} will return a \code{0} when \code{Inf} is compared to both \code{"[0, Inf)"} and \code{"[0, Inf]"}. } \examples{ x <- Intervals( c( 1, 5, 10, 1, 6, 20 ), closed = c( TRUE, FALSE ), type = "Z" ) # Empties are dropped close_intervals(x) adjust_closure(x, FALSE, TRUE) # Intervals_full y <- as( x, "Intervals_full" ) closed(y)[1,2] <- TRUE open_intervals(y) }intervals/man/empty-methods.Rd0000644000176200001440000000324613642043060016125 0ustar liggesusers\name{empty} \alias{empty} \alias{empty,Intervals-method} \alias{empty,Intervals_full-method} \title{Identify empty interval rows} \description{ A valid interval matrix may contain empty intervals: those with common endpoints, at least one of which is open. The \code{empty} method identifies these rows. } \usage{ \S4method{empty}{Intervals}(x) \S4method{empty}{Intervals_full}(x) } \arguments{ \item{x}{An \code{"Intervals"} or \code{"Intervals_full"} object.} } \details{ Intervals are deemed to be empty when their endpoints are equal and not both closed, or for \code{type == "Z"}, when their endpoints differ by 1 and both are open. The matrices \code{x} and \code{x[!empty(x),]} represent the same subset of the integers or the real line. } \value{ A boolean vector with length equal to \code{nrow(x)}. } \section{Warning}{ Exact equality (\code{==}) comparisons are used by \code{empty}. See the package vignette for a discussion of equality and floating point numbers. } \note{ Note that intervals of size 0 may not be empty over the reals, and intervals whose second endpoint is strictly greater than the first \emph{may} be empty over the integers, if both endpoints are open. } \seealso{ See \code{\link{size}} to compute the size of each interval in an object. } \examples{ z1 <- Intervals( cbind( 1, 1:3 ), type = "Z" ) z2 <- z1; closed(z2)[1] <- FALSE z3 <- z1; closed(z3) <- FALSE empty(z1) empty(z2) empty(z3) r1 <- z1; type(r1) <- "R" r2 <- z2; type(r2) <- "R" r3 <- z3; type(r3) <- "R" empty(r1) empty(r2) empty(r3) s1 <- Intervals_full( matrix( 1, 3, 2 ), type = "Z" ) closed(s1)[2,2] <- FALSE closed(s1)[3,] <- FALSE empty(s1) } intervals/man/reduce-methods.Rd0000644000176200001440000000234513642043060016235 0ustar liggesusers\name{reduce} \alias{reduce} \alias{reduce,Intervals_virtual-method} \title{Compactly re-represent the points in a set of intervals} \description{ In general, \code{"\linkS4class{Intervals}"} and \code{"\linkS4class{Intervals_full}"} objects may be redundant, the intervals they contain may be in arbitrary order, and they may contain non-informative intervals for which one or both endpoints are \code{NA}. The \code{reduce} function re-represents the underlying subsets of the integers or the real line in the unique, minimal form, removing intervals with \code{NA} endpoints (with warning). } \usage{ \S4method{reduce}{Intervals_virtual}( x, check_valid = TRUE ) } \arguments{ \item{x}{ An \code{"Intervals"} or \code{"Intervals_full"} object.} \item{check_valid}{ Should \code{\link{validObject}} be called before passing to compiled code? Also see \code{\link{interval_overlap}}. } } \value{ A single object of appropriate class, compactly representing the union of all intervals in \code{x}. All intervals in \code{reduce(x)} have numeric (i.e., not \code{NA}) endpoints. } \seealso{ See \code{\link{interval_union}}, which is really just concatenates its arguments and then calls \code{reduce}. }intervals/man/clusters-methods.Rd0000644000176200001440000000574513642043060016641 0ustar liggesusers\name{clusters} \alias{clusters} \alias{clusters,numeric-method} \alias{clusters,Intervals_virtual-method} \title{Identify clusters in a collection of positions or intervals} \description{ This function uses tools in the \pkg{intervals} package to quickly identify clusters -- contiguous collections of positions or intervals which are separated by no more than a given distance from their neighbors to either side. } \usage{ \S4method{clusters}{numeric}(x, w, which = FALSE, check_valid = TRUE) \S4method{clusters}{Intervals_virtual}(x, w, which = FALSE, check_valid = TRUE) } \arguments{ \item{x}{An appropriate object.} \item{w}{ Maximum permitted distance between a cluster member and its neighbors to either side. } \item{which}{ Should indices into the \code{x} object be returned instead of actual subsets? } \item{check_valid}{ Should \code{\link{validObject}} be called before passing to compiled code? Also see \code{\link{interval_overlap}} and \code{\link{reduce}}. } } \details{ A cluster is defined to be a maximal collection, with at least two members, of components of \code{x} which are separated by no more than \code{w}. Note that when \code{x} represents intervals, an interval must actually \emph{contain a point} at distance \code{w} or less from a neighboring interval to be assigned to the same cluster. If the ends of both intervals in question are open and exactly at distance \code{w}, they will not be deemed to be cluster co-members. See the example below. } \note{ Implementation is by a call to \code{\link{reduce}} followed by a call to \code{\link{interval_overlap}}. The \code{clusters} methods are included to illustrate the utility of the core functions in the \pkg{intervals} package, although they are also useful in their own right. } \value{ A list whose components are the clusters. Each component is thus a subset of \code{x}, or, if \code{which == TRUE}, a vector of indices into the \code{x} object. (The indices correspond to row numbers when \code{x} is of class \code{"Intervals_virtual"}.) } \examples{ # Numeric method w <- 20 x <- sample( 1000, 100 ) c1 <- clusters( x, w ) # Check results sapply( c1, function( x ) all( diff(x) <= w ) ) d1 <- diff( sort(x) ) all.equal( as.numeric( d1[ d1 <= w ] ), unlist( sapply( c1, diff ) ) ) # Intervals method, starting with a reduced object so we know that all # intervals are disjoint and sorted. B <- 100 left <- runif( B, 0, 1e4 ) right <- left + rexp( B, rate = 1/10 ) y <- reduce( Intervals( cbind( left, right ) ) ) gaps <- function(x) x[-1,1] - x[-nrow(x),2] hist( gaps(y), breaks = 30 ) w <- 200 c2 <- clusters( y, w ) head( c2 ) sapply( c2, function(x) all( gaps(x) <= w ) ) # Clusters and open end points. See "Details". z <- Intervals( matrix( 1:4, 2, 2, byrow = TRUE ), closed = c( TRUE, FALSE ) ) z clusters( z, 1 ) closed(z)[1] <- FALSE z clusters( z, 1 ) }intervals/man/interval_complement-methods.Rd0000644000176200001440000000203413642043060021030 0ustar liggesusers\name{interval_complement} \alias{interval_complement} \alias{interval_complement,Intervals_virtual-method} \title{Compute the complement of a set of intervals} \description{ Compute the complement of a set of intervals. } \usage{ \S4method{interval_complement}{Intervals_virtual}(x, check_valid = TRUE) } \arguments{ \item{x}{An \code{"Intervals"} or \code{"Intervals_full"} object.} \item{check_valid}{ Should \code{\link{validObject}} be called before passing to compiled code? Also see \code{\link{interval_overlap}}. } } \value{ An object of the same class as \code{x}, compactly representing the complement of the intervals described in \code{x}. } \note{ For objects of class \code{"Intervals"}, closure on \code{-Inf} or \code{Inf} endpoints is set to match that of all the intervals with finite endpoints. For objects of class \code{"Intervals_full"}, non-finite endpoints are left open (although in general, this package does not make a distinction between closed and open infinite endpoints). } intervals/man/c.Intervals.Rd0000644000176200001440000000333213642043060015512 0ustar liggesusers\name{c} \alias{c} \alias{c.Intervals} \alias{c.Intervals_full} \title{Combine different interval matrix objects} \description{ S3 methods for concatenating sets of intervals into a single set. } \usage{ \S3method{c}{Intervals}(...) \S3method{c}{Intervals_full}(...) } \arguments{ \item{...}{\code{"Intervals"} or \code{"Intervals_full"} objects.} } \details{ All objects are expected to have the same value in the \code{type} slot. If the \code{closed} slots differ for \code{"\linkS4class{Intervals}"} objects and \code{type == "Z"}, the objects will be adjusted to have \code{closed} values matching that of \code{x}; if \code{type == "R"}, however, then all objects must first be coerced to class \code{"\linkS4class{Intervals_full}"}, with a warning. This coercion also occurs when a mixture of object types is passed in. A \code{NULL} in any argument is ignored. } \value{ A single \code{"\linkS4class{Intervals}"} or \code{"\linkS4class{Intervals_full}"} object. Input objects are concatenated in their order of appearance in the the argument list. If any input argument is not a set of intervals, \code{list(...)} is returned instead. } \note{ These methods will be converted to S4 once the necessary dispatch on \code{...} is supported. } \examples{ f1 <- Intervals( 1:2, type = "Z" ) g1 <- open_intervals( f1 + 5 ) # Combining Intervals objects over Z may require closure adjustment c( f1, g1 ) f2 <- f1; g2 <- g1 type( f2 ) <- type( g2 ) <- "R" # Combine Intervals objects over R which have different closure requires # coercion h <- c( f2, g2 ) # Coercion for mixed combinations as well c( h, g2 + 10 ) \dontrun{ # Combining different types is not permitted c( h, g1 + 10 ) } }intervals/man/plot.Intervals.Rd0000644000176200001440000000711514446531412016257 0ustar liggesusers\name{plot.Intervals} \alias{plot} \alias{plot.Intervals} \alias{plot.Intervals_full} \alias{plot,Intervals,missing-method} \alias{plot,Intervals_full,missing-method} \alias{plot,Intervals,ANY-method} \alias{plot,Intervals_full,ANY-method} \title{Plotting methods for interval objects} \description{ S3 methods for plotting \code{"Intervals"} and \code{"Intervals_full"} objects. } \usage{ \S3method{plot}{Intervals}(x, y, ...) \S3method{plot}{Intervals_full}( x, y = NULL, axes = TRUE, xlab = "", ylab = "", xlim = NULL, ylim = NULL, col = "black", lwd = 1, cex = 1, use_points = TRUE, use_names = TRUE, names_cex = 1, ... ) \S4method{plot}{Intervals,missing}(x, y, ...) \S4method{plot}{Intervals_full,missing}(x, y, ...) \S4method{plot}{Intervals,ANY}(x, y, ...) \S4method{plot}{Intervals_full,ANY}(x, y, ...) } \arguments{ \item{x}{An \code{"Intervals"} or \code{"Intervals_full"} object.} \item{y}{ Optional vector of heights at which to plot intervals. If omitted, \code{y} will be automatically computed to generate a compact plot but with no overlap. } \item{axes}{As for \code{\link{plot.default}}.} \item{xlab}{As for \code{\link{plot.default}}.} \item{ylab}{As for \code{\link{plot.default}}.} \item{xlim}{As for \code{\link{plot.default}}.} \item{ylim}{ If not explicitly supplied, \code{ylim} is set to the maximum value required for intervals which are visible for the given \code{xlim}. } \item{col}{ Color used for segments and endpoint points and interiors. Recycled if necessary. } \item{lwd}{Line width for segments. See \code{\link{par}}.} \item{cex}{ Endpoint magnification. Only relevant if \code{use_points = TRUE}. See \code{\link{par}}. } \item{use_points}{Should points be plotted at interval endpoints?} \item{use_names}{ Should \code{rownames(x)} by used for segment labels in the plot? } \item{names_cex}{ Segment label magnification. Only relevant if \code{use_names = TRUE}. } \item{...}{Other arguments for \code{\link{plot.default}}.} } \details{ Intervals with \code{NA} for either endpoint are not plotted. Vertical placement is on the integers, beginning with 0. } \value{None.} \examples{ # Note plot symbol for empty interval in 'from'. from <- Intervals( matrix( c( 2, 8, 8, 9, 6, 9, 11, 12, 3, 3 ), ncol = 2, byrow = TRUE ), closed = c( FALSE, TRUE ), type = "Z" ) rownames(from) <- c("a","b","c","d","e") to <- Intervals( matrix( c( 2, 8, 3, 4, 5, 10 ), ncol = 2, byrow = TRUE ), closed = c( FALSE, TRUE ), type = "Z" ) rownames(to) <- c("x","y","z") empty(from) plot( c(from,to), col = rep(1:2, c(nrow(from), nrow(to))) ) legend("topright", c("from","to"), col=1:2, lwd=1) # More intervals. The maximal height shown is adapted to the plotting # window. B <- 10000 left <- runif( B, 0, 1e5 ) right <- left + rexp( B, rate = 1/10 ) x <- Intervals( cbind( left, right ) ) plot(x, use_points=FALSE) plot(x, use_points=FALSE, xlim = c(0, 500)) } intervals/man/interval_overlap-methods.Rd0000644000176200001440000000721613642043110020340 0ustar liggesusers\name{interval_overlap} \alias{interval_overlap} \alias{interval_overlap,Intervals_virtual_or_numeric,Intervals_virtual_or_numeric-method} \alias{interval_overlap,missing,ANY-method} \alias{interval_overlap,ANY,missing-method} \title{Assess overlap from one set of intervals to another} \description{ Assess overlap from intervals in one set to intervals in another set, and return the relevant indices. } \usage{ \S4method{interval_overlap}{Intervals_virtual_or_numeric,Intervals_virtual_or_numeric}(from, to, check_valid = TRUE) } \arguments{ \item{from}{ An \code{"Intervals"} or \code{"Intervals_full"} object, or a vector of class \code{"numeric"}. \emph{Note!} Prior to v. 0.11.1, this argument was called \code{target}. } \item{to}{ An \code{"Intervals"} or \code{"Intervals_full"} object, or a vector of class \code{"numeric"}. \emph{Note!} Prior to v. 0.11.1, this argument was called \code{query}. } \item{check_valid}{ Should \code{\link{validObject}} be called before passing to compiled code? This, among other things, verifies that endpoints are of data type \code{"numeric"} and the \code{closed} vector/matrix is appropriately sized and of the correct data type. (Compiled code does no further checking.) } } \details{ Intervals which meet at endpoints overlap only if both endpoints are closed. Intervals in \code{to} with \code{NA} endpoints are ignored, with a warning; in \code{from}, such intervals produce no matches. Intervals in either \code{to} or \code{from} which are actually empty have their endpoints set to \code{NA} before proceeding, with warning, and so do not generate matches. If eith \code{to} or \code{from} is a vector of class \code{"numeric"}, overlap will be assess for the corresponding set of points. } \value{ A list, with one element for each row/component of \code{from}. The elements are vectors of indices, indicating which \code{to} rows (or components, for the \code{"numeric"} method) overlap each interval in \code{from}. A list element of length 0 indicates no overlapping elements. } \note{ If you want real (\code{type == "R"}) intervals that overlap in a set of positive measure --- not just at endpoints --- set all endpoints to open (i.e., \code{close(from) <- FALSE; closed(to) <- FALSE}) first. This function is now just a wrapper for \code{\link{which_nearest}}. } \seealso{ See \code{\link{which_nearest}} for details on nearby as well as overlapping intervals in \code{to}. } \examples{ # Note that 'from' contains a valid but empty interval. to <- Intervals( matrix( c( 2, 8, 3, 4, 5, 10 ), ncol = 2, byrow = TRUE ), closed = c( TRUE, FALSE ), type = "Z" ) from <- Intervals( matrix( c( 2, 8, 8, 9, 6, 9, 11, 12, 3, 3 ), ncol = 2, byrow = TRUE ), closed = c( TRUE, FALSE ), type = "Z" ) rownames(from) <- letters[1:nrow(from)] empty(to) empty(from) interval_overlap(from, to) # Non-empty real intevals of size 0 can overlap other intervals. u <- to type(u) <- "R" v <- Intervals_full( rep(3,4) ) closed(v)[2,] <- FALSE v empty(v) size(v) interval_overlap(v, u) # Working with points interval_overlap( from, c( 2, 3, 6, NA ) ) } intervals/man/intervals-package.Rd0000644000176200001440000000573113642043060016727 0ustar liggesusers\name{intervals-package} \alias{intervals-package} \alias{intervals} \docType{package} \title{ Tools for working with points and intervals } \description{ Tools for working with and comparing sets of points and intervals. } \details{ Index: \describe{ \item{\code{\link{Intervals-class}}}{Classes \code{"Intervals"} and \code{"Intervals_full"}.} \item{\code{\link{Intervals_virtual-class}}}{Class \code{"Intervals_virtual"}.} \item{\code{\link{Intervals_virtual_or_numeric-class}}}{Class union \code{"Intervals_virtual_or_numeric"}.} \item{\code{\link[=as.matrix.Intervals_virtual]{as.matrix}}}{Coerce endpoints to a matrix.} \item{\code{\link[=c.Intervals]{c}}}{Concatenate different sets of intervals.} \item{\code{\link{close_intervals}}}{Re-represent integer intervals with open or closed endpoints.} \item{\code{\link{closed}}}{Accessor for \code{closed} slot: closure vector/matrix.} \item{\code{\link{clusters}}}{Identify clusters in a collection of positions or intervals.} \item{\code{\link{contract}}}{Contract sets.} \item{\code{\link{distance_to_nearest}}}{Compute distance to nearest position in a set of intervals.} \item{\code{\link{empty}}}{Identify empty interval rows.} \item{\code{\link{expand}}}{Expand sets.} \item{\code{\link{interval_complement}}}{Compute the complement of a set of intervals.} \item{\code{\link{interval_difference}}}{Compute set difference.} \item{\code{\link{interval_included}}}{Assess inclusion of one set of intervals with respect to another.} \item{\code{\link{interval_intersection}}}{Compute the intersection of one or more sets of intervals.} \item{\code{\link{interval_overlap}}}{Assess which query intervals overlap which targets.} \item{\code{\link{interval_union}}}{Compute the union of intervals in one or more interval matrices.} \item{\code{\link{is.na}}}{Identify interval rows with \code{NA} endpoints.} \item{\code{\link[=plot.Intervals]{plot}}}{S3 plotting methods for intervals objects.} \item{\code{\link{reduce}}}{Compactly re-represent the points in a set of intervals.} \item{\code{\link{sgd}}}{Yeast gene model sample data.} \item{\code{\link{size}}}{Compute interval sizes.} \item{\code{\link[=split.Intervals_virtual]{split}}}{Split an intervals object according to a factor.} \item{\code{\link{type}}}{Accessor for \code{type} slot: Z or R.} \item{\code{\link{which_nearest}}}{Identify nearest member(s) in a set of intervals.} } Further information is available in the following vignettes: \describe{ \item{\code{intervals_overview}}{Overview of the intervals package.} } } \author{ Richard Bourgon } \keyword{ package } \section{Acknowledgments}{ Thanks to Julien Gagneur, Simon Anders, and Wolfgang Huber for numerous helpful suggestions about the package content and code. } \seealso{ See the \pkg{genomeIntervals} package in Bioconductor, which extends the functionality of this package. } intervals/man/sgd.Rd0000644000176200001440000000530514406132433014103 0ustar liggesusers\name{sgd} \alias{sgd} \docType{data} \title{Yeast gene model sample data} \description{ This data set contains a data frame describing a subset of the chromosome feature data represented in Fall 2007 version of \file{saccharomyces_cerevisiae.gff}, available for download from the \emph{Saccharomyces} Genome Database (\url{https://www.yeastgenome.org:443/}). } \usage{data(sgd)} \format{ A data frame with 14080 observations on the following 8 variables. \describe{ \item{\code{SGDID}}{SGD feature ID.} \item{\code{type}}{ Only four feature types have been retatined: \code{"CDS"}, \code{"five_prime_UTR_intron"}, \code{"intron"}, and \code{"ORF"}. Note that \code{"ORF"} correspond to a whole gene while \code{"CDS"}, to an exon. \emph{S. cerevisae} does not, however, have many multi-exonic genes. } \item{\code{feature_name}}{A character vector} \item{\code{parent_feature_name}}{ The \code{feature_name} of the a larger element to which the current feature belongs. All retained \code{"CDS"} entries, for example, belong to an \code{"ORF"} entry. } \item{\code{chr}}{ The chromosome on which the feature occurs. } \item{\code{start}}{Feature start base.} \item{\code{stop}}{Feature stop base.} \item{\code{strand}}{Is the feature on the Watson or Crick strand?} } } \examples{ # An example to compute "promoters", defined to be the 500 bases # upstream from an ORF annotation, provided these bases don't intersect # another orf. See documentation for the sgd data set for more details # on the annotation set. use_chr <- "chr01" data( sgd ) sgd <- subset( sgd, chr == use_chr ) orf <- Intervals( subset( sgd, type == "ORF", c( "start", "stop" ) ), type = "Z" ) rownames( orf ) <- subset( sgd, type == "ORF" )$feature_name W <- subset( sgd, type == "ORF", "strand" ) == "W" promoters_W <- Intervals( cbind( orf[W,1] - 500, orf[W,1] - 1 ), type = "Z" ) promoters_W <- interval_intersection( promoters_W, interval_complement( orf ) ) # Many Watson-strand genes have another ORF upstream at a distance of # less than 500 bp hist( size( promoters_W ) ) # All CDS entries are completely within their corresponding ORF entry. cds_W <- Intervals( subset( sgd, type == "CDS" & strand == "W", c( "start", "stop" ) ), type = "Z" ) rownames( cds_W ) <- NULL interval_intersection( cds_W, interval_complement( orf[W,] ) ) } \keyword{datasets} intervals/man/as.matrix.Intervals.Rd0000644000176200001440000000111213642043060017170 0ustar liggesusers\name{as.matrix} \alias{as.matrix} \alias{as.matrix.Intervals_virtual} \alias{as.matrix,Intervals_virtual-method} \title{Extract matrix of endpoints} \description{ S3 and S4 methods for extracting the matrix of endpoints from S4 objects. } \usage{ \S3method{as.matrix}{Intervals_virtual}(x, ...) \S4method{as.matrix}{Intervals_virtual}(x, ...) } \arguments{ \item{x}{\code{"Intervals"} or \code{"Intervals_full"} objects.} \item{...}{Unused, but required by the S3 generic.} } \value{ A two-column matrix, equivalent to \code{x@.Data} or \code{as(x, "matrix")}. } intervals/man/size-methods.Rd0000644000176200001440000000302713642043060015736 0ustar liggesusers\name{size} \alias{size} \alias{size,Intervals-method} \alias{size,Intervals_full-method} \title{Compute interval sizes} \description{ Compute the size, in either Z or R as appropriate, for each interval in an interval matrix. } \usage{ \S4method{size}{Intervals}(x, as = type(x)) \S4method{size}{Intervals_full}(x, as = type(x)) } \arguments{ \item{x}{An \code{"Intervals"} or \code{"Intervals_full"} object.} \item{as}{ Should the intervals be thought of as in Z or R? This is usually determined automatically from the \code{type} slot, but because changing type may cause object copying, it is sometimes convenient to temporarily override this slot without actually resetting it. } } \details{ For type \code{"Z"} objects, counting measure; for type \code{"R"} objects, Lebesgue measure. For type \code{"Z"} objects, intervals of form (\emph{a},\emph{a}] and (\emph{a},\emph{a}) are both of length 0. } \value{ A numeric vector with length equal to \code{nrow(x)}. } \seealso{ See \code{\link{empty}} to identify empty intervals. Note that when \code{type(x) == "R"}, a size of 0 does not imply that an interval is empty. } \examples{ z1 <- Intervals( cbind( 1, 1:3 ), type = "Z" ) z2 <- z1; closed(z2)[1] <- FALSE z3 <- z1; closed(z3) <- FALSE size(z1) size(z2) size(z3) r1 <- z1; type(r1) <- "R" r2 <- z2; type(r2) <- "R" r3 <- z3; type(r3) <- "R" size(r1) size(r2) size(r3) s1 <- Intervals_full( matrix( 1, 3, 2 ), type = "Z" ) closed(s1)[2,2] <- FALSE closed(s1)[3,] <- FALSE size(s1) } intervals/man/interval_intersection-methods.Rd0000644000176200001440000000216613642043060021401 0ustar liggesusers\name{interval_intersection} \alias{interval_intersection} \alias{interval_intersection,Intervals_virtual-method} \alias{interval_intersection,missing-method} \title{Compute the intersection of one or more sets of intervals} \description{ Given one or more sets of intervals, produce a new set compactly representing points contained in at least one interval of each input object. } \usage{ \S4method{interval_intersection}{Intervals_virtual}(x, ..., check_valid = TRUE) \S4method{interval_intersection}{missing}(x, ..., check_valid = TRUE) } \arguments{ \item{x}{ An \code{"Intervals"} or \code{"Intervals_full"} object.} \item{\dots}{Additional objects of the same classes permitted for \code{x}.} \item{check_valid}{ Should \code{\link{validObject}} be called before passing to compiled code? Also see \code{\link{interval_overlap}}. } } \value{ A single object representing points contained in each of the objects supplied in the \code{x} and \code{...} arguments. } \seealso{ See \code{\link{interval_union}} and \code{\link{interval_complement}}, which are used to produce the results. }intervals/man/interval_difference-methods.Rd0000644000176200001440000000176713642043060020773 0ustar liggesusers\name{interval_difference} \alias{interval_difference} \alias{interval_difference,Intervals_virtual,Intervals_virtual-method} \title{Compute set difference} \description{ Compute the set difference between two objects. } \usage{ \S4method{interval_difference}{Intervals_virtual,Intervals_virtual}(x, y, check_valid = TRUE) } \arguments{ \item{x}{An \code{"Intervals"} or \code{"Intervals_full"} object.} \item{y}{ An \code{"Intervals"} or \code{"Intervals_full"} object, with a \code{type} slot matching that of \code{x}. } \item{check_valid}{ Should \code{\link{validObject}} be called on \code{x} and \code{y} before passing to compiled code? Also see \code{\link{interval_overlap}}. } } \value{ An object representing the subset of the integers or real line, as determined by \code{type(x)}, found in \code{x} but not in \code{y}. } \seealso{ These methods are just wrappers for \code{\link{interval_intersection}} and \code{\link{interval_complement}}. }intervals/man/split.Intervals_virtual.Rd0000644000176200001440000000175013642043060020173 0ustar liggesusers\name{split} \alias{split} \alias{split.Intervals_virtual} \alias{split,Intervals_virtual-method} \title{Split an intervals object according to a factor} \description{ S3 and S4 methods for splitting \code{"Intervals"} or \code{"Intervals_full"} objects. } \usage{ \S3method{split}{Intervals_virtual}(x, f, drop = FALSE, ...) \S4method{split}{Intervals_virtual}(x, f, drop = FALSE, ...) } \arguments{ \item{x}{ \code{"Intervals"} or \code{"Intervals_full"} objects. } \item{f}{ Passed to \code{\link{split.data.frame}}. } \item{drop}{ Passed to \code{\link{split.data.frame}}. } \item{...}{ Passed to \code{\link{split.data.frame}}. } } \value{ A list of objects of the same class as \code{x}, split by the levels of \code{f}. Until R 2.15, special handling was not required. Subsequent changes to the \pkg{base} package \code{\link{split}} function required an explicit method here, but code already provided by \code{\link{split.data.frame}} was sufficient. } intervals/man/distance_to_nearest-methods.Rd0000644000176200001440000000277413642043060021011 0ustar liggesusers\name{distance_to_nearest} \alias{distance_to_nearest} \alias{distance_to_nearest,Intervals_virtual_or_numeric,Intervals_virtual_or_numeric-method} \title{Compute distance to nearest position in a set of intervals} \description{ For each point or interval in the \code{from} argument, compute the distance to the nearest position in the \code{to} argument. } \usage{ \S4method{distance_to_nearest}{Intervals_virtual_or_numeric,Intervals_virtual_or_numeric}(from, to, check_valid = TRUE) } \arguments{ \item{from}{An object of appropriate type.} \item{to}{An object of appropriate type.} \item{check_valid}{ Should \code{\link{validObject}} be called before passing to compiled code? Also see \code{\link{interval_overlap}}. } } \value{ A vector of distances, with one entry per point or interval in \code{from}. Any intervals in \code{from} which are either empty (see \code{\link{empty}}) or have \code{NA} endpoints produce a \code{NA} result. } \note{ This function is now just a wrapper for \code{\link{which_nearest}}. } \seealso{ See \code{\link{which_nearest}}, which also returns indices for the interval or intervals (in case of ties) at the distance reported. } \examples{ # Point to interval to <- Intervals( c(0,5,3,Inf) ) from <- -5:10 plot( from, distance_to_nearest( from, to ), type = "l" ) segments( to[,1], 1, pmin(to[,2], par("usr")[2]), 1, col = "red" ) # Interval to interval from <- Intervals( c(-Inf,-Inf,3.5,-1,1,4) ) distance_to_nearest( from, to ) } intervals/DESCRIPTION0000644000176200001440000000103714447301252013772 0ustar liggesusersPackage: intervals Version: 0.15.4 Type: Package Title: Tools for Working with Points and Intervals Author: Richard Bourgon Maintainer: Edzer Pebesma Depends: R (>= 2.9.0) Imports: utils, graphics, methods Description: Tools for working with and comparing sets of points and intervals. License: Artistic-2.0 LazyLoad: yes URL: https://github.com/edzer/intervals NeedsCompilation: yes Packaged: 2023-06-27 10:00:08 UTC; edzer Repository: CRAN Date/Publication: 2023-06-29 13:10:02 UTC intervals/build/0000755000176200001440000000000014446531450013366 5ustar liggesusersintervals/build/vignette.rds0000644000176200001440000000033514446531450015726 0ustar liggesusersb```b`a@, $؀XX8Xf^IjQYbNq|~ZWJ*PץPG)ihDt0X D-0!aKM-F3% 5/$~hZ8S+`zP԰Aհe ,s\ܠL t7`~΢r=xAQ$Gs=ʕXVr7intervals/tests/0000755000176200001440000000000013642043060013421 5ustar liggesusersintervals/tests/intervals_test_code.R0000644000176200001440000000404413642043060017606 0ustar liggesuserslibrary( "intervals" ) ######## NAs and empty intervals u <- Intervals_full( as.numeric(NA), type = "Z" ) u <- c( u, u ) v <- Intervals_full( c(1,3,1,Inf), type = "Z" ) x <- Intervals( 1, closed = FALSE, type = "Z" ) # empty w <- c( x, u, v ) rownames(w) <- letters[ 1:nrow(w) ] x u v w is.na(w) empty(w) distance_to_nearest( u, v ) distance_to_nearest( w, v ) pts <- c( -Inf, Inf, NA, NaN, 0:2 ) distance_to_nearest( pts, v ) identical( distance_to_nearest( pts, v ), distance_to_nearest( pts, open_intervals( v ) ) ) interval_overlap( w, v ) reduce( w ) open_intervals(w) ######## Subset assignment u <- Intervals( 1:8, type = "Z" ) rownames( u ) <- letters[ 1:nrow(u) ] v <- Intervals( -4:-1, type = "Z" ) rownames( v ) <- letters[ nrow(u) + 1:nrow(v) ] w <- open_intervals(u) u v w # Basic z <- u; z[2:3,] <- v z # With names z <- u; z[c("a","d"),] <- v z # Missing row name result <- try( { z <- u; z[c("a","e"),] <- v }, TRUE ) result # Closure adjustment z <- w; z[2:3,] <- v z # Size mismatch error result <- try( { z <- w; z[2:3,] <- v[1,] }, TRUE ) result # Intervals_full method x <- Intervals_full( 1:6, c(TRUE,FALSE) ) rownames( x ) <- letters[ 1:nrow(x) ] y <- Intervals_full( -4:-1 ) x y # Missing value names z <- x; z[2,] <- y[1,] z # Missing x names z <- y; z[1,] <- x[1,] z # Type mismatch error result <- try( { z <- x; z[2:3,] <- v }, TRUE ) result # Coercion up type(v) <- "R" closed(v) <- c( FALSE, TRUE ) x v z <- x; z[2:3,] <- v z # With warning due to assignment z <- v; z[1,] <- x[3,] z # No row name copying with matrices A <- matrix( 0, 2, 2 ) rownames(A) <- c("1","2") z <- x; z[1:2,] <- A z ######## distance_to_nearest() behavior a <- Intervals_full( c(2,5), FALSE ) b <- Intervals_full( c(1,5,2,10), matrix(c(TRUE,FALSE,FALSE,TRUE),2,2) ) a b distance_to_nearest(a,b) type(a) <- "Z" type(b) <- "Z" distance_to_nearest(a,b) a <- as( a, "Intervals" ) b <- as( open_intervals( b ), "Intervals" ) a b distance_to_nearest(a,b) type(a) <- "R" type(b) <- "R" distance_to_nearest(a,b) intervals/src/0000755000176200001440000000000014446531450013056 5ustar liggesusersintervals/src/Endpoint.cpp0000644000176200001440000000422113642043060015331 0ustar liggesusers#include "Endpoint.h" //////// Ordering for tied endpoints /* We use two different tied endpoint orderings, one for reduce, and a different one for interval_overlap. These should be set by any code that uses sorting, so we initialize to -1, and have the sort method check this and throw an error if it's still found. Let Q/T be query/target, L/R be left/right, and O/C be open/closed. Our ordering, when pos is effectively tied, is then: QRO < TRO ... < TLC < QLC < QRC < TRC ... < TLO < QLO 0 1 2 3 4 5 6 7 The basic principals are, for similar closure, start targets before queries but finish them after queries. For abutting intervals, start new intervals before finishing old ones, unless one or both endpoints are open, in which case we should finish old intervals first. */ int Endpoint::state_array[2][2][2] = {{{0,0},{0,0}},{{0,0},{0,0}}}; //////// Endpoint methods Endpoint::Endpoint(int i, double p, bool q, bool l, bool c) { index = i; pos = p; query = q; left = l; closed = c; } void Endpoint::R_print() const { Rprintf( "index = %i, pos = %f (%s, %s, %s)\n", index, pos, query ? "query" : "target", left ? "left" : "right", closed ? "closed" : "open" ); } //////// Endpoints methods Endpoints::Endpoints( const double * pos, const int * closed, int n, bool query, bool is_full ) { /* The pos pointer should point to an n x 2 array of endpoints, and the closed pointer, to either an array of booleans of the same size (if full = true) or an array of two booleans (if full = false). Note that R uses int, not bool, for logicals. Intervals with R numeric NA in either slot are dropped. */ int i; this->reserve( 2 * n ); for ( i = 0; i < n; i++ ) { if ( ISNA( pos[i] ) || ISNA( pos[i+n] ) ) continue; this->push_back( Endpoint( i, pos[i], query, true, (bool) closed[ is_full ? i : 0 ] ) ); this->push_back( Endpoint( i, pos[i+n], query, false, (bool) closed[ is_full ? i+n : 1 ] ) ); } } void Endpoints::R_print() const { Endpoints::const_iterator it; for ( it = this->begin(); it < this->end(); it++ ) it->R_print(); } intervals/src/Endpoint.h0000644000176200001440000000266714446530677015034 0ustar liggesusers#ifndef ENDPOINT_H #define ENDPOINT_H #include #include #include //////// Endpoint class class Endpoint{ private: static int state_array[2][2][2]; inline int state() const { return( state_array[query][left][closed] ); } public: int index; double pos; bool query, left, closed; Endpoint(int i, double p, bool q, bool l, bool c); inline bool operator< (const Endpoint& other) const { /* We assume that the calling code is aware of the difficulty in assessing equality for floating point numbers and that values are passed in as exactly equal (in their floating point representation) if and only if exact equality is intended by the calling code. Given this assumption, there is no need for a relative difference approach here. */ if ( this->pos == other.pos ) return( this->state() < other.state() ); else return( this->pos < other.pos ); } static void set_state_array( const int new_array[2][2][2] ) { int i, j, k; for( i = 0; i < 2; i++ ) for( j = 0; j < 2; j++ ) for( k = 0; k < 2; k++ ) Endpoint::state_array[i][j][k] = new_array[i][j][k]; } void R_print() const; }; //////// Endpoints class class Endpoints : public std::vector< Endpoint > { public: Endpoints( const double * pos, const int * closed, int n, bool query, bool is_full ); void R_print() const; }; #endif // #ifndef ENDPOINT_H intervals/src/init.c0000644000176200001440000000122613642045602014162 0ustar liggesusers#include #include #include extern SEXP _which_nearest(SEXP qe, SEXP te, SEXP qc, SEXP tc, SEXP q_full, SEXP t_full); extern SEXP _plot_overlap(SEXP e, SEXP c, SEXP full); extern SEXP _reduce(SEXP e, SEXP c, SEXP full); #define CALLDEF(name, n) {#name, (DL_FUNC) &name, n} const static R_CallMethodDef R_CallDef[] = { CALLDEF(_which_nearest, 6), CALLDEF(_plot_overlap, 3), CALLDEF(_reduce, 3), {NULL, NULL, 0} }; void // attribute_visible // optional R_init_intervals(DllInfo *dll) { R_registerRoutines(dll, NULL, R_CallDef, NULL, NULL); R_useDynamicSymbols(dll, FALSE); R_forceSymbols(dll, TRUE); } intervals/src/plot_overlap.cpp0000644000176200001440000000403214446530677016301 0ustar liggesusers#include "Endpoint.h" #include #include #include #include #include /* What we require to prevent segfaults is the same as for interval_overlap.cpp. See details there. Everything should be checked by the calling code in R. For plotting without visual overlap, we do not care about endpoint closure, and we always open new intervals before closing old ones. When an interval opens, we assign it the minimal free interior option, if there is one; otherwise, we assign it the current count of open intervals. When an interval closes, if it does not have the current maximum y, its y gets added to the free_interior set. */ const int reduce_order[2][2][2] = { {{2,2},{1,1}}, // Target: {{ ), ] }, { (, [ }} {{0,0},{0,0}} // Query: {{ ), ] }, { (, [ }} }; extern "C" { SEXP _plot_overlap(SEXP e, SEXP c, SEXP full) { // Load data and sort int n = nrows(e); bool full_bool = *LOGICAL(full); Endpoints ep ( REAL(e), LOGICAL(c), n, false, full_bool ); // Set sorting order, then sort Endpoint::set_state_array( reduce_order ); sort( ep.begin(), ep.end() ); // Process int i; int active_count = 0; std::set free_interior; std::vector y (n); Endpoints::const_iterator it; // Initialize to NA for ( i = 0; i < n; i++ ) y[i] = R_NaInt; for ( it = ep.begin(); it < ep.end(); it++ ) { if ( it->left ) { // Opening an interval if ( free_interior.size() > 0 ) { y[ it->index ] = *free_interior.begin(); free_interior.erase( free_interior.begin() ); } else y[ it->index ] = active_count; active_count++; } else{ // Closing an interval active_count--; if ( y[ it->index ] < active_count + free_interior.size() ) free_interior.insert( y[ it->index ] ); } } // Prepare and return result. SEXP result; PROTECT( result = allocVector( INTSXP, n ) ); copy( y.begin(), y.end(), INTEGER( result ) ); UNPROTECT(1); return( result ); } } intervals/src/reduce.cpp0000644000176200001440000000462014446530677015045 0ustar liggesusers#include "Endpoint.h" #include #include #include #include /* What we require to prevent segfaults is the same as for interval_overlap.cpp. See details there. Everything should be checked by the calling code in R. */ const int reduce_order[2][2][2] = { {{2,4},{3,1}}, // Target: {{ ), ] }, { (, [ }} {{0,0},{0,0}} // Query: {{ ), ] }, { (, [ }} }; extern "C" { SEXP _reduce(SEXP e, SEXP c, SEXP full) { // Load data and sort int n = nrows(e); bool full_bool = *LOGICAL(full); Endpoints ep ( REAL(e), LOGICAL(c), n, false, full_bool ); // Set sorting order, then sort Endpoint::set_state_array( reduce_order ); sort( ep.begin(), ep.end() ); // Process int score = 0; std::vector start, end; std::vector start_c, end_c; Endpoints::const_iterator it; for ( it = ep.begin(); it < ep.end(); it++ ) { if ( score == 0 ) { if ( !it->left ) error("Internal error: unexpected endpoint type when score = 0."); start.push_back( it->pos ); if ( full_bool ) start_c.push_back( (int) it->closed ); } score += ( it->left ? +1 : -1 ); if ( score == 0 ) { if ( it->left ) error("Internal error: unexpected endpoint type when score = 0."); end.push_back( it->pos ); if ( full_bool ) end_c.push_back( (int) it->closed ); } } if ( start.size() != end.size() ) error("Internal error: mismatched start and end endpoint sets."); // Prepare and return result. SEXP result; PROTECT( result = allocVector( VECSXP, 2 ) ); SET_VECTOR_ELT( result, 0, allocMatrix( REALSXP, start.size(), 2 ) ); copy( start.begin(), start.end(), REAL( VECTOR_ELT( result, 0 ) ) ); copy( end.begin(), end.end(), REAL( VECTOR_ELT( result, 0 ) ) + start.size() ); if ( full_bool ) { SET_VECTOR_ELT( result, 1, allocMatrix( LGLSXP, start.size(), 2 ) ); copy( start_c.begin(), start_c.end(), LOGICAL( VECTOR_ELT( result, 1 ) ) ); copy( end_c.begin(), end_c.end(), LOGICAL( VECTOR_ELT( result, 1 ) ) + start.size() ); } else { SET_VECTOR_ELT( result, 1, allocVector( LGLSXP, 2 ) ); LOGICAL( VECTOR_ELT( result, 1 ) )[0] = LOGICAL(c)[0]; LOGICAL( VECTOR_ELT( result, 1 ) )[1] = LOGICAL(c)[1]; } UNPROTECT(1); return( result ); } } intervals/src/which_nearest.cpp0000644000176200001440000001620214446530677016420 0ustar liggesusers#include "Endpoint.h" #include #include #include #include #include #include /* #### What we require to prevent segfaults: 1. For Intervals_full objects, the endpoint and closure matrices must be of the same dimension, and have two columns each. For Intervals objects, we expect a closure vector of length 2. 2. Endpoints must be type double, and closure must be R logical, which ends up as int in C++. The validity function for the classes should verify both of these properties, so we do no additional checks here, i.e., we assume that we've been passed valid objects. #### To-do - Try hash_set instead of set, if it compiles OK. #### The "active" and "pending" sets - The q_active and t_active sets record indices of intervals which are currently open as we proceed through the list of points. - The q_pending set records the query interval (or intervals, in the case of ties) which has closed most recently to the left. If multiple target intervals come by before the next query interval is opened, each will need to be compare to the right endpoint of the intervals in q_pending. Once we open a new query interval, q_pending is cleared. - The t_pending set records indices of target intervals which have closed since the last time a query interval opened -- and distances to the left were therefor checked. Each of these target intervals needs to be checked against the next query interval to become active, as well as any additional query intervals that start at the same location. The t_pending set will be cleared when we get ready to add a new index to it but see that (i) a query interval has been opened since the last time we tried to add an index, and (ii) that pos has changed. the last closure of a query interval. When we open a new query interval, each of these target intervals needs to be compared to the new query interval's left endpoint. Once we do this -- and provided that the next query interval does not start in the same place -- then t_pending is cleared. */ const int overlap_order[2][2][2] = { {{1,5},{6,2}}, // Target: {{ ), ] }, { (, [ }} {{0,4},{7,3}} // Query: {{ ), ] }, { (, [ }} }; extern "C" { SEXP _which_nearest(SEXP qe, SEXP te, SEXP qc, SEXP tc, SEXP q_full, SEXP t_full) { // Load data, combine int qn = nrows(qe); int tn = nrows(te); Endpoints q ( REAL(qe), LOGICAL(qc), qn, true, *LOGICAL(q_full) ); Endpoints t ( REAL(te), LOGICAL(tc), tn, false, *LOGICAL(t_full) ); double* q_right = REAL(qe) + qn; double* t_right = REAL(te) + tn; q.insert( q.end(), t.begin(), t.end() ); // Set sorting order, then sort Endpoint::set_state_array( overlap_order ); sort(q.begin(), q.end()); // Process overlaps std::set q_active, t_active; std::vector< std::set > indices ( tn ); // For distance_to_nearest and which_nearest double q_check_pos = std::numeric_limits::infinity(); std::set q_pending, t_pending; std::vector delta ( tn ); std::vector< std::set > which ( tn ); double diff; // For looping Endpoints::const_iterator it; std::set::iterator set_it; int i; // Initialize delta for ( i = 0; i < tn; i++ ) delta[i] = std::numeric_limits::infinity(); for ( it = q.begin(); it < q.end(); it++ ) { if ( it->query ) { if ( it->left ) { // Query left for( set_it = t_active.begin(); set_it != t_active.end(); set_it++ ) { indices[ *set_it ].insert( it->index + 1 ); if ( delta[ *set_it ] > 0 ) which[ *set_it ].clear(); delta[ *set_it ] = 0; which[ *set_it ].insert( it->index + 1 ); } for( set_it = t_pending.begin(); set_it != t_pending.end(); set_it++ ) { diff = it->pos - t_right[ *set_it ]; if ( delta[ *set_it ] == diff ) which[ *set_it ].insert( it->index + 1 ); if ( delta[ *set_it ] > diff ) { which[ *set_it ].clear(); delta[ *set_it ] = diff; which[ *set_it ].insert( it->index + 1 ); } } q_active.insert( it->index ); q_check_pos = it->pos; q_pending.clear(); } else { // Query right q_active.erase( it->index ); // if ( q_right[ it->index ] > q_right[ *q_pending.begin() ] ) // q_pending.clear(); // EJP: trying to fix the clang-ASAN error, // EJP: replace these to lines with if (!q_pending.empty()) { if (it->index < length(qe) && *q_pending.begin() < length(qe) ) { if ( q_right[ it->index ] > q_right[ *q_pending.begin() ] ) q_pending.clear(); } } q_pending.insert( it->index ); } } else { if ( it->left ) { // Target left /* Note that some care is required here. It is possible that there is another interval at distance 0 to the left, but which, due to endpoint closure, does not actually overlap the target interval we are activating. In this case, q_active could be empty but we should still set delta to 0 for this target interval and add the index of the query interval immediately to the left to the which set. Similarly, if there are both overlapping and non-overlapping distance-zero query intervals, we want to return delta = 0 and the indices for both types. */ if ( q_active.size() > 0 ) { delta[ it->index ] = 0; for( set_it = q_active.begin(); set_it != q_active.end(); set_it++ ) { indices[ it->index ].insert( *set_it + 1 ); which[ it->index ].insert( *set_it + 1 ); } } for ( set_it = q_pending.begin(); set_it != q_pending.end(); set_it++ ) { diff = it->pos - q_right[ *set_it ]; if ( delta[ it->index ] == diff ) which[ it->index ].insert( *set_it + 1 ); if ( delta[ it->index ] > diff ) { which[ it->index ].clear(); delta[ it->index ] = diff; which[ it->index ].insert( *set_it + 1 ); } } t_active.insert( it->index ); } else { // Target right t_active.erase( it->index ); if ( it->pos > q_check_pos ) { t_pending.clear(); q_check_pos = std::numeric_limits::infinity(); } t_pending.insert( it->index ); } } } // Prepare and return result. SEXP result; PROTECT( result = allocVector( VECSXP, 3 ) ); SET_VECTOR_ELT( result, 0, allocVector( REALSXP, tn ) ); // delta SET_VECTOR_ELT( result, 1, allocVector( VECSXP, tn ) ); // which SET_VECTOR_ELT( result, 2, allocVector( VECSXP, tn ) ); // which_overlap copy( delta.begin(), delta.end(), REAL( VECTOR_ELT( result, 0 ) ) ); for( i = 0; i < tn; i++ ) { SET_VECTOR_ELT( VECTOR_ELT( result, 1 ), i, allocVector( INTSXP, which[i].size() ) ); copy( which[i].begin(), which[i].end(), INTEGER( VECTOR_ELT( VECTOR_ELT( result, 1 ), i ) ) ); SET_VECTOR_ELT( VECTOR_ELT( result, 2 ), i, allocVector( INTSXP, indices[i].size() ) ); copy( indices[i].begin(), indices[i].end(), INTEGER( VECTOR_ELT( VECTOR_ELT( result, 2 ), i ) ) ); } UNPROTECT(1); return( result ); } } intervals/vignettes/0000755000176200001440000000000014446531450014277 5ustar liggesusersintervals/vignettes/intervals_overview.Rnw0000644000176200001440000003421313642043060020717 0ustar liggesusers@ \documentclass[a4paper]{article} \usepackage{Sweave, amssymb, amsmath} \usepackage[ pdftex, pdfpagelabels, plainpages=false, pdfborder={0 0 0}, pdfstartview=FitH, bookmarks=true, bookmarksnumbered=true, bookmarksopen=true ] {hyperref} \title{Overview of the \emph{intervals} package} \author{Richard Bourgon} \date{06 June 2009} % The is for R CMD check, which finds it in spite of the "%", and also for % automatic creation of links in the HTML documentation for the package: % \VignetteIndexEntry{Overview of the intervals package.} \begin{document} %%%%%%%% Setup % Don't reform code \SweaveOpts{keep.source=TRUE, eps=FALSE} % Size for figures \setkeys{Gin}{width=.7\textwidth} % Fonts \DefineVerbatimEnvironment{Sinput}{Verbatim}{xleftmargin=1cm,fontshape=sl,fontsize=\small} \DefineVerbatimEnvironment{Soutput}{Verbatim}{xleftmargin=1cm,fontsize=\small} % Reduce characters per line in R output @ <>= options( width = 80 ) @ % Make title \maketitle % Typesetting commands \newcommand{\R}{\mathbb{R}} \newcommand{\Z}{\mathbb{Z}} %%%%%%%% TOC \tableofcontents \vspace{.25in} %%%%%%%% Main text \section{Introduction} The \emph{intervals} packages defines two S4 classes which represent collections of intervals over either the integers ($\Z$) or the real number line ($\R$). An instance of either class consists of a two-column matrix of endpoints, plus additional slots describing endpoint closure and whether the intervals are to be thought of as being over $\Z$ or $\R$. @ <>= library( intervals ) x <- Intervals( matrix( 1:6, ncol = 2 ) ) x x[2,2] <- NA x[3,1] <- 6 x @ Objects of class \texttt{Intervals} represent collections of intervals with common endpoint closure, e.g., all left-closed, right-open. More control over endpoints is permitted with the \texttt{Intervals\_full} class. (Both classes are derived from \texttt{Intervals\_virtual}, which is not intended for use by package users.) @ <>= y <- as( x, "Intervals_full" ) y <- c( y, Intervals_full( c(2,3,5,7) ) ) closed(y)[2:3,1] <- FALSE closed(y)[4,2] <- FALSE rownames(y) <- letters[1:5] y @ The \texttt{size} method gives measure --- counting measure over $\Z$ or Lebesgue measure over $\R$ --- for each interval represented in an object. The \texttt{empty} method identifies intervals that are in fact empty sets, which over $\R$ is not the same thing as having size 0. (Valid objects must have each right endpoint no less than the corresponding left endpoint. When one or both endpoints are open, however, valid intervals may be empty.) @ <>= size(x) empty(x) empty(y) @ \begin{figure}[!tb] \centering @ <>= plot( y ) @ \caption{The \texttt{Intervals\_full} object \texttt{y}, plotted with \texttt{plot(y)}. The second row contains an \texttt{NA} endpoint, and is not shown in the plot. The empty interval is plotted as a hollow point. By default, vertical placement avoids overlaps but is compact. } \label{fig:plotting} \end{figure} \section{Interpretation of objects} An \texttt{Intervals} or \texttt{Intervals\_full} object can be thought of in two different modes, each of which is useful in certain contexts: \begin{enumerate} \item As a (non-unique) representation of a subset of $\Z$ or $\R$. \item As a collection of (possibly overlapping) intervals, each of which has a meaningful identity. \end{enumerate} \subsection{As a subset of $\Z$ or $\R$} The \emph{intervals} package provides a number of basic tools for working in the first mode, where an object represents a subset of $\Z$ or $\R$ but the rows of the endpoint matrix do not have any external identity. Basic tools include \texttt{reduce}, which returns a sorted minimal representation equivalent to the original (dropping any intervals with \texttt{NA} endpoints), as well as \texttt{interval\_union}, \texttt{interval\_complement}, and \texttt{interval\_intersection}. @ <>= reduce( y ) interval_intersection( x, x + 2 ) interval_complement( x ) @ Note that combining \texttt{x} and its complement in order to compute a union requires mixing endpoint closure types; coercion to \texttt{Intervals\_full} is automatic. @ <>= interval_union( x, interval_complement( x ) ) @ The \texttt{distance\_to\_nearest} function treats its \texttt{to} argument in the first mode, as just a subset of $\Z$ or $\R$; it treats its \texttt{from} argument, however, in the second mode, returning one distance for every row of the \texttt{from} object. In the example below, we also look at performance for large data sets (less than one second on a 2 GHz Intel Core 2 Duo Macintosh, although the time shown below will likely differ). A histogram of \texttt{d} is given in Figure~\ref{fig:distance}. @ <>= B <- 100000 left <- runif( B, 0, 1e8 ) right <- left + rexp( B, rate = 1/10 ) v <- Intervals( cbind( left, right ) ) head( v ) mean( size( v ) ) dim( reduce( v ) ) system.time( d <- distance_to_nearest( sample( 1e8, B ), v ) ) @ \begin{figure}[!tb] \centering @ <>= hist( d, main = "Distance to nearest interval" ) @ \caption{Histogram of distances from a random set of points to the nearest point in \texttt{v}. There is also a \texttt{distance\_to\_nearest} method for comparing two sets of intervals.} \label{fig:distance} \end{figure} \subsection{As a set of meaningful, possibly overlapping intervals} In some applications, each row of an object's endpoint matrix has a meaningful identity, and particular points from $\Z$ or $\R$ may be found in more than one row. To support this mode, objects may be given row names, which are propagated through calculations when appropriate. The \texttt{c} methods simply stack objects (like \texttt{rbind}), preserving row names and retaining redundancy, if any. The \texttt{interval\_overlap} method works in this mode. In the next example we use it to identify rows of \texttt{v} which are at least partially redundant, i.e., which intersect at least one other row of \texttt{v}. All rows overlap themselves, so we look for rows that overlap at least two rows: @ <>= rownames(v) <- sprintf( "%06i", 1:nrow(v) ) io <- interval_overlap( v, v ) head( io, n = 3 ) n <- sapply( io, length ) sum( n > 1 ) k <- which.max( n ) io[ k ] v[ k, ] v[ io[[ k ]], ] @ The \texttt{which\_nearest} method also respects row identity, for both its \texttt{to} and \texttt{from} arguments. In addition to computing the distance from each \texttt{from} interval to the nearest point in \texttt{to}, it also returns the row index of the \texttt{to} interval (or intervals, in case of ties) located at the indicated distance. Another function which operates in this mode is \texttt{clusters}, which takes a set of points or intervals and identifies maximal groups which cluster together --- which are separated from one another by no more than a user-specified threshold. The following code is taken from the \texttt{clusters} documentation: @ <>= B <- 100 left <- runif( B, 0, 1e4 ) right <- left + rexp( B, rate = 1/10 ) y <- reduce( Intervals( cbind( left, right ) ) ) w <- 100 c2 <- clusters( y, w ) c2[1:3] @ \section{Floating point and intervals over $\R$} When \texttt{type == "R"}, interval endpoints are not truly in $\R$, but rather, in the subset which can be represented by floating point arithmetic. (For the moment, this is also true when \texttt{type == "Z"}. See Section~\ref{sec:representation}.) This limits the endpoint values which can be represented; more importantly, if computations are performed on interval endpoints, it means that floating point error can affect whether or not endpoints coincide, whether intervals which meet at or near endpoints overlap one another, etc. In spite of this potentially serious limitation, it is still often convenient to work with intervals with non-integer endpoints, including data where adjacent intervals exactly meet at a non-integer endpoint. To address this, the \emph{intervals} package takes the following approach: \begin{itemize} \item Floating point representations of interval endpoints are assumed to be \emph{exactly equal} (in the sense of \texttt{==} in R or C++) if and only if the user intends the real values corresponding to these representations to be exactly equal. \item For cases where floating point error and approximate equality are a concern, tools are provided to permit distinguishing between ambiguous and unambiguous intersection, union, etc. \end{itemize} In the next example, \texttt{y1} does not literally overlap \texttt{y2[2,]}, although R's \texttt{all.equal} function asserts that the gap between them is smaller than the default tolerance for equivalence up to floating point precision. @ <>= delta <- .Machine[[ "double.eps" ]]^0.5 y1 <- Intervals( c( .5, 1 - delta / 2 ) ) y2 <- Intervals( c( .25, 1, .75, 2 ) ) y1 y2 all.equal( y1[1,2], y2[2,1] ) interval_intersection( y1, y2 ) @ The \texttt{expand} and \texttt{contract} methods, used with \texttt{type = "relative"}, permit consideration of the maximal and minimal interval sets which are consistent with the nominal endpoints --- from the point of view of endpoint relative difference. The \texttt{contract} method, for example, contracts each interval in a collection so that the relative difference between original and contracted endpoints is equal to tolerance \texttt{delta}. Thus, if a relative difference less than or equal to \texttt{delta} is our criterion for approximate floating point equality, the contracted object has endpoints which are approximately equal to those of the original --- even though the contracted object is a proper subset of the original. The \texttt{expand} method is similar, but generates a proper superset. @ <>= contract( y1, delta, "relative" ) @ We compute two separate intersections which bound the nominal intersection: @ <>= inner <- interval_intersection( contract( y1, delta, "relative" ), contract( y2, delta, "relative" ) ) inner outer <- interval_intersection( expand( y1, delta, "relative" ), expand( y2, delta, "relative" ) ) outer @ Finally, we identify points which may or may not be in the intersection, depending on whether we make a conservative, literal, or anti-conservative interpretation of the nominal endpoints. @ <>= interval_difference( outer, inner ) @ The \texttt{expand} and \texttt{contract} methods have other uses as well. Here, we eliminate gaps of size 2 or smaller: @ <>= x <- Intervals( c(1,10,100,8,50,200), type = "Z" ) x w <- 2 close_intervals( contract( reduce( expand(x, w/2) ), w/2 ) ) @ \section{Notes on implementation} \subsection{Endpoint representation} \label{sec:representation} For the moment, interval endpoints are always stored using R's \emph{numeric} data type. Although this is wasteful from an memory and speed point of view, we do it for two reasons. First, use of R's \texttt{Inf} and \texttt{-Inf} --- not possible with the \emph{integer} type --- is very convenient when computing complements. Second, the range of integers which can be represented using the \emph{numeric} data type is considerably greater: @ <>= .Machine$integer.max numeric_max <- with( .Machine, double.base^double.digits ) options( digits = ceiling( log10( numeric_max ) ) ) numeric_max @ \subsection{Efficiency} All computations are accomplished by treating intervals as pairs of tagged endpoints, sorting these endpoints (along with their tags), and then making a single pass through the results. Computational complexity for set operations is therefore $O(n \log n)$, where input object $i$ contains $n_i$ rows and $n = \sum_i n_i$. The same sorting approach is also used for \texttt{interval\_overlap}, although if every interval in a query object of $m$ rows overlaps every intervals in a target object of $n$ rows, generating output alone must of necessity be $O(mn)$. Sorted endpoint vectors are not retained in memory. If one wishes to query a particular object over and over, repeated sorting would be inefficient; in practice so far, however, such repeated querying has not been needed. \subsection{Checking validity} The code behind \texttt{which\_nearest} and \texttt{reduce} (key methods in the \emph{intervals} package, which may be directly called by the user and are also used internally in numerous locations) is written in C++ for efficiency. The compiled code makes a number of assumptions about the \texttt{SEXP} objects passed in as arguments, but does not explicitly check these assumptions. Nonetheless, when the R wrappers for the compiled code are applied to \emph{valid} objects from the \texttt{Intervals} or \texttt{Intervals\_full} classes, all assumptions will always be met. This design decision was taken so that the requirements for individual objects and their contents could be gathered together in a single, natural location: the classes' \texttt{validity} functions. The \emph{intervals} package provides replacement methods --- e.g., \texttt{type} and \texttt{closed} --- which implement error checking and preserve object validity. R's implementation of S4 classes, however, leaves object data slots exposed to the user. As a consequence, a user can directly manipulate the data slots of a valid \texttt{Intervals} or \texttt{Intervals\_full} object in a way that invalidates the object, but does not generate any warning or error. To prevent invalid objects from being passed to compiled code --- and potentially generating segmentation faults or other problems --- all wrapper code in this package includes a \texttt{check\_valid} argument. This argument is set to \texttt{TRUE} by default, so that \texttt{validObject} is called on relevant objects before handing them off to the compiled code. For efficiency, users may choose to override this extra check if they are certain they have not manually assigned inappropriate content to objects' data slots. \section{Session information} @ <>= si <- as.character( toLatex( sessionInfo() ) ) cat( si[ -grep( "Locale", si ) ], sep = "\n" ) @ \end{document} intervals/NEWS0000644000176200001440000000505513642043060012763 0ustar liggesusers ******** VERSION 0.13.3 ******** BUG FIXES - The S3 plot() method for class Intervals was ignoring the y argument. (The method for class Intervals_full did, however, use the argument properly.) This has been fixed. ******** VERSION 0.13.2 ******** BUG FIXES - The initialization method for the Intervals class threw errors when empty objects were created. This has been fixed. ******** VERSION 0.13.0 ******** NEW FEATURES - New interval_included methods, similar to interval_overlap, but requiring full inclusion. ******** VERSION 0.12.3 ******** NEW FEATURES - S3 as.matrix methods for Intervals and Intervals_full objects. ******** VERSION 0.12.0 ******** NEW FEATURES - S3 plot methods for Intervals and Intervals_full objects. ******** VERSION 0.11.1 ******** SIGNIFICANT USER-VISIBLE CHANGES - The interval_overlap and distance_to_nearest methods are now just wrappers for which_nearest. Because of this, the argument names for interval_overlap, have been changed from 'target' and 'query' to 'from' and 'to', respectively, in order to match the other two functions. Argument order is the same as before, but functions which call arguments by name and use the old names will now generate an (informative) error message. BUG FIXES - The C++ code for interval_overlap correctly handles all varieties of endpoint closure, but does not handle cases like (0,2) vs. (1,3) over Z. (These intervals do not overlap, even though the right endpoint of the first interval is nominally after the left endpoint of the second interval.) This should have been handled by the R wrapper -- by applying close_intervals before passing on to compiled code -- but this step had previously been omitted. This is now fixed. NEW FEATURES - The interval_overlap, which_nearest, and distance_to_nearest methods now all accept a numeric vector in both the 'from' and 'to' arguments. IMPROVEMENTS - The distance_to_nearest methods were previously based on old code using approxfun(). They now work of the same algorithm used for interval_overlap and which_nearest. This algorithm simultaneously generates all three types of information: identity of overlaps and nearest neighbors, as well as distance to nearest neighbors. ******** VERSION 0.11.0 ******** NEW FEATURES - Adding a NEWS file! - Added which_nearest methods, as a complement to distance_to_nearest. The C++ code previously used for interval_overlap calculations was augmented to provide this functionality.intervals/R/0000755000176200001440000000000014446531405012470 5ustar liggesusersintervals/R/head-methods.R0000644000176200001440000000103413642043060015143 0ustar liggesuserssetGeneric( "head", function( x, ... ) standardGeneric( "head" ) ) setMethod( "head", signature( "Intervals_virtual" ), function( x, n = 6 ) { if ( nrow(x) > 0 ) x[ 1:min( n, nrow(x) ), ] else x } ) setGeneric( "tail", function( x, ... ) standardGeneric( "tail" ) ) setMethod( "tail", signature( "Intervals_virtual" ), function( x, n = 6 ) { if ( nrow(x) > 0 ) x[ max( 1, nrow(x) - n + 1 ):nrow(x), ] else x } ) intervals/R/interval_included-methods.R0000644000176200001440000000541313642043060017742 0ustar liggesuserssetGeneric( "interval_included", def = function( from, to, ... ) standardGeneric( "interval_included" ) ) setMethod( "interval_included", signature( "Intervals", "Intervals" ), function( from, to, check_valid = TRUE ) { # For inclusion, both endpoints from a "to" interval should be # inside an particular "from" interval. Because interval_overlap # treats numerics as double-closed single-point intervals, some care # is required with open endpoints for "to": these should be # considered to overlap closed OR open "from" endpoints with which # they coincide. We handle this, over R, by adjusting the "from" # closure. if ( any( empty(to) ) ) { warning( "Some empty 'to' intervals encountered. Setting to NA...", call. = FALSE ) to[ empty(to), ] <- NA } if ( type(to) == "Z" ) to <- close_intervals(to) else closed( from ) <- closed( from ) | !closed( to ) mapply( intersect, interval_overlap( from, to[,1], check_valid ), interval_overlap( from, to[,2], check_valid ) ) } ) setMethod( "interval_included", signature( "Intervals_full", "Intervals_full" ), function( from, to, check_valid = TRUE ) { # For the same reasons given above, open endpoints in "to" need to # be re-checked against open endpoints in "from", since equality of # the endpoint value is consistent with inclusion. if ( any( empty(to) ) ) { warning( "Some empty 'to' intervals encountered. Setting to NA...", call. = FALSE ) to[ empty(to), ] <- NA } if ( type(to) == "Z" ) to <- close_intervals(to) # Left side left <- interval_overlap( from, to[,1], check_valid ) to[ closed(to)[,1], 1 ] <- NA left_open <- interval_overlap( from[,1], to[,1], check_valid ) # Right side right <- interval_overlap( from, to[,2], check_valid ) to[ closed(to)[,2], 2 ] <- NA right_open <- interval_overlap( from[,2], to[,2], check_valid ) mapply( function(l,lo,r,ro) intersect( c(l,lo), c(r,ro) ), left, left_open, right, right_open ) } ) # Note: there isn't much sense in asking what's included in a set of # points. Further, overlap and inclusion are the same when "from" contains # actual intervals while "to" contains point. For these reasons, there are no # methods for class "numeric." intervals/R/interval_intersection-methods.R0000644000176200001440000000274613642043060020667 0ustar liggesuserssetGeneric( "interval_intersection", def = function( x, ... ) standardGeneric( "interval_intersection" ) ) setMethod( "interval_intersection", signature( "Intervals_virtual" ), function( x, ..., check_valid = TRUE ) { args <- c( list(x), list(...) ) if ( check_valid ) for ( y in args ) validObject( y ) complements <- lapply( args, interval_complement, check_valid = FALSE ) interval_complement( do.call( interval_union, c( complements, list( check_valid = FALSE ) ) ) ) } ) setMethod( "interval_intersection", signature( "missing" ), function( x, ..., check_valid = TRUE ) { # Permitting do.call use with named lists, since do.call will put # elements whose names are not "x" into the ... argument. Stripping # names, however, puts arguments in place positionally. args <- list(...) names( args ) <- NULL if ( length( args ) == 0 ) return ( NULL ) else return( do.call( interval_intersection, c( args, list( check_valid = check_valid ) ) ) ) } ) intervals/R/type-methods.R0000644000176200001440000000141113642043060015222 0ustar liggesuserssetGeneric( "type", function(x) standardGeneric( "type" ) ) setMethod( "type", signature( "Intervals_virtual" ), function( x ) x@type ) setGeneric( "type<-", function( x, value ) standardGeneric( "type<-" ) ) setReplaceMethod( "type", "Intervals_virtual", function( x, value ) { if ( length( value ) != 1 || !( value %in% c( "Z", "R" ) ) ) stop( "The 'type' slot should be 'Z' or 'R'." ) if ( value == "Z" && !all( x@.Data %% 1 == 0, na.rm = TRUE ) ) stop( "Non-integer-valued endpoints not permitted for type 'Z'." ) x@type <- value return(x) } ) intervals/R/split.R0000644000176200001440000000036113642043060013736 0ustar liggesusers# Cause split.data.frame to be used. See "Methods for S3 Generic Functions" in # help for "Methods", for guidance and examples. split.Intervals_virtual <- split.data.frame setMethod( "split", "Intervals_virtual", split.Intervals_virtual ) intervals/R/reduce-methods.R0000644000176200001440000000174014406126671015526 0ustar liggesuserssetGeneric( "reduce", def = function( x, ... ) standardGeneric( "reduce" ) ) setMethod( "reduce", signature( "Intervals_virtual" ), function( x, check_valid = TRUE ) { if ( check_valid ) validObject( x ) has_na <- is.na( x[,1] ) | is.na( x[,2] ) if ( any( has_na ) ) { warning( "Intervals with NA endpoints removed.", call. = FALSE ) x <- x[ !has_na, ] } if ( any( empty( x ) ) ) x <- x[ !empty(x), ] # In order to collapse over abutting intervals over Z if ( type(x) == "Z" ) x <- open_intervals( x ) result <- .Call( `_reduce`, x@.Data, closed( x ), is( x, "Intervals_full" ) ) new( class(x), result[[1]], closed = result[[2]], type = type(x) ) } ) intervals/R/size-methods.R0000644000176200001440000000245113642043060015220 0ustar liggesusers# For R, size is Lebesgue measure, so closure is irrelevant. Note that we don't # use the close_intervals method here, which is important since this method # requires empty, and empty currently uses size. We need to avoid circular # dependency. setGeneric( "size", def = function( x, ... ) standardGeneric( "size" ) ) setMethod( "size", signature( "Intervals" ), function( x, as = type(x) ) { result <- x[,2] - x[,1] if ( as == "Z" ) { ties <- x[,2] == x[,1] ties[ is.na( ties ) ] <- FALSE result[ ties ] <- ifelse( all( closed(x) ), 1, 0 ) result[ !ties ] <- result[ !ties ] + sum( closed(x) ) - 1 # NAs just stay NA } return( result ) } ) setMethod( "size", signature( "Intervals_full" ), function( x, as = type(x) ) { result <- x[,2] - x[,1] if ( as == "Z" ) { ties <- x[,2] == x[,1] ties[ is.na( ties ) ] <- FALSE rs <- rowSums( closed(x) ) result[ ties ] <- ifelse( rs[ ties ] == 2, 1, 0 ) result[ !ties ] <- result[ !ties ] + rs[ !ties ] - 1 } return( result ) } ) intervals/R/expand-methods.R0000644000176200001440000000422213642043060015523 0ustar liggesusers# Not exported adjust <- function( x, delta, type, direction = 1 ) { signs <- rep( c( direction, -direction ), c( nrow(x), nrow(x) ) ) if ( nrow(x) %% length(delta) != 0 ) warning( "Length of 'delta' does not evenly divide number of intervals.", call. = FALSE ) delta <- rep( delta, length = nrow( x ) ) switch( type, relative = x * ( 1 - delta ) ^ ( sign(x) * signs ), absolute = x - delta * signs ) } setGeneric( "expand", def = function( x, ... ) standardGeneric( "expand" ) ) setMethod( "expand", signature( "Intervals_virtual" ), function( x, delta = 0, type = c( "absolute", "relative" ) ) { if ( any( delta < 0, na.rm = TRUE ) ) stop( "The 'delta' argument should not contain negative values." ) type = match.arg( type ) if ( type(x) == "Z" && ( type == "relative" || any( delta %% 1 != 0, na.rm = TRUE ) ) ) stop( "Only absolute, integer-valued expansion permitted for type 'Z'." ) x@.Data <- adjust( x, delta, type, 1 ) return( x ) } ) setGeneric( "contract", def = function( x, ... ) standardGeneric( "contract" ) ) setMethod( "contract", signature( "Intervals_virtual" ), function( x, delta = 0, type = c( "absolute", "relative" ) ) { if ( any( delta < 0, na.rm = TRUE ) ) stop( "The 'delta' argument should not contain negative values." ) type = match.arg( type ) if ( type(x) == "Z" && ( type == "relative" || any( delta %% 1 != 0, na.rm = TRUE ) ) ) stop( "Only absolute, integer-valued contraction permitted for type 'Z'." ) x@.Data <- adjust( x, delta, type, -1 ) drop <- x[,1] > x[,2] | empty(x) if ( any( drop ) ) { warning( "Some empty intervals eliminated.", call. = FALSE ) x <- x[ !drop, ] } return( x ) } ) intervals/R/closed-methods.R0000644000176200001440000000303513642043060015516 0ustar liggesuserssetGeneric( "closed", function(x) standardGeneric( "closed" ) ) setMethod( "closed", signature( "Intervals_virtual" ), function( x ) x@closed ) setGeneric( "closed<-", function( x, value ) standardGeneric( "closed<-" ) ) setReplaceMethod( "closed", "Intervals", function( x, value ) { if ( !is.vector( value ) || !( length( value ) %in% 1:2 ) ) stop( "The 'closed' argument should be a vector of length 1 or 2." ) x@closed[ 1:2 ] <- value return(x) } ) setReplaceMethod( "closed", "Intervals_full", function( x, value ) { error_msg <- "The 'value' argument should be a matrix, or a vector of length 1 or 2." if ( is.vector( value ) ) { if ( length( value ) > 2 ) stop( error_msg ) value <- matrix( if ( nrow( x ) == 0 ) logical() else value, nrow( x ), 2, byrow = TRUE ) } if ( !is.matrix( value ) || nrow( value ) != nrow( x ) || ncol( value ) != 2 ) stop( error_msg ) x@closed <- value return(x) } ) intervals/R/clusters.R0000644000176200001440000000271113642043060014450 0ustar liggesuserssetGeneric( "clusters", function( x, ... ) standardGeneric( "clusters" ) ) setMethod( "clusters", signature( "numeric" ), function( x, w, which = FALSE, check_valid = TRUE ) { if ( is.integer(x) ) x <- as.numeric(x) regions <- reduce( Intervals( cbind( x, x + w ), type = "R" ), check_valid ) clusters <- interval_overlap( regions, x, check_valid ) clusters <- clusters[ sapply( clusters, length ) > 1 ] if ( which ) return( clusters ) else return( lapply( clusters, function(i) x[i] ) ) } ) setMethod( "clusters", signature( "Intervals_virtual" ), function( x, w, which = FALSE, check_valid = TRUE ) { if ( type(x) == "Z" && ( w %% 1 != 0 ) ) stop( "Non-integer 'w' supplied for intervals over Z.", call. = FALSE ) regions <- reduce( new( class(x), cbind( x[,1], x[,2] + w ), closed = closed(x), type = type(x) ), check_valid ) clusters <- interval_overlap( regions, x, check_valid ) clusters <- clusters[ sapply( clusters, length ) > 1 ] if ( which ) return( clusters ) else return( lapply( clusters, function(i) x[i,] ) ) } ) intervals/R/plot.Intervals_virtual.R0000644000176200001440000000457214406126657017322 0ustar liggesusersplot.Intervals_full <- function( x, y = NULL, axes = TRUE, xlab = "", ylab = "", xlim = NULL, ylim = NULL, col = "black", lwd = 1, cex = 1, use_points = TRUE, use_names = TRUE, names_cex = 1, ... ) { # Subset first, for efficiency, and so that the maximal y plotted is # appropriate for the region shown. if ( any( is.na( x ) ) ) x <- x[ !is.na(x), ] if ( is.null(xlim) ) xlim <- range( x@.Data ) else x <- x[ x[,2] >= xlim[1] & x[,1] <= xlim[2], ] if ( is.null(y) ) y <- .Call( `_plot_overlap`, x@.Data, closed(x), is( x, "Intervals_full" ) ) if ( is.null(ylim) ) ylim <- c( 0, max( y ) ) plot( 0, 0, type = "n", xlim = xlim, ylim = ylim, axes = FALSE, xlab = xlab, ylab = ylab, ... ) # Careful with non-finite endpoints, which segments() ignores. segments( pmax( x[,1], par("usr")[1] ), y, pmin( x[,2], par("usr")[2] ), y, col = col, lwd = lwd ) if ( use_points ) { # Careful with points... adjust <- ( x[,1] == x[,2] ) & !closed(x)[,1] closed(x)[ adjust, 2 ] <- FALSE points( x@.Data, rep( y, 2 ), pch = 21, cex = cex, col = col, bg = ifelse( closed(x), col, "white" ) ) } if ( use_names && !is.null( rownames(x) ) ) { mids <- ( x[,1] + x[,2] ) / 2 text( mids, y, rownames( x ), pos = 3, offset = .5, cex = names_cex, xpd = NA ) } if ( axes ) axis( 1 ) } plot.Intervals <- function( x, y = NULL, ... ) { plot( as( x, "Intervals_full" ), y, ... ) } setMethod( "plot", c( "Intervals", "missing" ), function( x, y, ... ) plot.Intervals( x, ... ) ) setMethod( "plot", c( "Intervals", "ANY" ), function( x, y, ... ) plot.Intervals( x, y, ... ) ) setMethod( "plot", c( "Intervals_full", "missing" ), function( x, y, ... ) plot.Intervals_full( x, ... ) ) setMethod( "plot", c( "Intervals_full", "ANY" ), function( x, y, ... ) plot.Intervals_full( x, y, ... ) ) intervals/R/interval_difference-methods.R0000644000176200001440000000117613642043060020247 0ustar liggesuserssetGeneric( "interval_difference", def = function(x, y, ...) standardGeneric( "interval_difference" ) ) setMethod( "interval_difference", signature( "Intervals_virtual", "Intervals_virtual" ), function(x, y, check_valid = TRUE) { if ( check_valid ) { validObject( x ) validObject( y ) } interval_intersection( x, interval_complement( y, check_valid = FALSE ), check_valid = FALSE ) } ) intervals/R/Intervals-class.R0000644000176200001440000003015713642045000015657 0ustar liggesusers# We define two classes for two-column interval endpoint matrices. The basic class # has a two-element boolean vector indicating whether endpoints are closed or # not. The full class caries a matrix with one boolean per endpoint, permitting # full control. ######## Class definitions #### Virtual # (R 2.6.2) If I add the "VIRTUAL" tag to the representation, I am not able to # extend this class! I believe this arises because I am already extending a base # class, but I am not sure. This tag would be more appropriate, but I leave it # off... setClass( "Intervals_virtual", representation( type = "character" ), prototype( matrix( 0, 0, 2 ), type = "R" ), contains = "matrix", validity = function( object ) { # Check main matrix if ( !is.double( object@.Data ) || ncol( object@.Data ) != 2 ) return( "The 'Intervals' classes are based on two-column, numeric matrices." ) # Check 'type' string if ( length( object@type ) != 1 || !( object@type %in% c( "Z", "R" ) ) ) return( "The 'type' slot should be 'Z' or 'R'." ) # For type 'Z', check for integral endpoints if ( object@type == "Z" && !all( object@.Data[ is.finite( object@.Data ) ] %% 1 == 0 ) ) return( "Non-integer-valued endpoints not permitted for type 'Z'." ) # Check for valid intervals if ( any( object@.Data[,2] < object@.Data[,1], na.rm = TRUE ) ) return( "One or more intervals with second endpoint before first." ) return( TRUE ) } ) setMethod( "initialize", signature( "Intervals_virtual" ), function( .Object, .Data, ... ) { if ( missing( .Data ) ) callNextMethod( .Object, ... ) else { if ( is.data.frame( .Data ) ) .Data <- as.matrix( .Data ) if ( !is.matrix( .Data ) ) .Data <- matrix( .Data, ncol = 2 ) if ( is.integer( .Data ) ) { # warning( "Converting endpoints from 'integer' to 'numeric' data type. See class documentation.", call. = FALSE ) .Data <- matrix( as.numeric( .Data ), nrow( .Data ), ncol( .Data ) ) } callNextMethod( .Object, .Data, ... ) } } ) #### Intervals # Common endpoint closure state for all intervals setClass( "Intervals", representation( closed = "logical" ), prototype( closed = c( TRUE, TRUE ) ), contains = "Intervals_virtual", validity = function( object ) { # Check 'closed' slot if ( length( object@closed ) != 2 || any( is.na( object@closed ) ) ) return( "The 'closed' slot should be a logical of length 2. NA values are not permitted." ) return( TRUE ) } ) setMethod( "initialize", signature( "Intervals" ), function( .Object, .Data, closed, ... ) { if ( missing( .Data ) ) callNextMethod( .Object, ... ) else { if ( missing( closed ) ) callNextMethod( .Object, .Data, ... ) else { if ( length( closed ) == 1 ) closed <- c( closed, closed ) callNextMethod( .Object, .Data, closed = closed, ... ) } } } ) #### Intervals_full # Full control of endpoint closure. Note that if the 'closed' slot is omitted, # we use an 'initialize' method to create an appropriately sized matrix of TRUE # values. We also permit vector input, with recycling, for the 'closed' slot. setClass( "Intervals_full", representation( closed = "matrix" ), prototype( closed = matrix( TRUE, 0, 2 ) ), contains = "Intervals_virtual", validity = function( object ) { # Check 'closed' slot if ( !is.logical( object@closed ) || any( dim( object@.Data ) != dim( object@closed )) || any( is.na( object@closed ) ) ) return( "The 'closed' slot should be a logical matrix with the same dimensions as the main endpoints matrix. NA values are not permitted." ) return( TRUE ) } ) setMethod( "initialize", signature( "Intervals_full" ), function( .Object, .Data, closed, ... ) { if ( missing( .Data ) ) callNextMethod( .Object, ... ) else { if ( !is.matrix( .Data ) ) .Data <- matrix( .Data, ncol = 2 ) if ( missing( closed ) ) closed <- matrix( TRUE, nrow( .Data ), 2 ) if ( is.vector( closed ) ) { if ( length( closed ) > 2 ) stop( "The 'closed' argument should be a matrix, or a vector of length 1 or 2." ) closed <- matrix( if ( nrow( .Data ) == 0 ) logical() else closed, nrow( .Data ), 2, byrow = TRUE ) } callNextMethod( .Object, .Data, closed = closed, ... ) } } ) ######## Constructor functions Intervals <- function( ... ) new( "Intervals", ... ) Intervals_full <- function( ... ) new( "Intervals_full", ... ) ######## Subsetting setMethod( "[", signature( "Intervals" ), function( x, i, j, ..., drop ) { if ( missing(i) ) i <- rep( TRUE, nrow(x) ) if ( missing(j) ) { # Preserve class. Note that both [i,] and [i] syntax subset rows. if ( any( is.na( i ) ) ) warning( "NA indices encountered.", call. = FALSE ) x@.Data <- x@.Data[i,,drop=FALSE] return( x ) } else return( x@.Data[i,j] ) } ) # Note: row name handling for matices is completely inadequate for our purposes # here. Lots of obviously desirable behavior (like setting rownames(x)[i] when x # doesn't yet have rownames) tends to produce errors. setMethod( "[<-", signature( x = "Intervals", i = "ANY", j = "missing", value = "Intervals_virtual" ), function( x, i, j, value ) { #### Error checking if ( type(x) != type(value) ) stop( "Types do not match (Z vs. R)." ) if ( is.character(i) ) i <- match( i, rownames( x ) ) if ( any( is.na( i ) ) ) stop( "Cannot assign to NA indices or row names which do not exist." ) n <- length( (1:nrow(x))[i] ) if ( n != nrow( value ) ) stop( "Replacement object is of the wrong size." ) #### Coerce up? coerce_x <- FALSE if ( is( value, "Intervals_full" ) ) coerce_x <- TRUE else { matches <- all( closed(x) == closed(value) ) if ( !matches ) { if ( type(x) == "Z" ) value <- adjust_closure( value, closed(x)[1], closed(x)[2] ) else coerce_x <- TRUE } } if ( coerce_x ) { warning( "Coercion to 'Intervals_full' required.", call. = FALSE ) x <- as( x, "Intervals_full" ) x[ i, ] <- value return(x) } #### Data x@.Data[i,] <- value@.Data #### Rownames has_names_x <- !is.null( rownames(x) ) has_names_value <- !is.null( rownames(value) ) if ( has_names_x ) { if ( has_names_value ) rownames(x)[i] <- rownames(value) else rownames(x)[i] <- "" } else { if ( has_names_value ) { rownames(x) <- rep( "", nrow(x) ) rownames(x)[i] <- rownames(value) } } return(x) } ) setMethod( "[", signature( "Intervals_full" ), function( x, i, j, ..., drop ) { if ( missing(i) ) i <- rep( TRUE, nrow(x) ) if ( missing(j) ) { # Preserve class. Note that both [i,] and [i] syntax subset rows. if ( is.character(i) ) i <- match( i, rownames( x ) ) if ( any( is.na( i ) ) ) warning( "NA indices encountered.", call. = FALSE ) x@.Data <- x@.Data[i,,drop=FALSE] x@closed <- x@closed[i,,drop=FALSE] # We may have NAs in closed if present in i, if any(is.na(i)) == TRUE x@closed[ is.na(x@closed) ] <- TRUE return( x ) } else return( x@.Data[i,j] ) } ) setMethod( "[<-", signature( x = "Intervals_full", i = "ANY", j = "missing", value = "Intervals_virtual" ), function( x, i, j, value ) { #### Error checking if ( type(x) != type(value) ) stop( "Types do not match (Z vs. R)." ) if ( is.character(i) ) i <- match( i, rownames( x ) ) if ( any( is.na( i ) ) ) stop( "Cannot assign to NA indices or row names which do not exist." ) n <- length( (1:nrow(x))[i] ) if ( n != nrow( value ) ) stop( "Replacement object is of the wrong size." ) #### Data x@.Data[i,] <- value@.Data if ( is( value, "Intervals" ) ) x@closed[i,] <- matrix( value@closed, n, 2, byrow = TRUE ) else x@closed[i,] <- value@closed #### Rownames has_names_x <- !is.null( rownames(x) ) has_names_value <- !is.null( rownames(value) ) if ( has_names_x ) { if ( has_names_value ) rownames(x)[i] <- rownames(value) else rownames(x)[i] <- "" } else { if ( has_names_value ) { rownames(x) <- rep( "", nrow(x) ) rownames(x)[i] <- rownames(value) } } return(x) } ) ######## Coercion setMethod( "coerce", signature( from = "Intervals", to = "Intervals_full" ), function( from, to, strict ) { new( "Intervals_full", from@.Data, type = type( from ), closed = cbind( rep( closed(from)[1], nrow( from ) ), rep( closed(from)[2], nrow( from ) ) ) ) } ) setMethod( "coerce", signature( from = "Intervals_full", to = "Intervals" ), function( from, to, strict ) { if ( nrow( from ) == 0 ) new_closed <- rep( TRUE, 2 ) else new_closed <- closed( from )[1,] if ( !all( t( closed( from ) ) == new_closed ) ) stop( "Intervals do not all have the same endpoint closure." ) new( "Intervals", from@.Data, type = type( from ), closed = new_closed ) } ) setMethod( "coerce", signature( from = "Intervals_virtual", to = "character" ), function( from, to, strict ) { if ( nrow( from ) == 0 ) return( character() ) else { cl <- closed( from ) # So we only write main code once if ( is( from, "Intervals" ) ) cl <- matrix( cl, nrow(from), 2, byrow = TRUE ) result <- paste( ifelse( cl[,1], "[", "(" ), from[,1], ", ", from[,2], ifelse( cl[,2], "]", ")" ), sep = "" ) names( result ) <- rownames( from ) return( result ) } } ) ######## Union setClassUnion( "Intervals_virtual_or_numeric", c( "Intervals_virtual", "numeric" ) ) intervals/R/interval_union-methods.R0000644000176200001440000000201413642043060017275 0ustar liggesuserssetGeneric( "interval_union", def = function( x, ... ) standardGeneric( "interval_union" ) ) setMethod( "interval_union", signature( "Intervals_virtual" ), function( x, ..., check_valid = TRUE ) { reduce( c( x, ... ), check_valid ) } ) setMethod( "interval_union", signature( "missing" ), function( x, ..., check_valid = TRUE ) { # Permitting do.call use with named lists, since do.call will put # elements whose names are not "x" into the ... argument. Stripping # names, however, puts arguments in place positionally. args <- list(...) names( args ) <- NULL if ( length( args ) == 0 ) return ( NULL ) else return( do.call( interval_union, c( args, list( check_valid = check_valid ) ) ) ) } ) intervals/R/interval_complement-methods.R0000644000176200001440000000365514406127206020330 0ustar liggesuserssetGeneric( "interval_complement", def = function(x, ...) standardGeneric( "interval_complement" ) ) setMethod( "interval_complement", signature( "Intervals_virtual" ), function(x, check_valid = TRUE) { # Sort and clean up x <- reduce( x, check_valid ) # When the data type of the endpoints matrix is integer, # complications arise from maximum/minimum representable integer # values. For Intervals objects, the complement will often # need to include the minimal/maximal represenable integer, but one # or both endpoints may be open. In such cases, we adjust close with # a warning. For the moment, we force numeric endpoints throughout # the package. endpoints <- if ( nrow(x) == 0 ) matrix( c( -Inf, Inf ), 1 ) else rbind( if ( is.finite( x[1,1] ) ) c( -Inf, x[1,1] ) else NULL, cbind( x[-nrow(x),2], x[-1,1] ), if ( is.finite( x[nrow(x),2] ) ) c( x[nrow(x),2], Inf ) else NULL ) closed <- if ( inherits(x, "Intervals") ) # Note that we ignore closure for non-finite endpoints. !closed(x)[2:1] else if ( nrow(x) == 0 ) TRUE else !rbind( if ( is.finite( x[1,1] ) ) c( TRUE, closed(x)[1,1] ) else NULL, cbind( closed(x)[-nrow(x),2], closed(x)[-1,1] ), if ( is.finite( x[nrow(x),2] ) ) c( closed(x)[nrow(x),2], TRUE ) else NULL ) new( class(x), endpoints, type = type(x), closed = closed ) } ) intervals/R/which_nearest-methods.R0000644000176200001440000000671314406126714017105 0ustar liggesuserssetGeneric( "which_nearest", def = function( from, to, ... ) standardGeneric( "which_nearest" ) ) setMethod( "which_nearest", signature( "Intervals_virtual", "Intervals_virtual" ), function( from, to, check_valid = TRUE ) { if ( check_valid && !( validObject(to) && validObject(from) ) ) stop( "The 'to' and/or 'from' objects are invalid." ) if ( type(to) != type(from) ) stop( "Both 'to' and 'from' should have the same type." ) if ( any( empty( to ), na.rm = TRUE ) ) { warning( "Some empty 'to' intervals encountered. Setting to NA...", call. = FALSE ) to[ empty(to), ] <- NA } if ( any( empty( from ), na.rm = TRUE ) ) { warning( "Some empty 'from' intervals encountered. Setting to NA...", call. = FALSE ) from[ empty(from), ] <- NA } if( type(to) == "Z" ) { to <- close_intervals( to ) from <- close_intervals( from ) } result <- .Call( `_which_nearest`, to@.Data, from@.Data, closed(to), closed(from), class(to) == "Intervals_full", class(from) == "Intervals_full" ) result[[1]][ !is.finite( result[[1]] ) ] <- as.numeric( NA ) data.frame( distance_to_nearest = result[[1]], which_nearest = I( result[[2]] ), which_overlap = I( result[[3]] ), row.names = rownames( from ) ) } ) setMethod( "which_nearest", signature( "numeric", "Intervals_virtual" ), function( from, to, check_valid = TRUE ) { if ( type( to ) == "Z" ) { non_int <- ( from %% 1 != 0 ) if ( any( non_int, na.rm = TRUE ) ) stop( "The 'to' object is of type 'Z'. Non-integral values are not permitted in 'from'.", call. = FALSE ) } which_nearest( new( class( to ), cbind( from, from ), closed = TRUE, type = type( to ) ), to, check_valid = check_valid ) } ) setMethod( "which_nearest", signature( "Intervals_virtual", "numeric" ), function( from, to, check_valid = TRUE ) { if ( type( from ) == "Z" ) { non_int <- ( to %% 1 != 0 ) if ( any( non_int, na.rm = TRUE ) ) stop( "The 'from' object is of type 'Z'. Non-integral values are not permitted in 'to'.", call. = FALSE ) } which_nearest( from, new( class( from ), cbind( to, to ), closed = TRUE, type = type( from ) ), check_valid = check_valid ) } ) setMethod( "which_nearest", signature( "numeric", "numeric" ), function( from, to, check_valid = TRUE ) { which_nearest( Intervals( cbind( from, from ) ), Intervals( cbind( to, to ) ), check_valid = FALSE ) } ) intervals/R/show-methods.R0000644000176200001440000000140213642043060015221 0ustar liggesuserssetMethod( "show", signature( "Intervals_virtual" ), function( object ) { cat( "Object of class ", class( object ), "\n", nrow( object ), " interval", ifelse( nrow( object ) == 1, "", "s" ), " over ", type(object), ":\n", sep = "" ) ints <- as( object, "character") if ( !is.null( rownames( object ) ) ) { fmt <- sprintf( "%%%is", max( nchar( rownames( object ) ) ) ) ints <- paste( sprintf( fmt, rownames( object ) ), ints ) } cat( ints, sep = "\n" ) } ) intervals/R/close_intervals-methods.R0000644000176200001440000000436713642043060017452 0ustar liggesuserssetGeneric( "close_intervals", def = function(x) standardGeneric( "close_intervals" ) ) setMethod( "close_intervals", signature( "Intervals_virtual" ), function( x ) adjust_closure( x, close_left = TRUE, close_right = TRUE ) ) setGeneric( "open_intervals", def = function(x) standardGeneric( "open_intervals" ) ) setMethod( "open_intervals", signature( "Intervals_virtual" ), function( x ) adjust_closure( x, close_left = FALSE, close_right = FALSE ) ) setGeneric( "adjust_closure", def = function(x, ...) standardGeneric( "adjust_closure" ) ) setMethod( "adjust_closure", signature( "Intervals" ), function(x, close_left = TRUE, close_right = TRUE) { if ( type(x) == "R" ) stop( "Only applicable to type 'Z'." ) if ( any( empty(x), na.rm = TRUE ) ) { warning( "Empty intervals encountered and removed.", call. = FALSE ) x <- x[ is.na(x) | !empty(x), ] } if ( !closed(x)[1] && close_left ) x[,1] <- x[,1] + 1 if ( closed(x)[1] && !close_left ) x[,1] <- x[,1] - 1 if ( !closed(x)[2] && close_right ) x[,2] <- x[,2] - 1 if ( closed(x)[2] && !close_right ) x[,2] <- x[,2] + 1 closed(x) <- c( close_left, close_right ) return( x ) } ) setMethod( "adjust_closure", signature( "Intervals_full" ), function(x, close_left = TRUE, close_right = TRUE) { if ( type(x) == "R" ) stop( "Only applicable to type 'Z'." ) if ( any( empty(x), na.rm = TRUE ) ) { warning( "Empty intervals encountered and removed.", call. = FALSE ) x <- x[ is.na(x) | !empty(x), ] } # Left side if ( close_left ) x[ !closed(x)[,1], 1 ] <- x[ !closed(x)[,1], 1 ] + 1 else x[ closed(x)[,1], 1 ] <- x[ closed(x)[,1], 1 ] - 1 # Right side if ( close_right ) x[ !closed(x)[,2], 2 ] <- x[ !closed(x)[,2], 2 ] - 1 else x[ closed(x)[,2], 2 ] <- x[ closed(x)[,2], 2 ] + 1 closed(x) <- c( close_left, close_right ) return( x ) } ) intervals/R/is.na-methods.R0000644000176200001440000000022013642043060015246 0ustar liggesuserssetMethod( "is.na", signature( x = "Intervals_virtual" ), function(x) is.na( x[,1] ) | is.na( x[,2] ) ) intervals/R/t-methods.R0000644000176200001440000000025413642043060014510 0ustar liggesuserssetGeneric( "t", function(x) standardGeneric( "t" ) ) setMethod( "t", signature( "Intervals_virtual" ), function(x) t( x@.Data ) ) intervals/R/distance_to_nearest-methods.R0000644000176200001440000000072713642043060020267 0ustar liggesuserssetGeneric( "distance_to_nearest", function( from, to, ... ) standardGeneric( "distance_to_nearest" ) ) setMethod( "distance_to_nearest", signature( "Intervals_virtual_or_numeric", "Intervals_virtual_or_numeric" ), function( from, to, check_valid = TRUE ) { result <- which_nearest( from, to, check_valid )$distance_to_nearest names( result ) <- rownames( from ) return( result ) } ) intervals/R/as.matrix.R0000644000176200001440000000023613642043060014512 0ustar liggesusers# S3 methods as.matrix.Intervals_virtual <- function( x, ... ) as( x, "matrix" ) setMethod( "as.matrix", "Intervals_virtual", as.matrix.Intervals_virtual ) intervals/R/empty-methods.R0000644000176200001440000000216413642043060015405 0ustar liggesuserssetGeneric( "empty", def = function(x) standardGeneric( "empty" ) ) setMethod( "empty", signature( "Intervals" ), function(x) { result <- rep( FALSE, nrow(x) ) result[ is.na( x[,1] ) | is.na( x[,2] ) ] <- NA if ( !all( closed(x) ) ) { # Valid objects have x[,1] <= x[,2], so we only check this case. result[ x[,1] == x[,2] ] <- TRUE if ( type(x) == "Z" && !any( closed( x ) ) ) result[ x[,1] + 1 == x[,2] ] <- TRUE } return( result ) } ) setMethod( "empty", signature( "Intervals_full" ), function(x) { result <- rep( FALSE, nrow(x) ) result[ is.na( x[,1] ) | is.na( x[,2] ) ] <- NA any_open <- !( closed(x)[,1] & closed(x)[,2] ) both_open <- !closed(x)[,1] & !closed(x)[,2] result[ any_open & ( x[,1] == x[,2] ) ] <- TRUE if ( type(x) == "Z" ) result[ both_open & ( x[,1] + 1 == x[,2] ) ] <- TRUE return( result ) } ) intervals/R/interval_overlap-methods.R0000644000176200001440000000217213642043060017622 0ustar liggesuserssetGeneric( "interval_overlap", def = function( from, to, ... ) standardGeneric( "interval_overlap" ) ) setMethod( "interval_overlap", signature( "Intervals_virtual_or_numeric", "Intervals_virtual_or_numeric" ), function( from, to, check_valid = TRUE ) { result <- which_nearest( from, to, check_valid )$which_overlap names( result ) <- rownames( from ) return( result ) } ) argument_error <- paste( "The 'from' and 'to' arguments are required. Note that the", " interval_overlap argument names changed at v. 0.11.1.", " See documentation.", sep = "\n" ) setMethod( "interval_overlap", signature( from = "missing", to = "ANY" ), function( from, to, check_valid, ... ) stop( argument_error ) ) setMethod( "interval_overlap", signature( from = "ANY", to = "missing" ), function( from, to, check_valid, ... ) stop( argument_error ) ) intervals/R/c.R0000644000176200001440000000537713642043060013041 0ustar liggesusers# As of 2.8.1, we are still not able to write S4 methods for rbind(). Our # original plan was to use combine() as in biobase, but this seems to be causing # clashes for the generic function when both packages are loaded. Improved S4 # support for functions whose first argument is ... seems to be on the way, so # we'll just do S3 for now, and move up to S4 once it's implemented. Note that # as of 2.8.1, rbind.data.frame() still exists and is used for data frames. # Update! S3 method dispatch for rbind() is non-standard (see its documentation) # and it produced unexpected dispatch to the matrix method when presented with a # mix of Intervals and Intervals_full objects. As a consequence, we switched to # c(), which uses standard S3 dispatch. c.Intervals <- function( ... ) { args <- list(...) # Drop NULL arguments if ( any( sapply( args, is.null ) ) ) args <- args[ !sapply( args, is.null ) ] # Check if we should just return a list classes <- sapply( args, class ) if ( !all( classes %in% c( "Intervals", "Intervals_full" ) ) ) return( list( ... ) ) same_class <- all( classes == "Intervals" ) # We are in fact dealing with intervals only... if ( !all( sapply( args, type ) == type( args[[1]] ) ) ) stop( "All arguments should have the same 'type' slot." ) # Check for common closure same_closed <- all( sapply( args[-1], function(x) identical( closed( args[[1]] ), closed( x ) ) ) ) # Coerce up if necessary if ( !same_class || ( type( args[[1]] ) == "R" & !same_closed ) ) { warning( "Coercion to 'Intervals_full' required.", call. = FALSE ) return( do.call( c, lapply( args, as, "Intervals_full" ) ) ) } # Convert to common closure for Z if ( type( args[[1]] ) == "Z" & !same_closed ) args <- lapply( args, adjust_closure, close_left = closed( args[[1]] )[1], close_right = closed( args[[1]] )[2] ) result <- args[[1]] result@.Data <- do.call( rbind, lapply( args, function(x) x@.Data ) ) return( result ) } c.Intervals_full <- function( ... ) { args <- list(...) if ( any( sapply( args, is.null ) ) ) args <- args[ !sapply( args, is.null ) ] classes <- sapply( args, class ) if ( !all( classes %in% c( "Intervals", "Intervals_full" ) ) ) return( list( ... ) ) if ( !all( sapply( args, type ) == type( args[[1]] ) ) ) stop( "All arguments should have the same 'type' slot." ) if ( !all( classes == "Intervals_full" ) ) { warning( "Coercion to 'Intervals_full' required.", call. = FALSE ) args <- lapply( args, as, "Intervals_full" ) } result <- args[[1]] result@.Data <- do.call( rbind, lapply( args, function(y) y@.Data ) ) closed(result) <- do.call( rbind, lapply( args, closed ) ) return(result) } intervals/MD50000644000176200001440000000712114447301252012574 0ustar liggesusers72094c53f0ca322f826ef56057b0c8b1 *DESCRIPTION a469020f078e1575d7cf30ec3af3f94a *NAMESPACE 395419ebcf2325cd51382cf869b7ce5c *NEWS c1464bdb0e8865f61d0512cb8a0441c1 *R/Intervals-class.R b324268152a9423e6c65c0c988d6c54b *R/as.matrix.R 38bfefc3e9a840c8c923c89880c1587c *R/c.R 34cd12ab4fe68a81147862e97b15949f *R/close_intervals-methods.R b3eb24412f49233d264cfa4b59d7e2e4 *R/closed-methods.R ff9d706b9f496d57e129b6900b73f897 *R/clusters.R bf6fd3b2e3d8a0423e0d5cc56886861b *R/distance_to_nearest-methods.R eab17d98c078805adf0e123cb637cc15 *R/empty-methods.R fc7e40041f4ae6b2796830c2fa03fd59 *R/expand-methods.R af2a9dcabf565023997fdd01481ebd1c *R/head-methods.R 4cf56de7be13842ee92bb46563177837 *R/interval_complement-methods.R 90cc9b22d5562826c992b7e8afb189d6 *R/interval_difference-methods.R 521baba587949ec360abde100182c525 *R/interval_included-methods.R 1564356296f5c31f7f4b8e2af3f81198 *R/interval_intersection-methods.R 22e0554a7dd6017d28ed6af0b739a005 *R/interval_overlap-methods.R c4db0a892e9af14025c7140d24cbc146 *R/interval_union-methods.R 606491d4aac135785542a9ccfc8a3070 *R/is.na-methods.R 009245fcb00a08765bcf9ccb3ad961da *R/plot.Intervals_virtual.R 251e5e4c7f32973c0f9586783311aae3 *R/reduce-methods.R dd2d5638db27a01280f3ba7b51499ca2 *R/show-methods.R 9fb026e61d588212f18e5ce675e25b6d *R/size-methods.R f60a5d3db5f7ffdc7b2e2f89ad73aa8e *R/split.R 1f063de2558da95b89939fe6ded3cb17 *R/t-methods.R 269d9904ee4f9077977318a06c0ea80b *R/type-methods.R 225ea022330e8cbb6157b2b0c8c0af9b *R/which_nearest-methods.R 81d451c9feb9b9702df8495ae9a1bd21 *build/vignette.rds 92331b5a7c5d0c6c690134be22d279fd *data/sgd.rdata a2f1dae28510f0ca5a3cb5089741ff79 *inst/doc/intervals_overview.R 61b77aed42f5d4a9517527dfd20dcd9f *inst/doc/intervals_overview.Rnw 214fe6e81ea02e622debb699b471a76f *inst/doc/intervals_overview.pdf 3aedf35901aa6bfd55f61317e58c950f *man/Intervals-class.Rd 6f88f1b01c1428410095e43e900e41f6 *man/Intervals_virtual-class.Rd e3e3202f6d824d8f23a435eb9ebf58d1 *man/Intervals_virtual_or_numeric-class.Rd fa157f068564f9751e7a820fd76113cc *man/as.matrix.Intervals.Rd fbfe10a5da6b8e08f574a14e7f6a3e5e *man/c.Intervals.Rd 90ca50aa8682d0b5d29a7296a7ae6452 *man/close_intervals-methods.Rd 2abf435889e72a82124c8500f4be5c98 *man/clusters-methods.Rd 75da89fdf7d4e884ff0d8d194d6e1f01 *man/distance_to_nearest-methods.Rd 1dba3b2837c85159bbaf2688ae0adbad *man/empty-methods.Rd e382cd554673c0068670a67278c6115a *man/expand-methods.Rd 096699acb78d27aa015bfcf956f4f557 *man/interval_complement-methods.Rd d5e010258d8a735cf40deb9f5a46dfaf *man/interval_difference-methods.Rd f294dea1388f4faa935666279c852ceb *man/interval_included-methods.Rd 5795101b91efd8d1858b2a883716d9da *man/interval_intersection-methods.Rd 97d415407f45afca6e23199e86def39f *man/interval_overlap-methods.Rd 8c3d9577d7b5ee414115951dc669f921 *man/interval_union-methods.Rd e4fe3b5b457265fdfc8bf6b6ff82ae8b *man/intervals-package.Rd c6436eb86f5e22d2fe2713e21c10b18d *man/plot.Intervals.Rd 5c627704aac7e9dcaea89534d6a7a6fe *man/reduce-methods.Rd 985f535bd6b8d790c91511a245232734 *man/sgd.Rd c02935db7a4e097bf4316e967f41cb67 *man/size-methods.Rd 4a9e6b81bd312461016f35fa3b3909b0 *man/split.Intervals_virtual.Rd 32a4b517594cd57c13e31a54ce542808 *man/which_nearest-methods.Rd 8e00c2c424c18850880d2273098bfa60 *src/Endpoint.cpp ebed137f1adc16c9e51c2ff445e67a35 *src/Endpoint.h 60813f1ca40525d22e04f8e141623b12 *src/init.c 7a0849c23db898ab8b2695c24dc07732 *src/plot_overlap.cpp 386fe236bc88992315bac78668558cd8 *src/reduce.cpp b6d7ce8946af48161024c7673416c1f6 *src/which_nearest.cpp 477a72cf673ae334fb367f84bc7870e0 *tests/intervals_test_code.R 61b77aed42f5d4a9517527dfd20dcd9f *vignettes/intervals_overview.Rnw intervals/inst/0000755000176200001440000000000014446531450013244 5ustar liggesusersintervals/inst/doc/0000755000176200001440000000000014446531450014011 5ustar liggesusersintervals/inst/doc/intervals_overview.pdf0000644000176200001440000113301614446531450020446 0ustar liggesusers%PDF-1.5 % 55 0 obj << /Length 1256 /Filter /FlateDecode >> stream xMo8_H/vWJTJΩm̌agO j7R%*YURDkEEɓ6DߥB>$sz3.p/JU3ܙD sQT GqfVE C1HxUaAvUՀūvpFyn@RYH4= "K9)Q&JxdJВdp02")iv v'Vm8@t 醡^7ߐKron]eLsM\fRYHiKL7M)0^cHݮ FXnRBR-.{ż1 37m7EiERO;qJSPpP.g?D탅.v! D' X`F'+?M+ǫa{X=F 䏶); %Ƹ%&wK UdkT_}ݣC禩!bjkM 5f ~S\OGAMV&0:D[jWK_[aXj O-pAtW ǽ따3jԭ}Z .3 |ymt0V&ȉ~AuWvq~»&¬ }p(:%q8H hA1pY 5t>nR[;lzTv` ftñ;,.W|0xH:Eiՙ$ͅPr]muE4(@RnB0N }9J!NCC^8| W̩wR[*G*fb4~~TٝP( {ⓞV3LVH'T׋E/᳾^k4ϝ<4(;* ?"O|i Q®k|ijٿ  endstream endobj 73 0 obj << /Length 1620 /Filter /FlateDecode >> stream xڥXmo6_a Ĭ&J0 R`CKAX-eQoҤ'<﹣._~eIf͌kɸJg&Nl]G?iW| vGCsx1t\ҝC[㛩$Yiz'~',KE.d*YEk)|Dh.)3Y ͸rF2a8hY\r"[Y:[E5$uUvCQ#588q.L砧w&?ͶrJ0c܀r}?_%Jg8,cavxCD;ixͮ.Ţ"dE"dcU")u higILURDAR/ƮUqbnB֝@B;vGbZab^9ZnSW 36C>^4ӭ~ )e-V-m][VM8SQ/_Q~gcNj%;I̴ **wTGvABBgs(oƑN[q=zղU<^ #y/K|l*dsěDvfӻ?_}u!nȄr2[P,o]IQvxϯ]uJ!D|/vW^\-?}i@pQ#$r ?ݒ6ʃ$]#[hosD{0_$tEyGEm"ULy MUFuȊ|[uwwԺDN5r2Bg]yBk;]>N1ur)"[څ]:unpsˠ(3t%'C-Y";9N;eF`{ItqzTuбKK(=I,6opw l8AƋC8 \aqLU@m %c'5ӗH+ckYͽn>qՅ%bic<o5'{tp-PtH 5 >1qYκ S+;5&R20+d]8LT֖aD+<$״ 5QEc$0!FFfIiSa>_zHBo\LJ{ttCKP"-SC T̂h_9׀c-<4$Z4ay&cXr^Rro/^>zZ:Orq~zwPA*:uGfБd[$8OUB>|!*C;"\n"{]\3ʇIq:w>Û%Xl|=Uۜ}> G ` L%C&Cӻeje>\ w@Lz֫lX endstream endobj 70 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpfZcaXX/Rbuild1458761277d96/intervals/vignettes/intervals_overview-plotting.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 84 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 85 0 R>> /ExtGState << >>/ColorSpace << /sRGB 86 0 R >>>> /Length 782 /Filter /FlateDecode >> stream xVKo1 ϯ.n\[R%ʮq@rh%ǎmWag9c'<ÏF~6t+ q Xm|%\9$- ~-5 R<uBt3j' |X1SH!bpEMCkiN*Tp8!qD8!A-"|@vTTjygl'8KʡŸ9rx}~J1F)pT1R1r`ΦXOMyztͮh:o%6z`oO JQ9cؚbC_0N܎طXw m\iH]9!S'Ѭ$bLr阩*zekJ27[aƥ÷ -kչsܒKJ75 iBN:l!z"k6p(IZ隢o xY1 { ͍Yf%R&nG6+&~7.ςYչsO* e 2D[.`#)|nnj}S1'p63 Njl Sa'>`ʒ /-*jk/߹vQB nK#5,8 endstream endobj 88 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 93 0 obj << /Length 1753 /Filter /FlateDecode >> stream xڥXYs6~ϯ[ fiݙ3?5dh RC뻋IѦqpX^^={JaVk.JfƚqaWśmeXP5_m/VkiKagلi@ (T{йy ;yIcUo\4FW3+*pn卲tȆn\؂&ߘ 5k*RU=sPsøDiS0(.k 1$pPLV3f@y"Wi Ć xu)R,Mө^vŰU:HmӦ>[;7}Kc {C7`O[EUk;p\ID탎6LM{|ٮ)dN4`V$fEE1qu "Whn"O#&@i,l#}6:êH˯irIf$h{jh_nGQH0kZn".au*Wc2z(=].!y3̦CXmA:wx.?yJD ^;_q.fK!,s% ߭Ԋc+!pKF5XB_͙i|:<:иCIu֒ 9?KijK 6e@?(<"uﲳNtO0bN=E sj iMVw&BXJ9a0؞\)+dMKZT4 N"v4NB/ #PDjc3KeRiQL҂B`/l}m/o[ED'l<4G7bäo!el]6aTv9X r}V]Ӻä?f3:6׀u1Ix/39Nܳk08!v:ٱqIԭ 8CR ?W/l6|AV7 ?E0<X^U#ki&| mADi⎘%e]$<Ha fD731}3p ,u}B:pk8.Q뫆>PKm6lC3Yĵm V3& ޜ% ˣcVC k>G> stream xڭVQo6 ~ϯ0jI-byN(Vl'i(QN=("?~BiDpQFY!HVh7#BKD]\ٲ7; d\8u1<*InMGOBNc;\b ]~:ulkg+K^!]/?>YMpea~^\3;Ce.[|h}NP3fs;x_MfWbrߞ4HCῃg9=s:VYVd^D5|w#S)3xE'e0Nob?v endstream endobj 90 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpfZcaXX/Rbuild1458761277d96/intervals/vignettes/intervals_overview-distanceplot.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 101 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 102 0 R/F3 103 0 R>> /ExtGState << >>/ColorSpace << /sRGB 104 0 R >>>> /Length 592 /Filter /FlateDecode >> stream xUn@ +xaޫӺHm Qn})J7݃!@ꖯ٪4;RyoznXd1ʁI3M><fS4zWH4?O{X-ns]QkPyAY&SXm^aq57Y3wϺ郴Kfyb7_kp𻺻mE]U AkWuO M:}  C!ЖgAB`F*(P 䠇9{jM6S{xJQ%%ygZi7cBv{X1vB oZFai#0HФ#+ P49@)HQ)R(yV@L={KD.\[}] En(he ^ ~ ;[Hj>Q'CwˬC@c8w3)to?ycKk;>Q#AG=۹-&[0c3/k%ڥ+,/#֨–1;D6ثQÈVg endstream endobj 106 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 110 0 obj << /Length 1423 /Filter /FlateDecode >> stream xڵWKo6A[ tR1ZEc5HrCe[Mq_33ÏYⴖzƔ Lڙ0fbL~\~2DPC͌?(0Bz!'`%\ CAKLxTqH]sN,9Kl.]M0h22QYco9KG}>d΃ySTQ&SemH4`{tdJxdEQUG}m}UiLUguGWfGL_ ]Wh+yZ`c*`Tu'dU& caCD<k+DSv(p'tD̂eoYGrlUv}^$քϘ%Aĝu]@kpF^| Cg߇h/U*OYe3Ype0Չ& }8)vZRRuT2\64ߡ|%Mgv1PMWf}~&/BArͲhl?,h"+h}A..c(b: _ Y]T4m}\8]onN81r i6(S|Wg-1g^SGlx+_7duTfߕmzbdhL¦>I,<-7fR^`*g<O.) XtڙDr3EGl~JeS7{ߖTn}]}񊧱eeRB&8VeʧC_/}o78@hū]`7#c#>_?cBΗJQGd 1ҊxP Y"$;GU~*{pP[in«l5%A!FN1] Gl&(`.Q9L@ʤBg栐 ~m?T- endstream endobj 114 0 obj << /Length 1856 /Filter /FlateDecode >> stream xَ6=_a2b+")H>H( l(Ѝ[h%zD\{} ekl pt[-D0BO2]\+O-BjokE5eG\eukZ.#eU4 .Uo#u*OB Qji$#$Y;~"LqpB,S?Nc?r^'tj *uly.p`0P7=SP=0GՏoH|J~$36w=o A~*Ofp nWK{;Y5({79CkQ.Rp?5㲶w{ӗ\'2Q Ho߬I`* :H^E* 1`{|X='`_ &>)r*eoE&ؗj|le#Pv0ٗ ^b_Ʋ/ф1{LrojXrk7ge7$5iM72VDZA=MVw "OÖ́qnۦe@Yo! S)+aAm`䬰tы3}fk&kL?'Rb%yY2Ї RgzP %: tiQE8mR [fVBjڲ,%@t}YUFؼ!Q]p76fĿ[RxJ 憊hMvD7Lb3̫xԉWd}f Y1˝3 gyO B[y9W=[Pta_P"[M )_I!T04DqJaY(Lw%'RƆc}"إ6U[#ph{ek|zZ14M HR349>a3Zih[יy~.u@}ë^x\\Yj3G1*]`gyC_k@<%2my ah[ i$4@;trmc{llZľJA^fy%|hBfcQyb2єYULe:׶Cm'rCHn$T{74> .Lg|hڃD<z8 Áf&lmkIVckv81ppx3a*/;5QHpQH (CpA5_0p]l vd:0x=᪽wp ؕA_4'EmeD~$reeM;7?n6JNXW&# =$NeG6t{čixsjU0[R)nf)!0hG-c%λO)-&JMFrrV)6(Ò_^%qF(7c@?4NC\Z`x %1={s_` endstream endobj 120 0 obj << /Length 1525 /Filter /FlateDecode >> stream xXKo6W{Q[˷ECm/= %cJr;ál˖l3oWo/in\-'\i$c&"\-&^_2c 2qZ@TЪg Dq00ack$ w{@#K,m \R؅Xtn]:0#9Aw:(ne݀"yaP7dDmd(+Q nф[[.KwKAr[ʌIs@'e<Gʡ’Bp>NWox`%\VKt-8S*:*SƳ슑{.G6J)f ycT0p$h+SQ"CJ50'[:Y8y5lNU&s4WCAO mм P~@|ؽ{ "> Hc`yRbYqVGvL_G{*lŧ0 asedޔr{L?˥:}Ԝ/W|\nr +Q=D '?г;)c^=SJPENM RǸn[ي7S$'xjW"K)s]d+6чQ?5!빆` xhp{¥\K?^] P$5 endstream endobj 124 0 obj << /Length 1937 /Filter /FlateDecode >> stream xڥXm6_aT*)굽;4@ pOMҀkѶz8%K^eE >3ܿ߿uZHxu[D2WHCr6zDI7Z>ھ`ꖖN w]""!@w0կ_ZFHn'3g1m+TkixvQT# _]-m9z ->owem֚iIڦR:Sm>pD7%>yU/D.dcI@]Ї~&|-8|&E҉QqӶ9MWmRE{ԽvD@(J1v~C כX?NgmK,x]u!031񪌱γo݂N2O{AP&ȳYdND)ִ=Ȟlj}@RlA&{ QQH=,UUe~tѢܐAˉ/2t'1*@`IHԃW/,?X'XP;sKyK8|t@LC:{0q2J5 !EqE5$ɬf-mUi:P?rG**=2`B+zy| 14ٓ_0x}q*gRtkC;̾A7߈k>hk~Oj_ET{0 t5U_v/jmOVWe*.^QCsR;sy 4:;-sǽj]CÖ޺ \6nOy%ۦj/Γy߳\5ڔ#%E`ێ/0G\ҷSu'<٪K~w=fixu/C(RE5zJu܎< H: * qI$gJc3n xQ6P^g=G<@e鵱zJ`, AE}"^ڞOK ={0aQcC؈}hޟa> !x`Uc9"o-L!T>Za\$])U0u-zl8/缛Y<K3HΘax<aeʙsp"[ő_' ?GmH#(tZ=ʢڶYsiFF-r>-0MIPLkD30va*{2RqN-]-$`aT i&c i&We,pNԉ5\Wk|Smr5AV&H7cisPν(a$mvИK`zl sDπK0zKYbGO>ߤBͦsr4~ڥ|>lLpg!8e93TXEqbo8煦ľ!"VlϵvSI1"\GObn |YF7v{ҥA) Yg<\a}7 _vq aRNwwrNnZ=_O*O$1nS>`> stream xڭXݓ_of$py*/w;WJrv"`?ק?ؓ}_j׭y}q.O.$*L\l.FE,.XE(/i$7a,xsFS%oBFj]3md";k-lxoT8|<1)@Vi?~Q.NۃL׎,{rx.ډwz d0.W,V*رw0zK׏C h6X 5X  tGN)!n3o:ch1!3bZ,<ᢍn 6(dsRȨ,3{BҨӕ2@#EM'y""N_Ye J p/ז;x7X>EfbD4hqkf.r| P#Ywzl3tݰC#|ȓ]C"HGL0Uy!]uoA n-ŚZB 2.M SƦ۷\٠r3-cy'PdDE^YWڦ9^9DH5lu2)#򯩓iŰ5G5`z$bV5{9&&b=p`>BHGHQ`z#.Isn>+'YT&bmeVS&m}e8Pfm A" SSݞ\a0@VP"ؙp@Mڦ׈/Gszx{DƜLTp|2";p %f]i5!'L[jxil{] B P~)? {WvWn􀶃r0^Lm%J(7UǤs#c5V9ЊW8FSȟ :JTi5#tyH"lȡ,`8v.gQ&Xm9`ѱhJl=]rAM .8lbDzXC^wڐS4aLiJ*RU z֞[K1Ί '"$D5[3Xj;@I֧X=pjAPg-{PT8"0!KtUsK1ط fQ=<9@=BLoNG)j@O?8=A_eW}|(`D.zM(#%O:>r&22mnkȣ]XozΥ}vxNz;ẘi$p7^`wtS_OdGV _6duipw$fk~wg~5 qeml_Au͇t0!#Σw__abۗVPkGB^pϟ ZEƍ[}hsV[`d=uud7Mj'h/f1BԸ7w϶AM..lydn(=M!Վ*րbkrUG=~\5*;M-;/?̢\+%J\h}1颀&9 /n_ծ+ endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 817 /Length 2599 /Filter /FlateDecode >> stream xZYoH~ׯ1X$d`@`g-'2$~jR)J|=TlvW*R f1) Lä`*bָ3DɤgV+`%S GJ9Z,E",kTYL:)EC 2VF b@ZaqLi{&2fXc$0`)#I0`m< FxZ+hyl >֌Hj3# BZA$ PE25³|]HAL0 6@V4!BkY40y ֊ VCW LX`K^ w{KR+BL: S[NBSp#J 'f`" 0'gCDTu hf8Qd^f^+V1AHy-6jl[;4a?@q&z, P4~$5dK K 7<B-hRP,LUcZ$Ur/Xe?>X(rVqy~q'?I! |F]-d/G5p,Z7hW]`_- .Zw+I{ug͢E{kݙȯɯ*1_y띲]Sni.ZPfK|Gδ~ӂ-}1'ĺMKd#"m,%\/UPYw(PgkK{#ːo55ݷ p8(](7$x$!@m+ﷰՇb~~r ƷBlm]?P.ۥŁb#e?^3͂gٛrD{b}~SejYT el5 /Ť_;3An\ FG305˪Uꋯ/=Ts/ԒzB'b]V_F٫|R̓x<{Nd!}Kv ᠓ *Z.<.LW Jo.P8ҙbGC+!pe=(U\F[a񨲘A@O+[Z"X H9bXÝs(}P 1;EY9D3ID !ScL"K)VEnvyPxxd!1W}yzi۸d\Gk•q>Ǝ}xwٽ㛍/ >qz/ )pK̝lwcb=y|. jyZ$&q1U .N^3:kHdI(k,(&euE/βw(CJ9(4C=t\2ڝ`:pV .KN~ǃ>`9x:D_Ρr-yFޡ{B>>mmagސ(A|~{pWws ۃoeqUwVpa#q K8֫Vo)[55 IhAjI-I-/ȇ^D7<>}+RDmtqؾ8ȖgFp!jhqxy`*AQz7cZ;:4jXS5^qz[p\JGh "$<$n,z׬7sioC];A=~N鍢ۣ 1cЫZxU!6pDjK7a@;cA)fªc]7eI&+O@'J hGӟ .54,#sBС܄"'  V1L|=ސ$̬a]f\>64KZMd@_^X4:P0ߜш$L|1<%Ph*!QiX .8S-[9jFZtU3)B=إJn8&M'uWkž3xQ s)Vͽ9;Poe=B'E% (imVd:I9,7TrK%h]`&ʮDB9< endstream endobj 155 0 obj << /Length1 1384 /Length2 5931 /Length3 0 /Length 6879 /Filter /FlateDecode >> stream xڍtT6)t(1H "ݭ C0"* H tHK}{y}Yy}]{_fg5SE@Up( PR1@?(HnC9CC0\?JH(ucSnZ8ࡇ3$J$@ (7(=a-~CNȮpAP7upB 1(Z`" 0@@`P?RpJ;P^^^`w~^C9P'kd6g4~Bv/FB7g w BuM+X//@+ ; \\p`stT5Q(^n vvGă=0g w`|3!H+ʝkF_inYnpqQS!}sNp5UW1fEDb qU ep݌Ao>hw'Bz@ ( 'w3#a @_V7 E} }&&<FSQ @ %D0@LLD`؟F#XnHFݳpQ7ԅ8tKr;G_YWwGο?qC]ԍ 7b7v07rP;k#a0o. q1ٍ~i"an/ߍ N77 -7gI8aKh"0 !9曕 Q-7p&p3?$u@ Fro{[P7B85H9V5V*[¾b=lIU2CUK7?`'̶9n⤺y^]j5_?EVj]YdѱB1sSy=:BSBx`٘l{{tGRN ^$ع^Y<28DhtuSO=5W?7*ij1`Gܷ43Dy|4RkT % .)'ԝI#yC;Jq!(󼃓[C uRU\'s.%N|K^pzxz"+8?[jtCţ\fPн0?Zô͸;- I.wMR`pئ3YU04[I^/=KF^Q6610]:!pI[Q+gGX \qnJQx,J\ΐѸJ;( Czx;gEn9kW )x-v#x6 :.M݊rAw6Ƽ?O(B[-FTk%9ڈ NW^r 2,t ڃNep/r1;*ȒZ?W=y^Z=$.q)~*oqt2;wV[nKhgxM|uahJI]?ލ[W ٓcFR뒃2VcL[/oFn<-}-ܶx(1ITERɤ=oj4) J;pv $zogKӮEdrR2KOcFŧ鏤ʖ)r1϶NP]ֹz U?2a̚"c/.0Gx ;6Gis`ZJx}< -v}rph+\ƥ+QBiYߵZ1\|#G%*꜏f,nFZmYn]G!ɔ ߔ{q KʰV.iq+Mg~S8\}+t`י5Mm(Ǫ'69NC /W^dӾsg`q|=zQM1TxְM/fh^^%_i%8|Y ?zPT,nēDIvC2k[e<‰ )mnRb95p9,B)Es+g%{8q\ƟjryA@s+F1%A*9 QB?1^!<}MII8"ý5D_$_ut]Q:JҖh= >xGlꛖKH%t ל}ma[4z fX )q"AKo=T9)1QYgxrxG>@NZCA}YyF'%x<*>0BsOzs,U VIIUnm {84kъOy? T{YKVʓ{J9==VV4եwo$nXX=V6, bGGZUlY}ճb_ϒd[|굧qD2MYqiڥp8-Dە/Vse~YHXmZ@vd"yN pRمUIu 2;( 36 vN5%;׶/W*R/b#uwcWYaX=-2%P-Wʈt0'e %/-۶μ2/c;[ a=RQOQRL;#aw`1ћ>*>\Ւ`z~IPʐc3/VsJF|,wq= ?"}KI }`B.{ (?uJN M_77-۰JEB2U^Q>*սuI ӱuoZY?yce´\򠳾5Rf&ڨޥdWUv9c(#;r!ǩ΄:6fj?競+IVEUIT6O1 H>!kMޖM{8F&鸳BX+FT^6Gu9ZZq)_PkG cY̸$ jL)B[څ3'8$3N689ԺPwR߱6Óu0Ukݍ:i5'K"iۧ)!dPF^$0l882Q,0<CcJRgjT(!80UWJ ^,&)OxLη0́faY<Nf{Gm`jY8nҒ󀺊XEM~0.UDNyY{6m xOD6WiɱN Ǐd, Xcwt&iiv 5&^ojLϣߺ+逬;8 %uGP$lE19lJHXn TV*0f!p8?!G3n[EpR-r6<|&6fa=HDh3!fal]bmryj]qJ#%[+5A t%yY&]Q+vP `_Ӊ8ley*:$G.T,:/rmIܭH<Í(~SHPU[d>=B72Vw)qā5bR*-NSڵ{(IfZjg嫘4)TgRfcJ$"Lҏqʍl2,T<:4 :W^Nh_mhOq/<;{6A`"J~'V/c 红c:*%?;@UvgT" ` fAE0/bR/kO3,ژiٌ_'ۯM~@/S UŨՁ\Da)ܷI@+_ǝ3@?Ȝ k),>?~ZyYYWsAFc>ҾRVJg`]8i[я4kb&x1)?#嘹G`%;u`%뀷N2#|yP!4`m0|@*KOblwP~֭=RmxҸ&wM.Xs;"zMStubM6lrEĹ T.h!瀮EdmlvJ |Oa ۑk;Q.ꊾhf, `,wzrX@ok9h5RR>bط2c:+yԼ º9'|+-$5ɾ91f+ݴz,wZH2ӑ=y}?MM_YϦ8 p@c>i$8&㗼?LJr}^߳"Jw#3 _C\t5^{UhPAQ}εcϗdWL/vu'Al&xC smejnvlDt/2x3[7* Rz'|)Ah|"fYI,} gi'vm7͈]%ʐجn䧚ɗcc;F YbzeB  : ˳ej:6ʐc8yʖeh.Rz,S1bR> stream xڍwTm?!H" ҢԲ,tRRJwIKwH!>>>\3:rܹo̯dah~!4@EOOKE@ab(򷞘 DA0@ ! 4F Bczp@ $@@8R pE̡G Nh>/\`now `=  rP!dh %G:sh'AzBJ J 8AQh/(\` qCc-] pBB W (3 !@0(u uh>f rE1 OdNPW20FBh F_a0ǬWA`hTHs>{0{_e{ MaPw FEo# JJH 7I&>o/5?p :@0/b?@#= ~iD,$;#F5/$ 0{8-4UU6Spo0_X J$0ƹ?|`p`9{!ן 3>C]L3h+H/cA]} 0@c@C!ͮV-43J0G D(u7> v6M +GA]1/ l)`@(ȡ7 ?POXLB"A>Ęc$1fL!޿ IRA_ߒP cua H$&$:@!`)8X&Թ.Fы}Do/0H5!Wmf%8;kVL}GHڹS_4gӁZ=k1?#]D&)),%^]D 꺧8iJ%;jJti̾~6B c?=tRr%]U} hxv&rM6{;!$5{+l\dS|Th[JROhZ)`~"c?_ѫeYhX,UrF=!w _/cj+~7xQ@oطOb֜۝Qtmls=OX*Ji۱D=Kcw|/w3Ĉ_d;{Igȷi)/DZyh:xi֨(W zIkNs\Hl%l͍枨evT.P@嗬CGF,92G6vp[ߕ 4훳~^k| ߂?TGs&r z迪Д?R 8N8kLVaUc)~]Gkv߶)1/=#NsX>iNaxWSŔ q/&`&X]σlh~֟nl %2Ku]BwߡVBP265Eȹ, uƒxEVy$N'GV&jo3y/Hhi kuٚwN4؋ψI{<癟E ʗppbɫWg'.u:C$^Ckwg&]Z\9lح(ҥV{Bot3̟L@ˋ|1G}p~oy~;OdK/6.+SϮ5Mw2&V#X2!{ĂDmLoh}.E7f䇴IC6ƒk%q&$ܦB5;'XQpt|n'?+WQR xmωVT>*K"Оg^VlT D܄0+*1C..Xn⌱Uꀷ6li+any7tS4sAϞn:* 3~("M8 k1'tz 6ӢA걝F샂Bw…Pʱ{d+Oj'k7:3^ԍ z;"|<=QbeERŷkrA d8:!]ڑW1sÂ%]C}儧}W^ e?kZz{RZSgd˴jhd'r.lv!Yӧ?=K?\vVɴu0,#*"3\cHj|(sڭ%TM3,Xa.-*r|jinp$>E0ZҳƏDKf쾊>y4 vWt K7Eijq*@/Di6~1 Sϊ[6}[84> )6 JaiUMb/2q LC\PDSS|.%ECsnwA4KFnm'M,g.GiATx9aQъLpsxYE^VdiN =KΎv7&78P n W9C|+ ZO2J'7ս?x[_jX#t#|2e?Dx>95Vݖ܌fߟϹӬ48rŰ5(c0E[-bk}@]B_Jx6B^W;/+L)M.r=Yս:~NJgGuMq"΄F*nN6eM yb Fh[xBp|%T /[(@h8Ĥ6Lr\\7h`5lY~+LwFddJ;}Q]GGKϼ+ bzS̼,X ?z3=mN7"bYcqPkς+(6,1f6 52c4i)X{'^1~o]JiQM/{?te9yor<NeAcF^ƠHgcC>  kpXǩlzDR:e9 |{yHD[0*t2`jgc8 eLpіUK+Tµ]ҥUkN_K+*EB{MtQA&UTv"W}$0t);s% ׾C_m-=,~z^E,(QCnͳ%8EdZ mσL9x-7Vgeǰ#p+aEhUvdNIkӢޡMl簀|b˷hMm3tAbՕuA"?(gf:NjƎK~Sೂ\%Uxw30կEw;}z?'aoA;bwrڀQg4Mܕ~ 9zFQ{~|C'_Xvd fbu 'IK gigϔ؏~бg48!ɏB*d6Ȃ{JO4ji+#DXBkMEК(2-IS/7|,QnW 9E:M2~GG&O(»r>/ߛXpY_~&R* 0I mzr-Sx.iQnv#T `KVS`e8I`$cP'^rm.my~֭RMfH AL.gfo2s4ᩗ<]VpG *Ρk1:&̉Ə" [=#v`Jȵ*+S\3|4~&aoZPjp H|o I%*Q噵rJf 2n6e&սKj3]˜gP2J9AbOFs~5µنcf&g=AdҒ]ѧA)Hg !x<ضyH%DSɾ^xuTեNf{0,cI i `y5cfr\a%&'&53F"I:ڊ,.bVN7ؘS]6UM61M+v"iw\ھ'+uYa?˛&)MŬ{J=v k P K}}Q˦ ?`'l+.wrI5-qi=MTeR 3/ w_}OM"Vs O4V$Ms\9[q>0`^rN&J1.+jŋ%.蕻NM7ZW {aIcM'mʳ a _U^b3=zv裚4If^ls7.tMeL^ A}&6%E h?O<J ?G1x$H4iڜ y ZCLnϹ|K:O|VbbXw1gY&;|Sc&Ƣu>yX= f6UjrDNSH$@Gȋc&N $"ՖX^"%[:'LYDjk̮Y|ѫSA+$=~C_֥ =l0 κf=g,}5Sչ-B9l"Q.8"nr_k[I[Mu[/1s9^ۭc@^k^M{YVEx V!sg}b!E8j/9iL>mP6,\5UDbQH["kWD@k&LE ٽPxv>bQRGfX'x ~[l}x*ݏoλSsK{IEqn"ETO{z<`ձQ^>&2[ TB宱{[K kFvc栴M(q՞@4" rA;4HZY0wc&[=7xFΉK=ujkxckxd 폗M[\? NDKBC-Uß2i*7R+%]8l0 ù"(lӳCHاŝA[A;;#qjZO.LްG^dD&LA@[7N9VtsK/Ի[Rn"*]MM@[NgM=W`zkOs.1& /$)Ɯ=zVok9mYQ"? /xyB_EO/ubo2ވg7%\k9J*0/O(Jpj K̙sCK&Z0_pԽ'?8dZ4˵w_>ô:lV2{!#ͫ-)rHNunEs+/ "fbK Q[ktMAu')MD0V`i#qmWѧc)$N3-G5E`VCqYkGXI)qP͗lҧW[=$RuvW LpPPk W^ [ďiK)_'=p|˨hpo9ДAX@!o>^i|4F9r̫/`kdNMQ'8f$ Wȼ>;6z%U HE$NKKμ.'n9yG3-.֙<"}gRDŷ6.32Ѓ s*M'&LD1)?%5ic#l'(IVS6;LpQ(?,r?߸].6S͆q?}L-geזbզvk H:0ߝ8$yRXpU (m:|oyAq;9KyOD)5_XMz^᭘<]/\UՃl8t%MVŎ"T $ʖ(nHvkEn*{)SOMbqͽfP)TIqa,Ym.?B9d,Ϻ=QAGszyNWHoO:_xg8s``rUXf_^=+ ZN'h|め8[xBSGvZ[/Ҽ +3ςَ]G#~ '25Z!yN5- Ú@뭅(C Z endstream endobj 159 0 obj << /Length1 1385 /Length2 6140 /Length3 0 /Length 7097 /Filter /FlateDecode >> stream xڍxuT6)HC ] ݩ CC4 H7ݍ4ҠR";9[֬5콯}]d㑵BZ”$P@ ?G9 0W8!.0 S8 $ `q t(@V ^*s%#\6(1zC9`11YG  A4 ([#D(a(`E<< k8VnN|LE/"DED0gjwˍ F[?>w߁Z`0 E,a6p0?6z.pO{`OOB"_>ǚzF\&wLN x@0X A?6 RUH[5c`+?i"ѬCrSSwῪH )98a#/MZ7ZH  5 Q-Y <`A^?U ҆(oKjpL nAg@C j~y'qE {lZNCEZ0"@m |hZ<3Nj@)̾k 5AB>/?B\\ٿ y sHD]MPi,ڨ$^1?h>Wq|9V/#}^Didfס)|ygKA e dO:i&lD.ݖ?c鞍`%/RQ nlWUNI'fj_:fZq~ixf*dAG/}$=k,!(E~:AJˬBTRGdrO&8bzqB+_Jtm\~ &vJ~(`Qf;VktL惝CV]CO)`9,~z{ۀ?lf`m3Dxquט*InOUgI6ۏ|9.?几 ( w]ӻT&/+T#ɟ.r:Ȳ ?ӔK> MМwhZic_rXy3^>>a@AÊu>NwzgǏsA'0_;1<"):BbƔC`4YEU˂sv+ks3#0 XTjC7'zՏrs䉇7eF٘nF0Qc.1~?$b`z qXh.\H>p]}X˗FGJDvq-554 6WZ_¼xy[_riKgK|6;{Htq#ẁEb WœٌHZY%mra W߈cY9_o?)O4zʔcHj^F\yg-a\H64?V/<Ů3xAN 3ϑw03 99v2]vSn_VrѤ#mI.Bo߇nWM収K f ]_ Sa=펩k{F m]w)o>+/L]UZ3NTXY$d),r@GEEB-OLIac װӜg1g)ɴw>Uy}k)&⏊կ緱 [;Lj3Dq_]8tTnlM=l}AM(e g3^.U$H0`e8N~w9g!BF9/FfS} ¤z&ˀϿJ{Z "G*;tg5odPV߭|E ) Iz{b1BYmi(FO/P+cm\S/=DV >kb'TDh,_VKJ:7c!f`طn;&$4]{%shHaj'5Pɨ¨GD_ rS%21'#~;˳pV\2 54R S4j\:$鷴j5Bxo*VV" ',/9W)Y%-^,ˆp9F+ 65l:3Ӝ{<'b۔iŘ}:́a@Jek G wݾ\GÓ$*S ȰNw-ZQcϳt 93{E!v c]Nڵ:yU.^J50n mx kւ BԾq R,!mJ〈Ma ȆV[82h7JvOG#cD#5\~ fG~xi)mg +2g% mk{nR}w7<qkFO<Z0NO̯k_U V}NߙrwvCLqٻOs]\֌dD9ћԍy5~wݗ3c7m B/GJ>4JafヘQ{<1+O8Nk6?}Q`JAnr޺$/ʱ9XYy*f49.ruxgeJS} I%;$3Wzh_d_cHyޗGŏ1W ?Ek|?p(0눩pgÃ34G=4Wk@s}̤絁Ā׻|JVqcڈR l5"W1ntb (XE9/ U_]&Dk?D:1/U[(E_6;>ٯy2'iv) Q%y3Qޣ*7)ʨ / #9ʯU+5*$J##oXyj`,oT5{)wO؄D֊E*/Ί>τL=W[?'ؒ:t6[= 8 YVmq$pӹy8ɾ .^`x޵=k'qVeFiV9gV--oiWH}Jx/8"̔}UyO? z/̓*`Ptի@EqKGUѽqR//K韵,5yXUfi/[{y,h{'wt9yߐxubAAI+ʟt`vf4J~a i!?`"\V8tF s~X IAGr .N> d43+y n3"]p#ap7ǚ݂ykmdr&8 Zjp';S!wusg󦍳j 먘K-wQҮ=֠ݍ(Nĺ}rI VTZ?SX%Kxr~R1BJUtrvi$f%Ki0=zb6K»-'Exy+h"&O}X Z_צxGBFX8ӯrHWQi*|YΊ&3zش;ǒSoϏmoӒ:k'qGq*LY!2!uV|^iprLB.;ITBgi3ᢘ:%gT6i$Y,TOD[8BWXWg)PM)j$RG~~v#?+FЍ8! ҁI]w򎱬,{.FmWʩQCG:w7*|q=d? 2yZ,)\ɡ2ѕ&fk r }FT>NaLXQ@N^R:,:׭+;z՘Z* ~HGD}(N`yPkvssbfl1L~DFsPjXsr|)"PCe~+V&|GEO?p\i+ܖgrk nh˓yY]ϊH gf׌2d.9Bܼk~ECH`(D^Mw g|N ?77 9ݘ5mτW/ hɅ{?HY[8OTG6JЋUh޹^\Gm 8w!kF'ǶBun!()8ϛN" :ī vyaNo1ƕ\]W> P$rƹ||S{ߩܒG9eP]5h`>7sᣊYACfnG=M‹ܟ# 4aFוЄkj g%Avu?>/U2$'QNtqP)z"S "ֆD(3'g 풕~Y}S'剤q> MžZz:gesz&E(Ӏ G~ȦD>-Ad.ūi<z0LQsh&3SnL>CPq<>bfs_:sxWBjLB Gd7%n}J?cjkO wҁ:5] n7u@%:zvY4, ) hm9e!aD)xwoE(ߝ}Ypx:R!w{~z&Kdb#>Mqh,M1r<189 6w~[U'-~ۮEOF>hV.M%Vx  :%[1՝!  :54z.1gm42n'UD`?^J07ߊu'4 [wt;^B-E14U}˧ovٝˈM~!?YHR ;ߓJ yLx1QIޛIs0{V2c2I}'`C$]#yO3KBrQTܕ@-7@画1F)> gi,d33ƭ>k1^?ٵonɐ&L0.| &a[VU]g W87`bC_zů|٪'G7ȡ&3Sqqk\/ߌݿ9&q>z0lZP0"7sjy a1jvע.Ν}rx}ڴe"쾫UroݭZD -3 l[©n[VI=v/"PPX+/aGw xB!(V@!IE8 Ռb/g^V~&NW^xY@X#CnoUWq~ҹ 'a;;S[I*euf,w6G&x"[1=Qa_tfME8A=GMyl`H!e"9(N endstream endobj 161 0 obj << /Length1 1457 /Length2 8123 /Length3 0 /Length 9110 /Filter /FlateDecode >> stream xڍTZ6LCJĀtHHw#%3]tt4R%)) zoZ3g?;Ύga撲BX@p$W( 01@00IEE@Fc`佝TvA@HH+/CPqpIaE_#Ւ 8B-pi  j#,?B""<<`;'n8'8A] Vv*0ulNk+`PKnq_VRjCe 7@7 DكP  5UnHN n sB]PO`|_9Y:BNNPy~Jag#:B,d_pϿk(wVA $ Y|pxKi/g5+E]|h%f4p[НN5vY`gcS%PW9z_rWwø7kۅϬ6ϊMIz!=K:BAYᄒhvHR C?_k{hdOGڅޮ6@_Js+g,KޔZʖ[)Iټ6O~dNk*4.XQpS "RgП5~scmG FOXǧu@Q$tX 3Ċ_s[кy]WiꊔNnwM$By<WiWtQu˜+INł72.Jn?Z|M!K U89rZ4N?1 PC!0JO~tFn2rQ6ʊ IweTĚrYA\"X-I+scNW((#P<+OچwOظ2 Ga*Gh l |6,F -NewP]{9:c{8P]SSDıPY_&4Şh#/Q DUA[ueP0dՊ3w [KZ&?ㆆO]RΕ?T_v[Q.)_eEx .Pď_3z)ǧ0PUak$WUJ+7higXCUX޴i}(Tddں*#_4j]tQaSM01[{=WLtFSx;&edOžъW<|'m`A=G%̒MYp%rKgǵ)n1JX.%w`Zl|P2OύnՏLjUOxsɊ=z,%yS{Rץ%>DQFB;fݾ<H {2 ]re.TqQ M%vQVzsUBWu#ń73w3n۵Kꏽ)-`Jd2OyОc}ږkbҔՓbӖVY+" .IY8Oy~oa}0.ˀ$"QK9몙!ԭB njx|[&s>v_b:=f /dw&:<$ɻ n~XDԸ鹟L?Nc0yC᣽Q ^͛ɎnGiw:RU;Jy3oGT>f4oXp&ՏCQEnKZƖ^/7ug_ ".BwjQ“3ʶ]lig"ՊCh6/? e,nbo<5p~bRJ8)4r_K'ejJ?ԕ恳8ʧ@\:ܹ!lqƠAۯ.Od2Ǔo^U0'X}cyYψMSuYy`m&*rlIFy){ƊIjܼIW'yT]1pqTC-E$S]BjQP;Lxn NO I>wnjPnl`}O18ku8 1Œ1H(a iR@B^OHq~g֓B7R-N|Q8:&$!WvelPWga/Mi^Havܪ2' D*>c,ϐ> RJPطϫŎ,zyYf}jqX 7J}Ǹ JNINvx_5WR\xfdf36$5>dQ洟 T B?ҕ7aߴcPg5vYw!@״Td\Jrĭ*PWWttF-+Ka:hXc䪳?*{phw/6hBzдqԦ{X0b6@zxTPo ^lm3PńE:7N Ht n\ҏ*adP0mZɕJy.=էdO t|r<H덪mZ;XiP86$J+AmQ8LnB,);0JHIk U|6pʼnԑ4m6*>=4^^5C4]9t#H4GymWD%"sfc>?M>xE\*E޸"s$ݒ>3!bPv7BB„G,jNF^x_DN0WzxIgv9Ltmo̲rK~ԃ"[ $ m/{?+H{ ."I }CVEa9~|2c>17|5cCs)3o`Qe.VЯU_ghzgcɕ'<oOhF7OOY-}>x0w`m!C3g2vy_+2m*xU#} E#aLysKA$dgG`zp1Sd3 -ސNJ)ww&?u)^,J4ڑ(^q@W&%go^׽I9qa&b^i7s#58*۪1\,`f >sѷ|X|T 1%+műn]d#lHsUЁj"yvi>i^ALT+׵k ƪÁTT#s_jQ"G-3i+/qRG;\Eќ$l ܞAaяw*AuT /W]mz>k-=v qPbMk|E(Hٲ˖1CvXw5AGMF`nG*Q w B dt|6d:tZ>O/saQ~7^Q@(}r9T-`ǸY#Up9O=rB׼;|?c>HZuL䅳{$ =m<ۣRf~b.4.`j5OޟT$K;Xޥu `ƯASu6z lW#3ڈ_^ ]7uۜ=xg@1?;e(ٴeALM;=ϋe=NRG5J 1lyʾy!ÇQ:tZZXIuNa0/r蛇ؕg h˱71^0T(^VhizK6wOf(T?=!2r{v+On:ɱADZphSWP݆sjAPryiH[$[?%dlMJbӷ5_Uk Y,*y}hhxI=Q1S[{ǚ-1'6^[3aQl@Nf-͹h: :hf@Yh1] md ɋr3C C+ԵZGO%tD$'7phl+ab?Ժ^^6j{JTs6}Éb^'G:$zR~cR:zvyw{k$`E.c2m$81]RH/|av%^ocIR~iΟ=Ϋ}S lr!uR\mC:,ZzW_>Kb '/ U/ PAWZa(z^t4

*qWdVaMEm?8,V֔K\ӣzu)N wŨӀA^܊e35q_hR4^~2>+Bިzny|B$0WP/pCs MHmmר웓*{UͳčTni ~Ꮮ0UxGrRx^qe~fZTv D>:яm_^'X -Nĝ82R&RƧb܍S(k6[:vņ7 OՙYM䀵C>~`C ZΉ׸ ; vZkӞ[Eۅ<@Nf`j -?bD5o r5&?%c[#Wײj"xTl $:0xY%ͪ-yȌUux?]͈ca;Q`9Z=_Vm [Cg˿dC+mZF %S'V4"tPLÓcoԋjoF<ٵo2 ' *Y %ﰼ!~:moُLŝ/YN92PrmkT:5 3F(̋Dma*VL0bIMڭhS2"tg3C@U('"Oyk\HnIsϱ!~En??ia/R=™wī,M#&n5& [m1ay[~9n]~^xЅ$ m3^ogj7 %|gtHeNO { Snԝxwoj{I IP)J}_߈qdQXQ{8FS&[4f:{ȶU}f?l9çDt@KH#dUudɍ+KkwD ߗH0=RV k>ժ&Ä2_iˇ-" W$ qԐ$N-ZI]G(cFaZY6Ey>`2 <`E8*6+Qd. % BS.?98FUG?J Uλp"7ڠH0I3o/ ^J% JXU8B_XQFYVQ7BbGc$c%}$B)| WbIY biܘWbLda_ysȱ- v Ԗ6k ~{u9CpI2$QsUbyөP^2&YI{2s {> {~S6zzbxPZ7?d[IZh$]hQ~1UmK Nu^) >OZs\3}=-*f$m< k%)s3}.5~oAJXP+[CcD|b-!H}Z.=>db}E33{w,|k0CnQ \#- Ɵ3Ya1u(~ jg_ڎ$}]o(CQ?P^pUbvP&ݵs k*ҞRWRq.iܾ>_s0|"DKQ)Jj.!طAR~%3}ge52Q t ql[&YYzy\\:&0&zsnWG?߽X}ԎP]TJ&%x牛,5y7݌FiEYmէ@Qµ=V`@N0UQB|Ej ʪCFXL$8'$:<>|0# *[t _J^VŅ UKC6/ʨ2qhx:-3 ^8_ P A~EY=m9*kS!<^3P8L_& հhQ;m>nNV)b`usnF.s#.@9E_ -=hFlb]s5QfɃ:~?FZ, endstream endobj 163 0 obj << /Length1 1320 /Length2 1550 /Length3 0 /Length 2403 /Filter /FlateDecode >> stream xڍS 8/vcnҿȘQ&Y2#|3sXvFj=*+J!Z$NiF[盡9^˕A,>ƅ(LG NPhKKo˭L`(/W )p1x+ŀJT{&u=B4 -1 xc(,'XbR *Xa=QXX A !,3 1xP}QPHdrLL I,ɚbrX eӭ#DS Ld0brEa /_/)$p@sxT*#<‘JxWÂ)߿ SpQE{ڎ3b{nd[=m[~gtqbA-lh8Ovt?>!u ``Tޖ=ڌ̅{St׹7kO"R,٭a$X5pWa!|D)K7B#ƇH,@<Mtzg(kτưL 4|aqTpLB1JE`2v%8OɁZNrrN O)ᷢ#^[Yw0 ]1ugXKcl.=K3 s_xKwXn|`VZ̈́"~|n:Ӥln/1u&͐WIihH5WbƜۭ?%F>p\SSsä9z-6%׳\Y{Yȟ9d/gmNce+ѪOhyv%U6>?_fe7_?D+%&‹omj?-ÅQW IbvA?]1+=7ʘ<9PcXEb|ϣ9\/uݜ[jbm̾8x< +7`0tt̩ȏ.z;Ψ]qJdM6ߨ)`*_vF\Ka,p;u׮b9N!)3H/.lLؖ2rV2gUTiUv Gu%K۝[%5}+q6Լ=o!irߪ&NPYh!%s'ՌC{ۜO87eK7~{Ef>ļ;Gün^&+Rq^}ΚAi7\K^Eֶ\w0xuP vmbO?yzjm8qF]rARˊ&՚D^1ʅo6P3Wlfmjq7*$9q~}\ia@\ȣm}B-YT}ͺm@UC2,?1;9>V۔>;/);69e>x2#3qXcϟC a2+b9eF3 Ñ'B #Sccntf^S6|{m~IA^u--7c=s31꡹* & K`Ayx8b]bQ2Uf#$ڃc>C\pp{Pz3B߃[,J8e3Ҽ!_}da4$tDM>i92px&Rm¢`  endstream endobj 165 0 obj << /Length1 727 /Length2 19270 /Length3 0 /Length 19832 /Filter /FlateDecode >> stream xlspe.msޱmcv:mN::NN:s=ު?5Q֜kRJ:ػy9XY̼UIQ-fff3 Rdj`/n h G + lea 1aklfeg pup2𻻻 $@WKSTҖVH)@ gc[)@d;8lLͬo g;;%D$bLjbc{3]]xx;H#?^gH@x+dae/ޤ19 h`2'Vssts9@Q[3+ dhc;+[!j"0'L͍mvM_O)?j`o ̿1Ih-ao`feoPuQcg1ۭdl/ƮV]f࿆_%%*`dcpqxx|\S7ggi'd `bV'Q5z'"耾u2D:xxA5%eQeQNa㥵2un]>PQ[@JzS+,{tN"fzE蕥JziO`]DrM7KgvQ_7^4uN5ש|˲x:V2hm^Z7 n!9lK]#[ʴqT?`&.}q9B x\QG.È}2 f+ɇvcT2LU ͇azSH9zGX]hҤj#F4B۝77斈<{\6U"ѾL?a;8o7j8+{-<g`!l-24"UbYۗ$:q'Kku``E-h "BPysyĒHWP՟72\̉]^X+qisWH0m6 NdžQ7րNB8j\l{R E.AzLQz&W7TU^e<2xvNI:x!1c{*Ǝ BG!#=Eз'j;ݐǓLXC|m#\ae7=ij`g3%2{-SPۼpV̽ 9VncfY]Ίfe&{㝐o.%w"mW4cDMA@ d40vdƒL0fnѯzr }T TR BN,8Ai?ReVts'"6#cWy-?ij֗SEX䷩w47O[#h*tWo&",ɘ29MeZY 9bL\/p0hjI[O4 RYQȋpgX- ]ӲƗHPnPOm ɲJj\jFZ?hrCЭZW ,@"mJH^2Ft? U|a"o Wy0f^jm{\? ߲4S=$@}ZW;l(CC }B"eBl4P0_G0:PFf8kW0EAdjځkI2ܕܦ{E<! 2>h:{e4J-shx39\ϧSFsjȈ'LW ]r?TYBܬZ!M*xGil|'<a.W,OACv4X ~@wL{.OIx餓ۿiDȂ&@OƩ/Y~|GR|Ud5qO0uڈHNg=6sc @-C5AL3$>/nd6xb>}1} szN!zŒTV?IOM^o@+K_cHUQ\^8 =$ա5}*DT },~Iά<#SwgnVcLZi{/@P$"jw'W@޿nVԱ2~RYf3 +*L$VFF\4HzK@$,Hصo*[4%n~u /COXf7 F~UeJǃ0˞ Rbz' K&̵hfmTGwiQ>bǡmVs3^cn" F٢]Zd꺌I?̥]%$X}3o]`S&|1Keyf4 4\Ues'U WFbÅ~&;PbxEkv]ZLUm}eFcW^I¶vջ{R qۋfmA Tmfr n2 u$˟oIh[~aMո*U,fCjԑ d: joژ(q&sGer[4QKN+kCiOiuhhN,6y%5Ck4eߚ=~M#тLuPHLa|Uc/TdBߙY ~6*}oeO6 Cb Z8Eds{ˊ󟭧mxP4=R`Rͽ1NN<1F grR[#nzMUv.b}`s1`+DH#@lN37 UqSoS5g|z(c8gH!G qTIF釿蔯x%zDTO+41hswD@OW,&3PT*.1{Ug0^ b, -jߤ̈́Hќe͜9̇$~DCnqo俖5$~EE<˸NJ}/ I4mcvon}*W2( aZsEHӧ"w14ʹRʿwE(ےϮOr 3 zJ)a緪ۦ]\Vfe`%'xd%= z7шx%N?rw QKeFև5E8ؽ"+āW0 A[B]!Ԛ"C|ψ PDk+a \&}P݇u~{M.<6'8Yvmw`n~hZ~9b9kCC/z& b9|<`۹J'Ela@|;4(^!.[&qimJM_{юvم`vɨG.W M^x tڃu o抺vX+LG9<?MKR(-mf9 E5o^.iCYg?wT}{GxۯP:Cl#\Q qAN{UF9k*0 RxG2k!I93 ͨ;QMBw )vJp؟!ftf,u!k#p\6P(Lz@?H~:t,?*"*sSlaփVTgNJ4ҁR=Ġ­.(̍ XPDϸp0Wlj@,-~*M5)aH8ւ>49lEW̮sf?';ݯA7LsH/t҃Qh9s X{4_|/a3|6 BqdᙚQʷ[ꕘyI^k/4nx>Y .&J91adQlfo'Xqb_W\} V5QQ1x~`N">4vhd9ؖWtO]wKb"&[d##Z/>#Lv|K"o?hr|FL7DXEI?\{FMOREvti% UUܙjrYQ 58鬑K՛|7EB4*o8-s?4c xS5 lg$(sr<iaůF>M^¸IXI4k{i5IOg(?F3d{ւ^l|B'˾"m.ߓ]Eyi3gd!⏞ + fAzxfAha%[͡Ţ:;b/X8^v>1QO"圸BPz zEA0o+3&%,zF"_v#Hg7h4Ǜ/@]?0B(S6aПrD& DJj.HđsD[ػf,iϴLT(2C$D§tGL죒 L"*M}:) x F)abB,O 3b6t!2RB{.8{n߻G2~mߴ͜:yy!&T Ar*4)ٽ`gjgGlky1Q#oF9wI!m-(f M{^@x2tXYz/؁3,|/R#"Fv_cUXtzȍKEM浊ZwQ06'~ȳ~t%wS-P;Ԥ|7`߯TKI#5C7j'uH1 g ύP]Q0.e3u}(`<_D46y˶l4\IԭAi &ͱ\]muvŪ}n7iMO2!["ӯ>.ߟ"]3[<kW_Gߐ5h5yᓲ~Z1<ϔ F{ћC܄Z"s- 6],!lԔ,_Q1쇢eI!|!y^(mg ;Ն`00Zn\E":$Dhd%@ÖLIhf*{JR$vTZf1E!2I)lUUl-(WZ/9O琳Z{r ԖWM/Bdx.HPi< 7@$ u!6ʮ3SphT^! õP"3PLM:{#ƭz_ ] XݦKyPIcZ;&X#_a6oqlvũ?BHDn!zJt('롁ubLp`9QXJoB;/P޼V;lDRML %F8>W?Z,/K[rߚ69O4_9^Fv[Ћ5tf:Z!{º{ӓ. rz'&D%/nʟ$ķ1rP{$J2_'3TR=JEVe(3_qᓧ1C/s>&$k֬9fρ&FJ 9=2q*oC$[,1}yuQa%eOQ5_ءHm';0kGRFx}68ۆB};=T- ;K-dqr"T)ȴuBR(R8&Ir!3J@M25HwiƖdHBp!g4%+^P-7@UK{{Zl3-oo\LԻ67,9n)-}?||S[l< Y $Ů0g"VF;1iU+36n{ڮߘ}ݳc񇗷Zַd 6bS˃<ЈFA ^M?E,H lW:ď'T]*ڵpƔ_[{u&u/IϨ<,fKN)SU{,Pgw Aekv{++&VzgI#Cffsx3.4jAU5}<:h,wʺ7"+( ~BNñc9է~<y`RZa>)l_?T)vf{UirlQrL77m|EV]C{qxtLc0Y)=HBƾmO4#}x#`:aa-xK;YB Q!f8Ɏ~}wJ +FY 5 /0gsV}@9/', j7zհȱUҒǦ'vWm$@r)G \wz<-P~H5ʺi*Ђc@K@ohWVZ Z -11 pXki&ELH>2)("ǬłqX[ qm Y:Օ㦭-jgDhC ,n~Bh[Q7dZ/E ޏ?#6Holݕ v&wq<BQ5cBPjQܓn..TD( x$2HYKּ+Tt ")[1)Udd+ȿ0F 3ez_{xPT,NiLE^jҁ`=Ǔt[9i:~K|V>3n;Lƺ>StB7S*饷oĺ OG}L'so.Ȝ(n_X*b+'\Q 1u^I`# \EaąR*Z__{ދLF[B>?uYYrmFEht^,1rdt>q:5]`XĻyGٲ֬CГQzv-t"?U䭤+N8w Ƿ4,%|g!1IIM{jAI/O%`#pWӳeie52IS}kkTK=+]F(^JxJlvK_˽jѕ?/A|)Z.cvF4kn{OXgxIª*&JE_l^x;KhB .ŠL]WV9hI \|A&% A[hXS-fe -ηZl "/QsO멹 ˮ՝A ]˃s(܉)CG%+W< Vy~\Gkz q3!>4x9xul%5?U^6 3̌WyBx\N*zf ݝKq\?/v&ʒ6K/v,RWU/򁁑܃8T䞐olNܵm4*L?0躔-"D1pla"5Bݵ-O}{}1w'8T雦X i|#vM-UKr$Dմŵ/shU)SKTbd4,F HrDGK/q_:js$I|@,@a@wu0K]7 (NSyb_%g Gb#4^u)jg@$ьnnwx%t KP/GtB.XᛦOLf3TJc)յyz7n7")Fb3| z!EjR]\HgA%5ti.{7ƤΝ{u3rS .hBvD8MH=XT_"ؚ/1zXTL9g;ٓ.OKU SO #WkR_In⧆x}Dcɯ]ďw\ ݭ YzB'hFc3:CJ`Mw} _{3(g tc"=|#W[hmC!05HHaV] 4 jy&:T=7lBJdK)_vזmT.:eM2؁J#2O 뚭ݮoFga zz2.j3(!=1Qp~6q+B;e[L12Q@!ep(?*SZJz(_XC:cHӛrMxq&V;6N؎ /L"Cg&äJ^a]Ի/jTʨ(;Engprou|,3˷}kۈs%6>c?#:M=])S5kۄ`b̻ڛ?_1$0gmܾXe |3ߨ͗&Y*PR9^AʪJy 3.DWE嗴X46^}E1&e܃ΞH@LxzavJ8I>d862KVFISٛL=nG@Ϳ1UZ!6VVX_atx%$*Ia]KaM7}^FVKn36lr.{)0Lo!T;' =m9Rw*;$$\S)u a]$I娆XS(`0MWlTl#ksƲba,Wv!#TҜ"뵏 AB>w{"D&;QU0&W5ݓ)R_~aqѭ&)0^)7߫ͳװ a19ϖv!l un5I-osvf.| NԧS8& W*'I:fݒhnI`po";t\=@~:xdn5Jͦ׮-+p} !ّй_3Рɋxnb1$^<VR4ƿL :n>U(?Q/L6co.#;ƚ\f .-LlwvVŸYhP [.o0=g *s{eS f_?5dn(ݰ!-q҃>.*U E8Clb/SFq?vF9? zi#a" |ٵzM=ӉSM-^P#j0MOYw1"05WK ¢9s*\^x= wT\5f*,`)ױy4W;;cvQ7tІA}+Y vF9).>nU NL:/lҲĊ)DEƲ֒/8B5;vuG'/sXɿ•qRhXC 'i&_#4pZUē&y@>8[|UPACF8 O(h4r4[5`_l~"ΌÓ>%'@>;x`58Jn,ʪrzȆpޙ}u퍿@Ǻ#|t2JN'aj\ >i}D7:qk+F9mzu0B=+/baFP=p/gXT7{ߒinM-lXax5X0+D=PH=q5 cr<}ϛa6lT;.ßBE ~6-q7q.r!&G]I<׈[XXO`CY@UJ⁙=6ȓۊ@Fq:",ke 8.ʾN3LgN/u$M Wǯ!~T5ZW]0_D3X~6x*4rx,Fw[Z{\"2UwyڅLB ;rncA'O@*FӻEX 3ñKv}8E<ҀX2%7Gf!:Ρ$qJK%1$Dm## ON$Nt9T"aO? /j>D6XY6շ<}re=s]rZZ$ aY>rٹ.~'j=k? :CJ/"nqea5bf:ʿ7=j`*N0gqֆǔ:or~kFd&Ĉ1iӧ5З~LG˅=6obe[ zqix.a 'M aWɐ >N>+ Ɔ?|3}Ukvn.M[UG_$gm"U/X'Ý>s\kk9hŞL"Zh_h6wn_U3"%N-S]ƚf\~A_.nꑠSpK_ڡR0)GT[2H[cD9gi]-ia^7^Ab B=eol!ӑ, iW |@ dƗ<6o~7-<SuccGtP$kUU,s7[B(laq50;ꑤסu)4Z$jhUJl=sxK1&æ(PG31peem[LJ:%S7pQ)h8-N@yZŦD+UY6RޒZظ=c_Y>~񕓡lň, ~U&'tŝ_CL_q } fdQ> vst\;3x‘6RZ$ /[E] ˞5kᯮޏ%Ȱ/JͽPp@Q=B̬øYTPHK酺 B+tE0qbyA$c8nKNy׬k _9b(X~M]K=U b%s} Ѐ?4] Mh&An} 1V^Z‡F έuaԦ`/10kmf(#O: pUu'+mpǞݸ0,رw1 ^~*֛6V+ `忿y-]~ ,% O|¡}D |4د/ZMdF _bڙ]׆$ ;O@%巿ow TޗO}vCdT0%s~L3s\b0a9yR'F)cEwӢORN&GɊr`:Ǚǽ?N@H_ {/dH67>':mwI<.WyxRh kC%oi 2'Xu)Zk^׹9t蔏].Q:{S;LP7"f:*Ŏs ٶb\ KF(x­>a^sKSԠC_Ҕw=I-Dؼمc-TX KCwrJ`]]UQJfedDYKn $?Ft~sS4؃ZN]zJq}u@|v}<@*0pmQOW??9l_ LG+tO&B="S7i t?4(ľ@/(I/;6eWrt-2UCoBz|+uw("Q*7+tTP}"l YfVuwu5V%uL+.[j =D^p60Q9 70J)r^u1z)}tE@p>5<$nM IǢO͍qO?'E*56#IJi(:UšKUvTÁm;d0,mqVQlkkV* ] Z_~чP닺pZ@afDbhWo?vkF$3Ѵү$SKw C#L(^\9ͨ`w˽P%Ĩ,J#~˱ɘaInk^vk7{RQD<=:ɀ'TpZNks>xN-y[$IeKD>ě䀍-5tǛBkv+`M.ǻA3я(`5A^_x%ȶɚ؃Nps 5;RE /py$JZnS[Bs^ciEa蕆rD:x{F"b9?}}܀)̳i8% "/̶0Jϒ瑁|b?GKʹZ,Ώ,7|6[#;u=t7'p˫ԩ];@M=YCŗʸfL0coFP ?Cɴw)V/ie\ XFgT $PQJaLQ-{:%#j[l\-wiyPNHP.FFey:So$$=0 nNCPoXʝ@HIj]fus}{ꁘtNPaU=A@~v{޿ۆ}SR[o;LJ.}A(&jQt:SY9}:g/evHyYѤ(s {ocl]|(M$o^Q endstream endobj 167 0 obj << /Length1 727 /Length2 16799 /Length3 0 /Length 17363 /Filter /FlateDecode >> stream xlzSpnݶmlb۶m'+m;YVlsŶm۶q֩5_:ڨz}0)=#7@E\XHCF&djbio'jb 05:@`"N.Jc6&Nu{{7Kc ++??TLM.3KSRB^ ajgdhPt54Z9R6qv&LovnN.3sȉ +ȫDTEv&Y۹8s656Wwl 2Na&.#SsK;&egf`OῩ9@TSЮ66򆶦J{[WS'@ bjgbj_R.!dg Y:[z(Z#?R;aW}5iԵig 373V4 g |9C'K#_-cffб0عX\l˿e'SSSce{cr? p_j4L+S7:Ȗ&W88yp3F|;RMĆqp1Dz8$~5[Jo`ض`7w.kAԓ95Ҏ|L1W$(PhÙT#Z\ ݐaX:k?co0GheMWDmB*έF^m=VciPߝEj`&r,lx^f8+R[֤pHIw `g->y 2ޡf*oˍ^jlҪb+UÄ́T Qbwڔ\E6ƴW/&8H}Gdn{"Mutg' 52`w_?PW]up!+þY`D] *-z(Kf;-ioKNCS*:W#GIi+kIJ^Xmv.W"o&d]?xHM-Bv/6Mdjכ3-M8Ѹ7":`ko\+[- Sṁ|,I OPMp ɾcEޕ@K0l .6cN ӌź9 ajrK,YkV *ؿDg܁ěi_j^4U:rY oʨF Yk8׮Bdǽ-}~6^0&m{AduZ`=Ro9Eɘ;Oa!N)ͻ95&\FG;o@Ic6@BurnK # jȞ? c0kS3@ɑ"䏳 m{r͚PMnKt` X `_ܵYĮcg$$27?r~i4\fNHmQ><L~+ m<7};"e1qΜ6k/se7pE?E/_ DZ| p-!%!l\] ~l96 B<[k+#*xCd(\ jmAAEz8'ek͵jθqL+vlˊ\fd:;=0X<PM d&Zl7aZn 캚[2}>zyIzD.O]k \|Oڻ+k!7{pֽ@律Z~0y*p 4\XmħI%Q%rGÑ {ɏ7(#pg(ͱőU,h:hYʨ ~7,_#޹b) 1 \WjP0V!~pFR$i F=xDŽϧ\  /66kr@^`o)N/M>)5>! J|Jc_}M7֜_zN]N9Oę֍m\#ьmWB}hʼnf*o녂VHD_\A7m#TA hy~a`Vѱi naZY{L޴"D$͆`͌8)[tMm@s1ba;Rvi)Rj`T!_QqdSi~It@G !mNyH i,V99n + ڪr%ސ6 RWׁ8򐻖Nn1җsJ¾_ ZԒDcyrj,Dk'8kh^:k H\k)>u­2៻E)(yXVuh(.8m-ќp\-x y#iqJZc̋=j-4 Sn4 8dWt/|xaQ0BF6C p '+ ֱ1(+ȕ-4i'w^rt>}9ZN9Z{M/sC> *eiU IJ(ҡ,b WIwlU@8FȜnVXIؙq %fa#R~B!T#Ȟi%ǡ&)ʇpn %.UA<^0x-"Z ܨt|yqbrOLj]|iܡq'IzjЛMѪdF9R&"lSlAz` r5U2c܍+=cx#)r j#0v[~dAH]pɸ\15u;(^fܺS̝ͤIbv`nU: lhu̒EuMƷ cnNOvwb)qF@tʝdbkؗziʚ擸ⵎHJZ`<禀>.Ahw' Dg)A[9H ?.Sv\KD*ӂJ+p_yH&7q]v t"'k\HŞ+YAZ':,ǼD'Z;ʮy'gGb?C^A` *xfiht( 9a'qp##5SDqQ>6+ evvu =7XNAY Ǒ+pMgAxEpc&n{đo&rXcy?r7?kG6%+_Cu2i_@H>e |'pۘ$.B_Xî$H FqԻqhlj}Rܛx;ϩa\B"1mF JߡqK#I~\"ZVr6h~3VUT=cemڂj!fCh.@,;G{H?E~MXn%xGӖ O^I;ALVK}{ɝ&N.Zc $qw냍=M$ܼtYgKZ X)$)BmOJOG!&#,9lE1~~n.nma *u9uVwh'7lwlJg V5t_"Cz@>nN2Fp [~gNrgM_Ah?k؁4Gɰ;WRn}mHk5¥t&.p[jT?ԕHÊ Юrpe !KejPYI"A/n^6wa9'H7=LxϷyf͞} JϷTzPf-#b<ɋC~`P6Zjj[pb !*59 P,vѷ>Y Kar2@5+Gr9m[CY@n3>TH~ܻE,:so60@Zjzw& qmO>bǮ!:.>w4K'=PZ՟DUu9q_{V,G;]LT>Pq!hUJ%M!oB@'#Ny5|ìmV6abPzT 7M'W`:l3 m@Nh4"1X ܗ_& Ց1r=kƈXmu}>RǪt$IbcZ70wd`QsZ- M)nFLU2ǕTsު%'*ܡmCjT8U1. uL} 5.QU䆍3VFnp*G=tꐻRUuY7|̶>s&P?C&cv_pFrhmqXɉX]R,jsZh Gv=>4)a+72t_}^Ó Z͵[Ya'[rssf gLfdN ?}L}ے@(-'.S@'x0}>'?tڈ|Sm䙏| /OXr\B [{^ggM$]Ěo8$1/pJdkmx Dv9Uc s`bH5`j-_}yzO kLkEmDJ\Wz򵧟5WU9Mqń5%ߜj`L?72GwK&o_VɓuU"ixPǐ)fK.Oب;1eT^JWD-gn"D)A-38OkuC01#Wm=RW#Zar{QRb(F`<ޢuZ$(8+ D)6 (W{bK 5tU䲼177Ay+J~u'+s^ ͂BaVs(fRV!ms?^8n3|\x>V^QR6ѕAfŊqgWA$XuRn>%lVCx~bT>S^gFE[qؓ +lR̔ӊӥ[u'ZܬxH E/1|1ֵ,iV y_9'_x|A^MG/fD.=ֵΒgBrxD. :{%ѱxN~!A!=Ue6Ȉ Fq g#V ]]Ȧie1ʧcެ~Vbt rYOA7R4Ge#JMS`>3_[5wLLIhcU?[^GAl>jȳ+T `͙7rsh<>st) jsj/ݎ%C#Ay"" 7$Fb!zXw ) hJhLaXx6 Q|41.2{=2l`3(E&<ͭ)Tq#J丂#sv7y;yuDeAAƹ5Be[pۛݶ~2,q3Z^_BG\>Q-x#QlmœCJlTWHϵh3%Tmb9s,D-^lLT#FȜbh+0$eR4:q*.X}5w7gK9X;4tNғ#d dބZk:\QO+ۺf`'ZPS7:1iӰ.N>i}݁eﭧ*#^(Њ퇋SVsy>gqxS;BvC5I3U8rTDeyVz $;FG6kw]yoD+4}?13<&asre5Qi];9yIn@9l@J ?Vwk[XQ0:A֟ qI]r}KDk)Z5$k^5Yz/z$]yeKshtkj`IE^#M2.'>͢ 2GyjcGӡBJIosMEHyR8h4:h]4uvX9ջ1U> E9wm,Tb3 س|w5$y]!\G\S(W I~Ic#m)?7,%: hpc}HN#CJKjl7<ԽiXPA j5>MV-h‰wr Q榊P6zdKyHa6XKop7'_8ѕoO誺?8lHbQ-K|(Ԟ>_ xj"LMtWxv~Ak̝qx'4 ^nѨLFg^oM-i&$WxEr \eB[f+6a%әj4 3Z{A@P?iV0WXMYiFp#o ;eGXA<`=YGv7GFVy{'U6:%(t-Ecft kE*^YKg\]H,4'V.It;PWykSHT?f\V^#5z=~QNJ]iLJmN&$hIZ?Ꙟ_&(e7(vxj&g zn%VO0_`elq@ K`~G*ka<)J8:ռ [0eQE<wjBWX' e` ,Clx=į!zw*%>lm>rL$i{x;lŲV=`\£xl鳯FI@$/#M/2V]^Yg}a4 gLj4궳S(K5whpn|>qSί]A~wt)UJН?{ᚐy[Q0 sEr;~$:9+<'%9qN nkY",[rV-}X]l5J87AbϺZn%&a0 4oG"9=OeBmA3.Eܩ:"pstFR6'j_ǜvJ['(Nբ/`kN}tH%5 WΉ g+r!qj+ ^H-0b5$\Vҵjg4D x*c]Nν ĸm3]U.s@'KQJW/~Ew*tʰ)Q2$9N5զE8V\J#'H|D5*R+sCOq{zpĆʼð&]<&K&niNGNv4:.  YuG/ӱc~Lc$wj43*vFX-#zĩ*^< =pԉ[6VK dq/2td3ΔO[Y2Qf.xN鴭(lm>;pK+W'!q#&M`Tjoͦ8  z |t a)bq&4ApK1>|duզrp3XᙢVS7_nhozԃIiXKF]wN],f{S±,N͓NqR -I"JKFsR ;eit$m81M Ɠ$˽*,:&Ӻ d%Iy+84E g7݃o)05\Q6C%MCB G1t[ȥ3=lt{0[߹9.a‰^aIdtWy8×ud BPoHۑvn]zym5B,'1g9Z`~вfoSv{$Fl2^=]Y:R(K \ nzY3OGOVsay$^ MnCl)WD3:ן!ʨ5z!$wO(IWGjuL:j_+#KR{7P(qG\:wFstYY2:6 'a-O-tIZ*7ԛtL >V镜^R1B~=K#jan;fOs7vC)9 rӠhq} 0}(Nnz{4G|b=N,ޝx"FTxzxe#|L(&>A2E? ፚ$,Y z؄t!2xR{+җJ_`MrUd+N3ڢhd_PvR7)g6^A7A 4~'A*fMv RxSu܈gفcs.FLLh~YȰxlI/Φe'WV˲L@_YR2[Y -X/&7A[nŖ؈!#IsE L&S>{:C)ZAP'μN H|(C2h+N !O&ƐHNXZQ MQZ^akO௚;pK]R?boMK_[;oo5\] G;z %Uoƿx'"D0B*`.AS/k}Q5%GR [ %eIkhC'ɨ2T d9b4<#K;Tab- C^SUu'еoo[a2d*ӈ>:jmĜ7auX`2#=3EJJ'p~>Cޒ_CO_(j ៾^ihUcJLx`'%? 2{2¼a}@aLdݨYŞ>\@]JK+!v~1 .U1B1\lf# )Y8WtCjB^_+C !o^9$Zg5G0oІҟ[QKH=Ol#wz~ɉ͝k{5 exI96ZEx:/Gxl)+navʻX#ve }ϛ\* {@OQ۬%!(6cBU?>'>W0A(ٚPėl'5sOR\Oثeb6$H*|LOm䌗AN)Z̴F`,Z&9U_v ؟!vQɌ_:_ā1qGL?=jzf;8YR7Зr!5M̙i5j8q* &ˆ;3c8t_pbc0Qg~t&owv'S(zFJ߷9t0p13oׯ=A,;_>ZZny8z j1䲅Q׬\_$ s@0Gi)31D+qu? U- RSYZҖR[+p%hKՏ{Uj7doևS0Ft[LSt:UJ\6Ӈ3 Pt~,E =a\q^3*RBd Y͂ v5;lxW6Y)~= 9u1jg2Py?Zwhy^~Vɾn!"DAeJ-wkWk*~7or;xR[hiavb{ѹ 7K=2ýr& |JjNj=6P6FTkZmZ=P'XXMIreOG+T?.&,Wo Z|m3#gj=QL^"PPX~tȏv,Y)f-+uÔ'AōT!= lj\jޒO@CnKŸ4qXIvTygp-L(%j@l0o'Lb%1Lm]GOza,2e )M ,2(& T^~ v73>[GjMsO?N3pހޓ1Qf9 Ar_[LyIË.1O֤L&ai:rk.ef`ΉN$Ri5풉J q3fM@Q;X/k($Ŀ$sF.5:c,v>WK `vߐzZ%{FPbt`*B `C= .) T* Ŝ4,9 KM%gfZر`S S}5sm`|Mp`"m掰qJOW"._@B六\ǚ30WRCA4>,3bЗ4B~ Z>OV"C4Mҹ퍩h endstream endobj 169 0 obj << /Length1 727 /Length2 13691 /Length3 0 /Length 14297 /Filter /FlateDecode >> stream xmcp-vdb۶Ķm۶Ll;Ll'{O}U_WMA"ntQt0ca`adPdagg03QP8XE\~4L*fV+33 @@mB @ nokfeb &O `nekQPԒPKȫ$̀fNFEWc[+ٌ`n0Z3 ̜\!fdoSWW0Yʁ.?A{k:z,[Yu02qYXSr if]mm"v.fN9{S3' @ b453/R.F!GAŭ'333U{J?*HYC5UеkTaKSK;Uw¹@c]VRx3UR* 7+u\;y[͍ Ei켿uҎ|,1](; K@ =*,/ZyТ+c =k \ˢ@p킃.[!tv c#c[(GlcaU:wnp#| ^,dZpqr5č L4v8# dBNVlW{i[0zsk Ǜy(ϵ.}=x&#MϭocqpG_ c4 5H<d?E7WSah ZҡĿ=#oa,LiF›7rbY? #1˙ߴ0.ft<} ^u*VB11;XYL -> H! hŝԳ"˫iA\za^2D]F蜝o`OCI}RtŻ] nAr1׌KKXE>ƿJ8b!=3R$8rl~oY}nw >K#9'-&pLsEF Z OLP;;4D)dMi6NAnҁME;hU'HWj#͎F&60A1$%Պ3A(QB.x] qh]k6?*pZWFk/1Dd"S *}"fkk_j{hX|ڬ޻ݪ 7@)NyXkf-c~lD /7/C6Is\?#Wh6ݛ;pC|  u*.nP;eGui>oP])p2GC}iR4}shϴu5lY:˾kPUAsm3W)-1++c(:hjuE[J`ra^sv1 euzkp*T}1B͠]<aT) In4 dˏ5 uy6Ib CϘ)k 'y.R!Ɏ@ߊ\~ 2WC<8[jjY`*{o'5/5)}=-W pUz_q6+'VCgh琟3K(*kk朎(Xo {? UP.l}8u|.?<ډM'fz_ sˠu͍ a;Z=(HXӫ/p6&y":L b;زdԤA4WW.+8? <ڼv`t58vl.ױ~X.bn [4jgwAfNo`̔.k7 )!K:?ɨ,uo@,Hfؕ%|3^MŐ:x}CPd~Oܿ>`{fk}qۚZ<6|s";-^FĪ[N>vX7q!~wȈx51+Q@kg { ::ȈOaF>m&+9N/f#R(47XVIX<9$6e&W%}\gM׭CfxBJFE!hV]6**/FD3Jc}{3(.d)˕u*YIkS9YvOL5ԮǭCM%-Qf'8рnUˠG.r!(ڟ H'jq3+0^B[̣C0r7OK}\gH5n"J k&M$V^MC[ސR+Psmq]yEZ,{m#^2MIZ1blj-w=9!= VZwBm2q~~.SUmF+FL<9$wN ȝx '{#~tR4!7W-ƙ02;TWX!7=RX K>1ع\&p ( !9t>k SmHYڬvQqG(bFV͠gZEĚ CUL9@5Z>͖{&5rde@1JsmYM5t$bs,wXlz]W!SzsvqW%TaA(1{ -PopaiLRp!k6CPXZňKfڍsw#wzÅR\Y-b< m>6Mg=Z෋I1Ҩa1w@?pc9 ,[ߗ!\[gNR#@%-ro>w).Z5*\ruz<}ٟ~,E'ݗ V-E7$^45 9 3m^ŝ1/ۻۑ.B3;-G dȰx[GݲTB\U 5k2)i* tYX#DnDvVbs6J# Vj uש;yʷȢXUIIfIJbZ_PY@0B >bӷ׺eZp"%b`J,^y2Zbs(l,{s--x* _%G<2rl[U<58_ %YΈ]fꎟr0a,C%Ԙ_IO')ax|p4wc=|&[+&ҽa\n7pC^Y97Hz kM LѣDһ Pޕ0X2*~0,)@:zTq1OTW_L\?Y痤8XDجx꽻AdYadE>n(d0')Vc1^NK[6ЉXxGZ AeDRBWr}U f_FƸ7J aN ƴ`4|FD;Fsh.f8L tu'cT҈:V6t>%W+G|qp nOV'Өzc^SuK9>U?VHr_eY} 97M"._Sh?KD qto]'| |JNSYslb;)ަ79o>d|VMg>! C=bںࡩ' T# |Q%F+c"GE N^>&h!p:\.zS$iXnM5Ldtk[<6.(ZN7@YOY] 2)-rQ&hpr3fB3*BVz*W1\*`Ԅk-l5+qlEꯤꛛBBQ&edBG_rdOMە6~؜LþUޥ!٭nH Ln_O]f/NJт}'wuf6Kl`"nX_1Y|A` x~ /PtQ ;mLbvɗy;1^xb=x '|Τ+iF^@_S2:렁kՠZAvSz?ԙUկ3{so' XȥWQ>.Y۞ hrȤ$"ʆlΉl G_m^)dJãӾAFuQI qjBFT_ "r?ZՂJ}@}y,Ҥ)_H]S}B{fRḅ |i[#Uu=z’ <*T(Y+e?DnZJœAT"[7ƾNxIv~`QZ)]#lG_`04!hߣ~?KBR(=BL;"U/dMȒʁ5&+: f 'ǵ;V9vpE_[SV.yTDڥ N/ZMMƻHO{BP$^\&̺pyAz֎VS>`7o@(T2*|)ϦĨH'NJYeZdmPf)'oQSZ8,ğfÂnf!6PʖZ-ޓz;7Kn/ J Fҗmd#䗭S5Oqni0h7S}?3ah8cͺE-E׊rМLK#>c09x=LIdan,9(Uk*&;uIKRU-icXĈAPX0Dwjue]]dO"=~ ʒYGl\術fEpVŒ3RuuMfTP35 㸞{3\bn W9gii'#8M| 4gB]hLǁ £Ql]+0 JT2ƏPIBbF @DXlU1%S^e}1T nr(ܑ6LDG\įac_`YcAEfU(=EН.Plu) {\8Kk*=˵U7el ?.F,W&cBP ~4O'<ڛk:6*b jBAdfM&p e8^i!i 9UbͿbX!ve,miy85k7gCThNYp]Y v [T7xZC9TPFuHYTSF6ҙ=ˮǽH?L5 IGŜ[3/N[ yry7n6&*zAsnyHVq0ν~W+IJ*u)c&o0?qP`~[y-\.%%KS<ǘZ~^?sAܜ$g״_鸹Ȋp31)Z K}o:v1+6+Gz~k*6dSv> A n>]㬊Di>he%'mq nor8&>PN/#}W4\O Ntr&<*Xm4ҥk{S&A'' EI vx愊+=u3CWHi{:d-[G߅FdҠ#Jɝwvw)Rp)S|HB8 6˯e]?s` v["Wp?DUqVsʕ|)]IP\KdȨ))p(Lݴ_MHr#vp?WaA/Q+-nPCn|4f%u#S '%yNn$$6h ꯲(/b:6E"t6pɵpv y`];{d{z0]'} (. CSuYF-SxTl7]1[sKvEV&`~蚤8$m37ZBV[M9j?ybc3:[wФwllBO{E6j`K82W%䟭hS`UQT'nH=eV8;(=p#tЍ(X;&z'CMEbqjl/]%G> '&qZtZ]uDbo*l+HwH -5¥ b$A-[ZO"Xʗ~E`wQxuRZ@G? 凉[zP[WċJrQl(rAՖl>Zq%_>}v76eV5-\ [})!Q~. [d^D2=uSza#!ξ>OPOIlxC#yeO #)s7RG(7V5yb6wtqMiQMϹҟ&jGpuO_29Ͱ8 m4Vu=2v^aY0,-+|`,vn耭/YS;JAR &*]tB VO d쪥YQa*c͢J HW(dmŭ.1\]\gqßj[wː{C EVې<1ya&vK` <ψ sѢ7K(wRF=uDx"RHºF $M'yC{$c㶶QϧbE?rkЦ[|h,+9Yu; ?AQƶıx2Dn~A(95Oلo<.:gy:N[g;oK.r>!JAAו.9ھ]Ϯ-6PeR&$ ܝOUI⮎EPSeIjםD}Xy=.etCG=TzTjCQdЈV+yԕN0s铙JƝ^ϪѺONLQN#5lP6Yto%GTF hA 0Ջ#CZqr:M$D$0.~t⧋ЊIi0g<9݄V#4l :KU*O0rTkrAB$u).֩! UHJ? Ϥt"89 +-Njggũ)%U(D?hyl$Fkgmr/'(Krs^J4o8jq=d`>u0=ΩҎ WsSCp=}Q#|ů+ua(:7>O|| (%ba-T9cKҢc}148t+'6N)ݛh,d:0-Nе`a]τiR޷e1={SA~p&i]38VU]~_FlDV;UZwڷ"܅$t&I䃅\i*<Q! hyR8FG7φ̻y;]\)\ۄ8E?FYD8>d-KB )Tq/fGyzpI:ڑ?HY@'hq_GYy'Nz,[|a1=5[C#|*#Y=*U7|l7 :{6f&񡅈1y' `uJ-+"B.dϦFDb]JgZJEKScfB4*|FU%{K >.gxåAG VlrΉ=Jll+{Be .,d|mmynAfۄ54ϛq)㸭H}3M(eP_,FOi:@ P -nBb)6\Hx֪.-on`Y}փyCzjrdSkC!/~)WgST|M.aJ!Q<;9V B Gi-Bq ɋM1%*E+j$&7H^f9Խ-#n|֫0\ŁOEbl2ԙR?qaP+QU @P;Mu7=߾ܐ@9@C;o4 `fOL.1&hH5ڊ$]-q,AHhN :Yˋ"!fOzb7 %[s8,fj:^\KruUZ/竎Wcς?Iln"MdsbG=G-x=tR(D2n뗗*)&ML T{BJp$HN^!x{{Ue"9րRCe*nktxh(4 cv&$4<1K^lKH-(=< w_yz1ÆzY׮w}u C38>F!˟1~V8Gݜۊ^ %C{b'Dn39vjKK=3HǺO}?/y% Y6 F8wEM QsY_>~dAC =bmt@XYgۏ!U#u~KEjjf}ibrWxX:-U>VOppۘZ|CO_o&k Sm5gN])Ƽu+Cg5ôSbG5 0Tb~#&@@09ĉ+֚б^PDx2>+DA<1:6Sh21$W+mUf-@ζL͢ Q$+<!bBYdvn꾻o $bC|\{sJFanpU z*v[DU/'q lQqZ73[Ѩy5mƛ^6Pj75%gm߈qF*-cC;y d'F&œ%@oal{Rm+꣟=NBAHd;=h5v1#t`%*>,C%_E4|5,BMgα{cӁ>}P%eb e)Z_OxJt ǐx|7c ߺp*YHeKy3)KHUz0w˔=Ct1b򿰃볳ʗlKLOȢ9\ /)-h|d*wMsZr*ݓu{G& 卋7. 4%Dp;3AhD Q`]".ߛG40&(7?hzV;ݡ9l.Al !~L=d,u'S=SV%SyP7Ci q :mȄʊPzXkɆ|t|@Z ZK,f2iJ(i\(_X vgŴ ~Ԇz/"VJ['O6-檵5_ YxYb'٫=U~]qDq~A}^XaMIQw6#;nqI \#U B%xHɞ_G 0X%H&KS=雸k\Ee'Hӆf9/y\G`b"Xԛ-TТ:MV)5 2XKds|Cg*޿s); c%KsV3[VM Ѣ*T.t-{,%͜ ؼh vg0ډ9|wveB:=\ܥ| [Gɝ.W\Fli Dq 'V*fUf;kW)m"|]wzTonC͐D&'D$?^{g[iK"͐6ZdIȬIjڋ7b> stream xlsM-ܶm۶m۶Ӷm۶m}Owf͗|yX;zJ;ػz9113rTĕ,0dd"fFVFf 3S#CqprtPP;P52r;:[Xx])R13Z̭l" ZRJ y5-@ kebfbF0wp8؛Z ػ9C '*$ aPٛd%)wumflhlg_?= `lfae/ݤ 97!(ѐ `jfV @)`j s05s(;edge)WtG9\ĭȘz_걕( lz&(Ro 罔¿nS1RLD.5sk3Xz5;NکY)ְki/qc^J%K/M-҂eXѭ&HDAeQeI֣_X}c~%,iqSӈ(ǿH)Vd[+'䎱_}/ZPHDQXޫH7:Q U/{Ր6&G1T?l6{S@Zd!YU5LrvN!?ml <ƪtօ# \k4x{g:H?z궹Kukު7]*(Vz#03%U֔ljv^% 14`]/s ˕\ |V F{+)0ͰUE6W~Ǩ)&mMj$}5Z0V}*2@uZTx@.]c&{"7бs}_b̨ء؍] f-hc9j~b(Cuϡc8'@" 'gis<ѿrtJBPŞpgKL )@}WkĄKUuq*(E CcsNw,)+nח"1Dxx,xͷYI)pODNCD9 ZR1b*y(y񵶽7Sk.nZI3qWQ6YC E*dmCKթ $9x9r)8*_wŠtEXҧ͔Au%ېغ?L擏n$[)_j_vFLW} m%Px*o̙nV 7K./ͷ>ʙez_%B|`3=F+G8/5ےh0TtYJSn;դG1^bWq$ƨ?}ToMN>qC5#ݿcANZ[mh$xՓ 發#Gؘ`h?cR6N{-XWuj&VC]J8F~/܂fP.U+}{S%Ї˄^"|dUQ pһmLE˵+Pr+F;LUє ) Ire4PK Pr:vҤ6}y$"e>ii:*:Ǝ4붰hZ֤@#:>K@YgP? ~P@T~Z|0IڭO&=l1Gݝ:LG6 U[kwψvT1V9D֘d7&mH13:欋H5 8o-p ?ㅰ_ n*͊*׳ }N74<'y3,"XBW;ԐJsIYQ]':9d%""P-) Cn@`nQPCRé9+CKyͻ~%QJ8p2}8Åi=4R(ʜ_#rCar:OdŸ\*U>χ]䳱UIJpAP#΢"S8h3ٹ}@Sw)[x$*28?h 5bO~e(_&y0d1,%c w>±p<>x` 73JpzMI4팛LLXyǝ ZZ9B{" &cuM7-! )4nEN вHoW4O`px*GrHALoCj/t-iWk\;t-'9졹T3Hc$ _v;Pgow^9:j#m LtVR@>5}` (dM <1VeCM#<G!`ͫ1*S[EY\.7Cg@ՂiCsadhͿ,@TD OI aBϖ7=6&8E93?Aqh³q[_ORr|.:V+54^ԪNr](Mv"Xca6doMHm U4|I SU=(e}qBXvAt2W/N j Rw6JCMW@s9 Q/-sgR/-dne^"`QpP+GGS+/HI`k1!)"|x'oUifnkeИ׀U"JJ>99 U6w]"EQ>ɬ[@R$y0ö)uiŪ$saWtK607J'O^ZmR.sWWZ4,P:Jɣzo;r#1Z^Ӄl}Kmw+E) GDsUf7^xl1{ k~B!)BIa)WJ ~7 `|B||DaOO_ʳÔ8DpڗR9m>a8mN+91|9 Łdmh;a5:GBm&;vWp1RB*(E/ c!PcrZ:'{"~IcdۿF=_f7 ag~OZt_LYIdP 3Kj0X!Yh<~0 ixta:-t88r9~f;։x*<# :j:5k ۼ @d%eLNhN"51 mWb9 .iC˛*oOJ!JBg7Q'򜱝3zvQb_xW[Bx4r9œr#msp y;(:CR/eJ{-̣ ⌅,@-%R+m0­8z `v]|&±@ԽHٌӤNC`_2%$[?AHNJ*}.4c)*3?U.Vpl$n)w&G9ߓErlPn a҇zIyCѢjr)"6tlM,FWz@a+w KTK`ahl!o^?\K)O^ߑKNɍ5K;M3}Ost!KY̑!&T)N߾zqSoiBcK RRw6 aHj9 DkEԶ&\W~Am`^'f.sw30t c7Ol^蘾͞!4傚r=GLJMb|4H5|!-=9 XM4r-b+ ZA8p8DO__,xl"G;Z==ASdn+brG0&%W!UγųC\7[+j-'oCZ|l3ڔj|l(Ss FV@{L>$:;<fHv:ʐ5X\OA.xѻ,q6vpՍy[41E>?l0;3]e^#/iSȧ&A ![VYX<Gò4Dyu3HscG_Js//G"Ԩ>T]>DLqU]OGX!sl^cf]Z<(E,O(zjXiC0I~[ '#% EZI^Z=hɰ8 7 p+E}Ɔ0av=&Բ1 o;a,?j+l!~($bP;K \k=bsگO7ߓN Kh_ EC}hd–ɧAG7:^}Z\X⍹L+c-xl}+GSO;|eK^yw ^ۄU\Lu9tBjW|f jێ tm=.u#2h ׾6 xjsYufMvOUq=NO"*ݍĂ%n!}@~cNn !$Oҫ fS VuUNط^1߉m Du3djP':C Q3@*.ч1{nH0Z0d$ZžB2}5dzJȰTyW/^Tr0s}B,tJsAjq\'_en#fANJ>ꪾm(0>KJfj.OhsG%DU5F\7g6kx(c2 ,orTCⵝ1DR /(azӌ!qNZsL"T֘/(|aO;kx=}Af t89R1 e=8մhzq-<Q|/S&}ʌn|1S_1.xhB"FҺf0r2){Z mmײғ\CMmŨR"!WiCws&]9xJof3YI2/VL+i7p{e2@Nl_ĮY =8iRL LLYU|Jޢ2}pD ro^]y:;#`-ɠ͋t֌L =>j&Ct@=X_j0(.#z ,D̪[4_ATۺ}&֥CFT( }r WfaO3g_X2ʗ3Tݵ}}u\;jHOSq"- kW-=MNQE5aC|iݍ?~?W 4<]]l ڜZa,OP"P5ݮC þmCqwΏ͎}!<&(dF ̈ Xsk2Bp3N9BCmM-eL nNiωϡwʕ~2nq,{k4\6Wv(86FƔ'0^EIxF}&`J|ȭ" QwW,_mFgaN\p,_&'6R4#e5]482pIC [F4T.p෶WxfgQIvXpAL `QKrn,Fq #y^-8*pB ɬa: N`ueEߨUvSNg7.]XP h,z1Qǖ[2]qLpE/ ݑ#`F#` >0_3rwl0Lg3"uKJ&)Ĺ~*:AGƍ",F-8~ 1f-R&zj˸zjp \'d(~tAЇ>F=/3,H5-< }e;Pwv{ +)&IfKdPE' B\$]({Q: y%>/(ÈZIЫܨ<z隱92Lb6]QFL3u yQ +͘D@ gӴC=h$VhU<|"Ni(&2DÔW_GڍT{S;z8o:ܷ+V \9.0ō?eFWa4|VDtKψy+1˷L{&LlxM<.}z=Pg.=JPdrQ~UQFR/9'h ?͐ҥA@+ _cIY u7pk{0B8yg-$>TkS|{YOpkC'`h~6is ʠviDHeɹymWi"BbѢ$AXJ8p2Zʡsv|QWy=q G#1@.OD91B9AevSo=!i3A&Aiv~kj}2|1+6z'M* 'Kؓ-ҋ Gjس^uUa'=Kq;[{Nm6TU=;pHl>m>:cM+ׄgŕ2Aj%j7|uuu˖unF6@r5݇%On_R)$P߃VUnRg]' vWF=9Kw1ZH0l5|IKQRGÎtM U-"LmmnnTu$F^v%`{#??\f^+5/{yNœ3xP#U+1}J1m3d>O0ln# u6 hE}B#*EM _ծhiNXAS{ W)?W{:zj [?EjxLL#uzneAUN_VA/gÊt_"_űt^q1``pA0}3iFG1%mmJr6+dO#d"Fؠ$׀DJ Hkn}[QlEOaE2Szܾw5m>ebIλRZ՝ WxoMfFC̡͘VNo륐xUlUi#u"i&yEL2zȻ'7ծVT +툭m'a a[WS8ҁq7 3)kB (D5-@B3H\F89|y vB7b^4CS$;ئfgTSis3nA6kfjvH-#ᐼnz{W #'|Ed)IE$DN%޲$sy&΋\h.)VV0H`0[SH4aZEJʸ샇D٪Mp.|cjD%2o0*n^{mҷEq#v%?=_2vm^{btp٤c4Tma|3|׌@Q濨:wq#E$~Ė46Ѩd!T8+!Gwb^jxoRT;_ ޖ`Xcs)|]Ź\?Ǚb"΁~5:Э"'lU lѠ.0On<-+@"~}gx%^Cur~k0,΀{gJFjJ[l4; KۆZT Z)w)WE* ht|a̮8j֐#+~:M Is?7<<^UpMigetX.%+NQDNG-Oނq ,=TL+Q4$Yu#bڃPKzsWlqmG*T\)"ʋOrXk<`̉Ь=)zc̬5BZM͵2S?$Ҏk.L2V؁[yV/VqhV>b_ y'F5(&ptfg'A';Tɯ{8l;+^*#v垒\WahifI#F/ΡW͍2l21:T\R A}ϳ&2j`;Q"o.l"hneK| Y !Ң⏮XlzMg%pXrGI4l=ñ h qP/09I0 iB3%4 =q'pu2> 6ijt<N5D|v^Afƽ.o%#c)~Է"JGX_=@2 [{쁀M C@Ỻ)_N]/)ԢsssV!B"~qf2Jo4kzYkR7z ^g+SFvL ~#zN&w0Mgs ;2"̸ȕK/+/4M{ޘ[wtRi!Q a"84~u|pk6e2"i>Gd,0# Av?>rs2S乚͞krϒ5{_zrI9V.k! kGfF }־sǐ pPx#ts}xkTXJ 4b\]R-CVT1NU׽_.׻mQ5`y*3,Mgg)eZB^ $fGY1 (=NtY]4.e|(cFWG p{v#vC<9/|}bI@;IJ"VLYyw \>Ƅ21~3'(Zox1$, Ej5ja]0:êY:n%QYntQE#fK3ƾ7AXb$] zq< eI[c|y"b6dBd]MJБ9JVܷszV0E;~oLb*/X Jm ޞjp&k](XPۼpu! %4^a 9~st5^+َ>5cC)w~?SܕS,WpЩ+y|b9G]Q sHνzi+#'䠂k0W9O =Rm%/Caۇ tNJcϜD] u} 2nQAMҷVgV1 {O_z03)#;? ʆJ HkN3#PJA9/ST9USdUlR!,P 8w%8/[|Y`rzen>52F6LzR0%2g%.F=d3 yٻ}`kRsCz5OW\LǍ\ǭ:߫ICM7h*iZB)3jlXb/hrrt#qw l:gn1p"{#1oZ?ap!'/]Y[ ` jyQ߆ %![K'-/.#!Y8F:]O ?0HVKȞFh$R@k?XI%=~1" ;% icagI ~!~"E') j\b~Z1엄"7IpVۡ*ѭwʄB[_:3JwK(I] f肑\=s;9Wv0]̍`G LeV~VG<^tiF)<:`)$ɕo"n~,kZ 'vՠeBX 2JY ;iSy/1FO[nxqKz lqɶ} hF^)vU_Vg:R_[1W$g ҽ޷HȦ6T:hր/IuWܷ{ %oښ'+ź58fh`N|J_FpKPxE&rgILO´Ae݁ӤH|Cxj-Yu,s#FL*FaE@J~IoDh6=A""kϺL]F/Q.pNilހܢe_50#'{{sv; Kli$u} ެ jGVEb -F=)hE}LKfUb<:aoV1gKa?WfIM$ bCG~y~iK{ݾ"d f;vuwnlɻ\RmW5aY&'/:!1&9#xao76<6U,]󄵞bBѫF޽:A6^].7̩F~%+ Z-(-a+b;0>4@3_A<¬EaMC]xwJYsxm]. M$%AZ_kLBܬOdJI8øj̤DMW(1xkN) "ȭ]|y̑GY5^ַ">A#z# EW- 1r-7gЍ.lRO {t/2 OV.;0?me>Gî2uWE[?;&e &X3v@\<8uDgYFME'X^aBq:n&tNʒĀ#׏ L#8XHϸWͻ-;&KQT.a(O7DqYډa l 0ϬXLwM\fD'ĻcA4}/G$-P%܆Ӳ AC Q!IQ&ՈqG>̀@˾#bǨPL^3؁ޥɆ(>Yr6L2̸zdl>>&PV  Z$wya lܬ{`܆eI#p-H[#DgI t  Ĭ !:+ 0a}]]9Ugi%v$[+]Y Z53HKvVAoqx6dwf{[6U͍G8&1 J(6}VxwSW+:+W!wьm<>ʫ68RHYz1n;#YWձWCίBYB$wۄut4h '!ӶoBdeQgr Ja@2Nfn\OrKgEtC*啡mSi斨lgCRA>ҐIղRf:'wc"3}CQ--q^=mUvblU R7_Kƌ6JiR%z>~ 'leť~(~A{X[d]^NA(cTT9\86m(k7xBu5ϡY#ߌsdn-K)W*N/*:3fA8<2ѡ";6vD o {=?|Cp=gU w192O=K\*чN~RqYwB.s(DKL1&@q;n7.mr_?^ !/Yk&WKCשT땲P\<26<`1G)s _ҭJ>1t"'V& gZsclpDwTS]kS'jIuMx3#i-;x+E j?`PScMp/pG oe|HgzT+sw>o0%7ާ%t&D9tG79Jcj Rp*'JFT [mmlG 8fJR>E>"A=XN<&sBxE*P%!o(os|ǼBl sL >H#7e`;ꭠ:Qqܬ}ZXccЛ!*{Wavej=q5V LVᔤbգ4#"]Bƞ:t[b'Vpà6b8z2=]t}s/ۄě^n # < p`%JQڴ6n(K Kz桶ܳ/h!tKd$GVT0m 0 $ޝ'UI0zb ޚpF!so$UJwqǐ)E%h./XB+Fat$!nA@k$ x:R "܇. %ppA^v?[bۇKzF5$ > B) EHE/9=E[a&Y69( }S0fdEg/u,!9^ ,>;x]R&*V׬I1Q|54 g(Ԩбb' E c$ 7YRjal!A(Lb%YkvP,HP k A_h! 簽b .Wr l6zWguYs\ѹJ_6f/w8S;kg|G2cs>- LjKs\?j4KIsǫ;wҌaH#R,W&_9HDLp(R ^^ qS"b?vū" mؐ PI'!pGt[}~.vjw~Tpd`: {G)oM:sKđnj$8O@ct_ sDPta}2N$R7<ނ*)3.3 I*Œϗ\N}Iq}_F< Ns,4b+I9,ŗ2~ˊ 'nkuI4j|s + L5OD7dZTݟG}xt9s*2K;0|+Iu)r?sO1ϰIuW?LېW^ oVOȀ\} _nQ<-um a1aKw+| {>*ǁdv8KzA! sZuzUi$Un?V+:g.gcuW8,PcITiH%isL89w}1mRVNXCgtpJs\VH2!E\ (@D x\԰~穫xdRQѓnlzni; u]DUQ!gc]d16^@&P:m)s~uQHjWOuN7h@ s8@p7}g2=KMO2LneP* 6J܂R `!=zYPtg+" Û >h aë 1 Yv.c7bϳ)~][q^Cܚ mx3A lKɌWEB_ \ `ݨ#WkR 9n,) +sQy联_H+`J^]?˻w Z{Bп" b~Eb""o<Į2j3z}Sb"Н dljT NРU|MO"Y׋ҳBĴ hT|! ^E+$f)CnLNp{ͼ*qɅ 'JqZ^dП2d qחhT#@b%A/9GB̼ævC}n򁍀Z0%fj2(^G|d e歓~T@|TzZʶc8tّK8 cM7nl$Znjдey+AcÒNd?ĿÍhz8_Řu6d<(+?[ xzB9!4 E0.d(DGhH vX_|1" G~FbhۑB2GV$Ki.Zȋ*ѸEq!)yܩŶl+|g_1`疾>UsxU FW/:E)%qHBdCV*^Bvl.ɋ.e[7Z14tPP~*ݫᆁއpK:>-x*"_2FF Ke*ۿ7F@aL2@+`Q\ ?W7t lm%y16[P_(+>f&S V^2)Sؐ!(4+% dW"N6J.TۊY(owGLj!1( z9nX $\ TDwjYs!oAbCZ_h9 Mqgq}7}?Gfس:o|O[gO',ڤ?lJ9H+XIqx,xvHaXڂa@lpDw2v$764@`{__X٘4EMC['PZj#W^<1cV1 l}?V$Ӎ4Њf1uq|SCSO];;WU-4RD'X%.М^N-3Xw&f@-<%_jL<`$x\jM\rj{=&\w!EW\ZኑZ)4vkK!$=.qůTx [i9Q}u!s0RQ}Wq'÷!V105xqh;S A_ poc2]7kD]S;QǨ㵽LZ~q=pȒ  ݖ< E2^6Pgu9:C"s>Vz _ x Ʌx``p_jBl& v|Rj,KAjC(:R¨݉&%%拓5-Iῃ$f%VQnrYK)ԦU Yd؉ݞѭwɑ A>\:m$f8\%1m7+ HJځ*Y6k[.TM?'Th ׈"7S҉k.{s]8|y=4U&WSX=K^;ݺoREZuwoA7_(kWЮQo?j3bo#Vd `׹؂cɫR.aV*gG>_oH`v揔B#DBү0DGcbϪ&2x,c6-SFnB)ʠS&ʃ oF-nc`5ZP~BՏM.W= x2#V|OpIj_k)͂5 Gg7ЭǎZB`{E޿\,JjĐǙq7ȖHOP:DDŽT) 2_Uv-v +</,PM)I/i}ɕHG?|D&Gf  ؇eXbV yJ&;m*V-h ̞Nb<:E Fj[X2z<dOZNcjY>Ec&c[u*NKuf+mjeP׺}fٹjE$.-򕏷}^*j>;Br7]%hn*ɓ\w۴-4Q6/ʷ;k!zÏItK*H1tz 6N!?<)ǞZS/ӆ&vdwn<?n옶e8rj qXG)A3!RC>xovH2TU*0- =$I kb=3X$s֭k7KH5<-o_ SN!Kݭ{+KWPy,)iqS_eəPc`:6N, Z95<֌}LUJg xvba~zEA ^X&X_illfukgM +}85̔Rúd*ej`~gshŔKT4$ԠirdIlEHwW>QlR)9b=9dNQF">8f3 3epsiy USԫ_]uK y:cݧƗa=1sQ^TfMpδ7W$WBB#~%jĸ:I endstream endobj 173 0 obj << /Length1 721 /Length2 12698 /Length3 0 /Length 13263 /Filter /FlateDecode >> stream xmy&ݲm۶뙶1m۶m۶1m۶=mc;Ž"*rgrػHlUWN&dQSo535(;俎 O7XH`Kܽ8Xt,̌o?}]cGG?? tí-s[U@,3L\kZ \ݩtC 0ݽؑkfD8& ]{.^a[Rwkc,qq뜱@=#+FʡU)ڠe;~uVJ-SOS2gRpe3h W߼< L󞕲sgFΦТK}]mL§&wOh^m@g.3i%jE7!'(n=Us"\`"m6 Ҁ\FԹq8|r;Ӏxm3=!VHFl 9Qf5"v'o^927%x GOʵE.'d+Ӂ>]W¢IğFsfIL LomT));8U9PeLGBY_Oޏ$%3,\f* eܵxPU1/%#, ЫX7 2am%4/ĝ%,%Z lz_pb?>;F f4BLm[)L9 صt,V+68< U9%NȨg~,29/Uͦ+/ !h|T3oe[\, Egl=IJspȚ@Zym>{`;_5e.Y'zgHgW!f X_R0{6@|}x7~-E#E >T^(X =UU2hxKQC}lpm=M}CQ[{qc\5 ktH&X+9IX w{NS j`POLl2Dwy@L2 ȊH $,*#np.#݅~Brm0]+@)>㦾1q9Y_-'Jl]>8 kEН i7g $@EJkJʑZtEu,Ҹ#$$fG(aY cѫGjɄ\wo; ] `舘@P>i;}!؊B'p Uai'`K{٥QGhPSا!53}`ƥebG WCSK4ńAho=㨋,~O" 3IVax]";x6UgEz{Ld0:l b~_j/R5(ybԥ$K; 6Iӟ.3 _mE c-atD5AYTi $;)RHI{gRϑd)0`-З@gE Hs)[ q@+/[11S+Ǩ7=hvA4&}' 6Yy*'gN9(PjF5}꽼Z23#BYwɮ ѡDCϡɝ*Kiؤ< lY8v0I?{2L$lw>F"jz*W}s&/1!jzfhd˜n4{[ (CiR) N]Q lc0,^zfg Msx/}sy?IX$qCz(Ŏ[zl<,]2U|Go6Frs k=hw4w'Uh9sgqr @P28,w"ڔgMiV8(5Ft-\/&,ܳmykZ:m% l5{Pg >i2d| ⊉.a=Wgq0Ÿc5r6XdgGlI*Dzo;}?nP}}JXn։l{rl|QV96[z)+?]gaDW C#=}%-âݫhj,0m΄ ~<=Kr[#-IJ@KY&z'wDWA# ʐC=؜U?f9 ;dOkh`ul B)3 5m/;l#B )+) J_'a~P>S6f))k8:/$)&>y`Pёڙ% yu\{XLH1gZ WRhMIO&OWٮd%C1ԡ zĥ;=Pwnuz iN"HћQ$*vAqRW =j@GGܬ)F/ Aх =eX aDQ ש  [A~7p-`#rBUxRV5 Yk P(0V`t+ʵӗC!Y;T6)6K625*fYnѯ 8VMޗN$,1a{S8s U4-#/8hB$ ,<6R0B,-|zX9yLUJIAg~Hn#XHcꉋp$maos׌3X s[0Nyl % |ǭ8J|PMFstu4X/]پe:?B-s.Y2Ѐ[a*}NQZ3| X6/ٺ;uIl,D)+0\5`X$YZpB[Gc`wE>|Qb  []ۥ㲶~ qHgF,U` Bg]&Tv϶"kRČx,t=8흪Ǯ}m @ifGڮ9x&JkY?~mlMwL1|¥j_`-ڹTտ:7Mvi8c)k}kWpMF׀]RNR$LWs~O:x;n.EŸүV7L(ʳS!'=fD-3N5 ^fV;f!4[y/|׃MnJRwgD Ⱦ>lS A/сD> H Lo yLMի2w_j(c w@ U:BEJj;CZ`݈o\,έGD7F5_;0t2ַ kgNtOݪ `a#UPr޿DV(ˊXs'}&qdw/Q^pwGQb(hV;w`5>#%,U7UU,}뾙)4ydNZ(n*P)67empJ&PKh3, ME }y5Ў:8]p ɳ2]i҉HT} *,d u2j/rp0ShCI-(WPqނ>=bU6NZW |t~^D}+RԬJ3 ze0b3 rtꖓ(F'nV1UQ (aX>3^C[ң&~kg֢5H8֊Quб7}{0d8c(q_v>Fc]baK >]_4"ϭ 5 }dkUIJnEĸ"h]%'iBWteg4 5O.0mukw? 6N]_=^nXT^@z+r 1"ңF]Qx"KT$5Dj5& DN2AMHFLŎ8膈 H~]ճ꾏vƇRxSud-%_E+{v"--ja^D d\T( tr,Et\X;Td|x7'|~k9B&}V߾W.2xEp'bvC*x2V*B!^Z"?oh2k|,2F$[u?UHO%E`Gff'*} ^ݙA'ԆθB'MwafՖZ^ (<fl9A"w ,BWaPِˬmoK qzƄ_32Yg=O;0R0$$\p!ͼ߳;;K 3iGroW|r_3NL}M(h6":^6cV- QI}N87$$qg;U<]m7pT12=CyS Î35]3*x)k4b˒IG_f*t{leo.2fp&޳z9V(E!QF?Rb'}ϲ9F8ub|Wr0dN#Ks| hDte8ʼ!>)R?3SNAAzpӖ@VȾŹ#/)RX# {^Q[MR&`UU7(cjPִKl VƱc'?pxdcPq:%mkj}(*6!ؿIW14Df4QK%?WX78 o 0 yhi2SnLHJ ({3Oi=J:ՆdA"MFjR:Q(q `{*dZitXB`kr֯DZ|x5UUP;G8sᢔLҍ}јFxX"m,VX?KH,oc yFB >+yzNdBEcO+8/FgAIK]~$㹱͝R ̓ZdW cEF-vbf5!S ;fh{uUwwgdE=Iܖٛ`[6 ↀ"$eϓ6cMS &LC#]b4mzZ+ۂfĊo[Ɍ]<+O% d'Tç ՖPrC [cPi[ x3S;\W@98}΄$;FRSjnФ= 3:?oo. +GlJi5r4뷷\_M D*|`guk5ۜB}%KGшdm!2KdpkGT#VCe֥Dtȿ$(x9sHpo7K(mʴY4W'|80" /qҲY#IqנٮT܇NaKo { +zۂoQGm!q*<`uIQLlq*Jso|\@BǾet s8L&8%7 i zsNj4gCbNvӢ>cQ;Wg`ƐxTEyih7G1%{ l?hiV7vp$dj\a|ufHd'^MDJ@QFa9=hѮSHbRA̷PLU&$hk."tYcC}{/Mb9gst tzBNR%[(C"|8|a~$狨+UkxWhi= _:V<.4f'NqM i\ ;qORD$gЗ(3I0 kޱhc/KNB-bMYmMqB8hUYD\@gD@\孃Lҏ;-"@/3CEkzj0[8Gbrhm|'T.M8 JQO2QPan<ڊ9$1c@)&NxXu=d?"|& آ=9"|mN:n/瀡Hɚ2 S@"5R֙:V ,KLTpH$,K~;.+BB!*v}N_Bg vs/>tֽ [g^4vͣPR$d+]DPm7Q:8i#܃'=8 4#1'Ȁ~ u$bUOcD2cʀ{@mPɋ3ng%i0zDQcDH%tTT{IoPdFI`vdC9[.J|32TlQ^p(%Pn(_;Qci,/e;Vu7JVGUP6%6ZhV}$ȃNЅgxGt]͖@/E?aGhR^Z D*KnQ\jVΤA49Ր\wp}ɧP4ˏB!rb WlXh+נ>o18{H8hqsnTSRV4>A򇦉dEd9˰pmS40[{K })ㄐcNg LQt;lӖ9zE6 ZE{qZ߃d5=L'ix]SjTf*S#z& rb?MT1]C,o 1A_m*VPJļ*h ƒ>9Q?p6dO1R:ƻ~xPdÒmpw!DQCuYpަYՑvBZ1,Pp۫x8ٲ}ZJ6}p)x@~ yO]}(%{ϑVukNk쯇EZ\25jvxվcJw҂Ď$(- T̙sE !"D)e7?CMo ")D5cEh,2.>$e+H|SWӡ\ER4 G6v `٥` +7n]II/e{ -.^&I%A@_';[?if_^PS3WCD974嶛 trط.w "Hwt=钏)Rv0i' D fTĐxXU U(F |SI \AO2Ұ \oocj^bt0F{"݄#L`.f/B(ӯwAWAl:9L 6Vt*5K%yza0zS/sօ5-0s72t-.' FwGx@X&#^"Qy|F`.2\EJ_qh TF!"gd2ށZmlDzLxjEJOK:>AW߬CF$cҲ"0RCpntPn`& IyqV|p&x_jAY}lWHg `jI^;5'f kr*sw#,ɢ*>2BWʦ*KU ?;B T#I kuIG 4NDE\->/3,1{l1RtjE"n7QQ깝X{GQf!~톹iwA򋯴|4+bX V$7msi1vK1uިR|(ߧy?w}]W KV9L\ĐijY5aБpU0]}SjHb4E[UJ:X~Ybpp#+_v,CS6"4ƂEf'lFv[[[S0Щ냒ZM.Zx HP]j? :88'ODhwQԜʫ7G1jnƣ;#8M| +s"5Ɍ߱Yf(L=~(S~4'QƁD?&^u~[ZUS]axI@|aUiFzI:,>mPׁmW2$Ĭ>T hq;x Ѯ6 jpUHF|zYA>IpD߹TБi@`++0篱N0r@DdcЅOh*s "K~5dE/4VIS9T^-(`8 RQmŚȿ),l- +e=HFC|5Ebx`I F݆;a!b<o4'{-lԆԳ KZf!;3ٔ|>Ϣ%c$cL{gҗ/t4+)y1sEƯy 2_oгj?5`q,'.l?SNdҼ-=eu0[VgԒ/f6sʲ&FlL|&z/ Rfk rW@4"`)Eh0[RǕB׈ ݃%-N]FP 7A?Fd70y!,3l#ѢZOv@J7^(s;\,ˊwm';~Ĺgh6GeJUd2Q3?q5Fըyq/cKi5;mc~wEAIP#)V[2Hqvˎ):=>וQ#vڍJFp$i<^WĨ)bt&HWq nM#0ç5yr[ 2c*ךcxQf /7vu҇dPoZ#; Q|.'D!V; =;:]`$@_!_EL̂53T؆pz\b̾4> stream xmxePͶ5Πupwap ݝ,rsϹuzlYzջj:*Y'GoC%`Fr:@]%@ pr888QRNo[k7?A @ !.H ـV ANU \e[ rr8X8-mɕ`_bV.Nj2Rf`Kr_4_ݱk92߬׿-6NNdm Fan `+'ÖrWCF%/A`rr\*N 0@ ?7:H*RVf%' ,m]t;xϒgAv} )I-?i-WK3I{zC?__ `$%|Y9VnN~'7 ?t-]\@` Y.9Yإ6}))g2f^^4Ķ4?'HF>\dlKẉ,v8>Mi䱈sg 8bG U˯Vԙ&9Պ%"rѦX+`9Op2 @UX36b;0ht&6e_ *6giGN=|^+jZ#^tA!<ʌ|nbn pISl\p-zpS"ō-Qx?!pidDdmN(+&-F~-ԤX_l%LK[v rL% uIA5u&̈́|uy*o25 Ӄ]~zD*7<:=`5*6:2TwaVmPETXvTVIg1ULdQw_8ʕCp^.5?M=iHЦaM$& ݼjk^YU(.9θA kge ;y!Аfkө_3!$ 15"1SS Xa  L1eOikzFZ͎IPZ"*< RqKcb$XUKX//&<ްXnVB$;0hg85{i>wR>dxPwO C%ι<ҫۼYs YS+3y*r-%/JNK;OAf"yz|'cx/TrQzR|J:騜? 5P`LjTy@Rhz0FdTq "wSo, 2:0(g#"}elhA8߄` c9 J_ bD`Es꽮H&Ggb9дwJeU UNbKiUk3|K2Zhtz3q*|jf''=s*=|1΂K2D5$Xty)ڠ IOH;I Ҍe\d-aפSlb> ;kGt, _Y^fĆcvQX Z M>K;mTŔ n;2Se\gtxRĸF05u[߯j,l%@̬1)٬'U=Ѽ.uQ7+;ғbd/dZ[5}GMvh][!JE1d u>HxMWRa6 eHٯ9fp2%&$4١3~qK:ҕeK+Ո8: Pt{8it_1Vܡ#9)R_#aņ3P}e6_L8|Vj[5ᗷQh*ylN:LZ)2;} j@5uB9#DFx<\%H!XnJiq9Q0ƇT91j_m%WfRm44}Y_q]6ƌyi*yfzVORIazHрfgmdz Y<a^+7r`QYT_lJ?O++@ )?IlxU=]kn, 4U|B *u֜Q5׋UsjN^x5C0NE7vy䝈bRsyD8ss g5D*[ֺoK2 vJ $p-$=y@9)K5HouѦߛyZu.@"QbF= 6HtYfub /SVUЛӸ!tOv3dKA"Zp?JYvWN>;"9Z {q%As8;,.VvM:j_seĢ-AU_L}|+' ?6&۷;UU+ӄ6CDKGkH?$v_)5!w6֛p7]LA K8nZ{ `ZS~(I͸/mZaiy)|7Q@G rJ"E˴,W8RRiR'Wt!`| Ri{'>8o$b_0=!#fۼ xT1Qx,⦇JtO:w)ca:9 P~O懄kIp/HQ77 $я\1iw>({0ȉ8(՜ݱq#z}}atq_hp>l𦑽zXCB( iβAڵ6/h61T}wd}Cfuçl6VBę_<[зI}{5̂綂ex=7+7iB5 P2̮l'm튜z7> d5}n %}d`K4~s PP-۽Gn`-y,<8;/,h ep셽ӻ;W=6lT$t½@mbP$N.mMF8X`w)VM[:'v#{2٥,͵ڑVcХP_^xi:~ӠGfzI"ah3LNk>S P]i- G"SuAg)L;^rzW:vhvpUg vi*97!,UНNyxBF>Xl/L:AvUۡGc&zOE48diozw\;lt9bwӋ2 Fx"~y,32:@ y Ǯp2"O`8=0*|H|=񢴦uOc!Y.ҷlsXY!IM5("Yqq 3NPն򃽺u6G3Td').Ph#R3gAApB[E N}oδz:*Z7权mO$LbňWCgB ݉kFⷃ9L&݅JROQ(5qU݀:VFN ,Ts* ;E6M p~.Ux6/.H(ɍ.SAj@*>2g%̩߲6- tYƦCB?/dX8E}TplY*b66ik>+u6 *'΅ F}cxoD,yN-qO!MԜ ÅTqprZ#WZ]_pyޟ84hJ^aߵ] 11VFA_(.{50zI>(,QFWӜAtݝWAc&`hJS)uG" e#7c?G0QáywϞ3nj}0t풺WF+ er!زmgډofA8TJ!&DlH E̒ٚD݂}o$[%|ƒx=&^ZЭbj &A=g:'Q;JkpGJ:Uux7Ϊa@1QhJiԴʪ=u=Y-7U}Eohd6jJ__  K;#wv0;}# @uxdDtX3J2 7ik"$>%fɦhK *rB֯6:>4у>_CM1l}#p9-`%x6G7E#e\4 !8}F=g>f..ӯ5R\9x;7:6 X#YFMi quujf={f[@?&yvc8IJJp4B5aI(xGMC<3 ;$]jKKwQ/xl@%.(:&T0_/,cN(ŔsںO˭h%#3?HR$+z?39'ߵ9V"DuS SDȳBYZ-~;Th<,nʱA]9W[cFt)(,K -'5bTӨQRnMj|PAu\\$ vD{Q#!6oBY̤j-U9èo5)2/fpbEd,ㅐ5ч뾾bnIbPƦ<Κ@\ ?2)VAEҗ1(]_?2&BtO16gO60dk1HRيbNwALj)Jh[rGRO"˥i UfSG^ N+!x!v駂YTL.\2(bS|^ JJ]MCk-"[ohWQ^1Ҥ!M)K} $.iFa[]W*=9eB9)txH񂭋.Y"ZwEtKN1]R <wԧq-;:K r%֎;fRq6- J| w;4T6 .7 2L6})r| Ղ9R1:!#mW9\~?=ΨY`*HPlĉԵJjOcroP={yߠo<~Tz>0/\)=YGնl,<Î.7m$#ȍʹO> PWw%ӭn6"#;}Ej'bgMv;xfs$ @ Wbn{gQY&(~xլ* " ǖ/Wռ*k߹T`,gqލ'haҫ{=MB{38Uq^*ry? q=¸hL4rS+8hZYm+hOlf'U0}qN#`;mmiѫ ^]!0Lpn.HІq[[^1{"(nIlbmb%Bw a eU/s oa|]v#x@^oZ$  Fj> 1b4vQ5rb)A49+PQC\!ȯ@,2כw_mssNx;ޠrPv egqU_AhmXID5,4b+^%<|{|۽id.:+1ق5!O=P/mb|>U@/4NҨ7 0oR;fG+%t}Br}>J -F endstream endobj 177 0 obj << /Length1 737 /Length2 31620 /Length3 0 /Length 32203 /Filter /FlateDecode >> stream xlSxnݲ.v8m۶mض۶m#}9^s}bkUoUꝌHE巃)#-#@YLY@ CF&djbio'bbP75(:L 0da{N.Jc j6&N5{{7Kc ++?Nʦ S)@X^ASRN@). 73u2(Xd,MMfN0c{;LL\  +"(&/Wڙd$qsq_\K2/_(:FF _Iڙ#6qu?9 &fXښ(m\]L&Nvad/?_c!b(vHI?ػ8Gn:ɚX&v6ϭ;镴DũVۛXڙ]係 -M=<.Nm ÿtJHË @ `d`p_:9ڹ?f}ޘ;*%Whzn@zxuFrD ^'6wrW0T4Q  sߚwłpk05l[c9;@_S,Y5ReH;kvT(ZpHs!F aA{p7dGaZWVښ l#iBQB67X][vEX6q3KU4phLS|CmyKkQ+ e<6Ʃg??`*tH2C_{ ;EjI$~O&7n,)Lƞ(]גoU,1jzJ \JE+'nN z -g2Hk;LK5h6D@bz?CA{534 BU+H01&ힺ={S_$A#_"[0/X̭mČaqT^IRҼ6P!!LCVw[ˌwy[z%:{-BK . kEK4S'^,F5 J$HfDYKUkL (\d_CFģrDLH}ӲtS6eO)Ŕ~ɰ_BIHxHCtC8BD*/ʠT x!/ ZȌoq},뎃;i-_U$,JCއG So7*#:$y:Ѐ&#P {G`:L89Tr`YWDpڭ*F$>" zV< .2BM,g>DÎ'ϟڿ q -#FKu !1M[>0cERءX?cloӴ'M.ՙ],IB;@|׌-?<*ʓ\&%[g>} v9K'o,d=0@Y:`)@wyAz7ze ,uD{(;M+@5]2=v/ {8Ҩ}pÄ.i_ir}:Qq ԑ:S.ƍ1k esLzhfid J6W'z(RJBꠝ {⼲\1]Cp1 p%S3̬KwjᗦFkE[=o DN_xDկdB\7cӇLu_, L H56o z0}xq3H ~^5T|Wz c@>PC`$s([&ܜrHp= ޟAg$L;U V9Ɛ+w!SM6»j/ *5ՈS${qiyᣀߏq).Yv,eUؽsTKY575$իah~2ᨏ&37yeR^W`%>6Gb 4B#.)<vu.fqs32^0G\ß)޿ ,y>g;=:RoB+c@A*?D,b`fq})%]_ޠ_I[S=%PyAcI\QU\mU;l߁W&A(qvvUvyk2#{EW(LТD9$JV ^= n$2:|-I9 kˬ˰p(}ͪpí!ɂv̺L3t fR)}@Gq9Ǫ(Zٗђ~飋fR0ڂ (1Nw4U[n"pH#?үy[ˀb&F7#Bw3ʐaW^䛯ճnUk~ ynn}o}ƻuLxYNEJvG[GQ]x/T6&g\M|mͲ*RWwQ uP[ GARZk]4c7d($`P_gyӓt/PoT~zFUg:Rne]>K{LIZŹ JʐܛNUA=k,q(h]&DoB?sƏE˘ikLE{Yp"s|S!})K#p-:zjLI#* I9TJE=kLo}E\c㏌F gZr)RXj_M4'4%sQzOIrT!*FIĺ$3x.#] luFosX EE:aXBiBVgS {r }RmGbB=Vӯ^IN=̬s3!x~_L+GM1A_g|z wIͧhou1 ?^Z/sC +Ö(Ni*eitMLҀӺh~ D8z4#q"+H FEs479~;y\As4[ H^u0n4&[)9'ugp<݂A֫/H25O iX{.DP KwzϦeogE''u4{ ia%T FO棴O0 +҃zF/rpJVs]'Y\ZvcDZ}^*3y3P wHO5N̈́&f)UbyV{oCǮy㰉A*sFՉI iq#)T'C8 9cH/ءJ#T>Oj.ٵ`9]}%z0n:" '딯Wa_m" 1+[Q߿}m[j|z]v?::3}5-eDŽ lƱVPS4j߈}}qG6r3\_ľ7_eB 1,{{[)a)Ѵ22 ؆Ђ%gi\.>-q}ֶי]ot;w7t#*:Fmkk?I4M8Ѻvvm#|Ta2q~v+RYk3M.3֌x-S&؂nac-a nId2- 6rM8lI}/)"HBv`fQ-JkT!A4i[ZPeڇ 55'j+k9׾mli*~uxAXx$p3cYtRWo*6T7@˩0pk!Btm*c_TP,+#ԁLZm\Fm[5g 2R">"cP#fax'xݘT`{COk 3~]G]aY;0șӔI4dGd-DB@MȣN$]sb n Qa #gi](JvA('|>aF`FXGP j  E8{2e {۸$wx ]\h:+yPT)8fO,XnM9ώ!O!FSE HvD~^^ۃita&xּ#krp ZmN7=j:oтJ˒lֻ㙠Nk˼Nk5] CxY{Jcu9¯ܛϘyD yknk\ KNxvi~ԋ%עwSLn|C %l"),|+h'Z" =߶8pc rFhND^X:}/Q6GA:_>Q$‡ޥP{u9Lq0 E3lj1]Mʟ\WPjS,%0.!3;toΜ;(⢭{5qmқ*&c%pʬ@_Z7F-U^D Pa+ eؠ/w)NT ńm;2L"XqƆݹ5'Cvx A3(оĄ%aOz! h7`mNS 4 1Z}I٣Σ8E/S6j5:FvTuj5׋ӵ=3,635MJlG+]ԕB}uҮyG!JZWf%V[ mtN o2<(&c^,HK>E䒤sh*2܃s ӈIC"o#NMOnNP :J?%iѾ/|} ٪?Z =‰(ffp^1`ߋ{+΋OQ‰oqg@?W-ad "0 HCMߪϣq04Xs,'_Rh4]ƞM"ӑ lo%KI+@ {6Rqs,-uxq1\BG3lᡃ-(Au]SZ2/·D1p=K_ `}Apc&n}đ\!6 >_(ӆ6 0s6i*kS½H)k?|s 6 S˹|>>ETz;:T]?D ޢ3v\˙ ]NpbXH5:Do'R{I#͈/;Q !kL's_ F+'/p4gP7}פx08@{ Cp00 !Cd;y!"?9zY ]mRz;j3/;2%otڇIWS N$mwYyUQDV}i>G߀< s34$"}b*e- h#[YkDLl` m'eEt-# S%ʨ4a#=_3viM՗߭70UWxtw(cL28'Q-Ithw"%r\Ʋ]\ܰ%,lA೛M24FMjg9 lG/d%/~i6 +-=J[KhjdS2.9\o51en~q{%oR2pP&ʁ3N`ӓ~@9F1g~3s$getE~k1.x-p]s [qUg1,*) ~PflCoWE8gCuDVrP/G꼘gSaǂvԎsDsԞ7?EX3$-Fk6['v m<ٸt(\CfDx8NI^hv<7;?Eo.Ce1b.U}a L[GqYEp|J3"Qv:n,[0s@ 7Pb>0KX8!V͜Cb֛pѦc&H>F"_xH^ބBAZ{c ,<-Q%t:5i;x/ia = [O8Fl)O'*rx{ ~lNq攀&=q?Zd ]fšt~hFD>"c\J8lױc BbƞU(/3:(DŜ"q6֏dC;1ÌFr` 5^}0Mwn_>U*#~hpmd'ɿg\O6|ScFkȾ@tq(2;DDTuvgïWl8'*!( JoێvYtYubQnMϭI-, H]l$\C W()!q7( f1,dwP]N1Z߽QBkH0f'Xw zOnl%],l2[DQ0o1d=jC_,̳u oW}>}@u'iy@,:}q )h%}Q1GZY5:t#8/[w~ϧu:,vW0.Ԍ{Pn(%iíkj2oP䱥pog %:> 単GrV1ш0жӃ &\ "$e/ c4zCKQ'K'<[j~JBG9pjO=-e ( `/rU^Ff=۩GKg "Iyj+KP"6ecd 8|rn7ДVC{^/ ULjQgݥ\ʤB}H)c!,[DBc2<,iU fy!\<+\Dŀa!#4`KLИk4:N*Yw $ q! b1Pua7qzDŽtkm/ƍIBH"9q"}r"d{RyWF K6F_HH:yCΒzo ɰvpt'%buQie"v)1\dlXqGh ߒ?^<ضDžg"E<&ף4;G Ђ6(B"ar0e˶kF(*'6'T o#h3Qp* AIMnb@OmLGfeN~hyDW6bQ]5ݕ* g#I|؍F{Uj"I?WVZhSURN?5!@t pŭXN2b"riy2ٯ}.iNuu,`J{M?efJ e+"ⴼ1"詠%5<$/{ɛl +ԙV0z(SkRٶj_ טX}/;B"_rmsIyj%CJ:sOK>>ncتؔ8eݩ&zm[`4nd}HRdb UdbI~MF{voHPc ;Py^y'HF9p(wJXRW *[`Z-S1^"M~v൜y^YA M_EyMR@~8nȡf~:|RcXm0DH֠ɸPGdmrKָSraYAy#%sļ;UTK a o+ьobcgv4A`E}&J#>oflNl,mSU_8v8 X:Jhcw!r;m{w2$4रؖ3%YќRr¥$`@e$$ )>v31ٟu(t *ypb킆ﲦ-mh)2ٵ2t8IXY$΋ĝDsfYQh_Ow)‘x"d\WCȚ{A SA/ e$7I42Q?+-^"AIfcӡtWZ.meWxz%RE u++@ߵ33f?|n n',n}B툌 _0E0;r3t}2d9֦qlJs'ćNyE[G@qF`Ź,}Iy. )>aJ 9PƇq8\,rA'֌B8RLRK9{p6#mރwNnXRFD^`<3tW&sh9uRJ^*CoYA\ 8i▗x-鬂0;\<8.*ѭϧs*3[[%ܜS7ʉx ӴRS]Y<98ZڎK*'tKZym%7 MZIioaThL%, EsǾ e CA?J`P 0DbŢ۽w15==ɸNpLʬ:-uY0@chY֞8UE[tZA2!V)7ֱQke4mE30钕n!3p0$ .1"]jbHRkcsǁq|Tj{{hyXQ__`~;q]8/MRB/H^z ƀH(A2NQȡlJTT.-g^;H3-hID2w]I (kr_)oΑ/tɔ@GixzO;U`rz)GO1m$ܣ]NȫUSn8B. g36/KWП)AaOik-)6ʉ75osKo /yZͩB+N:zfP{yKZLQoīw7p'_4z!KƅW9Q6۱M6.4RwH`бl{o` L LUߏdbK տ[ >Auyp ie/cai7?;ubZC#50C˦Pnɛ}7˖Ū#MBzޥdW84z _]ʕO7Jl&ʕg4낛N݀kR7ƼPPm=[)rTܶ~|zRFT}3z14}E3H&*xuݢgSzACW<,8E\'Ħ YE yTpWS8: FϥȍCA,~Q'OH,meꐻ^|`ZF5/=DGJQs^,GRw8SEup ܹZG1z5E1ޱYCf@5'‡o~> R3ͪY&y6+&0pߩ{t\um 9|^IrwK QϫxؔO/E:B|N 9P[VRfx һesyȩb|JmLrjطWnfeH*WZDe6X'3jhS1e 7rbv;쳿8A(TA:tn=]clӢ;?)>3lrJ4N%= B\Ȉ0]'?e@|g=Q98I  rai+1|Ҧ[13R-I?9XUTZ).f6z>/z3X Myr㒜p0Q$G j%qKݽ4\L 6d! QU[|Jmc OG hNS̀}h̿戝TGVM[7X6S?a4]m΋_=> E樺6q-VpI `4_ifw;agc@GaBeZk L;#. sd}VrU2B+rᜌ` V'zˇhXNc sV$O?@ ~9*sy~S+f(Qð;z$c&a`l4$,(H ׭ȍSWv"<}Kx]15NCiB%\QϕM~U\*Su!yVmdd PTҼqgB-Qo;ZcwLߴT<{<#0 ꊝw1g\j̈́[:ٰIl6rxb y"%obe!- =Z'G`ckIQ q铊؜ !6̂s3C[}^`֤q5")2?0nլ}6cl{RncO0s.-O! 6uZ`n7lyʮäu2,!-%Nj`m$y6"GU&fVR9H9> V'C'FlD8q0"kզ -iKpӆJ@]8k`>ؠPHga} ߳K]|!+uvO۬8Gb'$=njgc6"!W;Cr6amEHiԭp4um|_'idTgzMajk`ți9.F<pw CxsY/t#`E9Nz33"ЉwOӦD<>kR ER׸/O߈3:Gus @`/=녗hӳow; .U$fR{z>(-Cj 7k.&''UoJrJ m76|+eR$LF^4Wa6c&ӷ`v!ZH' *'Wo:_ +(p<6QC+Y8So Q۔6Vi2md$^~GT@GTǼZ,O= q <"W2@90"0M'^ ql=gWhM# {ilOΑOq۩˟?LYhq;Zet^j3* j 5H(ý~ᱧ4$2e -OBM[ЗS49CR>fA^ЧYEnC k 6fQ ,V,1xyT^]ҙ(c_7w$(QnH:cԀ3.[B<|?V..mt "I٫3)Y:_>(,1#oY٪C ޲5Lv`~1Oc*g̡eH4{M\c1O?fߴ3KGϣ\&U o+GhDzsz}`KKb +i zBVA B|o9kk9N#DK/0N#j^I`4D]}0w%n-C!^{{{V:Z ھd`̭\-1ͭa O^ρ幨uӠo]1 N}uiy3JWeA踖n9zqs"o,VI'$kljd]*)*i+^V*fiFDZ7Y L"è )dxpm]< %?銻-jᄈjS Zf1c;;V5b_(l?4ļŻtjbIb̰\W}li졖N`7hZOUCXDwƪiߡnK8od-N/n\͊ Ҏr{5?J^:~dbt-^M dA Zr)lj?krq܄WLwUSeC?Iۍ=PĘfR"B%R8մD&WTeɅ@c& Px-^,"r,X|/8;#G2h-4'0t aOrqa}c%ԟ@Ū2lW"~Xb# J kLߍsfZ}+׵ՑWف2IWX-mكB@;fN>R`"ʯ~Q\cCKL M4LUB  y7;[9WF3)屶tC{μ4^]/ `>s1S^KĠDp܁ݚۼz -w$PAZCdc>A-L!~3Gw5<O O;%})yqM[Wf$.N =Pꄁf6XzBQTK[3%rh[%GƩwxuA%VMgFk4@"vZ1q+Ҝ#EOj^߰~ խ#Bϩ/Sx:H_Bzo/-&w(Ş[_RF2|.߹\Xfy%OtwdIIu-XH_K&P:,|ُ=rga>nњ#ߺ@F\I%)TÑ>kOʄq350E Mh.kRh1iT#)Mx v)I]$7'=(60 "RWmp_3pBCfY t巿v*CIJ C=ދGHMR$KB4E&s)qn k'`" !ڣOEd҈VyXsh\'qAX茁51BYX<25(#'hcfmon~ŏph`LPY*e[a:mU1h1[c[JB2S.a .|f59:~W[ x} jtQ"B|~80{l!ea"\9=0 Ǚ08( QVZ)3^2'C"Nan^5_)f:x4ybXsMqKp UdcϮOH} '>i|"kw=fy5-9F smvAT2 &RJӖZnl}zeqNQU*!K߄c;c=-8@tw3팜JL)}/]<\mWǁ^,4WB[p˵yckb0жd&Z89JnDzrH(ICInD2U?{cF?^FƯ wf37dt$~gQf-ڰгczͲ&_\0Se{#Ach]Lq}_t.Y¡EL.wZI rdz~vk{Ur&r~Gd̈́yfuI.}Kzbq%σn+cW b`qxYg%>RzDsDq:v8[@ҋN7Ф<)H\5 <:5SH7>WMVۨwʝARÑd 4ݴ;Q&Rk8fGin4] oI]Rn' mB񞞿GL]( ~že#rU9 ?C{ s( fW4Zi*I$ ?Fe D#M-v&{wti@Sv %#:<:&jhN+j6yS\ NgH% ; )Z& eR0 z{^@;E҉:lA)Z3wjx$rNM0kmc4M0->}p2d!{yV 3V.XJʯ (rpl@2-Ze" v귿qĠOܲ[)\dzm3XScV\̜ct0gYeR̂f)AMc~+xa$PS؎awQ*;I'O"fRfuKe NblIjcaM6XuF6GnZ{yN sݗH< }J;F`5+h%:цEm+[&'FI #7ۅy}D }9=-djD4ˮc]fZ `$`Z$FLjFa; d[skHqmGY;I׹oZl\],?]5 ~ B Yf zX8n5u1JvzMre,|T-[ ==ƶ4[ͷ8#.x,PL sɠ={^cC^1=3Md.k%1fnHꋉi:$[b t k? twJ ;qRt\B`w#I.oR0hI*$O&7N*f92ZZs<]"2e8,?UVo+z'nx{\Uf$7^Jhq>*^+ܕdo?NքvCnkl[7l"F_eC+=3 ΰ)q6j'd nsΆ%30f^O;P3lV.ڕ~] 3Ͳ: ;-4eygsh{53Z%+Ć$"h-yKT CIȌzu>hDYt )s&UӰ 1:i-n: NlZpc6YF/$ ٬(b#{TcLFs7rD2;> aO{8CB;];D5 1WY>%{~9ܬ)nY/4cR7%Tń f%$ˇk"7B@Zb6\;{ SX 5Ȕk I3", nPswJI`{|#<:99J:P-EKFeCtF4pE۰yŴ|YS?uw8D'bͧmUR jפ3 ۧdK(.5 95!2Ȯ1pʯs&pA(n4X8صf,\Y&3{D³8. AA&:a 2-f`JU3~B:rTMzh 8.k c;8vƵ~EL1s8D7ުl*ר-73#[2t[|5 t9ɉ}$ԐqU=#U$M3C m-gyP'YdL p>%% ,'1/VZ#' :fHgK9 ԥft9^ AOnޭeKvV f-׷Uh,;!s䱁rc.{\~ 8 }1W@ѝg0L*DUX\ oJ3ۚzMK=׹h_ev#>th< [=8SumSGG"{Y 2#kX~K/|eXJcR]WM[Mi޿# (v H7IOć} 5xzGٟe3.-\9LqF !y3*OI~]IAxl*9% ?! w|Q&OEX7KyVOt/WDɋ ?Og +L~cP?qM$Y8SӅxo]qr9Đ%9slma.lȋx0nr!秵YJ;˓`Q'dD|ꀙ;:klT!Qx'r>f&y)mg4٬`A&*@ IPa%>#V < #mT {uo&eVgc>*QHy/abmu]*u4b5"93³{r βSgRC}h/J(*ƔoBjI!QD"-ם@J Mlv?RBkT ZYd|ľW +@{^FMl6ZX sMP:[]/pmViJQCe›ey8RΟ-U?\֟s`r^%sQO:DWӗXG3f{%4%,s~#Op$-9C%;!bж}) Q'~`01Vwt f*/?ﴊX#8m9p;J*J@_*q}d!Cvn1q<:YM4CyϬH:YwjBG(׭jȪjs\f=T%9Eɰ)4xoV[Biq la@ jaMEx8U={d{Fl!+,f+Q<2g$"%gv!KAp */!֣匔1f©2ڿc"{w,g\y\nXrYU&@_J +R󈫠jF,2DBgR4J!4gk&/iB׷8^@gNn!3$QeǁlkGJ)Ume(^E馢[#\tì3*J'eieǰ֦W@Ǣ)ADuLNAp_ F J _%]=-E˲ dj8~yB*i"p~OvҨ6sP-:>ÆL$cV< ses9PnQ [W-/N_`uWֿE\ڇXLEy@"$0)).0ro -&7D QU3k5  MàIjlcNC{[nߝ:vr10>nJn+%9xx}@/X2 n1AoCv17'~ZxWٱ"z=&e"},"ИEHMLyDpCQcڐYASqf=rj-vQzhƢX4бonALZ.?&F@>x 깷+\ڊRH7E R\&9y}*ތژj\Dy,Ev:a"z,˜TUTG!ۻA^ޢ \ |Sh32Y|a:BI'n"s7jYgUaխg$MˎӸQGj{ԭ8s[4}l%'W$0Ҵd짂rA67S ?b OXկe+Gx*uɇ9seuXnI4$pzwex?xS'UąTs{=nxCR'*Io}eӟܫ1!;FN"ps () fC Nkr;_1oU;2MT\c?8AnގWV Ny7wÓD" Y 59aP $DGb9!F+n:cd̊}>4.r=XM6Փ78Pq:'߹Ie6Q-2z$b IiMP Ni#@A{X. xR&4ahx3g s|?/LZ]4F__[Fu`ѐ{ V9x~cb`0e hiJyϑ'ȁa.K5yBa3zO($'- <$ &bC²RY96`yŊfS[Z\d#=\\{iT3*4qҲAAZTN=s,SpglQ?ӑGIӇֿzykL칖v+I( hv6-S8[K9e$wP R&8'.UplW[Iiġ-C >1zVv #N_<'ə47Y✥;fdyrssLdW.ڽŠӈGt]6wB2E_ 0Ӫb+l)ӛqAx쥟C8]s+Zmmn^,$t%R+OF3@+?-9Ԙ9,!=QMQoAשс QB^[iF!S"3:Me >b6-,_^IؑͳKO}!y@cj! +YrG)}*𦺽>ȄʼadXWB:%Uh,5c$ªfb0w qb:u{f޳wÄJ!r@w]h:9R~elYwv*~b&hFqA3OLYWmw8FEpNU#tĵ'`.{2D ~(OM .gL ҄U:Y8&}6 gFK/G'2^S)[߫8v KdOխ[11 G)\ˑ v2pQ)<@hNfk@8A ;ڑ[(R%ЖJї^in-  '"ޏw]vcq%[H}x:i׸ Fp`3>8K(_) rQmGw@ I"_\쵖f`{*%89ۈM V<6vӘ߼iWfQ(ț?GCq$?eԕґ$'H@|77*ۈ vYc~3c>H 1i`U3۶f3B4|!&3:%xv Z ;/Ј!"hU] gN.'yBgZ Ї'Vq[cxKP2LR>xwK/[`[@,%'A#W/#1MWױ>= ^ťv ߖȻtUL[3$&)ME u\Uv"Gb(pR--<|G[[ YSnvئW\C>r* sfh5vLwv"L̶6tF9,!nicw+K/Z=Gh%r|7wo/6%Ow³ IW`{MwoOQ|yvဓ_ *c֌T7 ED?r/ڳoQ=4x(^qsG=Φ |A5uEF֎5G[%g~b=+sFOQ_+LF3g *UwtvhE0* ˉQ@aិvn>AEq ,UQsLZ1$c{4*=zĭɢ:Zmw(ĉLϊ{ daImjNPHxMt_n a≓X(MozAo*h yU}*mab?.TG7Р2Lۙ5ݾ!ZU?HfFW?'+Vs Yf[{ El, %4!5_s'$X|\1vdw,CZ p ,GN$_~V(Ɇ$KB>1ij%|J5.TMߋLӧ#d/!I–c`<=pe NA% @?=,I#*d*NmVٲB\WjC[ DH7IxM ;Kmn3!w&> nWdgE㒨`QpD!rrDX|TLnLv7/#y Gl[h0l0%J8ڈ]LݚzLJèekqy(Yan/$9cCdd4nW9 #ﭞV[+0E [ Z*" Ωl$1xS{eJD4}cs'O \Jp21NkRHHEC @P0Ou>{`2~o}Fɺ|Q:VV]Lxa ^t/C`»V= sUsYq]?ri^RD.R2@*-WoQ#v0{y&߳69j>2=fRZb!.D,z O@68̰۱@v#@ERUE0̧F~8%lyVeZgNıH9]_DOA'p)35G!)ACթ3'y!"3t4ihVh/vd*+_2ΜO~ uYp:jae-  wΎt&X`ڡ 4)%4<2SсdKP3&;](g`\Dd#E}sDdN<4H}l6G5L'(GUWV)y ̉ XщBwS)7jIO۳=Y *vKOΥLͧo1aU,zXbKR.#aU:Ɂ.9`*0HjiK2 }xGVνYng8KvH9)cCwGON>uȂ|ꋳN]O BE䳼@5/aoۑR'ʅ.E[&"]d~OBcV ~HFQ͡}z 4 c/xe(NojGŇwBM=ʧbCD3`) p>\8oMi!S\|fM2ANh&VODh':ɷFJSiBR:$r Ъ\PӇȟPR|)*CF^Is6ި5$&b@d4-g}XZ y' +(%c_J%W?'jiH1?}̫ڇ˟)/GS܅L+tyilsu*G/} ce fnc'EQNS%lIXuwUi]9:ygRf%:l% HĒB6w F39l6SHc0 o`4}8% #fDs߿$˞`9,]3k)GhhP l/3Mt8Dn~isEo%`fu.SwzL`b?|^/XB֡¸;u>cl>1Q*zL&Imc]8[as`H7S!*ag2%|%upa nbBFX*[ e`27Yf FJyWdՁq}itmd4#(\lM8吓m+h2)^X?B( P(Ƞ7YU283N^kB1Z @Y+ֺMjÑ NZ^䢒d ͫ)p4:@D /9j@6T,Eԕ6#\57J;`(>D=$Uゝ÷qpN_;sgPt̳ 3ȪX+s|HjxLxֆM}pfkYAl7ش #8NNh`"$^7^C|>K|%Q'!yjvvZ}Y~zJwv ^c{b"y*)`{C([-2?'1Cn`NH%@X2TWr50'?_OYZG.F҉2_f2mRDfx> stream xlySpͲev׶m۶m۶m۶mk۶{{sNLKbUʕP;6  -='===>=- '1=>#>#== 3>ſ6vvFܮN..lR21w6776א'U35q4Ɨw10—02u27sķodgkl_hEbv62"r"BtBluvmbl_Q;Dz6e?YG[P F&fPt>.?ѐ >#-?7 lq 'Q wcy 75GLc b*O1N\NJMN?c𯴈?8'𯴼ſg?;= t%(hEOȀ8::KJo_dbnbwΈ+25Whj~V_jpmV bXA+ g.gjW⡅ dj: \g뭄̷vC!\DH69co<4sVECC~y(NғRU ¼yH!_=[L=Š0{MKA@&3H.,FLϝ`eu}3у#C.jXc;iWչ 4lÄEz5Hka9(z[ξ1|~Zоr^S0 %=$TT#z(0J-us꺺A. Oíw!7^-c~O&EݑҲa-1 D8U)iȌDL, 5SH, Z;zS;$0G&P!g.%O$y2&*ze2/,A<á{eo  D Js0f^G_Bl?{sFvm(sQ>rVO~uѬ*(lbDS*(X> taa/8Т"^f)Rf3F^v- Z?%$%O4}Ov9ju{q/#jkըպ gO|8Si,ODAFaw*| "1 IF<\mjbyɾrK;b]Նd)fBMl",e:55;Z~ر@f ;e`0vƸV<-~PIIM#\n7ӌ24rWwK]!iϝh8 %j.Jp>ztSi psl<z)( CR8כ=b撕T_s*?@n N,CWNP\z\8j=aB֌d76T=zA]ܔa^S[!d6jĔ9I]nEG:\\K?= f[P5׵wohbw͸CHPf4XO_F (,=}Jva OxQ%5t/Ce[0̌tПuWm({YxcmX?d?D"$ݭ/Eˠ^ܝ- ɨg X!nun|X K4.f}o{3Ҙ~׺D%u}kXCh0@PGz|#xj(4qτCRd YΪ֠ IrX/%Bp,ANVkH=(0ØW峛WŴy~5n]ޢ\5EfvIK,)tdgEIoƅ&k|bM6sI1fO>+rȁu}zE3 q"PfCzbZvߨGm;A^1Nó^b=փ3X"iJ6ZeR*!pD-M8$bl̻U[p).4 $mXlhKU:Vо@B:ثKڨ,Z,k[;o bѦؾӘ$e۱])Sfi"͕z#<@h($ !*ALp "Y[7md5;d OzL*oEy^S(rrPGAbf~;J,=(mLiCY3-My`v:jz= }@, yz8d{^x [nv&ǗԁmNgNvff2VɄUDn*_l]-01ǨA-*4m^UfC 5)AVm0*^n,Q- A`\zn3{8t"%1Pq_;\ܕ_8bc[e5[VOɈ[?i^j IL1je;rxf\pLoT8.馘Wf%?*}H5>Gmǀys)3)iӤ<ǝCeuQ.0z Lןe2KyZ)(O@j*Fqo x]-2lkLSͺ5'vQycsZrE4ȭ 0 Ń#lC.|Jw!/$FbK"g./A5czDE­W i!;1v mXA7; aD0_vC_MZ.R=Z˅ B[+hTyPE->^L[]df.]o*]j&Q_Ge=|']ky0ZYj _Kg E-P}Z1wDt5Փ/ZmEkN$' R|ۼ5H=%jΛpJi &/dv$nhN(l -U7^OqrZY 54. +DS0?w֭gnC˘Jk\T/R Ѻֆ˾/t% O SD2ydz@l_ SOv=nCPa{\FNӆhWM^TPxO偭.cC w6fdj8eOJ^Wq:a -. gO6 S]:)j,U˾T%_8#&$ ?ŭxϷt@Wqj‘7⺭W ldPai[7n[p8bU$ǖZpͶOMoC- A\%Zn@ڷ~;LR49G^cD4n\/]xSlU:u(v}}k ĚO Xp6k"&?Bt+ I:Y,Ǟ6ۏᘯ;A>.O{>`"؇|SguSaBj]锩40neyz" '?YpDuP3C͇3ކ@R"0-4r9t V``0@9܈3W*13f%Ӕ<&ٍ)՟OŮ\p:9{{A`}( uMcwTso0p|t`/(NwT^Dc]] !n&SN߂G B4IKā!w!hMȸ=|0JsjAK^f9t:o6UJ+S f{-*%>!ߢ,HfPOxdOCO X=vw7HqAFۊB.0uzZ?ӵ8Q*!0 c a[7ڏ%1?Y'!:Sv#ZK 'm`#’0b<Ȗ,`鷛g"PctK6EnCZ/l;b4n>}Σ<)gpH <P5mkãMj Li·I?Ć'C%-6i۩u2僽=7ԢЛt J^yUC#6J)@F1,ٖME2H \ÿΣ{ ВFWX10oK]J㤒R-|P5^.VM+a}90dB0ƉK|]ALm*(FBH9Hng-_CoI6_iDå.9 7Ct}썮$WRvy!a;:sPI9c-O' 2-z/f2{ ;ٛd,ѧqDžXFg1Xt\(e6Pbt@b; #20@_ '"ί'mVH%v:.sR^*ȑɝr< %ծlB0R“<8hEچdʔ%M1v? ăl[f%o%&0.bP}ؗwg!(VU2,#'tB*Lǀ|#$F%j̣6;i bY˯@}(gpsA? _Kd/LUR`vQL Lԩ bʔZGU}]1'ybS=@bGƂuYݗLXdvdŘ?LclHtPHB/Gh`0S &ٺ-Ty{]GO{"N&L{%{Y݈x&!-74a)"hͭ.(s- 7&(]d3u˝ e~^=KXOǜfg ^DooX$:03OUb=$0MaB,½L+815eU75RK@YF7ܝj(c !~0; 7>Ә{#Mwni Y ˣ܄X2uez[WX2Kt+1bVLd]0qgM+C[= q,>@d_wSKU_*άI"=03yp\FSP?ٮ>Jᣘzj,w>e/\rΓJF0ڏTrXOS|dҙfSX% $Qp2bJ!#)wTɇW"пM.8.[y3s.3PۻcW3w c f`mvš>R9}Џ}r 8+LW+jZޞB`Σrl#ǻ/,d\$=qIqǚX)Z3y޳O7[C`}@3KAG%n{[x#ʀUɰ;x&E$ OJ<&F |"Xcu)TAZJ WJpL|J`8u_fNk \P Tp$#agl *cO3闛I>LKZF9rؔ!J3,Cf QxF[f_@kO&h=E>-+"ŰCk\)}I/<Іq4fD3B"`ˋ-VAecW*=LKڇnO>`!H?8TrVh5o`SI߻ uQo`K]칡n9cP`E ,ZծCQ5258 n$\|?~fm &̷ ww2>SeZ,TϟDV J2woF & ݹI4tAa3YDs`Q+m׺̯v)\+'/M+4wC+3Q*ba"zB/b.LjC%[(/r#H4AgByYfի뗭kF+֙qjm{ f:l@)qmŮ ?zP2k-d!?ޘ|~4(:W~dnHZP?i3 )ߓK `Ͼ2tb)>*([Hbwpn ztkfG$G^ՀO:25`gt.v5B@>g'aS}!wtDЬwZ)s)c;i˭.~E XMyY(K5AdY< }_S;;8M߯Kr!CQ H?#;`39oOX~|"ݠ'l(&4"fGEn4=)(@ aY IG$f6cX^ `rP-CDa0Hq.|.beXMaGiCP[G"zg'J34Z J.LT,/ Uf!˼pIu_ UHJ8SHyG>JV*gj9QCgP4;`-J)f*HWyɍmSe rS'ɝ<tП)Ϫa!g˙ӛ}K>b{ތ=(ۚLrYͥSeo+k!a!lPr{@s6Y+̽GL}Z1'xZm{d  fdly~ZiXhe+^(mL K6O" /pV9)4$Wϧ{Q@@}S6~MRES'"Ӵx]<4lz#[y"E(5%8yKk{SL lO8[#ZuA`cm޺å! npJ:GO9Ǟ42<3'5 tfw9dͺk5] B} : k‡5\m6r<jGw2 + '|m\=3klaCp~]qGo{h^XOW7geꤗ%a8 f5/vqw뭙%HmՕX)1]lX#!m?-z~5"hZE^ah<ؙZ+{G?Aj9W%th18`2b105(Q]UYzm\!_!֡nٓ,"* wǾB94M¶ IOF12{;O/ Mm۾2Ș􎨫pjFb=yZ9=5x贮uvmEb:g{v BFo2ElylۮZH8 {u-M$'/_9VSkU}Hw% S~: 'B# 8oI{3&P9Hr' ~q8x7R,Kp=o/6QĈť]m'|$к*LdV v#Sh+dw^li]&9iv^b˄xɜFBP2A41늈 7=d1!* a>r( nօKS37>Z>Q`')c_-%[%NHCro1P['Kޟ xE 58YXq +ٚs]W&Ckܻ7%'c+ ‚$+Eh/iwb zN"_ҏQ΢7_L{[wmOk&T>!L4d[=ԈWG9Px&Ym鯚S7ioTJ34k;qqG΄)\/衵X\TuIЭ+z Sx: 7NbߠPwS+\WMeCcNy2lB8Э$d$`;]FPG{vtn2;3ƅw9yԠKOl#.\ͮfr@|U&i'_}2&?~y*M.rЛB**oaWGT[&Q!q'p~cWOJa=sFCݨ@Q4 s..!wTԧ0&XDKREg 05EJ}fD/ոG>{MUɧ6ϥB|qwŁ}+2H/DW/>#K[bn=}D 2 8G!ʔ.0ȰnD/pm ,lJχ1Y~ zCTH[rZT;LF9qQtnl*d9Bqh/l*pzZC:웭_gO Zylwq@ȡt3_Q2QYǵ B‡!W6\hH1nbޯEQ"֩/t%4.3-TE)oY4cuy]R)Lm'o'>j~I3 ć>-wNk`gm4lW%']\ꊧsB>#1PQ\'V#'ez5lnL![*6|Al^44/ ̠`q);Ԙ Bb\oVSrxfev*F g &t$j'} t3`+H2_^<V^fK4nl:T鎧%R(S%LSX`9Bt:evl μTš\eM KdOof%9N||ۈD l,f COxfp\SZ N)jv]ޡTv1Sl @Oz2좆="@'a$gHr/Vs:3 bP.ZhaHC•96VL>24إ_Mzi ,i\SLLé1qTjE/Hԥ-;(ԓfP2l 橘q<2ݿ1x#tu|aw{"c!UxSys7e|tD.- ڋWڄX\838|CY/:G Du= pmoJoJK*C["]0`U!vx sOumul L;-,xV{Q2f,oW*Vjvbr R"M47"9 {6(BnYNa 2$[!iZc'ٰ ohn1a^lXi;Mdr]'^R#w9;PV́W%R>f5V[Nѭ*p7 ʍ7NE>b/?،@UXV /"O9Y= CfՃYl)O(' -yʹ*f;UsRsf^%~5%|NgՀ1iH)sIk"Õ.*s \QzYȕBeo˕u-ލ:K~@xFSHl*p: aH,VU@|S7.t*jr e6i/g Uy/X8֫sR]ܲյsȇ=V &ҎkQse& +w 'Y0ŃS :|Ɯ]_K ټ!$l :.Ym}ChIZ!H&iF^>YBs&eEk+yP VNw}1z&nF %ƴrǪZ#TQ}9a˞b8Z-/\ʕ67g^#F]imFvq(e[yş-:<%L^_@Ud)ޝbDP% >mue,_f01qۻ|Ǭ=N#KO`ZIp,2J/^̆;?yWUw_%Dx(},k[sHPAzvMwZ> Xc?2uՖ^~g_Dbs,˝Ic.g,:,1$Bc@֋C9 &ŷr)7̛82^=*OzbR'g-|]!ڧ:¹յiN|F77F} +vGulk>9㑶By>sj,|Qos}V1߰hUƘSB6𺺕1 ?~x.:G\tNK<#:A~|t4&#SaSYX5{ $pO M^aMH ԝ(&ͺ-v'bD` _&sJY~xN6x; s \R$ Ps9Ac M%ǫd{V;4g A?KHz+s(. p~Idp*tWˬfK^;=^r"˕^`ms{D(t_I.<]9yei$>WahHr7^ߜ0DtU[_;x>[C#ON%!h:W3B"-fS[He{ao/|m!_hUe!;hce7 әO*8$83Ke⨿1wD~j蘓wKWkmX)ІIblEo(_#IrLо(xe ApyRXJ߬ze3W?4ЃctgQ骍L3_C+XY*jkeH-Y:o_Y{}L{UG 8o´2<ϘJIB>Oji00ƪ[J#-f~-3 3 gP7GO: k2kwPeps%I`óoatCئzUYλ+ =ʈJFoxRlV:+NO7,y6`kJl> Nc܌y>{^ ˋn&;xII oakM&-Q&3Q棎w7*+}VǻJ >ghc''W7LVM) ܂<2R`0ٷ4\g̤+\|HgqZ8JhB5GMԨ.Oib<ԫ.&8]D=h~}<䫥˸c8ƚx㴤q*l⇉'Ե˨vMkn+L > [@o[<ÎYJxxh~ף~̂gqi0!rןHuQo%?p4?zS3l5v,8:|hL^ ؃3=T2/޹{f3I0f=<,wvPDK^Rk29e_6"ዿ+DnAS\.4ͿN(2 C5b'պ/ݘL}.{C'EĄpdaJ v )<䔣rWZC>{j0C|i=&6mFYJU/0|@ˬP'֍3W**MC:~} hba${؆"oޕϭ;ߗz ɂP|3/)RoEbQRL1j#[K ߾yGEPfe0b;,xI4Ÿjy4]M"^.IdžP^;CPr. V GV-y Ha0&jb :d @m"% XƎzϢ*|]| z93VlSσe*#0Ӛ(RH+&y0] ,cՕ<};> )Cc}-SF>A- L4 p;u5#uhAVNGQ ]*8sH&4]_Yl7e5:pm9 `8=ԂqQJſbQmFgKRFX2-|N;;ynF&c#:jonBZ[We:8P7{.f(ZgPRqtdݣhϒgȉ gčm\0Kȵ"#)X [k?KQf(E y4ZGZIǗ+&A\4` =KZ18e{~;AS m^< EMY:3Ӵ)0l -/5f[B wju9ӧ7SZ.JgOA\ ňEde gt8b2PX FT4;NQ endstream endobj 181 0 obj << /Length1 726 /Length2 11327 /Length3 0 /Length 11904 /Filter /FlateDecode >> stream xmwct%̶mlw۶ձ͝ضmIctt;;oԟYUs͵~TQJ9ػ{9XYXjR견l<&vJJqg+2l6VJ+HOikbfeg tupZE]ܘ݄nR - #( VHA&e7S[+ @ wv@{3qra;/1sg;:@RY]`boՅ/tWu Z&Lk7o `ft,a37r@WCZ/Vwsts9@YWfbgepQ{1r0p;n"e 2Sr+_kݿUo_m޿s+6=WQgI+X{,{?> &V= ˿,E9x0pX쬼^N-dK4@ ڲ?:-d\4ܬ2+Lߕհ:~я@S_;d& eR*ou[/*ύPxv@E eiӺNҬ1]h wҴYH=Z9ТKS5_HWxFEẕ'TrkTi>}NDv8^'#O(HC)Ὀ=$U/ -I'Ad9ZM2.d3Jq/1.(&T A_V7`qfN !wNW(NuDg6HGYVb[炋Jju}_3KRtY|ϻO!)S ˺yJ4,UwShWDqT3(@jdηO>֨BN DĬ::OQ)w4IJEW+l[~Ĭ}w U"MOšF4OS^[ .)Kn Mׄ>;:C,;+F'XF=yO{PBQŽEIfrӗPl6WpIOD{z&JwC[E0 MJʳ*y3 Ju66W}D@ VAn>SF)qjRf?6k\ ؁EwofM!R]j]#Jm8 ]$c^/aÑ{5^ƞI î_nbYkdczLj.ha$n) WSٻ<|yV;֋1k-2Am8#VT*[>q؋5RD [7gc}BFXj_A8!@icͭ 9#2Xf *V "&V5RAIBi̟ӊՄS8:0TvbE.Ώ4J-p0Janȡ4 ^NZ'duc0#iFFyæ~DxTCę(9- TYxq9G>7WKl'69Vk(s}1dԅn5{HlGbPe"Gl66e=ڕZ(j-.1n֏kK6 WW&s,$]i#P+/rxJ %6]DInr>ST㌍йݱ92So7z2v֛^XtgITUNTX:b6zhTYk;g.2Πv|ߧn&%R>4Bq񌡌(*聦_B\; H3cմ tHғEvK3cm {[Nrj+:}WwkWX6-u숟k|T`3/S5bqoCq%1xߚ"87MB˃e;=qŘpt~2 NgM|v\k KX9Kfsyiɚy`\''\dc0pcѱLȖf{")\s 򸓪f1i-cb`?d@aiO:'3eFr|fD!竞҇$e:~|x|NVP> * BUJN2_2_D*ղ~e/_Y:+r1UbP'˂"L-5 Gvճş F- 4N hHY~gב ylcr>ӟ;t '4no<ܤѹ͇*7bz9<1$ JK+2D,sPy.Fy-Gŗc-Z!_6Ɉ8QnYy2Ͻh\YT3Fҡ,xhZp=rSE>wN ܆rj7 odx#j?ianM5m#(nRFaWCU#:5MoLw:xJ ]V!Q [C]+ d &# 4uT%[d|rf-'pЫD+2} f-*B"dc@2~+LDbU;47nl1 3-6 eDZ$#zϝ@v>NOeL 'ڏEт<[LL*^cTs2+z(̯3CQGVbiyKQt8kZJ3JVK\ſ߃+ 0əQrI*dr?ؘ:w7Cb(>X{oYU$cz!Y1{xZ4Ka6v'dKȵntG wT(4*|xyP˖$*Gw.ay:΢ TYfzې3h2•y\GgMiV s淍ؒ' T仞0KRLVyY-Hs;yNumE8ǪC z{glQYF0ך)z()a$ ߇ =)K,Sِ%ՆX47%+DΦ q^AOCt oe8rv]ϼq3qFu-}¬!T-yU ޭ>$6mD bHeĂ5U N{],_7mi쒤k4f1럇W(b)B1BrJ=4&y)`FѨW5w!A$#N"IJD?mC_/?|UKZ Ebvk% ߩ"'՘?,voZŶ#j Yz^jsJ*! N'dNvCbzՄ+ֿ4g FCͲ8&]T@ <y8b)y2@_ElNE\IְL?/tj).Mê2݅\oqۑ }zuF]MBq9c'L (}19b3z`FGJbM 6syx FF?3[rxw4ns @VGJ&Pfkw>{E >(z`0zU OeOe6b]xC?;Z)[/o },o' a-p$8 =x)ϔJcj@a.Td[+S,xfy<_X\T5t_*+˜C 8Yh΁(.BC]8OEMb)IDL ;,CšN:zζ!`h |\?׶\K1I߭,g5?q+l@,7HP eYu+ɭ /JMl⊝ T"yEO7& Lvv2/&4Wy\-xGPx=^e^S$r^ԠD7ObxuJ?B|~Ø4t,Y#ˈC;al=*%왩e-Վ9~ T`:[+%{&! yoC3&dD舛ͮiRUovE 4C. qZ_X{qo"{ybsCg=G$ߠ' u+P1mB&8zųQOgI`h~;B \8$Jy/ds<"]G$L аv]dإ]X OH24 l|@h.|lBC6c\N)zL _-zR3:u3C{v$0P*]$nzPd~h * e  \YA$_.W m/4-^px!7Dc2N^sH2=m7-:0LxMj4SZ`1DTMưI3/l'Z #LJ214VQxW$g#ȓ m.sPVǬTEʎV$=S`z鑓p 'K2ÂEPRIIxU"4fD3]7$7ʯR7~S1^0K=>aӹ=jD'/Hi8ggOeo5ʥ ~KJ1.x6ȟx{T#I?@agJ;)۞?atHҕՖCC@Ca/Yd᥁T\jGN=i*q0R< 8gՃ5MoBlxg*a[IU6b~ c3M>X ftL |h#^iX &.m,(Ad0>| x-IRd2*fȵ>=Z(H Au='t*+SבHf[=v @slFGXø6,k[LlEQ*fœ =U@_vV\b5mYeaߡƥgEu!&TB3)-[:=4gF]>,+ AMbxI{ >yLmvޛev"TEgߤ {GcBJg|A1*Qsŏ7{t E H eJmH7@jw}SC("?nCmur;J)RDtF.b}1a"AD&gY_ͬ+GEIuZ er .4$"(f:NI=H)TRّf?D5 ߵ+m^]yb$q/J4ٸbrTŒ0HKB\!a%qZ '{Vy5e^!rτ!2w ]G|Qذ_QɃ߄x}YKLR}ZC7_~@\y#]ZW;:6'DNA޾F7QD>یIZ ]нa G? D[,m`eަh ;{~w9T *_Sj3fnh4UF?$ +H[){5jQ*bP%.KC(7-#G ѣyr|N/e v*70x-C 5fmHm4TWc`P9g1U*GU*}釰)YӐz< TYO__WLlٕ7\QeiP\q"W,iE}?EXY~f W}ycSZw$Y#J1{CI>*J 蹈Jq9'JˇY&bHs8uE zYYt@{; =Yő^2/AXx?4|ߓO¶Mpw`a -_BIk_Mw 7Grh |[-ts՟{ AZ/J {.łH~z^(fd;4ڡprTrz/\qo+By%6 ۹VN-!8x5PFRvqYǝoԗ:Z2,{m@O nQ65. V3ܛ]du|ˣIRt&>}]}FL X@cl,lr%|eMt\?ZE/Gfu6|1 Jc&_]`^E:mHT]RFgb>Dgu̖<^ǣP! ]5Nڢ#fL7Aev]-&F'VzCY/)il`VVyY"q3+T_'Ob@ 02"alo"oR6?C-k-Z/+3֘rUgXr{*qr S ҈YΙkA) }X.^%(p]w !VUʞGn$z 6@u9@3Qc`vcF5@Vs[PrIM@)"K-*4D68lBT^gK)@%dKunGph!EeH g<Ç -B!u֗1V̤[M$t`bO_oija<8 7Y RE!]^=g. qG| y̭c&Z)B(RcT@%-98Әs_33++4fCuRwMOݕ$2< f<Uu鹏ZV()SfsoнlX:Ь GAјcqV]%?,[sr*43ԍ76;~ m]Y؆bT1?DiͺGxMUUL1Bcih ݬ=۱B9y;ٓ㞙5^ld1&ŒO-ށegICи##+N($>guz2d}މ@qUH |2=XH@-$.Y+һG: ^G>wXq~||ÒrSdٝ\ qj!P;!W1t\sѱlf;@wᖊ& Y$8l*ɭfn@3[MÍ7bSA}@OC||;B""ڌ<_Pi1oR(@_i?rC)PFTN^QlBǬtTWQ)0#FޞG/# /t qP}4"o:1Ӿcx,–/L\51MlRXW(!kN a#8:UJ^%"׳p7=I#][؛ZQ^a ꒇ~`h(gzNjQ9_$h=F=dcׄD &`"ք?ՆR;; ŸZ/Ir`MLL U+Jz^^8|:cFUo|$pX*,LAuY>m^ɏP:Ly0mU<@VΏx{z$!48aR~Lg?9I6_,iWϟB.}pYmsmxM&ݘ߳N8"!ZZ,Yw1Uo!/|u[(H16M~ޓ<Ր}xX87zߝh}hw+T* #qRJ%FQj܋y^>>b<++SyƟqyHzfF#e.Dl} =SViꖀs{]CoDEq Pa(p= ʠP u]]zǬW!d\o|aóufc zJ[{IG Ƥj|ue5%7ǙzT$18 Sf)phszdh.B|/!frڋkOhcZ·M0b @3DR3MP7k؟>)IjV=.+Ƀj QtB)٩ ¼2|"BȾDt)B7".hpk4g'M/iP^ԕnբ~s̯:̙_GܫǥX>Wb-n[a qD{~@v ITCF+MA>rCK?mLXf_HV-fq%ú̓J g< 5'쌴(慤Hyr8&y (RL96VM<xPDܯ'U6YrO1X%jB"E&iϚDk-!O4 _D|h4^-G΋|[l2`]91},:/1p᥶GV0yF8N*N1m%G*mQE>~p-ou4DO9OQRv\^+Z\*;3oo:ڶ>uLeZʉM4T 6~ԟQj!yi)i^wb(*(MBv8&#jjlL8T"]mf~]LBi=bOwm]Ħ]Belrp iX^T^Odr$Ou8CIrׄ'wg 41 dۛlSԠ'sA'E98ۥ81osu=$(RQ*}UA{ߋW›N40cM[8N;עmNG\w~0DIaYDwB6Ni n,o,x? R endstream endobj 183 0 obj << /Length1 725 /Length2 32986 /Length3 0 /Length 33444 /Filter /FlateDecode >> stream xlsf-ܘi۶m?m۶m۶Ӷmۚs=ވ/?+Vʈڻj8)~3sD9LB@'s[a' '@ h P ![;wsS3'A@ LK % d[Brb 1Y``w627Hm[89 b&eQ9Ye -p'GFNN?XcO?-, `45n6&v C~4Mv5(l휝[c _ڻ:77fH8#?2w5w˛;3??k#46wp?ƶ6VwJ|tJۘ Aߎ0?_ EO_Ke ںyfdfb00ؙ]#gӿEn& hlkdR#R8[A=;B2sb>dfwxs ?oȳ{#qLd ?" Yy-&0zWӽmm$&)}}-@j93FҾE!Jy;nuFRg_x>u5Yp!Xh^. )YAaf~kH*`Ѝeְ%TfM!NP,Ʌy'&J:BwNH,1RO#PTlQ=Z?-Q1%Az8,eZs@6VH]+ߏo5ì:Vr(嵿,\z v蜫c~};YͪSxl'!U.A S_2m~nqT"y^!qۦ:'cO-]aQ߰< W>.ުU!Iq ;ױ]Ug\hmRa_QD`̥k1ftf^Yw̬S;.>9YqLGicm,U^#/۪ls[1CAh~}V&Үw-TΞ[6m$}uU/\KZJvY$E%=yZu圗<9vDCeIO UB֎`KǨki' gGpBRw{=Ka"M"_Cy" ]^ 飈K$Ζ_6B^"D#,3!'`eI$kEy¦4uܼ ˡ]1[Zz/t`Sm!Si0ҜT%;H8tV.ZK? vrB ٭ɀ'DQeV4PLJWt Ɍ=#6|B f&'UKH7oHV鞌Ə%݂KB ?wc~йD\L] IPǍ}:7*xL4}1ϲ^sՔFZ8߾hFGManr7ͿFYW^|jiX qUjRI5Ho-_(=Y-|*+IiprMine?l[>7ݖDI|xYѺIZ+ %ohr~֖M`=[ZV"X/{&$F 9!``D ggbh"74tޣ<)K يR|σGΜWJVQ2 Aw˨8ZCc35R4s|[SaВvo:q:1{7`NoC~'drI$z V +/ i"؇%XĄ[9Jq6Id%0j\wgFeb@.YÀ"siNy>cQ WqO${Os+^['w^DΧdΟ ɄwhG뿹L*"if$];>U)viN|I꡺Il]6$rvM-O1 5 tHّ@@f'U3.lv˴$n^~ŏC@`ZNU?<6^ d&o-"U(Mk3p)iV!g˝_Blx^Q@Y?v^K-?&K_;!-/"q53py&_"J]NrrdF ߰79].n5+o"w3 x"0I+,X >`mcBr{.ϴ M{77]@s_ :f<a%{,ZFcMmWn$qed~Z1=> s+Uz Z]/̾pLtXSbpuP/"[-U=_LdM0W kFŏUXMEdD6’I OsƱq82{(=_7[^z;ƵUg^_3URc^<ЇmOW`;`dt`_q8 xztrׯ2ͼKA<"V~7+\7Idp 1w^Lx~E9$Dɾ QңaRUX[!bBo4>A6()Sǘt֣*]q( M]e0Ծi- gXO5G^|L,DG_| V M2ES3g-E9`jBbC\=t"|Pإb &FpEUV@YhZANE|⇕)S*kgFoc^TބvMb4b۳ZN`޽GڈMnͣ4Sbrs?V}]Nݤl\v6wG~摆;yFT*JHn%<)()H )/׫w}蓬x`~xH8. ˽`zBmqoSNlp̓AJe4z7j 6yc>雾Bve\MoKUɤZvz.jvӇ;GkXݣO,$4 d .QE @A1P-~TQp>szGBKD#ʕ-ȲXof$mɈ<Ƀ h;Ek4 t̕Yvu"[1zZ_kDK%˸iRfȉ$=܃p*ɗ $,ǎm4ڣȊlRwVD7XIc@ǏH~*pp2J?OP%x)OzK>8]z#NUa}99q58#NHL9[y6a;MTRe|۔@;l%-}QCRUMIbY^M?CP6o5 P+]'͸bjI_L I\bc>oK9Y4"qz{#7(l[Y /d1VrX6O&crٽ-.UJ1scN80*>'k>3++TB>~[Q Y ~ƿ*Ѱ1M.byU8r%.w¼/r(3 $Xsy+<hp:ˌjkdG4! }+^ʾ:>yi}\p8 #z8_R4MvGnB1wRT0̑&_HjJ"dFk|{s-#14.!HҧY*, V#S[1)<Xxe]޾=иB)&?KϑpALmh;bxw(kZj =9ČyÃ*pm,9 l<5̩R6ZIofWK(n7lC!b\q` 2Ӹ4υn YW/L)y|v[D{:a9&L%_l5&39H21aܐq'(l FpSbАui,Ƒ2KmTV% q@쳒v V=I]yD?#ld8'(@\^.lڪC5:. OG YSfZ 6{wb9o%}{Mm:q 4iyÛޚ+kEH !Џ8ձpbVrLI]W( ](;wyT.tKx3$긡iWQm\}xs eo{q!y<C?~)EЅ}A]fͦFu" k+N@eA=rA&ks3J} ĀO36HO6_3oζډ7_At9rNL'qvmo9_+Q8j4ytN@$B̏PB#%#p0Y=XF )炙M1Վ-?M#tY]ar~鎄m@1=IݬvL{?a<}/? hMI<kp[M+O?3!{q.&6ӕ /9C`VPZڄv\_[)ѷv{dɣbd$&hZ`:k[?8w ɢ>%rk1w Od`X'R&EUbto_V`f26 k/rMNz빻D4=U4vhEU`{Ǜ#$K+|Ry y<9?jy#/zj@^?1qd2aѕ P D_q[}5!,'aBv{ro2?э\+LPape}C/8|rST4B@^;.}:t}Eu8ƷߔHԊ| 1h>r޷S{IWD^rq޲@oty]͇NcV pm!ȴKؽ`hS->H>4;:lȱ{׈>Ɂ*Jk@dWOzq}0BIMlLڗ lgJIk`[<S:g~\~B.ye?ܹ5s`{ S|w`'oFDFӵE^M +TAz}΂CU_ϰB>* K01Q3t7"5UJgSY;tQ=`[[*cܖKy6%-o}LUg lwm5d(fؓ脔[ßinh &ΜlBE !r w]l4j\k*ꅧ/N-K(6`~ԡs쒽Obj~aKvN!7{$R0&ogEqbtGx}z8ףIz}`v*t:blҤRfF/!J/>!&CZ v, >K&%b.a-#TX-|\j?CןIUhԘfsaNG; "W(uˈ)Ъ EfMb6b|~=C(Mڕ+OtP6L@4WԦڔc"H4u̚]@%H|!OYz}J8m*,j=s&46_;K+dp&&Xu3E}3.W|5' ʒB{ QVi6 QA%duc y6{Tqe(r{U` ]ǰJ^+ä9gj!QSfi_/C nvs/QS."pB<'ڻ`X)֥j2E G•o&)>"'_ ( =0]_< D&~Z&~0]-;aj`8C *B ӄF 曛|7wVz)ybE|'Ԯ#XΉ~VK,qlo#rRpx dk>Aë@d-A#,ZDa^t.p3밯B,x}n QXpꄠWkaMQ ߳bg5!I b-$@diFjrtx[ ؎Wu%ikhf|g< ET%2ٰ}{Gd n>[y>YI,+ 2+t$׫) FpUd.q0@sK1@Hc3 0Z#!S1si2KC݀p&k? .ӴrhZGkūub?ng L@ֿ'w84nK!{2VEN!ȩȖ1Ɍ\V1솬 lXBHS~mqO$!z3L7);oŭUb?;ܧY[BkQYߐ$6ff]MKEjji42=SAM I:ZG"ܼ.wq l~ugg!FF",F%qBRGT ]?s{|TnzL ҁ܏h 0ZWƌݏ_uDR_HOG; :;]*c}BP*Q[n#ͭ/ vn&I!ӗ~yVGW% xBYy}I~fABۢ}SVG}L21AҝihKF(7]0mO_X6uJa 0Rqf2_&! )=t!" (4zҾ> 9j"pd6CD*t&x11fw4^z WT~ಛc(ѡU6d NπBl9=ξ ´՞Gqntc&v13@hbP^ȳS%gjnG 44۷=y-Cs=Ha K$O]Hx}6CX`J"nOעh]m}guTLn%'h3 _L.če_L9NpL 6>\{f`tထڨJX)[]<'ƭU7esQhvZlyQ{70l?)ӕV\dɋ,Y]+('54;?GsJ(۩xKbقB. ;ǒld*T6zQ<(Sک"WK0Sc*Wh0u4 bf!ﰠE}i &3҈Jy ] *~+=)q2l_^͍&k+rs\"<{bZ"~5v"Y00Jki,~iII̠: RC֫oKM%+:dE tH 8en\4N*+ nJj2oj]7Z6T:n/[6TDZ$@N98yKV&fHW%hHtp0fIh`}X Y4h=*%fw\eQd¦R3ZӷMݲ~,0'i?2Hc׫Oaea0k"ʙMq2pQ_BY怓{XTWlkTDOoRM/[%7ǯ{4.z04QL\R0G~ e#\̙X2F^׿!Aq m} -*M3*~,P++ƍ̑HVgcKJH3]tY^s )'T- B۠7 [=bl[$M)K ˑSM9%TY1VֶC"A䵑E-dtk)F  /r2R ;#.W!_hL JLs]@u2p]PxyBG)g !ɄD\֚CYp  Ρ+$/^ʠ4VJ!_,MhvF3PZ%aQ|IrO'tn +wmxWb,+ z1><ЖPEV 3pct>uL (4gCFi&|bPv ;QS"oe)=k!k3l(n^Yί&HXTL o*`&e&_̄rv/l',7*;fS4ψ~/p_ vH{H"aԶ4Z- hPS83&fP}؉ R;dsryQ1X:3 mkF8TwBغ,+&޲R;:D^4/ "X\fCS4iukˠo9W7Ȩ׵s3ZEw{޵.W֪"BAPMn܋9b`_WjXɯelrD~9Qbnxb+OoS[!)K4Gb%`gfn?~Ѓ[ RJm0iŔ!3 <Ы#k0x _a7RW煕vzf)~C.[5%q۰$!!᭿ILDSkvRcw8E[Z:8!?V7} ȐxтS1r%ekw|zu,de>LV 'F$rew(ao|Cl?@JS81lGcn%&,]y^'L&]x y?p&*ipknނji-å9̔lo ᡢOc$ö2cNJz$GAupp7g7Ͼ=,ǜUri8vpoq =t0&oUȇc<4qnE5zFq#'yg֫r>'/L%?d9 jN'c|nsu.|LDbeD*I::FcYf|N_kOb/h]]׽'gzgeұߓa܅@g ׳8_b ~0 Ea/2+%J,s%{na+ᎇujl9ŏ/C?_ |;MO 6"y IA*Q)ըrfijV5.f,Q .[S;ڏ‡8ҜG;;ġ{>Yk8 ӎe٫!>0 y^%ڦa[ʍxZ JMBkQm4NqP4\/nLp'}yuXjL6DbKPr/jBJYƴ,\˷Ķ}LS>8JC[4ŝ rhBjS ~(NJ3o 9}{k9L@rOY'X ׏ە\s C-l^0QvyyuQѬW6$AjnHn9,O߄ReYj߬nw 83845w 7Y{ yOI $I}.hb:YB< ƪu:x^˧^na [gI'Ьێ35Rs {JXZ\ cTYٲZ̧t/\Mf |H4>̳>mS)Poi 6m,j&xPvq*½B3j9vD)JQC^uw1ظysUʕ7˛'^S O jR8&]~n뿫b-VNjF$toE.G.ƮdNOu~>4yO9 fyX Ņ:&>ȄDh{[]ՐGyPŰDEʮۤfJ+/ W}6R2:EԾ`+iV>0%Ҍ zסZS, q)+h0; OC?_+MXSYy{Ai8J`R.5*xFէ)ެ 嫮-=iԍ9;5D'ONkL1g`eB:S1ܪ.XƔ|+[^iW}=/Ɔ8ɔ=M L]1 71XmV%':WGԌ]~F1_kiRZz4lܻzH񹙧tmpſ-=])㳉9WP,. v8g p-' J<ӧgzKde1D}PFl\Oef?p'Qf 9 ɛz;.Q(M2AkJ>61ӅUII&8 2ȼ+F6S/8/nຶgJ]~ O`\  15HUAJe37*dYU)Wj =&m2c -{!hL*\DMN}ttF㔗GVKJJ 0Fn z'Ea٩fƟÐr0ksU]b+^bk=xfX&>jԣ²εT&5b'{E,D+[G^}Fo9bakԜvS-t)1l8B:`ǷklѨ2;r5X@ M.'iLeW/p6Ks8[@D &㟷JŦR2,ޒM{Äl"n-!%}|׾(eK:wJY#0À' *O75-r"P~%DQ !S\*g$亓bӅU\KVz~ ,XKF4+]3x.st h_L5t5UB/KqЀS^͂Xd|tGa2 9ӥQπڝe@@M\wWgϣB(46*NL&|ˏUJV,HÑ[1j2^스 [XI7}Uq/~ڭ⾞%c?6Nruhw_S7nQbI(g77?"ܧV-u=-]TPǪ!G6DYlF\ǚtr3'Nד]ru>k$\x@*3Oҙk31B@~Rz R%Gs^H H+;sԄE巣{RPɗrĘU|tGإDj|X~$MKo]pmPf/[t#kS}ɦ;a9\/ܷ$`M0>y6[ѥk*`,.afyNE)%!xᆴ7jb6%}sJooRZF:|G;I7O#$fJ愠a)⬮7)1ICzc#4QΤ"]^gK^~}s!7stC_6mY I=+-PK W4uNڶ02@A*"fIP䏁/s-6T$P٧6-bc)pg Q 8jmic8l]ϛ'crMT9J MQ>L9')&kdKL!]%6G\n` ""Ш"ȉYm_,6?⯎q>hˍ=nd'71eff`]/'n<{=Bˏ_4F^{Vس-^y%!d*og;Omj\I9~&@B Rx< vq@c\ w}~ҼEmФu5)3uDWi;Rcӱ˘HXETqY $HP-Tןs1W@ܴK,ic*_DUe݄ ٘>zf?8s]K6(iOYn!lArû-ξQqFN} !^p{0[~%B!8ŖK.C* 7e2GNX9z(0m򑈶R4.!z+2E:P33 OS 01|!'EO[0 Sc7}{hDŵ":EU֢KkJqXL蔦p suA/:3]nY:k/a?7%;6}0ʼ9xYPDU/*559PR[=Mm.{ =0CwSp9el+m>r*hgd+=1)+4kX_.Rf@IBJ]3hSkS!`-)xGXõ/l-uךH,pYwi9yCoQ * ~c梁6f8ƧV.%lc?>OhGպѣB6 ,_`'V(+^6@h_S /^xNGCAuSBurd wKFB]KXʙˈ2p, E}t<"񅿨397kC ], D 3b2ùUUĵ$.gO ^FSnHE3cH3D혿MD}ZX8 GXV*򅛍}bp;N*p=]癚lȀc̢ƲAm g>nkwǁwX'E[@MxG2B{Z:t-d,IU~ˋ,܊t 4꼯E^Q?4U~37@PuXQKL3Bm^+(F.TA|^9 sw ZH~MMȜ g!0~XzGo'sP׃є0q/.jNS}kFP[|5u8}Ja՛]ǜme?#-#9Sn2@UM^O|q&=D{?2TҒZ/vTk5}}+#dC>47]5:eiENJ.'YN'oCx#Kf]6sStZ+}98{kfKO1{ ^KF(G|#N}O3:Ҕ:^tTH3|ZlQ8&D@Q0y'5|ҘeYь;`>X:?U$dv"j2JE vPggMS\JxQ:V3*m1gGH"uFm65AVfn}YL'}\B"&Ʒɑ!2C,N1GaُF= έR[5e!&kym}{I$-&/r/"'%E#n7E<ƧӾGTؽT7Ǡ5U]@o8N5E|Hz0R痗Wi{"L2D *7!ma!)T Q{aI-P;'8 3}",u4"<"aT/¦څ9 45rNGf"Ӛhc{T?t;7QPߦ%\-@<jsoCeޛmO_[?OlRW.nj`y<)GOg{T) ˩.B~TY~]ʵQ=|8e!$'ch;j ɈLmh܈pmAHr+DׂGtl_'^n#:A fӐH*Ƹg2,1E* . Ou5M#^"pAM=~.1=z%.̪+L R<.RFk-r/_&^ yٞ5W婈vuo^Ylzt9سawMO>panXOyY!W sh7+ > V9CL|EjIAf4%e=ێsؿ<*ȳUhq)wP晷#NC6eGgF,OK0Vz;CڌI_S6m5LdYïcZoSj\]mefWJi;".a*x>".Өy,'#lOw`vGpO͍^xbJۇ މ&O⺣%#6hennh{X.4ρ M=r-C9*pbvwC0Rw9F)|[&7Q{,ip*VCbok &R- [ɶǩTb&spIl`_`V{r69(dp%<l32R;D#G?s bӷfMQR~C=>Qw}]Uͺ*' T%=+m/6D~M9[ ɒ[k7w**2$AG[D`p?.Vb&'D5Jz'75 ^S۫Y癹U}JO^9&(ΈFCM9|0G<su='eNt%EnKwQZ{v^L'yWЂyL59Z*ES׾jiTI~Fp&%aNR1裻nU_SG|էgq-_|'Cm<$&31mUα\=zkx1&il목ׁzÖ$p ];o%&,/qӫ6%jʺKMRGa*>wZ!DFQOX,xɅ~gY~c'<}jnuAx5%oO03媰C{ &B5H>F ΤN=ȴ'7ȀMvw/xM:g;L{bCrb!G}4. `Ba+98 E,ZΉK R{M;X=ԏ ZSw)6s޼rXjHݍpTؘ5zq=B+]lZYkX!|; ]+Ȼt6`bk ا+#TתiSTNj+U@"zI]5 `${^e:d) (0EY%sE"OG{45 Bu=OC#Wggͩ{ŀyV|{),/sYA ^R 4@úTv`5FT~?9V팴b>m)+, \\Xђet.llu jIzN=8`? ͉{F?O3B}aCʸ 5F5uSިK^Elxv5gcYҗ߫&, S@ءfJB*D'!#`U;Fd nDoEb#JtxhjM?@^JQFjJDՍf<,N@C}Fi;_ʎhV$'po-&av{^o7@TW9<2,1q5 BOEq%f9YO*k̋=Θ|rRBG%|^Ju:frt3+oWWW#s,Dott5a; v?im<F-s2U^PcTYl=z0 L].c+:seY2Ҙ=@w |h3Kk>tfgI6m]-6`$. +c,lm&[6NjB $\YKϗKK=c.}Uc6dS/٩s FI^>+`S~Hګ7mnJA9A|Q?\2 U`05fu3y?[:(C%&WbN sOenO+aF:=ڸJHMi`c{\P^k]ZOq^e3eN(f i.oiJjF #t (RDu 'JO9qhPD= -e>!kU7cZBgבQCl^;2P`~fBNNkН$MI@~prj e Bz4 .Vw˒ʙG|>_ۡW͒ P'gh%˼7c;)cPo2V 9N)xLj⟻ Ho4tQ%Ýb +1g|S{:{Ljs.t"OrZ'Пğƞ¨F /Kg_Į6M]GsB=|,'yb'(Qz nVtey[8 9Ȩ-)%lL S$d 7t06XѨva^ȵ@Umy:×Wy([Lfw/:'#\}ܜpҪ֥|N1xzK$S ܤ&cal*)kDDp0@i]E8K)OBŏGZr7NW&BFv"H omf6u]ׁb_ݤlPVYWJٟgN 3Pk Q1S ix.3^y-s5mjSXr\OA"6!2-Ftd F);vQ#-#iFY֨^vlPm7u20?Wz)S6Jߚj;tm(qLZc)9.}'9`,<|;mk_2^wׂy(nۯןo:xexF)Qp#}?82ZR 'daU=+5Kj=7kz"@(;bRf,7MqB3V\ܿr"pܓdrT+f( &k՗N@D0ͦ-O7>/PKǚXs۲e%;A@sR2xЌi>S(;y"HogOR#EXDv$>/2( ݇)IiJq. "5y5(PmA ~=hJ׽Wl-$&K2)Vy'|haHA5|;cٷ>99o'3H|_#z#NAw.1|5OWfԾֳBf  sX浩 ݴxs0gDD IvxpضmQ>*RĄ.gCiyAn O>vu^=Օ70o qCcRGRף aa'Ԉm}K aKtYƜC/lm $MWƇf[6^s3v>o{x2 j7[jRhv9`QX6Ih{hcsf.s864ܭX{t\Nn~dY2KmSԧs$뛠WiMXBH&UWFyiҞ!YnIP>%CF,̾1|Еکs^Y?>etQT;ҙ8w==ӎ5GzNl^`~Xbd=47^Y!K^cW9Mᡨ bJMFa!U˜Cʯ۵$ V2hry@NIbOD7OdQ# z#_yر Q1FdAS4V5<,{ a# ?V0l2.*Pn2v$ xt0ā)~?$Rt5h$ǃm {}0L\BrIKΓz,|Q@$ I\~M4zQ@ 5 Q-pZ/Wk36z=Jr" yu~\< zMDiĎnglX q_Qd2I|~0QI:X/"kC* +ޑ?L-QLzّhN)C#9|_}3`J|6k2YX@3wz6@4!>Θ@W6K* r 'J# 4T>IEL PPeK}aݷv cuHW{E:f-4]߈zV\E &O&?dvB4-r݄5\`l K6$/Pd4\S1}/)Bi>v8\Ӛ`?ɬAPhW rLbreMz%ވvWۅ4:yx/{<02Yjz?e;ai7KSr9Ehۢu@֏)ϑsMQE푯zE4PgG?V,#/SiSolr~І6pcSvC'y cRGAR嶭^yϒEΏ7mC-D96YuUV$>B6lTߵ_H^Q-~Kg`RlL}B ҒCy-'=Ƀymۜ5jv Fb䊙GՐ$(ݫt>BY%bbܦ%׈oVroxq&jE8 ܖV; !{A|yC5R6y*u|w"D{ ='ޗ7AXOMb,kI1ˆXAJdP3smX)}4+NV0'**8`툖_Q#\ nhgz% U5;``tcaie xh $l񉓟6NjKM&Me"2bFZGveVS@eIܐXWre ],A>pK0؜9%^-'qu4ė[Sd䑢)9/oK٦qt;ІzF(E`i:^Bx+j 6`h/Z<)>]gWD_YGe1""*ő+7(ΊE\lN:AڟpF)Yk;;5McTv%}lU(MhpݰINޠkwb*-JG@s6izdʜo$멿!(f9uO'yu9Jdk59_K3IǸIk2Hm6_8pz_^T?imrIYl`{>a}WJUA{2d_ 2ǩY Ԁ,oG Ҕ2M#n1 ƒaBEp E.eT4Hhߕ=^nuaoj5qW 8qTm荥"AKI5d$t{u'%ub= I*3o` Fg^3-\c= >0agB<~rʌ%4oR\?nSMp=m:ڶTTO);?ȥ6kaI ?Vn^ -ӯgo'J|9nU#/4 嫪!l`,[L_?L6EggHA0S^ RԭyDd?RpdIKZ^Zd~%!Jn셈,m.PTWYc( CQEBˁ>r;>+! z'֣&,"<Y?Yt><%Vmxnbf+%9:K>}>hC1 0[83l!Bmyn z ڈA櫴:=")jքе*ri]ɤ36 $6%:Ki+?g60u 2(R.R t/6h˓dT%mY M\R$ mRD2دF::D.`{f, -K$knn%c{[-9SBJ~ hg,.NKܮrC"v%<`&Ԣ2~֬ieupţ|ka /rBrqQT}m&GWm4~%qP/ST?Ċcsz8ۤɧ =3Qy(3Ȓ@b:GJ@n|͔ߌ.D2!٥* OĢ4U ojrY {R+U4!!hP(s/R@܌#('Xַ2ia{(؜V]͝=A\Dr:^3_xo$wya2թ_@jRbsz%^Tn3H&"!`<ᴄB3f[ Ǜ5{#,fphӏ֨@Aj0a)Vkg>ްu:XGrI&,b8Pݍ:L?Dqρ.|Q 4Y5! 5157jOҲ[.a2zݭ辰0[E9 =.aǡ>glk(|7{n1rYwdO3p 2SgǨA,fT(~0RG`?~:_=k¡ Ӄ;B/ *=Rrwq<35*o:mx? OUe^s嬧@"@'4@;M!0ݘj$Rf=PթifBRflHC^bGo%=tcs/!%I(`,0b'2{)WOpwx)|D;Bk :s#C? ud]1e4$cipwHh$aީiWx$@%<$$'_\]͊\2W8 ȰT5iQ]^M-ɓqۨB)ަtd~}[5ct~UWr ɕO;dSE-UrV.C[)OQ<.Z ?Pe ΟX1odA}{ KPS~ "fMHEÍ4&Q(ڔy8d?bb$85| JQ7][Z:@ } %=Y%ށ7l3s;=kE>"/m*PsvH#H$?.IKzЛɀܲuQ^a/SUbU1 '5uF1[,S=+qXco 98%Zڱ˻=RΨ%c <m CpݸCP~4tqTUEщ]?hDgcĠ|/s|6`MjelAh5sˣB!f`Lhf('B˪Bėh[n2ھ+2PaN?ɀ3~<].{*轃0tI'K53676O{4J׮RBƖ UF,ƎT0Go0?E͒` ZE`g5>d1!1"?d#AIcU-K& ~!rʜHZTP *, 3Gt!N QkG/Y}2EV~NtV |,2GLs9bdO<,;hz:xF18~}Wo'4}˵|}5fP&ђVEZd4,/_PBn贴J^^%/{98Ë~QmZC#3Ք(tOۗX  endstream endobj 185 0 obj << /Length1 725 /Length2 33728 /Length3 0 /Length 34287 /Filter /FlateDecode >> stream xlcpoo5v~mvrb۶m۶N|b۶gyﭺt^]t{۹z:213rTUU,0dd"N.v. SCwt4pPSXZ:m,-nnnnήN4\,Lf6E-)y @jdci 46s6;lL,əL\fdo SWW0 L۹8s65vqtE6 `bi025aoRvf&-#}<v75P::MLTC[K_aHc?1t05Qto'W9SKW?jbogNg ,/E%wY򏟆N&]V4W7 s9C'K6#V_#cfб3X8X,ƮNNv.6Y{LM=LaWyB[*Ċif hVW{n-,LqTq gvZ MN&b"tWp^KIߕ #nԱmn#]27փX.%b *:v$t)P~}Ù"Y ݒa[U:*lRg#}-FV7$pͲ.rT0U~˫ p )SͫZy77C2C# F .{=jϝ!")=9B_iy2A\pt^gK&i"^jihw '+r=v.WH08fko!xk:~CvJ!1&bɒ;n[M@(yBլ җn YR2-h1YM^_P5#Jx|QRГ29y"gyr2%-ַ2wdbh2ro|\\U =ƅqmrnUlUmɓV&^)[nmnO~ǵhҤuoVvİ~Be/BGn/GN2JA٣>aB3a(llɪ1Rڧ3FKsY4,8 /NN|&?Kv㛇UKrlH9Z g~%S h9Ae%7^ZHӵK9lF;%pN_,W@%"|@!zWN:m)4ε9gU1NGuS n !i՚;3r{Tzl;G_sdMX׍G2j6s^k5w)1~ldN z7{>=-Rxn#v'j1E;K(4~tW:̭:r{1Wi}qm}RZ{w?&@p^-]pr+T\_u3yhrm[dWm~ K6{ [wsBU3sykޢҧZR[, !S_y. NO.kj`ّ T-“0?5^­WK6|9Jx9+LHu3LJQԷM䥬:6;R0Syz0bǥ9 |ma `Di?$S *+NUlٗ5|o~|jev D7u߉Wq"E ¶{.N5n\ 3=0Cr^6fB?%gkIq_dF N==σHBQK|=ogVzc'hԪœz[jmWW_sߊ]0(y]\vRAݦ(CҒ/:lX{ I̗TU"x=Fy&@%9|L1 f9}f ˫+M!-(uD4v;ZS7) @o+役瓬S]H`|$/mQ|F@'ojyMlD%Ztra 3hAM~0IMP> S*lK}pN-PxB2Rx/5 bg%qcS/m0Kl3iģM͹2q!㹟`8J;/vYN .K'?0Y2ȇ%H 񐑚\bp\t/S(ײ\#(v{rd%X %i'y"9gx4kx|γUL1.IlCjf;; G_hX|_;ڢyi6H"GT0k'ᅲo ~IݛsVB'73^^Bpv*|Ɖꤐ8s&D1( vzG.f&+A+x MC+Vb/; Rઈ ?GS4XA-^tE3eoqoG W'sX]Q7NFiSda!2MdgG#Թ O9OlXFn(#W1Aﳏk3;|9B´ ^r|QV*5;Et/Nv$5@-<@ }v4Bw@o] "n?4WǍ*ovy)wc>c\f㥒t#"4(#ɊفG_܉OLI?IT el*Bp+VRT$ќ<3YzAw4Ȥ9G';_ST>' )^J pb6|L7:*Wge6 >M5X;XDzʈ)>#!QM+'.W rj≭((&QOSiMEzP"8tQ3o 8vqrԯn,VT%׾@ݎ&ԕO@t^DNQ+F4ڟeno:ֳhqU+we,6YP]>k穆)b\wk)}53Tr^ӿh't]x  ؕh% MZe&Z$n + x9" 1O#/Br[$3(RY= ^}RS?w~qvҖlUqq^-Ei< 6%)PhXP9}XJAubSM_й!rqY+%/YktD`uG=KzA-wpPk59Zs '\XU-nID+%[3yhD(R*b~Ձ(9 9D"y-OO,m L$ք4UBB pg@4:I K`[XYǦe`pJEJ]WbKp.+gn.,MǿdZ"thǵ`uyW=簫&dd>z'5ZRRlY p}w>]|=iZ5-UWņE+mTx D@#Ε+E@Э EfskQ']5^aZkQwEiC?;D`e(KF mZѪXpHT>]/2q~AqΦ3w@ޤ 4?sH,%=%g\/4RjyAfQ5IpK,/F ?XLX*^J 䍡V7'ؒmSD5Psw}삩6n85ۥ,{ABLJ\t)Z2oyRت@{'y(;)& ʺL ~e_z/WYdhɕ7>nZ]Ri*D.myOUJ~_ >5^G L<\ؚ9q#6KE^& QŘy7b4hᤜmOd.&Z#y|`k2їQFz /%Gzo4*ʮ/"w(E\A"F bӜnQ{oG'Gu2 UE3]4%xyu6˯%%X8X߃.Dlh!Z7q>JܤC-,L/Qwu,y`e4U7 T.FαSh?5/Qv$kc4cVJڬ-!G!72RfK--n8Tpq*/oNGg NL&6pVؽ8.y38vAxh:n2=+D)EsivWD_zX}Y:!cJxW -K&$q; Ԓ5 Ӡy:~̂,+v%LjWX\; }{y&4,4DGtH+^5eն"*xsI/Mr=9?:0E}JK:7{xeh\םJ "(4.: 'k˴vLAfhQQS,._޹[#Iڡ6Dhg$&$o1qHu*O_>+=v2ůA~232?'RI0E'uک9ډr80>l: `HO&΄n*-8Q4m5>jSNCSY6X2D XT\FtϾ7JhVhrsvfjMph"y\Ei6DdvPI:kPpY/f{"𸋑y^߽їWg]d)du;[դ&N|[ǐ-'=o&JF' Xxv75i䝼dR_56:hו= )z{!w- |St,ߺC]CvD#|+%r`-Y_^ˁiџ p{dok4{ -{gœףkuxwI]dk cB=pIK<)꜕%QvULB20IMhl*ϠglLFelwCleRwyLHxGZpؘs]RDYflL tN_AڢAG3XJ?lnC`a}od (!2ƚ]!֮PSV26UrbdN)|糗eYD\+QCi/Y CEW: ZTquVN>^H-N&(o40(9vW#zŊȜLzUēyiSp>U8 Z+Fp_ 1[:(nt?1fif5v4k#7H,QV

ƎW~/.>3V@*'32uG'`}?Pso ~|:}TԲ <I,נ4x_5e3pCDg9\Ozk nJwu'93 oz9\.ZP6 \-|U%XOr%lĸ=x[nVѹ%-r8"0;%HhM;hƼxP4r h%ݕ.MR܊(qո/5F xΙ&Z1Ru0hdsII"CNLL2o:5xv^"RMWca ۈaa\%^RG㚓mh92 9PcԌ Mr#{ zz r}ҡ_5W]YZp$]rlv B"iVƧ ?(h-PEe^oBPcHoh s8'_^Y`:wrCn2"%(ht&}5B'k4v5x%!('0 )5@<0}@f{0OB=q'\Jj c@BmR PCĭc뮁@]G;AP|фZzN:/B)3 tyE^[_[ҚsDws}l4: ,FJ%?K~ ٽAżl, GcO@QHi:QbeprV[7D垈ZAޭC|eb@<|e۲ef=&7t&E 2{+9Ee縞"rVT ÿ7rK²0_L:*lv fh@tK l8oVφ@. :_yNB͕m `D6 $9iA#]G6X YTr71lE7VZՙ4:tPk)վ1U ;#xShoc&x ep8DD]7Z--&-i!/qƯ"?MphDi O]-䌪nIچ <w_GeyH$b =OF8&z6hGR_yǯF@8oAYXJ\|Zm;.]Sx1bS٧?t`&z-3Pu %N;?0]U?o~.im0RK"02Vh 5x L{qrmEa3l!JwٿK6yo,U|XoʲuD"^(F&{LdJ}6W^+|k_m~deXʥm@RxbpB[c?`Xߖ_[="X ynSm<|r:T[a"1%2bik K"kyU}q_O$M%hQ!/Ud쯕ki=#} wr!-wU(( yEx_q'M{5jKK<5UL p}ݤ vގ][yK gmv)WF*1Ϋyx$Trnkw~zvNj8 6#MIc+I i/j;'FPzw7݁)pl"q~}F{KȞ"_ʞL`8#n-|aE$v< bvq myF~!Rx)*U淹K^ClA s"ü7Еk,-זނUh% Ev4OEouzIMfFZfd)p4VE:vsGD 㝹|hZnUPh{>Jbk-AzLf6hXbeA% ]/? zS,Vk~mԄ1q;|Cո`:ZKÌzmoǘ1]=Yxx,dp0╩o/{5HP|$MCu'HEwvڠG@uW~XF+; (F^:gId7roޜN'ohVsض[|J'0snD,:&(R(<\ڱ*̀xYn|zC|6ـcfl:(cK#3:Q,zنhn*7W16ieE1 n+ͥZ̈́ND qXTaB>th=׽Zo#ycK{y\.{=AI)J蘆g͔0E ݯTvv,%D2/8Pë-Rf#%ܜyb hFa EbuF-`2VqBc?eJ"Cc86֥d8ER|a1 KʤWx؇۲OJMS}|6^f3I@o1I[CKHP5f't} ~@srm׉Л1Ηs#5 o޹Q,9췻X~¬voslϳ?!V_sQ[^LDtI=im\jll3zB1RF.J鑅>mC:4*:Rky Ň:%B,)|9u9Ƚ5qә`Ni\}] Xϑyhc"JEP2 dW`xs &ع>JJN-7|tak<6)"[;ԗtվUࠒZ9IJlN Lu#z|FJbn30U"`ǁ؂ą#4nEvc)k^35.S.ZKc,;/PD'Eu]em,0'@a =33=I1Ge(#"OXaϰ | ^*#T5^ssvK-{.qʭ^ז:~½o$h12΂>&~u#Oag AƷ2BH @ JQwu !ganٹr|6k"`.ܪչs.􌃆$J!V(ddmC+-LmŸMkZՊ 9$+h(:AN Pm2/j z@{AxLkho2ʏX%` k7 ՇW\V^S^m*]u3Y=jex{eÍ]E`NK1.ll=5k-4w!&6(KD8A̓WWk41BG 5 ] "0vHu !4i [\lkUhJDx8FVç7} QtST4dojޓw 7JaT31EM=W<~!Uάn :pi7GJY!lO 緹3xcq&60}| 2 ʦIWS/&?IyD=Ug 0go$yik'c92׶v9ϖt`&1o=ERj#^V}o5JmYHI`)=c  U>I׾qTAC|儱ڣr ݪ%~}*-`rTC^avk'Nڿ|BԈRT+5DF"|跨 ,\$Ao C9D21h*fKJЦ\Of-s;)^UODדk꾋7EO;z"?}WqdM{jt‚C_G_ khnf𗑊p{٫J^N} <:\(†$a6?{29v"fz֮ݓ2gF_ Bԭ(5M׵Vr=i&F:E۹N}0P5Tgv"\ہH*W(3(*:Tu)kJ[ >*L9:;{+&bިk6Jzmk{BSmmv :3i ң3}α-_zTATG]j.zC~|Z3kҼg2 mIXQ|(ܽojz&b]U!.2/6 p~P2JPMc2/QHJb*͞Γ$!97 v7Dn}̷)˞ғ n86֢"Zf_iZ݋[I:vK0ބ'hw-8u^ȞL #VuiE׍L@,ܞ!1 |e1ms>9~u5{v[(cּR`Ta7g_g @;Qb/e3V=v0`5JR 'MRz\-͞4-b$]D bX%>MeP.g՚ծ׬a,Z w-Zsu]%v8ckr[ڈ)Z:.>qg:Ubѣ绿,gy.%^L!U&a4N 9\ĭ r\U 8_e<] r !b`psJ2sEr$v +4кQ?Y)-͹rxݓ W G> glGCjLaRM #*P&r z||ŝOL̨-\Q4<&sKxU۾)aa`s|wr.F [qƜͦ`KKS-t/Zz^.x#+ [%lJm=ʙ~{Ȕă6V_b|;$$Ԍ4A龕_B[Z+["Vg } A_DUw^yuNjœc{gʋnԷv3GSǣyiH fW81*0Q5P'ϹR`1,z>jRbΣLy~l9FHQV`9ݩ,#SbcT~WXM6"6-Drz.ѹYl>#uwOS_vVع9EZҋ+wu֑uIB,Ae9"Nk)Lx;_᠔YûZVГe|GņĖ!jVIn'?o>8ʨr&bBT揩^S(PWRK$)ZF1=|[d3K%pP86h3F! @μ7M']KׁiW[໡Ut522R֝՗aLʲZ iH% <,ҦUq-sVVk[C[qwrg׭3@˫a;.l&F2 cHbA6 DZ$_i|>ңqjg,sݸBqyA綗::]dKU<@dYͬ{vRՈȟȁE5\޵E/Ws5?~3f|(IX1`꺳xEF b3l q3&/u%.Aѣ3Iy@?qWhӇܜ{;kҩiZn@_^"Zt /.O%eP%^b6_HY[#چ;x}kE8iG2ۭuy?l~>#waVw;Sm?,pKŸ^wqXP7.6xC֒D Izj瑑879_UBMLj,,t΅ۂhGSIDv_WpW)ԭM*7?f5+!G366ZZ-ln-;c457©rg8Ꮬ=`q G7z =۷ѭG|]o4S>U!=Ea7k:rhl,^> pE-#qtmY'Bpe(6 4Tp[SkٲgH>r6}זZ9wYR<ћ7HIA:T~}P֪yoضg8]kWc<%F^jL9x=00x ۜܜ)-$87s޼{ 0!av訂Z֌ 1PckH|?[P=X230\d qNOն˄*ǽAI>;n)C׭5 bYoւC'C{Ñy 7D%%{-k;ѝ$1E6?"OUT 3 YQvŎ[l9 qV;Q[%H#&, 5_![|\qRA5I.lDT/sT\4LKZ)عUAɝU8鯪4ϸ:vI.\ WI϶zglnC?=C_=?-fm24XVBJTӿB?3҄_j>40c%'W$R*?~(3O^E1s}/68 >fMO )5JZ\p\g&#e/iti<@AN.a;ԝ{7ץK F2L| ,.xiT۬Ae̱d18O|O!=vYӚ{=ݪƫ_/:o;US+pM:Cy\ ug^!kW>~i5N%l+Qt29u"PEg뛫z`jՀm{ějKn4>t `keQ́pN ; Fؗ $I/I5N! w MvY K<;럖R]mF#ghatc6*(|_#L,+ 4~ɀ#]cyx!Cmp |NAt\Vo| p+?~j<@ş8WC "F>h;(ȂE=V rל>I2IĤ{;1q۔LGq}Kd1rmY" f>0~~E͊c8d%Fn 8; LƢH?oQꁆơ?.?ePtPM:Y:mr{sVwT紹Vs|aQk f`)[nh%VǴ$fbyj|A шF2fż!{7uSĆ|FHj [ O+ t0fɨKyQ_H"?dp' T3#|6?#""[}•;nxs7JH =5BW17qa4rU[PO&>7),B4hG>Gxd=Xib(>3KGn2 y5^Oq`RVځz"I=$ajl*nmm ># KO+aw ecjRd0U(j?2H;6) Ϗ%qS~h{&:Mۃ]{j}@r FWO׿Vb, rq4@睜K?)t=&Ś_`үZҝY_ Kwk(֌ϢIk|Sº}<R_&L s=-]oe$G _a&SƷ`DJ eHf^@'hzWFmGU"TfݝM[}uhPb_uDp4Qy;a"R{}o6m{2b$Q(;'4ƷSS xK2:+Fa45"xR-47X'PUC- !<̾Rvwg].7q,r2&إ>XvUA޹9PJJ1=AZ!DYQ'-fh6_|p" [ȶ{ҟ#pEǰa#_s\מ5<

C:fTB#AZ5 jD{ Wl2߿)pi'JI]lj/&nOZSSf1щŢ.&^~"a@q9yw{ R@_;>q?U|' F j b\ֆN<@==# `0Sfug]Q_>ÎǸY\ %\AOJ!':ft2č#`6u2;}uP+&N+n(}ToEsǏb_, Bf/ קM2>Rʲ%)'j6P;>>άke:r¦') ;U4dh5ʤD=#"  n @Piދ/ϠӴ@;BVw6TuCDT=.Eb{yJK}V5{$o"~Q48@^ڄƍ h1-ا/Y>|_R,{VϜ2=2 DįV UguæborR߅,郘 3ǛKRضEoU~p\8vuA;wOPk`PzB{z8v\-m>Qe'pYBUz.mT_:[`*@n<T DctѨ{79:bIITi<{In+jzw4W|!3.^ɞUǍw9-lԌAthrQY,JrT$XDvзt" GR^߈ Y&s`|J!Sӵ+tZN//$*oh9!2p;,8H_~k20a<%.@W 袖_MU0" phU &#8؞⏥ore[9G|^)6K(%E_`ORWq)Mhv[Uwޫ 'ap n3Χ'2|a:BvP5CB7{E6-XP5v8Hw'3DuVC"U@ixVPlqٹ>T+|/R$IZ]c;e2 S"ٟp`nM,i%,y6]]%1]/ shj\IpYNMg7LURlp^CC:o w4!=f:[l'sJ 2Zo>amJ 'XAlGvG 3=e?2=L&jTuu&>P$B+*>ꂙb~U d,ouYMN4pF/-7`77\]u_NmMr|#A By 6=y=0#4*b90*`A뷀)2YƐ|~E `X6 *2՟M`=G@dm jhxxiKs #G^{5B;CH̏$y_@VQ, yCMZT_)aDu|Nj,,4aop+ZΚpM%8$=fת6uI]q4/tjct=%[a'y݊eكE5&_إN#4-yP2܀pI`8y{G1~ERo,:qrQz!Ԡ"[2LОp%4,]0,֬\U&lW3s5y~$]+Ec6 rT/ ,lv Y\T T`U@z Q ^NwnUZU!M=5"YL:o '| ۰,1i=23"wBdmIЩeTB9\斏BGYs.I0uϕ},iJ /^rB}?;iw$ *'>|SRݒ?1i Nqyޖ#Or؂ \?Y .$Rc=!$2:r`gӪ I!D6dcG$]?HÇjEui|YoDžk 87` reuJ~%ea}cT#axzx26PF6٪g 5$;,UXمQ谉MIXP *¹R3f=_SiтVKD_M%P"υeN^"O[O#z;g w΂JŷVo(@ZGk}eºaw)O ) 皿_A ޺t2RA͓4_4+( TXJ߅H83e SP_zD@A{‹1u$"g2AvW퓥ϓ&LήZPiu,x#Ϊ gV 2xքXI=4 PS^ӄh}P,TcRtl4,2piizZ&[2?UTG.9MV Xl1wwT"|`_۽:s |2 醻c@U7ǂ0wbS5F攌J>vdpqosՅc' a˛>a3<T2=b_ԶRa.Lk'뻚yΎ#Qz/Z)>sH.'R@PZlBw@i,UiB';(Zd-Z/4W>鿷&|NCG)zc`].o(~.3=LٛÁ] ;̆1@dafZA Vr0\.V]h9 1WKM:q(˗bQta\c엞R[V&eB:+%+5[F6kٚ!+F!?΂5*P3xrmEJwN>y" o7 Hkz{ 7f:ׇ̂^X`vhgl *ն0rW7qcQ^- E2{#ӉSzȕydo]C`V |v/u434]qȬ).A̺w z^z ]4~mXB a,d8!_A5:7R"?#Vvp~6afXVIX,8 A9"S >`:H p ƼE2XsoN@e ~Wc::]ZEؼfӽL:eO{uQ( p}ڛ_0%eh291*(5nH CJLI},Gu=5"C0IT9mLWͦgah 2~鬇` Qi֮S&2Q"3^ױoA9m]DPꑾԸ[{d_H{{{򓿞|h-*CN.gă?,σ HĜxk`D==ds̥#`sԋ|jQa k7zi($z$ha&*.HՅY 2^ :ao?Y'"F,ﺬ_/gӀԠ޲nnf}CbUX߱ !"ZQB 10knokv0]ɻ=yJU&E Tc:/ },Jk6o˹vԯO&n91WkeD^XLJPi;ͺ?B|E(&sMթ)S&h0Ѓg֢إ?3v@,+7:GoRb{VӃ[G5 Zd cL.tW" c/$wm1#Z"5]bU]0+Z_wN A[lhGq h5堭q2i&KG +v3>ӤDYƊE|,>y3ɌoOm@#^ Z"rҞ󼫚* Vs&9ߕc.ڢZBʴ=|ZX M2@@v߹<`,jhu 5$0YWT" ;08rKV09e$>Ms=eT6+傍[dYb0fKX6f:UDNM@JK@'wB/< _$o5]mp_V \^ x;ӥѼVTw_\(q& oosEۉ6S=M~,Zc_;=c(н?/NQ&$we},_*xI)U?I$d+%mR? 2L IrI9\M}9h9,;Z|qKps[5BdY-JfaE=n3@NjӒϨN' #UP{?>jw1'Ek[PLe("ukS{RH!F$9өGȂ0\ٽ.t,?=(?jZi]PmyStxC"Ly$ 8fv'ԆR:(K)/S}MGkq EJ5Eb`Ӟ<n-qu\ 6v 4&OU"bm:}1_]<ת񅚶u3 @\ _Z6 ^#TTo #{~[莓 LG(@H`= #Ycf 2(RT )>*S7 v}&\EZw[/ŊN"6I1Y;f& c) 1~j./B g_0qa66z R0Č"#H_H]FuApgKƊY}!7>i "|¶yd^j(g +t=RFMRHzKtT;'1#@/鱷<),ai]KXH@"fIFܩmQ>T@nKcW8'gN֕TZ|5OA oDL8/їFCI"+勽PUƄgył~i lok:7u`c4*uDJt;sOU a/~eпGt˗ѽ{+4{_T 'Ç>cTQ%P_$y+Sjgm1 jWŶKMw0!v(QW^)d2Z@1Pky;\f1c"Cq5)`=yN-CY >}[ʪ7(RĹBgťI`* ꋁ\J'PU EV2hJ[ymcd$Ky4fEp8G hzMsJ@.mVdB~ Tz?|Tl~E; Z"VJTB+? 0, "/RaKcpΗޢy uۇ PJob69_MgcYם*,ڠNA!h@1DYC1CͶf把g,^ql<TΉj~ }SLi9 `q:lϑC6HFTxw ¼ Mϯ@̡{\5rz޵ڟu?(u~` gHYxvHuϓe~cZSGk֤"ح/v!S0#&{ kpnP>^O3K$Cj?1WAJwK˶Ř/؅kve#4 c,4Yn (wux.H"6n/4\;b8Aoq-/euĺcsڧH}+X=˷+2U(Nj& 4x+H\briO1ýW{NsFXGMEKN!Hq-4A} nOwL_q EvoVGM 6ne.ݱ>h{%$k.I*5QK8xVgig4Wա=GBy3AnjS_!t]ٳX8)C.ߚa,s'B}ܴsAkm-)<ǝ4%m/4:ʱ*/nM\>Jp\ȭihjXjFS)A}.l =W`5)MhY#$J3Pp& PFWO,YJ۴^1PpQ >ɌIjY&IF!Te/BoЬh fN"] V/>N>?zf5U*Vv %=2jy&CQDje^Yrʍ  5[u®Ρ]|T?lTՀ-P6Ta 19@6A\dt4oh ۡ]$ gց>f[k ꏊ?~^>g.3vy}Tά *9P2DFh%nm7jɩ2f?WQ`|5 *.K3C j )Rƛ;` W+`|5:A݃Fuv BO!/?, ~Ƨ u}lEh9i`.529ioN9~aͫ:s#X&nhL%cIs1eEܖ lLHOt\_Rs2Op TpKO{#;K`(8,Edp!zXZpF%Wk>nufk^X:&;APܧ9wñ?+j>:*!dF +ELʰYq!W۾0%@g`#uTι(R"$44zaD<JausXD3RmP?9')Z:]^6'ueFVZ7:7Ɨע܆J i|8Eb 93&O|%bPؤkGڎ :])]C]}t.٦6WA& n,q d@ <`Ϻ8h#Xf0ח[vaB4Rv$1N Ur4~Тw)sftR'-Ѯ(2kw /b蝇ca`(P~$``p{kn2jڞ7b[<]A0 UG;yB.к# pu߿ѢcچP~sP/HV^=\ Vl|fvS:(ߎ5SZ}F]U7:?O=RQ&h 9*-١B"eʏ|v.kb=Zs@'qR,)}Fcf62N5V}; ɂ4SnP!#Dydbh^7);+V BnBF׃5uInHkf"Fm{Jm3| Z٭^f %VrHk3_o){x~,(TrH2Æ};A# 8i >Q&| 2J;"|D29?~Nд lZ7}CWdX^nN؋K^jrA}>5 \C%Q # QSS2N½ŊS*e96$)TlSڒ!FSbWm4h6 z^dI 2lRjR|-8-Y߼S]KwIb0F_ߵOoDu_7W#ٿ>}F}9-ԶT 0;l:-Fm|f3w}4 zLw,5c.jJt}~2էhP'{E$Fl*Ņk WHЁW1Ƞ+e;pR[fnJdu>q WuB 6 qJa|ДHϥn|lKaZ8f\r&̽¬A㯢ilZQ/¢-K( n}qq~^K1(1/_@@x2gIhܤH[2bM-ˠ8NaD&PK*>oNᕆgZa=9zInaI r~<*;?>17)S}3ZP\qfR7Ii `; D8s  &>08b2bZ<NI ?gt6 vm[71up36/7@QE|=2* 'c1Q=#G{C,W&pxk`xlj7;/tu@@8=VcJ_ǞG81dӘ0 !W^F4]gU!Nag+2}Ne~>r!+cKkY9qFQl~kg x4m0:A׃9آ;L.l3aOo?Y-LԴW>m4^D d7ޑCS >Ah De[HֺtaoPt0~іA,CO.ȢcRo lEzd/KXchfj u%_0R!Ըm.`cY'5o5M;jW~w&.` Zt_^ ;4;q-޵3 !_IҒ5滢,xMF,˄Y"VPwr| endstream endobj 187 0 obj << /Length 494 /Filter /FlateDecode >> stream xmMo0 !Rz|UAa۪V&$E 6~=HUAgɯ~uo$ƛLD- t @ZcNt=YNk`T=Ro æeCڕ(>Պ AiZsn[6uc^0Xah\je?0bprOY[AKS|dۙoF)MZ}4W@{YmG;<9`;K (EytbabisbgEjq(po$}Idon-p!J m-O[L endstream endobj 188 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS >_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=@)& 8Rx uD\j2HV0CzL] bctI g$`htы0\F0s jd< I6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZKq endstream endobj 189 0 obj << /Length 695 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS>u;q~:fc_0F)lGιmu f8Gӫ6b"!YUe.`M{My?IC4}+̝l/Bj*{pϻƲO('$ *{>J-9_eQ"V$)MP:^9 ^` br @ {@(\,RH&ti m+3ԅ ,;F$БzFFieD(0A1a8yΠFpnù[w6p@ )9r9b_ia|F-(:(nQHY^`nA|n(戥K}s\}sԑoA&vqc⠦ YK^ʛ!_my_)=^ ^{TGRw1RDž'xJzImi9j'pͽܳ/-_Z,N_: ~iyY2q,nЪ5QN Y58.] endstream endobj 190 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOLg~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> stream x}UMk@WlxW1$ |hPzuj%#%m 9ؼ}3IڽضߺItՓ;q\]U}s9|\qtY.Wժ۟oo C}? F`PޗS3ߎN6[w:n7l̵^y]/׵IFsuB`nlB =@ )U 9yI(ѥ S*043``ÍSqf|kiCc, pDˆzF:x0)ljsn l9u}SrI4"nXCA8%&ٵ6AIǚc:˿#7^YHOupQF^odž1BЖEQ?1^׆ƨАԗ039+ãbLi~jЙ}s~zrCOe fYJ|֟uМ8gΈrYφ}ŊϘъ1LҊkgigϘ݊og3f3|3ߊY[3 =L3f/gd ,' f)Rx jb&'W *~8d0UPt" ~7a3t> stream x}UMk@WlxW1$ |hPzuj%#%m 9ؼ}3IڽضߺItՓ;q\]U}s9|\qtY.Wժ۟oO+>G|V|~+>C1 V|B|FB|/g)g1{!>_|&~'a9i0K!cB{XTK5;)NŽbPq<${y儢 1 螡SsWѱ?"~t(Vu endstream endobj 193 0 obj << /Length 852 /Filter /FlateDecode >> stream x}UMk@WlxW1$ |hPzuj%#%m 9ؼ}3IڽضߺItՓ;q\]U}s9|\qtY.Wժ۟oG|F/+>㽴3Z~Z83f3[:٭ ߬Lg3t33 ~!>CO!>S 33>IY ?BXIAup*Çq&#{U-'H8qe%@ 8{Y;lFz?< endstream endobj 194 0 obj << /Length 851 /Filter /FlateDecode >> stream x}Un0+CW`$ MEDbɐCUA6ّD^}{l; imXc3t5n/.XjR˺^o3򼟸kյ uA )`JbD>`2$`TY'``9&Dkx,+0*NXXQQ3c 7M/߻Q 𭑦 btX& #q,pg'~ι58|%Nb'QDa 8g"h~ ' ~XkzǚOx! !=iaM4c̓ʳGym: C[1Flx L^"K~2&NCC&^P_,KV0d 1էMw"CgcY ~Y =9O('=g)YB|֙Bs:Sb+>cF+>3qg3K+>#>cv+>CӊϘ݊͊T_|~+>Cg!>o!>_33Ϙ/>?㓁41K!=,ߊTG^1|8Gh=¼WrBщWI\_tЩUtȢa5}n endstream endobj 195 0 obj << /Length 851 /Filter /FlateDecode >> stream x}Un0+CW`$ MEDbɐCUA6ّD^}{l;y| #:##0)%T\`YQqJƚ`ci|1Mލbo4m `2WQ/cW888sέ-./qJ;&\ k(d?F#h0\?IúXs>Tg ]IncT5obY:socsOPcYB?9Os֙3\Q.4ٰX3Z9#>^Z} ?L[ V|V|oV|3[: } B|)W|L| ,Y a!SMV,鸞:?8C8G潪N$ĸBO2{Nu]ޯpDQ endstream endobj 196 0 obj << /Length 851 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWUofx \iEܰpNMk l4\? ?5=cMu/x1g1=ia4c̓˳G6ڀ cxmcfƨog!/lmΘ8+^P_-C#[34IN؆1t?E߂ޡSrY ֟gg9433.XgB3\iafq3fts ,>G|F/'>t3:~:83fw3;:ٝ ߜLgw3t33 ~)>CO)>SK3- ,YJa)SMV襤:?85JC4G潺N$ĸBO<{Nu޿_E,vFo?; endstream endobj 197 0 obj << /Length 851 /Filter /FlateDecode >> stream x}Un0+CW`$ MEDbɐCuA6ّD^}{l?YtգиY}w 9]7puewSClݤMӍ'oܺ sR^}5s8\Ysfi<WOlKQn}w̭][G 6sCP=Co`BIVCH޾;n},j7ix#7~hp^g=a{>^(Vu{_cwtj̧S! kl֍]]₥+U=#) wU4H6!L@@B@q\s *x\i"EܰpJMkl4\??ˏ5=cMu/x! !=iaM4c̓ʳGym: C[1Flx L^"K~2&NCC&^P_,KV0d 1էMw"CgcY ~Y =9O('=g)YB|֙Bs:Sb+>cF+>3qg3K+>#>cv+>CӊϘ݊͊T_|~+>Cg!>o!>_33Ϙ/>?㓁41K!=,ߊTG^1|8Gh=¼WrBщWIߜ_tЩйԟE?.(Vu6 endstream endobj 198 0 obj << /Length 851 /Filter /FlateDecode >> stream x}Un0+CW`$ MEDbɐCuA6ّD^}{l;~\N=Cu.7զOu½t}5s9Ngiy| #:##0)%T\`YQqJƚ`c2U{75Ҵ!\,18"\aD E_sN[sS9)9^W$js7 GZ ׏p$cMϱXS_ 7^EHOupQF^odž1BЖEQ?[0^׆ƨАԗ0 9+ãbLi~jЙ}s~zrCOe fYJ|֟uМ8gΈrYφ}ŊϘъ1LҊkgigϘ݊og3f3|3ߊY[3 =L3f/gd ,' f)Rx jb&'W *~8d0UPt" ~7q3t> stream x}Un@Cz ,ei#&JW)R Ƈ}͌zv̛^}{Xn|V4/octuU.n?ꦾs ˹Ǥ?;}ܛ<8~Zf/ [-E~ԏWehC`;tx`h)"w$ F&V]βBia?FZއ_<(m6P7}wjߘGbZ؎?wvóZoԺi6^:} ?L; N|N|oN|3;:K}KR|)W|L|Or`R,&+jwRR{xI^ E'b\!o'}{p =C:~oWq<"~t]Qn7|1 endstream endobj 200 0 obj << /Length 851 /Filter /FlateDecode >> stream x}Un0+CW`$ MEDbɐCUA6ّD^}{l?Ytգ;q\]U}s9n\i|ٺQ]jOtusR^}5s8\Ys/'7F3Hy:K-ٖ?p>ݝ2ZkXwm1985];B U{hFYs!yvq`TGy7{ E]&AjZu/?vG_L|z;9ڰƦokܰ^\zu \g$y?qמk(_KdR$| 4hd52HHNsL F.8XV`TR!fn"_LS5w[#McL#F X1+N978Nsk`q KpN8q )q4ϮEp O.?5Yş81Bx.BzҬÀhƘ'g 2xk=6u2,bق6E0F,eL燆LY` YecODV3Μ蛳;zr֟P.O0{S3ux9(uF: }6,V|ƌV|gegV|F_+>O+>G|V|~+>C1 V|B|FB|/g)g1{!>_|&~'a9i0K!cB{XTK5;)NŽbPq<${y儢 1 螡SsWѩ?!~tM(Vuw; endstream endobj 201 0 obj << /Length 851 /Filter /FlateDecode >> stream x}Un0+CW`$ MEDbɐCUA6ّD^}{l?Ytգ;q\]U}s9n\i|ٺQ]jOtusR^}5s89Ηfi<WOlKQn8N[-#;skQ70j(+o!$oΣ;n},j7Fzoкнzr::Q:XTߙOo'BZ;vv݋ ZԲW<'suB`ilB =@ )U 9yI(ѥ S*043``MSin|kiCXc, pDˆzA:x0)ljsn l9u}SrI4"nXCA8%&ٵ6AIǚc:7^EHOupQF^odž1BЖEQ?[0^׆ƨАԗ0 9+ãbLi~jЙ}s~zrCOe fYJ|֟uМ8gΈrYφ}ŊϘъ1LҊkgigϘ݊og3f3|3ߊY[3 =L3f/gd ,' f)Rx jb&'W *~8d0UPt" ~7a3t> stream xmUMo0Wx8T·~h[ ۍT~3r#_)9۞c$_{t]P܂~ݣP_(&w(R|vp#P)->g_B?q8SG AC۽[ia߿{2ZE_cf/1/{/4G+)bUUwkuTO4[@ 0@`%! #P .w)úp%KcJe Rͤ(*1:bDDR@ ȓ2UR*N)KIΡԀ0CS,km:5Bͦ&[Y{Ł@꒩)NMvSpJs}irphS ᐙ2L9ΙV}yXi8'z Ԛxq1GyלNZ1fXt:s0>wpVR.խr)>1qҾKvHX1iS5rM yR6FBlH>]6b 5&5&0a'evb_dfQTtQ]zK/WБ^Zz&孯ӷrW.&_rUOz䢓n9)C]!􁠧r7dE?_;~T?m endstream endobj 203 0 obj << /Length 719 /Filter /FlateDecode >> stream x}TMo0+J6*ħöUSEj9߯ IVcf͏睟ݛ{)^؝}]u:vzyu|CW$nmmΑmq5)M{`qjS5үxO%r^q &\TƦkw(:m>8+>4m="${Jљ8=tz-/nqOR|-M.nTSXlDmqb]goo*co߭r#el[⌷L @ baomBҽ$`$@B)@p@)p2 d Ί?a.e8s`Wg+`#)S%~8NTҌYE, (6*3FӪr44P#Yf͞hhӰCkE88+j"7G9~PpC+R2C#`p˜1q EE5=F]=7z&`qp&bð| _/cSMrΤ f/%m Ȱw \ԉCb֓x5cfw(:Kzgqf1iXg3Np y/hHS>W#/5ferTapC w=衡xz* endstream endobj 204 0 obj << /Length 720 /Filter /FlateDecode >> stream x}TMo0+J6*ħöUSEj9߯ IVcf͏睟ݛ{)^؝}]u:vzyu|CW$nmmΑmq5)M{`qjS5M2үxO%r^q &\TƦkR@YwDoYia) SZM5_$$>kxq4|;o4vhwqB؝Bf#j{p7P_?{+4}+VYu}e}n.ˍggfjj{k:lF #QhJq  HQ/e.!Pp #]gQtVTv)#l-g!7'uӾ:[sI r.39uf *gQNxEqV11V啣Yq:54kDCZ+)]Ws8:а/9R\Qrz\8Ç]按Sp/ d8D(B!4׳030 =;fzÞJmw&^0C~/nS0GKW皠NdzG5cC)!=E^K<3Iò8ȿ q3NOg{ACt~Qn~ɸ\ %1.: *4hH`<4̶E hS endstream endobj 215 0 obj << /Producer (pdfTeX-1.40.24) /Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Keywords() /CreationDate (D:20230627120007+02'00') /ModDate (D:20230627120007+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) kpathsea version 6.3.4) >> endobj 149 0 obj << /Type /ObjStm /N 64 /First 569 /Length 3281 /Filter /FlateDecode >> stream xڽZ[s۶~ׯcr:6;0eljS_ȱgȴSYr$*M.R )۞e76d('1Nd :0j$) M8ر vp`[zLK"2ʹ&t-JBdDXS2j$JYFiv,Qwp2"0=f% D &.aav06!g!FZcafrDg:Z ص! I@eqL9!8H'jZ6x9 f!Cx`3Lc)2)$AHZqcBݡŵ΄9X"a)ʘ`pLLrIL#Dۢ,YA3}vkkjWgbSjW(eY]C4fahH;mpJJklF&G Պ +NhF\BVGIa'η>Z vKi}M sAK|隆Y`7YDLot {(Y`¹*ѵˆv>ֽ!2DкLȫ8T^1ةA7cK= V]1 p* D$5Lj8, {ׄbhO;FV4:Hޭw&iz4J?v[BkCRHZD5VFU<~ѫ̏*o{6F'Ѹrہh~Dc!C*Z>@KY+cOAǂLQ Rj+ɫs` hg0)5:mw8O}"}(PSѣ*|xhQg|{lZ*zoz!a S5x}qk"~\9L &Vm2­mtWZr"EpĖd5  07W8:O^i'l)x΢\L/w<vl^\ z)4^q26d&oM[0qYs|Bioo57ܮH cxMS35nϦ>PK4wSӭWg̭k_e)c M֔s޺u Z!4>QQh9~K9B7x8[Ƭ5,Bъ:fX몘2N 1| M>ݪ 9 TpMnOuẼ_cUtVǠh2)^T7Ni_NqD'F7CU`b CU-` 圥s˲ 'G7v O~ B= ~ݴ͝ƩϻB7QvSe'2 V+j۫hzSL6G|<^7VmA!+w޸Vi<(Duns5==A޳+]u'DZq}` ,X}iY]ڀ8x]w ve^9Dn؁/!p8Wwc8$#JXph"bb :ժŗZ,al8N% .tNl) (|1hR2>:J7C=  k9[qjвU% IOr ?"L?e-:{'{i3 endstream endobj 216 0 obj << /Type /XRef /Index [0 217] /Size 217 /W [1 3 1] /Root 214 0 R /Info 215 0 R /ID [<39187C5249E971E52193B329322B461F> <39187C5249E971E52193B329322B461F>] /Length 573 /Filter /FlateDecode >> stream x%oQy˴N;è[1U02UiFAUDBM.,DXZH/X M,m8ߧO~s.3GD_ !m^BvBzH\Tp.R jlĠNRAj&8Em;)P'%RˑZ! )X+! VX `=dT$nȀ6X ht$lnPs3l.ʪ~;4mm`̫ؼ쒥=PPiO{A>Q(dB?Ww~0RZ8y ?qJj&Wp9Um8cp.2i|& L\eh 6u4heQѨiK5* mjUG,թT`)ڟԠpREKMb f n~]kPV /ZJiڒ?g3Sܺ?y>= options( width = 80 ) @ % Make title \maketitle % Typesetting commands \newcommand{\R}{\mathbb{R}} \newcommand{\Z}{\mathbb{Z}} %%%%%%%% TOC \tableofcontents \vspace{.25in} %%%%%%%% Main text \section{Introduction} The \emph{intervals} packages defines two S4 classes which represent collections of intervals over either the integers ($\Z$) or the real number line ($\R$). An instance of either class consists of a two-column matrix of endpoints, plus additional slots describing endpoint closure and whether the intervals are to be thought of as being over $\Z$ or $\R$. @ <>= library( intervals ) x <- Intervals( matrix( 1:6, ncol = 2 ) ) x x[2,2] <- NA x[3,1] <- 6 x @ Objects of class \texttt{Intervals} represent collections of intervals with common endpoint closure, e.g., all left-closed, right-open. More control over endpoints is permitted with the \texttt{Intervals\_full} class. (Both classes are derived from \texttt{Intervals\_virtual}, which is not intended for use by package users.) @ <>= y <- as( x, "Intervals_full" ) y <- c( y, Intervals_full( c(2,3,5,7) ) ) closed(y)[2:3,1] <- FALSE closed(y)[4,2] <- FALSE rownames(y) <- letters[1:5] y @ The \texttt{size} method gives measure --- counting measure over $\Z$ or Lebesgue measure over $\R$ --- for each interval represented in an object. The \texttt{empty} method identifies intervals that are in fact empty sets, which over $\R$ is not the same thing as having size 0. (Valid objects must have each right endpoint no less than the corresponding left endpoint. When one or both endpoints are open, however, valid intervals may be empty.) @ <>= size(x) empty(x) empty(y) @ \begin{figure}[!tb] \centering @ <>= plot( y ) @ \caption{The \texttt{Intervals\_full} object \texttt{y}, plotted with \texttt{plot(y)}. The second row contains an \texttt{NA} endpoint, and is not shown in the plot. The empty interval is plotted as a hollow point. By default, vertical placement avoids overlaps but is compact. } \label{fig:plotting} \end{figure} \section{Interpretation of objects} An \texttt{Intervals} or \texttt{Intervals\_full} object can be thought of in two different modes, each of which is useful in certain contexts: \begin{enumerate} \item As a (non-unique) representation of a subset of $\Z$ or $\R$. \item As a collection of (possibly overlapping) intervals, each of which has a meaningful identity. \end{enumerate} \subsection{As a subset of $\Z$ or $\R$} The \emph{intervals} package provides a number of basic tools for working in the first mode, where an object represents a subset of $\Z$ or $\R$ but the rows of the endpoint matrix do not have any external identity. Basic tools include \texttt{reduce}, which returns a sorted minimal representation equivalent to the original (dropping any intervals with \texttt{NA} endpoints), as well as \texttt{interval\_union}, \texttt{interval\_complement}, and \texttt{interval\_intersection}. @ <>= reduce( y ) interval_intersection( x, x + 2 ) interval_complement( x ) @ Note that combining \texttt{x} and its complement in order to compute a union requires mixing endpoint closure types; coercion to \texttt{Intervals\_full} is automatic. @ <>= interval_union( x, interval_complement( x ) ) @ The \texttt{distance\_to\_nearest} function treats its \texttt{to} argument in the first mode, as just a subset of $\Z$ or $\R$; it treats its \texttt{from} argument, however, in the second mode, returning one distance for every row of the \texttt{from} object. In the example below, we also look at performance for large data sets (less than one second on a 2 GHz Intel Core 2 Duo Macintosh, although the time shown below will likely differ). A histogram of \texttt{d} is given in Figure~\ref{fig:distance}. @ <>= B <- 100000 left <- runif( B, 0, 1e8 ) right <- left + rexp( B, rate = 1/10 ) v <- Intervals( cbind( left, right ) ) head( v ) mean( size( v ) ) dim( reduce( v ) ) system.time( d <- distance_to_nearest( sample( 1e8, B ), v ) ) @ \begin{figure}[!tb] \centering @ <>= hist( d, main = "Distance to nearest interval" ) @ \caption{Histogram of distances from a random set of points to the nearest point in \texttt{v}. There is also a \texttt{distance\_to\_nearest} method for comparing two sets of intervals.} \label{fig:distance} \end{figure} \subsection{As a set of meaningful, possibly overlapping intervals} In some applications, each row of an object's endpoint matrix has a meaningful identity, and particular points from $\Z$ or $\R$ may be found in more than one row. To support this mode, objects may be given row names, which are propagated through calculations when appropriate. The \texttt{c} methods simply stack objects (like \texttt{rbind}), preserving row names and retaining redundancy, if any. The \texttt{interval\_overlap} method works in this mode. In the next example we use it to identify rows of \texttt{v} which are at least partially redundant, i.e., which intersect at least one other row of \texttt{v}. All rows overlap themselves, so we look for rows that overlap at least two rows: @ <>= rownames(v) <- sprintf( "%06i", 1:nrow(v) ) io <- interval_overlap( v, v ) head( io, n = 3 ) n <- sapply( io, length ) sum( n > 1 ) k <- which.max( n ) io[ k ] v[ k, ] v[ io[[ k ]], ] @ The \texttt{which\_nearest} method also respects row identity, for both its \texttt{to} and \texttt{from} arguments. In addition to computing the distance from each \texttt{from} interval to the nearest point in \texttt{to}, it also returns the row index of the \texttt{to} interval (or intervals, in case of ties) located at the indicated distance. Another function which operates in this mode is \texttt{clusters}, which takes a set of points or intervals and identifies maximal groups which cluster together --- which are separated from one another by no more than a user-specified threshold. The following code is taken from the \texttt{clusters} documentation: @ <>= B <- 100 left <- runif( B, 0, 1e4 ) right <- left + rexp( B, rate = 1/10 ) y <- reduce( Intervals( cbind( left, right ) ) ) w <- 100 c2 <- clusters( y, w ) c2[1:3] @ \section{Floating point and intervals over $\R$} When \texttt{type == "R"}, interval endpoints are not truly in $\R$, but rather, in the subset which can be represented by floating point arithmetic. (For the moment, this is also true when \texttt{type == "Z"}. See Section~\ref{sec:representation}.) This limits the endpoint values which can be represented; more importantly, if computations are performed on interval endpoints, it means that floating point error can affect whether or not endpoints coincide, whether intervals which meet at or near endpoints overlap one another, etc. In spite of this potentially serious limitation, it is still often convenient to work with intervals with non-integer endpoints, including data where adjacent intervals exactly meet at a non-integer endpoint. To address this, the \emph{intervals} package takes the following approach: \begin{itemize} \item Floating point representations of interval endpoints are assumed to be \emph{exactly equal} (in the sense of \texttt{==} in R or C++) if and only if the user intends the real values corresponding to these representations to be exactly equal. \item For cases where floating point error and approximate equality are a concern, tools are provided to permit distinguishing between ambiguous and unambiguous intersection, union, etc. \end{itemize} In the next example, \texttt{y1} does not literally overlap \texttt{y2[2,]}, although R's \texttt{all.equal} function asserts that the gap between them is smaller than the default tolerance for equivalence up to floating point precision. @ <>= delta <- .Machine[[ "double.eps" ]]^0.5 y1 <- Intervals( c( .5, 1 - delta / 2 ) ) y2 <- Intervals( c( .25, 1, .75, 2 ) ) y1 y2 all.equal( y1[1,2], y2[2,1] ) interval_intersection( y1, y2 ) @ The \texttt{expand} and \texttt{contract} methods, used with \texttt{type = "relative"}, permit consideration of the maximal and minimal interval sets which are consistent with the nominal endpoints --- from the point of view of endpoint relative difference. The \texttt{contract} method, for example, contracts each interval in a collection so that the relative difference between original and contracted endpoints is equal to tolerance \texttt{delta}. Thus, if a relative difference less than or equal to \texttt{delta} is our criterion for approximate floating point equality, the contracted object has endpoints which are approximately equal to those of the original --- even though the contracted object is a proper subset of the original. The \texttt{expand} method is similar, but generates a proper superset. @ <>= contract( y1, delta, "relative" ) @ We compute two separate intersections which bound the nominal intersection: @ <>= inner <- interval_intersection( contract( y1, delta, "relative" ), contract( y2, delta, "relative" ) ) inner outer <- interval_intersection( expand( y1, delta, "relative" ), expand( y2, delta, "relative" ) ) outer @ Finally, we identify points which may or may not be in the intersection, depending on whether we make a conservative, literal, or anti-conservative interpretation of the nominal endpoints. @ <>= interval_difference( outer, inner ) @ The \texttt{expand} and \texttt{contract} methods have other uses as well. Here, we eliminate gaps of size 2 or smaller: @ <>= x <- Intervals( c(1,10,100,8,50,200), type = "Z" ) x w <- 2 close_intervals( contract( reduce( expand(x, w/2) ), w/2 ) ) @ \section{Notes on implementation} \subsection{Endpoint representation} \label{sec:representation} For the moment, interval endpoints are always stored using R's \emph{numeric} data type. Although this is wasteful from an memory and speed point of view, we do it for two reasons. First, use of R's \texttt{Inf} and \texttt{-Inf} --- not possible with the \emph{integer} type --- is very convenient when computing complements. Second, the range of integers which can be represented using the \emph{numeric} data type is considerably greater: @ <>= .Machine$integer.max numeric_max <- with( .Machine, double.base^double.digits ) options( digits = ceiling( log10( numeric_max ) ) ) numeric_max @ \subsection{Efficiency} All computations are accomplished by treating intervals as pairs of tagged endpoints, sorting these endpoints (along with their tags), and then making a single pass through the results. Computational complexity for set operations is therefore $O(n \log n)$, where input object $i$ contains $n_i$ rows and $n = \sum_i n_i$. The same sorting approach is also used for \texttt{interval\_overlap}, although if every interval in a query object of $m$ rows overlaps every intervals in a target object of $n$ rows, generating output alone must of necessity be $O(mn)$. Sorted endpoint vectors are not retained in memory. If one wishes to query a particular object over and over, repeated sorting would be inefficient; in practice so far, however, such repeated querying has not been needed. \subsection{Checking validity} The code behind \texttt{which\_nearest} and \texttt{reduce} (key methods in the \emph{intervals} package, which may be directly called by the user and are also used internally in numerous locations) is written in C++ for efficiency. The compiled code makes a number of assumptions about the \texttt{SEXP} objects passed in as arguments, but does not explicitly check these assumptions. Nonetheless, when the R wrappers for the compiled code are applied to \emph{valid} objects from the \texttt{Intervals} or \texttt{Intervals\_full} classes, all assumptions will always be met. This design decision was taken so that the requirements for individual objects and their contents could be gathered together in a single, natural location: the classes' \texttt{validity} functions. The \emph{intervals} package provides replacement methods --- e.g., \texttt{type} and \texttt{closed} --- which implement error checking and preserve object validity. R's implementation of S4 classes, however, leaves object data slots exposed to the user. As a consequence, a user can directly manipulate the data slots of a valid \texttt{Intervals} or \texttt{Intervals\_full} object in a way that invalidates the object, but does not generate any warning or error. To prevent invalid objects from being passed to compiled code --- and potentially generating segmentation faults or other problems --- all wrapper code in this package includes a \texttt{check\_valid} argument. This argument is set to \texttt{TRUE} by default, so that \texttt{validObject} is called on relevant objects before handing them off to the compiled code. For efficiency, users may choose to override this extra check if they are certain they have not manually assigned inappropriate content to objects' data slots. \section{Session information} @ <>= si <- as.character( toLatex( sessionInfo() ) ) cat( si[ -grep( "Locale", si ) ], sep = "\n" ) @ \end{document} intervals/inst/doc/intervals_overview.R0000644000176200001440000001106414446531450020073 0ustar liggesusers### R code from vignette source 'intervals_overview.Rnw' ################################################### ### code chunk number 1: width ################################################### options( width = 80 ) ################################################### ### code chunk number 2: Intervals ################################################### library( intervals ) x <- Intervals( matrix( 1:6, ncol = 2 ) ) x x[2,2] <- NA x[3,1] <- 6 x ################################################### ### code chunk number 3: Intervals_full ################################################### y <- as( x, "Intervals_full" ) y <- c( y, Intervals_full( c(2,3,5,7) ) ) closed(y)[2:3,1] <- FALSE closed(y)[4,2] <- FALSE rownames(y) <- letters[1:5] y ################################################### ### code chunk number 4: size ################################################### size(x) empty(x) empty(y) ################################################### ### code chunk number 5: plotting ################################################### plot( y ) ################################################### ### code chunk number 6: set_operations ################################################### reduce( y ) interval_intersection( x, x + 2 ) interval_complement( x ) ################################################### ### code chunk number 7: set_operations ################################################### interval_union( x, interval_complement( x ) ) ################################################### ### code chunk number 8: distance ################################################### B <- 100000 left <- runif( B, 0, 1e8 ) right <- left + rexp( B, rate = 1/10 ) v <- Intervals( cbind( left, right ) ) head( v ) mean( size( v ) ) dim( reduce( v ) ) system.time( d <- distance_to_nearest( sample( 1e8, B ), v ) ) ################################################### ### code chunk number 9: distanceplot ################################################### hist( d, main = "Distance to nearest interval" ) ################################################### ### code chunk number 10: overlap ################################################### rownames(v) <- sprintf( "%06i", 1:nrow(v) ) io <- interval_overlap( v, v ) head( io, n = 3 ) n <- sapply( io, length ) sum( n > 1 ) k <- which.max( n ) io[ k ] v[ k, ] v[ io[[ k ]], ] ################################################### ### code chunk number 11: clusters ################################################### B <- 100 left <- runif( B, 0, 1e4 ) right <- left + rexp( B, rate = 1/10 ) y <- reduce( Intervals( cbind( left, right ) ) ) w <- 100 c2 <- clusters( y, w ) c2[1:3] ################################################### ### code chunk number 12: expand ################################################### delta <- .Machine[[ "double.eps" ]]^0.5 y1 <- Intervals( c( .5, 1 - delta / 2 ) ) y2 <- Intervals( c( .25, 1, .75, 2 ) ) y1 y2 all.equal( y1[1,2], y2[2,1] ) interval_intersection( y1, y2 ) ################################################### ### code chunk number 13: expand ################################################### contract( y1, delta, "relative" ) ################################################### ### code chunk number 14: expand ################################################### inner <- interval_intersection( contract( y1, delta, "relative" ), contract( y2, delta, "relative" ) ) inner outer <- interval_intersection( expand( y1, delta, "relative" ), expand( y2, delta, "relative" ) ) outer ################################################### ### code chunk number 15: expand ################################################### interval_difference( outer, inner ) ################################################### ### code chunk number 16: gaps ################################################### x <- Intervals( c(1,10,100,8,50,200), type = "Z" ) x w <- 2 close_intervals( contract( reduce( expand(x, w/2) ), w/2 ) ) ################################################### ### code chunk number 17: integer_range ################################################### .Machine$integer.max numeric_max <- with( .Machine, double.base^double.digits ) options( digits = ceiling( log10( numeric_max ) ) ) numeric_max ################################################### ### code chunk number 18: sessionInfo ################################################### si <- as.character( toLatex( sessionInfo() ) ) cat( si[ -grep( "Locale", si ) ], sep = "\n" )