geosphere/0000755000176200001440000000000014131644322012233 5ustar liggesusersgeosphere/NAMESPACE0000644000176200001440000000012513472155746013466 0ustar liggesusersimport(sp) useDynLib(geosphere, .registration = TRUE) exportPattern("^[^\\.\\_]") geosphere/ChangeLog0000644000176200001440000000605013472155746014024 0ustar liggesusers-- to do inconsistency reported by Ryan Case: bearing is expressed as -180 to 180 whereas bearingRhum is from 0 to 360 -- Current version dist* functions threw an error when using a two row matrix for p1, and missing p2. Fixed by setting "drop=FALSE". Bug report and fix by Miles Wood. -- 2 November 2018, version 1.5.7 distHaversine bugged in some cases for antipodes: https://stackoverflow.com/questions/45889616/why-does-disthaversine-return-nan-for-some-pairs-of-coordinates# dist2gc always returned a positive value (the manual said it should be negative if it was at the left of the circle); in contrast with what the manual stated. Getting the sign is now an option. Reported by Charles Mohan, Hughan Ross and David Cooley dist2gc used the bearing for an ellipsoid, not for a spheroid. Reported by Greg Whittier -- 15 June 2016, version 1.5-5 Fixed error in gcMaxLat (reported by William Smith) Bug fix in antipodal (reported by Gareth Davies) Bug fix in gcIntermediate when crossing the date line -- 7 July 2015, version 1.4-3 Included C-version of GeographicLib by C.F.F. Karney. areaPolygon and perimeter are now using that to compute these on a (WGS84) ellipsoid. New function distGeo (distance on an ellipsoid) also uses this. -- 17 January 2014, version 1.3-8 Fixed bug in destPointRhumb. Reported by Bart Kranstauber Fixed bug in bearingRhumb when using multiple points (incorrect results were returned). Reported by Bart Kranstauber Added 'ID' output to dist2Line distVincentyEllipsoid returned a distance of 0 between NA and NA; now it returns NA as intended (reported by Sebastian Luque) Fixed minor bug in distMeeus (using 'isTRUE' where 'which' is appropriate) (reported by Tyler Smith) -- 4 March 2012, version 1.2-27 Bug fix in antipodal; reported by Bart Kranstauber Fixed bug in distMeeus. It returned NaN when the distance between two points was 0. Reportedby Daniel Reidpath New function geomean to compute the mean of a set of coordinates (optionally with weights) -- 28 August 2011, version 1.2-25 Correction to gcIntermediate. Points were not exactly equidistant. Error spotted by Jason Davies. -- 18 May 2011, version 1.2-21 Normalizing longitude to -180..180 in midPoint. Suggested by Aaron Hardin -- 13 Jan 2011, version 1.2-18 New argument sepNA in gcIntermediate, suggested by Lee Butterman -- 1 Jan 2011, version 1.2-17 Merged functions distm and distm2 into distm Function with new distance algorithm "distMeeus" -- 4 Nov 2010 Additional options to gcIntermediate and greatCircle to return SpatialLines (that are cut in two when crossing the date line) -- 8 Sept 2010 bug fix in .pointsToMatrix (reported by Joe) -- 26 August 2010 New functions: dist2Line computes the (spherical) distance between points and polylines (and polygons borders). makeLine (like makePoly), adds intermediate great circle points to line segments, for better plotting onGreatCircle tests if points are on a specified great circle -- 25 August 2010 distVincentyEllipsoid now handles NA values. Bug fix suggested by George Wang. geosphere/data/0000755000176200001440000000000014131211217013135 5ustar liggesusersgeosphere/data/wrld.RData0000644000176200001440000047236013472155746015063 0ustar liggesusers7zXZi"6!X3])TW"nRʟXV%>"UZ J3+s;ە<&|DNaNMJ%qg$&Y3.:Kk8LaZБVv0n ѡ(KL u2 Ȫ{"l*-Kxh8$fmsi Ϭqu5ܦ;|- HVmU ˒';ZO[r X<D"Ir7] ZF_S(oID4Qڈjz-WXy` 9O6XAnw_i4z] v2Lt_aڣ~'6x %ٚ&k\_gjxg%%aNyI87I4۴eaojIqkPe B&W?HLg{ka?%&|[=oBd}p \jd!EfS4qڀv--OU]9Ҿd8`ԉ mAOXi%Z@Bˑ] .W3ϲŴ`\a=ByB 1ҿ,f*C<@N's-H)̕Ȗ\$nxjl1c$$vs[]#\9-OcG_H!8=5.N?`02z)6(n)7*4fz 'l#r<(I80]X[fPq)/s;}Wdd (DL ~_s\V$T{5'*X(857UacHܳ+s4o5F9=0Ox3ƆEj>f ! Z:q8~qJ Nm|{^+k$epSpd; afE6i+u4 {h &Ás ؾ̿<޻vǤP[HK50cKOjوjH"@Wfqs4`xLMpb~9e*y$ȍ@mv0(U󩁥/16% Dv"VřeY#ro>ܣܟҗ9 zq#j@Lh ܙqtʐ][KH )U)%J'3Y-BZ'mUknrJq0\$hZKkbQK5Q S!Wg%^r8wQ{ͮh]FM-Eutᙾ4p9VaP |v@_#^ ݭ5u2/GXXOOz$ۇH(ki@\ö =Q O`<Ì[RӭHiS*,mN0az5-.ivaKPXqA9ЏWަ|pT_MBc8[28u+\\%??++a1ղTaq?8I:\+r+5h{n HV7)l\c tr IeuDA%NboK]NThk(bb /O&nh[ aD㻇q֭"s Xn'߁!є }J V,֮-) ^B@]@W׈*IX!+wdAջz(mXˡ Ge)FYcNTD3`B1x&ni{qp Owltm̂r Я#qpvr¯u+B5ϗٙ(7wƤh~˹["8B[ֆkAnK^l#i8ĝN)&3kB= Xmy3-+c|,$@bj PD~^.?)~(fѵ$!tA-^^$LqcX;B" /, ?tͣ3İy8xNzOΈB+C&ZدB|EMuTV~->uuGˤt5HҚ|$j GMy,ӶOI;{(cl=n|(̪AsJW#fOcp IToZx'H ;RlPЋv[l?V8bOq@~B X8ŏ {CcFKiz⓱^ge8ā R.u%iL-q5 n mM5>{ 4:Q/ƛzbP psDLMy$2$JAQSݱl&W&q *蹥)7xen1+bPۛ탱X;CnDGvRN)tB/Hkc:bYT9xKPɫ[Xgw󒁱vPY9S m)v5" )t牟PFV :AuI0r&)C|`5i! 5Zix>6|ݐ:ݻUn{~oSkҽ)}#0’ #^e_˄4DӺhpúdp{F"`%Y5;؇TX/F#j?X& L5РHx]ޓ./R{`tK " JB._?&_E$o`Ocw V&ӭ~` RLtTx>@\_ŮYt+byNaZ+ebb{ (+O{og$ih0C #ژSOt=a -n'v7nfV_S4;nRYԃ1gjӋ gU!%81kYg*Zi] 0'٠C0U߼ CN6טQڦc RA1H= O5S4)[;(kybX҇˲+z.˒z,=ًԵcpCbjv;=!_@E+n g.pbXj8ǜeTKj.7&HP6;]+˯ZBJ~śe#Q%JQNHO?N%fRvccٵ;bXD,/k\~HoZa=yZ+d\N[fm q㸃MdkR6u{3p[3eR"W9ăi5ygvy^<RI]1^tcVP|}tw4? #`xMvR)lSWy.< P-YJ.1fgBq)e. J+-j̩XkU<`bAJ|o&JI>Bj speᦡ9`gU ݳXKez5٢lYhݱS^kt)>*0V "IXt$ΈW$W-&e'ȇ鳟^=3"<*t0Be2u<\:D*Ry A}BQ*1)â?0owon^l&1vhĤ ?6@x#9lQ;ǁIBJ#Цv*6Kd4{>4s֨*: s*^#Enb-!mm(gB^N^4ꭳ|[ 1MޫBiʐ01s@u +phv Xv¡Bo]v&M ޱNw؋0Â2?4m ԞK=4,@U>ƚ!r ۢ_T~z+ֆ4l"`b.J_-Q7AF2GǕL}lj/HN4oX_i(62"%q]:H#ż⛑fnvDO&5ђsvA3MUtQ^Ww; )B??c%t o޽8}/)1 e%\ID(Qa.?E"We5A)F},E'hXZcM*muKЧSZJn7a ,8TQTDⳎuVѼJ$f0wzme`Uc\mN YzD\:Fڙ$Vr_ѽ[_7D5 `ΔFrD.c7}2F\kI <fU{>%e+rfӰd ~ԋhe,UO*dtt'\vjQE=jӸtj`b+4XYn'/HztU| R2@Q';iX`??q `r.xJ;ıbxDo,!d ⺔/QY߉`h%$&{}T5<19IBZ$ *ۣȖ2I bf l!)މܭƗzZ|=ZOlm!CK u^&$9& k=]aB}9΢jI?cHH bo^Q /oǧjW8|'nC`1%F(!zE^/|k xl"^A?T'+mP1 aDLF?%DV*9x +P޶VƮ e\7*/ȜeՕ7}ڹ7srWQ0 +6 ZY{+IvJ}ٿ[;V7΃}Xzm]PfT?ݭZmJ e) 0\nHBb.e9G zd4;f6񚐓آu!pyNtKLQo5E\ĕ!M|GG fIKK 8P0ԏ[RJ6 ,N|RJ`ӝ;g=0Y, ڎ\W(qm}T%`e  "Gƨ>}:5t]?91Irj4}& E᫣#0)n0'4z&ЧE{Pvfl#jb`&əJx9laL.}&:*<϶S#np\~;IF޿f0쭐ǁc'͞yww9KӲAmpl)K4ʿݺ(h.}.~@ 6(M7һd.EiX pI[ 5 fطގgF/m23i)̰kG7Ne,6E[CPx󬿔V 9b=.U#%`G)y&W:EaXG.<E"FM^ydܡ\~q9)I(CVI5|GϤa?g!TO̼`#2Sə.LwSS< @d;wd]0ѯjkeSKe0q!ܒ pfG,+5-I]5Ď}W*~UE2\1u/&AAȴchϫZlk!y>g4=#Õ 6)Q'}?|O*TM"=C>|t[%GE EJ3HǼR~d@}&0q_K@AAORxdϓ$M9- H(S(Ij2֚ юO>~ ;r2_Z_і=1^QÓҙ}&J x>/V^>qٻeAb5 !J$ ?CSl<0}\w/bM7 0j}UEšA"oKqFna8Uen.ffT y,L|o%O;# pݷyEBYerX08ӹ ʽA4 LFYBnk 2T c퍜LoU 1|&"qLtCR#ڈ ^: XNa e4S^#RghC OwK\=޺lI;g|)6|o gS|2`i|EZ*(|gZ].3rF";"*v3_90hA!@Y3}ޕG{tu÷ANQ=^cB>O2Z& +\ݬx?~tZI%OLdpA)'T3?sT! ~Ww1A؍F<}#ՕR" }AzWr7us*^i!|^tuY9t:&U|2 3X姻ˀ@y'kK*V;uw6qvj39/W:=96Ρ}&#漢PlU9JxLG2ǫ.E|@FCJdп8tvPbi(]~2*&7Ѵlvds]_Dr`!UnI0͔x)ycR_Ygmóϼn hqȄZT|8e_ lY}6=V9P[FŚ)qϜ$;ia '&ٽ:qd\zw؆$)ꅾ&hz.淰A(g'8U\"VG1ie,O* 3< R hC LAvMn)0*fF ܨl]SQ BOq@" s[l;b͉8QdHW$0jàNɬ%:7N t(j5xaS1^W]g4f嵅-fvz%lAK)Lrw- /}ðڐ se ZV\ͺS81Xyxov#0LTa?Lz!xq벱]Rtud3^`t;{_ʈ-1[!;JAR]c7[. վjM=iv01I ]8&ȕFRs΁Q>WX6P%"2jV+I; (Ƈ͵wS$DXsS2-th8E1LzFϩ/-_%.KRv*!?%IJ1D(͒߻ƛhh^+Q(+>yav| 0Z% *cr,;CHW%-Ll m =%6;!pkh2xe0 O&Ƌm;%z*@Pod)upN7p0?4 |GFe#$2GAgEOHw1w:R :ܔ22[iWxWpS*dwJOH9A7W䧿,,SU|9qF8G>0W׎s@H9, @q6 Sdve []_ugб?À[8aH&/Iֶ 0Hj$go!42'ݨ%wt3=`\22=P~16+X9.'%&,UG63jDZK9r9V^e^*BABʲC h\ ;N1m博k.;C) Qw3ZZi+؉l5ƈ=9FDP; c'V'&Tr=%llO#nth`{4-iUD*umuh{WeUzzHy5Rh,gsE={B_85TW'm@6ma,q҉ګ9ݩ|Ă#2ipǎV_ǫ;o=::YQaWZ,J\F 4})Wb[2r9Ĝ0LW]_L' |\ĭoy㝟aq%=h1dG'瑔y4h M78hc}Ru'329T%'ȹz{QP]vo/K1Oŗ.坂crP^{ތ&q\|[X=N=¨~ܒSKYbAx~mk 1S5CNn+a|D=8|&< ptx  C?tk4L#[3>dbLL /0Z& x8Q9MQgilm,e Zvce^\n,HeC/[yلUDa d{_>BdGw! 9U+PE['2 Yae}b)aWtC8<SꁅvLx}S>gg BZ;j׌R2 k(c M3/Xyc_̀NJoΊZ9JVf=(h\[$W诟;|YqFƐ߰q 3k e``l<2Z{X lSp }HӍOt]w^|VҘp_K&k UZ4 v^׿YeGsr9=i ah 2M<;){*ݶXڅ2s/?nEJGw?"fbyX͞ h[km32ۺ 9ߺX,R&eow6WO +iDW?3)u?韫l"}y<8CGRkTu' Ԍ+f+n]Q*F29{h]x]\(0iYbr+Du@>,KՊQjm-gsf2ıni};qe@_Μ**7c[X,1H9Z;1āe{j?iaBqQml)Aτs[8\)jytIKPbۈ}|zFȡÌ/` 3XrA8Obswau` Z[zAEW+mBQp=_{w $ 9V/ -.ax޳2|QѴ £:K|Ų؍..fqx875 x}l { sGPLD궹;L[izpD]*"v5Ö@hBɬ zoi9w/LhP0$e|,W4EI~]rY;=c[IWDNi0&M^iVJRU\a!j:#9H4zSR,15^Ba7I) X邢Rb7S/907]Pk2L3=.cD3]ۏA %rdM)[$:Uf:VD:(M&4k_M/.0e׼|6lPioZg_mA?n#SԵ>/a] +f[+ {L3*t(z絞e~;ie_peޢ44.Z3'0-bk!1YqT^P=Gh"z7+C( 5[Jhl-[Ԭ6@;,6,\k#1r%tyiLqwvXi,ߊ˪, |G($εc#?µ҄sT, xF!V:pŞu0"УDez>|x|V[Y@ynxm(;9%yGv#Sjp$HLD YOhfao3 3z؉Lm׎̊b%<"xdr}¡ea C7q&Pж+E5;=%=.#LSYAVdNϵwXܚw} i} |JFVK Xe?ê:qPW)#T;&H\ŗ!Y[}rzbP_+ 6vR2~U~ꧏ@u`M5;{_%!GK,4~cAh2.' l.B\u 2nS{/G%3 T4>bұۛk=t(8 I^ϕ?q>Jޤ y.bϫdL63,0oC0 M)tBaIA" dzGf ܠRѾ\/DfL]ګKNЫc] ~l/: _ifᖩxu#]=˩R1YS,kk.?%dUxeO5Ŋֹ.~_3rc vN&:K7y Bo;F rsXN⫶m}Εiiu-<S^"ʒѶpt J+|[蝅\T=6ɩ=Mh~EI2ؗmnAZx -# 5Ҿ&.rZAaG'}e\/{|4l(؊&R+P{5}PAC5ad:5-=&nu{QApʚ "'[lo@֭C" pt4 /:VAg~åC>wFPskn @h1ɝXjz(('/&UmgCN<mn{:<K-hGC+\Tg!2*#_2I-Uj` _T]tL0m V:ӣv9/70.t{_DQ&15^d aoy| WX6U"H{*0MmSa*Cf2/zF s, P0 'W938/2ñG8j#ƻ5uYKu$F[sܞoVLqqg9|,`:UO2f}ӭ(~jդY$խ軭!V ʃa}|3RAE7{ fNZ+g7Pʙ=8~=pV{9gzú>l>H)/RI-jl=%'!OcUpW@,&ڗ*8@g\A{@ LX=Mn篆nHɅ x+JQGwJ8X)ߍTXÃX^$gNjiD:xYlOV@3Je\,;hgbhl& !ڮ1d͋}apJpp'BxTh#"6%%ԑb1S xjZ/IE AЈ?Z1V-Vl&ILB Z2T۸.SEy8 B+le "CEݨxs4$[&knf".LD݌89 ]ֶ4~6lB4/e2ȦZ+ Yyy;QyQ.Vu9+}k8B+=XW:.)>Vi*uJ_'a4h.|H?ZPYщ$?|N7uΟôR^~&F5.gI=7/ĭK7^o/7sC #l:6!qZ\0Бߔm-zi+m2R Y6}|#bH^A튟H[,O\;cnvqL?:Ŝ5sPOc> H*4#1!1Z~٭pݿ70'B .8Q]֮d19WH-۠HkRjy~>$Z/ ´ 쩽_`rVd;)Ynz8(ڲr]r:QܹTx 7[z KXJ`'Q\L~roȔpwSېhQQ/:Es ϸ[ bVwy0Шs2wWǍ`>"Ŗ2JբS+,=g Y=]ݤU yq}6tZBh*ȧaBqxui%_[4$m,މ*^poDIY=R?QZH)CX~{uGKY NsnٿuuJ_Xun"2,WNb`u: lW0Vß̹Ga:KON sMb~^KgQ  |WAGeoY@ߊGIS|"F_usHrLwheKjUϵM3tPF$gOs#9SR<9fN;U 9o0c{ҍf(2 ~YD#wA B>9d a=P0u]wq>>2r*_^MSV֪ Wg~x=9YQ";+N.z٭TհȡW 5!.TnA)rzNJ4 ֶeFCS,Wk >uhp֎c\xE\ 2 }l%HHu 74Ha|T'P-jnm}FBW ??ւ3T  |Р1|)&ا1vd&mp0 (Gt68IEO 0V@,)$w)@*o뷙epKuG JmesA6= ;ڹq8X&,m"CRG8wĭZ9ٝYJ S)3:FV2|Q|ό^]P k񮩩oT`VYfSJΙI;@٩>T<.(6laNneF6yS&ce'kzS%$ߏ7V4@MO{ {MԈWޥGDK}.nk4EϵЕ940b~)V^K(Y$(5_宍,ֿKOk7αC؁%,lPTTv?d+^ruU4^/BdU&O@_H׹}n3&,]VO5/@ks|n&<ijEʬֻ) 4:G |&sk< {ͧw {K]xR[?B<7HNOFy6C[tа=U@2 Dд81B"MjXuʍ"Q{od7T曦Ni6ñPkAek 5nӹMa: :<݋f;׽Undj%>: Pr!49dBw`[#Mv( H4p,$aXӤY?Kf44y$-RE0 q6{w5:* _oHH$dBWkf)R2 b曯_Wk1Q?h=pO۪3CU|#׃ܐ]*m(_9|} J>J:lN6-P)!$pe S}[ }UMĎIۄΐ>Dtqƙ{:rVO8 ܚ0G }Ӯp;=mLkK~WΚ}TZ Upu(~qZpM(zB&CZWyrq,s4(kHxWvZ" M{+c쀢'i_M@Z٬ZcV vHv% =c b>t<~6gϩ# &ܶF+, k̵;:F˱Q{H5WPHJr.e)s׷Ɋ4rʛ S__%S<`[1wkvj^ !sAY@QJk"uyxlKURܬ ˔1S6t0㿤\n1M7Fլ!^(HW?+ϴK"k߽vuo߲4(g["iܤ4< (_@]vDN~7%AG#O<ڤE^`7u~c"O^߇oXdAYrF-c̈́)29N1N.,uu{7聐2c~ rIBopN@5f ո~ӻ3Fi/#dj4̈́hYp3]/7&շ -1usavS+4A$zu96*'[Mb.KeiAOb>oFTab%fpYe r(:Ԇw&c6ܽTtoP0|8 &؀/HLœ,'F!-QOESqUOBW[0i޳ Xȴ 2ZW=6g_&ruDrb +l<+c+9d䧉Zf)Kaa\wT@1lUߙ)0K;ʜWmJyG~BwǂyG:W۾*B|k}~Q==a`*<[;&/Y>d)F֖L8@b7ͦ\ሐCXd-:HXbl+ klVGƘI9PRfE=U/t\e;И p z=$WJRB`rTRg?nj_lXW5dCiFO,(yY3o̥1<6^se_d1Ü$2?SKY6)իMNK ptq"n2>uUSُM+O8wX u 7޻/_o7#ۯ"vA.A7yF%74+E6-/f0OH" YbjSσ[ `_*{o-|k8g V񬐿,^U0Z ;ڥ1%"wMۛ'< tM.1P;}wHI=uER`a7r&3$KYQ0ʱlf@cN͒9Fft_Fu,ΣE-p(4ŒBn P,iT+9@@u;b4*;ݝyH]}0abnR2/=x~?P60jԛݡzGh!7'|R?7ʣbɫŔ2hx6R5m@QpY:lY(aX@DT6bAtR+E}sX=ʙ)S,@Q|PLw!\YnIJ ŜT[jE֡1N7党 D#٫jRَy ͱ! XW=& lل{a MǰӁr )}<Cu;׹,^ǥV;YR"5C)LށX@ؗ<%0MgOrkQ ={<}LHvG'NuqLk`r8@C/ ͗E2!SDL6wm#QYVZ͏3@/͙ixufV Ic{AQ&!kxhBc5!e餁??违VMP>^~L\SzobRy4o`4!Kl8ѻ\YhM\P<Ђ snUW@B8sUv@6hn|1,V栊\p졕PiX|; Г_ǼG8@GRUL`y^}}&bdP(҆Qwuhi"UH5=Aj,&9.=ni hldR@ڎ3T F2RhR]SJn])Sf^bU^D*p.''cdܐOdt y/ȵ%7 l݁@9jzwW[5\M{ 5Hzk^6rfc@`<AשƜ$137S)=h_EgX>(GsꬃޭI4wީ.u2XIb׌ #nZd !;x7諫/i$X+J$;t-T0eO^.<4*cZ^oKH\ kjb.NIeY ćG[u _Ɇ_ E&W9, Y#U`Il%yt)R QC!`>'$0wm ;i|qM![-ETTm#V;#rRޅu4=njX6h،ؖ+1KJlU޹mz˄!L.CׅS|G+y,>RlxS"I beN𖣇?"\zfzv"GĺKފrr`8l;CS=`:x0&!Px #R~5Cr.~6hʁ@O(VUh>&K}d%gJtTmӜ=OSL喺87vWBV4&ɥu;/c:ΐ)J gꢳٳ%I#"$+*u&>nq%3eG'ÑI^zArvr> 2 &CIJ DH2 |.M?, %Rr l Lx>ki:Qd@A?Đvˠu)3qwMl {KB;G=VaWt<rDJlnu_8I .X2r%X t3]S3PW*4mbv{M'kMVدc &&򫕖Q󕚜0F]sHƒc<8뤞rp<Ɛ By0"QCPrKm*-ٽ[=rvR~a7L04\$#'qu BLKd'Ϥ5jSzc`pgψʓqy Ve"pd~H2yUY^[N*0.'J/= aXk~)!!{0tDg0LNg0\% n.EJH0b}`86[(bTa?Z2 cuڦ7G8%:-0ח8A?"eisˏ`WqwA*]?y#D9-U,7 +O%O;@ne h?l.٠Z66@@7e(۳flj9֗%@bb?2KDR2{&(GU k7*īpv^kG 6ݱe'-kgG+@7u/a`v΋q>ۛj`׬{]4Wd|2Jz GfRi`mDZuA Sa[$-͠,fbcf D~ke60n\X[Y]ΔD a܃_~77~ߤvI'syCP ^d3Y\  @;F4\hTW5kA{1 , U!C9/gYLa"J|t_Nt8ǂY!-9FZX*,~]b+)udk9vf. R1h)ׄ:LjL3Z$HyxU6+J_}N#lQ&ʟ@Mcvo4:JTGŤ:L|vlL^bz҄|فo 3 /O/dXAxl# rlԞtHPzߥPu9e{=MљN'?c^G)\JU_ͻ;-f`>i] 2&vtCb,LZ:naQhNjTy*ꗎ-3HF'R `A^g_cXcŦ%!2ih`ȏ N.[G#xOgy)cGZ06p}:bp)Sm&:xCE=~l54Щ%247EA)+cՕsȣưY:1ӽJqm/ϱ.|5RΪx,r;Cϟr3kCĔ1T/^D饀ۈ0TY(k?T~xf>Pӌ ax1Z.x@Npi2[9zx`u'>H EIeHGCtg)|rKt兀pKzP`wliF{ъG[*-l!<7+^L)N!A;i})Z F-n5ŋ^5xYVBDǿ2IF,x \UW2D֍v/|YYkRtjkR #Huв:LN XK7wvU2a30)eVgsC7L^yR,7?nI&^X u_Dvr/aY.9,Y`kv+wH%5@[k)rbǷl2)$l.@p ZA3Ya(}J &\Z۩:̯/8WHZٺp9;كɸqzEWS%_*Oe-m KYa[Kk >'/˧ɍvW8ِppRVY)aj/n'm~z5rHDA{yњa07-?3q#ߪxNÌb#ӉƦ'T^B GhpaaL0;yaeCN>Tn;~gMVm+4MQ =u4{\䮊̩@ꐗerk /(c5 ì/8Ynx7-'3!1tm0pHz-X@QzBBBsbڀݣ"0DZ&"aㄹnHeMpV"bWsEcQMjW :9Ul46+^Moh7"(gzbr:sbd9]mv4VDm#h.[<+ƹo2-[|#¨YOIGgG=JQv]yǀ`. :E8A"A6C' O>{g/&~Xg erwcə!;*OW^#̘B8M,jR}K2<2q^.^~P}S؞)Ke]!z~7ꋣ5M0ӭ5OUKZlĄjL L|َz{](+6P@>OtR6r9}"I8[beTShesSֳѭ"R9(Y`fB߻*T5M:wu"h GOAAg(*Mi⿃՘xnP/;11NǦy\ r = /`4 ( gYRT IbEy~vx柟LQwQi=Aw=FSgȗKۣK@IU tiXǭWaH r“W-CfL>SU:ҌUfVO?Ֆ儀rPp^P} eޗN\ +$jiC%̤{мnG8:\q.7sR%qW!bfʍx\J ,]b}J bNԓeR* 3s9۲Uv, c7ZSdYKAGά2]'SNfd\CYNb$k@!~ UڌߠtӗX'wT_S"\2S,ћB5T#rZdݽi|\ɨ:V;m v=0إ"rCBR6s %¾CT,bG\fS]O>"]ߗֺ¹Q:Fl3Ll]^AyR*#Q(;|9o^co &4d#}j4-7VU3݀ t'l`B3Pz ~Ңx`8yk F^'rnD1߶^\{aՋ`z~ ^a=IWik8sV*r>` *feSDAڰIZm8HN(wFR`B:ŐsU;aǾY-s)#7Ŀ據. tz}#eeU.+ZTq8bbt/-F9N꫌? KCo]u{M2 I$jZkҹZD:JEDeESp;ɱY7&vKQ˦U]6D>kޝs'5yF'bԝ3R GS摱NWxح~aV m.$ Ty^Mfzaq5A'+ RF7ڱUkbLW8ı :RBvUwJI&Zs"Z4|+|R;M*`wlIX U|4T#M-Q[7|<sd8IVU9v6 ̃"5P2&_wjI`S`o#2I&4¼N8[?^֡Ew|pp ZĐW*i-ࣿB~nt"W7\9\BF'D""}qJ+ՄgՅxNO +dl*JR=3Шp)hR,qT5WS.n@_A$ LG'ǽt%!IGZ,q=,̂S WK,÷t 8?vФ-I.詆ɟﲥ fTv&:ȥC *hz :tjnXQ `uL=D<7UNB( \an|‹)(ԏnHkJ?m 'UXt$ Kuh6|limꄲʒ#n/{ŚTiɠ cZ*&i#V>hzD[PN T66ӥ/7@[J4h6"ηIS%5zyY* PI,,q5Ϛ\Ȉ_{s|a>L66핐<?1H+*ᆫH!leӐS3m&לnˎZ$uXۚrO?yÏDY4w.R)3+Zk=+/JeBb_F!~ֽ7^tbju q.I[K3"PܒWiK[G??),!H)hjz8եmw`Aw`3W8` NDmMGvbLTFoBIu2p؇ݞ/8/;Ԕ%5=7Y2nıJR&+h@)/,9}JUñ678G~ *u(⬆9hw] CHjcwoUOi_x6{"Bb>c6|FېU b(NòT@@gm!@62 8ĄtV,+8uh,|4s`gzS% ]U\ \7##T _>{ lz v]P'tÒdqEI@OA!Hg ̌]靅-Gz*40Nk A 5l߾*PH/\-:8 _P&pͽ`vkDHmi]v!Y@=A9\D9R:Q6V"&g'eyN+N (MIak [#1W2k'%{yOaoG9hGFHĉ\Լ!pZ@(Wel2("`&ʧ,"pNv*ELO_װ]%@` \OloBad޽Q`n0vC9/ '+~Om _"wm4o52ԷmǺqUᴸ6g=GɀjLul4[chk8/zRm@q-MtG6LxQnҗ]s⤧)\}Q9?$,Z.0J_rS9˄K=.cxA{N$"B%`Ast'P(佗 .r1·"RfUlWƙ0,kľ61nHbI?".+!Sl8gk΋H'7e\VJI?"9c0ؾu,fcLKCY*LKgBe%86USN)M74&aKWuV) rjEqF:.GE~817g.GwGԴv0w7'қP>".tN"W*$a:kK6uynU8< ~8tF@NQC~2E/0> i5Lލ{XR{lPN ,r}$WW?׏$FaB_wagьcZ{aS 11\~J?ߖ^=L0A;hPN9v?°x7}F @aDž F>1..h7N,îIE~TѭLndo!1}2!;E'.iZ5Ub3VvA@taAKPMyIj!2?af8S`JHkRbٟfnBy^@^փڰXgU6O +17uĜfŰ_鑺(w]("|BM# Wbf4u|<w# $l R& yPa]"-'̽(7}t'W҂05F676Ixm+\긱Hvԁ= l;xBJ74ZgA%nRJ wBHVB[FƂ¿NoȀC(Oկұ2CapKA曼uÐ8q$33,W _GDVb'+x̔I$+Z۔-t(`Yxʂ->% mhfmAEY4;k&1M1Pn"̒ PX!Rg9o"?;K^נJui#frѯ{';</;?}kDh[^DjZw滊%Y4I: 7W dY@)Iyk@P1*qVIq mbV@Z,<*$t#UV|K&IJ]i r sYWhSS&nק$;jM$N7'hP:VBDz G0c qQt +iDK 9=]kr/}2 btrs>"Kޒ2Lr<,'۶Ճ^;a|:@0P@ |VY^&( I}9ؙxE'nO uE?fu7I5jOtBZ774`^]9s [1lfvb:y_k訂*JMN!~%x78C51 59 0 g/BAIzHՍu":RHHʶ ղq`. ~~.RQb/$Z,1_ ,:`nY'7B\X?׬LR{XNw=!{=&[r bnc<P ֗.)1ꯡ3Pj;[JA99m(NaQu 1*M1KȐ5QP΋[DX4<=6pNRGͭzT37$.' ++,`bм1d%%k yd-ȭoT*FǫW%?6C=Wq؋>Qe'+:ݳyӆ!}fSj*q]2/;RiY>/+\q< _MU? $6mQDǐgDݻkTx3$\쏯VW8?Ȇ~˘"O Ae i*>@Ğ 3~c8BC^]d#>RJ|69qVd}(nX<pk0c=M ;;Wjm]G{V@n覊+ $e mŎhc|3 3̊?2r݈) :6U:AA/+~R]h%r.HVd{!mC:*}2#4y xt*] >.bͧJޙLJtuϼ89,*ny\S$iWt=D܄½/7;󏒪(Xml.˖v_K{fo`{d)YHAjvM>E~hJN>MþƽF ?pIb1Ha2u))9Ho߭iN g}5zw`tP~q~i }'- RJoڞu'HsfbgWWbuk&lY~YC7 k/U5]Gʔ~^7`(OʅgO`UYu(i6͙Ӹ.^I[&(^H h>?O,wVJA.oàpqj)aJWޒU弙C UpreփA: "wixK=ݔd+\$GW>[rv.|ᨐw"GR@G]=ou&`kA{f]gv,T#Qtvm7?eշ1t"bpuBV0QRucpe|bήrbի/7Xb[41 vQ̌TAOd#.1FY%R5~E=dKY Wu^eEdP1x׼ڒ밓V?<^ "f9:0w>LuZ+aZ;c6*zտ8.j?JLߖS[Ϲ4ksR H`,l&dSAu;ݷd1kuIa(-:2S}i)׭tM|P\n)\#ct&bp%Ju ܌ybvl'x@>ޅUHP盄w^2*EOg R}"KsZfT‡&DaU=xEp$qjF,*ReeO9wZTW' s d2HuG6(e֊"088VI[:<[3zM\٘}ˉ[_h[Ui2j27,C=^(%::E'e} nȼ!H. Njrt[GwR>3/[\ad؜OIEmR1e}W15$q9E.J>++|V2r-PBxQQ@,(eP9G[6~̊ nXd8GW]_WhP)A1=TH()TQ_ZoJ48lCe( RVx ?Yr:18[ZMG'\&pOmj 2s_dbydFs}Xc 3L#1O-vGYM\l a&{OUc +GlP!_*ߢX F:naʙ!.?"5[*EJjGyϹT0e`9&/Bc]`秘<:|9?(ϕ݌/uz58lp pdN.qF'S)< uia{-ف\x,ς}k/@&Їuהd;E+ܼDo ԞT8! 1\=w(F:O @Ӧ;ZIaUk/\sP7!LOmY^qӤ v&=' \M8^Œ/_:ȬܒyG;c:1lz[tpcRc[ƁLp(bea4l]UJ5~_XȣQUԾ 0iLrKԎjQh8-(:1S]ܽpw2_JVM]O/ΩaM>GM_ś 8.C܋$:Mݥ|;nr*EfG+^B~ذag Pձ<>T,[F˩xNշ`fs7T\*2<fhn=ڟxL֚H~ҡdx_@mȉnU[NӾ*Sc4zy' .v߃EV~?Qĥ JȞOL#[s%,1aqDD$w#_Hh:B(68滰YƸdW*>^dn=}ߒ<?ּ5tsGa5P*#A|ffZH -_[EXP`_JV_ L6,TL.0Ct<)YBV/x2^ؽj'cvXr\,﬉TQEG;Y ̣#8F 2Ɉήbu BM9/I Tp+x〧}E˕rx4IB@Sb(w6(璇Q'uF#s=D(iډك*,~\GVDٻ67"wIʳ~)s{ z!:7zT~ۋN5/n'mĵJ$= .w*ho* 1>k_bGkX[t6*ة ]܈$ 2 $Kf[frFtFVɀ?Cpwh$)%1x@Em ]]mƍM6kUlz]V9{B9Cn&c5e0|OK@bdVd^OmIߓl -ET ŀ)"6t-{^.KCF-Q>ͻpVf(XWtvJ ]צ:ɑn0VﬧI{AN0gA\ۆ|c{0|*)' ޏi^N@7=㵪7XØCZ+[Cah)2J_f[ cmr-plYIm iΗe=a= ^xs2dm3FkE|]o vڛp6Шv0X߾ocㅪ Vg+cyt`ҷ} UhNb+%TگgGǙ܁C1ysI#G |dc=CAo}hn'P8Uѕ9zL u@&l2<zʮuN\ƞ)MNtvbEA0]$IIg1#ygSMAU9I ڴՆ6ۼr<杗om`e9?G4$|pR l%}ٍB/`YU|I"5"=``ַ6m |t9>k3,LY6"Q ƀu@#l"f N$|jgrDZa˶?b}H$hGY=0y)G7VYOMK +)VK׸e-fI2r5 +=qy@?^ aɮ*,=<`hmhc@;bfj'@Nó%Q؈$JX06u|ICH{YGL iN%J-~'zt9j%>m}]1 yEP.^WN{ҳFHLčz xC?v)Mh:YD6}[b?*ٺVC7)=u8|xkeCЮٶ\0Ġ":|9:*D"j̠܀KU@=[=igh>d!ii.2ThGT@ }\j<-~ g qAګ1 D%4l?gAm&Pu/cWl+HXS' pkw~Ѹ Y;CZ7 RKEKwJKebɚ yN6X<~2| X+(Q \wuC0(39vۅS>g}bEBB_i-':95AH@FC}DSu&Gt "u;`[$"3]5e`ZL.};e4#cS=~kc`\q+j ^@Py$s`qȸ찰_[J]p7.̈́EdhL4iD^Nzi8hcd0BN򘈭 +Zwȅ]/c,N>Y}d}>p[]f+WuiOA5e":5nͽ^8[mWH}Ď|'6{H_>ӏ2; FG0i ^p4miGܤ=vdd9vUa{Ue;;- #K5%Hn56Xw/G[' Ѹf:Mx8%$˹*!*Y>t3ÄUc>wL;ܬ*ECuD71R|Q=0rI,@l{[sȚ^McGo;=`"/;ҦϠP|6Bc۶W>ȚaVeۺO_a\Kl zǨ;_PӴu,·M kLqz {/[317"+Tx:#@#XQNa2h7Ps_M8Pi?Ԡg:RXOMtkR|R3";cEӆUcJ2GL[h "6ħctȆoe;RN>LZ@:o86nqJogT)aƪP!fR+F0Rc/9Xh. OoRNd!?GLiAeFaZZHJFc;ksޣݭ@Ciֆuxoj侻#(Z"rP 96&0 BeLy9"2_C0hUl&P/$POuDf[E0|9g$\ՇV^_JE>+Y31w'@&țN&# I.vC/NA(%vmՙf+.Vu/p ,' b?eMt߫ؤEӎTJoTrO F@nލQ/́6h:S^W$I;vcXCALѨ5}Yj,MinLk}LpWIrk6M+"A`oqg2$`IoKОJ4YN؞C_uq!SȖ46 ZMջv٤:g&. IX쪀@>)\;XѮ<=h5Z|(Chr%@\isP>ic*&f`vw}q?_wc( D#ǯBW4ԛT{`cN;.|NU;Eor:Yr~ \'2)oz5<ܑ7C8nU~mV9gh{#$D!p㑗{ǰCz6;Y#{mh-x".-cͫvDOc"П#YBPuc2z D1*SPu-ĩy*e7wFL܀d@ΓCu3E܇:FΈ^DC j2]'+ӄl`de-l%n̖XWkՙj|8 ji7}Q$ ōjͺ/&^:ugMNWt@oۊ'\ G?m"+QY;?jHRmu2hE`ܶAsZy`"N+."ќ)E3B?j%d &fzw8u0Vas[6WFs U/cSKV %f+y/(K*+Gz3Ω}g4ܔap1nBĐ1mNQk7{Cfٴcx*B;TW}[1XjJe $vy1PY3b;iH݁TMVd؍9v 귙|fD(BJc [ <|4J9pe=ѯ@}J1ɕf||$/fRCP1)v[%El[ A-1'r.fv(C=|?_.::xj8IGt|cYҒNRzIzJĥ0l*ZJm60 S{E3’=~p93?Hw7ձa8UCR[a şij5[/Pςŝρß_2!UnG%؞B]t A-5mƭ 'ZfJ+`|KlqX3XM@/KC99`Z~вؙ+\A[ĭص@(v9tqoɾ=1Ug"҃j2¬.e UK1Җo9hΜ`Q1]xvE2.tӢ^s"=lŭ!ʯuCQ8ZAPTuk'/f<"ˈ~ޓs߆YA!/GW2IkWDɨ/8ۛ# #jc `;"h?/@?^1S~'ȓAR4E?-8*M h$X?ˈ&Ѥh6htWojв^nx*H`7u9C6X`[{g@bP 0 0ƢZsN@0hC,2=9[Qv?@TԊ[Gq J˹H`hDI9߲3%3,ftxS('7݁@Wܿ>n}U,Sfk<|P 3.Up] 0-;zK)ɠ S|`șQA=9F>8|8pr=Ґ=ee6qDAW+?ax&lN@ 鮿k'V@@Z'o+1Q$g] ^jdMtoYsҝvy 8d+gNt-Q0^`*ssC|Jm hۜ&F 0x˾p35H9[pHj~vH?Qs\ jk w?s$Շ쇄WIG@n SׁlB*ִo:^<c73QwKÝ$3'Z*JCAJ#TKϚ=P2U[,>ܨ˟GƕͽA#y5jObX~R8k [qyǮ5L*e/Qɚ F0}̥G&V`>q PI]Iu4LqoթUGz@ QB&z^0D{P4(+ax6k7iEZ.yULNͱP̪\A獪s], O p) g3\D8)ZnF+kgq.uLjbzC0>BVvzwX@=9v7^g~y̾˱q9{Ol.%V E,=ea[o!ؽQUP+й:8LѻLKh+* - eXC,.L0LbŃ"fi6ydTy)bƞh6YYI%˥ijF'.?~l9p(oGFKx)9M C#QqkQvYdϑUyb$LozL0"S2A$!nNNnJRQSɃ#Qa5ߨgA6g7#Q&zQD }%" &7AP)n5|+9 nVZ}#ⷻBѱ/'ݠDLh&0jaxq*!ݮW#g(yUD<d4py3)LEﴯC$FReBБ[iΝÆdCt ?p3jS{؃ˬ`&3L)UaK=}hI}I y tx (=)K$zrp,]_oP0nYGI6F5`j !c) ?0y[QJOI#bsع% =[^/g#W0qSӔsZ &́#AvƼŖ0?qWZkS @(L r#S!Wlw_0$9m|I0K򕙘fBpj_Rm#]Ё+4CM HFh5̒ʈ7l@Um<8Sm/ƻ)hJRȴna9°MzڙX9B5 !O^IF#$z=Xj'lgXLKߪL=W}-\Y/ yoioad&&,jMzohE!ä)sKL3`XShx{ǚcvq4u¼̨6hܝoM`M|^M؂s@jECT*E)n4߇+C|H]B[δM*wWy?&4vXߩwm`&_MδnvBF LT̗%wɇlnB憁oXπkM*X? \itUM2jTwK:.8':^ [ #6vg&"tƗO fc_V[نf#WNyWof5FppC'J!TE.q-&Q c/0f4Al*1zh +kߚ9u}* x! 諭a$VIrj& ]VYj.f4,1b5< M(QkoJq׿\nOv ,hUqVg xSt,MiqO ZuLPiŶD=Op,E* ]H}E._swz s/ Pei$`~rP=hµ![/q3lrjG PY6~i`H 4d}gΊt["e'jMl?^c2ߺ"R77 ۛƔmDTi2n/ΨCUh_FoėO92T9:8\ {jD1x#+['p8tϚfc?p`\bsA45ُՙ9so2wҍ1NA{%OVONJK!){n_KtPʶ•Kv ;kϴD0 :/\;Mzޗ- ,^hj}b5*eݗ:0IQOR]L5ap䚫XkkߎZG ;س݅{Y*$@ëx=VU=+FuoZ-KG )0sMZ6 0 }۾|t;W&Bn[Rt gNef:Ő+h.# YWR_:UHV07O/OKsW`^C9S 4"o27avp[*G[у PafLw|oʦ}N|dW*'u0VB J}Uf2oxWO!vHRd֞<*x4'GPL6sSr遭Djwp-eM ߉+qh+!pPR;ۍ۾.ż3H.>&a5A./v)Cwd#@T6-kD"!A1 )dLwx>b/1U*)IXA2&|#[*;-#L#gr?9蛴l[s׌vyG=3;pX ˶R$.C 6u5Tg0Y =fdz-C*-鉣 *}[6Tfkzb*|4<0H|f_pj= <dˤbGHлXeFH8w$4126mItVG規Xqm qfMnDjtq K]ѲTW B"( Y^"nCfVqz )_ele8QE[a6ƾ)X,b}+"?X$UsԌ !Jl+WԏQW]1P38 ̱stmmň@s*< y|㷙V 8`tTxZWOꙋ%y&BJ`t!qȯ<=4;oT* l]bMg7־ N3XA:9~&WMXA9l?ƈ^߷yF?G1P[HD} bxGcMq׀j8JN`4ͻeҕq6eO&GYc2uB385p~P^vrP"0 ] SZ]f*?,r'BJjtTO]ŴIM+:pYV v)3x+Et)»|Ž>~z"b }#pJxU)M A!A OI?JRӑdrPGmA9@;-ڐj#3WQvzl_ʃݚ˦Ho_D::M:W- #eSL&@W7>@@@>{찌NB 8 U+\SܖJ[@[-;AU,Z@gMؐz2qud2Or"Nu7ͮΫ'SuV({0LB,j>`(00ՍIVG1e)YO%9o8nMWQNn?6vLT=03#U= #]b^ z1G︧?IF{:}P't[.$]hk}yRQ dps d:?Pw`!G|ݷ懋U},ME?g!"(D@j#Znӭ:^!m"]Tb8j)N$j8pdjGpn@WAm wBnk8z2#9tSng ޝ$`Rz݁L9-"*krPo3ST<}1#Z*:I0WVï6G[/lY$ahATjJ9G~iU 7BH-KVyx QmM ѝ0$·|Ě3O,G1r.:HG$+/.Kn2s 7>ہԱ@XL^EWf!/!.,\uEi%bP)H;zM{J0nybX憤f(O ]3 ZspVםLjn&!X\«CeFs, ͂cɕ@)j]6g OZ=l̰1S Ԇ6ђT1$zM.)E2R_ ݨȘ$Muu~# 6n'4қMO|F0##VuTR6 NLlpWAdjvU>F bަI}AOm@Y0vv=bw`4lh gCd^aBg˜kMTŭEE`vу (wgwFʰwf-$Ofi1* ܩ\u4CԂxt"Z֒:,ݶ? +G?WaX" R@;.@}aMk-nhy0&(TV>֥2 dd0&BTXVVcS2{rqMcC2b+hBDzƑU r'QKf w]uvi~eS *kĎWHldwVR~'cZ@rb6;t@3FyQkt*$ zu 2qެKe]F鑽tuv7l_(!&YEH渱*E mrqjti0>}si5bk+P&q.E1!L^PydKV6M= +s>TEm$Eo ԂY&R9tAOIIpj֨S{^qFGZk ^ڏ->O5} - .=b$R{'QL `{[s~Sؿ/K;nFse&sŏDnV!lAw\eO3ـpay#V PnIZ1d(%fރ£ I%ĸjRӲw2hhMS6OJ_n?] ;[Bwe+:& UD&^F0E_6 %oL{yj'c\たa`~./(gl\Z%5]vB9ڇO#ʩ ـ61fP܅@6.nD.>5/>N{aN8D)%"|ےkM˂Y vWHS]#WM I|Q7E8*PqzBnik0-,d5h|nxF0\SVz:/;%ɦbeUGuEJl~\U%6fx=D%`uU>/H+BWmِHuHn_U A>F ncE:fMꗗuD B=c?뿰:}M71%gmn;!c.BF pp#y$Z.?,gA춀F{q>;>H*bl3T>IWh6Fc=?m; ;,t:W̏2in {f(I&[|.N&U@F՞Ү$fX~ ӵK5ގV̊Fx@X*ZݗZ|䳙 w8\6<&yd/ 0y@>ls%TU(=BkVǝEǙ !k>T>2Pq|5\e[J=]r^2!b*7S!h+lkŵk@*E&{ivX; r#pIZ6ݕmӞIZr쑨 C 2 YޑD1 hʑmJS͇jq{wcٸ՘Ɑ,y2]*ĝV ypC! pHK$Ni,{o2ey#:{q2t&7TkX$~$mð&nQ[zY8Yyّ۔xuޙ][Xv`xh|ᶸ~UIdr9$Ƕ](S9 F5."BE;5~:q>k}b_pW +Ps'Ghc\6`8 7:Z1xoY^!nOcòJݼ0VES{EBzJ'ҍ /4gϯssllvH?19PJT"n8*R)d 5 ֣] p-.'\B<6s O(>)ϊEp JXWiv*ٍcwg (}­ ї P| / < ȱyTN)FxCi8rx| a)b]}O= '{0G&"} 3wxۚr[̌veAbAON)pʱCu0Q{v}KzbGFJZڵE;9 $2ޓ xȇAKZU.{sM!S+( >u,NDӶ$Sá%wΆ^^(x+m*KI3x=M] gBS3QJ5Bή!pcphkU#>YiU> Ȭ̵90y̰x8uh<3jqgEs"/G;gnwW5χ3=n0`4UmQ} AC*&&ўn8H)T8HDbEespѽlsU)]ZJh *RP}OSV/Z?]UrQ j׭vQ?&QR@gӜyG^ݩ7/YO X=C[α>-%ԖjXB{8yw=gB7\﷩}\G"F{9Qwp!q/L-AX _ї̷^g9Y~icɤWŸ:'ߜa)@pB`7L쭕2DLp .}q ~P(39惙q>DhWbKۊSvh XS_ֳE-W7.gg}GuꕄC9%4hgdR:%lM ɠ߄ JutBg*yCApSjO!۪KeU+\|Hr 9-Y8'S["?j+1C$s7%z5 h<=%8z8`*g94am>Q̀WbI˔m\q`%VCrQo! Apd\;.Ko aRԍ\|<_x2.8x7W9*S/HQ PH2s戸}Q8l{a4ǔwid/wAF[w }k0Hi ˹OeefH,;?j2v%4K(G) %PpԳ_7- lxK! ^!,6PYLׄ#'r?۳!} ~$'Z̵d4ӸCnpOGl la9ǜ;3Q !=u#Tֲxd{u^?ԣ(I3/Scj3&MR7Ķ(,O/A^ܙgq''00DdZZnz2/>+y8!wn\erFH9%k%5vCp~mٝoVÞuL %5*bJ}W.k&kSIi7J~H$W?V~{m{|q^D~/9Ј%c=W|d$4!`ƀc{wŊF-55 Fq35W)>MjG,Η?3s-MXb8AJcL &O! ±O\z+ kK/dybKQϫG0 n(~H0K,3ɫ'2{s8El$w0;";`}?D|KXBb4ZLpc0 99YDN1=Ĉ`AtiGgKm,8;n[BϜ']I iCŞ#Ԗ]}_G<ꓓWuLД[Q{i6 O/[WO)D*p ռt Uw:{-XUՄ'5#@̆xq %;hH.!jqezK3DQ~ /޵C5DsX@}@]+oL؉&TYyV8]@ UlV[Y1_7YT:eNþ4Bz` &M04?":4* @@AuVF1qԓS.^=XЩ!)"-{F"8ΐR" c⨧r_dqɮZ.s"MYic^Jg늚CtY~m|g+І.m2M'l`ݦM8z-W0PoD8#l50d470-0 Qm mM/|zuxȀ;5,jjTXؼ?_iܚlXB6"K\Hp/$X4|ԖYlnZbButC_k7ѩh>ֽ,zni vVsvmE%H'#"clt{@ddu0hiIc)K~q1\7壘X>WZJ2Y9l,_nޠiB%Z?rD fxN[1LwŜРmTlAxsq'ERˆ*D/v‚6pleq^윭~`]lɒN+ 0OE}i]m(L'iCɚ'.M( 9 ~/ ߆S% ^{ ^T6M8͌^_BFm~ "9͏{ٿO^*pTZ0os|xȑ{mܚdt]pˆA pVH&G:u@o=gyPS3ZWezpQO4m-vY(v VT3%I"o;V2pl.Ncc!QɰYtĉDa{Xyk!*=V B zLt ;4oc\R9\C`vb廉c)œ0 ۧ؎!o|_s ^FN5B$W~J K4mNy<]șyI 8&G-,vge84.🦋U'J!ޏޯhe?,j~i]\u:a E=x&ܟ5-$ +# +ufߞ6{Gha͂w,e 3S/0t}9-435)%LO(fÊK7D|(T ALЍ ׄU[EnSSQHukRV2Ma{Fcz`V}S9x gvŋ9HLY'Q|Z4S+U Zd2r{Q4(8H(pq˵~6y,$u5(X|#7Rǹ1qĜ\_{aG!|!\lhLnXBr~dr7fcoHi6P45NS/j:| `Hp{B˪E;CIj\'x3xNTg½ȃ FkRZ &2*y XAjlXZtVR-G Ó7#FJ5kS3ofޗSy 47Voa)k$i NδPuqAUXטH-$Cˆa0TJ|q$&1ńNSTL39Xe,HG.e",yk NRO1RmhM7_\#ʆ=n(]Y2*nޭK̤Qu2wq!nM cuMB˔B67<uS/rQܹv ha{R;iLџ}uddw"$4$zD$[~XV\O QU 8;\' v7n})*wc}-Bi."ݍxxZsK%wvo ͥ^q ~]Qc|!9|Y<0`[7^׊S"W9"QZdGS'FȇM\שA쁸+ȱ[-Rĕ04DsiA %kXTiw12\pdY&wiwBJ'wmΏRyBv)Šк,'*{kXNߝYl "!%bBjoWC ^L'='`=wN(_ L.<>>z,SŀOQ1.Xe2\aDoCʕ8fjMX d^~A+|Ug ΡJп<@Mp^h :E!HDKs2N'AN -(y:~g`޹Nh~CsN]]U$([T\opLɛ >:G+Ҏ9[sesz<%jYk>tD(Cg>)-%; Wdg|cAYpsamNwyWGzk-'Vlti^?OeC~[Du]PGדZEp۔$JՈ=6+$lԽ@w08Ӏcgc%R=h0K6nC坁P! #2 hxe Dw!]78`:+ČdpH33@nMuQ?r'3iL',NIV{'صy*@>I rfS+ԾA}պvH![>LT-,s58-P? i z>t9ߤLJ&ŐBp`6mM5d?c>NÄ޲-@ښT ",_^UGK\3FJj=7@,LCkeaߚT'0ׁ7à#%~ 5X-6bӔ.W*=Qgl#:tg5qI&׎/J8lb-2Xhe9nm՟rYp,x(51_sT{C t*dUUM-f8hEІI(>vk4~C;BކU ](rۋʭW]ͷYZ3uYv/cTyN<;L}Rʆ1j\*- VB|¾Pv=RB$M2="Vٷ!yTL]yFU(,g͖$^Ly{^,"9.e Ka៊4$xf#3FN:0J/ߢe0+ZgƳXrc)ڨU- 1/rX)J"G`+}P\fSQ-0ECJ )J!vg [7uмRʺAj/fuF2ƴQ#%`Z;[;Mzmiae?y [QRR>=dԝ<'uO);(EMC (c3?8\h]/`dro#p.+T)3 WA#A " 8(0r>~fk4LKLqSd[ڹWS;Te~o+&hwyRg 0ɬ 1W9/}mr۪+;`{'u)_{}rUO*ALrw۳/lMm5|౉i|=Mm5kO͸3SůrqH?w5s EWXZk ]xyX9Kp+ӣ_UPOzu)H0X[cc9$ǮScl{EBo([F-R +=dFAcj_(ՙMd"j/5:@A Ȉ0a/K-HcD[y@=Iyu6I")ZBc ;sVn-:ZrV{;ZdEqx{I⪤s1n~nU;at>\OlZSaM!Ԕ<4 vd$=O m\{ X=c2dz u {)撚Kг`1<>˨3lHV_4'-: ߣsud촻8f ZIR =AOߩLo"u)H"WA0_ga&0V*(qʢ{trtG"#§4 ;=\ښʭhXH&nyGپ,GCYдhW#` B>^Eך ZZ߲Fb)1!!>+M2;1SIEi@5~^q~ӓz\g;l:@76> Uj PsE>&jz {E௚A2yfrCKo56Y#j1Ot{&{e%*#[ҿ;.WȅJ.*|I 'cS~vnȹ/aRФ :Dߚ n^KfIlF L*sWlPICs\Y}yys]b䠒iLN)7S4y*]ңzdHý"ܱ i+o~gX3]?Ͱ5MO4 51 @jmE]qtgGuV(   R )P N@8}"&_21hwb˴Ԧ|sWBZ>#)okw[qE?>({ౄ>;b2/X]v0}УҳA%1,f`w|9@"k-xVBAkކ? "6~ݫR-\ g20K&JTwlzf{VبyB;>W !o[Z O-f*yާFI1tH}mub80cf bhߵ5Y``=`c 6\q0өcfJ]Yl@]+.gJ ^rGrZOw=vŝ^ J:|s%z]P׫;(E2/4"54Ca!OH>Xzro08O#wl-ZCjkjiQ9dr Ek)"O^NKuX|PBWxkR9Ki_uڟ\m?uc,ޟ7+-$zX+)alwYu-=]<Ìk5MWHVOXɬLsMyM‡Ip4i?wy"Uulxnhd"Mm )LJrz| ~>9Vp{"j_xnf [<"+}3j:R"ۅ= [%f *N&6{ / ZZHԱ;zwLYt} Rp'`+XgN ;|.W?ݣho$)-hOg{CcΘ!p_XkӫTf(g]SrX= Vғ*(yͤȂ5ۦ"tbo;\dW2Ps!؅AVG` hsfY3;@>S!d|0= Jsl&#ݽuKvO! nwoa+ϗmq8))>@oc5@6օ[ Ŝyzސ^=fCz#%_V:cX 'liG;+Fi8H}y͗1ps0zq5&aݽW> 3޴w/6G9;'0P)@sʚo)G|EuɹHŰ}'0{uVE[ؙ v벊3q`o.餷Y;^> j]ɄD)ͼOPW_ t&+t14WO,]||'5tB.$9'Z%iNzh9ŽMhl:^Y/O!o@cYTLLh\p@D&4榑]̤kP'>bkLn#> .ӄf$T\Pe'LH^jX4@.Z?Z:W X_Z 4dS[#ׁ3Jx'kѤW`_FkYИƌҬCkm;HlҿH̄$J^WQpc,77 4N몰;e3n`\3`RDmљԯXɂ>3#WQpdWE[0c"!s5w03;,m/̞jd6LJ\Xױݷs. r>4*Дo0CTwYc#i4dX_Ғχp Wmȱ& Cm2^%b&/PCH˔%/2-.^R bsY9`하bDŗď|̊` 8ߞA;Kƥ\Ƶ_r*`O1=)nwCYj6GETnXHH&C`(NG@>L0nHOX/HǑ&X =m:$'~o3.?}⍩ܔQKd(hƑQPpܦIR_$ =X cKC-G*0,Sm1cw' ivG\tT ӦFD֔F11mv,LhcG6W>Q;9<ssX 'D FZi?=!M^(_c7Ԑ~ᩐQ`˴I,aQ9cNya%h!p|EncLj{wXc\zgy5_ryLǸ;S~yE yX8pqGh\֕AT,㧄3sZ]Pn*J\ j&sŰCəNdP&N#Ir 8!|6^Ƭ y ;Ve?ddR"|<9UP0X8Equ;$v0/Sd}6JK0CA>A:02 I p Kez1pzXLzevdy*_w_`L{u~5G/A@EskOx<2~MD3 !Ycr C5˰o1#n NFijOT~ =#8tM|GYRC"֭qMn)>gm|B }=Sʉ Y).*3+ێX͂G2{Hz-fGQኀ)v.'WXdo3vTQ=:3 W[-?ziYc":IxS%qgS<3jM>h#,TdI6^.⦨؄Ohp6W-Vqr^I+nwPUNL!LlԼ9_Dt٩EqMߓd 9 zک Ex~#:q=sU/!\9" FrE?J@ ntC*V]de4S@eX3T:m KmZD9cuj܊̰wdSwD_xՖѦ+[%AV( Ȁ2HCH$X2IZ"r;TWsAMKAFd1~,>u2B}J_%7|َ갧d#rQY's"U%fh.NR6%sw*@ "+9T;I:ѕkL )̴ہ3b%y1UM U׶* 1p?%KU 9xy0ߖtD !v 79!9ZzDXSXP}Vu)D B,H?8jdW#62tppN]'"Zf*Ty>9<ʢnelUS$@0T S^@ߪ&$*7RZ֡T RAIVLh9B(jm;_=nO!kFTCKtā;H?(=> iPtTQ?tt" U g4MRgeF,"HlZ[$JJ+<Q-ߐ5*0:K{<9Z᠈ms0_>{'BR D0zyBCyZX+/L04 UQR@os "KU{|72L $4ywcWOZ{) DsD.ŜTPso^ o%zJY-tB8kL6oH9k(y0$G6(V!жrg0HR黋pI"e4J%0f0mG9&0ϰTXܠSVbnY^/DNT0*_ a)qIaĹBQwex b~&O̚Rn_4qߜx}z7X]R&콄\=Z;RCq]u Vi'}l1zIl R =MLk$V|z}}Ai> T`4v&CI٫+bŅ N :/=(>pjZQ6@O"b_g:~pvMѬC'9Pb }ż[1uI.Lw< fR#;4΋2#Er`j~X@!/Kzr7em߈~4p+Raz?%:6IsY~mf+֠榁Ndo\eg$ g蘆f&t+\M<2_Q'5Y7&NO@,/O|A9s|W\h<^:zǾcܳ@X0tg"6fu"@, vgۻuWcwd~S*TJk o+&6(q+Nޝ4OT)Җ0!;M,";H|&=ūչ+w~Z/2a*@(}~l",Y!kЫn {Ji>DoDm2ݬ,4pP&T _gEf[B_ 0j31kAZ8g&%w3'ܢK=PW_D"[8:c  pmSp]l\.xm/ơMY@`쿬k>/W'hk>gRkt"M6nj5}@I@/<$IaEl/Qge/fz 7]ɯ|}Ր$(8 ($cEᴺ2s' ƥ;H-lPt ۙ\B0r >XJ&GXߑxuEhGEGe4V(v7HAlz_sDI4Gq'8\o>K.uz"rm>:~0c m[ئ'<[kW<! $"xpI>zEibZ@G]6٬mǃ:ĔzL)^$mVWn6@M@ͤ!AAVXI"B$]oŏ ykM(/F:pCM \v7a+#/~g)s0G/F@X޶bG7a~)OZyZ2>؁">fa&|,7h{2Tfz[ZSdxE 6{fntj:}ICE}Wy4d/Dis^3%:ux^\ K1`|+ | __%_?C>.1x3Ŭo"x1ppB!]:: [7qEx}~U!HLY!yw'[bٛ~0*f@BjN{9d*8?OAE<ړT/`ȣqZAUn3QKI6/8>>jF0tk1䜮HTȊ`]wś8ڎf)Z FD+K @vbx'/{qZntZ'PvXB^%!_\(qvP NTiX+msu&ɞ.7)I4:c> hhmAoLbdZ*Ŷ`!PRlqPQbP`%lyԏ?TJZ8P\H frYkO LR(}TB.j28r#=(HE.ӥ?}O fTvs^2 qku[̱hjtԆqXڀwOpDR_^9_2V&ĬiQ4INY@JQ]ߥw'QV$T^T 9Ѐ),MZzң CSg T*tI$zoÊBJ/EPr/aT8(w_~NO] }5$ վWRqn^c~hgO! *dMSț ĘN 3c $z]4D-,69ՠ (j}/77eҹEӼ{=cօڡ7p/ȡ-M4MsJvZ?S0"yepĘߔTra -D0TJ le6^SPȹ憌Gغ9N[qqiP7G?T֝P yuV EAI֦rBl97wk{J}䗫4lS5ŸWCDَNeSfv(0. h.mfhrB "sKPW;O Yptym.l+[-nVV؂I~z@xmAJݵVn.7|Z]l8&評+X&ݜBNtLVhMhԭ" MfGYBt x͖z9vbX2:~l|lMvNF Nm!b 2jbJ.*x29W!ͻD|st+A3S\?C˼.[CV@=#;=Pw-upZN7p]5QH/Tfvܻ``iMA3cM"htHZNU}qWa;sېvK*zJVn aeDt;d!$&"( l wwTۜ@VPnMuĞH艿X{{lB8ꇨ191@.nrZfW1 Y] Zߕ:8aߥGLf9w$q3\jA9 Խ=Zs3Kv}fsh*ݛ, _@ [);G4qHݭwhQAX:[`hy1ZN:-o{lEt|™ʝi2Q/.w_KÁi"1bV_ZLU ReHQF`nv}k  0#V.aR T!*zakySl-Ud" {5QEvA(P >ǥZ@Akk!qΟq٦^{UXΔITEP9$bHD)ՠ]ȅ&3@yŴ]bW-X3]3tǖV`m,L:};7'D -nN@HFbTi|ŘD3\ xc⯟Hh[z|48g[@/OX[-"8Og9s3*0ı:l!a6<|q ׇ'@J1%Gor8ޒU0SmպR]ZaAۨU |f?7X]C]piGjlp Gʱ|~?k? UC[' K7Z}hQPABEv /?[=m`$`] Pi2[X7\iKO 4&T_{O &㬤aǏ8AuGfjӗݷ *݅QҸLaҜ\D}6KBz@}Atd*<}1P0.܊ÖbWR?}к#=63 g+dEse Dɻ2NLY.%dJ컾ߦq:uzH*1+|8<]|SêjqR%p#U$3>N"lX:Fi j7΅mR5k>ɲ7w㫴л`mLY ߺQwH]|[I+ L/޶2u߶Z#U~e_V&~f)v246.By YZ>gdvZ/tȵ0˾~n `B9c?,9;TKZM12x XzTZ@\5J\J !k$+[yhZ‘;?摀@2s*vV١ vf5l/6u|Z?: zh^{Y-)ȸFzdCtϡy+U~FW펚`l45Uz= q|y,QD Œ6|8k o܇B i{L -rtPթ;k?!r {EPX"A$8 /<ؕ^AtFa;!wZI="n/$rE<'{%bƹ5\bK4h`F YpRj:GsՠvEWb~WwP~&WZ˽}ǃ:ÁFw_V~ѝTp%!}٤:>3M^PuvEƊ޲r(V!B;|' ֍Y#U}lC hDx 0׺n[!mM/"mKIVZ:WۘW @]c5=%*d|pm񦊓6R<-zUx4 T7]p7%"5W Ck]η6rq> n)juX9|)e>W.~ݷ|'ёnt~ĺߩE3AmPm9C "3Gq(1.!c9$w@&С' Լk>\a8v^+籀Qꨶ%hg~J>O\ S]T `'j?MWbymrL24"c̱ :BC9ѳ /G/KAʔ<@hCĔ_z+~~Ψag0<-{b;!?1‹՜B$"z8}Z Y(J6tt31S؆:&XYq[)OyUY42(psFտtNevVzBTHs`7S3'8o~iԿ鿰٭VE ゑ4FLȺըnU]h9}7%Zղ(-18^4 KB"oVr,w@T/Oaept_n}Y<;c,sKm0'ìIாWa,GSDS˰Tݝ#OiVq#D~WX`\!%t.b ċɷb,nWb"*#E_:B8]޵.i[IgܿjBȀK?Kƻ-oRIߺcC` 'ʲ!+TtbH|Pe7 UcPiÈnHN72R3d҇" 4҉O2 FȔ]~`J]wbJ5RAe2w!X\\#wݡpSd i%#pcdҗL*l\X椠=WcFUq=7C(O)&y5Ň,sZ%Uvoq4-xuS)rg4-֍DيP u_l<I?&wa 7L&H9h#(ׁ6s-O9< bvyqF'E'tDBh7ԦVPq7u]3yz?٣$3&]VNh V[iX3@|z*҇^ jq:w Hww/M :R`ӕPd<fuZl:\8-<ܿe+ޒ,캾Xe#AC7F"Pώ97@$8oFv" 5 Ob)v!==U`lt eF \c%8"kɝmVRpdhD"aoцmjXE:H*Ʀۯ%tE$F8!S7]kU| k`*q:,}ް _;qz`YGoaҜ7D5hѭ\$S ɥC'KI_ռq$yúDaS-?J@y!x.9Ѯf4/`}h1Voy* bg]b,lQ{mB +]/LAUҿ {6 ,_@'ޅ!2rM[?(o;+`GDXH0 rItUf0^V#hvT\?B*)?Vc3!:ED䃌E[:pd.<"Mp0Qp l@].٦/WL(U -)kFMֆKê;.>`.Q5Oܖ޴\]rrV]͸)bn@tXЧ224St 'Sad)/Z=`ވdy)W&#Ġ2\p >㎤Eo* ʑDmF|~!]9@n)0Wܴ@ZHto@Wu>0)"_z_dŐlXmsYbiğu޽4]^R8x[gL6͘zs='izQ,#[i  즮+!)AvzkW⏜"(*$iHI7.rnYb,{X:rdg'{dc&} cTXOU?YSʂ+Ac)0~sN$s.W+y=ApzV%.Rɚ"?THedr[Vn~4"d-ȏwhWےk,qGEacb9U[%E$bu/lׁKюdƻ$gsĞuwY.dV~l_l&;bA!^1G,K-J~{X{gQEsDKZ?Z#3n1l3&f/E-} kH&:!ئ mtW]9su$13s΁E%@ Cc-|;+BT.3EN4[D9 ^w\+1EJYSU6`TeX(Hz9m8PI{=9g~5 +Į" 5i]`aEOJ9puW70=+R@`~˸AW/WvŔMF2$m WBF/cmZEQM @dl~ Kqbm=m!1apexq:XV5z!yl >\"%8њ{ teul[~NxMC_G$vޓb%,DG{ ?;ŕsS܄,SؙMq(ʍx%/51tbR`z$ -Fgg#K Gԥ™0*]ӷ )#S}WJ6zG~%k^miq)w]j 3 Da|b!B'֢ W eZ`Sk[ݣ'2h}K $Jv mE" w~&Q]1lvy9|ayyx|PkN3Hn`< 밾)|k?p)FS2F@À'o.L-w1wx04˔U]>瀂(tͻh^&Ň`^nLELGUZf&U&r 6*P9RxjHzRXrCnܝWn*%ң|DTJ P'S&n\ˏ ]J%mZ ES*2gmT3)㘧5YZՐplp4?g/DxO@ĀhՏ7#aO-Pq 3ezߌI("l!Y5Hv!!ĵі[{EiD$ 2cAƻ!4+X]u36] [Oig})XWYp#aodw*^[.A]FVS` Sw2h- +b!.#$U=S =nKn/τv0+⫋ S ۍȳ6F gn~w|`u˸^n*rjq D𣑈0H6C҈g``JQ ɡk'o6zٟB-!M F^Vi@UI$;"e|Ԩd$[GMt8:hE >AxEo`hv@Bd.0҆拝T eʜ7šF Ki.G lgC <s/N[vq5A)}hUU kU{Ғ4&"o su;3DĺBT.6=xm*FZoX9PezWij dB\b oȝi,U`lo1YE@|/z0`:+tLCVl;,\d{VvV>rqEY^Nu|d&ts+}egSe) ))|l=T`>m~;z]өN_6>=8A8QWH}gPE?+B;R&ٵ"oZj 3d5`7"HƫpяV4!MHl?]rVeC  l&_#997#2W]7ʠJv`z"fyzDЋ ^ /l׹cEXDJm[]I~ m`Ǵi͔cp3ʴ#:Yz2(x8vB(L-49e}MhԵ'qY}#7EKV 󪣨8'wC&a#[c6#Ǔh6t5DQuO] .KG9 L<)XP_Ʉd }Ix 8]8Z!"=۠=tC}7M*Y2g&%!W` /' XyJ"pr37Kp+}q!u 揥X\#0*#-Hrw :Q+R P=K?]&,PAhgBeZ rSk~2|Jbhؠ!DdBBʦ[@Oyy%Zұ{^3"JCo뙖U>sDTJ^HgM2om$v1D->%kCݍg9Ǧ]U?>-P\8 B\pjvWXYcLe~bp,gh6N`,lOȨ7 Zl3M׵rʩAjŴ> P@ì^a;zMx*" 3H89*m':p l2@S|C<[AiVж\%>)e 9NiXc=$_ hA- K1C4v|ƂQĜuԡMջ,h 7$yeUI-f5,;^4vr,< Nч1=7.,ԼñM 7A3hJTOi7Ehj!Q6^/pVE*,͙3/ZW>sIT8,cIj)¸2j<'H؜g`9#>%3r ؊I s|hKhjQn]&>{Zw<!HHUI%ndyoESTBD1?S5:6㝜S#&J{L5׎8Dl?ݚn}XS`xK/6_;MyA⾔W0^b۪LyɆw:C 3 ^ӔdПH. ə`avsA1>t;Y 9v9 Ǜ-u3bLBTǴV&5uzasc+B_#I"k*t)H)of]˪CN &,~Xth&1\̲6G/:n" }1|ķ>%6>9> ȕsO74N]3|`0NV{Jه㔡km5@t_lGV8qZ_McJ:l"W&5f Į4M|%zW"5*j(~ fi,Kٰia^8d<=*I n8EQs[tAGe) %'67IG"YX"b;Tkk#k m"}Lgb';ǧf?otX9f1goV |_ӫB%kTJwkry|\''J~Z2=/ru5tMU|wͷ$1⹱?]V\ʧ𶄴jsbKxLT{=P y0此O tEsDfzuVփKXnt0vY@B_q3't>16rM?UJ/9-xW4s=Ge =RQzb9xx%1_wвT;u YeIXeF5K90Gί՞.A2 Sm1Q^0G/d,kǻC[ b5l?.w͢ B d'Cgh+Ow XVD>f;}2j妙,€l%mr铂nmQ115@MZ?BU3O ỡ [j>:cu†@,^ f{ z'?WcCDS5HɁh}:-䳪; nw¶iwE^]![,1ˬHUŻH| }ԑX-l|$F수ʠRҀBmL>f+M ͉m^DZT֒j:&]9K.&yx`a7,8m>dQ? TތY"nUΓFRqTo-t1 |mG!kL~K,E_dAʸ 7hi`_}M0k[7D|0+ړ$/.̾IW_W9ꘀqt>gv(spcDp-eqCBUT-m,9{ƒE7U)2)=`C6O܎dZh/?)҈-up.Iⱆ UB.*a{P淞3|,a#ϋutE'˛YdPrp%o"8I \XKږ('gb_[ h\^]jrwlN]<eΠ$& !# o SfA[D?x wfY/S&ʹ*Wĉ8gq¶G jzgTٷ}*ɄvqM Kh#iYH3)MJM`$/* ŮO1U `4=[3 //Q=)1IvvÛ#%,nOK=` 'b}A{ vGJz{G Ѳg V[|,1c[4%A)[E֔&=s'm Lc xƑw"%GLcM d&#;0ōB~^~O"9Vn(sQosw?#fn)`U1 Ft̩-Ѫ)d1ãZ'/hISG$䳦@ۏ]̧( L.I!ik'qCAlnvw^jk[UQbzn ɶE< 2դ_,Ÿ7 {]Csgk kd@c],\ &Rޖ | gU1 ,9Y߹c+8 6Cf|D [ ޶f0()K:fgi`]*nAmX/ؙ gWC"i[GbZg0 Wyu%~6~wܶ a*s#Ƶ؂<ضUէMě #mT&\QTW> ;}5u:Fe>:(,(u}{!v0wW Vwr1álkdښᯬFa /nM$Y2l@έU+j&<7O9]Nღgؗ )-*^%!) `bO | ʘpWRTu+ Ck=$6<0Wpyċ^ʒІ$W`5f#;U(Py'y87tl9! aӠC 2oOGdWs;0U?@nzLoϋy0q>vJw.hM%3Zͥ<2¹'0[5;;Ӱ/S0Ld +!) [:C&iko.W uon(8E}WP"ҳo٭"6| :f"o9~ Sy~ἱս#\bϔQ`?}FQrRg%PźaOlM?P ^]'!F# ͇%|k$Y]4K .>C"q:'. 9dgvrTyDWň}ڿȨ5;?vv>kj 0lTg~j~@[WQ==''Y2볃Y^%&D >.?B\/jDX5WHΤc7L4"JRZ3ED]}om7Wyu|E"*.ZbhD#iF; m^GIOz/#]r,g`>BpPrI0p?8y,a~&lMV'4A$/~V%p]/ \a&Mh+'-:uTkR乭" ]w@7)>s{;pcEM!}Ɯ+xI|!<v`2i=᯦+sM8%+Z,q*X>o=YVGX{ ~%7Xϗ+|Wh[S TtT +"QK_3]ܫ46 083pg~JL[ QUW A_ӲGrdja~/gjnфfr6V51(SE96]AݯZ2o՘-|E*R*i6DVZxy{r}Z =f) ~\!B("n kIWT -lE?j,Jڏق\.V͙vAyk% D;CO6d~e V((GX|QgPP0ozƞecvt)(I 7RxZY@u9Ǭ,gO5%Pʚ_( {nzocQzEv#f(o2)# thh2 pHn0*d,ۜzw']%]--66 #4o^.bMmx zJ=nĄP.̝ʙ!R^ *Ĝ@,9 5:Dp %Z`ot^ZGcv4 XG<APSo;֋ߑE]7RopxP§͋3lc(:kJ<Eό *h֪0ƵjD1/ɖh/ҽ@t>TbC8gUج HImDTv*945@du mu /%nvڪţ8RW_e=PFS-c۰6?h`UWbi_ŧI@"ujfΏ&'.ߺ&M|O"Lǐ]*_-.]5KaY8 M'3RHp,5pGVp[  cS2,/nqM+yyM"#6d+.t4 W斮r:+n/Cy` @:;ky3+_.?!2@؁1Z-:;V cNmcԑ0y6L(u;"5v~"M䒪'Mq05B0#=؄j% 6ya;$IKUGP|HɬЏqeb\+>=i}MacûV,~Q]z{,غnv}$¨-9$UNFiQۓxD#YJشA Z#;XNgdݽTD,[gRMCVBމTV7g%**]CqH~V/'Po,K;ɕD0t틌`N/.}1ʣul|6R$_`mY؄+3?auMgV`;@Wx->wNރ@OwEOMsuʯ"voPaɵ0)1>(=Xl67CImJip1a.#hfDtOxeWM%S(LeӧӴ1C㻷 .'8iH(G)r1oCr>0)106SdUsU Yb}7]Ìw#62zY?BT>c)<#+t+5,oGmH^} 7oN .j~3e2uG ;^Qc=͚) 'zRW8e`{ I봜bt5`v|u*FN?`BGf2۷+HFhiLajٸɖ0i8nA\F2H&zB鼦wh&2^`5X u jj HMN|El?dWN*5#b-ˠO¼3tt ^\=ZͦMz1F%\N+)K&)ИYfz(@oM7|#RVdiu_ñFS4-d>9K҈{8*W9̂xs+T\4j}T?{N ۉQR|llOi-"z1Eo,ݗCG~AֵЖH2ߏ1A< lǦU"U=pŪ'&Tzt\54ziq쌉ʲ)wوJ^yy\)[ft[ڴ8hh}@GZV2ҹjij;9eðY9h@lI _yof̨*x׹9`R K-o .x.0W-O5 CJl= CL\;/c3<%yxܹTk0ݸuF1.G3^Y&yb9N|͐o6ڤA7K#" ̷$yJ`^x߿}w9Ų5*R:]!!>W'^!$,Q("x̞6I& $:Qzbxsуu8:ɩ\qN rJ R}R|GY1Xlh4C<|La°G9u s RkҲ3iUīb.Pt单qp?<IsVh F1wYDȵ [fǤkYsO=b hՑ"^!m-UI5`H[PD[ ^$nwF}"͖/.T1PD+恬Oz;9j $ƒ9ZH7.W}0]V*>ZCPN gLh=7SgWNy'8PHTyM"OKSϙN':264d h1_M);鏯ȏ2,*pϛwmBW=T8#x쭇NGۇo&HwP|5ֈ Ǖd* wrq3rȺ}Ϳɋ,Hw󠘰yX`.E~rEe~hN'Fa!pl7or+1:;[?@;TB~]I葳' EhC)"ƞWL~eJ]n,̷ ?+& ;V't1#0mk[F˝>%'-k# akyA#R"*ԑJV7' fb "*D.6>0*OW7<+p7|*f*VG>j/<|Ak4m~ha[M2nUBH /HP:F6:BOQ t}MjE`_%PQ}g؉+]J}ι=YyQwq~i 4Ǎa!z%b/iQ#Ҥz.Cf}sRj/OTE5U )h';MvJ=7uOb*3۟ШYJ GK\QÙdҚYK9A`鰔_!%3-6#0ݬgSۣ:{M&@CW䇨q]M X}k/}h/ISJPinaKeE!tTm)-=s;t%UtU6A8>tXQ &xymu&jQæ;p.ɋNW$2]zty8sydlљw}%\h7OD!TYXڠn8 3]@7)d2R#3%'ȇ˜?AHΛ hUKpw  -)a&Ǯ"A3Ayۖ=38o8n -w{s;D>_ݫ%xC8HiRk٣rke|e|LJQ̇4?:`sNps;ϋ?@p"]sm%`$}Q]QDTKT1dFr4:dMC˒MQnZtluBY:ppe4u\sk#߄ɣ0YcA>L[Aw,b=ˁA}e-T">zCa ]N/v[p*Q/Lj6 㼳|C4%V􇱤A6, QXL:B_+V2 [{vK0>.~A$p#毲=9"6=T5)sK*OOSK 'kjˑq_NMyI#;/^Fxm ʟ‚^FML0s 4: h^ԃbqN/ͅy|Q 9r4p:"^"蒮}[$K{" ǝ8;w.[a 蚶ԑmA5Q3\:4þSfd,N@r{ ֘ݩGSxȞ] #u ޟkC)5ȣdb6H5\ arմg,܎J6piD9Fўaf,)>7}թ3~ӔbgKe9zڑxZۛa,'=]T_*vйIB cGCRStt][ۅ5Jr e{u {H' >OPF P D*3J洄?G|+y̖=,ߏQ}D*4[71QH9۞%@4;И /`4$F8=nvw m) DS9`wY:Y.ꅼxF3t3 Q'Ҋi >^qrK .vO[ +y+]NDzTx(Չ*GE9v9򕫯qa73KEe顜6$kJVQ&v@gy`7DҳW90ґ ѭ>7EB΢5r nfߨUL%V0_[  BR hݫGTFBL#D-Fk-etEaY>:&  T,sIh׿jY [&dLy] _2%cdzv|;qBf$Nc} !m l(<4c'WQ#~cx"4Qhl#!⺑\g]^nS f+S`Q\5:э$M$v$bj#G6R T`+%;2UQ$`9]\YNp}ವzZqsE[ծx<@S.KT&W+ǛΛk8oe6:ؖu1JoKBE^A(bshPsLLxL&l&6-qf FVJw:w,AD=288Z07&*:{ZFP訮An:gۂAG,gEE-jPYc[ Td6 Z }1ҙ=w[xPZkri3{}1H;{jcAu}i^6bKP L7 6Z}S[sT)uT֗ލ <}̄qΆwŷQLfy,JSv$A &; Uo,0 2'qpS4AF8`8m@x#ab}븊Dk8A͐ݨ'fԡb#KҠ{ DC j)'} o T뛘zA`/ AL+B# θ SYa>͊V~kXQ9Ee,Ĝv|Fi~r~֎#D`^[-DLh?fn]~k@[ncb b ;OMSgЈ܁j Wi:qW<)bIVmM(6GmQ%U#DfTXA^f{Ǽߥ:1Pf\Prbp] <. [ 3A~+CRК/:Oן%v 1mW|2{ f+ 54RB$qaU?V +OD  1dxlmXA hK,'(].'+2y\0Jg)lbKɝZAW ;`fo|uexѷ,[ v HbE=YV 'V_jHT}hmuYAS#̀&}chD:f71 j>?xVLiGl7n65+9Y#ٛt `DT .-@-7P1}߭2j-/z!\G股eB¢#!s)W>8HA9y6_$ˍ%&HdU!z*sCl(VQ) #*KZ~Ad?4*Al,h]j8F^E FE>Nnƨ2}w`s~Dt_LJxܻ1?uzήA?+p5lky"Oq&S2T]`YF&xҞA!UyAVm8x`@㌚8{ Q@N >Z4^/OiL)37҃V:b34)X/˹anESGi Z ܕÑm'An=>bz0stl)ޏ{$di*kE9Qe~OɡGz.@+ۣ<%FkZ+J=§dy! .| md.U 6O.۹um:!{&ϝ c-jJSR}pF^IOi|>VөQ/uLM ~Q_LE͜;Gl^/2{E٠tKW(7 4\Ӫo )J Y/3TLF$ Gի4\J$Rxv;-hig$4<\I ~>,ȺQ{'kVH}\fdSg;ȬTlLI ӏ=,$UT᫜r5Bpkv2_g0`B݉MO扚 |es|v* ~jNL3{ tKN\qʳg*" MsIqzPQ^a1uCc}+M~>i&{w׆5 ٫?U+|8Sil10}W*Ñ;qn#RƼL9!7V4^J$ΔNU|[xpCv;(i}͈-k%<\֢fMn}R׌. HA8\]1TT2I!o ؽ_.,e zՀTm,`C.DЎss)`D%3U'+^Ir!GV=rkHsd1LCYy*CL2[XO f$۟M ?Z)/gN8]=Щ@K$L/9]vD8"ϔ=<V4rDh%~b5}R!& ć ?_37$ƚnPz?./ei3q{ qA=9CE}KcyU PJϒWhV"@Wx2:%,@g~5ȘXUbLAR0Pn3 ͖S'Ogbۑ[`(L-6' {O%<)LZrąY* ϯ3zxp)$SK)FbZ9FɴDJAȰ Xlz1 (lXTN\ ԱHHM`\,ϥY85Y Od[|_ !㔵8t{ :b?ruw8՘r#coi|xّ1k7+ksˇp]whsBdp0Bch^NA-`?畱p(m3%7RD|K0%ayZ gΨkzy|PTm3/傟J;hj1@[r;jm䵳xJ=#K >i.д[2HJ'á^gR%l ݰ)_溠 ')0+1 GPU-@?"[2PТH1M+ MK>;^6|z@k9cUKFX}:3(5 d ǔ@:ea̗#݋Z΃8wׄ JLJv7٭0P9gĎ4m[BOMG]ܲN<317РڴmTX=UMI'O:ƱMSjthl!T@&L]EW9WI̥kKRںL uAGަA-i*I@"1~CTD?\F8,5G] )S?FD!fvn9ˁi{yYO}e\$fF/(x&ݑe睭ݣ7[fg_ΨpU9-~; gQ]}~4"S*KyaF!z6wL^9wQq} U'Pp2!~nJ$,Oz/km$x(ُ,b ƜCe.KNs7 \ ᝢ;f0o/#l6N >a#<Sr u bQf" υqQlZ|h~H^} xRol,Zǡ1'"Q 1 yJme[]-mU7#2z ,Uȝ$HY|a$$xU18{M9NBFy(`XϹ] 0JOnI̖@}BcBLK$g59!аv"U;^(u? 2E렔ĵZ`-CůpČBJ!P=ܲPڭ}ɱu]:x5-lonI+_c H}5V?a1=gd، >8E%V^=]%̱3-L^\lh馬wpT5&v?i.~ h"FN7# ;宎~@C؉DpqM\!q!ŀwB9!?Pdl~pvsF0ӡ@F;cT<`68գ0tb~*d)Ek+nJmԋFX*vrOaXW4=.?@Q$ 2"Im?8X{R4 z3z9^<]rD2d EWQB|[-kR+ׁw1zx7@:7( }"'CIu+߳h0O]A;w:G7UWzؼ(KwC&E%|\cd$kFì2E`ܚ" gy#Ů<2d^nW#YGov]V(K)Edu O_>5z/bm2]..vyQy7oa$$ZdH[k4dڠ,>۬ӑagcOWCm^&?jll%~ ЈG H vp}dnJUy'ՅxM Hທ>鴆$?TEa` [As͢''O_q ׻~8J+wYĄȐ{>^G8>͟]W./Z?.=%C5I5lTx*uЊnܳ߸9nC]"An:}?n9šZA3ɄEwYvS(jpȯ~6y9y3`ەi\TձXч6XF6I£8>#F !"LRRk^;zu8g& v{P$ M~8nQT(ZܷA.*pGIE. K:Y gՀtk˻1󢘆_g8. eGU΀}Z-(D* @Ud3BhEI[H2l+]ȉoJ+uS-%dajcyI?᜚ˬ!!>_97*M!QeXgmse}ʲhdp^2ρ'X$0;MϽ~rm y㣹GoaO\t# @_#Ќsҡi(AVi0&6Q+; rrߪǮF>#JlƁ7Ԝ⛴D-|5zͼC/e2%]ko~UaboOI4j}ÔW*M{UD˭w˒eS=kh4@f3iK]λH}QuV,|q[TTf[fL!0&gxNklfO /j[ۍ*ٌs{֊S]}|i8} m\HʃW8ɀQe}]Z\wjwDޜ+b !.@x9MGfOP{A& U=엥)=cw18ۺZy3;DkK$]uRE(/!Io ?J]L\tA|HL>a*|T?ҍ =@-/fKV[\2JQT'OD!Cd@c¹ iS5foNkf؃v|(RxkY~0w@uD9}klp|R991w&Q\TQ :!~$X| ɼYeW!vt!e4_T/n=486ϒ%gG1dz|+0{[tEDS'Op X f0W)*3|Nߢg- h7R c%vxJ^cJU[5FNRT`|^|y/|% 3uW=g.σ-[; *[64Iucל*rlik^Em6UvLdEy"WAe80K\qSt־X0d='H1h»4wq}9:ZìgEȏa ^:Ҵ܋1Z9$1Wj9|۹}JMS+o.]cOW;^v, |ր+!;֒^l0dk*aU /b?PS>XI'ImhOe~B,#Z\xX{S}vM- 5KȣE\_dF:!ȡ䌙ZRAϱ7 cg{Nob(1 {`nd)}n2\07[DmS7 PR7lata7z+CaU@Q5ǤU=Wm  E#^^zOiFةprgW TcIiJ{>0Mzg޽GmރevĻ ȫG_]2RN ;+k6@*S`=Y%K!XWs5y,mcU ͭS$_"10y`"1c½ao9#8~Z"FOe.5&\l2Vkrw{\>64T9hWY]gi7O݉Shߤ]X!s86a}PRi+.4*Р29H:QMAk .r)%peAgboZs.ʬJ NG[O$ `/EY0`vLgm18g 6DRK |!p)N;m[S6z' MםJyM" ;`tA>OvPq[,)HaVJTVOْ0It2Eݳ KJPQCX(]7tGMJPdk&cK4j%qfia8h:8K_W^9/ߤ \h9jBxBT2&;L㬔IFݘ0J.ۤ/#2)7K{(8ܿ-9;#T'7} 3ݲseULA_/QIzN#֖T/P/6f:N7n jD> 5={,r*\zGDn]δW)mqG2ImJ,T;+e⵶ ޶*r ǫ@;4L}+Yk2_=ךgPP(Y,TK/84{~c_=B&[%/Z @"b}٘ă5هPGX&7f?gdg`=zt=9֫!ޮd\z>=u(,;PzlSnZn&%d9#^Ԩ?Adą>9Vy%*L' j;a1&$W8oR4Ebm Zq/.8S ۠/Z/!ȁ5{}jbɣN7 g+T(|*!ՖF[>FdoM zV@E[TڛMQ>Ԧ}[_BR1YCo*vH_l&` 3X^.ڊ#/D 1dB9;)"TEPG@M\&H=!RM.#ɚCI/(:Tv|YCBh0lկ̚Cޝ-Ve)O,cUk]xlma7l@{V"~}nW˺!r "8,Q&z}&EQ(=nw̔y|4Y,E\s%` s~*Y@8yp%QX\[חuAE:M<ZOH)UK]yiU^ڙ61@sZb&0ʁG{IXFL!t3̪-4S'Iacju`c;,?+R6k1FlQj U+~Z=Z~By=0Hƫ֢Ng}u NhdscI$x)[PAJ8d0m&ԫ8~kej|IFD1 6R"Z8XSzCvk4L=fK|+^1˙-_{q$7Pj*9Lr9hC3l aӎpy۪:5αbXCvT>,G |ݸ鋋'>3*t|~w"ӥ%of|tӇVh:0'ƕ^l?3!G]\&⒓.rdxKU:M^a3rHPS].jBa7.$Z;%_@5U.,B""lb)'Mvlo!^t6UDǾ ~Pi4|ґ* 2|)UG"&;ۋzz%Z=y?{y^dt/X!ÿ@[p^ԥ61<2lu;IFixeDuaHՅZ M3V\efE ѐY -QTz}Ft+Ń*yIC N9ZF@~֨v&m $82Q]+olO65]f+G*e۹ 9'' 6wyWDgKrVY¦T:f$*5d;e$"9iٍze6͔2 *e' bP>KK-V'r5|4%D9|۬G}t>ؗgHrgNJGS &is"Ђ1~biEpնs@7 %im]QH@4O\#Y"3zioflۘmi+P}ċXNpzz:ɲXNRA6L8י }ZO~l Dɏ|.AEMwՇ*ƾ/t> rRxR*:W"J><m5g]'3>gu6H|w{t2gn2E_46 ''^pj.nZv1nزO~Qk8PڢsRiʵcS\O77Jz2 M'P Bw˳{ӄysOCG]֨15qAkK(lBqL&VUF&O˥[P z/smoTXߙz o]suN<~.F%k-4 x !b%|bfK S+ fK^j\3CI/yT2P6T}l/ dQKKHgi(N彺@5#8 ѮGx{fɈTO#(O{pJWuSW 9B 4?@z:ҳ(oE$ztHjT"!k9Ò4.`E7Ӹm(^Σnd.d AkyYס|ѦOy˞3pȥŝ³KޅԂtolեQovXX 7'PU`*!RNeZݷ1A(GunhE)@ OTČQsu&;"7$;^YLH8OQ|67v4Xj(42N{m[ӥs#5`f6'!"`xhrдi!s5f^͏\Ժ@Bܡn)<(ުy2gJ|)գ,.'5mC4*!ycb{p| _އԐ-)g@,I9:3~O8B11]l&BCȨC#am;}tϞ.gws7Qj9Id倶m9?q rS6wP4퉕p%83E }Nx)̨qL/O` kūKKȐ97>|n>{]C3hoTܭ)Do+e#d:rPyM1v&*Ȼ8_bћO,GۿTwŸ0ҊɿذK 6#D19Hn2b1> 7ގ'=_3ZJnQzH+/r7ع}*4PV>gwu{?*,QK8s]y[#cIon/@B}$ʜJ;!p>"I)n#eDH,J]PV 2g ?iOQ$PW[|c#=Œ k bn!0"RK )AB—ֹ,06dj<&LV@4ʈ7d*|>!K}\F*X9t޽rϣ&ZP.$dm|ID3A`v H7c?XTayχ Oc6>wo"x8Pb?1X"LuD$2ALu邂 e⿋iģ3E+ZecMIN~=@f|)LHX0nܓ̄J_Ș`bɃƸ4R˩/{"rη!6pe \\*uƀ7gƄ (} T-,VтWdnӇ#͙3DE4pJo;|9^d(Vِahu$_3MɁUհnєMt5":u 2@h6/"E#Q%?Yv!5bBV9k`Mz\m|J b"aO7&bƟVRgT:LJɻӽP^Ouҽ<;>61;{Wxڲ~ vCZŌXga0wr#|P0ިL[U\도\|m^ !jHIV3 ;q!c3噥W8 AJ*͵SKϭniwτ %nOS&b@N #<{.G}>NKX(~mkmt\̐^c\aUP[#OL$U, iš6lme ˄>%{C2A^IU&El!1 %qeۻfBG-T2HD͗YAnlf'CB@5K_Z{5Q2N"%fMKr@tsdgM4*Wh0zC\͹1D_(Zp =zALʹRjdȿabBcgT 5D6րM:g8% LT8&.ݧYYsrjV~O$Wiw2׵))) gbA"F6kuUz6%|q(r]PՅ{R.ӂ{g-U ~Ror]D͜x>/Tv8K[R} ΏxV$jC[Xq+L*q׵4B0JcZ6>gFCao~D^`hNh7DGeh5Mp(c[TcɎb U0݋i['U﷬ST6C9 `V]൭p&ou, }E/LYRsnLRg F?K };(9pN Q=^pǔqdp2}EКhZOlTk{OB-`!j@mP4i w>sk_|Eu5XbgJA}qF "dY.:Y}plpp+uC琹UQdZ m ) 9iR?jA>U> (o\uKOi͞1\E֡N4|]$Ct9 tuo=yb\Rغ˒*^u`SS*ϭ]}>{V0Qiwh A_4^JP5^({갮4oŴjfQ|6H!غL5gBڂbvt̕4c *ċ% lyan*l1[ 3i聦2 Q30Ki2%Ob tDVxMhWYӜnӷB,;wp]sv$?S:\QXG΅SccϹed|ATjk^ [T78wCC=@`$w f}˴CA? 1 sR=w5ױ"ǣ?85 lyI ]8kHWOq<}wLSq/ 6g2㓞LOa^tҗ 52GwdO[̬XֺA?wv47:E9|/7w|a#A{sy.E ,|uvQr ϊ O :dC5#AbF9 )SO;[QwG:s)nɅ4Fe-_/|FH@s` Zx'upM.>E-,CPפr9M6Ƚ2ZJH@ I[)5;/네!2eBmarM7~9@JȲUwJ߄sH72\0D[ !tVd'pǴ$E̐` D%UM켞MOq6N/}fyQ?^<@K%Z_ n0]dD{r1Y'E>QXxt7!C60vvjU> T*=nM4ބ ^&X;3 l 0 uQuh; l ˗CPu|[=.4 D9dVw6 V<RUwtil>K#kS1:UO: i7֭!MT'/E~ARbIpr)Xx䥗() VYv_ٽ@oPss6S#kʋoR7|㥧˖|D7xɍ+]~fO˴UUkQj G7krFRZ* ^֖P2HI8y&:U9 2B-$QV\oG1Be3OO!20QvchK3$&w̃/zI  W/AS(Fa蒵C,'f18H[{m7:9⊐>&W)eܥtZ>-c35S}#1}j#*n5cm!P֗?]$KgIlb;0IAGY22ͰPxut.8Fr(:%)tR OVٛ@\,ojhV;I` ;A8y}s8ŕՓgA\(6~nEe '@Wr1]ӥ?pfg*+a!Б=¥i5ha' `u_@ȭGn=O)P%'ɫ;qe _`Mk6w;ؘ[ \_!u[JQɚVZ$~Bf ^?&je[)SA3Ls1R#?pEybU}qXUE~{0H{†=E/DYny ˼d8d;X7KDa4 "[KkwMD hy-)Ū#ùfM=0!V3Ku}=q L H}!3DqGGQus[ æOn=웧'e#Q7 ={%sb:C,rLwh,U*3& #?22P-W -AkiZ$/^eDt9@"<+qiLUĿ[zZ5)?.jditV^J7x7~7\'9qa͖HYEug|a\ITf+D_5뛂%(; Wt(AA/0HQr'J)~q3?<@Wj*2i籂HqвD M:Ld!LnAi 6"KpC76γbN/2bX9&%)񠭦a2u4 7Yx!hkp7UOfr< Xj!czZ UO!lIk8{(M#G14 ;@КUaV5r4'"(W>c~jCj}AG^yU+q^R$_TLdcop26^=hD>S6_#;OPu߲sӦ7X#ebS{9"C2 O(a 9?zwӭ-l O2/f ,8OHt2Qpw?Nda2'a,yo |aTSes~aouarLfYwm UH瀩=5oliHBo6ZkgLZIБ<ş`k(۩斤EtN[KzSm3ƊeQީDy6,;?dv#H^)?%wB,mR7m~1%XxpKnk[7R.8f֔F*q3.:t_F f#R|ETAbme9s.8rܜo܊-=p#n@E 7Aԥk m<7gr (.!alxg=%[qp3I"T:u)*Qwy}/_@'vVr?F-hTӀf?Q'نwGiLН,3J 8L-aᯮ¦q`:K6N(.4x5 K^6,sV X1$xfU&n)Ž_ediN<ꗘO7 ;x QvF^ͧk|+cfr8=[hp{M\$k"̙!LgBBm7 OT, %aޠKĊ|VEڠ,pƼY-_f|.xF@KuZy$+Wfn/¬+T:7a2N"n$Aipf:p1s'M_$'AGH|Fq4R,*]]Em(MqK7.X55ksn 43Z3ho (}pbVGwx/"A嶁9vսAa3vOAyM rkӀj8speӄjH4Hamq͘ d=H%,7Śѣ4S&L7NNkp&<@dWuf^֑A$gM[ YI3=vئl٢[nG'9#xRʍO꿜jcC8 -mh:]5)Q4-lHԫNTBLl#ֺWT]i}u1F<=OqŸ?'կN8Z=b9aߵl,2pmhF *pÙ%ꓠGL(a:tNhmЎI=-YEL$oCE|hZp?|WǏ/$/N) 8f`<5 O,[%eD܎\n]nM`,ja`vL/zRPtm`[Z&MvxBvN._U/ Epmђ)ۤCh#CzĔg< ^ %͓# #`:kCғ#0Gɡ}P0pb}jS=ZD,"uoJ7;}:oyExYڕ#N/์ho<(暚2X%ڜ;|90)wUXh K}A!(ܡLp=n'O'/bq}om.U #+K|~8i}u }mI-}Ym8C63 5ƚ\*9!Fl~r,Gk|*)hko 3[Ir5*N>G~0^33+ib"Vȕʾںo$`X+ FU$(~v{@aOwS2RnJ$-N eZ@6 7nY'2, Ů3 #xG'0.9ErJI q[1hfAgzKw{ Aj ]# xy?9 W W\MT=L4rnю{_Û۵Z8+]VX۽hb/{XD]%#e,M[6!_5oN\i <쉜oV ɂ$lm|lSӈNe΋% 6]喖ɷ'nH/a7iWMAW]ٕ i0f@TUX~q9AMO5}DϽhB[0WMk7N'շ}b"o݇>܇z6czU*u}G](= o„xhO02t4DD O v.xK|\D/N|NLM;'KLVd(8<z`QW\a_:dEmARp(y#s4 r0_Ry? }>";c ÃNYA P+m ,tW~:ی0`~|V@nhWz*TsiD»^ qW Dy@4i6e{Qǟpx#ːH.FXIMzJMڜmחxQ3AEߋN+,>`zŎ%N:t4-" ~R$wSw) _;/a>(Ӯ"u 4=XFnuGhyq7mػe(DpyfҐxoJIsft+Ψx<.OiL=ST $ [Fsk-*TbmpxJ:\ pcd8u>ZZx]> p1V()PA[aӰKd"4FH[eWG7`*OjhQj9ŠŤE˥{v`rgSЈg/}=ڤ;[`>xE( Jam  vcxW')-;]WbKڹGC \<5k'PZ2`I<6|hY+f] Iojn߁;pQL[7+~o^ T{żkH^+Gxn $b:DF3_/ԿݽB}lz1; }"4JΥ3lɐeՄ(tn~H eqaH"6 <\.*Ų8 8 71l r Zcddx^R$D3rx@ڬ1.N#3 (4v ]=֘Kఴ@g塚_. lKc_B/ޯwm|:T0|)&-g }?ȣb\O_Xw P2EA3ٱYw2%oii诠뎲Џ`Ҁp!q"JqQy iLp=ʵ[N^ \7.Un S韣64D-tz"3ATOε!g\X\یUJIsRX3@?iOUփTfGz%_{R{y~}6/P `GlTD?5ؕ rĂ5$KP #J&$h*QN3ŕ+qXinEcK,&U.!Ƌ QR 绵y[]2tV޴W}%oUh"`!g`>՝ڑc2$i\:c[b>hLhz$ `q+*gο+w-YX4K~(ҡ}cdzC<}z;Qn[O>kiVRUHv`XU7nDnjÊQ q u/>"iuYdژ::raY ET8[`kulj@cmb:V` e Wy#q&v7= -ǠV#%/p)&~6/\[bWh[ ut*n]-AZ x f-[E n_p eJCuU'Ү!Z^Vk$iƪ&jI@T>08.""ߴi.=mH13C- ZS0kgR l>W. ='#M1cB=q[BxO\tZUbU\|JU!M悛.$%6h*7Dw;16w"LLʴ'GM nK-Nq[!2rJ,BE?XEp;SY5TOjɶFv2Lxh:0vꆭ`39&9[o$ \Y55 ~KF;]ggzaцUmkD#i;p䕜lQip[jUX<Ģ|>r7@gpb&Q J# Ȣ2'<6+Euf[6'&+Vfm- q\C zk]8F%$v ?25},l49_.2>U}k,z'Cft}[DZj]&-z+@GfXZ|@kȮ W,"YDdb oԋ6 Ɏ&qk<{:Aۊ+>#wz,*7aTEKPVJ7y1ȐVMF:_Ԩnc,R=Ѐo^$QC=ma,RuSӮ^>$̍з]|_l@)0m?\C{)I<2 5R=YG7 TRWc(jS֐70 ڋ1ŭIQ7lJܐE-tuSt%_#M:(f ڌRn3|ʧ+۟fm'} Uu$G!Kf91 BnJ9uQʑ'~w"@= oΊFa駮Ko(e&p-J< k\,5iXq 9/zs,'{9t3 @_Re! KAӠ;2rL@YUIG.B]xF}&cOCwfopbMp ŏ&AA[yP)YrެeVO0y cƥ`#0h0km!P nRQ LYxm$Dq۟wy1MaS1}k5nΫH=ռw]AN=ɺCeyݖ ˞Up9mߑ#T[撅+#,]@ma-V&+H\ۯD&f_`AR% _zx]  ^ V-ݶvD5|C;;B#۶t绤lՔB-@PA+imNj EFýKԎ]2U{_?SPPE{0o`~&Ҿ?,EJY!X51nqm~,yu6MAjѻ. WPAWΠc{(1R~<"d X=0z}1ǫҗZp!m=|#?h~PzzŤ8OOO$^qy44P鏱$r@l_Cۢ밄{72mS .%)}~[`ע/A@2AԈ mAj:9p5bػs2BT+Wr<7ԉ kܥߏ2?S>Li/ Fm;O|@yfaڭ SLP̨{oڝT.H'!1>)5\š\RZslKR`tzi?5 !d|C%r>ls}k_yʨ&2ZiVo##}'p{g`t9GfJRQ@ 0r- QrBѾGPa+KVji~h>d3^XvmQ7opW`I30mC$%PQgNA%4V~rlU`*Cw8B[B=;g|\EݒD7o7%OЃA3`:I\J S[~|Ɣ)\~KaY4Ry7`lA޷#8ݫ)hSɍ4PͧQ؎d* {;I[RZ;v)eKݿ&)Dx :β=ft_wyu&fSwU⒛LZqKdznI}8,6!'7 tl Tz#F{s/XH)؝ Bеٗ5]TyBqJQ#V9 [(\4`3ιG-婷E :Ȣ1Mh EsEFVN\&OҸW:%-,N 񐪘'lMRyY|$I8rQj/7Ez^Kh=FC~nBZ5ވwBelZ=1y)*Q< _VJh\Y8I㖫Te+yx֒Uծxc|xjCЁĖ&t Q>K2St3&&' q(\CR \\%Y2=;.`Be~`JY>{|Y^*PFŃAD ^@ 6)4tZz ywmajk32T 4dhG_R #5ɪY0G!C .:\ m@b`X>stBpЧGI*|p{E .F?Ꚕ阈`ixἨ3_\J?b> Q8+(Q uq6׋+i> $O޼6'Rzs/]ܰ*$of 6p 9 iC;Ap՗ %MT\; 뒂~XIrڃHFy*zT;bГ ?uvgn+scGQC[1%x'|t.{=ًbz!gum;Z~eH6 Ijf޸zijΜ0vo^U}Qi6M^Ň.3`î˔ vsCUXٚ%<NG)dAG2ļ28*'[%Icrʕ[آ}(dgwyb{$v'RցCr|D*7Fז᙮@N!I0iάT1*6qPqWgjjEMT,Gd$t͝9ORrk(L;Mx3d.C$,J?:߶@*m9d~o<]ylG03WNmu" O c@1 ȔrRm:gf#i^{H ~5y yX|" CsGmW1[ ѶU^.(bdjr&U+~qb>$fKן`%M[>&=<M@*!v0|@B},? DPI;Ӊ\p;c f%fv 7&6ՇZ;O.fOkdi[ytZ ).d@ΝP6EuK_>|D"Tnl]iŴ"Wak<`CaAnzBf[rC}%BVЌ?hz 2/Y*ױMX R -z߹`w2 _4ӯfb%&ӹFGޮC!p%ӯ_Uiqz|Q@Z[~<10s؉nHmkgF_uugqL=.a*Tƿr1A3kR)EA>`SDC^fk $D> =ب$ɧvg28 MTƲAXrS%C\{Z \b@7Gy NcJ/ɊWST,CaX 2ƪjU_S(1I>d:h̬u 8sM5ENQ F[<c!MX~|(G^/,(Ec!?:P[bYvїR<(Zƚiq̅ f 6PʖИRXi.}YvxLŮ,Ĝ]b?{d1.Y5V;G>K]mJ)I (/Qq?$j::FRu(0P =:pbMS mZQ&N:ĝ^qϵmV?6S^\gɝawHo;sؽFxJpɴm"}^(8r,Xe{aQj.9?nS  A0#^Q>E.Aپ[k=Ut@sV\wу:؁"JuTzVZA>ZEV_ns)4G {pN='2Mx,ɺEquBE ײ ^l*C9o$^B8\kA%v+oq(}ED ͆uuK^k-.]k;S;&1@0|J/8G+/2>ӴКic܃Zi}jsQHWrjND9<ȧ 9=n㟖"@zą;- ;9J\wV4ACFk/sW롘 E46kz`ݖJ}û/H]:8a\)4BN{ cbmpKvD0ljV~a_6\"О`&K"g3[~nm^!r$de/k錛)XV]0/ kU$ɝHfIcM{sK{>:0y+W&ƥ֏QtH惑C}^7KتX:)`D*MFrv^[3a?`zdlUof<PTYElK2 X'+ZВ6L 7] ecvU)(lG|ducyw&NhJ"QڂG"՜(~Whwes@0Z:IZ6ը\ÜC5ؗDh;h Gۧ?^ҹ0h- ֹ6fI\4SߤhgڡK<{SƦ~cyg"ȢZzRn&=yIaO̷Y7S0VV1=JwZKE= x}: b2ṽQ76*W {A:齇Αm BAv ڦu @<×|I:8UriWq.~M7@V Zۓf0Y\%wZTp+Gm8/jx䭗:gA$';`,ni>IE"t dZwU>Qeh|ELmP݀OYsP}[0] U JO2Vӆ`=șmȵf"E*c8g*L)@ȯ 7T_P[},4rYu &þ`}(@ܖ˚y| $hvNDҥ\N|KtK4c2ݒw؝o 'I24!|S,_9# ).yoHI=^4D=5@lZd &udˑ&0Hom>g!UcҍL70'-kj*XɈT o*- Y(F~J`:%? 9օ)n @:q%&~#b4q)[uTG̟=%vW N-3Yp|/· YwLE!OVo;'|k~eC{@`d|=9ggs( _:iD|!32d|CxA]_^h^.hxvT ~=7)-2fZk%ETU6Tw_a=Y܊O*Xuʔ|׌\Bs"\`"KCA?z*~nb\ce?b4{ⶕ =SSF $Rf8vr+qh/%(LOFd6ʈ[S[&}p&ZsG_c~%eIFX٢Y CaD Li"LISSL@5%FD+bX8պ=;dfŖ6N9"&yg8?lBۧYShyK/^IH҄d]"'Y٦S [e'iz}{)Ll^ʜjB6F-o,#V$;AvGY&OBާg“u/E4'"V+L"\™ ѱ*P * Vy׀$Mu7o&p2jJx3nQ>A E ?b/e҃LVӈB89p*:ͶQvU+HHo羊KoIS%LY "ioU-V&xuFQv+߹v7=Jpی[qor)y3uY$1 Q#>DkAFYv1!CbA 2ȺnfN=^Y0Fȳ}#,v'{  6`d"8:K$s_pVPSz@ 2&W%|δk^xRTNݭNQra$nl6NT#~ r*3Ǩ|jB9D+yjvЈ lFf3?u; Y񧼛>|^| U =2aTt7!ٍX˟Ca{ rP\rو\׉p"\hh g(2m6x3#ȈtsAg3\%<^ad>!L@odW,vQ$PB(g|քm‰HGq/woZ(d,@.FǛfO{ŞUp\ziB.Ccs)o^8Q\][m Z+avz@RuPo|9Ԯ gfR3`MUc@#xxˌ /`fWäy R3)4K,ٯ~w}8J͚z~5 sXcެ >% M yx tIґWvVE;G`<=sKn6K% { sJ1[D`QIө a?;sΞO09n$״m{8d5cJj8TS-&~zޅ ː"SV1Q9E LUˌn*+Ǐ3ǹoX']l_eo%Y텘0$,;]kEj1,f$H֪[cM\*H<(FsGV?*Dhryr7F2rWR1kDhB˕DFÕ oO]FZTXzۀ +Q8ɯk 164K_#׆8M@8?8lbUjXE;JkQj"ܖ]%f#T=u`@菟;wʒFl{3r:!>_OW:H ZA+`%Vor7 ÉgTͧfg;l-\!ac+K4'碑$q?5£~.dfKvbBhb*_It *maX-YhpDpܕ4Uu{g>M <:~2q=×۱˽ke"#3'8_O:?'F'q9Q&@I{_L>Bi0RMSm~ Hx nidge[<>ӣy̴DM8z%* f*AzK<]DkR”_N1xiOG ~tNN8,Be=e]c44m͚RY#ļo~ЗEx 'q g"ve˩>hHj.E ڃ4kçF\u|W&xPFigK3*P05N`!.E%~;ԱdDW930w,E""yF Oޱ%'BxX{>@n&ĎI QFJSh,[{ ƎyEG%#{\Q%''۱ĴbE aPl`I?6NNLkg2G-0D?)3=SR8A_2}O]:OS3 ٢?QD~a/&$ser=iETL~;a|xݳEʄa-?x}IGifmV[lnԯ[2~lݿR(*zÖoeFrk&I+5!Wܢ%A* Nb_g? ;h18ްfsn2\HɊ^ޗ/i26{yFuk8Idi?]i73g=0~Ks@(L2~~B۠AM$&Qd󾊳S?ɑ)z%|^Uj}1W(R|(/Ru-1QۍJ z+ D\|o\] 9 U߮ ~7x3kѰ3Y`& J 69fKѺS~E"y})e,O? QN,ec0 Oo{ЩM?di0ޮ(e`Wr +k4ot6(Ei4 Wljuo1(&wD3,DTMaz_%=[)opQDZSòg.AQs`͒6@u?X MM=t[x Ć-\v- C1án&ƞk=dOyV VRj󛗂|jӁGkᙷ\wyL4qJ-+Aw(0'ȸu ;Ъ\5е4y! Z;gLH/$}mƜ̬K{1+N h)V6#0k{~* ^BDMGKpv<\]U3t}L+(!Npm}RrZG-Csӳ(2l-oՔџ[6ùD?x zDv+eR{_+'ROid6=s׆u?? g-nZSBg&*7ՇbWJ 0CߣL7P@BD ֿ& ~Oko vq_z:W4Ӛ~ ]dɫII+a0C)'Ĵ*S;>]"aAi %,i&"Om$l"d>\GVBq7YZ8Uߺ aoV)nR밳"|fgȿEi a{bzŅG G-j<F!Asr~)M8+Ir31}* J$%]S5L>o8[b[ M/xBkduffv+4ɦ@gbB2M؂:I K5H| Ms /%>b4 SfA ~1#!qeQ_x&'aؽZ@~+xƠie╜̈́ʤ麗N3Oے 4V i _fJLQZq\YN^4'Wz RD>xY.5_"8ˢUEb ПC.lIfX 8&QgJ?]OLY^s?S0G!"_Udzj9_7t)񡹬:o3up _K8 |趧orѤ!J޽J,{} [sh4CZ/9Fk@n;J}hmdpPLJ__ͪp0D>gVÏm;)Rl3zoqT epk7}赇PWqk&myD.Ċ򬄁]iޑ Ov\MK pf7>_bj&c n*˃+Xwe HSz/LϞDTרßs]iD:d eӇ R(6j6.vux7 oڣKY |7]Cf{P~wT޺)Z "D{7Ź6⃿.0p}JODQ]{,^%"՜#Vuѻ8s=U̟nt0R3s`η$GF9j!!x-զ@< 4gf̙D$ &pxX|L G,ѹq>| GhQHAj*q7 o;cu\ 8V$ƕw좻է(܊앆'#9tste+ cHbc%2(t^'dl)&cL[Iuԛ)-`.4ALGv/)\5a#A36Ngn*hty)6(h OɏgߚC1'HP'CwZdd#o|𙩎zCZsK&u-&p/v~Ĝ\ ]:6 ˆS@(|RQSזus ^խYsw-¸\"ACw7ƞw '?Ϸ1Q'\jQlNƘu/}Z#W?kJ#hT?80WN%j׈o ܤO !c`JP5}}Dʙ-Nїma.5#n4~!d)!48ϐaꚥe4pXLLbJ%D,yFa'X"J#>Y; [@R]QԳ{{a\ОEt'a#+k[ W<;`&ԟ,K; &d60 9dVX~ @K4eCﶈIpewt)?Qoi,*X0v!k"x*++{tZ˙ϟk;U^&op3==/M ʏ"?=a+Ɛ:J+C#tkwgÒ<Z^9@eot%xX@ܥE- ,)bQ}{Au RVWE"wʆӱ:8Gq *f!I^15˧xEsMy뿙DJDZtP(۷c]پ̨]zuAL" ,í|UmQ~ 7oF<@Z*%(kA Uo /s}lXHSgb+[Q}%bdٚwU]|sx<Mv6TZN:Qt/{|}ꛍ |qRc R=ŦSwq%yh;~=a{*Mk֊ `Q"8R|ʚs H73z$%Ҕu+=##j?[VLL#29{~@ F_Ά8,%.p,DNE:>R~2[jJMyTCPUtd^tbQع/yƚڧwVulyǍaT5q:tg93=Ci>K- RA\l #*M=*c#e7-.sg.r؎]b9V0[3 NUYРV*o 4՞q^ 2iG8L*$kls[!6DI; C7v4~2A Ef)bkwZ!ǠR 7<^'1}ot+fvgٗS.t]߽o-CA@x넪lo03"8LxWcb3 gmRA4خ~KA~lm*8?U :n +rKjբHtζɢOd3?)ξ dmŵ.>AtKU{4# n!Ҍ:4 t(Y ~ {7b/۱ n1_vhX៘Z x'nvup-`{3Fib85..ca Q?^4eڅr܏TeܷtH{Ambum`$KW^pJIb;x}7׺ *. #NGYeuIvE~inI8gY碈s~Q\\攥 <7ގD5Ds1OĭJYy }K" 0Tߵ %D+Gf2`< {'bIF R$- r[ڧ0ԨZQ IZIphΖT. =6}:86l8bTϥg(웹DTI*m(8)j2=uGaQ/L5ϒuW+(lb3_ ˫ 6u}^$Ng5A\\%K1+JFwo/R,^׈|PBq.ZHlN"F s^KY] |&9zSR PL;iہ_G\e2HZ>m Tt25ɭ5^q cP3ū\d C=ٟ;`\W["oӅ.PIX9[H?ՔYO?i.sV|ǓPa _5ޙ̿fh{h//R6v:SLxMqsQ~', nܔ ៥ _ŏaCxܩ٩^ap Bq9dpƭكܕ%|Q0~'],M+rz#R¶,ksWXB_MFsVq-=UFym $2w~ a7TcM =b'hCjYcryTQfp@t]ȕ=?=kerhH׳f;2zcC$?zKKZF E;Jƞi#D\-~\ގ"AXCAQczq;H!`"҂D'ԋ/nosޕa`hAF`}ܿ a'*Liy9>)OQ̔qa+GČ<|E"Q ⹒:pGHs^i0E{6 b;Ot`:y&gT~#t=(ab|{4J{`Θ`cg-$kt(Q$ Z)zD~#𲾔 0X4$@0A b#*rP9kcJٗ70J`BE*M:f5Z/x4Ut/ja4nQo>(XVi*n:9h 5茣!K-wm>ț`ўW4tpj-p~k\}mç5|B~0E8ojW}$NbKo =B&Idn3Pm YT0LFUb%ssMk+VvGwZϝeDObĈ-}L3/ǿA.* x;)E`Up0KW-+zՃhSw+-}CRy.CS+lB2xPONɉ(B[uE ug2wNT,h*4:\0C}5~Xq'r 9;"#|78;чnϝ0{#K)4O'UIvڽ1|ss,5e?m36ps,]X+Q<§bQ&`[B ܮݨ@97HXMJ;USF13ⴜM)b]Ȟy-,Bͦ)|Ƣ*]^HЎ߇?xC;6],aM>LMV l_>ց~l>oLZyyQd&s%j!yZ%.̀ʐnqww^ MR8l; kJ;sܢ/N e['VwGXm_&Zӻq5GnuʣPZfՙɪ }5E9 6a H#-M[ \kVA(] u GO|̲VBEk3a)TNijlO+YuX%.w3kQU\Ũω<_!jOJC2!u_hsX9O! s3|FuS|Z5DTZ)< Zb3RTKP/a)܀J A3Zs@^T0` dN݊v摜@<j< Sƛӳ}%xEW2.+HL$he$g%&<tm;2UiJ.ZVS+娧(8Sb0`iCl,=$܆lLr͉I)Z"ec|ůYnٝ7HN7\d1Uw[W#巸֫߳K w#F=47zl8% | a<*yW':;Yk|#ܠt1[U@߀Mx繈ovjm7&h.sjeخ6%Vi]>S`muvO̓Ǿ:Y En*+WUt`}M A!o:=3[T\ox$"|Ǯ˺0JE uDRM6r^hqj](?XE[KH<N;O d6b\ aM|5jnF_Vx-rDr',=1W!"Hp !Z?Eh1T~Ցn#B 0ī@47W\m7t+,_ [9i2t'JoR=x<[UP=j}"C0ۿu#xK#]Ɋ51'ˬ2DdsN,Aݕcevt_T*| ~6<+J.xOPJm_F=-W*W<ɬASM+J [aL-4[XEW+nB$|R Ϛ T "fwLpc?!;DtI(HaAmט::rDpQe'ߛ@ Z%>G?&4p ɱ5}„S4o7{ Fåbe }s- A8**:?ďXA%8Rz5vЛܨ4Û7r8Z\e"X6Yp C7x/l6 `70"}Su '.,l. .u?o^=S5s{Ohf\ʮ4p1g!<'x_0P\TZ˺y0e u30>#,JŖ/#jX?4tVȀBhĘV+/g@kZk=>\u|2Dd5/#QvBoYMG[ !Un0 {/I0+ (=d6QI)VL{,:KvsmJ9$C- O}/v{bp嶹VF(<ӎi#-K7W]Փ Hw3l=mj`78c4͈1Q:A#'8RpI?Ujk8IMQf^lQԒ#ezުtOeqhLsTIYOesE݅+\b [_3wuJ&5va@[;iSF:ec 'ьIM6IlH[z\F0HhatJf|MYK jQ]$l`!i[Kzꦀz=: 7}$>ywrl\D j,pkd"|[2GeыR2H /|V&kzPAy[H!lDlaP,{9K{NB;J8:T@=C` >MLṣ<2!bέ̋ P;pE1h]pgxTTt:e,q{[NJ]_6li ۳yD.e CwA55RۋEHDד3g"9OѳO;3<'V¾fbF =Wڂ.pgJK)3T褗R\"JBۛI.$,0RQ*[~HOq\jRPrF죞4|3)l.>+s{M\}`n%:Ì6G"qRM2|jӵ@5Ydz`MxDIz҃vc]޾pꃬ\/= $!kT@6ĵ$O?Zm2oH8wd ʹSlЧ#"Ήf%[k`i3s&vcp \8AyU-<W( ݌;g| XH%Oebv9Uf}ZX%5—rK(S8؜LU 0EVo;$w Tt! <@r*!*ԴbI ׍ $m.Jޥ<:* ?, F}2ZuFAnP=bG~$2L f s%%M5YFMaj*Q?pOO 5'k Ei!|BȈOn;sq`} YvY U U%WQ<4ZsoɱܞuQ"2QދvY2vWN6>."۾XM*,QjW򀘓ŕo}}\TO]# F(6'(#!2RXՑjctMڵP۲m{˂xDŽ%ZcrF-h$ryb/&bW$r֨ QHb^?`] <g Gj,rVp/D?hs;h.?ԄECi,/77yUcnTdRo[\Q]&{v!2GMx gT~ 6,cbFF<=F-9PFo3⩓7*O6Uoȧ5VYVtO6Tp>Rv!'ʓiҎ*-;5rK#O1>rY$JX YëZ~]Oع!՘]Ƴ;hk8±s3ogFSoo++t QC:,xg/ JOCh7XI*hnHwǺ8glծ:,"KD~ `uϯ4kzt c (q>0 YZgeosphere/data/merc.RData0000644000176200001440000106205413472155746015035 0ustar liggesusers7zXZi"6!X~5])TW"nRʟXV%>"UZ tBk}MItrU)W*v*t6_uX鎞SH\5KRahwXA-HF*˫f\vf!0"q=1:(m7A$*˶ʕMwibj qܗa(,z)=J9(rDNrQ葹#r<\@ |Pl8Mq4hR6F 8a^|}Cby<۪EC$qŃ׉>1ЄFޅB߈- *p}j{Nk0vkI3+tG3}r:9vd^ {"e'BLYSUAqP(ܘLyOW8N5PC!].45@EG, ) n#f`'D)ZSG*0h[0e8^[ݜq>J_l s| ĠH"^Ip?}[﫟sD[`FVv94q2rPs4f# h)!PL0_F鰔ʫF76X|1(X &]tꝃ v*zo z^@{r.ɴ|tI)n5=;5̽.Sz6OoO:y[-MOcc~KG뷣>;4_!4C\oX J&ڿ}-U 5ye\ǪW ha4[\880 ׎F-|?=__5X< o 6'~l$iyQNCSbs۸ľeĹw9QRQSu$ Y'׌ôv#t>P | V?*pY5dURqR%l| CY.;*aBa8V1Xfmu80 .G86n 7SӿѐU۵b}mIUl~f,ˍk$P$KZ=$Sy=Es]}w|sqXH|ng?( J&cZf xrcG`g?kdObQw"E1ĭz4t2, ]rU{bΦLN 7>}#Qݹ;.pc{H 8Y<[4M[x# Lz ?ۯ%tfF\xGOq}]rB= 8d5,QGJ?N9i3ALRF /,aCh`d7|^}|c9^z-<0ly-  PYU8Rk㙒79PCDQ%0oS,J@=686IFmYTw-OuM 8ҷ/=U | ^ ʋ패3~a2e x1R)=7>_E&DmR.osCf}P]M$u9Hl (D ZZ^:D#A>O0kk#Hza1vDݍie{u.ҍu?|hbrUBbA<>pUG]":_v)-uѼ󕞔Vk(;OiMàuO`FH/<Q4 S@$'JkBDU|9`gb͕p3وV;G2\"iNe_^n"$\ܶNXV/ "q؆AFιqh +x E;k(BU1]`)ldM`Wڟ3,|#3%;l_8җNntcȵbYjQ ~Q(qXtb_:BO`rl3[wscDu-cݩA "cH} .$kB\wcBۄ-Ks&{K o! OPd]WNk, 'r+ϡkl觝GGoRד_LJ~9l>'^OuD#[JK%xG[Q0&4̋wwHФ ޮĆFQkB`Ml5ŬmiI R],UG'/b i:npWAk,Sm?JTHzc}{;5,,g^z;ݪo>jE2(@&@9׮q<"&=85!مNx(I>Cumm>j?V{C%Io^/a[ԃL^ K\^0ɟfrjq^UcJ{N~CD;N`?IUem}Y6Uӧ)%9,7sn@cS#9YZCśrVoIqMΚ˙TN|r⪁aD3rhk(ɔ{Ⱥ$RE0rO0̥2#;YW$8*MvMhx]U *,eip4@8^+fL"^W+OWEc'֛Dyob+CݤE9[,5_"gI^ɗCfF ㇡4rHUm f"AA-&WO #hU(I*<,LSM=nGzմoJ|8pSN]7MT_PxmhxP˴ S6Dj1+:|r sZ}בɤ†_e-iB73:E ˺|i[u Av  J=u3гN]5s)}rƹ_7X_)cPճJ}ȩh];@z[EU<}?G1] !JwS(;%}MO%mWꍎ{%h-x g귚joI IKa#L{m3vӇ_}*kٙWtyW$+fڄαboz|o;#JCO+nzX`ܵ QdHqNPL^P؁4{s9d$-S?,)dєTyQ;&st> igWC Zt*h*jp_ejB) DjiJ:vĶyb$ugDeJJVA>5ryXE|N/e|2t,4|yYx"Rӿ9ʯ۷L0 v .)n_/9+9j-8{)kO.B]`%ba L'׀+ WZ<# r/DPFw{ .Gc%N"4Dm Sҍ&q*K)a(c!Ö^3Wd&fC*թw؎&$& }{v[7{M9sE"0 F]4g "@T'SGadk?ZMA"o,CP3-0!b7Ldp x/JhK 0z2 $@Ig{RaبLqwbV1#r@b/*Ы>P=3̛YNLѣru !,tf9eݞ0YX;\1GҒId*ѳh`Aa5ı\+R&zNk#M(hd}㎻Xȯ%lLb~"裪qk1K9,(Q1tݱ= 숏WcxB#5ݺHi34C=_X -Lb.zY}oЏ@6@E E\siGpgbko>^,Q^HV'(lqj! mEJ?RC3]D7S '? .ɑKRK,#M4ac{kXk`cLdp`A_MUD-S=~`i+@֍@놯P%.npx8o.7\DZ+p QPA#|ez{G73" ZJt|up-t[E.Z5$ϭ IpY.Wgg1 B Ȭ>fW\<܀z@xܲQG>'wъkPN]L9^h[EO9BU;z txS<~g::Q׏4KiIK\zEDo̠ڬ5e4Q,A7AgQGO"oH7Kt)QOS- a4ϟV ωZ4P-Z\hllI35[;~>`Rj.М@yFk+,u҈t2S^tW;ȚAb[ ꙮag0f!7w㑹vmQc(V A(KlE$֕B!xEʌ[HĘLݜt>xP ՉꁰX،,\o|j1bXbዸPH7,9\|;92 #2w^d9H$hv(X$|Fi邑&=ܷEs{`GOlj˓Ęd.F"נ(.3 6+V@#=aϟчyS[o>]?il8Fa&Nz_;3 LwƝj& 7>DW9RR^4[  ƷPWut ϾR5ǥ4Κ`W/Qrwh"GȏwB.:!;f|٥N KːL┳pq_ oQuuK!4Zߌf ԃ ^Ɖ<*C00 ߱[3ލ0vVyaZAt댍HUsi*K[[P̳HKO@75a,"NM{|BtKh |Vl# eRh >ɅV!T>y腷kA~P"\jgXir{PJދi(\6YI+/J,Xo"mΠ2qkȼa6"_Zb_G碭@@fdRfe B$*aH O<bb+tМ%/g7FXoC(K ]C{@r+=ر('ANGuGSf[[ UZ%3/K7п7և<;_>ڄV72Ota, x oТDN 5^Pbu]iwTXxs}/>4nzzRCV vQ؛wbrs"?-p☤CjӢ.]1>;Y?GɎ(7jkWze/+6U %{Ta9Ƒ G-'({bL=^ dPlXan 7Gz;gYG, Yuŀ߱"5p "Ȭ[>pn+kS͈XE^ig\5?h87L=8^W(z@aASZn"WCos l%L7V7f=-(0C%z&l BMTOl*f]#-B!?ר[O'J@}!T|w/:Fxy{#lփU)fD)RY@=fn "C=c,/r |g&a 4 j0*k̨vYϡm*I/E9f%l+UUŒ@T+ÈOϥEK;r;>Vtё^|.b{ěψHL7Ϝm ׭:l}xxOr>`~#z4Nt n)$؏}U?5>Wt=ДbPTz y\dͅJOx:>} W#OzryDC;8J\ݔ21hP/ĥ&ai ܞ] o(8HU\+#7 xkxQgWhhjqHPycx RˆhZ啩<<ܡݤ%ycF 7؞x&nWoKkY$Qv9FJ%kEkL*!N8{7SzP=B_3g+L`TpT*OQ6:) V 0P9nX8`|i].>L<+Z'~xKuh3Jǁts/= 6{l8}ܣ[ s%E4xlF}RsjoJɦLmt-'&z[TVkT}<%uװ!U+̈6IgM;+1+zt4LW֍7 SN[tPlT(1)Jom?Z2s♢C[k9D4I^{ $Mq<$Nd^G,t Ϟ 7+6~n@`wh`! ͎bL)\%DqiFphEP/1|PQV +S镩(8`'&ye/K$}Xz&i)kY8=N[ML[F-tCAהwI6fap~ȧ|99Ԍbgk]$ 0kXg[QUӜutiQt [*P,o9@6;)Y%{QY!lwЫA fL>P᏶crs&$[" y=8uYT O9Ic FkRШ3fj-ɣc`QFV׶Mt!ސ!5ڻ0'wP=|8X> {jTJN T|Qn8#0eÝL]Y22~RSN;iG[нkgM| [1HIPR`j],Y YaPi5SٰES~=4n`O|Kl+y"m0?RZnOZ0ztbTx_yr?]$_l܌,H7R[fG`5ӕ.*IgA\$a\dsƾxqTGlŀs8_y8~Ʀ$fI^Fb99&I3C"Є']C0r_ysAͺkdz;뫟T1=bmCION%joe˚A)FQץxn $ABs$V%S rygh֨~K LMkM.cp>Po%k1dџLa g5Xȹ2D)IRH nl rwЏ̅Z\mbp@$bJҺ *wP)}ƪX͋}o%/1ʪ#!3XG%&Kfے!]B?5{4Ux6E#hܥ{v;SC=r0dj~^G/`Gf= @[PD֫Wb5Lw;Ivd_bQCΊC٣_Fp^bV=/b&6{ *g&PuOf dW>Odlc*OMը0 Wo--;H[of06p`D~ 5A3bҸ G1[O8Rj7}j?MӼ$z@*w`S?ݮ=zp=lx09ub5T c fe2D3;E I9O'{aƪEAO7x3\J[)W0-@Xzlvw?#m;fKd~f4~e4T-Z\_"ko>X3fAKQ) :;lJh8j@QxJ8nLjEk |vuN)i#i#{Q l'u׊/eVl%U*KyEqR[ѧ]fVQ1;sT1 m3;^&z[ aY;7c5Ʀg*"mv}%}K%DC4"ixWN^|Gmc=1, Z:&Z$"T՜^=(BgBD]ȊECRBH'سr9$΢8}NĬO<`R KVdn0_ HY\{TD`ǃg'T\S:TlwaB8Bn hgpYv o*aesT*TM/޸Tlʯ5DwEmVtsZ7L#'7&14O>&ĩRTpa qt>g楘)@Vj=;qڜ^%`T̨١v3 غu1I>,j@<nŲxe^Igu+P⭷ 8bKC55~._+{&a얛&@pJd7΃ҫFfQ!f=*ЇcF ٭P:*L1kR:>j_wN>d`.lEL>{\s)[4 bO,?:xuK'r*KvF>;fuSؠ2hH3EfhwP\)@47S?|'}@:W鞣SC] *T5t +It-1ٹgϡ r c=Um9ZT2XNo )wJN. 1jfB/Щez7೯ͨzD;ot}'Xd 9*wa51{e'rc9>BXhpXCppza(,?'D;_'Վ\zg/QxDOOv&Ɍ ZxU3/_#ZMxTB8I6w7dcACfV$jVOM3 ܓJv]9Ri5IL1"sװ6jG }PCg5y6#)܈(S. 좤y3ӛJ=8WgV 9Ëh G44y)y;tdzuu ,PGl3Dղɘ$QDmO0S.xh^>J =0Vθ}UXh c(` N ]5-`""箷]<܅& <𣚄|$Iu>/;^ \E; +u>NӪ(WVQ}gGLvaW/VaVhxHԖ}H\^>]&]RGzw`OIB> v> ){* kƐpS1+K\x6V$ciez'uWwkMs~,g2ExY~r$&jF&Gi-b 7 7F4 /F衛MUkl=*(ΚEQy-_m:'M=0:gxmٟNisb/ԛ;W s3kmv{7CףqdKC-CT3Dؓ=E@9-[<W,hn1\ W.ouAx3#0AcP Ux±ln^) 7bR%'rbӰ:*y6%CSsUEA?":Yۖ3 2Ѫ=Vrkt cVǗ`9d~}:<%o?OUgcȟJF{uկESIkzBg)l KJg,20#˱Wx"75\2[tU2Ƨ$ aiQynUD黽1IP 5]sBPXjo{ò4Bsq~Q P*BalDo_ZE`eڗ"F^`6HtÏ~DCRaX}#0tv/Zc,ЄGZjzm'(ћ}jWQcˆ(egL {8W~<6#u N@W0]tă P @!/%ӷAEV&w4fS" 2)P;OIJPXRaX(Bc j4- f|VZbcۧ浮K_˹2 / kl w)O8wAKBsSuo8-m$Z gF-tU|~_5 c u %h$?ʜ##΃eVS:Qݭ6~Н,)\uZM)ެ/ j՚?%LU75>4/-<v5ŔQa9˾|gTn" ]ѢF` =WHVE±RYxb; 8b)p#Yt̬d v.F;5+B2Oq4[n7?zt GF{gјjg WfڬP-']µ4qCQS3uֈ?$6d/iLN h3kg-Z(;OH~7mv}]>*1JĚZV|ziYaeS淘~ *l!l7$ ͌t Q]^^wQ)gR-Mn4[VHiF<_XmM7$;9̊:9ڏKHy,&6vjv6tg۱}z9+* Wq«9 Ssr<du _1M}E@6=g!,\Tb >٫ϖsj_LCk*D,!*H21 SMBd&<xmyb@d6 W~.T'p"`\NC98=v٩Wx + +m}fD?:`9a[COp=Yvŋ<Ϭ3th 7.ja D'5Mz^pͨz 3z̯xYbJ*$hKy0<^BYQD1oCNDz [|4 *ix<%g&CaA뛙;u`]0"üܒln*D.ƀ(_>w"0W^L.a~H )"7i:5:>us .c<3 d?ӥKI삩p8$9P[:X!Qx")ԻuJIpeA A=P!0Ю?U+t۩VmWYRq5 ߝcUbwj4,+v>z9?eJm@fcIv3S79l~RcjBʢF„fwFkwbF,ӴPq:Cb"NTSm)x@FMlAw*ߣjvbNV) Q J̋"-FDi4TykȠVkkCtᄰ#3JZn/k~C5ib '~VWV,bLsW؊2;'5s,w|V;J->Zl+ԜI"zvёfuhX*2\ƣ!R Q*IÓ<4/hʿ⎟;&bH] M\L rJ9Lv{n>/g\ WO, t GK'|@%0>amjwmLCvMpḧf[!h\6~#"/\2͚06r=Y8kC NU'y0L6DOX0Ko^HH9{㞁.ڻJt,c6SksԈ\o$Q/L-M=id)ҡ"I֋cH>fV^pU#m߻I9\{iSssADž]ke,P,=©p̓- !ꗶϚ@zp{s ᘱl@Է p%xh]OcPYwb?*6#(S;^scFrÕ VCžO",[YryiUK>=nk!NzNQwŷIy$EH2KVGS?*-Yڃ & #?1aq@$>_xOb]Gx%FJ )AL+K }CFQ 6]{F@W_s&ҫEŢQtyHxYG[A1ڞmǾSvLl+,G^C0&I<6]b ؛/])&K0BSܳ7&Dbim A /ÏS͑·̌1p Hcn`固RIOK2k<&Vf\_qUƖpvW^Y`F%ꆫq(%yhxdov?)ʒ\CѫpUpr,@C.ϹX\Ӂ&IX w^ 9g4iRJf_2:afvd(@w-جbN+m9fҸi@ȢPGm؝v4Ȫ]g\|_AČrgOl?qt; 1%|Gy)\Mw$d=mI>zlpKE7D֗I9ZiJ ?Kjj |]l cKOQ$e Ȓ}ʻlؔ1Fh;Ot60ѳ`=bld%cAcFdnPcBUi?Jϑunn%XKTux4-Y?I$~916dz~:$QλH=_+|9s}͠ТmQ'g_x֛tOc1KʼTDyj:qY5vmx*P*2O(ŅڦTfx`riο@ FQ4?3! 8<N=)Jʡx~6 Zq> ^(Ad.,/S"ѫul*ykPW)NomQ+C1RY_jYP*x7AI %oLj˻x. Zͱz*#ɂYe4#9q^e1p*>Sݤ7O3&muG9*-n5 X|*g4sZ2-$BIswˆ|PY\RSBy]1tTGMytv ~d?|_Sz Fm4 xc>4IPzxwZ{]ÖP 5lK2 ttq½{zNjv~HCr-0Q*VoѕwO.H:7 LAýjYtoda? ]Uf_%wJ0X %Zv cXgi^}l+dIfN6".=fS$VGǙ8# >wWͦ`(+hbfE|2š@70mf-,th En9Z`,hnr.''#@-CM:A+7he*m-/3p&Z`Ą0ABJ$߆ϑ 8",Zƞ I E"(,m3[%$κxq.'F0h d')Qp_e~}Q>%|VarR+F"H n92s]_A͞x8ZɛD^S 0{1*+6L/k{Y^@C<  _ }3@eˑr 7qPK^ۃV@ kW][pe՗lDz[@N?,: ?QP9MߐmG)3N.bbԝМFʶhj Z@A7(E1n @$si=w'~xenW8Uu(@b1 lB63ֈ<(Wk:h@\g,aG^gO,qBpja_cΰC @;7Es׊<:wmbL\3ݲ[)(=[LM`N2澜ÈxDpbTϛ7eaBG G,8YzI?iК2 M["mmz,8`KN:XhbHiSL4ƚ樢U pyR*Cna$41I*(QwF/G<ޡόFWBh%dGG$Fa./9@m]qW$Cx[UPOZtwOa F?}FxrQ6ig :)m/5P'9/)„ӑjU\E==hM%_qT0hC,T!fiU/yÆi&cE42 3WMͫ `h=EFő*&' BEWO MNq4֢LhefIcDg-0N+"0,s뜇x\>z=}$Ia[۔MHE]A3A!h'1^W|6\Q<X~N5ipbb1Ȯx8o嫪1`v2fEPY цqplj=AN6HҊJ E ^UJQ`c [H!9 V|`l {:*fWጄt" ECL80II l`j nM7{_䙦M$z@&|+34w'iw r9:2jt(i`5~Ro灡@dOG1%wv,YD7]@Sj}o)uĝDNJ8c˗\ <,SKVɶ*hW,-+@v b n&rJ&~gq1߈Ґ4/_P%D|0N 2(1KO}a+\66r/LX`AG[DJG b7mVD 駄 ^0tZ=z&Rt[ 8I,!{#WLMs4@A@M!MG?>[e|BJ -v/*V%/9)ur,#S}|dQ,.&+=Z ژ{Y㴰"O{v}Vx}OL#! 0ڎbvb9Bo^/y=MtЅr#vNԋu h&J$_dXv0xTS[f?0_ NcMj=g 7d!ORZJSIJ[{0,G@%g{w}R5pWn%^z=P BwI5/BS[[w,U >+'}l,_X#R+ 35zdx&cv)6,vޛiRE1PM2iҠHH ,Epkiq}J]ǁpO[.^;sr"NOV|£4P}鰉qvF`"dy9P,zӌ\|> O.'yŹ57h4CSd$)߃QiϵshߑatV¡/*2 гnڒ)fcX)tB ,qme}T9]:kYo#=4wbdZspXrGlS v#7)lm%z1&frT ̞4N |$Gkc<'h.aatEq~ܠ\,-M\+ n_9|7iw^^ta(ŬWE6q jt2fiwIjlb˳}waW}_xU_ P`qukڲ/X6]6cioZY#đ=WvOK7!q{k\f$61)3iAc39(,g4B򷮅~oS%7|]c؞Yx('h<"#&lEQ7)#|p$ h`zecB֛${jS+ CtG00cLrj՟(z0()1yV:*;!%f mEQhv[%zR]C%#"|g5F-Y YU( D\ F' )5jf[ʐ~.(F;%u׹iuy8мy^CWÙ9Oo^O4X['+cUvx/kpΔ$BJy UZ;5Z(H:[OYC_ʡKy3^CH,e8z=HS PVh7 /aBXm%eXs*&JxY2} F>_$%Yd;!oKۭbN<;E>[D &;O; j㋉u2"r6\Y2 e tXTPΎJ1ޚu[eF_mYYc<<.0x%Y]E.nH 2Tq%fqvSg"'b*1wcLUc}P(fO|2qbo޸vqyjl]s>lJqYO1$9l5@F_u%MFgy3>t197|c^Yo0=W7#X7g" :Ovv|:H݌܊S2iDEQ)'=YI$ȃl8Hs}0! ]֝^VL4o05 6|kឱEO?_X媙- x)ǍҡXB ;\ I<&h=|VRQM @e`'R\:hc`7"9hvcG mt1HCO550YvK_"5pBs_L: @~4.9U؟1?lĚwWIӔv,H`Xt-L%~8]~S484n!.9`zE&cO\468vݤ'$?CJ!tGjEJ>?l5((&w?VGv~.e)ӝhOjN[Ա_+,7BN%/(\> ゠r.PY`'s?US, ;eHSiI4o$&M `&n/NDLFw"9?B b~0ɐB?[BX@:r\7b7tϴB_ye8IX~ILW)enH{15EQm:8i;50EFqDԢ)[ }ň nEykE ˢ֙l57gqZFuS˥CwXC2!&L$e!@~`&z>u(5vxosP3\w]ot^y}!7n@P{X>ҿd[1vnUJd_Eh3әQxRշq:bFq4m1XA5vvF=7W?GQ0ll]䌘:PMY<; HQ ,,~j)jL۵fѤ.PqL{J&²vD64ٗ>/1 PE}? Xr߿]mCEۻu*I,~ uw < i*Rv]zv*Kx=,9s.@TP&ؐӖaf\Xk{g\̷}Әw9bρ#?KuKP!)2__wa_RH'E* >ku_IkIT& #okQE GHWEnnMoQt2A"EYMm<64"N5F>R6[-7HK J)~S61]drbBɜRο@.Ir2Ԇ VUʦ4)FbuhbAO#um/p;؛\Z3%0ԕoEi+W/a&R+-_r*ΔhwS[Rٱ096옄n x zÇO;9's0GN(ҟ/g - 0RS]Bak}$2E2>{>7Q5ߞkS=s*{uv-SAm]7u}uSD&Np/w\_lvh$Vsj2W]FWX.]ύM]kLE_\0>aG1 9p^w_+Gk?۩b97[n"NWZLy~{6$ggG@p[05/{vaЂu4s˜UV.i{?щ]Wj%߬^gBR{/ݒ."b[,QL@,PޕA.X~!+A(%Vu7IGuqn=@]lI>')_djhI@!q/'4z.:iZxEVQZ}P7x֔Byu}Iv1dW3=UHw6LŨ]$5 خ_? +yq2(|\jjl؟_Q}SH2r(adqgkO Ws3s^ƀ8VWfߟAA{'Z%_+`oOXN!۷j#|"]NavZLLy=1?w+SGzq=e&*)KYsev^czCt 8$~ӕ^BH9S`_yTW9vb!P9$XsuxJ4P92̆ŔOԸzv1BY+VLJ60|O6+;ynvto";8ylsv_tr 3!ɗgNnq0P9dI#/kjܚ5%*/LkS̭j @E+px֌J8I U'/qdžG,i3M",Ju \*lq_&I#FSM h(('{c~eՉ4aeXʹRlժ*t/%: %ouiAp~CBzt) -݂U j[yg>q9`&[>fMTVghIї8;^cTq-O%9΃ا"8@!y0E`}1tBL\F|?4*4#Ai3:-!&.9E69kol씂ќ"( `?49 T$dq/I`sL]5cPYS{b'?q&ӻOvχF{[QJ|5)*ti,dh,DfU-x0Fm,SS_:k}mg۵`ark-t_ZT.E©6C[ΡTœYSUz/NQ@|rs{=( ގ) i].C }HO-\|BQwt7-m˺3S.g3!ԲR 1>ǥ5kGHj:%3oSDoώ3sqi-O1M,\Ν7g- ći\:>E4_hHX'SyG:ޝ> 'JZ] F5qYf5yYy+H|U]{'NY=]%o)\S]//@F@=5@t58V||؉A  l}qA1֌xF %>)u̇+NrsO]I4,iؔ߈w'`o#WPoZ&=vQ61 Y@(G$49LKIz*,KcO!Jj&6ye 氵Ute(Wqs,:#.`$)k lFq Q< r A-*rNHP;g5s6MbHNȹY"FĮx3UؚJ<^'zC"Z"GJ <%3 '`CU= w'V[[/q&.0D4"һS:ȈUPEq{*콦 6jBJY$0?ɐF$ɶycJYX7a;ĚCКPfOƢ6㞧<ᠷY@tgK8勵l??MC Q%Suj ZvJ__TMfژ]vNj`?J7M3If.|v&qpi*~pxӽa}.v|6!WI kz &ܳU׋^T9:ЙX?^8]{[`qRbDiO=~&4PBgHjL1^7KPn*ˮz"tiӰ+M;iHYGh #S# ])D?1 (u3Ҳ ce 6ajqU@Rxl34مpm*1!a|c+ʚC30袁A]nFj(['DkrE$N2tՒrkV 'i n9^n봹R7¶SDdr{d qL09,/o=DUFdR0Q>2rRН^\7-Q,nWbKk=,B`@4"pxE}aT[I#XQvMsq=^hzDx2BS(ImGGvD5Ai_@PB#_ }<*Y>F!\{u*QMJlgj I t=P?;ۯ5%:AImfz_ أ*,^[q1#o ea0y)̓KVj8f@BP;QS:֌9|/#ɍu.1(%+kbF)/]Cq9~98j0`;^M/`/nG2#hwu3Eev}QInO߮+2${fXSs.?CIiPJ+e [1J(9 5Cpno̡xffVc' W0f + i>5(aR=;2Da1h<%4<+9! 2Da2i}uT^,-f26F1=.Bp lrab  ]t2×iSɯú̪jS3ș>{uBbtK l ~ u)e' ˬ!t׺^%:tMQy%T= j1ù7v03iTSSMV|>Vrh|M]llʖ;Iu7&'8b_ T-YC8#hLU94@ϕ[SzQᢝHVx Kp:Juy2 ,9QzN "DKxsvr4uӅZAܓR}4SzRBHz?kPVgC~cG\W+K(0b4%P6>uƫ z)fNcl=~6Э Tt`|\zk`aM<=&_"#X&u6. >}vn-:xxZ|$TõTͶ1w1;4 co"Da |vp]0 w*zg]dqrkx,ȑÓ?O(mWPN~PDAɞ9Cf퓢G5ٟڨڢzfm|hФ״KAAt¨7/G$CvM {x{smWїY?:a皐cy%{ȊnRyw!1Kcj8^[:%XO?n|xϟuC}MJi-aFB`(,'TZƊ"N+-DЇ~ чބ΁p=~JBa*)wZ#}x!ZyRV)A}\޵.I ܊uFέn anIG7pӈo{D\IP"Jd<#K  N'Rtl* u|MB2zGxeWRR;5#q8m,ԅNu1ql8؝??RcY%V#{wYP~ݳ !W6{j*V'i_| ^ٙ<iƥo3wuRx=9ޑEſز(C~u}迗NՓJ {je)߭jARdn!폁`O-xfI `">TU nMn5P9S'9;F,E+J܏6b X g+X #̠7Ir'4Hߨ=5CóV8.1(bSDDX}/$qd&~3PmYL-#K~Wkx,owXI%;]ag'Gr#W( aD+ b)֤3F.哤Dh`QzK4&wzT".9~Ps2*^t[:L_io6*=,PM\wJJ ;@_ɝk3Wzԏi_0 rSzCع:{iݩx28Uh$]4u:EY{ۖM}vk7q^]@9UpY 2>/^f&<2ԁ+^EDץ{/b l5O<[2@r;[^%Z;- bnV3&#`ÍW_U,E 4q{?O+V9q!Q$śs@=u@sˌ5kE"l SվsjyC8X&RT⯇5 O0< f LY[ i|T0}c;eW5 #q2QiW'w>.Wb_*!A˯SA4ċHDhOY:,KtG*8K3cdqxvSX}Y$Qy~hq6,S!՛]uWT :9lppGۖj%V)MVǍ3 TlOs0>@H"XO\"s工 h@ql '=g̽]Ë9Ea];ٷE Tw ¯ wq%XZCZ02UڕezAlx,B.*AD|AHJ4iV4o8$'a.dp3d 6x]khc#[T, _(i`r,%,zXfb~4SߟUN{)ۡ,F12j @f :SiP|gm!ft"ٙA/d-V^z^/x}S$qq.穯 wi~A.GRȢoR|Y@3G+p=z v JFpϳ==T,w@ڍ`E[QYqҽ|i)ם7.gLvǪv ;<ꁳOs{1“`B=bȾa{szq+\li!9OiF4fik:L0-ĝ'\on A И }x!f?82zy\D,֕*Ҳ5dQm~2:(3L.-\MTqI&PWVqKRC|)@Dk-XZչ&rS'm4~@;ZHի&SOj2y|B;DK㋛"D
Ca$>ʰpոfg׸C=cjD χqD`&6v|4_wxWܹžF8C^I@[)6Leg].DPq$hV:Ű,\VD,[hv["ʣHgsmTK<%R,sc TO!xhNs$!WѐhiMShxb,'ɒ8Ɉ ??g;9I Ӓj̋M>q# ˻0`QRMQ6Fk; }/ DgGEϹaCH6uK0QY!8bcY'8L C@"q2+{ i;n#EȴG2XzڒF*aZpfi&!o w;Az"ʡ;F܉ EQ <34:3'\) D6.R4~>"]fvb8qa[m295Gy!Olil ^K-Ye-bt;V{23;<"&n^a5#:HZ{8mmI'ǯ͢+1d.? ^eTk$q]/е(s2~-Yx6X}ƐGt_MŢ7ga}Vǽ,.0k%J.RBc` c[l7eIU [4_IGJ i+?::d"%a6GԴC4SMs->Lp"Ek놊نorDLN0H[Ե6) )6haa?hf!u<|`{D4:}*oPoJrN]*m+*f>#RwYkwgwƪQzZ#!} ʄaC}v/YAS9/BwmŒi*ZueqB?~i _qZxz܍#O2d +/lUWтCUؖ#XOūS THvЁvz~< 6u`1,ZcgNs@?pO:|z (pG:tp$ML08WWWi8NG'l8DWϹ+xJjIx0qddns˕RG&e YT~|ᐅyp+NՎK +8Y$q#V/69pVZ;SCSTBWXz`k^%\#l;4`q&madP'ẘUcPC|Ņ#dfct67Mb婝c(:EnܷJ10pjp M9z9- Nj $WSE|_oTL޼$CBA^)-',(/ ȅƗ5yN0 *Jib5JXԛ~;BYP3mfΧ/m0$c6 ҭH]J]qpWz"PeU٧*,/hۜI9b{S-Wz.udSx1)I]$]?j)jPM\9A8l6}QNW;IEWĢ]=ٺ<ƯSZξ3Ų(3h At(ZQN,'>#-1#g4{fEmTd.H7+X..$ږ}) Qyz͞ ϐ[99S8}b1ozi̎@SC CHp-!!/i/#Ħyj,򧣡͛R]cy]䈉!-Mf" ygg,knc-4Й A֎lزd[mY"攜 J9Y%74k{W8Ʃ;gDe&/g>A$VnYYe思nYVn0^L$K#NϒJ k ZXqq%GX7 .%svw8Q`px+sb`wAb2j+\,4<~qn69?+Ņ3m=vu9-tp0֓3c< SB<cj"_"`Rs,*94jiţ (% =4TZB3!Dx"A? ψy? ")\!7Fc:rl]DBkuCa5IE8^I$ŝEydF  &wm M%>9 / xȂvF+E$AI*w 7B!@ĪOw3溣#p+jo9(lyZzhV9M5vIoZP\[Ѿk#"?qnff$(I'^ܝ;("ߎ.Qu(M<U=9 Ţ({D(ʜ^ 煝QW<|VF[7XqWl_QjS:q0:!*g3 + plm 7rR"M3m1$]fm']\?^O`3\_ F-#vؤ7H]Lˁ8g]J]&rF^\bfg|R"Ϯ_g>E6d{%o\Kl|yg;Fe9뀳bPA %?WGah~5m1:،>O1(*xjhǿٻ7eybf݀Duߙ%kkm1z&ZX:t|C<^(@1UwxI.6{$KB՚%cW`X!]1h݉detڵҽw!;!==؍gX9{A mk&dkDpeV8k>=ǎI;0 K8ó'3IvУ|Ux6:RO񙒂:(]_[|6- 4䠔1jOvi-F<],ݰ-sv"@=@ n( "sé#rAsi8B9aKU$xZ4۲˔Z3YFaxҰ}:!0iQ ߺ_dbOm2$8+?ќT󛞑U%WWv~W =#M8LP=y!N[JsB'0UV>Zl;vN8 z9Cۋ-X277`&~@k)AXT%iߗ-s`]["3k$^SOowb/J3Up+N itf—GGMIe?~,$?Z)Ty I '׷1!v4r4%Hpke`K[4\=wm\n>V/@IA ^AF,J]3t b6oʁy1 *DYVD,pO\RĶ#g/'JLÒ4 uvcuژn^IڐсԊZx|!xJ3gX툀iU|)wlҎ(#zoыA2n$& gNh+ߌȪ6w_(a}ӷP7 D 2ᭈvEd#%1r%>hIKPX[4m̹=onh%C',փnOť?VA.|jѧ{ǒ!D蘣n|[QծisPRUF]bG(ʽ_ BY@S.-Eo ިV/sU~XU8 AK"L JXغK]YYrUf/CG,&aGA> Wn8.B2^.Gq:'yzJP56n\GA | ^[{%|Qh@czlkeOGb!HPB-aldDMh6Wđp+g>a VFM]ϻрo.y"+ӝ8;0XxH"(2;TD$Y apQl1L' q)W&:b跹#]ϣʭgc.\ 'vҩK o[{ CN)F\8wƞ\ . ~V'wZ JZL5()ɛ iK{} A؞~6E6$_^{B'싛V>TYLz9C2<+tԜY7OZlfpĕqW#=2MզG9IVFS'A!T9 H8wϾv*@J=K}g]I@J L#0Whx(A:[-]ccHDX*gպQ`G!(01wţ(&o!1ԙVW~l^ֱLQEtt[NۀOZe`E웕Q,zx|3f/6TMÓt\0D+`ySK@yHi~Hht%b ]Tʬf]}Jcx,Ck(zu#A,Tn*BWT=d(f+-o34644毕 ]^XU}u4Sq@< (rvZ+ج;"#G?$2y4q bOoE(g &P~j ]I?a$+{5F-Wlެh6Lؚ%^pĐtJ`eL:`?[\V` wt!EE(eu}Md`GԐ,(d~0jmS,-4BStiUGxl(6Z]n; =UG?W;TNXBpj$"X5U5bAEfUI8ռU}@Bљb"+ʐND%`PTj[UܩnFl4uHW"˞"Pg&kn,^Z)޸ں49Mn@i`3\YA8( a^[$)oNTԣODjuzJVoا?vVX 48Jy$_a1m[dDBUIq<~S ̚' rw~l,'~q;=S_G6o} #GXe~=y3+|27Ȥu:"X~_ch泝3? b}y;Q[ 9k[X>k_fl4<8sC2YaOf~#Gutp_F7w*/w@ s Io&9x.RT e'K=kVg0[{l5#,>JRZ^֣$r{Aܱr9S|N!VKTtı +e1J=20m`-OG;5S**O4B( Ħg*e3_>kw> q5Zl<.j9!RyT gEuvә#y [E|H>: i5?r:=ܓ>aglw΄b-LGQtyԾ)!ҷw* 65V2F׎N к%< )vRvmSu]F2VLxn5&nÒFVȖ1Ll)[FQcbxkNQ(su,?GL|33t*5" C0oUmfX\A.?qhd "@^ʵ#Cs!z2c-Sa0fT?ny;Jw)2&A{N1C-h*3~rbhlFOOy΢yOEf!{ERH'$tN{E=0<N{B1zn]jX!r:Y%,lmNr`Y7 a&zsh΅FAAlFA>i=6Wb~EUn2̑R(eNbxtU`#sX&DE-6˩YVWn WjxBD}ޅn1GUz&]y"f[r?vzG#4W@f[ˢqw1V2w4"i*zO҆mN;.;tĘI>9wxQ[Rw RSL \.<lƜR#vmS1a)M#//^o0XhLeXr'.kqEVsܒ_URCĐ% *=Zܻ_)䅮-i7BEw^8x!]5 ZHBt3}5Lv 0Wq֠`J?8nFv#o 3܃- .4n^,ij,.Hrɠ}Rc(BǁEԬYwHyx7 ToHĤ5nw%{c-"Ѥ;Sh7a޹+Q2ӎ'+4+gAfqĉ kD{w72qE-(2 #tU*-y$vҩa%ozr*Lˇ@LgfLWс5R~4aq+TozmبtoTGKlxM=![6 Xx}$a`ٰcsےϡӔ8{9'oB*iҾ<# cBEt;Ry:(q!dMW‡ K蛰tQ<ړ8Z ~&>Di'{(g9H,-OGeˑ>3os&x>M6Z#JLVFI5M4M FTN^>pд&]8Ta!uѠHS@Re1dA%[NбHh^!뽘1}ۿH&r= ?eM;O:cP]"e"&R;G}[dHufL*_3.zܤ*Uy4n#4N6CkP*ɴfB{|H_5))T4&;e?'(XO~ӫAwt~ 0Z2@c1 E3zy3?0\;l,;<7plyC{vk$]厦wV k=6Aǿq֮2? ֪ t!EѮ+o1 C :`h}|KO2F#[_]&Z(-}ׯ;xSO6cB3:|ȥDR `8 եxsJ\>-2x~>v9ݞSm׈2R"i[ A=OWN,B)N}f]r8LbyCQ)[oФ#mAdy9|H5nZ= }5j}Cns  Y Y#”ӖA%>TtpNHpL#%LҴoI \N]e'lE"TgaVֵTyO >ubof Xhyu1&eR3j- `cx>>]lRlA@EC>~]ƪ`jqBj2\hiLXwN卑1VT TX y3ov΃Ύ(s2  :h8w*APCnUI⼵pm(^Etc3n癜nPI/ =BT>=?i'6b]eҤp$( - -//oZ9WǷ+zD^iψ&3Ӆʛɉr/0vҁ mv4>+dž1&\Ut ] GQ0j-]JYDs$p'w$ #`y'?&p:DauFe8~96A00/ZkBC~^3_q5Zi2g+e3qڊ7'㞷ڜ!F/9\5pCCwuAfh'+k.lr-q4훖bEYduNS!`H ׼XBYKn>!Y_,i"bR[ nv$CƁy?9JU&[u0!tQD4xn.o"s(c\+6tgEs/tN; Yկ-j@"0:C}t=xIxv<4 3attb/ Meq0&k :v^ImƤtoUE*$WKi.~Z0]]/m]|{:)4R)I:8t̀[fӈ'22o0ݢOiYE=Vi`AOq`|Q  &e>7zt>A3QHswKﶆ78 BJ!71WM(Ǎd{MSzȏ#ŕ9CToYy:M2gϑwHIq=^γm\0B{iٱGc#3J%eׯw>nֳfGV/C]7$zy׶= ,FS +cqZ*10E!et|{Dgn)VGvHĥ6 /6ϣ"Fl`fd.hn|2Ø<= qYքQ;7oՑhss&dבXZwH͑e 'J(Wȟ| K?&7>r6aGS:\rIz3Yʞq(JvGV֐Wb\m+z^n%MuMkVFwhijrƣ&b|'i4x()Fyg}#aܶ 3a(/ H;ZjBXj2"Aɓ^Yy Μ㗽*S\Y%if7N #+VgFeb&R%:ɫ5JyK$U & DT5xfZNJ$Tֶb~tj$^`f;'=h74u\2]gNWljKƮ7hh,i)oe„U"smQ((@Z$J5LOr'F59h f lI>:܅e5B >T=Dd%/±:=]rNHHF}<(:I)I[Pd% qls_G;?E E옘E1ݠ*K4=p[l?3O aE:$lOWDqeoySΠ5jTGJ\+W5^T{HdbK':d}*^p*9 t VYG# V;$#Yٺ>ÌXRc 9iE4e"+]UBգ'-g {=ܻF>xV@ySX&qu6 n6ϸ*&w.!]JeԦxNᓇ=\4Le]%⪐$LgVAfu,dzY̡NSSa)ť͒ .l\?s!!̓&F.%K,\p*斶:{UjwWڅ[e`}~4b5[;rڿ#bpkIJK9Q͕d,v.w<3INWo,"u"=Syض gyg]x]fMO"%븚󿂉pBsclҜ"]=Qyz9(!0(u C=ܾX˘ե޻5#y7G OW'ڼ{EAYF5~ ~QW侓㐅n8%&qdw @U8Z  n /l\ 5eVe=w4{ ߴ8Q]a= ^q}`_im8I_K-o|~M`cqчӂ$Y"MT:A= bKluer1wSxW(hF)9NZHӮTM?03Tg)m,K '{Mhu/+!oYZ괵 [Dja29_ ~Ly}ntu(1nֽ?퀻~af N;47ܺlI@gr Um~"a8 YnYgboA43R*YI[CWF+ `7q5{7jIW!)8rV R ''TEꅻ.jPwmwg03Cr0KtNnV9 c՛BmtgExN.p(_zV-EUȲs k"D'[ܤ4ب)3#(nGMQT?-KM1tJh{X>P|Vss}I4p?WTVV)=v*5(Dx#jn&h; AŚ!@i|4W?Dƚj59cd0 u! w Ozr82셶ZJ;C-Hid(Y&6[L((K{r( 댿kT6Gl hpv8O#+LIQ|[т:GA~ ӑ:pϝL#NdC W;3tRJ[t*q\2I D5'Nzsp Mk<| P !첕~QSVey I! 9"yc*78@0({)[Uܨ% k\@pyԯϖ:[shKSp<R<6X1|ׂ& !%LZNlg|wN%1fx~;e Coӵ83aC>".},d?yZ9:3#-.(ᠡƲKy <95!}[oBG%tNֵAm)d.B`E]liYaúvF X?&Aܫκ'&%{v__U'n+>TH|ܷikAOՑDt87qAfEe_<+VWh4ExZ[jh9iS$b_TԎC{fD<ѨI0=8"9ms _9/nǿ&O gb B,Tg ZH(!hJk |!dwJ|.: ?rȷ~ڟ[0 BR)1o&RfhVQ(1$y L'}=C&'TQjpm.TK_nzSc*`#]aV#A,Z~GN8T1ɢh}[HfmLoR&D,%Hub($>z c#a ?oE_/Iۚ;>nTqtQWQZbqUd.<}vיS(݁hFjH v[7t ju$  moC:d .|ꓭ𣓈@‘EemGfz}N V6U*YO%*Qv>8oxh@ _f%V&"^ rqy¬lC\Jnj`JK϶\4<4ոedv4U!O=F_ ^VɑKa6~bzŚLZ 1uͨ/䔖,ƪ `O)!8\P&p}IF': n`ͮ/inX^m^KPR l / Ŕ T^|}nuf$ |p}G*<_ wCLĔ>+~ǜS;Y}Dǀo Pbd`V8ytg9~X!zJ{Ҹk7Rάq%}XYq7#Pc,up]{Q덕 Sbnz*9C3e*Dk1aW$L(4,̇+iQܳ["iAmD]C2PW!\*7)2&>ZCiN7%68@rK)Zo6B~bOs5%F3A7^=a PW+.c#)NUQKy'EZx,l~q2n#}+L)wn!K8OTWU`Gip*7xH9xbB! dkr7U(j3mzpNLiDu֌#QщLuynAuc$Tdp *BNv> 2(u-g+|.HmҘn+2OJ>zj&ڄk4ՋF,1cuGAby&5FP>}aF`8>%<7Z-WXf]*e쩃'o`gˬ\ZY*3¤gΘavwA_q/>_0ic~`7gc[]:(Kke_2on*>ɶsG:ӿ[[TW2LM.e8 ,y-5^z+MΔ q(Eަ0`mG,΂$G:V<7) R8!tgc8\I~E#ގuh!iી9n;9eWa6* Lb(ȗgP&jas3I\9}BX!5z2ńEQ*V!D pZ^>j"F躆D*&G*VR$ ]DB +W8)T-J XQ (; Iܛ>J4O38XȰIwFgbV7m+<}2R n!yD/OR;!׭%U :{ߛtSHI |i}?NXV'&7zX>R[ ]#,ƉM$G$ FF$/|ȨgȻ5bwތjvm)\ \L| *dc!qM~mD bԒ΀lVZIϐDoꇃ؎>'X>@F\_`zO d|_X]wO$vWl~Tɒۥ! M {ݷ6cH0:4/kXs=4;Ghs*)^(|UnU\<rR1:q)\ހ3 Z։f`emP-[D|+qs7LŲK d,[v_eH6ˏ^QT㳧 O Sd[Zo%/rLMX ii&a[tX^aM6o./˙>MnذeUZ@P(g95/@ΆI$oxl ^XPScK "j(ymOzJxƙmH]BC;G!od.zolnH"~uGED3=6 ^1[JPL[p #EM#Td ?n#vjҦq)@[шn4T_1B&SPa?aRżVvq0]t>hՀ^?K^3 X²^?c)>MDH\?k?}dG)*NW{,9@[?q49t"K8xgYPpEK&Eh;29E$ŤxT &B[Z͓a_E"%=A"X5t.Eƕ z4깂CV6S-g)=ҔYX "2mMk™n˗$Xf}z׾OC̯J;L=Pŀ#cNp"+-化^4hsM^Ae2aUj㧅X`6!_wn-V;4静w+p ywG)ɰjآcNFMOZh4g2Ir3u,tļYx7b$sed7y.NuMKscX֖ +P$%G̡֝Z5lP | 3`L"Fn->]}oUub+o>*B[#>LsBCd8-'=7ЪP-oVW_ݡRE9 5Ţ!K+vlh3RӸ+W2҇ WC2@ f_ddTE<={,ỌNp% )prDǻ pFHdݏj^I@RV~b#rm 4aG.Lbfd&!>7@ vB<;,=ycfࣇ|l͹loEЧ* u T7E8+APڰY!~};1b+C)8}-سh(рLꑋ j@Ei3=h<>}5fl]{(&{j:BåXxɄ9 Vdu=rujHD{vүeͳm)rٍ ;ʔF/ ;uu: hZ6;㹣;Ƨ Wh]:f)%&{[=QevCS?KS5]OֆLu#WG;0ykq²Kz5_/)A$Fw5( j5CbOdep?w[:`]Kq62=*jݟ wXl6W=ey@Hk[DIib#p`}D 6e?/'6k٫A,@QEV5ōSa MWvHF_<{/?4޲%>ie(-w{Jvjn "sXc(94hЯwiTDUꉝ{%)@MGN'2>켐 +L?ٌIiJ8be&>/QHīZqJ8wq6.3 VJ'22XLD ң7ꃗY'lP7D".׋ I+k04aSu{ 'FheTśX?lLJ sEzi_ *CL|(v- Udu$:VsYϟ̓VٲE9O$|H9DP%HbGV7$RdR]$/(*xi_HO/ Nnf; Xd߅x)~.APgq_!m?ئJ@d1t*j4=`4GEyMF\ٷ0b GWVy7Y:uގ Jŷ8&\L.h9'y[u^-l6`$J_'`6qrfo nC03%u/ )W"7Cmen#qq'O&2/e*uZ p$E ˻e踙;I n w뽾cME*Kb+Fօ%и$DݺN利ܿ)7XO^ 1GQ]p&uØ`J?!:qm ݪ[!_=uLmhH‚ۡL{M̏Eooou[®ꌽ=K-/f7+м{0{7 Ri@59sazOw>NP,P禮HWȺO_틞|L()!!-بMR+~>jn e(:b È_!ra;G@Ѯ3<6eKZ"LP/N 1Asݺ9}*L/]7J;k jƻU^(G+10LѾ1[ꉚ-; tw'(ڦBIzͯq{Y lUjfൢ3d!bJoRn@k_771fa5}ܡ] d,bI]}q+@t98}8i CYg Hf=qq٧wwRz/a~/_by(a(J(;?jmyӪ_}}]-}|0 #ikW م53UCkBrMG|}z*wnpl"V{LЮXy~Ke2R-l%WIMmϺ5?/|?-WAӣ K`x/jGɤ=~S-$Y@Ә6j.ROl4"M짌\yh02PDfM\9(![r+>ͥ(}SO)Ōo)OX=g'dZPCOx ~L$w>B 1MDPǏ,M~DBGE9?Lt{ڵ,m?L%ZC萜X ֥=#)IRx,tN`r3ǴS2K4hAUC"%Gӛ'4gr]ql[=^ռ;Hi%߳aR'7u>e%*۶E!!^0B֭LjsWVye0$mVc?5=xBZߕ1(s2Sqѱ:o۵Z*4P | ID WOQ\A,B!ـD#e bd.3fʌ9UCSVk/-VVՉ.ȏT.z_6}.o>ֈS԰Umi1G ]}fW䛥 zb¹:Q?́)' _top X]-0IkXp, PpA+FdIQRK$EJ=ry DO2^ADj6 aU|;5 c9SUYUu Y(D:I} ./کFT7Fu,o jRֽB55ԂӚ:ړNl7Vl`rB?#|S§bݎvAߨ k^S,fW΋qb̗v{8ؕ2{rdS;xp6Uk~L娐:h5 ~G@{X"0L 20cEJ$b{S{14ož8(/ Jfȿbݱꪆ3Pܲey%PO;Q&Al![0ʨeeB(kߖ![|j1 hU(:y7mel62"ùDOȭ *\4t|vXk49ڃ¶k?5HhY'oe5 M[gO'q$ q@Fy;ٯ ^Xb? ό RV8M9zݸ/MR UJ@o /"M$G/ctoBҧerfTy'ܼZ/I&3rj$hZCB=؆oQd.5~ 1K_ V/ 6JAi@PJ f)t0llCá773چeN)PFÛRjlp^ED~,7]#-HSzuG"'&#h pI{. C̶% \$xcNuoɹz*Ü1Fn&ﴘ4}pyใsa@sl?Iggz4JRf8C`@`KgVep?+SIg_OobheFM 9`C2EFc8ϸZ!zĽ%T4ɡ|ۥi"-+HUTH1 `r,P`Et9~7@@KẼQ] {PJlڥfaBJcC(Ț&l Q~͖8rmfm!oX S 3pCD<TR $>O*K I0;PN5@_{.Kw$PS̽x+Z0nC9$I 2hZil۱3Z`0^FMk9:WǢA͕=hY<:zo|:{F5ma6{ 'E s4c9 Ab;X_[~ 񫿃΂Eruq5`$a mӟM3.ÂZRMok"]vgGl^2c"kW GEӉ6\YB[HQ`|3h|4eB@G@"_eV, ?kt =N8ql>mUI=.5ɯK^ho1Vp搈BSNTE"e7W ^2OX*C|I(j=0-+3v5p6^/>CӔ1|7YA ozQb].LzDtdYBoWNs]_AteN ؇`G6tdK}l\u ")@cǚilŻzomkJU@ډJQmԡ}&6)\DՔlTo6HK7Oēڴ-q3KX4dE_lp|<Ɂ,MOXZqvUdY,^a~Ny`FCs,C`~bp]kQ3֫=>ob$%hGhkDxD(Ē 'VCϱ4[Uv |@3dJTwT%} |AEdq;1,8&<Ǯ;Et7cŤwrUCjG:/ #[@GFt{wM)֛CR`Hdf\1->䃥fjپxhsLx$xphQLEak@^AՅҶ&9ڵŏBxW%Y~ 9u&8HIa+vOfЎӠ\=^_ngK`E| 2w`<] +~sKojՓ:U?ؚލNҧԖe"i}|`>hS-'8j@dho3l*"_ڽ͂աC5ѱ]6C;q8謥Jdoy|eIjՊ"?%~z^$X/![~W0%eYE~e܂uU<~H#skTw]r^2rcw#U!8&w^;G4eߟHxݚYgusg̈́#XllM0DkW!9\QDXC\wxz|LCGAsxnwl;B&T (I+3ݒfM;)uU< mfaSXpG0>n~"~[]7˝ezsi1,Iq&(hktsGzP9RE |E:cn¥lh7CnBDh5"C`K~<[5CMT3KM(/yh0 DBџm;f*NȮ יrl]4+'v;NCxfeHzp9gAc0tk?[3K)iR& ]B`&ڞX&b3. Tciz(ԹI2Dx6[Djȗ}@ Ǚ K/xO tov!yaU à<Y\zAl=$#LrM<,ءi6вFKf~n !Io8Ki;˴^(X&F0 1'VrK"[ <@fsV< y2[a_꙱ih-ݵc%TSKW=J!ɇ)\$sTYtd%D[ ܨ^' ^VeL=tƛo&Պ_ ƯU1;@Q9[4d84 *@ k d!QnGbA!w9 .icS|W `KFg6;|mfچlHfӟJ~dܐ _)p'(c|-]K:*jͪ%C -z,btX}Ƭ-wO0Jؚ|{6VOz\Uja`0ʦ( x.*̍信?Oڪ1;Pψ >"?t^Fœ/x I %M3 `mIT'׶"2*b2ɊUŜ4-nwKK1rΖ~ ,SO1g49 |GR>ޢ^,I𳯨slO Ya~A W^Vh7PQJ\8xauBE;\`|X6L= gnhLFUX$!;ɧb/Q-ݫuG\p N!`_LgqY ^6s% lG گu:5m^ЅK`<|މo̙8 ^t5tmύpa1#WTv쮉'6 ESۏqu4%rkl®u8-bdߧ@~Lk]xԗ[1R8`}šXS` 3qi,t|I'VRE8fh7)yx7mwav4ÍT;/\.]% q>uX72s$fz³Jv \xr@;s-W@80<]WNfø+0w101+%%4:d%0)3:DJ5I~Ycڠuӿ^5.1^f.x8x<3헸 5b# ==ؑ4_!4M)u9"h {Ί'(w"Mށlm8uQۼj1.oJ.1S5qS/EɝdS|82 2τ!D>RSԫ0l}RAcV:oPi*YKe[sj\ת&}&N: enxsZ)36l.KmP@K haJHtt/eGW+XFyDϜXQ-:r?q o޺c&2i$]#,k Jʱyno0i2H38E"Q_gq1rc!=,1MY↯yF%WMo$Ymj- cE`pvaOg>Y!;XK`[D򘲳#R*Ќ ̫?m=${M#m4'*z2#aדصR5l3qij0!ǕۯYyYUuKVKJt9ܣ؇KV&uXPr 1IX(ZG ?z _: ӳp *%#7+W4&0.]1,HO[產Ra;cFo,pI3  |G}Fxt9 De #M; 1<{1&jO#5/|kMVW^Oxpƌ?HJ(DV^QCZW-\ =))^8A=[bym&5pͷAm iaM{g cNem:mtLnSnv'b+rcra،ӝJII%>S 5QŢԖ@>eS(+_$VM_NREhڇgN\5o u wL1P24#G[VK˒ Wq,H#0'j_,at'g7'9\!ZZRջ2}"5r\ fgt|V,f[ɒN!rJ[10V:a鐗&ʛ, n } vtbDHRJ ~,R澹gZ>d} X*ke:5"|q_.ЭQ^ 6VK'(|Udx_79,{ؑNӶh)h*ck,U6#%C-WuD]`'~e$Ռ(CS\av DSI~S$~9̒$c -A'߻;wӝaco#!ޤ3h#–uNTm2W8v*1SoU&nAQ80+;6&iWqvAZ0=ѼD# B4tˡw#:Ht3P"{׊qxPsa#hN(!(`&`}~ 4s4M5(f9os}pi2 9 ~hv%SKpsUI  en3P}zQ c1OzN@/=9jUzE ODpZ*4s'с?f^':Jp%d TNkT*ȯYD"vO={H0P6'ͲT0R"4{\r KA'x慗M̾Z H%?'$9u^K>z$1ۘ kά\pxxWX?,0ҴzZ=> M-@<wN P8czED֥ jtznj!vG`Ԝάm9GbAGZQrRޏn]Dw!k1h&.F񇙴#\U娮buZkxg;?Xg#];HPdAWTaQ,KVTF\Y/϶*B0c@B0}o_b SBm*/WٻczzbI.X_ 6͞,xOU m%"`|:(F!G*QMx^.+y;r)@+'#_)^2Qt>OO|Al֪7BϤ .]nC@h,5׸*NqԎ=dJug۞$6uh$Uñ$9B'Vŝ+H 0bz:@+]΄r g(ثA,%gxϯ. :n0!ãc*3wWw)jc_s QDrƸ,)-Y>Kn^.=Ċv_M\ԷG L#ŶUyݿ8%P~ձ~c3 ܁ءVkNB]t¸:d:jz䵦VlB^Lpw%źuLӇ}W9F˖UXJCTlb?w|=ӵ#)XH} URtp ~x -rT2t>ķLZt~y $U1xݼάUhxm7FH::l/IdC/rD¯2TtcU([i(h--œQr_D$nN')<"}9' i*کWyH2!/Tv[by6j-im<@؋8 !t8B4ch-pE;ꧢ~|(eKd/fx˒bEk4>KE&gQ*՞ :$ŎjxKXm{Bso"%?9ޏW66*uBV辊7Z n]86zLw76GACUcBN+6v^ǙyC;A"饤Zǔ[ r\{)1f8QU'k ,zKh\ĭlhda!>t-O!@]-)ڙ NyД¢ע@1ynХ T/k2Đ=ICݔ:6nb̸.FJdϨ[/uLU* `^ͧ,H~3%26-fcKΠHj .FZۉs@+ ؄Jjݶscԩ!Mu#Q*XU.kK4C*9M#zF^ҫP!HU`ޠg_F-քݰ`߉hc?nF݄^a~U:EC-L tbfpb J *|W.7o"9 Nos@c{atCOڮ7qtb,( qƥ_VgMM3=< <4/W"g敖Yoh=KӅ+/H!Yt֔B__L33 j8F|W0.y${<9ǵL]{F͟F#ПDT,>']mhq@\^Wr1|ٕ*?~ # '6bGJjP&md]z~+J=ے RxP_ zp0F7@Q\)6p(K*"Ix/3hU茨Ԗ*?KNѧ*'ۭCi8:ϻa/kh(0%Tqr"#}G"ÚO+ ͻ5t1)W׭\ @BTp[Zb<&Aџ+teڜ; Щ-ÝZgj9ae@j[lnuD[s+;|WC% 'כ 9:`z|_A.:{& "NͿ"ݩRZs@HRVrTT4DK*tl᣷k~욀$r?O'΍lg{.7T;Xu#I"2;o QZP'1D-w&#ioűjCYskBRTL;JHO EՇ5Bi}Ps|uHy%HxEoT;&]NlUD&s%הP^ IL8ޖxj͔:OgN?u# bj]tJ?}¼b˻u5 Ф%H]|>Q ]0:WXyQ?]{Yf]ՐՆsa!ȟ/?&i F~bKC6I1Y$@NVč/#q\po^m}~!BSnnL{VztG~|+ cRi„h7ޯWبabvP18Py5lAdl,e1W0kHߵY4׸uc<#a;j]̧Kk Cj0BX$UzU0yY0Vc&4NbFXsh[=I= m(u{8}hv,e PHV[ Pz^El .pd.嗩gcQp˅0ȦLOkXECQgn$ ao [.rqY P"\@=RNxtŜ2˽6Qŷ@=7t?ԖmJ> \܌f߀✵hء>QReL"s}}MXjiAmߍmA]+~jsoX&mS`KAW8^@WȨKx|$W]y85O']}893O^yIʨ\AL)=#I'F GulW x-+p\-K(Lgf$]' k'S%3䩞/gg %}0:ح Ev+V GWے8|X$p/+yJt&e;$0J%g$' ̶qK/,%_LТFnsdq 4W4Y1Ǐ G\p=4/ߤ)E, =h;'s胠mZ{_2e5QuF#h/Kv:OhÛ\Z|m>u[ ѢY _J),\U-ˇ-2%&^0 Qɶ!93ƼS+&[[1ں$tQtVQK"m/l9@g-U ʷílNb{k Z['7ջ4WB>w(2$a/ck|ARJy4\ &㡷tj'ʍHF nat9^ GDV\29N埜!Ft w? Wī8I~F^+0?Oj+<<׿SizF>W _k];JAP[&#E tU R浂>`Ʋbغ%b>w}͕XJ0Iq͎Gpڼy,cuAHl+h+s1W& `ȀTG곻n:& N2ӭ=Ĥ6'+6Sm;sE33qe[2ِ48D.c2 D`BA(RtvV jtAfB3IhNKH{&F;zp[5YK|pP,Qc[%zkT+`2sʡꎚ݉ {of1XIq-JI`'\ snKs_/*IC^Į"S+0QbC@9(]Q$q˴nW 쀓ztuW RIFyqS I|q|'}7~zTN#RmwD3HU[=W|&Z_ɩ%ҋ*p cKtz!eK0յOY5G3ǣi"ydE❘/2CSVہʧkkk7{k35I#['y`Kn\?rRyğ@p/fξ3YL(ȎqӅ!>`@T tl ;lΪLG m[{YݲS}cϡf3}c%eq6@j- >iҝ˅FLk;˥{(*;J65+M}o۶mIo, Ey\c%>5h=-3U+l!m7~߈;m?ZMQ VaՆQ]MTy%g} ~`{qW}so}CSj}dN-l[K%dlOTKx:Us'dŻTi G <\ dj6U`,9%g0 Mz?Tb|͚]@躗#9dK İ_}a+{Bەnx>qRs&m|?6׃r}Ø*>:sj])t6=ijD&SyaYRFEհ{Tucod/CIvӼvΤ1fH{/ށyB; JUz+>8!ARF-P8x0&ō9guc>2*#+vLI>)cQ3@.TdܴAlO e{-lbh 0LzO~nbp:)bF` Ic%2-գ6GK u)U PҜreġ}MS7y% 㿍RIa=:ېgϛs7c )(X/_'YK):=4dW C%; d` DaeoݔZ?™T2IRj頪8 ao&@P"5 bڅU9*в晇p e> ]&z2e8kjo*#|=y]u,4 .}_4+ƼѧrioD_'.$tK4׃nE,,d Ų.ʈ_58_V)6vI]l^QXi}pt/S}F2/T K.oKx}7}'.9Q`*% V7Yp6DL;:p(DKES[)X-_Hk׈l\A7)[ùTN!aVbz+e8l!PĊ)M͓@UrO:>VLh&.U!z_6R$W.lXf,FYq~GIFokZP7dw$U`xD+o2rw{;-THc)ǥx1EPC7Z7= 9W.\x2r/m׹⇌ѳ_}2TԸ+^g03f"Z#_7RSz8e,|VI#hMJY Qظ[h" 3!pϫʃ4ɞԵ濜:z5oEMjv噆UQIFXh5l 8$ w@E\٫vÿ +V1-KFM" \10_v~2ñG:hmwL8ؑ@xz'c=a֢./O'U=ڃu9oK|in]0AvjgcTRЇgO]0KMIh"T|&" zvyuABHN=Xz.V&jAv7N{Z#bk9@{of' d9@VR}|㌷ob '*oW]ĕ%?FcTi[ʙ!cOG$%ˑ#]Oɧ`5"9mVC˧ڰJ.x1"5 f JMwZ / ŔC Uĩ%KWrzZHh n6z.&̐#v5$8Vf"1 8qgJqzl7W՚<2%%r]ԪFkq'G]ͅX}cpnsB /v?:ûYҟ th?085o8Zw&clEeai%vڦ ~㢘YMxRؠzԶ7@s3CA<:)x2'X6 ,W{X\ļHEI"FX6'L={QDgY) ӮrcOLxߗpkݧ gZ$dTN1*N≪:ʇ l1Oswi%hʠ#+ʩB5NѣrF1`6i䙲%d/"F (s|U]UCr:w`ϴV1vlTա S 5Mt.fOQZֹEZgɽZ_5(k81΃W-4k?vGyh^u' xtWOžP &c1* 9!ɟgA٧F>Z8fڪI"wTsu-KT~:^QWCW!h[5˰O]gR#9uͥdLŊJc+g)&#$ ]NCYrV?`+-i]ph7kpkƍQ܈ htZ#"IYD|c$6SS~{l0A6hgǎ[ץw2@iPv#9Vq+g7DЋ+7dqz7}GY`}ҵzQυ-ѺQY*ȹMe,i> #KK a4_-&^2I!= s/0kd@%\<.ylfvmɱ&qYrfJbPl' u܄>mPb'f4ڥJ;,` `((fyv4 .̚A%{[یJyӸiM&h $mc5-U!s" z=pxrU텱#EAv/:$=cӶ?C&ArBt4{\.ڜRa.kŹ֡z;?}dV.E\*6&eߴu7r*Ͳض-ԎHaS}Iq 3rlѧL:۪wߕ_(',>(^ Js+4Rbm39 N)ley" _˞˪rý+ r𽪩S &^6Q~{nDIEl}{v ?'jba4}3SH ;F4bQmeلT"DWJ* ^ſ²zZ E8[~NpCNпP o߹ݕþk7Dߪʌ]DXŰo>1p~eUJ$_Hj/?oj|׿Tp+u&+cB9X9Ց>O<ɽ'Q+FW8h*ZΟ:eh{Ex`Sp; =lVtXzi-[pنFLB[}. %4T-yYU~L o;H5y!1*Ok8OUГ2)&@tk7:,g < oAAA , Nn.Oꆗ#q-3%`jY1q&ӳYx0ƛC." X'M_z"_0%>ӽoH/mZsK@eO]8KM}>yq$m5Y ͔.rI`szM4|  d9\p=L8\*YTHj@(4_;B .^:4 &*ҋ;$PI@~S?~9pֽ@zڞoue}!*lkf1܆>TU*MAasWY=YsRaõRX{=m2J݁* * 4cyj70 +pD ." zh7? CΘ֊͍v所!#~c ilo|Xֵ,@SXY$c:o?چnIu܆uo0.ZG࿺iX\;=/7:՚ޏcw5CrJI8з)"s`?qwhؑeeif 6Ow|ݘTYVսa~y)7ii׳ĭ$>1)vjq%.pgTBж$.] u^Cr.`eeM'%Mӎ%1ݺAN?pZ& &O]&7̚ҦeH.{eJZڍOϰ^B76i[Ef|aj8ֶlȑ`|Xi `m/,|5_͐Ol0#yrBF/GaE<jsķ8M$Gf%đ݆}=T|;fuyHAeaLKfbxW]T YV 0 0s8欐m偷 `ͽ >AŊh$w5< A"Z C\^j񺔚۪w(~.a*zAa LcuġEyz:w|.y?".ۅC0HP:݌y{98ƹ ozf Ij٩EbmX JՐCص"NL?A4S > i-H\o^Ia?@b9 1SQOLA |jDJOA2[@m)dfK3<Mʄ~I.1{T:Edn_[_3TprrL>oی:Ebh Pt|kY$#FK q7o{B2S[p~s5MUVzNfs|f3uEa 3I"-][ B8Z'8Mΐo\&sFQ d, pG._~ \O ӋWi7R() `v`Ubz  -IFo;p3#lj1~zKŒ$`qJts nnb\+;Ǩ0s2/5?~1 |g#̥uiJAkr+RMwL*PI_EðϵdG Zc5xy  hyӜ^9UbLVx ,n۸o *K+ o~/kbTFSVO^TDiޚ$ ЖoH_ apU"|z7? NT>@#-{&ܤ_Qo{/JuYɋcQ6Xrp{:vxc\'\%䶳.#jyɉ&72\])YyvL8=y@scbJCH7L֐۝{gQ%7٦XDŌ&#D4cdǠyŕFcb1R4U`h첦2{xB!fLEqlFK1?ďQjj8E3}z3Spḱy-;R .:5e7%/jwK+H-9Ʉ<à?H®v|˧i n% 7?[Tt0 څlX0& ۷r!{̸v]C-? |(R/|d"޵Dd!ًG񛌴\]p>]iI23nO<"U˜[.gHRRu%@wwa6\16q@",ZK H.KBa pu~,cG?Q!̽[hn>\)EHBY A_sR0fBGpjRS k.iyq_yڄqe+>EU2w`: W.]^qG8:m_6INCP!B"0 &=~X,m휛b em(WtMH$b__j53<8 8ggV95ƎnkK!/yYm^N| ]}Bu;Ab^eUO^@W=s%vɅI% >Do^N*hHk5,:c Q0+зBP,tg{mM.Sf40y'Kb`(~:y9oE!t0U/?D;'QyW=~;g<(GCR;'Yhqff=dl ?|b󨘾 $H0殬hJP+7,q}{( xNKwj\5>g^y7YLFFS>jⅾM{*gU<Ih:|h/0wFcfS >G%C2 [uYS~RXBY|(h8rڽs~APeo<}kI=fIMl܎xg[xjʎ!ޱMȹٓI~/6_ɏUۻ,"6 K)۔=\[LtѥuDif|lbpN*-?}{ˣ.ܶgSt)ͬ> lkGEO)?IWm9(?9N@l27>98SemZ:fSO"]i-YA,.Τᣃm+01XY{Ȓ5xa?72vgNșewQ7D@= !ā]J $(C(v#qGrop1]$o$>92s9")Ԕ mu$fĈxPh *[ݥEM)`civ>0Jw;OyBe\iM'3jLc7pr:VeI/%# P`8;ω߷,#f':\3""5`e'"J/$WYHr89ӫ j(IUA<_\^En6J%x7Hi9s`J3':~4kR4 0m*.4,IػA\RtSrS5zn1}A?2+V(#^e(ݶ?7b<:`Ytm6i|#]4e17OMᴀ_1Q_8u\$CL;xaAM\+v&k{>Ԛ=VLBcN:ʋ=2w<͸.g%{s]oSWDG򟾞::L&&' y,kL1!g?Ԇg/Oɩƿ s vV Z츆 BH^2>*(,ٚxҠA9վq8}&t؟o~ەa-*Z~$ʿD- @%ØS֏F1^s.Zu" mW$2Ȩ O`B~pLAXM2$,c hH<,(Ps< , 9grNiU[_NBǤ[r_og?OΖcsʑxg m?>+NH,S=in4tg=D[5$wGs}L/ƳF蚨چ:',h .yB& z~Q4(+ ~`?<=NK)!H+R|5 SrG;=/W.t5rj)j#~H9 "5@ÑR8W6ֵ[=l2 h֔P#UqR-v$h䪔D`|\TU q?J>p)L[LߡOš<_{IcR =#˦Q|.EF75hNjuSSRo 7R:7D3}&q dIpy!a'jgsY @O\_(Iou30ZCð̐ M!W\ ;b槮4}@{'1?RO (clft4RJ LLD%:{obݜF 9WivG&96o4R!&UDHZQ/xu#NOv'S]6 '<tO'I]!a/љ[,&m"Z8&Dtd落LzRVxntӔvQXP gK(.<C8^D=! ׸cR*n('ը"4 u't9lqcw}‹oJ:#IF0K1D}BgC6J,2l⚓^diεiTszCȬ 0'?t }u. ٷV@ʰ8~ RF_8KˎZnY3n5o4Χ\> sg%ET{|a/SB_HD"G~ʮAZ9}*/" L>*]&ņzzI`W?Шy.vλhZPZa<㍪sة 7a n*%:Eq=KtqsJr Q >+"g(LȜ!Y }|*bՓ.mM{\NDA%-V-me}Lq פ]W㱓{V& 'IO׹v-c2h ɀ oW +q FLzuL0ó) ٍ%"kAko,.gj\:C`zkB^4ot ȸ{I/r4Аz'ώ#IW\6 ^/.\qKXRa+Fmo)DQMhnL dn_~yAf$l#?fcxܒT>G'5KxnȖ'Dj- c@$h෹}NGM,5 P`S4 f3gXV<+N@w=Ƅܙ0:)1eyʼnj7pU@GhRB蝩C52za@zt4~ O/oSȵnvUs/keJ)#Г8ng< Rk㙼S1<֢AbQԓEWCKDQ͉7tQe"q6v#}gK̖p8</fd;h\H^ݣD v.Y| b/BkbCkc!L$=(UokC %)ILR:Uj Vo0k-dlc-Ec` p?eC&jY~C{ lc55dŬ!GV!Kn#5(eW!m|zJxH?k3:7ur݆ύ?sڣu~:hdf7詶,t=8F~[4wB|~n/Vɝe"CO˂SM{+=G ]"*EqW^)&6kq(@:?!tH@h6$p0aFiRj:U6Ɠ䡫ao."Kwϒ+&#$}*jЮmԛ%I}fnk̤.;oa`kpjT20m\q*[ { CKyְmjswhh8D_R2v@qㆥ=."#/)-I0J[LXk7M=|SU.$],M<&)SZs'BjzZ<[\DtlKƧxWdY[qזY?j,?C ZSi@<R٢0=s)\bJ'屦!Hx~׍ qqG25ot$'WDL! kRf޹sа,Nt 3'{o9^rB.Rik)": rY3H(rҼrX)JIJ&1s@ `g;29>0\/%?vKwsYSk#v[6r@ tw3ZS (_vtz5 5[W$GN:7,tvѴwɇMe<+ިV3$vRާ4ǃ5v L<ӭMA,?ab3=>#N"qu/*h#~ƦsM%Hn3κhݿYjFgs _""fmmxڠdo ]BH!I%AenUm%9>@١rrDUg$EC/@(`懼=_D-!)jfљoj ]CWKb[S D1BgE.v|qy]ӃqR,Wpw.qY}uP*01o5*)tO?tE~grhZPXG#tUExE O)U[h#f]q+$dE\]ۤe}k;u{ًlC0nvAcbM 8(& 3hʋфFuA̗3wT=G=ggcIncNHc<2OUzG+$ouw]MpӋmr;4¹qK5+@㪬9&\~} E([>M`@>JVBLXsjlMjBm rlvpAmA԰n7eq׿-=L&$}?YU>GMP;]z|LuO6 5tzj& `szeiC(GG>`pFy4r畳ssPJ*4pƐ7a4c_aP@`,Jk?`To;+k ]eٔ^Qh33X.Ҏٚ<'P`[\MṫrzSxa2roFcg?jzSdgr$|G9dΘc^ 3:R؍+fh@sSq2Sb׾dꪇ6J#z> ON-0ű&. ( J7CDTw35δa:$3m:1=InUL:.[&a#}BJ ]P>I:JL/ho7z qIMƨu.CK~y; /.0ܓX ajtcS |Kgn:43Pve 'To4r;V<9Ntɺը%YATȣƵ}~:R,.U`%("ڋ6g&crZ;gF:Ǥ`~&}g'V';]K S#sb,&U&@XaKF዁t#1+n1֗ÇXjyЩœ|qITOOހTccZ7+)ts'Qr "&\.49E(>Ts=~*Sq4s &A':u\h\ g7>&ީelDse1pq2FwOJI<,ܭb+Ht!`y !QkE周=&ϟ5-N;A+18v Q4o6ƟS+P:y@l;0&{L Wk֢:cmdFT4O˫dPb۹!I(|4&oY4(FO_)}v򇹓 P}1 @AK"5+]ŦX\ܭD<ijO޳7LZj^~%,+ pTn?yOv ,gpZ25/:Id#_RZ{w/[7^ . z J˞f< f P}e3Ԉ̓ (sPK9 omMAşbrrn0.&dO\ gj͖:QŪaZD妞Em{2`.-$Xޮ@B$3>7UP)pP&%|-h*\۸3Byg}G)^'p0z/RpTBMIx]7!UuÒ؇.bGΞŝjlL8+;Q 3~%[>G.E6Ro_4'AaR~k<$0jatRXdzH|p~ -<%童{ t`M$ X>`#XT >}.~OP]:O ^"ME=fsƹ[GȞX vǛ  m2f=VW=O V=3w>}w FOJ ʲ-Tѡ[8BA1޳:{ nDzxcZ=w6/m^BpgGѳz6"`Yeb}8)N d`!DOrYm:M\HWK6ev}V+O4 o@E{_[uЋ@+eK.ru_&XIܯӢ6%]%Ge&Nv6xcrqȃ7%B/' 8m4) !R\\W\§Cd f o}8&f'Թ[JZ+$KZa.ʉ4ٕ;:yE`8R3ΚP?CP{yLNbfx0t'%jaR n&>L/ =?n3;f.,ruRb.^ u+@߬jk/;#T>N:&7HoN4lwP5-n &(&SʫD+02NeB 6fbM(Iq >бjldD]ņ}Qʲ:G"x ``Pʹu(W{P( qh]i߄0sk,( |0#ODL6VU\~?E6THI[bH21 w2 xp[k"?QVbu 锂5In;DZ<#9רfjd4X ./DJ(sjx#?uؠY urGm;xgKCp5"d$y K-m @jB*2IjH⬷|x oΎW2ZaCVyh 8Ae(I>$~о$PZz> R :Nj.S-ߧ\}7. E7?6+Ô*UGꕨl.e|ptl$pM{URtWgkbrxQnVi;AN.U(kD~*WN*"~/-a^֓KboX+k"csIxM=;G_z9_[=biu{CyA'r@"[UGp%ž8@/VFwOcrgG0NAT!\*؁0޿z6 9"h@=e3L-bGH&vs8zҤ ·x1ShQ2^㥯L|\vS}O1aխ2@| <+HfDő<&p(oW=cۨ/lҌu&"Wj{pċ!a8qtX"= F3^21$ZPdE|sl}pNG 5ύpY^JkoSiLEN{2]Q v\G( [U3Lx5`(|rs[V7_/ ;0J [#lKN oVGZE(ZEL-6Ӧy:}]tAYK,~S#G+Cߵ6(թN7ԣ\TbB 톌}\~.u4kQSZVimet[IiI!^v$NpCíHwCdn#uc5|4Z81iPEwpр&Mښ4la'(kZlӠoPbdT&;'!n'UI7bZ{II @g|%C(qZrk8,8ؒg_ȸv_3eacS4bϾ C :r7Pb|=HZdwD5ͳ'G6u8W߭l}~,Y׋3y GKQy.({Ʀu2J.NW۫}8!uZRf%ύQ?r홭ONšV+c8'5!!xFᬽքVPn?o*=;:qI# ü:i5DcǦa[-'E~YgDRKC#)t:;*寏,Ґ- ڸi6$-Ŀ*:L^`*.݂Y  ǁP7qLuʮ S{Gލ݀Wpsal}4wDU!ndn>ZfDŽL%3M"o!?q0M'&)B'B!jiM’Mrӈ/{"'0ˍ5(Hq %’Ӻ1'1<]!w I3-̳+C!Z5ϣŐc* P*j% ʴ<V6?}VRX6j[gԂpߚFm T;3uC'4UW>l_9G|ڈg";r9 rrظr4w%tmKzu,CTJhOw7t?:f1bdNBDzٟa v<Y7&`9q\J `3 3 "As̉0-l;Nm .&L P%=c_Ҥrp>L/ Qr'!-Z1e'#kuAt߇bb7ڙh:G&g2 ˻rUnj?r? 仴gYdQDa: JhiZ˳dLdjTFyB)E3~O ֢Oj"Lg\L]L[rUjjK!-eKEƽl\tTi計E jӱ靟G]X-e-f9dǐ4фVsO$2 ݄Ļ I[.@W)CT5qCtP3v ͹%O~η5+GGb<珁eZq[ڽ HxX4a F!yFD(9RFȆψ k ^hl_ \Y%mD!6-Ư?Hһo5h&"iW}G41B@6^)G'o#d5w>k29[a&he{ ČlEoZ02W۾T˧9!\Ls!;wTC)0LIZ25?_v}/YkR-$+Ae2IWK1(Ci̱܍.#s0Qq?@/}pz/ ~o\L `GLY 79RIh&sF?Yp[@J&W6n Xj"z9 #˺Ob|EXXg }uH,Xsm=/b s1k}*XovԼ2 1q8@;;<+5>J:7ǖSChI%+qٿ|3hv gD;+ IJT&3(K5=MVsR6uز s;nש=-kҽlrvgq 4Ja?w4g( }Uk^{^4#~7N\\B@6x0G-L;%{ ,`3D²vS˔o}LjdʧcOoՒNȖom̪ 0a*0~ɩ<$uX Tڒ-IQ;Orj*jqpVA$4,LH _S CIqSxHĶj @p 2eQ'CmkJN]^ԓrĕ ъ=hUX96bv.|ΦaӋщ:) 1AzrrnQ K gE:Fk2Q%C@ 2_ :vuqe_ˮM2谗o=[},\gvFK ,ԯ~"2Pl6\3VsnRr)g/[ S^ߙZ2 3&&hٲET^kPIw >I`}wLl׉zDi (Htp8ҭ/Jepy>a~F$;˨((:ka TG-s 8m׍p,|*yxYuXvxqmYgS͜&lf܏tz\ЧKoV?yR΀gP8B1ʸ|A=mm$V8"غ6lsZ#ĩr ^&jKT}f"Rr!讹y]d|o| NT!iQkH% nFFq(Ra mh{Z¿?AWugznYpVRQ[ G9!,[hH'О`eܶ%7ձ $AwWQi$CՊ4~3=~UV++mHd~fmaӖjc{/#$լ)D,iL_z=glvx$.!l|oNoy iM1$4Cw#ÅiyGCj:5⒁)[ߚRD7 STowftJqRB!D 3 df[Ⱦ]9da-tg h)@_u%':B0[iCc8$"LGAk27eJKhQ@QM 7<vO`=6P H}rpaziflj4ڿpjs$}YvnocfA% ~4<`4 Lű~?N3|֞?D a2d C6C[߲zv4T},p}yyAVr)ݿlba1;ptglY3ujs9U )4- ~}vq4V:  K<;h}ECEDɒ+e`{` 6iF#oѠ":y Ru~q"O$XTߚ6N++tXoOūd$G4!9GS"-pmYqDJyh23ۡl?KR v_*49z-!ߔͨ^Df{ogy7X⼦McODб#(CNiuv&lQE6  e'""O-+uEmQt@wBo0)#2R˘X}t]fwUVEDžR}8*rΟ,5B-hcm:UtEG:|)R[R> x40#c؞eBG:a S5v]1 z[e[#Aѿ)?)-o|ЇʼTl5("wFaI9Bl24?|掅oG-)l1 ^茖7p诡^4MT B~mC]|njgD˹\w Zwk/ǀ@ǭ7>WC]/e@<8wgETebk-%JK13Ѿts3&Ƴdu%MorSeӂVAOHMw&Oe+;qX.H2˛{Ϊ{_pJpobƇ7B2f:d7d:.Sx>o8̠{UiE7C9<NuB:_S0G x$ (ǠmHs}+h@CYAM\Ln" @~)˔5}lMZ2ą&#U[Y cx$U ՙ ^tRo T);15կFs'^tx9xʓq۹|XļlW$gGzr,_}6=A oEӞդ,f6\ ;M: C, S%p$@Lj P~.Z Xj s -j6Cu%|Oq#֖~$΍܎P/]CN7t˪[%5LtS U=JP?ɲ2WCԕw j)tλղB*O`1X`Iq@)Mp}8t-?y`ɔ&ޡFw7f;7#70u#9R21^?x]gECI;-T-,mY>! Q Rv4WR ؾ|y$i5ݰ }&i\%26sLem3 8Ħm4zNil킬|JؽZw,L *M?p#T\bϙ #سosZzղ wT/巆|[Nl o)SBkN~O[o%ƖkѵQB ٙr|_&*ʉ@Ao75P~񪭄|:U*h6u``puz Iuaw>VToA)m~f7WZ'E#4)q 6@%l`Zbāc#.Y@G bjwri_,}"H139cү`Zk6zW3WCEdIsSg>;o t`B]v1< XﲁUkaҡ[-pYysU?ft큘[?W8)MSRQT瘮9[+O')]x`yD~`J%1̤`)llFfuDRp1% Ō[9,L"3S i`b(*\48864iƠ||,_[R(]7\P@i!h,̎U%x}?H Ϟf+[^q4P" |UW|A4:6ۋoH?dF"L8/ߊ, T <ej[?@BvX޿+ 2 QT|2!S1oEFiƨ&*ٟ&':O9 u|.ˬ age]ơ&ڼs \v!%o4g`쇶ޜ +m1"dx-)p%=w|k@_ 0sY$%@0{;Au$u ~Ǩ{݀e`Q+-}h@L>0 R,@g%3;r qf "o󼯪y̟1-zY~ԶcTAsz@9 )0םwhD:-md;VPGY(Oʣga yN&#SL\S;$ai2^yIe ﳔlZyV:U>'}HgţDSmukv9.u|h5W7=1u/ɞfʸ&ՠ'5zs~ bOm@8f# [#Q/_x۬^3 ,SFm%;IJefJ?LRm_ 7~$bSI$u{m8](eTVD4cV^q16ΫV~ư>f-W$ v bVľ;}ՍSŬQ!AȊIo|77Asy^#;U L+$;>}&u@uy6'pL~2 .~w[u)U*վk+D;BB68b*męf,2]ovl?U{&u;3&IAƍ=NFɭ2:uU&b70v;wo[!5z9^~Ex */a' z~th k9hT7`e.\ !Q8ԏȕ/?=I3kt5񋲿nʌtquI`7uLZ:v4^w\vrU%L7vEϹɆ0zN0qSߓ@@׈fxj%F0Cu'yhKX7<4C9哉CVˈUM`Z/ԇƁjN>Oӏ~HTŧz8J$t}W?-b3';'da1zZ( F$u{'PNqZ&3/jVG%qGmE J|. 3oH̊¢V64dvs{7PB4kP4K`Xwh)xe'srrg%i18e*iںOpm4sG@|ZtJSuVENEJGgPW8æ86zUb3~FQkBHQ!rs m|)<6o[ /~TA1Ag&q`F!O:kP<ʁR) ~Wu"Z!.#H2YdD >&BMsnddgxs`Ӻ$F#'>a^5M*:zdN4X\09~U[Y^c]*@Ԥ" k.U pjDTQd}tAr\M$mI\a{Rt[ÈDzܩpvkWxsе*;wp"Bu*cb1u.FK w/KIoH[YugI<;S|hF0& M^t&aPs2 zǺǍFA@_TF{< W ./MB/!T) +޴xj]P|9a$e&۠iҕX ++$yG.T oBeRQ\ݷNAL$YRcYS)yp ?Y["UM"[X3|HtIژlֶ<5 aCf|K73#6-OAQ4ХXUޅZGׇL9@yqZ>Z΂-qۂB79yx!bt1.TBib@b'[S9O[ =,ktS{Z>'NB(߶/~?Z/:z n+9U+F Җdc-FٮBpJe1F(4E; QJW%w'UC!.k DRow@LF]ya9ĒvD,,NzWč!i+?6xciЦU0ra(/F?Qxvrҩ2u'vJg @qජJ8М%kri"o?zgӌ(\:Q^1wxTmqD DvDK?)sًH~/4Y[+9fS}^.[tY9WPxNjߦ8q*d0kPp"J@<@HZOnQC}ӉHk!(=dppX2DW6Am+d-# jMUb^د^PoX2ߛ~~-i,'zfi@r>zF$Y1lV=MCͩVH$  .W{fM耟Cr4_c\RU91Uu6.3x3RWOvqRQgWsSyids~ @|.c⩴JEr mAsN% 8.y u~%'" 4nE;d*! 4MJ٨[s\1PIrHQlihw-NR2(hC>?\-aZu 2:m1AACp3*ͲZ>QKpFpc6~7an6%;z6 -g>5P^/E ;dOPT)1̥ 8/Yw[)dUZZꎬnTGhy1DW{Fߋ'8W|32`39>8r ŏD'z.Ԙe1[F.'vDCWBfϣ!j!F? ~|&dR.(Ҡ*"D,pΐʡI:xf`k]Gٞt\Gl$^O:rs2[5}uJ3 (9GDZ2HD#])*hMxMi 9%Dw&XR4}덉WT@*/+lm)z3 ^؏J/Ak_.w|b\ 9 ,=8SRKK.Ţ[8& *ױ:ޠ% !G 2woȔٸ>ل2ֶL 9v*FTɾk܊F_۞c^ey.25g ;G; pi'KMF1"Fۥ(hBI4PE% KJa,{~7ݚi DNx ˃M%mODt-#_B7T7E0@ci++d= ˴yEtV@6"Z*>vM ["2$ֱEߴ}Xp1݆T.:9ȡ[lo63@M l߹t@Т'T+u(7צO+pAƲ0)y'3޶Pi,Rʿ Tk4ǽӔ`%<']<1O'yh,ȍ&!q4CN oŖ \h7^;kbv.@Uɦ\8'/ŜH3^\\4T w:o8<la݄#bLm-VfN7KrODv.b :b'gI= 4y0*(XHҰ/ jO?(twhN_ qyh2uH풛s {%~ʨ$}fLy;WcPWiQّSu]74^%KAr5{%-Ft(# Y0}jA*(s<҂7SCoF>@"a>zVD8ğA[:16:ky"TX*{a@ɱ݄F &apd>՝տPS!>u7bNDhi(yt>l.+qeiR ѸfW:4dN2H! il_s"./ƴQhF|g#<"[r(25-ip#+iMa3D .3RbQ"/-+*YΣyїv&U_>!)T/sB$/2/#y  t/@S{CH [p]f7I_JK`mE>+S@[/RhC*Irpe2 >yՕ؛L@PsL2UbTlZXcP:tw~7W(7&g&[ݢՉUBkQZ aP<(9k inJ=ɜjw$s]V>^ty))^ua.vݩ$o5:xKaڊa5<,ח$/QY$fMM_E1&>EQէ#AE9h_8+fty. zR̊wo\~2l$kưSjetAHDN>\ -U3KT׆IJU/dT[xɘle &nib!^yp 9nv5oڒKK8CÁPD\Y:@c;kvXm֞ : /$LxJ4V>əL 8UZlz" C s|Lx6k{}t$6J |(rtvP.HQg$ Yv~"aϭ:?NVZj^^Y~R-~{Zq8lh~WH1Kѽ6IDB@ H53ߖ د>n0vhZ ]H _5gNom`%GXT{Z* AC*nz޷@L> QdTĤ8xL!jJ2hTy`pl{j{oȵ/r|!@Vxt"kq!1ăZ5]O p,ZCsijRË8A }:cJO~K9vvPgݝ WD40Y_2]c3_s/ m_8PɥlF`5x#^yY7ʐSg/)SXhR_x#iGoK; UмU 6/kfKPl6v5A[=̀Eޠm}}t8\,kD*[;3tp0eV3 du]Bye,I0%ʜD^']e[}&'6 ;[;8*nJ2!ll % x v)O# A μf;:J&NZ4 iӔHfd~/DD\m$% fOjI?hVįrINeS:hi<Ԛ@[!>"#pr$3zNJTpΎW7ˇȞpuźq>7;iAz}֣_PbNsvnN;> 8qL̉4|qS8<+y5P油4l0Yq!{JVT<@QWhuGR^ td+&bgɷ9a ѝNvA W%V\5ڠ"2(Ѭ<nUQEؘwAڊq0h<2Q"0䱅J˪ʭ gH#@}Xy"K$& b+lcP^w( xE# UNLon`gZR63:e79pP T00bW% ,C9a~Z!t>x4n{4NǦ2Uw  0h>t EwjE[6[.bI;`lهU5?'J "pac%K$ ?ۉ7Sm G2 pv\0y4g?vb/H>nLX<%(I|_څjHU5q:}|1rG |2/z4PVzkgLhHrD5^ m}g.A#wڌq^-Ɇ@V]3fwT,nQߏJ&CXv /䴹Qͼ%ct[ wſ苏G"!-a^8C j8+*jB5 <(XXՎq\62w֪X1˖ ]/=S趗upOm*{j䩅LyF5, =% M?O%l/J/zjm(Y?ek'Jcp:䤚lG1Ҳi|ZI&Fˀ[\ 67 n}CB FA{aF><"t M3X@SrR7efW[t 4Q80j:PI{1WDDv&vEHNHæI/Zڞ:d3֖57c]cQOөPD-eT;/Ya}W4UОZ])ąƨ XUٷ@3љ') pxΏ![ϟ-P|.4\Uu 3RVW4HIgCky(ϿC"㘜,ה T@RX7 \trsmm\lP}Z=AB36,H/ң2߻Tgn'YykT[G4Q $B\Jq6g )_TZıE .#pI;~%,CM7=i䕏BhS6>+ζ0x_ 8{>O5g(zB\n(6t@`ITdɍo{0 F7B0$>üpWDѣ @} T3#=*ɣ5Y,#FodDl Nē-&ԡF^֘O kEYчo0T9gp[0o7U䜔_}+%+]~&rXWy`${ )b,ފR*i ڍΑ(`BMA~iy<:"{wݛj`15="lͦ18.b1ehI ^*Q>/cqed29U̖ADGąc:-t"gt={,#` y `Xeɲz˴ljJx KUox5ҮQd}=BFN",WdTK.muޮ^ӓ#YT#iHɣ+u` 8A6JԺr "OR 6Tm{ YP5ԡlֳv7~rZm^3Hb᧡/#R4Ty&o&NQ|Ir:t!0=zt ("ڈ*`XH^JF)GvX9P(7i0D7\sBZotG87]~c3j8PnQ> yJO3.s$b̵5rKۮ♜uRD\sNVݑUcw7}N:8؏o%"jr/Iѹf --md4.__,zэ/BxeVHH{5.ݖuT=1Tf~?&7UǦ0 T t1Q d1T2itZ0><[{-"B[ mٽ\:TYVl& .RО7U6,K+ =g3 @IS6>}㬂:r73qjwPTuz4ʛS[0A&9`vDUvJs0['_4~4=b,"LӦg5ɥƩ̴ëT]UՙtnnM‡ү%;ؑ@!aЄuT(Y_Zpvd\ÿŹ%+H܁9@@W Ңt}`8; KN?6S[vF߀-k1mpg+5'2 _&7˭ϳ%1-A4CŸbY 乆ûïy=bgDzmϏ*F,?$_QcǝAAUYvf!kTӭLWkETUߞRyAY&+)w"i$/)wں3NCR'jٟC-T:E[9Sn}OjH 8{y=,h؇q(m\_cW-Ks:>Z'.nw̰td$ST U}br]x&K2e> 觝'RaK( W$NcWG.ylM鐛$v2aFjrfǞk5uO ۲hkzb;r[κPT9{6S&GtE1eMجl\z{O ] ̹l۝{r('7;i ˛XС}5Z9o@:J\̮, ۭ<g<+QXLEK }u+!Bf5H0#jX)䷱D®14ݠvP/jLwr#E,rclߟ$kƂ=yNXbfAKftsãFh)#D_"2\uSp9SՁVYܜάw-* k927 y9i;<_jڢ5d4P7 (A #Ç ((d2*ƀw^]O^71M.4Γڄ"ż95@}ޠҀ0xm߬;&qHl_>qG!;(|Mr` $XMʺ<x ,WSW/u6؄"XQB7zqL\qfٻI o}!3N}h(vAJ9c qkZ̘B*r =SWk )=:Z߱XT:<`ygh߁7e GxK ^}JkAa`2`י͏Bϱ!.8Tc9mERXB/1D5uC RL#7(7nq$ X(!םCl{~9B 0Do9RRL zY_\E$Z҄mjdQx]6L>4(8=ݞV%'MB&mGLw36fc)YHA-}m:GN  ,)7S!\U_{abzJQCq.+U[l0 kSwBkd[m1 DyI(갌(sKG f8*za`مNd?rM{\VJ$ %E* 4CF8P?/P_jMVVd K=T@LtrYl5%eZ\PcP

zc܈A7oEA]r vFWک+QeXC18N@+j#n;8oQ5q((Qe褮,5;Y2N Ʋh!eBe*j|:K=HABAܔ|h:FC?ksNpeδx' 1vQ@ZFٳ`Kt!" D*cj >i`:Rr`DgMj0JMSqR pJdM<^E/#Y)-tߌ5l>ngW(#?ڣ0yA^4}qd*t=r"#R%R4Gs[.8g]=8Ar)\CpSΞZ\el`9xJ *)^;F!>0jgV[hgJ"nXa?E lNIͿYث̬C.qۀmtti>%9=ѫj/ qr\iPջyR k&i1و61&w ca\& wIs!geܵ[.?l4EZ:hJu֣0vfLScfP޲Z EvԵ}¼cjQlf NV}aG[}YÖu6aPQj;yԸriHzWܮ2JMLbSUSJ> %5O̳ܡ~7a턄A-X~El7`d?~>*m׀d]x˩8f.0:vNl$qPaC8wރ]D}ۻ\ZR+(gcfEԛBԗ򢌌̝~F[d]q׋B&>mf#L}C?o #AZiOm({J3h};B3+9hU٥Q![ȥ iIor]f2Mrd] BShw^^$r!|Q,t)~ѭ.AyzG {Rs_p2䶧san͗O/jUnfv^Ia?<M.vxO,v$ zY[OH'FtYv%A\ҋ| "ʕ8~ ,ȕc`U)cաŤzFpEi]d2VX'ACQQAu-"sW 9* HM]Hs$GB #|w/))4w{H!]c~O1hOs }[jH/"DLkA/'j{`k_J2\"5ȷ}SxϴR~׍~k:Ma"-N-GAmNit W|FgU ɂ@I?Rs{ z~Y'X|*G椽eWRPٰfVtCJ,dWdH_;uf#;rȀ@GB2*t-)A `w^%vfoH񯽚aIXPFY/PAqyQċTdIZK9ņIㆿK-̭э 4f0laRS{7-Oߦ ƍ#ʌrYJ0K-u]M%;0R(j QH3bre I!µPa6 LS淧W}Tظp.%jK.j],?]zqYda >.?mL.f/05iA\>r7rX[~A>{WsWANtW[g1B Td*YЛ sůʮ^ĻnrLҾ~+?|ֈZ ,<]ᥳ QJQuKk*z`\V 45MHVQFulPwd)՘;F$%y5MKG{W[A~Dz,dt~s(>_.wՎdFڡ ?[*Z詠ٝ)ySeX6@|c-Z!wVi3ob/p՘P/ ߿O9Rxcy4'.h,j3bwecdAMj |J֑;vHO^0Ю+GX5+HH76 X1]Rt\@'ѶV|{i">%{\edc="9P]xS|lHe3Sq/ ]ck1Nxh>fDiYKq`G*+H V0KJ^]cZ*B}yZP" ݰPsCS:?Wi<hX:UXX.XH{zi`AfQCLeOeOII4D6i%E&A(YjUpD?wO2o̳zѓJ7L7>͚(Hh_ #\UVў | uO'Ǵ(vVzKe-^s\ r*hMES `9^HGRaY*ov"6Mydt@I,Ƿ<%VrtOUxG%u_EzDP{"N7¸L]_Hم8 amfHp&!rH <e?83hs5x/縛֌2twwS bGmD T28Ђz=n^tXQP5TZ^ Ӽ_R蠂$vy!;j2zeO*E_D).*`r s s\$ ڎW^JeH3WmfeHO|Tx$ ]M4w>G6Zũ vz}<'zv+ZuSTԶ.Yf$Z}O](3$BxDt "|"AB;x- Vs1뉞k1p5Dt+ش;vT<-ˢvR#T =bJRnԫhVyԺ$a~u&U>@~kst"Dʕ%>p~`ґDGn4 B\^{L LI͉<S e|M*b~ SIЖC(XCbe E}䖨 =X¥JNV7:K^S>Ϙ`tT!tif"Z#OXTxlUPB)ܬ'#r-{k"䙳wesv 2MOƦ>DwLk&;!"93BSe&cNĔGec'(~`"knLg`|Oh9Pk[BJf+% k @v˪[\ZEYYʖ1ZQ՚0 %v84fM q@t:Sۊ{6݈v$u=93ȝn)Io8 -!{v<#6ޏ HlY"c4ނR@t Bw۪67>wݏϓ^4>gFr]$ʙ@c ϸA:M8;+^pLB F {[8F%zt<_>S:z/5\*.@F]LڌhF6G?WXpDjwB--c6h 7>I|b~F`x$Ez`_F)gs 8Yu1ٞz\t2r"v_`D6AԻ7 S\ %!;zxΏKZ|mԽصW F`jn 7i'5}F6J[ak/`;h ]e/ѱɉ:wҪDZ+pMyzi|F'[D w]%!pb d:$q3zb+{%>}o:XA CSGqf-},*q/qv{;SnW (K#>k 2_lh ̀5:};ɝiGuҔ6C ;`IQ$JkC3f4%[|;)lH?skъќ-&_C8-&Xq#w 3m}VaoN}D𒵺2Tf>6G$PF=[3- M1\]M*r5mx(Ժ˵VEYJ 4EcG?׵KwP+RQZɸr5=-T+ -ƥāݓt5e6Oޛ$jk!Ԕ'qIֳfӺW ѿ#[#/ca@YivF2lDTtok= ,e[k< #- t&T^xEP8NyN4q1QnT:,IЭb$-l IR\aQތY9aw;pZHcH+ep%SS* uȪ~AG5IޝCQDǒK3 ܫIo=uE ƵSk)Oq&,n8984r$GdR%@ Ҹ"&,E(S[AB#i6%]\M1Ȍ(V&#Xcځac8뜝^薦O%"+!t Xq6])QڵyM-MLq{l"C إeyZ0Y6@@l*5y3 A9k.`)y>Dž 0,jUNy]4AԁSi |/z!r@IȁwE~yy݄us f ^n+~2Ir>zMLXcxM'?r%`O/h|0^<^VgȾ jA.P!Nȝe<؊1v''8^uԀZh֬,M8zY;MvLh/˜#s{T^%"%ҝ_lkc6e=  n}DUavڜfq$X,,(c%)&`^L 1Z-ٙ}w\m 窓 n ΆxR,v+Md<9q.̃fo[a%?ܾQƶ{޷IL;:$Lic~S^dts!lx*r%Z@SD'P@!в[:fb  57c |pE3/n+>CM252AC&㯸߇umtrBfkUTR1ᵲ!mz pKwI# N&‡IWcF{Sfs UK!$52za`ii#Eύ^־`6i6ye", ҔwhW|z*!$c+}33DY]jyz5 m YZʣג7Pɞv'n-/k*e==J9*bIH30և_.D묣m$̞5ƊN;xz jiOS9hC6玩Һ ѿ{ \М#ng^íPӬJ8fmqDk;\,5{%Ҏ6HR+Ty4+ Jڿ ԋed8D#!/-cF}.v3Ԫѣ (ewkZ8)w*} HV+^b mY[qᯕNCN>̾FiRrzQIv^b d屢S[114@ (ps"QZMax^~Q*g?E+Piy u{~Oi_rHGаCջ V'3/$l"]Ĩ#Xu g޶M}k7i/WUcBv CeXle-𖤍/(FuQPX~h}t&jTBK_D 7.Ke!n[HaW8VCť]GiVe'n[nUD%È%ɂJr[yRdreޝMpI(S6>ѺG8Z}pQx#V]COɰ཰c."~G59 _5!MÅ;y6 lwt cia@Ny3Wd:2W(FPx 0XC{:$PbvǛ:f6.!J:IRT}wq ݈t="Ԭ~6ԅ?˛H9;o8g(yGIH^b7jxngZ#o ObXdݗD9Is^gQ ,]`TpSK9G~o`w0dq> 9p S"8'}Z{dU)wNj"maGE,K21ֺ Ft[ժkZ)Zm6ƨ=%gˊ+D-06({ZtJ ILcx:SHS,t~œ L7|z$9v6n=W"Q!ߑSUEdNb瞨Fټ9`f~xRm 軼kjq XgJ3H{Ee:5P)i4'&e?oWr,%w];?_Oy޾ \ζw9K95IŵgA=-`^_0?4mklgS861# oσ,ym7y TÿJO!jsuAD)ӂgL`2"U7X/mϰ=[ MTW:~Y?((Uh 'g' YkbxޙaP{NdWE6ͭhN7a^&ְ&G^`N)ͣ6:w7gY Tвtik;n0P;kd &.6P_ٕscIc\fP^4mXa3w 5:AOI䩣R<^ʭƈk,5ʐf` L '+Z(\ B]_7?+{ p82 G"dAXh\F:ɛ扁> [Ԯ1Y̝uw.wra/, Hm!tڪVQ. U3EKC ͭXpO2~m 'IqKoMݜhKFϻۭdoZo7<7nsOn+ḻu,X6=]V? o}M9^$Tu+~4h>oa:#:{Q+s6eJiILV}Gw$'f&iCc:!tQKr:LdoR7ADJݟ~6M!6c"+  Pwji[K&%[e?.US(V7w7.+ ].25WEOZJ&Hlb#c7.awTZu#*NWFH^Nb礋<}ˡ|0$\Il{Ґ?:۴>l:;=hń^XFiRҞ_ir++_r=570t)ޚ , z@};K&/TƩK4MC<<9F)6GOf Nb]@jje 1D8[~  j|""w% ԹνXŤ3*MnO gs- TR^ *~ T_}?% ˑ#Ns<k[%|*cKcr@(I/h?sɴzNuzf]C#d^-'po{a)w<+Җ\Lb޾ x wV#1 Hs/tw&e^™L@9Q^U0~FGgި;Onxz+gu7u%#/2,jYߛ 2!V=|ot h`e0ݰ5pDCA#x*6 ߄~Yiu~,O+Aau h)&e#OCD.CsONvVm P"09-8RUgi6؛ޓ=!Nc@BTpZ-&J+6tcLRQW~_z wV@-@{Z-~\nx'HёE♊  lu[k` 9`܈P5m"ڋM7w%M@w+bq[XhbFߩCBγCYyUj@$чgpC]%>~c]wլ]҉WؖGIjDV#sr3RfPЗq^^CH9mIMz%ݣFkHB,RTw冎[&C؁*_ #JA cji-HsyDDP M091!J){AQTSG-ZnlYkmS[R?w uWƜiQ݋4QLx9⻼jǞ^E^:paICS-}5o#ΒNGgXӆ\:l{}r`QA/!\EgԜ4rٵUYA$}/K~Ҋkq]"i=h&m Owllʂ-[Sp,GiP*v㘑*Ğ"_cmUTVf.Bp^ߘm@6"x׋+|Jv'60jp oK( fZueÊw1 }c:^[TQiRY븘/?UL [R8r HKB[A`OAB>A{ຳT4dsxk#10u7xEZ.T$01O%R`l3!qc3G;l"5|Ŝse-[rQ s:vaɮT,@I;WBȼ".l/W,o7U UVAZL"Pj&Veǚ)FP#WKYĬ]p;uuy>H68;Tya9 Vb 0ۏ7]*Re6%֓^M&ͯ7,_-{ӹ /Ԡ5(yg,%mPyMͪZӐB$gpd ~J0؄GlLD>y/e ufqiR%pO.L~pB* U2LdblIVF t= !l6eB'>hv5P-󢡃eӫ'E{RF4|z߼VbXb[|E 9p ^ab|M,C5x(( :A {3 H !, [:qEX VLk:˙gl=<_'y7:m6'߱ xR#xngTj&,a?D1\1|z1w>m?!ɀ%!\wͱ2vQV> ۫ j  S(OR>*n+`.H9u"$5`yj(6gXniI*GzbiiZ_G]_ dQ]tAG .@R9~x2e'hu 4ۧa˕AM֌kBì! #'=xe^uc7$~qbƁȅߛ"cKGԋCͭsBיH XH'/BA@f Oe0C94;d-.xиMya1oWP$0?vJQHCcjDCIbUFYK34ݭ,?MȉHr(MybseM#WvVXG݆|1E:qT>0VHW'duu|H؈'VL+ &砶%2CMo6=l_-,6%{uDa%FvR֮ܳƸ+ss؍ (;?g/ALr?gQ[$E9"f>} ̄0mw$B [`_Zk##(iBBČ7хp?Ul2|u:VpS[g;:G^9#Q_&)B+kϦ8 oT O)\1DskuEPQcIF$Z۾s!"u5(ݥ:ܓ9NJβr2<sڴ `z\lUhWWQzT]O]G0 dA<$ZA*:Pԙr|drr| Ge>w9[2Ǟ*.4'bҏ}رR٪eҗ2Auκŭt )Aw.M;2^O%(wZ H.( !@Y[^5vlBYot>;|k!tJ@cKNJ?*4sMa(zg)OuS0:^KxB1/(芈sK6f˥bUx1.:!fꔃ#QNC1†ڏMnOZ_/5RlEBjnyym; "³ #*(FY&{  c8k࢛Jzȑu:3"T[a Vv$ڻ܂,R%oE|U6bկSC$X[ؑc\JhR$lqAG5"@*TIS`B v)Q]zA끫wui5|+ZoOK<H/  G _DbBǦl!4H唪{}uJ:x_~>Lbx0H>JgY 8] Υ# {  :lwK { :=7hs~1(:dܝ?<ȸv[5j`${ew͡$ ٓy5h(z ]cN'"O8PVc*ף.P۱dAejnx׉ʢ1K+L'h}fZ獥?U[Wz[<S$o'mC*g3$l`»G%@ d3*BkrNdIcSJw❹#Gߥ+h)_0I*Ɉ8ԃ/IR&65)/9hV?UM)aLC 3U$jEc U`;{6lDBNki[Lyۥ:KbrRB )b#0ñC =X<^џes;ѯ uKB($N)DvZi/2qx9Fָ:' g9[XbJ(givh: 2"OC@Ђa A}i5E0bPqwTtRu&=ГC-A;ngzIһC~po.)GSvIA2{Q":a˝8|DqS d{^CS93rH\Zjo@ǴgJ8/B%u'kc~ۈ8m&d!?%-+:fh4 V>RĘl.#&SˎY(h:G=с, CN-x<1M+ kצW}rbO2__24-o2yg {v{$L!.~&kE衬iw[/Fw#(aSf>6 7L<ؗS l(iݏ.:%K L5R-T-(P?W|O~Jua}P~-uC¹1sX>m1DQTy Ū gKCR;GL'c۾zNV+ce#daVծuj@I1?NFr1ex>֚˅R~&(cWhYr\:؀Jj>@itUK 3-IMhJ`&q~VP{p.~ĬWxP!7¹)㹩ˊtrmʻ<tQT{:hc:!O 0n%Vֵ $3TRn;~~b-5+Tmr Ei?58Vf `(95tDd8!`ps] S0LʹI[\m͏|0!w$)Z$K]3ݖcCi n\C%4>2Jr.8u_iWu*Lm+g4pĮxfw+㪕,yFrnU5GiڛziZz*E(SG>~H|< ٪S:.I{?KgZ^M v=/0! Y ayETC͖R'dfp%Xݒd':VJulœWFpf=64Z|6x~ 7P~ ȕiowK*()WdICc:|Y_6n^Z)'KҜFF7bF\Uڀ)>G't@Rw܌&%ZXBM^=̠ g=zA;Y߮+u"Ÿ%gC Ff]a +OJ{]=Jl+-&r7$dPVaU/R6Mq"uva,? XKD HD\Ђs=km&pWx7+lJJ6bհ)Ho;;+lXW*f K]"~d蕧> NQuFֆ[qԧIv/҇,yp@u4S1WWB|#&Ts{GM1I~2 *+9x7לS qﴸ-Or^Ev1?q?n.C}ESד%c]:WI2@klJĺ9.+ZG!)=0?'7Ye_H+Q1Nj()/$gCC(sKKHSaФHpEPSCMew{ozqK A_|o8]rIO 6'JظV61OVL:{V,.lپH]hoLwj&4S姇OiJ:}!uw%A-['a gL;l.4#lZo qZ+Vqiz\\Tml`)oD 5<}Ա,V%F@>64$V:[Wmu 6aU|g:2_n2HH Q{*{7RʬN9U ~׀h6e-<.[XZq S^YBp,czqcsupxנOKrF2%4~ 8JBT ϱG"moiLuD[d-ijl.b}Kt;Eʄɔ"%>TU*LTѐaLP~\0|l+]07̑Yi' \zj1{/rۍBHw5U%Qo F̢Ш6wn M^1SOU^q[ˬLp1HW`#Dv^Zc5$|p+(YS|vgIRF{. $r$h4}ykK4ԇ36V3{#"V ?>F>c؟!#?uZ欺QM(Nl u,eDu^$+VL0 胉:YَL/颺waUG4iGrWѽ|A(im#ֳ:TD\%K?B"0 |({dQ#>I[wk6g$orى7pBS45{*f*XeFn^1z\@t,7=0$WimD'ğ5k/Jh!@D`\-es~[lYn^$YwʰyoSVrsL ~;'5ЪSY|29[,G'!2,[bKk'nX*p.$kk jzBD]LCY?l^W<@'[i-~~m4(Yf mt " V͍$] [s*ʋ{d OFS> H6]V6+YA/ {s:nJ+ ~I-_mgBf 5;x~SdQ+\=00V4PΦ,\J4M#ጇLwmxUK)ͤ'r-u>p74>{uLlo ]?GxǬO&+]>_oZy{wַ t4\@9:L9~NnsL lʝCNBp6μ\&)WxX3UX6 B$#a I|}]dR,:2]gPJr绵Xn~h }w${a֬AP)ukFe&k#X -"a\.PvsV&ݚ!Zf5A1w.^hz,(֥Ҩ3G22GT')8x!N, {qi@v@]/F`yM!Y9Aypީţq"]SlXwLp1ܻʖT9y rT#?Y(4[KDAZrL|c>Q3+98>U!  62^M)P2O'jG"X?ǀD~X%!‰1Ww˯/aof0۴3&1. ZĥxBcWLM(0 2g٩xs3N]_HvWC8[cr;m`o.PuC}iW&oy3} K~Jz赳)Y<&W[sқŸNrR1xJaSȫ7 )[T3%*Ukۣ!x;hYA=J / X}?j))$@&檩dVnG(EM3E[;- 'm+1'P\dj|V|$ZIZ1Ɖ欫GT*I }wQXA` VS98DOG2ĵ^\a?f|\._ycn4X WtIM߄4OxMu:V"!+hn&Hp]~YQo *׍fC? d*U #UMUyԏ f^+y  Tq% Z>/mW#Zf8v׽܍d(M 1^@i'6T/>vWU.P˺kN-Άk3$gR!vΔ,'qt gE˞Zek}jwpև>٩@1;}(ԅ̞# <`%S~wc k;:t?¦oE'4ddi6 ؘKQ:ORr {B^d eOjZ&֪ٷEnVc)]*W]VWyеr(!="#VM 3Ru1^4ǁ}o22 SĪ-E(K5}P5J^{͡t9&4㛬M "hLچ.) YMjKZ߻m c]SZ2?d9wfZ k r}D)|)21Vd c W\>gF|cpEFdfR4[$`܏$<(vtL((ח>/]+"WML| uH%.L#7& .hU74' ˴uL/ voLDgWTw*_y`=v:Q>Klz\K5ΘKX 6?js]H5#CA>: >pQpa*eL۬ Au6mN.*;7<)6Qp9$7tc 9y+cmY}u615Tlblh҃,M+M"<4t܀%25P[ B;_n'Tׄ/-?p!MkNdRYzb^h Q[}&,Q,X ;8SƫrQ18nŒ]r-0oj+/)XZii2ǝ=b `rez-x=D>b%mxY4jÚT Xڎ JnC?O,3.\ǛPhy?< bH ՂzԌz k&RWUV38ox66 .)7>][޳/l)6\VbHrhDlݓI }<ʮԇ&Kr23e0-:x%8';I[`٤Eo X~K{kry]SC.ߑOm¿jzBZD0q-l7L\dژ,X>AR.o ?b_'I>SԟԳW'8(h 31&A.` bF!+w^:s왬Qhh\V :LjԱ߂P7PͣsPt5GIVZKf#ZN{͏gg#^Qܨ@ĆJ{,c0l䵴oM4+gπNfA !x:E?qtJ}"'-IKQj/ I|o 5 G|vØc\z9 MǛC2Y[ q0hkŚ {C~w@{~{8nCÊ%NG@l("T-{$w y&^!U[&tFx7Dz{<}p(IS[E8vvia`$%ޖ4uNW&%zz*Lz#f,ϴ _=cЕ:(\f'JDY""o-3DfaٶB jv1 *S{pؓ>l>OqQQk(ɕ0_WyVdX,ÿh+- NjIOJ :~$yw]T>ET@cX*/O1ll ܸc/e=3%pN>jygo̎ӏGNkG-aZW-5 MW9֓]>6l?Lܕ"-N4t8|c#"I>߬+Y/ao_~MG wcW"wh vEIzmaM:kCAPD'zend]nC%ZEl q0P =\,5#Z97L,"#! `șt͉n۶ 1)R톺8,ZPl{BS~*Ʒ5Bho7޴ '3 b mm@s\[4/Hja3yY9>XʴK omQ"g Ez*Ms彌fsc x)Zʾ^ۼ%y>S^5:JĤ7j۲Z,>6TG 7>"]Gt@:BECIQQjydwwAl?8NnO6n̬͡#u窪}RSE;ցE2b#"{40+c?BQkrtYg2@ͣnX@ 8>$- *,!ӕ+'C[GCTD YpDm~(3fVn5Z.qx#X&p7ᅱZ~NKnjA<c5 6.>wd.DvX)Ԇ{^,0"16Hz2U>6_6 }"!3xrJK.* -_qLe(mi5KaTy痬?'eT$Q**ʼ?Fw3|qYs:]7|4%~(QE՚YA4h̸XyL m; ؁pSP(;${k?,|Siad(>O#|+o@zw`:}T}AzG8f;.!H* y<ZrȗuX&|B#^V/g h*zI9=H9͛U&&vED> ޻ #yq4ul;|tfhCFuMMt8?qkN@j_AlsC(#DYiiOOc)zs*Rh1Pen.,f2jZtYG/~BmYqE5Q̯K}kme~3Hu Ռ{׮e%&W$a}b<\5zcs;&fxʆEhe`%{4oQUQ aAjFQjU"5ʼ$=7e=Y0o␗ +"yׯt~c Nm'?˨蚡]~ty?h A䆴<2Ԥϭ48Rs=,mt:HUܸ{j !f=~!\;A%MJO{#-vf7̭}6;6&O/-m{o ᏑXxṊD]s}P~IukuOD_Hx2c#5Ni@}J=ƜXӒRJ(G"qROKNm)u=\ 4VY}=/A*QfI q:*[^L5#G y#:fSNPz~@(!QIt^]_tBi4U$v~Xx.3ͩ݀EhI"9>o?(Aɭzߓע1g2XJ@kѸ8'V۲32s# jO+Uh`d"æ@4 5{u?vx>w!(4U.lD'- Be3P}*ZUwߛž5a>v)%(߾ [T?:@5Te?}NA̷aW[SȍP!FX . `XH~ܥ2Dͫ}<|KE…,H77 @/#^sSJ $>XKpO7­g^QnY&,JP—rMoYv9v[.hJzDNhx9@x9ިj߇PH;x(7\8$Î&8 n]:H\QQ y:+wMZi+(o8ʼ>j&T-'z ۉ8kJ%14#}g|᭏lA/^d7AZ .SXg@_82v kh/s ǂh*% K^S#œnGGt="ǵVUz"Ji*~p+;"l}2/[<1TL-3!n6NNtMJݻ%&ףyK|bm NWMD5" [ U2Uy@1|"GgEpJٴa8 3"3i V>T7 `6 nnE8to}hltdRM|ya=m̻Z 0$*VDž27:UFUF~]߼gbFAK`;/c6UkWIvCV,#Z| 4+ 'lJBve0IzzȊBq ã54G6>iQo7X1*>9< Xl_B2̈kW,(ubI1ͦ@g&|BziesHBf8o,:і,c<Ցs{  ŀ/u{"Q\OږZy"e .'+wL } s\b#If=( ؙ:R#]mߩMNՒaQ6Pn6T(;0fNT*yܑ&0ͮM1o$(F𕭁B%&;F'6d>!]`qYQE_v'g#X݈pXMm2>KĤ|x R hPt}V `p{3dnvŋalhvϾQK/-o0l.dv2F΂e<BN>3gw6:O+0WEPaHW*d00&؍`hEB?ww{ᔗWZb`]|zb ;t⹰CM2i݀&I^u(x We5Y_YtZ*rBÏ KvMAst?k2Vz4TW7A/0xVl;d7ؙIpr>B/ku{a0 !LVU3=> AB|neXli RFnҨpaL{Nw~"Zo:Qv̌9bAy,oyada쵭\\u.(Fѐ7RdjelB,뻙l&68rTu&4BoP*RUUkgSקn 7.^mr༠Os6 K7 o;+OPx">fUSv <&8fLܓw7E[.R "Yz3F27{sN"DGBՙBWX{N ?'Mz0ԒwrSD5 bz+l0޳' _|+ 31P \KW/[#̢U;6琿D:/pY*H”( %>7usZy\n_n~ [)Pʯ>w=zrĈ5?:%ul1f)j-o_Wduެagpm- i!-}̟Dvw^#f5 Iry]Z\*{">>tԲWD7X`‹K)K|e556б &4s},<{aƴuTNQHSRMe$^} YLlNNTsFRJOҳJ c~S[ Ƌ؎2Ud<=)LnP4<biMaL;KLBxf}v:J~^_#?)& }&RW~|d|FZTr^Wf-iXRT=8NHJ{j+@D :0Uz9BDofu8Z?A>?D</P3.<EN UaGRX͛=@N|XǐIp| Eݚ#2f)eݒ:dAADDk /fkPLv[cʜ;$`Ay2U ˯~h$ ^uBxuP ? .r.AKZ֘lRt][`>CL"<8+~a6FNIH^J6lYܭe PXkLgg|SmiVz͔Ɉ{OȚjG. 5dq_i t'w2U=2@{Zܚ;*qtt{_1 zaIrkh~[~)Hv!IU[O:Ika }/j)r_ƗX@k?9Th;%A6L,Xne1l]^#i>D/ۼUM'`5uk Rð \uxԆbFv.Jm *zq|Y [şBN,w>"4OB"D<_< kt9b9˨&,d]ovARQ΂Jϋ k1伕tZ#:jC%lbs܉lV jW  B:(īآm vw^. LPY0&|鋤(!} JL)/!v ،Ӛ~/FBk7# W NzAu߿+* ՜׬rLfBJ#߂'É|4f}8yҴwilrm#y Qgl8H_m!f[9gmlPMȡ.}?9p}69Z+ oP.{w֠ةC._RO N[z6"/&^#&,Tx0èi!b@Ԋ}٨ =m;/CCTJ"^/.we)9|]'{elR̋j"vqW$Jׯ/V~`·rcr=eݚ<;7Pe=I̚-&Q0ُnGq,fSЖv?%x I[u)k㼆#ZɘGil ( j&Ye0o .HUI4f9=hoTKÀd8i,m@"q3w['FB#4&_z @aYz'Fxhv$&Cwc/bkUV!1gcÝL\Tu4~EDoGF^>LS5`bkU/stE^0_u ""^&(7E-h!D*&!V8E~j "~m#z _ Yp9/8h c9 <!u2] uؼGv X L&Oʾ`y1w `7job/v\#racg {A={z..,C6`k-bdOX'$%&n+Y{;,C,´|69uG{ek\pwrUTO,!sf%z]~mY/zݘjK[s:@һ:i|v! }ݓd9 #yz|*BP0).{ h j^7Ϲ*qgߩ-5~qK:߈!wW;&oEoʜ=p2 [pjj b$OWN0S֤q nɁPw=ȹXEw-Eu1fb!-,4ײ?f$ Q+ v/1!u\ˢ)*eC0CuHfyJ5ISp?I,Kk [ "jO%ѼΑ1Q<Z򙯁<" >少5 #h[?@=VtV+9.ÂDxjb[g[.3-qdZ։>;UfoBaE 暗)C+|\.qa4ș(;3|10f;h~QgKKn* g~շ,byggCm%?i@2&̿t3?+US(ʀ'r1&Z$1͡gQO*mѬEx_<0>ZO$iu8EHιrr&E'eնvP!,q5kDm_b<(U_tE_Ro.cA*+} 0+ASz3@y=@^hDA,>cҍ /៘0bw;Cd^ѩVt8Na4Bxy+}>#VQ,VgVtq&n=hj ަz= @0"dXD1r<$񠽾ڍF=IΤVsBOc6zDTR,XՑUBI5q/ݬ WkBڱ1О.bvj@VaP:'`+JSᎫ5N{e]}+LlWCjlk` K03<_!:u0IZ/S }ZoG ,_PcL X :򍙓6'pbht~lio.3KBo}h2MR|#06)c׏eN“dLO[Kj%cX}F7(B qԙ7KF7˺?:+p Q]TwF_M֜Zt|pyGZl՘BLkrbyCX7>=;qF@ F~]M|6[mK*}&cvARo$6ob8L2;PP#?z/Tu_})cNc@*~M:-(TRXD߆6m6yb0њ,`5-6(:ɬBwA'f3 ޛPRW{JRk%z3]K1fҒ q{(wfqep}* |#;`w dȄ̒x$rKgl.!]KUQıR?k Y1sC3kWEIve=oDۨx9t ά6~QYa;=|́}&jN2s .^G2x|;"ؐ=֮ϷY;C 5lAIw&CX\i2!9,e ^XpdǸE.xZT?mTPٱM-:3:RIA֊a,:H>8:]GMqm/JK9wፖw2dzPu#~ܣX*[_m>[JFE:5QB[f h\b.{t.Kأ'gOoe$T 2q}_h,@)1D3q;Dw_O ҘESxKSGڄ OֽPY36 (/v:?S[گ^v"M x|V׋lr|E; >XC^ 6Bnxt*.AÈI$WPfm5i"hOf^`fkpKJ#A՛@  oY>'z~uW<,&>/=$rE[%k1(W[b#D3yȾΆ֪ؓ_ !M$L!t/٬ ?#)n1WT%ρMOĥf"چ ef_cgs\~[E;KӝwIb=ޅ.MicWrR /5RI5:Bޛ}!QG5{JފLQ*ն}=6k4/XWS]D֣Ban~+Uu\BD4ss}O!&l{Xf!FOMcK>ڀGVO& n[Rh}NK+8 ]or^>{ËhV̄/S]*YmRLUra5JSODT0䑓>%U@"j_r&˂HE޶_taS"sV=҃lYZqLdAy/TfLeڬ*+!Oz YF$HE179;˰BbBw=4^8y-\q[C(ΐ1IjF<=sVdxf$LT'RB&1ӻ8'lI{\y(5$  >\C{%Ryif28T+1h:BJc(;:sR,ĹJT>)l۪e| #}@Weh%IQzq!}ZC" )fIG ms-I"$_}Bw$a nnqjP=9M;FȌԷz5toGJ>JVuK"![*h\V<+p mL~{1-G,HU"v&ۋo3%;*i {fbTLgL~`uHjHoSHSVuPhӞZz2#uSuc{ Y:v|˭h/7\TTثU/&| ^eu1.X苁um}kq\4J&HJL-OY\ڦc&D9#ya~m4uzpzK nOޔĦM'LUk*(·(3ϩ@m So_["UcgЕ2WS;mrU&_é7ͻ5yp 4۷)K:x[ %AXfokQ[:@ 8UF9ٖ`vSϮpH =ָϝCT1QU]. #&Մ:q>>W_t!6S}Ҩq6&jh(uxB({ᎠR}W$8nv`鼘ά<}G\o~OY.] S|{=[hrWJw2I( gpfheAxHu5#7 ĉI\dk:nÄ:L+YՂCBWJ< c QshGw- uƉ{jv5[ !wEK*Ȝ6=Fm1ȖYLg f\}J# !dm5R^B!XDrBbR9נY= 08XJK˙I<| ^~0MeZNM86yZ2O~=kR90VTgO Sl١3 ,״tMwk!z8$){FjZyrV 9kNBޮY@Q^-cJO #Out,-Ey6-O m?Y]il5O3'kg<Lj;SKY?XrP'hlT]}ޤRwVF+tPuK 7&`\g'> ž\6|Lϐ9F6d^Stl˰f)"85y2dN38r~9T["AE~YpI0fu®f0N :)l>ٯ%ƷeƢ0%\ƓZ?̆w, x+Pt44 WO3nTF_C*˪oknTZ#]qK=\*v'956N/wskq\o(I̋(C2j@vA#UzNI-_/W ò-3vWٗ= ='tgJX  ~y{(0X~zpCS^W67g)I;%O'&Nc|,~\OAj7ܖK}s;_"'_-2s`SviC5}Gۨ.d=& M4ב.7sYɏ!ϡ%VYOҔHD1EZ Կ޸1tvsv~SF pW VH+{Bl5[9;5}3s^6X AN?~L?i[no1Vt?ANYkI%D*&}[4DgiA[s~`n0n=!y%3B|ʼn95trقʖ+.$李4%pT˙W$Y\gaL FjΑ$sPҩV)*yQ8~QiC=7*޾h: <VN>Tg-'|t,qz7L- f͘jlm0~R7?v!&ݑ_/X8x+Fv4^XiMCbI0γ{l}h;8"AL66Rϐ- ;vP pttB0c\>;Gow{=[ n *2 Cl8PN7TVuo4<5"5,XuzF¦_ ÏgvxhwS&˜;gɸ+f] )Zt~6]=5_[I,oS_nc3X~ =8`phΗ);!ym–^GE^o8YvWWv^̾w-={HFb.Sq Hn[I9!|’Dg'>j֍Vե㿀2`Iu]<9徻aMHl^ws/l ]a4ӭ6$PS%*Ӛ2Z2Yu\߮kn+%ln݆׋bU 'H@!5*206 bv-#""K\aT=ϗ ?Z3ݮ?KbXosN ,e"T5GJsѰM#F-pZq*izQl|U3xkbʉ'ڊ <^3nk8#u!Ъi%-v(E3 }Q-r 2RHR>kA%X QWnA1eV܁rAOYl!@#_N]Tk%bLBs =i>xkN]c9PKYHžmLkFAURӤq쪶eQ K~jeIfCY״r`e9(<؅1q)8z{9&Ý)܎r_4R%n~6WZ(W3kOkAgK4 .eCuw>H鱏E=/j V&npS ;@1gV]w?P1~  GʽsV5Br,MɊwPmã*i`4X|DB2>%ٖ@KDi:KXaIխ&b>;c\ZA;x|L\cnz$ͪ 29L@- O¹mB]~ dq-q]Bxz9 }(ͯ\E?.s%L56XlХU]u sfP)+$-RLu[_ %2 Ͽ͞Yʬ6Z\m`mOӝi^jMa 6pE8.ޒP6Fk\qV+Pc:h?z֙t9\9QE‹[Lq[44Ƹdҍl)}je7^-.h뢋t~p]@cIqOqZF}羈&$Fs؅04x][ '߄Vkx8yJ<c$o{I$G}l Q's.^&P~ rZE&8g Z f8 0IH;w{ŀ{s%b@+lH#^~nvҵ)cy#c n uT0Bvd& W \Mrr*[20=j#0 1 vne0؎y#, %k?*ڝ#i}k.-E6n<;'})RCL"[IN;=ױ a0Zb lK i~81+5\acPf3n@ ;GP b/kd)L"rVID B.a=`$1V]'8+`wdqܼږT^$:(= q\YBCe+XJ, v؃H0+5VfOiYU1 hv&eXCL-+;*Èͬ`"QSOd*y{6!m_xhRz9=iINRq՞/k<%_fz{'u4 ugNF(na2FN4!0gkBL~ک8ܪ\iޖx;PzAe]7gs$qY6JʞnARV‚,pgW(9QyUhwMQav3ju{Em;,W׻^YD~#Y#w]P> yD7u\jXI%[xo(5Q.^?WoPUޓ }0F#64׽~,Tpeʄė۰tUx|]kdz~|0#`:56%,ְ屸uo f<3LeN~|\Ф9P~eBqyB8EB';cwG7 "¿C؀S{Y6*=7Mmrp sb5 \Tb'z޷kƤ/-9D?%BWRzm/?Q4d4yew0e[$Ӂ#fU) dH<Ƙzo]Gw E*ɡ` $eZ/oKҨ3aՇ&{}y9eWV)Y\j4Oq}%F&^!6B Di|Jzs9ԻɕcSM.åbaϏ-roJ6ي\A=, L<k߼+EnS_*7r^h}5ׅv J+bB;Dd8>7Ƨr(t\5hOg΀SNewL(]B)XuCA>qwpu0N@hx@6ELPjs~D-a&8^ 2^o~w eմOh!{v0.8q<,Ůk~fNصjxbe:Ц&aT14|P|u:`gl}R,OfKJ[ OVͶ#AHv Jq\˚lT8lYJà!h*1ȅ@FINk%YC ]i>s w:mg`s}3ұ ~8Y8M@Ne)ʩ &`W:_u@dzc%EH9T*ۖqEPp=*J(B~lm>e>auWx/23ՀG^z[LaLPxFG; ٺ  ڡI);M&H>G-],%WnBPb(ca=ԚC$+*ދ̽. xPmY)0{I8Rq {s_ζB|˒8z{Ic#/?ƻf>37nRdE40ʇTVjm/;'kP`@|1yUx>xO_=~W*Ѯvh$+ō<qx3H%sm{"K ӥ-|Ew'Lf)Ija?dƬp; жM0O6K~t[5$S J7Oo:S48|o*0{UO8XlX*x^Z&d@4~a磽 b? fF6 tWGq)b>kqhTK'tݧko_q9n]z&U\VC!N5*f ⭢OλX~bJ>qw~mC27,`' uTFM:® 4k=Yܫc&o!Kv"KDO.)mH_T /G6jqg\rtEs*aa-988# y8;- gt/| ۰253֘Ф?;amo0͋!z9.^r@JݢS,@&吆RLXWtՓ9 `xe!MaN)=W7: XC^}9߼V{ NK1'S`X EEl WTѵ+cGʽU-\eΪڳ kzJŠ=YjD]m't$Eї1:jdմܑ|hRG!o7Qx=]OZn9xɠ ԁ_%rċ$Q)X-}R^וvҟcD{ 3D0Yv\'7ZQ,UbVt^(=uZ|:'n_Y cpGHЏwGxc|˶"a|U7ň}U"L悔X(U5:u9C6 xZI̝-dU1'J7Xǁynu{٢t#^`^Jtۜ>}WPy٩⪧90^NJXeD<{iaH#x}Ul6E-eaAOZ0aR8jc ob RE\9ɠV ä#2.ws/0Zʖ'wY<_D`l[sdM/[2wïZ~Q~v^5- 9B2ߘ ""Ĕ_G3׽úbGRmsh E.~ bPl|qhd[/8ud|W^P: DY$b \)p*AN`cTۻ ]++= >No}- KAlO G`-5fޟEpN_x #5LnjX,յP46C͈/^ɐbUP''ѹ[4.ЌhLЇ% o~)hKR`:O=Ʌ'@yT:`5M>z$W9m?dwr/iຓo?pQIױm>nN{(*]F~+w0hCIvx:z"Fܸz(gVY 7PMڜj j:Ց27<^˹%FQ= Me۪ZG*!QP8Z!R#+fMU%~r0(NJqbS^FN=kw|79qy 9e;GċFDp}]Ki, cepp`wihI7 - w-w{P2'np|Ӝ`.1 '"xCؔBQpϜ"nOhozl8`E& ]aFnm 8ecS wU_nv4=r}vTdơHAƒ%6#yEM :J1yPL#,dyZTŴi#7@#ɑ9ʧ߁;kizG,:ZWRn nTd+j; EbR,D.ӇƋC!c:z5@"q lԃLp]GeX"xnUZ[~Äz~[V_?o g;⣞{уJg〠@ZV@D7BGJH1A8^d4bEPw^e),G밂1b8rqNI;#klEu+KW&ĆV`{ 3'?AW䠪]xhْ3bNaxY^۫^bDTh"-7C5x5JEӫ`,a(6lVJ1uz݆2T'@ڑf ,!:1b2K`tTי(H\4ؿy`[^fZ_Ў ER6z1 ĚQ~mF-{O::p*!h5gej@pqx&=(|NkP̑R2(v˝ rX·FX@ zY~P򡵤7:erQY֯vmO nͮk4pĔ q3n*`6d,9 S@"'q ^[̥`s\`?pFˎˈ#x2@VaHs.ذ/?tZ˱ع$el#sy.5ݻ)[^ZZYJuPž0/@w e c>d ^h_oK\s,l4!(la(R9Y߈o*"ɪr>W8;ctm9@&ccC-Xr9J*;%JL8ln5)XPg 1'I#| D àr_ɑ9cg!Lf-x+`ɥw~Fu-I˯ү$Gk1^k6էSX2PF,wL*Nb?] d$==vZvk:ϼVTlډC΋u|=si 6=eʉa[R8;?n9?q~G&mƛmT/7ab>8A3yI<ҨIJ&[84I(}Sbmk8ԝWJ3{qoh<n3]gҲ/~("԰A/ahio{dп4>3UsdcMJk*q{o y,%ՔnGx#7kp]zFH D* qio{@ڵ0'K2MTj!rۛ'g7o2: ^*r魯} +/RHXރ-m}$Of_d3&3/=뾕BԶ̦ɇB̭m^Vx-; ) ,hCU,aQ? hF'w.TÓHG " 2A}Ne!q,-$"}VSakjQ;`A6sb1@0C2P vJ#6``j6 i+=`$ۯQbD,LBU01.O,Y*U"v`TS'ehn@-(LqJy߆c bl)Z|C꫹EcE { +)CLLGa$݉y*,o2RUgXm "9+#>6$0O:@|zKFGwwQ6k@q*r7i3O-މ-4䥊V2\ ľ?3&$gqaT[W,4 hߘkΏ)%u9{yځE ;UZ3G)tMuW{&6@ϖ~s?HEf TJo3ծ\<_'blCoWv2݌G$^7?L:qufn׮'2e>| |Z+3f2E/<*I~-toNSUqv ;EՌ; (V)"dUp{YU"!WtY[=0qNl2'w9`^ W ܶ3[P$zO[D Lwac(ߑ6gdJzAX;p|آfbec'r0 ,Ps?r}ϧ҅6ߐxfwd[U!"_UwyeDNdsPBlv%:EAe5[=ijOBZ*W_й!P7mm|螕QDfЬl$l9Mj3#,e$3V`qN~F> 0n*\s6σM+SrT qvL~ ^ƝFjVY%߉?e/\>NVHò OVNy $Q75}o'~C: T}Q5 m=F@ʁLj&o˭h4pKcގKJeiNJO3ضWv]s&)Sۑ3Ȕv3c"`ęL{O|\dյ]G|ToV.S%P4zZkAb{f#Axñ ]M =B==[XnxyECD]g|ԙ${b'*HyA]ݲkJ't.w7q4*xpcUjVlIʯn;o^VRJYżב]p%շ{tʽNƒljIܭy5׹mN n=J-aʜv)H,`#'%GV Y\NM}dv&mFJ@,c5;Vo->>΍PR#l5-B|[× a%a%nӺ`n ٻ%7HwK.`w}zCpv\b:#h碏j"I 惯ry̍ (&k8I2ro*150Dq[=]RvRaFG,k?DU3+nIcUl$9-$$\ %3Vwk.+A?kG'nEwvóo!GW8Rd[Lby-GPp(%_34qW.7YOĒL⨖[bM,t_99i^]|'sy^H*."3H`?/W4/6`QyݠNz=JboK" pwby˒Cigy3O}& -qmW!6)t IK4 gI|UNqMz3eͧe_|@!|Y t߯@~pKV1tֿ{GSQȑٲdhoW/h2=

A"ұZvͬK|w)eٷQI\noe/&HK<\:c~KvSN먈s@U?jb 58wHmͧ}E ɔ%hw_O j.ڑr~^\XkU%A-J!/J̽PFl~jmqo_B\یwϟS/ 𓕬¬%xa#mZ`:b%oc6 L  3vh?NCw[D*}Ս_@:)Ud٨oFaC\'暚W;vBI^ #y[C3!fM0NN/`5dՇG*%sY~~Í޽nk Xs)379X_ь6yz$@W {oD`)8ENO60d}l%`jLk!/p\bJd缎oBoƸyܬWBsg9y3D_UwpYX" Үv ]j*ώIk/G"nzíU}i:Xi3<Mк8^QGAIOq5*8WfXEyҖnm8>F)I:8ڂ}`z4h&%[!o,ṣ93o@ַ҂Egu38DbXV6<*ϩj sf.TQpd=o2c9t[?rg%ֲھj@ &o1y0ζ!Πk 5XPΣ9F\i.PK Hlq̤Dg;^NRrG/g&$/7q&PD MOrK>FE`Տ~\nٰ̢kM=NUWvFRP9dwSJ~k)r܉oiX)+6Z;iAF'٧%_~HӃYK*e ǯ_pD 36{^}pRFj*ނ?f PF΀XM_ .8,I}Nod>6q L[-,o5~Q =g;!AZ$G~?הMfP;aIZmc~=4uui,d4%̓$`or3ѣ 2iy!P!$ܭO:9%GWdhM80]J (Z@':$];29N(Lp'Od~Z}\, g5]C6\ 6y. =;ڳdbe,,-G/"1?e_ݴ D\w`>/k 7da>rf%<N+ NXv 'M:yDѸeQwS ޢOuoTfm 'm_`駱N=h]ӫ=hj-RRKS b_oWVgLJ*W}O< Olߘ'; lX4ũ/?GO"v[4 3߃-ik :hK;U(@{jAJ?1iуN`m;-Da~jVoe&/Mޣ4tVqMXϱ򴇔 &" - K-1JQ;aCUZՖѤoc'ZmbG]E,'*6y#Z_3\MKhuӶsĭ,9ׇړ-E*%;๪].G <Y"i'̙^戅Do&&a.`ɡ#txxUm'&ɋПpֹ2 @kU>΂& ŵau\ o .g~trp̅\0+ Lsa=e&)`zo|@衢(ҵFkC2k,d%`A ˝4Rm H7eb/BCaYruPG3ktAγ~NpӋh?Gՠ: 7 \-w1,=!XAZqH f:h87ѣk<l@yx+7diD[㻄ַ.FUdbkCڦ64h n$ <`כּkDyTyt hَCxPm.>)S Sp2n;~`F%g5M{qxJi/I+7-AG3@ ؄LZ@[PF4bc4eI %/9AB%K*f~uvQ.FJ5X򋋔N4K~90riY}K{1[;Eb,72)򖱃kk2l{}iYF;^!I"oضrKE(l7v-⯂!Cma̲^,$/,Opq.˨{vm*v_'N6\$W:\'u\%qU_Э85*n1M0u5|2 –=V>R,Pw*q_* qKɛ<k 1?BA :_n~v& a"$4Z /VYyl9f\A^#م,*YOaPDybnZ\%{ZtP^c92lV+LNMMwz0Ӫe׮j@|^uZZ [026btRAUbn>ш{](ZӸT}3rP @BȗA4:3}ĒijgKx*\nj@Utp;JLýou,1}(|&KJue}37$ӏ.k1T]DUjϸ-Ȯ'a_Vm+"yqWv[0u770@*=dQTP3SlFy!X>| ɟ$ :<q> Dc(wjfv\+-ߑԨmGLuZm `m]YU$Nvj$F|!%.L~beq}_œ5_ f Jm~Nsd凫4tV1Mh;CHj)sT,-|[j* eЎ#=/7m&jN?`P%MAgzn(rvם4㼒0wz!ކ7١z":v=8}T[̏ƦOlդO|&p"(F=UM>|IHkHJ]͠ys9CVYrX٣WGbaZW7'%k~zo )%ܣ Gacj!￐4GRpW)7 '"UE8nbApq2dyU"C}'qÄv aB 0EKDzk19JHGͦ CU"fIk ]q}k|^l!sdUQZm jCMkN a\=kr[w{ dk=ͥAlw8 v$ciRᎰ$S9Yw^F}(K~Fdl᎚f-pl"KP&epJ:UKҪ/|F{?!!j});Ұr#M67`5x1<D@!;q DEn++Fӆ͸E^/.o.(@$H8"v\c -|5ר+,xڠˡNQn^2ںSlbA"A>3an`%mAPI_h~C[Vk,Ӯ~^JN@0(ġ8;i~A76yU K n|>n̺dXR>2V^,\Ѕ5Wv.Ky-?dC9R6y#Mrs:y;;!?yzz,7?A 6,Ɣ29f6MV;;CK6@m{qgP׻.mN5$EH"O)?4,*a<B!-#q+Zb\.g@|-o<>k V QSr:Ǿ~  ]q!Z3*Q ; II7!F"C!-15˥)VSCLjG WAvďnzVU#mCBRDPZIԠ̣A+@苔%֥lvτ Z@؃MR"*7Lh*< 7]PnٗdE,ɗs}u?:>* Ws*h(pgp H~ޫ:?T މZ ɃνLoC}' )>3U=+C?C;78N_)Lff3K[U|g4ey(~3Ps%h$"PƬ nH&EHXKiϹi.NBG#ĝ}̭>ia@IC2>]:f! T^JWCn`,Q,&0A`Q[cvpV3:Yz9R9+z9 V KvrJI},Mk)=5&EPB/ W\&4;NY\UG3j%9erSIaKNIc*Ng[ ݤVtk6ް|<8[0 hRUca&ilPsӭTK6w'R5۽x2TC%]]C+H52kM(tf/` #Ox1Zm]$yv RbýB$Pº}ڒdV@(B&c|cW#+:.5hGuK?%C-$hE(N$[4V}ƧZw@9?zqX$m![y}Z206dQqGpǚ]ck.u{pxQIsf2MWsew}.մ/sPp>]{P:̢-}2,H^@0h%#q`f[jVi>(BAZC(RxNE\T|,Ed5s{(-O۵X{b5CUeD F8 ddjN˫^fH>k{~ӰTVM#C0F/UPOHXMUꏻ[ SӝWqoR!02p6uOW$.hdDK"Ռ4(@F}(vq@؟v~qK&NesE1S(,c9kuHСk肓 ;3]f)[A*ˑ0Ǜ0N>ǯȌ+':rfYh8:زf Xgc sBb"|)i怉*ȃ0k0eW0DTk"ېJkN }IiDScs1[FլށJGU`#$$:$$=%u ٦j.bB\_0VBz$[zxN87 oA1|_({a2xZpڛUmg"o6qҭð2+3 +O'SQ \S%'OQK~[QHЁs#fj%?JM.-SŪtRJIs梅.{ۿPB7?]Gn\3Ƣm{ _fػbndMBڔtTtϬ UEfi!,Xr :x*uX]52_,AOG䅖>V_:}9g7MenqObyx,A3E`5%Uk[)QjP-ٯ%N͘$͞s=+x4捸7 BA8P_*x”)G\e$ :%.Z+ 4h@7뺍3e6hXE,dU) ;cyK~2CW/jt&hf|cV~ZzX'+Z[5B,&ts0(sdӼ|kؑ䡚ϵ} RRlfLrVFx[z:YӠ=_ual8XcDsۭe:ar4 {' QzCtk,&Y63*eq,HnTZ?S@KOQCHٙraxQJrfzZ|ނn1)+_@$:P{Sqi3Lb VXF=: cz/:tUt )D<#2uaG)?ߎ1 ("c QHBS G}sɇR56U p:6.J.O\>+*cc~p6!ſ!MX\ yd~Kj?AwYG% 'wjj#:XOvj9lq.Y~ϾX_rH/[~۠Ӵ{f7A_ۈlSVNh5]qrHR:ZNxS&=I ^R!X7"Ԁ.[2Hgmb!,Ĝ:֊rk)}Fnb`—УTd&&4n MktΑx~lrĭI  YBj=IOD\(:Q}$bl7Sـ쑨oRq&}iڗ|3 [8Y{̪ ge6=AU7pзʦ{'5Ѽt 'Ma`KSu1dg~>pw1 C~E[p2peY0ʄH/yv0Kbu ϙzSVT3_4C= q3FQ0a 0!JjmX9d8Y [7'#ŹcOggVӨAsSMrQ |Qq1G隞,؊y?@UX{F0(~-%weZ,*M%S@w6sF8Xa1`|9PpPzs4hXuH5r/12R,$XWH}콌)v{H.k(`-,-/GX;u~߯QO|h8~zRRf@|*爭 H6Гޯ\^s\NzYݹk&  q"P@m Y)(w5h䤑[Ln)vq̽IqGǧfid:nI R˔BmXCt8Ǐt~|OX0G-bɜSMJ-/k.p 'HX2-;%݈6=1[YC*h}!xW-wv0P89(V:`KjiU=dB'XJQ *@B=G:1TuwmeSTIĴ9A܍lCWh1hXJZ/_wIymu- 䗼2/X~Rђx 0 f0/ (Yyo;=DWIΰn|2O' yYHw=(ì3ZTjϭcZM.( jOv7frav@'Wֆ5)ic/S B"`%r_'!~o15ċ (щ \x^3N;L>0{RRao?rBS 'a\T 59 dDĴ>F{Lq5o 7Az5/͹. @savG5C ֆ po5#s\z3Tyؼ`DVolSEAX( Bx(n05E DFX*9QAjPQKym7?H3c`Oݓ u1\(q Qv9Dgp$ʃ\QA(jܡơqD*98 />Yc:eX:>f(̼ϻ+&zJKt}E+Aɔ[cY^S&@.ZRehx f<{SBJ$ӈ5*`~  ỲОwZJEb!SAEEJ~K`>!dRp6e2]v_I"q f^4C.w9+a!`JPueUS'˽v MfX `vrjU2\ |8{Rf 6heY,'GkIwcO*W縄%ġ^ SJYցdgkW$[Y 8x(.};E,|zY@4W,i2@ w=ӟ+IU}=g;T!vI9#ҙF4Gv l:(LLJ~)q@"B9 ~q}Vby kff+ ,] I e8}WꋆC dv8 &fz?[`ǚP)s0ߍ$ޫ8O%2m~4e؅`5nM{!n7<`?dhBGےT`^cچknX?NI $g Ux֣z $0.t1q<0b4zRce 6b4m2aācjŮ-zo5?+L)ۚ8 ]ȟD71#KLJ@ZJTN+҅iMV= S!eP N{KCA@;bԟ;?d>.u 0$L"Ob NΎ&L[OҤ)esX"ʏn%VLԼh"md4-̵E&1޽E:!MUn/Dk‰J#C$>bWK[E㟏#==Gaql鴎[>D!2>M|W͕L 0[J[54+1䛏2:֏O- }MrLK~m6FLp%4Jn@5ECl*R|lR˱\nzEg+;}CFىŦ n}36a'xk `,1Yh7#WGcR}%ђo}IVm¶b5>t."& 0}noMZsz"__;Z%բd ${&j^nOkaȖv0]SZ'bS]Y $-tZ|F`;ؚPt(pIu /Td>!{Y/mS8r^ TK-إe>G'o Ec"(ea[%?,5 J9"ICꎁ*acq}NAg<Rs`h1J,_?3g7~@IZfg8it+G^ "_,5$_Ӵ"4 Am~"6 H_rIAwKv4'ZJ"Qqgb&U@8Ս3[by2Bٴ"E1dȁc%b=ceW&,;w wpo謃*GBV,s7S42B 7ۚN ڿru(knڵl5<?}EС`h(vH;DgC6~}VĦESޕb$QOk¯ykw [H@V*G'仅# ml%%Z0VZÝs|YsM6;A ?z6D{%a>މ4BMOu0dj-:΅_(S-Z<ybs@@OwUjts]Zv9C9YkfA+5L,'RWPS.$C ?!RtyR$=͝1Dl yH:CS˵;z O)Hh8 jꝙ!$SiGfBQ&=4ĎjF~Q?A5<`~Mb$&hڤDe$ 0xlF' 5V|+uxim^~+oલA{9_Eט˥Ɗh/gԸE]*=4[sp b$-h@wT`zOuHĹFtAFQ@<;}0iuϴJ:%f2Kh*5DtD˅Nî{.KfvXt?F;nPOwFUD$VgE(q7r, H!]9/ +߯\;,],|"](!P$󨀤L7Ql*AVLvoYٗ*f& @pl$Y" $-CL5 _&;}%Ҷ&gJv(M6uiu:z%,F"$)al7@`v- 1ŗt( Ҭ|s1WEƏY*]ŞdGv@bl{^\_yOQ"ʟxZ䵙891zB76րI5QĠ"wR;l3쿍fou-=Mkjfפ JacyWZJ _1FATO \|czPit92s=Mԧ9zv@f)TJͻ,c |'O7;GKN.6U&ho3T;81^ɟvKsan&_ITc'/$?!VWTFU~Z.mzE׫ë Tl~u.4V*Ѱ>vBZ@3R2'$SnYxþϼ4://?ؓhWW:jgzu_hF=JeM-ol@>R/H{J`K@z%rbE0:Rq:jOme;A\[NH,Úrz-]O6 -.dZ ީ$].N3%}6,ۍoq0(jr?l2w-)1kA6;`ΟsO3ǂhMjKAMΜr]6+iB3 7O&]h̕Gg9mN6^NbMiM~0 +cy~6fƛd=v)Iżl [{3 aDLs5>cSSy<\:<7/ YH^i/!Vbڎ5(g;=`́' EPb F^UNdܾk45,Z:Ft;\jU"#ѯb%"7r"VgF.X:tҖ=a X +$h0~~L:K @IN1)#9zY'AOrW V5@rBctV!TԖ0dQb $;C3-jQVLq›/B8GaZ'Sx_Z vcz6 a eQ!I2YqQ'oR/8DNfFAfYBlUᭆ;EΔ9"uYX>m0lvDs} 1?L^vZu)LC2;9YCPWiwr $l2W`bvЧ!;W+z8DZ?lmԇYŨWq',/]H`~ y Ro~t9~|]D\X.r?DAӡ"Fk[5Ŝ Vbmo$kU75>{q~:5s완Zই9 W;UE6 9?9&-Qڜ^nR9 OlNȽ;_¿ʱPx.:Uƨ.E0(U: &[?% b]W\`Yr @dןjkeF_#'a/qRtoJVPq$b _T8u@m ɂT~5r7™ @R0﫬e,c Kr*][>QpuN65 }f~/?*Du/ g*S]<]<"ry t} ȐYD׭ uɀF=.yjt(Ag4TA:Aؚu 3qL`)h4a9@.2s>t^caH6X MتÎY{_0r꾮G5+{Q)CMg԰$L8_Z!=˔m F1#;tkȑO6Ԗ M˒ ,ށoU{;hнOO{OnU۲?ɹ9EY\YC_aw;=Cr`$5`ɢ<C)b  8N9M o!45GllU_3,~ۄ}v!._:j- AZ:6f𦃒W%"XUfFzS;"lx-&p NJ@dIe6ᦉc#\z_Mt&j+/|"ج 鷋:h4J ^NN@h5-ҘطV\n_m`z SIŦAm* vǸuAoV6-BM`>TDW.R^u>(~o)y`ݤsPJ?i}ðtg )ڴqO"6y9E_o'e_ZkBv[N R{Y3 Q0 &ze*/,KGlkUlM}ho}rSo€^pm)ׇ# 52_0+Y(})5F5Zx&2Gt],GވL8h+S:R@q"4tN ~ΕG+n g =͌^D9{]̕}B+ 8GA< ==H F0xXFU('xڲwPCZwCȔs֡δxZT\ybk9B\%)A$j`cB9G6*R$u:msCM:uFj / Z>bρGyI='4 e-.څYv8C=m >3i%_iW{MnoƪJpL4xh`AS܃䆕6ݗ'bgIwN x Ƚ̎ㄪsGf| /gs_b"  }P vJ ji 3s.M-E FKUY3}4ٚa,~0Ó-1x6w\%& Y. td oErLv`(2J>o5#ȟY!MҘ ޠ&1rt߬.9jі(j˽ ch|g|֟cp~H yE(b 60o]{|?GVǯ i{w'FTZ̜S(*mP:Ft> fltg 0H`c@Qɇj,kQxƘAwє +7u)/Ĕ9Y (XJQUMi&z|w9S^LŬaj{pɿx~"jcZ r` 0"bAM5y_|?RŲv6%1(jLz~\}㧦A0R?>.߂&HIe尥|4|BwA8xMWMy J~u 4i<еfidnGG~+r5Mm ~ ;b~YZd3$ud@zp[Y;l'5~mRr(ge;uޜc ib v=-Ks<.fQK\Wf!G: S'ES7*j+;ed IM }5u 4)(ⓊA괱Lڢ#{\Xe\x@{|ءNlx-§"MKwMLe#p5C$^Ҽ&>F.`}~:rܥP{ =%TIw8*iO縤& E"Buނ9w< +t0%b=̙s=ף5PqRRmgԸoHO37* /ruܗG[O:kc{jW$6:wf)B/5:/jA 곧0!%'_ooupbeh+Q?*(P2IuKgC azE 7GS+'7Xr=`*;MXJÇބ!eF {cx4ɯw `mo6Y1iIMzމa37\KҤp s‡c":(Ob#V{>eUBSj9MLʆ2ډ!خ$Ar@TLAa̟3n:B5To9_"$EY^V/a2%2@'5f&փK]][`uuP]]~p h Y]PﻚhO]l"$S/p﹘N+|\qB&@RI-B& Vϥ'Pzu$6~5B^5V%8U%CgdP\fˍS; `=YrtT<;gg@ Nx3 - 22P+fɵL+yWDv"8Fvzv"kX-$4X Do :dM#G;xֈI/tüiYS囅LF1WP!'"B`cfdjw9T_O%MUY}Mͫb=zͺ|w" t:{u-ȧyS32w@\")eDpzn!T,Y1O(E cB("CڼnYȗCz&łzMϵ-lƮ_1k W^/*wѳmk6ݫhUy7Wyr G7 fwWf:6^xg#+4JuJ: !P8S-`·x7b93'k{dv $}-a`qv]ً;A0Te _ sb"/S*kP Y#UʇϨ+ AW6]˲**nR߶Pc~Lijf?2m~i  Q0DƟC6N?\ ` S-4g9gOBb +@"*CrDs?Аս3>?PkK+ϗ&2 @C !m‘ƐH=Y$?H?%&А_wR$GG0CMt'ZHf)nH}G9+nˣr=zmHDt4`03e8dW -wV7Bauڨyyc3=u@* FblA"+9ͺhrV]4q $CƱq%ٝ%r{͑,1_Jx+5bѣUD.wc0uXZۙ.pBj7 ĞY]L],ޤRyD%ݺ.^Œ|-S"ن4TgqBwg*N$|1EzbĝXK̓m5OoK(E3Μ76ž& (z|xRNF^"uàPB&y~|l ^2̅RqW`yN(Tb:#y0)M Hӈ*O_|WF$(k꓀mcjC#gO=XȯZcʤOJrRGJU p@nzV(*d_U-*3 :ߕx9Azul:|wɎ9cgBPmc>"vxќ>_४rbjָ\N.>}&sd~5HϦfEhdADyRC#aR(b~"ReΦ_v O'|)- }>Y/> (eDr;oOGD+qfٽ~4Nf fO3pj<1ábwS=X'xaȤ-A؞pS8`Ĉ"z}V^&C֧Kn-KulKϨ%ʌ-F+_MB9}/ET^td_m7޷~S Kư^zZfHElw2"o[7!`2(au?}o'be®Kss ^A:h g2hxsKwm+o];S-SNzxLUwl\Ffs ed'1Ւ#eSBAItٺ)vC7HS.DsoE).'e8?9HZZxAܠ _>1͚gT;"Σwo=k Og"?6a? "<GPE;Z ~`_=<+=#ۺw$TMzݔ} W.VWsR:!Z {F~jS+vS(#w&-O;R'V2_t>!%8p}d:bcpxID Mt;гs·wONGytP2uG?1E ..V"l2RӖh]_ry5[~g?A)>w¥HPQJ6ժ$K #!R[>W=l%1ڪ|mO:-{gI2sщ68h8 JB[[-KV듴%T\ /vgweR_| o_[1JGLMZIJ2DZ{iA LI[Ƀ&Y+Ӻ RD~߾&yy41Lk.(SECRo`;UH\zJOX'+F-G˜>M#ctL::;ݰ2EP܈bvAkw rCPM.MqF`yͻQn'J0-U&I&dɝY%Ֆ8pڂzob]\ wDv*aCn> 5;Yā:!mvWZZTDc;ۦׅ!zkf+VVaj9w^<[19cW$I,݇Ŀv^?“@Nyf6R8Ic_ Gb$AVnJ8>3^(,2/rEXm?B]BsU}9+ Ϋ5VM8tNֽ<(>9tH˜p$xg"H>Oi/Ք_7_.M^"w]9Y:5Sv P< }X#֫[< "=[;aAhu]rV?tUqL(MT;Mn%lO,s*$sApΊؕwKgcr$~̛kJb]+p)n&K I~ZU8C\eD&s86E{ &O dF ؍zb>؜wxrDOh W7"]jyI;N[e` JXVӛE ~=KM* #lN*Ȍ lA iej&oKv( \O1ҏR,֊B!buZq>Μx'AOٖ6_ `gM&qrSG#<.1 LXf-Yqe8`û5Xjqr9z ]y{{=[q` JDڽj'҅'ЏL Uu7S"*Q[|ɗW^kF b[cm" U1۠BѢC&} *ȣ@ &ߌ5'P0㰶Y}ؖ_݆mg"MH!݆wTkڽb?15߆%HD*DT8vEé0op:\{.K[ԀoL> {j2;+g"|+}ȥ96-Tҧ(_jk]31Pu}I uIENInjI,UO/[ḄJ!Й, oEPӏ`VyYZ'^T )xl& mp˄Cb[VE !)|gxܖsST>*JQ{8׽ҷZ? +V=E߿n-+-0.=B+K,}m+K2B~p!ePv, 鬶_mcZMQdëf)=mSLLCjZ|a&tξIDxp#%vǑۿMGTHR]BHF% RGD_rBv8n$YtHx!6ɔ}׵8(ÎT_K$bGL>m68?μx&.'4#T&>| CRe,FOA4Kw5KXz[d!u C޿OeCMO;DSW*Vymeg+u5x;;v,XR#hRVS4S?O G|9&4'WO{1^_g<ՌVguhfΟTY>;WˀCqϚN~lwE>'1~GI gSN^#v!T&v*MD ,h[Q Fi"͝±ceXvJvaƤ-޴PK0S2ҡa. |CKKJ(]w2s-M `Ra-"DU/ \5ތ 86C Y#=gb" 1f]/y|?MHC<*gD,@UܣvG!m'&;,,\W!"+:~GJVt==X1*h h#IxIyH\r@UB!vk1a( 2Eʦw mJ7mN]H1 Ob9 u53hǐf*9ߐ2W95=ꐃ/QWd'& ev1ALW( ^UUKPaEu~rGJ֌P2Δ-(''HEd%#:پg^izٽ(W?)spO$J*U6%W~SE7e<7>T 6Up{F Y*FCF뒞K!KT,s r,4:^@DQqu[:=h&Iŭm L|w88X`/`a(#\J,GB}G#ʠh`زTiYO0Gsjj~-!HNLG״ Y i 3y2bMIs5WBCMtT{\B5h=DBu%ranR/ 5Zxצ+L%}Um sv{p؈Th[Ls Wq)|uIjR &< ?w U UwaZp D!#*%=4{li_5Ĩ6?2\&,/jaw7%ޠl ]I4E+AIJgi;F5u7H@;g?4T_VO SYS_r6R޿ࢴXbTEA7~AU f)=!1]:a/j}@1[<4[ĜHM#x3*#g=5^z?ߥ/yxl1ԓCm x}=(|R4R*"7L=WrG^D j3%@,.Ֆ"jC=n1$ M-ϦU,'H`'T-w]BHv7n-|ܻEr 2y :`Da #Oι8j:p(Sm@H̠5æ%4~ mK+Ip aOoŭV҄v)׵5Y2Bk_.)kq.f]y</o;Տۚ_яR;}$e4TϯC0\_) qE3;[-"w\e<3=W(18R#zJ?}aō&$L h!݃ܓ\@ ІcIHR*f[ eqpsO2uə"KcV1РS6`n{3H#AP mṔyU%oiG# EQ22TYDCDL'Y?t$z,d6X.˾8iͽ?l/ ?(|o %P?P OVaKB"A 3vm%2j=q6\ @)?8 8T[PuZ\X4BZnݩtO0U M"-u*Gw8A[;=.<y$ QޓK^ &OpY\"#`Uƻ^ݜYmÂz(>~m5κnVKJU.TW%PmdVdҌW0*-K RTO z/]Y WtAEX'3vat}qyQJPYrnӉ7 (NلޡpXOM( A%S q*P-7(KA.fwz&Ұ8(aպ7f)5| tꀅvz17xt rU&◹8I_Ӆy` €!Δu#E3xY[UqݱhZ-nrb eUD'z3[_SkA.42LL0̤M\&# zÓz3Gn8"i7GԂBI([)·|]|XmUCS8 y9)'L=T4.&J.z[es$1ۍdwZ؛Ћ1>11iڐ<"Q9"'hl}0,_bF@ kV S^YGb1` ]9:R {y@㴢&hDg]o(-yt29A ^SstKf7)'9 A s+?Vn 6ef3vp4m&)&Q|kK_υ"{h @@aV#w~5A6Ku%F!6;YG?/H{Vc؇*[)А X"*/ #+-~6iW #,$&`\F1U7m;tեN =,kC?-~x߮+_N7dip_iEUymxeVr&6Gԗ/]`A[Rg1rݽttշ(Pz雉76&gi=pb긋2X梽n׌AW|PoU'kF_ ܣ4<}P]z*K1Zۗo@26ktr$6:͓εG*439ߩgW{9Ť3lmxKGS+@s|z@ mU',JQE~h0"f@t(I`DRެqwJӄIMkQnUqh*'(Gw#[ ։}euxv!XҎcVYgb[hi2N9Oҥfǝ![v[W7Vl~M@*FjcVlG7躒mӕ7UijG5 &hMҮR.OEzdU"[Bjg~V S)_\iKZoh(,{S^Ύ49# G4"RQv6"0 G:?HoQ'l!gC*ԥxrj_wL>Z@i*s.y_Fl2i;9&\rf.u /4i]AF-bDo"]4v']DLl3tItdY[/u|s$3'kb0ũr ,a(Z-j^6֭#x).&tҟ \Qc+S:VڰGn#s|4!Clnl>U>+3bvy*k,7Jeqb!-g"Foj1 ;ɾC2IVg$ l8fA;ݣn ޮ#}ČL.4oa=>S&Xm1%>FH^}q@$=ӁTC_SS[s&1?³ ,$'rzTXJ`+,S AC+ #9X~_֧l+]Y.P:''l,Z,OEZ1{4zoux_Z灔|:OAl>v30Efp%meȎ`X+'Pqy@$<ޫeP!J|YseV.ϓ8_-Pƈf Wp-&VRS:e!E,M@+)q@븥RB~n:T7q$i#7΁ĕ4 u^opԛhHN3B] )ia-f˼|>̨j4)8(q{of=1}BYɓvXN2KE,E1,A!I။ N?%3pQa/|Щn"Vx>2Έ1epe&8=IrSYvMƕF$KJ_y]Wnb.i 3yL%,Z3h*)3Ɍo1+Ы@!GV{Bf&M89h|?tşt`S"q+^&h.%yT|SPUdr~hźŠ[R6B{C#&{>8 eŤ3 ˹}Ycݔi‹?o_& E[O9iAEL`}e֓aH.iK޲'m4<2IJS`)+e`5)QO뭔BF{_  G'Mqq=`5=8V A&$v]&V[OoCD'⏖4& ^nH=!(qNwt`tB[ ~Zaum//RR>u*6XKK:7w|D*A_f{lc_t0cXkjEi($U)iqחһyN0\1*nɣF͛&Ecj/|8 JWSL_ș= Au yvR Na<q \Pr% |PUܢ]`Vjk=hBe^CUE|:n{?J]^gbMM3F<m 9zgiṰi=N^ V>Drw4N +N&43 u0[b?˘@ɣiC8WP@-s mTBfsy/׿5yZ.薰e1ht-a_u9Jޚ-hL+5YhwM"ʁj20ƐkK<aĖZ١1͍yD*_[.^ b2P-Ӫ DɧE?nDN7hFADo7_Ke,쵓*"﫩졉xF3fNh]<]7/\>XYOXݞ$dˮU:+NWW/^&GCQT܅ nyV_kuVMЊG+U={ZdЅ_j_m 6 X,.~3tIPmOB хޯ#Ѡ8h5` `>̋`"b]kTք654|_^o: Ǜt#(hbxy*m=AwrWi syDp_[cFG֒7и3YC])|8h;ϱq̦aVL} NmcB^S9ͪYV?^Le*^#@Q)?6]X[%UrZy!SYeZFGL#5lx"LdGŠ:yLPfsUB{:s0!l˚GT`%U~T1"43K`[ݮ?F܀\mA ĶNX(P肃@}`y-*yѾ?xA),UMm3#sOrm $J*>a6V{e i5o΄L6rpw D}|OtsIu=Oe3Kwy|XxyMyVÃF{ԧע], k}ͱaj(Y]צJǝ+TL);l^;K+Hx M_"F&avOzCw|)B6:Xe*+?"ec`f8jaĽFG7ڭ@C4ȹ=E4)U&O;rU{W-Nю boɯ58 shP&c<+_D \PAMK ʁ{נmò 'ow|I$"*W T0!$&}Z ٞ5!l4HAKQN0twJy~u' rGP[id!.S9UC;HBzU-mbf'Heâ8ȄW&vW"Ya%~VR }Q Q䍍7ؖloކMn8?dsA}Yk?ShV@sNwS?^2a<Jyz,U{RL6B)afnra%i3nm],`ǭ|ݬs ?9+֥:G3Zfr>C gu st8WNw7ZTM@*|,g@S)fm!/vR;! _ |Ok?f1zu/鴱}M(~r͔sx ;԰d܋ۗ\qužD˅SWGfG{]8Ƙ[ gg#ź^Nإ@ ՆcV%:Fi匿94sAK%u˭*.l凓`JMt A^* *0UIhi_Xr+>;sR #^re:\;:.vyw~#x1~0?k#:_;aD"vm/|gSYSGH̦랦сҔ Uģbֲo"w-/QL::4L)^8 g5(MwB*bUAq7/]y&+sc Zh2eZVr +H/rEB?׷]a3%;5Le'MAVDۍo[a|v(?@}ҤxHޭ#(+M `EiLPDZc60@*Dg ]VԗQ7˗W {+u1\h׵p$ˡ(U]E͎閳>vаX<l^r=y4I$WKJ2endu>pq7O>W &+zԔ9€[֝bW3~T_ά09HqGXFlɅ8buP1_ikr?(7'߯ô|R9FڅDZ.&:b6ejz8YM2MeOщ#zʂ SvL?@A.pl`)h2u7XZ)f]q\hXͯChoL7Ldq wXlm#K)_67ϐCE:pY~@Չm/*ƒzv{.TC=!j=TbMp%PT|B9hSHkM}CX%~xrO蜀PNJݭx>T./v}ೝv!Ͳt"O)4) 겡`kvXb  qp$юoHIFR #ʤC3Se| z]9Pd+搂k}/CSg?lBtNXO7Ҹ- B@TKᖦ∾s2\X9ĩ* [WwM!{ZQ~x+HR{̚z&!8PR~`oQ?}fiZnyT[$X^>~fƉ#cBuLsVJcLSS TӷecLpتߎ_"[|GI.v8))1/N"n?k܎0l#/޽5@x ~r]dLZWCb%`KuQ8&]}[A'ιUUƆ ہn+2}G;.'qOּRxbfSIS.뀎jPDZ3Ӝ4-BcFWc&v0MINE Gr+]r&/K@kiVyWFM¼d9JQtH@6??q[x1t_X7>1O/QՒZaJ)FYl,[+/S2K1k湧iRi؀H:2.UNDanYʼn/ak8PRU,Kٲ1.=ʚU 3c\WLN _"pۑ7>&ѪV'z:45*rx{b&9.7yomkWk8`A3+K{A`ka,\CȻ6Lvx  EY*j%L,FLgitJtqRE Z1"<B;A0ugxR bכ oʱN!K]('xK_]F0nP(&GόqLP#U. &z| 5hC-5,JD%Y'Ҽyf6xl|yHl& Eyfq"rpؙt|NUDg:)Ljvf"g)ŝ>}x溄rb?@*UE=$ ߨI`?*˗ڢ5iE"|zP SDɎ\4fS?{+x {ee F?JT]^.}dߢ 'WkQr,ꂴ BhօSUPC0iwLn a$/M4+M`7]Op+ N)I@$Jjo,gr?C,I{?n֟+ F;z!dԠqq|P$-&Uܦn)*EotK>:jCΚN9jv(۱}B XR(BP3'- D\Z+-nNnvYJF;m1E C>mӯ+W/[3NWNherct4?P~Cebfǫ^oˉK^Ly6hf^ b#mog;c ;;z Q?N fáub?637l,7>e0?0>:9x_iek}TTW74' `W:-"܎7tؘD|?yu(ePA/ aYP}}NGExGJN0dFP !<ъ0 ɞmN"գ\> vy :9{)[\h]pߙWGx7rW؊@YQIRE{lֈ!B8y aBv0mwvù-h:ր`5.֭ -,'72jrF :*/y߲#C>R?q ek$jZ|ydZҺN.[dNY@LkcX+^~Ҥ]eL7z"5ɩh۹,0+v25`KDtlwØżH#sk@Tqa]$Z:a~0 d3ú%e iׅg#!ڶ)}hc"h4; \bJЁ>J2v_ v4zkU0Uak 1_݃["'25]:7l|6CGdZA+eNA2i%!gA83EVUL=G'Ym\,^30rHAX5*"9\oXe}a| =݋Wɀ-!'.T77NnoʦCe0MHz,hiC 㐩Ldimznz_V#+ɳӽCDx2@̽nTaB.FsT5FMoɭߴT@I'4^s^_!$%i&j7-sb9m)kl9Iw(>)Y{ ٜS\e[W <*Űi8=dm{ rwe^ږߺ!M0I Kǟ)%0CW8ǽyaN.*F` ]G;2kcIr%CD}gI=e; 14IÛLc`rm]lrB3[/u2<,{< θJ_͘dHPѩ2jS}*@4iͫR4f(OQ {iX~rPV~yCa#l&)C\| qcW1;!@Mdj2m 9(o<Q+ėUn (ι::y׃A,wؐ%h5)S3}sF|9"Rplةg:?z$Ąv}ꭵ!1+<;Q.~JhxL>3*:](Y( ]q_]I}7 :*T`AfN4f픸`^qhKX{;X^9hȆF'9x&¿N@ۺ&j3<гQLM&U9졄 Vp*$DiANq*vE]ŴhB~ [̚Y4`fl؉ha:A.s~/8 VMH WdwFPl"z.`bE)icSAp-#R xgoxitwUC@'N^箯NFCHGC7$p:QU"N!OLJJ, #xB &o\$hϛ HԨb/@vi+3;1~_̓pb㧚D^S)x(ҩD-z|7#n ?IJbk}9SF/Y Lxtn1wVyl %,p "Oӻ< 9zI)C3z)ho. 7p>smYpXE~շ(qmY 07CJw\Գ߀{0usc5.(_?YacG$E`RMf|瘣N G`M@}g!d4-XN=m,ma4gȶ6yo>ZKa(]plgj6LF"5۟0 PO' *nťf6טhFF' ]6|',&{BFQ!c`R[[`8':o9<6s:X &!;;HHkϼ~D3bFoH4Q8`gcZWmNtS̒suG@&öX8 }}̈? Ioo6sLT?ϱlGVxlÿhcueft[[1CO=R::-cVu 2Us 4H݄}#%GlWh|tjSVrlPH'#&ȁ.lx~sU* \"/Z9~+V2(p[j@|"Ⴣ lsTrS|`K_Ifm2_mY%.٧Xb e=̌]OKjBe=uslX3MFtGCQ9o#ju>.uӇ bî{L䓑ІKuˬ;"0xL$LG 1yY6}uH} 9.yB(q)1G$>ƃ6аO<] $O$foN߬@eio>K~=8EnG/ @kff Wa6ҵhnf"Iwm/3f -LRNTD t.>˄~ލV a'(kt!]PyF#C*XdfpSѸEDi[Oѫ̷VTtpW8!t^YhV_sI8b -@"t{%JyK_(Wc9:_U˱~Z`ED x \ԂߝD?[;J*tjHe>G&TkQ7L]X`irM0}14@I ԗ MD645 Y@myxImd]ij\ U~z(_ RRBD(VIE8*(]=ZoaǏ J)SdV"&5=<}ȋ{~@`Gm GŎ`W}tQ |'fUd/ _P*$=2ImSwN[_1{e0=ꇲ3O~_BR};Lm}nϖ>+:wQgU 4`-jz`dFm3XM,#ip$4{ݞВIUtv! #J>8>+!I}F;7jxuˏ;*I`WwX**6P!&48-pS;>G? c%_5Vf$Ng VIbthPӡd3Fcz+R%<~A18J:Y*2AN{ OQ풋;QoװEHeZr؍&xˉ;GGeJeU7m_Z|s*@$oPA%[F=<>xb0A`h%6M.XgMB0Wn8}E 1G43i}zH[Z`Ҿ-^2@yEzmj$)nf^ B),)q qLHg9q<>YBR[hZqxܤK!iLJ%A}fzrw#pC6 ."ܠ!Alg '-C *YIFR"ܱRu_VIzL3 9 xLQ pӓ-r/,H~>QģwڼGFI&vnNd'^{TZ5Ol&nвWKqNIULvIu`HJcFD+QIiH_v#nSC~٨JK2y o0 j"zR;; l"Kbk1*r]w"LP"m{] @ Ĺ0p;`%u@FNc > }u#Lһ a1)GJHřULc 8 |z+rm^wYZFӢ?$@n4HX|* N`Ş fF%]Fv%@Qx1еezh ?!sjqu@iBќ鏸 {ҺOr-NOjUvR!#._c^[«)}^D͹* 1lCJG%&?.JKoa;ʦ axd;G-B@5N+'g JVs B;~rQrwEN U?o@!c"߆ޠoXB,hp'Cb{Wa+K?I)JF&a ?*gn`dӈH|oc@)ˀl&4h$̨_N۝bP%7M2WAh{ki̭JMpdA)3AXĔ"Pc¸$j>Rh۞IҝK'<![.EX[VcZXmdmD4)lċ󩯢xD$+LF9!8J,#7Dhh>A:&YCW "3iArR !n"8D\G^iN*%f4Ռ7hӟ.M>d-~tОUNw\1("FV)=l@K8N.H  -Tmglt/$ n5[$<'$<`;J3X-L5NIB:[{5^<;qߑVЉ;h#, op(`͛D ^;O EHF%xH m*+5 O/㄰b1:@,gޤ|u(%4 ;N''#s5st8۞M]҇36ىA77OfZCy.%`5;1&F`~PI=7¥nBڮ@Zv9==%$s&rZc8!#EiRFvKSEn1C>vFzq.7ʍw)3xRgiQ\\tr >Q# lBml{f}~= i6m $emHI R3u|y|yQh; ͡I?M|ldg~ꚿH)&AZS<1n"|Qw@s7#%XNJ L:x ٪ }<8yF:&ME/

f+@i߸hPɣ 0A&dPit>|p6 VfzѺL吗C|kJÉXl@-ؚII)P#U X]|Pv:{*.--̌2l2i.rhv+/F ۣS1zWɆfKv xi  n cpy)~TavAڄ+$-mW7)+ĵH k<;g2 )];H>x1c}T-L*`YA6~$ WiUZx!H^+mp $71+_sBnLT4~ ]S4$͛v٥1}^$NZȂ*b0}\n-i}<pKD̔Mʆ\}(A>=/fE%jFDW᠝MvD:cr0m-ƜX皾79'rbѶ>^-3R8SG_+y**ʼn.jN+*~!'>y2.P$N;{2\ip<)ta:/Le Vu:~w""1`PK%%λ/@KxidБ0'抰"qkt̙HV~?SL"0d to7!Hb}%.Q~0ڹ3%G_ ht%*kgɽ7oJ~6r(F4cB?4˴ߠLE*9ZEӡ:'-ǧkN@QYUG L3COicQ+ rjXt@BɇW:C:Zj75tGT5Rd*\?kppY zV 9ԮpyH8 y ^[L~#Kc+SY1NԙknXZO&C;_XCUN f͏:;^% 9qFh7uqȐڱ#ƅGe7h >Zd^CRm$0%pN+Zw6([C^Nݰk!?Q%S }mH7xfגzT7cX>I .1I;IHwf!;1O t'G'jB,r Q`w{>;_hbmkbழx9jd5|kB9N5C4siRUu*K{;|FUDO&N& غޒ>;0RD.Xo$wݞ^.u`el;k0-gfA ،01| 4;"2>ߍ3=㶲ځ.&d]i\Js5\Q[Rȱڟ[sgr:2Wd']a9J}6 @ˣ0mƊIrHzܤh@{9Sz> T%?@Ӕ3& +a !kx1= /N%(]ۻWib'oW ~Kתdž3vcU& (E|$R`M([r&G* Hػl 7CHBbעY Z-v2QvwrQALKSݯ+ہuW' (CRAOw.纈 ;.q4+F^ Z԰3]Q+$e܀"fpbhV]VNr<Ii, bH?KyPp7+}.R@ȥpгXH'G RY8?c=!ӄ}v`a3AR1Z, 7<mqD84.$߼95sHKFIh1ŸoaN"*Ǻg#EjG bL,, j:NEv )Ȳ|i+O25oM"N:ԓ@xjD;Iߛ[C+`||1J9)|0]j1`T0b":gLym+.h-la(^䷬;}џvpvi#~bZ`2 4PLIVXߖ}{V?.zDB^3 om= ↯P ^m]Lkb"7$=P<;GT(ԼM ӅQR18^#w1|U!Qݴ0'br+͔rLtИҽ:c/OflD Ah7S°fd@t Uj *IPO꬝I{cSoB P)!`il|݄ڀ﷬nB;`teY,-Gz~Л҅E4I`_b3zW%7"Uj{-E[vhSDd̵]yK%I/6z3DۿC%`y6zX[{<(f\jPUO "Ӡf{g8vː#n8A:9Xݚ.M___a $rɞ}" q[mVT ost2=<U@:nB\#¢]c ckV.B4F&CЇ∉!x𸠐H1<Ƨ70_.XEpztX~)kgYg4עӝ'gH @6jȭ28<ݨ *DǗt ]\6\fc0?pB!"Lx? o@SRB/:JDk.f}o?zkϞ(d)sKEs/GJ}+}nkp U>.-rԠ\2s}dc Jy"l̚^#X$GƑwrz~Z<)^j.!nT&G~r_s֔нzyA< |@=u]<p=';yz3 O*Hk+cN;VEdN )@؛on }i.˝W Sl Tva,O[2pR%9?e) }SR,QM԰׮>4d]:33y ^&WqS;!"C`"y=xqXI{5$n+;) yx7Ժ3l)r Qbuᄙ2dkn DM_>k8ۢWjffsPb BLm|<0"Ý 4uWˑ0de9*wciUX< io_PʸG2fl}AEk*؄]zA}"?]r~ ^`s=D'p}r,-yir:uj؞/x e _9^:S ~Zќ"TS$g͆3[KDg~j79tLWJ+]W>4.ws{DMM$mȜC(NcrxHWش5YҘAyFk]O#J`\5F]G4{:Uu| \-zNV{ό~ h'lGp(7GOcg1k)B"I{(wi>%||=H=kXObltRgLpxH,36U#H5ɥ6=ƅϱU9]0֫,XfP,4&NdMX', C25u0ئ.=BïOpSG0ŻQ TϹ C8oqQ b_ cwЇ lrE\aC^vK>S(3R;W_;N:eH4gpf܈_d.u@nY%l6 `#dv\>UpvZ^aj$͐MӓmGeG̿652j'F_#0M 7dj 9Gl8kG;+[~ otޤ¬x%2x;r1F@Su6P&_rZ_|c+wI r5 'xqwƧYũg$CA(7 lq!專Lj~7.Q#uWYȩzJ5ZO;Sl8]hGV'B9DYZo2Y~q9j=\ǰ3,VP,ᤚj~:d)3kG_UfjۗYQ',]^&}bs.WѬ01w|SD *EO@jn?p*/u[t rmEtHaDz5/myċ33卆xE3ZΠɨn6˛Cjv}(}".-0N Fb@A~"d"Թ饋Y2٪Ε99߇fZϐ9{i A8ˬ#b ,W  cu*ceBBP17KjY5BDƈ Bcfƃ5e4C#[iEts[PkgEB&&ihj2:E#0VCA|/l.3NPlFlEoR(UyϵA^7b\cؙ-Wlq=k0gAab>e6k^(:{PADg'w90B$H%$3>WXΪTp1.;fC| ^T X]Ͷm+;iEnKDbC`rA: {lh(̚nAH%=^-_ A2o}";0 ۺ)a^ٲ,%]YK,;r 4\}99z<=yTˆ[XD=%Jtzy)D F'?$Q 4޷~^v#c+y>/UQS\ ,zzn 8bc!&@jRKr' XCR͍,hsijuO<7[Bîm"*4\TXVHK4?oknx!8KSm(+ 2ņ1➽<G hܴNk{IQAx-uҽIVFh{!UJvKj|# lWk_d,Yف] Q-!@>efos@HWL϶r3ՈwUD3)܂w˞HC;H-/?{Ļ /IH.p!^[vzKT^FI}WoڮQOjc\Mm{Ҁ&0#iɴ؜ÈaݤgtA{tCqQۡ"/{3̯IjiJ= W \q%  9lZUkHͰK,35>r,̈́3nGբkڒl\MB csC!Y$y TܛQN$\EpE]`9?83QCASzf<7z)8KHX hqjedr=L.7{t3~:zZmU֒-ӯm{}kxw>TIxHhΤvqSjt9Kp{N.+\5~l#6vH}\@OI*":N~I/])漋9?BEE}86~q;>b;qtZ]EeOkGY<3j7m4\'1Բ3?0a!#F&1yu\Tg#iB cy@ SI0ah[RxόAr#d:oϤdy jIozO'qk-PfCI@Ҫ)VnAzyP6f|ԴwS,W59O'L76W 0B#$?B&gL՛@LR5[u;} d(yy~tV|vtڦ|C]!RO: }j$/-;eJIP<ӞyD-'x>{6KmAV. =iOoIa uQg^AiݍF`ToQ_z)PXP6MCMVu?pKޅ[xF.Q!ͦB@›3z1Y!>Rl-_[b݊OkCh!SI}ldƛ-.!Db`x}E?05Ia uń}q泱%WeWX]@ xşz?ҌOjlIZ̹̔i1Ȃy~W+`. eXqa,wVB{*l VFZE]-xχ{қe4 < ĊVc#!;~h\14H*- 'ZZ9L0X#02;Q'daYp5SKdFZ,=w?@sA!ށZӅY!@ '^I@b;kZlUK|ٚ'4Ҩ](SŌ"㡟ܨ E!YB|j)jl}+zj?#x;Nw>BmVшYmo|T^!rM^4>s&g >2Y %icΔ:~$\DHHXXޢO[ t^B*"+pRJh,Y Nޟ\qJmhJP6Ff218G˜JC&=ؿ-S~bŵB򗓈+UC8$]/QHý yIeDvK*یb,GM^RN+㾲($rG '1=BL1M'Y< mIgѩ\ba ϰJ;Mb>fPٗ S $dRKJ>-Vv; =L3;ۖ @r_=GCj]|n?cAҁ_RP= /.˵^Usں;b<v:Yox:}R 2u:IApav@ϋbGYt`kSvd54?q}  V>QkU,6^($M䭪-U>ݴB d3=VlV& hA0BfW;\Jvqo(= ,Nv-6ʥNi/5?UE#:!ww\7SvhXf,7zLTaʕX蔮+OJeEUzq$zX\p$}n;ԖÖ S~c/x9SsOP8Ѹ)kD%\CNneKl4OL8ʗ*Uq*Ql^5 ?"3+?ƿ8&YV[1R^b  V{DenӠ6HcfJ- `wd-,!85 n@/upU ɫgعI͂.6F?rF1p)O@B +~¼EXc3,T6t 99mV[;ɀ)*M5|ˀףۘ!<%k%lKGjU1X2)Ym^DJ{}*@Ӻ>Y*)_& 1nGBJ:O{0cS VQ|'3~)<5lcA+ʐ#GR?7Wb &:]McbNqR5r:vVrL`I~Ԋ>K\Qvt]Bz-Ͽ>VQ7P6$QlR{q9A4l}@C w|f͒(9BXװ|U &XsB2S= '-ܺ\))p31$ldyx,*4cBk /-3zeflk,]}+LxaA7A!\taS"n\kņ I6)!霘=ih=Se KӴ|yP!N^|OSeVlL 4mÑK2Xv!:ρ' 'N\d9rq0]IO0nx)ӯ_8I13kZ _@Ұ!~Ĝ_,[mήoceO_gP]-=7puH~UE{4'o-cRZzC| ֊m*QimY0!ᬄ;'_Ce%C҂̌gR%ZL=C Y \r6XxsRv|:N 9MBLvns3Jy?IH)PGȫfTJ<뇿h1ԹET‰ݛ'^]׆hU]Z7PާxT| c!MDǾ?1nVA/e%(j9;rOI#F+_.I0.TȏPA+gӧX#*n: YO[qtpr&}C-=DBt z\덟& H7I?[lN}HvPiWzҨt*1?Ɛ8Qt$/`7'I_ J@k¨ = 6h%֤a °Ganx^>4݁˻aIn_hR%|FL̒Y煣xXULdoA^@˙ a"nJN/띊.9u^lrlu}Qhc_zNdV -eQt~^őuΩA^qZGOD{qj:MqS5m|QPP0cGĤ(-2mr1aY4ņ K :t$fEҾA1<+2/җ " 8*M 8&,bRj*"C5q:, ף~q#%W$dI$kQPnC)$lXNd]T{#qE`E3[}-C#{/mA5FY$ =wZ :V+W)FoCwHC+~2CZ~P]XtYF5NjA:Syܕ3!5a@_^56 Q{^)kRw@n{PBÚ<+؝ylL31=1K!exvueG报s|u\bvXܟa߂ m~}@:Tbv1V U{O/֪.Cz;k,v&K|J1yY}~eIoc  _6s]-pX,D^In7PZm٨UcB}w*s'YTej ɲF$NTra\HlxK74 Oalm0346dGV .Ot퍨 K{^=!_o%vVnT"7A]? *L?bf:Io'h , ]<2*]<9߹0^eFb\a&{wEǷwFd&| S >SU {Lj % F4JtT:J}{*/D?Ï+TAyetcX!C. [|un7 ҟfc n;-Ɉ)HqgolJvQuS㘩 R?4{oK!XѬn~MxCi:(»ARok%/xeҍC1HKȸ|.*JlFt˿_}m7ƴpձum]y"-b4Kz,EevexN i9vںB!/ qxȥʞtWےf )>,w%z6Ukka(Je$N}`D+#g}84y#㲘oP.rУ9ƸX#C.yL6jؖ}8gmZXY^t/,Gl)5C% =r'܉hƜ R98Ϟln,Ye::h•I()3J=IxR޹IYy%Xkc]#Wۄ(N%}+{pɨ`R*_s]΃FW0hnJ`Dž :w> ǷL{V+B!L1GY|@ lf;1p"TA1ޝ;g{HuȪ+:fTR2Yk貐vkxjM*qVo8uW6\b=KߣA>3"@ӿYCnq{ٷ+-i,{Uk -I("h62ft9[\gt=[b!ź˫|L ~^vN5ꝏHfkxvMV#̒>!NAPjHW693ҐkAJ8RV5j7Syu+ۜ!6%FkStx'?B/dWkr}[C_˂?@ ;tWd<נuJ %\/_Ɗ@Cc(/]@Z1dgÒ^`K'H;5>aЮ{nT7l-v9!okte޵?% A;Bk'94WUɚ7Ѕ ީTꕳ=PnHڬb>*b: w2(  &o<;1vzƫ tҩ7O}v4h9DaJoal'fŲW<%Vrgm|nxbu5\I*OT)0Wj"P$`*T3 s=?-ޱ/w^.Dp%BN;90J~mW.T#䎅;3\t54;E{: \eˋq)V -d h'zlOd%c.q@MQCO و.u mji=P7b0DQA%/@5òOffbz/E|Y`O}cg\n뉟d͔^8PA'9>C .IXDȝ#s@F'f%ݬǮb#y,rJlR-<Ƨ7 qw1$ ]cwȟ&jB7s=3VK|iuq}{M/XZLBwqpy9 KBt_KSǼu`8)wZY`jN}\{gNL_\t\+8Ri7愗i<JK}2iTLMܡJ OYƎ!N1BidP;/}[sCB&6RT$^N`㴖Go%ю#Ekm0ZW A&3OL"!娃:#1Jf/k{*}]X$\|H_Pg3BR ܍n!B$+Odž,չL*?*l|6B@ݏI%HnIC4E^IO&rM3s%΀lM{Bnz}Ar7EelQ&X7A hiMݞs3*۩X5o 0IE p| 98o02EΠmDKpE;()2bEZW0*#%R9ϡ*H0s)ʕ BRD_4K" 2izҎ뛪\F&/ʯL4u%K$Վp&n8`\xA^c#V#c/w3L^&Ab ##cYTћh6AC~`|70_bT$á\#KxٛDqBIzK{87PZEs؀Zp͛MAž˾뉇Wh#LIk9Φ@ 5N=ilVr(i *`PRyraGؿ  l]Jov {6*QuVXR6X8 Ͽ#[83p^ѱi_h.}]^E|2fH2!O̮fWhΟu@m%z mj"(T' 7MTCGɰ>&tMK *Fkz|ZEb>Ar*٢ EWkaCnXl\`$)/98-~G3&%TpWAhF,CWBd8R(#h{"J7w0 rHA!JZDkW%B w>#Y !- /$"r?EXZ*\d_En$Dj*,rcS최g> a _4<bq!kȝ<.0_ vzg\83q<26 &[rWO?;YAAt"_sZB , Œl7qUx?e+{L+X etqؕSL+ 1ۢ hڋ., ,%s:Lwڎ 4q7o݅s8Sg~N 1NYP[ >zJ%v6%ֳ0dY?Q {/)M"s#qx,CFGW>i*seBz =e2bB90/Mr]\mRR]/0K8H{eG:i@Fc0Ζn U&/הy "ȔLjh8KJý.8='ddd@`sI/wdmE%XN x%xRDeo.M wqb.^gm+0VT.J I=LP(EQ'~8Z0QքV:\u/8@`6"1GF3Aձs'$@2. hru"̃܎an*}|T |"e3R,gA%0x`C:lʏ~h)(TUF#6Ұi ,0 Eo=([oru$Z7蒝](ʛϾeJu.Rװչ.,aғɖ&JT _=C^0t@댵"(7/iLz~c%JtL6M\Gmj / RdG{ІL(egl"BK$v7;^ZCd%vյ3LaGH`gf Fnu3locϵuR*g^n:|A%g9YZʒgxe*aȨno}Y9Lʠ n\R%d>_d: "< 6gg1L)<׳WGK9H8+ʼ0KVbŸ넂-*A)p" CpjHԴ̇Y8T)}J95Ҧ-WXn'^ruU${{/} 8/p)9dįOOIʽVVڡ9k\]ƒ,=px 4ʟ}lvW l\odUeri ,(#" 0 zѝo𘔴{SAx6C&W*`+WӿL\,1VV7)V~X[ײ}k9!N#bZl[ck ƾc÷z,H3R(&@GR=Gt %A#+’&; NP'Wyz-%0_[Gf3aw77 V4; $]J/-[gzO?iam%:ns_i|;?k0)Z8nW>‡sFl/]юY]C`y}sVSA{ZydI UUdY|GMFj -/Df~Ħ(VFYS~Z˜uް'`.ݟcC*|ָHMb]""@qKi E?j{g%< ` ڛ;LR.^,P>k=Ī^ )lx(5&ṁZbmq| GP oX\H gKs&k ^<]lHjLrs^ ۹4e~?e5D]CFu\/W ??9bL@cO5Ĭs<.@ZqPc֚ߧ=oڬJybDM+7K5V1' ,E-*{$JG V(X̹hLK"m~cz,*bOv,m l[g\fBѱ լ. 9b?w2n+M ED y-d Տmؤj^o#3y 1QZr/;Yޜ3DZIbPtŪIƟdPL *c6Ftx>ggYn. L.S^eOw?š!5y)7B gU]R5?&/߁9,ɔ `6jlA)Sʀz#gwtŹYazQ[ae;Q)psNFxWއweF0< ԰aYrMSӱw zX0qx8Uͅ4a8\:@鋌GWLYf`J- ƫz/;ǻzϫ3'\ Op +,ZcW:wV'ME2֎}fŀ9UfY霉,. )P) R@{d}" ㏷ #hE9_+PV`4eF+pԸ0~=my̛W$0hˑ%w?;/.NS/0\q|DC`TP h[u=b`54x_Ȫe\գרOk~IJD͹F}(v_EF㪝X _S5p.rAnRĥ@~wgL6@e.t3Opb$Q,,KjW)eIC|my;#!' fjp*c,R Y3"K^{پҐ`x1ߍL z^GY XbZZATl7 nVR' uwnB@O*772¯>5,F: 5dI09'L,-E-q al!bۓuA|cF}"=B!g>oh\m {ְ+oOƬe|, ;쒀YFm;7U%t>3rOQfqvUwD?⼞įĭ y0Azbxս詥aPe /lBbNqﱧg>r>+}ǒ7 \BGnkU¿eס[`}hsQ67 #9V`X{A$*{ęf<@T }ڃ1!$߃(O],h. ?$/`@qqD;}k/9WH#ٱ^Oޕ>*7<ME]ҳҮ #Ր?g 0kPf:4t^>ұʣkJ`Ko[&LVwm ,)Bz//p\3ze6zleScc:>x#X2 Ch)2MHVKNEp!lH";e; Yӈ"N8ï1=עU߸egƅа,M5$vGw&XpfۏǴO `a,{o`[5J%˓j⌜VZk#d<&#4:Ew` =A7DͮLNM.`V{55K/ʦJw Ήtfk,R;!ӽ1WzZᢅfH1u(X/Vp}#s} r&G$`ZZz3!(dh9|4fp{ݚ x%A`Ydgbce@޻_ol߼*EF7GPK JP~0&=S y F~}yVGF~_%u*,zAE ׭%_UkF$eE7a~'qҲL:\,~_*sH_Jtuc?1@G.Bz(YEc=6p]p oΔS yBלt*Bv)GlkWF"]G'=BHk%>6frxh_mLr<<!s<\4-- TH8 B;*&i1My@ZZ=ײY{2 >N\̚>̹B8#X c>FrOǸ-3ʉ ̧a,J zz 羬.NxfOzxIžzTzemhA"W26.@KvD[U"h,ʎ{ְj͢^MaY43sX`.86-ٞA*F"ųvq3Fɂvaəݍz^ iDVfZBJrJ[/4cXtxxW@V>LH |u$:t$YMu9^ڻ]D ´a}]TG*o!cD4G:fA7,B.. T|srBa?{iX*3Jjn"&,^#b5*%;j$9>:ᑲj7!JDXT|0zxN!șPZnIAfj̃딷YvFep2 h[Ϸ 4Z@vڇ?$4b}93'i+ oWHߑAԈc7'ч?ST5CO')!ޣ9by᫦tM ͪD!\@uKt;h1{E 3Bμ8nn*>+%;dQ^B!V6BS  ˄P`K=ή c!B:Y> ` >bi\"I3!:1Wai T*0u^bQA E gkñ{ 4Kz** K|k`et @9< `, F8ګ_ЏC#j&p6Brki [fi;+է%&؁m<=q;+] :ig0кNCzXL#5GјG/a7kceQQM6$qi-,7?ڰWBAUq?u.aCgVZ?*`{JTҿ8r;2Dd8x8#%>U5?ӔTr+f?~jgT6ʒڀgA.9vcJiP'rM,Zב +k 9#YAUi_BE,g{ޱ+B>^إQrZj?>ޒr_Akօ: # \6QoCL oP4&IةRU40=GִQa- \.]uIvm>IlvAx,\oߣgW.0R*{Xdq% 0Ar[սMZO/~g&((4ԋYS@A:kBO{\hT18:˷1{!_@& p 7i x`;q=I0,m2B+wIm H3QfKP *z"{'^ R$3mk}bsN64{w2&ܙ8ڑJп 0Ak MwԦk^ z7D6*]hԍq i˞8~bלswKkDCUJ/&|sD?*qH HXpB9FΦ3__P^(p< Uvza:xY0.4v!:/bakHMƜt]kW9\(?' 7Ms\TMJ;XT> a>}G.:Iȿ5;SS5:W'LgWyE.%_΃Z*̂7S1[x4{EbFjW{aIȯ]r BE>y5mՉ$%Xw,cEb>ē!B/lYw;n& = pll02ֱMDc0REK@J1 Z<2T.):i*;kHG l!WBC΁kҍ(Pȸ@`mwZ1jΣ-?޺ wJs H; _5*aKpm'骺wnw JRE)ZZ+3iCڝW`!j1XݍStuh7[,c 2ecgH485&x_Лu>KN|wɡNCPQl@Go6 qtJ_83J3G}|\ u2E0"X`夕^z'Z#kEf+%d&Lj1(Еņn`. ^SYȬMf X?ʋE(3^U P,sQC661ʹgY78l}ŖƷcV)C}𰓘n╀u_kd;kSsw"Sn'@Ҕ0ƞ~0g {[7H2O5%&*"t[EIba \o UՖLK9`V*QϐEr@3>Cчjz!SP]S3u{v?uee@ hĽi),=+yl6TPx=*Q!@)e3vD(tAxɟNƲQ,4>mlk\:H> h-H:0˝D[4~DOJ2ox*F$"YGAb[ZJy.qUBO?Üb SB㴣iG:SSME$a)b?N;JK#]ՇS'CbJZ[9BI$Ƣ, ? `/Rsl`8ɩ'Ӳպa+(UuT7xa)byYz 0IQE&/އC~l+vd䃵L-HxN͵V W\mCO 8}XIbd_rBhƢCS+1mTNztB&489ΰv >Xv"$ c$AJLQF}ܧ5Hⵇ~ Q i#_砉^QW).OG.n5- @V|JqrL!&Kxkg~ )xA*Z)^MkwWi2%eݳ~qWK4[wC⊮O1b cuBJo{,%c+|<(}@UY(j9}-`{@R8+C$ y Oi"Qa fdܨ@kF M/_5+hrdA0X*Z織M3O̝/~o4Y/{P))<2fBO]}̑X/AǏtٛkBh x0fR'Eʤ{fVТ__Y_PlveyQڻ=Rd_iSD. Ā_ګ>W4 S%  ͌Lӕ]d^(RO1Zt{ @ yX,؊sP%dMsz-!(*%5O3}'*߈+ )VBO{*V; ùk0/ zZ{T<}TSOŰ3|Vi.j/SzWlLB[F~$U ?f\r/J5墶̤2m% v.5#;[U&v1~$RZ)x>Va:_5ӡngpә#Tu @ jkHWh:_C* TnJX+B<;2S}f; #6MVKe*{'y{+Į0Qrߏy zmz:\mﷳ"7D=AuXˆLGKKy?Cl߄YO%ɘOS&w&<EJ)"biD NOSv`q}3 ?ըsO>/NI萎T4:>iØk40:\YMȁզAі!:^gc8& VMK{ *jQq~-k.tP9ϤImjA#7ߌ|n\z! 9c<KOΜg]G0?vCk Cظ2nмhW\kەW>Gxs0kW+n춏~|H Nxw#U)XL?s 2h70͗&)f:M)eLK꿠Xcݒȯ$m"ii1.҃gha9i&/Aϩoq8as8oE P_%닸dqM,M(1$ Bgn62U֧QYį!x_j˨I-(ħ%lU9ndLqAteZexթB< 'OL~lOW?P lT٣#}6@ S8D@(Jpu*3ģK9`38+rt+D{"[m}Bf9E>[bS/r6bSF]By)iq'E61(zt1FJ6^3RŜctN]׆}o{}^4PVh MZ^zy6 $,O;d#^|~9`T"duo<G8yuS{;zVN_xCf+ ]_X?{rE̍ZkcOudP_ l,gxul/|%n& AQE0{8pXhL/BfoTe+rz$DPY*)E״lHPGcq6%ŃzV;<6ۚpFÑb(q3a·~ [-Bz%7R:{/S$ u#OIL`Ҝ {ʷ(Ud.8H$TH(:t?afۤ3;bQcF/2 lFP)Ͻ>G&hw[_IcSj#"GX߱6.&XD>a(/+~}ET,CFy9g zhF'd +љO8x59˒WőC6{ )Zo{")v۶YD4C?L4"Uu}yy . ,r^çcW?Wl=u~'?Z"<|tlw?@oB4Jz%Lgz^n I s760? Z F,-/멉!k 3ڑY6IV@OɆq ~Щ73 EHMd1zzBXĀՓ3 =6u)|ͻBA낌Ө-$zkIBV$T++2o.s\~Cpe fKrLF.UptA#xt1"ɺ1cU윽PS^8~AFeަ f ==0IKzy]ӎ2A>Rd"faG=緋A .yMVtqd>˻S<iYna SӁn 1ysBdcd)Ilf1ϥd8eHu)[Z=C?/ZGl໐ :CQ4)bFm+Mdb7P6vYekRr`.\$Ehflu(u3;5q8L+YZbk?k3@ʂ1 h**VSb>vwZ_vwC(ܡ;Q-GxyNdvvܢyuY礤=M39}iP.#Hz&+I 0" <(Kr,CNľvT+Os*\& aڗ>xZd;dmنXrAkʱzޏ+ZdH{,r!2ka8'm~ofEg[or{dg-zE љȕYX l*7£6.di4:=(neÌ'R(I%2ڄCؔ秸jUI>UxeI<[O7I {y+.Vn}.Zo`#5Q"*-?;N&GJado?u)烾.g}-Yl)ǝ#CHݬ {iuD86Y2P63_;Au hnϩ1Jn/mB_5x]`omV6 2'x0 km 8^oxCQ _S QMAjd?1MYkD(H;PSm6QhҸ"u:0}&3I/*Kze*&?S8Iz%`&\~++L&cU7 `Y^]+hJ2Gy9?[!h˨C?*;!,HO|zD2 \WOAI v N ˫D!3AR6'/ $eGY8k3ņD\'\W"&ӣf6j Hk #b:QDnGNlڴW`gҠ5S[ (4uc(lBɱAb:RmMd %l2.+;}27,Hӥ۷6sq!ˈWH{>褧<-w$&q'~t(D%&pu׭T^*07'RKMX<Ţ3,cD"[gT&2;ש@hhN5.W{2gbK3 ^]ZiP1y.FS_ȱ溠I edi&Z;Heka"Q_g lcBc1nơ9FJv8A&kX$ cPABJT"OUs/PG]OT*EN!:Tw N OAnvwmm#4L\8 xawPQhZSotj"ՏOS d3XD=FZ Z9m93P@tV4s$hi􊻡"2P]~͕\﫜oX4iOx卲 ZmvYW'6N=>􏏇ST7_"CM8Vi5oln:IWx+#*`E;ÜrH p]X>;ly'fk<ͤ9nvk!\,j_-Hkc~5J5g >sm r$5SMbT9gfAn ^~Xxsy ?yٗ$Ϭ<98 u}m(T ɌJݴQW4V*n|;= x%5 tg*sC^ \(ҙ܅p. u_LY_}Mq# ˉ]/?UiPA1m$֐=s 4y[W>W?_7sM慮bY^r'^9NQ4,H(Q_4轱 b(WRZ:iM RToʁG O}HZG,[D{ [Td KPF Fo21z'1-uœeB1nPiRG#~yᏍ7;tv$'B#TD&[K^d4S<4Y^г2WO/4<-H>][^Fc1StC>jy喋یp4qMx$M6J}RK~ kRltM𔏐1Hڝp̶\}5gotjT )>z9.˦;~@ob@ںN26D"|8<^ ~@Mn-р\SN|4ݠ)H6T? ;$_ թ4yA&+^DBa}8|B.RBA.v -&>fw@w 1%XU U^6yY=&1:Р%de\ 8f19ad ϣYןOMѪº.Q5a'&$ռ`}3GR#{y9UR~o0lKm{Ƨ /&$T%?ϫHhzKBIX;R(H!s7 , t|:p۵j6/x#|f8Ӣ/<v7c! RPMy[4JcX ѓUR9'+S_ '|pVs6bXtĂl8̂6Aa5A7V3Ua~iy'<"ȡ;qXo ѻJ<YA j,b`Ce|,I`~mɁ="Ua͘-MƗKf5e98pU rd8pdmQ.> n 3Co9~@DʸQ52ܟ()kX,[ۚPBM qiMhJ5ni7$1T 0\'L1t+nE'M X 2{B-5sBFހo3}tئסH$ehuo'j̡O&Apn6׈](z{?#Q$(r^C+7pĎF;~Nwdb\\}p-BiaMQ};BYus_k %UbE˱S5b/*MS+%y0sl RQ(.hTZq? ]ơ捲}_;ݳRf$/]hTo\ڈg?dA4u &-ݕ>WQ:8(Qoca2O0DکAV}/ӖpzqVL]d*]=Bx-I/*z%;ƍS D22GB.ޛPΏbC$PwјW(*'y v[h OvGF8j5g7-g^+-&8;m9Qr_+xXG{i9~Q&hN6".D:e15>1ky?l쿼^"џ=ca3)eo絇ϯ6!95mOs/=S&a(/>Yp5pHiF$Xtdމ\GۉFtvvM5U@t)] ܄qQH LbH$qDNt> Ta6h̆Ku>9Sy"{ <[T|fЪ/=6 Mܙ~З Ѥ0T!d^ n1G3hAPڗ~D5Ys_xy#| f&cvKFX]zNcGdH70h0=RvKu[=5:2޵+ôPNb9LfbC[Όvg!B,25wR9 I mU&u9ac-m^߇u:f?l%l=?[S/P~IcD1!_J:7Yēmմ^?D4ZW+Iq6D$gMDvŷ=[QfC4nڮ\М. c4Yzid15ӱ= 6r+ᑞaR ?nҳ]V'ŐSDc=]hAɯXw Jm5]lZ7D)?8t$N?]9mbq2զq2J*`ƳDx Sv("|yVEUm%?COU'QU%ZD U\ö>\w׋Hb?>A]e^4~,1;ni>)% I/P4эg뮃W]`T")(._>%-E,Ytwؓ=J 3hK0k;ݬ ֶ!l3=|*O|c{(yșWe@EiXY njqs{q{WW1]c.DJ ]U+vXVp@ ;#j?c&n_. @4 s E7_4>BLaOrFSoB|1Edrf-઎BɚCI -&jiI%9DV7~<;n:{iCi>ԡ \Ƿ:H.}$SBy8iiH|x  |/\}r{H۵c[=Bn)吕lx>* #V}ifgڐ{=_&[)x Enf6b&/ga)g+/7V=;!Et ц53ŏ߶-C P#RB֏w!Hz.pwj2j\׾^QQn&3"F tLՇ @}"s+F,qTQW gʠَZ֒\e7tGu OAdc,}Ԃ[{<5*Ȭ,xdJZ?N_kn|gg" qibkA멝(qF~ѫíd۬6qKln"˨fv,ՙOki3ܩ#&GeOpy'v0xKқNj*85M۫Px`f5WhFC[.[W7Hϓo;(]u4ĥ Cn@B%+t3H lK ߵY&B {Ƒ뙥c} ]e?rTФd|~bw 8J{e>xEP-f!k+Y냑؀)*?/YUJ HHA`?  =?J`2ܨpUKH)R1g G qt-K-ߦGe%иFvڰĿ?#ƤEu) r)9;-H=Nl`{HIF$&T)˯Tl-2y;R53ecNRe^SR)2: &gWIfdga '@M:L>q7Ê}{E1k&~97Fp;&G O@G( . *@l 1PV25+ bf@#V9TM9uf.H CEVmM  ܀J ̱wP7lmGw]BlLS) ݯ^9hD}}HFK؇&,0c{OiUԑ*3~7 Aw>F^Wr ZS)rћv)Tco'ƺc[W =IPդ*47sYI?{]6V&nnxp&x.Tܙ2~u|C0X] m‹3{DZ١.YqZڻ|[pz{,`7H]H<[NY z$LW,}W+{rhѱXxQ]re)F'߀y /vl⸷\ACB^1g0zT'iNxM]%qb`%p= FA.p"VI%Jk@KNM=n{{ &.7^%X*Tk|%v , PCm-Ct*R twki@=*aD7`bYUb3VfﻣF.fLI{e7S@&nW@YݳF0m9/|H %z(w&q)8(`ۊ\C>NTf3h}%/}:I^by@{ }>܇ ?聿.?7,y&TQLH=ꍩC3(qV¹ zF /FɈ``(xC9';t9K) _} : ;bK3~$s=P6'RАKDMQ2ٔ@a s[!Qvk:_TmRM=sYT) 6 9ؔ#s`b@S,tDkW9UKw1rH5OǡKYwᆓ<诌n0L?ݲՏrp@ZڇQf%/걅*'\]kvmmmϖr[w&;]sfX:]lWE~n4ԱyzIʔ|Q۷ߦ=4P::x ϐ8sBL,a`=D v\!-h4{|m9[EVyAoX -=Q|m^%m{#"j_%bv0p2LhQwTlbpM=iસՊ|Hq;X`V8@%X e𗙾^TB] s*="gy«׷ºsԢcT͓rÖ,M#Y-uscˆ *)# . (a}VM_ǭq''Zwu7_lOٚ\%?~)P{a`F'BT%:-"UD*'NAF-\9R/[Q=6.f]&jUOź^`M` ^qfڎ`*kn?9SP #R 7 u GCje07Aȵ0^EWϫO_FmdtO)L.WO|/_,Nۄn4w==ek~a=֊E `,ױɧ@dl6IpѱHaA]U.w.p$=۰&OTrMMБ'ԁ~6/#qA9:mQGqFRz Y_'͛^b ?3"RR|GFՠGhTiW;[Rg`s֠Z r z :_.olK)s-T ;/92栛tl˖';fQZN)GU cQF,z]P?(%'zVZf1*8H~;{ՂX_c$lYݖkrQYè Y5S,>]oq-{XNPxʅ 2vSzLi8*J/=4On>sUsP խX%)d@Ci!yUIa+kƈKqÉ "WD)')#s = E1jnz¬@\LAa#y0~7^xH)m0!} "Jf~ʡ|Jw"s"U3J /eUt+%m;~BFWE%ʾV|2!4l:%R~Y-gWE~M4M?HeKo7aY)&Pc\EىYcy J??2PajьosA،/ ~&3ehd!ٸ:g񯻾KWOXi1+*)ɡ]2B I/nE9hUہ΀8]381J5)!S0 yFOXv]94# ?laGzQ$mPP;V+P y"n[tMMjq3ܤۤM :#~JXiLc7.:K %s0ݪ쒎ue$C<ҷ}|&TP-loy7,p,0JTXÓr-_C&U 7)oEB=Z } fU;)5!8c!р:e ΀M(#EX]= >k_ #il2yL!Sa9@>zʄC2-#:@ƉyX e(m9&罹1({ꩰo>M6,rYBg.IL?`g4D껩 rHy|MZȈ[TjPSVV姄Im};R*ʮkn:-7nّ{Nk1VT2$3v n[2PU*9r25RNi]6RakP f.PqQbuqM]ԳGXowR݄9'5K8UP'|5!wPpqPuXal_(Qb$CI6i,$,ps5RQVb&I yF dxBdѦ"+ Ci`^ 0sk*[@Kjx5s\Ջ1Ǡޓc*$yD G+4ru+/3;FR2mCkRC֕/0>89fZΓv78TWqΣ_+§OOrXkͺy+c@hTе^@HgDg{K'Dt?QyS:v`R8O턧lY6GD&bK^ÚTܫ}e"HO4jqI<].!!Au-٫/T10C,> Ol4 ɭp0? f%DiSm/"0H~ „Wep&~n˭.{@:5aWM,}8gϦElJvg q5^]cTso5(p? ezl1 |̌LW Q>q!GP 9KLx>P tGV'g} _rF#s|"Z-3)Est{{nFUP9gXj+ (ސUg rQöfΞ{jr|3`e;yʺhiA "Z mcǗgC`Rax5ik9_j231E2d*p\y۾!!iN+"ըI A>׏]טr;l p"Džݔphbz֣GYJ[bCGTg1i Y<<a>Zc/~g]Q@F2Ji sQbQb86*(ػo".ˏа\ݼ(QB- (Ay1}32+ ՓVkvdѓ >BCh(3@gЄ;ͅ_|x zykYЎMAT(޾NdR~wb&7PVԘ.AIQzvu]DBpz(3&fKc-N unS{+yUH4jj,*?pS Bt[,bkT!7fJS9=h5nsn$۴ kK_+UVVvAPZb+ty{Ny Գh}oycb")cbG=lYh({|Fۼs+ydimRrκ2D4GV"sF)d6[K+iߗO&oEV-DLvl naCBY~;, `M3#W-6hɮTvU#W22FLC>2s%BAZ?<uxm}΅5_g. 5Җț#$ 9΋@ a][*a L}ǜmz3āc&lcbMG-OK%II.L)E|^vIA5:\>Lvm$y9il j(L3UeRj)dqZ7mӆXmUML0 NYO+_qd`Qo&͉`"°Yd%`,jd5Y꧘Ωغ7,~r9K KÕ`b$&pkڕ 3uFѫl23vUtp4`@6d\&봊=Q.W Zc[= > ЉYKMO%@a\qԁROQ7ŝ#(8R[p\&o 9\l xHBW\# NpN(.7>#egE/_u]ЛnR}K8iF!hNI54^A,_oo!8f{ąvebnZY] bωs>q~&h{Y &oÁ{ ~[J믵M$F(x:-$F3juܡN,͠0!͓~1n=B%MDG^lwdgspel벴شXE]iEJ e ~S«`s0!2:i\ %Zce\K0Q˘Nש5osh@Z?F9 ƭe:JB1t@+YܭOE+ cєR; n[ )GY7\?l{lы?<@ P,vp`#e2jJyH28C;Jd7碑LXl9ljuGRS)ގh5&#L{m;dWL=[aB@t!<9D(=eʟ'+8E5nm%L^`̿ԂRzj|7$"* @ҥt ĝn+5,^st@ϭ9~f*Y<5bxB !RoZPI2A5َ! ODϵ/:eT!"0wGO{LTayJȄ=WR>/Ǽ#q28ZR7e.e+cް"o^5 NTK0񜄿 k}FTdtH]^Z^S}-"E^$g{z;h#7%sҺjY>ywQ>ykni-PTY \#%*Vb!O ^词0>g cJ&5څ7ȉ@";܆CVvFjŧ QYUf>Jղ}&Yn"`#Snd0:`oH2}i"m;2iFOT}$/;!G U  ,]B2bW#߆yNb21 ?`:rK& 듏VØv S3b5" D|O:5X>ae8 ۑZ=G3=av2q`J[|攃^pe}E-Z@)yqnhޱF":JLV?#Cq 緔" XAaDںG>0 YZgeosphere/man/0000755000176200001440000000000014131211220012771 5ustar liggesusersgeosphere/man/area.Rd0000644000176200001440000000405214131145600014201 0ustar liggesusers\name{areaPolygon} \Rdversion{1.1} \alias{areaPolygon} \alias{areaPolygon,matrix-method} \alias{areaPolygon,data.frame-method} \alias{areaPolygon,SpatialPolygons-method} \title{ Area of a longitude/latitude polygon } \description{ Compute the area of a polygon in angular coordinates (longitude/latitude) on an ellipsoid. } \usage{ \S4method{areaPolygon}{matrix}(x, a=6378137, f=1/298.257223563, ...) \S4method{areaPolygon}{SpatialPolygons}(x, a=6378137, f=1/298.257223563, ...) } \arguments{ \item{x}{longitude/latitude of the points forming a polygon; Must be a matrix or data.frame of 2 columns (first one is longitude, second is latitude) or a SpatialPolygons* object} \item{a}{major (equatorial) radius of the ellipsoid} \item{f}{ellipsoid flattening. The default value is for WGS84 } \item{...}{Additional arguments. None implemented} } \value{ area in square meters } \note{ Use raster::area for polygons that have a planar (projected) coordinate reference system. } \author{ This function calls GeographicLib code by C.F.F. Karney } \references{ C.F.F. Karney, 2013. Algorithms for geodesics, J. Geodesy 87: 43-55. \doi{10.1007/s00190-012-0578-z}. Addenda: \url{https://geographiclib.sourceforge.io/geod-addenda.html}. Also see \url{https://geographiclib.sourceforge.io/} } \seealso{ \code{ \link[geosphere]{centroid}, \link[geosphere]{perimeter} } } \examples{ p <- rbind(c(-180,-20), c(-140,55), c(10, 0), c(-140,-60), c(-180,-20)) areaPolygon(p) # Be careful with very large polygons, as they may not be what they seem! # For example, if you wanted a polygon to compute the area equal to about 1/4 of the ellipsoid # this won't work: b <- matrix(c(-180, 0, 90, 90, 0, 0, -180, 0), ncol=2, byrow=TRUE) areaPolygon(b) # Becausee the shortest path between (-180,0) and (0,0) is # over one of the poles, not along the equator! # Inserting a point along the equator fixes that b <- matrix(c(-180, 0, 0, 0, -90,0, -180, 0), ncol=2, byrow=TRUE) areaPolygon(b) } \keyword{ spatial } geosphere/man/bearingRhumb.Rd0000644000176200001440000000217014131210620015670 0ustar liggesusers\name{bearingRhumb} \Rdversion{1.1} \alias{bearingRhumb} \title{ Rhumbline direction } \description{ Bearing (direction of travel; true course) along a rhumb line (loxodrome) between two points. } \usage{ bearingRhumb(p1, p2) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above} } \value{ A direction (bearing) in degrees } \references{ \url{https://www.edwilliams.org/avform147.htm#Rhumb} \url{https://en.wikipedia.org/wiki/Rhumb_line} } \author{ Chris Veness and Robert Hijmans, based on formulae by Ed Williams } \note{ Unlike most great circles, a rhumb line is a line of constant bearing (direction), i.e. tracks of constant true course. The meridians and the equator are both rhumb lines and great circles. Rhumb lines approaching a pole become a tightly wound spiral. } \seealso{ \code{ \link[geosphere]{bearing}, \link[geosphere]{distRhumb} } } \examples{ bearingRhumb(c(10,10),c(20,20)) } \keyword{ spatial } geosphere/man/finalDirection.Rd0000644000176200001440000000261714131145601016231 0ustar liggesusers\name{finalBearing} \Rdversion{1.1} \alias{finalBearing} \title{ Final direction } \description{ Get the final direction (bearing) when arriving at \code{p2} after starting from \code{p1} and following the shortest path on an ellipsoid (following a geodetic) or on a sphere (following a great circle). } \usage{ finalBearing(p1, p2, a=6378137, f=1/298.257223563, sphere=FALSE) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first column is longitude, second column is latitude) or a SpatialPoints* object} \item{p2}{as above} \item{a}{major (equatorial) radius of the ellipsoid. The default value is for WGS84 } \item{f}{ellipsoid flattening. The default value is for WGS84 } \item{sphere}{logical. If \code{TRUE}, the bearing is computed for a sphere, instead of for an ellipsoid} } \value{ A vector of directions (bearings) in degrees } \examples{ bearing(c(10,10),c(20,20)) finalBearing(c(10,10),c(20,20)) } \author{ This function calls GeographicLib code by C.F.F. Karney } \references{ C.F.F. Karney, 2013. Algorithms for geodesics, J. Geodesy 87: 43-55. \doi{10.1007/s00190-012-0578-z}. Addenda: \url{https://geographiclib.sourceforge.io/geod-addenda.html}. Also see \url{https://geographiclib.sourceforge.io/} } \seealso{ \code{ \link[geosphere]{bearing} } } \keyword{ spatial } geosphere/man/distVincentySphere.Rd0000644000176200001440000000241514131143521017124 0ustar liggesusers\name{distVincentySphere} \Rdversion{1.1} \alias{distVincentySphere} \title{ 'Vincenty' (sphere) great circle distance } \description{ The shortest distance between two points (i.e., the 'great-circle-distance' or 'as the crow flies'), according to the 'Vincenty (sphere)' method. This method assumes a spherical earth, ignoring ellipsoidal effects and it is less accurate then the \code{distVicentyEllipsoid} method. } \usage{ distVincentySphere(p1, p2, r=6378137) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above; or missing, in which case the sequential distance between the points in p1 is computed} \item{r}{radius of the earth; default = 6378137 m} } \value{ Distance value in the same unit as \code{r} (default is meters) } \references{ \url{https://en.wikipedia.org/wiki/Great_circle_distance} } \author{ Robert Hijmans } \seealso{ \code{\link[geosphere]{distGeo}, \link[geosphere]{distVincentyEllipsoid}, \link[geosphere]{distHaversine}, \link[geosphere]{distCosine}, \link{distMeeus}} } \examples{ distVincentySphere(c(0,0),c(90,90)) } \keyword{ spatial } geosphere/man/greatCircleBearing.Rd0000644000176200001440000000152114131210620016776 0ustar liggesusers\name{greatCircleBearing} \Rdversion{1.1} \alias{greatCircleBearing} \title{ Great circle } \description{ Get points on a great circle as defined by a point and an initial bearing } \usage{ greatCircleBearing(p, brng, n=360) } \arguments{ \item{p}{longitude/latitude of a single point. Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{brng}{bearing} \item{n}{The requested number of points on the great circle} } \value{ A matrix of points, or a list of matrices (e.g., if multiple bearings are supplied) } \references{ \url{https://www.edwilliams.org/avform147.htm#Int} } \author{ Robert Hijmans based on formulae by Ed Williams } \examples{ greatCircleBearing(c(5,52), 45, n=12) } \keyword{ spatial } geosphere/man/perimeter.Rd0000644000176200001440000000321114131145601015262 0ustar liggesusers\name{perimeter} \Rdversion{1.1} \alias{perimeter} \alias{perimeter,matrix-method} \alias{perimeter,data.frame-method} \alias{perimeter,SpatialPolygons-method} \alias{perimeter,SpatialLines-method} \title{ Compute the perimeter of a longitude/latitude polygon } \description{ Compute the perimeter of a polygon (or the length of a line) with longitude/latitude coordinates, on an ellipsoid (WGS84 by default) } \usage{ \S4method{perimeter}{matrix}(x, a=6378137, f=1/298.257223563, ...) \S4method{perimeter}{SpatialPolygons}(x, a=6378137, f=1/298.257223563, ...) \S4method{perimeter}{SpatialLines}(x, a=6378137, f=1/298.257223563, ...) } \arguments{ \item{x}{Longitude/latitude of the points forming a polygon or line; Must be a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPolygons* or SpatialLines* object} \item{a}{major (equatorial) radius of the ellipsoid. The default value is for WGS84 } \item{f}{ellipsoid flattening. The default value is for WGS84 } \item{...}{Additional arguments. None implemented} } \value{ Numeric. The perimeter or length in m. } \seealso{ \code{ \link{areaPolygon}, \link[geosphere]{centroid} } } \author{ This function calls GeographicLib code by C.F.F. Karney } \references{ C.F.F. Karney, 2013. Algorithms for geodesics, J. Geodesy 87: 43-55. \doi{10.1007/s00190-012-0578-z}. Addenda: \url{https://geographiclib.sourceforge.io/geod-addenda.html}. Also see \url{https://geographiclib.sourceforge.io/} } \examples{ xy <- rbind(c(-180,-20), c(-140,55), c(10, 0), c(-140,-60), c(-180,-20)) perimeter(xy) } \keyword{ spatial } geosphere/man/distm.Rd0000644000176200001440000000200014131143521014400 0ustar liggesusers\name{distm} \Rdversion{1.1} \alias{distm} \title{ Distance matrix } \description{ Distance matrix of a set of points, or between two sets of points } \usage{ distm(x, y, fun=distGeo) } \arguments{ \item{x}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{y}{Same as \code{x}. If missing, y is the same as x} \item{fun}{A function to compute distances (e.g., distCosine or distGeo)} } \value{ Matrix of distances } \references{ \url{https://en.wikipedia.org/wiki/Great_circle_distance} } \author{ Robert Hijmans } \seealso{ \code{\link[geosphere]{distGeo}, \link[geosphere]{distCosine}, \link[geosphere]{distHaversine}, \link[geosphere]{distVincentySphere}, \link[geosphere]{distVincentyEllipsoid}} } \examples{ xy <- rbind(c(0,0),c(90,90),c(10,10),c(-120,-45)) distm(xy) xy2 <- rbind(c(0,0),c(10,-10)) distm(xy, xy2) } \keyword{ spatial } geosphere/man/horizon.Rd0000644000176200001440000000137514131210620014761 0ustar liggesusers\name{horizon} \alias{horizon} \title{Distance to the horizon} \description{ Empirical function to compute the distance to the horizon from a given altitude. The earth is assumed to be smooth, i.e. mountains and other obstacles are ignored. } \usage{ horizon(h, r=6378137) } \arguments{ \item{h}{altitude, numeric >= 0. Should have the same unit as r} \item{r}{radius of the earth; default value is 6378137 m} } \value{ Distance in units of \code{h} (default is meters) } \references{ \url{https://www.edwilliams.org/avform147.htm#Horizon} Bowditch, 1995. American Practical Navigator. Table 12. } \author{ Robert J. Hijmans } \examples{ horizon(1.80) # me horizon(324) # Eiffel tower } \keyword{ spatial } geosphere/man/makepoly.Rd0000644000176200001440000000221713472155746015136 0ustar liggesusers\name{makePoly} \alias{makePoly} \alias{makeLine} \title{Add vertices to a polygon or line} \description{ Make a polygon or line by adding intermedate points (vertices) on the great circles inbetween the points supplied. This can be relevant when vertices are relatively far apart. It can make the shape of the object to be accurate, when plotted on a plane. \code{makePoly} will also close the polygon if needed. } \usage{ makePoly(p, interval=10000, sp=FALSE, ...) makeLine(p, interval=10000, sp=FALSE, ...) } \arguments{ \item{p}{a 2-column matrix (longitude/latitude) or a SpatialPolygons or SpatialLines object} \item{interval}{maximum interval of points, in units of r} \item{sp}{Logical. If \code{TRUE}, a SpatialPolygons object is retunred (depends on the 'sp' package)} \item{...}{additional arguments passed to distGeo} } \value{ A matrix } \author{Robert J. Hijmans } \examples{ pol <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20)) plot(pol) lines(pol, col='red', lwd=3) pol2 = makePoly(pol, interval=100000) lines(pol2, col='blue', lwd=2) } \keyword{methods} \keyword{spatial} geosphere/man/gcIntersectBearing.Rd0000644000176200001440000000231414131210620017025 0ustar liggesusers\name{gcIntersectBearing} \Rdversion{1.1} \alias{gcIntersectBearing} \title{ Intersections of two great circles } \description{ Get the two points where two great cricles cross each other. In this function, great circles are defined by a points and an initial bearing. In function \code{ \link[geosphere]{gcIntersect}} they are defined by two sets of points. } \usage{ gcIntersectBearing(p1, brng1, p2, brng2) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{brng1}{Bearing from p1} \item{p2}{As above. Should have same length as p1, or a single point (or vice versa when p1 is a single point} \item{brng2}{Bearing from p2} } \value{ a matrix with four columns (two points) } \seealso{ \code{ \link[geosphere]{gcIntersect} } } \references{ \url{https://www.edwilliams.org/avform147.htm#Intersection} \url{https://www.movable-type.co.uk/scripts/latlong.html} } \author{ Chris Veness and Robert Hijmans based on code by Ed Williams } \examples{ gcIntersectBearing(c(10,0), 10, c(-10,0), 10) } \keyword{ spatial } geosphere/man/distCosine.Rd0000644000176200001440000000211514131143521015373 0ustar liggesusers\name{distCosine} \Rdversion{1.1} \alias{distCosine} \title{ 'Law of cosines' great circle distance } \description{ The shortest distance between two points (i.e., the 'great-circle-distance' or 'as the crow flies'), according to the 'law of the cosines'. This method assumes a spherical earth, ignoring ellipsoidal effects. } \usage{ distCosine(p1, p2, r=6378137) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above} \item{r}{radius of the earth; default = 6378137 m} } \value{ Vector of distances in the same unit as \code{r} (default is meters) } \references{ \url{https://en.wikipedia.org/wiki/Great_circle_distance} } \author{ Robert Hijmans } \seealso{ \code{\link[geosphere]{distGeo}, \link[geosphere]{distHaversine}, \link[geosphere]{distVincentySphere}, \link[geosphere]{distVincentyEllipsoid}, \link{distMeeus}} } \examples{ distCosine(c(0,0),c(90,90)) } \keyword{ spatial } geosphere/man/plotArrows.Rd0000644000176200001440000000211513472155746015466 0ustar liggesusers\name{plotArrows} \alias{plotArrows} \title{Plot} \description{ Plot polygons with arrow heads on each line segment, pointing towards the next vertex. This shows the direction of each line segment. } \usage{ plotArrows(p, fraction=0.9, length=0.15, first='', add=FALSE, ...) } \arguments{ \item{p}{Polygons (either a 2 column matrix or data.frame; or a SpatialPolygons* object} \item{fraction}{numeric between 0 and 1. When smaller then 1, interrupted lines are drawn} \item{length}{length of the edges of the arrow head (in inches)} \item{first}{Character to plot on first (and last) vertex } \item{add}{Logical. If \code{TRUE}, the plot is added to an existing plot} \item{...}{Additional arguments, see Details} } \author{Robert J. Hijmans} \note{ Based on an example in Software for Data Analysis by John Chambers (pp 250-251) but adjusted such that the line segments follow great circles between vertices. } \examples{ pol <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20)) plotArrows(pol) } \keyword{methods} \keyword{spatial} geosphere/man/distRhumb.Rd0000644000176200001440000000272114131143521015233 0ustar liggesusers\name{distRhumb} \Rdversion{1.1} \alias{distRhumb} \title{ Distance along a rhumb line } \description{ A rhumb line (loxodrome) is a path of constant bearing (direction), which crosses all meridians at the same angle. } \usage{ distRhumb(p1, p2, r=6378137) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above; or missing, in which case the sequential distance between the points in p1 is computed} \item{r}{radius of the earth; default = 6378137 m} } \details{ Rhumb (from the Spanish word for course, 'rumbo') lines are straight lines on a Mercator projection map. They were used in navigation because it is easier to follow a constant compass bearing than to continually adjust the bearing as is needed to follow a great circle, even though rhumb lines are normally longer than great-circle (orthodrome) routes. Most rhumb lines will gradually spiral towards one of the poles. } \value{ distance in units of r (default=meters) } \references{ \url{https://www.movable-type.co.uk/scripts/latlong.html} } \author{ Robert Hijmans and Chris Veness } \seealso{ \code{\link[geosphere]{distCosine}, \link[geosphere]{distHaversine}, \link[geosphere]{distVincentySphere}, \link[geosphere]{distVincentyEllipsoid}} } \examples{ distRhumb(c(10,10),c(20,20)) } \keyword{ spatial } geosphere/man/dist2line.Rd0000644000176200001440000000340614131141731015171 0ustar liggesusers\name{dist2Line} \Rdversion{1.1} \alias{dist2Line} \title{ Distance between points and lines or the border of polygons. } \description{ The shortest distance between points and polylines or polygons. } \usage{dist2Line(p, line, distfun=distGeo) } \arguments{ \item{p}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{line}{longitude/latitude of line as a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialLines* or SpatialPolygons* object} \item{distfun}{A distance function, such as \link[geosphere]{distGeo}} } \value{ matrix with distance and lon/lat of the nearest point on the line. Distance is in the same unit as \code{r} in the \code{distfun}(default is meters). If \code{line} is a \code{Spatial*} object, the ID (index) of (one of) the nearest objects is also returned. Thus if the objects are polygons and the point is inside a polygon the function may return the ID of a neighboring polygon that shares the nearest border. You can use the \code{intersect} function in packages \code{terra}. } \author{ George Wang and Robert Hijmans } \seealso{ \code{\link{dist2gc}, \link{alongTrackDistance} } } \examples{ line <- rbind(c(-180,-20), c(-150,-10), c(-140,55), c(10, 0), c(-140,-60)) pnts <- rbind(c(-170,0), c(-75,0), c(-70,-10), c(-80,20), c(-100,-50), c(-100,-60), c(-100,-40), c(-100,-20), c(-100,-10), c(-100,0)) d = dist2Line(pnts, line) plot( makeLine(line), type='l') points(line) points(pnts, col='blue', pch=20) points(d[,2], d[,3], col='red', pch='x') for (i in 1:nrow(d)) lines(gcIntermediate(pnts[i,], d[i,2:3], 10), lwd=2) } \keyword{ spatial } geosphere/man/lengthLine.Rd0000644000176200001440000000112414131141671015363 0ustar liggesusers\name{lengthLine} \alias{lengthLine} \title{ Length of lines } \description{ Compute the length of lines } \usage{ lengthLine(line) } \arguments{ \item{line}{longitude/latitude of line as a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialLines* or SpatialPolygons* object} } \value{ length (in meters) for each line } \seealso{ For planar coordinates, see the terra or sf packages } \examples{ line <- rbind(c(-180,-20), c(-150,-10), c(-140,55), c(10, 0), c(-140,-60)) d <- lengthLine(line) } \keyword{ spatial } geosphere/man/geosphere-package.Rd0000644000176200001440000000443014131210620016636 0ustar liggesusers\name{geosphere-package} \alias{geosphere-package} \alias{geosphere} \docType{package} \title{Geosphere} \description{ This package implements functions that compute various aspects of distance, direction, area, etc. for geographic (geodetic) coordinates. Some of the functions are based on an ellipsoid (spheroid) model of the world, other functions use a (simpler, but less accuarate) spherical model. Functions using an ellipsoid can be recognized by having arguments to specify the ellipsoid's radius and flattening (\code{a} and \code{f}). By setting the value for \code{f} to zero, the ellipsoid becomes a sphere. There are also functions to compute intersections of of rhumb lines. There are also functions to compute the distance between points and polylines, and to characterize spherical polygons; for random sampling on a sphere, and to compute daylength. See the vignette \code{vignette('geosphere')} for examples. Geographic locations must be specified in latitude and longitude in degrees (NOT radians). Degrees are (obviously) in decimal notation. Thus 12 degrees, 30 minutes, 10 seconds = 12 + 30/60 + 10/3600 = 12.50278 degrees. The Southern and Western hemispheres have a negative sign. The default unit of distance is meter; but this can be adjusted by supplying a different radius \code{r} to functions. Directions are expressed in degrees (North = 0 and 360, East = 90, Sout = 180, and West = 270 degrees). } \author{ Robert Hijmans, using code by C.F.F. Karney and Chris Veness; formulas by Ed Williams; and with contributions from George Wang, Elias Pipping and others. Maintainer: Robert J. Hijmans } \references{ C.F.F. Karney, 2013. Algorithms for geodesics, J. Geodesy 87: 43-55. \doi{10.1007/s00190-012-0578-z}. Addenda: \url{https://geographiclib.sourceforge.io/geod-addenda.html}. Also see \url{https://geographiclib.sourceforge.io/} \url{https://www.edwilliams.org/avform147.htm} \url{https://www.movable-type.co.uk/scripts/latlong.html} \url{https://en.wikipedia.org/wiki/Great_circle_distance} \url{https://mathworld.wolfram.com/SphericalTrigonometry.html} } \section{Acknowledgements}{ David Purdy, Bill Monahan and others for suggestions to improve the package. } \keyword{ package } \keyword{ spatial } geosphere/man/gcMaxLat.Rd0000644000176200001440000000231714131143521014773 0ustar liggesusers\name{gcMaxLat} \Rdversion{1.1} \alias{gcMaxLat} \title{ Highest latitude on a great circle } \description{ What is northern most point that will be reached when following a great circle? Computed with Clairaut's formula. The southern most point is the \code{\link[geosphere]{antipode}} of the northern-most point. This does not seem to be very precise; and you could use optimization instead to find this point (see examples) } \usage{ gcMaxLat(p1, p2) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above} } \value{ A matrix with coordinates (longitude/latitude) } \references{ \url{https://www.edwilliams.org/ftp/avsig/avform.txt} \url{https://www.movable-type.co.uk/scripts/latlong.html} } \author{ Ed Williams, Chris Veness, Robert Hijmans } \seealso{ \code{\link[geosphere]{gcLat}, \link[geosphere]{gcLon}} } \examples{ gcMaxLat(c(5,52), c(-120,37)) # Another way to get there: f <- function(lon){gcLat(c(5,52), c(-120,37), lon)} optimize(f, interval=c(-180, 180), maximum=TRUE) } \keyword{ spatial } geosphere/man/gcIntersect.Rd0000644000176200001440000000171014131143521015541 0ustar liggesusers\name{gcIntersect} \Rdversion{1.1} \alias{gcIntersect} \title{ Intersections of two great circles } \description{ Get the two points where two great cricles cross each other. Great circles are defined by two points on it. } \usage{ gcIntersect(p1, p2, p3, p4) } \arguments{ \item{p1}{Longitude/latitude of a single point, in degrees; can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{As above} \item{p3}{As above} \item{p4}{As above} } \value{ two points for each pair of great circles } \seealso{ \code{ \link[geosphere]{gcIntersectBearing} } } \references{ \url{https://www.edwilliams.org/intersect.htm} } \author{ Robert Hijmans, based on equations by Ed Williams (see reference) } \examples{ p1 <- c(5,52); p2 <- c(-120,37); p3 <- c(-60,0); p4 <- c(0,70) gcIntersect(p1,p2,p3,p4) } \keyword{ spatial } geosphere/man/bearing.Rd0000644000176200001440000000300614131145600014676 0ustar liggesusers\name{bearing} \Rdversion{1.1} \alias{bearing} \title{ Direction of travel } \description{ Get the initial bearing (direction; azimuth) to go from point \code{p1} to point \code{p2} (in longitude/latitude) following the shortest path on an ellipsoid (geodetic). Note that the bearing of travel changes continuously while going along the path. A route with constant bearing is a rhumb line (see \code{\link[geosphere]{bearingRhumb}}). } \usage{ bearing(p1, p2, a=6378137, f=1/298.257223563) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above. Can also be missing, in which case the bearing is computed going from the first point to the next and continuing along the following points} \item{a}{major (equatorial) radius of the ellipsoid. The default value is for WGS84 } \item{f}{ellipsoid flattening. The default value is for WGS84 } } \note{use \code{f=0} to get a bearing on a sphere (great circle)} \value{ Bearing in degrees } \author{ Robert Hijmans } \references{ C.F.F. Karney, 2013. Algorithms for geodesics, J. Geodesy 87: 43-55. \doi{10.1007/s00190-012-0578-z}. Addenda: \url{https://geographiclib.sourceforge.io/geod-addenda.html}. Also see \url{https://geographiclib.sourceforge.io/} } \seealso{ \code{ \link[geosphere]{bearingRhumb} } } \examples{ bearing(c(10,10),c(20,20)) } \keyword{ spatial } geosphere/man/distGeo.Rd0000644000176200001440000000551614131145601014676 0ustar liggesusers\name{distGeo} \Rdversion{1.1} \alias{distGeo} \title{ Distance on an ellipsoid (the geodesic) } \description{ Highly accurate estimate of the shortest distance between two points on an ellipsoid (default is WGS84 ellipsoid). The shortest path between two points on an ellipsoid is called the geodesic. } \usage{ distGeo(p1, p2, a=6378137, f=1/298.257223563) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first column is longitude, second column is latitude) or a SpatialPoints* object} \item{p2}{as above; or missing, in which case the sequential distance between the points in p1 is computed} \item{a}{numeric. Major (equatorial) radius of the ellipsoid. The default value is for WGS84 } \item{f}{numeric. Ellipsoid flattening. The default value is for WGS84 } } \value{ Vector of distances in meters } \details{ Parameters from the WGS84 ellipsoid are used by default. It is the best available global ellipsoid, but for some areas other ellipsoids could be preferable, or even necessary if you work with a printed map that refers to that ellipsoid. Here are parameters for some commonly used ellipsoids. Also see the \code{\link{refEllipsoids}} function. \tabular{rlll}{ \tab \code{ ellipsoid } \tab \code{ a } \tab \code{ f } \cr \tab \code{ WGS84 } \tab \code{ 6378137 } \tab \code{ 1/298.257223563 } \cr \tab \code{ GRS80 } \tab \code{ 6378137 } \tab \code{ 1/298.257222101 } \cr \tab \code{ GRS67 } \tab \code{ 6378160 } \tab \code{ 1/298.25 } \cr \tab \code{ Airy 1830 } \tab \code{ 6377563.396 } \tab \code{ 1/299.3249646 } \cr \tab \code{ Bessel 1841 } \tab \code{ 6377397.155 } \tab \code{ 1/299.1528434 } \cr \tab \code{ Clarke 1880 } \tab \code{ 6378249.145 } \tab \code{ 1/293.465 } \cr \tab \code{ Clarke 1866 } \tab \code{ 6378206.4 } \tab \code{ 1/294.9786982 } \cr \tab \code{ International 1924 } \tab \code{ 6378388 } \tab \code{ 1/297 } \cr \tab \code{ Krasovsky 1940 } \tab \code{ 6378245 } \tab \code{ 1/298.2997381 } \cr } more info: \url{https://en.wikipedia.org/wiki/Reference_ellipsoid} } \author{ This function calls GeographicLib code by C.F.F. Karney } \references{ C.F.F. Karney, 2013. Algorithms for geodesics, J. Geodesy 87: 43-55. \doi{10.1007/s00190-012-0578-z}. Addenda: \url{https://geographiclib.sourceforge.io/geod-addenda.html}. Also see \url{https://geographiclib.sourceforge.io/} } \seealso{ \code{\link[geosphere]{distCosine}, \link[geosphere]{distHaversine}, \link[geosphere]{distVincentySphere}, \link[geosphere]{distVincentyEllipsoid}, \link{distMeeus}} } \examples{ distGeo(c(0,0),c(90,90)) } \keyword{ spatial } geosphere/man/gcLon.Rd0000644000176200001440000000143414131210620014327 0ustar liggesusers\name{gcLon} \Rdversion{1.1} \alias{gcLon} \title{ Longitude on a Great Circle } \description{ Longitudes at which a great circle crosses a latitude (parallel) } \usage{ gcLon(p1, p2, lat) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above} \item{lat}{a latitude} } \value{ vector of two numbers (longitudes) } \references{ \url{https://www.edwilliams.org/avform147.htm#Intersection} } \author{ Robert Hijmans based on code by Ed Williams } \seealso{ \code{\link[geosphere]{gcLat}, \link[geosphere]{gcMaxLat}} } \examples{ gcLon(c(5,52), c(-120,37), 40) } \keyword{ spatial } geosphere/man/onGreatCircle.Rd0000644000176200001440000000160613472155746016037 0ustar liggesusers\name{onGreatCircle} \Rdversion{1.1} \alias{onGreatCircle} \title{ Is a point on a given great circle? } \description{ Test if a point is on a great circle defined by two other points. } \usage{ onGreatCircle(p1, p2, p3, tol=0.0001) } \arguments{ \item{p1}{Longitude/latitude of the first point defining a great circle, in degrees; can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above for the second point} \item{p3}{the point(s) to be tested if they are on the great circle or not} \item{tol}{numeric. maximum distance from the great circle (in degrees) that is tolerated to be considered on the circle} } \value{ logical } \author{ Robert Hijmans } \examples{ onGreatCircle(c(0,0), c(30,30), rbind(c(-10 -11.33812), c(10,20))) } \keyword{ spatial } geosphere/man/gcLat.Rd0000644000176200001440000000142114131210620014313 0ustar liggesusers\name{gcLat} \Rdversion{1.1} \alias{gcLat} \title{ Latitude on a Great Circle } \description{ Latitude at which a great circle crosses a longitude } \usage{ gcLat(p1, p2, lon) } \arguments{ \item{p1}{Longitude/latitude of a single point, in degrees; can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{As above} \item{lon}{Longitude} } \value{ A numeric (latitude) } \references{ \url{https://www.edwilliams.org/avform147.htm#Int} } \author{ Robert Hijmans based on a formula by Ed Williams } \seealso{ \code{\link[geosphere]{gcLon}, \link[geosphere]{gcMaxLat}} } \examples{ gcLat(c(5,52), c(-120,37), lon=-120) } \keyword{ spatial } geosphere/man/destPointRhumb.Rd0000644000176200001440000000214614131210620016235 0ustar liggesusers\name{destPointRhumb} \Rdversion{1.1} \alias{destPointRhumb} \title{ Destination along a rhumb line } \description{ Calculate the destination point when travelling along a 'rhumb line' (loxodrome), given a start point, direction, and distance. } \usage{ destPointRhumb(p, b, d, r = 6378137) } \arguments{ \item{p}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{b}{bearing (direction) in degrees} \item{d}{distance; in the same unit as \code{r} (default is meters)} \item{r}{radius of the earth; default = 6378137 m} } \value{ Coordinates (longitude/latitude) of a point } \references{ \url{https://www.edwilliams.org/avform147.htm#Rhumb} \url{https://www.movable-type.co.uk/scripts/latlong.html} \url{https://en.wikipedia.org/wiki/Rhumb_line} } \author{ Chris Veness; ported to R by Robert Hijmans } \seealso{ \code{ \link[geosphere]{destPoint} } } \examples{ destPointRhumb(c(0,0), 30, 100000, r = 6378137) } \keyword{ spatial } geosphere/man/dist2gc.Rd0000644000176200001440000000267014131143521014634 0ustar liggesusers\name{dist2gc} \Rdversion{1.1} \alias{dist2gc} \title{ Cross Track Distance } \description{ Compute the distance of a point to a great-circle path (also referred to as the cross track distance or cross track error). The great circle is defined by \code{p1} and \code{p2}, while \code{p3} is the point away from the path. } \usage{ dist2gc(p1, p2, p3, r=6378137, sign=FALSE) } \arguments{ \item{p1}{Start of great circle path. longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{End of great circle path. As above} \item{p3}{Point away from the great cricle path. As for p2} \item{r}{radius of the earth; default = 6378137} \item{sign}{logical. If \code{TRUE}, a negative sign is used to indicated that the points are to the left of the great circle} } \value{ A distance in units of \code{r} (default is meters) If \code{sign=TRUE}, the sign indicates which side of the path p3 is on. Positive means right of the course from p1 to p2, negative means left. } \author{ Ed Williams and Robert Hijmans } \seealso{ \code{\link{dist2Line}, \link{alongTrackDistance} } } \references{ \url{https://www.movable-type.co.uk/scripts/latlong.html} \url{https://www.edwilliams.org/ftp/avsig/avform.txt} } \examples{ dist2gc(c(0,0),c(90,90),c(80,80)) } \keyword{ spatial } geosphere/man/distHaversine.Rd0000644000176200001440000000342114131143521016100 0ustar liggesusers\name{distHaversine} \Rdversion{1.1} \alias{distHaversine} \title{ 'Haversine' great circle distance } \description{ The shortest distance between two points (i.e., the 'great-circle-distance' or 'as the crow flies'), according to the 'haversine method'. This method assumes a spherical earth, ignoring ellipsoidal effects. } \usage{distHaversine(p1, p2, r=6378137) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above; or missing, in which case the sequential distance between the points in p1 is computed} \item{r}{radius of the earth; default = 6378137 m} } \details{ The Haversine ('half-versed-sine') formula was published by R.W. Sinnott in 1984, although it has been known for much longer. At that time computational precision was lower than today (15 digits precision). With current precision, the spherical law of cosines formula appears to give equally good results down to very small distances. If you want greater accuracy, you could use the \code{\link[geosphere]{distVincentyEllipsoid}} method. } \value{ Vector of distances in the same unit as \code{r} (default is meters) } \references{ Sinnott, R.W, 1984. Virtues of the Haversine. Sky and Telescope 68(2): 159 \url{https://www.movable-type.co.uk/scripts/latlong.html} \url{https://en.wikipedia.org/wiki/Great_circle_distance} } \author{ Chris Veness and Robert Hijmans } \seealso{ \code{\link[geosphere]{distGeo}, \link[geosphere]{distCosine}, \link[geosphere]{distVincentySphere}, \link[geosphere]{distVincentyEllipsoid}, \link{distMeeus}} } \examples{ distHaversine(c(0,0),c(90,90)) } \keyword{ spatial } geosphere/man/destPoint.Rd0000644000176200001440000000354214131145600015245 0ustar liggesusers\name{destPoint} \Rdversion{1.1} \alias{destPoint} \title{ Destination given bearing (direction) and distance } \description{ Given a start point, initial bearing (direction), and distance, this function computes the destination point travelling along a the shortest path on an ellipsoid (the geodesic). } \usage{ destPoint(p, b, d, a=6378137, f=1/298.257223563, ...) } \arguments{ \item{p}{Longitude and Latitude of point(s), in degrees. Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{b}{numeric. Bearing (direction) in degrees} \item{d}{numeric. Distance in meters} \item{a}{major (equatorial) radius of the ellipsoid. The default value is for WGS84 } \item{f}{ellipsoid flattening. The default value is for WGS84 } \item{...}{additional arguments. If an argument 'r' is supplied, this is taken as the radius of the earth (e.g. 6378137 m) and computations are for a sphere (great circle) instead of an ellipsoid (geodetic). This is for backwards compatibility only} } \note{ Direction changes continuously when travelling along a geodesic. Therefore, the final direction is not the same as the initial direction. You can compute the final direction with \code{\link{finalBearing}} (see examples, below) } \value{ A pair of coordinates (longitude/latitude) } \author{ This function calls GeographicLib code by C.F.F. Karney } \references{ C.F.F. Karney, 2013. Algorithms for geodesics, J. Geodesy 87: 43-55. \doi{10.1007/s00190-012-0578-z}. Addenda: \url{https://geographiclib.sourceforge.io/geod-addenda.html}. Also see \url{https://geographiclib.sourceforge.io/} } \examples{ p <- cbind(5,52) d <- destPoint(p,30,10000) d #final direction, when arriving at endpoint: finalBearing(d, p) } \keyword{ spatial } geosphere/man/refEllipsoids.Rd0000644000176200001440000000117513472155746016123 0ustar liggesusers\name{refEllipsoids} \alias{refEllipsoids} \title{Reference ellipsoids} \description{ This function returns a data.frame with parameters \code{a} (semi-major axis) and \code{1/f} (inverse flattening) for a set of reference ellipsoids. } \usage{ refEllipsoids() } \note{ To compute parameter \code{b} you can do } \value{ data.frame } \seealso{ \code{ \link[geosphere]{area}, \link[geosphere]{perimeter} } } \author{Robert J. Hijmans } \examples{ e <- refEllipsoids() e[e$code=='WE', ] #to compute semi-minor axis b: e$b <- e$a - e$a / e$invf } \keyword{methods} \keyword{spatial} geosphere/man/distVincentyEllipsoid.Rd0000644000176200001440000000701614131143521017624 0ustar liggesusers\name{distVincentyEllipsoid} \Rdversion{1.1} \alias{distVincentyEllipsoid} \title{ 'Vincenty' (ellipsoid) great circle distance } \description{ The shortest distance between two points (i.e., the 'great-circle-distance' or 'as the crow flies'), according to the 'Vincenty (ellipsoid)' method. This method uses an ellipsoid and the results are very accurate. The method is computationally more intensive than the other great-circled methods in this package. } \usage{ distVincentyEllipsoid(p1, p2, a=6378137, b=6356752.3142, f=1/298.257223563) } \arguments{ \item{p1}{longitude/latitude of point(s), in degrees 1; can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above; or missing, in which case the sequential distance between the points in p1 is computed} \item{a}{Equatorial axis of ellipsoid} \item{b}{Polar axis of ellipsoid} \item{f}{Inverse flattening of ellipsoid} } \details{ The WGS84 ellipsoid is used by default. It is the best available global ellipsoid, but for some areas other ellipsoids could be preferable, or even necessary if you work with a printed map that refers to that ellipsoid. Here are parameters for some commonly used ellipsoids: \tabular{rllll}{ \tab \code{ ellipsoid } \tab \code{ a } \tab \code{ b } \tab \code{ f } \cr \tab \code{ WGS84 } \tab \code{ 6378137 } \tab \code{ 6356752.3142 } \tab \code{ 1/298.257223563 } \cr \tab \code{ GRS80 } \tab \code{ 6378137 } \tab \code{ 6356752.3141 } \tab \code{ 1/298.257222101 } \cr \tab \code{ GRS67 } \tab \code{ 6378160 } \tab \code{ 6356774.719 } \tab \code{ 1/298.25 } \cr \tab \code{ Airy 1830 } \tab \code{ 6377563.396 } \tab \code{ 6356256.909 } \tab \code{ 1/299.3249646 } \cr \tab \code{ Bessel 1841 } \tab \code{ 6377397.155 } \tab \code{ 6356078.965 } \tab \code{ 1/299.1528434 } \cr \tab \code{ Clarke 1880 } \tab \code{ 6378249.145 } \tab \code{ 6356514.86955 } \tab \code{ 1/293.465 } \cr \tab \code{ Clarke 1866 } \tab \code{ 6378206.4 } \tab \code{ 6356583.8 } \tab \code{ 1/294.9786982 } \cr \tab \code{ International 1924 } \tab \code{ 6378388 } \tab \code{ 6356911.946 } \tab \code{ 1/297 } \cr \tab \code{ Krasovsky 1940 } \tab \code{ 6378245 } \tab \code{ 6356863 } \tab \code{ 1/298.2997381 } \cr } \code{a} is the 'semi-major axis', and \code{b} is the 'semi-minor axis' of the ellipsoid. \code{f} is the flattening. Note that \code{f = (a-b)/a} more info: \url{https://en.wikipedia.org/wiki/Reference_ellipsoid} } \value{ Distance value in the same units as the ellipsoid (default is meters) } \references{ Vincenty, T. 1975. Direct and inverse solutions of geodesics on the ellipsoid with application of nested equations. Survey Review Vol. 23, No. 176, pp88-93. Available here: \url{https://www.movable-type.co.uk/scripts/latlong-vincenty.html} \url{https://en.wikipedia.org/wiki/Great_circle_distance} } \author{ Chris Veness and Robert Hijmans } \seealso{ \code{\link[geosphere]{distGeo}, \link{distVincentySphere}, \link{distHaversine}, \link{distCosine}, \link{distMeeus}} } \examples{ distVincentyEllipsoid(c(0,0),c(90,90)) # on a 'Clarke 1880' ellipsoid distVincentyEllipsoid(c(0,0),c(90,90), a=6378249.145, b=6356514.86955, f=1/293.465) } \keyword{ spatial } geosphere/man/distMeeus.Rd0000644000176200001440000000546614131143521015245 0ustar liggesusers\name{distMeeus} \Rdversion{1.1} \alias{distMeeus} \title{ 'Meeus' great circle distance } \description{ The shortest distance between two points on an ellipsoid (the 'geodetic'), according to the 'Meeus' method. \code{\link{distGeo}} should be more accurate. } \usage{ distMeeus(p1, p2, a=6378137, f=1/298.257223563) } \arguments{ \item{p1}{longitude/latitude of point(s), in degrees 1; can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above; or missing, in which case the sequential distance between the points in p1 is computed} \item{a}{numeric. Major (equatorial) radius of the ellipsoid. The default value is for WGS84 } \item{f}{numeric. Ellipsoid flattening. The default value is for WGS84 } } \details{ Parameters from the WGS84 ellipsoid are used by default. It is the best available global ellipsoid, but for some areas other ellipsoids could be preferable, or even necessary if you work with a printed map that refers to that ellipsoid. Here are parameters for some commonly used ellipsoids: \tabular{rlll}{ \tab \code{ ellipsoid } \tab \code{ a } \tab \code{ f } \cr \tab \code{ WGS84 } \tab \code{ 6378137 } \tab \code{ 1/298.257223563 } \cr \tab \code{ GRS80 } \tab \code{ 6378137 } \tab \code{ 1/298.257222101 } \cr \tab \code{ GRS67 } \tab \code{ 6378160 } \tab \code{ 1/298.25 } \cr \tab \code{ Airy 1830 } \tab \code{ 6377563.396 } \tab \code{ 1/299.3249646 } \cr \tab \code{ Bessel 1841 } \tab \code{ 6377397.155 } \tab \code{ 1/299.1528434 } \cr \tab \code{ Clarke 1880 } \tab \code{ 6378249.145 } \tab \code{ 1/293.465 } \cr \tab \code{ Clarke 1866 } \tab \code{ 6378206.4 } \tab \code{ 1/294.9786982 } \cr \tab \code{ International 1924 } \tab \code{ 6378388 } \tab \code{ 1/297 } \cr \tab \code{ Krasovsky 1940 } \tab \code{ 6378245 } \tab \code{ 1/298.2997381 } \cr } more info: \url{https://en.wikipedia.org/wiki/Reference_ellipsoid} } \value{ Distance value in the same units as parameter \code{a} of the ellipsoid (default is meters) } \note{ This algorithm is also used in the \code{spDists} function in the sp package } \references{ Meeus, J., 1999 (2nd edition). Astronomical algoritms. Willman-Bell, 477p. } \author{ Robert Hijmans, based on a script by Stephen R. Schmitt } \seealso{ \code{\link[geosphere]{distGeo}, \link{distVincentyEllipsoid}, \link{distVincentySphere}, \link{distHaversine}, \link{distCosine}} } \examples{ distMeeus(c(0,0),c(90,90)) # on a 'Clarke 1880' ellipsoid distMeeus(c(0,0),c(90,90), a=6378249.145, f=1/293.465) } \keyword{ spatial } geosphere/man/antipode.Rd0000644000176200001440000000222714131143521015076 0ustar liggesusers\name{antipode} \Rdversion{1.1} \alias{antipode} \alias{antipodal} \title{ Antipodes } \description{ Compute an antipode, or check whether two points are antipodes. Antipodes are places on Earth that are diametrically opposite to one another; and could be connected by a straight line through the centre of the Earth. Antipodal points are connected by an infinite number of great circles (e.g. the meridians connecting the poles), and can therefore not be used in some great circle based computations. } \usage{ antipode(p) antipodal(p1, p2, tol=1e-9) } \arguments{ \item{p}{Longitude/latitude of a single point, in degrees; can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p1}{as above} \item{p2}{as above} \item{tol}{tolerance for equality} } \value{ antipodal points or a logical value (\code{TRUE} if antipodal) } \references{ \url{https://en.wikipedia.org/wiki/Antipodes} } \author{ Robert Hijmans } \examples{ antipode(rbind(c(5,52), c(-120,37), c(-60,0), c(0,70))) antipodal(c(0,0), c(180,0)) } \keyword{ spatial } geosphere/man/greatCircle.Rd0000644000176200001440000000163114131210620015510 0ustar liggesusers\name{greatCircle} \Rdversion{1.1} \alias{greatCircle} \title{ Great circle } \description{ Get points on a great circle as defined by the shortest distance between two specified points } \usage{ greatCircle(p1, p2, n=360, sp=FALSE) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above} \item{n}{The requested number of points on the Great Circle} \item{sp}{Logical. Return a SpatialLines object?} } \value{ A matrix of points, or a list of such matrices (e.g., if multiple bearings are supplied) } \references{ \url{https://www.edwilliams.org/avform147.htm#Int} } \author{ Robert Hijmans, based on a formula provided by Ed Williams } \examples{ greatCircle(c(5,52), c(-120,37), n=36) } \keyword{ spatial } geosphere/man/data.Rd0000644000176200001440000000053613472155746014230 0ustar liggesusers\name{wrld} \alias{wrld} \alias{merc} \docType{data} \title{World countries} \description{ world coastline and country outlines in longitude/latitude (wrld) and in Mercator projection (merc). } \usage{ data(wrld) data(merc) } \source{ Derived from the wrld_simpl data set in package maptools } \keyword{datasets} geosphere/man/geomean.Rd0000644000176200001440000000141313472155746014725 0ustar liggesusers\name{geomean} \docType{methods} \alias{geomean} \title{ Mean location of sperhical coordinates } \description{ mean location for spherical (longitude/latitude) coordinates that deals with the angularity. I.e., the mean of longitudes -179 and 178 is 179.5 } \usage{ geomean(xy, w) } \arguments{ \item{xy}{matrix with two columns (longitude/latitude), or a SpatialPoints or SpatialPolygons object with a longitude/latitude CRS} \item{w}{weights (vector of numeric values, with a length that is equal to the number of spatial features in \code{x}} } \value{ Ccoordinate pair (numeric) } \examples{ xy <- cbind(x=c(-179,179, 177), y=c(12,14,16)) xy geomean(xy) } \author{Robert J. Hijmans} \keyword{methods} \keyword{spatial} geosphere/man/daylength.Rd0000644000176200001440000000170513472155746015275 0ustar liggesusers\name{daylength} \alias{daylength} \title{ Daylength } \description{ Compute daylength (photoperiod) for a latitude and date. } \usage{ daylength(lat, doy) } \arguments{ \item{lat}{latitude, in degrees. I.e. between -90.0 and 90.0 } \item{doy}{Interger, day of the year (1..365) for leap years; or an object of class Date; or a character that can be coerced into a date, using 'yyyy-mm-dd' format, e.g. '1982-11-23' } } \value{ Daylength in hours } \references{ Forsythe, William C., Edward J. Rykiel Jr., Randal S. Stahl, Hsin-i Wu and Robert M. Schoolfield, 1995. A model comparison for daylength as a function of latitude and day of the year. Ecological Modeling 80:87-95. } \author{ Robert J. Hijmans } \examples{ daylength(-25, '2010-10-10') daylength(45, 1:365) # average monthly daylength dl <- daylength(45, 1:365) tapply(dl, rep(1:12, c(31,28,31,30,31,30,31,31,30,31,30,31)), mean) } \keyword{ spatial } geosphere/man/geodesic.Rd0000644000176200001440000000663114131145601015061 0ustar liggesusers\name{geodesic} \Rdversion{1.1} \alias{geodesic} \alias{geodesic_inverse} \title{ geodesic and inverse geodesic problem } \description{ Highly accurate estimate of the 'geodesic problem' (find location and azimuth at arrival when departing from a location, given an direction (azimuth) at departure and distance) and the 'inverse geodesic problem' (find the distance between two points and the azimuth of departure and arrival for the shortest path. Computations are for an ellipsoid (default is WGS84 ellipsoid). This is a direct implementation of the the GeographicLib code by C.F.F. Karney that is also used in several other functions in this package (for example, in \code{\link{distGeo}} and \code{\link{areaPolygon}}). } \usage{ geodesic(p, azi, d, a=6378137, f=1/298.257223563, ...) geodesic_inverse(p1, p2, a=6378137, f=1/298.257223563, ...) } \arguments{ \item{p}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first column is longitude, second column is latitude) or a SpatialPoints* object} \item{p1}{as above} \item{p2}{as above} \item{azi}{numeric. Azimuth of departure in degrees} \item{d}{numeric. Distance in meters} \item{a}{numeric. Major (equatorial) radius of the ellipsoid. The default value is for WGS84 } \item{f}{numeric. Ellipsoid flattening. The default value is for WGS84 } \item{...}{additional arguments (none implemented)} } \value{ Three column matrix with columns 'longitude', 'latitude', 'azimuth' (geodesic); or 'distance' (in meters), 'azimuth1' (of departure), 'azimuth2' (of arrival) (geodesic_inverse) } \details{ Parameters from the WGS84 ellipsoid are used by default. It is the best available global ellipsoid, but for some areas other ellipsoids could be preferable, or even necessary if you work with a printed map that refers to that ellipsoid. Here are parameters for some commonly used ellipsoids. \tabular{rlll}{ \tab \code{ ellipsoid } \tab \code{ a } \tab \code{ f } \cr \tab \code{ WGS84 } \tab \code{ 6378137 } \tab \code{ 1/298.257223563 } \cr \tab \code{ GRS80 } \tab \code{ 6378137 } \tab \code{ 1/298.257222101 } \cr \tab \code{ GRS67 } \tab \code{ 6378160 } \tab \code{ 1/298.25 } \cr \tab \code{ Airy 1830 } \tab \code{ 6377563.396 } \tab \code{ 1/299.3249646 } \cr \tab \code{ Bessel 1841 } \tab \code{ 6377397.155 } \tab \code{ 1/299.1528434 } \cr \tab \code{ Clarke 1880 } \tab \code{ 6378249.145 } \tab \code{ 1/293.465 } \cr \tab \code{ Clarke 1866 } \tab \code{ 6378206.4 } \tab \code{ 1/294.9786982 } \cr \tab \code{ International 1924 } \tab \code{ 6378388 } \tab \code{ 1/297 } \cr \tab \code{ Krasovsky 1940 } \tab \code{ 6378245 } \tab \code{ 1/298.2997381 } \cr } more info: \url{https://en.wikipedia.org/wiki/Reference_ellipsoid} } \author{ This function calls GeographicLib code by C.F.F. Karney } \references{ C.F.F. Karney, 2013. Algorithms for geodesics, J. Geodesy 87: 43-55. \doi{10.1007/s00190-012-0578-z}. Addenda: \url{https://geographiclib.sourceforge.io/geod-addenda.html}. Also see \url{https://geographiclib.sourceforge.io/} } \seealso{ \code{\link{distGeo}} } \examples{ geodesic(cbind(0,0), 30, 1000000) geodesic_inverse(cbind(0,0), cbind(90,90)) } \keyword{ spatial } geosphere/man/mercator.Rd0000644000176200001440000000151213472155746015126 0ustar liggesusers\name{mercator} \Rdversion{1.1} \alias{mercator} \title{ Mercator projection } \description{ Transform longitude/latiude points to the Mercator projection. The main purpose of this function is to compute centroids, and to illustrate rhumb lines in the vignette. } \usage{ mercator(p, inverse=FALSE, r=6378137) } \arguments{ \item{p}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{inverse}{Logical. If \code{TRUE}, do the inverse projection (from Mercator to longitude/latitude} \item{r}{Numeric. Radius of the earth; default = 6378137 m} } \value{ matrix } \author{ Robert Hijmans } \examples{ a = mercator(c(5,52)) a mercator(a, inverse=TRUE) } \keyword{ spatial } geosphere/man/intermediate.Rd0000644000176200001440000000263214131210620015740 0ustar liggesusers\name{intermediate} \Rdversion{1.1} \alias{gcIntermediate} \title{ Intermediate points on a great circle (sphere) } \description{ Get intermediate points (way points) between the two locations with longitude/latitude coordinates. gcIntermediate is based on a spherical model of the earth and internally uses \code{\link{distCosine}}. } \usage{ gcIntermediate(p1, p2, n=50, breakAtDateLine=FALSE, addStartEnd=FALSE, sp=FALSE, sepNA) } \arguments{ \item{p1}{longitude/latitude of a single point, in degrees. This can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as for \code{p1}} \item{n}{integer. The desired number of intermediate points} \item{breakAtDateLine}{logical. Return two matrices if the dateline is crossed?} \item{addStartEnd}{logical. Add p1 and p2 to the result?} \item{sp}{logical. Return a SpatialLines object?} \item{sepNA}{logical. Rather than as a list, return the values as a two column matrix with lines seperated by a row of NA values? (for use in 'plot')} } \value{ matrix or list with intermediate points } \references{ \url{https://www.edwilliams.org/avform147.htm#Intermediate} } \author{ Robert Hijmans based on code by Ed Williams (great circle) } \examples{ gcIntermediate(c(5,52), c(-120,37), n=6, addStartEnd=TRUE) } \keyword{ spatial } geosphere/man/randomCoordinates.Rd0000644000176200001440000000211314131210415016735 0ustar liggesusers\name{randomCoordinates} \Rdversion{1.1} \alias{randomCoordinates} \alias{regularCoordinates} \title{ Random or regularly distributed coordinates on the globe } \description{ randomCoordinates returns a 'uniform random sample' in the sense that the probability that a point is drawn from any region is equal to the area of that region divided by the area of the entire sphere. This would not happen if you took a random uniform sample of longitude and latitude, as the sample would be biased towards the poles. regularCoordiaates returns a set of coordinates that are regularly distributed on the globe. } \usage{ randomCoordinates(n) regularCoordinates(N) } \arguments{ \item{n}{Sample size (number of points (coordinate pairs)) } \item{N}{Number of 'parts' in which the earth is subdived ) } } \value{ Matrix of lon/lat coordiantes } \author{ Robert Hijmans, based on code by Nils Haeck (regularCoordinates) and on suggstions by Michael Orion (randomCoordinates) } \examples{ randomCoordinates(3) regularCoordinates(1) } \keyword{ spatial } geosphere/man/span.Rd0000644000176200001440000000322513472155746014256 0ustar liggesusers\name{span} \alias{span} \alias{span,SpatialPolygons-method} \alias{span,matrix-method} \title{Span of polygons} \description{ Compute the approximate surface span of polygons in longitude and latitude direction. Span is computed by rasterizing the polygons; and precision increases with the number of 'scan lines'. You can either use a fixed number of scan lines for each polygon, or a fixed band-width. } \usage{ span(x, ...) } \arguments{ \item{x}{a SpatialPolygons* object or a 2-column matrix (longitude/latitude)} \item{...}{Additional arguments, see Details} } \details{ The following additional arguments can be passed, to replace default values for this function \tabular{rll}{ \tab \code{nbands} \tab Character. Method to determine the number of bands to 'scan' the polygon. Either 'fixed' or 'variable' \cr \tab \code{n} \tab Integer >= 1. If \code{nbands='fixed'}, how many bands should be used \cr \tab \code{res} \tab Numeric. If \code{nbands='variable'}, what should the bandwidth be (in degrees)? \cr \tab \code{fun} \tab Logical. A function such as mean or min. Mean computes the average span \cr \tab \code{...} \tab further additional arguments passed to distGeo\cr } } \value{ A list, or a matrix if a function \code{fun} is specified. Values are in the units of \code{r} (default is meter) } \author{Robert J. Hijmans } \examples{ pol <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20)) plot(pol) lines(pol) # lon and lat span in m span(pol, fun=max) x <- span(pol) max(x$latspan) mean(x$latspan) plot(x$longitude, x$lonspan) } \keyword{methods} \keyword{spatial} geosphere/man/centroid.Rd0000644000176200001440000000255213472325401015111 0ustar liggesusers\name{centroid} \alias{centroid} \alias{centroid,matrix-method} \alias{centroid,data.frame-method} \alias{centroid,SpatialPolygons-method} \title{Centroid of spherical polygons} \description{ Compute the centroid of longitude/latitude polygons. Unlike other functions in this package, there is no spherical trigonometry involved in the implementation of this function. Instead, the function projects the polygon to the (conformal) Mercator coordinate reference system, computes the centroid, and then inversely projects it to longitude and latitude. This approach fails for polygons that include one of the poles (and is rather biased for anything close to the poles). The function should work for polygons that cross the -180/180 meridian (date line). } \usage{ centroid(x, ...) } \arguments{ \item{x}{SpatialPolygons* object, or a 2-column matrix or data.frame reprenting a single polgyon (longitude/latitude)} \item{...}{Additional arguments. None implemented} } \note{ For multi-part polygons, the centroid of the largest part is returned. } \value{ A matrix (longitude/latitude) } \seealso{ \code{ \link[geosphere]{area}, \link[geosphere]{perimeter} } } \author{Robert J. Hijmans } \examples{ pol <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20)) centroid(pol) } \keyword{methods} \keyword{spatial} geosphere/man/midPoint.Rd0000644000176200001440000000137013472155746015077 0ustar liggesusers\name{midPoint} \Rdversion{1.1} \alias{midPoint} \title{Mid-point} \description{ Find the point half-way between two points along an ellipsoid } \usage{ midPoint(p1, p2, a=6378137, f = 1/298.257223563) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{As above} \item{a}{major (equatorial) radius of the ellipsoid} \item{f}{ellipsoid flattening. The default value is for WGS84 } } \value{ matrix with coordinate pairs } \author{ Elias Pipping and Robert Hijmans } \examples{ midPoint(c(0,0),c(90,90)) midPoint(c(0,0),c(90,90), f=0) } \keyword{spatial} geosphere/man/alongTrackDistance.Rd0000644000176200001440000000171413472155746017056 0ustar liggesusers\name{alongTrackDistance} \Rdversion{1.1} \alias{alongTrackDistance} \title{ Along Track Distance } \description{ The "along track distance" is the distance from the start point (p1) to the closest point on the path to a third point (p3), following a great circle path defined by points p1 and p2. See \code{\link{dist2gc}} for the "cross track distance" } \usage{ alongTrackDistance(p1, p2, p3, r=6378137) } \arguments{ \item{p1}{longitude/latitude of point(s). Can be a vector of two numbers, a matrix of 2 columns (first one is longitude, second is latitude) or a SpatialPoints* object} \item{p2}{as above} \item{p3}{as above} \item{r}{radius of the earth; default = 6378137m} } \value{ A distance in units of r (default is meters) } \author{ Ed Williams and Robert Hijmans } \seealso{ \code{ \link[geosphere]{dist2gc} } } \examples{ alongTrackDistance(c(0,0),c(60,60),c(50,40)) } \keyword{ spatial } geosphere/DESCRIPTION0000644000176200001440000000167414131644322013751 0ustar liggesusersPackage: geosphere Type: Package Title: Spherical Trigonometry Version: 1.5-14 Date: 2021-10-12 Imports: sp Depends: R (>= 3.0.0) Suggests: methods, raster Authors@R: c( person("Robert J.", "Hijmans", role = c("cre", "aut"), email = "r.hijmans@gmail.com"), person("Charles", "Karney", role = "ctb", comment="GeographicLib"), person("Ed", "Williams", role = "ctb"), person("Chris", "Vennes", role = "ctb")) Description: Spherical trigonometry for geographic applications. That is, compute distances and related measures for angular (longitude/latitude) locations. BugReports: https://github.com/rspatial/geosphere/issues/ License: GPL (>= 3) LazyLoad: yes NeedsCompilation: yes Packaged: 2021-10-12 04:44:25 UTC; rhijm Author: Robert J. Hijmans [cre, aut], Charles Karney [ctb] (GeographicLib), Ed Williams [ctb], Chris Vennes [ctb] Maintainer: Robert J. Hijmans Repository: CRAN Date/Publication: 2021-10-13 21:00:02 UTC geosphere/build/0000755000176200001440000000000014131211251013321 5ustar liggesusersgeosphere/build/vignette.rds0000644000176200001440000000033414131211251015660 0ustar liggesusersuQ0 Аx) b 3ěO.Skf!"IJ1} S:%qRe * d|t.Ӓ XO`<818Kc P qͧA^IqFiqc߄mJ#U5_PF^.by(7_geosphere/build/partial.rdb0000644000176200001440000005453114131211232015455 0ustar liggesuserskpW(> IQjRP@E"(IQ%5H=YDUH:3ZֆM_p8f=;O;:Ǝ7;?݈a;7Ow U T*QsνGဢ(9eoOC1e4~q{~k6׍ _>u`7V:̊9' <H_:4RѨt޽csiQ*z]lt{>X&iT·svPZ8,_zs|Ů77߾uw|eת3Stijn|]3fju1N*T;XW;|<{rs~uui]Χ=MЇ_w/G<׻e͡{{Ƈ8& Jb G 1R$V&u!Cd:P^>LKN!Їҷ<%m1B]C4ʱmwט\{$ڵR-Փr_Vkj ]HA帀(1`B]MӱfoՐVehxBxDDJgD+UU[-ΰ+g>\-^}1}KKdaRw5həM\0K_J\-41Q:@d1ysQ9Q+6Č5XVU9MZSXQ-HO@3r̓P3䙻(i!OF8Del74}S뭚jaUښݾ> zi޴ Z [#1}cfULiOl}(cF/.CDg;&}wh/@a'o;/`َLπ>[/ߝ.=Fv.N]+M].\qrTERFr.P#N^~ }*/?19%R~ "=Ժ;I ˖ǡ"Y<1!441Zc*sDR t=aRO@W?::a8MCo[3̺Xߊ_awZVy3LF?Vk?昐OI'`>=vYt׶p"8sU[S[5=Rk-w s2=|ɻ:7_%m g !Xp@l~iZi}N1\o5')ݸެi -lM'AO&gy)S]i }X΂}ۖ Uّ*xєA3Q#}Ƴ#vErB/ScuL+lP,;PxaI9f;, Q+߳4gn`9nzU1 9DʍmZ`"[noԽI渵W{H._aSc33E*EhhC|iӼoj3jum}> f]re{P5ӥbib51Q(MM\q@߻{c; $=5Պit{}UNڧaItM&S;WXY nZWǝ>hIjNv%^tz?+|rU'|h5ՊAM8ee'\d4o녘OjmO]y+[dӄ3Scԛ~g=[XpJxJء'}V X,״l36޿REW+F}3GEXj؆YF۫5}h-9V+}XS 7zM_"ae6?f4Sb3]Rr~ T, 70]`%%(6<+@mځfC땛57 t")sm ԉcF%.Eo.8,=gER}Ⱐ% :+bNEkf#$i b jzaG_>0.: iBWbx􉏮o g^"6\A{A{m$4?\ :Noy 8 z26oZtoaR*:1Ap6lOD}e'V`8`̡JO+>'`Fq 41#m̂ld1<[qe;%Z^oc\|%?V(MN0=QqD ? GsA:7RCy%{r\o7γ%UjnoGj3m?,0 jn$tz |+ r-w-hlƗoyzmP}0y?10Y`x{77kprjx^$q\[Q[~FimY6kN]ǚ`'FڨK9 ! t27kPϢқ^^ ߳Qyvai߁>Ҳ5S;Z%J(D{)E%:2)4BR7 k6#pB3H˶oU2݌:Z Msf4 pw-0_BE(1:jNP ; (iqtvx@' a~{N[eklW9+ؐ#{˚{Xbo~h_Cս_We=Ym{gxy~{}z{S*MpU|Ȗ-W͍nm-=};@jZ&[54&V?P\y _6Fҭ5+7԰£o4lw0`iq%ueKT[ hC~OU}MxO{߀whNHtdC/vluH]/cuP$8 N;wm/Wafٙm]Ԫ{˖m hq%6kLDFUpD9'|:+kxlz5Q5ߥSجzyG}=}羧ϭoή)3';v }nQx+om;=I8цʽͦ]] j}b53 @}e[][p[8(~mF~_mTin5َGiv }.&~|ɮ "'=ʞO] PLjS"Ym۶N}.kB=k,EOX@mYn_ґpĐϞ{g߷W-c__.qkC57qGn >5+RT|.~ݕsC,Ww0>*|E/}hng?3$E(l\T~gZeT 㰧o5~j;v\5;ŷ^6κQg3}wqe dܗKп-8zw>U}'*;Qr"SWFnbj益RgEvW`LnjFikjvMFPS=[BnALl "!ofTS:R.޽@\w:E5i$nb-h#JL!Q{ߌ ؛ks3r}h*~8ǎ̒Z9nzOS}dqctנHy_7P$ym#JbCk_Tq0ܐ(r}|+L^wfLS! ^J| \3(lT5V38H }Y͝kQ}{{ d luba덖Ѳj35qگ{}zx"3 z#}+VvuhWYMoh,O`}{&<0AȼB҆GtIM.oxt YW{4=&xGT']=vRB1>Q(64s9dS"|T`ɝo !("YNu8[W>l_#ȕ@`Tq*^qVmh9Y2x\2r{WϺ1|re'to} 7IoYVYb nzs5(7$a(ц4I~` .xyM^vS-P t!38sҶMtCbn.o#^+&̚~>W1>ښyGKhAq4_߀ 5g[ ʶ݌[POpH\$n/CRhnO?%q$<Ng_@>;I렯'npbMD;{~|Jty cF3i4X,_۽-+tzm&8Zjd?Ͳ0vjH#ch^qRPp 5'nکpBtw6fJ:1**V~6" Vb$tM#}Ƴ8{lONlV3 O AjwFO$ƌi5,F,VUʹ'uC`vGΣp̨\8FsЋDJ&_6 xUyJ/VwWIz@Z528~k(qcql%qcqls 1^'΁MdLgݿ*scqv %"7g!scwHo,N7;:HPvۍϺ^l3'drGXC麣8⠑${ sGq[Q,9D)+∦Lb;/(]wK% JL<PjEL]/$RN@#pbG# Zgt@@3Ⱐ$ˊwZcDž;(2D@_1"K]FuxR麃8]b$q, p 8z$Fy.%ބ؏ SwU%T0̨;%93\ƠibV?G8v*+[ͱB%?9Q(vZ"N]Ԁv@mJL cF-h6z*~=nӊUq6 %F:b- 4Q=|YSdxMww{/=keke̖ik5-tMV he9.}hp\q:A:?uU-zx b{D@A=`1bJTJgDȗΉJԜvKO&{x^hc! Sr>aRTL)4ܴB  Q%cSӝ JV^s|Tonu8;ɤ ؼ9()d#/=㷱c<njUDr=XeHQ!hagAoy^^$U hCM GzC>#G3?1=)#ʧd5A4#5!hcJMjn}3B̶|V sR+5C|`6Q"(3yKsȥBЗ#3VbO'FiJ/ Jx|IA-tMg+Qqxៀغ]m͜;QRoWbժXۮF;J-̴'h!p .z iQRztUB~%0VD~ѯa&En\lۗ'ʺR^|K8z$}/&yQRb,gJȋU ׋3Lx N>St@DIh zX?|>Mx]J?&\cd[.^OéO'{Ţ`Z]5NYdhe#V٬Zk֔UA5 g(:-+b>дv.[m< hɲ5J_x=C߳V>Vͪat{әD6%T?kM4#"7}'{VƤi<`Fϣ9sIw xBY 2ިй^;^0ʗ[wTtz>;\| Lz6LԿW2jdZx7GFUvﷹTY؎K_J۱G xCui;iw?n_6 bs_Ȏ|ʻ[/Uf<܀/K: "{~iGsf40hcF8"YaϾˋ.M0*mp29+{kg1$u![1_昱jnĘĎZY WFlumK)Jxp\l.CK`xZΔsȧG|?8J頀(IZ`4!򔦡V4$=jZVd\8 m= m"Ƒ66HCp\ū\$-^$&fihuLd>"ih3GrIC=G4V>0-hi3IC]"hS>> fLO<ihJWڈF:ihI' m?)qk}J4В ?~thDВ~tMr~tMkQJ@*4O n,4OyP'@Y jսG6SZ41VYLaf2Z~@RrP%W(/%HEPR\5 `>%6+=! ޡ.4G.9.SBOCm3Tj5'`dW2gcdr1241Z SSrdܔ COGi"v"/ޣ=3)cJcvʗm/۹!Hfipւ=ܔ} R*(-L9܈:b{H@ 1bJ IAҕrr9%L&v%m1>cRDאo=Bf{nj\CL5rQGq,\R+v 3ɤC#]8( $yJyE2Vg6vͅ#D!Q"jz]_ߨm2Ri1X'34ďlUkcKneu?^|iy"EB wuEŜбy)3wbkOLӚ YF|McF\d3SJ`*,Xsr純2R,pF$3RCG3rh<U'd )vO=kcwOH٧l{kr&(#f~OB)|l.ʟ)1u4;e \@[25)!W2CbH{ܹ[Xw>+N`hy,G- A9bK%7r9T%j˓X>0@o ľ. JM$ܟc2M!t~A89,djv?HOJ@?HDIܗ zX}#tۄ~=y?L o§$ofl]12%O1ihcF@gg9 4Qr}66bW<ǜAQ4*΋%VzJ益y)[3v>[VD3(춻Y@҂HkjMc5cՙIV[;Z35g^f8hn=CsVJMD;}SmyМd&ئb 6Ou9զ#j3  G!}ғRmB`άN9Fn&A i6al)I{Q><n¦'Ѯh"D}nG)&#v<0br) rG|Y45kjo~"n8zPF2WUQx#JS91]t{)A˶=z_6J%B*>u\ZB%^91а()z)/0 %91E+_I?fcQRkEЋ(aI@[cɸmG?JE8%fSZsm {M 9`1ׅ7:>G/HA[t29/)A)93:/eKl9H^՛tʫ"=Jp=\pQ zdsTލundEoz%〨+hq% EzX |,|!r@GQC XJڦxB{ fr]C[+w&"\$ 0Ő!2"L7" C8ǧ*"ƀ)\\\uT>"*1k4Qrׁ)\a C.b\>0Ð뢧6fr]ܻ\50ԁ\)䚽mYD2%Eb pg ]EB #ƽ\YH w,k w(\Qv20ÝEb_Twi" |\50cEd D2%3\ cguyfv85?+E`13\0Ø/ D5_BoS20Ø0՘\\B b. c|s-i՜k$sh@s;1Ø nŏhb.[pL"暚\,gb̕J1]0ݘ^fs%J3sSӒ]m`1[fss20Ø?0ks6s0Øk㎹kPsb ٘D2%3\<0Ø؏3MK\$TbE c.b `1q0"K&sMgg"t)\naE jEL c.b@b.~ ,tc.fsԁ\16dJj1fsaӍy`10kb8-E`13\0Ø/ D5]<7;?7)颷)\naE jEL c.b@b=nc1q3^c [3*eSk4?9 LI-"v c.b?,`1q=0"#&sM H"0Ř\~Atc.z aEL"Dqc.b 0"L5"e`1 `F1Ws6s0ØЁq\oe<n:TA ZEz\~Xtc.zaEGLfoqFn@#c.bfsӍ5`1_0k89?yj$颷)\naE jEL c.b@@˗k5VMSn:haV$(iQ8ƣuԘX3mP=aM(>ME\WQ3AK Nˬp=\-ߋN$2ج5ˇX9t{"93j%hcFژbM)Ż#JD۠ qniƺ67[*xnZ.tT͆Vi(p\lm oĜli͉cFMkͧsYV 8DʍmZ`)Hl0u{];9nm(;?mWLѣDIçڧMYm-ՂejKU30j֕+WVUC/ ~/8](&&.[幱ԯ7V,.Pɛ*jJGt=Z{;lS[4 &#[$z T3˿C7a7b |~4}51@"V cԇVSh}2 M(hى$?nY)Mz!Sf}eZqSo*c4Ԙc/㩱GO1|+o%<:H7f-SokZV{;8xb4w-[r+UgUQU#N۠1[z{i-eV5jEݠcW]z&~O"4dʚe0KdLSW͔weJ 5S/߀&zvJ@*lE˞yԊ2=1HO ǡ)' J湂:qh~%~pšSVH Tu^6,^=<Zb@T~!t3Z I<<] =هsW$ye]g2HH3%=fz<"prVh9?9J { >nx-=bs@||alnsBtO:>c?sj;Yy?#(6'Ϲi-KB?obbdpZzSL?&J@jWvf3הLg>'`FsW) #+a(r[' J~~0?1:ZE4ӱmYT7k n)[]rqk0aVSuBEA(1kdžY DӶ ?. Wxx" DRnG~l4ْ5Brun\[2nk]oo}{rfj2]].M͍GXzmҷѷ7m:ݳZ5֖4A@M-4yo߻ws ;?TCRׯ?p~wbspt]mFT[_>˷G:޾״mlP~uASꂈq;b9Ri<=$#/ׁJ]3{@J&vK%m1@;~x T庿t/ -h6 ?! Jb8F]OGQ+o*JŇm9Umݮ /olHF,Ǝ PZbCDgH@ZveUe7SMST\xNܔu6'% Яּ4*諑 xkf2VM fu-1((D?Q:&Z~ &ڨ5V3Yik͚6XyzX(3LIF:25iVtRFa;}_}\լ7mzs7lp3;|ycJ!R`[OxbE17K֜,0ur8.\*n.uFear&2U,uݯSR\}X>IȻ@yU%VrVsF{V?x$I~|ÚXVUK0c5 a"[vU9a) k~lF_j$Va9n:C#-f!ZpFc30vW%%YBi/AcZ=-}~ 'F@ԛBd $W?0&է:(}8 IQRl*!V(1uk?jN'Tzr{gԞ=Ǫj6{ZV[woةb~?y<=uô( J^~2Y__x~fk p&BqI4uדiERShMDIݿOO%ŞcZVMsfVddv=ߓZ[yF_-!(灗󊷮15ֱEaݤgQm;ƺiVX_@n*l{]hc4?#YDq\R-/a|iPrON&e-݇#Jȶmg &hl;SY;m ;V16 px_@Ii&ɘ/@>ɘ#zɘσl}"cF>} ͧCsAQ"j%dyh-qC*Oi2fM`UJƼJ&c&i5AjMF弌1_ؓ1+bɘc(ḏ 5 d*Ob΁M2sn&Y$cN.~,";s$gd#9{NƜl;:HdE(F;Ŏ-oC9mӑYt%c8hdo}1GhS&'@!3 SWJW2戦L$3KJW2- 7JW2uDOH8S"ҩ^Q;Է4Iߡ-VLi?!$۽@\#%K&vjHbq|͕7?- Jb~c\Tqz;Z%n,k&kjM$^})Fʩ&d~m3%1EN%VzFmJTmi׉@:Ng5׌'W[e\t/5/cUk_غHsSɉ=E߶L@FEur% jn\Bz[ǚÐR9{qųm}S) 3[Д<>d}т'pf}3mC|@OUϴX,1(4HȯQ3VW;)vVJ!6!jlDpF#ųe=$s3NBuC[+R a+i}s5%PMK:cqiT;?=L(i7hDiP3,F+"[MK},y= }<}%'DIey#I줄\<[MOejereŬ`ɹg~%!Xp@l>w"+EeMBA4}pL>MgDIۧysqU 7ѯNj^}1y'3]-=Q(i;8.DŽXOx^ۉdb <~ sL$0^)?le|Y؃6ۑ, &7wŢ`}Zi3Nvlo m̃Vz8z*y~'-G뻉(1~lُ#AQ41#m pd1bK'`dqϽۘnE\s c;ZMVHA SR]/0Ø nE\3 \gfSrYs<0Ø/nE\3I\ũY.60Ř-3}SiaE)&<+ނ\w̵YVslE ZEz\~Xtc.zaEGL"暚\,gbE c.b `1q0"K&sf&禧%c.b 0"L5"e`1 `F1Ws6s0Øԁq\5|91܄lE ZEz\~Xtc.zaEGLboqrզ%b.L1"vy`1_0ݘ^fs%ӳ3c.b 0"L5"e`1 `F1פmL7"9`1d&s\$ )\ĮaEL7"\~DDb⴬)\.0" sk c.b$`1tqܤse`1/`11-33^Ηj6fj`V k -VlèYW\Y>T =?|4<9tiXx #ݘ9S|#NC>i5o[fLO|Պhh޵oɭT"[VFU: Fl,oɚZY֜fu>^v=h /bh?[?<А)k,M1O_*6S^ܕ)%,KנNr~!BUTb+Qb7^LJ( az!rm%ԉcF;`Y UQ"t2~MoU[RpEc㠏6d]}"}%'D}eg$T17#7H 93nAS(ѽLDaj~01Z`SLhhAoCYà# 2xM`(O HI2hk|Oz7vofD;Q{ ujXH(LxcìpJr#p4)œ{Vd|/ȯ3[]|1^]2nk]oo}{afj2]].M$jn8ӓ]e+I_;D_ߴw8cˑ5Cu] 9%}O>eAo߻ws ;?TCfkճp ~wbs/q4uIoWY?;J:n״m|P~!+m!7g)E(b$4r-%_jMWTۮC%m1@;N/4Pαys >UQQc41^}B aF_jTm6uީ9!8f<`sqI=GX}B9sغ]s>/[Cp9ќxTq%Vz~}i墮5#,fo6f#ԍTUnj5Fjv` L554R'ϱ+Η:aښUdwF_gohs{تjiUf4`׼XmZ5:Z 6/jYS?rhjf5r8T*-tde7}c\oo1zC#&P-OHUڦ+]G,fUT٨jZ4/wz~ǣ czԠC?m!/1u^ ף #v\넷H?/MEd,򯶐4,πф-"[dfZM=Rk-f$ w&P򒆡 MP/Sc.l>L4[$__&L;@8iO=R;֝8aXLhWYMoh/!۱Xi4lQ4j/7v;aם/mQgmP"PU7kZcp͓葾pw<|wtф15\H{=`d4l'{4a /x4arȵ6*m=$EG݈6iħ^'f5zm޲l Pw"FO[Um5|RM(os Ն~Ը#k_T ~0Kh,uъѨZlzt|vĄkřs+ܾʼn[`7\?,J65 a ں#CZN #`j'ЦO#!X|D!鱪Z 'S̙5G3fipO?V٬m3O3k6X0W~ECfΒX%Βة 1t0 n$| q (܂c< AxMVwio8҄8Sӡ.yzBOr~}+-9hcBNc-SSݬԴQH'0='ua8nj<41^'NTW cfuSˏ3ua5ܔ.z!qO}^}-}WDOa}1#rmKh-*/V65yRJFkxi)}B+(mw5^ef-95c4 !QrKXujכ{'[;?-0uav\ir-'犓3''ff X,È<\\ IY듉yp\4$LE%)g')/V.y 98s8Aq.!I9t10I۠o8jY*BȞ&y(-1y(d;*BDR 1kPr_LƖ>l_q~V O2TgJWd{U _N:SZްX~M7ύ=w- #KTYGV앝_~Ul )?Wm6}Qn]Ox#-֥J'`ͺyG-6LǏGyZ4bt'މ_oGb~/y? JN1!_Ox~fkrҗ,\UЯ&ga렯~Q@E4d{3Ӑ8z 6XbֶA*H/n pd"4O8z*+IlYm ۖ Ȏ=ɼ09hcqJ Q#o;`o`L7X=TK8ո#g3#嘑 K1xpT괞; 8v;l‘c ")OxnF>H!s+8.)0\A0_-=蟤 tUƀӠЯ; x52_́΀,LYfA_,Gٖ#. Se qf5ˡh8f':vJN Q+sU%VQk5m̋=HMܗ7Dzu14'5"41^A+ޢGZ䂐 h炐UyJ/V BvWIz" BHZMZ:p. B\+b&Q&?׀|$?ߎ:6 Bu3 Bu!% &H\93!#9{ $^.-S.y-`}(g1=t\"VP.8hsA\yOLܚ@ B$ ?~t]є\BuAH낐uDOH=ʯ( az!rmIԉcF;S`=YPXi(rMvuzJsɉ' 33.](0c<=6ۑ3>Ft3PpPl]CYTө~4]}N:a39J'ZWcGDˑ<'Z}-eb\@Ÿ pv`' )2 #include #include #include #include "Rmath.h" double mod(double x, double n) { return(x - n * floor(x/n)); } double normalizeLonDeg(double lon) { return( mod( (lon + 180), 360 ) - 180 ); } double normalizeLonRad(double lon) { return( mod( (lon + M_PI), M_2PI) - M_PI); } /* Convert degrees to radians */ double toRad(double deg) { return deg * 0.0174532925199433; } double toDeg(double rad) { return rad * 57.2957795130823 ; } geosphere/src/geolib.c0000644000176200001440000000525413472155746014453 0ustar liggesusers#include "geodesic.h" #include /* Robert Hijmans, May 2015 */ SEXP _geodesic(SEXP longitude, SEXP latitude, SEXP azimuth, SEXP distance, SEXP pa, SEXP pf) { PROTECT(latitude = coerceVector(latitude, REALSXP)); PROTECT(longitude = coerceVector(longitude, REALSXP)); PROTECT(azimuth = coerceVector(azimuth, REALSXP)); PROTECT(distance = coerceVector(distance, REALSXP)); double a = REAL(pa)[0]; double f = REAL(pf)[0]; double *lat1, *lon1, *azi1, *s12, *xr; lat1 = REAL(latitude); lon1 = REAL(longitude); azi1 = REAL(azimuth); s12 = REAL(distance); double lat2, lon2, azi2; struct geod_geodesic g; geod_init(&g, a, f); int i; SEXP r; PROTECT( r = allocVector(REALSXP, 3 * length(latitude) ) ); xr = REAL(r); for (i=0; i < length(latitude); i++) { geod_direct(&g, lat1[i], lon1[i], azi1[i], s12[i], &lat2, &lon2, &azi2); xr[i*3] = lon2; xr[i*3+1] = lat2; xr[i*3+2] = azi2; } UNPROTECT(5); return r; } SEXP _inversegeodesic(SEXP longitude1, SEXP latitude1, SEXP longitude2, SEXP latitude2, SEXP pa, SEXP pf) { PROTECT(latitude1 = coerceVector(latitude1, REALSXP)); PROTECT(longitude1 = coerceVector(longitude1, REALSXP)); PROTECT(latitude2 = coerceVector(latitude2, REALSXP)); PROTECT(longitude2 = coerceVector(longitude2, REALSXP)); double a = REAL(pa)[0]; double f = REAL(pf)[0]; double *lat1, *lon1, *lat2, *lon2, *xr; lat1 = REAL(latitude1); lon1 = REAL(longitude1); lat2 = REAL(latitude2); lon2 = REAL(longitude2); double azi1, azi2, s12; struct geod_geodesic g; geod_init(&g, a, f); SEXP r; PROTECT( r = allocVector(REALSXP, 3 * length(latitude1) )); xr = REAL(r); int i; for (i=0; i < length(latitude1); i++) { geod_inverse(&g, lat1[i], lon1[i], lat2[i], lon2[i], &s12, &azi1, &azi2); xr[i*3] = s12; xr[i*3+1] = azi1; xr[i*3+2] = azi2; } UNPROTECT(5); return r; } SEXP _polygonarea(SEXP longitude, SEXP latitude, SEXP pa, SEXP pf) { PROTECT(latitude = coerceVector(latitude, REALSXP)); PROTECT(longitude = coerceVector(longitude, REALSXP)); double *lat, *lon, *xr; lat = REAL(latitude); lon = REAL(longitude); double a = REAL(pa)[0]; double f = REAL(pf)[0]; /* double a = 6378137, f = 1/298.257223563; WGS84 */ double A, P; int n, i; struct geod_geodesic g; struct geod_polygon p; geod_init(&g, a, f); geod_polygon_init(&p, 0); for (i=0; i #include #include // for NULL #include /* FIXME: Check these declarations against the C/Fortran source code. */ /* .Call calls */ extern SEXP _geodesic(SEXP, SEXP, SEXP, SEXP, SEXP, SEXP); extern SEXP _inversegeodesic(SEXP, SEXP, SEXP, SEXP, SEXP, SEXP); extern SEXP _polygonarea(SEXP, SEXP, SEXP, SEXP); static const R_CallMethodDef CallEntries[] = { {"_geodesic", (DL_FUNC) &_geodesic, 6}, {"_inversegeodesic", (DL_FUNC) &_inversegeodesic, 6}, {"_polygonarea", (DL_FUNC) &_polygonarea, 4}, {NULL, NULL, 0} }; void R_init_geosphere(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } geosphere/src/pointInPolygon.cpp0000644000176200001440000000510614042401432016512 0ustar liggesusers// Copyright (c) 2018-2021 Robert J. Hijmans // // This file is part of the "spat" library. // // spat is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // spat is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with spat. If not, see . /* #include "spatVector.h" //see http://alienryderflex.com/polygon/ std::vector points_in_polygon(const std::vector &polX, const std::vector &polY, const std::vector &pX, const std::vector &pY) { unsigned nodes = polX.size(); std::vector constant(nodes); std::vector multiple(nodes); std::vector result(nodes); size_t j = nodes-1 ; for(size_t i=0; i < nodes; i++) { if (polY[j] == polY[i]) { constant[i] = polX[i]; multiple[i] = 0; } else { constant[i] = polX[i]-(polY[i]*polX[j])/(polY[j]-polY[i])+(polY[i]*polX[i])/(polY[j]-polY[i]); multiple[i] = (polX[j]-polX[i])/(polY[j]-polY[i]); } j=i; } j = nodes-1; for (size_t p=0; p=y)) || ((polY[j]< y) && (polY[i]>=y)))) { oddNodes ^= (y * multiple[i]+constant[i] < x); } j=i; } result[p] = oddNodes; } return result; } std::vector pointsInPolygons(SpatVector pol, std::vector pX, std::vector pY) { unsigned n = pol.size(); std::vector result(n, -1); for (size_t j = 0; j < n; j++) { SpatGeom geom = pol.getGeom(j); unsigned np = geom.size(); std::vector inside; for (size_t k = 0; k < np; k++) { SpatPart part = geom.getPart(k); if (part.hasHoles()) { inside = points_in_polygon(part.x, part.y, pX, pY); for (size_t h=0; h < part.nHoles(); h++) { std::vector inhole = points_in_polygon(part.x, part.y, pX, pY); for (size_t i=0; i * Algorithms for geodesics, * J. Geodesy 87, 43--55 (2013); * DOI: * 10.1007/s00190-012-0578-z; * addenda: * geod-addenda.html. * . * The principal advantages of these algorithms over previous ones (e.g., * Vincenty, 1975) are * - accurate to round off for |f| < 1/50; * - the solution of the inverse problem is always found; * - differential and integral properties of geodesics are computed. * * The shortest path between two points on the ellipsoid at (\e lat1, \e * lon1) and (\e lat2, \e lon2) is called the geodesic. Its length is * \e s12 and the geodesic from point 1 to point 2 has forward azimuths * \e azi1 and \e azi2 at the two end points. * * Traditionally two geodesic problems are considered: * - the direct problem -- given \e lat1, \e lon1, \e s12, and \e azi1, * determine \e lat2, \e lon2, and \e azi2. This is solved by the function * geod_direct(). * - the inverse problem -- given \e lat1, \e lon1, and \e lat2, \e lon2, * determine \e s12, \e azi1, and \e azi2. This is solved by the function * geod_inverse(). * * The ellipsoid is specified by its equatorial radius \e a (typically in * meters) and flattening \e f. The routines are accurate to round off with * double precision arithmetic provided that |f| < 1/50; for the * WGS84 ellipsoid, the errors are less than 15 nanometers. (Reasonably * accurate results are obtained for |f| < 1/5.) For a prolate * ellipsoid, specify \e f < 0. * * The routines also calculate several other quantities of interest * - \e S12 is the area between the geodesic from point 1 to point 2 and the * equator; i.e., it is the area, measured counter-clockwise, of the * quadrilateral with corners (\e lat1,\e lon1), (0,\e lon1), (0,\e lon2), * and (\e lat2,\e lon2). * - \e m12, the reduced length of the geodesic is defined such that if * the initial azimuth is perturbed by \e dazi1 (radians) then the * second point is displaced by \e m12 \e dazi1 in the direction * perpendicular to the geodesic. On a curved surface the reduced * length obeys a symmetry relation, \e m12 + \e m21 = 0. On a flat * surface, we have \e m12 = \e s12. * - \e M12 and \e M21 are geodesic scales. If two geodesics are * parallel at point 1 and separated by a small distance \e dt, then * they are separated by a distance \e M12 \e dt at point 2. \e M21 * is defined similarly (with the geodesics being parallel to one * another at point 2). On a flat surface, we have \e M12 = \e M21 * = 1. * - \e a12 is the arc length on the auxiliary sphere. This is a * construct for converting the problem to one in spherical * trigonometry. \e a12 is measured in degrees. The spherical arc * length from one equator crossing to the next is always 180°. * * If points 1, 2, and 3 lie on a single geodesic, then the following * addition rules hold: * - \e s13 = \e s12 + \e s23 * - \e a13 = \e a12 + \e a23 * - \e S13 = \e S12 + \e S23 * - \e m13 = \e m12 \e M23 + \e m23 \e M21 * - \e M13 = \e M12 \e M23 − (1 − \e M12 \e M21) \e * m23 / \e m12 * - \e M31 = \e M32 \e M21 − (1 − \e M23 \e M32) \e * m12 / \e m23 * * The shortest distance returned by the solution of the inverse problem is * (obviously) uniquely defined. However, in a few special cases there are * multiple azimuths which yield the same shortest distance. Here is a * catalog of those cases: * - \e lat1 = −\e lat2 (with neither point at a pole). If \e azi1 = \e * azi2, the geodesic is unique. Otherwise there are two geodesics and the * second one is obtained by setting [\e azi1, \e azi2] → [\e azi2, \e * azi1], [\e M12, \e M21] → [\e M21, \e M12], \e S12 → −\e * S12. (This occurs when the longitude difference is near ±180° * for oblate ellipsoids.) * - \e lon2 = \e lon1 ± 180° (with neither point at a pole). If \e * azi1 = 0° or ±180°, the geodesic is unique. Otherwise * there are two geodesics and the second one is obtained by setting [\e * azi1, \e azi2] → [−\e azi1, −\e azi2], \e S12 → * −\e S12. (This occurs when \e lat2 is near −\e lat1 for * prolate ellipsoids.) * - Points 1 and 2 at opposite poles. There are infinitely many geodesics * which can be generated by setting [\e azi1, \e azi2] → [\e azi1, \e * azi2] + [\e d, −\e d], for arbitrary \e d. (For spheres, this * prescription applies when points 1 and 2 are antipodal.) * - \e s12 = 0 (coincident points). There are infinitely many geodesics which * can be generated by setting [\e azi1, \e azi2] → [\e azi1, \e azi2] + * [\e d, \e d], for arbitrary \e d. * * These routines are a simple transcription of the corresponding C++ classes * in GeographicLib. The * "class data" is represented by the structs geod_geodesic, geod_geodesicline, * geod_polygon and pointers to these objects are passed as initial arguments * to the member functions. Most of the internal comments have been retained. * However, in the process of transcription some documentation has been lost * and the documentation for the C++ classes, GeographicLib::Geodesic, * GeographicLib::GeodesicLine, and GeographicLib::PolygonAreaT, should be * consulted. The C++ code remains the "reference implementation". Think * twice about restructuring the internals of the C code since this may make * porting fixes from the C++ code more difficult. * * Copyright (c) Charles Karney (2012-2021) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ * * This library was distributed with * GeographicLib 1.52. **********************************************************************/ #if !defined(GEODESIC_H) #define GEODESIC_H 1 /** * The major version of the geodesic library. (This tracks the version of * GeographicLib.) **********************************************************************/ #define GEODESIC_VERSION_MAJOR 1 /** * The minor version of the geodesic library. (This tracks the version of * GeographicLib.) **********************************************************************/ #define GEODESIC_VERSION_MINOR 52 /** * The patch level of the geodesic library. (This tracks the version of * GeographicLib.) **********************************************************************/ #define GEODESIC_VERSION_PATCH 0 /** * Pack the version components into a single integer. Users should not rely on * this particular packing of the components of the version number; see the * documentation for GEODESIC_VERSION, below. **********************************************************************/ #define GEODESIC_VERSION_NUM(a,b,c) ((((a) * 10000 + (b)) * 100) + (c)) /** * The version of the geodesic library as a single integer, packed as MMmmmmpp * where MM is the major version, mmmm is the minor version, and pp is the * patch level. Users should not rely on this particular packing of the * components of the version number. Instead they should use a test such as * @code{.c} #if GEODESIC_VERSION >= GEODESIC_VERSION_NUM(1,40,0) ... #endif * @endcode **********************************************************************/ #define GEODESIC_VERSION \ GEODESIC_VERSION_NUM(GEODESIC_VERSION_MAJOR, \ GEODESIC_VERSION_MINOR, \ GEODESIC_VERSION_PATCH) #if !defined(GEOD_DLL) #if defined(_MSC_VER) && defined(PROJ_MSVC_DLL_EXPORT) #define GEOD_DLL __declspec(dllexport) #elif defined(__GNUC__) #define GEOD_DLL __attribute__ ((visibility("default"))) #else #define GEOD_DLL #endif #endif #if defined(PROJ_RENAME_SYMBOLS) #include "proj_symbol_rename.h" #endif #if defined(__cplusplus) extern "C" { #endif /** * The struct containing information about the ellipsoid. This must be * initialized by geod_init() before use. **********************************************************************/ struct geod_geodesic { double a; /**< the equatorial radius */ double f; /**< the flattening */ /**< @cond SKIP */ double f1, e2, ep2, n, b, c2, etol2; double A3x[6], C3x[15], C4x[21]; /**< @endcond */ }; /** * The struct containing information about a single geodesic. This must be * initialized by geod_lineinit(), geod_directline(), geod_gendirectline(), * or geod_inverseline() before use. **********************************************************************/ struct geod_geodesicline { double lat1; /**< the starting latitude */ double lon1; /**< the starting longitude */ double azi1; /**< the starting azimuth */ double a; /**< the equatorial radius */ double f; /**< the flattening */ double salp1; /**< sine of \e azi1 */ double calp1; /**< cosine of \e azi1 */ double a13; /**< arc length to reference point */ double s13; /**< distance to reference point */ /**< @cond SKIP */ double b, c2, f1, salp0, calp0, k2, ssig1, csig1, dn1, stau1, ctau1, somg1, comg1, A1m1, A2m1, A3c, B11, B21, B31, A4, B41; double C1a[6+1], C1pa[6+1], C2a[6+1], C3a[6], C4a[6]; /**< @endcond */ unsigned caps; /**< the capabilities */ }; /** * The struct for accumulating information about a geodesic polygon. This is * used for computing the perimeter and area of a polygon. This must be * initialized by geod_polygon_init() before use. **********************************************************************/ struct geod_polygon { double lat; /**< the current latitude */ double lon; /**< the current longitude */ /**< @cond SKIP */ double lat0; double lon0; double A[2]; double P[2]; int polyline; int crossings; /**< @endcond */ unsigned num; /**< the number of points so far */ }; /** * Initialize a geod_geodesic object. * * @param[out] g a pointer to the object to be initialized. * @param[in] a the equatorial radius (meters). * @param[in] f the flattening. **********************************************************************/ void GEOD_DLL geod_init(struct geod_geodesic* g, double a, double f); /** * Solve the direct geodesic problem. * * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in] lat1 latitude of point 1 (degrees). * @param[in] lon1 longitude of point 1 (degrees). * @param[in] azi1 azimuth at point 1 (degrees). * @param[in] s12 distance from point 1 to point 2 (meters); it can be * negative. * @param[out] plat2 pointer to the latitude of point 2 (degrees). * @param[out] plon2 pointer to the longitude of point 2 (degrees). * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees). * * \e g must have been initialized with a call to geod_init(). \e lat1 * should be in the range [−90°, 90°]. The values of \e lon2 * and \e azi2 returned are in the range [−180°, 180°]. Any of * the "return" arguments \e plat2, etc., may be replaced by 0, if you do not * need some quantities computed. * * If either point is at a pole, the azimuth is defined by keeping the * longitude fixed, writing \e lat = ±(90° − ε), and * taking the limit ε → 0+. An arc length greater that 180° * signifies a geodesic which is not a shortest path. (For a prolate * ellipsoid, an additional condition is necessary for a shortest path: the * longitudinal extent must not exceed of 180°.) * * Example, determine the point 10000 km NE of JFK: @code{.c} struct geod_geodesic g; double lat, lon; geod_init(&g, 6378137, 1/298.257223563); geod_direct(&g, 40.64, -73.78, 45.0, 10e6, &lat, &lon, 0); printf("%.5f %.5f\n", lat, lon); @endcode **********************************************************************/ void GEOD_DLL geod_direct(const struct geod_geodesic* g, double lat1, double lon1, double azi1, double s12, double* plat2, double* plon2, double* pazi2); /** * The general direct geodesic problem. * * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in] lat1 latitude of point 1 (degrees). * @param[in] lon1 longitude of point 1 (degrees). * @param[in] azi1 azimuth at point 1 (degrees). * @param[in] flags bitor'ed combination of geod_flags(); \e flags & * GEOD_ARCMODE determines the meaning of \e s12_a12 and \e flags & * GEOD_LONG_UNROLL "unrolls" \e lon2. * @param[in] s12_a12 if \e flags & GEOD_ARCMODE is 0, this is the distance * from point 1 to point 2 (meters); otherwise it is the arc length * from point 1 to point 2 (degrees); it can be negative. * @param[out] plat2 pointer to the latitude of point 2 (degrees). * @param[out] plon2 pointer to the longitude of point 2 (degrees). * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees). * @param[out] ps12 pointer to the distance from point 1 to point 2 * (meters). * @param[out] pm12 pointer to the reduced length of geodesic (meters). * @param[out] pM12 pointer to the geodesic scale of point 2 relative to * point 1 (dimensionless). * @param[out] pM21 pointer to the geodesic scale of point 1 relative to * point 2 (dimensionless). * @param[out] pS12 pointer to the area under the geodesic * (meters2). * @return \e a12 arc length from point 1 to point 2 (degrees). * * \e g must have been initialized with a call to geod_init(). \e lat1 * should be in the range [−90°, 90°]. The function value \e * a12 equals \e s12_a12 if \e flags & GEOD_ARCMODE. Any of the "return" * arguments, \e plat2, etc., may be replaced by 0, if you do not need some * quantities computed. * * With \e flags & GEOD_LONG_UNROLL bit set, the longitude is "unrolled" so * that the quantity \e lon2 − \e lon1 indicates how many times and in * what sense the geodesic encircles the ellipsoid. **********************************************************************/ double GEOD_DLL geod_gendirect(const struct geod_geodesic* g, double lat1, double lon1, double azi1, unsigned flags, double s12_a12, double* plat2, double* plon2, double* pazi2, double* ps12, double* pm12, double* pM12, double* pM21, double* pS12); /** * Solve the inverse geodesic problem. * * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in] lat1 latitude of point 1 (degrees). * @param[in] lon1 longitude of point 1 (degrees). * @param[in] lat2 latitude of point 2 (degrees). * @param[in] lon2 longitude of point 2 (degrees). * @param[out] ps12 pointer to the distance from point 1 to point 2 * (meters). * @param[out] pazi1 pointer to the azimuth at point 1 (degrees). * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees). * * \e g must have been initialized with a call to geod_init(). \e lat1 and * \e lat2 should be in the range [−90°, 90°]. The values of * \e azi1 and \e azi2 returned are in the range [−180°, 180°]. * Any of the "return" arguments, \e ps12, etc., may be replaced by 0, if you * do not need some quantities computed. * * If either point is at a pole, the azimuth is defined by keeping the * longitude fixed, writing \e lat = ±(90° − ε), and * taking the limit ε → 0+. * * The solution to the inverse problem is found using Newton's method. If * this fails to converge (this is very unlikely in geodetic applications * but does occur for very eccentric ellipsoids), then the bisection method * is used to refine the solution. * * Example, determine the distance between JFK and Singapore Changi Airport: @code{.c} struct geod_geodesic g; double s12; geod_init(&g, 6378137, 1/298.257223563); geod_inverse(&g, 40.64, -73.78, 1.36, 103.99, &s12, 0, 0); printf("%.3f\n", s12); @endcode **********************************************************************/ void GEOD_DLL geod_inverse(const struct geod_geodesic* g, double lat1, double lon1, double lat2, double lon2, double* ps12, double* pazi1, double* pazi2); /** * The general inverse geodesic calculation. * * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in] lat1 latitude of point 1 (degrees). * @param[in] lon1 longitude of point 1 (degrees). * @param[in] lat2 latitude of point 2 (degrees). * @param[in] lon2 longitude of point 2 (degrees). * @param[out] ps12 pointer to the distance from point 1 to point 2 * (meters). * @param[out] pazi1 pointer to the azimuth at point 1 (degrees). * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees). * @param[out] pm12 pointer to the reduced length of geodesic (meters). * @param[out] pM12 pointer to the geodesic scale of point 2 relative to * point 1 (dimensionless). * @param[out] pM21 pointer to the geodesic scale of point 1 relative to * point 2 (dimensionless). * @param[out] pS12 pointer to the area under the geodesic * (meters2). * @return \e a12 arc length from point 1 to point 2 (degrees). * * \e g must have been initialized with a call to geod_init(). \e lat1 and * \e lat2 should be in the range [−90°, 90°]. Any of the * "return" arguments \e ps12, etc., may be replaced by 0, if you do not need * some quantities computed. **********************************************************************/ double GEOD_DLL geod_geninverse(const struct geod_geodesic* g, double lat1, double lon1, double lat2, double lon2, double* ps12, double* pazi1, double* pazi2, double* pm12, double* pM12, double* pM21, double* pS12); /** * Initialize a geod_geodesicline object. * * @param[out] l a pointer to the object to be initialized. * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in] lat1 latitude of point 1 (degrees). * @param[in] lon1 longitude of point 1 (degrees). * @param[in] azi1 azimuth at point 1 (degrees). * @param[in] caps bitor'ed combination of geod_mask() values specifying the * capabilities the geod_geodesicline object should possess, i.e., which * quantities can be returned in calls to geod_position() and * geod_genposition(). * * \e g must have been initialized with a call to geod_init(). \e lat1 * should be in the range [−90°, 90°]. * * The geod_mask values are [see geod_mask()]: * - \e caps |= GEOD_LATITUDE for the latitude \e lat2; this is * added automatically, * - \e caps |= GEOD_LONGITUDE for the latitude \e lon2, * - \e caps |= GEOD_AZIMUTH for the latitude \e azi2; this is * added automatically, * - \e caps |= GEOD_DISTANCE for the distance \e s12, * - \e caps |= GEOD_REDUCEDLENGTH for the reduced length \e m12, * - \e caps |= GEOD_GEODESICSCALE for the geodesic scales \e M12 * and \e M21, * - \e caps |= GEOD_AREA for the area \e S12, * - \e caps |= GEOD_DISTANCE_IN permits the length of the * geodesic to be given in terms of \e s12; without this capability the * length can only be specified in terms of arc length. * . * A value of \e caps = 0 is treated as GEOD_LATITUDE | GEOD_LONGITUDE | * GEOD_AZIMUTH | GEOD_DISTANCE_IN (to support the solution of the "standard" * direct problem). * * When initialized by this function, point 3 is undefined (l->s13 = l->a13 = * NaN). **********************************************************************/ void GEOD_DLL geod_lineinit(struct geod_geodesicline* l, const struct geod_geodesic* g, double lat1, double lon1, double azi1, unsigned caps); /** * Initialize a geod_geodesicline object in terms of the direct geodesic * problem. * * @param[out] l a pointer to the object to be initialized. * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in] lat1 latitude of point 1 (degrees). * @param[in] lon1 longitude of point 1 (degrees). * @param[in] azi1 azimuth at point 1 (degrees). * @param[in] s12 distance from point 1 to point 2 (meters); it can be * negative. * @param[in] caps bitor'ed combination of geod_mask() values specifying the * capabilities the geod_geodesicline object should possess, i.e., which * quantities can be returned in calls to geod_position() and * geod_genposition(). * * This function sets point 3 of the geod_geodesicline to correspond to point * 2 of the direct geodesic problem. See geod_lineinit() for more * information. **********************************************************************/ void GEOD_DLL geod_directline(struct geod_geodesicline* l, const struct geod_geodesic* g, double lat1, double lon1, double azi1, double s12, unsigned caps); /** * Initialize a geod_geodesicline object in terms of the direct geodesic * problem specified in terms of either distance or arc length. * * @param[out] l a pointer to the object to be initialized. * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in] lat1 latitude of point 1 (degrees). * @param[in] lon1 longitude of point 1 (degrees). * @param[in] azi1 azimuth at point 1 (degrees). * @param[in] flags either GEOD_NOFLAGS or GEOD_ARCMODE to determining the * meaning of the \e s12_a12. * @param[in] s12_a12 if \e flags = GEOD_NOFLAGS, this is the distance * from point 1 to point 2 (meters); if \e flags = GEOD_ARCMODE, it is * the arc length from point 1 to point 2 (degrees); it can be * negative. * @param[in] caps bitor'ed combination of geod_mask() values specifying the * capabilities the geod_geodesicline object should possess, i.e., which * quantities can be returned in calls to geod_position() and * geod_genposition(). * * This function sets point 3 of the geod_geodesicline to correspond to point * 2 of the direct geodesic problem. See geod_lineinit() for more * information. **********************************************************************/ void GEOD_DLL geod_gendirectline(struct geod_geodesicline* l, const struct geod_geodesic* g, double lat1, double lon1, double azi1, unsigned flags, double s12_a12, unsigned caps); /** * Initialize a geod_geodesicline object in terms of the inverse geodesic * problem. * * @param[out] l a pointer to the object to be initialized. * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in] lat1 latitude of point 1 (degrees). * @param[in] lon1 longitude of point 1 (degrees). * @param[in] lat2 latitude of point 2 (degrees). * @param[in] lon2 longitude of point 2 (degrees). * @param[in] caps bitor'ed combination of geod_mask() values specifying the * capabilities the geod_geodesicline object should possess, i.e., which * quantities can be returned in calls to geod_position() and * geod_genposition(). * * This function sets point 3 of the geod_geodesicline to correspond to point * 2 of the inverse geodesic problem. See geod_lineinit() for more * information. **********************************************************************/ void GEOD_DLL geod_inverseline(struct geod_geodesicline* l, const struct geod_geodesic* g, double lat1, double lon1, double lat2, double lon2, unsigned caps); /** * Compute the position along a geod_geodesicline. * * @param[in] l a pointer to the geod_geodesicline object specifying the * geodesic line. * @param[in] s12 distance from point 1 to point 2 (meters); it can be * negative. * @param[out] plat2 pointer to the latitude of point 2 (degrees). * @param[out] plon2 pointer to the longitude of point 2 (degrees); requires * that \e l was initialized with \e caps |= GEOD_LONGITUDE. * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees). * * \e l must have been initialized with a call, e.g., to geod_lineinit(), * with \e caps |= GEOD_DISTANCE_IN (or \e caps = 0). The values of \e lon2 * and \e azi2 returned are in the range [−180°, 180°]. Any of * the "return" arguments \e plat2, etc., may be replaced by 0, if you do not * need some quantities computed. * * Example, compute way points between JFK and Singapore Changi Airport * the "obvious" way using geod_direct(): @code{.c} struct geod_geodesic g; double s12, azi1, lat[101],lon[101]; int i; geod_init(&g, 6378137, 1/298.257223563); geod_inverse(&g, 40.64, -73.78, 1.36, 103.99, &s12, &azi1, 0); for (i = 0; i < 101; ++i) { geod_direct(&g, 40.64, -73.78, azi1, i * s12 * 0.01, lat + i, lon + i, 0); printf("%.5f %.5f\n", lat[i], lon[i]); } @endcode * A faster way using geod_position(): @code{.c} struct geod_geodesic g; struct geod_geodesicline l; double lat[101],lon[101]; int i; geod_init(&g, 6378137, 1/298.257223563); geod_inverseline(&l, &g, 40.64, -73.78, 1.36, 103.99, 0); for (i = 0; i <= 100; ++i) { geod_position(&l, i * l.s13 * 0.01, lat + i, lon + i, 0); printf("%.5f %.5f\n", lat[i], lon[i]); } @endcode **********************************************************************/ void GEOD_DLL geod_position(const struct geod_geodesicline* l, double s12, double* plat2, double* plon2, double* pazi2); /** * The general position function. * * @param[in] l a pointer to the geod_geodesicline object specifying the * geodesic line. * @param[in] flags bitor'ed combination of geod_flags(); \e flags & * GEOD_ARCMODE determines the meaning of \e s12_a12 and \e flags & * GEOD_LONG_UNROLL "unrolls" \e lon2; if \e flags & GEOD_ARCMODE is 0, * then \e l must have been initialized with \e caps |= GEOD_DISTANCE_IN. * @param[in] s12_a12 if \e flags & GEOD_ARCMODE is 0, this is the * distance from point 1 to point 2 (meters); otherwise it is the * arc length from point 1 to point 2 (degrees); it can be * negative. * @param[out] plat2 pointer to the latitude of point 2 (degrees). * @param[out] plon2 pointer to the longitude of point 2 (degrees); requires * that \e l was initialized with \e caps |= GEOD_LONGITUDE. * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees). * @param[out] ps12 pointer to the distance from point 1 to point 2 * (meters); requires that \e l was initialized with \e caps |= * GEOD_DISTANCE. * @param[out] pm12 pointer to the reduced length of geodesic (meters); * requires that \e l was initialized with \e caps |= GEOD_REDUCEDLENGTH. * @param[out] pM12 pointer to the geodesic scale of point 2 relative to * point 1 (dimensionless); requires that \e l was initialized with \e caps * |= GEOD_GEODESICSCALE. * @param[out] pM21 pointer to the geodesic scale of point 1 relative to * point 2 (dimensionless); requires that \e l was initialized with \e caps * |= GEOD_GEODESICSCALE. * @param[out] pS12 pointer to the area under the geodesic * (meters2); requires that \e l was initialized with \e caps |= * GEOD_AREA. * @return \e a12 arc length from point 1 to point 2 (degrees). * * \e l must have been initialized with a call to geod_lineinit() with \e * caps |= GEOD_DISTANCE_IN. The value \e azi2 returned is in the range * [−180°, 180°]. Any of the "return" arguments \e plat2, * etc., may be replaced by 0, if you do not need some quantities * computed. Requesting a value which \e l is not capable of computing * is not an error; the corresponding argument will not be altered. * * With \e flags & GEOD_LONG_UNROLL bit set, the longitude is "unrolled" so * that the quantity \e lon2 − \e lon1 indicates how many times and in * what sense the geodesic encircles the ellipsoid. * * Example, compute way points between JFK and Singapore Changi Airport using * geod_genposition(). In this example, the points are evenly space in arc * length (and so only approximately equally spaced in distance). This is * faster than using geod_position() and would be appropriate if drawing the * path on a map. @code{.c} struct geod_geodesic g; struct geod_geodesicline l; double lat[101], lon[101]; int i; geod_init(&g, 6378137, 1/298.257223563); geod_inverseline(&l, &g, 40.64, -73.78, 1.36, 103.99, GEOD_LATITUDE | GEOD_LONGITUDE); for (i = 0; i <= 100; ++i) { geod_genposition(&l, GEOD_ARCMODE, i * l.a13 * 0.01, lat + i, lon + i, 0, 0, 0, 0, 0, 0); printf("%.5f %.5f\n", lat[i], lon[i]); } @endcode **********************************************************************/ double GEOD_DLL geod_genposition(const struct geod_geodesicline* l, unsigned flags, double s12_a12, double* plat2, double* plon2, double* pazi2, double* ps12, double* pm12, double* pM12, double* pM21, double* pS12); /** * Specify position of point 3 in terms of distance. * * @param[in,out] l a pointer to the geod_geodesicline object. * @param[in] s13 the distance from point 1 to point 3 (meters); it * can be negative. * * This is only useful if the geod_geodesicline object has been constructed * with \e caps |= GEOD_DISTANCE_IN. **********************************************************************/ void GEOD_DLL geod_setdistance(struct geod_geodesicline* l, double s13); /** * Specify position of point 3 in terms of either distance or arc length. * * @param[in,out] l a pointer to the geod_geodesicline object. * @param[in] flags either GEOD_NOFLAGS or GEOD_ARCMODE to determining the * meaning of the \e s13_a13. * @param[in] s13_a13 if \e flags = GEOD_NOFLAGS, this is the distance * from point 1 to point 3 (meters); if \e flags = GEOD_ARCMODE, it is * the arc length from point 1 to point 3 (degrees); it can be * negative. * * If flags = GEOD_NOFLAGS, this calls geod_setdistance(). If flags = * GEOD_ARCMODE, the \e s13 is only set if the geod_geodesicline object has * been constructed with \e caps |= GEOD_DISTANCE. **********************************************************************/ void GEOD_DLL geod_gensetdistance(struct geod_geodesicline* l, unsigned flags, double s13_a13); /** * Initialize a geod_polygon object. * * @param[out] p a pointer to the object to be initialized. * @param[in] polylinep non-zero if a polyline instead of a polygon. * * If \e polylinep is zero, then the sequence of vertices and edges added by * geod_polygon_addpoint() and geod_polygon_addedge() define a polygon and * the perimeter and area are returned by geod_polygon_compute(). If \e * polylinep is non-zero, then the vertices and edges define a polyline and * only the perimeter is returned by geod_polygon_compute(). * * The area and perimeter are accumulated at two times the standard floating * point precision to guard against the loss of accuracy with many-sided * polygons. At any point you can ask for the perimeter and area so far. * * An example of the use of this function is given in the documentation for * geod_polygon_compute(). **********************************************************************/ void GEOD_DLL geod_polygon_init(struct geod_polygon* p, int polylinep); /** * Clear the polygon, allowing a new polygon to be started. * * @param[in,out] p a pointer to the object to be cleared. **********************************************************************/ void GEOD_DLL geod_polygon_clear(struct geod_polygon* p); /** * Add a point to the polygon or polyline. * * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in,out] p a pointer to the geod_polygon object specifying the * polygon. * @param[in] lat the latitude of the point (degrees). * @param[in] lon the longitude of the point (degrees). * * \e g and \e p must have been initialized with calls to geod_init() and * geod_polygon_init(), respectively. The same \e g must be used for all the * points and edges in a polygon. \e lat should be in the range * [−90°, 90°]. * * An example of the use of this function is given in the documentation for * geod_polygon_compute(). **********************************************************************/ void GEOD_DLL geod_polygon_addpoint(const struct geod_geodesic* g, struct geod_polygon* p, double lat, double lon); /** * Add an edge to the polygon or polyline. * * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in,out] p a pointer to the geod_polygon object specifying the * polygon. * @param[in] azi azimuth at current point (degrees). * @param[in] s distance from current point to next point (meters). * * \e g and \e p must have been initialized with calls to geod_init() and * geod_polygon_init(), respectively. The same \e g must be used for all the * points and edges in a polygon. This does nothing if no points have been * added yet. The \e lat and \e lon fields of \e p give the location of the * new vertex. **********************************************************************/ void GEOD_DLL geod_polygon_addedge(const struct geod_geodesic* g, struct geod_polygon* p, double azi, double s); /** * Return the results for a polygon. * * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in] p a pointer to the geod_polygon object specifying the polygon. * @param[in] reverse if non-zero then clockwise (instead of * counter-clockwise) traversal counts as a positive area. * @param[in] sign if non-zero then return a signed result for the area if * the polygon is traversed in the "wrong" direction instead of returning * the area for the rest of the earth. * @param[out] pA pointer to the area of the polygon (meters2); * only set if \e polyline is non-zero in the call to geod_polygon_init(). * @param[out] pP pointer to the perimeter of the polygon or length of the * polyline (meters). * @return the number of points. * * The area and perimeter are accumulated at two times the standard floating * point precision to guard against the loss of accuracy with many-sided * polygons. Arbitrarily complex polygons are allowed. In the case of * self-intersecting polygons the area is accumulated "algebraically", e.g., * the areas of the 2 loops in a figure-8 polygon will partially cancel. * There's no need to "close" the polygon by repeating the first vertex. Set * \e pA or \e pP to zero, if you do not want the corresponding quantity * returned. * * More points can be added to the polygon after this call. * * Example, compute the perimeter and area of the geodesic triangle with * vertices (0°N,0°E), (0°N,90°E), (90°N,0°E). @code{.c} double A, P; int n; struct geod_geodesic g; struct geod_polygon p; geod_init(&g, 6378137, 1/298.257223563); geod_polygon_init(&p, 0); geod_polygon_addpoint(&g, &p, 0, 0); geod_polygon_addpoint(&g, &p, 0, 90); geod_polygon_addpoint(&g, &p, 90, 0); n = geod_polygon_compute(&g, &p, 0, 1, &A, &P); printf("%d %.8f %.3f\n", n, P, A); @endcode **********************************************************************/ unsigned GEOD_DLL geod_polygon_compute(const struct geod_geodesic* g, const struct geod_polygon* p, int reverse, int sign, double* pA, double* pP); /** * Return the results assuming a tentative final test point is added; * however, the data for the test point is not saved. This lets you report a * running result for the perimeter and area as the user moves the mouse * cursor. Ordinary floating point arithmetic is used to accumulate the data * for the test point; thus the area and perimeter returned are less accurate * than if geod_polygon_addpoint() and geod_polygon_compute() are used. * * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in] p a pointer to the geod_polygon object specifying the polygon. * @param[in] lat the latitude of the test point (degrees). * @param[in] lon the longitude of the test point (degrees). * @param[in] reverse if non-zero then clockwise (instead of * counter-clockwise) traversal counts as a positive area. * @param[in] sign if non-zero then return a signed result for the area if * the polygon is traversed in the "wrong" direction instead of returning * the area for the rest of the earth. * @param[out] pA pointer to the area of the polygon (meters2); * only set if \e polyline is non-zero in the call to geod_polygon_init(). * @param[out] pP pointer to the perimeter of the polygon or length of the * polyline (meters). * @return the number of points. * * \e lat should be in the range [−90°, 90°]. **********************************************************************/ unsigned GEOD_DLL geod_polygon_testpoint(const struct geod_geodesic* g, const struct geod_polygon* p, double lat, double lon, int reverse, int sign, double* pA, double* pP); /** * Return the results assuming a tentative final test point is added via an * azimuth and distance; however, the data for the test point is not saved. * This lets you report a running result for the perimeter and area as the * user moves the mouse cursor. Ordinary floating point arithmetic is used * to accumulate the data for the test point; thus the area and perimeter * returned are less accurate than if geod_polygon_addedge() and * geod_polygon_compute() are used. * * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in] p a pointer to the geod_polygon object specifying the polygon. * @param[in] azi azimuth at current point (degrees). * @param[in] s distance from current point to final test point (meters). * @param[in] reverse if non-zero then clockwise (instead of * counter-clockwise) traversal counts as a positive area. * @param[in] sign if non-zero then return a signed result for the area if * the polygon is traversed in the "wrong" direction instead of returning * the area for the rest of the earth. * @param[out] pA pointer to the area of the polygon (meters2); * only set if \e polyline is non-zero in the call to geod_polygon_init(). * @param[out] pP pointer to the perimeter of the polygon or length of the * polyline (meters). * @return the number of points. **********************************************************************/ unsigned GEOD_DLL geod_polygon_testedge(const struct geod_geodesic* g, const struct geod_polygon* p, double azi, double s, int reverse, int sign, double* pA, double* pP); /** * A simple interface for computing the area of a geodesic polygon. * * @param[in] g a pointer to the geod_geodesic object specifying the * ellipsoid. * @param[in] lats an array of latitudes of the polygon vertices (degrees). * @param[in] lons an array of longitudes of the polygon vertices (degrees). * @param[in] n the number of vertices. * @param[out] pA pointer to the area of the polygon (meters2). * @param[out] pP pointer to the perimeter of the polygon (meters). * * \e lats should be in the range [−90°, 90°]. * * Arbitrarily complex polygons are allowed. In the case self-intersecting * of polygons the area is accumulated "algebraically", e.g., the areas of * the 2 loops in a figure-8 polygon will partially cancel. There's no need * to "close" the polygon by repeating the first vertex. The area returned * is signed with counter-clockwise traversal being treated as positive. * * Example, compute the area of Antarctica: @code{.c} double lats[] = {-72.9, -71.9, -74.9, -74.3, -77.5, -77.4, -71.7, -65.9, -65.7, -66.6, -66.9, -69.8, -70.0, -71.0, -77.3, -77.9, -74.7}, lons[] = {-74, -102, -102, -131, -163, 163, 172, 140, 113, 88, 59, 25, -4, -14, -33, -46, -61}; struct geod_geodesic g; double A, P; geod_init(&g, 6378137, 1/298.257223563); geod_polygonarea(&g, lats, lons, (sizeof lats) / (sizeof lats[0]), &A, &P); printf("%.0f %.2f\n", A, P); @endcode **********************************************************************/ void GEOD_DLL geod_polygonarea(const struct geod_geodesic* g, double lats[], double lons[], int n, double* pA, double* pP); /** * mask values for the \e caps argument to geod_lineinit(). **********************************************************************/ enum geod_mask { GEOD_NONE = 0U, /**< Calculate nothing */ GEOD_LATITUDE = 1U<<7 | 0U, /**< Calculate latitude */ GEOD_LONGITUDE = 1U<<8 | 1U<<3, /**< Calculate longitude */ GEOD_AZIMUTH = 1U<<9 | 0U, /**< Calculate azimuth */ GEOD_DISTANCE = 1U<<10 | 1U<<0, /**< Calculate distance */ GEOD_DISTANCE_IN = 1U<<11 | 1U<<0 | 1U<<1,/**< Allow distance as input */ GEOD_REDUCEDLENGTH= 1U<<12 | 1U<<0 | 1U<<2,/**< Calculate reduced length */ GEOD_GEODESICSCALE= 1U<<13 | 1U<<0 | 1U<<2,/**< Calculate geodesic scale */ GEOD_AREA = 1U<<14 | 1U<<4, /**< Calculate reduced length */ GEOD_ALL = 0x7F80U| 0x1FU /**< Calculate everything */ }; /** * flag values for the \e flags argument to geod_gendirect() and * geod_genposition() **********************************************************************/ enum geod_flags { GEOD_NOFLAGS = 0U, /**< No flags */ GEOD_ARCMODE = 1U<<0, /**< Position given in terms of arc distance */ GEOD_LONG_UNROLL = 1U<<15 /**< Unroll the longitude */ }; #if defined(__cplusplus) } #endif #endif geosphere/src/dist.c0000644000176200001440000000772513472321466014154 0ustar liggesusers/* Robert Hijmans, June 2011 */ #include #include #include #include #include "Rmath.h" #include "util.h" double distPlane(double x1, double y1, double x2, double y2) { return( sqrt(pow((x2-x1),2) + pow((y2-y1), 2)) ); } double distCos(double lon1, double lat1, double lon2, double lat2, double r) { double cosd; lon1 = toRad(lon1); lon2 = toRad(lon2); lat1 = toRad(lat1); lat2 = toRad(lat2); cosd = sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon1-lon2); return acos(cosd) * r; } double distHav(double lon1, double lat1, double lon2, double lat2, double r) { double dLat, dLon, a; lon1 = toRad(lon1); lon2 = toRad(lon2); lat1 = toRad(lat1); lat2 = toRad(lat2); dLat = lat2-lat1; dLon = lon2-lon1; a = sin(dLat/2.) * sin(dLat/2.) + cos(lat1) * cos(lat2) * sin(dLon/2.) * sin(dLon/2.); return 2. * atan2(sqrt(a), sqrt(1.-a)) * r; } double distVinSph(double lon1, double lat1, double lon2, double lat2, double r) { double x, x1, x2, y; lon1 = toRad(lon1); lon2 = toRad(lon2); lat1 = toRad(lat1); lat2 = toRad(lat2); x1 = cos(lat2) * sin(lon1-lon2); x2 = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(lon1-lon2); x = sqrt(x1*x1 + x2*x2); y = sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon1-lon2); return r * atan2(x, y); } double distVinEll(double lon1, double lat1, double lon2, double lat2, double a, double b, double f) { /* Vincenty Inverse Solution of Geodesics on the Ellipsoid (c) Chris Veness 2002-2009 Calculate geodesic distance (in m) between two points specified by latitude/longitude (in numeric degrees) using Vincenty inverse formula for ellipsoids based on source http://www.movable-type.co.uk/scripts/latlong-vincenty.html (c) 2002-2009 Chris Veness */ double L, U1, U2, sinU1, cosU1, sinU2, cosU2, lambda, sinLambda, cosLambda, sinSigma, cosSigma, sigma, sinAlpha, cosSqAlpha, cos2SigmaM, C, lambdaP, uSq, A, B, deltaSigma; int iterLimit, cont; if ((lon1 == lon2) & (lat1 == lat2)) { return 0.; } else if ( isnan(lon1) | isnan(lat1) | isnan(lon2) | isnan(lat2)) { return R_NaReal; } else { lon1 = toRad(lon1); lon2 = toRad(lon2); lat1 = toRad(lat1); lat2 = toRad(lat2); L = (lon2-lon1); U1 = atan((1.-f) * tan(lat1)); U2 = atan((1.-f) * tan(lat2)); sinU1 = sin(U1); cosU1 = cos(U1); sinU2 = sin(U2); cosU2 = cos(U2); lambda = L; iterLimit = 100; cont = 1; while (cont) { sinLambda = sin(lambda); cosLambda = cos(lambda); sinSigma = sqrt((cosU2*sinLambda) * (cosU2*sinLambda) + (cosU1*sinU2-sinU1*cosU2*cosLambda) * (cosU1*sinU2-sinU1*cosU2*cosLambda)); cosSigma = sinU1*sinU2 + cosU1*cosU2*cosLambda; sigma = atan2(sinSigma, cosSigma); sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma; cosSqAlpha = 1. - sinAlpha*sinAlpha; cos2SigmaM = cosSigma - 2.*sinU1*sinU2/cosSqAlpha; if (isnan(cos2SigmaM)) { cos2SigmaM = 0.; // equatorial line: cosSqAlpha=0 (6) } C = f/16.*cosSqAlpha*(4.+f*(4.-3.*cosSqAlpha)); lambdaP = lambda; lambda = L + (1.-C) * f * sinAlpha * (sigma + C*sinSigma*(cos2SigmaM+C*cosSigma*(-1.+2.*cos2SigmaM*cos2SigmaM))); iterLimit = iterLimit - 1; cont = (fabs(lambda-lambdaP) > 1e-12 && iterLimit > 0); } if (iterLimit==0) { return R_NaReal; // formula failed to converge } else { uSq = cosSqAlpha * (a*a - b*b) / (b*b); A = 1. + uSq/16384.*(4096.+uSq*(-768.+uSq*(320.-175.*uSq))); B = uSq/1024. * (256.+uSq*(-128.+uSq*(74.-47.*uSq))); deltaSigma = B*sinSigma*(cos2SigmaM+B/4.*(cosSigma*(-1.+2.*cos2SigmaM*cos2SigmaM)- B/6.*cos2SigmaM*(-3.+4.*sinSigma*sinSigma)*(-3.+4.*cos2SigmaM*cos2SigmaM))); return b*A*(sigma-deltaSigma); } } } void distanceEllipsoid(int *n, double *lon1, double *lat1, double *lon2, double *lat2, double *a, double *b, double *f, int *m, double *dist) { int i; if (*m > 0) { for(i=0; i < *n; i++) { dist[i] = distVinEll(lon1[i], lat1[i], lon2[i], lat2[i], a[i], b[i], f[i]); } } } geosphere/src/geodesic.c0000644000176200001440000021313314131145176014756 0ustar liggesusers/** * \file geodesic.c * \brief Implementation of the geodesic routines in C * * For the full documentation see geodesic.h. **********************************************************************/ /** @cond SKIP */ /* * This is a C implementation of the geodesic algorithms described in * * C. F. F. Karney, * Algorithms for geodesics, * J. Geodesy 87, 43--55 (2013); * https://doi.org/10.1007/s00190-012-0578-z * Addenda: https://geographiclib.sourceforge.io/geod-addenda.html * * See the comments in geodesic.h for documentation. * * Copyright (c) Charles Karney (2012-2021) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ */ #include "geodesic.h" #include #include #include #if !defined(__cplusplus) #define nullptr 0 #endif #define GEOGRAPHICLIB_GEODESIC_ORDER 6 #define nA1 GEOGRAPHICLIB_GEODESIC_ORDER #define nC1 GEOGRAPHICLIB_GEODESIC_ORDER #define nC1p GEOGRAPHICLIB_GEODESIC_ORDER #define nA2 GEOGRAPHICLIB_GEODESIC_ORDER #define nC2 GEOGRAPHICLIB_GEODESIC_ORDER #define nA3 GEOGRAPHICLIB_GEODESIC_ORDER #define nA3x nA3 #define nC3 GEOGRAPHICLIB_GEODESIC_ORDER #define nC3x ((nC3 * (nC3 - 1)) / 2) #define nC4 GEOGRAPHICLIB_GEODESIC_ORDER #define nC4x ((nC4 * (nC4 + 1)) / 2) #define nC (GEOGRAPHICLIB_GEODESIC_ORDER + 1) typedef double real; typedef int boolx; static unsigned init = 0; static const int FALSE = 0; static const int TRUE = 1; static unsigned digits, maxit1, maxit2; static real epsilon, realmin, pi, degree, NaN, tiny, tol0, tol1, tol2, tolb, xthresh; static void Init(void) { if (!init) { digits = DBL_MANT_DIG; epsilon = DBL_EPSILON; realmin = DBL_MIN; #if defined(M_PI) pi = M_PI; #else pi = atan2(0.0, -1.0); #endif maxit1 = 20; maxit2 = maxit1 + digits + 10; tiny = sqrt(realmin); tol0 = epsilon; /* Increase multiplier in defn of tol1 from 100 to 200 to fix inverse case * 52.784459512564 0 -52.784459512563990912 179.634407464943777557 * which otherwise failed for Visual Studio 10 (Release and Debug) */ tol1 = 200 * tol0; tol2 = sqrt(tol0); /* Check on bisection interval */ tolb = tol0 * tol2; xthresh = 1000 * tol2; degree = pi/180; NaN = nan("0"); init = 1; } } enum captype { CAP_NONE = 0U, CAP_C1 = 1U<<0, CAP_C1p = 1U<<1, CAP_C2 = 1U<<2, CAP_C3 = 1U<<3, CAP_C4 = 1U<<4, CAP_ALL = 0x1FU, OUT_ALL = 0x7F80U }; static real sq(real x) { return x * x; } static real sumx(real u, real v, real* t) { volatile real s = u + v; volatile real up = s - v; volatile real vpp = s - up; up -= u; vpp -= v; if (t) *t = -(up + vpp); /* error-free sum: * u + v = s + t * = round(u + v) + t */ return s; } static real polyval(int N, const real p[], real x) { real y = N < 0 ? 0 : *p++; while (--N >= 0) y = y * x + *p++; return y; } /* mimic C++ std::min and std::max */ static real minx(real a, real b) { return (b < a) ? b : a; } static real maxx(real a, real b) { return (a < b) ? b : a; } static void swapx(real* x, real* y) { real t = *x; *x = *y; *y = t; } static void norm2(real* sinx, real* cosx) { #if defined(_MSC_VER) && defined(_M_IX86) /* hypot for Visual Studio (A=win32) fails monotonicity, e.g., with * x = 0.6102683302836215 * y1 = 0.7906090004346522 * y2 = y1 + 1e-16 * the test * hypot(x, y2) >= hypot(x, y1) * fails. See also * https://bugs.python.org/issue43088 */ real r = sqrt(*sinx * *sinx + *cosx * *cosx); #else real r = hypot(*sinx, *cosx); #endif *sinx /= r; *cosx /= r; } static real AngNormalize(real x) { x = remainder(x, (real)(360)); return x != -180 ? x : 180; } static real LatFix(real x) { return fabs(x) > 90 ? NaN : x; } static real AngDiff(real x, real y, real* e) { real t, d = AngNormalize(sumx(AngNormalize(-x), AngNormalize(y), &t)); /* Here y - x = d + t (mod 360), exactly, where d is in (-180,180] and * abs(t) <= eps (eps = 2^-45 for doubles). The only case where the * addition of t takes the result outside the range (-180,180] is d = 180 * and t > 0. The case, d = -180 + eps, t = -eps, can't happen, since * sum would have returned the exact result in such a case (i.e., given t * = 0). */ return sumx(d == 180 && t > 0 ? -180 : d, t, e); } static real AngRound(real x) { const real z = 1/(real)(16); volatile real y; if (x == 0) return 0; y = fabs(x); /* The compiler mustn't "simplify" z - (z - y) to y */ y = y < z ? z - (z - y) : y; return x < 0 ? -y : y; } static void sincosdx(real x, real* sinx, real* cosx) { /* In order to minimize round-off errors, this function exactly reduces * the argument to the range [-45, 45] before converting it to radians. */ real r, s, c; int q = 0; r = remquo(x, (real)(90), &q); /* now abs(r) <= 45 */ r *= degree; /* Possibly could call the gnu extension sincos */ s = sin(r); c = cos(r); switch ((unsigned)q & 3U) { case 0U: *sinx = s; *cosx = c; break; case 1U: *sinx = c; *cosx = -s; break; case 2U: *sinx = -s; *cosx = -c; break; default: *sinx = -c; *cosx = s; break; /* case 3U */ } if (x != 0) { *sinx += (real)(0); *cosx += (real)(0); } } static real atan2dx(real y, real x) { /* In order to minimize round-off errors, this function rearranges the * arguments so that result of atan2 is in the range [-pi/4, pi/4] before * converting it to degrees and mapping the result to the correct * quadrant. */ int q = 0; real ang; if (fabs(y) > fabs(x)) { swapx(&x, &y); q = 2; } if (x < 0) { x = -x; ++q; } /* here x >= 0 and x >= abs(y), so angle is in [-pi/4, pi/4] */ ang = atan2(y, x) / degree; switch (q) { /* Note that atan2d(-0.0, 1.0) will return -0. However, we expect that * atan2d will not be called with y = -0. If need be, include * * case 0: ang = 0 + ang; break; */ case 1: ang = (y >= 0 ? 180 : -180) - ang; break; case 2: ang = 90 - ang; break; case 3: ang = -90 + ang; break; default: break; } return ang; } static void A3coeff(struct geod_geodesic* g); static void C3coeff(struct geod_geodesic* g); static void C4coeff(struct geod_geodesic* g); static real SinCosSeries(boolx sinp, real sinx, real cosx, const real c[], int n); static void Lengths(const struct geod_geodesic* g, real eps, real sig12, real ssig1, real csig1, real dn1, real ssig2, real csig2, real dn2, real cbet1, real cbet2, real* ps12b, real* pm12b, real* pm0, real* pM12, real* pM21, /* Scratch area of the right size */ real Ca[]); static real Astroid(real x, real y); static real InverseStart(const struct geod_geodesic* g, real sbet1, real cbet1, real dn1, real sbet2, real cbet2, real dn2, real lam12, real slam12, real clam12, real* psalp1, real* pcalp1, /* Only updated if return val >= 0 */ real* psalp2, real* pcalp2, /* Only updated for short lines */ real* pdnm, /* Scratch area of the right size */ real Ca[]); static real Lambda12(const struct geod_geodesic* g, real sbet1, real cbet1, real dn1, real sbet2, real cbet2, real dn2, real salp1, real calp1, real slam120, real clam120, real* psalp2, real* pcalp2, real* psig12, real* pssig1, real* pcsig1, real* pssig2, real* pcsig2, real* peps, real* pdomg12, boolx diffp, real* pdlam12, /* Scratch area of the right size */ real Ca[]); static real A3f(const struct geod_geodesic* g, real eps); static void C3f(const struct geod_geodesic* g, real eps, real c[]); static void C4f(const struct geod_geodesic* g, real eps, real c[]); static real A1m1f(real eps); static void C1f(real eps, real c[]); static void C1pf(real eps, real c[]); static real A2m1f(real eps); static void C2f(real eps, real c[]); static int transit(real lon1, real lon2); static int transitdirect(real lon1, real lon2); static void accini(real s[]); static void acccopy(const real s[], real t[]); static void accadd(real s[], real y); static real accsum(const real s[], real y); static void accneg(real s[]); static void accrem(real s[], real y); static real areareduceA(real area[], real area0, int crossings, boolx reverse, boolx sign); static real areareduceB(real area, real area0, int crossings, boolx reverse, boolx sign); void geod_init(struct geod_geodesic* g, real a, real f) { if (!init) Init(); g->a = a; g->f = f; g->f1 = 1 - g->f; g->e2 = g->f * (2 - g->f); g->ep2 = g->e2 / sq(g->f1); /* e2 / (1 - e2) */ g->n = g->f / ( 2 - g->f); g->b = g->a * g->f1; g->c2 = (sq(g->a) + sq(g->b) * (g->e2 == 0 ? 1 : (g->e2 > 0 ? atanh(sqrt(g->e2)) : atan(sqrt(-g->e2))) / sqrt(fabs(g->e2))))/2; /* authalic radius squared */ /* The sig12 threshold for "really short". Using the auxiliary sphere * solution with dnm computed at (bet1 + bet2) / 2, the relative error in the * azimuth consistency check is sig12^2 * abs(f) * min(1, 1-f/2) / 2. (Error * measured for 1/100 < b/a < 100 and abs(f) >= 1/1000. For a given f and * sig12, the max error occurs for lines near the pole. If the old rule for * computing dnm = (dn1 + dn2)/2 is used, then the error increases by a * factor of 2.) Setting this equal to epsilon gives sig12 = etol2. Here * 0.1 is a safety factor (error decreased by 100) and max(0.001, abs(f)) * stops etol2 getting too large in the nearly spherical case. */ g->etol2 = 0.1 * tol2 / sqrt( maxx((real)(0.001), fabs(g->f)) * minx((real)(1), 1 - g->f/2) / 2 ); A3coeff(g); C3coeff(g); C4coeff(g); } static void geod_lineinit_int(struct geod_geodesicline* l, const struct geod_geodesic* g, real lat1, real lon1, real azi1, real salp1, real calp1, unsigned caps) { real cbet1, sbet1, eps; l->a = g->a; l->f = g->f; l->b = g->b; l->c2 = g->c2; l->f1 = g->f1; /* If caps is 0 assume the standard direct calculation */ l->caps = (caps ? caps : GEOD_DISTANCE_IN | GEOD_LONGITUDE) | /* always allow latitude and azimuth and unrolling of longitude */ GEOD_LATITUDE | GEOD_AZIMUTH | GEOD_LONG_UNROLL; l->lat1 = LatFix(lat1); l->lon1 = lon1; l->azi1 = azi1; l->salp1 = salp1; l->calp1 = calp1; sincosdx(AngRound(l->lat1), &sbet1, &cbet1); sbet1 *= l->f1; /* Ensure cbet1 = +epsilon at poles */ norm2(&sbet1, &cbet1); cbet1 = maxx(tiny, cbet1); l->dn1 = sqrt(1 + g->ep2 * sq(sbet1)); /* Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0), */ l->salp0 = l->salp1 * cbet1; /* alp0 in [0, pi/2 - |bet1|] */ /* Alt: calp0 = hypot(sbet1, calp1 * cbet1). The following * is slightly better (consider the case salp1 = 0). */ l->calp0 = hypot(l->calp1, l->salp1 * sbet1); /* Evaluate sig with tan(bet1) = tan(sig1) * cos(alp1). * sig = 0 is nearest northward crossing of equator. * With bet1 = 0, alp1 = pi/2, we have sig1 = 0 (equatorial line). * With bet1 = pi/2, alp1 = -pi, sig1 = pi/2 * With bet1 = -pi/2, alp1 = 0 , sig1 = -pi/2 * Evaluate omg1 with tan(omg1) = sin(alp0) * tan(sig1). * With alp0 in (0, pi/2], quadrants for sig and omg coincide. * No atan2(0,0) ambiguity at poles since cbet1 = +epsilon. * With alp0 = 0, omg1 = 0 for alp1 = 0, omg1 = pi for alp1 = pi. */ l->ssig1 = sbet1; l->somg1 = l->salp0 * sbet1; l->csig1 = l->comg1 = sbet1 != 0 || l->calp1 != 0 ? cbet1 * l->calp1 : 1; norm2(&l->ssig1, &l->csig1); /* sig1 in (-pi, pi] */ /* norm2(somg1, comg1); -- don't need to normalize! */ l->k2 = sq(l->calp0) * g->ep2; eps = l->k2 / (2 * (1 + sqrt(1 + l->k2)) + l->k2); if (l->caps & CAP_C1) { real s, c; l->A1m1 = A1m1f(eps); C1f(eps, l->C1a); l->B11 = SinCosSeries(TRUE, l->ssig1, l->csig1, l->C1a, nC1); s = sin(l->B11); c = cos(l->B11); /* tau1 = sig1 + B11 */ l->stau1 = l->ssig1 * c + l->csig1 * s; l->ctau1 = l->csig1 * c - l->ssig1 * s; /* Not necessary because C1pa reverts C1a * B11 = -SinCosSeries(TRUE, stau1, ctau1, C1pa, nC1p); */ } if (l->caps & CAP_C1p) C1pf(eps, l->C1pa); if (l->caps & CAP_C2) { l->A2m1 = A2m1f(eps); C2f(eps, l->C2a); l->B21 = SinCosSeries(TRUE, l->ssig1, l->csig1, l->C2a, nC2); } if (l->caps & CAP_C3) { C3f(g, eps, l->C3a); l->A3c = -l->f * l->salp0 * A3f(g, eps); l->B31 = SinCosSeries(TRUE, l->ssig1, l->csig1, l->C3a, nC3-1); } if (l->caps & CAP_C4) { C4f(g, eps, l->C4a); /* Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0) */ l->A4 = sq(l->a) * l->calp0 * l->salp0 * g->e2; l->B41 = SinCosSeries(FALSE, l->ssig1, l->csig1, l->C4a, nC4); } l->a13 = l->s13 = NaN; } void geod_lineinit(struct geod_geodesicline* l, const struct geod_geodesic* g, real lat1, real lon1, real azi1, unsigned caps) { real salp1, calp1; azi1 = AngNormalize(azi1); /* Guard against underflow in salp0 */ sincosdx(AngRound(azi1), &salp1, &calp1); geod_lineinit_int(l, g, lat1, lon1, azi1, salp1, calp1, caps); } void geod_gendirectline(struct geod_geodesicline* l, const struct geod_geodesic* g, real lat1, real lon1, real azi1, unsigned flags, real s12_a12, unsigned caps) { geod_lineinit(l, g, lat1, lon1, azi1, caps); geod_gensetdistance(l, flags, s12_a12); } void geod_directline(struct geod_geodesicline* l, const struct geod_geodesic* g, real lat1, real lon1, real azi1, real s12, unsigned caps) { geod_gendirectline(l, g, lat1, lon1, azi1, GEOD_NOFLAGS, s12, caps); } real geod_genposition(const struct geod_geodesicline* l, unsigned flags, real s12_a12, real* plat2, real* plon2, real* pazi2, real* ps12, real* pm12, real* pM12, real* pM21, real* pS12) { real lat2 = 0, lon2 = 0, azi2 = 0, s12 = 0, m12 = 0, M12 = 0, M21 = 0, S12 = 0; /* Avoid warning about uninitialized B12. */ real sig12, ssig12, csig12, B12 = 0, AB1 = 0; real omg12, lam12, lon12; real ssig2, csig2, sbet2, cbet2, somg2, comg2, salp2, calp2, dn2; unsigned outmask = (plat2 ? GEOD_LATITUDE : GEOD_NONE) | (plon2 ? GEOD_LONGITUDE : GEOD_NONE) | (pazi2 ? GEOD_AZIMUTH : GEOD_NONE) | (ps12 ? GEOD_DISTANCE : GEOD_NONE) | (pm12 ? GEOD_REDUCEDLENGTH : GEOD_NONE) | (pM12 || pM21 ? GEOD_GEODESICSCALE : GEOD_NONE) | (pS12 ? GEOD_AREA : GEOD_NONE); outmask &= l->caps & OUT_ALL; if (!( (flags & GEOD_ARCMODE || (l->caps & (GEOD_DISTANCE_IN & OUT_ALL))) )) /* Impossible distance calculation requested */ return NaN; if (flags & GEOD_ARCMODE) { /* Interpret s12_a12 as spherical arc length */ sig12 = s12_a12 * degree; sincosdx(s12_a12, &ssig12, &csig12); } else { /* Interpret s12_a12 as distance */ real tau12 = s12_a12 / (l->b * (1 + l->A1m1)), s = sin(tau12), c = cos(tau12); /* tau2 = tau1 + tau12 */ B12 = - SinCosSeries(TRUE, l->stau1 * c + l->ctau1 * s, l->ctau1 * c - l->stau1 * s, l->C1pa, nC1p); sig12 = tau12 - (B12 - l->B11); ssig12 = sin(sig12); csig12 = cos(sig12); if (fabs(l->f) > 0.01) { /* Reverted distance series is inaccurate for |f| > 1/100, so correct * sig12 with 1 Newton iteration. The following table shows the * approximate maximum error for a = WGS_a() and various f relative to * GeodesicExact. * erri = the error in the inverse solution (nm) * errd = the error in the direct solution (series only) (nm) * errda = the error in the direct solution (series + 1 Newton) (nm) * * f erri errd errda * -1/5 12e6 1.2e9 69e6 * -1/10 123e3 12e6 765e3 * -1/20 1110 108e3 7155 * -1/50 18.63 200.9 27.12 * -1/100 18.63 23.78 23.37 * -1/150 18.63 21.05 20.26 * 1/150 22.35 24.73 25.83 * 1/100 22.35 25.03 25.31 * 1/50 29.80 231.9 30.44 * 1/20 5376 146e3 10e3 * 1/10 829e3 22e6 1.5e6 * 1/5 157e6 3.8e9 280e6 */ real serr; ssig2 = l->ssig1 * csig12 + l->csig1 * ssig12; csig2 = l->csig1 * csig12 - l->ssig1 * ssig12; B12 = SinCosSeries(TRUE, ssig2, csig2, l->C1a, nC1); serr = (1 + l->A1m1) * (sig12 + (B12 - l->B11)) - s12_a12 / l->b; sig12 = sig12 - serr / sqrt(1 + l->k2 * sq(ssig2)); ssig12 = sin(sig12); csig12 = cos(sig12); /* Update B12 below */ } } /* sig2 = sig1 + sig12 */ ssig2 = l->ssig1 * csig12 + l->csig1 * ssig12; csig2 = l->csig1 * csig12 - l->ssig1 * ssig12; dn2 = sqrt(1 + l->k2 * sq(ssig2)); if (outmask & (GEOD_DISTANCE | GEOD_REDUCEDLENGTH | GEOD_GEODESICSCALE)) { if (flags & GEOD_ARCMODE || fabs(l->f) > 0.01) B12 = SinCosSeries(TRUE, ssig2, csig2, l->C1a, nC1); AB1 = (1 + l->A1m1) * (B12 - l->B11); } /* sin(bet2) = cos(alp0) * sin(sig2) */ sbet2 = l->calp0 * ssig2; /* Alt: cbet2 = hypot(csig2, salp0 * ssig2); */ cbet2 = hypot(l->salp0, l->calp0 * csig2); if (cbet2 == 0) /* I.e., salp0 = 0, csig2 = 0. Break the degeneracy in this case */ cbet2 = csig2 = tiny; /* tan(alp0) = cos(sig2)*tan(alp2) */ salp2 = l->salp0; calp2 = l->calp0 * csig2; /* No need to normalize */ if (outmask & GEOD_DISTANCE) s12 = (flags & GEOD_ARCMODE) ? l->b * ((1 + l->A1m1) * sig12 + AB1) : s12_a12; if (outmask & GEOD_LONGITUDE) { real E = copysign(1, l->salp0); /* east or west going? */ /* tan(omg2) = sin(alp0) * tan(sig2) */ somg2 = l->salp0 * ssig2; comg2 = csig2; /* No need to normalize */ /* omg12 = omg2 - omg1 */ omg12 = (flags & GEOD_LONG_UNROLL) ? E * (sig12 - (atan2( ssig2, csig2) - atan2( l->ssig1, l->csig1)) + (atan2(E * somg2, comg2) - atan2(E * l->somg1, l->comg1))) : atan2(somg2 * l->comg1 - comg2 * l->somg1, comg2 * l->comg1 + somg2 * l->somg1); lam12 = omg12 + l->A3c * ( sig12 + (SinCosSeries(TRUE, ssig2, csig2, l->C3a, nC3-1) - l->B31)); lon12 = lam12 / degree; lon2 = (flags & GEOD_LONG_UNROLL) ? l->lon1 + lon12 : AngNormalize(AngNormalize(l->lon1) + AngNormalize(lon12)); } if (outmask & GEOD_LATITUDE) lat2 = atan2dx(sbet2, l->f1 * cbet2); if (outmask & GEOD_AZIMUTH) azi2 = atan2dx(salp2, calp2); if (outmask & (GEOD_REDUCEDLENGTH | GEOD_GEODESICSCALE)) { real B22 = SinCosSeries(TRUE, ssig2, csig2, l->C2a, nC2), AB2 = (1 + l->A2m1) * (B22 - l->B21), J12 = (l->A1m1 - l->A2m1) * sig12 + (AB1 - AB2); if (outmask & GEOD_REDUCEDLENGTH) /* Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure * accurate cancellation in the case of coincident points. */ m12 = l->b * ((dn2 * (l->csig1 * ssig2) - l->dn1 * (l->ssig1 * csig2)) - l->csig1 * csig2 * J12); if (outmask & GEOD_GEODESICSCALE) { real t = l->k2 * (ssig2 - l->ssig1) * (ssig2 + l->ssig1) / (l->dn1 + dn2); M12 = csig12 + (t * ssig2 - csig2 * J12) * l->ssig1 / l->dn1; M21 = csig12 - (t * l->ssig1 - l->csig1 * J12) * ssig2 / dn2; } } if (outmask & GEOD_AREA) { real B42 = SinCosSeries(FALSE, ssig2, csig2, l->C4a, nC4); real salp12, calp12; if (l->calp0 == 0 || l->salp0 == 0) { /* alp12 = alp2 - alp1, used in atan2 so no need to normalize */ salp12 = salp2 * l->calp1 - calp2 * l->salp1; calp12 = calp2 * l->calp1 + salp2 * l->salp1; } else { /* tan(alp) = tan(alp0) * sec(sig) * tan(alp2-alp1) = (tan(alp2) -tan(alp1)) / (tan(alp2)*tan(alp1)+1) * = calp0 * salp0 * (csig1-csig2) / (salp0^2 + calp0^2 * csig1*csig2) * If csig12 > 0, write * csig1 - csig2 = ssig12 * (csig1 * ssig12 / (1 + csig12) + ssig1) * else * csig1 - csig2 = csig1 * (1 - csig12) + ssig12 * ssig1 * No need to normalize */ salp12 = l->calp0 * l->salp0 * (csig12 <= 0 ? l->csig1 * (1 - csig12) + ssig12 * l->ssig1 : ssig12 * (l->csig1 * ssig12 / (1 + csig12) + l->ssig1)); calp12 = sq(l->salp0) + sq(l->calp0) * l->csig1 * csig2; } S12 = l->c2 * atan2(salp12, calp12) + l->A4 * (B42 - l->B41); } /* In the pattern * * if ((outmask & GEOD_XX) && pYY) * *pYY = YY; * * the second check "&& pYY" is redundant. It's there to make the CLang * static analyzer happy. */ if ((outmask & GEOD_LATITUDE) && plat2) *plat2 = lat2; if ((outmask & GEOD_LONGITUDE) && plon2) *plon2 = lon2; if ((outmask & GEOD_AZIMUTH) && pazi2) *pazi2 = azi2; if ((outmask & GEOD_DISTANCE) && ps12) *ps12 = s12; if ((outmask & GEOD_REDUCEDLENGTH) && pm12) *pm12 = m12; if (outmask & GEOD_GEODESICSCALE) { if (pM12) *pM12 = M12; if (pM21) *pM21 = M21; } if ((outmask & GEOD_AREA) && pS12) *pS12 = S12; return (flags & GEOD_ARCMODE) ? s12_a12 : sig12 / degree; } void geod_setdistance(struct geod_geodesicline* l, real s13) { l->s13 = s13; l->a13 = geod_genposition(l, GEOD_NOFLAGS, l->s13, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); } static void geod_setarc(struct geod_geodesicline* l, real a13) { l->a13 = a13; l->s13 = NaN; geod_genposition(l, GEOD_ARCMODE, l->a13, nullptr, nullptr, nullptr, &l->s13, nullptr, nullptr, nullptr, nullptr); } void geod_gensetdistance(struct geod_geodesicline* l, unsigned flags, real s13_a13) { (flags & GEOD_ARCMODE) ? geod_setarc(l, s13_a13) : geod_setdistance(l, s13_a13); } void geod_position(const struct geod_geodesicline* l, real s12, real* plat2, real* plon2, real* pazi2) { geod_genposition(l, FALSE, s12, plat2, plon2, pazi2, nullptr, nullptr, nullptr, nullptr, nullptr); } real geod_gendirect(const struct geod_geodesic* g, real lat1, real lon1, real azi1, unsigned flags, real s12_a12, real* plat2, real* plon2, real* pazi2, real* ps12, real* pm12, real* pM12, real* pM21, real* pS12) { struct geod_geodesicline l; unsigned outmask = (plat2 ? GEOD_LATITUDE : GEOD_NONE) | (plon2 ? GEOD_LONGITUDE : GEOD_NONE) | (pazi2 ? GEOD_AZIMUTH : GEOD_NONE) | (ps12 ? GEOD_DISTANCE : GEOD_NONE) | (pm12 ? GEOD_REDUCEDLENGTH : GEOD_NONE) | (pM12 || pM21 ? GEOD_GEODESICSCALE : GEOD_NONE) | (pS12 ? GEOD_AREA : GEOD_NONE); geod_lineinit(&l, g, lat1, lon1, azi1, /* Automatically supply GEOD_DISTANCE_IN if necessary */ outmask | ((flags & GEOD_ARCMODE) ? GEOD_NONE : GEOD_DISTANCE_IN)); return geod_genposition(&l, flags, s12_a12, plat2, plon2, pazi2, ps12, pm12, pM12, pM21, pS12); } void geod_direct(const struct geod_geodesic* g, real lat1, real lon1, real azi1, real s12, real* plat2, real* plon2, real* pazi2) { geod_gendirect(g, lat1, lon1, azi1, GEOD_NOFLAGS, s12, plat2, plon2, pazi2, nullptr, nullptr, nullptr, nullptr, nullptr); } static real geod_geninverse_int(const struct geod_geodesic* g, real lat1, real lon1, real lat2, real lon2, real* ps12, real* psalp1, real* pcalp1, real* psalp2, real* pcalp2, real* pm12, real* pM12, real* pM21, real* pS12) { real s12 = 0, m12 = 0, M12 = 0, M21 = 0, S12 = 0; real lon12, lon12s; int latsign, lonsign, swapp; real sbet1, cbet1, sbet2, cbet2, s12x = 0, m12x = 0; real dn1, dn2, lam12, slam12, clam12; real a12 = 0, sig12, calp1 = 0, salp1 = 0, calp2 = 0, salp2 = 0; real Ca[nC]; boolx meridian; /* somg12 > 1 marks that it needs to be calculated */ real omg12 = 0, somg12 = 2, comg12 = 0; unsigned outmask = (ps12 ? GEOD_DISTANCE : GEOD_NONE) | (pm12 ? GEOD_REDUCEDLENGTH : GEOD_NONE) | (pM12 || pM21 ? GEOD_GEODESICSCALE : GEOD_NONE) | (pS12 ? GEOD_AREA : GEOD_NONE); outmask &= OUT_ALL; /* Compute longitude difference (AngDiff does this carefully). Result is * in [-180, 180] but -180 is only for west-going geodesics. 180 is for * east-going and meridional geodesics. */ lon12 = AngDiff(lon1, lon2, &lon12s); /* Make longitude difference positive. */ lonsign = lon12 >= 0 ? 1 : -1; /* If very close to being on the same half-meridian, then make it so. */ lon12 = lonsign * AngRound(lon12); lon12s = AngRound((180 - lon12) - lonsign * lon12s); lam12 = lon12 * degree; if (lon12 > 90) { sincosdx(lon12s, &slam12, &clam12); clam12 = -clam12; } else sincosdx(lon12, &slam12, &clam12); /* If really close to the equator, treat as on equator. */ lat1 = AngRound(LatFix(lat1)); lat2 = AngRound(LatFix(lat2)); /* Swap points so that point with higher (abs) latitude is point 1 * If one latitude is a nan, then it becomes lat1. */ swapp = fabs(lat1) < fabs(lat2) ? -1 : 1; if (swapp < 0) { lonsign *= -1; swapx(&lat1, &lat2); } /* Make lat1 <= 0 */ latsign = lat1 < 0 ? 1 : -1; lat1 *= latsign; lat2 *= latsign; /* Now we have * * 0 <= lon12 <= 180 * -90 <= lat1 <= 0 * lat1 <= lat2 <= -lat1 * * longsign, swapp, latsign register the transformation to bring the * coordinates to this canonical form. In all cases, 1 means no change was * made. We make these transformations so that there are few cases to * check, e.g., on verifying quadrants in atan2. In addition, this * enforces some symmetries in the results returned. */ sincosdx(lat1, &sbet1, &cbet1); sbet1 *= g->f1; /* Ensure cbet1 = +epsilon at poles */ norm2(&sbet1, &cbet1); cbet1 = maxx(tiny, cbet1); sincosdx(lat2, &sbet2, &cbet2); sbet2 *= g->f1; /* Ensure cbet2 = +epsilon at poles */ norm2(&sbet2, &cbet2); cbet2 = maxx(tiny, cbet2); /* If cbet1 < -sbet1, then cbet2 - cbet1 is a sensitive measure of the * |bet1| - |bet2|. Alternatively (cbet1 >= -sbet1), abs(sbet2) + sbet1 is * a better measure. This logic is used in assigning calp2 in Lambda12. * Sometimes these quantities vanish and in that case we force bet2 = +/- * bet1 exactly. An example where is is necessary is the inverse problem * 48.522876735459 0 -48.52287673545898293 179.599720456223079643 * which failed with Visual Studio 10 (Release and Debug) */ if (cbet1 < -sbet1) { if (cbet2 == cbet1) sbet2 = sbet2 < 0 ? sbet1 : -sbet1; } else { if (fabs(sbet2) == -sbet1) cbet2 = cbet1; } dn1 = sqrt(1 + g->ep2 * sq(sbet1)); dn2 = sqrt(1 + g->ep2 * sq(sbet2)); meridian = lat1 == -90 || slam12 == 0; if (meridian) { /* Endpoints are on a single full meridian, so the geodesic might lie on * a meridian. */ real ssig1, csig1, ssig2, csig2; calp1 = clam12; salp1 = slam12; /* Head to the target longitude */ calp2 = 1; salp2 = 0; /* At the target we're heading north */ /* tan(bet) = tan(sig) * cos(alp) */ ssig1 = sbet1; csig1 = calp1 * cbet1; ssig2 = sbet2; csig2 = calp2 * cbet2; /* sig12 = sig2 - sig1 */ sig12 = atan2(maxx((real)(0), csig1 * ssig2 - ssig1 * csig2), csig1 * csig2 + ssig1 * ssig2); Lengths(g, g->n, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2, &s12x, &m12x, nullptr, (outmask & GEOD_GEODESICSCALE) ? &M12 : nullptr, (outmask & GEOD_GEODESICSCALE) ? &M21 : nullptr, Ca); /* Add the check for sig12 since zero length geodesics might yield m12 < * 0. Test case was * * echo 20.001 0 20.001 0 | GeodSolve -i * * In fact, we will have sig12 > pi/2 for meridional geodesic which is * not a shortest path. */ if (sig12 < 1 || m12x >= 0) { /* Need at least 2, to handle 90 0 90 180 */ if (sig12 < 3 * tiny || // Prevent negative s12 or m12 for short lines (sig12 < tol0 && (s12x < 0 || m12x < 0))) sig12 = m12x = s12x = 0; m12x *= g->b; s12x *= g->b; a12 = sig12 / degree; } else /* m12 < 0, i.e., prolate and too close to anti-podal */ meridian = FALSE; } if (!meridian && sbet1 == 0 && /* and sbet2 == 0 */ /* Mimic the way Lambda12 works with calp1 = 0 */ (g->f <= 0 || lon12s >= g->f * 180)) { /* Geodesic runs along equator */ calp1 = calp2 = 0; salp1 = salp2 = 1; s12x = g->a * lam12; sig12 = omg12 = lam12 / g->f1; m12x = g->b * sin(sig12); if (outmask & GEOD_GEODESICSCALE) M12 = M21 = cos(sig12); a12 = lon12 / g->f1; } else if (!meridian) { /* Now point1 and point2 belong within a hemisphere bounded by a * meridian and geodesic is neither meridional or equatorial. */ /* Figure a starting point for Newton's method */ real dnm = 0; sig12 = InverseStart(g, sbet1, cbet1, dn1, sbet2, cbet2, dn2, lam12, slam12, clam12, &salp1, &calp1, &salp2, &calp2, &dnm, Ca); if (sig12 >= 0) { /* Short lines (InverseStart sets salp2, calp2, dnm) */ s12x = sig12 * g->b * dnm; m12x = sq(dnm) * g->b * sin(sig12 / dnm); if (outmask & GEOD_GEODESICSCALE) M12 = M21 = cos(sig12 / dnm); a12 = sig12 / degree; omg12 = lam12 / (g->f1 * dnm); } else { /* Newton's method. This is a straightforward solution of f(alp1) = * lambda12(alp1) - lam12 = 0 with one wrinkle. f(alp) has exactly one * root in the interval (0, pi) and its derivative is positive at the * root. Thus f(alp) is positive for alp > alp1 and negative for alp < * alp1. During the course of the iteration, a range (alp1a, alp1b) is * maintained which brackets the root and with each evaluation of * f(alp) the range is shrunk, if possible. Newton's method is * restarted whenever the derivative of f is negative (because the new * value of alp1 is then further from the solution) or if the new * estimate of alp1 lies outside (0,pi); in this case, the new starting * guess is taken to be (alp1a + alp1b) / 2. */ real ssig1 = 0, csig1 = 0, ssig2 = 0, csig2 = 0, eps = 0, domg12 = 0; unsigned numit = 0; /* Bracketing range */ real salp1a = tiny, calp1a = 1, salp1b = tiny, calp1b = -1; boolx tripn = FALSE; boolx tripb = FALSE; for (; numit < maxit2; ++numit) { /* the WGS84 test set: mean = 1.47, sd = 1.25, max = 16 * WGS84 and random input: mean = 2.85, sd = 0.60 */ real dv = 0, v = Lambda12(g, sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1, slam12, clam12, &salp2, &calp2, &sig12, &ssig1, &csig1, &ssig2, &csig2, &eps, &domg12, numit < maxit1, &dv, Ca); /* Reversed test to allow escape with NaNs */ if (tripb || !(fabs(v) >= (tripn ? 8 : 1) * tol0)) break; /* Update bracketing values */ if (v > 0 && (numit > maxit1 || calp1/salp1 > calp1b/salp1b)) { salp1b = salp1; calp1b = calp1; } else if (v < 0 && (numit > maxit1 || calp1/salp1 < calp1a/salp1a)) { salp1a = salp1; calp1a = calp1; } if (numit < maxit1 && dv > 0) { real dalp1 = -v/dv; real sdalp1 = sin(dalp1), cdalp1 = cos(dalp1), nsalp1 = salp1 * cdalp1 + calp1 * sdalp1; if (nsalp1 > 0 && fabs(dalp1) < pi) { calp1 = calp1 * cdalp1 - salp1 * sdalp1; salp1 = nsalp1; norm2(&salp1, &calp1); /* In some regimes we don't get quadratic convergence because * slope -> 0. So use convergence conditions based on epsilon * instead of sqrt(epsilon). */ tripn = fabs(v) <= 16 * tol0; continue; } } /* Either dv was not positive or updated value was outside legal * range. Use the midpoint of the bracket as the next estimate. * This mechanism is not needed for the WGS84 ellipsoid, but it does * catch problems with more eccentric ellipsoids. Its efficacy is * such for the WGS84 test set with the starting guess set to alp1 = * 90deg: * the WGS84 test set: mean = 5.21, sd = 3.93, max = 24 * WGS84 and random input: mean = 4.74, sd = 0.99 */ salp1 = (salp1a + salp1b)/2; calp1 = (calp1a + calp1b)/2; norm2(&salp1, &calp1); tripn = FALSE; tripb = (fabs(salp1a - salp1) + (calp1a - calp1) < tolb || fabs(salp1 - salp1b) + (calp1 - calp1b) < tolb); } Lengths(g, eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2, &s12x, &m12x, nullptr, (outmask & GEOD_GEODESICSCALE) ? &M12 : nullptr, (outmask & GEOD_GEODESICSCALE) ? &M21 : nullptr, Ca); m12x *= g->b; s12x *= g->b; a12 = sig12 / degree; if (outmask & GEOD_AREA) { /* omg12 = lam12 - domg12 */ real sdomg12 = sin(domg12), cdomg12 = cos(domg12); somg12 = slam12 * cdomg12 - clam12 * sdomg12; comg12 = clam12 * cdomg12 + slam12 * sdomg12; } } } if (outmask & GEOD_DISTANCE) s12 = 0 + s12x; /* Convert -0 to 0 */ if (outmask & GEOD_REDUCEDLENGTH) m12 = 0 + m12x; /* Convert -0 to 0 */ if (outmask & GEOD_AREA) { real /* From Lambda12: sin(alp1) * cos(bet1) = sin(alp0) */ salp0 = salp1 * cbet1, calp0 = hypot(calp1, salp1 * sbet1); /* calp0 > 0 */ real alp12; if (calp0 != 0 && salp0 != 0) { real /* From Lambda12: tan(bet) = tan(sig) * cos(alp) */ ssig1 = sbet1, csig1 = calp1 * cbet1, ssig2 = sbet2, csig2 = calp2 * cbet2, k2 = sq(calp0) * g->ep2, eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2), /* Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0). */ A4 = sq(g->a) * calp0 * salp0 * g->e2; real B41, B42; norm2(&ssig1, &csig1); norm2(&ssig2, &csig2); C4f(g, eps, Ca); B41 = SinCosSeries(FALSE, ssig1, csig1, Ca, nC4); B42 = SinCosSeries(FALSE, ssig2, csig2, Ca, nC4); S12 = A4 * (B42 - B41); } else /* Avoid problems with indeterminate sig1, sig2 on equator */ S12 = 0; if (!meridian && somg12 > 1) { somg12 = sin(omg12); comg12 = cos(omg12); } if (!meridian && /* omg12 < 3/4 * pi */ comg12 > -(real)(0.7071) && /* Long difference not too big */ sbet2 - sbet1 < (real)(1.75)) { /* Lat difference not too big */ /* Use tan(Gamma/2) = tan(omg12/2) * * (tan(bet1/2)+tan(bet2/2))/(1+tan(bet1/2)*tan(bet2/2)) * with tan(x/2) = sin(x)/(1+cos(x)) */ real domg12 = 1 + comg12, dbet1 = 1 + cbet1, dbet2 = 1 + cbet2; alp12 = 2 * atan2( somg12 * ( sbet1 * dbet2 + sbet2 * dbet1 ), domg12 * ( sbet1 * sbet2 + dbet1 * dbet2 ) ); } else { /* alp12 = alp2 - alp1, used in atan2 so no need to normalize */ real salp12 = salp2 * calp1 - calp2 * salp1, calp12 = calp2 * calp1 + salp2 * salp1; /* The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz * salp12 = -0 and alp12 = -180. However this depends on the sign * being attached to 0 correctly. The following ensures the correct * behavior. */ if (salp12 == 0 && calp12 < 0) { salp12 = tiny * calp1; calp12 = -1; } alp12 = atan2(salp12, calp12); } S12 += g->c2 * alp12; S12 *= swapp * lonsign * latsign; /* Convert -0 to 0 */ S12 += 0; } /* Convert calp, salp to azimuth accounting for lonsign, swapp, latsign. */ if (swapp < 0) { swapx(&salp1, &salp2); swapx(&calp1, &calp2); if (outmask & GEOD_GEODESICSCALE) swapx(&M12, &M21); } salp1 *= swapp * lonsign; calp1 *= swapp * latsign; salp2 *= swapp * lonsign; calp2 *= swapp * latsign; if (psalp1) *psalp1 = salp1; if (pcalp1) *pcalp1 = calp1; if (psalp2) *psalp2 = salp2; if (pcalp2) *pcalp2 = calp2; if (outmask & GEOD_DISTANCE) *ps12 = s12; if (outmask & GEOD_REDUCEDLENGTH) *pm12 = m12; if (outmask & GEOD_GEODESICSCALE) { if (pM12) *pM12 = M12; if (pM21) *pM21 = M21; } if (outmask & GEOD_AREA) *pS12 = S12; /* Returned value in [0, 180] */ return a12; } real geod_geninverse(const struct geod_geodesic* g, real lat1, real lon1, real lat2, real lon2, real* ps12, real* pazi1, real* pazi2, real* pm12, real* pM12, real* pM21, real* pS12) { real salp1, calp1, salp2, calp2, a12 = geod_geninverse_int(g, lat1, lon1, lat2, lon2, ps12, &salp1, &calp1, &salp2, &calp2, pm12, pM12, pM21, pS12); if (pazi1) *pazi1 = atan2dx(salp1, calp1); if (pazi2) *pazi2 = atan2dx(salp2, calp2); return a12; } void geod_inverseline(struct geod_geodesicline* l, const struct geod_geodesic* g, real lat1, real lon1, real lat2, real lon2, unsigned caps) { real salp1, calp1, a12 = geod_geninverse_int(g, lat1, lon1, lat2, lon2, nullptr, &salp1, &calp1, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr), azi1 = atan2dx(salp1, calp1); caps = caps ? caps : GEOD_DISTANCE_IN | GEOD_LONGITUDE; /* Ensure that a12 can be converted to a distance */ if (caps & (OUT_ALL & GEOD_DISTANCE_IN)) caps |= GEOD_DISTANCE; geod_lineinit_int(l, g, lat1, lon1, azi1, salp1, calp1, caps); geod_setarc(l, a12); } void geod_inverse(const struct geod_geodesic* g, real lat1, real lon1, real lat2, real lon2, real* ps12, real* pazi1, real* pazi2) { geod_geninverse(g, lat1, lon1, lat2, lon2, ps12, pazi1, pazi2, nullptr, nullptr, nullptr, nullptr); } real SinCosSeries(boolx sinp, real sinx, real cosx, const real c[], int n) { /* Evaluate * y = sinp ? sum(c[i] * sin( 2*i * x), i, 1, n) : * sum(c[i] * cos((2*i+1) * x), i, 0, n-1) * using Clenshaw summation. N.B. c[0] is unused for sin series * Approx operation count = (n + 5) mult and (2 * n + 2) add */ real ar, y0, y1; c += (n + sinp); /* Point to one beyond last element */ ar = 2 * (cosx - sinx) * (cosx + sinx); /* 2 * cos(2 * x) */ y0 = (n & 1) ? *--c : 0; y1 = 0; /* accumulators for sum */ /* Now n is even */ n /= 2; while (n--) { /* Unroll loop x 2, so accumulators return to their original role */ y1 = ar * y0 - y1 + *--c; y0 = ar * y1 - y0 + *--c; } return sinp ? 2 * sinx * cosx * y0 /* sin(2 * x) * y0 */ : cosx * (y0 - y1); /* cos(x) * (y0 - y1) */ } void Lengths(const struct geod_geodesic* g, real eps, real sig12, real ssig1, real csig1, real dn1, real ssig2, real csig2, real dn2, real cbet1, real cbet2, real* ps12b, real* pm12b, real* pm0, real* pM12, real* pM21, /* Scratch area of the right size */ real Ca[]) { real m0 = 0, J12 = 0, A1 = 0, A2 = 0; real Cb[nC]; /* Return m12b = (reduced length)/b; also calculate s12b = distance/b, * and m0 = coefficient of secular term in expression for reduced length. */ boolx redlp = pm12b || pm0 || pM12 || pM21; if (ps12b || redlp) { A1 = A1m1f(eps); C1f(eps, Ca); if (redlp) { A2 = A2m1f(eps); C2f(eps, Cb); m0 = A1 - A2; A2 = 1 + A2; } A1 = 1 + A1; } if (ps12b) { real B1 = SinCosSeries(TRUE, ssig2, csig2, Ca, nC1) - SinCosSeries(TRUE, ssig1, csig1, Ca, nC1); /* Missing a factor of b */ *ps12b = A1 * (sig12 + B1); if (redlp) { real B2 = SinCosSeries(TRUE, ssig2, csig2, Cb, nC2) - SinCosSeries(TRUE, ssig1, csig1, Cb, nC2); J12 = m0 * sig12 + (A1 * B1 - A2 * B2); } } else if (redlp) { /* Assume here that nC1 >= nC2 */ int l; for (l = 1; l <= nC2; ++l) Cb[l] = A1 * Ca[l] - A2 * Cb[l]; J12 = m0 * sig12 + (SinCosSeries(TRUE, ssig2, csig2, Cb, nC2) - SinCosSeries(TRUE, ssig1, csig1, Cb, nC2)); } if (pm0) *pm0 = m0; if (pm12b) /* Missing a factor of b. * Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure * accurate cancellation in the case of coincident points. */ *pm12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) - csig1 * csig2 * J12; if (pM12 || pM21) { real csig12 = csig1 * csig2 + ssig1 * ssig2; real t = g->ep2 * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2); if (pM12) *pM12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1; if (pM21) *pM21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2; } } real Astroid(real x, real y) { /* Solve k^4+2*k^3-(x^2+y^2-1)*k^2-2*y^2*k-y^2 = 0 for positive root k. * This solution is adapted from Geocentric::Reverse. */ real k; real p = sq(x), q = sq(y), r = (p + q - 1) / 6; if ( !(q == 0 && r <= 0) ) { real /* Avoid possible division by zero when r = 0 by multiplying equations * for s and t by r^3 and r, resp. */ S = p * q / 4, /* S = r^3 * s */ r2 = sq(r), r3 = r * r2, /* The discriminant of the quadratic equation for T3. This is zero on * the evolute curve p^(1/3)+q^(1/3) = 1 */ disc = S * (S + 2 * r3); real u = r; real v, uv, w; if (disc >= 0) { real T3 = S + r3, T; /* Pick the sign on the sqrt to maximize abs(T3). This minimizes loss * of precision due to cancellation. The result is unchanged because * of the way the T is used in definition of u. */ T3 += T3 < 0 ? -sqrt(disc) : sqrt(disc); /* T3 = (r * t)^3 */ /* N.B. cbrt always returns the real root. cbrt(-8) = -2. */ T = cbrt(T3); /* T = r * t */ /* T can be zero; but then r2 / T -> 0. */ u += T + (T != 0 ? r2 / T : 0); } else { /* T is complex, but the way u is defined the result is real. */ real ang = atan2(sqrt(-disc), -(S + r3)); /* There are three possible cube roots. We choose the root which * avoids cancellation. Note that disc < 0 implies that r < 0. */ u += 2 * r * cos(ang / 3); } v = sqrt(sq(u) + q); /* guaranteed positive */ /* Avoid loss of accuracy when u < 0. */ uv = u < 0 ? q / (v - u) : u + v; /* u+v, guaranteed positive */ w = (uv - q) / (2 * v); /* positive? */ /* Rearrange expression for k to avoid loss of accuracy due to * subtraction. Division by 0 not possible because uv > 0, w >= 0. */ k = uv / (sqrt(uv + sq(w)) + w); /* guaranteed positive */ } else { /* q == 0 && r <= 0 */ /* y = 0 with |x| <= 1. Handle this case directly. * for y small, positive root is k = abs(y)/sqrt(1-x^2) */ k = 0; } return k; } real InverseStart(const struct geod_geodesic* g, real sbet1, real cbet1, real dn1, real sbet2, real cbet2, real dn2, real lam12, real slam12, real clam12, real* psalp1, real* pcalp1, /* Only updated if return val >= 0 */ real* psalp2, real* pcalp2, /* Only updated for short lines */ real* pdnm, /* Scratch area of the right size */ real Ca[]) { real salp1 = 0, calp1 = 0, salp2 = 0, calp2 = 0, dnm = 0; /* Return a starting point for Newton's method in salp1 and calp1 (function * value is -1). If Newton's method doesn't need to be used, return also * salp2 and calp2 and function value is sig12. */ real sig12 = -1, /* Return value */ /* bet12 = bet2 - bet1 in [0, pi); bet12a = bet2 + bet1 in (-pi, 0] */ sbet12 = sbet2 * cbet1 - cbet2 * sbet1, cbet12 = cbet2 * cbet1 + sbet2 * sbet1; real sbet12a; boolx shortline = cbet12 >= 0 && sbet12 < (real)(0.5) && cbet2 * lam12 < (real)(0.5); real somg12, comg12, ssig12, csig12; sbet12a = sbet2 * cbet1 + cbet2 * sbet1; if (shortline) { real sbetm2 = sq(sbet1 + sbet2), omg12; /* sin((bet1+bet2)/2)^2 * = (sbet1 + sbet2)^2 / ((sbet1 + sbet2)^2 + (cbet1 + cbet2)^2) */ sbetm2 /= sbetm2 + sq(cbet1 + cbet2); dnm = sqrt(1 + g->ep2 * sbetm2); omg12 = lam12 / (g->f1 * dnm); somg12 = sin(omg12); comg12 = cos(omg12); } else { somg12 = slam12; comg12 = clam12; } salp1 = cbet2 * somg12; calp1 = comg12 >= 0 ? sbet12 + cbet2 * sbet1 * sq(somg12) / (1 + comg12) : sbet12a - cbet2 * sbet1 * sq(somg12) / (1 - comg12); ssig12 = hypot(salp1, calp1); csig12 = sbet1 * sbet2 + cbet1 * cbet2 * comg12; if (shortline && ssig12 < g->etol2) { /* really short lines */ salp2 = cbet1 * somg12; calp2 = sbet12 - cbet1 * sbet2 * (comg12 >= 0 ? sq(somg12) / (1 + comg12) : 1 - comg12); norm2(&salp2, &calp2); /* Set return value */ sig12 = atan2(ssig12, csig12); } else if (fabs(g->n) > (real)(0.1) || /* No astroid calc if too eccentric */ csig12 >= 0 || ssig12 >= 6 * fabs(g->n) * pi * sq(cbet1)) { /* Nothing to do, zeroth order spherical approximation is OK */ } else { /* Scale lam12 and bet2 to x, y coordinate system where antipodal point * is at origin and singular point is at y = 0, x = -1. */ real y, lamscale, betscale; /* Volatile declaration needed to fix inverse case * 56.320923501171 0 -56.320923501171 179.664747671772880215 * which otherwise fails with g++ 4.4.4 x86 -O3 */ volatile real x; real lam12x = atan2(-slam12, -clam12); /* lam12 - pi */ if (g->f >= 0) { /* In fact f == 0 does not get here */ /* x = dlong, y = dlat */ { real k2 = sq(sbet1) * g->ep2, eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2); lamscale = g->f * cbet1 * A3f(g, eps) * pi; } betscale = lamscale * cbet1; x = lam12x / lamscale; y = sbet12a / betscale; } else { /* f < 0 */ /* x = dlat, y = dlong */ real cbet12a = cbet2 * cbet1 - sbet2 * sbet1, bet12a = atan2(sbet12a, cbet12a); real m12b, m0; /* In the case of lon12 = 180, this repeats a calculation made in * Inverse. */ Lengths(g, g->n, pi + bet12a, sbet1, -cbet1, dn1, sbet2, cbet2, dn2, cbet1, cbet2, nullptr, &m12b, &m0, nullptr, nullptr, Ca); x = -1 + m12b / (cbet1 * cbet2 * m0 * pi); betscale = x < -(real)(0.01) ? sbet12a / x : -g->f * sq(cbet1) * pi; lamscale = betscale / cbet1; y = lam12x / lamscale; } if (y > -tol1 && x > -1 - xthresh) { /* strip near cut */ if (g->f >= 0) { salp1 = minx((real)(1), -(real)(x)); calp1 = - sqrt(1 - sq(salp1)); } else { calp1 = maxx((real)(x > -tol1 ? 0 : -1), (real)(x)); salp1 = sqrt(1 - sq(calp1)); } } else { /* Estimate alp1, by solving the astroid problem. * * Could estimate alpha1 = theta + pi/2, directly, i.e., * calp1 = y/k; salp1 = -x/(1+k); for f >= 0 * calp1 = x/(1+k); salp1 = -y/k; for f < 0 (need to check) * * However, it's better to estimate omg12 from astroid and use * spherical formula to compute alp1. This reduces the mean number of * Newton iterations for astroid cases from 2.24 (min 0, max 6) to 2.12 * (min 0 max 5). The changes in the number of iterations are as * follows: * * change percent * 1 5 * 0 78 * -1 16 * -2 0.6 * -3 0.04 * -4 0.002 * * The histogram of iterations is (m = number of iterations estimating * alp1 directly, n = number of iterations estimating via omg12, total * number of trials = 148605): * * iter m n * 0 148 186 * 1 13046 13845 * 2 93315 102225 * 3 36189 32341 * 4 5396 7 * 5 455 1 * 6 56 0 * * Because omg12 is near pi, estimate work with omg12a = pi - omg12 */ real k = Astroid(x, y); real omg12a = lamscale * ( g->f >= 0 ? -x * k/(1 + k) : -y * (1 + k)/k ); somg12 = sin(omg12a); comg12 = -cos(omg12a); /* Update spherical estimate of alp1 using omg12 instead of lam12 */ salp1 = cbet2 * somg12; calp1 = sbet12a - cbet2 * sbet1 * sq(somg12) / (1 - comg12); } } /* Sanity check on starting guess. Backwards check allows NaN through. */ if (!(salp1 <= 0)) norm2(&salp1, &calp1); else { salp1 = 1; calp1 = 0; } *psalp1 = salp1; *pcalp1 = calp1; if (shortline) *pdnm = dnm; if (sig12 >= 0) { *psalp2 = salp2; *pcalp2 = calp2; } return sig12; } real Lambda12(const struct geod_geodesic* g, real sbet1, real cbet1, real dn1, real sbet2, real cbet2, real dn2, real salp1, real calp1, real slam120, real clam120, real* psalp2, real* pcalp2, real* psig12, real* pssig1, real* pcsig1, real* pssig2, real* pcsig2, real* peps, real* pdomg12, boolx diffp, real* pdlam12, /* Scratch area of the right size */ real Ca[]) { real salp2 = 0, calp2 = 0, sig12 = 0, ssig1 = 0, csig1 = 0, ssig2 = 0, csig2 = 0, eps = 0, domg12 = 0, dlam12 = 0; real salp0, calp0; real somg1, comg1, somg2, comg2, somg12, comg12, lam12; real B312, eta, k2; if (sbet1 == 0 && calp1 == 0) /* Break degeneracy of equatorial line. This case has already been * handled. */ calp1 = -tiny; /* sin(alp1) * cos(bet1) = sin(alp0) */ salp0 = salp1 * cbet1; calp0 = hypot(calp1, salp1 * sbet1); /* calp0 > 0 */ /* tan(bet1) = tan(sig1) * cos(alp1) * tan(omg1) = sin(alp0) * tan(sig1) = tan(omg1)=tan(alp1)*sin(bet1) */ ssig1 = sbet1; somg1 = salp0 * sbet1; csig1 = comg1 = calp1 * cbet1; norm2(&ssig1, &csig1); /* norm2(&somg1, &comg1); -- don't need to normalize! */ /* Enforce symmetries in the case abs(bet2) = -bet1. Need to be careful * about this case, since this can yield singularities in the Newton * iteration. * sin(alp2) * cos(bet2) = sin(alp0) */ salp2 = cbet2 != cbet1 ? salp0 / cbet2 : salp1; /* calp2 = sqrt(1 - sq(salp2)) * = sqrt(sq(calp0) - sq(sbet2)) / cbet2 * and subst for calp0 and rearrange to give (choose positive sqrt * to give alp2 in [0, pi/2]). */ calp2 = cbet2 != cbet1 || fabs(sbet2) != -sbet1 ? sqrt(sq(calp1 * cbet1) + (cbet1 < -sbet1 ? (cbet2 - cbet1) * (cbet1 + cbet2) : (sbet1 - sbet2) * (sbet1 + sbet2))) / cbet2 : fabs(calp1); /* tan(bet2) = tan(sig2) * cos(alp2) * tan(omg2) = sin(alp0) * tan(sig2). */ ssig2 = sbet2; somg2 = salp0 * sbet2; csig2 = comg2 = calp2 * cbet2; norm2(&ssig2, &csig2); /* norm2(&somg2, &comg2); -- don't need to normalize! */ /* sig12 = sig2 - sig1, limit to [0, pi] */ sig12 = atan2(maxx((real)(0), csig1 * ssig2 - ssig1 * csig2), csig1 * csig2 + ssig1 * ssig2); /* omg12 = omg2 - omg1, limit to [0, pi] */ somg12 = maxx((real)(0), comg1 * somg2 - somg1 * comg2); comg12 = comg1 * comg2 + somg1 * somg2; /* eta = omg12 - lam120 */ eta = atan2(somg12 * clam120 - comg12 * slam120, comg12 * clam120 + somg12 * slam120); k2 = sq(calp0) * g->ep2; eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2); C3f(g, eps, Ca); B312 = (SinCosSeries(TRUE, ssig2, csig2, Ca, nC3-1) - SinCosSeries(TRUE, ssig1, csig1, Ca, nC3-1)); domg12 = -g->f * A3f(g, eps) * salp0 * (sig12 + B312); lam12 = eta + domg12; if (diffp) { if (calp2 == 0) dlam12 = - 2 * g->f1 * dn1 / sbet1; else { Lengths(g, eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2, nullptr, &dlam12, nullptr, nullptr, nullptr, Ca); dlam12 *= g->f1 / (calp2 * cbet2); } } *psalp2 = salp2; *pcalp2 = calp2; *psig12 = sig12; *pssig1 = ssig1; *pcsig1 = csig1; *pssig2 = ssig2; *pcsig2 = csig2; *peps = eps; *pdomg12 = domg12; if (diffp) *pdlam12 = dlam12; return lam12; } real A3f(const struct geod_geodesic* g, real eps) { /* Evaluate A3 */ return polyval(nA3 - 1, g->A3x, eps); } void C3f(const struct geod_geodesic* g, real eps, real c[]) { /* Evaluate C3 coeffs * Elements c[1] through c[nC3 - 1] are set */ real mult = 1; int o = 0, l; for (l = 1; l < nC3; ++l) { /* l is index of C3[l] */ int m = nC3 - l - 1; /* order of polynomial in eps */ mult *= eps; c[l] = mult * polyval(m, g->C3x + o, eps); o += m + 1; } } void C4f(const struct geod_geodesic* g, real eps, real c[]) { /* Evaluate C4 coeffs * Elements c[0] through c[nC4 - 1] are set */ real mult = 1; int o = 0, l; for (l = 0; l < nC4; ++l) { /* l is index of C4[l] */ int m = nC4 - l - 1; /* order of polynomial in eps */ c[l] = mult * polyval(m, g->C4x + o, eps); o += m + 1; mult *= eps; } } /* The scale factor A1-1 = mean value of (d/dsigma)I1 - 1 */ real A1m1f(real eps) { static const real coeff[] = { /* (1-eps)*A1-1, polynomial in eps2 of order 3 */ 1, 4, 64, 0, 256, }; int m = nA1/2; real t = polyval(m, coeff, sq(eps)) / coeff[m + 1]; return (t + eps) / (1 - eps); } /* The coefficients C1[l] in the Fourier expansion of B1 */ void C1f(real eps, real c[]) { static const real coeff[] = { /* C1[1]/eps^1, polynomial in eps2 of order 2 */ -1, 6, -16, 32, /* C1[2]/eps^2, polynomial in eps2 of order 2 */ -9, 64, -128, 2048, /* C1[3]/eps^3, polynomial in eps2 of order 1 */ 9, -16, 768, /* C1[4]/eps^4, polynomial in eps2 of order 1 */ 3, -5, 512, /* C1[5]/eps^5, polynomial in eps2 of order 0 */ -7, 1280, /* C1[6]/eps^6, polynomial in eps2 of order 0 */ -7, 2048, }; real eps2 = sq(eps), d = eps; int o = 0, l; for (l = 1; l <= nC1; ++l) { /* l is index of C1p[l] */ int m = (nC1 - l) / 2; /* order of polynomial in eps^2 */ c[l] = d * polyval(m, coeff + o, eps2) / coeff[o + m + 1]; o += m + 2; d *= eps; } } /* The coefficients C1p[l] in the Fourier expansion of B1p */ void C1pf(real eps, real c[]) { static const real coeff[] = { /* C1p[1]/eps^1, polynomial in eps2 of order 2 */ 205, -432, 768, 1536, /* C1p[2]/eps^2, polynomial in eps2 of order 2 */ 4005, -4736, 3840, 12288, /* C1p[3]/eps^3, polynomial in eps2 of order 1 */ -225, 116, 384, /* C1p[4]/eps^4, polynomial in eps2 of order 1 */ -7173, 2695, 7680, /* C1p[5]/eps^5, polynomial in eps2 of order 0 */ 3467, 7680, /* C1p[6]/eps^6, polynomial in eps2 of order 0 */ 38081, 61440, }; real eps2 = sq(eps), d = eps; int o = 0, l; for (l = 1; l <= nC1p; ++l) { /* l is index of C1p[l] */ int m = (nC1p - l) / 2; /* order of polynomial in eps^2 */ c[l] = d * polyval(m, coeff + o, eps2) / coeff[o + m + 1]; o += m + 2; d *= eps; } } /* The scale factor A2-1 = mean value of (d/dsigma)I2 - 1 */ real A2m1f(real eps) { static const real coeff[] = { /* (eps+1)*A2-1, polynomial in eps2 of order 3 */ -11, -28, -192, 0, 256, }; int m = nA2/2; real t = polyval(m, coeff, sq(eps)) / coeff[m + 1]; return (t - eps) / (1 + eps); } /* The coefficients C2[l] in the Fourier expansion of B2 */ void C2f(real eps, real c[]) { static const real coeff[] = { /* C2[1]/eps^1, polynomial in eps2 of order 2 */ 1, 2, 16, 32, /* C2[2]/eps^2, polynomial in eps2 of order 2 */ 35, 64, 384, 2048, /* C2[3]/eps^3, polynomial in eps2 of order 1 */ 15, 80, 768, /* C2[4]/eps^4, polynomial in eps2 of order 1 */ 7, 35, 512, /* C2[5]/eps^5, polynomial in eps2 of order 0 */ 63, 1280, /* C2[6]/eps^6, polynomial in eps2 of order 0 */ 77, 2048, }; real eps2 = sq(eps), d = eps; int o = 0, l; for (l = 1; l <= nC2; ++l) { /* l is index of C2[l] */ int m = (nC2 - l) / 2; /* order of polynomial in eps^2 */ c[l] = d * polyval(m, coeff + o, eps2) / coeff[o + m + 1]; o += m + 2; d *= eps; } } /* The scale factor A3 = mean value of (d/dsigma)I3 */ void A3coeff(struct geod_geodesic* g) { static const real coeff[] = { /* A3, coeff of eps^5, polynomial in n of order 0 */ -3, 128, /* A3, coeff of eps^4, polynomial in n of order 1 */ -2, -3, 64, /* A3, coeff of eps^3, polynomial in n of order 2 */ -1, -3, -1, 16, /* A3, coeff of eps^2, polynomial in n of order 2 */ 3, -1, -2, 8, /* A3, coeff of eps^1, polynomial in n of order 1 */ 1, -1, 2, /* A3, coeff of eps^0, polynomial in n of order 0 */ 1, 1, }; int o = 0, k = 0, j; for (j = nA3 - 1; j >= 0; --j) { /* coeff of eps^j */ int m = nA3 - j - 1 < j ? nA3 - j - 1 : j; /* order of polynomial in n */ g->A3x[k++] = polyval(m, coeff + o, g->n) / coeff[o + m + 1]; o += m + 2; } } /* The coefficients C3[l] in the Fourier expansion of B3 */ void C3coeff(struct geod_geodesic* g) { static const real coeff[] = { /* C3[1], coeff of eps^5, polynomial in n of order 0 */ 3, 128, /* C3[1], coeff of eps^4, polynomial in n of order 1 */ 2, 5, 128, /* C3[1], coeff of eps^3, polynomial in n of order 2 */ -1, 3, 3, 64, /* C3[1], coeff of eps^2, polynomial in n of order 2 */ -1, 0, 1, 8, /* C3[1], coeff of eps^1, polynomial in n of order 1 */ -1, 1, 4, /* C3[2], coeff of eps^5, polynomial in n of order 0 */ 5, 256, /* C3[2], coeff of eps^4, polynomial in n of order 1 */ 1, 3, 128, /* C3[2], coeff of eps^3, polynomial in n of order 2 */ -3, -2, 3, 64, /* C3[2], coeff of eps^2, polynomial in n of order 2 */ 1, -3, 2, 32, /* C3[3], coeff of eps^5, polynomial in n of order 0 */ 7, 512, /* C3[3], coeff of eps^4, polynomial in n of order 1 */ -10, 9, 384, /* C3[3], coeff of eps^3, polynomial in n of order 2 */ 5, -9, 5, 192, /* C3[4], coeff of eps^5, polynomial in n of order 0 */ 7, 512, /* C3[4], coeff of eps^4, polynomial in n of order 1 */ -14, 7, 512, /* C3[5], coeff of eps^5, polynomial in n of order 0 */ 21, 2560, }; int o = 0, k = 0, l, j; for (l = 1; l < nC3; ++l) { /* l is index of C3[l] */ for (j = nC3 - 1; j >= l; --j) { /* coeff of eps^j */ int m = nC3 - j - 1 < j ? nC3 - j - 1 : j; /* order of polynomial in n */ g->C3x[k++] = polyval(m, coeff + o, g->n) / coeff[o + m + 1]; o += m + 2; } } } /* The coefficients C4[l] in the Fourier expansion of I4 */ void C4coeff(struct geod_geodesic* g) { static const real coeff[] = { /* C4[0], coeff of eps^5, polynomial in n of order 0 */ 97, 15015, /* C4[0], coeff of eps^4, polynomial in n of order 1 */ 1088, 156, 45045, /* C4[0], coeff of eps^3, polynomial in n of order 2 */ -224, -4784, 1573, 45045, /* C4[0], coeff of eps^2, polynomial in n of order 3 */ -10656, 14144, -4576, -858, 45045, /* C4[0], coeff of eps^1, polynomial in n of order 4 */ 64, 624, -4576, 6864, -3003, 15015, /* C4[0], coeff of eps^0, polynomial in n of order 5 */ 100, 208, 572, 3432, -12012, 30030, 45045, /* C4[1], coeff of eps^5, polynomial in n of order 0 */ 1, 9009, /* C4[1], coeff of eps^4, polynomial in n of order 1 */ -2944, 468, 135135, /* C4[1], coeff of eps^3, polynomial in n of order 2 */ 5792, 1040, -1287, 135135, /* C4[1], coeff of eps^2, polynomial in n of order 3 */ 5952, -11648, 9152, -2574, 135135, /* C4[1], coeff of eps^1, polynomial in n of order 4 */ -64, -624, 4576, -6864, 3003, 135135, /* C4[2], coeff of eps^5, polynomial in n of order 0 */ 8, 10725, /* C4[2], coeff of eps^4, polynomial in n of order 1 */ 1856, -936, 225225, /* C4[2], coeff of eps^3, polynomial in n of order 2 */ -8448, 4992, -1144, 225225, /* C4[2], coeff of eps^2, polynomial in n of order 3 */ -1440, 4160, -4576, 1716, 225225, /* C4[3], coeff of eps^5, polynomial in n of order 0 */ -136, 63063, /* C4[3], coeff of eps^4, polynomial in n of order 1 */ 1024, -208, 105105, /* C4[3], coeff of eps^3, polynomial in n of order 2 */ 3584, -3328, 1144, 315315, /* C4[4], coeff of eps^5, polynomial in n of order 0 */ -128, 135135, /* C4[4], coeff of eps^4, polynomial in n of order 1 */ -2560, 832, 405405, /* C4[5], coeff of eps^5, polynomial in n of order 0 */ 128, 99099, }; int o = 0, k = 0, l, j; for (l = 0; l < nC4; ++l) { /* l is index of C4[l] */ for (j = nC4 - 1; j >= l; --j) { /* coeff of eps^j */ int m = nC4 - j - 1; /* order of polynomial in n */ g->C4x[k++] = polyval(m, coeff + o, g->n) / coeff[o + m + 1]; o += m + 2; } } } int transit(real lon1, real lon2) { real lon12; /* Return 1 or -1 if crossing prime meridian in east or west direction. * Otherwise return zero. */ /* Compute lon12 the same way as Geodesic::Inverse. */ lon1 = AngNormalize(lon1); lon2 = AngNormalize(lon2); lon12 = AngDiff(lon1, lon2, nullptr); return lon1 <= 0 && lon2 > 0 && lon12 > 0 ? 1 : (lon2 <= 0 && lon1 > 0 && lon12 < 0 ? -1 : 0); } int transitdirect(real lon1, real lon2) { /* Compute exactly the parity of int(ceil(lon2 / 360)) - int(ceil(lon1 / 360)) */ lon1 = remainder(lon1, (real)(720)); lon2 = remainder(lon2, (real)(720)); return ( (lon2 <= 0 && lon2 > -360 ? 1 : 0) - (lon1 <= 0 && lon1 > -360 ? 1 : 0) ); } void accini(real s[]) { /* Initialize an accumulator; this is an array with two elements. */ s[0] = s[1] = 0; } void acccopy(const real s[], real t[]) { /* Copy an accumulator; t = s. */ t[0] = s[0]; t[1] = s[1]; } void accadd(real s[], real y) { /* Add y to an accumulator. */ real u, z = sumx(y, s[1], &u); s[0] = sumx(z, s[0], &s[1]); if (s[0] == 0) s[0] = u; else s[1] = s[1] + u; } real accsum(const real s[], real y) { /* Return accumulator + y (but don't add to accumulator). */ real t[2]; acccopy(s, t); accadd(t, y); return t[0]; } void accneg(real s[]) { /* Negate an accumulator. */ s[0] = -s[0]; s[1] = -s[1]; } void accrem(real s[], real y) { /* Reduce to [-y/2, y/2]. */ s[0] = remainder(s[0], y); accadd(s, (real)(0)); } void geod_polygon_init(struct geod_polygon* p, boolx polylinep) { p->polyline = (polylinep != 0); geod_polygon_clear(p); } void geod_polygon_clear(struct geod_polygon* p) { p->lat0 = p->lon0 = p->lat = p->lon = NaN; accini(p->P); accini(p->A); p->num = p->crossings = 0; } void geod_polygon_addpoint(const struct geod_geodesic* g, struct geod_polygon* p, real lat, real lon) { lon = AngNormalize(lon); if (p->num == 0) { p->lat0 = p->lat = lat; p->lon0 = p->lon = lon; } else { real s12, S12 = 0; /* Initialize S12 to stop Visual Studio warning */ geod_geninverse(g, p->lat, p->lon, lat, lon, &s12, nullptr, nullptr, nullptr, nullptr, nullptr, p->polyline ? nullptr : &S12); accadd(p->P, s12); if (!p->polyline) { accadd(p->A, S12); p->crossings += transit(p->lon, lon); } p->lat = lat; p->lon = lon; } ++p->num; } void geod_polygon_addedge(const struct geod_geodesic* g, struct geod_polygon* p, real azi, real s) { if (p->num) { /* Do nothing is num is zero */ /* Initialize S12 to stop Visual Studio warning. Initialization of lat and * lon is to make CLang static analyzer happy. */ real lat = 0, lon = 0, S12 = 0; geod_gendirect(g, p->lat, p->lon, azi, GEOD_LONG_UNROLL, s, &lat, &lon, nullptr, nullptr, nullptr, nullptr, nullptr, p->polyline ? nullptr : &S12); accadd(p->P, s); if (!p->polyline) { accadd(p->A, S12); p->crossings += transitdirect(p->lon, lon); } p->lat = lat; p->lon = lon; ++p->num; } } unsigned geod_polygon_compute(const struct geod_geodesic* g, const struct geod_polygon* p, boolx reverse, boolx sign, real* pA, real* pP) { real s12, S12, t[2]; if (p->num < 2) { if (pP) *pP = 0; if (!p->polyline && pA) *pA = 0; return p->num; } if (p->polyline) { if (pP) *pP = p->P[0]; return p->num; } geod_geninverse(g, p->lat, p->lon, p->lat0, p->lon0, &s12, nullptr, nullptr, nullptr, nullptr, nullptr, &S12); if (pP) *pP = accsum(p->P, s12); acccopy(p->A, t); accadd(t, S12); if (pA) *pA = areareduceA(t, 4 * pi * g->c2, p->crossings + transit(p->lon, p->lon0), reverse, sign); return p->num; } unsigned geod_polygon_testpoint(const struct geod_geodesic* g, const struct geod_polygon* p, real lat, real lon, boolx reverse, boolx sign, real* pA, real* pP) { real perimeter, tempsum; int crossings, i; unsigned num = p->num + 1; if (num == 1) { if (pP) *pP = 0; if (!p->polyline && pA) *pA = 0; return num; } perimeter = p->P[0]; tempsum = p->polyline ? 0 : p->A[0]; crossings = p->crossings; for (i = 0; i < (p->polyline ? 1 : 2); ++i) { real s12, S12 = 0; /* Initialize S12 to stop Visual Studio warning */ geod_geninverse(g, i == 0 ? p->lat : lat, i == 0 ? p->lon : lon, i != 0 ? p->lat0 : lat, i != 0 ? p->lon0 : lon, &s12, nullptr, nullptr, nullptr, nullptr, nullptr, p->polyline ? nullptr : &S12); perimeter += s12; if (!p->polyline) { tempsum += S12; crossings += transit(i == 0 ? p->lon : lon, i != 0 ? p->lon0 : lon); } } if (pP) *pP = perimeter; if (p->polyline) return num; if (pA) *pA = areareduceB(tempsum, 4 * pi * g->c2, crossings, reverse, sign); return num; } unsigned geod_polygon_testedge(const struct geod_geodesic* g, const struct geod_polygon* p, real azi, real s, boolx reverse, boolx sign, real* pA, real* pP) { real perimeter, tempsum; int crossings; unsigned num = p->num + 1; if (num == 1) { /* we don't have a starting point! */ if (pP) *pP = NaN; if (!p->polyline && pA) *pA = NaN; return 0; } perimeter = p->P[0] + s; if (p->polyline) { if (pP) *pP = perimeter; return num; } tempsum = p->A[0]; crossings = p->crossings; { /* Initialization of lat, lon, and S12 is to make CLang static analyzer * happy. */ real lat = 0, lon = 0, s12, S12 = 0; geod_gendirect(g, p->lat, p->lon, azi, GEOD_LONG_UNROLL, s, &lat, &lon, nullptr, nullptr, nullptr, nullptr, nullptr, &S12); tempsum += S12; crossings += transitdirect(p->lon, lon); geod_geninverse(g, lat, lon, p->lat0, p->lon0, &s12, nullptr, nullptr, nullptr, nullptr, nullptr, &S12); perimeter += s12; tempsum += S12; crossings += transit(lon, p->lon0); } if (pP) *pP = perimeter; if (pA) *pA = areareduceB(tempsum, 4 * pi * g->c2, crossings, reverse, sign); return num; } void geod_polygonarea(const struct geod_geodesic* g, real lats[], real lons[], int n, real* pA, real* pP) { int i; struct geod_polygon p; geod_polygon_init(&p, FALSE); for (i = 0; i < n; ++i) geod_polygon_addpoint(g, &p, lats[i], lons[i]); geod_polygon_compute(g, &p, FALSE, TRUE, pA, pP); } real areareduceA(real area[], real area0, int crossings, boolx reverse, boolx sign) { accrem(area, area0); if (crossings & 1) accadd(area, (area[0] < 0 ? 1 : -1) * area0/2); /* area is with the clockwise sense. If !reverse convert to * counter-clockwise convention. */ if (!reverse) accneg(area); /* If sign put area in (-area0/2, area0/2], else put area in [0, area0) */ if (sign) { if (area[0] > area0/2) accadd(area, -area0); else if (area[0] <= -area0/2) accadd(area, +area0); } else { if (area[0] >= area0) accadd(area, -area0); else if (area[0] < 0) accadd(area, +area0); } return 0 + area[0]; } real areareduceB(real area, real area0, int crossings, boolx reverse, boolx sign) { area = remainder(area, area0); if (crossings & 1) area += (area < 0 ? 1 : -1) * area0/2; /* area is with the clockwise sense. If !reverse convert to * counter-clockwise convention. */ if (!reverse) area *= -1; /* If sign put area in (-area0/2, area0/2], else put area in [0, area0) */ if (sign) { if (area > area0/2) area -= area0; else if (area <= -area0/2) area += area0; } else { if (area >= area0) area -= area0; else if (area < 0) area += area0; } return 0 + area; } /** @endcond */ geosphere/vignettes/0000755000176200001440000000000014131211251014232 5ustar liggesusersgeosphere/vignettes/geosphere.Rnw0000644000176200001440000004033113472155746016733 0ustar liggesusers\documentclass{article} \usepackage{natbib} \usepackage{graphics} \usepackage{amsmath} \usepackage{indentfirst} \usepackage[utf8]{inputenc} \usepackage{hyperref} \usepackage{hanging} %\VignetteIndexEntry{Introduction to the geosphere package} \SweaveOpts{keep.source=TRUE} \SweaveOpts{png=TRUE, pdf=FALSE} \SweaveOpts{resolution=100} \begin{document} <>= options(keep.source = TRUE, width = 60) foo <- packageDescription("geosphere") @ \title{Introduction to the "geosphere" package \\ (Version \Sexpr{foo$Version})} \author{Robert J. Hijmans} \maketitle \section{Introduction} This vignette describes the R package '\verb@geosphere@'. The package implements spherical trigonometry functions for geographic applications. Many of the functions have applications in navigation, but others are more general, or have no relation to navigation at all. There is a number of functions to compute distance and direction (= bearing, azimuth, course) along great circles (= shortest distance on a sphere, or "as the crow flies") and along rhumb lines (lines of constant bearing). There are also functions that compute distances on a spheroid. Other functions include the computation of the location of an object at a given direction and distance; and the area, perimeter, and centroid of a spherical polygon. Geographic locations must be specified in longitude and latitude (and in that order!) in degrees (i.e., NOT in radians). Degrees are (obviously) in decimal notation. Thus 12 degrees, 10 minutes, 30 seconds = 12 + 10/60 + 30/3600 = 12.175 degrees. The southern and western hemispheres have a negative sign. The default unit of distance is meter; but this can be adjusted by supplying a different radius 'r' to functions. Directions are expressed in degrees (N = 0 and 360, E = 90, S = 180, and W = 270 degrees). If arguments of functions that take several arguments (e.g. points, bearings, radius of the earth), do not have the same length (for vectors) or number of rows (for matrices) the shorter arguments are re-cycled. Many functions in this package are based on formulae provided by Ed Williams (\url{http://www.edwilliams.org/ftp/avsig/avform.txt}, and partly on javascript implementations of these formulae by Chris Veness (\url{http://www.movable-type.co.uk/scripts/latlong.html} ) Most geodesic computations (for a spheroid rather than a sphere) use the GeographicLib by C.F.F. Karney (\url{http://geographiclib.sourceforge.net/}. \section{Great circle distance} There are four different functions to compute distance between two points. These are, in order of increasing complexity of the algorithm, the 'Spherical law of cosines', 'Haversine' (Sinnott, 1984), 'Vincenty Sphere' and 'Vincenty Ellipsoid' (Vincenty, 1975) methods. The first three assume the earth to be a sphere, while the 'Vincenty Ellipsoid' assumes it is an ellipsoid (which is closer to the truth). The results from the first three functions are identical for practical purposes. The Haversine ('half-versed-sine') formula was published by R.W. Sinnott in 1984, although it has been known for much longer. At that time computational precision was lower than today (15 digits precision). With current precision, the spherical law of cosines formula appears to give equally good results down to very small distances. If you want greater accuracy, you could use the distVincentyEllipsoid method. Below the differences between the three spherical methods are illustrated. At very short distances, there are small differences between the 'law of the Cosine' and the other two methods. There are even smaller differences between the 'Haversine' and 'Vincenty Sphere' methods at larger distances. <>= library(geosphere) Lon <- c(1:9/1000, 1:9/100, 1:9/10, 1:90*2) Lat <- c(1:9/1000, 1:9/100, 1:9/10, 1:90) dcos <- distCosine(c(0,0), cbind(Lon, Lat)) dhav <- distHaversine(c(0,0), cbind(Lon, Lat)) dvsp <- distVincentySphere(c(0,0), cbind(Lon, Lat)) par(mfrow=(c(1,2))) plot(log(dcos), dcos-dhav, col='red', ylim=c(-1e-05, 1e-05), xlab="Log 'Law of Cosines' distance (m)", ylab="Law of Cosines minus Haversine distance") plot(log(dhav), dhav-dvsp, col='blue', xlab="Log 'Haversine' distance (m)", ylab="Vincenty Sphere minus Haversine distance") @ The difference with the 'Vincenty Ellipsoid' method is more pronounced. In the example below (using the default WGS83 ellipsoid), the difference is about 0.3% at very small distances, and 0.15% at larger distances. <>= dvse <- distVincentyEllipsoid(c(0,0), cbind(Lon, Lat)) plot(dvsp/1000, (dvsp-dvse)/1000, col='blue', xlab='Vincenty Sphere Distance (km)', ylab="Difference between 'Vincenty Sphere' and 'Vincenty Ellipsoid' methods (km)") @ For the most precise distance computation use the 'distGeo' function. \section{Points on great circles} Points on a great circle are returned by the function 'greatCircle', using two points on the great circle to define it, and an additional argument to indicate how many points should be returned. You can also use greatCircleBearing, and provide starting points and bearing as arguments. gcIntermediate only returns points on the great circle that are on the track of shortest distance between the two points defining the great circle; and midPoint computes the point half-way between the two points. You can use onGreatCircle to test whether a point is on a great circle between two other points. <>= LA <- c(-118.40, 33.95) NY <- c(-73.78, 40.63) data(wrld) plot(wrld, type='l') gc <- greatCircle(LA, NY) lines(gc, lwd=2, col='blue') gci <- gcIntermediate(LA, NY) lines(gci, lwd=4, col='green') points(rbind(LA, NY), col='red', pch=20, cex=2) mp <- midPoint(LA, NY) onGreatCircle(LA,NY, rbind(mp,c(0,0))) points(mp, pch='*', cex=3, col='orange') greatCircleBearing(LA, brng=270, n=10) @ \section{Point at distance and bearing} Function destPoint returns the location of point given a point of origin, and a distance and bearing. Its perhaps obvious use in georeferencing locations of distant sitings. It can also be used to make circular polygons (with a fixed radius, but in longitude/latitude coordinates) <>= destPoint(LA, b=65, d=100000) circle=destPoint(c(0,80), b=1:365, d=1000000) circle2=destPoint(c(0,80), b=1:365, d=500000) circle3=destPoint(c(0,80), b=1:365, d=100000) plot(circle, type='l') polygon(circle, col='blue', border='black', lwd=4) polygon(circle2, col='red', lwd=4, border='orange') polygon(circle3, col='white', lwd=4, border='black') @ \section{Maximum latitude on a great circle} You can use the functions illustrated below to find out what the maximum latitude is that a great circle will reach; at what latitude it crosses a specified longitude; or at what longitude it crosses a specified latitude. From the map below it appears that Clairaut's formula, used in gcMaxLat is not very accurate. Through optimization with function greatCircle, a more accurate value was found. The southern-most point is the antipode (a point at the opposite end of the world) of the northern-most point. <>= ml <- gcMaxLat(LA, NY) lat0 <- gcLat(LA, NY, lon=0) lon0 <- gcLon(LA, NY, lat=0) plot(wrld, type='l') lines(gc, lwd=2, col='blue') points(ml, col='red', pch=20, cex=2) points(cbind(0, lat0), pch=20, cex=2, col='yellow') points(t(rbind(lon0, 0)), pch=20, cex=2, col='green' ) f <- function(lon){gcLat(LA, NY, lon)} opt <- optimize(f, interval=c(-180, 180), maximum=TRUE) points(opt$maximum, opt$objective, pch=20, cex=2, col='dark green' ) anti <- antipode(c(opt$maximum, opt$objective)) points(anti, pch=20, cex=2, col='dark blue' ) @ \section{Great circle intersections} Points of intersection of two great circles can be computed in two ways. We use a second great circle that connects San Francisco with Amsterdam. We first compute where they cross by defining the great circles using two points on it (gcIntersect). After that, we compute the same points using a start point and initial bearing (gcIntersectBearing). The two points where the great circles cross are antipodes. Antipodes are connected with an infinite number of great circles. <>= SF <- c(-122.44, 37.74) AM <- c(4.75, 52.31) gc2 <- greatCircle(AM, SF) plot(wrld, type='l') lines(gc, lwd=2, col='blue') lines(gc2, lwd=2, col='green') int <- gcIntersect(LA, NY, SF, AM) int antipodal(int[,1:2], int[,3:4]) points(rbind(int[,1:2], int[,3:4]), col='red', pch=20, cex=2) bearing1 <- bearing(LA, NY) bearing2 <- bearing(SF, AM) bearing1 bearing2 gcIntersectBearing(LA, bearing1, SF, bearing2) @ \section{Triangulation} Below is triangulation example. We have three locations (NY, LA, MS) and three directions (281, 60, 195) towards a target. Because we are on a sphere, there are two (antipodal) results. We only show one here (by only using int[,1:2]). We compute the centroid from the polygon defined with the three points. To accurately draw a spherical polygon, we can use makePoly. This function inserts intermediate points along the paths between the vertices provided (default is one point every 10 km). <>= MS <- c(-93.26, 44.98) gc1 <- greatCircleBearing(NY, 281) gc2 <- greatCircleBearing(MS, 195) gc3 <- greatCircleBearing(LA, 55) plot(wrld, type='l', xlim=c(-125, -70), ylim=c(20, 60)) lines(gc1, col='green') lines(gc2, col='blue') lines(gc3, col='red') int <- gcIntersectBearing(rbind(NY, NY, MS), c(281, 281, 195), rbind(MS, LA, LA), c(195, 55, 55)) int distm(rbind(int[,1:2], int[,3:4])) int <- int[,1:2] points(int) poly <- rbind(int, int[1,]) centr <- centroid(poly) poly2 <- makePoly(int) polygon(poly2, col='yellow') points(centr, pch='*', col='dark red', cex=2) @ \section{Bearing} Below we first compute the distance and bearing from Los Angeles (LA) to New York (NY). These are then used to compute the point from LA at that distance in that (initial) bearing (direction). Bearing changes continuously when traveling along a Great Circle. The final bearing, when approaching NY, is also given. <>= d <- distCosine(LA, NY) d b <- bearing(LA, NY) b destPoint(LA, b, d) NY finalBearing(LA, NY) @ \section{Getting off-track} What if we went off-course and were flying over Minneapolis (MS)? The closest point on the planned route (p) can be computed with the alongTrackDistance and destPoint functions. The distance from 'p' to MS can be computed with the dist2gc (distance to great circle, or cross-track distance) function. The light green line represents the along-track distance, and the dark green line represents the cross-track distance. <>= atd <- alongTrackDistance(LA, NY, MS) p <- destPoint(LA, b, atd) plot(wrld, type='l', xlim=c(-130,-60), ylim=c(22,52)) lines(gci, col='blue', lwd=2) points(rbind(LA, NY), col='red', pch=20, cex=2) points(MS[1], MS[2], pch=20, col='blue', cex=2) lines(gcIntermediate(LA, p), col='green', lwd=3) lines(gcIntermediate(MS, p), col='dark green', lwd=3) points(p, pch=20, col='red', cex=2) dist2gc(LA, NY, MS) distCosine(p, MS) @ \section{Distance to a polyline} The two function describe above are used in the dist2Line function that computes the shortest distance between a set of points and a set of spherical poly-lines (or polygons). <>= line <- rbind(c(-180,-20), c(-150,-10), c(-140,55), c(10, 0), c(-140,-60)) pnts <- rbind(c(-170,0), c(-75,0), c(-70,-10), c(-80,20), c(-100,-50), c(-100,-60), c(-100,-40), c(-100,-20), c(-100,-10), c(-100,0)) d = dist2Line(pnts, line) plot( makeLine(line), type='l') points(line) points(pnts, col='blue', pch=20) points(d[,2], d[,3], col='red', pch='x', cex=2) for (i in 1:nrow(d)) lines(gcIntermediate(pnts[i,], d[i,2:3], 10), lwd=2, col='green') @ \section{Rhumb lines} Rhumb (from the Spanish word for course, 'rumbo') lines are straight lines on a Mercator projection map (and at most latitudes pretty straight on an equirectangular projection (=unprojected lon/lat) map). They were used in navigation because it is easier to follow a constant compass bearing than to continually adjust direction as is needed to follow a great circle, even though rhumb lines are normally longer than great-circle (orthodrome) routes. Most rhumb lines will gradually spiral towards one of the poles. <>= NP <- c(0, 85) bearing(SF, NP) b <- bearingRhumb(SF, NP) b dc <- distCosine(SF, NP) dr <- distRhumb(SF, NP) dc / dr pr <- destPointRhumb(SF, b, d=round(dr/100) * 1:100) pc <- rbind(SF, gcIntermediate(SF, NP), NP) par(mfrow=c(1,2)) data(wrld) plot(wrld, type='l', xlim=c(-140,10), ylim=c(15,90), main='Equirectangular') lines(pr, col='blue') lines(pc, col='red') data(merc) plot(merc, type='l', xlim=c(-15584729, 1113195), ylim=c(2500000, 22500000), main='Mercator') lines(mercator(pr), col='blue') lines(mercator(pc), col='red') @ \section{Characterizing polygons} The package has functions to compute the area, perimeter, centroid, and 'span' of a spherical polygon. One approach to compute these measures is to project the polygons first. Here we directly compute them based on spherical coordinates (longitude / latitude), except for centroid, which is computed by projecting the data to the Mercator projection (and inversely projecting the result). The function makePoly inserts additional vertices into a spherical polygon such that it can be plotted (perhaps after first projecting it) more correctly in a plane. Vertices are inserted, where necessary, at a specified distance. The function is only beneficial for polygons with large inter-vertex distances (in terms of longitude), particularly at high latitudes. <>= pol <- rbind(c(-120,-20), c(-80,5), c(0, -20), c(-40,-60), c(-120,-20)) areaPolygon(pol) perimeter(pol) centroid(pol) span(pol, fun=max) nicepoly = makePoly(pol) plot(pol, xlab='longitude', ylab='latitude', cex=2, lwd=3, xlim=c(-140, 0)) lines(wrld, col='grey') lines(pol, col='red', lwd=2) lines(nicepoly, col='blue', lwd=2) points(centroid(pol), pch='*', cex=3, col='dark green') text(centroid(pol)-c(0,2.5), 'centroid') legend(-140, -48, c('planar','spherical'), lty=1, lwd=2, col=c('red', 'blue'), title='polygon type') @ \section{Sampling} Random or regular sampling of longitude/latitude values on the globe needs to consider that the globe is spherical. That is, if you would take random points for latitude between -90 and 90 and for longitude between -180 and 180, the density of points would be higher near the poles than near the equator. In contrast, functions 'randomCoordinates' and 'randomCoordinates' return samples that are spatially balanced. <>= plot(wrld, type='l', col='grey') a = randomCoordinates(500) points(a, col='blue', pch=20, cex=0.5) b = regularCoordinates(3) points(b, col='red', pch='x') @ \section{Daylength} You can compute daylenght according to the formula by Forsythe et al. (1995). For any day of the year (an integer between 1 and 365; or a 'Date' object. <>= as.Date(80, origin='2009-12-31') as.Date(172, origin='2009-12-31') plot(0:90, daylength(lat=0:90, doy=1), ylim=c(0,24), type='l', xlab='Latitude', ylab='Daylength', main='Daylength by latitude and day of year', lwd=2) lines(0:90, daylength(lat=0:90, doy=80), col='green', lwd=2) lines(0:90, daylength(lat=0:90, doy=172), col='blue', lwd=2) legend(0,24, c('1','80','172'), lty=1, lwd=2, col=c('black', 'green', 'blue'), title='Day of year') @ \section{References} \begin{hangparas}{3em}{1} \noindent Forsythe, W.C., E.J. Rykiel Jr., R.S. Stahl, H. Wu and R.M. Schoolfield, 1995. A model comparison for daylength as a function of latitude and day of the year. Ecological Modeling 80:87-95. \noindent Sinnott, R.W, 1984. Virtues of the Haversine. Sky and Telescope 68(2): 159 \noindent Vincenty, T. 1975. Direct and inverse solutions of geodesics on the ellipsoid with application of nested equations. Survey Review 23(176): 88-93. Available here: \url{http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf} \end{hangparas} \end{document} geosphere/R/0000755000176200001440000000000014131211220012417 5ustar liggesusersgeosphere/R/centroid.R0000644000176200001440000000333113472155746014404 0ustar liggesusers# Author: Robert J. Hijmans # April 2010 # version 0.1 # license GPL3 # See http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/ .basiccentroid <- function(p) { p2 <- rbind(p[-1,], p[1,]) P <- p[,1] * p2[,2] - p2[,1] * p[,2] area6 <- 6 * sum(P) / 2 x <- sum((p[,1] + p2[,1]) * P) y <- sum((p[,2] + p2[,2]) * P) return(cbind(x, y) / area6 ) } if (!isGeneric("centroid")) { setGeneric("centroid", function(x, ...) standardGeneric("centroid")) } setMethod("centroid", signature(x='data.frame'), function(x) { centroid(as.matrix(x)) }) setMethod("centroid", signature(x='matrix'), function(x) { x <- .pointsToMatrix(x, poly=TRUE) dif1 <- max(x[,1]) - min(x[,1]) rotated <- FALSE if (dif1 > 180) { x2 <- x x2[,1] <- x2[,1]%%(360) - 180 dif1 <- max(x[,1]) - min(x[,1]) dif2 <- max(x2[,1]) - min(x2[,1]) if (dif2 < dif1) { rotated <- TRUE x <- x2 } } x <- mercator(x, r=1) cenM <- .basiccentroid(x) cenG <- mercator(cenM, r=1, inverse=TRUE) if (rotated) { cenG[,1] <- cenG[,1] + 180 cenG[,1] <- .normalizeLonDeg(cenG[,1]) } rownames(cenG) <- NULL return(cenG) } ) setMethod("centroid", signature(x='SpatialPolygons'), function(x) { if ( isTRUE(is.projected(x)) ) { return( coordinates(x)) } x <- x@polygons n <- length(x) res <- matrix(nrow=n, ncol=2) for (i in 1:n) { parts <- length(x[[i]]@Polygons ) parea <- sapply(x[[i]]@Polygons, function(y){ methods::slot(y, "area")} ) hole <- sapply(x[[i]]@Polygons, function(y){ methods::slot(y, "hole")} ) parea[hole] <- -1 j <- which.max(parea) crd <- x[[i]]@Polygons[[j]]@coords res[i,] <- centroid(crd) } return(res) } ) geosphere/R/gcIntersect.R0000644000176200001440000000457613472155746015063 0ustar liggesusers# author Robert Hijmans # October 2009 # version 0.1 # license GPL3 # based on an alogrithm described by Ed Williams # http://www.edwilliams.org/intersect.htm # Not used #gete <- function(lon, lat) { # ex <- cos(lat)*cos(lon) # ey <- -cos(lat)*sin(lon) # ez <- sin(lat) # return(cbind(ex, ey, ez)) #} gcIntersect <- function(p1, p2, p3, p4) { #intersection of two great circles defined by pt1 to pt2 and pt3 to pt4. einv <- function(e) { lat <- atan2(e[,3], sqrt(e[,1]^2 + e[,2]^2)) lon <- atan2(-e[,2], e[,1]) return(cbind(lon, lat)) } eXe5 <- function(lon1, lat1, lon2, lat2) { ex <- sin(lat1-lat2) *sin((lon1+lon2)/2) *cos((lon1-lon2)/2) - sin(lat1+lat2) *cos((lon1+lon2)/2) *sin((lon1-lon2)/2) ey <- sin(lat1-lat2) *cos((lon1+lon2)/2) *cos((lon1-lon2)/2) + sin(lat1+lat2) *sin((lon1+lon2)/2) *sin((lon1-lon2)/2) ez <- cos(lat1)*cos(lat2)*sin(lon1-lon2) return( cbind(ex, ey, ez) ) } eXe3 <- function(e1, e2) { x <- e1[,2] * e2[,3] -e2[,2] *e1[,3] y <- e1[,3] *e2[,1] -e2[,3] *e1[,1] z <- e1[,1] *e2[,2] -e1[,2] *e2[,1] return(cbind(x,y,z)) } eSQRT <- function(e) { return(sqrt(e[,1]^2 + e[,2]^2 + e[,3]^2)) } p1 <- .pointsToMatrix(p1) p2 <- .pointsToMatrix(p2) p3 <- .pointsToMatrix(p3) p4 <- .pointsToMatrix(p4) p1 <- cbind(p1[,1], p1[,2], p2[,1], p2[,2]) p3 <- cbind(p3[,1], p3[,2], p4[,1], p4[,2]) p <- cbind(p1[,1], p1[,2], p1[,3], p1[,4], p3[,1], p3[,2], p3[,3], p3[,4]) p1 <- p[,1:2,drop=FALSE] p2 <- p[,3:4,drop=FALSE] p3 <- p[,5:6,drop=FALSE] p4 <- p[,7:8,drop=FALSE] res <- matrix(NA, nrow=nrow(p1), ncol=4) colnames(res) <- c('lon1', 'lat1', 'lon2', 'lat2') keep <- ! antipodal(p1, p2) | antipodal(p3, p4) keep <- keep & ! apply(p1 == p2, 1, sum) == 2 if (sum(keep) == 0) { return(res) } toRad <- pi / 180 p1 <- p1[keep, , drop=FALSE] * toRad p2 <- p2[keep, , drop=FALSE] * toRad p3 <- p3[keep, , drop=FALSE] * toRad p4 <- p4[keep, , drop=FALSE] * toRad e1Xe2 <- eXe5(p1[,1], p1[,2], p2[,1], p2[,2]) e3Xe4 <- eXe5(p3[,1], p3[,2], p4[,1], p4[,2]) ea <- e1Xe2 / eSQRT(e1Xe2) eb <- e3Xe4 / eSQRT(e3Xe4) eaXeb <- eXe3(ea, eb) ll <- einv(eaXeb) ll2 <- cbind(ll[,1] + pi, -ll[,2]) pts <- cbind(ll, ll2) pts[,1] <- .normalizeLonRad(pts[,1]) pts[,3] <- .normalizeLonRad(pts[,3]) res[keep,] <- pts / toRad return(res) } geosphere/R/greatCircle.R0000644000176200001440000000220413472155746015017 0ustar liggesusers# author Robert Hijmans # October 2009 # version 0.1 # license GPL greatCircle <- function(p1, p2, n=360, sp=FALSE) { p1 <- .pointsToMatrix(p1) p2 <- .pointsToMatrix(p2) p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], n) p1 <- p[,1:2] p2 <- p[,3:4] n <- pmax(round(p[,5]), 1) if (nrow(p) == 1) { lon <- (1:n * 360 / n) - 180 lat <- gcLat(p1, p2, lon) res <- cbind(lon,lat) if (sp) { lat <- gcLat(p1, p2, 180) res <- list(rbind(cbind(-180, lat), res)) res <- SpatialLines( list( Lines( list( Line (res)), ID=as.character(1)) ), CRS("+proj=longlat +ellps=WGS84")) } } else { res <- list() for (i in 1:nrow(p1)) { lon <- (1:n[i] * 360 / n[i]) - 180 lat <- gcLat(p1[i,], p2[i,], lon) res[[i]] <- cbind(lon, lat) } if (sp) { for (i in 1:length(res)) { lat <- gcLat(p1[i,], p2[i,], 180) res[[i]] <- rbind(cbind(-180, lat), res[[i]]) res[[i]] <- Lines( list( Line (res[[i]])), ID=as.character(i)) } res <- SpatialLines(res, CRS("+proj=longlat +ellps=WGS84")) } } return(res) } #greatCircle(rbind(cbind(5,52), cbind(5,15)), c(-120,37), n=12) geosphere/R/sampleAlong.R0000644000176200001440000000464113472155746015044 0ustar liggesusers# Based on code by Barry Rowlingson #http://r-sig-geo.2731867.n2.nabble.com/how-to-generate-perpendicular-transects-along-a-line-feature-td7583710.html # Some adaptations by Robert Hijmans # January 2016 # version 0.1 # License GPL3 .evenspace <- function(xy, sep, start=0, size, direction=FALSE){ dx <- c(0,diff(xy[,1])) dy <- c(0,diff(xy[,2])) dseg <- sqrt(dx^2+dy^2) dtotal <- cumsum(dseg) linelength <- sum(dseg) pos <- seq(start,linelength, by=sep) whichseg <- unlist(lapply(pos, function(x){sum(dtotal<=x)})) x0 <- xy[whichseg,1] y0 <- xy[whichseg,2] x1 <- xy[whichseg+1,1] y1 <- xy[whichseg+1,2] dtotal <- dtotal[whichseg] further <- pos - dtotal dseg <- dseg[whichseg+1] f <- further/dseg x <- x0 + f * (x1-x0) y <- y0 + f * (y1-y0) r <- data.frame(x, y) # if (direction) { # r$direction <- atan2(y0-y1,x0-x1) # } r } .transect <- function(pts, len){ pts$thetaT = pts$theta+pi/2 dx <- len*cos(pts$thetaT) dy <- len*sin(pts$thetaT) data.frame(x0 = pts$x + dx, y0 = pts$y + dy, x1 = pts$x - dx, y1 = pts$y -dy) } .sampleAlong <- function(x, interval) { if (inherits(x, 'SpatialPolygons')) { line <- methods::as(line, 'SpatialLines') } if (inherits(x, 'SpatialLines')) { requireNamespace('raster') x <- raster::geom(x) allpts <- NULL for (p in unique(x[, 'cump'])) { y <- x[x[, 'cump']==p, c('x', 'y')] pts <- .evenspace(y, interval, direction=FALSE) allpts <- rbind(allpts, pts) } return(allpts) } else { x <- .pointsToMatrix(x) .evenspace(x, interval, direction=FALSE) } } .sampleAlongPerpendicular <- function(x, interval, pdist, np=1 ) { if (inherits(x, 'SpatialPolygons')) { line <- methods::as(line, 'SpatialLines') } if (inherits(x, 'SpatialLines')) { requireNamespace('raster') x <- raster::geom(x) allpts <- NULL for (p in unique(x[, 'cump'])) { y <- x[x[, 'cump']==p, c('x', 'y')] tspts <- .evenspace(y, interval) pts <- NULL for (i in 1:np) { pts1 <- .transect(tspts, i * pdist) pts <- cbind(pts, pts1) } allpts <- rbind(allpts, pts) } return(allpts) } else { x <- .pointsToMatrix(x) y <- .evenspace(x, interval) pts <- NULL for (i in 1:np) { pts1 <- .transect(y, i * pdist) pts <- cbind(pts, pts1) } return(pts) } } geosphere/R/distVincentySphere.R0000644000176200001440000000150213472155746016425 0ustar liggesusers# Author: Robert J. Hijmans # Date : June 2008 # Version 0.8 (taken from Raster package) # Licence GPL v3 # Vincenty formula for a sphere # http://en.wikipedia.org/wiki/Great_circle_distance distVincentySphere <- function(p1, p2, r=6378137) { toRad <- pi / 180 p1 <- .pointsToMatrix(p1) * toRad if (missing(p2)) { p2 <- p1[-1, ,drop=FALSE] p1 <- p1[-nrow(p1), ,drop=FALSE] } else { p2 <- .pointsToMatrix(p2) * toRad } p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], as.vector(r)) lon1 <- p[,1] lat1 <- p[,2] lon2 <- p[,3] lat2 <- p[,4] x <- sqrt((cos(lat2) * sin(lon1-lon2))^2 + (cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(lon1-lon2))^2) y <- sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon1-lon2) dist <- p[,5] * atan2(x, y) return ( as.vector(dist )) } geosphere/R/dist2gc.R0000644000176200001440000000130613472155746014134 0ustar liggesusers# based on code by Ed Williams # Licence: GPL # http://www.edwilliams.org/avform.htm#XTE # Port to R by Robert Hijmans # October 2009 # version 0.1 # license GPL3 dist2gc <- function(p1, p2, p3, r=6378137, sign=FALSE) { toRad <- pi / 180 p1 <- .pointsToMatrix(p1) p2 <- .pointsToMatrix(p2) p3 <- .pointsToMatrix(p3) r <- as.vector(r) p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], p3[,1], p3[,2], r) p1 <- p[,1:2] p2 <- p[,3:4] p3 <- p[,5:6] r <- p[,7] tc <- bearing(p1, p2, a=r, f=0) * toRad tcp <- bearing(p1, p3, a=r, f=0) * toRad dp <- distCosine(p1, p3, r=1) xtr <- (asin(sin(tcp-tc) * sin(dp)) * r) xtr <- as.vector(xtr) if (!sign) xtr <- abs(xtr) xtr } geosphere/R/distHaversine.R0000644000176200001440000000500014032771416015367 0ustar liggesusers# author of original JavaScript code: Chris Vennes # (c) 2002-2009 Chris Veness # http://www.movable-type.co.uk/scripts/latlong.html # Licence: LGPL, without any warranty express or implied # Port to R by Robert Hijmans # October 2009 # version 0.1 # license GPL3 distHaversine <- function(p1, p2, r=6378137) { #* Haversine formula to calculate distance between two points specified by #* from: Haversine formula - R.W. Sinnott, "Virtues of the Haversine", #* Sky and Telescope, vol 68, no 2, 1984 #* http:#//www.census.gov/cgi-bin/geo/gisfaq?Q5.1 # source http://www.movable-type.co.uk/scripts/latlong.html # (c) 2002-2009 Chris Veness toRad <- pi / 180 p1 <- .pointsToMatrix(p1) * toRad if (missing(p2)) { p2 <- p1[-1, ,drop=FALSE] p1 <- p1[-nrow(p1), ,drop=FALSE] } else { p2 <- .pointsToMatrix(p2) * toRad } p = cbind(p1[,1], p1[,2], p2[,1], p2[,2], as.vector(r)) dLat <- p[,4]-p[,2] dLon <- p[,3]-p[,1] a <- (sin(dLat/2))^2 + cos(p[,2]) * cos(p[,4]) * (sin(dLon/2))^2 # to avoid values of 'a' that are a sliver above 1 # which may occur at antipodes # https://stackoverflow.com/questions/45889616/why-does-disthaversine-return-nan-for-some-pairs-of-coordinates# a <- pmin(a, 1) dist <- 2 * atan2(sqrt(a), sqrt(1-a)) * p[,5] return( as.vector(dist)) } # lon1 <- p[,1] # lat1 <- p[,2] # lon2 <- p[,3] # lat2 <- p[,4] # r <- p[,5] # dLat <- (lat2-lat1) # dLon <- (lon2-lon1) # a <- sin(dLat/2) * sin(dLat/2) + cos(lat1) * cos(lat2) * sin(dLon/2) * sin(dLon/2) # dist <- 2 * atan2(sqrt(a), sqrt(1-a)) * r .distHaversine2 <- function(p1, p2, r=6378137) { ## following wikipedia toRad <- pi / 180 p1 <- .pointsToMatrix(p1) * toRad if (missing(p2)) { p2 <- p1[-1, ,drop=FALSE] p1 <- p1[-nrow(p1), ,drop=FALSE] } else { p2 <- .pointsToMatrix(p2) * toRad } p = cbind(p1[,1], p1[,2], p2[,1], p2[,2], as.vector(r)) dLat <- p[,4]-p[,2] dLon <- p[,3]-p[,1] a <- (sin(dLat/2))^2 + cos(p[,2]) * cos(p[,4]) * (sin(dLon/2))^2 a <- pmin(a, 1) dist <- 2 * r * asin(sqrt(a)) return( as.vector(dist)) } # from Thierry de Meeus .distHaversine3 <- function(p1, p2, r=6378137) { toRad <- pi / 180 p1 <- .pointsToMatrix(p1) * toRad if (missing(p2)) { p2 <- p1[-1, ,drop=FALSE] p1 <- p1[-nrow(p1), ,drop=FALSE] } else { p2 <- .pointsToMatrix(p2) * toRad } p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], as.vector(r)) r*(pi/2-asin(sin((p[,4]))*sin((p[,2]))+cos((p[,3])-(p[,1]))*cos((p[,4]))*cos((p[,2])))) } geosphere/R/span.R0000644000176200001440000000443713472155746013546 0ustar liggesusers# Author: Robert J. Hijmans, r.hijmans@gmail.com # Date : April 2010 # Version 1 # Licence GPL v3 if (!isGeneric("span")) { setGeneric("span", function(x, ...) standardGeneric("span")) } setMethod("span", signature(x='matrix'), function(x, nbands='fixed', n=100, res=0.1, fun, r=6378137, ...) { dif1 <- max(x[,1]) - min(x[,1]) rotated <- FALSE if (dif1 > 180) { x2 <- x x2[,1] <- x2[,1] %% 360 - 180 dif1 <- max(x[,1]) - min(x[,1]) dif2 <- max(x2[,1]) - min(x2[,1]) if (dif2 < dif1) { rotated <- TRUE x <- x2 } } x <- SpatialPolygons(list(Polygons(list(Polygon(x)), 1))) if (missing(fun)) { x <- span(x, nbands=nbands, n=n, res=res, ...) } else { x <- span(x, nbands=nbands, n=n, res=res, fun=fun, ...) } if (rotated & missing(fun)) { x$longitude = x$longitude + 180 } return(x) } ) setMethod("span", signature(x='SpatialPolygons'), function(x, nbands='fixed', n=100, res=0.1, fun, ...) { if (!requireNamespace('raster')) {stop('you need to install the "raster" package to use this function')} if (! nbands %in% c('fixed', 'variable')) { stop('bandwidth should be "fixed" or "variable"') } if (nbands == 'fixed') { n = max(n, 1) } else { if (res <= 0) { stop('res should be larger than zero') } } npol <- length(x@polygons) lonspan <- list() latspan <- list() lon <- list() lat <- list() for (i in 1:npol) { pp <- x[i,] rs <- raster::raster(pp) if (nbands == 'fixed') { dim(rs) <- c(n, n) } else { raster::res(rs) <- res } latitude <- raster::yFromRow(rs, 1:nrow(rs)) longitude <- raster::xFromCol(rs, 1:ncol(rs)) xd <- distGeo(cbind(0,latitude), cbind(raster::xres(rs),latitude), ...) yd <- distGeo(cbind(0,0), cbind(0,raster::yres(rs)), ...) rs <- raster::rasterize(pp, rs, silent=TRUE) rs <- raster::getValues(rs, format='matrix') latspan[[i]] <- as.vector(apply(rs, 1, sum, na.rm=TRUE) * yd) lonspan[[i]] <- as.vector(apply(rs, 2, sum, na.rm=TRUE) * xd) lat[[i]] <- latitude lon[[i]] <- longitude } if (! missing(fun)) { lon = sapply(lonspan, fun) lat = sapply(latspan, fun) return(cbind(lon, lat)) } else { return(c(lonspan=lonspan, latspan=latspan, longitude=lon, latitude=lat)) } } ) geosphere/R/destPoint.R0000644000176200001440000000132613472155746014550 0ustar liggesusers# Author: Robert J. Hijmans # Date : May 2015 # Licence GPL v3 destPoint <- function(p, b, d, a=6378137, f=1/298.257223563, ...) { # calculate destination point given start point, initial bearing (deg) and distance (m) r <- list(...)$r if (!is.null(r)) { # for backwards compatibility return( .old_destPoint(p, b, d, r=r) ) } b <- as.vector(b) d <- as.vector(d) p <- .pointsToMatrix(p) p <- cbind(p[,1], p[,2], b, d) r <- .Call("_geodesic", as.double(p[,1]), as.double(p[,2]), as.double(p[,3]), as.double(p[,4]), as.double(a), as.double(f), PACKAGE='geosphere') r <- matrix(r, ncol=3, byrow=TRUE) colnames(r) <- c('lon', 'lat', 'finalbearing') return(r[, 1:2, drop=FALSE]) } geosphere/R/finalBearing.R0000644000176200001440000000114613472155746015160 0ustar liggesusers# Robert Hijmans # October 2009 # version 0.1 # Licence: GPL3 finalBearing <- function(p1, p2, a=6378137, f=1/298.257223563, sphere=FALSE) { if (sphere) { # for backwards compatibility return(.old_bearing(p2, p1) ) } p1 <- .pointsToMatrix(p1) p2 <- .pointsToMatrix(p2) p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2]) r <- .Call("_inversegeodesic", as.double(p[,1]), as.double(p[,2]), as.double(p[,3]), as.double(p[,4]), as.double(a[1]), as.double(f[1]), PACKAGE='geosphere') r <- matrix(r, ncol=3, byrow=TRUE) # colnames(r) <- c('lon', 'lat', 'finalbearing') return(r[, 3]) } geosphere/R/alongTrack.R0000644000176200001440000000155313472155746014666 0ustar liggesusers# based on code by Ed Williams # licence GPL # http://www.edwilliams.org/avform.htm#XTE # Port to R by Robert Hijmans # October 2009 # version 0.1 # license GPL3 alongTrackDistance <- function(p1, p2, p3, r=6378137) { toRad <- pi / 180 p1 <- .pointsToMatrix(p1) p2 <- .pointsToMatrix(p2) p3 <- .pointsToMatrix(p3) p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], p3[,1], p3[,2], as.vector(r)) p1 <- p[,1:2,drop=FALSE] p2 <- p[,3:4,drop=FALSE] p3 <- p[,5:6,drop=FALSE] r = p[,7] tc <- bearing(p1, p2) * toRad tcp <- bearing(p1, p3) * toRad dp <- distCosine(p1, p3, r=1) xtr <- asin(sin(tcp-tc) * sin(dp)) # +1/-1 for ahead/behind [lat1,lon1] bearing <- sign(cos(tc - tcp)) dist <- bearing * acos(cos(dp) / cos(xtr)) * r if (is.vector(dist)) { dist <- matrix(dist) } colnames(dist) <- 'distance' return(abs(dist)) } geosphere/R/destPointRhumb.R0000644000176200001440000000235313472155746015547 0ustar liggesusers# based on JavaScript code by Chris Vennes # (c) 2002-2009 Chris Veness # http://www.movable-type.co.uk/scripts/latlong.html # Licence: LGPL, without any warranty express or implied # see http://www.edwilliams.org/avform.htm#Rhumb # for the original formulae # Robert Hijmans # October 2009 # version 0.1 # license GPL3 destPointRhumb <- function(p, b, d, r=6378137) { toRad <- pi / 180 b <- as.vector(b) d <- as.vector(d) r <- as.vector(r) p <- .pointsToMatrix(p) p <- cbind(p[,1], p[,2], b, d, r) r <- p[,5] d <- p[,4] / r #angular distance in radians b <- p[,3] * toRad lon1 <- p[,1] * toRad lat1 <- p[,2] lat1[lat1==90|lat1==-90] <- NA lat1 <- lat1 * toRad lat2 <- lat1 + d * cos(b) dLat <- lat2-lat1 dPhi <- log( tan(lat2/2 + pi/4) / tan(lat1/2 + pi/4) ) i <- abs(dLat) > 1e-10 q <- vector(length=length(i)) q[i] <- dLat[i]/dPhi[i] q[!i] <- cos(lat1[!i]) dLon <- d * sin(b) / q # check for points past the pole../ i <- (abs(lat2) > pi/2) & lat2 > 0 lat2[i] <- pi-lat2[i] i <- (abs(lat2) > pi/2) & lat2 <= 0 lat2[i] <- (pi-lat2[i]) lon2 <- (lon1+dLon+pi)%%(2*pi) - pi res <- cbind(lon2, lat2) / toRad colnames(res) <- c('lon', 'lat') return(res) } geosphere/R/antipodal.R0000644000176200001440000000126113764330431014536 0ustar liggesusers# Author: Robert J. Hijmans # October 2009 # version 1.0 # license GPL3 antipodal <- function(p1, p2, tol=1e-9) { p1 <- .pointsToMatrix(p1) p2 <- .pointsToMatrix(p2) p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2]) p[,c(1,3)] <- .normalizeLonDeg(p[,c(1,3)]) diflon <- abs(p[,1] - p[,3]) diflat <- abs(p[,2] + p[,4]) ## FIX by Gareth Davies # (diflat < tol) & (diflon > (180 - tol)) ## FIX by Jonathan Rynd # (diflat < tol) & (abs(diflon%%360 - 180) < tol) (diflat < tol) & (cos(p[,2] * pi/180) * abs(diflon%%360 - 180) < tol) } antipode <- function(p) { p <- .pointsToMatrix(p) p[,1] <- .normalizeLonDeg(p[,1] + 180) p[,2] <- -p[,2] return( p ) } geosphere/R/gcLat.R0000644000176200001440000000201413472155746013624 0ustar liggesusers# author Robert Hijmans # October 2009 # version 0.1 # license GPL gcLat <- function(p1, p2, lon) { # Intermediate points on a great circle # source: http://www.edwilliams.org/avform.htm toRad <- pi / 180 d <- distCosine(p1, p2) p1 <- .pointsToMatrix(p1) p2 <- .pointsToMatrix(p2) p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], as.vector(lon)) p1 <- p[,1:2,drop=FALSE] p2 <- p[,3:4,drop=FALSE] lon <- p[,5] res <- rep(NA, nrow(p)) notanti <- ! antipodal(p1, p2) lon1 <- p1[,1] * toRad lat1 <- p1[,2] * toRad lon2 <- p2[,1] * toRad lat2 <- p2[,2] * toRad lon <- lon * toRad # cannot compute this for a meridian notmeridians <- ! sin(lon1-lon2)==0 keep <- notanti & notmeridians if (sum(keep) == 0) { return(res) } lon1 <- lon1[keep] lat1 <- lat1[keep] lon2 <- lon2[keep] lat2 <- lat2[keep] lon <- lon[keep] res[keep] <- atan((sin(lat1)*cos(lat2)*sin(lon-lon2) -sin(lat2)*cos(lat1)*sin(lon-lon1))/(cos(lat1)*cos(lat2)*sin(lon1-lon2))) return(res / toRad) } geosphere/R/makePoly.R0000644000176200001440000000740713472155746014366 0ustar liggesusers# author Robert Hijmans # April 2010 # version 0.1 # license GPL .makeSinglePoly <- function(p, interval=10000, ...) { res <- p[1,] for (i in 1:(nrow(p)-1)) { if (! isTRUE( all.equal(p[i,], p[i+1,]) )) { d <- distGeo(p[i,], p[i+1,], ...) n <- floor(d / interval) if (n > 0) { pts <- gcIntermediate(p[i,],p[i+1,], n) pts <- rbind(p[i,], pts, p[i+1,]) res <- rbind(res, pts, p[i+1,]) } else { res <- rbind(res, p[i+1,]) } } } if (nrow(res) < 3) stop('cannot make a valid polygon') return(res) } .makeSingleLine <- function(p, interval=10000, ...) { res <- p[1,] for (i in 1:(nrow(p)-1)) { if (! isTRUE( all.equal(p[i,], p[i+1,]) )) { d <- distGeo(p[i,], p[i+1,], ...) n <- floor(d / interval) if (n > 0) { pts <- gcIntermediate(p[i,],p[i+1,], n) pts <- rbind(p[i,], pts, p[i+1,]) res <- rbind(res, pts, p[i+1,]) } else { res <- rbind(res, p[i+1,]) } } } if (nrow(res) < 2) stop('cannot make a valid line') return(res) } makePoly <- function(p, interval=10000, sp=FALSE, ...) { if (inherits(p, 'SpatialPolygons')) { test <- !is.projected(p) if (! isTRUE (test) ) { if (is.na(test)) { warning('Coordinate reference system of SpatialPolygons object is not set. Assuming it is degrees (longitude/latitude)!') } else { stop('Points are projected. They should be in degrees (longitude/latitude)') } # or rather transform them ....? } x <- p@polygons n <- length(x) polys = list() for (i in 1:n) { parts <- length(x[[i]]@Polygons ) partlist <- list() for (j in 1:parts) { crd <- x[[i]]@Polygons[[j]]@coords crd <- .makeSinglePoly(crd, interval=interval, ...) partlist[[j]] <- Polygon(crd) } polys[[i]] <- Polygons(partlist, i) } polys <- SpatialPolygons(polys) if (inherits(p, 'SpatialPolygonsDataFrame')) { rownames(p@data) <- 1:nrow(p@data) polys <- SpatialPolygonsDataFrame(polys, p@data) } polys@proj4string <- p@proj4string return(polys) } else { p <- .pointsToMatrix(p) if (nrow(p) < 3) { stop('cannot make a polygon (insufficent number of vertices)') } if (! isTRUE(all.equal(p[1,], p[nrow(p),]))) { p <- rbind(p, p[1,]) } res <- .makeSinglePoly(p, interval=interval, ...) if (sp) { res <- SpatialPolygons(list(Polygons(list(Polygon(res)), 1))) res@proj4string <- CRS("+proj=longlat +datum=WGS84") } return(res) } } makeLine <- function(p, interval=10000, sp=FALSE, ...) { if (inherits(p, 'SpatialLines')) { test <- !is.projected(p) if (! isTRUE (test) ) { if (is.na(test)) { warning('Coordinate reference system of SpatialPolygons object is not set. Assuming it is degrees (longitude/latitude)!') } else { stop('Points are projected. They should be in degrees (longitude/latitude)') } # or rather transform them ....? } x = p@lines n = length(x) lines = list() for (i in 1:n) { parts = length(x[[i]]@Lines ) partlist = list() for (j in 1:parts) { crd = x[[i]]@Lines[[j]]@coords crd = .makeSingleLine(crd, interval=interval, ...) partlist[[j]] = Line(crd) } lines[[i]] = Lines(partlist, i) } lines <- SpatialLines(lines) if (inherits(p, 'SpatialLinesDataFrame')) { lines <- SpatialLinesDataFrame(lines, p@data) } lines@proj4string <- p@proj4string return(lines) } else { p <- .pointsToMatrix(p) if (nrow(p) < 3) { stop('cannot make a polygon (insufficent number of vertices)') } res <- .makeSingleLine(p, interval=interval, ...) if (sp) { res <- SpatialLines(list(Lines(list(Line(res)), 1))) res@proj4string <- CRS("+proj=longlat +datum=WGS84") } return(res) } } geosphere/R/onGreatCircle.R0000644000176200001440000000166313472155746015324 0ustar liggesusers# Author: Robert J. Hijmans # based on Dr. Rick's advice at: # http://mathforum.org/library/drmath/view/66114.html # August 2010 # version 1 # license GPL3 onGreatCircle <- function(p1, p2, p3, tol=0.0001) { # is p3 an intermediate points on a great circle defined by p1 and p2? toRad <- pi / 180 p1 <- .pointsToMatrix(p1) p2 <- .pointsToMatrix(p2) p3 <- .pointsToMatrix(p3) p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], p3[,1], p3[,2]) p1 <- p[,1:2, drop=FALSE] * toRad p2 <- p[,3:4, drop=FALSE] * toRad p3 <- p[,5:6, drop=FALSE] * toRad lon1 <- p1[,1] lat1 <- p1[,2] lon2 <- p2[,1] lat2 <- p2[,2] lon <- p3[,1] lat <- p3[,2] newlat <- atan((sin(lat1)*cos(lat2)*sin(lon-lon2) - sin(lat2)*cos(lat1)*sin(lon-lon1)) / (cos(lat1)*cos(lat2)*sin(lon1-lon2))) res <- abs(newlat - lat) < tol meridian <- p1[,1] == p2[,1] & p1[,1] == p3[,1] res[meridian] <- TRUE return(as.vector(res)) } geosphere/R/geomedian.R0000644000176200001440000000310313472155746014522 0ustar liggesusers# Author: Robert J. Hijmans # March 2012 # version 1 # license GPL3 .geomedian <- function(xy, w=NULL) { xy <- .pointsToMatrix(xy) if (is.null(w)) { w <- 1 } else if (length(w) != nrow(xy)) { stop('length of weights not correct. It should be: ', nrow(xy)) } w <- w / sum(w) xyw <- cbind(xy, w) xy <- stats::na.omit(xyw) xy <- xyw[,1:2] w <- xyw[,3] est <- geomean(xy, w) fun <- function(p) { if (p[2] > 90 | p[2] < -90) { return(Inf) } else { p[1] = (p[1] + 180) %% 360 - 180 sum( distCosine(xy, p) * w) } } opt <- stats::optim(geomean(xy), fun) if (!is.null(opt$message)) { warning(opt$message) } return(opt$par) } ..geomedian_ndcor <- function(xy, w=NULL, threshold=100, maxiter=100) { requireNamespace('raster') if (inherits(xy, 'SpatialPolygons') | inherits(xy, 'SpatialPoints')) { stopifnot(raster::isLonLat(xy)) xy <- coordinates(xy) } if (is.null(w)) { w <- 1 } else if (length(w) != nrow(xy)) { stop('length of weights not correct. It should be: ', nrow(xy)) } w <- w / sum(w) xyw <- cbind(xy, w) xy <- stats::na.omit(xyw) xy <- xyw[,1:2] w <- xyw[,3] est <- geomean(xy, w) estold <- est iter = 1 while (TRUE) { d <- distCosine(xy, est) x <- sum(w*xy[,1] / d) / sum(w/d) y <- sum(w*xy[,2] / d) / sum(w/d) est <- cbind(x,y) dif <- distCosine(est, estold) if (dif < threshold) { return(est) } else if (iter > maxiter) { warning('maxiter reached') return(est) } estold <- est iter <- iter + 1 } } geosphere/R/distCosines.R0000644000176200001440000000242313472155746015065 0ustar liggesusers# Author: Robert J. Hijmans # Date : June 2008 # Licence GPL v3 # distance based on law of cosines # http://en.wikipedia.org/wiki/Great_circle_distance distCosine <- function(p1, p2, r=6378137) { p1 <- .pointsToMatrix(p1) if (missing(p2)) { p2 <- p1[-1, ,drop=FALSE] p1 <- p1[-nrow(p1), ,drop=FALSE] } else { p2 <- .pointsToMatrix(p2) } pp <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], as.vector(r)) # remove identical points to avoid errors due to floating point math # problem reported by Bill Monahan i <- rowSums(abs(pp[, 1:2, drop=FALSE] - pp[, 3:4, drop=FALSE]) < .Machine$double.eps ^ 0.5) < 2 p <- pp[i, ,drop=FALSE] r <- rep(0, nrow(pp)) if (nrow(p) > 0) { p[,1:4] <- p[,1:4] * pi / 180 r[i] <- acos( sin(p[,2]) * sin(p[,4]) + cos(p[,2]) * cos(p[,4]) * cos(p[,1]-p[,3]) ) * p[,5] } r } # m = matrix(c(-58.65222,-19.65154,-52.985550,-1.484869, -69.652220, 7.348464, -69.652220,7.348464, -1,1 ,-1,1, -1,1.1,-1,1.1, -1,1.2,-1,1.2, -116.65220,72.01513,-121.48560,53.34847), ncol=4, byrow=T) # distCosine(m[,1:2], m[,3:4]) # n <- nrow(p) # d <- vector("double", n) # d <- .C('distance', as.integer(n), as.double(p[,1]), as.double(p[,2]), as.double(p[,3]), as.double(p[,4]), as.double(p[,5]), as.integer(1), d)[[8]] # return(d) geosphere/R/distVincentyEllipsoid.R0000644000176200001440000000573513472155746017137 0ustar liggesusers# author of original JavaScript code: Chris Vennes # (c) 2002-2009 Chris Veness # http://www.movable-type.co.uk/scripts/latlong.html # Licence: LGPL, without any warranty express or implied # Port to R by Robert Hijmans # October 2009 # version 0.1 # license GPL3 distVincentyEllipsoid <- function(p1, p2, a=6378137, b=6356752.3142, f=1/298.257223563) { #/* Vincenty Inverse Solution of Geodesics on the Ellipsoid (c) Chris Veness 2002-2009 #*/ #* Calculate geodesic distance (in m) between two points specified by latitude/longitude #* (in numeric degrees) using Vincenty inverse formula for ellipsoids # source http://www.movable-type.co.uk/scripts/latlong-vincenty.html # (c) 2002-2009 Chris Veness toRad <- pi / 180 p1 <- .pointsToMatrix(p1) * toRad if (missing(p2)) { p2 <- p1[-1, ,drop=FALSE] p1 <- p1[-nrow(p1), ,drop=FALSE] } else { p2 <- .pointsToMatrix(p2) * toRad } p = cbind(p1[,1], p1[,2], p2[,1], p2[,2], as.vector(a), as.vector(b), as.vector(f)) p1 = p[,1:2,drop=FALSE] p2 = p[,3:4,drop=FALSE] res <- vector(length=nrow(p1)) for (i in 1:dim(p1)[1]) { if ( any( is.na( c(p1[i,], p2[i,])))) { #improvement by George Wang and Sebastian P. Luque res[i] <- NA } else if (isTRUE(all.equal(p1[i,], p2[i,]))) { res[i] <- 0 } else { lon1 <- p1[i,1] lat1 <- p1[i,2] lon2 <- p2[i,1] lat2 <- p2[i,2] a = p[i,5] b = p[i,6] f = p[i,7] L <- (lon2-lon1) U1 <- atan((1-f) * tan(lat1)) U2 <- atan((1-f) * tan(lat2)) sinU1 <- sin(U1) cosU1 <- cos(U1) sinU2 <- sin(U2) cosU2 <- cos(U2) lambda <- L iterLimit <- 100 continue <- TRUE while (continue) { sinLambda <- sin(lambda) cosLambda <- cos(lambda) sinSigma <- sqrt((cosU2*sinLambda) * (cosU2*sinLambda) + (cosU1*sinU2-sinU1*cosU2*cosLambda) * (cosU1*sinU2-sinU1*cosU2*cosLambda)) cosSigma <- sinU1*sinU2 + cosU1*cosU2*cosLambda sigma <- atan2(sinSigma, cosSigma) sinAlpha <- cosU1 * cosU2 * sinLambda / sinSigma cosSqAlpha <- 1 - sinAlpha*sinAlpha cos2SigmaM <- cosSigma - 2*sinU1*sinU2/cosSqAlpha if (is.nan(cos2SigmaM)) cos2SigmaM <- 0 # equatorial line: cosSqAlpha=0 (par. 6) C <- f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha)) lambdaP <- lambda lambda <- L + (1-C) * f * sinAlpha * (sigma + C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM))) iterLimit <- iterLimit - 1 continue <- (abs(lambda-lambdaP) > 1e-12 && iterLimit > 0) } if (iterLimit==0) { res[i] <- NA # failed to converge } else { uSq <- cosSqAlpha * (a*a - b*b) / (b*b) A <- 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq))) B <- uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq))) deltaSigma <- B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)- B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM))) res[i] <- b*A*(sigma-deltaSigma) } } } return(as.vector(res)) } geosphere/R/perimeter.R0000644000176200001440000000340213472155746014570 0ustar liggesusers# Robert Hijmans # April 2010 # version 1 # License GPL3 if (!isGeneric("perimeter")) { setGeneric("perimeter", function(x, ...) standardGeneric("perimeter")) } setMethod("perimeter", signature(x='SpatialPolygons'), function(x, a=6378137, f=1/298.257223563, ...) { x <- x@polygons n <- length(x) res <- vector(length=n) for (i in 1:n) { parts <- length( x[[i]]@Polygons ) perim <- 0 for (j in 1:parts) { if (! x[[i]]@Polygons[[j]]@hole) { crd <- x[[i]]@Polygons[[j]]@coords perim <- perim + perimeter(crd, a=a, f=f, ...) } } res[i] <- perim } return(res) } ) setMethod("perimeter", signature(x='SpatialLines'), function(x, a=6378137, f=1/298.257223563, ...) { x <- x@lines n <- length(x) res <- vector(length=n) for (i in 1:n) { parts <- length( x[[i]]@Lines ) lng <- 0 for (j in 1:parts) { crd <- x[[i]]@Lines[[j]]@coords lng <- lng + perimeter(crd, a=a, f=f, ...) } res[i] <- lng } return(res) } ) setMethod("perimeter", signature(x='data.frame'), function(x, a=6378137, f=1/298.257223563, ...) { perimeter(as.matrix(x), a=a, f=f, ...) } ) setMethod("perimeter", signature(x='matrix'), function(x, a=6378137, f=1/298.257223563, ...) { r <- list(...)$r if (!is.null(r)) { # for backwards compatibility warning('remove argument "r" to use improved method') return( .old_perimeter(x, r=r) ) } x <- .Call("_polygonarea", as.double(x[,1]), as.double(x[,2]), as.double(a), as.double(f), PACKAGE='geosphere') abs(x[2]) }) .old_perimeter <- function(x, r=6378137, ...) { x <- x[,1:2] if (isTRUE(all.equal(x[1,], x[nrow(x),]))) { x <- x[-nrow(x), ] } y <- rbind(x[-1,], x[1,]) d <- distHaversine(x, y, r=r) return(sum(d)) } geosphere/R/geodesic.R0000644000176200001440000000301313472155746014354 0ustar liggesusers# R implementation of # /* # * This is a C implementation of the geodesic algorithms described in # * # * C. F. F. Karney, # * Algorithms for geodesics, # * J. Geodesy 87, 43--55 (2013); # * https://dx.doi.org/10.1007/s00190-012-0578-z # * Addenda: http://geographiclib.sf.net/geod-addenda.html # * # * See the comments in geodesic.h for documentation. # * # * Copyright (c) Charles Karney (2012-2014) and licensed # * under the MIT/X11 License. For more information, see # * http://geographiclib.sourceforge.net/ # */ # # Robert Hijmans # May 2015 # version 1 # license GPL3 # Solve the direct geodesic problem. geodesic <- function(p, azi, d, a=6378137, f=1/298.257223563, ...) { p <- .pointsToMatrix(p) p <- cbind(p[,1], p[,2], azi, d) r <- .Call("_geodesic", as.double(p[,1]), as.double(p[,2]), as.double(p[,3]), as.double(p[,4]), as.double(a), as.double(f), PACKAGE='geosphere') r <- matrix(r, ncol=3, byrow=TRUE) colnames(r) <- c('longitude', 'latitude', 'azimuth') r } # Solve the inverse geodesic problem. geodesic_inverse <- function(p1, p2, a=6378137, f=1/298.257223563, ...) { p1 <- .pointsToMatrix(p1) p2 <- .pointsToMatrix(p2) p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2]) r <- .Call("_inversegeodesic", as.double(p[,1]), as.double(p[,2]), as.double(p[,3]), as.double(p[,4]), as.double(a), as.double(f), PACKAGE='geosphere') r <- matrix(r, ncol=3, byrow=TRUE) colnames(r) <- c('distance', 'azimuth1', 'azimuth2') r } geosphere/R/midPoint.R0000644000176200001440000000262713472155746014367 0ustar liggesusers# Robert Hijmans # October 2009 # version 0.1 # License GPL3 midPoint <- function(p1, p2, a=6378137, f = 1/298.257223563) { # by Elias Pipping gi <- geodesic_inverse(p1, p2, a=a, f=f); destPoint(p1, gi[,'azimuth1'], gi[,'distance']/2, a = a, f = f) } .old_midPoint <- function(p1, p2) { # author of original JavaScript code: Chris Vennes # (c) 2002-2009 Chris Veness # http://www.movable-type.co.uk/scripts/latlong.html # Licence: LGPL, without any warranty express or implied # Much of the above based on formulae by Ed Williams # http://www.edwilliams.org/avform.htm # Port to R by Robert Hijmans # calculate midpoint of great circle line between p1 & p2. # see http:#//mathforum.org/library/drmath/view/51822.html for derivation # based on http://www.movable-type.co.uk/scripts/latlong.html # (c) 2002-2009 Chris Veness toRad <- pi / 180 p1 <- .pointsToMatrix(p1) * toRad p2 <- .pointsToMatrix(p2) * toRad p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2]) lon1 <- p[,1] lat1 <- p[,2] lon2 <- p[,3] lat2 <- p[,4] dLon <- (lon2-lon1) Bx <- cos(lat2) * cos(dLon) By <- cos(lat2) * sin(dLon) lat <- atan2(sin(lat1) + sin(lat2), sqrt((cos(lat1) + Bx)*(cos(lat1) + Bx) + By*By ) ) lon <- lon1 + atan2(By, cos(lat1) + Bx) lon[is.nan(lon)] <- NA lat[is.nan(lat)] <- NA lon <- (lon+pi)%%(2*pi) - pi res <- cbind(lon, lat) / toRad return(res) } geosphere/R/greatCircleBearing.R0000644000176200001440000000054413472155746016314 0ustar liggesusers# author Robert Hijmans # April 2010 # version 0.1 # license GPL greatCircleBearing <- function(p, brng, n=360) { p <- .pointsToMatrix(p) p <- cbind(p[,1], p[,2], as.vector(brng), n) p2 <- destPoint(p[,1:2], p[,3], 10000000) return(greatCircle(p[,1:2], p2, n=p[,4])) } #greatCircleBearing(rbind(cbind(5,52), cbind(5,15)), 60, n=12) geosphere/R/randomCoordinates.R0000644000176200001440000000101713472155746016247 0ustar liggesusers# author Robert Hijmans # July 2010 # version 0.1 # license GPL # based on suggstions by Michael Orion # http://sci.tech-archive.net/Archive/sci.math/2005-09/msg04691.html randomCoordinates <- function(n) { z <- stats::runif(n) * 2 - 1 t <- stats::runif(n) * 2 * pi r <- sqrt(1-z^2) x <- r * cos(t) y <- r * sin(t) r <- sqrt(x^2 + y^2 + z^2) theta <- acos(z / r) phi <- atan2(y,x) lat <- theta * 180 / pi - 90 lon <- phi * 180 / pi return(cbind(lon,lat)) } geosphere/R/refEllipsoids.R0000644000176200001440000000263013472155746015402 0ustar liggesusers refEllipsoids <- function() { data.frame( ellipsoid = c('Airy (1930)', 'Australian National', 'Bessel 1841', 'Ethiopia, Indonesia, Japan, Korea', 'Namibia', 'Clarke 1866', 'Clarke 1880', 'Everest - Brunei & E. Malasia (Sabah & Sarawak)', 'Everest - India 1830', 'Everest - India 1956', 'Everest - Pakistan', 'Everest - W. Malasia and Singapore 1948', 'Everest - W. Malasia 1969', 'Geodetic Reference System 1980 (GRS 80)', 'Helmert 1906', 'Hough 1960', 'Indonesian 1974', 'International 1924', 'Krassovsky 1940', 'Modified Airy', 'Modified Fischer 1960 (South Asia)', 'South American 1969', 'World Geodetic System 1972 (WGS 72)', 'World Geodetic System 1984 (WGS 84)'), code = c('AA', 'AN', '??', 'BR', 'BN', 'CC', 'CD', 'EB', 'EA', 'EC', 'EF', 'EE', 'ED', 'RF', 'HE', 'HO', 'ID', 'IN', 'KA', 'AM', 'FA', 'SA', 'WD', 'WE'), invf = c(299.3249646, 298.25, 299.1528434, 299.1528128, 299.1528128, 294.9786982, 293.465, 300.8017, 300.8017, 300.8017, 300.8017, 300.8017, 300.8017, 298.2572221, 298.3, 297, 298.247, 297, 298.3, 299.3249646, 298.3, 298.25, 298.26, 298.2572236), a = c(6377563.396, 6378160, 6377397.155, 6377397.155, 6377483.865, 6378206.4, 6378249.145, 6377298.556, 6377276.345, 6377301.243, 6377309.613, 6377304.063, 6377295.664, 6378137, 6378200, 6378270, 6378160, 6378388, 6378245, 6377340.189, 6378155, 6378160, 6378135, 6378137), stringsAsFactors=FALSE ) } geosphere/R/distm.R0000644000176200001440000000106713472155746013721 0ustar liggesusers# Robert Hijmans # April 2010 # version 1 # License GPL3 .distm1 <- function(x, fun) { n = nrow(x) dm = matrix(0, ncol=n, nrow=n) if (n == 1) { return(dm) } for (i in 2:n) { j = 1:(i-1) dm[i,j] = fun(x[i,], x[j,]) } dm <- dm+t(dm) return(dm) } distm <- function(x, y, fun=distGeo) { x <- .pointsToMatrix(x) if (missing(y)) { return( .distm1(x, fun) ) } y <- .pointsToMatrix(y) n = nrow(x) m = nrow(y) dm = matrix(ncol=m, nrow=n) for (i in 1:n) { dm[i,] = fun(x[i,], y) } return(dm) } geosphere/R/distRhumb.R0000644000176200001440000000223113472155746014534 0ustar liggesusers# author of original JavaScript code: Chris Vennes # (c) 2002-2009 Chris Veness # http://www.movable-type.co.uk/scripts/latlong.html # Licence: LGPL, without any warranty express or implied # see http://www.edwilliams.org/avform.htm#Rhumb # for the original formulae # Port to R by Robert Hijmans # October 2009 # version 0.1 # license GPL3 distRhumb <- function(p1, p2, r=6378137) { # distance on a rhumb line toRad <- pi / 180 p1 <- .pointsToMatrix(p1) * toRad if (missing(p2)) { p2 <- p1[-1, ,drop=FALSE] p1 <- p1[-nrow(p1), ,drop=FALSE] } else { p2 <- .pointsToMatrix(p2) * toRad } p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], as.vector(r)) lon1 <- p[,1] lat1 <- p[,2] lon2 <- p[,3] lat2 <- p[,4] r <- p[,5] dLat <- (lat2-lat1) dLon <- abs(lon2-lon1) dPhi <- log(tan(lat2/2 + pi/4)/tan(lat1/2 + pi/4)) i <- abs(dLat) > 1e-10 q <- vector(length=length(i)) q[i] <- dLat[i]/dPhi[i] q[!i] <- cos(lat1[!i]) #// if dLon over 180 degrees take shorter rhumb across 180 degrees meridian: dLon[dLon > pi] <- 2*pi - dLon[dLon > pi] d <- sqrt(dLat*dLat + q*q*dLon*dLon) return(d * r) } geosphere/R/helper.R0000644000176200001440000000142113472155746014052 0ustar liggesusers# Author: Robert J. Hijmans # April 2010 # version 1 # license GPL3 .normalizeLonDeg <- function(x) { (x + 180) %% 360 - 180 } .normalizeLonRad <- function(x) { (x + pi) %% (2*pi) - pi } .isPolygon <- function(x, fix=FALSE) { x <- stats::na.omit(x) if (nrow(x) < 4) { stop('this is not a polygon (insufficent number of vertices)') } if (length(unique(x[,1]))==1) { stop('All longitudes are the same (not a polygon)') } if (length(unique(x[,2]))==1) { stop('All latitudes are the same (not a polygon)') } if (! all(!(is.na(x))) ) { stop('polygon has NA values)') } if (! isTRUE(all.equal(x[1,], x[nrow(x),]))) { stop('this is not a valid (closed) polygon. The first vertex is not equal to the last vertex') } return(x) } geosphere/R/gcLon.R0000644000176200001440000000262613472155746013645 0ustar liggesusers# author Robert Hijmans # October 2009 # version 0.1 # license GPL3 # based on #http://www.edwilliams.org/avform.htm#Par gcLon <- function(p1, p2, lat) { # longitudes at which a given great circle crosses a given parallel # source: http://www.edwilliams.org/avform.htm toRad <- pi / 180 p1 <- .pointsToMatrix(p1) p2 <- .pointsToMatrix(p2) p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], lat) p1 <- p[,1:2,drop=FALSE] p2 <- p[,3:4,drop=FALSE] lat <- p[,5] res <- matrix(NA, nrow=nrow(p1), ncol=2) colnames(res) <- c('lon1', 'lon2') anti <- ! antipodal(p1, p2) if (sum(anti) == 0) { return(res) } p1 <- p1[anti, ,drop=FALSE] * toRad p2 <- p2[anti, ,drop=FALSE] * toRad lon1 <- p1[,1] * -1 lat1 <- p1[,2] lon2 <- p2[,1] * -1 lat2 <- p2[,2] lat3 <- lat * toRad l12 <- lon1-lon2 A <- sin(lat1)*cos(lat2)*cos(lat3)*sin(l12) B <- sin(lat1)*cos(lat2)*cos(lat3)*cos(l12) - cos(lat1)*sin(lat2)*cos(lat3) C <- cos(lat1)*cos(lat2)*sin(lat3)*sin(l12) lon <- atan2(B,A) lon3 <- matrix(NA, nrow=length(lon1), ncol=2) i <- (abs(C) > sqrt(A^2 + B^2)) | (sqrt(A^2 + B^2) == 0) lon3[i,] <- NA i <- !i dlon <- rep(NA, length(A)) dlon[i] <- acos(C[i]/sqrt(A[i]^2+B[i]^2)) lon3[i,1] <- .normalizeLonRad(lon1[i]+dlon[i]+lon[i]) lon3[i,2] <- .normalizeLonRad(lon1[i]-dlon[i]+lon[i]) res[anti,] <- -1 * lon3 / toRad return(res) } geosphere/R/gcIntersectBearing.R0000644000176200001440000000442013472155746016337 0ustar liggesusers# author Chris Veness, Robert Hijmans # based on formulae by Ed Willians at # http://www.edwilliams.org/avform.htm#Intersection # October 2009 # version 0.1 # license GPL3 gcIntersectBearing <- function(p1, brng1, p2, brng2) { #crs13 true bearing from point 1 and the crs23 true bearing from point 2: toRad <- pi / 180 p1 <- .pointsToMatrix(p1) * toRad p2 <- .pointsToMatrix(p2) * toRad p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], as.vector(brng1), as.vector(brng2)) lon1 <- p[,1] lat1 <- p[,2] lon2 <- p[,3] lat2 <- p[,4] lat1[lat1==90|lat1==-90] <- NA lat2[lat2==90|lat2==-90] <- NA brng13 <- p[,5] * toRad brng23 <- p[,6] * toRad dLat <- lat2-lat1 dLon <- lon2-lon1 dist12 <- 2*asin( sqrt( sin(dLat/2)*sin(dLat/2) + cos(lat1)*cos(lat2)*sin(dLon/2)*sin(dLon/2) ) ) lat3 <- lon3 <- vector(length=length(nrow(lon1))) i <- rep(TRUE, length(dist12)) i[dist12 == 0] <- FALSE brngA <- acos( ( sin(lat2) - sin(lat1)*cos(dist12) ) / ( sin(dist12)*cos(lat1) ) ) brngA[is.na(brngA)] <- 0 # protect against rounding brngB <- acos( ( sin(lat1) - sin(lat2)*cos(dist12) ) / ( sin(dist12)*cos(lat2) ) ) g <- (sin(lon2-lon1) > 0) brng12 <- vector(length=length(g)) brng21 <- brng12 brng12[g] <- brngA[g] brng21[g] <- 2*pi - brngB[g] brng12[!g] <- 2*pi - brngA[!g] brng21[!g] <- brngB[!g] alpha1 <- (brng13 - brng12 + pi) %% (2*pi) - pi #// angle 2-1-3 alpha2 <- (brng21 - brng23 + pi) %% (2*pi) - pi #// angle 1-2-3 g <- sin(alpha1) == 0 & sin(alpha2) == 0 h <- (sin(alpha1) * sin(alpha2)) < 0 i <- !(g | h) & i lon3[!i] <- lat3[!i] <- NA alpha1 <- abs(alpha1) alpha2 <- abs(alpha2) alpha3 <- acos( -cos(alpha1)*cos(alpha2) + sin(alpha1)*sin(alpha2)*cos(dist12) ) dist13 <- atan2( sin(dist12)*sin(alpha1)*sin(alpha2), cos(alpha2)+cos(alpha1)*cos(alpha3) ) lat3[i] <- asin( sin(lat1[i])*cos(dist13[i]) + cos(lat1[i]) * sin(dist13[i]) * cos(brng13[i]) ) dLon13 <- atan2( sin(brng13)*sin(dist13)*cos(lat1), cos(dist13)-sin(lat1)*sin(lat3) ) lon3[i] <- lon1[i]+dLon13[i] lon3 <- (lon3+pi) %% (2*pi) - pi # // normalise to -180..180 degrees int <- cbind(lon3, lat3) / toRad colnames(int) <- c('lon', 'lat') int <- cbind(int, antipode(int)) rownames(int) <- NULL return(int) } geosphere/R/regularCoordinates.R0000644000176200001440000000173113472155746016433 0ustar liggesusers# author Robert Hijmans # July 2010 # version 0.1 # license GPL # Based on pascal code by Nils Haeck, simdesign.nl # http://mathforum.org/kb/message.jspa?messageID=3985660&tstart=0 regularCoordinates <- function(N) { N <- round(N) if (N < 1) {stop('N should be >= 1')} # subdivision angle beta <- 0.5 * pi / N # line segment length A <- 2 * sin(beta/2); # endcap points <- rbind(c(0, 0, 1), c(0, 0, -1)) # rings R <- sin(1:N * beta) Z <- cos(1:N * beta) M <- round(R * 2 * pi / A) for (i in 1:N) { j <- 0:(M[i]-1) Alpha <- j/M[i] * 2 * pi X <- cos(Alpha) * R[i] Y <- sin(Alpha) * R[i] points <- rbind(points, cbind(X, Y, Z[i])) if (i != N) { points <- rbind(points, cbind(X, Y, -Z[i])) } } r <- sqrt(points[,1]^2 + points[,2]^2 + points[,3]^2) theta <- acos(points[,3] / r) phi <- atan2(points[,2], points[,1]) lat <- theta * 180 / pi - 90 lon <- phi * 180 / pi return(cbind(lon,lat)) } geosphere/R/plotPoly.R0000644000176200001440000000356313472155746014426 0ustar liggesusers# Author: Robert Hijmans # April 2010 # version 0.1 # license GPL # inspired by an example in Software for Data Analysis by John Chambers (pp 250-1) # but adjusted to follow great circles, rather than straight (2D) lines. .doArrows <- function(p, line, fraction, length, interval, ...) { if (fraction >= 1) { graphics::lines(line, ...) } else { dist <- distGeo(p[-nrow(p),], p[-1,]) * (1 - fraction) bearing <- bearing(p[-nrow(p),], p[-1,]) p0 <- destPoint(p[-nrow(p),], bearing, dist) for (i in 1:nrow(p0)) { line = .makeSinglePoly(rbind(p0[i,], p[i+1,]), interval=interval) graphics::lines(line) } } bearing = finalBearing(p[-nrow(p),], p[-1,]) bearing = (bearing + 180) %% 360 pp = destPoint(p[-1,], bearing, interval) x0 <- pp[,1] y0 <- pp[,2] x1 <- p[,1][-1] y1 <- p[,2][-1] # delta = sqrt(mean((x1-x0)^2 + (y1-y0)^2, na.rm=TRUE)) # delta = delta * (par("pin")[1] / diff(range(x, na.rm=TRUE))) graphics::arrows(x0, y0, x1, y1, code=2, length=length, ...) } plotArrows <- function(p, fraction=0.9, length=0.15, first='', add=FALSE, ...) { asp=1 if (inherits(p, 'Spatial')) { bb = t(bbox(p)) interval = distm(bb)[2][1] / 1000 if (! add) { plot(bb, asp=asp, type='n') } p = p@polygons n = length(p) for (i in 1:n) { parts = length(p[[i]]@Polygons ) sumarea = 0 for (j in 1:parts) { pp = p[[i]]@Polygons[[j]]@coords line = .makeSinglePoly(pp, interval=interval) .doArrows(pp, line, fraction, length, interval=interval, ...) } graphics::points(pp[1,1], pp[1,2], pch=first, cex=2) } } else { interval = max(distm(p), na.rm=TRUE) / 1000 line = .makeSinglePoly(p, interval=interval) if (! add) { plot(line, asp=asp, type='n') } .doArrows(p, line=line, fraction, length, interval=interval, ...) graphics::points(p[1,1], p[1,2], pch=first, cex=2) } } geosphere/R/gcIntermediate.R0000644000176200001440000000464313472155746015530 0ustar liggesusers# author Robert Hijmans # October 2009 # version 0.1 # license GPL .interm <- function(p1, p2, n) { toRad <- pi / 180 if (antipodal(p1, p2)) { return(rep(Inf, nrow(p1))) } if (isTRUE(all.equal(p1, p2))) { return(cbind(rep(p1[,1], nrow(p1)), rep(p1[,2], nrow(p1)) )) } d <- distCosine(p1, p2, r=1) lon1 <- p1[,1] * toRad lat1 <- p1[,2] * toRad lon2 <- p2[,1] * toRad lat2 <- p2[,2] * toRad n <- max(round(n), 1) f <- 1:n / (n+1) A <- sin((1-f)*d) / sin(d) B <- sin(f*d) / sin(d) x <- A*cos(lat1)*cos(lon1) + B*cos(lat2)*cos(lon2) y <- A*cos(lat1)*sin(lon1) + B*cos(lat2)*sin(lon2) z <- A*sin(lat1) + B*sin(lat2) lat <- atan2(z,sqrt(x^2+y^2)) lon <- atan2(y,x) cbind(lon,lat)/toRad } .breakAtDateLine <- function(x) { r <- range(x[,1]) r <- r[2] - r[1] if (r > 200) { dif <- abs(x[-nrow(x),1] - x[-1,1]) tr <- which(dif==max(dif)) x1 <- x[1:tr, ,drop=FALSE] x2 <- x[(tr+1):nrow(x), ,drop=FALSE] if (x1[tr,1] < 0) { x1[tr,1] <- -180 x2[1,1] <- 180 } else { x1[tr,1] <- 180 x2[1,1] <- -180 } if (nrow(x1) <= 1) { res <- x2 } else if (nrow(x2) <= 1) { res <- x1 } else { res <- list(x1, x2) } return(res) } return(x) } gcIntermediate <- function( p1, p2, n=50, breakAtDateLine=FALSE, addStartEnd=FALSE, sp=FALSE, sepNA=FALSE) { # Intermediate points on a great circle # source: http://www.edwilliams.org/avform.htm p1 <- .pointsToMatrix(p1) p2 <- .pointsToMatrix(p2) p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2], as.vector(n)) res <- list() for (i in 1:nrow(p)) { x <- .interm(p[i,1:2,drop=FALSE], p[i,3:4,drop=FALSE], p[i,5]) if (addStartEnd) { x <- rbind(p[i,1:2,drop=FALSE], x, p[i,3:4,drop=FALSE]) } if (breakAtDateLine) { res[[i]] <- .breakAtDateLine(x) } else { res[[i]] <- x } } if (sp) { for (i in 1:length(res)) { if (! is.list(res[[i]])) { res[[i]] <- Lines( list( Line (res[[i]])), ID=as.character(i)) } else { res[[i]] <- Lines( list( Line (res[[i]][[1]]), Line(res[[i]][[2]])), ID=as.character(i)) } } res <- SpatialLines(res, CRS("+proj=longlat +ellps=WGS84")) } else if (nrow(p) == 1 ) { res <- res[[1]] } else if (sepNA) { r <- res[[1]] for (i in 2:length(res)) { r <- rbind(r, c(NA,NA), res[[i]]) } return(r) } return(res) } geosphere/R/daylength.R0000644000176200001440000000325713472155746014563 0ustar liggesusers# Author: Robert J. Hijmans, r.hijmans@gmail.com # License GPL3 # Version 0.1 January 2009 daylength <- function(lat, doy) { if (class(doy) == 'Date' | class(doy) == 'character') { doy <- as.character(doy) doy <- as.numeric(format(as.Date(doy), "%j")) } else { doy <- (doy-1) %% 365 + 1 } lat[lat > 90 | lat < -90] <- NA #Forsythe, William C., Edward J. Rykiel Jr., Randal S. Stahl, Hsin-i Wu and Robert M. Schoolfield, 1995. #A model comparison for daylength as a function of latitude and day of the year. Ecological Modeling 80:87-95. P <- asin(0.39795 * cos(0.2163108 + 2 * atan(0.9671396 * tan(0.00860*(doy-186))))) a <- (sin(0.8333 * pi/180) + sin(lat * pi/180) * sin(P)) / (cos(lat * pi/180) * cos(P)) a <- pmin(pmax(a, -1), 1) DL <- 24 - (24/pi) * acos(a) return(DL) } .daylength2 <- function(lat, doy) { if (class(doy) == 'Date' | class(doy) == 'character') { doy <- as.character(doy) doy <- as.numeric(format(as.Date(doy), "%j")) } else { doy <- (doy-1) %% 365 + 1 } lat[lat > 90 | lat < -90] <- NA doy <- (doy-1) %% 365 + 1 # after Goudriaan and Van Laar RAD <- pi/180 # Sine and cosine of latitude (LAT) SINLAT <- sin(RAD * lat); COSLAT <- cos(RAD * lat); # Maximal sine of declination;} SINDCM <- sin(RAD * 23.45) #{Sine and cosine of declination (Eqns 3.4, 3.5);} SINDEC <- -SINDCM * cos(2*pi*(doy+10)/365) COSDEC <- sqrt(1-SINDEC*SINDEC); #The terms A and B according to Eqn 3.3;} A <- SINLAT*SINDEC; B <- COSLAT*COSDEC; C <- A/B; #Daylength according to Eqn 3.6; arcsin(c) = arctan(c/sqrt(c*c+1))} DAYL <- 12* (1+(2/pi)* atan(C/sqrt(C*C+1))) return(DAYL) } geosphere/R/dist2Line.R0000644000176200001440000000540513472155746014436 0ustar liggesusers# Author: George Wang & Robert J. Hijmans # August 2010 # version 1 # license GPL3 .spDistPoint2Line <- function(p, line, distfun) { test <- !is.projected(line) if (! isTRUE (test) ) { if (is.na(test)) { warning('Coordinate reference system of SpatialPolygons object is not set. Assuming it is degrees (longitude/latitude)!') } else { stop('Points are projected. They should be in degrees (longitude/latitude)') } # or rather transform them ....? } x <- line@lines n <- length(x) res <- matrix(nrow=nrow(p), ncol=4) colnames(res) <- c("distance","lon","lat","ID") res[] <- Inf for (i in 1:n) { parts <- length(x[[i]]@Lines ) for (j in 1:parts) { crd <- x[[i]]@Lines[[j]]@coords r <- cbind(dist2Line(p, crd, distfun), i) k <- r[,1] < res[,1] res[k, ] <- r[k, ] } } return(res) } dist2Line <- function(p, line, distfun=distGeo) { p <- .pointsToMatrix(p) if (inherits(line, 'SpatialPolygons')) { line <- methods::as(line, 'SpatialLines') } if (inherits(line, 'SpatialLines')) { return( .spDistPoint2Line(p, line, distfun) ) } line <- .pointsToMatrix(line) line1 <- line[-nrow(line), ,drop=FALSE] line2 <- line[-1, ,drop=FALSE] seglength <- distfun(line1, line2) res <- matrix(nrow=nrow(p), ncol=3) colnames(res) <- c("distance","lon","lat") for (i in 1:nrow(p)) { xy <- p[i,] # the shortest distance of a point to a great circle crossdist <- abs(dist2gc(line1, line2, xy)) # the alongTrackDistance is the length of the path along the great circle to the point of intersection # there are two, depending on which node you start # we want to use the min, but the max needs to be < segment length trackdist1 <- alongTrackDistance(line1, line2, xy) trackdist2 <- alongTrackDistance(line2, line1, xy) mintrackdist <- pmin(trackdist1, trackdist2) maxtrackdist <- pmax(trackdist1, trackdist2) crossdist[maxtrackdist >= seglength] <- NA # if the crossdist is NA, we use the distance to the nodes nodedist <- distfun(xy, line) warnopt = getOption('warn') options('warn'=-1) distmin1 <- min(nodedist, na.rm=TRUE) distmin2 <- min(crossdist, na.rm=TRUE) options('warn'= warnopt) if (distmin1 <= distmin2) { j <- which.min(nodedist) res[i,] <- c(distmin1, line[j,]) } else { j <- which.min(crossdist) # if else to determine from which node to start if (trackdist1[j] < trackdist2[j]) { bear <- bearing(line1[j,], line2[j,]) pt <- destPoint(line1[j,], bear, mintrackdist[j]) res[i,] <- c(crossdist[j], pt) } else { bear <- bearing(line2[j,], line1[j,]) pt <- destPoint(line2[j,], bear, mintrackdist[j]) res[i,] <- c(crossdist[j], pt) } } } return(res) } geosphere/R/areaPolygon.R0000644000176200001440000000562614131141161015041 0ustar liggesusers# Robert Hijmans # April 2010 # version 1 # license GPL3 if (!isGeneric("areaPolygon")) { setGeneric("areaPolygon", function(x, ...) standardGeneric("areaPolygon")) } setMethod('areaPolygon', signature(x='data.frame'), function(x, a=6378137, f=1/298.257223563, ...) { areaPolygon(as.matrix(x), a=a, f=f, ...) } ) setMethod('areaPolygon', signature(x='SpatialPolygons'), function(x, a=6378137, f=1/298.257223563, ...) { test <- is.projected(x) if ( isTRUE (test) ) { if (is.na(test)) { warning('Coordinate reference system of SpatialPolygons object is not set. Assuming it is degrees (longitude/latitude)!') } else { stop('The coordinate reference system is not longitude/latitude.') } # or rather transform them ....? } x <- x@polygons n <- length(x) res <- vector(length=n) for (i in 1:n) { parts <- length(x[[i]]@Polygons ) sumarea <- 0 for (j in 1:parts) { crd <- x[[i]]@Polygons[[j]]@coords ar <- areaPolygon(crd, a=a, f=f, ...) if (x[[i]]@Polygons[[j]]@hole) { sumarea <- sumarea - ar } else { sumarea <- sumarea + ar } } res[i] <- sumarea } return(res) } ) setMethod('areaPolygon', signature(x='matrix'), function(x, a=6378137, f=1/298.257223563, ...) { r <- list(...)$r if (!is.null(r)) { # for backwards compatibility warning('remove argument "r" to use an better algorithm') return( .old_areaPolygon(x, r=r) ) } # calling geographiclib x <- .Call("_polygonarea", as.double(x[,1]), as.double(x[,2]), as.double(a), as.double(f), PACKAGE='geosphere') abs(x[3]) }) .old_areaPolygon <- function(x, r=6378137, ...) { # Based on code by Jason_Steven (http://forum.worldwindcentral.com/showthread.php?p=69704) # Reference: Bevis, M. and G. Cambareri, 1987. Computing the area of a spherical polygon of arbitrary shape. Mathematical Geology 19: 335-346 haversine <- function(y) { (1-cos(y))/2 } x <- .pointsToMatrix(x, poly=TRUE) x <- makePoly(x) # for some corner cases # rotate? dif1 <- max(x[,1]) - min(x[,1]) if (dif1 > 180) { x2 <- x x2[,1] <- x2[,1] %% 360 - 180 #dif1 <- max(x[,1]) - min(x[,1]) dif2 <- max(x2[,1]) - min(x2[,1]) if (dif2 < dif1) { x <- x2 } } x <- x * pi / 180 r <- r[1] j <- 1:nrow(x) k <- c(2:nrow(x), 1) i <- x[j,1] != x[k,1] j <- j[i] k <- k[i] lam1 <- x[j,1] lam2 <- x[k,1] beta1 <- x[j,2] beta2 <- x[k,2] cosB1 <- cos( beta1 ) cosB2 <- cos( beta2 ) hav <- haversine( beta2 - beta1 ) + cosB1 * cosB2 * haversine( lam2 - lam1 ) a <- 2 * asin( sqrt( hav ) ) b <- pi / 2 - beta2 c <- pi / 2 - beta1 s <- 0.5 * ( a + b + c ) t <- tan( s / 2 ) * tan( ( s - a ) / 2 ) * tan( ( s - b ) / 2 ) * tan( ( s - c ) / 2 ) excess <- abs( 4 * atan( sqrt( abs( t ) ) ) ) excess[lam2 < lam1] <- -excess[lam2 < lam1] arsum <- abs( sum( excess ) ) * r * r return(arsum ) } geosphere/R/bearing.R0000644000176200001440000000260213472155746014204 0ustar liggesusers# Author: Robert J. Hijmans # Date : March 2010 / May 2015 # Version 2.0 # Licence GPL v3 bearing <- function(p1, p2, a=6378137, f=1/298.257223563) { p1 <- .pointsToMatrix(p1) if (missing(p2)) { if (nrow(p1) < 2) { return(NA) } p2 <- p1[-1, ,drop=FALSE] p1 <- p1[-nrow(p1), ,drop=FALSE] addNA <- TRUE } else { p2 <- .pointsToMatrix(p2) addNA <- FALSE } p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2]) r <- .Call("_inversegeodesic", as.double(p[,1]), as.double(p[,2]), as.double(p[,3]), as.double(p[,4]), as.double(a[1]), as.double(f[1]), PACKAGE='geosphere') r <- matrix(r, ncol=3, byrow=TRUE) if (addNA) { c(r[, 2], NA) } else { r[, 2] } } .old_bearing <- function(p1, p2) { toRad <- pi / 180 p1 <- .pointsToMatrix(p1) * toRad p2 <- .pointsToMatrix(p2) * toRad p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2]) p1 <- p[, 1:2, drop=FALSE] p2 <- p[, 3:4, drop=FALSE] keep <- ! apply(p1 == p2, 1, sum) == 2 res <- rep(NA, length=nrow(p1)) if (sum(keep) == 0) { return(res) } p1 <- p1[keep, , drop=FALSE] p2 <- p2[keep, , drop=FALSE] dLon <- p2[,1] - p1[,1] y <- sin(dLon) * cos(p2[,2]) x <- cos(p1[,2]) * sin(p2[,2]) - sin(p1[,2]) * cos(p2[,2]) * cos(dLon) azm <- atan2(y, x) / toRad azm <- (azm+360) %% 360 i <- azm > 180 azm[i] <- -1 * (360 - azm[i]) res[keep] <- azm return(res) } geosphere/R/gcMaxLat.R0000644000176200001440000000255413472155746014303 0ustar liggesusers# Based on formulae by Ed Williams # http://www.edwilliams.org/avform.htm # Port to R by Robert Hijmans # October 2009 # version 0.1 # License GPL3 gcMaxLat <- function(p1, p2) { toRad <- pi / 180 p1 <- .pointsToMatrix(p1) p2 <- .pointsToMatrix(p2) p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2]) p1 <- p[,1:2,drop=FALSE] p2 <- p[,3:4,drop=FALSE] anti <- antipodal(p1, p2) same <- apply(p1 == p2, 1, sum) == 2 use <- !(anti | same) res <- matrix(rep(NA, nrow(p1)*2), ncol=2) colnames(res) <- c('lon', 'lat') if (length(use)==0) { return(res) } pp1 <- p1[use, , drop=FALSE] pp2 <- p2[use, , drop=FALSE] b <- .old_bearing(pp1, pp2) * toRad lat <- pp1[,2] * toRad # Clairaut's formula : the maximum latitude of a great circle path, given a bearing and latitude on the great circle maxlat <- acos(abs(sin(b) * cos(lat))) / toRad ml <- maxlat - 0.000000000001 maxlon <- mean(gcLon(pp1, pp2, ml)) res[use,] <- cbind(maxlon, maxlat) # lon <- pp1[,1] * toRad # maxlon <- rep(NA, length(maxlat)) # i <- maxlat==0 # j <- b < pi & !i # k <- !j & !i # maxlon[j] <- lon[j] - atan2(cos(b[j]), sin(b[j]) * sin(lat[j])) # maxlon[k] <- lon[k] + pi - atan2(cos(b[k]), sin(b[k]) * sin(lat[k])) # maxlon <- -1 * ((maxlon+pi)%%(2*pi) - pi) # res[use,] <- cbind(maxlon, maxlat)/ toRad return(res) } geosphere/R/distGeo.R0000644000176200001440000000126613472155746014200 0ustar liggesusers# Author: Robert J. Hijmans # Date : May 2015 # Licence GPL v3 distGeo <- function(p1, p2, a=6378137, f=1/298.257223563) { p1 <- .pointsToMatrix(p1) if (missing(p2)) { if (nrow(p1) == 1) return(0) if (nrow(p1) == 0) return(NULL) p2 <- p1[-1, ,drop=FALSE] p1 <- p1[-nrow(p1), ,drop=FALSE] addNA <- TRUE } else { p2 <- .pointsToMatrix(p2) addNA <- FALSE } p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2]) r <- .Call("_inversegeodesic", as.double(p[,1]), as.double(p[,2]), as.double(p[,3]), as.double(p[,4]), as.double(a), as.double(f), PACKAGE='geosphere') r <- matrix(r, ncol=3, byrow=TRUE) if (addNA){ c(r[,1], NA) } else { r[,1] } } geosphere/R/horizon.R0000644000176200001440000000022513472155746014264 0ustar liggesusers horizon <- function(h, r=6378137) { x = cbind(as.vector(h), as.vector(r)) h = x[,1] r = x[,2] b = 0.8279 sqrt( 2 * r * h / b ) } geosphere/R/bearingRhumb.R0000644000176200001440000000221113472155746015176 0ustar liggesusers# author of original JavaScript code: Chris Vennes # (c) 2002-2009 Chris Veness # http://www.movable-type.co.uk/scripts/latlong.html # Licence: LGPL, without any warranty express or implied # see http://www.edwilliams.org/avform.htm#Rhumb # for the original formulae # Port to R by Robert Hijmans # October 2009 # version 0.1 # license GPL3 bearingRhumb <- function(p1, p2) { toRad <- pi / 180 p1 <- .pointsToMatrix(p1) * toRad p2 <- .pointsToMatrix(p2) * toRad p <- cbind(p1[,1], p1[,2], p2[,1], p2[,2]) p1 <- p[, 1:2, drop=FALSE] p2 <- p[, 3:4, drop=FALSE] keep <- ! apply(p1 == p2, 1, sum) == 2 res <- rep(NA, length=nrow(p1)) if (sum(keep) == 0) { return(res) } lon1 <- p1[keep, 1, drop=FALSE] lat1 <- p1[keep, 2, drop=FALSE] lon2 <- p2[keep, 1, drop=FALSE] lat2 <- p2[keep, 2, drop=FALSE] dLon <- (lon2-lon1) dPhi <- log(tan(lat2/2 + pi/4)/tan(lat1/2+pi/4)) i <- (abs(dLon) > pi) j <- i & dLon > 0 dLon[j] <- -(2*pi-dLon[j]) j <- i & dLon <= 0 dLon[j] <- dLon[j] <- (2*pi+dLon[j]) b <- atan2(dLon, dPhi) b <- b / toRad b <- (b+360) %% 360 res[keep] = b return(res) } geosphere/R/mercator.R0000644000176200001440000000077113472155746014416 0ustar liggesusers# Author: Robert J. Hijmans # April 2010 # version 0.1 # license GPL3 mercator <- function(p, inverse=FALSE, r=6378137) { toRad <- pi / 180 if (inverse) { p <- .pointsToMatrix(p, checkLonLat=FALSE) p[ ,2] <- pi/2 - 2 * atan(exp(-p[,2] / r)) p[ ,1] <- p[,1] / r colnames(p) <- c('lon', 'lat') return( p / toRad ) } else { p <- .pointsToMatrix(p) * toRad p[,2] <- log( tan(p[,2]) + (1 / cos(p[,2]))) p <- p * r colnames(p) <- c('x', 'y') return( p ) } } geosphere/R/distMeeus.R0000644000176200001440000000214213472155746014536 0ustar liggesusers# R code by Robert Hijmans # based on Java script code by # Stephen R. Schmitt (copyright, 2004) # http://web.archive.org/web/20070108024032/http://home.att.net/~srschmitt/script_greatcircle.html # algorithm taken from "Astronomical Algorithms" by Jean Meeus distMeeus <- function(p1, p2, a=6378137, f=1/298.257223563) { toRad <- pi / 180 p1 <- .pointsToMatrix(p1) * toRad if (missing(p2)) { p2 <- p1[-1, ,drop=FALSE] p1 <- p1[-nrow(p1), ,drop=FALSE] } else { p2 <- .pointsToMatrix(p2) * toRad } F <- ( p1[,2] + p2[,2] ) / 2 G <- ( p1[,2] - p2[,2] ) / 2 L <- ( p1[,1] - p2[,1] ) / 2 sinG2 <- ( sin( G ) )^2 cosG2 <- ( cos( G ) )^2 sinF2 <- ( sin( F ) )^2 cosF2 <- ( cos( F ) )^2 sinL2 <- ( sin( L ) )^2 cosL2 <- ( cos( L ) )^2 S <- sinG2 * cosL2 + cosF2 * sinL2 C <- cosG2 * cosL2 + sinF2 * sinL2 w <- atan( sqrt( S/C ) ) R <- sqrt( S*C )/w D <- 2 * w * a H1 <- (3*R - 1)/(2*C) H2 <- (3*R + 1)/(2*S) dst <- D*( 1 + f*H1*sinF2*cosG2 - f*H2*cosF2*sinG2 ) # remove NaN for when p1[i,]==p2[i,] dst[which(w==0)] <- 0 return ( as.vector(dst) ) } geosphere/R/pointsToMatrix.R0000644000176200001440000000431713472155746015606 0ustar liggesusers# Author: Robert J. Hijmans & Jacob van Etten # October 2009 # version 1 # license GPL3 .pointsToMatrix <- function(p, checkLonLat=TRUE, poly=FALSE) { if (inherits(p, 'SpatialPoints')) { test <- !is.projected(p) if (! isTRUE (test) ) { if (is.na(test)) { warning('Coordinate reference system of SpatialPoints object is not set. Assuming it is degrees (longitude/latitude)!') } else { stop('Points are projected. They should be in degrees (longitude/latitude)') } # or rather transform them ....? } p <- coordinates(p) } else if (is.data.frame(p)) { p <- as.matrix(p) } else if (is.vector(p)){ if (length(p) != 2) { stop('Wrong length for a vector, should be 2') } else { p <- matrix(p, ncol=2) } } else if (is.matrix(p)) { if (ncol(p) != 2) { stop( 'A points matrix should have 2 columns') } cn <- colnames(p) if (length(cn) == 2) { if (toupper(cn[1]) == 'Y' | toupper(cn[2]) == 'X') { warning('Suspect column names (x and y reversed?)') } if (toupper(substr(cn[1],1,3) == 'LAT' | toupper(substr(cn[2],1,3)) == 'LON')) { warning('Suspect column names (longitude and latitude reversed?)') } } } else { stop('points should be vectors of length 2, matrices with 2 columns, or inheriting from a SpatialPoints* object') } if (! is.numeric(p) ) { p[] <- as.numeric(p) } if (checkLonLat & nrow(p) > 0) { if (length(stats::na.omit(p[,1])) > 0) { if (min(p[,1], na.rm=TRUE) < -360) { stop('longitude < -360') } if (max(p[,1], na.rm=TRUE) > 360) { stop('longitude > 360') } if (min(p[,1], na.rm=TRUE) < -180) { warning('longitude < -180') } if (max(p[,1], na.rm=TRUE) > 180) { warning('longitude > 180') } } if (length(stats::na.omit(p[,2])) > 0) { if (min(p[,2], na.rm=TRUE) < -90) { stop('latitude < -90') } if (max(p[,2], na.rm=TRUE) > 90) { stop('latitude > 90') } } } if (poly) { if (! isTRUE(all.equal(p[1,], p[nrow(p),]))) { p <- rbind(p, p[1,]) } i <- p[-nrow(p),1] == p[-1,1] & p[-nrow(p),2] == p[-1,2] i <- which(isTRUE(i)) if (length(i) > 0) { p <- p[-i, ,drop=FALSE] } .isPolygon(p) } return(p) } geosphere/R/old_destPoint.R0000644000176200001440000000231313472155746015403 0ustar liggesusers# author of original JavaScript code: Chris Vennes # (c) 2002-2009 Chris Veness # http://www.movable-type.co.uk/scripts/latlong.html # Licence: LGPL, without any warranty express or implied # Based on formulae by Ed Williams # http://www.edwilliams.org/avform.htm # Port to R by Robert Hijmans # October 2009 # version 0.1 # License GPL3 .old_destPoint <- function(p, b, d, r=6378137) { # calculate destination point given start point, initial bearing (deg) and distance (km) # see http:#//www.edwilliams.org/avform.htm#LL # source http://www.movable-type.co.uk/scripts/latlong.html # (c) 2002-2009 Chris Veness toRad <- pi / 180 b = as.vector(b) d = as.vector(d) r = as.vector(r) p <- .pointsToMatrix(p) p = cbind(p[,1], p[,2], b, d, r) lon1 <- p[,1] * toRad lat1 <- p[,2] * toRad b <- p[,3] * toRad d = p[,4] r = p[,5] lat2 <- asin( sin(lat1)*cos(d/r) + cos(lat1)*sin(d/r)*cos(b) ) lon2 <- lon1 + atan2(sin(b)*sin(d/r)*cos(lat1), cos(d/r)-sin(lat1)*sin(lat2)) lon2 <- (lon2+pi)%%(2*pi) - pi #// normalise to -180...+180 lon2[is.nan(lon2)] <- NA lat2[is.nan(lat2)] <- NA res <- cbind(lon2, lat2) / toRad colnames(res) <- c('lon', 'lat') return(res) } geosphere/R/lengthLine.R0000644000176200001440000000150113472155746014663 0ustar liggesusers# Author: Robert J. Hijmans # August 2016 # version 1 # license GPL3 lengthLine <- function(line) { if (inherits(line, 'SpatialPolygons')) { requireNamespace('raster') line <- raster::geom(methods::as(line, 'SpatialLines')) } else if (inherits(line, 'SpatialLines')) { requireNamespace('raster') line <- raster::geom(line) } else { line <- cbind(object=1, part=1, cump=1, line[, 1:2]) colnames(line)[4:5] <- c('x', 'y') } ids <- unique(line[,1]) len <- rep(0, length(ids)) for (i in 1:length(ids)) { d <- line[line[,1] == ids[i], ] parts <- unique(d[,2]) for (p in parts) { dd <- d[d[,2] == p, ,drop=FALSE] for (j in 1:(nrow(dd)-1)) { len[i] <- len[i] + distGeo(dd[j, c('x', 'y'), drop=FALSE], dd[j+1, c('x', 'y'), drop=FALSE]) } } } return(len) } geosphere/R/geomean.R0000644000176200001440000000123513472155746014211 0ustar liggesusers# Author: Robert J. Hijmans # February 2012 # version 1 # license GPL3 geomean <- function(xy, w=NULL) { xy <- .pointsToMatrix(xy) if (is.null(w)) { w <- 1 } else if (length(w) != nrow(xy)) { stop('length of weights not correct. It should be: ', nrow(xy)) } w <- w / sum(w) xyw <- cbind(xy, w) xy <- stats::na.omit(xyw) xy <- xyw[,1:2] w <- xyw[,3] xy[,1] <- xy[,1] + 180 xy <- xy * pi / 180 Sx <- mean(sin(xy[,1]) * w) Cx <- mean(cos(xy[,1]) * w) x <- atan2(Sx, Cx) x <- x %% (2 * pi) - pi Sy <- mean(sin(xy[,2]) * w) Cy <- mean(cos(xy[,2]) * w) y <- atan2(Sy, Cy) cbind(x,y) * 180 / pi } geosphere/MD50000644000176200001440000001263214131644322012547 0ustar liggesusersc69db0907b2f003d2b424d1638908e2f *ChangeLog 4ed63e8d6876928683afc3d5f2219659 *DESCRIPTION 294b58bb11b5fc02d9c6fd195d9beb70 *NAMESPACE 5e4491aab79aa215a938d6e6561b2e37 *R/alongTrack.R 086fb52d312f6a5e34a3176fc2455751 *R/antipodal.R a27bda71f9c1a6aee54b363ceb0ac718 *R/areaPolygon.R 89cfeadbec4d5502c66f5ebc0f8335b4 *R/bearing.R 495cb8e6ca1422490b1c6058f9450a46 *R/bearingRhumb.R aeefe269b66e57f93cdd2acf0547321f *R/centroid.R 721bcf7bb5c0467ead966bcc54f19c9f *R/daylength.R 6f59b3a736b1712211ce4820afb80805 *R/destPoint.R 19e711a9e49bbc7200d3d6a92af583c5 *R/destPointRhumb.R 825ed606555476f8b20a40c25b34a63b *R/dist2Line.R 7f333bbd90b64c3aa7f9d34b39ed539d *R/dist2gc.R ef4a2cf12c3ed6b1f6c685ad3c9640d6 *R/distCosines.R b27354434b396783587dfd9d55d6719f *R/distGeo.R e46f596d3547a7918d737a7d1c4b43ff *R/distHaversine.R 0fc2aa7858bca0fcde0168aecafc3582 *R/distMeeus.R b76298022a9e7e04a41bed4963e4f31d *R/distRhumb.R d86e0dbc3e707a4e765afa6d4ecc7b76 *R/distVincentyEllipsoid.R c91231d7fd536e01af2bcebf5266f40c *R/distVincentySphere.R e5d8a111f45a8958d3c1550365ac8be1 *R/distm.R c7f1bd98d4ef056c760cbcd0ec74e4a6 *R/finalBearing.R da04841b6684bc0de2cc0fb268c675fc *R/gcIntermediate.R 7907332e1c86fd152dba4944eeac4c5e *R/gcIntersect.R df3e5ff050196f694dcb830909576d54 *R/gcIntersectBearing.R 4983e28ab7a610326903f3f8c968e346 *R/gcLat.R 9ee61a5e62351c7c8693abbf7a25b103 *R/gcLon.R 3195f1d7d786a931e8f07307bab61d62 *R/gcMaxLat.R c3fa5452901915a637313ddefb19c68b *R/geodesic.R 2081dca1de87b02dd38dee2d21857e58 *R/geomean.R e05b9ce8c5b6851519e138156fa0527d *R/geomedian.R e83d7662049f48f412d7f54a5766c3c8 *R/greatCircle.R 2818b0933c09267f0c05b1ae07bec869 *R/greatCircleBearing.R 088fe0172bbf3794e16cecc29e17a3ee *R/helper.R ea4c7189b67965e4517e648f27e062b2 *R/horizon.R a6cb94430b50c900a10f0d8fce1b6102 *R/lengthLine.R 2fe3bf69af5f16df458a3e21ae436978 *R/makePoly.R 323eadc05c03f5d11b51558ec412640d *R/mercator.R 430c0a96d811acc0eb31638a108ef44b *R/midPoint.R 13f88662ae5bcb6f0584facd6bd57e29 *R/old_destPoint.R caba5729f0e9429c56c9e6dd6c0d4b3c *R/onGreatCircle.R 9335f311d18dfae536fa9be83e6f57a8 *R/perimeter.R e50d15fc59606d5967fbaaf2ff495739 *R/plotPoly.R b559f888e8e8f24ae56d5b221acf337b *R/pointsToMatrix.R 63372c1d29b6fd85bc82e2695ef831cf *R/randomCoordinates.R ad94d2fb3c7bab9fcc660132ae3534bb *R/refEllipsoids.R a0903ff2b54c613bedcd723a0b3784f7 *R/regularCoordinates.R 4400c83027e73243e6d8e9f30075dda2 *R/sampleAlong.R ff01ac40ecb1cd5d7051ffbfe7c2d64d *R/span.R 6ae750b427fec767447ed7294e683e9c *build/partial.rdb 27cbc0a621634d7877388c2184315f5f *build/vignette.rds 990871f1c55db0d5b160d786c86e6850 *data/merc.RData 464a29b93751536caa7f2cf583124960 *data/wrld.RData 538f4c2b1ae4ddf2242766b02f340b1d *inst/doc/geosphere.R 5090e95e97f748525ed9905c51309b22 *inst/doc/geosphere.Rnw d9ec0bef22cf69a7bd4d389d644254fe *inst/doc/geosphere.pdf 6d96299e3d47a6bc59572c331080d5c6 *man/alongTrackDistance.Rd e3149675013c8042a7e4b1d189ebb502 *man/antipode.Rd 2c3927acdf4de92b9470bea1cb288079 *man/area.Rd 3c1e67195e91c173dab816fa1ef556a5 *man/bearing.Rd 759fd642d8d30a6e4df829f4ad83e96d *man/bearingRhumb.Rd 9f635d7f7c92d5a35ca58634f9d4aca0 *man/centroid.Rd 5313bdcb42b9f847a3cfe5a6662122f1 *man/data.Rd 9ceedf8f5ffb195f3eaa3229a01e59b0 *man/daylength.Rd bb669fa8d574e4635055b22f1d50f4c6 *man/destPoint.Rd 8c9abb053076948c843bb6aee5bc8255 *man/destPointRhumb.Rd 308ded364b826af6300a8fdd4ef87ef9 *man/dist2gc.Rd 01a22370f20c44a9caaa72f910c6e514 *man/dist2line.Rd c5f5fb73bb34f9a26752da3e52111dba *man/distCosine.Rd dd141627647789d50a684905fcc436a0 *man/distGeo.Rd fe4749f348de0dfc5e40628e2e0d3359 *man/distHaversine.Rd 18bf5b4b4721eaa101e44787e6c3cb0e *man/distMeeus.Rd 6b58e5faa130ae3e37cfe14ca51c94b0 *man/distRhumb.Rd e885d31e77b4c95b3fc5f38b1ffc2524 *man/distVincentyEllipsoid.Rd e4e1780d70108de0d7bd8e9fc864490b *man/distVincentySphere.Rd afa1c56dd3db517d3d1605943a1c1826 *man/distm.Rd 4b6f1d4603bc1b515b02b5e00f33b356 *man/finalDirection.Rd 3c4b544ec73c1fe20b6071539c427a0a *man/gcIntersect.Rd 45cb5bd7816f9245b501a0cc194185e4 *man/gcIntersectBearing.Rd 6cb89752de06fa903cd398aeff8f7eba *man/gcLat.Rd 4765b6196ab47333898170efd8dfccb2 *man/gcLon.Rd ac3f7fabfe8b312bb0a432305d2d4d15 *man/gcMaxLat.Rd 6fa655576b9ef5b129e1f4d840772857 *man/geodesic.Rd 48cb8c3ad419c5c376828521bcae65c2 *man/geomean.Rd 1255b86af896a11f3c47dbe2d85bc285 *man/geosphere-package.Rd 4e7069024be6c2df3c285532b4a09a3f *man/greatCircle.Rd 1fb55c4fcc4dc6832a62ed972ed21e72 *man/greatCircleBearing.Rd 2fe4ad438c887c4afa1b6ab8ec397c8e *man/horizon.Rd b5f2fe72f907c3f528e62213eb87a231 *man/intermediate.Rd f4041cf233eff9ff59f433466b12c72b *man/lengthLine.Rd f914ee7fb7d8814771cc6b9030d80874 *man/makepoly.Rd bb5594fa360f7bd43ce0e5a3e7669765 *man/mercator.Rd 1f4501ca3c843ed15e7fad9ede71fbd7 *man/midPoint.Rd 59e5771608c5cd49199e43247d7322c5 *man/onGreatCircle.Rd d6584b12201babdd088d975b602765a3 *man/perimeter.Rd 9c6d6bf5d20a721a18e2ecc43b93b53c *man/plotArrows.Rd a62b2968097c05ee51730cf47c42bd02 *man/randomCoordinates.Rd 03ee9e2645c0d185463b1b7d39096280 *man/refEllipsoids.Rd e5a815ce847782faf61535d948b2681f *man/span.Rd ff515b9a898debe9defdcbf9a8ae4ea3 *src/dist.c 4f277083c49bd086621abc203160e993 *src/geodesic.c 598c2f9f280f518436b2f8876df17a81 *src/geodesic.h 414007373b0481c518b960c89e1f5f9a *src/geolib.c 3f00c6c7a5e1c68a1d70472b25a5ae8c *src/geosphere_init.c 9666cc0460dc34dc8133b545eefa5405 *src/pointInPolygon.cpp 54032d7b305b087eb3a5749dc3b1d2e2 *src/util.c 02b3ab8677d52f791681845435a5252a *src/util.h 5090e95e97f748525ed9905c51309b22 *vignettes/geosphere.Rnw geosphere/inst/0000755000176200001440000000000014131211251013177 5ustar liggesusersgeosphere/inst/doc/0000755000176200001440000000000014131211251013744 5ustar liggesusersgeosphere/inst/doc/geosphere.R0000644000176200001440000002031314131211251016047 0ustar liggesusers### R code from vignette source 'geosphere.Rnw' ################################################### ### code chunk number 1: foo ################################################### options(keep.source = TRUE, width = 60) foo <- packageDescription("geosphere") ################################################### ### code chunk number 2: geosphere.Rnw:58-71 ################################################### library(geosphere) Lon <- c(1:9/1000, 1:9/100, 1:9/10, 1:90*2) Lat <- c(1:9/1000, 1:9/100, 1:9/10, 1:90) dcos <- distCosine(c(0,0), cbind(Lon, Lat)) dhav <- distHaversine(c(0,0), cbind(Lon, Lat)) dvsp <- distVincentySphere(c(0,0), cbind(Lon, Lat)) par(mfrow=(c(1,2))) plot(log(dcos), dcos-dhav, col='red', ylim=c(-1e-05, 1e-05), xlab="Log 'Law of Cosines' distance (m)", ylab="Law of Cosines minus Haversine distance") plot(log(dhav), dhav-dvsp, col='blue', xlab="Log 'Haversine' distance (m)", ylab="Vincenty Sphere minus Haversine distance") ################################################### ### code chunk number 3: geosphere.Rnw:76-79 ################################################### dvse <- distVincentyEllipsoid(c(0,0), cbind(Lon, Lat)) plot(dvsp/1000, (dvsp-dvse)/1000, col='blue', xlab='Vincenty Sphere Distance (km)', ylab="Difference between 'Vincenty Sphere' and 'Vincenty Ellipsoid' methods (km)") ################################################### ### code chunk number 4: geosphere.Rnw:89-102 ################################################### LA <- c(-118.40, 33.95) NY <- c(-73.78, 40.63) data(wrld) plot(wrld, type='l') gc <- greatCircle(LA, NY) lines(gc, lwd=2, col='blue') gci <- gcIntermediate(LA, NY) lines(gci, lwd=4, col='green') points(rbind(LA, NY), col='red', pch=20, cex=2) mp <- midPoint(LA, NY) onGreatCircle(LA,NY, rbind(mp,c(0,0))) points(mp, pch='*', cex=3, col='orange') greatCircleBearing(LA, brng=270, n=10) ################################################### ### code chunk number 5: geosphere.Rnw:109-117 ################################################### destPoint(LA, b=65, d=100000) circle=destPoint(c(0,80), b=1:365, d=1000000) circle2=destPoint(c(0,80), b=1:365, d=500000) circle3=destPoint(c(0,80), b=1:365, d=100000) plot(circle, type='l') polygon(circle, col='blue', border='black', lwd=4) polygon(circle2, col='red', lwd=4, border='orange') polygon(circle3, col='white', lwd=4, border='black') ################################################### ### code chunk number 6: geosphere.Rnw:125-139 ################################################### ml <- gcMaxLat(LA, NY) lat0 <- gcLat(LA, NY, lon=0) lon0 <- gcLon(LA, NY, lat=0) plot(wrld, type='l') lines(gc, lwd=2, col='blue') points(ml, col='red', pch=20, cex=2) points(cbind(0, lat0), pch=20, cex=2, col='yellow') points(t(rbind(lon0, 0)), pch=20, cex=2, col='green' ) f <- function(lon){gcLat(LA, NY, lon)} opt <- optimize(f, interval=c(-180, 180), maximum=TRUE) points(opt$maximum, opt$objective, pch=20, cex=2, col='dark green' ) anti <- antipode(c(opt$maximum, opt$objective)) points(anti, pch=20, cex=2, col='dark blue' ) ################################################### ### code chunk number 7: geosphere.Rnw:146-161 ################################################### SF <- c(-122.44, 37.74) AM <- c(4.75, 52.31) gc2 <- greatCircle(AM, SF) plot(wrld, type='l') lines(gc, lwd=2, col='blue') lines(gc2, lwd=2, col='green') int <- gcIntersect(LA, NY, SF, AM) int antipodal(int[,1:2], int[,3:4]) points(rbind(int[,1:2], int[,3:4]), col='red', pch=20, cex=2) bearing1 <- bearing(LA, NY) bearing2 <- bearing(SF, AM) bearing1 bearing2 gcIntersectBearing(LA, bearing1, SF, bearing2) ################################################### ### code chunk number 8: geosphere.Rnw:169-189 ################################################### MS <- c(-93.26, 44.98) gc1 <- greatCircleBearing(NY, 281) gc2 <- greatCircleBearing(MS, 195) gc3 <- greatCircleBearing(LA, 55) plot(wrld, type='l', xlim=c(-125, -70), ylim=c(20, 60)) lines(gc1, col='green') lines(gc2, col='blue') lines(gc3, col='red') int <- gcIntersectBearing(rbind(NY, NY, MS), c(281, 281, 195), rbind(MS, LA, LA), c(195, 55, 55)) int distm(rbind(int[,1:2], int[,3:4])) int <- int[,1:2] points(int) poly <- rbind(int, int[1,]) centr <- centroid(poly) poly2 <- makePoly(int) polygon(poly2, col='yellow') points(centr, pch='*', col='dark red', cex=2) ################################################### ### code chunk number 9: geo5 ################################################### d <- distCosine(LA, NY) d b <- bearing(LA, NY) b destPoint(LA, b, d) NY finalBearing(LA, NY) ################################################### ### code chunk number 10: geosphere.Rnw:213-224 ################################################### atd <- alongTrackDistance(LA, NY, MS) p <- destPoint(LA, b, atd) plot(wrld, type='l', xlim=c(-130,-60), ylim=c(22,52)) lines(gci, col='blue', lwd=2) points(rbind(LA, NY), col='red', pch=20, cex=2) points(MS[1], MS[2], pch=20, col='blue', cex=2) lines(gcIntermediate(LA, p), col='green', lwd=3) lines(gcIntermediate(MS, p), col='dark green', lwd=3) points(p, pch=20, col='red', cex=2) dist2gc(LA, NY, MS) distCosine(p, MS) ################################################### ### code chunk number 11: geosphere.Rnw:232-241 ################################################### line <- rbind(c(-180,-20), c(-150,-10), c(-140,55), c(10, 0), c(-140,-60)) pnts <- rbind(c(-170,0), c(-75,0), c(-70,-10), c(-80,20), c(-100,-50), c(-100,-60), c(-100,-40), c(-100,-20), c(-100,-10), c(-100,0)) d = dist2Line(pnts, line) plot( makeLine(line), type='l') points(line) points(pnts, col='blue', pch=20) points(d[,2], d[,3], col='red', pch='x', cex=2) for (i in 1:nrow(d)) lines(gcIntermediate(pnts[i,], d[i,2:3], 10), lwd=2, col='green') ################################################### ### code chunk number 12: geosphere.Rnw:249-269 ################################################### NP <- c(0, 85) bearing(SF, NP) b <- bearingRhumb(SF, NP) b dc <- distCosine(SF, NP) dr <- distRhumb(SF, NP) dc / dr pr <- destPointRhumb(SF, b, d=round(dr/100) * 1:100) pc <- rbind(SF, gcIntermediate(SF, NP), NP) par(mfrow=c(1,2)) data(wrld) plot(wrld, type='l', xlim=c(-140,10), ylim=c(15,90), main='Equirectangular') lines(pr, col='blue') lines(pc, col='red') data(merc) plot(merc, type='l', xlim=c(-15584729, 1113195), ylim=c(2500000, 22500000), main='Mercator') lines(mercator(pr), col='blue') lines(mercator(pc), col='red') ################################################### ### code chunk number 13: geosphere.Rnw:277-291 ################################################### pol <- rbind(c(-120,-20), c(-80,5), c(0, -20), c(-40,-60), c(-120,-20)) areaPolygon(pol) perimeter(pol) centroid(pol) span(pol, fun=max) nicepoly = makePoly(pol) plot(pol, xlab='longitude', ylab='latitude', cex=2, lwd=3, xlim=c(-140, 0)) lines(wrld, col='grey') lines(pol, col='red', lwd=2) lines(nicepoly, col='blue', lwd=2) points(centroid(pol), pch='*', cex=3, col='dark green') text(centroid(pol)-c(0,2.5), 'centroid') legend(-140, -48, c('planar','spherical'), lty=1, lwd=2, col=c('red', 'blue'), title='polygon type') ################################################### ### code chunk number 14: geosphere.Rnw:299-304 ################################################### plot(wrld, type='l', col='grey') a = randomCoordinates(500) points(a, col='blue', pch=20, cex=0.5) b = regularCoordinates(3) points(b, col='red', pch='x') ################################################### ### code chunk number 15: geosphere.Rnw:313-321 ################################################### as.Date(80, origin='2009-12-31') as.Date(172, origin='2009-12-31') plot(0:90, daylength(lat=0:90, doy=1), ylim=c(0,24), type='l', xlab='Latitude', ylab='Daylength', main='Daylength by latitude and day of year', lwd=2) lines(0:90, daylength(lat=0:90, doy=80), col='green', lwd=2) lines(0:90, daylength(lat=0:90, doy=172), col='blue', lwd=2) legend(0,24, c('1','80','172'), lty=1, lwd=2, col=c('black', 'green', 'blue'), title='Day of year') geosphere/inst/doc/geosphere.Rnw0000644000176200001440000004033113472155746016445 0ustar liggesusers\documentclass{article} \usepackage{natbib} \usepackage{graphics} \usepackage{amsmath} \usepackage{indentfirst} \usepackage[utf8]{inputenc} \usepackage{hyperref} \usepackage{hanging} %\VignetteIndexEntry{Introduction to the geosphere package} \SweaveOpts{keep.source=TRUE} \SweaveOpts{png=TRUE, pdf=FALSE} \SweaveOpts{resolution=100} \begin{document} <>= options(keep.source = TRUE, width = 60) foo <- packageDescription("geosphere") @ \title{Introduction to the "geosphere" package \\ (Version \Sexpr{foo$Version})} \author{Robert J. Hijmans} \maketitle \section{Introduction} This vignette describes the R package '\verb@geosphere@'. The package implements spherical trigonometry functions for geographic applications. Many of the functions have applications in navigation, but others are more general, or have no relation to navigation at all. There is a number of functions to compute distance and direction (= bearing, azimuth, course) along great circles (= shortest distance on a sphere, or "as the crow flies") and along rhumb lines (lines of constant bearing). There are also functions that compute distances on a spheroid. Other functions include the computation of the location of an object at a given direction and distance; and the area, perimeter, and centroid of a spherical polygon. Geographic locations must be specified in longitude and latitude (and in that order!) in degrees (i.e., NOT in radians). Degrees are (obviously) in decimal notation. Thus 12 degrees, 10 minutes, 30 seconds = 12 + 10/60 + 30/3600 = 12.175 degrees. The southern and western hemispheres have a negative sign. The default unit of distance is meter; but this can be adjusted by supplying a different radius 'r' to functions. Directions are expressed in degrees (N = 0 and 360, E = 90, S = 180, and W = 270 degrees). If arguments of functions that take several arguments (e.g. points, bearings, radius of the earth), do not have the same length (for vectors) or number of rows (for matrices) the shorter arguments are re-cycled. Many functions in this package are based on formulae provided by Ed Williams (\url{http://www.edwilliams.org/ftp/avsig/avform.txt}, and partly on javascript implementations of these formulae by Chris Veness (\url{http://www.movable-type.co.uk/scripts/latlong.html} ) Most geodesic computations (for a spheroid rather than a sphere) use the GeographicLib by C.F.F. Karney (\url{http://geographiclib.sourceforge.net/}. \section{Great circle distance} There are four different functions to compute distance between two points. These are, in order of increasing complexity of the algorithm, the 'Spherical law of cosines', 'Haversine' (Sinnott, 1984), 'Vincenty Sphere' and 'Vincenty Ellipsoid' (Vincenty, 1975) methods. The first three assume the earth to be a sphere, while the 'Vincenty Ellipsoid' assumes it is an ellipsoid (which is closer to the truth). The results from the first three functions are identical for practical purposes. The Haversine ('half-versed-sine') formula was published by R.W. Sinnott in 1984, although it has been known for much longer. At that time computational precision was lower than today (15 digits precision). With current precision, the spherical law of cosines formula appears to give equally good results down to very small distances. If you want greater accuracy, you could use the distVincentyEllipsoid method. Below the differences between the three spherical methods are illustrated. At very short distances, there are small differences between the 'law of the Cosine' and the other two methods. There are even smaller differences between the 'Haversine' and 'Vincenty Sphere' methods at larger distances. <>= library(geosphere) Lon <- c(1:9/1000, 1:9/100, 1:9/10, 1:90*2) Lat <- c(1:9/1000, 1:9/100, 1:9/10, 1:90) dcos <- distCosine(c(0,0), cbind(Lon, Lat)) dhav <- distHaversine(c(0,0), cbind(Lon, Lat)) dvsp <- distVincentySphere(c(0,0), cbind(Lon, Lat)) par(mfrow=(c(1,2))) plot(log(dcos), dcos-dhav, col='red', ylim=c(-1e-05, 1e-05), xlab="Log 'Law of Cosines' distance (m)", ylab="Law of Cosines minus Haversine distance") plot(log(dhav), dhav-dvsp, col='blue', xlab="Log 'Haversine' distance (m)", ylab="Vincenty Sphere minus Haversine distance") @ The difference with the 'Vincenty Ellipsoid' method is more pronounced. In the example below (using the default WGS83 ellipsoid), the difference is about 0.3% at very small distances, and 0.15% at larger distances. <>= dvse <- distVincentyEllipsoid(c(0,0), cbind(Lon, Lat)) plot(dvsp/1000, (dvsp-dvse)/1000, col='blue', xlab='Vincenty Sphere Distance (km)', ylab="Difference between 'Vincenty Sphere' and 'Vincenty Ellipsoid' methods (km)") @ For the most precise distance computation use the 'distGeo' function. \section{Points on great circles} Points on a great circle are returned by the function 'greatCircle', using two points on the great circle to define it, and an additional argument to indicate how many points should be returned. You can also use greatCircleBearing, and provide starting points and bearing as arguments. gcIntermediate only returns points on the great circle that are on the track of shortest distance between the two points defining the great circle; and midPoint computes the point half-way between the two points. You can use onGreatCircle to test whether a point is on a great circle between two other points. <>= LA <- c(-118.40, 33.95) NY <- c(-73.78, 40.63) data(wrld) plot(wrld, type='l') gc <- greatCircle(LA, NY) lines(gc, lwd=2, col='blue') gci <- gcIntermediate(LA, NY) lines(gci, lwd=4, col='green') points(rbind(LA, NY), col='red', pch=20, cex=2) mp <- midPoint(LA, NY) onGreatCircle(LA,NY, rbind(mp,c(0,0))) points(mp, pch='*', cex=3, col='orange') greatCircleBearing(LA, brng=270, n=10) @ \section{Point at distance and bearing} Function destPoint returns the location of point given a point of origin, and a distance and bearing. Its perhaps obvious use in georeferencing locations of distant sitings. It can also be used to make circular polygons (with a fixed radius, but in longitude/latitude coordinates) <>= destPoint(LA, b=65, d=100000) circle=destPoint(c(0,80), b=1:365, d=1000000) circle2=destPoint(c(0,80), b=1:365, d=500000) circle3=destPoint(c(0,80), b=1:365, d=100000) plot(circle, type='l') polygon(circle, col='blue', border='black', lwd=4) polygon(circle2, col='red', lwd=4, border='orange') polygon(circle3, col='white', lwd=4, border='black') @ \section{Maximum latitude on a great circle} You can use the functions illustrated below to find out what the maximum latitude is that a great circle will reach; at what latitude it crosses a specified longitude; or at what longitude it crosses a specified latitude. From the map below it appears that Clairaut's formula, used in gcMaxLat is not very accurate. Through optimization with function greatCircle, a more accurate value was found. The southern-most point is the antipode (a point at the opposite end of the world) of the northern-most point. <>= ml <- gcMaxLat(LA, NY) lat0 <- gcLat(LA, NY, lon=0) lon0 <- gcLon(LA, NY, lat=0) plot(wrld, type='l') lines(gc, lwd=2, col='blue') points(ml, col='red', pch=20, cex=2) points(cbind(0, lat0), pch=20, cex=2, col='yellow') points(t(rbind(lon0, 0)), pch=20, cex=2, col='green' ) f <- function(lon){gcLat(LA, NY, lon)} opt <- optimize(f, interval=c(-180, 180), maximum=TRUE) points(opt$maximum, opt$objective, pch=20, cex=2, col='dark green' ) anti <- antipode(c(opt$maximum, opt$objective)) points(anti, pch=20, cex=2, col='dark blue' ) @ \section{Great circle intersections} Points of intersection of two great circles can be computed in two ways. We use a second great circle that connects San Francisco with Amsterdam. We first compute where they cross by defining the great circles using two points on it (gcIntersect). After that, we compute the same points using a start point and initial bearing (gcIntersectBearing). The two points where the great circles cross are antipodes. Antipodes are connected with an infinite number of great circles. <>= SF <- c(-122.44, 37.74) AM <- c(4.75, 52.31) gc2 <- greatCircle(AM, SF) plot(wrld, type='l') lines(gc, lwd=2, col='blue') lines(gc2, lwd=2, col='green') int <- gcIntersect(LA, NY, SF, AM) int antipodal(int[,1:2], int[,3:4]) points(rbind(int[,1:2], int[,3:4]), col='red', pch=20, cex=2) bearing1 <- bearing(LA, NY) bearing2 <- bearing(SF, AM) bearing1 bearing2 gcIntersectBearing(LA, bearing1, SF, bearing2) @ \section{Triangulation} Below is triangulation example. We have three locations (NY, LA, MS) and three directions (281, 60, 195) towards a target. Because we are on a sphere, there are two (antipodal) results. We only show one here (by only using int[,1:2]). We compute the centroid from the polygon defined with the three points. To accurately draw a spherical polygon, we can use makePoly. This function inserts intermediate points along the paths between the vertices provided (default is one point every 10 km). <>= MS <- c(-93.26, 44.98) gc1 <- greatCircleBearing(NY, 281) gc2 <- greatCircleBearing(MS, 195) gc3 <- greatCircleBearing(LA, 55) plot(wrld, type='l', xlim=c(-125, -70), ylim=c(20, 60)) lines(gc1, col='green') lines(gc2, col='blue') lines(gc3, col='red') int <- gcIntersectBearing(rbind(NY, NY, MS), c(281, 281, 195), rbind(MS, LA, LA), c(195, 55, 55)) int distm(rbind(int[,1:2], int[,3:4])) int <- int[,1:2] points(int) poly <- rbind(int, int[1,]) centr <- centroid(poly) poly2 <- makePoly(int) polygon(poly2, col='yellow') points(centr, pch='*', col='dark red', cex=2) @ \section{Bearing} Below we first compute the distance and bearing from Los Angeles (LA) to New York (NY). These are then used to compute the point from LA at that distance in that (initial) bearing (direction). Bearing changes continuously when traveling along a Great Circle. The final bearing, when approaching NY, is also given. <>= d <- distCosine(LA, NY) d b <- bearing(LA, NY) b destPoint(LA, b, d) NY finalBearing(LA, NY) @ \section{Getting off-track} What if we went off-course and were flying over Minneapolis (MS)? The closest point on the planned route (p) can be computed with the alongTrackDistance and destPoint functions. The distance from 'p' to MS can be computed with the dist2gc (distance to great circle, or cross-track distance) function. The light green line represents the along-track distance, and the dark green line represents the cross-track distance. <>= atd <- alongTrackDistance(LA, NY, MS) p <- destPoint(LA, b, atd) plot(wrld, type='l', xlim=c(-130,-60), ylim=c(22,52)) lines(gci, col='blue', lwd=2) points(rbind(LA, NY), col='red', pch=20, cex=2) points(MS[1], MS[2], pch=20, col='blue', cex=2) lines(gcIntermediate(LA, p), col='green', lwd=3) lines(gcIntermediate(MS, p), col='dark green', lwd=3) points(p, pch=20, col='red', cex=2) dist2gc(LA, NY, MS) distCosine(p, MS) @ \section{Distance to a polyline} The two function describe above are used in the dist2Line function that computes the shortest distance between a set of points and a set of spherical poly-lines (or polygons). <>= line <- rbind(c(-180,-20), c(-150,-10), c(-140,55), c(10, 0), c(-140,-60)) pnts <- rbind(c(-170,0), c(-75,0), c(-70,-10), c(-80,20), c(-100,-50), c(-100,-60), c(-100,-40), c(-100,-20), c(-100,-10), c(-100,0)) d = dist2Line(pnts, line) plot( makeLine(line), type='l') points(line) points(pnts, col='blue', pch=20) points(d[,2], d[,3], col='red', pch='x', cex=2) for (i in 1:nrow(d)) lines(gcIntermediate(pnts[i,], d[i,2:3], 10), lwd=2, col='green') @ \section{Rhumb lines} Rhumb (from the Spanish word for course, 'rumbo') lines are straight lines on a Mercator projection map (and at most latitudes pretty straight on an equirectangular projection (=unprojected lon/lat) map). They were used in navigation because it is easier to follow a constant compass bearing than to continually adjust direction as is needed to follow a great circle, even though rhumb lines are normally longer than great-circle (orthodrome) routes. Most rhumb lines will gradually spiral towards one of the poles. <>= NP <- c(0, 85) bearing(SF, NP) b <- bearingRhumb(SF, NP) b dc <- distCosine(SF, NP) dr <- distRhumb(SF, NP) dc / dr pr <- destPointRhumb(SF, b, d=round(dr/100) * 1:100) pc <- rbind(SF, gcIntermediate(SF, NP), NP) par(mfrow=c(1,2)) data(wrld) plot(wrld, type='l', xlim=c(-140,10), ylim=c(15,90), main='Equirectangular') lines(pr, col='blue') lines(pc, col='red') data(merc) plot(merc, type='l', xlim=c(-15584729, 1113195), ylim=c(2500000, 22500000), main='Mercator') lines(mercator(pr), col='blue') lines(mercator(pc), col='red') @ \section{Characterizing polygons} The package has functions to compute the area, perimeter, centroid, and 'span' of a spherical polygon. One approach to compute these measures is to project the polygons first. Here we directly compute them based on spherical coordinates (longitude / latitude), except for centroid, which is computed by projecting the data to the Mercator projection (and inversely projecting the result). The function makePoly inserts additional vertices into a spherical polygon such that it can be plotted (perhaps after first projecting it) more correctly in a plane. Vertices are inserted, where necessary, at a specified distance. The function is only beneficial for polygons with large inter-vertex distances (in terms of longitude), particularly at high latitudes. <>= pol <- rbind(c(-120,-20), c(-80,5), c(0, -20), c(-40,-60), c(-120,-20)) areaPolygon(pol) perimeter(pol) centroid(pol) span(pol, fun=max) nicepoly = makePoly(pol) plot(pol, xlab='longitude', ylab='latitude', cex=2, lwd=3, xlim=c(-140, 0)) lines(wrld, col='grey') lines(pol, col='red', lwd=2) lines(nicepoly, col='blue', lwd=2) points(centroid(pol), pch='*', cex=3, col='dark green') text(centroid(pol)-c(0,2.5), 'centroid') legend(-140, -48, c('planar','spherical'), lty=1, lwd=2, col=c('red', 'blue'), title='polygon type') @ \section{Sampling} Random or regular sampling of longitude/latitude values on the globe needs to consider that the globe is spherical. That is, if you would take random points for latitude between -90 and 90 and for longitude between -180 and 180, the density of points would be higher near the poles than near the equator. In contrast, functions 'randomCoordinates' and 'randomCoordinates' return samples that are spatially balanced. <>= plot(wrld, type='l', col='grey') a = randomCoordinates(500) points(a, col='blue', pch=20, cex=0.5) b = regularCoordinates(3) points(b, col='red', pch='x') @ \section{Daylength} You can compute daylenght according to the formula by Forsythe et al. (1995). For any day of the year (an integer between 1 and 365; or a 'Date' object. <>= as.Date(80, origin='2009-12-31') as.Date(172, origin='2009-12-31') plot(0:90, daylength(lat=0:90, doy=1), ylim=c(0,24), type='l', xlab='Latitude', ylab='Daylength', main='Daylength by latitude and day of year', lwd=2) lines(0:90, daylength(lat=0:90, doy=80), col='green', lwd=2) lines(0:90, daylength(lat=0:90, doy=172), col='blue', lwd=2) legend(0,24, c('1','80','172'), lty=1, lwd=2, col=c('black', 'green', 'blue'), title='Day of year') @ \section{References} \begin{hangparas}{3em}{1} \noindent Forsythe, W.C., E.J. Rykiel Jr., R.S. Stahl, H. Wu and R.M. Schoolfield, 1995. A model comparison for daylength as a function of latitude and day of the year. Ecological Modeling 80:87-95. \noindent Sinnott, R.W, 1984. Virtues of the Haversine. Sky and Telescope 68(2): 159 \noindent Vincenty, T. 1975. Direct and inverse solutions of geodesics on the ellipsoid with application of nested equations. Survey Review 23(176): 88-93. Available here: \url{http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf} \end{hangparas} \end{document} geosphere/inst/doc/geosphere.pdf0000644000176200001440000100634314131211251016427 0ustar liggesusers%PDF-1.5 % 1 0 obj << /S /GoTo /D (section.1) >> endobj 4 0 obj (\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n) endobj 5 0 obj << /S /GoTo /D (section.2) >> endobj 8 0 obj (\376\377\000G\000r\000e\000a\000t\000\040\000c\000i\000r\000c\000l\000e\000\040\000d\000i\000s\000t\000a\000n\000c\000e) endobj 9 0 obj << /S /GoTo /D (section.3) >> endobj 12 0 obj (\376\377\000P\000o\000i\000n\000t\000s\000\040\000o\000n\000\040\000g\000r\000e\000a\000t\000\040\000c\000i\000r\000c\000l\000e\000s) endobj 13 0 obj << /S /GoTo /D (section.4) >> endobj 16 0 obj (\376\377\000P\000o\000i\000n\000t\000\040\000a\000t\000\040\000d\000i\000s\000t\000a\000n\000c\000e\000\040\000a\000n\000d\000\040\000b\000e\000a\000r\000i\000n\000g) endobj 17 0 obj << /S /GoTo /D (section.5) >> endobj 20 0 obj (\376\377\000M\000a\000x\000i\000m\000u\000m\000\040\000l\000a\000t\000i\000t\000u\000d\000e\000\040\000o\000n\000\040\000a\000\040\000g\000r\000e\000a\000t\000\040\000c\000i\000r\000c\000l\000e) endobj 21 0 obj << /S /GoTo /D (section.6) >> endobj 24 0 obj (\376\377\000G\000r\000e\000a\000t\000\040\000c\000i\000r\000c\000l\000e\000\040\000i\000n\000t\000e\000r\000s\000e\000c\000t\000i\000o\000n\000s) endobj 25 0 obj << /S /GoTo /D (section.7) >> endobj 28 0 obj (\376\377\000T\000r\000i\000a\000n\000g\000u\000l\000a\000t\000i\000o\000n) endobj 29 0 obj << /S /GoTo /D (section.8) >> endobj 32 0 obj (\376\377\000B\000e\000a\000r\000i\000n\000g) endobj 33 0 obj << /S /GoTo /D (section.9) >> endobj 36 0 obj (\376\377\000G\000e\000t\000t\000i\000n\000g\000\040\000o\000f\000f\000-\000t\000r\000a\000c\000k) endobj 37 0 obj << /S /GoTo /D (section.10) >> endobj 40 0 obj (\376\377\000D\000i\000s\000t\000a\000n\000c\000e\000\040\000t\000o\000\040\000a\000\040\000p\000o\000l\000y\000l\000i\000n\000e) endobj 41 0 obj << /S /GoTo /D (section.11) >> endobj 44 0 obj (\376\377\000R\000h\000u\000m\000b\000\040\000l\000i\000n\000e\000s) endobj 45 0 obj << /S /GoTo /D (section.12) >> endobj 48 0 obj (\376\377\000C\000h\000a\000r\000a\000c\000t\000e\000r\000i\000z\000i\000n\000g\000\040\000p\000o\000l\000y\000g\000o\000n\000s) endobj 49 0 obj << /S /GoTo /D (section.13) >> endobj 52 0 obj (\376\377\000S\000a\000m\000p\000l\000i\000n\000g) endobj 53 0 obj << /S /GoTo /D (section.14) >> endobj 56 0 obj (\376\377\000D\000a\000y\000l\000e\000n\000g\000t\000h) endobj 57 0 obj << /S /GoTo /D (section.15) >> endobj 60 0 obj (\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s) endobj 61 0 obj << /S /GoTo /D [62 0 R /Fit] >> endobj 67 0 obj << /Length 2317 /Filter /FlateDecode >> stream xڝYKW0X 0xŵ8R,'ss $X({ T9pû4Zle ٶ y'eZo.NFvjl.=e"OcvXdN[& ߢH3ibs}U62H׃Jh.dJ(M;U;3z>cQtgr\0(Ug6,p>Z=+ŰǥFR`+ 4[qnNA3hک<9=/?qRatD B-OLkZFvm(ib+z IށߤWSV_aǓ]HGqx$Ff|P7L1l kIY`b~z ut486zp*׌ۑ#W1!&#IdQf21ĹlMfm] vz*ZB6O+U0FHll|WlS[B|um i4ltq:oq\#&/G(%ˎ* =Ξ@{~͢Ki_Ը(%xκfmKûM*̤Tʘ ܲ<|NVIy_&ͧdP7QGOMㄭ8~AG<p{cr2{Dc~wwNllIIZJH4&DfL=zR'D2"YtR]\2y;,="4"ێ N0g)Vk52RFh:?ֻc(YQ]̓6ka<\<2T^N+ĭgw`~,W YЌtAfL<^:aƮ31u%gk۷REJ\V+Z=Q"+ ,+w~R[[nD eB 'A? }q7zX}hw7v]Jvi|>1*llEt'wDr"ϒ'/;h ϟE%sxX&Bp|=t> UJeN[('˝"Ye5 K-:sR-z64 zt=@mǛNޜGE~x3zK%҈;Ԝd3׻SF@ '-z2n:8]q*1JE!a^~W{IʻjKN N>ܙ)ФNemCn}{IZ@`?zk endstream endobj 62 0 obj << /Type /Page /Contents 67 0 R /Resources 66 0 R /MediaBox [0 0 612 792] /Parent 76 0 R /Annots [ 63 0 R 64 0 R 75 0 R 65 0 R ] >> endobj 63 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [136.637 204.057 378.769 215.917] /Subtype/Link/A<> >> endobj 64 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [354.289 192.102 478.476 203.962] /Subtype/Link/A<> >> endobj 75 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [132.772 180.146 270.495 192.007] /Subtype/Link/A<> >> endobj 65 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [280.568 156.236 475.716 168.097] /Subtype/Link/A<> >> endobj 68 0 obj << /D [62 0 R /XYZ 132.768 705.06 null] >> endobj 69 0 obj << /D [62 0 R /XYZ 133.768 667.198 null] >> endobj 2 0 obj << /D [62 0 R /XYZ 133.768 507.979 null] >> endobj 66 0 obj << /Font << /F50 70 0 R /F32 71 0 R /F57 72 0 R /F19 73 0 R /F63 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 80 0 obj << /Length 1861 /Filter /FlateDecode >> stream xYKFWP hLũ]vTN1e*bw>@!dӯgf}T$:̳byt0 XEQڏZ` .NWq0ᲅ_߮ޫrPeg$& $cQR& FiT%Q4! _"(.ojؠ-q2fEGC\qNQg8f-hD "1(i{eI+ilhAg5{ni Y-q>)K->,/<zN֢#֬ tp@ȶBg4a)Tӊ &Hnb!2/Q*f/)TY$@?-%^r` 'xLܙ$=ֿkX貖d\u >+T[9dZB< 6SܓsIvGA2M(|ZLu-TIѵ.d 1S2˦&51y`qi"טBg|L|]HQh8 PV '.wB0ŸY1#xlZNX{ø ՙxwkPb8 xn%[Hw|L`탸bviy@6$Cn+U#-^OD֚L}Fw3Rc܌-C䐐x¸bG<$L6./qƳ<#!OVy'0TĦXc(F q.P1H-"dY;58,LiQy?m# hk(5U؄ybnlM4RJ}pQ\{cgeV;RJj&j͗~>A ;%J<6G%AhqI6._gDvdDŹ p3%`HwݮuFzF VD9?s\8Xj\-E>XJݺ;pi2m%a&<⭇>ѾX ^b5nA9ˉw#Z::!Aa)>Xq\s>^ieѬDμ^w=2ƵL[Y\EK GP*j7 y1Q>LpCaFSu9* lW8sZ -iu=R^{˷n2SuM/OL?͎5yu3Qb^{_E?!99"f*ߒrH,o*5ir2Ҳ2BQ;{n_Z] endstream endobj 79 0 obj << /Type /Page /Contents 80 0 R /Resources 78 0 R /MediaBox [0 0 612 792] /Parent 76 0 R >> endobj 81 0 obj << /D [79 0 R /XYZ 132.768 705.06 null] >> endobj 6 0 obj << /D [79 0 R /XYZ 133.768 667.198 null] >> endobj 78 0 obj << /Font << /F57 72 0 R /F19 73 0 R /F67 82 0 R /F66 83 0 R >> /ProcSet [ /PDF /Text ] >> endobj 87 0 obj << /Length 690 /Filter /FlateDecode >> stream xڵUKo@WX\b ه^KEE\PrpHDgfvȳEE~H@#&B+_&ɔM/Be nT"Ou'JȔ5[؟F*,4@QLjh5$ -e헠BMV{, barPEu- D'Ɔ{&yDnO&nLX<`b~M!PH5edNZ EO#b9%Eb9>ހGsZ!h9SIM= Uq0:Ryr RŠwf1? ~yQl -qcV%Brth{UD>- 8Jvxjl#U)STEA,„pD+JgFL)jS$CItt aX[bp O8_ ,u9Ԥ&犢pel^7{7v~ZbJU(1N` k2e- _8Ox5)pS{`ٻi/3' ?YI'}b.տLEn@t%4>M{oS#gƝXLTCw{ endstream endobj 86 0 obj << /Type /Page /Contents 87 0 R /Resources 85 0 R /MediaBox [0 0 612 792] /Parent 76 0 R >> endobj 77 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 42 89 0 R] /Length 6672 /Filter /FlateDecode >> stream x {8xHՎ]vώU1?pħm$F~b˹B2fq#q ,K_Y6h%T˲$׽U\ǫǁ*ZU.\úq\5*tW+tEL8jsu9WG?*"\wY+ wߍل-k QBWqr5]>%JIJ}gku]KzW!+Еx%GWnꅛL2圏ۑl160] 2]W@W^(s?Е| rvf3\|Wj"BW+tWpWpWpWpWpWpWpWpWpWpWpWpWpWpWpWpWpWpWpWpU ] j \!6U+t5Ѧ*`pgU 0+}03 *`pgaٺ/G9ݹ3+"38qJ 0,|8x‹!XnGmq3 jt<&b;\i(\+tg%AWx9^π 媼r38q_I]v^4k"BWnuu) .eן'tgph1I-1y''x‹f9πg?Oe]FUxt[WSyGtvt&U++t<^iէU֭+πUi:' +t,l)N>7K<ǻ|D#]υ{Z,WbOLW#;qbGӎ[y}PcVWMxnj]]NrU`g3ԣ|WYKMn3\/IXe=ۧ 㢦ؾnd#֝uS╥g DZGRʚ/j _GU3;&kvr/]|8+ܹ0>r]yU-]3륫Z+rf[ slPX}g a=L\u|;ar 7AyQ);a^T"o(w~xES+[@SU+KπChS k▞*yΝs(\6ZA+CFW+ȝ=peڙWtv+SV3=3;{W] vu\xte᪗gPSRОz+YO2gegV]3]Jnj3̭Ѡv:jQU8tg=WEWsmֆ3+ng= uWpWm4pË2WX,એgO!ytjZ4ijUX_v ]{ 5t kL3,eW_hpUΩ.0%W̓7>Gv t~5W0WtJZY*˖s{l"Ϡ_*s~OgL|?` [~S/bj:3չ:+rQ=?(M44s%_j@}J>SgݿHB]7ݲza tUJ(R[s[RVpkhSe0r=K~Y%)%^ a_$+tٔ㍲|楻#9EuHY6#4u䔕i\r>h,WtZEūsR;K4]%u8Ers3T5+uʝJ:]M⯜yjX:ͻsO>h.!|Zv6טL=м<&cxD3|0s2@/{l=Y PH*ǝ˖J:W!ҷS7Vyƺ2] tei\saMWY0a_Wpmnmfƺ 㟫fYfZ]9W>x:\\My!*ڰW3-g^MմN˓g0SFj:]T*]Y?-Wj*N쯬<5r5Y>h9` UDmKPsWxj{@́{jٗѷ㸙 "Ɛpo]:^+aegծc.O՞5<5>g}pEXUσ> 3,,AWyxƒEɶv] <2/g@Wxtg@WpWpWpWpWKJ_1 ՠF**ʆ}WNh/j4K/uV僚i3L_VREK5q+RpZIdl?,RWmX]W 6a>8+t5ˏ(tu*|psռ+zy|yQ}8ճٕ" Sh_*\+hy3;s23u*26uȡfJ~|Q>hS$ɥ/ֵ Ɖ]bFW̋2)*jڡ=5,eSs?`StodJz]ͣѩ Ѡnb@Y2Y\v~ qq% 箟VU>]Wb`g\肜kL6sjr1w6XT>T3&SՙZuU:vX_%:u+14֗Q(h`d8"AI0e>g>(֊ZS{SAx ҷ혿Q;֞,2}(v18)1qUz}2֐;lorU誊A <V47ZZkU9ʒl aǡU!Ǻ٣ЕŋZ@ Z83 ]9q%DZte"rgt4j&%:<|4 W^ԩ/tʪִw@Ws_܏tuo{ |B~LlxcVKy:t xl 닙1E>(c[Kѷc$y䯘_m:zU3aGOʾW] )x6BW bwqBWq;+t5HX{5~<"^~8!pSގn^Ls? ] ~}W$G7$G7|P3^]+Z0WIYS|]9UGA4}ǯЧEWR]w(}'C Eg+]mAG/?>/&U8TmUESuȮG{9N; şʿ%r6zz;w<"j~kxZ% j\ߤN%W w~w凓lWK*^sW\粒S WJ,sT|l:QoXkWb!;\-.ǒG1ދ*$K]Ս ccUJ+?W*o1\VvCrfPu3{Ac}px䣅ƫvo S!&j\3a hyǕ \JZue> BuRdsh՛X<(/۟ ]5x'5]z~_6 ˒ꙿ*MxpVG{o4-QZ~kȻbJMj] ~r=?R3&G^"6Txqzˣh3LX3(Fs uݍ4Nc%7ݍ4S)-'-o慿_/˃רiq5U͠iU͍n~⥋([lLR|izs0{/}? Bg endstream endobj 89 0 obj << /Length 76 /Filter /FlateDecode >> stream xQQAHiaƏ `" ACs~F$ZSԄ {+!fg^tn>O> endstream endobj 88 0 obj << /D [86 0 R /XYZ 132.768 705.06 null] >> endobj 85 0 obj << /Font << /F19 73 0 R /F67 82 0 R /F66 83 0 R >> /XObject << /Im1 77 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 92 0 obj << /Length 1246 /Filter /FlateDecode >> stream xڵW[oF~[jRw۬RUV˪Fq=1Reg9l5J 5\Qd^ngM$R#o8{FٯQ"ַr}Gݽy*΂TEs,y,vkn5<oln"oWYP6bWc/L ,ȋ,H/>Z O 8D ꅯ0>-kje^w`ֺUK aʁue 0cP~Sа&.09Ɯ%JC0ZDZ'tׄkkXp^ R\XсZ :B0"JyE'c  ra%{ <|\BKY|#4Ե:n+ΊT֒{E"Bq]2mM@ zۂ@xe,0>3t,䉘z ?։y y(%[`W ^ NF˥%Uu>- dËp=Ek"$ e k[ Y(?Z $Qjrwv|"\ںݵS9ѩSS!j~*TLheE.mYsiq.:T`j7tx>rhNmCIMfIҸΕH{?>/K8IH'Sd$Zy!ְBIH,R:rSQk7iFtX&m΃ F* ڈ R[w&װ@]DQn6"jdL?ViTJ ȿ ƙd\ہEPO4J* 0'uCa$eCX}% T( (u{YCߡa/&7tDxL·£'c_N&{^ܨ 8IOyyףO)y1!+ QW(ez O@_Ev#d]|gF endstream endobj 91 0 obj << /Type /Page /Contents 92 0 R /Resources 90 0 R /MediaBox [0 0 612 792] /Parent 76 0 R >> endobj 84 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 40 94 0 R] /Length 5824 /Filter /FlateDecode >> stream x흋z⼵6Ӛ ={&|WXK=Ʉz֧e!B!B!Bb*IMRyrCV|~B!jHh _q|ʸ A+@oGvoGߎ|f^!gߎB(<ڿ<$+$"Ԛ;b0E, nړVBB! ȑqg?BB!B!|yyyܤ.Õ޾+s A8\!qTX,$ֿ)!qbBEiYQ]i=,΀$S)0PE+̦+bPHB!*b:z$) h("^!bE+:X E+*GcF U\jWp%UMT1 5zUt1 1_M( ^E,7Jq\MD4υ:a?dxuI.!躰k uPpWU+`}nz W+aT+ƃrjkWkx0ypzȢ~\X,B..֥\MϠ9D;B +>4(Ax`ˁSr*\8Ak*pN +_n^٧P@ W,B.<.!cB+Wp_!ƃ Hc`XwY \pWp \Y؂+"ryJLpWp+~<Wȅł+W(XN[=k է~;dZ][W5Y)\ %;X]YXW[7@/ Wr +:WpnǃOc\,B.,ָ>/9+\ۑ4XOYÐp8`PpG&PoJ+BKO =N=peΐW\>$ Xꢚ+ƃL8.:J+UpW=$yW;wWȅs+"N`m>\"Qy}EBjO犺(2]$^5EpJ]TE]reꢖ*z+di>WڸdB#u XnJ_wXuD:zWG\@ Y+o Wȅ pSi ^!eN+$Trgp#橳j'CV 1{폇VGàuڶOzj E+̛fWEU@\9.C+M.z9ŗW|ʼBpE㻗^x\ۿkyUhi[<]W!WUPiu[ \!iu;|aR8UϪ)lv/UУAFѪ,\Wȁi<VErkpD,+d9콏p&v0y5}0 ;^_VpZ\ժ.\M` X=S dU>gRz=| -Sςդn!y00U> V: QWU9~U*JvW] ,┗Od<$vۋ•U1pe<TqSnƃpEWpEr+5, _}W[`b<8W)fB̓qVȔq<w/g1d_"^1O/1O?AU`XQjBozs^X 0M`K*\1}\_ +K:n8/_%dQƃm\{YmU fH*j6C\EIEo f8W}*B&E@|ї_D&^e+|g2_􉭂 Ah\EY򥃓\W*/;Ib\Iv^>{oq۪ z&!^xefQ%ulf"\re&Ro+ASN[v]T*`®tpI%ղ/ WpWpWu® \yع®;~bj]:vE[PS;PmpzHWpu㦉Tylx]Wp; :CVV\?aqNkBfW*sdWqpx0sjn|Y\}0|0 WJ][ Wͼ@pWaEEWBt.0Г񠮋7?WW ,pqq|=\! EWcj[u?rc=W ,\\ Yui})x%rE>>:W'$5A3\խA\!.l u^WЄ+Az\-~W 9. WWH4JLCf<W,8qY:\\_ѱpxJesWes>Eu+W)\!t+`x_Q*2Lϼ Wo_~(0:CJT hEQ8jƺ(a*LuQlU\vYpWp56 ε6\_O9WJdb7 ~WP,Q* ᪢W"'/%(B \A_}w  W֣Aƃp5e)xD+EIpjPrW/ Wv^9uUd\9[Z]x0&wTR\[lQ*RjWer޹ ryj};\E:tyWs䲫W`Wr\4v Էh`==ΠYIOj P=_U2`īxuڶ⚾-\]bW֥rU6? gAn:!{!4ABjW^$/ ]¾#5ZGַKGZ2ƘIbQț^ 2 %Obm}u6UV5vڹb̛Q\ 4UT72oA:mu4W%te5TyyW)Дy0!{u&FUЃV^onKګMvlǍz+Mo۹bD[C릊MjkzN3ZyK[Rw_b}m;_^~|4WMjw!LFQ%˶:,2#dצ3;UsŘQeݭUSS@-BXYxʘ.\ ~!Wqv"\e&JpuЌɕwCH\eASgȃ*TV-Q<(r{\]4oel۹bD!LGj߮oKWIպ+nj.Zڵ"u2w3ʺ\p%t]̓^"uQShJvju[\]sx&/dL[yse[uyےɊy2Eb y2,` B b By2!Ĵ~\%(DI,B !|;·#B5\b?dBQ¤Y"fB!u67d~;R0COQeyu]Q[a񋇝̈Zؽ~>. _wZHAgwBq y+}O#pp5H;;+i݉{#*}UpUyi*:_C=͛lS͏Զ?j@2{_׷dY7տkr[0|񩓤mMuBsuHF]Qriچ•5׃UT}6i>y_R]o<[1pރ7BZk"gojaC+}M_TǦe }BZՆm˷}\ʻ+߾Nֻx Zoθu&K>q֭T}Hse5]ߐ5*MTI+iao .=9~AvurLJyr5W .qIYAqu݈y.WgaیīnlNQO[j^\v(^fO+괪씺)^³W:ބxM ~]tGZ~q.͸0W6w ]\רMukre˹ף.W;(Q6^!ץ.j6ΪWd@@Mm+}Gr2S,ͻM݌\;lν]qu]*J<,ŨhsR^z88}%ӶiG]C 2߉o~Ux ѧQ> stream x 0 Ѕ 39YXhvG$D>}MJ0iʂMU#I/]ڹţ> endstream endobj 93 0 obj << /D [91 0 R /XYZ 132.768 705.06 null] >> endobj 10 0 obj << /D [91 0 R /XYZ 133.768 363.334 null] >> endobj 90 0 obj << /Font << /F19 73 0 R /F57 72 0 R /F67 82 0 R /F66 83 0 R >> /XObject << /Im2 84 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 98 0 obj << /Length 605 /Filter /FlateDecode >> stream xڝV[o0~ϯ-=KDaC TPz~>qⴉ(}璤:x歴NRٚXT4+S#l;|K{>~+7.^S`%MpB` )-Ao6D(:6$' T1j{7GϒHꨊ:B:uJg !& DmA5Ŕ;`7HeE~D[p5sUx60)}x>L[Lp3!:V[s2뵎ǰJ0%ɰ4C4NPA֏EP4x=dad `-QN+ˌVÙ`/vsOZS1XEF.6<j,wc%`uZU(x/!!Ǥ<V1[*A3Ƭ긞5="1-r EfuwU-qԱ(d'7͏`#L4(5%CX]4Uxr"o9I~U*kt(qK+o﷊WW˰4xQ_AbIjπ&j endstream endobj 97 0 obj << /Type /Page /Contents 98 0 R /Resources 96 0 R /MediaBox [0 0 612 792] /Parent 76 0 R >> endobj 95 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 63 100 0 R] /Length 12046 /Filter /FlateDecode >> stream x mݖ쵣(J\Rg'ZTGW飊 fUx˳3]]@P( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP(˝upA(B"WrE!W\+ +rE\Q"WB(j\#EJܼ4s:`aqABI;܎<6W J!4$t3DѹHlzn0!p߻հj:|l\cw{+.x^³̹ _,4XaIEj~-զn2J 6 5SnaCqu{]14Q恮]=,1eX5 \ au!uGv0~J5W]zn0-aWWw~7fֱI);֏;oVغsh\bk̕q1eB 32\T7vH’ksR@rsʕ ଻|u*)T쨯Sxh#gūpkhf {-RV8Pxl}eGѦ~\ŧAfޛ]"S8e Is>mfyQƟu@;h~Ʒ#ʗc.h6%Qc`KReFcp(%g4R?<܀L纷Ujbya!{j*e+>0{ړg<-RR͌ģOJЂ\ r,r6bAamѓa̭8XP<1? ڢ+*2d/#^+J[іxdݨ9+vHoqGKabP+ cLoզm,h[κHGG#Z".39Zq  ks vŒYr!7Z6eq ;l vW;U[p/sT+Bu D 6]Unqep: {MW2ٍVB (>ٹ2xU|) SpKћ+h\/NYrJS%#K.ޚ+nW2w+ ݣs`eEApG͆cd+ !0̬vR*uaj 2;FqehTs܃\(}X2Ua+#4zWqwCV Vs+˴ 8 8dИp,$^냒+9wO:; 2?asq\H4g/H\Dp97\(OM(E/C_e<* +0O UQַC{b|ЇfIi)M AݘLЩ-тA=-args5 G11WjzAG:i U.7'oJxEzKʭI PL|f9*q% 5򾈇6u@kxSoh@St"Ŵ ͑Pҡ;;[sXu ]rs-N-MΚps.D,7~eUZ=@`Ǒ8Sd){ VgU( ęJhN/ ((:Ev5`EZ*H\2*9`U`w{5Wݯ`BB[F'Y~~*!o""PXjaTAC G*Zu\uIIKJTA(XTB,-$Ga)VyoO: c@e%EwIgK ),{9%sخlRWW 97P YkLPu]&*,2ͫ|S[Ѹ3~*V6Xο,ZWB@S\BJfE+YZ)3tvo+UrhOpQiC pEӖkiaԂ*h@id hР|\=xSs±\Z9qVhgxC*W0ac5!W/4=U a'JTMꡈdJ!0+}qۏooS%t3kwo@K2# UG_ ZUoxRKyj鴒;N}EAIVw.?|!߿jmؤE> 'i< %D$_U3jikn_]'K/ꭚHDwҪ 77rtc8L_˞K憐rvw[N,@%7Yef~@woHWwݽӲAGf4bdL๖8W_߾9Ǯ֢ iDn׽n>uԉ2ⰁD8DBbn%o{]U+QK ڔύP-m5 8X(m%EeFqPCI\c>/T. 9&PZ_eaզGkWUKm*b7dV8Aw\Y 剽^< MfZڭE^lyuiz:hÚװWi:Aa"7C aOM8nlrh%WP =aY`.=_ٹOvj>F~]2Ch;YK2 \Rz" ]I eT24"B8gQ('+k5Z㖇 >"Y쿒x\~}W0oVq]|d23;D ~WX ]797_1A\93{tʭ zuW|(䪑+?ݮF$LjT'vJ(y,HDN"MUY^ Nڠ< 3K"=u8u}+![LFpL|G*jW\קOG濾 *,EW@ RIo6m))£Pyoz%R ۩D'JBF&1O\N]/GYXv`{8KƺSQ4Ml+@%W_+W/~t / ,/+lL][Umr鷿3_ӧ?8W}r\rO -Z#WtX=WY}ͯoo_~.?p_h!=Ք2D`{`ȝ*Rˊ\|n˿yj 7Huz߃ckeU>_/PVO+mRZM]Mk3Xr-NϞݫONZ=L;AeFw.\x͟}"r6-ijud%Í:4tV謮 17VM&&Lũr\E٦ \Ӟ٤BD U?IBD_BX퍌8֫)Q\EYPeoxU\RΒ 痤{tDd}Y6ʹt1ZrNRu.|U5X~)P$tK:2ՆОj}4.(KĚhU4PBIJC/; :/KUE΂m [%T;j@>պWBU_]D]9Vnvtf (W5\Ja}>FU)K G̠yZW"1o^Vη!B,/]f[k%d r<y11Q1ֲ#Vc:6w ΁:eCsB+ʤ|-݇ 5,PX qs-K `V#8r=BI/ϣj NDFcM%+1H2DJpe9WVy$Wr=+"*!9O脲I7J=4F"k}EP?uۂ 7'E eAb or0j@•2bׂliOLwN}w2x֨}+Zeo-<"VP q/]j^wbUFY@ CaG }2P~`˹2ȸXiMOrlm*ql}u p/Mڬtk)iV^tO&˕&.sr0zwth#pp UDjvUd>?/HλA_q@"FdRƻ @teZ (u3UOrt*D k Y!> Oo"+M'b*+U^X[f bڵ_*szlBY/F-.\ȉ(,QX4m>UPWz"=!Q+(RڑAPox-z1J Rb0Yr2׮pڬ6&k=BΗ+JrPavwFa>WYԼN$BFxGE?GQBVX b_ z/p{< dYn:uF_+G",+e 5 #ށwA+*\^dX">_dQ UGcn&w#n*p!5;( kPv õ'jHP uаJT6ÿ4Jq :V0PB׃U8U!A(7 ͓a;3@7U),ju )y^_9t'tЀUq_^.Abi@ґ2B9 V߁%%: /Ε\vTCfrڹ(WM÷?;Xv@ :2B\eFB$t!a ƒttNtokaKr`O,"C 9k'KcEDֺ+?H18X( g= R_Ấ 䪩tcWL ځ[iw\}~t*Yha"C{u`,:+L}5ʼn5e:),rUI 8N0`UvBdKpKXiD&S0v$] A-UΙ :+Qz 2D_rUT#;'@t=0&`>W`\'Vv`Ǡl@Xl-қ޷, \j93`Aߎ:]\8W]zCWșgY_uJLП>u=et"٨ٛ/T:h3^ꌕ̎)Յ:Ad8?ªseo_ӹ2?W&P\m@y\1wԼUnG!sKp.ӊ%Xv_dz@zO =rĻtuBI4S}\(\`e { =e$sp 0\ Wbv PcaL=puƕupzo *G)*lQeZȳ9o˄alm94TCaqlDA,ZrBƪYIwWG+/UO~i䡘kО ʽ[oj V{$F#X"4KtdyաG"ۃ+ߨX|Ɛ}^/?9WMؙBw^p!G~$*4sYS=su\i- n?k5W!bxӛ𯾾rX ~p5PCM\Fb㡗w˛JwW\}F_J6~6m1)g]SxgyPL FU2Xx Al%"`!+Q_ 4UL5/<NFߟ[:{cJջƯ^ /AaCu-q"^@$8w6*."juH^2+5OKz2Hb(VW)y }u:m}eBRK r^;WN+Bw#&.)U_5=:ɚ&*1ۇ;}Դ1p6inבT#(*iBbHǸYWzmM.Czr+(ڗ3k=yRڒ+O KW8i8bpTO|- `?ܗX᪹Z[+41d}ZlU8/Tl b-&BZϣ̦m*sA!U~s&7Ss`m@Cɀ\E_߾ 5#hb2>ԹÐCG.>ce_pWj;~uޡW`1c9X\vs"R\^'_߾0w w>UTa*h#%:U |YLķӇՇ/ v6F7WJXs#ᶳ>X9+*t.#N8ndzi:諯:X25ڪӅ5.]9CR\E,U伋Bfe-{#,^/R~{Wb?v\eXZ Aucqwn%Tn'qur6pnUr `I+3+{jVQkVŰ p j*5VnղD3nXꦯWAT'(W9-,Y{g2~Ҟa[3X;j BH|}{=.'ϣ9:p-Ww1O{G\BJ-gsS}V߿0b O\!&Y+B|gRWI_9.5s(]([g>XǮ:+U\,d5keWʠY>-5f<%출7]au7p_q)/L@:Hzm- ;Xʬ;NLae rӱ ;`-UW\]ʎ - mKNL  rT~| X@ľ/hʯ72gwWX][\5LMk&iKE8+=pOO͗_πl W레 "zWWSUKø |02! 5v+_E 3'&ʤP>n\}m6!2%DO$- WU9x6uy\tJKk$i9 fq6^0rk$Ե6R+{y$C? uj 7- ]D1vzDwx&eslz,XZ;z X\vpuBm+`s̐8 ~G:!~e!#-9\ J0WF DoʸB v3L]n1%tgIlN7 q?W۾m\u w\ى (*2UR׾[&ôEJ[3$\-3W=95ckGγ9#ʺt6Np{$mq5@Å`EޢjU-e}SdR54c8pwAhWEyZ02 KݯT8Y=YYs4QsL |O=pUW\) 4rhoWbY愅.aYvvҬaN9Ie!wN\Uq\ʐ.Z̝VU'Wp#M~f\U$?ps+7en\aXur&C62\;Q綃Hͦr vk"3BU"*Nח6jT!-p $'!o : -*Ϧ᪸am"mLV%gϡr~p\`AUmS$X{7ieT2*rJ].…%&TAWj@G?٫wW ^+cp?\a [?iq%Y[q(l1*iWUk*r_z*9dF-ybmߙ+x\m)ea;͕Y\EqJٯp%#\T#ݭ%cUӿr%Ř1\!lGυDťUwЇ|H N0iK4;8fW ʹ*tjV W;N[чʍWa%:!`~v؍P*F=cP;?ӣp톺aJ10BNxSW#;؂\& Xr#udi,gCc:W =^\;UEDP} 3XJ諡j}=;'k#p5kF\ mt$ T _,aEƸW*|=:[/@2vTVLU&EbM.{g⪟-T;v6󓫞\al:_ ԄrujƊ\ˁ +TQѣ X@xN%f%` `N]^h9|eAAnVЅʴ{A%Xmu_,r5Y4wYr֒C\z'tJjiɺ$( W5X֩WvSr5m^d9S%W\ͫ - +qu3ah;\4d&:۞@#@]h r-vElhWdeټr We\)S&Y ˱qup?l\r)b"p{<ŤSQQrU]qnq$팋f\:<C:se(I;O\, r?`Ŏ\ʘJNTO +][IrEީߋĽU_\ko/;jT+ w>ͮ"VՐgBӫUqd*$=_߾9` 1'Vpqc+&qۧ7ܧ/w.?|a_Wfc׷`@[jU=Hs \0h6ߎ]a5sŘWygq.<"WOeā\+lՕs"rŔ՗_C s>Ќ۟|P3+jɸz׋W&5k/h}ak W$b5W6C_ U+W_ &a"XC@8r!W|| 9$HB+F@Y"W|>q\=pl'$\5€;V\ 1\ (z{UطM>bGF\m`g"R H=Z|WxN㒙.~KUj]ujwcX!x9K#~E.ְˉ,m&rVS`?u"h'; +z d@*@#:Jv Jصhy!u7y+Y~jY՞a4vnq\JaGj\N6eՠX^o%XjT&M5(l#q5p[xנW!/9g\ C1MsEf],0Z1($BKRwa~cy  Gf 8>⨼KkМӕ:WO3,/ l|*QXEw; ՇEN-B?n훨))6"WY Wˎqq5`h+ ?!מ sBfcMzkb|\yiEZ/$^\Q"WB(\+rE!WrE.c+5+ "W\Q\+rE(B+ +rE!WhY} hQ+rE"\+rE W\+rE( BP( BP( BP( Bi/߯o_v~K^*;7;mw#_~rpwϿ{]xϻbUsTۉyFߖ}>5]Tv>Mj;q==\˿G/}PqTӉyJ.o=7/wߔTztyoRsTy/AGןwuNL{r{n{;je7\W=1Mayxklg[N6}Yƫ_*=}UWsW{tg>okmw7*\] >GJ6W>3Wky-R(!>B_Q(9Ey/tQRڬϿx!XSZxHo:>"VrH ;a}\Y^l]r BP( BP( BP( BP( BP( BP(L endstream endobj 100 0 obj << /Length 121 /Filter /FlateDecode >> stream xMQA"Ckckp~mMsà ) q6CZp2A-F+iӝd> endobj 96 0 obj << /Font << /F67 82 0 R /F63 74 0 R /F66 83 0 R /F19 73 0 R >> /XObject << /Im3 95 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 104 0 obj << /Length 936 /Filter /FlateDecode >> stream xWMo0 W6U}Yt: vӢicHr&]@LQ{|OChdN as_@uS Hq *úێ?AOL>܃`vV 5(Iey7Q֛{a~Iہ"IBǟq;y-\c9ۻKdv;M9'E -zղ- A-Z…zm`Z"=X.ӼzaCXytWR=9 Q_ZME 1L}y`ª``**4~<<N49 ֨\{L`U%țNPt|p:%R|mvq31Ɗ|Ƒ߉N`8ܰY;wCSBz*D-lΙ`\x@)p0 ψ[{7f\6d(+gQqӵRכd6P"-#? â4Fg'TEn̓mUT*ߛՂ34Be9C #2?bA'OtQls%lteͫUJ[ׯ+Pѧ\FٕQ}71θ̒`JKhzw0n >!l⦃FQQ HQq[ endstream endobj 103 0 obj << /Type /Page /Contents 104 0 R /Resources 102 0 R /MediaBox [0 0 612 792] /Parent 76 0 R >> endobj 101 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 29 106 0 R] /Length 4167 /Filter /FlateDecode >> stream x WHF"d,ڋc7W !-G3RK!&%""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""(x\|ppEpE"\ W"\p+\W.}Irv2+zÕ&b}zn HGWM4p+gߕ*pU"D}tՅpԢ N|"S80U>5]a*?]aʳ-QWrNKjZЊ TBd\JJ+P5<Ȋ U^hEr*IY]JoWRte9v*aX~]ʯ,]WҖat+uX]q}s+yX]JCW V:\*,o`KW3\u |UX`;W,5Xj WTb`yr*3c`ኂ2B)qR8K^`qP W+p+! VW+\ W+pp+p+p+v9s7~oUVWGwUFW/v?q|N\ qIY1p+ݼt,\Aj6v"MWpuyqy|?~9j\ %pqLVT\9XX9utX[di2Xi2WGV`} WZ\UV`2X} ʝv Wzse2-W W>e+EV.`)2Xy_b+X•(#,\i*+c\KU+\ipu+cu)jKUkW W1]5AUJ ]mq5\JՀ\,upUUU{ !FKܕʥ+v``)jq!<]mqu+Õ?Wg*ʯ\ ̕2uW W^]%\ Wm/x*ʧ W]%\ƕʑ+ *ʗY W2\yqu>+J&2\peq\U WU-Xz*ʑ+Orʄ]ۄ]Y0WIڕX᪨+(\qeXzyE`Uqu!+W Cê*t7ީz# W\%EWvʑ2-WvrAV WUuwJjo\yreB9axC *rrr WE`}[2 ?o=Lq3u J&*jcwveUE'ڷ^g Wgr{݉v8y5"ZyU~^UU1$VNkQL{L*j&=XaĴ pՄ2F/ϯV8W=7m]U`WESW3pUwn\'2^#vǝa°j)'x\On1;=gjU3Wg,FWdBvBE̫Kw\ecUd js!4e{-Ww~}DU~0ЅPdy5ՁUՕe0ׅb\pc`ſ ʹJj=UU\VG_ty5+U}?+)ݙ>EJB`Y~VN/U FUAW۲p˖5xB\28$3ʹ*ʱr᪄+ aYVn/b\%\8\ ,t]]^]JBr:坕D\]Ju}\z` Zz%t?]9JԵҰW W]pU˖B(pv\a)•J ĸwҽ.͠JUoKw`X*JUW+,E; 3-UzXBB΢WJݮpXJ(:9Zp%2\r(Xr]*%`գks=UÁ *,,E;X⸊* W `eUl\s *X-TY5pPU4W` \%\9pU <¹Ī W>bՃUUqUqXCU⺒ULWʰjZg+_+\u"+\\UUqUiXeURUUXWzjZ`,\*•wXFV5UU]:^G֠0j**骪ZbUXSe uUcUMXSUUzU¡5WUq\wUYuYJaDzzokZqՅ:",:֢v5Y c#]ꢽ W+/UfU?.+UUV\mn9ZfUՋO' V\=X\V~êΪVnU,y]; UVNHj6v>Hj`k XYZ_X.-_b6AW˺abUo|.t\Wei}Y#\શ>^:W+\ W+p+ Wp+\pE:|Y ^`lVpVpVpY 8 [[vfv[_M}JHe57KOsNƖfWmGl'jOq|jpVm}%v$At*_}I=|cVe+ɶ#YJTͷcyr*~ևC8k+ɷy[ɰyv$Auja?bW4|<,QmfVCrP2a;o7uUrP2Ɩ{cqogm(:fؑeGfn>ӌ^Mۛly[v$Asw][LexR<ώd9(OP‡scG?͵#9JTJiGmG9NDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD$&>+"\Q1W> stream xAA ¢ AY pG%,[Y&O#"d;f:nmq}C*9 endstream endobj 105 0 obj << /D [103 0 R /XYZ 132.768 705.06 null] >> endobj 14 0 obj << /D [103 0 R /XYZ 133.768 667.198 null] >> endobj 102 0 obj << /Font << /F57 72 0 R /F19 73 0 R /F67 82 0 R /F63 74 0 R /F66 83 0 R >> /XObject << /Im4 101 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 110 0 obj << /Length 1385 /Filter /FlateDecode >> stream xڽXmo6_*1C%a/5uC"ˎ7,;n;V[ReͭßhtS t8dU. plvفtK,a_E)<|m];jVԑٲ*ޚOʚ!5aj#AF'ِsTʠo )}ʻ2Gڳx+~_{Υ2n ;ݔsIwX"4sD6癶!`Z0u#t.B7%6&/DT[TZ10 `8iɗI1zIj7VTwW7;ҵC[ T @ :E oY@ J+x' "JLE-=Y0jj{Lxo!"LV"~xsښoQHܖ8HHn)G yE ؛#̮^3 3/"fQ9j@ V:PJe|M\x$Ĩ[*"'_oӬ铈Sx>44ezawq>@]̴})]X>[XL+hB[ؖxQβd~$S z`I%I;OzDy1Ṳъ*Lix4a}ڗ'Β:іi'P՟BRNOUMOD-Yvs8w\/'?ϲ艺p opwT?P)/9 Xa!~篠,b7[B WXUz@7}=x^l')_mD-xP&g$Les2O0Y{'oh"cQ,b3{´Ա2,)6q}=ڙ;{?I.Hi3qh} endstream endobj 109 0 obj << /Type /Page /Contents 110 0 R /Resources 108 0 R /MediaBox [0 0 612 792] /Parent 112 0 R >> endobj 107 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 36 113 0 R] /Length 11947 /Filter /FlateDecode >> stream x흋8n)wvcN6] $;)Q笷T ` BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP'\v⊯+ "W\Q\+rE(B"WrE!W\+ s'+brҜȎFʂƍwxGynB4hgA #~r8VÒW]H,.=q;(s`%'YZM*elj)ѧ Sqx]14Q恮򑮞t2v< WR!:FqwZfم1b4 NwΏ`+K3Y6Gڝ|+eؚ3s 1jLqcFƺ\ucHgJD;W(%kH(7g\yκW7hBʎJ܇<6rfZ^ZXC58te hs+FgFs%OP75(Ḑ88e`f1h/<mfyQƟuB;h~Ʒ#ʗc.h6%Qs`%e218Nʒw3Hڎ܀L纷Ujbya!ϗD'xk ?ث;m f #Ҹ'tOR !ӞĔ=oH%JN+TKev&"|@Q[ 22o?}/qAZ$3qMwh[κGm(Z".3E{ct oBjaj0ccLݐ naJ8ߝ^Rjg0*p eچGDHSȲf W;a8W]'nndϊWFZ:N@1/gʸ{2U Th^\ABk)+C"\YTҠە̝Jqh'"Xv+ t Oi8#fCұr ԕ|FlcGfVJhe\)aj-8e'_w+ ۡQqr`aEx. +_+Ke ``5Ǹ2NL8 RK0:S*ppWe >hse])WGUv[D'0d9w:ʕHsfi0Qm0'\w>nu&2]`;J{z ̡ǣBdz;P`5!L i4C5 p<:՞ܲ-Dٮ&wCAg&\5./6 .rr=a`w"~~Yy ݾ#-LZ2 TFVq ): >~5-˥sog2[R)W kq y_e*M&;lWV4Z7fr/c;~|[Mmn&b`e6({@f$C}3 {pA oWj)oU_-VRcBҩ9(6iʿWVUxDd0pă *ҡc?>t{@[8-c ka{z&'ݿM \5]NײgRYQWnˉMV _R9`pZ_dx$!mFJ.? lFɊIjx 7m~jัi⢕\A 2V +;1S˽#`ݯk]]bm'kIq6W0\+PJO!r ՞z5LFd6T7cY2#I~JFbCOH>qV.?Wv?+7Qn%_!̌N.+l\٥WXCtpͮW/p՘ D=:VXM}^$U!F`?rȕnWc%XvKOPY̑>"~!vGmmPx 3%KAY:Mb%X}u+!ۚ乍*ToIw VLVUW*@(RIo6񴭦)£Pyoj_Bn"PC:uU@d"B]d4fU.WYܥ( +b*d@u4R\|ep0, Dk \MeGɖ%]/!@?b;rULsq^ +qpZ\y +59%!{Y h+gh3B' '"}JZZJU ѱZ>`ݢb$P4aTvU4 @Zg*#49hEcW2 V=߹lrUb}jл]D󻈺r(& WB*q)r,'*7P4r>jGY>ɄM4gXK^:r*`)8\Dϛպ(]N{ŪkJ6PVZmxxkDuT&HbIJ#Vc:6w ΉZFh 5 7K+ltF+xְ^M]GT\ qs-K UsAV#8VV@% ^GpemțJ? W0#]+pVy$Wr=+"*!ʜ'tB٤?c#õ"w`mIlQEYBxv?g"pkliOLwN}w2x֨}+Z%j<"VP pűWit.gs{P/m;1Ǫ#, e㡰3r>+̠/.Xc9W ;ZM%έ.@u`-8"-*ҋirxKj\g"ݯ!HpG&!`*o \k*2їS$Uݠooq@"ʤBwE} y-` ˴pPXg >@qҢ{qa@ :Oaww_0DV x~{e/Һ"Zq"\ت}7fgVЮR&kcz1V…² ƔܖQZ_% p~\=\B'VJ;TpU}H]\,Yl+Y'H dɽ^n53WhڰF9߮(UB!wMXiJ_eJpMV3t•(^3<+Wh D :QnĔ}npDWh.KJ<ˋd|mqOz`)Wil+2U-|Fg!+jњF w-a}4OaB{7b\!prX.$xB)F[v^ar!BR3U@*FdmAD:W+^`!A* h$}5B q`u31C-c.A0%+g 87 ݫV%T, H:R&\!AXRX⩸jè8\kЮ~LW3}4|dzU+m /!*3"#+<*4}yUW)s0qGN$ {sC=' L:c%ٱ=P( l_'e\k:W\ˢz X( @8pW?U@_3. \J[}z})eZkAE3ah)g +7HKWW9+Dʠ g2+m S-#yS*]fP5l^:Wa\^wr׫L`qUqgRc-ٜٷzkW^ W;CIe?jVn'[ -\A Ԓx6VuO&Uo RXJ@N"w6B{.*>؊X- `ИΕlL%FWoT,>c>o|yy?>`y&C(a+aJKB zJѤ $\|T\]Wcrڿw{i+g0q>]!pW\92b3!rܯ]TWWgM\Fb㡗w˛JwW\}F_nկL7DБ mȞ*d*,iw|çW^i 5yϕu=jsm׉+߂HkB\+n>e V SBg9G4|9IqWa6\,E \.N| '2׊M\mjx {k,-Ԏn2 ]]e\Q۠vNhM E{ʄrb.0&s z[DB6VQ_ 4UL5^Nrm-½18ÛlgP]i:BT3@ۼZB7uJeZ /K8 Jnde9A/1OKz2Hb(V׮SDrR])JBR7K r^;WN+Bw#&.)U_5=5M0XUbw/!iuc:)lV+=בZdxlr4BbHǸW{&ChVsVrvz>"O߮bv}t;:UIS,vUJuhl>s3H=x SN݅jZnMV4[՟WbX-7?~,XP>J\qpцm*ݛp?TrrU^UNÓ4E|Pk#h\ijaN1QX+pWj3=Cv]̠(9r%r6 fL}G4kgo]*ZN2u×KqFFO-!+D^[v vȺn/e(C&l>Zzw2:+YNu׷+`cvE4n6IavIJ'd+ʒҏ%7qu`wwq/MYtIurG"%կl\e*{0$ȕ•+hDYr&}bhYt=P>XǮ:+U\,d5־ ǯʠY,5f<%=?nػ:WaWFSR&`:Hzm- ;Xʬ;NLae`#cv'.ZN՛ºAQAe!-raP<:}~.J\3)`e˪bRʋF(*9{~ sƱү]p05 s ,D{Xau뻿^ޛWG5UkA& ]u\iLUoo*X^0;AL~vΜMI|q^Wxbn>XΆ>H R'\U}Lԁƕ־IV2(1k@l\0r{AVZ)ەMW>2$rʇ2*5/=S2Tn /()D pHn$zP)u5]m7 ЯU,RupQ7Y(ʐ+'8McO nL\aF6@wjtpzqUwWAE) z`a4V*q_ q*ё,Ru1jR336Q~OP^Y֧s Xq _\eKL}ě\U?[l/32v6󓫞\al:_ ԄsuiƊ\ٗV(GK#WJ `.]^h9|eAAnVЅʴ{A%Xmu_,r5Y4wYr֒C\zf:U5d=zqf.-ܜq\m"p-j^uՍXh\\ CMgqn{CvMD*hx-^s,`3י,~d鸼r We\Ň\.KUY ˱qupu<l,/՞SU$W{ >+W%H]'ۻ'W%\a2,*G2θhELS%ݫ08 ̕9c*NVHrż\2;h"qV*Ry aQ {?Fbb+IW+\eInՔ\|_<WZI2VyP\Nj3y_8bG\p?=~Yiɸ1&qۧ7/q,^1O|0f9xnp}Koǡ9b|ͫvqvā\+l՝oE \X_}5p(`8(~󋢯\QsM_4|Sm? נW!/9\ Ci&9PK. zPY y}M%i::Wb%f_EX{`BE 8*R_8$4teg6ӌ% )|yaPϙT< NyUst6Ƚ:WcS筒|}5r2&W*Kq@u gO8W{O bpr8'kv:֤l&JμWk6&H+X/rz!$\B(B"WrE!W\+ +rEʁe^('`B(\+rE!WrE+ 'WB(B\Q+ʳed-xңqDC"Wd+rE"W$\+rEP( BP( BP( BP( I||Ao/9z=>s>}~c>}яʎ?UQm'n}y}[rט˻;z9hS}އv{n{1|/^*:*UPqTӉyJ^no߿ow骬?TztyRsTyoAGןwuNL{r{n{je7\W=1Ma>)O/;G؄+ l髷W3TztymS W_vm`\nyK[qs>|G~(ӽEk-'n}8;t+܏^ǩ=3Vԟ۞7BP( BP( BP( BP( BP( BP( BP( BP(+_5GRUTdB({qro_?}}?D/kI E/_~~"럯\M_\Zr?BѹVvu-x/[׃ւխ+1 =/|U_A|ln}f4~[PB\}CPr+Ey/tQRڬ߮x)XSZyHDʋR]qVcxr˯_+J9wUqG,o6.9BP( BP( BP( BP( BP( BP(I endstream endobj 113 0 obj << /Length 71 /Filter /FlateDecode >> stream xAA Ѕjj1, @C`(|]{a#ϝ8*Hob>I]Qʂ 5 endstream endobj 111 0 obj << /D [109 0 R /XYZ 132.768 705.06 null] >> endobj 18 0 obj << /D [109 0 R /XYZ 133.768 667.198 null] >> endobj 108 0 obj << /Font << /F57 72 0 R /F19 73 0 R /F67 82 0 R /F66 83 0 R >> /XObject << /Im5 107 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 117 0 obj << /Length 1298 /Filter /FlateDecode >> stream xڵXnF }W2`jn[EuQ<( Qߗp-;N>P/g.m>Fhhz;Z#gsM磫čSeYX& fj psT m*OG\z8RRN92lDi(URY1VERxkHOK[CIgUrAA=B-) wi*Vt3N0qCٟN ۣu?/]Sqa@)@2J R2O( F)eq9Q(D/Z E= -nPqqNjvVhqV{+F˞oYy_./U\k&Me ߃Q ^LK׏~oQmaeSׂ }]VG/yrO[p >螆°Yr~i)"p1=s o=Ҫ6|6{ Lܨ!SQ "1y{I{yXqb2a?@bAy;, ԗZPRA@!̣ks៚HKTOpB=DsKH̺2.BM!dY6{"3k"}3e#/4{%3lz'-9>g߭;W]gE5aelgM*m%?r2]Ròsd滁t[T*Pdm=S g`@g@k¤|?rN']ԌPRe"OU=O@[Q +AGXs pBfpieE3؂4}Zhz_ a~GNbyA;}: 8QODAb|{AN!˲'%>Md endstream endobj 116 0 obj << /Type /Page /Contents 117 0 R /Resources 115 0 R /MediaBox [0 0 612 792] /Parent 112 0 R >> endobj 118 0 obj << /D [116 0 R /XYZ 132.768 705.06 null] >> endobj 22 0 obj << /D [116 0 R /XYZ 133.768 667.198 null] >> endobj 115 0 obj << /Font << /F57 72 0 R /F19 73 0 R /F67 82 0 R /F66 83 0 R /F63 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 121 0 obj << /Length 1192 /Filter /FlateDecode >> stream xڵWmF_zp Tm\ۓRQX$8;[\;o R뤓Yfgyvftmm"I΂r(qe)i4ZCKތO lqxt}N:;Y cGVJ㨰&jw(kV׷ ʤt^iF'*E<|b`'|P2!V-u|:W3άB)XbB"MoD[2Oo?\WW HìGrvIe/ސ]]pH693]Md)PX.9* тTxDS5.gLxCqj"WxF.kW!>DXA;2ְ@*AYÜ-V] ]$ۄDHf^utlQБCw衧pFOJVW\'{r̖E8i(H}z Uu3{/[ʜ(9 t0mOJN=eG%12!8Uph`7ko)I~e9& ޶kφoHZrJtظ~‰FcÚ//1fq]Xsi2x<@+F-mwTL4:nY^-ri מٖwTB7^1Hwʍ1ZKuUf5gJPS?$#sJBjMlҹK» l/[E'M53(J<1'\$:, }.GKXLZy 1b}h"&73U \o] ׇU#]4/"ߺrKWS#bQ,,t'Mi-"z[Z`0YbLp1MEf>--eu8KuǛgdhctx,X6{U ^kb"xH4~Q|i\ όڼXw4byV*QE܈Ex:ĹgE GlxVC^Zw5 vS'OGۂ?[_J8|ߓ夕cg}'4CaW&𙨅GG< endstream endobj 120 0 obj << /Type /Page /Contents 121 0 R /Resources 119 0 R /MediaBox [0 0 612 792] /Parent 112 0 R >> endobj 114 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 34 123 0 R] /Length 12743 /Filter /FlateDecode >> stream x {;r? 68 gKR.mze}l[zT* BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BO@9l_+rE!WrE+ "W\Q\+rE(B"WrE!W N)"Wƥ9P6r;,,nhq0IqsjF)Dl ztl l$=/8.c5,W>w<'Τ/˲oKp\̹ `Kn*R; WU,5aO]0+X=W[Ρ2?*i3)jSǃp%b/S@d}[eلjb4 NwC<1XL֚{ˎWڍUH9/6YgAb2^.r ƐƔ4,Y?7PJּhQY4sV7hB|t֕xk:>W7m<p76k6qʰJx3v#MSdq$fhV0+qwq^EkG5ܝ3~fmؘm Mb[5W谁zaou*?Z˖EcᏚhx#DE/f7Oal?Є$XE>)LDGwΕ.y~[OoFGfA9qOD. \M,uW:dX;j7A(;S-|'ƖAV͚㚈IcG+Hϼ=>z.qje5Ikg{#Vfۈ cV8:BP5{\: wS a9 ?*APOľE|2`9X!7Zkl"tzH :]0}^䨽5`j\Yk LsuU Dչ?PlZ{ʸ9 :*4N )"\AֹS#\EΩᑥNUɊ"%JD;札Rũٿn>\)/ lTq ԕ|oc!̬v I ~XYֲ1aS~~Q\yNtɈo`|ePXZ~+cEix4r}$2N5p/H/qR fWw-1g) YOVv>xQwAd&Pw\d&+E H˹&s1KnĖP^:[S\jV WYa(fVe Bq= 41=`~mt0MP ը4_1z՝$hR]1ܘLM*8n WBg\^IsE0p>+5ΠơVH뤹2TVBjX'9+ʮ@of|ȭIl_[a [Y/ܶjW9XW~0橨fO㬃hP; @+xk= 'Vj%^v=c5GӧpvmԪE;*Ҭ6\RYne=}QeE~e_YJR1wƷ{5)DeYAspL1X(O7[&8W9V_Pub>0X3`seWAIWf dsx+iWmaX%+fZ,Klϔ\ TX{]z[d#j8 WE%ůKH*ܭ( 8'ʾ8rbN6X! QXΘDwl4? >\p.V5X%Czъ)s rS1(Z +rLe*MN*ٖU_ G۠rZ,ɕ~\K`%lML96{v+Fon,+;"Ɍ ;2 [WXxLQC%y\w꫹JjP[:9mײ}}|VW*hY2V-P(p٧Ă *ҡc?t{@[rԕ9Tt/!`@ѥcFԁK*a8M_KUs,[>TvUf$tsC|3'l.6Bea]I6st)u޲ mؼ~]ұI]4ZKw"t(׏N#KM5p8&&K% "EmGyDpQ"؇UWw^Jg0 &ʵ)BH]aQ-e\bڕݖկ\] %~2.!>n\- 9&PZ_eaզS7(JVMVkf@].c2K7lDOFl E W9,* {{6o(eZ5Kiz:h_zmkXBB3torw7X>X=Avc!2&:\ezDձ1 ?T]:j.o,v2 Օ u±k5&"h &+reP>+!\YWz!{¬J, eS_V*|F(ǎmpaI#g>C5XO& 7AB`eXK^:re묏 rL\I_-'oZK_Cਲ਼{*GYn'jª8Pfbk-bıbaj@SrU=Rtl VIjtF+xaIy12 c%W`wƹao*+Xb"u凌+_e?ߣDSsskI֡^`%2P'9QrUʕg=F;WC"'p0Dz #) qr-Y_9-3ϵΉvpxv?f\Y vm9=82o@ OO_A7QHrhhawDmBa9~$uば~lO'VA]ڣ&݈N̲=oUAW[3GR:!XcWs;-ZM%έ+rzMڬtk.if ߚW_pmMBԌN6TĀ{w+bJL8́C8vUDߚpw\ݦTKs(8 lTwsoq@"ƊBuE}u@+g>B2-\rS^$>Al rt0dž+u~O,a7/X"?ҮW(PHY~X.S\h̍)hqiZwXV ]v|h 93+g-Wr˅\L\($:s";!ZJ%XIgv,V um^w/)) \uˢ&QCr̟*~Ŭ;p~W{0WeZkA)U_eᓬX`E]⑴rg+{U~_q3wN{p0\ Wf!19KG*ӡ+߀Y= kJѪC\ G^BڹrUl[1a`ghR_- CO 6jD++HDN,ZA ZO&Uo RXJ@N"o4shkP\>vw}3>Okq\+;DVI),ۃ'ߨ8|Ɛ^•_!81x`,.PXrԹZ(b r/kxQ-ƕV)+߂HkB\+'n?V [B8GHc`e[AK*h CjWkU/Uz,~UR1i?$WQFqF^ J.7'V(#~D2HvV ]u .=-Ua /W& u1$9Rn6 XaC}TzNhwIXMy2_`+U7MV3X :4byOϲ+sܿu ANIڎw6/&jQXG1#͡9H^P+Ad <\TWEЭm% nk-$WN+B#/}j"+[]aU}ӄJW&}N͸h8.pJn|MNWՕO ꦰ:rqNUy7%p/l:dd (T )!BgufSCm5*suU=yqW9~S?4"i %zs%dGf&C3\Vއǀ}/(zYD 8㸚h _Mj} CͫN4RW~6}E}gbM‹w,cj5kb'[WBu+ pYDyvNjdM-3J]UFVF7lC8e~O\b5L_火UXs㷢'_mL~B?L>yOYV ͉Snqڎ+Lz M Ԝhzm+tW]a@t(d, &v@h:WSvWf[{o.e{1u@]uGƻn!W$!\| ce4wQTBL1{~ 񍹹 Kv5IFb'B W?xh~c\}kRjkC?s5nAy:4 N[ø "ܷ 7U+{!Uh¨l կ}\!l^*yW XnfY=)6|'ln sJ=5bc`qQ´)R*Si8އsUӳ+Wd%Sjf?bt^ =avN_UvtཋD0"Հ 7?bxWr 1|/kJRΐz X0oB 5aeNՔD5&\(s̐|쀫юX9!WX+qu{*1qhБiru`ʸB|Ws:\M>%ƊmHn\eE*n9vu (*C}2Uø6G$g.++˄?#f<oA&WK '.3 #+\MnV5n_T^- { h޽bwi}p >@xU[NF*zW{ seYٜgcUrVu왫,5 JR}eM^yO85bBxfؽsf +D$]6;Sr{cEY~l2K f#Uر}g;Hp93`-qUْrU9U'Gh k ;Qo•}6WNW r*,/+ոeP9܆=mr!Đeaoegjk=+OW‹uZfUBߛWťk] zh|~-(ꏡnI8>Wx8* >_o`!oB71+$$}b0#`Unn%#AwQJs5w;jq~xVZ(+0+]K<\ wr 2*5:IUJ`ĻoCpNhYr*2:*Ε'W], +J*j_+g(:5$(jPC\mnV_uV[\^d9]K*: Fbdpr&VGjZG&b:~?|C#)~PιZ+]*8 ⟁x\!gGfsT,{+!W+K/ŐIU]b̟YNW \U/'W>B+Jʸ¾N+Ǥ1AqJFzt\3G0je:&W&ݯ>H pE}$:d\X=֬ }/OGW\]ZQaիnzZ[r!( ;NG2R7:`m՟Iz<{t/rA0?_g?c< yk<pߟL_Vry 0T>.&jq oncvB }}*iQ;j!ʇh|Uau ~cf]FiC6zC`6N;|^jqu$u\==ٗn8WWnNԋmcrDz޸/`M-_oJ_v6:o}-n&>v)4nh5^v[gk^ڗjQadt}+}&uu } k ˡ2TCP\ xʐe\ei kW\m?ʨV9}f7v O;P^ &s\\X'rur%TMΡ6 :}xv̼qW#=W9KK6mbBv= 5f|Cp԰m&rZ[`?tD4Vm)92i~ӫiw`d*鼮f;fȣ)]_K?W6๰XbS/nG\M?[여9ҭT|)6Puy^ds(U9=*zq5v_=Xd^>-4z.}5rӲ&W*Kq@u d?YML[ bpitsPܩ1Wr煸%_{k\y)9kH)'$C\Q"WB(\+rE!WrEv7B9+5+ "W\Q\+rE(B8\Q\Q+crEyiQ+rE"\+rE W\+rE( BP( BP( BP( Bi_ߟ2>~rO/*tu'Tۅ۞m#?{Ηwߦ>T.X|m6އ׷|O*$ujp3q>ݞٟ?TT]W@ŧ.m}(y}z{/WeJ?]iVj>zgnqu]tro ~qb̓ =sxٖ]rr\5>iMω/yzt͚[[.al|髷4W?TVD3=뗥6?Cu[ -n{>~jG~*=Ek-n{>:r+?]}S{]g<p37BP( BP( BP( BP( BP( BP( BP( BP(+?O5(\QV7O߁w^Do?/bw߮| }+7W~?3WOPtnt<]*?ru+x'bsuJL;n?ycǑխόk-"BɱWop+EI?j;Wo\,bMif!}+Ku=[}'s_+J9wU^ףt5&9BP( BP( BP( BP( BP( BP( endstream endobj 123 0 obj << /Length 66 /Filter /FlateDecode >> stream xQ PPG[Fc;6B@@AC qqgj36f-M4m8x3 endstream endobj 122 0 obj << /D [120 0 R /XYZ 132.768 705.06 null] >> endobj 26 0 obj << /D [120 0 R /XYZ 133.768 377.222 null] >> endobj 119 0 obj << /Font << /F57 72 0 R /F19 73 0 R /F67 82 0 R /F66 83 0 R >> /XObject << /Im6 114 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 127 0 obj << /Length 747 /Filter /FlateDecode >> stream xڭWMs0WF«OJД-L ߳W&9aǶ~vV߮.^DgV_+Р*kTMu]VUx=yk_>TjS3yӀv^hCh 94TaőIwiwb!B)4ތY:ΏYc@5DHDY4&֊%)T˖ZriR4F-:EAb96! whcmѾ=&M!W%%c!@U&WDx&A'qLfTfLgL }3 ],j0_`KgYDIcQ\h f cAH~6pK+vo; ڲ%S8z(%6ܽ5.EiѻE1'γ)+ٵ1~bl>IdNΤ}>xI˷wnOtMg_@_ݏ~3-xȟ')??8Y&&IGi\ {};2H%`vĵ,.TrX|~P&l5Vv;|Q29> endobj 128 0 obj << /D [126 0 R /XYZ 132.768 705.06 null] >> endobj 125 0 obj << /Font << /F63 74 0 R /F67 82 0 R /F66 83 0 R /F19 73 0 R >> /ProcSet [ /PDF /Text ] >> endobj 131 0 obj << /Length 759 /Filter /FlateDecode >> stream xڕUn@}Wq-Ů⛄B(@KT8iZ")Eݹ3$Ӂ6γ"Nq}g6K!ϰx1޵/6~jrqvu cMQ:QE$I&Ԫmx[}ePef2wq\IdkC_adm)Ԇ寉vQOU>v B^$bO#;Y^4u>AszE@`:.Ӕ.6iaaUKU{GHqYP׬#)݆1ŗP"!=|&ylc ,% ڒS@g 3?:ǰvڌ[m0'^vV].lC"'05>G8<&OXɘ^)&܍zДЪ;_)UU:u6ԖjUIU<^Ÿ=)nb mx'XNC'Fמk-F{"!w. XeހQWK{\QqX6p0f0lqLCXNо xe b #ɶ $ԕ@C^,NJc&,Wz4IOC$Β^S,zɸ <$eA!r"|R<,keD6,.roM\5A& endstream endobj 130 0 obj << /Type /Page /Contents 131 0 R /Resources 129 0 R /MediaBox [0 0 612 792] /Parent 112 0 R >> endobj 124 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 56 133 0 R] /Length 7850 /Filter /FlateDecode >> stream x {q.۽]mMSNZ^UE0y$ WTEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ@T O+.pZ35k\) J@iZ\@HJ t*aȓ+be_ɂ|Wr+*\T8\) &.:pFNRwi62P+b`_E*r W;:JFRj"W [*us}2ʔ4;\yrEJy\Q\r:V @(i*rEY`5 W"W 8H+r V8rUXI5SUX5&n"WʢdÁ]?ԱȐW$Wsr u㊴x,rVߞW-_dyj_2.ap$V\~;jvX{\sՠEp Xɷ[UE{1:ko/ H5_ d巷Clwǻ)9W+WI<xXr. |ni:ܽK/0>Ǚ=vyXϕf(d@\W_޿=?bYtstp`(n}p0VE \.#tX'k9 _Ujhә,*r%ެ;x8qQUkWA&G>\"W^qu۳ 5tPe'nv- 8@ \eLVqƕP{uDWw'M܊WSP >\"WVYU\͎{~Ȋ|WN'zR aYUB\f]{^qKj{d hN^JqeA^"Wce* l+\I,mPʕ1|\iJrC|bսJ\Jz |buͽO{B߷SU@4`lwcfԝz߰ ~{wd|a`\WZ%߆~$WNX9@5Vrv Uya*rxr`\a*8TU>\!?q%qA~PU&!T"W C+`(w灪K g4qup\ٛk=l惟'Ku/s%WW-_T-^_z0Ǐ\)T1#N\SuUvϿ+ni>|Rõ_ZW@g@Tԯ?Wphtvd\A?(\C>x``-NXrSƿC$1#;+Aʥ__?OwiLUS0g8I!^֢of?SL20{;+h9.zցTzݏywe׬դIfbkL_){.&"PՁiޱZ>7.jeU4m.]] aj26#R/bB'J3NmYNj [wsG ^n%S{hU\Qa57o8je^+6-A3WGZ׶WRʻf).nΪcs514Hf?U q.x\M;9b6W$U~0\M5ƁU)[ i:?#-ft9vg>VINX5Q5e*f>HuGTŃB5_V3/U1p.Ўwa!&|?U†$m +`ϖ]RΠva/qI)Tijҏ:^jvITO6>*\nCۺ=PvSLsG2zJN{ J-Wmem5_}<j?TE3mv)iEf:ǘᤃG crRw2%VJ1WȂ+U-*QԹoJP`!q{FP!9Op%S%]RIs99:TKb,\ e"OWCO]b*9jĨ"W޹ *԰kLHu Kb`ijڴU TZ[UTU A+5H*\a]J2Z[IT31r* [vTTs1Dp\mV^^mVD"WNӊ**#DK_lbfƕwTSeK";#Krtm#q-T)_V-TEWeXEpȱR}'U8|DWX)O DT7t+2ȕU󊒫ވH$ysUmZeLX+AQQ;Z`%@< r5\̀UaRrU:U\@+%z\5 * eXV4W)q5 "Wv-J!WF+\)UrU5ȕ""jac3-UCU\\%w8 EUL\숙0P VUqU)QY:ڂ\R18 "J+Ʈj**r* J2E=WaVpU,t|YJjLL \iz?`֮"+sUڔo,8j!re%4Y0 >ޜܴQfX)檴-\)yli_.^~ZX䅕ZJ+-% JBϵuc-Z9WnwSሇ-GXE>o|ni:ܽm~l)B\ x B,w\/afnJ7ʢqvL ~um%V#W"Xuk&dx{Z>~#-a!ASmf7%9\~l)]U?x宭kWKb  dh,ǖ.@hs5j[F`^_v#k-ݼLĆqK v䯿\l4Pz)8,[ |Yt#9.V Wq[&-hÒQܐRoc{%y0 ^mp P,6J}BoykK/ؙR!WYnȕcKo5 UKM&,p`U&`Ams+,ӄ@\!Ĺ*aVu̻'&857 cE2b zb&̀`U'ʺMG|-adP*&+Waڙ\xeX tJ]IWPվmĞ~[J,rk'W Vwf L=~Uܸ 6iJ+ p+}zX+\p5X͘+jr9X9pUM;p_ܫ\Ì8YYp5 yĵߘEr՟gyG \-FȈsֱ pǕW.RU (hAn\yZ/:ލrϗ+Cre SqUe9wS?lzwr%U嗫*Z?qPrtYW'M*rʽ*`խ;r㪛u9WzU+-W>6( \9\!}Wj+6ȳX 䝘ʚmHu<&r\UNv&k?mM>ᯯ]N0{*@T8b':hpWj;c 7rOHtJ>tJ Ѷvm֞-7՗oiWPCxk)Wz}]!^}lFXe0XOJ+MtT˜|pK E3MSʼQpIۂ[ahgx'\ٽeZ>:=WU.$aU W:=zsu}6my޿A3WNRO"#8fsB\BJ&3Ll]d(W7/CC"MoPBmRwNsC-r kǕY`1^ Ͻ!wlY+{hbK]VA~ӓKl_vWx` ȕ+,9''K\ֿ[L+ޕOkyU`LU7P܇rE $W,\b+"W,(((((((.ι)qcmyr ߶C0]R]$WCxh;x:ٽmyFXx ciUҵݛhuoɬk~|pln[^Q9VB/wo|Z Sz=\;=5L;)تq96Em\I/Y_ur+|}x|/Myr / {CsUX{ qe_ޠqO׽yWhj乺\ծWA &cVv7Pٛ)*\&J0\^b9s%0O>c׽,Wrioz>zE*WraHn;uSۭ _#q ծ]":EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ^TgZ7=ߤբ&+\Q:Թ?^O/w8K󏗴M"IꜵI2vA}ljpEMsUqbi/oU>[rzsUD<S'{[%#eUkwo-AEa(ĿzQ#tQkYߕ/p!ՔkjE.88ߛsGj(QwRh.((((((((((((tU7 endstream endobj 133 0 obj << /Length 113 /Filter /FlateDecode >> stream xQ ACQAM0 ^)M$j/ ;^`rްv򈧨R.k:՝nהor\q> endobj 30 0 obj << /D [130 0 R /XYZ 133.768 377.222 null] >> endobj 129 0 obj << /Font << /F57 72 0 R /F19 73 0 R /F67 82 0 R /F63 74 0 R >> /XObject << /Im7 124 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 137 0 obj << /Length 1194 /Filter /FlateDecode >> stream xXn6}W-")" X` EvIUlVݿ 9h[14>03g_fP݌Kɴ*f*L|6f7q -̑t 8nV] MBc/℧2^YGЋ=.w`}m mZM`| C?*Ȏ (CjCgLfJ 6!Mߐs l)ertʢ>9Tn„ed%ZD/Ztq"T/bQ<_΍:w0<ϝ/UՃhv/`Z_Pnbs6hXkf:4~£|E>K&(,pHVN8ɹQ5fxEx4r[K7Vb:eMo7hQV #wέҔErBU~YVU&OxJ㸜-TGʼnsBdw<7K #ƍ\C{kʥ/כbxh{LA eR2j2QPAX~,WލxkPh%os* ֞4Ux&ˑ)+p_-/=V=[ku]j"|Qikqg7#h0Vl񳠉{E.8|@6U)}I>-:TضG,+_1=v"L`0`?0 pG'JK, /FBwHr&L j- `Q@ ]$蝢g:i0A^(\z aG7AF} {I6%yF`:ӓ%GN(ֿH./~K<6]'3Ÿﶿ+`L)~t-|H?+DYI C؞LӚ 嘦5UC_5n"J>Sڥ?©ő@kFU'b94{eųI}/y}=9q]\ EP/o}ko6S/Ƈ1D,O$_$_WXa#Ɓr/@S endstream endobj 136 0 obj << /Type /Page /Contents 137 0 R /Resources 135 0 R /MediaBox [0 0 612 792] /Parent 112 0 R >> endobj 138 0 obj << /D [136 0 R /XYZ 132.768 705.06 null] >> endobj 34 0 obj << /D [136 0 R /XYZ 133.768 575.662 null] >> endobj 135 0 obj << /Font << /F67 82 0 R /F63 74 0 R /F57 72 0 R /F19 73 0 R /F66 83 0 R >> /ProcSet [ /PDF /Text ] >> endobj 142 0 obj << /Length 899 /Filter /FlateDecode >> stream xڥWKo@Wp+fX jzHr[8j׏&;}|3삅'<KtL2)b V:34[fRxq;Oj~`7t7q≈HKo4ii޽/x ι&_(P)o*앟nR $A~e0qq#2/c؋XE^(Kyj͍p%`(įpAąV-> endobj 134 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 37 145 0 R] /Length 7190 /Filter /FlateDecode >> stream x흋z8Ft+]{w[3l_qī(w׉ E` B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B$ŷjͥyIO븪<7zSu>4~\E꼩E3 i`&Ϡl(hWً*wk<㋯˪m|^GVq۶GijUMi]Vdؙ\|kJ2԰2.za}\^f/ [tW~+͛̓'ԍNHN{}WZ_^/6puu,O9oix ƪ%M S|z=W2W_•w W@{+"Fkvh(nX h IKL@$\uOb̾,nBQ`E4CKFĕˆ ֈ; F !O-*yt0d#sRKUǵѳjNN82ͫ <)uVaƆ ,eWq݇?X ;aW5Iջ:E,{\űd}C7@yk1ChvO=up㽰N;'s'GC4`f>]k7χ<-L%BkLTU'pQg+(RX *RKnTn*YlP g=Wd,;FsKaV6h+ckmIMS*4EVs>r*7"V\`>\S@W=5 p{dMdO<5p*ҘeI+dJp15\EUn9<^kz)\ΕM[=c٫cp=Wd.-jU^\⪓tUђg.|:liu:(}ruG{^`!*rmB6 5Vk \լksu]f|5Y\}\dUpX#dƜpXi-|3l/p=WAX-j6GW;a"Vcۖlqj`&dr0`r)->zaY!5>5H'kک\Y3Z_^Q/ j9j?8JpUUl\ea SU?WNZ4ch~\-t5UW!rmkZj\zɳ W JK.7FHʆEeA.V s5H׺n+\Y;Q=0XɄvVU\Y U>\W h*@-Wd+(\\Rm*ɯqP p *@лJj +`6+ 9  MP\vöcMd zAa>?\}ۧﶟWNNC!K ,C+oWpQ|bм-=GAI 0\d*ʝ+>;\eUq[p剫o.@nWZvov9Iʈg %Wp5:[,kA+ ubI0\9f]r\ՄZd^EgYe<0-Dj'=jz>c6R/X&V>4~ȊF95">_0on-u&$*!΃(hǿZ}xXW癰ZX:tr[ijpRjx quh+=Uâe-t Rȹj'92ـuǔ{g6'*2CIσoŃ̹:' Sar* %xB\&rujñ+#W0eT|,8WAAfxpPZre'WX} I9/n8N_^wUPK~Gz=0qu+SeL4XUf]\ԻU牖u!2ؕCT]Y \*Z>2 ]r]_c F5!=zp++>G;OD\Y5X)`%>3lPT]rE`ToC&X5sa<\wnVaeL>\sqI&C^X_[YDߞǩR|{y̨q? G%WWyyVo1rjNVM>n!)Y^6Cigbkh NU@U\|J+ސu+ڟgmB*[g~+]LX~+;,WpCOV/n5W`^\^eΕXPW*QXepH,\U*wD[dpWxpM+f\U"4Aȕh\eL&|f %Y8WHr%䔫k*WaLA+[u$a9W VfU&K!WIWMUUD (tWc+^]4Fd\ JZ]qaTO3W^J+WoiFWp5 e\-M'\ݢ{hpZZ;\ V{ pWpDj y WVrO}\Q{IOprʋϟ-MG'ϺÍO]~4xn ? ̄p5U2VWq8XcoſZ}xݿQ!̄U X+?˫pjXRo"UF2ՍUVc0^\ ^ฏ8}̌7Ͽ!\ WWogU'q~Ydyd.Kw⪴R?JE \-zn Ʀ=?BW}k#WZxN{vJ jgرR7K{O]S8+_K_o5•Ѧc68j:} Mr|V/,Q0iEjuk#\s 4Xr\qH+J _"F*Z41ғ{KZsՍZ{(պmp)dfs,k[6|W}?WFލd^*j;m7\:Bjk kX:WHڻ!ʧڽSkWT+\ v\ĕ\j00XՌ#3/W6 񆫰A\,_ ھm{aás+WN{ER;j, 6pcc+ӓ(ٖ+-p+WruQpZUIWB4<Ta//oBUvglp+Wvv*741+pW ;4We?ds3q%:WkdwruXqu`5X\us}=P,?\Yx8W V9j bln\'\ymt/W2pWfcaܹ4D\2n BWpeU U0\\͉ 4ܹynMb(#SOIe4`+3yA)ru|4s ŕ&+&LZ\)=\ ̄rX]ϓWal!p,;\d[>*JNRB˫9DWX)--p6:(XBT(oCliqumlR aqpxMM\•NYGn z{e}5-$ͨ J͉ᒁL)5 W`93 s՛'U9 P&W^4? h>\\\͇+++mD!B!B!B!ooҗIǦuO++m{Y/~?y;znwKt.|]ŭZu͸rV.}[t~X;|uC?^X.~XY}[li`<p=ZQUWU}O:$Xjt^~]Pe/YY}]laެhW_^WiCvt95 շ`ib2]\-sqm)X\2>ZY5^z{gce'Y&n2 [)UdHa}Tկ^}\?9օ窢fY:z[sUeT<S{W[~DqNa)B\^!4ǿzQwU7tcߪ>hCH Q0\US'~u*ȟ/=_M r|]Q͡!B!B!B!B!B!B(+d endstream endobj 145 0 obj << /Length 73 /Filter /FlateDecode >> stream xA A хK3X4M(ܻ"4pEnFLtfh:9J endstream endobj 143 0 obj << /D [141 0 R /XYZ 132.768 705.06 null] >> endobj 38 0 obj << /D [141 0 R /XYZ 133.768 377.222 null] >> endobj 140 0 obj << /Font << /F57 72 0 R /F19 73 0 R /F67 82 0 R /F66 83 0 R >> /XObject << /Im8 134 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 148 0 obj << /Length 950 /Filter /FlateDecode >> stream xڭVKo@Wp"Aj{#R+jS`8Q}~$Ne;;;37>Qϒԉqvr;(11i,(B'MGY Ogf؏$t拽{Q\*]OA.\Vn8S[Xv( Uz ?|jez3'$Lngqx e`*Uю1g`oߵ,)XnrUJcut};_tlk&zCaW4_lŚ1, QkIU hg0Yr|dMӹAbl!pik!8*YQ MCj0@yp= ~;m41h[qS[\n)DlķE qYV *Ya6D-gO8k^FjN TYGL-,M,:%RrU9֒ c& T>pdxHݳaeRaTKva0;r"o'EN) rh 1%R G,!J_XB`謷!K*;ء⢑GEvW4HO O X?"NvCn#Z^Rٱ" fI6 2αSzK&m%$؊b5@$V([``}-G7e{Uő7,)"I Lb\/j/Ho8lmz)%w0<7^AyY@V.4vJL^˛1;vFv7A C_&ί+l/pQ_p!A`=BeL=a4 C/ T4T [O;$~:3xK7MN>'yd endstream endobj 147 0 obj << /Type /Page /Contents 148 0 R /Resources 146 0 R /MediaBox [0 0 612 792] /Parent 144 0 R >> endobj 139 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 41 150 0 R] /Length 5179 /Filter /FlateDecode >> stream x݉z66;cǵQ=U#%"'&FtB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B<\yÁ+++\ WWWBf^ןi_-+\vWź5\•/E􂸊ׯu^WV py^7mp3تc WIVW•MIg;o# uuy;zf אY_*jtGPJj_['pcOwJWqH5iZni@)m\E!zd5M9$Ni*5`?Sڸb갋3ti;+j'TvJWQ>SڸTY!޶}gMqU@W9g\*WQQt9cH?U?F WUĦ*Sie*@ΞNh*vqsJ;,\2B?JbDBtJ;]E/`z"y|W)eJEp*͐6߶\WfJ\ }_XWVv|Q\K\ieJy̓o뛗*~?o*/ *$IoJs~'WJo/ԗCY4\R04tIJŕ*UT^Fˢ WJ*NJw:dJV\hKp%9ĕ]6 WM?`JqpUy V+E&2K.g> [M!UTX vIR37ÕUdXA|&݋ʗ_f?*䅇a(弧'~+KeTB{H#}L30wO݋ŭR2_w WXy.֯W)ea+(!QnBVQ\˺( jvs‫ Db3P֢ 컪݋M_RuQ '%핶G GΑ`qn#x\qDuh{k%ot+KWz] $}BJ ptJ4\YceÕ*kW҄+\i,7\ivW QpӮZrrJRtUÕ^WiYM q+\hv%]f52wpWZ]g5p+\ qԕ VK0kWTE+De+` W! W*]a5B"pٕ*YeeYuըO\*DA W*ĕ2VcJW3v%JW_9rF]c5gW QU W\id54q+\ ,\isNq<3vp@q+\J-a%+\ WVFJ1AE+\*P+Ֆ++\pTq+\J;;B\*D W!,\)r嚫+q+\Jpd%+X WV` Wp'W՟iݕJ3Xf\9\rep#ĕ!WWLqU+Kq+\WA 8SW W `+\YqE+\*[WX W!WtY2nu++\ʪ+"3`+\ WTθp+\Jpy]}e]׿q+?^7_U0+WMÅdg]Y^W]~T/hە1lz_Vi+2uՈn,\gfavscqWWMGmWe W]UV=z>7L4]ժ!_& W\-8|\f Ґad.srf6hR.\ڻWgfy{3RO&F9?O?g|,tz}6Ƣ+pieZ-l4c3y^Ե{hm2W{|SWs%'>oiӔ}vZW?ԿbQ aOkpc5ohp5>4q.twr|mjsU+vZ 9y8bm>vWŀW)zɮS3'Tj6]p;"Uj?M:Wjaa•tYގW& +u+lo-KcwCƕjsQ|7v7,W6gd\3pݕgJ+uxe`|&@UV >W\|&,{&&^YU4.?b1+2#W# l^U၄kT?'mX3|bUK}U?q E_+g՛nW#{a]<73,u5o5fJ%Bں:ڼ*\M9l;zj`"J-+#+WQɇmj W>,TզDV]m^To37 W^n^3Weja ټnJ.SKuWPp:p5P^*a ڬ*4׋cƕu[궭/JXl_lZ.u\ehQ}{<q%\Yng%l^K W[JNyW>tlS|}*q>WZ%V\XW WWfa7r7⊭Ŷ\3⊘+\q%Vp+# pq+\L+%WpuZ^WW]+Ӭ\wv WŸ\t W X+\%8\pup tW:WWYT2Xʤu\ʕ K2j\*rM+%UZÕz WJ\i_Z` WiG2Q:`p+W* W& \*a&%WFUANbX2tuR?/U,UNrJ\e` ThLbJKpCO"Wy.1$(Y%0pu/\\%* UI՘ՄCWcU5fՕU!bWp\9\Et ,*QѮ+`ĖRX aU)f󶅻q;@Ѯ2j:,qJIpYVT@V庚id5߽VvXoG=o-ӕVZ]k| ռ?ӾZu{Tcc(X/8Ƚ^_xW4u,Z]UMVˣ_/G| q]^ Ze5/ r1gUXZz&krV#i2 +ХZ>K; JXdU֪ WmGxչ"qۯjގ^b.?`!꓿e72YYruHfQZlh/LY.Yfue;=7w$W J6 G6%{7 Vljz˿;AXmkq:h9u~cV5UUslY5Opݮnhw~c'V]^prnc%&c78 Xr1bcت"1ι կHW~t?_1kBqtfgj=-*UXsEb\s?V q&,֥ERsm;H@USU_$Uz:\ѺtF `T5+Z!V X95+ZvT}xh͹xEdhEUGdEhhgݮh+.UϜ{JQ0RDv?nz#g%jPsETl4xQJTIxD]Uo"4ƥoɼ TK WE}{(Km WǃsHGWTpux[2UwWYsȦ@E|ǹzݞWWD_8\vW"B!B!B!B!B!B!BH?Nh endstream endobj 150 0 obj << /Length 74 /Filter /FlateDecode >> stream x A GЃY1\{ ,9>IZlyVi'+:j+N/z< endstream endobj 149 0 obj << /D [147 0 R /XYZ 132.768 705.06 null] >> endobj 42 0 obj << /D [147 0 R /XYZ 133.768 377.585 null] >> endobj 146 0 obj << /Font << /F57 72 0 R /F19 73 0 R /F67 82 0 R /F63 74 0 R >> /XObject << /Im9 139 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 154 0 obj << /Length 1107 /Filter /FlateDecode >> stream xWێF }Wm6CM^-ɃVn-Kr(Kq@Q,5!y:K= n_x"GH#REޥBP 0q,K 䵧+M;2JJiIXa9ۀm~`KlIiI@kBۇǼ}%K6VpvVAU[UT2UÄx=fߏ+3KIJ)84cru qT۰g;-Y|vimO0 l=vv ,3Ganz apj99}o['?}=Hӵ}$iiӋ|8L80֔}&O2pQX+è[쯡q1&g&,p!:%iK -B0j˃ì]k<zOjd9=.M{\_o *lyt.õ_ͺ"xE˪&7< }&C5T]B&^ElvH XM2IDs. sdb2ۆ ?O4 b6 m3?~n`v bA۶Q`#+6&ȄStYZ Rl7|U4,sNO-^0_7=M>eފ5)%d@} ?̚bGy3CoGNwC R2sÂ]J endstream endobj 153 0 obj << /Type /Page /Contents 154 0 R /Resources 152 0 R /MediaBox [0 0 612 792] /Parent 144 0 R >> endobj 151 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 63 156 0 R] /Length 14553 /Filter /FlateDecode >> stream x {qzG%YR6ld/{U&Q_UK w/ԟb%C{W>W/?U*yg&]>H*K{bz6 sun>b(Wrd4_~?~pyMZ{'g_E7<_/?M/7j3z?}3WRUVqڛ~3 'r./\a=Yf_|W g Ixoxq>4 udȸW:2oW\}? H\^ْ_xy/ ~a=eo{jTmzU(\ݦ.n> _TaGu{k2 [o7˾jUM{jusGZƕ{:O| 'Qq[zJW!W5hA.࿰񞞹[Z"[Rer:WVEW W|} W{zjZLSՃg2:n: W7 :WđZ^7zn63WWcs9o##*^W=Կ+beW*WEY=J_\y/lg:=\QU-#*㶮\->v//7~a=]surWU-#*㞵ů4q+?O5o`_/Ë|I^ʅt<$UL=!_`|\YD] vXKb,U)y#s- sUL~ūeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa))RXWˇuźb]XW+uźb]XW+uźb]XW+uźb]XW+uźb]XW+uźb]XW+uźb]XW+uźb]XW+uźb]XW+uźb]XW+u7U;W`zXFyA⎹cSRa &>6 W3Zjm6]Rn2|<\a\re=spU ];Gvn3eCpWeUyTܨyºv\HU%]qY>{t9~vޟV^;:hվTZ>.? #/W{y^u-WYTz_}z~5{jEJ(Ŝ2hJZx O`VkQ\cuQB7pc5"/:oG {jE ,JZ'f.j 0Wc(*"FfL^'jvθ՝,B\?by2q%-]/F˛[-e4ZX"}~*>)pY;?Wct1ަ?m $?,_g /u.ƪi/uuYr4uv{(+m3V3V$q W%ᗿ<=c1J|YTA7^aۧʝV1j:t&0W䭇qu5Wg^_Sq #u膳apQ\M?\헇\ʷԳ$< VGrt7q*W},u4GcUUD{J_իKYJ~/;OQhag³Uρ~r8-rb!.s-@E]:O3l+XՋ~ -Hn1 Y*CüqJWe ] #D%ξ1WRAܦAH~s%q]X({w\3,d\~X1ݵʙȎTZ3dj#SU!:\ƙHZur1\ !1Vvϰj+r h߇Oϰj^-{"| ol\zFР蚄w0B2Wsj+X( [L1WIE\ɠ̕N6}iչzg\5SNaMAVz۫Uф_4EF4rϬ&\ R(h9> (+4 }r55yG9W|;̓*&1X벍Z9}Ws We9qgLb|co$F Idhru6,|*A7W}T> p﷯S݈uꓵi'e8^Mr3Vͮq}\s"t yp߃θ0F] ѳ%^M{$Zed;{cv˰.'|{ݹ<>XUՎX"s8߀U5+ztσ&v]JYeV+w,gLW򤩡qӢo0=@5Ģ>*W2] J5X@?W WZV 01UbbHLŠk=W?}Iv՘EyX3V&}yX(\7w+1GE׉Yr ;ltc=hF=$ GK>[ NE%X ۫;yJIލǪ1]CGbdlAIm̲\p}'>1}s5z֎M%#q'#-bj+IMPVNJ1OH:Q[ӼkXc65WȕpE\Q\Up8#KnaiU\%YT&i!I0' -Dh^={\IG-VXCz/mGFssD\ͨK؎Ȥuqr>_ܛ//WdjW!DWR2n͕r\_+u{M v%2L3q5ڂ8/]+\+ЃY$9 ǯFM\.VvqoP f|IӍ ڂI+$tffP*~}Jo\8%9I ќR2*vJCe >WSB! W*fSܙ u9\y3vjcoZn)y:,a5n|^\Z8WM*R:SR2teM(*1>u'G{AV}zrEx#9(Al۸ZY-]u͕R6r\AaƆr 'W.5o5q}rD$ԭ syt͕ԅN7YSLz݋dJzWݴ kD^i@k\-? pL<"`#Wsit[[7/ԝA1 2q\*G>sE#BresPs|}`u@\) S~ <(2Żr+Uw~П8wi2zr7ͦpb^Sq_Mjq[@WMW~Jϕ  M5կqe$%-d >WIILݹĪR?HVФőHjo|AvjXR\z\]{xƕ7 '_r΂xkj Z%.Ҩ"]HOƕUDR|QaT51 U"(gH\-1+['q<2a#F隓bgAdhpULئA+RWa嘸 LJ+ZXTڡZN~Y j_ZFuUjlBJA\]fy̗JcB\ŦcwՠJvq,1AT-ed0#Cs%WF:< W"(s2F4O CŭCvըep<ÅȩpwzpҔCX B"_2r.WZZ-I`$ByPDm+9}$DbB\-,ED< w+!ԸH*g6r4gXX-OK9@\:jB mCݔN+J;/WcUuŕ+:e+_ЕM+3ހ̕+rZb-X+_Kv ^\ +J Fi:J=%3 CX;uNgJ4xl.]\շW%ᗿ<=j˪Y[KJ~URTRҲGz>=~D2h@ڏXjbNȕnW/嬴]p5W&1魅^C,+q$WgL+ojWS+WEGX5%_r\ ٫"j d2\@^%vIK3 a^] [ c=Njև1+ܸ"u%LAK׀U"I!B**,ܾ?0Sn/Qg6++$ʎ,{3Hv KRvL2LTIqWJyʨ׾cW!ҬyxvWZd`a'z}[3irM dY;r PyV"kO^T4+.&g 1d3Y apw.*d su#DaT5W[\ղW5{Z.I*S'Vϟk2?^ ^)~ Q&e?=gl zCڵzjhZUFsU-<]9֤ \9 eZ'TW8wSi4)w,1#i[ +h;I=rܣu8{DYnWq]xW/'lۑl%|Fa]į4[X%bqx~Lh2Xo.=gcT}qEW4҇WS͋ۻl_՗7qJF8W\iU.І[ ere\k똌JgPGs(kuj˨  Q\ |Pd2*F6\:W 9\ x'wRQi@_Xz$+r5f4}6eneYXNUeʸ#qh`ȕz{Ip[d jտ IvPrkI9D\Q\\9/:Z&BGr5'oW~(>RP<1ZLr,7ViG={?=R@`(UպjOX|tZDSy^^鑚\ 9rñq7Zy]M\Ij$ӕR Ϫb*s=ɬϕ0S+k"o \`vd0(];5 [E3<́6W[HV@:ίKS Ql?,W.n%?/xlXgWR붗`Y|4ȕſo7Ұ,N8a\]ens,M\YwY]ɭelɹq֧6Ru2|Z\-˗rqzS\ѽ`tv6܀bJ-4rqQ(CK.o7r%Hq=2ore 6zg{ɕW]u"lp2T+F¹q\ J\jZD<8tǰѻf>T% QUEE&ked%-\S ,mr%cU!H{K\U*^ )Pv62ŻI}L*hkb'|}bg, BZReFX3طsy2㢺C\/+ڵWSϤڊxxK}ۄ߿JJ W0ծF#9K]pVOy(W4f ջ\ynQP_x~DeJE5sl r%`Q:;7W"w|^]map%C-+- ˵}/=D<[̃OL c=G'@NyB|qmQ0HU11 q]K_#h!'=\M\]O~ƕc.TJsE`We#%vzݾЭ_k!LL5~~p5o"XJڇ;+5frD5]sVWK_`u$WjJ8TV PfW.كI{N \ +Wd{S3Wp9CR5er5I2 sEЯRAEBt\pKr5M< 2g(*5bbJpg' ^U{RN}ԇwT3XGj&@N6r5uG&hV>䦔\ČV\*\Ay( AJD-6Ej (RRzx\ >վ2\:W3Z }-#LXRIņCpx Mw`wtOԣ C5X6,W8u+-\)i67=h+Q*k tjckhG[vql`]'Ps`Ÿh>q s)/wW,ws)F>*j0˕ 7Q~`v>fﵟ|\)Q\ c),k7׉h%$&0jAI6DG"G*bV\;P<g,SFøB(زmkN,px %KS/4*\ѿyW;n~i鯃999WJ(:klķmZX&2@=en&'@1RZW䪤RWRFl-h,F5ΔeG\W8W4"ZBT*\\9dla"- Q3U:!WeFc:VWލ--n\O6W]sezH.!ڇLf2XΠm¹:pEE&θȄY7 :iՐr`1iUa΃/d0W/%Ktr2 UV3ͽgKJJ@-Q~vUWqW `?Wbd[S-΀jgaN~8Yɡ*W(U~FJE: u^ʕR4>Wz~{ok\majP5 Kq%Nr +L['ljg2η]c Wr[ڮZ0h"Ё;TΕ(U}H]mj]wMDB=bk Cg(섚YǙz13%*5[i;gs!΍ŵtܶc9P+Q+h! qp}m\ +fYE{5ƕU]{ENOWV[s'j%gH7WNpЈ["x'"k׾|!]eqņIgakUcvzv_rUn5/+5㣕!#q}\73B-9Wv$7D>p.]^\{VҬ }sp۵zɌ3a`0Tk>VP*eʩLW hv`䙫(D#\D8( oO`b WHJݼ)m,\5k\Rcreګ=̃q<ܴ1+9&}*XavY\~*:Xy mq% !ǎr+c J$sٵgzpw檱={e˻rmlyRD*WS4!;ڴj7h5~R-vK.+++sgY=c 'WͬۖUsdWȠ0inZarT{dHO(FB\<8DHRڒy0Չ28?h +xVہrn+Yo \脫ehY Z W-6W8^U'4WjJP ]pUa\Ugl\]Abl+`X<@s WUKy29I,V!+˕gdPָÕ}}|EsVUT;8V`q1+wyM2F[=+ bؐN!G}rNu8+WnMgWaƖSt`8I{y>uW<$oJpϟԸh\#%® ??yL6s!΂@:J5RP̡nBy˷hRHƦ4WzV@0"WOWI=m\ IJOT<h5˷`wx}wUS+R6Q1\]Nr0Wo6lyܝ+U W .lj˿жn*h@•PR.beA)BMǯl\:\z`sFS z!ϏVv]5}ۢ\Cz];!+ɕMqk؞⼛mhW2U+o\bWaiq\2hyMsɠvf:W 3`8(֞^ se6JFW0X_g:Wձ\%>ٿ"j\ W$۲U;Qz:UdȪlgK+[%Rt3ڌ_qR+K2+0WQ 2bӪA#UX]q~jd3-u9+KՋӹ*Ǖ6.'y•>W$ZUQ2p xηՐ't3Pʞ ٸo9~%,q[׌gH:U8zIr;H ۫(պ{|[EOϕ0S| r WqUhQ O/mUVŹ4&*_WhYs+q:o7j`W@SEb-s5d\أh9#Zw(eI/Ou, pWֳhD7r&ozLxͿ2*vvU_\W1rwK뛹2W 4?Ge pe+Wyș\%j)6W"^b2;8OwW/&C͕NU UAƕxㅫWuJAqBӠRfG-¬c͕\W+PWhNWob 3hZJ[mT$/Ɲ̕̕kbPV96ir%p4W j\mE}/5`A, NUf+&92az1Z+Z0+ q'q^ہg6}6"+.j Z*ui]in{Mk({CrdpUIZڤ^5}nIX1gGX1AVˌW(ѐPd F(ll'^.׷pFr{_kľ%rO/7M/w?ܸz,Cլ,ZN{}AsM_R,:bg~'faCr7[HB`Ia̷>=o}׫#}-?+9i͖o1M-SԮ3^'lxg;>Njg K0ŠuľϘ}Ket_CI}KwWxT,S?fW:x;#Wq˻3Pa7XZ&>U>sE'?=Uփ0)koȫ};ɷ݄SoG>LdZi۾\u_>b#z&Jzb)Kq7tjz`aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiB^5 endstream endobj 156 0 obj << /Length 100 /Filter /FlateDecode >> stream x- E1Be 27=az& h(|zݓެ}ķD9&LZhs1Nn4=?>u#>$d[ endstream endobj 155 0 obj << /D [153 0 R /XYZ 132.768 705.06 null] >> endobj 46 0 obj << /D [153 0 R /XYZ 133.768 200.664 null] >> endobj 152 0 obj << /Font << /F63 74 0 R /F67 82 0 R /F66 83 0 R /F57 72 0 R /F19 73 0 R >> /XObject << /Im10 151 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 160 0 obj << /Length 1433 /Filter /FlateDecode >> stream xڭXK6ϯ-8hUqR=rc#`d>V =xg _wcy3f˴гzƥdNg:NlY̾9yfXd~\6PF 2(r݋0< Vp=k;xVߢ8ua𮞋$o.R܀m@2F=8p},,X4ME0Hyx,AZ*XgnE,b}uOHUtZە}9|Yd ?j[YCAӄ gc ^ oLy5iĹU^=.UO.rCkh|UͩSVS f &LE?ZV»R9Y$cArS%d3O%%Ҹ#ICش)Ű|I拖_@>QBrEh7QA@Kƺ#g嶳ѺpQEV#[2gbAjĞDKGRO*v^a6eg?F44[2g֕XcB"#DG;<9<<В mQa$6#LQv $-[sg#/)l.} 6[;Z 8>k0xbnCX{߰{USXїQpF_Ngn :'_[uO'+WDzW6} hNu^ǃ/mҼ %NII^jm}%߭M2B*/&+H_Pu- O@RI?MSYM(kקD7R sl <}^j53> endobj 161 0 obj << /D [159 0 R /XYZ 132.768 705.06 null] >> endobj 158 0 obj << /Font << /F19 73 0 R /F67 82 0 R /F63 74 0 R /F66 83 0 R >> /ProcSet [ /PDF /Text ] >> endobj 165 0 obj << /Length 898 /Filter /FlateDecode >> stream xڵVKs0+|= K8Lzk˭`d $26LI2ƖۇdO{Z&gsvl9&.&bkhэ _/>գӂvd4rcex޿˕roRz?|mPGQ_,^k<52ҹ<1 *c/4ZeQ .e<G7 [D,D)\/ENbq#k-<AƸQbO@m`xD^yN>H;:в`OQk;1"L Yψŝ# 9+&*L7c#!(1Ldv!X7;:T $k"Ws!9-|DP XgPؽ ^;k>J6ķ0xRJ<yލaAɋm>a X2TПjCj}!]BR7ÿ2YLzr.eg&WoY=4c˚dYP endstream endobj 164 0 obj << /Type /Page /Contents 165 0 R /Resources 163 0 R /MediaBox [0 0 612 792] /Parent 144 0 R >> endobj 157 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 89 167 0 R] /Length 9713 /Filter /FlateDecode >> stream x {u`v$zҴuwsq'M[Q_NjIq@rH~IfH]#uTծZVKT9 )8',pT8M[Xڹѹb:bG]VםX^h6jѥEZΕj9eiݠ4)Pfn$Ǖ"a]ڶP-K{w\ՌUk@K4WY*tI0\՜MI-*%+=lWpes*8| q UtJWa5)\n Gڑs Uʐhpkp*q,ҵ}b8 \U`lN}*TXfWpUZqʒ ;\ߕu!&;svJÊORV9Wq*gG*Tqe'aq5ݻR -1tM@WwgKYbڥ+M S3+jYI뽹ҰZB%ʲ,YUIp-5E4U•{5]U}KWҨ|wKY&:n =LVzVQųߜ|da!_ٸ"7V H`\5>(xA}#fewe+k8-_ekVsհ(u5յ1,k Y-a aYȢ!۩ʮ"'VKM`jŕϸ"Rʢpd,ebV0Θxukn\ĕfڅ}ZSX>[M=m̂+[V]`R VCred]oiYV?$~|*| W %ʂ3XšNa\-U%,McHW\JWTCN˲8[bWXM{s{@ÚNAY7p>TS%WKeV%Zj :\mӕEm\)Sr uUV]\Ma-s;Wrej~ɲOHv&aW*]qWkkADb+\Yqef,ڌ+V0+5r,|>)cUVK~ÛWkkvfaY˂b \ g_{OUn \fg+ uSN+Zr>ʂ2vh ,j5eXЂU,WʶP@W;`Ǖ>em̂bOYpŐpeeFp͕`tmEcHpyVQ]y,|qԧYpV+΁`96pVBPܣ뜲j㧂aekvӁ ypOUgWX9/9eeW+ Ї" *+c*ኣU5HF8'kYpŇWڔ5k n*IChHYY_8r^ߙ6*TFX6s*+KW[/ R5&X]үU(V ]1D]c^NNjzmp2,ضϰJj!e{t񲹲UUjWYֱ]a4,M<o } XJ\SƐԕ{hV}5(*,bP*_~o{XJ&.3Y0Jz{^dgeuMa3XםػwXV6{ũGh簟Z8r7bujvyC:`eteW|jv0w4Vl*Юr5+,3bu, ϰU'D^]1a6hfWVNSkweWX,19tSWX,]B\ccKWX9-D<\)=bemK6IA]qcUe?V9W Zb?Z-5+ڙ`Ɋr/!++wfI˪1qߞ{MҺbj뮦,dY7_hi l9OV֮ؕWpK.U=SVp5w~곏UWV{q5%b GJleė5,N5~'q4D'- ή3mU˚ Nr5J[*Xqåz|p[tupHr5;GrgtEa] oWX yŠݫ}J}U)J4ΒjEkXܤ fbu U$ڎWUZWEv^qzXMo \ bj$ 84Ufu#<-a7a V{_ KJHW$uʪ> K*"C:DDљ-R^?ۇ+џr[W6*:p)WcXCW#W v`V\؁+U+hv\|G )'+W[X4ZDRg[yӕ'vIHR2 |ڛ+nHUryRJL>jP;懴vz]%,XcOWT*UTc#UrfLpO=JND͕PYkĸ :%?1\+h[j)]oP pe^1 +V\uNV~XVK،c*:de]1M*fbL2qKW\ ug X,5iͤ+~:j?mVXk[;Pr嫕 a^XA\tU;J5+TL]Y|ؑeu8,rfh:+f]؀e{>h`QWĊU`W]U6W`Uו8߱v+!-ÕyVQ\]8RݕrqbeNWtY€|4圯Գ/Va]-.-•D`#m{:Y԰r4b"l` W#d Ttv)`9>]twOrwsh4WoϷ,gOX B_ˉU|eOӒ6]ފ3JW j)N]ewHZtp$]}N_Gsɴ6 ++4lʫ|R_I]Y8_$,U%Ç_}տ}tn X}ΛU WVWt۸˦liع*Y_6^ŠtucͿľhٯNXI`YI~حqE幠a5Vbòs*Yw?|OUWVqw8drth疮bjrC}Upnru\ZQ e5|QVUr'^hWe). +&,{Mo~L'V⸪)J<_%we"²<?hߚ1 8~W\եS]}dY9]eЎ) R <ҕ:&9U={K;{֮bswU!|j8kV$X^5|Jt5cU sB3%8m}3ػNXUr5W1`\]⋼jQUR}yss0U~$~\{(͉MC=*CǛ|u~I>&Ο/g_ &Np哰Új& hN<~{4E&W=F^ꟛKW1כ*+~\ưO9tZ?c<~je Wc/Qvh5` Õs k0쿺uS?V~ٜ+VgIwGUFXdlA + ,W-Y dp~UtXޮ6*,q2$j[|V X_kU*@ kW\HXְHb+n*T²Bjޕ`WV6乃j<ZX&u:?Vp2ajx+ΖՑ\y'UʫQ*qcWX.K>{Gr埰a~MJ)]qYy}: +ALYJ kJJ`mo\Eb{uժ *),gWVmGs.a9"w+ӕ \IWs2a9 !]Uْ+g N\*A²n Q r5`xZla}4u\X'X>v*@Kh<$]U X"nh\ܙ]HX˰Jy\]%g^J{]˘ ]YyxZxux&%X.0]6_IX ,F_@:]EL]Ňeq8Ҳb_I;x~W+#銓+/!a`Y"&JfT;W_P-v\NWw\EWrn{UzYW/ '*\KW fU-:;4ft~)p Kkf|.~{ i89#W1a\a:thpJb#]+VӭҚܒзOUKfT "i+c%cWq`qtwfUFR5|0S.]qU0`{WzXɊhޞU]ONE|ռO+as8/E;s^rۮvr4!&2]E9oϽO[wUbX)Uu&tKnɕN6 21ī>(x~}yUBXiU(5jk}dCH,ؕڼ ap_8}R^e>VqZz} i 1/:mȕ<]7W `NW\]=^*r%O ^~\huzKJ'8Ȳ-SJjE]ǕRU$(ϕʕ<üV8WR3}{߈D۟O.T +9h^hJ"w_K%?~W0(v22+1WoQ]=lsm&Y=UeSl+3owb{O 'Z8U$WuKwg*\O#W:Ȝs1K {5OX$r刬b3T})*MQɓ?/,kn̰_NWbkB_u2UTUɟ!L 銷7#][e_|N\Ok_g,WW``ӕܷЭJ6yB)5~[W`ɓ?uj_xQZ+G+ܕ]ބ|]կEO6u{WS jGw5Z,\i֕1af$-vڜDktv7|r`W6OoO5,,UlV]18?-4,6(FMWb֞rvFyHwjmڂʔ-<])GbWoa( _/Ta)NVp-RVJePFc%5ok80WC\X\{ FXmi򱂫onLaBVp-haѰaZ'\ C]:RpN'tPIaLWp-h`U*Xm0oA-n_BXYYUi,ܤFlf_(a.+D5[W)ڛN 끣TTb ׌u5WfV3WM&7̀B K e Y+U#K;jۛ$z.mm{J֭K ƎFl uNpJ^x ]$p:]ƎrXͨӜ{M WʔE{C7 ڇSyU4Tn:fwCvVptwUT ]D~aM>\7fo~̕>eOyC'u%333Hs+daC_| Yp+W97@p), X&VpV2]K&k aUo\yUg64޾) k-]˕2R ZhaY)@W;rRlMەqoznǶw,ɱv[9ʽUP@VUl]\U(Epq*Krl{UVE7=`IK =8~L_n&W;=V[D7peW Yq1}m:(:n? DK ˆ\9JJ8m%n{zWACWh95._zqY\ZsX/N Xٗ:^!ǹ v~B?=ɉ?Rjy歺jyhXҺn\vq{UzW]Z[X=6jZuxc%Տsܓڭts_u~"V{rŠUu+U([Ua eaI`ʼnM+foal˂IJO+f `dXU 8\6W>x|8uM\E5wWM\y:܋>*01q W*)EJAq_+SU up&Hؿ+y4gAl`^}3{Rc0օ$]nLb>؆ \! Wp<p>UpB ڗ|Ŧ_~oo++ۇ+++}++@ @ @ @ w)bnW\o7znv6.>x}64]\զw۷[mݬ鹽Yg~z5)(붗_zv~+חj^ևg߭zyw.j°nn{9'ҥ^eV/?r屭=mx.{ױuswRےnf,_kWAǦ@ 4=7tzXes-JV 7[|kAmw]%5Mk,׼lWB+]gbWŻ]=w{=7q'v>mvhիʹd~^#iCr1n߾랛=v"'UO,8o?۟_V Ƕq=[=7۟X{O[vx;gwu0=~+nA馻+jSwٿ_ϱr,0nGo_~͵\Hv^8{nB @ @ @ @ @ @ @ -O<~@ʙ W\.rs;qQ7}Qi3Yé~fn"B骞_iʍWWoKv%u4N4 н+l6?M`"Ԯ9YJ>ryaj83UH; cWkᑯjXE KwUfgFqu뿚R5qz~V8C "h4+\qv!@ @ @ @ @ @ 29 endstream endobj 167 0 obj << /Length 182 /Filter /FlateDecode >> stream xO 0 ?@7 `CW@p 9@ U-APHPhmNA90 Cng{wiZHIvȮxYfѝ;ǫ~hN;εDMtQ7];R:*-"Cꈌ]73> endobj 50 0 obj << /D [164 0 R /XYZ 133.768 377.222 null] >> endobj 163 0 obj << /Font << /F57 72 0 R /F19 73 0 R /F67 82 0 R /F66 83 0 R >> /XObject << /Im11 157 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 171 0 obj << /Length 1007 /Filter /FlateDecode >> stream xXo6_!%2V1<~sC0d6e_8(smtw$OȎk ։]grP8Tqvίgy#LDR+.1u2B9/< ǮLkA8(6LҮrYmq2MVi*:asZ'yb\LCQj_y͂Zyr͑HBd.5<(H0l >w 8)mZ!!я<QUIiI}ju?OHyg,f@]+UW`Xj/_J"0!J5hl![|vTHn)Vu" 3#<ʎ2zL (B> endobj 162 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 77 173 0 R] /Length 14146 /Filter /FlateDecode >> stream x 7rGʐZ'dbe &ےWR,GgNε­OwgW͠ѷ Be/e}Fo?\P&ʕrZ)WUkxwIRbr}{v)WU[޿ +JERQ+JRQT+JRT+JER,(E '8k6פ{rgƁ?F-lX<]U~S s6Ce{UYQ88WR}Jqֽ`s6.j<}.a;4@WئމQF<l0+u@ːwڍVxTU6t\WZl~R}u;qcSlXUП`,wxdʎIœkjwKL=+GYX#`a.RAu1lc4 ,W%kHv('gj\yκV7¨Be:ʆʺ1Y|E6rfZr7:.)Þ+ɸB+3} 7 z6_OIA֝c+ʍ2Q Gl^43\sX"!=ϋKZ8h~0c#%&Tm!lW}d8D-6AO="z5+(v3dJᘞ>RCS^lиΰ\e>g.X0R{bU\Ec\_8:--ׂq83Aln>2N#1>xtR?^,IN%OZu`t=a8XWS'  H6ʕ?fO,O!7$X>f܊ðGr tD0ɒ_x! W ~ /.q}\=Lfa}6M!ZH: ʀu++Pqgq^#&{y*;XXhe psXط|jT:r  &|X/D7'+5 rGQ,X{R;ojY?Z88R: fQN5 &@p幘:+qțP@_y1o{ZV ,$J`-$&"?z%XsBF:T) K͙+DXnP-ͣe5YDٮ1cHh\ E!b8 -^F捕[G!(f^g}_6WwP E\k=~{9Ayk ӬAX "/mf{ &NЇ7ʽzN㷗ÕAyȍ+DqE 5Xz_O.WdK~O17˿:MgCcFb e2z{褖+xc} lO]FCO0'=<)8wMs h6iat;=9 7;=(qiR  v]6W |Ir2_KzWܲBvl3 X~Iix7_pQ,6XInO:!{:bva{Z@XJese ?{[/Wʓ$Jr{2 t*)i0MxwOy=_"{MF*IfvO<XtMɢ U% jK}@~/,buV6_G 6Pg LWg M2>V/;n$Wav]QV;oUq͕[J&"D#=#s{q%,V5XrJ/>lu wRWnUeA>&wQV.D2Bŷ$JA}8xQYˬQNgBZ`aA\KWT2#+NA9⍼p|WVwr߰hOpO+/N~F$BSQ __o O_y/,ey4@Vݸ HahXunn~\=)9mJ9ҍeGx;X`UΑ&jGsE[ 4<>E Pea'~ rG_$XPI,#_t\?}vq L5i"\1.܂HԱvރ"*7J+w';F5 '.M~Jn_79&DZߣ?`P(p!ǂpĥU3zUi\+9 V H^-)D_ɷj"uK.Lܴ_0Uӹau- U,=,QWGϸ7'`w2DŽcWz ҜǡcBgd+^<ssCI/Z<+`q҈(ͅ\}T W7a5 H "QmrJJdGL"bsqpՑM_Jĩ-\S7ɼBw!̈́[Ww{WC_a$$ Z}0ٖ%r-*[)Gܕ?-Lh?ﯯTs"Jrqn\$ ܹd\e/XN򡊊-6CPCQ֞W἗Pr [x>549H]ԳǦ8/XsYm~Œ=W__W}:-_y$?{ıOI}?ܵʜK _ZnKg"*kpU躻t )HP XaCQ⛲bi]͕;FyAQsfW1.0T;+0|YzUrY !uŤI #ѰdAre8TF;y$炕0[U Ѱx)W_6]  vQ3\9 {>/s3CۆBe[?Wo>o]цN)o3aHHϜlwiHV^qg wה^L_p%ۆx0n^:LfCkvVJ|lHHCbՐE};?/hO N,#n`ܼy\d on/b.͑'wdnw^ }J+-_e ɮ=IvVl]+YmpImxj+ߎ-/7wp:wvX3A4S/cuF=XV-/wG!޶3kGvCGkEڶe<! 4|)siAn%Kٚr}mM./ѵh7c=x@%_5̕+rTx/6J|s|xi$hH$J]uQ(=5ZG (q3ޕ3<XVU4Hg 羊F'~/a՟eWͲ, _gۅ@NsX[fbk #bЕ*?GHbXǬc)#{[~@p+ Wц |2^HMDGAҎ"vu^CrDvV;" WR"+X 'UMUXIq>ׁGC`/ھ ,ԃ*AO=f+̣+8c>8}@vt#|}Wga W 5M? H=w9 =_dUգ ~j-W+Z݋O(P țz2"!ɢh븶[e"?=r7X Z1|>j@|ҚXxdSgW]/;[TCp_AC*B*S =\r thUfܝW-ʹWżq܇uGX2Sr\`};z>^~<ʴA!0Mw6iͧ䟡*L(&^c;HGū$f kyZb&D393/!W'HПRq ;g7\ #*E3s 2P' ct0{"Nq Ҋ6GeӒk8"|}ય:T:>{WrJ+hj_檣}ufN.#w@l0!wyNJZ]o*m5?@,!mu(-׹@lWD APo@ k+֨n I'ȣ yia܍q0~'*ӝ$ n+F"'/ Cvl?$X:t,ɹ\׉68|~ ^C?ϐqjWtV=?rCQİ6y65[7שF =qY:Ӂ*ܞnv^Z!;ՒG`q㈶h Epe6~&94J}ώ!f8=|FtUEŸN_mdݞO+qlb"~jm\],񑼿`R\; d/(8؈zIςhOnGa =UG+rU\mn FQss\Y >L{>۹vWFqgJ;` z=קżR>0wrw픜흼QEoG)9y/ʕ?/*Ά{ީi#2{n -{po_=^QhQ WȴN`O?z3=w?H}B\}?[:R؞n;۵POqָ}PR8/zնWn#QO [6ˌWrK)۸KqHSZylasn?On.&'lOcQƪTg_0!-=s@ Q[lh W5參yn٪%ptUEvj. d3zcqwN)93̙+~z29*L콂J 9fGxXQʦ銖bnjr7% W,2`\'h tj\9RaΝ&|+sp{d}pv#3b .d~4;ȕgc2p=am)귿f)$ˍcJ;P[ @+EuLvs\21k10o7/\%乒d,vOQo4Εɵj\;$tt#/BUWvNX5,W\u%-,=l&xw? F6]ѓvS Wκ7qQr޴l=QryHM /*, :$YSIGwYwI,\y^ e\!yqPTo 9:2p\ѿpt6PՃ\ :{sXmM[X5+yyryB犋J k{׉Ѓ+ ,3h^&FU3xQ>^Њu\-˕Uެ'W\PrE*dI\J4S=tYmAz1덛~U[Ov>\Azreq~P)h\$Kan,sV: Bk \]Q]:Vkfk;B5D1;SE$pQvZ+ HjŕPسy2# t;f܍Gd\U$_BpS&UN*BUp^;&+vq.N͕cCUtۑƗ(Kݨ,~fq}"0WahFț\q0^u[u1\npSuq ߐw"TJ%Lяzcl\/WdT@R[uJ-Wm;Vr3铜[͕X)WiJ uL)jUܥw\|At5w16!s7)Og\5\W;7w9WF: s)rʳEj)W sD*4ؾzkNUs類+@3'#?Q vUS vЈ+gmVןs" # Ԏ{NàWTa[meM[ɼ|zx+HCs0m!v׺y~$ #8W/9 "V떷}3iCIh7DBwƼPb N,ƕ}_eI F^6~-1%'N oyfN4I6v: OW+Ft~<1="~+ȿ7aC WvcRa)=q?v/w[-W[|vبt7C c`ǟ]+@|j7Mkw蔽! 4ˮ0zi7"=ێ+_W?K&Y [>7U<.f{ f:8g, /M<_'vSM풗'㥲p=EpNsH\Yׅ B Sx60gc^媏bm0 C披8\PY<WƮMš־bќU撥3#rlYy]!#kr%.+˳U,*)wɞb[MEeZ媐R Uk`, ,xIB&f jpvb'\7W/KŘIͫSAv>K\g^㓓qWy\e!WKOT @+*ʳ2*WrCg=\,++c51Wţ|[hY}l%+Ҹ $k`z +\8W"zj/_~0b7aHg6WO9m8=Vg*ƊɹzzUKpMU\\]&0ΰ3utA3#SrUsFWsSg p}d63S;}8پ`@[͒+(WbG.d _<2XVsކg>660.fPGݸyL=\EiHԆZW̗+dqp܋~w5t4lT`Ћ9se|.&a)\Fǃ괝ڥBi/آ1a1\f؞.}i=FZ?-*O_-pv귯 8Vd(WsZFmK_4Wgv\rEL,5 jrAuڧd!k5^iٔpejo&jy9\|Kp]]!n|}QXc)\BԮꊜi&s`o/ lLxzH^i׷TbNU_Ȏi7vz4QyNi'5 .SsV2}UNک_0orJQ|0M[BEɈTVCغy=NPf]"߸r5EVl]@P|r1bE*j@:#˱ZJv J:k3Q7Lj,JOI}K+±Z2W'lß,9[Z$W9E?ڹ oN;Xߢ^%Wq+Ӳ* š긭_T59ϋ4sQ" YWG FR+ %&MUבf\̵.3[10$BCRtnv畏c5رU $\ܽ. t253Vki:yu157_#dn5^Śs^8bk<;z2G㔞3랷+/}/jsH**Lb2JER9W7_?yqucӋG՗sl/fL6p܋_-7{髇/7ǃTTxt.ңruHaИSEru%ff W<~8HC_OUTB\m ľ(Ͼ±.|17;rfmU&V`!=Wjs˱u/XsԨ4}%TnS\EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE! endstream endobj 173 0 obj << /Length 152 /Filter /FlateDecode >> stream x-N @>34ZvOG>uz?zK 10 x Fo9!O0D/}(P+2,U)qMr'1>5qq]d+TuuJu'Y|1N6:0BHC;_h.c+CBcݾ:y endstream endobj 172 0 obj << /D [170 0 R /XYZ 132.768 705.06 null] >> endobj 54 0 obj << /D [170 0 R /XYZ 133.768 377.222 null] >> endobj 169 0 obj << /Font << /F57 72 0 R /F19 73 0 R /F67 82 0 R /F66 83 0 R /F63 74 0 R >> /XObject << /Im12 162 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 177 0 obj << /Length 811 /Filter /FlateDecode >> stream xuUO0~_GGZ8N7 @CJc4-mM(LT]ήRHi-Kc#2"749iL(-ˍi7?ŸINOyQF*:7Y4_ '3"%T'*MS1hḅO>=+9Lf,LIZs\t@4': {8ڈ>|789bp~3t/.Zy -\ 1X!H'0>Uyø V2'ҕ(< ǠdS HDm`Ya2-m.R * X튨U*YN͌ +b/>أl^{.)&~̋h"|U< ݪ%"'&~瓩lWئGejVcZJ7 \gx79GuLO= ؾ -{kZl `I,l=A& {)g0*<*gL߶p ?o2̍s HA%\%eSnn=x*qguDc?_Bt[%҅*f,e{mhXY.6ߵDnk(sQS蚺:)8Noo6\jOxC -f>>#\;Uz%`-5x Һz÷CE:qR?<0Ӈez [uEe&^$ޞ197Kޛ6msq^~aJi)ԖQ֝y endstream endobj 176 0 obj << /Type /Page /Contents 177 0 R /Resources 175 0 R /MediaBox [0 0 612 792] /Parent 179 0 R /Annots [ 174 0 R ] >> endobj 168 0 obj << /Type /XObject /Subtype /Image /Width 600 /Height 600 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 62 180 0 R] /Length 5054 /Filter /FlateDecode >> stream x݋a PMfIHmp6ejI-9[~]fp%N,<*\O5ؤK:_7MpU)3aW S!feA篊Uu[Y/zo5T|gx_雨_ ħ+Տrmc W5zz=6Vs5e3m;X'16Hw7ZUQ2c}?7CWy 'ӆۺjڮ/*T-I^Ms#T-ULN5P-fj,imEƦ%*D&5+.U>~R!}دbT墙G_<3._`re\\T{UMf]jN6R:7Ҳ5bfmX'ڇ܊>Q^FHlqbˏ\-1`{2/\\u6N7Bgwqxc kVT_U??]PCq>-rO&T|boYϤܬ^oUUpI&SjN7|P?ӾWlijL̯Pt:I_C~^z`U^.\cY(_U5{}>:o]ϡ?Pv9e~8~}^η]]ZKY^. kݬhO6֝ۿ.lmy^ފIaP]z7g\+mqe7ۈȜ}*?yy]9t cni}7Un` Xʺ>qV_ߡ+yCy \E+wJ/~ppVW*N͸}8W{^70<^_|Lkj|޼hbN}Xy7yW7jq>+X:n/4K W]3ibăY?/*a%\JT*n*p9^de/g͉,!+ ع+FW\ve_Y˱wVބi7qzq6O뺑Z^y*8Wose}!>-bc~#>U*#_Y+VzU qUϮg۫oE+V*?~\pճr؞sU.^W`+\1p`zA\OVv%+\ W `+UHp+\PX V"*Y V}} `+\ V"􁸂H(} `+rFhppp+\ W]p2+\ W PTb\++\ WbW+Xኳ@\QUQmW W *\ WJEVBU0^\1ڤ*ZTC&"iW1U)*ou7\ޭ3=@qnp{A\;M|jP5a IU:>1ߛ0<4/*];n+9/ZʞT,tgF_VnWr+VUgł WnW<(h-\9+\1:oLO{,N+~iZWuQ\+|Wd. u몁+-g]+U8ł WJוy0gW򂵓+py=nrI\>ۨueႀ=we8~|%gֳοp+yb^>wQ*\>2a{W՗Vsw5}}s0k YZ(tyLO!OW0nەu \yo0,z?ޠOLUТr'Wz27,x@kc֘_'CT՛P꿂L.ʀWQM#W="qE+\! Wp+h Yp,\A WR+d ZUʲp5-\ Y Hp,\ YWBg Y#x\d Y!hp,\W4YBp,\! Wp,\ XB+\u/ WpE_+\ Wpa Xp2,\ W$XH(p,\P` X"pEjXUzpEO+ ,\ W$!M{ϊiU&WI\W)rjn\5{BQq\[^% ˍ+"M< mUAeuĂ4,毀++\ W qEBip,\PzB\`ኄ W p+ ,\ W$XH(p+\P` W"pEpa W"pEpa W"Uʰp+\\*eXp+\ WW++\ Wp++\ W҄+\ WpEp+\ X"p+\\ Wop+\\ Wp+\ WWU/h+\uL,\pZJS6j W} ~/ü^++2e즌peO3pUWW"""p!%'!`oBE\Q8\+EEB!B!B!BHɅwꝖVWSuWD~/^TYQq9J"bӽBz~) 7:er^ҕ"^3{_ʿeBk?zyp9-'Q5(țwQDqjQA:zqYj\*"k<Bwm/?c,g[HWD`M[jy ׮f7tkEwĕfWWr^P38q{TŚ#0qllo鮜L_v_D^rVjyD1Pݾq9k s U{> stream x- QBE 29O" `A չ຦Tzto-GeM`Ѧ3x7BĸV24d'cNm5ܸHb endstream endobj 174 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [231.8 262.542 463.491 273.66] /Subtype/Link/A<> >> endobj 178 0 obj << /D [176 0 R /XYZ 132.768 705.06 null] >> endobj 58 0 obj << /D [176 0 R /XYZ 133.768 377.222 null] >> endobj 175 0 obj << /Font << /F57 72 0 R /F19 73 0 R /F63 74 0 R >> /XObject << /Im13 168 0 R >> /ProcSet [ /PDF /Text /ImageC /ImageI ] >> endobj 181 0 obj << /Length 119 /Filter /FlateDecode >> stream x313T0P02Q02W06U05RH1*24PA#STr.'~PKW4K)YKE!P EoB@ a'W $o&| endstream endobj 83 0 obj << /Type /Font /Subtype /Type3 /Name /F66 /FontMatrix [0.01204 0 0 0.01204 0 0] /FontBBox [ 24 27 35 52 ] /Resources << /ProcSet [ /PDF /ImageB ] >> /FirstChar 39 /LastChar 39 /Widths 182 0 R /Encoding 183 0 R /CharProcs 184 0 R >> endobj 182 0 obj [43.59 ] endobj 183 0 obj << /Type /Encoding /Differences [39/a39] >> endobj 184 0 obj << /a39 181 0 R >> endobj 185 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 186 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 187 0 obj [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4] endobj 188 0 obj [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 755.6 444.4 559.7 722.2 777.8 500 905.6 1016.7 777.8 277.8 305.6 544.4 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 305.6 777.8 472.2 472.2 777.8 755.6 711.1 722.2 766.7 655.6 627.8 786.1 783.3 397.2 516.7 783.3 600 950 783.3 750 683.3 750 759.7 555.6 694.4 769.4 755.6 1033.3 755.6 755.6 611.1 280 544.4 280 500 277.8 277.8 486.1 555.6 444.4 555.6 466.7 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 427.8 394.4 390.3 555.6 527.8 722.2 527.8 527.8 444.4] endobj 189 0 obj [272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8] endobj 190 0 obj [458.6 772.1 458.6 772.1 719.8 249.6 354.1 354.1 458.6 719.8 249.6 301.9 249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6 249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9] endobj 191 0 obj << /Length1 2018 /Length2 13626 /Length3 0 /Length 14852 /Filter /FlateDecode >> stream xڍPZ n6kBpwg`pwwwwN@`݂/zYݫ{ݽ e[#SI['Ff^( 3B2Bhk/ӻM'gkuX,,\Vff!: ]&9F#6p6u ,LO46mN+5/+# =dP2u4up15U0?1"PT,ؕm͜\ L=~8@Y3@t+`Ccc[k;Cw9 2K~ftrsژE49ھAF$E?Clo6W3or}h@} l/U_ؘD$DdlϬcWk@@S[G_ p|ȿ]{󿏔15kX98W8,hbmlCylONN_ A&".`L +IzSL*E>Djr3,B{Rׇ~&ê^ZY JMm4S1YkZGȷV@kJ67e%!L4vdg()gu[G{ƹmk2k,0J@MX5/:lPV1`G9&o$}kTӦadRxO#eZ_58?0_PR\EZ"jeirds݉M=N{w4$T y3b}&= (kDrx²d@U27+K#G{ },ւp]Pz>^ի33&d;97#ގ bSTϩ1.IGμBvO}VF:(W'RqfϐF )+깑2E(BCc֏U8E5! s^DK7(cW] toyA._:3Ik?ve˗+~,{[Z+ 7˾I\3Q:O5[v<թ駍M/dudJ-'AP'_Z̖>̍꘺W{# ~nu&U4Phseő@ VtM D/]׸H;fDo"'xO\pds.dPa3D L И (%Gi mZ8`kS^yB(Q^B!"zWj1!c]:?sLr-Pj8teÎA]-bfƧ;i'0%,?z@w6ЈAcl#1BjَC}t !ܧޣ9C1WiV[R<5P- 4 Ḣi},^p-= vTLMXh#=GBޚhiJT:v~ik_MXK ^ 43I9Vؽu1N0WP!)HBqX c-oL6"¯,Cpqc72Z IS%YI.F,a""l@k 2 :9iY*GR^r^5};MIf2:+ߓ=vekˑU_ź×׆O+=p)RykmOWT|[2kF$<%ѷC=H(rP 㝗%P =5N߾V4<m׏v{)%Y=8C!HDnxk36߄?yAO٭ckbFrpHHxy*6p}X S_:o`݉k/@c w/1s.{U61$>ks(#px&G a+R 6bu^P9:!ϓXZx+zD'RƺMsl" ,`0ۗŌTơ$fmWKͬ7=I:}I6$<#xZfώSա 9qm xZ\2K"U~̢!7;1 F;NUW#  }oH;˚aw@0܉]/1}i%.6GŘ.i_/oKwȀIdk J{U]AԀL%BF7}q< %B[dlx˥0OR{pdqBH¯h]:hk'5\Ky QL!IE]q&@|D \/;Z"20 a%6C ,ܯa󇯱;{8>DQKH hQ|U)DKGew{ĸdBt#h8d wzb{DuëY9|}r}(r" s15GQ(r]Pxq(-q}x :9!€ ~YoJ G]TLlA\gC~yIq$Y PLt/'gAN! e°۽Gy*,=|  9J,A8ʺe1,uQcɎf J~amwv=;nΠ#eK)$FEζ"ͷn4h pxϕk>YCb=MU.'AJnejnxkvd5MTr };ٚO]“)Tꊐ̏4!dwdsl Dc%GRhK‡sVB;:0mH$eggJֶist%"I gW 5-bIl'5\w-ݓ\ >ywȂ(Xh36|W+֎?ڝ"$jH(}0xǶtfV>)~ݪv!&֚-4ij5Q.LCV<1~g3[9 RٛN50apBg5{ȣfC H-fn"^}݊WGq <8㙊(Gv'4"s_f>.1MY1BY~6d27@d KÈK/;E[;m+SI)((,GbP(%Fch;q#Q2}DP1E\QxgA T)%`byrXxhC4WCVawRJ,e6+Q*3f2$Y^BuK^9)r쏄wEYB5Ht,w:%-ChnEv'D`uߩ֛3Y^E+s T.ry-]HZ'x{b+ƹI7oY ϙE6r(`Ïn$ס Tkhu~Fvlk!oLH],]22/@ 1OZpUQ 1CKdT鍳7y{m S h75#=^h56h5}b v-Fx:%AO8=K||& ~g%X#b ͆0}ԙ2+c%aƎ[֏"ۄm9}s!8CXN"6Dt+V2"EK̸$W I.{0_=* ԝeM#U6%ŷ'RryGV:B_+J h6׌Lݣ>j|XSRG/" P~,Nl(1H5}n;w~-&l w*2_cyjsQ/- Ĥ+bERkDV M IL;<2g4Bp~Fc?L`5{-lѰp$TiȦIy PʮF1o7$Ͻ<W1stH0 NNsFapuzGVg~l)#8b 93!{ւŵP?'M)6-4D@")d(y^0,%&6!re䙜%]0>DaX) Ǹ0!*ZJ&;h-gn3dąc7pߨف˺AU]D Jay훧ˈϯ{y#}:i`'|%N*k7(s[mx9[Vn]P>7}L‹W>4R=F[ƦU ~ L[+~Zh0\ۯ=7hSU!y0. v#nkuݏ@6fͫ C0C PocaCetRn7WUU`KpfZB+7#W3UL8"MᵂVP2VŅx%}'pEjHͽQ 0TR?^yh쒣4_ܷ,&}&%Z;_32̗lYIeA0_ ;##憰3\+Bs |8ICh6C$|̉: w<ڄ(\%ӟ|GL~ Jhi9-﯅WN>}:O"1;3mU\mXSF@"_PqCO' 55ĮTs>߬7zQJTO[vOe3~o)&H>x?"aNa]yfiC) s>܉{؟$9<K0(O42ddh^!TNl+5iuܵ6Y30+/#4D&U Y{&6yZgD-9w=Gz GL_iN:Orj+Coi>h鯄26wL{ŃU['=Yz6d Y>(ᰌ6޷ӿJTOA]F(#.dl:V6Ҍ:1h%S'^aQE\=7X91#=n~҆jP\-i~$s曆mJs&`4̼>&wV&Ge)LqQCx)ŒlnXT= Yi~ J\g'< WGecjk $lT@sInjElhDgLͬUOC '<7H2ahlwMrV ,*QrDz5yV:a62GσR(n+Q 0}Ɋ|X2:Z%s_ƽ2B1u&xcFIS]@>3ƯJ=,@kdmk o,}V{X>61N A}~qª+:UٛWvRʿhᦻʪp"\9zFAE˗GBvAڧ*:;8q!j vu$)jiYkb.|f{s_-t!&e7+"md8U+N|dsrMźasQla'&e-Gl)HJ-cdٔ^tNe1fuDFtvBLd9J05Iy3mhv'Em볋/qB]uPΟIN}lnLH_C1?P6jv.n|AXz(;meWYуf|xUXoݚ2>mqˍCġs \W>p,,ܰ=E!taH<ZtAjESя>#6ghJĘ򣲃pvP$>~&16z8?oeuTAh.A04|a^_3ESHK,Dy7;n[shtw$~D֯ x3K/-&50:A4;w2J+p86<!I{JIc7t/4SbԌ $IO ͺOId7_dd0V2#U e ny\dc,?(t|Z_$]gpE,H&(VVP0sW}>U+u cjK&a[;A!/`Pg⥴(gakh8~qAYG~Të||`;FtGTDaVG-]UNYi} ծޱv9xeazIEC{?G]jS,9MZQb-^KzE{K4:(Q2@W }cdw 4Uw}tI `īksi+(Emm5kk^0a-+*jX$J᱊t> e*̞]%z"(I'/2)vϞ.$5`lpOaX0A`x/"`Ѝ%l [\0WKϻZ9)/T+ZTڻ0i+ۃ?17 :D).䢍X+P`BiMtY:0k;}85V,#DCxfC1:WtXRHyJW?]IYՅ F_ D8_FzKu fJa5|l 䣅n*sⓨzZ]^HҌ*|u^O܌ s&@;Tx :}=*|@n.#UvHJMFBAkה [;/"["zh5t_ % (_Gv-"P ,C= 8:hPJ=}Vpӂ6Q#U,+/=*3~KLja_z}V^d Lt(xh[X5Xr,ƚ4os;L4k ƆWŃk#@2_XWץ `q$;xo)=V >E[YPVw̐vjbeD J\Ӝ8ټvx͞Z HLiHCZRrX߱AaFtJ_p9s%1ȵ"ٙ|TM&SY2^ |Nu/~"]JۿټMijH(#.-luGZ{ڤ]҇.#=wL'-cĽ~[,湘Ksܳ8QnNe9Оc`|4CDEJΤ̂?7ǵPf4蒥R̆Z4$ۅH,a:s5=yV@زw'wxCE'Tqo>}3F lilh@\)*8lj-bճ/+ ]HW&7b@ GNW2,H1 ?dE5EjbR8;,TYTOv`FeJu𵪕̘ܕnyRw} UDçZCKjM&+֎9>mlϟՒ3 pr O-X g7bt[zg) Kˌh_IXc [vٽ?ɪO[r^Ԩ84Ņu21LIt=^ĸ `*&T`e@eJ ( aϬ$؆FSvioсC,.%bֵmbn4 ~G7Md:@sf3\t;1GmǦ|j/D9bUSDq#JJxƷwQ̖ Cu6G%л6]-q_/\ZR}|gP :yyntVini3x-;J 6Q , };jv+.v=7}GIZOfr gQ 4[Un'[CIִGK ŋr^ 5樸#|@7k4q5ͷ2BD^6eR`Eޡ!Ng5j b¢<—{J2KmyL*m[ڎb_+z7=sN8Zx:mRT3 FW49M{~"")Y 85f-dȅM?wr;LaAO,5 ~L; |[^)l (;4ژE1DR#PlVŊ4 -^k`FfCNIYKjx+lG%qn87 ]8-J0ŗذޡ "2? `6_DLm譑JN|x$7{e|6Ts\hSovs;G؉_KPA@b'EWG`-NGgWZ^7}#onNWg|!aGF,Ҁ')<2}9;uN 2&)Cߊn!33Q/׬_T',|pM>kbAf] in(uVu~rD9,3%?&/jCP4QHb-ۧ"9ZI|Yqus_1`qEְ>? 6v~sF L-]68]vmz[pz3θovB l>8yo{&v'TU%ISͧ$teD52x?-)-5ϕ|P(}} Qy~G-r-GY6~):a^/")洏вogdm [vБjɃd)]$,|9 RGr 0dO CrmBӼO89)1;wP*v7:0):مů7 uM &TzGI(6&S7`| kINe2$^]E2J^{h1ф'0;2)_>tWMCOZu--3c8޲Hwsk:HC%mOSUqͮa5@k|2ni,,44HĢB!脧*)|`H5xmQS݆noFV4H~ ; $sۯV_ݗp ?fZU-++)IQ̩r^b |ܨl*bdaw3PoS)ᙔNkJ먯{Z%gc̨bdd|J Dh!rz#TzH;K3hZ&[o`dV-^>Vtvi& q @$j[gb!hk_tN 3n'I%٬Xbg/VD1dOMBrBԣP{97\MgvI,"ܸNl 80s 1K6m /-WZ؁>Ķ!/5{ _^>:{ZEI9].'1l"H~oD!#ӧ6iC!gdZγVMY QXc_P0dFL|Y6d?)d Z w_}(1W'#k+wx閱PsṟXu`ެx}WMh40Pii[oZ;%L;>V1gŧ信滽e@ղ?͐]\Au}dN}Jń$mW+Ok~۩x#OQѳzZp:8{?SnB%RsiТۺc \MN[zGyO$d>}3;&JKWSF4]iRB*Գ G1b"{w) "Y<UI=dCE]>z`̭$[d#Wy󛭟$ q}VjJDr`_w6\%&o܅;t=O<Bu%*: p $GK"E-9)lIӿbUmy9ymLRe.ϪŐJSg<*ŸjrRznA"/LBc AXA[ϟ#r,܀>W݈$=F V>=\qdjau4H{[`~YX w5e K [mN?/A6Y#>njeYxZ.t\?O endstream endobj 192 0 obj << /Type /FontDescriptor /FontName /CQIYRV+CMB10 /Flags 4 /FontBBox [-62 -250 1011 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 108 /XHeight 444 /CharSet (/B/C/D/G/I/M/P/R/S/T/a/b/c/d/e/eight/f/ff/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/r/s/seven/six/t/three/two/u/x/y/z/zero) /FontFile 191 0 R >> endobj 193 0 obj << /Length1 2591 /Length2 22097 /Length3 0 /Length 23572 /Filter /FlateDecode >> stream xڌTj !=0twI HttwtJZ,֒~i(4-̀2 Wfv6;FFb@h I@7;;'GW ?Cg@ H:8z9XY#ޜ;@lcn (ZM6@WP Y: zxxڻ88[00*63 7;X l 0`;ϿހdRWeuf.637ג?F4Y:ܦes r8ll?_.6ے߄dRQyc^Z7W(;Mu2j]M 6.26@ 5Ws뿷o+\l~=+fh|ZoO x%Rߐ s_'0uv6B>[zV+.`k<V_U7JF|V߈*/eFV߈*qX#.oE7sQF\TE|\~#pt]7Gt~#p<A_֙F\~#pfΦooKr_Ŀ 0Lf`ކI~I&@pHopDwr$d;agj Q!Ki;/;(/o~_n ࢬ5XfWeO5? T~ Y3s]ACw2`g8VߘLg9vn.%N ]z/+8Wn vrwѸ7-oֹؙXA wXj crpO㏭{{^@`'f:?O3x2}$=HK悡mw̻34}2םoœ1VoĖɟ|Ç$}4טmEZ(8#E$a}r z MZGg]_]*EiAE4fsp̤=gong'^c8 }78b缿kqtRB`NH$+//z~*$FeJYe`9Hш5Ը.u$BwkJp)UqZ]k8I:,%tYڦ,O׽fQ|~;}g.nixOHOʃA@:i lT.Pi=4L'B⁈}Mr;"֯\ccsMKʋהBkNiw]kqtꂵِR </r-ŋB.yٞ݅ʡ(`/{|S ;c A!a[eeF:CZٝ.Pl QhIS7šj ?lu~~`*+\RS< ]z(UCX(yQۮzG-&coʸ}IHXS.{gazlbdjǮ° >.ba;0j]}ԳeT󚶇x2IMl?pxpF GdXPPBTȈ2e)@,\bXs#V&lةI.%qr'){S6W4PFEcSE31ba I + z0e`hm9:ڸ l5N\PfL:̍Iq4*إZIqR^<5HTA:=GsrsĉWѬ%h2 V2<.4#}^ԅSL2J|R_Z3ֆrB+EMDxGs` :<ՄH]' QyR49+rLӖIës" 7'1\w: 4liRr0H7!ߒW}VWۿgMĶNZvpV>óNq4FI(cִ"˪"!.&|aEI} ٬v$2Rz(Ew=l3:)Ah,:$`vjC?(:(#cϤb?ķz(0u"GSe?ë́ EFm0)ۧھ{L"]}eH%fQG"NWo_̪ !SYZљ^3^a{LtiZ&ATgc:W9UZj/7!9HaećD7M|~0$[W3u&5/c'{U3U8`N[(bP:'ށbnX *V*jֆ S_ݛrWt F  .FoO\,bAh]$JYބob1K JCU:eyli7Av<^ q2 BGjc֦hv!t'wCh;؂τi66KnfYDݒH|rsٜH^,9_Uf8Opk.ry|d4IFk!QR 2:xxbm"}㖮[=H"6^,c0LŮ {dύʍt{JD){~ɡj=zK0 !.A:>>Sas* ?AJej&žbg Hj\Pd$CkՏb>ɷ*ъՐ93gd߫\E},x.yP-Jsnvv(v)Kg~8TIi0<^\qBޭ)̐Sm?c\!L+PuT> |l" A0"FUb獼G=ˡ{]-X%Rs6n+7X?xWAhM,tF "HpkalRNFNE7 Q#u0qPD VHRcQ/\i\R[:bH{H}uqt WNb^ڎqP&J iwVkTV1( ZA)>Y v?gd2 AGQa}mZ7?މRU\/}>X[gJ-{y\쟨_N]p.AЯR[K~ ܜ;㘉{##PHJG#7ა7ì\>YP3OVϦ* 9~jFF^w2ԛh9>UBi\+]9C} UBxkH| >¹{p+% x$;]D=1/7aPv剈əlMQ2Q?HD[ީyrʅ~}\%æ䔸^zܻ۔3)3cOO=1V/uUhxjpa>j.UgBs1Kuk נÃC`U`@>th}[ԫ!aD!ajȳ8gA/S[ f}t, ;8'mAFR.ߚ#)Z]ҝy_֋G] *XH.AeǠՠnmWqXf%TPrt(q؊NB^` YID9k*IWuwDey3 3 /Yc5 P(؊}, go]Qw-Vy`'b[${^Q SBtaN7&c'I{?pJc L!Yyy84Ɏb8j­ eYY\3K2SwG0E1tbRaVox&PPgҨ@M8LkQwJ֥z̻^e5=ْIA2~70%Szxab܁ ֧艐2E3{Bl0]pq=WXE'竪r'ަT. &WQ /U_?0XNx4 4m˛Ci& %A|A2$:5}W^^m38Yf󑛬~G#)eK1+,]g_j?=6456!.؎ PuEʽ Œ7F ׎_o)4YB^/E_ N $x"m=K DL3-dI0zwh YL TDb0 ]1r'4iy بح̽Q>']Lx9hH-IfiJ*e$7$K?sF./oo2:Ѵ* ;\sl.s:TzW+A2:Npx"n̲!Yar4q'dF#1^4*Z[͍6Dqg8Cl/ȉ~yz۬r~N8`ςE7-:dHNw3/YWg`X%m,װ'+Y獘ѭs  PO)?G8=R+~kj҇>7bg&F_do <Zav䝝ċ9-Ń0m\OOc9cJ ,[kB$b1~`aj1--jޚ7-r{A'WL R,1}Ma5بbM4#OfTT*ikMI-=U/\_`lw/e]xN w~5>h5k꧉y.A(( Qn.cS2b\=K%P|,?!Q~}{g𩻠pOlWh>hUv%WIX"|'JS?MD&4&y߾>FJR,V1 c\iX rDY*Fl󞺲n5f^&g*U׷IWmPV/\9t*KK_L3tR:f|>GQ0+r_p*R\!Ky#NCIoesϷ,K2^&~2b/}~-}\1}sŠ&/ZY *) c^/XX7*<DZzT+J)/\Et?zd-td\pe 6XK{`n!듕{Jpbg(/2Z(E, o7Nt|SZZ^MI:G k  [gCn;2УKa7j "Ѓ 3<*ϭFpf6,l TFX; f82K@RۦU +}_z*kbG Zٷus͟k"s Y4-&>*dU\/>ޣvزO;?GVvNU>*w3)B"^ևM$}1]=`uMH L9-F J몄&7:Ș,ʞތ:öo;Ff%}p+=p'nP8Wy wN$6aCb@x]>Ee(r Rd&\[=V)^*Kҋ׻_79=*}Ʊ8)ۅ_Ev;\+3%&mP"r+ -=hkMώS66Ǵ}@#~W1q7{\Ξ.M&D| 꽈|! UdwuZ1_ē@hр)nqenJjoP.dFtm}aA*VG>.rѯ>K&&hc1.\,poW 6+n:=^UřNMPmgtH0;PaCG@${f +@VftKMO,hH*gMٶJb(|/l85gw¹PY1B9nND@wq[Z/.'mЮ1BB\Z?\od,ծ\]~ U(NW~MfLTjK>3QkNzeٳl1)151VaȔ<\S %l +/=Ji<}7Neb?Os$ @KJ\]hNFzF稱) e76Fm+EiC!Us1r' owL' Nh=9N;='QP@ɺ{c@V% ڮ<5z-L9 ,ΐsz;iOrCLSa%2 1+M#zil5M52bb.Az䒊PW=03 r X]$d4 :ч FRs&hd~o[a9j $FCLa5ئu'7PVJ6 |:;x>6v / ]6Wf lA|ft,0W'RyK,vnmiOzu?`XjV- }:ubYR@"՞̘ YJ.j_b0PEޮTZ: K0hZQQxYF'[1H yX=N/,]q`gY,h:*A޺M\5Q"7iL"=q35@\@#ZN 5joUN-:Lu5w4thl&S.*NbӴ~l6f/] *NND»MKC&MnW%yכ(&@0h#?ILDXƠ)٪{cpyf<so̝FeVNT_;J!!u~pYEqls׫Ψ9pwzBD-!;f$]LpMo՟APYMOK|MƐՙeXn~y]ڠzv~:1t.,Vi$ ?V:T1N|ݩ[?\RlAsxbI $=EUƣިUsHfL+^36%o{#[^oS]q-Q O%t]k6}yr-d}^ M{oKL$puTy3WX2#- BAd3STRUwK Jr۸̑iwY[CNjYPQku]/,Q})AqYhK=x|\_>a1$X [18EYNAokP\Wco B ba9u|Y=B7Nz>;c#=q!\Wxz,) 1m?6Etf`U8b3Hs(:.͞VEѭrhr˱Ȯ˨_@"ȣ~]lfnKFM6 P[|}E2$$+;\t&u#+[Һ;wi؃q'( ,ENS!HϖY 4$yQՋz{X"63mZbW,\n0+1FbcoѼԏ]mVJο=":&x*c|VÌ%ޗ wO VQZD]gQomzl.$.5&1E-~ܑvS@xkuL6)8$f}E<#{{aCi[6)g-N|Q=CRƗ!Tw' >Ѹz`l폑.4RU{1lst6?7X]/=F@Kv׎a^B7kCFoS" :kv߈WD5 oS |,OC U *(_M:EC>A\"Du  V ӑ'%WY7pVkm&tԕKڸF; _!95 BuocEfο*zGho2^TJaC'MH= rV{a$)NjWQ],F=w|>q&u*xu, Ls^EVm5C5\F,/h*y\+1kfGÓtOss헃}3(~DvTfyL-\c! O/=l*Z"Qg @2;[3#xQF73,}kshi  {FM`&6Bs^eb6b8JSw,C7e19;|~ 8`DƟ~75b\K6ʪ[}ndG`2BWÒ(+3ÐA&r:& 6"h˜Y~;k2JM9yvI#Le]' L Y,6hظv$.nCu:x< &o`QĬ;qS/8Q #zpBՃzҒKt2ǿ}6uiøάy3s S;捀$45JޥljC0K=zh>r o "9)8=(cJBV6F[4Fb֓ ki2~TׁQhet]'aa)%cL1g6vm'hYD^5gŽH!u9lkjfTvca4YM%GC~cv,[aOD :{FSAs?',,O;&'3CgiC-|u=5 QA(0|&ڶk:04Yy-A·ʵkU#-WG*Ch{D3m?%W4^ QL+|tbzn|tN%apQ y]\%f{zҡ%/ y,hy%ŇT9FeNs~TG *d˷A(?l6 K%j',9<;yp4"IL8IfjtF5k&'_hJf~m6^OzG/K{{ٰ鑘;xFΰ2c Y"-v/]f. NndB;JۓHMڳ2E6 )@X{-얷{Yª` sMPI❅xErP7#׫B4Z?SflU'/-ER6h>bF$LRិ'oT˩thbIP.?w=$u 9D?H~*/R`ˈlY[,FEuu*ro5rn#U8 |涁a4(2 c ~х ÕW)&٬M?R"mRH 4 IoE9d/1ƘK29Q^=/#1f_Lg!jtagxcNCu/.z~sg&ĘJPf*J D'-cdȖ.aS_iZ ZpJ 5Qvmn}n\|=ZQt49WTR&7Ȥx;/󲙡|I \T܎L:w ܮN G$\(s"޴ |”0GN cEp]RB9LmwfsCMmJ}+Vr-"MR$k!3MWyaz Wii+eD`u8غKutv_fP8ҪpPL2v¯OXȭ]V`T xC΁Я`ҔIit[Jk"^4׺ӣiI)mPAERk|Qf@M3dseOpS1o];i?đ74Gt\Œbԥg+dP: lXdcU^ '~g7l7a ɁڃցnOZA  mvx"9RՔ?YZ5Nzo+;CH> eɲs H5ft{ YJVq)܄ {g^!n0{HE g%0@ɣ-`ɇC#U: ew'u`tY$v[%YlZDecS ljd2 yE.4S-T7 0S 0BgXyNEN>q5 Y[gXF??ƈTTuQd~{%C}Bƾqrj' C~e\jt^P7}Ae޼nnpz^%>wxȥT|HfJ("l}&{/X-MVPK.aT;+0e rI]{PTI/ݤCLC،U0Hwy-8J_S\9繌cEQEJ5l4Db5jI-ye'Z3$&vfm x^<߿\ )(;NhLCM$4эmыN nOM=)]ZsTxĢ#FƬŊR8 Dz\!){k[יwzգ'JJR9gtʏ P}gu/FL\0ύlAH?Dfgx` }۱[,{ %-RTc9+hQ|FŬ!e][%FD ="O9qAI+Zwl>較QG3?xE%ZҖGHG`N%Ռ#OÝ +J|oͻ\@$z;m4#ޯN&..0_l?8F|dg1zC2'VVImQ;^2w, >h)Ϫfd#3B8$ν~;͝B(V2*KEBo-٣$~j_I{{\4T4e(>LQqRʨR #A$QZ)uR̡"uw㬳Lp'"sЁNNkk22zBSX/ f%GԌi6XYJ)ކm$`X9}%<]OavT)hr|.\7ITߐ1:hE{US86xK='(\-IU@latkD'L|!rdSwU b#b?+R.{#+'`hcI#\u-NJS/g 5*zdD rKV(АT72nQLݜ,R)emE_)ݓՊ7Ƅ)ȒWa3YBb =}w}At9ێ6Ag*c؛ ݏ"V֌t*9-Q5C88\dG1ըꨘ_<'Ȅ|oc&Bn _2*l-7K6)UՇ1rB)_دFVj3r q+NT}0YIef5;}PlwL6ƬѺiʱ!zوz~<%緤ڼOWE]þh&e}\LdV"Gcstv_Y:"6UU[5=sP@,'46^)뚔յXq 7)ۂu,fS?SH@]yϐY/:ZW]UY+JUM@M_=gH;Qh*Ƌ^{wK]8H? O0~A²Y:ҝ:3 Ǐq]ֳ-%'h牼z? 93qZU~w,*u}ٍud#d^e+㣎})+ᘁocޒ3Ue!5B%_Bii^FQg DW`=dh7/cXs-{ 9k@=\-l I̸WO0=E:|iD")&'^E^c,f_ɶ(y-A+7H-Ҭ^@ۡG F1~ZI sB-p1)RʭS)R2ő!}ޏHjowtϐ9=%bR |5i>uWqqMa8BR"vj !8 Lڢ^@.ƑRq[VwY Jw\ }D歁._j-&< :i9^ x,pyt\ :ͤQ~U_t )Q>|cm8xCIe& Ispuy=92 5\[= 3<eI]|-e+7ŮҼ.Ŵ%n&Iל0z3'azsDi|[eƋW. _>φZlBcm}ߊ`ev!K۹Y_lY Qko@㶘^K8\kr9~|ƴ'IV beVuPI(0c.ЇXgxdܳ@2u0`I5l~QυbU9Q-ˊ25= pa_õ5sGK rSBXƾ!g&1G-#ޠFۃe |[^v';mCƯϿ.5lm2x=( -C;`0*g,4̖xP.L7ZG@օyLR LIR,Ekl|g|):^38NΥ3ЂLbg)i^Ģ"cmُ:bmyޒQyķLRr;Jt|2Br -R3xoxeG\kƙdK }˧S 2< 75t6B{RE)BE8c΂m=,/.ƚ np j?gPxa=*ĝ'>"T푈qܮ  /}s APZGԵSYl g %Q) 2H02,<`#pc5I?n4HRS_ð_1]3 \0(ᗁՍvs3z,q/ƍ.e$C..]N]{಴O]Vr1D:nu*LmHmg P4uDslµ]mAS%"msd([DgC85\miI:ar)LIK[JnmDKoTGv/3EAsrAOIgsMH6a'2m#.cC8q?!dH E A ~ #h~ _'a*8wDĖ9+xzvͦ,RO']acSr;X ؃na'IZ ^BxvShEo ۊvɔlgD4ŗ.˷BM9@Xm6 TI'm``j@ Ɂk4 M̀1듯2fkQoO/_zjL!\oځdH x_l:7,=JӪ)xRT{12vjbn;D4[Dc)4Yەۘ3]`Ѯߋ:U\?@h[@؀ldVw*4?ÝgYsԵu>N;^L=?C\{]yp^әP᯽T;ٹ5~?ne/?+FDpE{h95q-\]Yy-ޒ Wy4Nt$Eqr7S\XsH42qƮ( q L.O Az7M9[O:kўP*XT>X7l2'x^Emeъ5P-A)[GB_Ǚd6 P&{zf*>%/<ι89.ah>ǯzl~roჷv4r gNwVheE@EKX\fMf[ pB'O^Rn-u)O$!Mh-,% 9HM\ }ZψJQU~eXzi/!{kf8[da͋zco2x`Lk kp8eFiGablyL&;Pp|\ >O=L* }r6-w3oHN eशmӑPV-pP:8 ;LH ;u5eP]tE ۃ[2ӄz/HxJ^~xSpA5#%MXaB ~nƵvD Zwa Љ"/^37&vdBQWn`S0JBဪ;󓗫`=ZW5촢{|Sv;9J_U p?S|".s*7zZ߽ɔ aϿ `5~'vlo'@{Ұź*r>V7faXBr,-ǬLtʺݩ_͝԰u*ŒNM(3uU}{Y֒m,TUk:o.9+fīC~¾-t:j8?A`x$|hKMJs0)7" do^d@!M:Vb MaxJ K1e<Ĝ@"U"`o?e@MDtH1C$C+v\=Ggj jZv껤`??dg0JL:-6xMs|8N^+gIWZn'Y,Nl`U6[Ǹ$4°>>OK%$"% T{H_8lٲhƪNf8=BFn R{$=,mP}M)oV:;VyN{XGQR)V1J{љ1o6N[ .a[VZzW|1@}QCء"hhhpЎů٬4v57vfq.:4t~{5OX +H3]}PYX)e |Waj9}@r2Q|"O?k@;d]$Qc"MqW)ok擾pxkX`ڦjihLx]ws̵3 G&~PD==%]j3q2UM1EOX^"=3Xja#.'bj ]}o"uD<>#TNT~,0j,$24_9l>4a̘qZS' Q/^!c9x@w%jw [b5$qXt)?k *HfO\lsHx/4Pΐ}2^{7Fۖh+& ZL\rgӊAStMtI|=恗ow ܇K=Ep~T?Xx+wt)?:?K%tOKٰg^ qZv>W~oÐT/1+:]g`,Ӆf]{f*yQ4Z@=xWIv+^LND &.ԏXlk`֗ GR%;s C[]yJE"3opyҐM-ևZhǏt)70AFAX Gn׹ia;hm᥁g77vb1aagɡ@؍z{;6R3B%I+1OɹDZF9]4FW{5Gc6;j.(Ȟi@jHݲ9L!DG\)Ku=4DX,9[ aY`\GyUt.ҳK*E`i0C-T "ޅ  endstream endobj 194 0 obj << /Type /FontDescriptor /FontName /XTKZJG+CMR10 /Flags 4 /FontBBox [-40 -250 1009 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/V/W/Y/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/ff/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/question/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 193 0 R >> endobj 195 0 obj << /Length1 1667 /Length2 9472 /Length3 0 /Length 10555 /Filter /FlateDecode >> stream xڍT-%h ]4t48.-] -HA;3{]N9FMM do~mqs d5<윜ttZ-/3:bA =^aO^&> 3 9}oAa3%O'3ONw!?3zjPԐWa}/6^7@HP ,j@_UpY-`׿ޟ`w.'тh-',7oA]lmp3v[Ou=_i K9` 0HA-mFk;[)?ڿ;C~o'&is8?)ipHY=qNN@t'!qFvCv=)Ԟ p8DCo$ 8 A?)oiz1_pX >erq8O9iODfWS=NO; >EOsW>=N]6H=0l>?co.d]v]%Eƶ=&6E5rT!`R*iwiSBr령5%AIv+WRhlZ;:6t9.jyn}r%#!3;o0J&٢#Oe~#}c|ƌ3}q9=Hǂ#`;rss#^һɊ$^ WFR%r2znh\;Ӎ 3>'@$Tx"oWL›yp*l̪yTͮEe$cհ"JRgco[E0_^&o6ln۰P濷E3>0}9溷lKx|nasgd>>@l%) {LJKfrdIsy0Lj02*w[Я7 KK*s?ɣD4"}]~w[s6qvd)^b)bH`t4Gn,TK \kGpB_Ɍ,_m$֜)5 z{{mC"= .`MHysKߩ5u}bVJg NY/__Q;on#ɷ!D|!$R XE?I8I>iN)~ٝ"#JOg7͔PBn@ Ŀ> fxagpS 8hHz/pKb ޲p$UT3aXbs!DǾIb PDvY?>n9-lVȓĈ!Iw 42tJ^{d(R "&lSζ lkj &` R#4K~p":pk~?$hl&- Tw Ho|$ e$ odd}P)3BWJd>Ú**XΈ .x4Xh;?iΏl=Z5;`U<}öM͛Ig e4_ \195Ȅ2&> #wK# /.k8E:%FZ ՟$o0;H~WL*)!GO.0Jm5iP6:R#~OnpJqCL}Tv,3}3Üӆ{:*' 'FDd$zZegQHeb&YP`N(Fĸ%j#؊Z)T"0 ϑț OQ>2]O4{y)02,HMՐ bەVM='*}IehD˘) 幛%߃Hivm3A{¥#Uf=Yy$\ r G!8AXcJ2TT6oSt]":v4AR}*y"48_KNbg+"()\EQ$aQz!C1 $tUTzI;>\uBRo* %'%t㲤߮UƝ1$??ʳdjìX(OcͰQ" 02Y*o)dPֹNe"Үk ;8fhOqPf탑fOh*vgX* G]@~p{TTKKk['*+y̘0w!ldރu#aUkv)l/O"R[ >}1Ŕϛ9?2~ŊbxtB[Wkm%a]җ nOg{Vgه uL0&)- p61pZTOj=~%0Py@vfgtڿTj\Qj -Mܸ_5{*փA4U! Ryy4Ep Ѵk`'f3wn hVśV Òy}q+*aN} kljC2ЃCTTI^ІUl26(7tx譢1]eotCw7Ji^~{2{qh]{w@h3=gZ?ue<7N,um2 ˓RU3 aąU^L)M6L0ʢbUkkY>_uj%7a~>B eI9[ۂ/0sӖo9}5~|eR {a\LdSbP Yu#^^ʛ}/&>os+YA3+:?s|˗PxaV?14b?mO}Ul#ў{St !b*]9VܐJk`s׺q- ]VLŹ_3v}&}>`掐#S*ub.ԋU^ W=|+o04 e ԧu1!K>C]cFdwDž,Y_ JBBNX!dF> ;e4 hE=N<@b΁~*]D^:3p(&X%k})iX\ s|q-3(:-ͽƯ}Ȩ_J`D7K&}g}!kW 7s츨o.?GDdDQx ѣ~h^pYoSo{md(orF S&jIķ1 =n+վTZ~O$XpszmmgΓMt\)>, k'HSGKVkF[;NuXG&kxP ٳa,j˖Tdx[;{ltb}]D5R.FB]VjI.nz[k' d|Lm/ >#`쉀f #9-9Z."~Q?_=hnxsG'*5 % bzg>2 xQC\eU($:O&Ȍs4ݡM+پFRE250ʢok&{2+0BGG11[(PKa_u`ͻo홯^XTI!ݖjjmG®ftSY# (}"rQ{\Eʡ@Ba)lA55%ZBT1GVu~R2Lkrf6{ggcQFpyx ( KH@2/p3bqPD!)@]V $IèJb.ANV$ {ӌƥg .*8 ?kIutK"izg>里>B\][a}(W.;$߫<Ȝ*0ӯv)ӑ#mtE:r* ST_(yqw&_$0Um@ns[ˆ.FӼIjk&e/>4^O f2XLG&7c~U3XrIhbw &i3=]L)dYv'"[ꐙo+9Brgߎ>^<>kAZev?? :bw^oca߃O21-}-rb[ vdl8 N~Ȏ !s\ICx;nRsWxz[h9μ'5nL#*1?(zgZ;V۞2ڷ?L[pKhl bu8-Ƽs&˒h2VFcm3ggW!zR)PMD(9)S8=i=wZB\Gj N FZ}.ikŪbϠd67}QQQ}߮g^gqܭqUXBh@U_?˄U=99J!48.I5ZEH8zmBZfVM%r'+ 8v*)ZȀih!j/_`o_ԇ@&Lą FNayGDX!>Kn!J=bCmOftt9A3[&Q=QHlb1)S"ڢ9þòMn mz@bx{LזR fj Bh)\ovs4q̢5=b#B>zj-u<~tēl &hEzc}3[j~@OJ)wn n t?q/ח>ff6?A/k ?Ď!΋]NXG`8A[p%N4%"ưP% )-J:cuѴ_:Uw)4 |D|_|$`'2c @j6.Y~Y*KyYO˴wAХ_571/kaq2z|kCC$& $o ~nn)e2& 5G-ǚg{#E?GwYEe/L/ߔxL ow`#&K6+L&Q5Hs;*5w|''SPysBm0>{ԽYҰRJ-;&Lww & @MvrVlڦgi`$,J*1j DâĤ@ax[|1}XS--8iD+BtǼG1^( +=nzN=2{Q[cݴ?;o [fu+L\aPX,ϡN'>8\A{y_:ptYQ'Yy[[ ((Ɨ.RYr/u։E'W?lu(-D6TR)mD17ZC'f*հdF%owMpfÈo97WwH`,%Rv=G:VvnkT<ţ.EQlogrv "Adqdf֩V>#PNXcԫ,*)՗E|+A}p8L su X6$;˶S"}fz0l1$׌1;t,!q<@,OW޸\/*5\/Azb*1 c:^2Ųv!˟{+CA6 #ec- tF{wEsu#6aKusr#9V7G-h&\TRH{wҎ8weu'x\^ p4{JThg?qz9R%E3{.A5HM8۾b C`[^I *iL{3Uj%*]R TŵZ)N*j3] -j&c2R_dw$w;5N܋*+MRCƔs0 { bEwH=SѲԷP D;gZvp.bqA\7ih1f=:m._2k's(8 +;Ueњ.a fY#_듋FFѠUNeN)LԌwLW0C_hf+sr5t_wڔ$ \WLҧ-BC#ǿ˺U=%#,A!,dpVy-Woc z)R`@3#Tlnt >,`.fa1m7ϓ.{w&ɣc8 ]S'(m}!g()B<ګpGL!W3Mܪ'sf 1$dR_)K :iJ.+Po vT4(LM//z6P_/c)anjF jƯnu6&}uVuFUI ɥ j }>~SwBUu-/0E}w9[}4DbN*]AWyT6(iܧvJRs_ZW/kixvA3K_F>׮`M}[8}#VfeyR{>>,D]6lfbyqJ.-xTiBޢ}ۇbgyTS]tyV#ׁQa[߇۩v+c&ܒ .]CXRo1u?S^𓬕ƣ* /ԂghM2GhۨJC`k$ö|+6OBA!:ʅ+$;ʋC79~LoRF'X]GhUOsA..NtMK ¯ "ɑQ$JITڇ}4"vDV0edO͉孂-/{HSٞ}Ї؂ީ'dO瑏ڻS)J1\ 6PSJjrН* 1#r{ϟQ4!Sp_]_]/Ck`KC "/9R`9PT(%9TkNrA9<ǗLeC+OTD7W,acqLqyo+CXKzwڃrzlI0]т .-/xy^P7)"w&KK*uXlP/:ۜ^Sf|%%u qsGda sE^~} |C~1jNht1d&Bݔ"|Bsi=RQC>]%pُ J%/e(mPL"i/Ц2g7 c~3FK%AWEHÍz~5~D\o_{=4ޒмl+es=ۮ[__^/WLBBr}<7"R*`j˨%\%6R4O6Cz8CO |Y}C$;C.!ErolE.y y%kϳۏQPZ]EiLxko3gNjaIQKMQfx2%_Y hmQB' _W)/:mO ] endstream endobj 196 0 obj << /Type /FontDescriptor /FontName /QHSRHN+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/H/J/O/R/a/b/c/comma/e/i/j/m/n/o/one/period/r/s/t/two/zero) /FontFile 195 0 R >> endobj 197 0 obj << /Length1 1758 /Length2 9913 /Length3 0 /Length 11035 /Filter /FlateDecode >> stream xڍP- A[`;tCwwM[p\]K KGf̽_^uU֖9ki(XD̠&`I3 SPq@V FlF;:Av|rs;?s~ P; q@;G#@bP`BN(4bP{G2yЛ2@DlSc;%yEScvo-XmX 7%@vt~7 P4+ @'5wv3v )9 x^&#P,3௽XA+w"ƦP[{c;b(Iʳ:;3~;8A]!6&Tn Q?7W{N{g'V'~ye ;31- w}G{yvP7;9wf.lv_.? y9`Ԓwzu{Fo/{= d 8;}mo 4O|w;@O2x))(K06QQ; pwec_U 3x,yS_Ol0;"Y`?rM@J#O࿳4Ia1Blg5`&. xv|`>K㙃 >g=/ c _r1??_v6`sX_ ~"gBiv3濝Agӿ=/-M]pc? v,BMTl Llk0x-8@Jdx%8Љ)A)H))^0Vube~w,_% okm4.<ʹ7nR5=%߇CgU~TpɡޗLhDNdR":"3✸cN_^Md=2px鮱\.Sgwj'&%$M%*:Ğ 2/KAoe5*ׁ$~pImq|)M9V{@ 4aU͌ˡDa>}غ5+d<z>M̒>.j'=]Ϳ*co&|e f1J-S՟ /ŷ;d-PF߀Hb}rX^ԇXH[Lt^<{_F(ST}׫C[j^A>w̑I^+v_JEE:f̈ bxy$4%lڒ`}[Ck@~nRP-{p_ǚ_=Z-2c=ķ\QNnc ҄8J /r\Eq/ 2&M|]y ylHŕOvv!Q VyWKhیœlL3Vf(Wi!l'I ;@:FE~C߲1| F&__KG#Rl !'IƝ;4339ď1$=YbTI%QQ&ICuhsQ3R"-WGy͉EnZ:+AGgӣLHږ~4ؖi+VJSa K).ፋr]**>t20} f;z'WKc { wv%K3ZaafkX 60]<Bd*I*:%ѮUI9gv?Bo(s{>CSKQkƇΗgo约Yr>?=)2TiLK֠hV6?$쾬 U%l^Fkې3\ lSZ\I-b9dY8Tvmͬt${3Ʀ=NE5XF=WkP3 dpm);h"W/zj%i+UV4k^ MCT׏z}󆆷y 31QGbe99K+-~Yr!J1UWQUQ!JۙFԸl& tV;2DԐmVũa|a<:EŸ&C #r»< ZYe>otlT= tv(]T^N+f%gyi-bDžJlHHk [ϘBr# P߀ OEwbu^MXK>cu_wMb{{^$ըp-I.X& GRp4ԙtOh!5X4N4e'R~$ǎ toW[`:;[dvfR6{xX{J3z,[%6ݵ|&#!B]k/K7ݤG {QɸYe,d+ͱj`"_wˍ Cf1"Mu@wS9$~z_k݉nRS~C2;J:A KF!7i6?rp+hQ{ѱ4, |R:` hb6C-FG,x(!C1Czt/T; ߦJC(chhUȕesѠB\0BА,$TcS*2cD/ှNe%n>tE|"tXNF WIȁ ]Y,0~tK+ﱡ1I.TNr]yLpɷ |dwI X4)=n#;՘Wq L῔#^! v$ Jm*֬^t +?+o5f<$z됎R d~%=՜U6IȻ/f_xA'6.نѾO wNao(ar*M^s,.3wꅠhy֡Djwj#:ǣ8BWM Q>)>z=p}<쓮 ^Q~L4h eH/^Gj[$Ջ93JpM2?1ͣkOo|as୷]>ӛU1 7ӝot/?M }]SE 3|W!v}*ˠVQfSO@dtFքe)n|n6@Ͱ{!2l,_xNGlhA*fs_BezKq_i !q@k+%dN5E(_3S]Dʫ}. Ce];5jߕ}uýT- sh֏y˲-P{f^ê/FQ|Y5b+\ ݯZq}{<ܒiYѴ/Suh]Vg:Б<@&!&Aj*b$3crp4=@53By'a$C~=^;6Z;i8{'qkw#eSNs*of/W?Looҕ_cf+%WWiTu1lbBz(ojZ5?9)%\é~ѓ,Z|VoQǒծoMm!MF4ԡ):Ϝ17BձOrs)^E\?9`2bU2%!?Δ8cǣCc)&eSK^<Jc;-.(Faz%LA#W^L1$:&hU|} T)Aկv 6B0(X%0m͑̌O܇U/4>tkj#oS1%VbRfl~v\#qh\)jh3Ppg>=B~$xSv"7t&?P$w$-ݕeҴ{kIFU0S^,]醾L4{y֭) TxTyCqS[P+J[/\)t!+UiKځ z0É*=j5p4'}INOvip7VS;ёM{Xw-ĒxW5ҝ.UioxqzI%QFWs=+UݶGa戯"G5t5mt,/0d qaw|wF%W2}ਆXeA2LjCE$E[kRrs}˲Ya CDZ ST0JCWsp}B(B lfsd;3OK5rfsًw*0y/bN5֢-"!˱1$_DR#l(3.'%s_L 8wK3k-DžeLe9Eci'hz̋HaGAކ@f"!̅~Zk}fDZ"U)j31$Lu_7/sHY;@^\1<`$-vͰM;wlv hHG[@ZA'J[ f&7o|4;Nu;)`6}?`PF{üѰzzI(kʽ+&**- {WݑeRK Z-L~\N^RFOVbz]QoW1̕\VeGCɍJ~ث;NN [)'eڤH/i?|?X5(Mځv9[z UB=eHcu.LGt Eۺ9H:E}?LL~hXQ,eXS^“Ǩ_"zeȤ] S3sT}B3<\'HBb[)^aeK8C@₰0n਄>kK蚚J5mDPU86VB558yusep]7X:&hBl1q? W˥AlSvP hHEo&p<%?(5u/[şN DM.wb$K(GAԦ@`8Aѥcd{NkYۭ,03\kuQgԧN 8$W7z$iڃ Y $tH[/[1 ^9T 8K'rKt[K}.rJ5\X')17cb [T%Hm cPAg25niHv{>%Fe>^I7q"(z (?T68 )gAw՟-hIä#K5yΏ׭'ǐdۣb V~椕B Q h:wb ۷!'e\[>5LCuK?wl~8> M.,5?*rE*pﻹpD)&R찿ڭ6\ǜ)kdX>ee rZMq H fh!e /gNkNۋ"O3(v oͤ- lݜ.I@%x&3N)ѻRrgg7zpjUWӁnE0u$. ȹoZU4pwܸ b28!0pE"+ ΘĻ?J  PEhl Q݆ŒI=:Pw3(d  %y^ dT>vƻWhWL=ѕdt]S:> #2KKMeh]~?tFmDk"C0(bM%oHm]KB6hKlzW(図XExR+a,;H*:YP8k ?]tlm֯7NI&a!M Fo.C*^zpo>?疤.:t,^forD7|iwR2'='>ЈODK_?C@K'v?R [MW]uY-r,l-Ѩ1 1.X r߻jBgA+a~ض#uNКT<|֢aZ'{Nx(r=enV.n <0NWXtUѯf f~Z':{IokmNٳ N4:֩l$>9Qԋ' M /- q,CHjjыkks8Z1}6MЎ6tHK.^xx4>XLR 3M +bcB]BX 6ŔY;UFs'Jms7$nfDtP~Lfc!ц SYc)(&'෋- ;<Ja^K>$Z C6FaE G S]5h_\fIX Y]惡J|r1[Vq3 yu7 x+у.9gH+ (0MW|lѲ{Yx@(-J'@Yv3ĒrC]W$/0 .SX'E LD'XQr,u5TRnAVK &r! #U%t6a/%6hlӛ{*Iͺ\8Iwtsǫ'~GY,aTz 7qy.>tYX='s7Q9vI,G*8dRbqmTH+u؂;v;G=}ѢXs+> 7k!Z/@u. B)rvDLQh =~&e]hq9OH妲CH{2Wa|P ś0XcAXS*3`UNiʦ!Yq{7 yfY_Mb7nXQX ٭ :xV:3* ֖_&(㛺w" ANN1O"WꥅΊ^+&%{*|r0Ra9\z("/wlRQ<-j.z>uԢ֡DzڙY@GU@$$yNy8-$^M4ڃ3KSًS2BxSJb= 8Dm@O)wR>%6")im8eUDg}ɰQ?Ckr[]|7VaMs2$;rha^b8J.f]/k;Niq<pEq 0;ݙ4[''ltC{h"\urʅl0瀤laT99Bqg^ ɗB OXWґh.` ; 'ˇ -!Z,7UTQv:_R5BvQO$26DS_A\gn_M z:͜i4r4!J}䲟Me:.[FuDC.OgŖ34jcUڊK㎗dxPMWW+Qw>Tp7z5yTB~3YD0,KŮޘ +\9&TRtuT\|[Lm9%ܐ/ns=QAA߭hOXݠZ3 L y.}ԡN(2#VeК'g=)NOo)f)[ߟppL-ʎ(`aHcV-)& /<3l$>I&O&;Dr.*>2\%F 3Z}tPbV MRHVo#wT ~pNFf)m$,PHc+*|$/鼟E97`뜓]}>Tfsl)}YճXD;{d:ڂ[J.h@0| endstream endobj 198 0 obj << /Type /FontDescriptor /FontName /OPAPEI+CMR17 /Flags 4 /FontBBox [-33 -250 945 749] /Ascent 694 /CapHeight 683 /Descent -195 /ItalicAngle 0 /StemV 53 /XHeight 430 /CharSet (/I/V/a/c/d/e/five/four/g/h/hyphen/i/k/n/o/one/p/parenleft/parenright/period/quotedblright/r/s/t/u) /FontFile 197 0 R >> endobj 199 0 obj << /Length1 2564 /Length2 16784 /Length3 0 /Length 18262 /Filter /FlateDecode >> stream xڌveT\۲.;w{N%' Hp^ɹx+Us-*2e5&QsGS & `e`feeGRk4.֎p]& L*8:l6n~6~VV;++]&fJ ?ft6>>ƿ@k3 hhfbPs4;+ȉÃޕRa ].@s_eMnjDPvGh0q;k3+!03ۿc#kML,v@<30q0hb7q731N %0 ]\@̮vUp% Wv;:8z8bĢ` ,B-\:fV,QrdK `.gm  7ϟFHllsk3hi;X  B6_7fQWW`bb&vV; oG&ISY G??9gh't` roװcwNRnvv3h1L pT-?[4vZY x-D,Uhl 2{Lkvv@eGW뿮+ҁw|oJUcx! ^Ns `avpM .H-7E/?"X#^o`X~#6o`8,8o)x#OS7/oO75ME&QvMd/bc5u11-@#g5fGl _2g/6sɿ)r%_b/WkhggS0_A; MZX/۟1z˿?)ܭ~WXfgjܜs`փ[iIߡفK  PuSd|)8)qdG ߧn#hnǡ ܭB@?-jgj pj_, + ؇|@pXqS*!Q pG;ݽ}g%8BʢjD9:>_J2v*p3?$Xm#ґ庛'ito1;1gPf¥@g:<]VE 2D]2]NtQ pM);eoS2pCɰA:*S~#{Z4czjĘb&O1Nx,eVLh[1ͫ]wQ#>l h {f ZIg^щ/m9,I)u=6ϔ-ŢY~)wݳqI6rmq`j/IoE & g IΧdho#6َNNQM@@Vzu W!1O6['0_y:xk<6ΪMX:~vLKxD` ~w Pݗs~@#ig} Y HƝ|o{~(#LGyc0ĉ=ʹ*Ľ&M1Nve ꗦc:(OՕʼnrCFR9Ly]΄muAnI$DhvS^  E[*.;Z\vz l'hp$t hw= :6k5i3[}zbZ[n+ Ht T`k{$7hlLyd\^{=1~8PL YySPT.|_ίQEʼ_V\+4r*Ae+:rZnɧKζl旊.XW AH}N4iy7# q|'ar&NKxPTڌpɁG7*7-{ =왇l'b:Wэ*oRXЫ/eZzB-* f irXtdV&SI}Z3x sg&-ϦuEnX P[X mjŒ7|ƍ /<3)8'unE f > <,i'+chjď3}=[U.<_-S$^z.\`YQ"{ R~B`JV⅗E(iެ:VI=1'$b/F%qeH$yb[/sOgv{fZ8`F1^;ٿξCj"Ia:er6g:~Ђ*C@27x7#KM]yؐ}>shwmxgqJwg{ZF,X^#-"uOn(d^N=\LK^=N˦ нL19ь#BYXA&mj3CS"jR9ū|];tӃ<} 0=ܟLSS8_#Ǣ$HH527eNq9J颔 ڗ!>Hrx:+vܧk(٥~s]&I o]9B)k25| Ad_*T 0[:f龗\K걮=1 E-Jn4)x^8LRl}@+cڰ,DR0hFTn\pnͩo)ڐ@1AtzD)߳~sF}X\J]+%ka`=rG!jS`vyؑip綁Ѽkò,-֬rr9i[͓"ŶCg|;nS{^2BHm, yi dn3{&cF^̑NUEG>;`ʹFi>DcH1gZ#4yѳ24w1,NkJZ!c4Kvri*uQNeOk"'ibA:[8 m͇m3rz>p%!;G"TާcԻ(iAIL1Ψ1 oB+EKoZw\Ҥ_t4֠o'XZt鋔1a`FP3x1"nFF1 {Gx( r&HD9~i wZidJvfQ {TݷW7Y!ֱXVIp";z3Cw#Pud˵~32_*eH"bRC@,k\eQ htRCewl\2_BPqe7B /=Vw->#ǣOj0GFOb5-_υkQau:"_s|/՘=ֽ~tS?UG+%j=wZ.$s6j(m tZpQ!_m `eV~PNS풦)Tf>^@,x١wY \cVIX+ s02f+F&d fL$`1W|4`n2CuVrGjIwT&[镌b#sϝC2_U2鳛oOo~XDsK\ azS5zi˽kO|±- fJZSg:2 ,8KSD&O Sǝi{/Jp>8~/\M\iP2v_r{~#v A~EvBe~Mj-UxPm}_5>UMđg'Tܜ#.mZ7t2weo΢ ^sG=,b v!B.o B@5ɽfe^=b z‡.B oq*@Ge4 l_ymnXɤ?]mH@^"6zy}| F4]E7E˶0 Dubb<:Q~A/'G) `Oui~Τa@ iD\}tVTT.`37tΝHmOAҺ]]qgS |=1deMgތi^U&Lj0WE&sE<1+QYB3*=>&!s9bi%¢k,0ʃZz&͟xݠi[Jr uTzزV^Mm"A)as1AyԯO5m]\'mr0S dGk'$w E; iɫˮI2&:ӡP{FG'\R:kqWGNk|PtUYUKޑ[䠉Z(-Csѣ00yHL 6bd7\#"_Ɗ|b@OP5rrCҌ /vUS>i<;ҎARucIȜHs5Wwhةy$8|>^ƛ˖N!_OfRf|tu9ٌ Ig= B;J8RĿgz+`5Jm,"ٵ%&L_|N+ZتNNd)ҏψgUuZDHPR1FEn^nqF5!n#7$&^e4Z&b%&LSQCvzF,M7fS6 }AEl$,2aբ)/VI2|EB鉎`@Ne+g|dFUg='1оR+z+VޜS8dXg(ݬj Iw]YQ*MX)+n*_z/%Ca=48G<1ł!c,=GйV6#Sޑ]b<](RpnWP%d;Kڬ+RPL*79 3[x"0v;;(IW!B9Z6Oɛ/L8LBlPzc#w:i%"a C%8!y"  iPGWħ7B+jHIQP  *Iu>P js猢H(UKЊ?%vh J-).<9sפ|x85##%~ x7Ȏblj.62Ui :c -Yp3 jo7//!ߌާ2flnmzRo_q|ЁB_^J7vIhSbBZi#3 i;;,-uj{rnD:yV1FP^R+XlkIP&8"O{gJy7 r`qHXG6{7 4)sP|k/|G@ZQ PAП{xZ8DdP<Fq͂!)V"M}Wo6 Gx+k\yyI){@sَs&a bPi+CkUx epÇ![,L"&ylПf]sC |&ڰMhs /NM 0@+Әe[P;HCxeW/(/ V79E÷C~;ٿtj> ta Q9f(Q=@lOͺ϶k$ۚ).O/z:XYz\( }6P΃x8SR{y uʥ*`י^44i QF̵~X) E(C1qn* ;^Kak~hdjp!nNa 5jk>y< }fGHeG1DkČ\8Z\'1dPho?:f )vzJ߲}{(D 2* $mC-D0@dӴ69" Ki0ř`|sR9z# PƯ3Hͺ _JHm0h@ۻ}@z:k>^tkM"[~o@ KT |9Qq>eڧoN|AhXx.:-!P]4 Rl/2DnH$B3_8Mn& ƺP13U>MBЍlI!숟\9|ifDV;kuwT yuJT[/6oazP\bdQab#/+!KRgL3g`jAhOr2pUYBޡUױ<J@jȨMw'^Ekc%ua+o"? mqPb* ‘R/2fb" 1}Hv~u;oѿJ _d@po Āz˅}s8ˏHC ,VN/g 5{YӘP:d'Ve}~ _ʥI/cȈsU)!/8 UxXq"<$Ux!Ws tl6=}t2PGh%~iyfP`ȭn! 9}}C<>lu*K| qmoyk@agAQ̛^fK#Q27wzq" ]8y; [C6?2)AJ^-Fs"]a!w.fŃpR~'e-Vp1$J,|ICD\wpY<#z0]vjҼRuhK};>;;r?yAx g J1 Io/ZGLpVϿMȏV`*1 kz\[qB**L 7e [Ij; f?#U1!3q KD}<<@k6~7 /Vd:'@5ڦʰHCNSB=*=^wy;i@wW ~j5X0aafoaPƲ5ʙ/c3͈\wɍqg+ӷu@ʇ÷ n?%ϣgBevvޡ{ [Tp֎t\>*] FTL1X~b-|}*BY:dT1<[VxD".̡3#ah9>=s3I02b[Y]kI5qY ŏ2Y9@n9~mќ#Ah_ÌV=}?Fǟ2YExK0 kn. M$x>yTͮylÖPf =Ca$۳w3"I3:WqS~ pQ|_ \.7~u]c3Hu=UsRYPh#d(ؐO'pV2+tE=͍/?&o復[ OƻTuOLvH&(e:$uGT ɲDg푺IsቿVk, KӌD5q0K9]q4r龧cU/"W"|_{>UQ2϶9?/}Qx+ևe3/ƚ j@u?$Oa8ءJNX޽;:)0T36)KeQw#+^FP%:QTވuR뮝~j |LvG|]m6Mڭ#kqM~t\51ո޽hw'x`aM S,W_Fpd͠ qޱhփG[x`Xc1+iEы1"V0\3!3i&brGG4 d7.A#@H 7lZWwͬgQex'RlF?#*0gzox݂AJd(cޝ.a3Gq(ql=Ƕlvo 8~To'zWB\ksq+RjN\# ^6et4|z#aKOUU $~()x/uB*QbT( 1n=ES;ُ?{T5پkEIѾ+n|AGYZy;)wNIVQZ^M^ '(13*-ո (bkQ=ڟEw:}hczC߻cu9U=T#oLH*t:&<7šoŸcOb}urO]~Q:&.Q L٭Gw3d#-1\W)_2ƿR2I E~]+*QNrFz5mC>в?^RydȞ.y)ۅIp7NO4ԍef D|}sd4#"Y5Żؖ9$qt?uc3C^Ut_^nڶ: ؁CR"/1ަW} :#PSWꕡ2V?vA4ˎkl'=V0 fq9~=Bn?¿(uA>q֮f;80'}*4 Am乫kSiy-35c:QD%tCنuJ$ēK 78{lS6 j4|jou O7\Ըe_ɛr2. 4|!TՉ+/|S@X54A`Hg)kf}lkun ng?Z {)vwTncfSL(7yuЛbX 7󤈺 oKgGG?n_|a.j|]et4ًmÑhsxFafahiG0QF0PMԲ'I&é||SHNq:_q@i%>;آk$5YĖ1W[w# Ih)Pj?F t WPY@*3}\2q2Qh&-|GShjTb>Z&eðsdpZKWO悵2syglKvP޴v1XĬZڤOuN)#pYK\VNP:!sa=`)>>D#+ mˊXOT{zFY#溔þ^ ^,7$aXkw=_~ep"/.tI,B̈Ar`LC{"2%J8Ykʛhl]fRas#sbn%?${EMiR)4RW%:^NYmo 茔I4ǵ9վYn4;`.5'jAl7V)o̸$0As YFm PF~ Ԭ!d57sFmh^WɕN`֕yƼh-]w ymT''Yh2Ƈ-шOߠye܈( W k׃=p@&Ƨ, Wކs:Yfap;_/ͣ,p'oqh/`?)]>R]Ob;W6ІLa>'OL?cRTߏB[oD#(Dڳd<sb ѹP-g~penIѵo'YʀX15̩&307pSK Eqg'B@݆A~NƢm߅b/JF.x%V =4N2sZV Y_?xTpZ$$.]119ONJ9oTR{adú|t+l"^ fZHMYe&RQaD2n荿xn:VTA$Bf$J]GS&GuhZhW"q}iirB «\[{ǖ{_݆I&Vf?1K e}]NWmW Ј !9 M𱇤#9sAZ1 dz vKvM;dmn _a2 7/Jף Tp6gO /g e,e2c ~c-Ic3)!g*$("&џ$^\/O ;~(-yE ~ښ|[ .i]A+1 =9U"cwn5",<҃tabqÛMUE+cXAE=Zix5斢a$z\5(Da@8"x<{\0y˒חgRUOBXh<:9.ׁ"~ %?Q;EmM6Fr6][$Ijfȼ-P;ZYφ3Kbgu&8K(6o?w[0ل=u8 ëH?'fX Þ3R7.N֜BU?J|ME;eaҼXvamy(Vh/.s̖$U)n>7ENn:KhB/3tLDX>U\o3C ek{,1q^Fb+;"')5y&1o>IW8]*=Vі}:ƃJK-1; Q]ՠ:]rz*?ZR (I[N5/%n` $WʛХXIwr)&GI3-Rѥ++Ѷ}!O=c5xC}7|r*Ktl-GWBE wXZsܲŒӚ'82)?1Ks)f(g7d%ٴʣ;BeTǬ=hFe#kՙb:2Gwԝ'4}’W4Z{=OWM.-^%8Or6۷F<˦@ѱz<\H5ǯi;+MPga.8܇½+?4='@4>WI'^90}1;S@y4c~T90]LJ=fĆ:Fjl\fRaTL7ͤ[ 8sRӮcHrW3pa 5(A}؈G}2=Q6LPhӜV(K2wO@R @hh?& BQV7rGG3G#gQp`gh[>~k;}γyz61TNG&U#32>m|a[O1kXvlWzi~**'bZ[8$Ƅac0E'[r3al΅YGwx m;6w># jT!mDR*(ױL0H)QMRKf[:|^tw$|1嘈ȕ҃:@tSQ_6`"嵎z R2Uľ%}4ۄ&m}Z|Ώ@u5t-T7Zƪb? N_YR혦ʷUOS('<4[vi4ٿM.Iۭ?5dvN^@~ 8F@k*?.&LeS6/|6yJnm"!~8i񄋏fHf̡_ [>i]fY^Kk] 5Ka\fy!1𴐋3MI"x`eI#Ux?s#B74%u-{Z>M ͲsU*Q#wu(O ٴ['>&k|m0 ED"d\o0@w6GL;m ʧA%46M_m[48c}G198Bx(za|GzR^_J mlcWbR[k8WQ/[Q >v1$&=JyO\RTD A.90GsL<=~ 䖑L}ߞpyt.%++~'8.pVJL5NDnNCl6y t7AOM#<G8;k9v{0W\O & HZma[ZA^˔K*^K-aEM垑MoN}]ctRAq "L1xy{f,*$_t)6kH5(|ׂqЙ/{MYlexs>y8[n.Nj)P8iYA(fol޲˱<˕A{}l[`5PB:Ͷ7uO|d"ב7N >?ګ:ŠKYr9/ ‰V8Q87GhoC>W\g /̯@UO|EY X} v,~ҶH>%G/'89H9l3HMoj@)۟_xh5R0~vii7~XFGΓ!Z$켲'#cfX4gLN1{'.1&Et*g=HUw]iNw %I|3Zme|vLJ6D#>v)W#e` CE 6?ѪxD`=+J(\s/B5yݲN1Ǡ&Uj`09tCmhd Z2T{,>vT,zewaznn ;b>CL6Y7%P@epۆ9`/UߥP%A/[6] ul  {Qr0t⮬ظUb&T 94A#[Ib_I쫝*:}C{11d%_zh*Os͊C._X̾X}ޙ=ﵮ#C 8Rd7&w8ZO1@GŠjI|5S FoSy4Ŵi9a#"#=-Ș X?8q>2u?9- 18>5|rE3P?\1}[RÅQYoTCM3_J'q+dV#Wp"1=ǽ⌽ˬ}V: ķbc {HFuF._;A.A|XDg/W;BbS(8o.7AGh-q*(i9F-nFV׏LGZ`3ul~~K|햻SYoIU.r e1$QgsEjul`fUBvRnW>acIi%g9kq 3 SN"4qa:pvjN&|s8?aI}3Jy .#j-@7>A9̶i Ed2X$af4QWXd  &ُFc]*CcVvYZjꨫ4:q쯝HD:hpWL`p~-"|ے Zm) y.PE};#4Qi1◎%%-%?A})HGQ KƸa d^=m]Uω̉OD?Xv ^Ӱ&yf]M%8ZZUڤxR:50q e.#u.{yG­\|UzբK_onׂrOD34[~rjr C>o,w()F_XL#Q')& CbxrJ`#lX3IK|wg &p4[/o6V<##-3T_ddwq{_iH !14n߮W ]h50EdsL[ZXGE*`Qԛ 9vИF u0 #s~yjܺ޴~AB!L+RGyOF GGn1?kbHYIxˮ}O,TR; a"SM(8˹VLE I -fNoZ;[FrF/d3A"`CZBE!j#Ai5aZ=FK+ ˼zQEl;4cFT,$|lb"Y g?Q:l!+2z endstream endobj 200 0 obj << /Type /FontDescriptor /FontName /TPDFCM+CMSLTT10 /Flags 4 /FontBBox [-20 -233 617 696] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle -9 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/P/R/S/T/U/V/Y/a/asterisk/b/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/quotedbl/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 199 0 R >> endobj 201 0 obj << /Length1 2222 /Length2 15170 /Length3 0 /Length 16508 /Filter /FlateDecode >> stream xڍP\ 4 Ӹ6\w NpwsޫckεLIA(ak WQaa03123"PR;Z#GTmmxa! 8  mm2NV6 '/ /33? ^1@ ckt@s9# ow5dnd`7p4Zg42('G>3GG;^&&FkF[ = 9Q(XMbf/xXm]l {v@h/c #@6;ZظۘḼE 9FGWGz_VVn 0xgo~F s;GFs826Ƣ@G3õu2116PZ6"?2S#]̘Jf[` 8^T/B`a9 6&2wh3 t'G$!)'OoUغ< ll6.''(xJۘxU{S'׃lg̿2s0]_Q_V$de Vnx['}k͝V}mLHs sW߳/_{fenTu0f003rY# ;Q%c@n`yFcC `bu|w؂:RN_!N`/b0IAl&?ORb0} v^0A,d`d |M+WN迈={#agKbm'_d';ad`a~isxu? hw?{,IY3/?8]mwz;z?wvk?d쬜+`{cd46GU,9fy!ks 7 wt{ ?W-蟄߻?=?{V?EAJ?jO7?# 4BX5hQv_%L°3?MJjwzDM_ ' vlZ"}8j iIeraaHAEhSC2މE)ޥWҵty$xnn%,sCjW\YջY%Jsb4Zŝha@I O., $l\!4*q >*wץWdq_(jF+31E(\+\CiiO` 7/P|UN4b7-rodT<3;KP JJnA/i%:a|JMo1?ߔni$,T}NњZpr N%7}NQ25HgzGϤ͜XTҰin}K|4u,ήfE ֈ 2#hGX'P^A'CʟfE_dg 3nuWW|q#Vy4板XKg֥t.ͦ JzKQ^RTB g)5DgQɫ&> kעOSF|ީ-Wrt[fn2$s{;T,1f{O򷬝L6mljȺ A&ÌWEb _ 0^?4rOɳH\2L{Wm>t \]GBo)8[4*L`+w,SyBȓy,=5_22/ qau3Ȟ"!hYL]X;sٙ s:ʶVq/NЄ52n_EkR rJXdj3ڏuaAzg5̖ rkl2[rsxQTlbzLag~AHڣ$ffťUyWN-v1ֹEr'Q+2[l;w ЕrU xF[1)c>t?c5@Zxf.Gm~}u(?>4OMW![jGݗ/饢Et+9^x>\ l 9[Es(_[Qz2UO ?4i (Bo YG3V&NtѺX&>OV1|:QUvkZ =C|CIW~#\M  AY](j F{;M'+bE U"o<0dL ]ȶRFzT:! yt|s]Z J`#w7taTTbl€VG/zr1VoR}oW$v(4YworT;&3+>B PSy~ēe=6pctaw ݉YlyKUdeAm8ljO,uPLۄWPꕼw%iU='`Ƙ ě=c'P~Wc06 )~ 2 XwjKs]ʘa"\E9o;.OmŨ*b,, 4}k( -3doKo^/U>~ҁ .^_Em6Ϩs3U]7zz*\_{[ʉ~ V€K"| ̛;ScƾO-E~-h8>uJ95;5JL}ˡ4ۂgQ/vF7@G+KUG4{nFb)gI`C(Vrrg N FWICgFOOAiE,-e=`yLLM<˨}P hg(nÈ;?4s4Q7B`4)ND~+T_/{-^|S[A*IUpy[BeBpD8\N^>bحH]`7@QWtÆA>5yP0vO| ; mV34c7@T s1GEPRCNq zn,r+g3"Xw|6=wo\`#D3/lħ\7(^\A: ]o"c$s2_>sj3ОeDMiS׿|D,<,SoBnBI%Ky(WN1ap/'҅ 76Imrn sh#Z<__3{;:'vד::Ŏ Oj xU]-`Dny,Wm3%qxpmQfƄh5D'WC0Z}tp1/qw&='HC'g&nd HR4a@(j+B7lAA |@x,}t4vIWp7jhV!=ݔFao:Sw  ו !@r8ː\>'Hbskn64aN{5kTBSb8 |݀ &y_a.&F٠JD>S+勉8Jq~? #c_=XY) C˭K5U]>/sh^VI;Bz\LPn ƠQy)3k6{Cc W˫;ρ#dr@CSP3Qx\b,EՁ쩮!pBJ~Ph7dX'w(^=" r7֙\o$`~˂GA+tj?G**ׄr$3]6؃d3ԟ_Xp!C>WZ=\c*SB ],ұf4Xj?QO@ڣa}CҔ 9}'zEiVҜN]|' yH?qL14^H̭WfQAh;WDj䥵D? P|¬Ҕ=JZÖ  vF#~%s7e8no3ߖ?WdHy+'tWU4> tvUuZ>m/9Qpwρ]dlp"*hP0K0^8**ce&3م3zt,4s(gFU9qeJKRӒY).bZ `A;A1}d_|q]drpA- ׺%8ioQzF0}m.!W$(oJj"Qg| 6},3tU:Z| N oJ4i"IY1v?t9zN%uz#3~f(0rh gOdn0[H˳ Bt@{<|x8E~TpĦ&:2PfQeFv`E'/.!Ϳ9ɳw<}?VHsFA$j@P5ߗ}vb,LB sm B%ݞ#Г1 P+/;ໜƌ"5>/E;D]G]\1I 8i48ō$}ۈaa Q U7MYD2nh+A$qYPg@eQf-RKy,[q͹Dd>Pc,F_:x2|֒Qn<Eu$,'_ˁc?EU#gg/1_Z-(<>Ml?֦9_C/cK R[Ԩ+ \ϱIi7Gq傷zG^U$0O:)VBwO !=i<1PTq%ɣK3&J9J P 3^o0mA+.^P1f_mHPTޒC˶v7QqvmIN07dBh(}6ZΏmSAqnFA}P&};"ԽVVsGaLڽB۞D t @۳7ȁMm``8a4eD*7H̊f/0> 2^"퐓l/ݰ#P^?V6]zfR5жe֔-k63O{bA2]p9[9:s*QzZzD .򡔰tΑC䁐Mӥg%> 85kQgg%Z6C=lݑ߫Ml _߲_W~ѥ;~{ YS<-Ǖ@S^kz<7@fEOB@•" NOD*%.bkv%NAĮ9 f{'5bMApOl;-8UwXgFW~t%+D:1I<|Ju_ҽH{z3\Kyn;NGD)p6tlI .c YDH@ :i1, :;MUA/ܚ>6|Y i(9ǙqKT=8@{Bɢx`>"*_Q=(/)?z%g n2TFW=ws@I3Ɋ5rF@75g;Ρ5&iSǩt&f np9/ T!}n1)ܺ~^dEXt$DB[;@+E^O ~[=U{&/G?PM8Л I>ܳ&\TSLɤ{1"5 kv+[U@֤5ڟXaڌ8Z2Nl## Tga3$3Z%U7OѦ*]pA$|UKY}Zb;?]-4WEԋW0y 1Ku?P!3B# M(aw`Y#Hpv,9NUBq́;KS-:.7KN'##UV'rl(a]JAQuf:m4vӦky^ i tm5[O:7ݘ G9[>I_x<,+C 8^g&aC4G!lDQB.:/#usot;\#'W5$i X>(H\;XC*k-B od]3òA*~C bmfe(ئ{{pv]8,eϴ,IdWb7[ir980o3`Y> &,)S7W8Y[!aWIRJ 5&湠+2M$ܾ݃N+ ӴQl.ې.̓`q7i.7]gJhStc')So1I1ưt>{Xް> DQgPtB5W@((拏q錠= i]}M۬U͘2-w DY0Ш13‡ G; XIi݆*)Q8r)kW5_S9KDg]+ttnJ1N00 ғ_y{<}B)((m/֧Q*`Ԙ j1ZhM>֮KR>$CLbڸd2=jI*LA Z@*֝a[Vz %w_REJ铝̓#ڜsIoQ{"@UӋ0KH$Ԥ{$B QKunG nxMZ>D ^K^+k ֠fýOiE>#H?QW{j lkrb@~ k&2Q:k%ozG@=v}r6M)"S ^=$Nlq9MIhT#ZҌWa3!41e5BB }͸@/Q@`^:^E-whfB,[\o)F"!xtlҜŵ(Y<I^@9°]vYhLE^W(fSzc#T?MۏxoB,!u&~ É$ב;~"IǘB ǯzKM!꿵Ƒ`Q5lp1jK&~돟TX:V>ЗϴC͞+ʜll 3m|ĞjA Rš/JgmuI$;FlΫx\Ȕm}&|ZHv?uM`\"k5=Ehs@}Qw$H SEٱaEƈ;GZ4sTPLehAL||L},ލ_ $')c\{Tss",Ip6 k |jiA~_@~^TmA:9!.9FJR<qP`KAEVp UTq\$!+]H<{HFB!;GMOpD¬%Fa8–}MCkWJ! HW^_ ZO(W6dTk6S J2&E(-.֔WM<]<Πhy!eVOFafZ6?7](Tv~jU Jo!UR~ǃ1/=!3Jse b ]52Μ1{ &5X`^Z9²>@YǗW=tIvd vQ},_@;KTwVeGʠԞAJ27$N%!92]gG_k6D",udv^ͮ qm&v {@}K*wTg!3Π@EPB#k KlTqfSj'i - cy.NL4v뫙CKSS ,[&f:JE-D #|I89qx~EE'Tk V&u8euv_`aJ!UOE!f,~A6T̗ZYP{7o?,!te?BpK*i{e†[Z|C-vSrǽr Hst4tG~_09Z*&_&pgXDC 鱬dACR\21&j^U~M8vqծ-Md`T[;*({ XRbI"5rHa]a3OxYL]j'č촛XmMa&Iˇ,)M_3R6s#; |qKg ibCg-JB";9l;Tǯytm{kHEMLdE8J1LT%eQ.ʕW{U|~^bt/&lLni㮊̜ g/mgiJϳ[@~f<&_Nbs?ϖ%R.w"!݉tQ=#xN5\\@s!W)yS 6l| y/jIe!ۄ (7aZaFN!-0^Qr; ]Wܜ/1kXKL9:c;x;bY- w,u;{X|qБ~W# }ՓIOUøً2QH;B?%5iU]g1=CR PE anddkV3PMR @,lr4WRQ_\# oBuY`hMELr@Ld{}қR{MI 46~B }k+42or7Qw)eֺ;fj۰$ۿ! $+BtJZ,ȡ-Jtsf$ ^q!C;ĭɱ[6BB!ϭʍ>xitjm2-hnĘ"E7{Ӭ! vNG9?{5~rڢqy_)g > _XϗA8i@̦ UrE\8^)'mOS0}ɬvA|/53bzG6EDpT͍1,ptUm5AѾbeu]|{Iiޥ.'u( Ʋן2CM7!aa>ʚO-ddlۑ4Pì۝AT  /dZD١W!2 X'E>^c@B!ݣ-0f(>{rD 'zf1Y?{D(.B':L׸bAjWcVRr5 GB2E1m7vHtF,葸q~N' UB쓂 ^9n?*:pkG{4 i̵8+׊iϿ[P~*qSAmۓ]S^= C\J&ۤ^@]vJ9wxx:uL5_1K4[CDXgucyŖ?K7Z5:id0ү[,UNyw kgl-ʊY%ߓȘ]45Fhj[BxߟB0 MeH `ԾvҐLW&ù%w'zL64Ab&ڇ_ d г{#03wi1E|Y,D^ i^,U9ʏ]epuoB(Y9RZNj5J[1Qk].UѬGB>|} ebevrI9\j,NtR/scwFH.g蟬ZR223N_l+9'|A}`dv( /2|*iS F;]㯮u`1 ljW7cNSWڼGIZL\۸U3 Jr9jE!qNTjJOhPiwUa\.&SzpϝlV̈ bRH## ͋|aGk ~ /k=sNmGe8!S[A4$Fζ7#7|6)A 2]pM&z҆X3x;(ȥ3r V#qWza4[õA%Ěo-Q6Hoܪe)C+7y%$A{aeV):!!Ċ\fx=x@pf4İpy"q5#~1ï\M_W${8t!R7eYdSeFecZǐ;P5WX׉Ee:^<8 4sFPWƒUY& Ag !TW3CӠ{,o\q'Gfs jY`vcZ =Iۊf6] rcψYՎ' ;"#yaѴPʻ̱8lp/Z6O S|lL8HBy3OIwl-3^H6-I.Xǚ8~w-97hlۅT/`Ls@J>Кe sD)y93]5$%ZѝP$Iujn{r_e]Da@(>~$+5LѳPȟY R(Aw"N/) hzea w+G A/0.iǚFvP3%TqJ뽄-NPpfBܱ$\%κCӈП]qOZhd]7x.\{;v6gOMzjqbB 9OJy& ΘO&>=He ӿ?R6N;<Đ}½*cǬҗ@C(nCA`Sѡk{¡ ˗eGLjanA'?(n ޷4P1Xw8T;(#J]kQ20kŐW /3˪ŗOc.[rZlؼit܏?I_Ҝ Fg'٢,e.`Ҩs? #p=Geiv NADf 7$ظTƒ `oJ^k虃mj:Sucy|7+vZFCLܴdhSMBS vϛ/ N]M(}b]ё(I<&0EN%\Yϖ(yJzHYvhV ˓TO}:3d|=>Z Uj )wٱBx"x@ft 2-w#IM2mgv#, @qSCB`!z~DrT\z;2,2.wkO8IVkN#tZegqj¯S srW|QVB8k QKKXSuP |D.0"J?%v]I,,Ǩ߻JBr©pO5ƯOC3 հ|G+,rodpui閔I E>U w tW*W1vWeϩ@Ŝ 42gМ .P+ΖiOlۖOoJ&~|^ŝq G˰fj֮I)T€5Յ"X7fjhek]FKwzU}Ik]ث̥J՘i?8-:N)qVƵrUg{ Dy8E|>+z`72bƢ4:OOLN /,>#(mDE Ӵ/rGq ^6 }l4^J j־qrG՚CZ XCȏxiCv9UYdaR=T"O5++l69cj=Vl- M'nƍ\!on!pֽ^jF@ <-2NoƲIeFa$w>s&D8nP Wlƽ1"a qѝ肙i]'0̛61KvϾdz5j7z^^G sgh&[f4š)BGZ:>È֣f")x1`9~O">wD;[$=!x 1t([ƫĄx%ٽasyȑص\hۭȈ(E3Z?&ë;@_5S3NRh0Ymқʜ>? endstream endobj 202 0 obj << /Type /FontDescriptor /FontName /DXJYLM+CMTT10 /Flags 4 /FontBBox [-4 -233 537 696] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/B/E/F/I/L/P/R/S/T/U/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/f/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/period/plus/quotedbl/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/zero) /FontFile 201 0 R >> endobj 72 0 obj << /Type /Font /Subtype /Type1 /BaseFont /CQIYRV+CMB10 /FontDescriptor 192 0 R /FirstChar 11 /LastChar 122 /Widths 188 0 R >> endobj 73 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XTKZJG+CMR10 /FontDescriptor 194 0 R /FirstChar 11 /LastChar 122 /Widths 187 0 R >> endobj 71 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QHSRHN+CMR12 /FontDescriptor 196 0 R /FirstChar 44 /LastChar 116 /Widths 189 0 R >> endobj 70 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OPAPEI+CMR17 /FontDescriptor 198 0 R /FirstChar 34 /LastChar 117 /Widths 190 0 R >> endobj 82 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TPDFCM+CMSLTT10 /FontDescriptor 200 0 R /FirstChar 34 /LastChar 125 /Widths 185 0 R >> endobj 74 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DXJYLM+CMTT10 /FontDescriptor 202 0 R /FirstChar 34 /LastChar 121 /Widths 186 0 R >> endobj 76 0 obj << /Type /Pages /Count 6 /Parent 203 0 R /Kids [62 0 R 79 0 R 86 0 R 91 0 R 97 0 R 103 0 R] >> endobj 112 0 obj << /Type /Pages /Count 6 /Parent 203 0 R /Kids [109 0 R 116 0 R 120 0 R 126 0 R 130 0 R 136 0 R] >> endobj 144 0 obj << /Type /Pages /Count 6 /Parent 203 0 R /Kids [141 0 R 147 0 R 153 0 R 159 0 R 164 0 R 170 0 R] >> endobj 179 0 obj << /Type /Pages /Count 1 /Parent 203 0 R /Kids [176 0 R] >> endobj 203 0 obj << /Type /Pages /Count 19 /Kids [76 0 R 112 0 R 144 0 R 179 0 R] >> endobj 204 0 obj << /Type /Outlines /First 3 0 R /Last 59 0 R /Count 15 >> endobj 59 0 obj << /Title 60 0 R /A 57 0 R /Parent 204 0 R /Prev 55 0 R >> endobj 55 0 obj << /Title 56 0 R /A 53 0 R /Parent 204 0 R /Prev 51 0 R /Next 59 0 R >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 204 0 R /Prev 47 0 R /Next 55 0 R >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 204 0 R /Prev 43 0 R /Next 51 0 R >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 204 0 R /Prev 39 0 R /Next 47 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 204 0 R /Prev 35 0 R /Next 43 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 204 0 R /Prev 31 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 204 0 R /Prev 27 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 204 0 R /Prev 23 0 R /Next 31 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 204 0 R /Prev 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 204 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 204 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 204 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 204 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 204 0 R /Next 7 0 R >> endobj 205 0 obj << /Names [(Doc-Start) 69 0 R (page.1) 68 0 R (page.10) 128 0 R (page.11) 132 0 R (page.12) 138 0 R (page.13) 143 0 R] /Limits [(Doc-Start) (page.13)] >> endobj 206 0 obj << /Names [(page.14) 149 0 R (page.15) 155 0 R (page.16) 161 0 R (page.17) 166 0 R (page.18) 172 0 R (page.19) 178 0 R] /Limits [(page.14) (page.19)] >> endobj 207 0 obj << /Names [(page.2) 81 0 R (page.3) 88 0 R (page.4) 93 0 R (page.5) 99 0 R (page.6) 105 0 R (page.7) 111 0 R] /Limits [(page.2) (page.7)] >> endobj 208 0 obj << /Names [(page.8) 118 0 R (page.9) 122 0 R (section.1) 2 0 R (section.10) 38 0 R (section.11) 42 0 R (section.12) 46 0 R] /Limits [(page.8) (section.12)] >> endobj 209 0 obj << /Names [(section.13) 50 0 R (section.14) 54 0 R (section.15) 58 0 R (section.2) 6 0 R (section.3) 10 0 R (section.4) 14 0 R] /Limits [(section.13) (section.4)] >> endobj 210 0 obj << /Names [(section.5) 18 0 R (section.6) 22 0 R (section.7) 26 0 R (section.8) 30 0 R (section.9) 34 0 R] /Limits [(section.5) (section.9)] >> endobj 211 0 obj << /Kids [205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R] /Limits [(Doc-Start) (section.9)] >> endobj 212 0 obj << /Dests 211 0 R >> endobj 213 0 obj << /Type /Catalog /Pages 203 0 R /Outlines 204 0 R /Names 212 0 R /PageMode/UseOutlines /OpenAction 61 0 R >> endobj 214 0 obj << /Producer (MiKTeX pdfTeX-1.40.22) /Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Keywords() /CreationDate (D:20211011214421-07'00') /ModDate (D:20211011214421-07'00') /Trapped /False /PTEX.Fullbanner (This is MiKTeX-pdfTeX 4.6.0 (1.40.22)) >> endobj xref 0 215 0000000000 65535 f 0000000015 00000 n 0000005985 00000 n 0000259340 00000 n 0000000060 00000 n 0000000146 00000 n 0000008270 00000 n 0000259256 00000 n 0000000191 00000 n 0000000328 00000 n 0000024203 00000 n 0000259170 00000 n 0000000373 00000 n 0000000524 00000 n 0000043560 00000 n 0000259082 00000 n 0000000570 00000 n 0000000754 00000 n 0000057722 00000 n 0000258994 00000 n 0000000800 00000 n 0000001012 00000 n 0000059486 00000 n 0000258906 00000 n 0000001058 00000 n 0000001221 00000 n 0000074202 00000 n 0000258818 00000 n 0000001267 00000 n 0000001359 00000 n 0000084779 00000 n 0000258730 00000 n 0000001405 00000 n 0000001467 00000 n 0000086439 00000 n 0000258642 00000 n 0000001513 00000 n 0000001628 00000 n 0000095316 00000 n 0000258554 00000 n 0000001675 00000 n 0000001821 00000 n 0000102266 00000 n 0000258466 00000 n 0000001868 00000 n 0000001953 00000 n 0000118773 00000 n 0000258378 00000 n 0000002000 00000 n 0000002145 00000 n 0000132120 00000 n 0000258290 00000 n 0000002192 00000 n 0000002259 00000 n 0000148173 00000 n 0000258202 00000 n 0000002306 00000 n 0000002378 00000 n 0000155105 00000 n 0000258127 00000 n 0000002425 00000 n 0000002502 00000 n 0000004947 00000 n 0000005095 00000 n 0000005288 00000 n 0000005682 00000 n 0000006044 00000 n 0000002550 00000 n 0000005866 00000 n 0000005925 00000 n 0000257115 00000 n 0000256973 00000 n 0000256689 00000 n 0000256831 00000 n 0000257402 00000 n 0000005485 00000 n 0000257545 00000 n 0000009313 00000 n 0000008329 00000 n 0000008103 00000 n 0000006162 00000 n 0000008211 00000 n 0000257257 00000 n 0000155506 00000 n 0000017969 00000 n 0000016398 00000 n 0000009205 00000 n 0000008435 00000 n 0000016339 00000 n 0000016183 00000 n 0000024263 00000 n 0000017861 00000 n 0000016535 00000 n 0000024144 00000 n 0000023991 00000 n 0000025205 00000 n 0000037711 00000 n 0000025097 00000 n 0000024412 00000 n 0000037652 00000 n 0000037450 00000 n 0000038988 00000 n 0000043621 00000 n 0000038877 00000 n 0000037860 00000 n 0000043499 00000 n 0000043355 00000 n 0000045362 00000 n 0000057783 00000 n 0000045250 00000 n 0000043784 00000 n 0000057661 00000 n 0000257656 00000 n 0000057509 00000 n 0000061051 00000 n 0000059547 00000 n 0000059313 00000 n 0000057934 00000 n 0000059425 00000 n 0000074263 00000 n 0000060939 00000 n 0000059666 00000 n 0000074141 00000 n 0000073994 00000 n 0000076474 00000 n 0000075415 00000 n 0000075242 00000 n 0000074414 00000 n 0000075354 00000 n 0000084840 00000 n 0000076362 00000 n 0000075522 00000 n 0000084718 00000 n 0000084524 00000 n 0000087711 00000 n 0000086500 00000 n 0000086266 00000 n 0000084991 00000 n 0000086378 00000 n 0000096671 00000 n 0000095377 00000 n 0000087599 00000 n 0000086619 00000 n 0000095255 00000 n 0000257773 00000 n 0000095101 00000 n 0000102327 00000 n 0000096559 00000 n 0000095528 00000 n 0000102205 00000 n 0000102050 00000 n 0000103778 00000 n 0000118834 00000 n 0000103666 00000 n 0000102478 00000 n 0000118712 00000 n 0000118531 00000 n 0000121883 00000 n 0000120685 00000 n 0000120512 00000 n 0000118998 00000 n 0000120624 00000 n 0000133533 00000 n 0000132181 00000 n 0000121771 00000 n 0000120792 00000 n 0000132059 00000 n 0000131796 00000 n 0000149422 00000 n 0000148234 00000 n 0000133421 00000 n 0000132333 00000 n 0000148112 00000 n 0000147879 00000 n 0000154855 00000 n 0000155166 00000 n 0000149290 00000 n 0000148398 00000 n 0000155044 00000 n 0000257890 00000 n 0000154676 00000 n 0000155306 00000 n 0000155754 00000 n 0000155780 00000 n 0000155841 00000 n 0000155877 00000 n 0000156264 00000 n 0000156635 00000 n 0000157258 00000 n 0000157895 00000 n 0000158297 00000 n 0000158816 00000 n 0000173789 00000 n 0000174131 00000 n 0000197824 00000 n 0000198336 00000 n 0000209011 00000 n 0000209285 00000 n 0000220440 00000 n 0000220753 00000 n 0000239136 00000 n 0000239644 00000 n 0000256273 00000 n 0000257967 00000 n 0000258052 00000 n 0000259411 00000 n 0000259582 00000 n 0000259752 00000 n 0000259910 00000 n 0000260086 00000 n 0000260269 00000 n 0000260430 00000 n 0000260543 00000 n 0000260581 00000 n 0000260708 00000 n trailer << /Size 215 /Root 213 0 R /Info 214 0 R /ID [<70E4989F6E8761B2E86C9F4545891BFB> <70E4989F6E8761B2E86C9F4545891BFB>] >> startxref 260981 %%EOF