geosphere/0000755000176200001440000000000015164563437012251 5ustar liggesusersgeosphere/MD50000644000176200001440000001670415164563437012571 0ustar liggesusers7f22976807c2cc107c3f2f88362a3e96 *ChangeLog ba5cdaf082e3533c7474d24f44851ef3 *DESCRIPTION 4bb73096ca67ec7d2fd66cd11338f0e0 *NAMESPACE ea5fcc0276d17d2012801761b5c911b8 *R/RcppExports.R f765cc60d33c319f122215070b9e5cca *R/alongTrack.R c603e867d2d36b565c0223b52c1c769e *R/antipodal.R 237feea5ae914ff3b1750efcad930a60 *R/areaPolygon.R b32846602a0f755c189e48bae7d59a06 *R/bearing.R 495cb8e6ca1422490b1c6058f9450a46 *R/bearingRhumb.R 02fa33c037a5533db977a7d8e264909b *R/centroid.R 1743d120f033b849e8e77ca463d7c815 *R/daylength.R 1e9e4acd9a27238f46135af46902db60 *R/destPoint.R 19e711a9e49bbc7200d3d6a92af583c5 *R/destPointRhumb.R 68e1394e399cf2cbd41133f482dab2f4 *R/dist2Line.R 7f333bbd90b64c3aa7f9d34b39ed539d *R/dist2gc.R ef4a2cf12c3ed6b1f6c685ad3c9640d6 *R/distCosines.R 30118ba1a360d8679c7f8885f76a2f32 *R/distGeo.R 6b8bc545e94f6bb859ced4267b7b7a73 *R/distHaversine.R 0fc2aa7858bca0fcde0168aecafc3582 *R/distMeeus.R b76298022a9e7e04a41bed4963e4f31d *R/distRhumb.R d86e0dbc3e707a4e765afa6d4ecc7b76 *R/distVincentyEllipsoid.R c91231d7fd536e01af2bcebf5266f40c *R/distVincentySphere.R e5d8a111f45a8958d3c1550365ac8be1 *R/distm.R a8fd9e76e34b8ba76855fb68e0268c5b *R/finalBearing.R e2ec6c0673f26d1674123059b83b8270 *R/gcIntermediate.R 7907332e1c86fd152dba4944eeac4c5e *R/gcIntersect.R df3e5ff050196f694dcb830909576d54 *R/gcIntersectBearing.R 4983e28ab7a610326903f3f8c968e346 *R/gcLat.R 9ee61a5e62351c7c8693abbf7a25b103 *R/gcLon.R 3195f1d7d786a931e8f07307bab61d62 *R/gcMaxLat.R ed6f29123a6c6eb832574e97e4fb9ec7 *R/geocode.R d0057355a3a1dfd076e94db19a958e77 *R/geodesic.R 2081dca1de87b02dd38dee2d21857e58 *R/geomean.R 37f5bc81ce752f6b153e70ba2eb233fd *R/geomedian.R 62c5857e4eccadd74f486bda66f01121 *R/greatCircle.R 2818b0933c09267f0c05b1ae07bec869 *R/greatCircleBearing.R 088fe0172bbf3794e16cecc29e17a3ee *R/helper.R ea4c7189b67965e4517e648f27e062b2 *R/horizon.R 8e8deca391daef336db38ed3789eba98 *R/lengthLine.R 5909511eb4bb49f486fda5bbaeda913c *R/makePoly.R 323eadc05c03f5d11b51558ec412640d *R/mercator.R 430c0a96d811acc0eb31638a108ef44b *R/midPoint.R 13f88662ae5bcb6f0584facd6bd57e29 *R/old_destPoint.R caba5729f0e9429c56c9e6dd6c0d4b3c *R/onGreatCircle.R 70aa176635f101570c71808e71c4353a *R/perimeter.R dbb5582cf39016edd8981e7c332fcc5c *R/plotPoly.R 3cd75796774d047493dc8242023af7e4 *R/pointsToMatrix.R 63372c1d29b6fd85bc82e2695ef831cf *R/randomCoordinates.R ad94d2fb3c7bab9fcc660132ae3534bb *R/refEllipsoids.R a0903ff2b54c613bedcd723a0b3784f7 *R/regularCoordinates.R c6b3b408ca7a076e2de11c1db8a76ae5 *R/sampleAlong.R d11b49142cde7f8bdd857796a4d2d53a *R/span.R ba582b375e5afde780e991c9b7711c6a *build/partial.rdb f9ea47bc9654de64083dea7bab544d0e *build/vignette.rds 990871f1c55db0d5b160d786c86e6850 *data/merc.RData 464a29b93751536caa7f2cf583124960 *data/wrld.RData 62bcb6dd4e344c6e21a4d75c29e6888d *inst/doc/geosphere.R ccb6235f7e1009cfab76508d2848344e *inst/doc/geosphere.Rnw 385f05501fe8e5dd663cd530571f5315 *inst/doc/geosphere.pdf 81ce1c4eb1d5bd1302cd0e07987e9186 *man/OSGB.Rd 6d96299e3d47a6bc59572c331080d5c6 *man/alongTrackDistance.Rd e3149675013c8042a7e4b1d189ebb502 *man/antipode.Rd 2bcdc62b4d51146bd94aefad61c3b47b *man/area.Rd 3c1e67195e91c173dab816fa1ef556a5 *man/bearing.Rd 759fd642d8d30a6e4df829f4ad83e96d *man/bearingRhumb.Rd 9f635d7f7c92d5a35ca58634f9d4aca0 *man/centroid.Rd 5313bdcb42b9f847a3cfe5a6662122f1 *man/data.Rd 919193497deae5b71e7b2ce8586aa695 *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 10e81cd9f8a6e505dd79e4583749bf99 *man/geosphere-package.Rd 4e7069024be6c2df3c285532b4a09a3f *man/greatCircle.Rd 1fb55c4fcc4dc6832a62ed972ed21e72 *man/greatCircleBearing.Rd 2fe4ad438c887c4afa1b6ab8ec397c8e *man/horizon.Rd a2a12c427a2df1ada5e71a01db049204 *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 8ff83d99b122d13079310a49f7ec0ce0 *man/span.Rd 39591eb218c065d7e125f248c79e8d37 *src/Accumulator.cpp a8a4a49937fa1635e2ce60efbd47c1c4 *src/Accumulator.h 7df17490cd97669418e4edf79717c74b *src/AuxAngle.cpp e686b6989192f3d03e7128bf57cbc761 *src/AuxAngle.h 358255deaa10d857e5cc5e907590f6e1 *src/AuxLatitude.cpp 375e0b493048b714dc3346c41ffe5ba7 *src/AuxLatitude.h 36d77345f6a87b7d68e5ac4ac41e1b14 *src/Config.h 57fb3421da601baee7a53b23dc580bc6 *src/Constants.h 977f2859fb02e7d107964dc3a2581328 *src/DAuxLatitude.cpp 6063e9de7269708f445536347fe90589 *src/DAuxLatitude.h 623e9d420c8746611ac773f54c682720 *src/DST.cpp 1997c248dfdbfab5d2e4c81dc2f808c9 *src/DST.h eb14bc987c9ceaf0f933a63fc37f5438 *src/EllipticFunction.cpp 291246bbb8492257c651bb416452cf1f *src/EllipticFunction.h 4c9454105a2a592501d9cf8451508166 *src/Geodesic.cpp 30f7b21cba2e1e30272f74bb0e5812d4 *src/Geodesic.h 04aaaf9810be4ba3668e6ee229f0e0ef *src/GeodesicExact.cpp cee2b16efbe43315d39b7894830fbbc9 *src/GeodesicExact.h 34df130bb0a42756c88356e3f8f66d16 *src/GeodesicLine.cpp a590c2bc01c87bfb0f91be3b8555862e *src/GeodesicLine.h 357217d4be46e98b5a886fe615abf538 *src/GeodesicLineExact.cpp ab2cc1df0bd160eeecadce0fbc36b57c *src/GeodesicLineExact.h 35bf34f043e882c2221fbb4c78c92f9d *src/Intersect.cpp 3d88a5905cf41301ca54ffe829ad3e71 *src/Intersect.h d62f7b5944ce65812625aecd52dbf26a *src/Math.cpp 3861dddb4835bd414d47ea6c7451ee8f *src/Math.h a429ad13aba5b14d307ec3dae32cf058 *src/OSGB.cpp 5a2cc4fbc9774ca372197a9bea983aa7 *src/OSGB.h 66f32acfc8866c70ff68365f63911593 *src/PolygonArea.cpp 40ac8d3474ea86594044b85ad1b470ab *src/PolygonArea.h 76a3ffc6ea694b29cbde3bc8db11a5b8 *src/RcppExports.cpp d63e2378df2584eb4168cb00afc4b273 *src/Rhumb.cpp 3ba5f15aa5dc8a216a2e82973e657d9b *src/Rhumb.h 84d5acfd85193f0b3c5a7c12395a9448 *src/TransverseMercator.cpp d888ce0a86c3a5b80744faa1fc378e18 *src/TransverseMercator.h 32d1f89a83a9eeb7a8d8ebb0749bc64f *src/TransverseMercatorExact.cpp 45c8975a619d558444a2dd0fce98283d *src/TransverseMercatorExact.h b3ea65f0d651f0a4dd0cbb4b4705c79f *src/Utility.cpp 30a695ad88cbda1d4e24bc7af625ca28 *src/Utility.h c92e9a174ac3b5529402c9795b612356 *src/a_dist.c be6f63b3c81cd6fd1ea61be6d2ee9883 *src/a_geodesic.cpp f0f94c31254b48429601bbbf75c0790a *src/a_geolib.cpp e7ed3cfd2ceb132ccd9e7c342ba7f0a0 *src/a_util.c 02b3ab8677d52f791681845435a5252a *src/a_util.h b64faa17284258c98812d2f21e67a8b7 *src/kissfft.h ccb6235f7e1009cfab76508d2848344e *vignettes/geosphere.Rnw geosphere/R/0000755000176200001440000000000015147425256012447 5ustar liggesusersgeosphere/R/gcIntermediate.R0000644000176200001440000001031715153103722015504 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, output=NULL, sepNA=FALSE, ...) { # Intermediate points on a great circle # source: http://www.edwilliams.org/avform.htm # backwards compat sp <- isTRUE(list(...)$sp) 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 (is.null(output)) { if (sp) { for (i in 1:length(res)) { if (! is.list(res[[i]])) { res[[i]] <- sp::Lines( list( sp::Line (res[[i]])), ID=as.character(i)) } else { res[[i]] <- sp::Lines( list( sp::Line (res[[i]][[1]]), sp::Line(res[[i]][[2]])), ID=as.character(i)) } } res <- sp::SpatialLines(res, sp::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) } else if (output == "list") { return(res) } else if (output == "matrix") { if (sepNA) { r <- do.call(rbind, lapply(res, function(x) rbind(c(NA, NA), x))) return(r[-1,]) } else { return(do.call(rbind, res)) } } else if (output == "sf") { r <- lapply(res, function(x) sf::st_linestring(x)) r <- sf::st_sf(geometry = sf::st_sfc(r, crs = 4326)) } else if (output == "sv") { r <- terra::vect(lapply(res, function(x) terra::vect(x, type="lines"))) terra::crs(r) <- "lonlat" } else if (output=="sp") { for (i in 1:length(res)) { if (! is.list(res[[i]])) { res[[i]] <- sp::Lines( list( sp::Line (res[[i]])), ID=as.character(i)) } else { res[[i]] <- sp::Lines( list( sp::Line (res[[i]][[1]]), sp::Line(res[[i]][[2]])), ID=as.character(i)) } } res <- sp::SpatialLines(res, sp::CRS("+proj=longlat +ellps=WGS84")) } } .geodIntermediate <- function(p1, p2, n=50, breakAtDateLine=FALSE, addStartEnd=TRUE, sepNA=FALSE) { a=6378137 f=1/298.257223563 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 <- .geod_intermediate(p[i,1], p[i,2], p[i,3], p[i,4], p[i,5], -1, TRUE, a, f) x <- .interm(p[i,1:2,drop=FALSE], p[i,3:4,drop=FALSE], p[i,5]) if (!addStartEnd) { x <- x[-c(1, nrow(x)), ,drop=FALSE] } if (breakAtDateLine) { res[[i]] <- .breakAtDateLine(x) } else { res[[i]] <- x } } 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/old_destPoint.R0000644000176200001440000000231315147425256015400 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/distCosines.R0000644000176200001440000000242315147425256015062 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/geomedian.R0000644000176200001440000000306715147425256014530 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) { if (inherits(xy, 'SpatialPolygons') | inherits(xy, 'SpatialPoints')) { stopifnot(terra::is.lonlat(terra::vect(xy))) xy <- sp::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/geodesic.R0000644000176200001440000000271715147425256014363 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 <- .geodesic(as.double(p[,1]), as.double(p[,2]), as.double(p[,3]), as.double(p[,4]), as.double(a), as.double(f)) 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 <- .inversegeodesic(as.double(p[,1]), as.double(p[,2]), as.double(p[,3]), as.double(p[,4]), as.double(a), as.double(f)) r <- matrix(r, ncol=3, byrow=TRUE) colnames(r) <- c('distance', 'azimuth1', 'azimuth2') r } geosphere/R/RcppExports.R0000644000176200001440000000152215147425256015063 0ustar liggesusers# Generated by using Rcpp::compileAttributes() -> do not edit by hand # Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 .geodesic <- function(lon1, lat1, azi1, s12, a, f) { .Call(`_geosphere_geodesic`, lon1, lat1, azi1, s12, a, f) } .inversegeodesic <- function(lon1, lat1, lon2, lat2, a, f) { .Call(`_geosphere_inversegeodesic`, lon1, lat1, lon2, lat2, a, f) } .polygonarea <- function(lon, lat, a, f) { .Call(`_geosphere_polygonarea`, lon, lat, a, f) } .geod_intermediate <- function(lon1, lat1, lon2, lat2, n, distance, arc, a, f) { .Call(`_geosphere_geodesic_nodes`, lon1, lat1, lon2, lat2, n, distance, arc, a, f) } .OSGB <- function(x, y, p, geo) { .Call(`_geosphere_osgb`, x, y, p, geo) } .OSGBinv <- function(g, prec, centerp) { .Call(`_geosphere_osgb_rev`, g, prec, centerp) } geosphere/R/destPoint.R0000644000176200001440000000127015147425256014543 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 <- .geodesic(as.double(p[,1]), as.double(p[,2]), as.double(p[,3]), as.double(p[,4]), as.double(a), as.double(f)) r <- matrix(r, ncol=3, byrow=TRUE) colnames(r) <- c('lon', 'lat', 'finalbearing') return(r[, 1:2, drop=FALSE]) } geosphere/R/gcLon.R0000644000176200001440000000262615147425256013642 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/daylength.R0000644000176200001440000000326515147425256014557 0ustar liggesusers# Author: Robert J. Hijmans, r.hijmans@gmail.com # License GPL3 # Version 0.1 January 2009 daylength <- function(lat, doy) { if (inherits(doy, "Date") || inherits(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 (inherits(doy, "Date") || inherits(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/dist2gc.R0000644000176200001440000000130615147425256014131 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/plotPoly.R0000644000176200001440000000356715147425256014427 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(sp::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/distVincentyEllipsoid.R0000644000176200001440000000573515147425256017134 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/sampleAlong.R0000644000176200001440000000477115147425256015045 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')) { x <- terra::as.lines(terra::vect(x)) } else if (inherits(x, 'SpatialLines')) { x <- terra::vect(x) } else if (inherits(x, 'sf')) { x <- terra::as.lines(terra::vect(x)) } if (inherits(x, "SpatVector")) { x <- terra::densify(x, interval) terra::crds(x) } else { x <- .pointsToMatrix(x) .evenspace(x, interval, direction=FALSE) } } .sampleAlongPerpendicular <- function(x, interval, pdist, np=1 ) { if (inherits(x, 'SpatialPolygons')) { line <- terra::as.lines(terra::vect(line)) } else if (inherits(x, 'SpatialLines')) { line <- terra::vect(line) } else if (inherits(x, "sf")) { line <- terra::vect(line) } if (inherits(line, "SpatVector")) { x <- data.frame(terra::geom(x)) allpts <- NULL cump <- as.integer(interaction(x$geom, x$part)) for (p in unique(cump)) { y <- 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/gcIntersect.R0000644000176200001440000000457615147425256015060 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.R0000644000176200001440000000224415147425256015020 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 <- sp::SpatialLines( list( sp::Lines( list( sp::Line (res)), ID=as.character(1)) ), sp::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]] <- sp::Lines( list( sp::Line (res[[i]])), ID=as.character(i)) } res <- sp::SpatialLines(res, sp::CRS("+proj=longlat +ellps=WGS84")) } } return(res) } #greatCircle(rbind(cbind(5,52), cbind(5,15)), c(-120,37), n=12) geosphere/R/regularCoordinates.R0000644000176200001440000000173115147425256016430 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/dist2Line.R0000644000176200001440000000542115147425256014431 0ustar liggesusers# Author: George Wang & Robert J. Hijmans # August 2010 # version 1 # license GPL3 .spDistPoint2Line <- function(p, line, distfun) { test <- !sp::is.projected(line) if (! isTRUE (test) ) { if (is.na(test)) { warning('Coordinate reference system of sp::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, 'sp::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/geocode.R0000644000176200001440000000070415147425256014200 0ustar liggesusers# Robert Hijmans # May 2023 # version 1 # license GPL3 OSGB <- function(xy, precision, geo=FALSE, inverse=FALSE) { if (inverse) { xy <- .OSGBinv(xy, 1, TRUE) matrix(xy, ncol=2, dimnames=list(NULL, c("x", "y"))) } else { stopifnot(precision %in% c('1m', '10m', '100m', '1km', '10km', '100km', '5m', '50m', '500m', '5km', '50km', '500km')) xy <- .pointsToMatrix(xy, FALSE) .OSGB(xy[,1], xy[,2], precision[1], geo[1]) } } geosphere/R/mercator.R0000644000176200001440000000077115147425256014413 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.R0000644000176200001440000000214215147425256014533 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/distm.R0000644000176200001440000000106715147425256013716 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/gcLat.R0000644000176200001440000000201415147425256013621 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/helper.R0000644000176200001440000000142115147425256014047 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/geomean.R0000644000176200001440000000123515147425256014206 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/R/antipodal.R0000644000176200001440000000126315147425256014547 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/greatCircleBearing.R0000644000176200001440000000054415147425256016311 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/gcMaxLat.R0000644000176200001440000000255415147425256014300 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/midPoint.R0000644000176200001440000000262715147425256014364 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/distVincentySphere.R0000644000176200001440000000150215147425256016422 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/randomCoordinates.R0000644000176200001440000000101715147425256016244 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/alongTrack.R0000644000176200001440000000175215147425256014664 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)) angle <- cos(dp) / cos(xtr) # Fixing limits for the angle between [-1, 1] to avoid NaNs angle[angle > 1] <- 1 angle[angle < -1] <- -1 dist <- bearing * acos(angle) * r if (is.vector(dist)) { dist <- matrix(dist) } colnames(dist) <- 'distance' return(abs(dist)) } geosphere/R/areaPolygon.R0000644000176200001440000000756615147425256015070 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='SpatVector'), function(x, a=6378137, f=1/298.257223563, ...) { stopifnot(terra::geomtype(x) == "polygons") if (terra::crs(x) == "") { warning('Coordinate reference system of x is not set. Assuming it is degrees (longitude/latitude)!') } else { if (!terra::is.lonlat(x, perhaps=FALSE, warn=FALSE)) { stop('The coordinate reference system of x is not longitude/latitude.') } } x <- data.frame(terra::geom(x)) x <- split(x, x$geom) n <- length(x) res <- vector(length=n) for (i in 1:n) { y <- x[[i]] y <- split(y, y[,2]) parts <- length(y) sumarea <- 0 for (j in 1:parts) { crd <- y[[j]][, c("x", "y")] ar <- areaPolygon(crd, a=a, f=f, ...) if (y[[j]]$hole[1]) { sumarea <- sumarea - ar } else { sumarea <- sumarea + ar } } res[i] <- sumarea } res } ) setMethod('areaPolygon', signature(x='sf'), function(x, a=6378137, f=1/298.257223563, ...) { areaPolygon(terra::vect(x), a=a, f=f) }) setMethod('areaPolygon', signature(x='SpatialPolygons'), function(x, a=6378137, f=1/298.257223563, ...) { test <- sp::is.projected(x) if ( isTRUE (test) ) { if (is.na(test)) { warning('Coordinate reference system of x 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 <- .polygonarea(as.double(x[,1]), as.double(x[,2]), as.double(a), as.double(f)) 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/finalBearing.R0000644000176200001440000000111015147425256015144 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 <- .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])) r <- matrix(r, ncol=3, byrow=TRUE) # colnames(r) <- c('lon', 'lat', 'finalbearing') return(r[, 3]) } geosphere/R/perimeter.R0000644000176200001440000000344615147425256014575 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('removed argument "r" to use improved method') return( .old_perimeter(x, r=r) ) } n <- nrow(x) d <- .inversegeodesic(as.double(x[-n,1]), as.double(x[-n,2]), as.double(x[-1,1]), as.double(x[-1,2]), as.double(a), as.double(f)) sum(abs(x)) }) .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/refEllipsoids.R0000644000176200001440000000263015147425256015377 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/makePoly.R0000644000176200001440000000753015147425256014360 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 <- !sp::is.projected(p) if (! isTRUE (test) ) { if (is.na(test)) { warning('Coordinate reference system of sp::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]] <- sp::Polygons(crd) } polys[[i]] <- sp::Polygons(partlist, i) } polys <- sp::SpatialPolygons(polys) if (inherits(p, 'SpatialPolygonsDataFrame')) { rownames(p@data) <- 1:nrow(p@data) polys <- sp::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 <- sp::SpatialPolygons(list(sp::Polygons(list(sp::Polygon(res)), 1))) res@proj4string <- sp::CRS("+proj=longlat +datum=WGS84") } return(res) } } makeLine <- function(p, interval=10000, sp=FALSE, ...) { if (inherits(p, 'SpatialLines')) { test <- !sp::is.projected(p) if (! isTRUE (test) ) { if (is.na(test)) { warning('Coordinate reference system of sp::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]] = sp::Line(crd) } lines[[i]] = sp::Lines(partlist, i) } lines <- sp::SpatialLines(lines) if (inherits(p, 'SpatialLinesDataFrame')) { lines <- sp::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 <- sp::SpatialLines(list(sp::Lines(list(sp::Line(res)), 1))) res@proj4string <- sp::CRS("+proj=longlat +datum=WGS84") } return(res) } } geosphere/R/distGeo.R0000644000176200001440000000123015147425256014164 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 <- .inversegeodesic(as.double(p[,1]), as.double(p[,2]), as.double(p[,3]), as.double(p[,4]), as.double(a), as.double(f)) r <- matrix(r, ncol=3, byrow=TRUE) if (addNA){ c(r[,1], NA) } else { r[,1] } } geosphere/R/centroid.R0000644000176200001440000000334115150650134014367 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(sp::is.projected(x)) ) { return( sp::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/gcIntersectBearing.R0000644000176200001440000000442015147425256016334 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/span.R0000644000176200001440000000476315147425256013545 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 <- sp::SpatialPolygons(list(sp::Polygons(list(sp::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, ...) { span(terra::vect(x), nbands=nbands, n=n, res=res, fun=fun, ...) }) setMethod("span", signature(x='sf'), function(x, nbands='fixed', n=100, res=0.1, fun, ...) { span(terra::vect(x), nbands=nbands, n=n, res=res, fun=fun, ...) }) setMethod("span", signature(x='SpatVector'), function(x, nbands='fixed', n=100, res=0.1, fun, ...) { 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 <- nrow(x) lonspan <- list() latspan <- list() lon <- list() lat <- list() for (i in 1:npol) { pp <- x[i,] rs <- terra::rast(pp) if (nbands == 'fixed') { dim(rs) <- c(n, n) } else { terra::res(rs) <- res } latitude <- terra::yFromRow(rs, 1:nrow(rs)) longitude <- terra::xFromCol(rs, 1:ncol(rs)) xd <- distGeo(cbind(0,latitude), cbind(terra::xres(rs),latitude), ...) yd <- distGeo(cbind(0,0), cbind(0,terra::yres(rs)), ...) rs <- terra::rasterize(pp, rs) rs <- terra::values(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/distHaversine.R0000644000176200001440000000500415147425256015401 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-sp::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/lengthLine.R0000644000176200001440000000162115147425256014663 0ustar liggesusers# Author: Robert J. Hijmans # August 2016 # version 1 # license GPL3 lengthLine <- function(line) { if (inherits(line, 'SpatialPolygons')) { line <- terra::as.lines(terra::vect(line)) } else if (inherits(line, 'SpatialLines')) { line <- terra::vect(line) } else if (inherits(line, 'sf')) { line <- terra::as.lines(terra::vect(line)) } if (inherits(line, "SpatVector")) { line <- terra::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/distRhumb.R0000644000176200001440000000223115147425256014531 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/onGreatCircle.R0000644000176200001440000000166315147425256015321 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/destPointRhumb.R0000644000176200001440000000235315147425256015544 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/bearingRhumb.R0000644000176200001440000000221115147425256015173 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/bearing.R0000644000176200001440000000254415147425256014206 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 <- .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])) 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/horizon.R0000644000176200001440000000022515147425256014261 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/pointsToMatrix.R0000644000176200001440000000522115147425256015576 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, "sf")) { p <- terra::vect(p) } if (inherits(p, 'SpatVector')) { stopifnot(terra::geomtype(p) == "points") test <- terra::is.lonlat(p) if (! isTRUE (test) ) { if (is.na(test)) { warning('Coordinate reference system of SpatVector is not set. Assuming it is degrees (longitude/latitude)!') } else if (checkLonLat) { p <- terra::project(p, "+proj=longlat") } } p <- terra::crds(p) } else if (inherits(p, 'SpatialPoints')) { test <- !sp::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 if (checkLonLat) { stop('Points are projected. They should be in degrees (longitude/latitude)') } } p <- sp::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 or SpatVector 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/vignettes/0000755000176200001440000000000015164275510014251 5ustar liggesusersgeosphere/vignettes/geosphere.Rnw0000644000176200001440000004033615150653427016732 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{https://www.edwilliams.org/ftp/avsig/avform.txt}, and partly on javascript implementations of these formulae by Chris Veness (\url{https://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{https://geographiclib.sourceforge.io/}). \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{https://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf} \end{hangparas} \end{document} geosphere/data/0000755000176200001440000000000015147425256013157 5ustar liggesusersgeosphere/data/merc.RData0000644000176200001440000106205415147425256015032 0ustar liggesusersý7zXZi"Þ6!ÏXÌá~5ïþ])TW"änRÊŸãXVÀØø%>Áƒ§"UZ t»Bk×öô}ùMI™ÞÞtrøàÎî€U)ËÓW*v´î*‰t6€_uXý­¤éŽžS…H\±5èKØRahwX¿A-H€±ÏF*˜ÓË«f‰…\vfÄ!Î0"q¹ô=ï1´Ê:ï¨(±m7AÚþ$*˶–Ê•¢MwiÁébj ˆâq©„©ºÂÜ—‰aÐ(î…Àû—,Âz)¿˜Ø=àÌÖJ«9(årD†ï€Nå–rQÃ葹#rá<\@Í |üPâ¹ÏÒl8ðŒMþ›é…Öq4°‚hR6ÉFÄ ®Á¡¬8é¹aå^|}íCby<Ûª€ãÄEC$qŃ׉ü>øÞ1ðßЄ¾à‘Fâû½Þ…±¿B߈æÊï-¬¼ ŸŠ*p}º“…j{Nk0vkIÉ3£­+tG¬þð3¡}rè:­íâ9vd^ {ý¥"éñeú'¡•¤BL­ÏËYþSŸU»AqëP(¹Ü˜úLy±OßWôÛÏÒ8N÷‡Ø5P‹™¹àŸÞ’ýÞìÁCº!ß].45è@èE¡Gà°Ö, ) ­n#¸f¡Õÿ`'Dà)”èáZÎSÓâGè´*ˆÚéÜÔ0h[0·še¿Ê©‚8^[ôÝœq´š‘†>J_±lß ás¹£|ø Ä ÿÙÅH"œ^Iùp?}ùë­[﫟®sÚDÛ[`FVvÍÍ“›94q2rPs4f# ûÜhù—)!­”ñÀPLˆ0Åä_F‰é°”ÉÊ«§õF76Xèðÿ|½Ã1â(á†X Í&Ã]tåøêƒ ´ŽÚvö«*•ÅzoË ƒz™æ^@ãËÝ{r.É´|tIâ´)´¨n5¢Ä=;˜»Ê5–˜Ã̽åÁÏ.SzÏ6ˆ·’–ŽšëOo°O:°y[û-M…Occ~¦KôGÝë·£>;Ÿ4_!¦Ÿš†È4Œ½ŒCý\oº²´©ÚXïü â ñJÚ&ÓÚ¿ß}é-‘U 5Ùú¨ye\¬Çª‘¹ªŽ‰WçÁßÁÓÌ ƒ•hÞæ£Á™a ³‡4€æ®[ðœíã\8ê80 ׎F-…|Ê?ã=__5âX½‰< ÛÊo ß 6'ÅÚ~l„$iyQ’÷NCÃSÊbsÀ۸ľ‘ŠeĹw›9¹Q»ÉÏR°QS u$ YñßÁ'׌âôv#út¬>ÜP°ˆÉ | Vå?Ú*ÏpY¨ð5Ãþd¨¬UÆRqR¨%»l…|÷ÿ CYÆ.;œ½*aBä¢aÏþ8V¦1‡ËÚXfm´¿ôu•80·•Æè ….G¨86ð¥Únµ °€»7ùSü—æºÓ¿Ñ­†UðÛµ¥¸‹bç }ñmëòIU±lø”~†fà®,çË•œkž$P$KÒZº=$ñ‹Sy=EЬÄsõ£ë•]‘}w|sêqXH|n™ì”Í÷°–g½?Ë( J&ޱcZæf xrßcG`¡g?k÷dObQËw¼"EŒ1Ä­Ëzâ4¯t2ý³,‘ Êä]rU{ûbçΦ’LNŠç™åº ì‚æ7Žãõ¡¯œƒ>}£¦#Qæ¶Ý¹;€.¯„õ•pc‹·ÚçÉ{H 8çY¬<[œ4Mž[x†# L£†Æz ëÕ?©·Û¯%tfF\àx†GOq°}æ]råúÅB= Ò­¿8Ôd´5…Óì,ÙQ±¤G¼›§J¼â?NÄ9i3åÓAL‰R¤F /¸¥ù»,‘àaCëhâ`‰§dô7|^}¶|œ¯c9”Ü^ÐÌz-ñåÃ<0Älßø¾×Òy-Þ ´ ûPY‘ÄUé8Îó’ÜÜRý¤Ëkã™’ûÚ7Ò9PúC¨D‘ÓQ%¨ó0oS,JÝ@=ø6Îç÷8œ6IþF¬mYTwà-£¹¸ØOu§Îøž“Mñ¦õ 8Ò·/¬‚·=àUäÛ è| ^ ʋ패3~êûa2e– •x°1R)=7>±³_ÓÍì™ã§ÓáE&ÃD¨mRþ.os üCÂàfð}P‹]MЋ$èu9Hªl (ÑûøD’‘û ãôôÿÈZ½ûä¦Zœ›^:§º’D#ˆA>O’™0å‹kˆ¤k™#ÅH…ðˆz´¬aÚ1ˆvœDÐÝie¾{uˆ.»Ú“ÅåÒü•àŽu‘Ëü?„|h»ìŽbrUB¥¹bA<òá>pU½‰ŒG]"Ø:µÈ_¥v)Ú-uѼýó•ž”Vk(;Oi•€ÇâáMàŒÆuOò÷`FæH/§÷<ª‹Q4¯ S輌@$Ã'¬ðÍÛ‘JãÅÈÅkÛBòDU|9`‚¸©gŒ–bÏÍ•¤ûpÅ3‚ÉوÚV•™;G£2‘„\¨Ã"iNËe_Ç^nä"æ©Ö$Ÿ\øÜ¶NXVî/ Ä"¼q؆úA¢´™ÝF£Î¹qüh³ ¨+x Eè;k(Ðܱ€BŠU1]¬`)lçdM†„`WáÚŸ3—š,|Éß#3´Ñ³%Š”²;l_8ƒ’Ò—NùntcüèȵbYß<†¨x ê$î·pÎu·¡4& íÖŒ×7‡ÝU*ˆŸë1zK¼úü¿:!nu¢±fÚP’ÿþ5:ð‘©fiTææáöSª"§À]°$,?__–Í:£^\xÝ&ÏFžÏ Åud 6¿5¾RyÉjüú©Ìpò®ùœH$~ ùgàÆÓL…=°Ìö1¦í|ênËû·Å4Ÿ'޶nÈ·;ˆ¶Üéwáo§boÙSª…Võ½¢²9…Q¢ø½p½† îì{ lTò¨pÑó³õfßê¥W~§\+–«d ½`¨“ÚØl î ìèµÈ3‹€AýI„ãL†úßÜ€j6"©{/¢ç*’ŸƒZH”PßÁ‹ƒN2p/ þ €Sö§Iœ«V§¦³»ð ÈNg7A˜Ú‚_šGÄêÛ)ø"Ú#Š-˜Y©–‹Z®*†ó©çÌÂ鸎“+0Ìñàa ˜z¯ÆÒF%³ÀZ÷uú°?þ¾=˜4²ÈçNgdz‚W »5ÄE,…a){z ‡wºmŠË¡£:»-Õ7·èTÁ þQZN6öØP{BšFI| pñ ¥2ÕNXvwoíêê³+!ÕSßl屜—ÞÄp#öÿ“ð†"e¡^ÌPà yâ"¿ewôÓðûs›ù:.ïÿÕ`€W¤Á§ÄMùã%`æ á¼:Œ"ÆÎ£¶ n `´M{¸fð{e‹úö¡ÿ^å2ÃyÃ]AÝt‚¸Œà=$É×¼óœ\l bO›.pœ Ü­³ ³Z¼_`%ÏXرÀsžFdã ôÏ©^ïÐð%PÍ©ažŽæi‚±ý}ñÖŽÊS>„²jQÉ ±¥~ÁQÛßÚ(qÄXtb_:žB¨O`³Äréã¦l¬­3òÍ[‡wôþ‹s›cDºu¤-û‘ÖcݩתüºÂA˜ "Ÿý­¶cH€£} ðŠ’.¨ŽÞ$k‰B÷ˆ\wc¢­ü€ÅB¶ï ’Û„“ê×úÚ-¦ÝKs&ˆ{K oê¨ð‡Ü!É O«áPd ñ]WNkñ‹, '‡ž–r+Ï¡»klè§¢GŽîÚÄGoóRד_«¶Ç‡°~9l>'^OœuDí#þ[J‡K%šù‘xG[QÇ0õÂþ&4Ì‹ÓwwêHФ Þ®úĆFQk–€ô²B‹`ûÌרMl5ÑÞŬm­iñI R]Á,™Uð±Î‚™G'·Ü/bÎ i:ÖþžnpW¤AúòÛk,Sm÷û?ºœJ»–Té£Hzêcó¹²}{±žâ;5,—,§²·•g^ˆ½z˜Ñ;ÎݪŠûÊúÖoæ>¢j“Ò÷E2(Æ@&Ì@Ä9‰Ü×®q<"þŠ¢¹&â=ø8ÿ5!£Ù…±¥Nx(ÖÙì¡ÔËêIÃè>´ÀCÃum†úðö¨ÎÎm–ô>Ïj­¾?V³þ{C¬%I«È¦¶o^/a[ÎÍÔƒÇñL^ K\í^÷úð0ÉŸú§Öfrjq^UÞcJ{¥­N~—CD;N`?I±ƒßé…ãUòe÷mÓó}ûÖê¿ÂY6ïµU¹—厽§Ó§Ü)%«š9ýïä‡,7Ÿ—s޵n@cS†#ÊÎó9YýZC˜•Å›ˆrïVoIqMóìΚ™Ë™­TÓæÏNÂñ|–ÜÈÆrâªaD3°¿“ràhk(É”¯²ìÄ{Ⱥ$˜ÉREÇ0rO‹œ®0—ÂþÌ¥ß2ˆ#;‚YWœ$ƒ8*éMÔúv›šM•hº•úx]½ÅU ±*—,e›i’pï4³ Ý@–ö8êׇ²^Œî+f‰•L…"^WôãðÐ+OWEèéc†à'Ö›¹øžDÈ¿‹…¼y‹obÈì¸+CýݤE9ª[ê,„5_"ÉñÀgøçãÿI°¹^É—CfF öâ㇡4‚rHUmÁÝø Æf"ÆÍAÖùÉA-­Ñ&WÞîO ¡#ÂhŸ©®UÕáß(îI*ˆÝ<,L£ŠSéM=n¼G×zÕ´oïªJš|8pôÛÛSN³]ÒÁü7¶MÌT<œBaäH‰BNþ™áœdÞz®“mØB+y !Ò¥‚ÐDÊ=/Ü8?XøÍw.{§S~@JÍ–ÙÁFóCØ»~²¾[„#-mdϵɮ˜ã”ÄÎ µ8e†ª c¹Ïä{6Ll˜!=zdzÒÏZ¸oæ¥~p:.êÝ¢`ŽcBǬHh5FŽ!ÜcQ”#ˆ”°,"S–¤kKÒh—³Ç©6«3w +nÐYIΩx ãø’Ùæ-N9NW€;ŽŒñ8Éâèõ²]ʡӹx«ÿÛ 9ú§u¢1\X!óß3cŽ‹çE8§DJ7Áç"š6ú@Ó\ûxþ˺0%üMo’ŒÑ`•õÒÁü9bt”¶¿c°ØÕ _PìÅÊxmhxžPË´ ™‰S6Dj1+:|ïÎÏör “s²÷Z}èבɤÒ†_e-iB7Å3:E ï˺|i[äuÇ Av´› ×™ì ñîJ=¾uŒ3ôгúÚNô¥á]µ5ï„s)†}Žrƹ_7³X_)ÅcP·Õ³µJ}È©h]ùú;@z´€[àEÿU·<}æ?è˜GÉÅ1¤] å!JÃw¶Sò(¯éÑ;%«}õ±é½MýO³%mÉòWêŽ{%…hß-á‹xÀ Õg귚Ȋöjo¼I IðK°a£Éþ#×L{mÿ3÷ vÓ‡¦‘¦™_¢}*kÙ™WtyWÿŒ¨–$â±+ fڄα·bÕozš|ÿoÊ;#JCO+nzX³´`’“ܵ×∠•ÞQd¾¨ûºHÑòšî޵”qNÌ”PÛL^P‹ØÇ4æ{s9ùò‹d$è-S?,)d¬Ñ”¢³TÎyQ;ê±&ÙýÀ›”s•t> igð—WCé ™Zɲ‰Üt*h*j»–p_öeÊjB¿Ùõ)Æ DjiJ:vùĶ£ybïï$ÕuÍíégö•êD¥eJÞJÃV‡àû‡»AŽ«Ë>Êú£‹5ù‹²²ßÉryåXÔEñ|Å‚“ÉNú¨/©e|°ƒ2Òt¡ö,Ó¢•4Ÿ|yì¡ÍÆð‚Y’x©‹"˜ÁRÓ¿9€Ê¯‹ÙÛ·L0 Àv .ú÷Ì)‹ Ðn˜ªÜ_/ª²9é+õÏïì9j-8{¸Á)kÀO.ÁìŽB]Á¹ÿ¼`%bæ·aî L'Òö×€+ WZ<ï# ÌÝrµ/îø¶¥„ÝDPFÑw{¾ .áGcÞïÓ%áNÛ"È4Dm –©SÒÙ&´q*K)¥±ÿa(c!¾÷Ö^3ŽWdü&fCÉÁ*½Õ©—w§£ØŽ‰û&$&±ž†ú¡ ‚±Ù}³{v¹[–7Íô®â”˜{MÎ9sE"0 ð³­F¹«]±4g‡ "¢Ìó¹@óœT‚‡'SG‰ad¾¥kÅ?ôZMA ¡ê£Ù"oð,žCÖP3-•0!b7ÞL«dŸpµ · ®x/šÝúâJh€K 0Îó›éz2 $¸£@Ig{R¹ôaçØ¨úÇÄLqwbV¾ƒ ¸º1#ô×r@b/»¿*ЫÉ>P=3ÐõÌ›YþNLÑ£©ruÛ¯ !——õ,tf9eÝžŒ0YùX¸;Õä\1ÇG«å¥Ò’ãþìId–Õ‡*§Ñ³h`Aa5ıœê˜‹\+ÌR¯óÉ&ùÖÃzN¹÷k#œM(¾hdÃÕÁ}㎻Xȯ%–÷«¦lLb~"裪˜qk1ƒ´K9ë,(Q1tßݱ=È ìˆWc¾x“ÄŠB³#5ÆÝºHiÜ34›²CÌ=²Ñ_»åŸX‹ -§™”L‹bê.£z˜Y}oÐŽ—çÇ@6é‡@”“E E\âsˆiG¹pgÓb¦‚kào¥É>†²ºÕ^,„ÜÈQ^H¯V'Ö(Õl“Ðqj!‡½Ñ mü‰¿áEJú¾?RC  ªŽ¿3º‰½]D7S ¨öü'Ä?’ ûÈò–·.ëÉ‘ª“–KRK,€ÈÓá#M4Ûa‰c¢{kXÙk`ŠýŽcæLd—öp`°àA_ŠMÈUD’Æ-Sº=¯~`i¨Ð+¬@Ö@ºë†¯ªŸîèP%ÿ¸.é˜ßû—’û§´n¥px8ýˆ¢…Žo.7¬™—†¸žÑË\DüZ+<Œ¯ŽÏk±íáŸÂƒOn½–=¿ùkÒÍ>êÊp QøÈ»PõA#|e‹z©{ýG…73§" ¸ŒZJtþ|upÂ-ñÖt[E÷þ.Z5·$ð²Ï­ ½•IœpY.½Wàgg1‘ çB ‚–Ȭ>¢fW\Å<Ü€Œz@Óx¡èܲïQGÜ>' wÑŠ’kšö„ ©Pý„‚˜N£ì]L§Û9^ú‰ðûh[ðEÊO9BóáU;z˜ txS<ã~g¨Õ<àfšúÝhºÁ ?¹~ææ@â5×`™gèæm*Óä;AŠljÊUzÀc•…G›öB s0ÇXr=æ…ȯv‰Ï=e7À´ÅÆÕ=]“Øî”yÿ÷ —Ÿ»þ\âçàˆiªÃõÇ~¹ÒóëRÂO%8†_AšC‘•d¹>::Q¸é×ù¥4KòiIÙK‡\¸­zEDo¿Ì Ú¬5eÇ4Q,éA»·7ªÅÃAŸgì‰Q›øÐG²øO"°oâÿH7ŠêKtŽÆ)QOÜöS¾- a4»çÏŸV„å ÇωZ4ÓÂP¬-ZÉ\hl´ï ýáælI35ç[;~>`Rj.ðŠÛÐМòŠ@–y¾FÃk+,uÜÒˆtÂü°î2šôåêS^tÂW;ÈšÔÏAîïb¶[¨ ÿµ°ê™®úagÿ‰Á0f±¨£ ý›!7wáýð㑹ôvü°mÂÊQù—³öc(VÜ •Aî(œK ‰ŒÌl¨æÐE$Ö•¼°B!x×EÊŒ[HĘ·ˆLÝœt˰Á>xÙP Õ‰¹ÀÛê°ÍXãØŒ,\éo¥ÙÛ|j1£b­¿Xbዸ•·ƒPH7¦,9\‚|žõ•; 92 #2wÛËè^ödå9òŸÔHñ$hvÞíŽ(X$É|•¸÷Fié‚‘&=Ü·ØüE«sÒ{`GOÞljèË“¸úĘd.§§ÙèF"Ð× Ôæ(¯µ©.ºÕûÔ3«¶æ £6+V@†#=ŠaÏŸ¹ËÑóùчßy•SâÃ[þ¹o>]?iÀÑl¦œ8½—Fa’&²Ã÷ùNz_;¨Û3¿· LwÆžø¿ˆƒÕþj& 7Ó>¤DWÕÅÔ9RóR^òÌ4«¬Ä[¦ Ò Æ·PWu™ªt áϾý¶Áü†R¡±Ë5Ç¥<ÜD'CeŸ”uiŽbñ“½ü’vùÌIˆ˜Z©GfÞYz¨61´Å,Yqóû +ÝõËTAæ®n¸¥ÑUÙÖ°BÓçé…Ù‚ÆÔ.LJ¹R{¾OBs‚¦à$›ß'3A‘ðžæÇE)ÉG¯V7×ðHáÎÛÀWA­}?JW2_ýldúMXQ©Ti£œrž„×ej_ù&¿šwŒ‹;±ƒkÒÊ|xÈŸøâÜò>4½÷‚ΚïÃ`ƒÉW/´ÏQrªwh"GÈÀõw¡B¿’.:!˜Å;âfà|ÅÙ¥N¡ñé K÷ËÀLÓ┳¡pqø˜®ü‹Úà’_ ÙÝæo•Ö¥QÑuu³»K»ê–Æ!ðÂ4Zߌf ÂÔƒ ^Ɖ<ÑÅ*œÜÌCÅ00 ß±î½[Ó3ë¾Þ0ŽvVyïÏa£ì÷Z»¨AtõœÏàëŒHº¼U•³si*Kñ[–½[¦òP̳HÝÕK‰„ÞOï”ê@Ý7Ë5­›Ûë¬a,Å"N²“M{ç|Btü›K³hºÎÁ ì|ˆVåÕl# ã®eRÖhß >É…V!ÏT>ÿ»y×ñè…·µkA~P"\¦Œ­jgîXi›öÎr{€¯ÄPÍJÞ‹ñÏiì×(˜\ŸŸÂ6YIØ+â/³œJÀÙí,ŒXªo"mΠ2qà¾kŸÈ¼ïa™6"_íZŠb”ß_¿G›ò碭º û¿@@f<‰s”¾ÆÓÏ&K¬ e»Þ¥s¹fÆ„œ*åhóðËŒvkyÙ§X½ÞÊ '±åàh{(¸õ‰r|Bä·³r= "‡‡¬TƒhUt“Þ!šÁßF·‡8W&óè9æ]ÐgÂæ×e™¹¢ªlI\ìj+ß4ư¾¯ú2„ìN ‰GL)þÌýnPð€½÷1g3 áÇq~üDp„H LV“b¥˜`ò,ø—SZëˆ '‚#w¾¢å*óá·ØiîŒ÷h¬›îèieÿŽB語– ‰æïáµúóÎ;±²WEÑ‹•÷l¯Až «ÉÊÏà‡êW}-ïóÒá^Ùljîõ=£L&?T™Õ¤HÙÛÛž Ô{•¿]^NŽû­í©ÁYŽÀ÷œ#ìÌùÑò<.î;Rß#4™.‡ÕÝ߃‡-fµeµ‚ÈmŽô#µ5.05t±2¹"V)—Ó7þ±†š)›&ó8$œ¢¬¡=ØÀkX¥ášë®ýK”®dâóÕ¿¥9”—h#£ 䨑/Çoôÿùw’ÞÀAÔ½·Õ‰tOLQh¯@=¢Í Taà¢=µa \;”N)ß–m©ØüÈ ÌĽlkëTÉö;XÂ!×É9@°ßºßt›¼wÈn§§DÊT§+ÔèMrA‹Tàõ65lˆyì©¿›r}XßÉ(ÏŽ‹›û3¦4ÉÍüœ<¸ (Kyš—ÛÇOî´¢9“¿™ ÃņQ¡EÎq®b”çð¾‚Zwò’w¦¨(O¸¢:„Õv$QÃYøø¡¤%"Hœ<¥àêB­=g…ªñŽæN Y¦õ1YcŤŒV½~z¡¿½R¶—S‹(¶ó—TÕ×”ÛwƘd³Rfežï¯“ B$*¤ça¦€H øO<×ëÍb‡•bî§óàݼ‚+ÝtМ´%‹/gì7߯FX¦òo°C‡(¾‡€K ]ÕC{@År ß+”æéïñ=ر(ÿ'ANGöôØuÙG–›ÝSfåý[«‰[ UžZ…%3/ƒK7ðп7Ö‡²<É;_>«ÐÚ„±ïÖV7Õ2ÑO÷tëÏaÙÜ, xâ oТ¬’DNú 5¶—œ^Pbáôu–]ßÓë‚iwTXxsÀ±ä£ë}/ç>4nzÁzRCVŽÑ ƒÐávQéáØ›¡wbøõrÿäs½¹"±è?ùÔþõºƒ-нp☤CjÓ¢.]1°ì>ú–«î;ÀY?ÎGÉŽ‚(¶7þjkWäze/+¸6ÿÚUç %{Tû÷¦aÕ9ÙÆ‘ G—š„-ê'({bàL=ˆ¼^ Ô®ºdPõølXaÖõnÀÐ 7´G»zëöž ;…ègŒYG”ž, ¦YÔuÅ€¬•ß±ÖÄ"5pƒ "ȬÁ[>‡ìpn+k<ä‘uÝ:Ú…ô%šÌ6dÔö¿ì3Û¥e<õÑrùžFÔZÉïŽÈd`¾Z}Êút·ñ˜ÛgVTPàý”ÁyjÿZ¡ŒM£›ö#; Ê*¦dÚƒ9 jôT2rü r.¨ E‚õ˜ïŒÂ-ëy9"pyú¢õ5Œ™Ûâû{Žª€ärëJK´û™wz©îçÖ´K yc‹¶UMycûçETØÀ-^p¾C׊ð.Öqwù‰¢R+I§<Ò„'§\lÿÅÑŽÃuü©êzpÑœ"@–%æYy/Òn^ÑèòÞÂ_m±E@‰Æ1§òÚôem_ÈçÙ3Nïۛ¥Q‡'G\ ¦k]}lýÔè¦Òã²òho'{lsv3#eÙr؃óbûR¨°!j/û‹68É.䊔ÉS‘ªñæ¢É¢*:»¿‰ó7ïHb:Ò¶è /[ô±µ{ôs(gb»ß¦[ç‘eAÇät`ãÅéŒ`‚¸ ŽÅÉøW7ÀÖɇ‚¯üí -W@HÁR*Ã(+1Ÿò #ÕY¾$ÚÊ¢‘^7›À€ˆ®˜1ŒXÉHü[Ùí¦Þp²aW÷cvø´\û~àäM/Äɲ§ö–ÓAá5‚ôD^ÜÇèíš~ÊÓ<¯›¥™‘w^j8A(†Þüׇã¬ATqÂ$§P¶60èæñRì»JÈÝ? ÜDz ÞÊ*~b{z ¹æÀËsÖZ£­«6LuÞks=¿hB[dð/UÃ4Ëe$ا¹F›™¬˜Å)‡"Æ¢O·,²Œé=ÅW1æ–qíù¢­ !Dƒâ(øsi‡Àï™Þr´€·½M&«F œAFwðŒ¨_´Ê PÝi¬.NÐíi"ö;@'ÿO¯Æ†‹V²•%¹:ôÕD-¸OõU¢óÀDü1ÌvÕÁ¦éAÒ˯ÜÞíBÉ6Ì2¾@¢çJ d™{ C`B‰g/ª‡ ÕÍþÄ’ÎNÔí©àÐëmð7B/%†Öëö¼²’ºbrÄžã‰xuLLW ‰~»;±u9êî@“3fcTªâÚF JÊ)`/lé~R¦ù}Ó?H§ÂÎt>ÜSÒ͈ˆžX¢E^iÍÄêg‘ê\ù²ÙÖà­5?h8û¹Ï7³à²L¤ÕÝ‹=8^W÷(„ˆz@ñòaASÍZ´nìÜ"WCo…ˆ‘s l¤Ž¼ƒ%êL7V7¸fÒ=™-¥(é0C%Ùz¿Š&ìžlš›Ê“ñŽ B™M±T¶O’Èl*¿—ø“ì¹f]¸ˆ#-çB!?Щ׍[OÁëï'JÍä¡@Õ}!—ñé×Ìé¨çT|w/:Fßxy{÷ˆ¾½#lÖƒ›©U¨®Å)fD)R‚€òœY@=fn¯Ê "çïC=c,ƒ²¥Œìô/ïrà º|gü&˜«a Ë4¨Á ‘¡‚§j0*k̨vYíÏ¡çû mõï*I/Òæž¶ºE9›f%lïò+UÀUÔÞàÅ’õ@÷¸ŒT+áæòªÃˆÿOÃÏ¥þEK;r;¾ä>VštÑ‘^ã|µ.b{ïÛÄ›­ûψH޾L¿7ÐÏœm ž§„Õó±×­:l}xxOr>Äí`~#ÚzÅ4ëñNt n)ý¾¥êÛÿ$Ø¢}Uñ¦?­5>Wœ¾t…=›´½…‰Д‚bPTzäÔ ‰y‰ô\dÊÍ…JOx©µ:ƒ>Þ}ƒ ´äþWÞå¿#Oøz™r§yDCè;†8Jð\Ý”‡21äêŒhPþ/Ä¥&À”ai ¢Üž¨°Ù×] o(Ê8HîÅU‰\ä+­#7 xŠkxËQgWéhê¿ÚÚhÒjqHÆPyc…ƒºxÏÍ Rǧˆ‘ªhZå•©µ<›<Ü¡Žò‹ã ý°Åݤ%¿öy–ÑcFî¨ŽÄ ž«­‚7Øž­x&nWoK…¨kYˆù$QüvÐý9úF½±J%õkE¨§kÝL*¦›è!N‰ÄÿÄ8{7îÐSzP=ÞÖËB_3ÓËg+ëL`TƒûpTø“*Oªëñ‡Q6€:)üÐ §ÿVôì 0„··—®P9nX8`ÒÎ|ÎiÃ].¸Éá…ñ>×è‡ÂL<È+Zü«ø°'ï×~ÆxK™¼uhÐ3úàJÆÇÓútsÎþ/Éêî=¬ñ ƒöž6“{l8}êÜ£ÉÐ[ ªsµ%¶ã¦EÁ»4³xlŒFŽê®}—R¹sj†«oJ¦æùώɦåã¡Lmt-'&z[áTVkT}<%u×°!£âƒUô–+̈6Ig¹¹M;®+¨1²+ßzˆt4L‘WÖ°7 ½ÕSNÆ[ªtîƒPlTäͧÇ(1)´J…ÜïÜoØm?Z2s¨â™¢CÆ[«¦ÎÕÖk9–DÝÔÚ4ÌI^þíª{¯ $MÈÕçq­À¨<$îîNd×^À‹›ëG,ît…ª» Ïž 7+öÞì6øôœÒ~n@`whÕ`””! ›¬½œÔø›â¤øÍŽb£šîLº)—òçÂ\õ%ñÿD‹öqÚiŠFph”EøÐP´øùÄ/ùùÒ1æ|ùPÅQVú á+‚S<–Z<Н¶&nü‡/~]Ñn)‡8ϼ´‰o÷k‹=]õmÊod [kâ®îI0ÈLašôgA“Ͳ¶oàÓnî‡F§—±â¿Ë}»/Ó¸ ø%“þ³L  ©¦ŸIà^‘*;á+‹ãÞ€ìÒ¿kD2´ ËÛ=Ò¸TlÚû7$ÝÍEýÖv×›Èúo\{ÄÈKHºxï­€9Çn\ðÛ4¯N}Ü\¨!—!;´7HÛI¦Ô ¨‚ùƒ÷béµÌ¦DÚZ!zVñëµAŵ÷9ñÀ³L4{ cDµv ·Ÿ¾2ˆ²ìˆt;ƒe…ýP¬°Æáõ’Zf…l_¼ÿ°“€Ò´&}¶#èøWÐåá7\—›ê«»6þraˆíogö¯MêšN9r7ÛÎm³ÀÝÈØrгÇ7ûJÛê¤ ·ëÍ%‹fxß§<-Ës(ë®QjÉH8A¥r W–Ž%\M¤¸0è¬)ؘºBì„‚áþû;L§då’¡~DðÊ7·£N={ûÍüÂjv!®\˜-úvÚ‡xËŒë¦öð7ÖÔKÿ+Vˆäûp„!ˆ|Ø}º©B7ÍÃÁ“/^´j/;mmÆÃ^HU¶‘üˆnº"5)=g /ðcÚ#ÄíûY´òÛ‘”<ÄÈy•'2ÜÁ|«vɆ½i· ^ñÛöžÿšÁ¡a~¾;ÊG̵—˜9üÄsƒû#Nb!K–gG:aÂ-”#>«é•©µ(Å8¦`À'&ŸûµÖyçeõÏ/ÓKŒ×ì$}ÂXz&iˆ)kàY°8=¥N[MLÎ[„”¤F-‰ññtC›€‚çÿ…´A×”êwI6Éfaö…p¹Ä~ȧ|9„9ÔŒbgÍk]$ 0ókXg[™‘¡¹Q¸ÔUÓœˆ±¼Åßuœ»¹»³tiíQt [*P,“oï9Ð@£6Š;¸Éá)Y%×{‹‡ÁQ°Y–ô!¥lwЫAø© ÎÒfLô>Pá¶crs&$Ô["ƒ‹¨ ‡ù à×y‹=µ›8õuÓYÏT ðO9Ic FòkŠ£úÿR¢Ð¨3 fj-¢É£¬·c `Q˜ÞFVœ×¶ËMt!«ÎÞ™!§5ËÚ»Ú0“'wPðõœ…Ú=|8X> ¸çÞó{¶‚øjÚT¿JN TÀù‰|Qn8‘#à0›«îü•¡£eÃLý‘]ãëY22®~RSΟN;ÚñiíG·[ÃнkÌg¸M›¹| [1Hš²IÑP«ŸR¹Ü`j’ýñ±]è©,®—Y“ Y™aPiÆØ5SÙ°ESú‰~´=ÍÿãÚô4Ên`O»|ÊKl+›¨ØyµØ"m0?RþÉZ‹nÇôOZô0Œ€ýzá®t—bTœx_Úyr?ð]­$_lÁÜŒ,¤H7‹R[f„ªG`5ßÓ•¥.º*IgAÒ\íÈÀ$a\dë†Ûsƾãxq—TG¯lîÅ€Ñs8_¡Êày8~ŒÆ¦$féIš^Fb9ÐÅ9Î&߯I£µ3Cú"Є']¾C‘0r_åçysA‹ͺ®kÄdzÝó;뫟T1¡=àb±m¢CßIOôûN%ÊjoeËšÓA)FÎÔQ†‘×¥ò»»ÇÁx÷†nŽ ì$ÄAÞÃB›þs$®´V±´¤%îS ©ŽûÎÀr¨yghÕØÖ¨~òKŽî LMkíÇM.´Æc¥pÁŒ>«®P¡o%ŽkÁ1dÁÑŸèèL¢a¤—„„Ž… Ög׿5ì‡Xȹ2D¤)ò‚ªIñRœÁïH˜ó»Òó nÔÜlö¥¥« º“áˆrÃwÓÐèÔ÷Ì…µŒùZÃÞ\mbp@$bJÒºã *ÝwñP)}ÆûõâÆªèÍÌXÍ‹}ÄÞo%¥/šš1ʪýâþ#!†3ÖòÚXG%&È¿ÔKfýÛ’!ˆ]B?Í5Œ{4Ux6‹±E#hÜ¥{îÒv;S™CØ=r0d‰¨j~ÜÝ^GØÔ/`æ­GçfûÀ¶Ï= Ë@Þ[P”‘DÖ«ÚÒñšýW䲌’bÉ5þL¾‹ºÖµwå;ëÛIÛv†¼d_÷®Þç§bQé½C™ðôÃΊÓCìÙ£_Fpà^‰bV=/ŽbìÍñ&—6{ã *™g›&£·PuOóf d…°Ñ’“…¬ÿWØ>OÀdlòõÖc—*O½MÜÕ¨…0 ¯‡ÑWo-ר-;H[õ¯oôf0À‹•¹Í6p`D~€ 5ÓA—3´bÒ¸ ‡áGˆ1[’ìÜÇO¾‹÷8Rìû¸÷õj7}j…—ú?MýÓ¼…Óµì$zâëœóéŠ@¾*§w`›‘SÇ?Ý®=z“p=l¹àx¿0“û9u½Úô¥b5T ®•é c „fe2ÝDÏ3;ÇEÄ I9––›ðøO'ç{aƪEA©•‚±O7Àx3ƒ¦»¯\J‹[)Wá0-@‘ÏX’ÀîzÄl¦vŽÕøìwÆ?#m;ëfKæ¬d~¥f4~ñ¨e¨4Tå-Z\_"½¨ko>úX±¬½ñÀúë3fAëÉKäQ€ª) ¦:ÐæÇðó;œ«³òlîJh8j¼ò@’QxJ8nLj†Ek ¿|£žvuNÎãµ)‘‹i³‹çÙ#Ùi#»{’ê…õœQ‡ Ùl¹—'uŠ׊¬…/eþVlúÊ<‹dÖ>¾%½»ÎU*K¦êyEqÏR¡‡–[­ÂáÄÅþѧö]f˜VÌQ˜ú1;sT1 °ÜØmÉÕ3;^÷â&ã²ÏÕzÞ[ êÕa›Y;Î7²©€âÐc¥5ñƦg*"¦’mÖvœ}³ó·%}Kèø†%»DŽCí4"ž¸ixWœüëNÐ^àü|GÎmc=1ñ, Zš¼Á©:&ñ—™Zƒ$„"TÕœ ^ =(Bü‚gB¦ÀòD]ÈŠEC˜ÕÝ÷¿ƒRò°BßÿŽð„H'سrƒ¢9¦¯–$ƒÃ΢8}…NĬO<Ÿ`R KVdnø÷‰²Š0»_ HŽY˜˜\Á{»TƒþÁ“¾D`ǃ‡g'œT\S:TlwaÇ<¸isl—êÏ]ÿâefjùkšKï6[yÑ]4xíáâØö‰ò¯!x?Å/ýà|x¸Ã[q›¦‹ŒÛãoÃ&õ¶¼öÀ ¦»núû{:[„QßA@2á¯PwX«köšöj~OE|t@äO©¥–-g©±0DÏί/ÊA7ɵþ¢K‡*žÅ%9„¸Èd[Ò9\›ÃÌG“ôãy$ä0wããòºû$¨±'Šž¶šÅÀø^ù6®MÜaP„ÿ}ù6o{,Ì{ ‡¦~ý‡+ÈGLŒ5¬9Ÿ¿Näô ]x| ˆ ?Ä.´ fP"Ô¯æ»ÝÚ¹ƒ½™vfðXLa…9ÎbêsŸ¯žffû¤²Qßqˆqp$ãzZYë³3ÙìïPA@/ UÀkƒgGD"¬²Ì+-iœ}Õ¶}k2ä!KÓ–Dï‘zL°ÆE`Õ§;‡§þ¤ø?•܇‚!¬ð%W7^PYQgX¼¾8h·Ø²KO§ñ¨È{²£–KxfVÀ¾éU öu\™;,ÄãVð[£‚èîm÷ó9w²ÓŒÅÚ«@†¨oFŠä‹Sbš—]²ðξ4øæÑtêÑZˆ¾ÉÌ. é ÉΗˆ2;i.0h Â¨öö¦Òˆ} H¦ÔŒ¨ü‹M/ÄwäZ5ŠZé“L‘qRÉ@ØR`xÿ¬’k¥9Bù8Bn hgØÎpÔÚâ£YœÎÎÝÒv¡•¿ o*a˜es¨ T™ã*TM/Þ¸ T†ýlʯûùº5Dîœwä­EÅmîŠVÿ¦·ãútsZ­”7L#'7öŸ&14‡·Oº”>&£Ä©òR™T‡p¼a ªqÁöøãtÕï’„>Ég楘Þ)óû@ÅVœjˆ=;q‹ÖËüµƒõ“Úœ^ó©Þ%`T©Ì¨Ù¡v3 غ´ðÂu1‘…Iú>,j@<­nŲxeŠ^Igu+Pâ­·×០8b´KC5ñ5¬~.¢_+«Ê·{š&ñôÒaì–›£šœè&ò@pJ±ûdñ7΃Ò«™FÔfQ!f=*å¹Ð‡ŽcF‡Å žÙ­P:ý*³L1k¤¤µêÀR:££>ºj_²²w†N>êdÿ`Â.ÊlELˆ™>{–\òs)ñ[Ôæ4 ¾b¥øØüO,È?û¢­„”™Š€§Þ:–øöx¼ºu©¨K‰Ò'rÍ*KvâF>Ðæº;–f–çu»SØ ·2h‰Húí¬3·Efßh‰wP\)@´”Á4µ7Sñ?|½ó'}¹@:WËß鞣¾SC] *T¼5‹t Û<ïÙZ6„õîÊêGhü0Ö:Ú[ YAÙb-ï^M›Æ½‹üey‚Ñ£H¿ò“TO1ôxÈq1å¥Mä c? s¯?”ú,Ñ#/õ‚ìKû7ƒûEÕSÄè~Ø ¢q µ…7C‚‡ç ÿ`K}­©q•þ,•x‰cô·dû$V {–¬UJr‘‰àIòl/hp9{xʆ¿dpGCz“$éýóºZ6 G QfÐÊìGt·ÃI‘º2Ig®MI,„72]8ŒzÖUJQ©¯—‘Î=4<V4g(µ×qi©;ÔÄ C±Î›6p€â«Úo7û+ZŸ'†q7grƒ¢L„:å,DùÉè6s´´J&è)p È4« ¡úTîÌ‚p¡ ûÈ/ê$|S %ßññûAŸ‰i˜NxòE *Ÿ6¹k Š©·±V”6`ÙZ|p\5¦/W¹‘žÇ©læòé/Ý5N_Jæ:ß.si¯/e¤AëgåXx°ó›óä.%§Ú5¬Ž®–m ì…“{ÌVƒµBR“áËF厾¹u™ÀU§]9ïfë€_Ã&Š…„î,&KàeÚQxc‹ÞD êÜ6- L§¥·õ/Ál}Q=t.%«Bó;áò¶LACq^ŠîÎEÒê_yh–‘VÖÛÇÍéÍG¨w°noØûøßmví æìôU î ó¯,nvt@^î]ûŒ »b¬§òìͳ–eœA5Ì8o~¢Œ“商ˊ„¥aÕNEX®EâTµ ÞøFåÚ¿eEgþœݬǸNö®ÿhvø`©¤d™!.óE˜OaíyŸ%A ©ºµS_Ò|Æ=ÃЊ)Ü÷ž0ÍHHµ›YwßvJ!¯RœqW¶Î¾IÀ-94¤én¸KSß¡”;@îú¬@å‹@ õ³¹µu×®EØzîâÔÁ—¶Ì½1ůmŸEc¹=Ñí/ÿÌiÆ< m2¦„ìúGÕgÚÌžobóG„Å®W£Í€ÒÔà¯å~þÇ»&ÁÕ³ö»wxž‰­ÊóÙgÇ:R™¥gðÖØ#áÎ!dûŸ< |þ²ÊiÏ})‰ÏÅÌq˜²@èšpü³†dk~é_žÒ\e0é! ^èp! Ç£X–9¢Kî¶xŸ™ÚšÇÙÂCÎÄÇ8¡¬J:§ðãr©Å†ˆ| z¡ÈŠ™$q˜˜‡M™Ïi¦Ï!'£L°MwAˆËóÚ®}ÃÍÀ¸wƒCw0Öw@jøñY¸Ý.¯;ÿ½_¿1(ªÊ$ÞÓtÐ9%Vf¬”8ìE(cÕ¸÷»šX¢ñh§ {K½tBÐ|3ælk±b÷T}>þâ+It-1—Ù¹ÌgÇÏ¡ ïr Èc«=ßUm9÷ZTñþ›’…¾2XNÃo˜Ó º˜)ºwJ´šNê. Æ1j¸ïfBÊ/ЩûeÝêz7É೯ø¯Í¨êz¹¥±D;oލtçÓ}Ÿ¨ø'˜‘…™ÃXdÝ ¥9*wa¼5è1¿€°{Šíã¯e'àrÉóc9ñ>BXhpX¦ÄCÎp¤pzaä(ÃÚ,?¬'Dç•;_§'†ÕŽž†ôÅ\Ðz²™g«±/QÁxDâ™O÷Ov&ºÔôÉŒ› ZÏØx¨U3Ï÷/¤¥_#ÅZ÷MÿóxTB8I“6«ë¸w7dcçAáCóf›V$‹©ñÍjùVOÄÿ©MÜ 3 Ü“êJ™èìvö]9…Œ›ù›RŸñáiªó5I‰™L1‰´ž"sŒ×°6ŽjG§• ©˜}ÒPC™©gé‹Ô5æßÆû±…ïyæ6#)¸¾ÑÄÀ܈(ê³S. 좤óy¬¿3ÚÓ›‘úJ=8Wg÷V Ôÿƒª²9œÔï¥Á—Ëh G44y)‡™y;tdzuû§Ô¹ôuù ,PGl3©„ÊD´ÏýçÕ²¸ù¤É˜$ÎæQDmO0ö„S©.xŸhÜÔ^ðî¹ç>ì’J° ¶ˆ=Ô0½€Vθí¾Ôú}—U‹¦Xh †c(` N± ]·½Ä5úÁ-š`…"‡º"ç®·]”‰<èòÜ…&– <𣚄|$Iu>/Œ¥Âññí‹;°ù£^Ÿ¦Õá—ö– \œÃ‘·E½; ºä+ôu>N†Óª³(WŒVQï½Ä}ì»gG„L—vaÀWØÍÞ/VñÄaÅVÌhxHÔ–µ}‡H\ñ^½>ð¾]&]RðGzÁ×wÓó`OIB>ŸÜ âv¯»§>þà„ù )ñº{§Çƒ* ü‚kÆÓpSñ1+K\¸x6V$úciìez'êuW¯àw¸k½£ËÍôMÞè’ás~,g2Ex¯ŸîªYï~r$—Î&“òjF&GiéþÝ™Ý-†½b¢üÁÆ ÍÌ7äè¾ Ë7¥ŸFœ‹4 /Fè¡›MUkl­=â‘ÛÛâ*(ΚEé–Q¾y§-²©_‹m:'þÎM=•±¨0:ûg‹ñxáõ…Êñm«›˜ÙŸNiöæsb²/‘Ô›š˜¤;W  sÂäø©Þ3ãk€mv{7ú›Cæ×£qdþŽõ¬KC-–ÔCT3DÅØ“=E@9Í×-¢Üù[<æ°ýžƒ…ëWƒ,hnœ1\ W±.½ ouAÜx¬3‘Ô#0™þAcP¾ÊÀôÉ •žáUéx±›×lnüƒè^)õ¶‘ ¤’‰³þ»´Œ7ˆbŽR%šƒ'r®båÓ°ó:ÿ*ù˜¯ó¤öÛèÆy6Ó%àCæS‹ýsݲ…U¦¨Eú‡¹°âA?ÂÍ":•YÏÛ–ý3 ‹2éѪ=¢œ¤V¬ùÀ® ärkt‘áã¯û ´cV³­¸ùÇ—œ`9Ÿ’d~}ò:<°¢%×Ôo±?OUŠgcÈŸ´ÿJF{õuÕ¯€ES°ŒŒçÌIk£z†˜B†g)ýûlÜ “ ŠKôJÆÓË×g¦¤„˜Â,ï20#œË±Wðó¿x"75Ÿ—½\2è[tUö2ÍÆ§$ aî»i‘QyÌnïÍUD »é»½1IߨP ’5ÄÚ]ÕÂsBPXªjè”o{§ïçÌòþ4ŸBsq~¨‘ÓüÒÙQÉ P*BaÔëlÙþ¿Do_ZÚE`¾ÜeŒ´Ú—â"ÔöâF^`6²HtØà€~ÊDÛ”Cï‚RñaX‡}#ªï0t®všÉä/ZÇcÕ,æ˜Ð„GZj­z´m'(ÍÑ›}jWØQ®cˆ(¡¾ãÛÞe¾´gL ù{Ç8ƒWÏ~<¤6ÿüŒ€#u NÎ@³ýüŸW0Û]‡¼‰¦ôàtă² ÂP ¼@æ!¯˜/û%Ó·AEVÊä &·w4ùÑf¸ÅSä’" °ÿ“2)ÑPéÿ;O¸IJ‚PXRaXË(Á¾Bîc« ðj4-‘Õ Œ¦f|ÑVZbû‚•cÛ§¨ôîÔú›æµ®K±Ž†Ïàòù·êÀ_‚˹ý2 ¬/çú ‰kl­ÙÏ w)öO8wAK£BsŠSƒuo– ©Áº™8м-‡m¿ø¸$ZÝâ—» gF¡-²ªt‚…U|âŸÅ~_…5 c uÄ ÂË%ž“h$½ó?üÞÊœ#À#΃eVS—Ö:¨QùºÝ­6²~ðÐ,“)Þ\uôÒÜZM)Þ¬Åê/ Ðjºå˜ãÊÁÕššùºÊ?ö%L¿U¹í÷æ˜7ÛŸ5Ï>‡4•/-Ù<v5Å”QŸŠaÿé„9˾èÏ|¤g•Tnõ×" ¤ü]¤Ñ¢àF` =WHVE±RéàYäxbò;·˜«‹µŸî îÉ8b)¦p#ãYåtÀ̬¯‡ÐdÕ«Óêƒ v.F;æ5+åBôÄ2óOq¬4[Öún„7?z’t‘ Gö»­—F„¶‰Å{ügјjÁgæ W¿Âf¨õëÚ¬P•-¬']µ™4qíCÿŸQS3uÖˆò¥Á?Ó$¶Ž¶6Âd/iLNü¸ hé3Œõ“©kg-Å÷Z(›;OH~7ˆmv}]­°‚>ŸÔ*ùŸ¨1JÄšßZ¥‚“ÿVÁ|ziY㱜aèºÑÍȬeŠÝ¤åSÀˆæ·˜ÙÃâ~ †*l!Á’l7$ ÍŒ·té ¢ެQû]÷î‡^¹êíÉ^w‰Q¤)ìgRûÈ-«ôMón¦4±[VàHiF¾<_òXmM¯é7$çÖ;9ëúÌŠ‹¹:ø9ùÚ­KžH˜Ìy,“…&¥6vjv‘6tgÛ±}zø9+* »¥Ã¤WêÿãÁq­Â«9õ´« SóÊsrš¥<du ±_°1¤´æˆM£}E“@6=ª’’Ÿ«g!,\TÞb¦ >çšÙ«¸Á•Ï–sŒÞjû_¹ËLÈÊCk*D“Ø,!*÷Hì2žøç1Îö¢ý ìSMBdŒõ&Ø<xmyb@dÏ6 W~ø.TœØ'ú³¢¬¨pàñåŠ"`\N›ËC9ºÆ8Ô=ÿÖòÒëvÙ©‘ÿWxùƒŽ +“ +òm}f¶D?‹ÿŒç:Â`9ña[C¢®»‚Opÿ“¤ö=Y£vÅ‹<ÆøÏ¬‰Ÿ§3th‚ 7©ƒ¾.ÓjüaÖ D'—5Mz^À®pͨzÜ á3z̯xY™bJ*‘¡$hKúyå‘0è<ìãÀ^÷BöYQDÖ1o³“¡CNüßêÍDäÞ•¬ùÿ‹z°§ û[à|ÿ4© É* åixÁ<%øg€&C¡aA†ë›™ð;u`]Æú×0ú"¤’üܒÊŽËâlÍðn*‚¨¤¤Dà.Æ€(¸»é_œ>Âw÷"û0ËÁWà^ºÎL–.÷ƒa~ÁHî˜ )"7Š¿âëi:”5Öô¶œ¸:>ÆéuåsŽ Ì.îú„û–cˆÍ<3 d?žÓ¥æ“KôIˆì‚©ð°pý8¦$¢¥ª–ó9ç‹P[:X¼ó®ø!ÁøQèx"‡)Ô»uJIpÅÕüÒáµe¹§A“‚ €µÞA=P!±óµ0ŸÐ®¥›?Uœ‹+™tÒÛ©™VÒmWªY ½Rq5¯Ó ßÄcUåb’¢wÛíj4,Áç‡+v‚>›zÍô…9ù?ÀeÇJmÁ@ófÔc»IvÅ3S7â9lÃÆ~R¬cjBÊ¢°‘•F„ ºfÂwFkËwbF,Ó´°Pq¥¶:úC…b"NTŒS¼mƶ)x@øFMlAòÎw‡’*–ߣâjvçÿb—’N€““Vü)¬» æQŽƒ ê”ðÁéÑúÇJÌ‹"†Î-FDi4ÕTÏy‡kÈ Vkk™Cætæÿéá„°#3ËÓç¾J°ÑZnèñ‰«/k Ý~ÎCÈ5ib '‡~VWV,·Ìù¥ŸÚbL¸‡s“WŠëØŠí¨²2;ë'¸5s,×w|V;J‰Ë-Œ>œ§°ÁñZÁ§l‚+Ôœ•ý¥I÷°ŽÅ"û®zòvý£Ñ‘Ƚœ°fuäãhX*ì2Œ\Æ£“ó!Rž õÒQ…ìð*I¸Ã“î<“4/ÿ‡âhÓʿ⎟;¸Ã&•bä®ÞHË]å¼ M\LØ rJ9L­v¥{ÿ˜în >/g\ ÅWO‡, °t· ‹ ºG­K’'å¹ÛÑ|@œ‚%€à€æ0>Õaì³m©êjw”mL¬CvMpḧf[–!h\6¼‘é~#ù"/œï\2Íš06™°r÷˜=Y8kØÇC‹ä ˆßôúìžÒéN¬¨U'y0‰·ÞÌL6¤DO’äÃX0éêKoë¦^HÂH…¤–9Á©{ãž.Ú»ÞJŸ¯t¡îÙ,c¶6²šS¦èksõÏÔˆÂÔ\o¯$Q¥¯‡/ÃL-ÈM=â ðÌÚiŒØd)Ò¡Š"IÖ‹cH>fV^ðpÃÂÎU¸±ì#¤mß»I§9\{€ãi¸S‰sñs•AÇ…ï]ÄkáˆÛãeÔ,¶èPâ×û,=©pøÍƒêÎ- Þ!ê—¶Ïš±@ǽ¯º¿zp¨ÿ{s ‚ˆ¦¦›ᘱ€l@ÉÔ· Ïp%xhÿÌñ]O×c•P‚±Ywb?*Üî6#(øÉSË;ã^­öscF›rÇ﬿Õˆ V CµÅ¾OºÁ",´ÿ«è®[Yóry¦‰iÏUK>=œŸn§k!ÄN«zNQwÅ··øIy$ØEŠH2½Kˆ†âVGS?*¨ùÆãÕ-Y¨Úƒ‹ïø„¢ & #¢’?1ža¥¨£ãÑq@$>_ÏÓõéžxO×b]ôGøèƒx%¯F»J )ÍA€«ÄL+’àîKþÎ }…C€FQ Ö6]ñÞÇ{¹F¾‘¨¡Õ@WÔ_Ðs&þÒ«EáÅ¢ùQtyšèHİçãúxYüG[š™ð»A1žÚžšmǾSvªžL‘lð+,G^Cƒ0&Iá<6]‡˜ÉÙb Ø›/˜])¢&K0BSܳ¢›‚7&D¾b©¿im´ ©A” ‘ô¦/ÉÃS͑·‡ÌŒ1—pÀ âHcºƒòÅn`固ÊßÒRIOK2k<Î&Vf´š·Œç¤\_qô¬U• Æ–Æp·€„½×àvW ^YÅ`¢€œ´FÝ÷¨%–ƒê†«‚qË(%y’h™«çxdov?­)ÌÊ’Ô\õÁCÑ«p²UpÀ€Œr¹,Â@C.Ϲ´ŒÀX\Ó&±IXî»ì w—¿¤Æ^›û´ é9½ÿ×ü’g4iR‡Jìf_2:Óafvd(ÎíæŽ@“¡w-جbN+˜¶¸Ñm9µfÒ¸ßÙiá‹@ý®½²È¢P®G¡m»Øv4ø€ÈªÒñ­¥]g\˜à|_¸ÝA¢ÄŒ€rg¸Ol?qt; §1×%|Gy)\MÀw$¿ð¼ì…d=ãmIþâ>z½lp³ÛéKE7´ìDîÖ—I•9¥Z¼iŒJÕ Ðø’?й´òÔK¸j‘Ójó”” æ|µ]ŽÝl« ºc´¾KÐOQ¬ñô$ˆe È’ÑâúÚÉ}ÁÐÊ»älØ”„ß1âÌþª„Fh±;ýOtƒ§6“0ѳ`=blÓÔd%c¸ÅãAcFdnêÊÿPºc¡ÍB¢U‚¤˜Úi?¿JÏ‘u‹Éû‚¬nžn¥%XK§TuxÎ4-«ìY?I$ˆõÊ~Ø9£16ŒŒ•“dz~:ç$¨¤Q•λH=áñ®Ú_¦+|¿ë9Ês—ðŠ}Í ÃТmÛûQµ'‘µg_¢í¸xôÖ›þãt›ñO̘Ûócˆ1KʼTDù¾ý€Ì“yj­Ì:qYÌ5ôvmäÿx’È*­áP*ü¼¬ù2O¨‰(ÑÅ…žÚ¦¯ÇT×fä¥x`ržØiο­@‘ ᳪFQ4?3ñ! 8<§N=)³‡ÇJœÊ¡x~6 ú¡¿ƒZ¶åqÑ> ¤^(ÈAd.,/¬¶ƒS"Ñ«å†u÷ñ‹lÇê*’ôÄÄykýØP£¾ÕW)NomùQ+ÊC1·RY_jYÃâP*Цx7AIˆŠ %ÏÛoLj§þ¿óƒÀ‘´ÚË»‘x. ÇZéͱzÂ*×ÿ×#Ô‹Ñé¹É‚Yèáe4#9»q^e1­pð°*¬™Ö>êSݤ7OŽà±3&êm¹îÙÞãÝÇýÿªu›¡¦¬G9ø‘ðâ°Á*Ü-ýÎn5ºÞ X«Ú|*åg4sïZ2ò-Ñ$Ž BIs’w”ˆ‡¯€–¾ó|PY\ÞÕRSBy«]1tTÛGßMytŠv ÛÒÞ~dý?¼èçÝ|öÁ_SñÜçz‡ «„ë…éFÈm4í xå’c©ê>4¸’žIPz÷x÷wäûZ€{Ö]…†Ã–P 5ž±ålÆK˜2‘†°Ûïø îtÍt–q½Ð{z·Nj¸Äv~HCrÛ-0Q„*ëV©‹oÑ•wOç.H:ð„7¶º°¡Œ ®L±’AŸýàØjÚY³to¢daž?… ÔÍ]U†Ïf_%ÅwJö™™÷ŽæÀÏ0åX %ÀÙZòv cXgiÏ^Ì}l+Òõ¤dIÔfäN6Á³’”".Ę=fÆS$ì³éÎVGÇ™8û¤# >ÎwWͦ`(+þâ©hbõfðº£Eè|ˆ2Å¡@7­Óª0m‚‚f-,ù”th En•9Z¼`,¡£h›n…îr.¤''#î@-Š˜²C§M:´A+à7ïhþ·e*û m-¦/û3€pŠ&Z¨è`ïÎÄ„0A‡BJ$žß†ðð¼Ï‘Á 8¥"Õ,àZÆž«û© ˆ˜¾I E"(,m‹Âû§¯ƒ3º[¢öˆá‡%É$±κxíÃq².Ä'©íF¡0h¨ d¾Ú')Qäp¤Ä_¬¢Ùe~µìá®ÁøÇ}œ…˜Qƒí“Ë>¡·´%ó|VñarRÚ+FÕ"êÏH¿¾ ´Ç³î¾¹n9¯2÷¯±s]ý_ÜÙAèæŽÇÍžƒx8ZÉ›DíŒáÃ^´•S¨ 0Ÿ{1*+Å6L«Ã/øk{ÀÒYÀ•^@æCã< ‰ Ö_Ï è™ £ Œ}ÈõÕ3”@Š…eÖË‘œíÃrŠô ¡7™ÅqPK„‘µÑ^ÇÛƒVŒ´@µÆ Ûkî¾W½][ÙpeïÕ—ŒÝl¦ïí¥Dz¿[@Nÿ?,: ?ãQP9„Mµ¢ª¢ßÌmÆG®¬)ù¹3N×.bbÉÔ­МFʶõ²hj› £Z±à@·ÑÊA—7(E²©1nï §@$s³ÕîøÔiÊ=¯w'~xe›šnWàñ8ÆUuô (@†±bø1 lB6§íý3Öˆ×<(W»»éÖÞ×k:¿h@\gðþ,åa´G^¯gO,õqÑÚBpjÆa_cõÇΰãC ûÔÐÕ@;7òE×s׊<ëÌ:wúm€bLë\¤ù3ݲŠ[)(=­[LM`Nº±¿2澜È­xD®£pbTÏ›7e—«aB×èG ”Gþ,ï8ÄéÆÑñY«åzäI¾?i¦ÐšØæ2¤ ç­Mº[þ"²–Âmmz¶,8‡`õ¾KÌN:XhbÏHiSïL4Æš–󿍢UÈí½» à±põyR*CnÇÖaÏíÍ$½4‹1ÎI¦*(ÀQwžªFž/ÂG<¨üÞ¡à–‘ÏŒ³FWBhç%ÜdýäGG$FaŠœá.¸º/©9¤ß@mü]q¦šW$»CÜx[U±POæZêt„Ÿ©‚wOa×éî F?íü}þÚFx«rÈQ6ig™ùÍ :™)m/5P'9/)Þ„ðÓ‘÷ñjUË\Õë”×E©==ªhÀäM%”_q²¢­Tí‹0hŸÙçåC,T­!§™fï·‡ÂiUÚ÷Íî/yœšÒÆÁ†˜i&™écE42© 3WMÍ«ÈÛ `ްÐhчè=E·üFÅ‘*†&'Û B“EW½ÉþOñ MåNâÀq4Ö¢LÑhÌÓefâ£Ic¼DgÞ-0N+§â"×0Ä£,Ès뜇x³\™¼>z‹=Ù}$ø¹“ˆ¤IaÒ [Û”MíŒøüòâHí¶E]¦AŽéå‰3AÐ!Øh'÷1^¿›½ÕW|6–\Q<X—~аN5i•ºpõîÖbb1†È®x8o¡å«ªê1¢`vŒÜÐ2ÚfüEŒP¨¾¢Y ù¸–ÁýцáqplŒj=¼AÏNˆ6ôÐHÓÒŠJó ÂE ›ý©^UJ§âíQ‚`c é[HÁ!¥9 Vˆ›†|`l Ú{Ä:*fWጄt" ÿEšCL80IôI±À„ê lÂú`j±¹ ìn¸M“ç7{_Ú䙦M$ðz@&|íŠã+34wƒƒìºîÌÞã¢'iw× r»9—á:ƒ‹2§²¯æjtÿ(×iñ`5»Ëù~ÆRÆoç¡@dOGû®1%w“á³îv,œY‡—D7]@SjÍ}·o‘ÉÝ)¤uÄæÂDËÇŠ8ücòË—øÁ›\ <õ,SKÐVɶó*Ö§hW,-´Ž+Ç@šv ÉbÓ …àn¯Ÿ&ÜírˆþJ&~ŠgÝq‰¡1Û߈Ò4æ/_<äQlAŸ<¢u®öÊ“3øüŽFŒÓZs¼¯Çëƒ]€.j”~ÅüÉê”ÁbwML–(ŸšÊB2k‘týÀÔâà-6™×hé‚–…/y„‰(ô %žéhû ¼è |6ÛS³úŽý×ÝîM ±%Rõ3!%ºtKa“v_ή•ÿ%h!ÉÍWä*‰+%½ãk n€ pQØ-²IGMðç™ùw4ˆZ˱L\ñõø 7–ƒ¯,Šå\ô³ÎHj#pû³‚üŠÁÚ?âËï4’aŠ£M.Ù–ÆÜöz/€â8¼yGr¸ö‚ùÚa–btõt}55GøŸ7 µw±æ«%ª®ªâgH뉟€Î×™·UŸ™8o˜nuë|Ù7•vÝ®åæA°°Ä§ÕÓ?в{óª(D'Z”¹÷Þ\ÛoH +Ež\ý±ÑOZÔÙ‰&i,ˆï!¢‰¾ª¨ iw"¸ï¸¤Ê<…Gæj“â’¾µŒoZ Æ^~¦=Uëé3¦—")Ìxæ÷ª'H›oÍð VˆO`ãõa"·ÕØ)ƒ³}ai‘L<Ò|ùKJíÚÿð)YB}Ó­¸¸ è‚/usU§MÀÒëÙÔÞ•|÷§8v- £ é¥HVá!A2™—<Ù ï=Uk–êj·e¬€lÎðŠfœµB¢xuÆ0caµ 2ß ù”–¼ž_|Ì8sk£/ÊÌã;ãm÷crôÈߎEYÉ =­`s¯­¨^²uBN¾ƒ«ÐþËÞ„NÞYƒ´¬iJe”eËÁÎL_xâ~w¿¡jጩÐï]˜©Ì.mPv¸iõÉä-Wó,Ó+ -tØûa–cþ¥yÍ[Ó&ýÒ ^"”gð²áú¦8N”ƒ3àëqHUxZ㉓þPÅ÷{_†w9§·S1”„3KŠó‚(æPÙxoÙ†ðºähœG«Ž¾K›ÇE©¯?kæø[p»p“ßBJèÈlÖè^’Yq¨;%qÓÀ‡Ëô+ÈžWó›D £S°ëZØsˆ½ë_Œdˆ|Z¿IGÖ)u[eSfOÒ`—¹Q|±U}Û «øAñõR!Vyç$va$}aH_š»ÄÌñÎãÂŽƒáÝeHæsA6+J²˜–4K>øP‚‰%D‹í|úƒû0N 2Ï(Œ‹1KO´¸}a+å‰\¢¼66rÿ/L×òÙ„«ûäXõÖÑ`A§ë¶G[DJGÒÎ ’b––Àý7mÖÑVD é§„‡ ^0÷t ³¤Z=ºŸz¥î³ð&¿§î½Røt[›ª ¼ÐË8¦Iù,á!Ä{#WLåMs4É@€AÀ@’M!ŠM©ôG?Øè>[Ûe–ö†½|B©½J -vêŠ/*žV™ŽÝ%/Œ–9)urÃÄä,ï#žÁSì}ˆœ|•´dÏQ,¹¬ªù®.°ÃÜÐ&ïÒß+£=Z‘± Ú˜³ÐË{ÉYã´°"O{v}VÅÂÄx«}ÜOL#­! 0ÚŽb°ë‚Úvb‹9¡¾îBo^íƒ/µìüyê”=Mt¢ˆ›Ð…r#vNÇÔ‹uê h”&•JŠ$_ÅÏÍüd­êXv0Ðx¢ŒTS¢¢ì[f«ú?0ƒŽ_ Nc‰Mj’ƒ=äÁ¬˜Äg ñó7ïd!OR¯Z›JáSIJâ[{0,GðË@Ä%g“×{wÄØÈ}RÍÁßà5†pÅØWn¡%^ÍzÎ=ÝP ò—–ÒBîwIû5ÂÌ/BÔ¥S­œ¿‚¸¸Œ[[Îwª²,U ±»>Ÿ+ø'}Ál†,_€ŸX†#R•ƒžƒì+ 35zÍ¥dx±&§cvÄå¶)6Ž,vÞ›iRñ™E1Pò»¿“MÇ2éiÒ Hë½H‹ ,»ŠE¨pk½ˆiqó¨º}Jæ]Çážp°O¿©[.Ë^÷;sàÒÀr"N˜OVÀ|Óç¥ñšÂ£4ãP²}µôé°‰¼qú‹ÜvF`¾"dy9Ìð¥PÒ,·z“·ÓŒ\|>Ò ÁO£.—'ÚÑyñŹÓ5†”Ž7h4C¤ÙSd†Àº$õ)²߃ö¿QÁiï¥Ïµsã§hß‘atVΡŒ©þÂ/*ª2” ­™¸·»‰ ‰»° ìú÷û’гn¾¤ÓËÚ’)fƒ†ÛcX)¶µ¨ì®tBÊ ,qú¶’mŒö„e}T¯ŒËÇ9]:kY¨o#=™…Ý4ú†ïwb’dÿZ¨spXrÙGlSØö Óvþ#ãä†7)lm%…³z1Ò&frT —ÌžÓ4™Nå |Ž$ª…G˜k¨°c<‚·'¿h.aat½Eàçq~Ü û\™üÝ,-M\ô+¿ n_9|7–¿iÝêëw«ö×^¿^taò(¯óŬWE6q²² ï›Ïjˆª“€¨“•Èt×ó–2™f’’iw½ØÓIÅjl•ùb˳ï}‚waWò}Ôýó_x×U¢Ø_ø· æƒPä`²q‡–u¹kÚ²ØÂó™”ú/Ò¡ü®Xãû¸à6]6ŸcioÒZY#Ä‘=WvOK7âç!q€à“Ü{¼û×kç°ôú\f ßè§¹$6þ1ñ)3ðiAcÈû3Ð9ƒü(“÷‹ô,g4Bò·®…~o‘šS%7|]õcõØžYÄx(®'„h<’áº"#‘ÑÝ&áƒlöýˆïEÀÇñ‹ªQ7)õ#…ïÿ|œ‘ð§¤ûûíópýÇÕç$ hÔ`zÕecÑBÁóÖ›¸¦$ç¶íã{jS+É ÈáCâtGáÉÃ00cÃðLrÓjÕŸÌÛä(z0()¶„ë1ÔÀ‚yÕV:*›¹;!%‹¸f mEQªhv[ƒ%é¾zòªR]Cò%–™#™­Ö"|gÒõ5˜ÍF-Y‘Ôô Yˆµó¨÷U( ìì™ DÔ\ F' Áó)5jf¨²[šÊ~.€¢(F;%u×¹iÓu´˜y8€•Òм»Ÿ†ÿy^ŽC²W›Ã™9Oo^¼ÔOÚ4X“[½©'+€Ãð“ˆc„UvÝÓ¿Žx‹÷Õ/ýkŽ×pΔ¦$BJy• U«èZ;5Z(HçƒÁÈ:é[OYè³÷CÑÂë_Ê¡Kžy3^CH ,eÌ8«z=HS PV©h—Š™ÆŸ”õÆ7ò /aBé‚XÅþmðÛîì%eëXs*ë&JxñYøúò2}à F…Ã>‹¬_$»úÿ%Y¤d;!oœÀKÛ­¶b€Nà<;E>[ùðD &Îà;¢›O ; ïj㋉u2"§Œr6\’Y2 Ì †eµ tÉXT<±’aù…¶V’Ý5No42[\OM€aªi7š÷¡øV´”¡€¼„Ôíà¡üdRÛÒ,lÙzë”ÿØŒ¸n W€P©Vçà•W-ï3ñ†7|£º '{:iZÙ¬0¾™÷ã?ÎUî!RµéÉ÷“n{J¨¸ÿ¡[a;˜iE#YêÆ>ŸPâà¥ÎŽJþþ1ó»žñ¿£Þšu[ŠeF_mäáYY¦cÌé<Í<þž™.Ð0¡Øx%þÝ÷YÕ]E¡.¯nHîõ„ ÷‰ÙÛà2ÐT–¼©q%f¸q÷vSg"Í'b*1™wÖc¼ÝËL£Ucüºº}ÍP¯ú¿(fO|2qb²Åo•Þ¸“š©¯ïð›˜v‘qÎÁyÄjlþ]sØÐã>lJqYéŒóÅÈÙOà©þ1$Èú9l5@F_µuÑü©Á·±´%”MFú‰ïgÛî©y–3×> t19È7|•c^ÑYÓño0ž³¢=WÈâ7àž”–Ê#œÄX7g" Š:OóvàÊvÿ’|:”HÝŒ–ÜŠS2iDãÑñEQ)§Ÿ“é«'=YéšI$úš¯Èƒ¯lþû8ì¡H„s”Ž}¦0!é ÁÃ]Ö^‰VðìåL4÷o¥‹ä¥0—ô5Úš 6×Áø|£ö‘kïáž±EO?_„ Xè媙ï¸ú¤-×ú x)ÇÒ¡ƒ‚±X¼B ;\Ñ IÛ<‰&–h–Ì=ìú|ïÿV¤ÐRQéM» –@¤–¾e` 'ÅæRûÑ\õ›:hcñ`7­"ñ9hv“c»™G mt˜ü¯1û²úHCO´5¡5’0§‹Y¡vKþ_°–"5pŽB•séªêæÖ_ÔÜùÕÓLå:…òÜ @µ~4¹».9UØŸ1?lÚÄšÌw”WI°¬Ó”v,±H`±X´tŽüõ-<ˆfi$175Í>°L%©~„8]~¼S484ÄnÖ!.ÁÖ9œÄ`ÞzE&cñOŸ¹¬¤\÷46Ð8vݤ'ê$½?C‹JÔÐ!ÆõtGÎjE¢Ç×J¡>î¸?Ãl5((ÎØàÇ&wå?VýÂGv–~Ê.Öe±¾ø)½ÓháOê–ÏjN¢ú[¯†òÔ±_Ê+¬è,ñÔ7B¼N£%þ»âý¾È/(\Š¢> ã‚ §µ¯©õr.ÏP÷Y`'Ös?ÅýUS, ;eÛH…SiI˜4o¥©$¯§ðÖ&M¨Ý `&n/NDLFwÐ"Û9?žùB b~0ÉB?[½¤BX†’@Á¿õéãå:r\â7÷èbƒ7˜t“Ï´Ø®B²_ÇyÆe8I½ÖìX~§³±¥ILŽW‚œ)÷enH{1•5ÆE®µQmë£:Ã8i;†50ªÕE‚ÈFqDÔ¢ƒ)[ ±}͌ň „ šnEykEŽý ÇÇËóŸË¢Ö™lï57ºóÒÀÓò÷gäôq…ZFuá‚éSôË¥ä¹CwX«C2!ÝÙ&‡L$¨e!Ñ@½~`Ïó&z>üuû³(5“výèxôÙæ o û£sÿP´Ç•3“\w]°Ëo¾t^ƒ¿§ŸËy¸–ì„Ã}!ûÄ7n·@P{ÓX¹>üÒ¿—ìâd°ç¦[1þ£vnUJ®Ûd_EÂýÌh3ÝÿÓ™»Q»x«R†•ŒÕ·òº<¡ÈkåC_„²ÆŠáu‚ÊQ‘^ú¨eÖÓ=®Kx(ZúÇ2bOo‘ŸK‡Õ3½°Í»­JÑè²–U„Yé1I¯Ã㤩¼­–.ÿ€ÕY®2&:9GÂÛ3¾ñ¦µF§0ä„¶Q»…AÑwø~QCàBçIÀq:bFíìqÌ4m½¥ý1芼XA5vväF¯=¡‚¾ìÒáû7WŸ?ÍGQà¼Ý0µlèú’ƒ÷Öl»³]䌘Ý:PMY£<µ; HQƒ¬ñ¯ìÒè ,,~jø)ˆøjLÛµføÑ¤.PÄq¨L{—J˜ÆÞ&Š÷øÂ²vÚD¨64­Ù—>/¬1 ïäPE}„´? þûûXrçß¿ÿöÿ]Œm—â¶ûCÌEÛ»¡À²uÔÂ*I†Á,~ ½u¦Ùw ¥‡<º ñáè·i*¬Röv­ùÓ]zv*çˆKxŒ®¸=‘,9³s¸„.¦@TŠPøÜ&ØÓ–ÆafÆ\ƒìXžíÛk{g\Ì·}¿Ó˜±w9bÏã#æ?KËu¨KòµÏÃÉÒñ¢P!)2¤_Ü_Þw¿Ša¡_RH'E* „©>ˆÏku_ˆI¸ÍkIT& #åo”kQòËE ËGHW¦EŽnn¿MoÙQt€2þ’A²"EíYMm<64"N´5FËð¿>¦¥R6ú§[-7HKò ™J)¹~S‡†ç…6Áþ1¢]d¢rùb¶­ðBªÉœRùο@.¨IÈr2Ô†‡“„¼ VÊUʦ¼4)µF€‡ýbu©³hûbAOÒ#èu–m/¶‡p£©ÑÛ;¢Ø›\Z3%¨±¨ù0–æÔ•ô¸oüE›i…µ‰™+¦•W/a&R+œ-_r*ñΔ¢h€ w°Ÿ“S[RÙ±¸0¾96á옄¡n¬æ ùx zÇ—O;á²9's0GàNºžü(ÒŸ /g–ÝüÜ -Ú Ú0RìS]†BaŒ¿<—ÐOlVç$É×$®$¥2"Qº#„[åé…ZýE‹îD&bè5^„÷䙸à 9íá×Ò¶¦W{á’DÎ7}cHàyŠ’ì†+¿Z¢žrDaIЋ)EI¯ZŽ)ž¼b_¼·™íV/jêa8o’Wè8”/׉ÉÇöîó–«*f†–ü•0M^pÒP×¶Iy>ák¢}ž$2Eý×2Àþº>{>7Q5ßžÍù”kS=Âs*íþ{¥åuv…¶ÿà-SAm¿Ê]7Æuû}‰èuËSDÈ£·&ÅÙN²p¿/íØw\¿_ßl›vèhê$áV¯üÓs£Ìæj2¤W§]FWè³àX.àœãíö²·ú]ÏM]kLEÌ_ºÏ\0à>øÔüaG1Ú ‹å9¢p^ÌÈ¢w’_­+GkÜã¯ù‡¶ü?ñ Û©b9âô7[n´"ÐNðñWZLy޶­~Í{6î$ˆggG¸ïþÛ@…¸Úøñp[¬ô’05/ʱ{vš¬a·ÜЂò’u4Øs”˜Øê U”VË.i†{ˆ?щ]W¢Šíj%«ß¬^gB¬R§¡½{/êÚÝ’."bã[Éç,šQL¶@,­ØòPð•»Þ•ƒAîðè¸.úX~ºùú!ŽÕƒ‡‘+áôA(%–Vu7I‰Guqæn=@µ]lžI>À'›û)ý’ß_dÏj‚ßâœh¡I@!q/¾'ª4zì¾.Æ:i·ZƒìÑxEª‡ðÀVÿúQÜZ„}·ÀP•7x‚Ö”ByŸÿ¸u}숪âõIv‡1ªdW¤3ÛÕ=ñ„ïUHw6L‡Å¨ïÊ]$5ë Ø®µ_? šä+yã§Ùq2ò(|‡\ æÑjjlÇØŸÕ_˜Q}S¨òH2r(æî§aªdqgk«Oöåô³ û ¼³WÉs3s^ÔÆ€8¥ìœV„W†f·àËߟAAéÝ{…'Z¡%ú_ù+Ó`ÝáoOXNá!äÛ·j#|" …‰ÛÃ]NavÐê¦ÏZL®LÅÿìyž¤ø¤=1?wóš+‰·ÒßSGªzqš=º®ŽÄe&æÝ*¢õä÷)¥KéYsªeõšv^ÐczCtªÔ Ç8Ü$Ç~Ã<¶ókßAIƒüÏ»oȉÁ¬ãØh'©OwDÏŽÅôŠvâìXè§s¬Â¦XàŒ)€¯ÛFx£½ÅW%Á+‚g[X¨ç]v›Å©ÝD„v†ïT¹!ß_íVJó ÌJ ^4‚ïè* L>Ó•žé^BîH9äS¨ˆ`_ªyÛTW˜õ¬9vb!P9$—XsuxµJì4PËè9¥¤2̆»Å”æO†ŽÔ¸zßévçÐ1‚·BY+ÙV ‚èLJ60|O6+;Òyênvto"´Ø;†8âyðàl°†s†v_tr Ü3üþƒã!É—Æü‹gNˆën¹äq÷ü0¢P9dšñI#¼/ÚkãjÜš5%úóº*Î/LÍÿÐókSÌ­j®œ ëÅÎ@E+p´xÖŒJ8­I“ …Uˆ'Ï/¶úqßÏdžèG,ùi3¤ð‘Mö"ôž,ÑÉJuö‰¨ ­±ë\ž–*»lqÇË_&·I²¸#FÇSðM— ‰œh (Ìô('{¥c~eˆ´‘¦Õ‰4a‚eX˜ŒÊ¹¹­RlÀÕª*¢öàt•/ç%©õÚ:ù ›%ouˆÃþiAp•~õC®¤íBŸÈzt) -Ý‚ÌU ˆ©j[î¨yg>Þùüйèq9`&[Ìñ>Ñf¡MÌTûVghˆÿÞÇÜó‹íIÑ—¼8Á;õ¨^ý·ˆ­¨šcTq-»×Oë%öêáòê9ãú΃اÃÀ"8÷›@ý!ùºy¼0E`}Œ1tÊB²L²§š\F|ñ¨?4Œ*4#‚üõ­þÊAi3ž¯:-!‡Š¯ÉÛ&.9E69‚õìko‘‰²älç‰ì”‚Ñœð"( `?Æ4¡–9œÂ T$Ždø¢‹Ýq/Iž`sLÆê]Ú5¿cÍPYùS¿æ{b¯çíôŸ'þ?ºqŠ™&üåÓ»ÃÎOv«“χ¯Fñ{[üQ´ÏJŸŒž ¼|5)*ti,dìh,D†¦¢fU-x0Fm,çªSÙS_:œk°}mágÛµÊø`¤¦²ark-t_ZÅʺõßT¹å.ýê±ÙöE‘¸Éð©•î×6ë•C[Ρ®T«ÝïÅ“”YS¤Uz”¥/NQ@‰|Ýrsæ{=Š( ÁÞŽ) iÑ]òÑ™ß.C¶æþ Ï}HÚO³ä…-\|BQw¶t7¨-³àæm˺â¼3S.g¸3!Ô²Rú‚ »™Ž1>Ç¥–5êËô·ÙkGHØàÿj:%3ŽoëÄSÛDìÁàoöÏŽé÷3«sÇqô„iû‡§-O1¿M,\Σ7èŸgµí ÒÕ-› ći“¥ò\:™ú>E–ñå4_hëHÈX'üSyG‰ :ÝÞ>É 'JZ¦Ï] Fª5˜q„ö¶Y¥Áf5yôŸ‘Yy+H|Uº]{'NY¯=Áš]%o)\SÜè]//°ø÷¯ùÚ@œùFâ¢í@=5»ï—©à@€t58Öå’Õñ·ËV¡ƒª||ÊØ‰A  l}‹qA1üÖŒxŽFÆ %Ö>ä)u̇œ+ðNärsØOù£]ûIò4,´®iØ”øßˆƒœ×±wË'`o#W—çããˆÃžPþoøZ‚õ&·¿=vQ6’1¯ Y˜@´(ÆáG¯«„é$Ïï49LÎKç¹ë¡Iz²µÿ*¥,¼´KcO<úüqú}ýÕR59¸0]­ÃWmK9¹ú^ l°Ý¤Ôç6Y§Éê&J'²{jésÂaáZN …#99+?f\Tï&«o“ê0™¤õC‹>!ÁJÀˆûj&º6yeß æ°µU€•¢te(ÁWqs,:#ÂÞ.¸Š`š$õ)k ¾üläF›Ïq Q¤¢Ç< r Aì-’³*ŒrÔNƒHP;¼ÍgîÚ5ººs²ø6MެßbúH£Êô†îàN©È¹ÛYþ"ˆF¤Ä®xÎ3UØš‚¯æJÔ<Í^'ËÐzCë"ñ­Z·ŠïÔê"öòGÞJá‚ <%¬—š3¬ '¶`C¾U= úƒw'V[™[™/q&.0™D4"Ò»¬ºSú­:Ȉ»UÌP—ŽEq‘ø{Û*¨ì½¦ ¾6úêÝjBJY‘$0?ÉÏF$©¶šÐ‚ɶycÖJYÆÔX7’a;ÄšCКPõŒŠfÛà•‰¦O«Æ¢ÀÜ×6ãž§«ºÃä<á ·Y@t×þg»­ëóÁéÄK8勵¿lñöü??MC«·É QÉâð%”úƒS¾u„jðöÝ ¨ZvJ²³_¬“_åT°àM“†fÚ˜ý]°ˆv˜N“j`÷—ªæ?ÜJ7ïM–«é3ÅI£àf.õ„|v&qpiµ*~øèpx£Ó½üa¤}±.ë“vø|†6ê¢!W­ê’I û”ØàîkŸª¢¾z õñ&ܳÚÿU¥׋ß^õT¨½9:ÑЙX‡?…Ψ¹ù^8É]{[`¤½‹‡·žqR¨ëâbDiO= ~&4ÉõÝPŠBgùHÁj‡¢£ÒL1^ÝÍ7KåPn*Ë®åz"t›i‚Ó°Î+M;‹ûi‘HÏYGh œ# ¢S‹# ])ýúD?âô1 (u3Ò²óòÁ ceê± Ý6éaßjqUò@Rxl ÔÞä3Ä4ö¨Ù…pmé*Í1!»aÌÑ|cÌòƒ+Êš­˜·C»¢3Ó0袬AØ]önFñ—åjô(Ý['•œD©krEÏ$Në2ÆáÿtÎÕ’rŒkVéÍÉ ÀÑç'ià  ¸ë®nØ9^në´¹Rà7éÔç¶S—ê‘óâòDÂdr{d âq¹Lã09Ñ,/×oÄÎ=ê›DUðFâðdR0Q>2ârR©ÚÐÔíâ ^\7-Q,nW­bKk»ë=ù†,ŽB«œ`@û4¶‚"…À•·póxEØ}åŽaTè¦Ä[ñ…I#X›ÕQvMásq=^hzùD÷x2BS(I¹úm‡GÚG¢”v£¢•ÁD5Ÿ—ÆAâi_é@PB•¥—°ôž”#_© ƒ}<*öÈY>…¹µ®F!ÅÒ\ÊÇõ{uä*ŸãQMÐàÜJËl¡gjîÀ•ç IÏ •ét=ÑÞPíŽ?î»Ê;Û¯´™5%³:AIm‚ž fzÁÚ_ ™ÁÞèØ£Ž*,¤Ã^©àÂîç[‚öq€1¡#oþ… eaµ­ˆÙ0y)Ì“¸K€VêjÜ8f„@BP;QS:ÖŒ±9—|/#áÉu.1(É%+ÃÖk¶bŠF)/¯]C·q·«ë­9ÿ~9ú¹ì8j0¿`;óÍ^Mä/`Ú/nšñõG2#hwøÉu3Ee¯v}Qú‚IÐnëOß®+›±ú2$‡{ÕfXSå­‚—s¡.”?ïCî¬IàŒ½‹i¥‰PJ+ºe °ì®[1J(9íÏÁ ‘ÉÀž5•CpĽ‹nÌo°Ì¡çxõf›fÁVc' àW×0úf¯ˆ ’£’+­ i­>¹¯5(ðá±aR¸=¾;2™DµÈa·›1ô½ßÄhžÂ<§%4Ž<üä+9±£™­Ì! 2ê®Da¸2i}¸u¬T^Þìä,ï-ëfø2Â6Íÿª©“FÝ1¡°âØ=.Bp’ ©éÒlrab  ¶]¸§“´t2¨Ã×¼i¶SÖɯú̪‹jSÊû3ðåÁ„ÒÈ™>{û¹ïuBbtK… lµ ­±~ø ¦u)Îe'Ø ÿ›ˬ!t¨ê׺«^¶Ö%:tMQyøŽð«¯%‘T”=÷ j1ù7í¦vª0œû3i¡TSSåMV²|Á>Vròµ…ºh”û³|ÈM]ÉllÊ–;IÄuŸã7Ùî&”'8ûbæ_ øT-•YÓC8å#›hÜÛéLçÁÛä®ÛæU94@Ï•æ[á¦S€ÆËîæzQïá¢H‚Vx® Kp:öJÆÑýu¥y2§³ ,´í¸9èQû°zN•í ˆ"û£DK±€òxs©vÆr“4›uÓ…Zñµ™AÜ“±®ùRº—}4SzRŒ½ÈÐBHz„?kP‚VógCÊ~³Ÿc±›GØÎÞ\W+ÇèÅÛàäK(0‡b§Í4%³òPðì»6ü>ý uÆ« zï)f©­NÆc¶Æl=×~6ÕЭ¾—÷ µTÉt„âʸš`|\zká`aM³É<¾ê=&_Ò"ä#ƒ¤Xˆ&ÚuÕ’ìò6á. >}vn¦º-ª:Ìx ¿¹ÿâxØZ’å’|ÂØ$T•õTͶ 1w1šï;4¨‚Õ  co"DaíÄÔ œÞ|vpÐ]öÓÅ0Ö ¾ùw*zgî]½dq¥rðókæx€’,ȑÓ™¨?·O(m¦WPæN¹~PDŸAÉž•Ž˜9ëšC¤fçí“¢¶G¤5¿ÙŸôÚ¨Ú¢zfmºþ»´î ç|hФž´†×´¥•KÚAϘôéAt¨7êœ/ÔG$C¾¥Ÿîúv‘äM ó{¡xö{s¸ÙmÂéWÔÑ—Y“?¤:aâ¤çšcŸy¹ŽÆ%…ÈÛèáþ¶ ¥{ØþÈŠ¦nR†y¤Üw!1Kcžjü¯8^[:°%‡ðXËO?n|xÏŸ°uC}†äMJßïi­ó-ö‰aFÁB`(,î¯'íT¡×ZÆŠ¤Ð"‘N+-D›˜Ð‡Û~ ч¬ÞÞ„Õΰp´=~·Øôœ»JóûçBa¹€‚*¦)ÕwÙZ#Ø}x!“Zy•RV)ƒ«A}\ºâ²Þµ¤†Ž.I“Ò ƒÜŠƒÉô¾¯¤uF†®ÍÎ­ÙæÏn æanúû¿IÇÿG7p¬Óˆ—·’oÙ{DÈ\«ºIPø¨"Jd„§¤<#º„K Ì N¤'ãàR¦tlö‡—*‚ u|¤MÄB™2zäGÞ‰á«xeW»RÖèøÊRœ;ó5#qÛ8m¦,­’ÜÔ…N²îu1éqlŽ8¿„Ø‚Ý?Ž?ŽRc­ÂY%V#{ð‚wYP®~ïݳ¬Åî §œÅ!‹W§¹ã6ˆ{Új*ÞV'iˆ_|ÔÌõ ^Ù™<ìiÆ¥o3·ßwuŽ“±—ËåƒRØÂxó=“©»µ9Ñ’†½ÌÞ‘àÈðEſز(õžƒ–¿C‡~u}޳‹©è¿——<­iêʼn„€® á¬8·~i;'NîJé2©7Œä¸4ËGs ‰ýæÄÍÙAÙ†wþ—´ûùÙ ­·ÜÚ…&¡—löÄ úñ óqûF¡}š¿ÚU‚ÊÔVhøÛÌMæ*Dù½s䟢ŸrjÒ¶ x'ñK£X±MàbsÛ yò+kÉoK@:ÅKí?Ñ£t=0dÚÀ˜Õ0m³_÷!t %ž‰{ B[¢Þ<Æž£ê#¦6Zªý ÷×̪ù 8Z8 »S€¢!îpÕ¢ëÿ* P‡æ6õDvk7žòn!ãs.]Lš¿‘›™öýÈì@ ÑWåæÎjAÐ&9<¶ôpüßl¹Ïç‡Z[º‚µ yé2l$ö3# ê4¬¡æÞeœy9ã¹pIÝV$5¹”tM'Ã&F€¸þüËlݑΩ§ ÒÊ ç8wTD9ãNü [ØÑÛ6ñ[62Ó;g:vȇ‹"ϯþO½Z½yxÌâ$eÌÊ;YÃê'(¶RC9_¹-Õ»¼©9êO¶P>NñŽÕ“J æš{je¨)ß­íjš»A‹ÅRdµÌnÅÊ!Ääí`O-ñƒxȯf„I Ô`">TÛýž­ª×üåá“U‘úÜ nMnÓ5PÏ9S'9í;ýF,Eë•+”JÜñ6Öb ‘ÎâñXÄ ÿgø+ÄÙX ®ùë¿ú„#·ÂÌ Ì7¡°Irž'þ4‹HÏߨ=5«ÌCÓóV8ö.1§(Žb©ßSD šüDX}ãÍõ/$qôd&î~Á3–P­ž³¦Á…mYàLˆ¢-Ü#ÛÃK›þçÃ~»¿ˆWkx,ЬæÍî„owXäIñ×%ú;Ÿü]¢ôa½gç'Gr#“W(ÿ aD­+µÈ éƒb¨Ù)Ö¤ù3çF.哤¡Dh`QzK4œ&wzT".ð·9~Ps²Í2Õ*^tã[:ÃL_Ÿ¯¢¢Ûú­iœo6*©=,PŽÍM\w°ëJJ ;²@_Ék3ŸWzÔi_0¯ ršüSÌï·z­ÉCƒÀع:{µáiÝ©x2ó8­Uûhƒ$]‰4šçu:EÁY{ì¸ãòëÛ–M}ú¢vkšÈÜÖ7q^]@Ðë9U³‘Ÿp‹¦˜¡Yù ‹ 2ã>À/^žfð&·±Îüí<2 Ôá”+^‰EDž×¥ÐÎÌ{/bÊ ˜¸è›¿úl‚5O<[ÜàÍÎØ2¿@Û¿r„ØÎãƒë;[^%«œ†Z;- ·þÚbnV3°&ï#`ÃW­_U,á¹ÚE ï4q{?ö²O+V9q¼ÃÀû!·¾ÅQ$Å›»Ìs@=ªôu@éòsËŒ5âàý·òÂkEòá"˜Ÿl‡æê S‰Õ¾·sjyþC“8ÒX­&RT⯇·Ç5Àüµ Ë O•‡0Ó< ¦f …LY¼[Šó i£ç…|TèÕ0Ó}¶£cíÿ;eW5¿æ¿ #q™µŠÒ2–QiW'²ý““ù¯wËö®>š.„WƒbÌ_ÿ*¨²!÷‰÷µA˯¯SßAÆ4Ä‹H…ºÉDûÈÇåƒhÌO“ÎÊY:,KtGÏØ*8ÙK3cdqÊxvSX}Y$Q¨y~šhq6,S!Õ›]u¿WßÔT¶ ˆ:öƒ¢9»¾˜çl„pªp„ôñµØGïÛ–²Öj%ýVŸ)É„MV¼Ç3 TÜlO¥ÏÊsß0ë‡>á@H"X¯›O\ó"så·¥ Æh@ql°©ˆëœ '”î=Üg̽]Ëä9¹¥EaÕ];ËáÙ·€E¨ ôØTìw ½ì—ùŠºÂ¯è¶ wºq„%€¹ãXÂZCì™Z02ÒU¹ƒÚ•ezAûlxí,Bœ.¥©á*AÞD|AHþ»JÁ4šøiŠVØ4o®²ä8$'a¬¢.dëp½3•¯¡õêÇâîdï ä6x]kêºâÁhc©é#[Tç,ù €‚°_‹(i`r,%×,zðôXfb~Œ 4Sߟ¹U—N{)Û¡ˆ†,™ÍðF12j @fê :Si©PÀŸô†÷©ìá|gm!fütµë"˜ªÉÙ™A/d-ÐV»¯^ì¸z^¹/‡–á¯èx»‹ò}õýØøSôý$šqqŸ.š»ç©¯ ûwÎÈÍièà~—˜«A’.G¿RÈ¢o¸R©˜|‘Y¦@3ž†œ®G+pö—=Êz¹Œ äv¸ÕÖé JñàìâÕFöÂèpϳîá=œà=T,«³w@Ú`E[QY£qÒ½˜œ¶ê|ÔiïÂ)×7“Ó.gù³L·v•’ÆÇª„¤ƒv ;<¿úåÃÕê³Os{1¤Â“æ`†Bú=½bȾëa{s»×ïzq„+\li–ï½!9OÎiF‹²4­fikØú—:“ŸL0÷ö-¶¸Ä£'¦\•¯o›Än – A÷ И Û}Š™x’”“!©fäî?8ïþ2z—y‚¶¸\D¤,Ö•*·½½Ä–ä³Ò²5ÞdQŸùÀm~2¢¿ :(3­L˜.”-œ\ÈÔÂMíÞT·q¾é‡I&¿PW¤VqK‡Rª¡C|)@©Dk±-âÅXZØÕ¹&rS'äm4~@;àƒôý£ZHòÕ«&ƒ“SOˆð˜¢âjÑ2ëy|B¥;¢DK˜¤ƒ×¢ã‹›"¦þìDÕCÌêô»ÒÎaºÀŠ÷Ý$>¾ÌÄʰpš¡Õ¸fþÏçg׸C=ÂcëjDô âχqDã`&6v|4†_wÓxWó¦±Ü¹äãžF½É8ƒñèC^I@ýô‹é¡è²Ñ[)6ÄÒL½ðÊeg¿]®–þž.DP‚­ °q$hVî¹Úï:UÌ‹õé,°\V€Dȳ,[¢hv¿°["¶Ê£Hgs¢m°TÈ÷¸ãàKôŸ»î<%R,²sc TO¥«¦!xhå÷¦ßNs™–$!¹Wµ¢ÑhiMS¾hÙxb,'ÇÉ’ž†8óéɈ ??g™‰;þ9I· Ó’àÎj»•Ì‹MŸ>q# Ë»0`QRòêøMQ6Fk;… }ßè‰/ ÖÔìD“gG¥ÏEϹaCH×î6uKŽê0QY”!óÑå8îbcŒõYº'8—ÜL ìC@Üý"ÿq2â+§{ Þ i;Šnð#‚Eó›È´ÄG2XzÚ’F*æÏÈaƒZ„³Áípfä¦iº&Ä!Úo Æw;ôåAz"éµùÊ¡ºÓ;Fï܉ EQ° Åöà<34®:…Ð3º'¦\)ã ÜD6.R4¾î~>¯É"Àü]ò¹fvbº8qa¡µ[ùðìm2¥95òG¼´y»!Oïlîæi¿l ^”¼Kü…°-ÆšYäÂò¿e‚-îbát;VÇ{æ×23;Ö<‘"­&n‚^îa5ö#Î:HZ{8–mì”øm´IÛë†ÊŒ'ý…ǯ¤Í¢+úáµÙØ1èdÇ.?“ ^eËÏT›kµ$q]Ö/е­(þsÖ2‡é¾~-YxŽ6‘ëX}ÆGáÆúÜÖöÆt»Öá˜_ÐMÅ¢7³g¾a˜}œâVçǽ,’.0ÿçâk›%J.ÈR§B«§c÷ ` ½c[£„÷lÒ7eI·U… [†4»ßÔ_ÄIâGJÿ ÷i+¡¯•ŒÄÉ?:´Ó:Üd"%a6ÀGÔ´µðÔC¨Ž´4SMï†söç-ž>ôLpÀÀ"EÖÆú–èk놊™Ù†o¥rŠëà˜DöLN0H„¬Ì[·¿«˜ÆÔµ6¨) )Ú«‘6‰haÍa?hÌf”é!”u€<|`{ñïðD4:}*‘oóš°ôPþoJrNË]*±m³ÄÛ+*fô>Û#RwúñY×k<¤ÜC­!þ¢†çìʱVDüQ¸g›”¨v¾' Oá›Y²gÙLå3‰8¡æe‡ñYÊ~æCWŽa%¥¶åûW³›ôûŒ©½oô‹ø8ýA¬iÍúìŸX) ˰|Ýî$FDCã…3œ9 Bî:×c ¶Xø6»qSZÔY?ƒúëòoÿ ßj‰÷SÉ w¿ãÉÎ'[,®h+3ñ‰žhvÇFº>ý­¿ÉÔwgwƪŒé›QzZƒûà#åã!}ì Ê„ažC}ºv‡¦/YA ‡S•9/Bw’m‚µ±½¶Å’™i*ÀøZ„³ueqBƒ?~õ•i çÊ_qZxzäÜ#O±2ð·d€ Û+Ðàþ/„ÔêlUW”­Ñ‚’‚CÃU–õØ–±»“#XOÅ«ŠËSÆÇî THÛ¥v“ÐÐvzãá¾~ŠØ<˜ 6çøu÷`×1Ò,ZcgNs@£áõÃ?pOÓ:|z ›(pG:¶ t¦¢p$ML–0è8WÜæWWËi8NGé'£ÏlÛÁ†‹§8¬ÍD“WϹ+—x—Jø˜§jI÷Óx0¦ëŠáÆqñ’dêdnsÍË•£ÏRÄG&ÐÁžë¬Æe žYÆT—Šþ~œ|éá…yåp+Nž’¯ÕŽÆôÿëÂK ·+Ã8Yè$­q#ØV/Áï6³9…pV¹ßö”áZ;çãÍðÕìõ‡¦ÑSCù²STBÉW–X†ç»Ózßê`kéñ^%\#l‘©ï;Úî4 ëà`Èqß&m°óadËP'ŽÀªw·ÌŠU·àcPì›ÛCÉé¼|Å…#dfcét‘6ƒ7ÃÂÔí‰MñÀçbí¢øå©cÚ(:EnÜ·—J10pÐjp ãM9Çz9Ê-ü –Nj ¦ç$WSæÖ¸ÐíýE|Ô_¸oTLÞ¼ß$CBA^)§Ò-'šÒ,ì(’/ ªÈ…Æ—5yN0 *˜J‘þ…ib5JXÔ›~¯€;BY’·P3mí¨àfΧ/m¦”°¢‘0ð$c¢6 Ò­ìéH˜Èô¦]þJ]qÒpWzÍ"ÂP‘eUÙ§ÚÁ*,ì/hÛœI9ò²þbŽ{Sîö€-Wz÷ú£.¼Æçu°…ÓdÇS®›ªûùÙx1À·Â)I»]˜$]?ºj•Å)ãë®ÚjPÛMÊ\Ð9AÏä8‰„l¦ïË6}Qý‰NW©<öÚg .#mÞ0¸~„Gx÷M‡¶!'Í ¡Å`šR®Šày ]šJa‚ä|´nq⸤µv™a6p½¤è¡Ž–Œ’%º´>ÏÀ;¨çüIEˆWÄ¢]¾=Ùº<Ư•SZξ3Ų(·3hØ AÓtÉ(ZçQôN…¾ãÔí©Ž‡Ïß,ªÐ'>#·-1ÿ#ýñgË4{fÆEˆmäØÎTd”„ÛÅØÊ®.ªò«ÿÌH7ÉÎ+¹§Xß.“ðý£­ùÿÞ.û$ÒÖÚ–÷‘}Ò) Q¥yþßzÍž Ï[99S8}òâb1oz™Ñ×i©ýÌŽ©ì@S¦¦C CHpÚ-!!/«i/#åþÆÄ¦yåj,ò§£¡ï‚ÜÍ›°R¿«]cžªyÁ] äˆ‰Íë!-Mf" y°ægŠõgã,žknc-Á™4›ñЙ†ñ A‚ŒÖŽlزâdèðï[ômY¥ÈÊ"攜ËÔ ŒäˆJ¯9õý¶ÇY%¼‘ 74kœõ{¹ˆW8Æ©;ÿ³½™ægDeÈ&±”ìëÍ/g>Ûö„Òè ïëA$üVnÃYYÿÚe怢¤ªÚnY¶Vn0^âºþžL$ßK#ÊNÞÄÏ’®§ØJ kÌ †ZX©—qq%¯ÏG…°X7® èžÔ.š%sv†øw8Q`px+sb`ãwAb¦2Ÿþõ¦¿è·j+\ì,Þ4<€~•q n69?®+¬Å…Ýüè3µm”Ž“=vºðuðþ9-tp¬ù0Ö“ê²3c< S­B†<cj"Ä_™"`ìRs,‡µƒ*ü9…4j¿iÅ£ ûÐ(%Ø =4ßTÒZýþBìôªŽÚ3‹!ÕDÎx’"Að?˜ ÃàÂψy?â ²")\!ºó7FÒîc÷:îõôrl]DBõkuC¥a5“ÜIØEŒÆèë8^óÖI$ÅðÜEydF ƒ©‡š &ëw‰·úm õÿ‚Mð®%>9 Á/ ÓïxÈ‚vF£+EÇç¾â$žA­ÝI*—Ûw´ºªó‚á Ò€7Bˆ!ç›Ä@μîçOwù3±­°溣ìžÐ#úº¸çÏp+joµ‘9ªÎ(„l†y¿ÅØòãÿZ Ïzhâ°V9ÀúMõ¸Ú5¹ÔvIÝ–oZP\[Ѿ‚­k£#"?qnôfäþàëÔÿÿf$Ë–(I'ïÈ^Üã»À;ã(áåÿ"ߎ°Ÿ.¾Qµuü(¼ÛÀžM<UÅ=9 Å¢ìŸÀ(Ò£Ð{¼áD(¨©Êœ­^ ç…”…QýW¼²<|VF§[ë7ôXˆÓìq¶™Wl_QjS:q0:!*“g3 +ˆ ¯¿ç plmÀÚ Ÿž¹íÈ‘7’ªrRíä"…Mó3m1$Á]¨ÈfmÄ'„]\Ê?ó^O`3\_ÞÎ F-³#Æv‘®Ø¤¼¦ë7ÈäH¨]LË¡8gË]”J]&¼ƒr–µF^Ö\Òîb÷f…í“¡ú€gÈÀãÎ|Rý„¿Ú"×ùíÏ®¨_g>¸E6d{ïÿÄ%øî¿oâ\›²ÐKl„|yg;´¹†Fe–9øÅ뀳±bÉùPÂA %Ûå?ƒWƒGòˆÿahª~5°ÎÎm“Ã1:ØŒ>O1(*xâj‡hÇ¿™ÀÂÙ»ˆ7e¦yb‰fš«ÿÝ€ÿDþuß™%ó¾kk·mŒ1z&Z­X:×àÁ·Ðtɉ|C<^(äÀ¯ž@1åà­ÍõüUw•âxI.«›ê§6‡›á˜{$†í–KÒBÕšãß%¤õŠc´“W¡Ñ¼³ `XÁ—‚Í!“ØŸ¯]û1h݉dÎe³tÚµðÀÒ½w!;!²‘Ûý¿=©»Ã=ØgXž9”{µA mk&àùždÔúkDåpï –”ÆÀeV8k>=ÇŽšïI¬;<¿r[üÒÔŒs‰pcä‰LJÑÞ @"`ò‡FÍ®0¾ ’K¤ð8óÊ'3IvУ|UŽxòõÛ6:å¬R‹Oñ™’‚Žî®â³:(]ô_¼ý[|»6- Ò4ä ”1 ü¼ÀüjÎòžO¨²Ãvi-Ñ×ÏF<]â,Íݰ-s’œÌvµì®"@=¤˜¾@ næ( Ë"sé#²ørAÑsiÛ8B9a±K¿¹U$ðxZŸ4†›»ÞÛ²–À¦Ë”¸Z¢é3±ñ­YFa“xÒ°÷Ôî}ô¼:ëð!0iQÈ ÷ߺ_db’¥Om2$´8áú+?¼ÒÑœT󛞑ôU%WW°v~ W =Ô#ŽMØè8LâÖäáµPŽô=ÿy!ØÙNçÃ[‰±ø¯Js«ÖBŽÂ'Ç0UV>˜î½Z¾l©…;vN¼8Ø z9ÊCÛ‹-–X27–7œùú…`é&²~»@øk)AXT%iìßÓß—-»ôs`±ú]¹["3³‚Øk$¶^‡SÅO¨owêb/ËJ3Up+N ¥i¤tŽf—‘GGÇíMIâeó?~,$?Zð)Ty IÝÿ '×·ý1!ëv4r¯Â4•%çH¼ÐpkÉeúï`Kè[¸4\=¹wm\–‘n­>¥šüÝÔV˜/Ü@IA¼ §·^ÿš‰AF,·äJ½]º¨Œˆ•ìØ3t b¬÷6oÿÊy„Æì1ä *…¯Dø¶­ýYVD,pO\þRĶ©#÷ýñg/'JLþÃ’4’ uÌvcuÚ˜n«ÁŒ÷^“IÚë»ÑŠÔŠœþZx|ô!¶ãŽx«ÕJÙ3égêX툀²å¤ÄîÏiÝØý¾U§„å|)wlÒŽ(½#zŠoÑ‹A«“…2·µ•ÌnáÜæ$å& g³N½¾™h+ߌȪ6Œ»Œw¬_õ„»(a•›}Ó·Pê7ª ¹Dü¼ÆÅ Äžàñ2á­ˆ¡¤vEùd«ü­#‰Ù%Å1à÷ÒrÝ%>hIÝôߘäKPåX[4Ñm¾Ë‹Ì¹Ó=onh%øãÒðäøCµ¸ª',ÖƒnO­Å¥¹îü?”VAÙ.|jÁѧ{±ôãÇ’!¦Dë¤ò‘ø›è˜£n|ìúÊÀ[•QÕ® i•s¢äPRÆø¡Uæ–F]˜bGß(ç릀²šÏʽ¸_ B¼šY˜@ªþS¦.-E¬o Þ¨üVÓ/ýçsU•«ì~XUÉÜ8 AÆK"L Jæ¶XÉÔغ‘K†]œYYÌrUf/ôCèÏñ‚G,ð&¿•aGA> W¹¾nï8áŽ.B2^.Gq:«'yzÕÙJP›5Â6n³éš\GA | ^[¶œ¸{%|QºŽh@¤·Ùåcéøzl€ kœÃeOGb!HìéP¢B-aldDMâh6ÏWÄ‘p¿+›g>‚ÑaØ ø‘VäFM¹ÀÞØ]ºÏ»Ñ€®¢o.ÖÛy«"+®Ó“8þšÙÅ;0X„úðxÄHÓÅ"€(2ŸÔü;TD—$ÐY ap¡Œ©‹QÎ÷l1ÝùL'ÿ±ç§Æ q)êWòþ¨‡†Ì&:¹böá‰ùè·¹#]ªÏ£Ê­gcÜ. \¾ ©'·vÒ©K o[ÈŠ{‘ê€È×á õ¹©CN)›²ìF\¿Î8wÆžÁ¥\‚‰Á Î. ˜ö‚ÑÑØþ~ÙÄñV'žãwŠ¢òúZàž üõJZ‚L5Ðë€( )èÉ› iKû{} ޤÉä æ›AÎØž¨…~6æE6ö$_¢^¨¸‘{‰ÌB€ŒÚ'ñ¢–ì‹›êÂVýÖ>ò‘ø¤T¶¢YLÈz9C¬2Þ<¸+‘ü©tÔœö¼Yä7OZl´›fpÄ•³àÇüqW#×ï=–ˆ2«ÂM½Õ¦úºG„ù9I“VÅFÇSô'×AÎ!T9 ðëÆH8äœwϾv©Ï*ƒÚ@‰»J=K­}g]I@J ÷L“#™¦¼0Wçhàx¨¯(A:[Ù-]cÂc„£H°îDX¶Ýí€*ÿ™g¼¥±ÕºQˆÔ`GŸ‡‰û·Ô!Ï(0ýç1w±Å£Ê(Á&o!1§ŒÔ™V•îøW¢~™çl^Ö±ŽLäQþ»­ïEª’§¹tª—tèª[žNÛ€OŠZe÷¸›ÔóÓ`E©¬í웕Q,±’zãÝx|3»íf§/6ôTM¨äæÃ“tŠ\Ÿ0D+`ãy×à”SK@ðyHi~HÌht½%¤b ]ï òâ T‡Ê¬‚f]¬}¦“ßJ€ècÀœÜá‹x›©,C™ÊÑk‡(¸Õz×u×Õ#¦³ôÙA,…ô¹T‘n*¦BWÉT=èdŸ(f+â¶Úü-o¾34ÿ64ô¥¨4毕 ]^ÖXUˆ}ñØu“Þ4äŸSq@ð<ÀÌ (ç¤rÚÉvZ+­«Ø¬;¹•å"ýõ#àòG?ø$ò2yÀ±ô©¤4æÖq bOoEë(¢g ²Í&ªPÀ·~j£ÿ ¨½²¤¨]ÐIç?’ïa­¾$ Œ+{Þ¢¯5•äF‡-WüÊlìÞ¬h6LØš%œ^¸p™Ät¿J`eÂLŽ:`?[\˜V†Óö` wØýt!EôÏéEî(eu³ç}M¤Åd`GÔ,(¯ÙïdÇ~0ÒjmëS˜øöòê«,-–4BSt…’iUº‰Gxl(6“ZªØ]¼ån›;Ì »¦=UGÛ?ÔWÐçÜ;†T‚NXû†’Bþ½ÆóŸä£pj$‡‡¦"ÆX Ã5U°¾î›°°¥è5¼bþùßð§AEfUI°8Õ¼UŸ¥ôŠ}@BºÛªÑ™b"+ò•¢Çëû“ŠÊNéD†%Ì`æè·ÙPÇT¿åjÄÎ[½ëÖÑUÜ©¨n¤ÑàŽFßl4‘ÿ¶u³HW"ËžÏà¦ó"ÄPg&kǰŠn,ï^Z¬‹€ò)Þ¸­ø¢þ‹Úºµ49MnÞÇ@¯ìòiÑ`3\YA8­(íùÛ »¼—“a‹¼ ù¦Žï^[$¢)oNTéÔ£ÙOÇÁDìjuzJVoا‘ð‰ð?œÁóùvVXÜ œÀÜ4‡¢éºñð•í8Jï§y$_ºa±»ÏÀ¬1…m[µdDðBù†U·ÆIq¤‰ì<~S Ìš' rw~l,'­ž~åq;¬¼ï=ŽS×ý_G6o<ÃÁùuÙH®O½)qoz—œ†P_S£p©d¾ÉW»›8`9UMðHžt£j—²‹.㈗+ÞD&YƒX5ÞÙšä®…»óðj/EgFbá•~2x\à~ à§…uW=¥u¯Šïýöžœ!㜿AŠSýßLiûô£§œ•I­f¶Õ3p˶¥‰+£”°WIvÆjÞã•õ¨G+¤õ’8Å'Ò4Ö|jº÷ÈwyC »1Aõ]Cߚݸ*ØÐJorÞ3¶—CZÂÅ]7WB&¼±gW%Á§Lmø±@©D·ë~`CH]«™Ã¥ ‡ø·¶¥I•›sxà}Þ‹­ñ[-•õ»”\)IK)ïaë8Å¥Î|[­ASUÜíň6'í‚Tù&H‹â©-°‹¸ò¦ éBz cÌ@¬¯ó9‡†ú¦=¦@²Ó}µË ƒ#þGX†eß~¢¯=y¿‘3+„|ž¿2¥7Ȥˆu:"îžXË~_ÊcüÜh泃ˆ÷î3î¿?Œ½üá „b}ìy„;Q[êÐÆ ’×9‡±kÁ[X> íÅÝk_ŒfîlêÈ4Ïé<º8Ãs÷Ïû§ƒC2™Ya™Of~#Gutpå_ÇF7ïw¦*©ÚÔ/ò“´ÝùùwØ@ïå ç¾Ãs ±œëIoŽó&9ªx.Š„«ñRT ‡e'K™=ßkžV‰gÄØ0ðâï[{lá5°#,íÓî>JRýZ<ˆƒr¶)*úí*Ý2bFËÁWVǦ GÚnëi§l¹ÌŠoö|‚£™¼Ëåot¾‘é ŠGZ¬¾<§Ÿ0„Æid2+ª…i× GjØzì·Ü‡ù-ëlÒŧB?žæhüc6oŨ&ËÖ³« \•uA30yºôæ°ëÇ{“g¶®=!x}xš£w¸hö±¹^%¬,yÏvÙë¥R…G¯ÝëeäÊkÃsŒÞ™ ÔÅ¿ ÷W‚:hiLã)Œœ÷€m >^ÐÖ£$ãr{ÂAÁ¶ÍܱÔr9S|öN!VÙÄëKÂðÊæTtò¨Ä± Í+­Èe¨Í1öJ=20mÌ`Ý-OG¾;5À“ä«S*å*²O¹4B(‚åÕ Ä¦Òòg*e¨ø3ðíÓ_ùƒ>Ékw>Ãíž¹¼è—í¹Ë êöÚq¼5ZÉl<.jé9Ý!RÎyžÚT gE¿uvðÓ™‹#yÈ [E¼|ð×H>: iŒ5?þr:=Ü“Œ>ËÝaÝ‘g­ÈlÀw¬Î„b¡-÷Lˆ¦¬GQtyÔ¾®£)µ!Ò·w‘* ÷6™£ÈŸ5êøîVÇ2Fü׎·N ÿ‰çåк%œï<ç )ÃÂúvóRú¦ºv¡ˆêm±ëSu]F2VL„öxn’5Æéü´&n¤Ã’F»•ЈV¢àÈ–Ï1ëþLl…)¦[ØFQcbÙð‰xkNQûÍ(ºýsu•‚,?GL|3Š3tèÌ*Œ5å"  C¯ª0oUˆ›mf×X\Aòî.ÒÎ?qhd "@^œ˜Êµ#×C£€s€ì!z2Òùc­-S€aÌ0›fìT?nyî¤;µ·ÚJ¸wš¼•)2¿&AË{N1C-Œh*3Á~Ó×·›r´ñ‡bh‡ï’lFO«èOy¶¤Î¢ÂyãO¢óEfÖ!£ü{ÀEüç£éR”H'$€tN{E=ÇêŒ0<N{Bâ±1z…n¤Øæ]jX ²š!àr:«øY%,lmNr`èY7 a&íÌÌz­sûøîhÎ…F£A«·þºAl¨FAç>i=©6Wb~EU¥–n2Ì‘èÿR…(£eêÎNãbx芆¢¸¥”˜tÐU»`ª#ŒsX›¡&DE-À6ÞË©§Ýý¤Y¾“V»œWnÌ Wj¤xB€D£}«Þ…n1GUzîÚ&úÍ]–¯y"f[r?vÐzïÖÇëÞG#4Wì@¾¢fü[§Ë¢qw”É1V2åƒw4"iû*ðzOê˜Ò†¸mN;.;tĘÚIñ>Ó9w›xîQá[‘°RÃwó´¶ ÓR¼SÁL ´ÉùåÖ \.<½Êl‘ÆœÝèR#vm¨£¸SŸ1öa€)M£#/†/^ìoî0›Xh¶èL¿ö¥öø³eX›Àr'.kqEŒ“˜V¤sâÜ’Š_URŸC¦Ä% *¶=ZÜ»Ó_)õä…®-Ç¢i7óÉBÂE°w^èÏÇ8éãúxùÁæü!]5 ZHB²¸t°ò3³§}‡5ëLv 0ƒªÿ¯WqÒÖ ¸`J¿²¤?Ý8nFêv#¥o 3܃ý- .ª‡›£µ¡Á4Æón^Á,÷äijí,ßõ­¢©.HrªÆÉ £}Rc(èBÇEÔ¬ˆÁYwHÍyx7 £°½T³oHðÄÁÉ¡ðØÚĤ¢5nw%‚…öº‚{Úc-"ºâѤ;Sçh7aˆƒþøÔãÞ¹+ãQ2ÓŽ'•»+’4ç+œÚgA•fëøÊqÝĉ˜ ùkìªDª{žÆø…w72øqýE-å(2ñ ùÓå#t¢úU*µ-«¨‚²yê$¯vÒ©óèaò%ozr‡*LýÁ·ƒË‡@¸÷‘ž¯LgfL‰ÇWÑÃÎ5–RŸÄ~¶4aÄÿqð¼+Tozmبt¬Îí‘o˜TÎGäK¼×lÀxŸß øáòŠM½=›¨!þ[ª‡6—¢ Xx†ˆÆ°é}$°½—a`Ù°°csÛ’Ï¡ÞÓ”8{9'†oàB*ûˆiÒ¾´Ý<# ¾cBïEt;Í„è£Ry²:Û(›qÈ!ê¿ÅdMŒŽîŽW‡ ‘K‰ðéþè›°žŸèÕtQ<°Ú“€8Àƒ’½·µZŸ ç§çò›~&²üæ©Å>Di€'ü­{(g¦9H,¦±-OGeË‘>3Õo¨s‘æÉ&x>¥MŽ«6ÞèÚZÿ‰µàð#JüLÊ’åVFªIòšòÓ5Mê4¨‘”Mü –®–F§ÅöØTë—ÎêNòªØÀ^>pдš·Ä&ï]¹©8üøTa!ŸúÕuÓÑ ˆHSÖ@›óR÷æ›e‡Ð1°d•AàóúçŠ%Á[ûNбHó«™Ôh^!Ÿë½˜1È­‹ñ…ùˆƒ}Û¿ÒHÑ&r©=É ?ÕñeðMÍä;”Oî:cÍP†¸]"’eÃõ"&ààþRÒ;GÕ}Ø[úþdHÆu±f L–¿¾¡*_ý3‰.ºzܤ*Uyà4©ùšÊûÉô„þÀ¨ŸÞn#Û4äìªN—6–»ÛCkP*èÉ´fB{|¿òHï_5н))TüÕ4ƒÙ&;e?'ð(X®OéÌ~Ó«”A—ž¬wtŽô³~ 0Z2@c1 ê‘øö•E«3zªyå3‚õž?0ô\»;l,;Ú<7‘»¸pl‹yC{ÅáÏvk$]»åަ²Ö„ýÑòÔÍùËw‰òðV k=6£ŽøAÇ¿q÷ö„ñ„Ö®½ó½Ð2? ûÖª tüë!EÑ®È+÷ÔoÅ1 ªõŒC×ø„ ¸²ö­:á`hÕ}|ŸK±O2ÃÀ¡F³#[Ú_]Š&Z(ª÷ƒå¤-»}•ׯ;ã÷x½éSþ¶ÔOÅ6cB­º3ñ:à|ò•õÈ¥ÊDR `Ž8 Õ¥x³s£J\>ë™-2Ýx~—>þv9ÝžÄSm׈ôý2µ½R´"Àð¢i[›¼» AÕ=OWN,Å×µBä)N}f]“r8ÕöLby€CQ€)[µÐéoàФ¹Œ¥#ßmAdy·9µë·|Hš5nÞZ= }¦5¬j}C¯âns ·ô ï˜Y” Y#ôí”ӖA%>TtpéîÑNH”¼pàL#î…—àÛ%L¯¸Ž”ãþÒ´Öà©ùoŸI \N]e'l©×E"’T€gÌaVÖµTãy¶–üO §ÿ‘õ¨>ŠÔuÄbo€åf ÎÀX¬‡hyuÌ1&ÏeR3j´‰—ƒÙ- »õé`ªcª¡ÜxÖÓÁ>©Ü>ôè¥]lÄ®RlŒA™@EÖåCó >‘Ù~]ƪ`j°ïq¶Bj2\ŽhiLXwNõòä캾‘卑1®VT¤ ÍäTX» y3o”v§Îƒ¨Îެð(sö¤2‚« ƒ :‹úúh8w*Aÿ¨þ±P£ŠŸ§ŒC¾î–„nUIíâ¼µpmÜ(^Eþtšcé¹3·Ïn癜nšçð¬P…Iß/ –=B T>ÿ=?ˆƒ°ÏÐÊi'6µbÆî]eÒ¤ñ¿pÍ$‚é( -à è-ˆ°/†‘/oZ9WÇ·¦ú¡+zDë^iψ&3©ÚÓ…Ê›ÐÉ‰ÞæŠr/0ÖvÒ µmèv‡4>Ï+dž1&\ÿUþt ]Ö ÁG¢ÓQˆµ²®0ÛÀjé-†·]èÔJ¹¤åYÝóÌDª¶ës$¦Šøp'£w$ á#•`yÊ'?&pº:ÃDauåÖçFáûe8~96A00Ø/ZŸkBC~±^3_qµ5Zi2gÁ+e3½¿q¾ÚŠ7'ãž·Úœ!FËð/²ð9\±ü5pC‡ê«Cwîu•¡¡°Aù»Ìfœ—³›çâh¥ '+Ãòk·.¸lÀr-q4ç·í›–bEò¾ø¼YøŠdÿu…NS!À¢`ìˆH ÿúç×¼äüXÓBª½˜‘±øÿYÆK’nË>!‘˜ùYî_¢,i—‚"bR†[ãÑ ²‚Ïnv$„„CÆëyÔ?9‘ÞJ¯U&Õ[u0Êœ²!Ÿ’tÙßQëD…æ4xn¼‡Š.o"s(c\¥+½6•Èt§‰gáEsÝ/t€¼Nø·;¾É ÏYÕ¯€-Ëj@â"0Ø:C}t¶=xÒIxv<4 ¤Ò3äºattbÐ/¹ñ ÓßâMeþêñŸq0&¥¶œ¦k ¿­:ªãÊv^øImƤtàoUÆE„*$–ÝWKçi“ë.~îZ0âì]‡¨]/m]|̽{¸:)4ÛøRÕ)I—ú:8¯tÍ€¯[˜ïÿfÓˆ'á22³î÷o0›ì³êÎÝ¢úØO“i„Y›E=Vi`A Oq£ª`º¬˜”±|Q Á๠&eš>Ê7z–t>AÄ3Q³HswK«µï¶†å7©8« ÿ›BãJ¼À!7­¼1WM»Ö(Çã™òd{MS—ËzÈó¢#ÑÅ•9ëÕCÒÏTo‡ú¨…ªõ¬Yy­ :M†2g¬Ï‘¼÷§wHáßÀ‰I±©ÑÜÂq†=òµ^áÄγ¼m\0B{i€†žÙ±GÝc×#3ÇJ%eׯ…‘wÎ>nÖ³fG“V/C]®7$zy×¶Ç= ,œ¦FˆS ÈýÜ+c´qZ·*–1íÅ0Eì–!e¨ôªžÁt|µõ{èÊDg¨n)VGv‰HýšýÄ¥™¶6†­» /Í6Ï£Úú"F‘l–úñ`f™£ûídƒ—”.ŽhnØ|ªï¬Å2Ø’<©ž‚=ä ûвqYÖ„ØQ™;°­Ö7oÕ‘hssç&ô†˜d€ã[÷ÀœDב¼XZ…wÏÎHÑÍ‘e '±J(WÈŸ|ä ¿°…ÝKª”Ôæ¥?ß&ƒ¿7>µr6ÉäÖʵèšaG¦S:\›rIz3€áóõе¾‰YÊžqéÞ(¼JçvGÙ‹VÖ–WbÄ\ýmßï+zç^ün%Muð„Mßk¿VF°ÈwhÛij›’ýÎrÆ£&bÌ|'³žiÐîÅ4xµ¼Ï(¨)Füyg¹}É#ûaܶ 3Öa(ÿ‡àý/ ™€ï£Hˆå¬;ZjBìöÄXƒ•ò¾Ûûj2"êÈAÉ“^Yy€ƒ‹¸ ΜÖã—½*S\YÌ%iÊf7¥N âÿË#+âV‹gFeÂb&ºR%ÌÚ:É« 5Á³J×õÝÿ¬yK$U…áÊà ù& DT5Öx¥fZNñ„žäÕJ$TÖ¶¥b™~Õtêj$º^`f;­'Ÿ=h“ÀŸ•ðÑ74é‘u»Ë\ê2]gNšÆWlj©K¶Æ®7hh¡ðýó,Ûi)ÔÊoÖe΄UÞ"s§ÐmQ¹É((äî@Z$²¶Žš„J×5LO¾ßrµõ³'§F5Í9§Ùh ßfÓ¢¾†” Ðè©l³äI>:¤€ÃÙÜ…Íe5ÇBÌ Þ Ñê¼>˜Tª=¡íDdÐô%/Ñþ±:=]ör…äNHHÛõFÁéô}Ë<(:îIÅ)·ñ³×I[ô×PÍd% û°€¹qûls_G¤´;ÕÒß×?E÷¥ŒÔ Eµì˜˜éE1Ý ŠÃ*Kí4=”p[l?„3O ŒaE¦:$ölOÀìíÂâÚWDqeoyS©Î 5j¦±TGÝJЍ\+W5Ð^TŽ{ÊÉHœdbK§„'ö:d½}*^pÜü*ç•9‘ t VYØG#â¡ ‰Ví;Þ$#YåÙº‰>ºÃŒÎXúÿžRõ÷c Ì9iæõ™Eíä÷4¿eó"+ê]UBÝÕ£'-úg± {€´•…=–ܻF£>xïV@áyóSX&q¼uÊÊÜ6ö nØ6ê…Ïϸ*&w.!]JeŽàÔ¦¸ûxŸ‹NᓇÔ=ÛÐÄü\4©´ðLïÖöòÉe]¾§% Ÿâª$LgóVA¤fŽòuüƒ,’µädzYÌ¡NSSÀa)Å¥Òü Í’ .lè\òÞ?¥ñÔs!!̓&ÅF.%K‹,\pêø€“Õßê*Øæ–¶®ˆ:{UjŠßwWíÚ…[e`}~À¢4bñ°5[º;rÀÚ¿¨Õëñ#¯£®±bp¤ÅkôIJK9QÍ•Øú¬ïd,Ëv.w<Ô3ˆßI°NðÖWäoò,ù"¬u"=þÐS¢–€„y¡”ضËɲ’úŠ” ó gÂÙýyg]°Ñx’¡]þ„fùMO"ÆÒ%븚Ò󿂉pBscÆÝl»Òœ—Ó"‹¢ï¿Þ]˜=Qy‘z9(í!°0Òë(ˆu½Í CñÏóð¹Ñ=ܾàXɢ˜£ŠÈ’Õ¥Þ»´5æ#yó·ã7GÞ OW'Ú¼‰{­Eñ¦€AµYF5~©ˆ ~QùW侓ㅜn8Œ%&qó<‡±e…FHSNßZ}}Ú°ŽíŠ”:Ô®r9ÌïËI&#O‡ÐšžOù*Ë{b\BÕãñ’/Œ¿=‘¯ý-[N£»–_€ØRp}V _ꎤÄÖ4|ázŠ£€PúI¬ÉW©Þߘïá B ÊÉ4ƒìlØÀŸ‡. ™Ç¤M Œ³’áqRª œ‡‡_¾÷9¤^«‡Ægé`öŠ™–©:ë—/ŸËH/“í×EQ9 !Å’­Ö±›¼€DO” ¥ãH#†UÁÂWU4VQ£9Q/ì„çaEwqïú|sƒ‘3e[Õu G ŽZœ9YóxíÛ£ ƒ˜LžWW&älóÆVÒËÂåz‰IKéCþÊ}daÖ«åÿèÀ .)Hè8Ó¬ŸÈ¥¥n©ËXrÞý²é$ÛD€ûº;Cý¡ü“üøqÙWÇÚ“:œú`ÐL­bâë+•{Õ@Ë{j®8>‰dÅw Òã‡ÿ†ï™øÍ@ÖU8õ»ŸZ «Á’ò¹ n /l\ 5›˜ÇÊÚeV»¸eôó=Êìw4{³›Þü ìß´8šQ]ÈÞa= ^ñ´À‚šq<´ãýTt³Ð1{yò1w»..î¿$?µáÃÓ†bšˆ‡JÂÏ2“zHgÁ¹æ0˜Ú3OÖ›A~Ùþ©tÎD;ü1VYrݱò%[!vyw0Ï¥ZcÿôR¹ÕteQ&ɯ ’ŸÝñs†w£Ûý»0gü.$y°²ÂÿÊÊ™§QÁ ÷ÆKÔÉ»iâ\âÆwë’Æ?[×ÄFpv3Èðúª¦ÉZ_Àr’kkÐeùh‚Ç´y‡Zi¸N@ªÁöaÉèÖ´xCÑ%Q%ƒ½‘«–&ÈM¨ÿ¾Öðƒ® L$Bk;“ÑNJGÇð2ž×w`z•ö|eSý›œnß·±'iQÈë«Õ\zß] âD»>‘}`¤_im€œ8Iž_¼ÉKæÈÙû-Ôo|°~ä„ÀçM`cšqч¹Ó‚$žY¥ä"MT:ÙÔÀÄîA¹‹Áû= ªbKÞl´ºu—eär1wSðxW±®(óåñhF´)ðÿ9úNZ‚HÓ®TM²?0º3êTÜg)m,ÊK 'ý{ÄвMhëu/ÈÊ+! oY‡Zê´µ¸ð´Ÿ [Dja2Í9åþ_ ·Æ~L‘îÒô¡y}ñÑn¸tu(1nÖ½?퀻¸ÅÑ~af…ÉÔ N¿;47ܺ¯lIôî@gºër UŸm~"‘aÖ8œ ÎYÁÎn¬ÉY‹—g¼Íb£ìoA43RýÇ*öŒóYIÌ[ÓïCWªFŠÁ‹ýÍ+¸Š `7q5{7jIW¬!õñšŽ†Ò)²„ú8·rVºÝ R£ÊÐ Ö'¯'TËEê…»ø.­ÁúêjPÉw¶Œmwìg¨è03Cr0Ktã§NnV¬9 c‹âÉÜÑÕ›B˜²Ð‚m…¬tgExN.Ép†(_ÉõãzÌü®V¸Ÿå½-ÝEUìȲù¿Às³ k˜"—D'[­Ü¤ù4ô˜îò¹òبÌ)3#(ÛöÑnGŸMQT½ ?-KM1t•ÎJŒh¯¤œ{Xá>¾¦PÛ|V‚ssú}íÂI¦4ƒÃp?ËWTVV)óœŒ=v*æä5‘Ã(D·x#ÔjÀnúˆ&h; AÅš!@iÌ|ˆƒÄ4WÚ?ñåDÛÆšj5æ9Õþ‡ËÇcd˜0 ”®ÞÀuøþ!’ˆ w OüzËr8ôýôô2ì…¶ÅZJ;½C-Hid™‘(Y«&6[LÜ((K{–ƒr¤(‹ 댿‘kTâ²6GŸlâÏ h¤pv8ºOã#ì+LIQ|[€Ñ‚:GA~Î Ó‘ïÏ:pòÏ‘ÀL#­NdÇC W;å3ÀtžR„ÕËJ[t*­qï \2³ÈI ïD5'¹÷°Nzsúp½€ ·ÍüMíÎkø<|†êª ÿ©P !첕~Q´S‡V¢½eÚØy ÚI! 9"ï§yc*™Š¨78@0(ö{¯)[Uܨ%û®Ë €k›¼\¢¥ãÜ@pƽy¡µÔ¯Ï–—:[œshÂKúŸ¢Sôp¾­À<’ÒðRÆÏÓ<6X1’|×ׂ& !%±ÚLZNlšg|²wÍNáö”%1f›xŸï~;õe ÄCoÓµˆ8±Ú3a—ÈýC>ß".Ö},ÌdÙáª?yøZ9ú:ë3ù#žÿ-.ÕúÇ(Æþá ¡ÿƲKy <95§å±!ß}¼ÚŒ»ñÅ[oÖêBGð%tèNÁÖµ„ãA¥­m)d.B`EôÊ¡]l÷iYâa𞃗ŠÉóúv™Fµ Xœö[ñM?&AÜ«¿°ùκ'&%{ôv‘_ï_U»'õÛn+>TH| Þ¸Ü·i©…kAèÿ¹ØªˆOÕ‘£Dt¸87öqÔÛA¹ûf§EéeÙ_¦ü<¡+VWhí4Ex”òZ[j¤‹Œh9ÿÓïiS$¤Äb¿Áâ_T›ÔŽ”ÂCøßõ{ÄfD<ÕáѨç¹I0Ÿ«=8µë"9ms _ˆ»ö9¸â/ÜnÇ¿¾&OÅ gÆb B,äTég ÈZHØþ(!·hÎJÃk¨à— Õò¶’|Ô!Óÿµ×ßÔdwô½JÊ|.Œ: –‡÷?ÎášrÈ·‹~ÚŸ[0Ó BýRÄÉê)1o‰&•çÑRï³fòühVQ(Á«1ÅÓ$yãÕóåÓ LÚ'´}ÖÕáˆ=C×ö&'TQùä¸ÕjpmÓ.ïç¦TœKÑ_nózSõïc*ý§`Ó#]äúëaµV#îÿ¦—A,èZ…~GN8TÞ1ªÉ¢hð—}[Hfm‰³ÈLoRòâÞ&DìÄÖ,ªŽ¶®°å%H¡uÇî‹b§½($ÞÊ>z žc“®#¼a¹ ?oEµ£«ª³ì_/IÀš¹òë‚Ûš;€Ëõÿ>ní½¤TqùªtÄàÇûQW¿QÊZ´bqÃØUd‰˜».<}v‡ˆŸ×™†Sµ(ÑÏÆÝ±h¥FjàH ævõ[7t jÑuáÛÒ¢ˆ•$¼îÿ滩ƒƒæ‰‹  m“oC:dÄÀó .õ|úê“­ï𣓈@©…õ¼È‘ÜEemšGƒ°fz’}N –Vô6U*ƒY­ÉOœ³ß%Î*Qv>8o‘x‹ƒhÝ÷@ _áà¡fˆ%V&"á^ ÍÛr¶ô©þþÁ­äqúy³ÉÂ¬î²ÆlC\ïJÇŒ`Úù°JK϶Èå\ó‰í¼ë±4Žÿ<4ˆÛÕ¸Éeâdñš”Áùv4U !˜O=áF_¬ ^V¦É‘…ËæKa÷6à~âbzŒÅšL®«Z© ð1Ïu÷­‹Í¨/ä”–,ƪÖÝ `ÆÁª‘O—¬‰)ß!8 ‹Ý\P&°æp¸}IF'É: nÁò`Í®/iŒÐæŠïn¤ùâX^‚m^KP¾R þl /²• ÊÅ” ý’T´˜^|}n´ÝuÀðfù$ˆ ü‰—äáÊ|pÝ»êòæñ}Gõš*<îö_ w‰¼CLƒ„÷Ä”¼°è>»+ÓÇ~ÇœéñS;œY}DÇ€oÐ ¼Pbdú`V8«y™„õtù·gÂÅ9~X®–‚!zîJãç {Ò¸k7RÊάqÛ%}XÀYq7#œPc,u‹p]ìÀ{Qˆë• åSbnz*Á9öC3” Òóùå“á¹e*ÍDk1ßaîW$ÀßL(4â,̇‚ñ¶+²†iQܳèŽñ[¥þ"i’¯A¦m¯Dë]ÏC2–PÐ<³R´1_*>WðÙáê!\*7Æ)£´2&>ÜíZCiàNÂ7¨%å”6¨°8øü¶Æ@–r±ÑKÝÃ)»ZðoÎÛ6ÛàB˜ñ~õbðOs5%F©¥3‰ÑA¹—7Ñ^=—a ãPåWÊÊö+Ÿ.c#)NUQKù”€y™÷'EZ²½xû,Äl™¹~ÂÜáqÅ2ÿn#}«+òLÃ)wùn!K8–OæTWUÚ`GÙièÉp*7‹xHÛîî9x­bB!” ‰÷dkr7U쪺¸ç( jŸß3mz¼ÑípéNL°Ài‰¹Du”ÖŒ#QýщLuyž¢æ¼nAÓuc’¡óÇô³¹Ò$‚TdÁp *BN¶v¦> ­2( u-gõ+¢Ù|.HËmÒ˜Øn+2øžOJÓáÇ>жzj&ÌÚ„Çk4Õ‹“F,1—cuª³G¿ðAª„by¹&Ž5ûFÅP>}aFäÍ`Ù‰´8ò>%ìÜ<¼ž7Zùì-‹WX«f»]À*e쩃ûÔä'ñ©þo`¨žgàˆË¬±\ZY*ô3¤º¦äëgΘavw¹»šÇ÷šÖAûÍ_òˆq/>ÉÀ¢”_½0”Àicá~¯ø¶`7Îöò™„gžc[¼]:÷(Kke˜ªõ_2on*>ëɶ“ÞsG:¸Ó¿[[Tƒ©‘šø„W2òLM¤ž.Àô§e8 ,y¼-Ç5çÛ^z+MæÍΔ¯¶¦ þq­(E¿ùÞ¦0ž`ÄýmðG,§ÎîÛï©΂¡ó$Gû:¯òÚV­<èÏÁÉ7)– R8!tg›šcþÐÀƒ‹8ë\IÀ~E#ÞŽâuh!i•à«€²9nÕ;9eWÒa×6* Lëb(ÅÏÈ—gçP&Ãj¼›ažs3I\9}ÍBˆà´…›XÚ!¬¦5•›z”2Å„¼EQŒ*µV!D¸ p˜Z^>Ùj§úù"øÎçF躆êÓßDÌ*&˜G*’Vª¥R$¬¹ ]DB ¬+Ž…W8×)T°¼ÿ-J ³XQžÙ â(ó;èï°þ IáÜ›”é>–ÃJýá¨4OÀ38XȰÒIòûwãFgbÿVˆª7¡Ým+¤<}2º’R‚€ ïn!y·Dí/O¸¿Rð;´!×­%èUö ”:{ß›·tS”Hµ©I ¶|„i}°?ÀN•£Xê“æV'&ð†7zXž>âR[ÿ ]#,ƉM$ÍG¢ï$® àFúF×îÕê$/ô|Ȩ• gæÁÈ»œ5bwÞŒj„±vm)\ Íö\L|æÕ *º›dÚÊc!²q¯Më~mD¸¥ ¼àbԒ΀lVùÑôëZ·IÏDoµê‡ƒØŽº>®'X>@F¥â\Ñ_Ÿ`zÜý¶ˆ›±ÇO¤ Äÿ“ð€ d±|_X]®wƒO$vWl~žˆ¥ÁTÉ’–±åÛ¥ËÉÅ!–Ö ëø M Ö{“£Ý·6cÌH¹0:¶4ýŸ/k»ÚýXæÔs=4;Ghž…s*)^(ãˆ|ýøŸUn®§öÿUßÊ\<ràR1Šá:q)\ú÷Þ€Ÿ×3 ÈZÖ‰fûñ³`e€mPšÏ-[ªòD|ñø+qïü¼êsª7L¸¼«²Å²K ‰¶»ëd,©éœ[v³Ò_e©¤ºH6Ë^QïTã³§ O˜ÀÀ S€Éd€[¿ZÑøÇ²oÓ‡í%«±‰/ßÜrLMX iŒi&aÊí[â™tX^aü<²ì™s¢¿¿géÇÏ® æsݺ,ú‘}à6Ì2Ýx9§«ƒJ‚<Ú{.Lm—S –¡<°+=Íÿ6 ôh*8}ã îýÐ'cÜ ¤¨£ø÷6³º3ud jøš÷úp ¤ÜQ~¼C”9 fU3 ÚöF¾ÂÅ ´ŽÐD¬(—ç 3‹…¶‹n…Šó6ªõKûgÝk"0å­¨ž6Øp"Šr|ÆÌÈa¶ß<9®%µXö æ7U’ÙpûGËœ@_ 7}*zVÊDJÜr´—(íY5çxY£aMÆlí„U¶ÿ“óõqæ$CHJ^U&°¸&˜õ$zÍKìBS¢Ÿ$Eg²ÝÙ›®×â"/|PGÃ"Ä\Iq©ín Úá¥[R¾è÷/‘˜ wª5ni°bô[sN¬pãªÏãEƒ—™M Òg ”™º÷\}p~sF«¯Åˆ/®ÑUíüA×'1á@ö|eK‡?Gõ¸ÜT¦Ë<àYߎ°Uã:>M³ö³é6o./žµË™>MËnذÚÎÑeÌëÊUÌóZæ@P(gò95Á/”Ô@ΆÚI¡$oxl©í ^XPìScKÐî "ÑjÓ(õÕûÍêñÔúëymŠO³zJx×áÆ™mÑHûâû]šBC;G!oÖ‚d.“³­zäŸo³†lûÚn椭H"~úuGEŒº™“D3§=6« ˆÂ^è1[ñJÛPÿLÈ[ãp ç³#·»ÎEM#ŒºTd ¦´?™ýn‰¾#vj¹Ò¦üq)@Ã[¿©ÃÞш¶n<ðçÞe íâà¡ûücÿVxæ3Ï/Ln ·ì/ççijçj¤&õ°mC'«Ë,ð…*¹HµHUw ²ÍÓm!™Þ¥KûÐ@Ws®I÷pxL†´êh ïß׉b`*P^þ §ï¹>4T¢_1B&SPa?Ÿa‡ÿÙRż¾V¬÷†Æv‰qýµëžë0]t>hÕ€Èð^?K^¸3 X²^à?½À’†c–)>MÕDóäH\Ô?Åôž–k?¹ÒÕ}d’ËÇÖGÀ)‡„*«†Åì‘NW{,9‚@[›?q4Úç·9àÆt"KÈ8xgYÝöÚPp¶¯EûK¢·¨&ËEh;Ùí•ó2á9ñEå$Ť™x˜T &…£³Bôå[ZÍ“éa¡Ü_¦Eñ"§%=‹A"XÆ5tö‡.EÆ• zæ4깂CV6S‘¾-gá)=ØÑÒ”YXÆ ò‰"™2m«M¡kè¨Â™nöË—Ùá$ë³Xf}z’±×¾û­OùØC̯¤¡šJ;¹ûL“=ø±P£ó…ÿÅ€ÿ¡×êì#cÍNp¹"ë˜+×-î化^¸Šˆ4hsÝçM¦^Aßê…e2aUjÜ—ã§…±Xò„`·6®Š”!²_¸wnÁ-¥½¼V;4陚¸w•“+õ®p ywG)ɰöó©øõê¿õjآÞã¹åÞcÿ£NšF“”MÁOZŒh4Ëèg¦¯Ä»2µÀ“Iˆðr3¹Šu,tÖļõYó‡¼x7bÈÁÿ$s§ed¸7Ùíy¼›.»N²uMçöµK¯s°ûÐc™XÖ– +÷P$¶Ç%G¡äÖÕÌ¡ˆZ5lËP•÷ |Ì 3`‡L"ëœÙF‰Án->©]²Ùâ}oU×ßu¬Ìb+Öo>*ÃB‘Ï[#”í>ßLsBèCd8-'ô=‚ôìúƒˆþ7ЪPô´-oøÄéV¥”ßùW_ íÝ¡<ãÚq‚nš)§œì‡|Â0è2Þ­&"ÞI4™œ+'rdà(“˜«2§žçòY’‰º;£ÌŒ²O÷'#ñ_/ ’^é‹E?’ÙѦR‚EYVs¶_Q✽ÉŽbBü^wbãu*_œ<Œ?À-ëDfYgZÑ[¥ª7C†OÖØc”…v¨Ø9Ø’N³ó´“Ê”ýN*œON¦ô5 $‰‹ó¹KÀ¸mKÀ1ï¥ÄÒ¦ë}ïrKœbmç¢_²“`ýë=ór_jvéø\ÍÕ•Ía_hšˆÕlQ@'éZ o,åC`•d»úëïž§pJÉ5ä3µ6Ïøx¯ãõ$Þ,ëMvæ?Ø®ŽóÇŒ‹/;:NÇ68wíeõ"]h@8»1#:¹Ò?à¼ó:”òhœ¾ò{"„åÈ?×Üwª.àðmašâæt·ýz3Ø'¿œ…ã‰ÛïÊ7²C⺞º%ÅœƒÁàJ->óªŽÆREœË9 ö—5Å¢“ª!ÁÿKÑ+vlh£3R¸û¢Ó¸+¿W­2Ò‡ ¤W‚®Cì2@ f_ddï§äýTE<=¬š{,çOÌ£Np%Ò )prDæÇ»‘¨Á‰êÞà ‡¬ºpFàH¥’dÝðj§Ï‰þ^I@¨³–Áð‡RV~bކ#º±rm 4ažÚèG….²Lbfd‡&‡Šð¬!>7¯@ ëvÔÐBõ<âî;,š‰=yùŸcë£û¶f×ࣇ|úl”Ñ͹lâoEЧÿËò*¬”­ÊÆ ‰Êu ÙT”³7âEŽ8Ú+ÈšAPÚ°²òœÌãY!Èïþ~¡}¼’üŠ´;1b+°ÇCÇÃ)ó8}-·„سÂh(²Ñ€Lâ‡ê‘‹ jí@E¥i£—äŠÀ3¸ŸÒÆ=¯h<>}š5ñflÌ]{(´&{Æj½â:<äÖÆa~¿äêÔü_%3ÈKXx¡Î—L0𛀳;`ê‹:ç“§=þ½ÍÓ7'Ò¨žUÜ{ǸŠ,à=en±Bhÿ ÃÌ“NÅìü ðÐÔ4>BÀìÃ¥ûÐØXx¹ºˆýÉ„9 VdðuÖ=¸Ñr«çíu„ÉîËè©®°jHùÅD{v§Ÿ‡ãÒ¯eͳm)ªrÙØ ;ýÊ”«F‰ðä/ ;uûåÏu…: ÜhøZ6™;ã¹£É;»Ƨ‚ Whµ½]:f„)Õ%&{[ª=¿ÞÏQeûÇvCS?K‚Sæ®É5™]OÖ†ËLu#WG;’0ÙyºÇçkq¿¼Å²Kz5ëÑ_/À)A¹ñŒ$FÙwí5( ‘Ðjï5üCb¬­âÖ¢ÔOdeуpË?w[:`]ä¢ÔçKªÑqÓ62=¯Ôü*j£ÝŸÉô ÍwXº·l¥ò6ËW›©Ò=eƒyä@ÅHû¹k[žDIëöibˆ#p©`ð}¢DÑ 6æeÐ?/'¼¨Ö6kÙ«ŠAÖþ,ý@QEüVµ5ÅSaÅ žñMWv¶H÷F_<ã—{/?4Þ²‹Ž%>Ùiý¬e(£-wˆ{JvÏöjn "¾sXc(ðÌ9™œ4hЯ¯ÿŽŠwüöiT³ÍDU×ê‰{%)@îâÊMÐGN¬'2>êøì¼ÿÉ ©Ä+ÿLª­?ûÙŒøïIi¦ÒJ8beë&Öü>ž/Q–ëHõ˜iÌ„ˆZÝqóÍJœü8ØwqÐ6.3Š ËV¢J'22XÜ<˜hD\þ³ÛÂ^tr¨w?sÖ¾|þ®çÅL³Dµ ƒÒ£á¶7ꃗY'³lé‡ÞPŠ7³®¨D€"íü.׋³ I+k0³4ßaSíuë{ÇìÌ ˆ'Fúhe‡¬ÏªTÎñ»Å›Xâ?lLëJ£ sÈEzi_ *Ëïä‘CLœ|(v‘ž- £Uduú Ù$ç:VsYÏŸ–̓ÎVÃøÙ²E9ý·ßÊôàðÁO$™|ŒŒHïõ9D”PÕ%­HÆbîGV7í$R¼dR÷]ú$/(*xi_H®ûO/ œøìšÙ ¨Nªnf;à ÐË ãXd®öß…ÂxÒ)ÏÑ~.ÀAåP¯gq_ñ!˜m?ئJ‚@dò¯¿1øt¸×*jâ¶4¢ð§=ƒ²º`4ÇGäE¢yM¯F\”¿€ÞîÙ·­0b ò´G±ÿWÊV¥Æyš7Yòî:•u‹ ÞŽÏ ‹JíüªÅ·8¦&ÏÊÅ\åðL.hÝ9à'y‘[u^…-l‹6`Ï<°Jí}w¹ ¾½Ñáw›¾–‚h4ŸîtÜ*ßj‘îðdkÅÄanˆMÜ+3#ö§Y‚ãpAè?A¯n¨ÚrœÌ @a釳8™ì3ö÷÷Š·MGþ´ñ£õ𓆠I#Ò5µÑ*h.ÝQx¢.+­ß‚ßêYØŒõS¸X«gllò‚n|³c ßr\ÌžE.eW…xZ© [þªÓ…{]¶h;Å««a½E7ñŸ4¬×ÿŒe?÷‡Ø¾ž˜ßhâ]{ÛÑ·/üÿjj×£ÛQFPO1»iÿÞ&€McX]=6¢’º›Dk„ë5Ã^ˆëTr¾ÂR¬&Tãþ.§U&ŸÑ‡V“4›«“u·N[6dk SPbvHÁ·äG¨t íÅFC 7X}ŸÇ+[æý¼9œyáD·$;tSÿ¹¤j ª2Õ‰P„ƒ»îd§ð/®X‘‰Ü!¹¸Í’¾Csœ°¿ˆ:^Åh{Ó^ L)†¤+ úÁ޾R‰Mqí. ‹†ºóõ_”¦U…ÈUv:øD6SùÄB8Y+ iîMÜ}™væŒÉ¤/:G®eüè¸ôbíö-qÈÇlÈÛžî8;˜Ýæµ\hÄšyê „¨ü·º‰œ›»cQCWe;to¤à­Ý[;ã‰s&ô?×€ð鯖hÔ¡äO6Ú»lƒ›ul U^2¼Ó-!‚Ïa).ß™“>Õø$­J_'`ü¿6ªÚóqròf¸oÚ õÊnCú’½03Ú ‘†£Ä%u¬Ñ/ƒœ )W"Ó7C¨m”òÜen#âq q’Í'O„Ãð&2/eçŠ*u”œððæÛZ íÊpÃÇí$E€¹ Ë»„e踙;õI në µ‹Ôwë½¾€cMEé*ìKb+F³Ö…%иÅ$D”ݺNÿÀï§Ü¿òý)7XÁªOã³éî^× 1GQíË]p&uØõ`†J?¨Ÿ!ë:Äq™‹m‘º Ó÷ݪ£[å‚!æ“_œ–³=×uL£àmhþHñŽÇ©ó¼ºÅ‚ۡL{MÌÝ£ƒ–Eõooñou[®÷<ßR þR.Õ>ꌽ=KÄ-/¸f”7+м{‹ˆÓ0ÇÆ{7 RÈi@Ý59s¬aÞzðOÎw>NPµ£,P˜—禮HWȺãO_틞|ÐLô()!¹!Ù-بúMÿ· R+ Ü~“>jn°õ¸ Š e(:b ýȳŸ€çÜ’ò_!‡ra;G@«åÑ®Åí¿´ƒ3ñé<6ÁôeKZÌ"†°LÊP/÷N» ™1Aôsݺ9øý„}ß*ýª¯ÓùùûóLŠ„/¾ÁõØ]Ÿåà7J;k jÆÈÍÆ»U^(Gžî+æþ¥…ö1„ô0LѾ1¾[Øê‰š´-; tw'(Ú¦þBÃÆIzͯòúŽ”qµ{åY lÝUŒ³¿j’©ífâൢÅ3d!ÇÁb¥…JoRÙn@…žýkŸÜ_7„†71ÏfˆÀa5—}ºÜ¡]¹ §€ d®,Ñb÷I¿è]Íã}q+@†t9Ä8}8Ái CYÖgï Hf=q•óqèÙ§“ƒwwRz/a›~µ/®…–_by(a(J–êñÒ(Ñü;‡?×jm—˜ÄÃày“Óª_}}â€]†-}‚|í0º “#¼˜ÊÚik–ãW âÙ…53UCkBrMG“|ªß}z…*w˜npÏÙl"V{âLëЮX°±y—~KÑe2µR-l%WIMÓmϺ5’»?ÓúÏ/|?-W¶AÓ£¤ K`x/jGɤ=‰Ð­âä~S-ÿ$®’´ñY@Ó˜6j ñ.þR³Ol4¦"¡ƒMæì§Œ¯\Ôyh0ÎØ2ÈP½DÚÛ×îf½¼Mñ\9(‘![Úrï“·+¶Ô>¤Í¥(}ìÄSÝO)šœÅŒo·¨)OX=ñgÞ'ùˆ•š·ðdZPC—Oøx ~L$üêw>ö‘ÉB †Øã1÷MD½PÇæ,ÈM~¸DB£GêE9?Ltˆ{â‹èÂËÚµ,Àm?L×%ŒZCèœX“ØÂ× Ö¥èÐ=#‡Ü)IŒÜÑRöxÒ, štNø`±r3ýÇ´S2K4Ї ®hA ×U´CäƒÜ"Ž%GéòÓ›'øÿÏï4Ùgr]»q•l[=”Ä^ïÕ¼´”þ;Hi…œ¼ª%†½ß³ÅaòüðR'ü7àá¶uî>æe%*Û¶E!!ïïû^•0BÖ­LjsâWVy³®eÿ³•0üì$m£ð³Vˆí°c?¾5=ò•Žx¤BÞZ»ß•1(s2S¿®qÏËçѱ:‘oÛµZ *4¤åPÛØÆ ¾| Iôœ“D WæOQ\ÜA,B–!Ù€Ò¿Dë…Ê#e ¸äÚbd.½3f¦ÊŒÊ©9UÚC­S…ÅVµk˜ÒÓúÿæÒ/µè-VVŸÕ‰Æ.¢ÈT.z_6}.·“ÁŸØýo>¡ÖˆSÔ°U†m–iÔ1º§èŒêÆGº» ]}fW§ä›¥ àzb³Â¹ÉÏù:º»Q ?ŸòÌ)' _to¥¤p X]¯-î³0ðI¶kXïè”p, ¡ÂáP¥ÛÀpAÃ+FžËdI¿QRKÏ$ÐEJ=ár»’yð©ùà ²DO2š^AµDj6ƒ ²aŒUŒÕ|;5 õÆ c÷¶Ý·ª9é³Sô¡U¦½YÔUu Y(D:‹‰ÝÍI}Á .¨Ç/ÿËÚ©FTß7ŒFu,o jRÙÖ½Bù55Ô‚¥Óš:Ú“ËîNÔl7¤Vl`ór€B§?¡¿Ïò#›€Ž°Â|SžÉ³Â§ˆ¸ŠÚübÝŽvAýìÏߨ‡÷ÈÀ k^S,fW΋qÑbÌ——á˜v{8“ˆíØ•2{ãºróåšdSØ;‚ÐxÚp6žUák~Lðå¨:øh†‰5 ˜‘…´~G@Í{X"Â0ÂLçÖš 2‡â0Ãc™¹EJ$b¸{§£šS{Å1»üÃ4¬ož8°¡(/ú JŒfÈ¿†bûݱãꪆœêÿ3PðöܲÂeü³y%‰ùPOè;ªQ&A¤l˜!ó[ù0­íʨeeB(—¿±»k¼ûß–![ù|j1‹„Üž “„h·Uõ(:yŸ<ÝYøì‘ÁÙ|Æ-$ÐSÒ¾0Z€Ú÷ Vù}h&ÂYbÄÌ‘Mq–˜‘»‹À‘ŠSeä}ÛÒN©ÅwˆŠ¢ë]›_hÛ!›…™SFQ†Mÿù3ü ¿—Z-ºÍ)ÙÌYR|‹ú…XíöÔôièÌþ8ÏïKY¥÷í'#:#j£70Ô¶_Ê’?Âú%%{ñ';§+œÿÝjb¬ÐSÕô·cWšBH4vߨЅhM^˼}ð›C¾ê5O¼Ø¼ÏuHÚŸèuÅLV¦²ã¤ºãk†ð›QMèW=mÇlǼð Ú”¬´ôSéÚhcîùv]lkáâ.HÊý¨/nœ]-AâP 1¡—_ï[èãbb€´çÙU»W>å 7meòlŠõ62ŠôÁ"öùãDÊOÈ­ð *Ü£¢\ùË4â§Òt|‘vXØk4–¢9Úƒ¶¨Ïk³õ?5˜Hœéh¹Y½'Œ€oe5 Æ M[g¬ÁƒO'q$¢ q„@Fyçã;ÞÙ¯ ^¡Xb? ‚ÏŒ RV8”MÆ9zÊݸíº/ãMŸR Uˆ•J»@o /"‡M$G/ ctoB­¨±ÙÒ§±Úeû‰¨§‹r³ïîföµT–¦yù'¼øèܼ·Z/ŠÄI®&¹¶Ï3º£äëÊrjúø$ãhšZCÆB­ƒ=؆oºQÿdØâœ‡.5ƃ~ ‰»1ûúžKä_ V²/ÃüÊ ŒÌ ÆõªÓÉåì6‹ÍJªÿAi@”PJ fœë)ËÅt·Û0Îll‹ÝCá773ÁÚ†½¶eÆN¯¾)úPFÛRjlp^EDÍ~ø,™7]#¬-H°Sõ§¿z¨uG"'&“#ù¯h„´ÿ êp¼I{. Cß̶ìÇü% \$xcñNuý‘ïÂoɹzº*“Ü1F¾ŽnÊ&ó­ï´˜Ü4}øp¼ôyØà¹ƒsa@ÐsŸ‰l‘á?Iggz4JÓ’Rf»8C›‰`¢Ì@`KgVep’õ?+ž¾éSIg¯É_O¯oç¿ëØÏíÛbheFM 9úÌÅ`õÎCË2E›ô—§ãúFìüô°°c­8ϸZð!zĽý%ßíTÙ4¸É¡×ñ|Û¥þiÄ"-ß+HãUT¬ŽH®¸þ1 ˆ`‘r,ØP`Et9Ù~Óô7@@KüÓû÷Ẽ©ÜÝñ€QÏ]”ê {úPÌûJlªçÚ¥×fŸ£ææ¹aBJãcC(Èš¦&l Q~Æñ×÷Í–8rmfímÀ¥Þ!™þ÷oX ÑÃS 3p„œCµ¨½ˆD¾¥<ùTŽÆR œ$>œ“ÆÖŽßõÅÌO*¯µ…K®È I0;¯PN5¨@_º{.ðKw$šÉPøSýý̽–ãx+Z×0–®ÏÉën—Cô¶9$ÄíºäIÙè Ê2‹hŽ„•©ßZilÈúÛ±¸3”ïŒZÏ÷º»¢`ë0†à¢^FMkª…9:ÏÏÌW¸Ç¢…þ³<ÄF†x‘ÔpKP}šÀËÅ(™Qùâ¤úÑäF§ ŠAÍ•Æ=æçÎhäY<ú‘:Ïzoöû|ûØ:{F½5ma»‡6Û²{ 'ÙE³Ú sä4c9œ» ¼´A›b;ŸøäØXœ_‹°[£~Þ ÊÏÕóÞùñ«¿ƒ—’΂‚E¤ƒ™ruq5`Ø$a ¸mÓŸ‚»M˜3.©¬µ ¸ÂZRMõoÔkÖ"Ʋ´ÚÜ]vgGÏl„^®ò2ˆcŠˆÑ“š»"kÐW—òë ŸGE‚ÛÓ‰ð¼6\YÀB[ŸÃÑáH°Qƒö¡Ò`|£3­h|4eÝB@Gú@"_eVÂü, ?kt =N8Çqlå>…’mUðI=²„.5®†É¯K¯^ñh‰o²1VpæˆBS<°r½Û“1ŽyÔúº(µ6µng iúP&kÖ¸ÝÄv!aD3Žõޏ¹TIX>ñÄÞÈN‘¶TEà"Âe7W ^2ûOÆX*˜ñCÿ|Iì˺(jÑ=0-ä+3ø®´Évƒ5p6ð^/>C¢Ó”1|ð7º»ÆYÜëA Ÿæ×oz„Qbˆøâí].LzÎÂàÁúDtÅÉdYB½ƒ³ÐðoáW‘N–s]_™AtÇðÃËeN ؇Ìò‹¿`ŠG¬‡È6ƒtîdâÆK˜®›}Äl\u»· Ø")«@å«cÇšÁilŠÅ»ð¾´zo°mè‰ÿÝkJUã¢@Ú‰®•ºèJQmÔ¡ }±&ó6)ÿ©\DÕ”l‰ßTìÉÖoð6H›ÒK•7‹šOÞēڴ-q3®ÕK‚XñÁí4dEÿ¥ž_¥÷¬lpá¤è|€Ø<É,MOXˆZ›q†¯vU¸dåY,”Í^áa~N¯Ðy`F¹CsÒýì¶,¤C`~Ábp]€k¢™Q3Ö«=>oúôÂÏÜìb$% Õh÷Gžh¹–䤋k¥DxŽD¬“–ñ(Ä’ 'VýCϱ¥4‘Èù[Uv³¯ |@3dJTw¯¼§–T%³¡ä¼} |ªA±ÚEdq;÷‡Ô1¹, à8‚&<Ç®;E±tèÕ7cëŤÜówrUö»C·ŽjG:/É #º[@”GFtÜ{wšM ¾Û)Ö›§þCÝùÂøÊRŠ`Hdf\Üàƒ1å->䃥fôjçÙ¾xhµ÷–sÖñ£Lxº$xí§žphØúQLó¤§E“ô¼Ûak@û^ñAÁ‡ÇÕ…æÒ¶½›‚&â‘9äêåÚµŏ¹¾BxW²%Y~ 9uÁ¢¾»æ&8HIa+v€—Of›ÐŽ‘ã·‹âÍÓ \œú=^ƒ_ÚngK<á¦ul•t”’3€šê!ŽOw·sªÀx¼©£åOûAš« {o¯E'm%î6ù,}Ù#©ƒý ˜’«©>‡ß`E| 2ª÷Ìw`·<]°¯Ò +~sKêo›jÕ“À:ûì•U?¤ØšÞN­´ƒÒ§ñö½Ô–®¯ÓéeÄ"ªi¤}Ë|äùöŠà‚¢`ƒˆ>hS-'8jú¸—¡@Ëùdàh’oŽÇ3l*"¢_š¾Ú½·Í‚Õ¡’CÍÛåô¸5ÓÎѱ]6çƒCýÌ;q¢­8謥JdoyÃÏÏâ²äãÞï£|Ôe‰IùÌëjˆþÕŠö"»¨ü££ð?%’~…ÆÂz‰£ä^$˜XÔÆòçø³‚/é‘!Ë[~Wë0À“†Ëý%eðYŸE~eÜ‚åéuU<~HÁþõã#s¬kTw]ð»Ùr^2³rcŠýwØÊ#U!8&÷wœ^¶;½G›¾ß4œÔeߟ„›HòÊxÝš®Ygu¿sùÌõ´gÍ„#ˆÚXl™løØM0ùDkW!¨³º’Ê9ò\ƒ«Q¡D¬¥ßç»âXÍC\äµÖwšxz|æ‘¥L«“ŸCG–ÝAsxnw¯ðl’Œ;B&T«æ (çIˆ+¿áÀŒ3ýÖÂÝ’ôìÛfÍM†;)Ÿ’äuUêŸËÚ< m”fÎaÌï±SXŸ¯p±¼·G0>¶nåÏ~Œ"ƒ~ó[]7Ëezßès›‹iÂó1,àIq&Ÿº‰(hk­ÏÍàätsGƒzPÌ9RE‘ |°E÷:cnéÂ¥ËÒlñ˜…ü¯h¾Ï7ÓCºnB«®Dh5"éôC`K»‡~<[Ð5ÜCMÊîTåÈ3KM(Ï/yh0 DÖB¯ÑŸš‰ÌmÁ;fÀ©*NÈ® ´ˆ×™÷—rlê]4+¦÷–'Ãvе‘£À;NâCx–fñíÿe§Hz¤Æp9gAŽ•c0Étk?[3K)iR& ]ýB¸`Œ‹ª&·Úž„X&¼b3.Á ¢ÅTcô æ¾iz(½Ô¹IÕ2Dí™Øx6â[äDjÉÕðºÈ—}@ Ç™ ×K™/xO tó­Óõo„v!ÿ»°yaü¿ˆžU¾°­ ÔàäÊ<éY\ãzüAlŽ–=¹$´#Åþ–¿ÃLrM<ÿ,Ø¡i6вFÙKãf~nÅ ¿ñ¹!Io8Ki;Ë´^³î†(щÝX&îFç0» ÷ Îã”1'’V¡ôørKæ"[ <@ÎfÜsV< y2[ðaß_å—åûê™±ôæêihÃ-ݵâcÛ%ÀTšäŒùéSK W=J!ɇ)â\©¸$òsõT¬Ytdú%£D¸—úÓ[Æ Ü¨ÒÜ^'¢ ­Å^½VeL=útªžÆÆ›o’Ä&ÕŠ_”ù ÃÆ¯¢U1;@Q–9[4d8šÂ̰4 *@Á âkáá d›!QnGb§A!Š’w‰Ø9È Á.ic×S¯|åWØ …‘­Â`õŸKF²g6£;|mfÚ†ÅlHfç¿ÓŸÍûJ~dܨ Ï_)žíéøëp'(™½c |-]K:*jͪ%Cô ûßà¦-¾z,ª·”btX‰Š}ðÆ¬³-wO0ãJÀØš|{6VÁ¸Oãåëz¹\”ûúUàÛja`¯õ0ʦö(¤Ë ˜x.*¢ö–̾éÖì‡ä¿¡?•OÚª˜ÉÒ1;P‹¤åÓψ Ò>‰ÐÞïüõ–°"?ÎÈt^‡Fœ/¾Úx Iýò¡Þ Û%¸ðÀM3 `ÿmIT'æ×¶ó¸‡û"2*bë2ú¸ÉŠUÅœ4ô-nwKK¿1ÈrΖ~– ¬,SÑO1g4¦9ɉ |GR»>ïÞ¢ý^,þI𳯨s¼<ÿ?+dãS143EraéaÃ]ûrÕ B±|®Ai ”3qÍœ€ÑɯjëU—8Gå ©–ÿ6s3¯æE¤ÔBBû+GI|€!¤LÈ).s²gW‡ç&£I¨w…vG2Ÿ&fD6ÒHÈÞ{ÕYl¿ÌF£?dPóWÇÄ…MQ4YÌyçG¡ 0U|DCbÿï¦A­îA~wô°ï¯Íݨü°ãÎEuÓüAu‡ï-üØïN7‡)o´[Q3™KÇ\òRC˜þ¢@ÍaJ=`ð(å¤D]_´\ç:›aá§¢˜bþw^ÞGÐë¾=6ć÷1ÙT‰ˆGÞMºÆÏ\{>lÏßO‰ Y—aòíߨþ~A WÄ^V½h7PQàJ–\8x¨auB¸ÖEó”Û;\â`|­Xµ±6ÐL= <ŠeÒ©—d'Àl¶áH6ÕŠ3˜l<ÀUÕŠ¡3z圑tÔ7O¿–¨*ÃÊ‚édìužÎZnßÌGÄ€ á½ ¯%%ÿ8á뚟)JÚHüÃy Ì—{Zº óþØ'&Õ’k5ç)›ËjRÐfµ(·Ù$šxE—Ö–C¤÷(q i'’|á¡Ësê/%sþÏieO¸¥{(Àb;h[áoF«¸À°T –7–ÞŽV±l2[ªudÊ·4#©ÒÛt‰>²gúnh”LFUX”$!;ü’ɧb¢“ñ/Qªî-Ý«ÑÌÀuG¡‡ \‹p NÁ!`_˜ÿLgqY ^6ä¶sðÿ% Ýl½G Ú¯u:5mü¦†^¶–Ð…K`ê<|úÞ‰oÌ™›8 ¼œÇ^t5Œ€º‰t¡mÏpéaÿ¸÷ÿš‹ó ‰È1ÞÉ#WTv쮉'³6 ESÛõ²q§ƒ·uÅ4ÑÝ%r¨klØÂ®u„Áð¡Ë8¢-bdÑß§í@ˆ·‚ø²~æLk]ø†¢xÔ—[1ƒR8ê`}š¦XìS`“ÓÔÕ 3ãqi¢®,t„ù|I'ÕVRE8fŸh7¹)y”x7m…wßÖav“4÷T”;/\.]¡Ú% 𸝱Þq–>Í÷áÕuXŠ7ÿ2™äœîs$‚€Äfµõ¥Æz˜Â³JªvÖ¹Èðó \¨xr@;¶…s-ÁW@80<Á]WNƒžf§Ã¸+0w1’³01+™%%²÷œ4:çd%Ì0Ç)®3À:DøJ‚5îÊI~YcƒÚ ƒuÓ¿^5ù.Ù1^f¦õ.ÇÇò¿x8xüØ<Ïû¬¨†3í—¸ëÏ ÿ“Æ5Áœb#žµÏ ==œüØ‘4îò_Å!ˆ4ÔÑMß)uÇ9¶ö"žÎÂh {ìΊó'(wÄå"˜M¿ØÞøl ìm¢8²uQÛ¼‰j1Ñû.“oçÐJÙÜÌ.1SÈé¦5ÙqSŽ/±EɬádSæ|Ì82å †2Ï„’!åŠD>¬RSøýÔ«“Ø0l¹}RÇAcž åV:àò¸Áo¥¹èê­P¦‘›iü*YñK™è”eæ[¼sj\תÜ&}žÀ”&ƒNƒ: eúnxsZ)ä36l´.KßÂmÆP@µúœøK haJ’HÜÆt´tŽè/e’÷GW»Êã¬+ê³XÍF°y†¢ëDÏœÞXQÐ-˜£:rÉ?q „oÞºc•ì‡&î2¼±i÷$×]™‰©#ïù,k¿ À…™›•ïJˆŒÊ±ãy±no0i2ÂH38E"ûQ_ùg˜›Êò¤Éíqî–1þýÀr·Ôc!=Ò,ž…1¥ùMY↯ªy¯Fñ%úWäM¼Ÿæo$YŽmój- ´cE`ÐÛp¾vaOg‡ÀÍØÜ>Yï!„èËû;ÅX™›K`ó[Dò˜²³#Rìâ*§ÐŒ²°µ ‰»üúÀÌ«µ?ç¯mÏ=äŒþ»–$ó“{M#úm¥ôª4'÷û*zìçõ2ƒô#a¡”—ד¼ØµRË5µÍãlé»3¾©qò´åi¸j0–!Ç•óÛ¯ªÍY¹×—yYËÁ¬ßUu•ÛK€ÝVKƒ’öJt¦€œÀø9³Ü£Ø‡KV‘ø&uÛ²‡„¬XŠ¥æðÓ<ëPB˜tÞUaê=à™ìu~¥n²>¿ãPÍrƒŒ¥ ïò¥1òIáXÿÀÏ(ËZÿ¸Gƒ Ñ?Þz á¯_:Ìô ¥Ó³p *%#7šÏÊ+WŸ¤4&‚½0.î£]1,H†øýO‘¿±[Žªç”¢Ra;cF“®ýo,¿pI3Î  ø|¶ÖG}FÚ´xït9à» Dæe #M£³; 1<î {É1&jOó#5¶º/|ùkçMô¡‘Vñ¶®ÙÇW^ÒOô‡ÂçßxpÆŒ?™çŸHª¨J(DV^œQCìZW-\ =)ò)ùá^¤8´ÎÕé¦åòÎA=ßå[ƒbšyám¹&’¼íØ5p›þæÍ·¨Am¨ ia‡“…M{g cýN¯»¬šŽem:måÔî«ÃtòúLnSÆnÀ¿v'´ÄbÞ+r¾ÝÿØcra”ñ،ӋJ±II%>„ÒSÑå 5¦QÅ¢Ô–@™Ç>ÓeS(Óû+«_ö$®ÍVñM_‰NËÈéRåEhÚ‡ g°NÅ\ã5»ÝîoŽ —¹×êu• wL1P24#ý G[ÈVKË’ Wq,š…£H#0'j_,aÚt…¢¾´'½Ôg7½'9í\!ZÒZRðÕ»’´2}é"5Úr\ˆ f¦gt¼²|àV,f[É’ÈNô!rüJØ[¤10š¡üV:aé—³Á&Ê›, n }ä v–¨ñ§tb¹DHRJ±Šä ~Ó,R›æ¾¹gZ>d}™ž©çï ðãX«ú‘*‘k¥eŒ:5…"|q_å.ЭQ^Ü —Í6VK'å(|Ud«x_÷¨ä7·9ªí,{Ø‘NÓ¶hò³Ï)h*œÜc‰Ýk‘ý,ÍÝò¥U6#%ÕêC-WÒuDº“ê]`ô'í~e$ÕŒ°¸(¯CS\ª•aþÀv õÌ DSI÷„~Sÿ$Â~ÿ‚ËãÀ9‰°äÌ’$·c¢Ô ç-¡ÞA'³ß»;w€ÓìöêÈaúcÐoõ#¶!õ¨Þ¤3ãh#„–uêNºTm2³¸¶W8v*£è1ÎSoðU&ÿnA¿ùèQ€8­0ä±+;6ˆÎ&i•è¢Wà›qà…vAZñ±›æû»0ð÷=ѼD# B†4œtË¡ÂwÞ#:HÁÍt3ÞPŒ"ªšÔ{ª×ŠqxPû˜›’ˆÁsaû‚#hNÀ(Ä!Ÿ¹®ÕëÕÏÐ(«`&ý¹`Á¥}¶–Çò¬~Ø ÄÆ4s†4M£5Ù(²fç9¢Ÿ•osŸª™}æp€i2 9÷™¬‰ûÁúÁ”¸ó¨ ~hv´ %¨•ÖSKä÷psœÏïUœI¥ —’ÛÀ »eÀºµn±‘3Põ}zÎQ c1O¢z’øNÏÀÌó@/=‚³·½9÷jóøùþÙUzìóE OD‚pâZ*Ñ4³†¯s´´ñ'Ñ?f^'æ’èÒÂ:ÀJp%˜d ýTN©¢³ÆúkT÷ßÙÂ*ÕȯY¯DÈ"ª¸ÑvŽžðOÖ={H0‹ÈP6'Ͳï¼TÁü0ãRêøžÍ"4{\Æér µKAÆâÔ'xëùæ…—ÅMƒÌ¾…Z H%ÿ¢©©?'±Õ$ËÌ9uŒÍ^Kß½>z$1ÞÛ˜‘ ä€k·Î¬\p¹ÄÝ×xœ¬xWX?,0ŒöÒ´zïZç=> ªM-@§<¬ŒwÞúÏN ËìP8czEDÖ¥ ¡Õjtóznj!vG`ԜάçŽm›º9GbAGZކÞ„²ÒQ“r—R‘çÞn¥â]Dwš!ìåk1‹h©™&.â³é—F¾ñ‡™´#î«ñ\U—æö娮âbuZk×x‹–gÙ;?XÁ±œg#];‰™ãÔHÇPÀÓd¼AWTaQ,KøVçTº§•“F\„˜Y/è¼ØÏ¶‘Ž*¬B0–Êc¦ò@ï›ÊÐBŒ0}Õo_ø¬bƒÜÒå S‰©Bøm*/ÉWÙ»’Éc¬â‡zzåbIþ°Ôý«.X_¼¿ ¼6»ÀÌÍžî,xOˆ¢°U ¤¯óœ«m·Á%"`Ð|ó‘:ŸÀ(Fò!GŠ¡Ñø*QÓÖMxìó^.+Æîy³÷×Ȫ;rÿ)à@+'#¾µ_)^2QàÕßt>ÆOO|AlÖª7ïÝBö²ä‘äϤé .ÈÛ]nC÷@h¶Šþ’Æà,ÂýÒ5׸*€NáqÔŽ=d©—JugÛž$ƒêø6uÏh$¨Uò³Àñ$9¸ë¤ØB'VÅù+H 0óbáz:@ã+¥]΄”úr Ýg(áØ«ˆÿ®Aß,ú‚%ºg¶»xϯŠ.‰ „õÔáÛÍ:òn0!ã³öc÷ó*3ôžwW¸w£)™¶‘jÿóÀšc¦_sÄÞ QDœrƸÖ,帅)’äÎ-Y>K…nÚ^Ó.=æÄŠÈv‹·í_ÑÇM\Ô·GË L#ŶšU÷¦y§Ý¿²½¾†‹8%àùP~Õ±‡˜~c3˜É ©ÜØ¡æ¤ÄÊ韕V¥kNB®œ]t¸:d›:jzË䵦Vl³ûBû^ò›L›Ê§pwœÙ%źuôûœýL¥Ó‡}W9ˆ–„¦FË–UXÄJŸCT•£î¾æ±lü¾¨b?‰‹¼w|=Óµ#)XÅH}ˆ 蟚URÚtì¸p ~¥«¸ËåŠÓóÞx -rT2t>Ä·LZ­t½~Œy É$UØ1xݼºÎ¬«Uþ«hxmó7F´‡ÎÜýH::ßl/±ãIÆdC/ÒrD¯ß2TðtcºU·á„([ši‡(¹h-Òú¦ô‘Ì-œÿûÊQrÊÎ_û‚D¸æ$nÖéN')<Ê"¬—¨}9' Íiè*´àÚ©WyªH2!»/Tžv[ëõb·¿y6Âj-i€m‚<@¾¹’¤¹Ø‹ò8 !tý8èý—Š÷ã£BÑÒ4c’h-pE†;ºì±ê§¢ó¦~»’Ÿð|¹˜(eKd¤žÂˆ/fx‡ ©Ë’bãEk4ÉÊ>KE&ðgQÏ*Ÿ²Õž¶ «„ò‹€:Ï$‰¹ÅŽjËáÍxK–ÏX¢m{Bso"%?–9„ÞW6•ç6*ÿÊuBV辊Àô7ZÀÙÈ n]÷86äzÝLæ¯w76GAC›«UcBøôN+ó¹6v^Ç™¥yCÖ;A"¿é¥¤ZÇ”[Åà ¢ ®r\{)ó1¿fÍå8øµ¯QÑ—¨U¸'k ,±zèõKh\Ä­¬lh »da÷³½!>ÿÇõÇt-ô•O!@¢ ¡ž]Ž-¡)˜Ú™ N£yù…ДæÂ¢ÙÔÍ×¢Õ“@‰1¥yßn‹»îÐ¥ T/k2Ä=ºICÒÝ”¨:Á€®É6nb̸.FJ£d¨ÔƿϨš·[Ö/uLU* `^ͧ,ùìH~3ùú‹%2ŠÅäŒ6-fcKõΠ•ï‰Hj åÁêà°.¼ÏÕÃFZí †Û‰s@”+‚ ŒØ„Jj©úݶsƒc²„Ô©û!ŽóMuØ#ÿQ¡*ÎXUéµ.kK¾4ÔûžÀõªðC*9ÚMÍ#z›¶•F^Ò«ÑP¼!¦¶¢HU`ÀÞ ‰gý_F-ÏðÖ„‹Ý°`á߉hcí?nÒFæÝ„˜^Õaý‹~U–:ËEñ“´C-L tíÿÐb¥fpb ÚJ ý*š½Êƒ|W.7úôŸêâoª"ÚË9Ä¥ N±â¶oéÕsÍ@c{ñƒæÏa˜t™áCOàÚ®7¹qt«bú,(å qÆ¥Ðãµö_®VgMMŽ‚Õö3ð=<ô€ <¡4›/éØW"ÙêÊ‘Ëg缾YÖoÎúh=K¾Ÿ÷Ó…+/øH!èèÀY©ÃtÁÖ”¢BÀÑ_Ë_ï†çæLùªç3Ü3Ì jÿØ8•Fºû|W0.ßÃyÁƒ$ѳî{±œ<¨–šÇÀö‹9ǵ°L´±£ÍÂ]{úFÌùÍŸ–F#П™DðT,Í>Ͻº']¿mü¨«hq@\^ÝWr½1Ö|¤„ƒœÙ•®Ú*ŸƒÊ?~µ Ì#½ û”³ý'ò6êb“®©GJäŽìj†P&ûmŠˆ¡d]z~·Î+J=Û’Ã ÕöÖÏRƒx¯×P_½ £zp0–÷ù Ù쟖«F7@œëÿÌQ·\)6p(àKªÖç*âú"üãI†x/ä²3hUœèŒ¨±ÂËÔ–»*’?ÀKóNѧ*¾'¬äÛ­ÚËÓÒCúi8:Ï»¯a/ækhäƒÖÎ(0%£ÀœíT¨Æqr"ôù#êÃ}ê£GýÚ"‘Úý‹OŽÒ+ Í»®žß5»åt1¨ã)®…W×­¹š¿ÄÃ\Ñ @BT²¹†p¬ýÂìåÐ[ZÁb<&ÜæA½øç®ÑŸ+teÙÚœ;› Щþ-ÃÄéZgšjð9Ša e@šj[l¿nuD[sÌŒµÝ+¶Ž;Ÿ|WœC˜% 'ò×›¦Ÿ í¤9”¨ª:`zó®“|þ´_A.:{&­ "èôN™ÓÍ¿"ÎÝ©ÇÚRàþ¶ZsŠ@‡H…RVår¥‡ÉTTº4ÿDKÅë*þt²Ú²l¤á£·¥k~ÛÀ욀‰Õ$™ìÌôrœë?ž‚O'¤”ðΰ¥œ­lâg{.7£°®T¢;Xu#ÝÒI•À"ë2¤;o ¿ÒÒQ©ZP'¥1­€‹DÑ-ìöü¸w&#Ûå‰i®oñÈøçűj¾éC„YskœB€¬RÒT‘L;JHO¹öœè E€†Õ‡¿»ìÃ5Biµ}¬‹Í¯PsÚíæÚñ|³‡uáH‹†âÈy%ŒHxEo•îTÕô;&Ú]Nl¼U®ÚDØ&sÈ%×”èP^ õI„L8Þ–xjøÍ”:¼”OØgÐóNÞ?åu# bjÝ]tš§JŠõ?â}ô¼bºíé»Ë»‚’uý5 ýФ%ŸHÿÈ]|>Q ì]0¸:‘©½»ÑW«ÖXy´Q„Á¬Ÿœ?]Ûßû{ºYÂâ×f¦†ó]ÕÕ†s¼Š–a!ÈŸ/?¯¶&i F¹~bK”C6ƒ‰ÖI†õ«˜1ËY$@üáéNVÄ›/Ÿ“à#“½âqôŠ\p«÷­o^‘ýº›×m}~Ó!BSÀn¼áìnL{V“ñzítâÖGõºµÕ~|+¬ˆ¯ †c×Riï„h7ÉÞ¯öWبaŒbvô”P18PÑÖyá5lAdÅþ¹l,eº1W0k¶¼HºÍßµY4׸uðc<ø#a»½©;Ãj ï]̧÷©KÀ…k ¾“ûCÍéj0BXƒ$UÌzUÍ0yîY0¬VÀcƒ®§ä&4NÜܦb•¤FXÏsh[’=I¹‰=ž× —m¬óÄØ(üæâu{8½‰çì½À‚}¿h•v,˜Íeë ×PHVÞ[ Pzç^El ·º.pd.å—©g¦cQ€pÆöË…0¾È¦LOšñkXECåQŽígÈéþ n$ aŽo [.rqY»• Pñ‘¶©"ø\@§=Á´°RìªßNxtÅœ‚2áõŒË½6ÁQõ¯ÁÚÅ·@»=¡7¬tçø§?šÔ–§mJ> \ÜŒƒf߀ê✵é“hØ¡>Q…ÆReL"sÆÎ}¹}éMXÿøjiü‰¤A‰mßãÿmA˜­]+Óü~jªso‹Xú&ýmî÷S`ÛÝKüAWä8^@WȨKØxð|$ƒWòðä]«y8™ÊÊ5O'†—î]±}¡×8ÔÇãò‡£ø93µ±„OÙ^y Ú€äÉàIʨ\ºALÜô)=ú#¼Š™¨áIÁ'´Fãÿ ‰¸óG×ñuç²lÃW xËÔìö-¾ÛïòÌ+p³åû\-“K(ÞäLºg¢¶°ã½f$]'Ý k'ÅSè%ú3Û䩞«/gg — Á•¾†ø %ûöô}±­Ò0:Ø­é EÉv¥ü+V ´GÜWÚüÛ’8|äüáßXû$p/+³˜yJ´‘t&Žîóe;¢$0J¥ÅÇ%ÄÄgôÅñó$' ‹èÈÕ̶àqã•K€Ð/,%¬…œ_LÕè‡Ð¢FßÚnóåsËdq 4û³ë÷ƒW4<ßÚWëæ¯35h¹þœ—z"â)˶‹üIV§Ç®0O¶@F:gO­ŽMÌ’Ì)¢˜p‚æÊüAœ×áb2ØíË(±eTlu¹< ÎŽFt½ÜÅÓe¢€ oÇÿCØ2‡ëBeÃç^çÈFùŽ7ïÙO¨´låçkó¥`XĤˆ’Î䌪Ùi£ Ay‘.=jÀöwDêY¶ùª',ÎM'ŠY[K²¯éS ±A‡³G&£‰”YïÈ1ÍÇ G\±p=4/ߤ‰)ºE·õ»©,… =‚h»”÷Ñà;”¾â'sšã®èƒ £åÔœêm»Z{´ú_·¬2ÄeÏëíÃÜ5QuF„Úé#·Èh/KåÀvÈÉïìñê:OµhÂÛ\ZÓú|m>Èu[ Ñ¢ÆY¯ß ÎÊí³Ü_J),È\UÈäŸ-ˇ·Ð-‹2³%¿£&ý^‰0ž Qɶ!êçñÁ93Ƽ¨ŠSË+&éé[—[1Úº$tQtV¸QKß"m/ÿ®lâÅ9@‚gºÔ-çU™ Ê·‡Ã­lNÇb{˜˜k ’žˆZäÉ['7·Õ»ž4WîB>Èw(2$a/cÄk”ìñ¾|AøRJyñ4\§ Ñ&ã¡·tjô'ŠÊH¸F n„ðat9Ÿ^ÍÆ ÿGDÇVÚ\Øíá29âNÖÐìŒåŸœ!çFt w?ë WüÄ«8I~žF^„+0?O€üjì+<<׿¿£S«ÕiýzFþŽ>éÜW _k]º;JÐÚAº‚ñ°P™‚òäôö¨[&#©ýÛEå t¶ÉU ¡×R浂½>ø¼÷×âÉ`ƲÑbغ™%bê>w}Í•ÆÜXJÐ0IÙq˜ÍŽ—ž’GpÃÚ¼y‚,ØîÍù°»cuAàHlžµê+¯—“h+´s1ç¶W€& `–È€TGê³»‘ Ên:È& ÚNÙ2Ó­¿ÿú=ÊÕýĤå6À§§'+ê–ÂÖ6S§m¼¿ñ;ÄÉs›EÆî¾­¹ö°33qÓÅežß[¾¥2ÙÿÉÅÿ48D.‹c2û D`ÜB¿A(Rtv©V ´æíjî˜tAfBÙ3ðIÿëh•íNý“KáHª·¢{&„F‰Û;zp[5YK|p›P,Qºë¨cà†[%Äzük–ÌTÒ+`2›óøñ€ÅòsåïÊ¡ŽêŽšÝ‰ë¤ {öof1XIËüq-JI`'Ÿµÿ\ s‹µùnKÒÎs_/*³IÄCŽæ›^Ä®"ŽSî+˜é0•ÞþQbC@Õ9(]ÝÅëQ$qàË´ƒŒnï¼· 쀓Õz•­t§Äàžu¼Wé ½ R·†ùIFyq–ÿS´ I|q¸´£|'}ú7Ç~úzT†²×N#ÉRùªm€w©DÖ3·H‚Uì[¬Ü=²ÇÐW|‹©&œZ_ýÉ©%Ò‹*—p —c‚Kêt²ËzÖ!çãe€K0üÕµOY¯Ä5G3Ç£iïêò"ÑÓìydøµŸEâ˜/2ÃCS³VÛʧk…<ûˆûr,âæ§'Wa¬Èý),gâSL|¹ÛÊØùÈ !r!2:hÄôt<¿šþ+A8äk€Ì{2eâÚšïþº!Åìxñ“ý±jß=szU!â¦_Ým•Õ™J#¤ 0o÷ÙSè¤b(’‡Ú[qãŠÐW^j,_TÞcʵ=TKôÝ>ƒ£”„ÓkºœÀúk7œèÐ{k¥ùá3™×Ò5ØI#Œ[Õ'¶y«ˆ‰`Ôîùþø¹Kðn±º¿æ\?™ûºì…ÍrRyÄŸ„ÍÂ@p/Ýf¾ì3¨Y©²Lž(ÈŽqÓ…!>í`Ñ@¨öÀùT §tl‰±Í ð€ÞÔ;lΪLG m[{¨Y¹€Ý²Sì}c¦‚ñïÏ¡Ó<òûD4Ì¿iÚ•üL®µ¯ÕÆéÁqo2ÇÜXŸ‡†°·a¦Ü˸ߖ¬Õ{Ÿ1ÁD@ùL1vV_Ö>Èfƒ3¡}¥c%²e“Áºq6@jÎ-Ç >iÒË…FLçðµœk;ñÑË¥û¹{ËîÚ(*‘;àŠÄý½Jõ65+µî¨–”•Á¤ M}oÛ¶mIoÅÞ,Ÿ Ey\§cºñ%±èŠÓæ>5h°²=¤-3U+Ål!mê7~߈¥;†…³œ²mÃ?ZžýªMòŠ¢Q ½V²aÚö¬ÈÕ†ÚõQ]ÍMTy³ŒÄö§%œÉg}¶ ~˜¹`ƒ{qò–W}†²sìo}CSj¡¯û}dN-l[K•%Àdñl·OTKxÿ:UФsÈ'»ìdÅ»‘ª„”TŸiÙ €Œ­§†íÍG ˆ<\œ ¡ôû¦djù6U÷`,– ô½9ú%¯ÝÁëg™±0 ®ÚMzâ¸Ï?ËTb<¤âÂU [b³oî‰Ú¿öóxÜ~¤¦,E.},)¸Ð¶´Ü¤—>|þÍšŠõ¼]@Ï躗#9ždK¸¡ùð ôå½Ä°Ù»_Ö}牆ˆa+“{³BœÛ•Ún¨xÎ>qáßæÿRsé&­m|?²6׃r}•ؤ*šŸ>ì:sj½]‰)t6=ijí¯D&SÏya»ÜYˆRFEÕ°{„Tucod/CîIvÿ¼ñÓ¼”vΤ1fHÎÁ¡“âᆙö{/Þy“‡‰ÑB”; Œ…JUçz†½+>8!ARF÷-éõ¨P8x¸±‚Ð0¿&´ŸŽƒ”‹ÝÅ9øgucžöæ>à2*ú÷#¥+vüã×LI>å)cQ3@.TƒdÜ´¢¥­AÚláìO½‘à e{-l×ÈbÔ£°h¹ “0…˜L’zO~àâ nbÍpÈê’Äê³û:)bôÄF¤¶À`¡ ¬I®Êc%2-ÝÞËÕ£6ø©GK±§ uÆ)à€U ±PßêÚÒœ½r±îeâ˜ñœÝÄ¡´ò}M„S7y¬% ã¿RÏó©Ia¸=¶ý:Û¬Åg÷Ï›ús‹7c Ä«)À(X/¶¤”_è'¶ÓYKÊÇÆ)ÇéÚ:=4dW ŠÛC%Ô; Ãd` D„áaÊe²ÒÿoÝ”„Z? „™ÈT´ˆ2I†Rj˜±é ª8À aÖåo&@´P"š˜5 bÚ…¨U9*в晇‡p Þe>Ö ]&öz2Íe8kó”ìšjo*#á|Ž=y]¥¢¢öu,‰ªÞÁ4£ ä.}›Íí_è¹4+ƼÊѧ£ŒírioD_'.÷$ÞÐt£êK”4†Æè׃´nE,Êù,d Ų.ʈ_øçã58Ã_àV·±—)6ÈvÁI«ê¿]l^QXiá¬}Ñp€ÜãtÝùï/ìÜÑï´SÍí}Fè«2/Tè ÚK.Ïoú÷Kxü}7û}Ò'—ã¯.©¥9çùQ`*å%Ù þöøV7Yp”Ê6§ËDÒL;Ã:pȼ¥Å(ŠñDKE¾S[Ó)ãüàX-”_Hük׈âl÷\½A7)[À»–ù†T÷ÁN!a¦VbzÕ+eÜý8lŽ·!çÊæøP¼´ÄŠ)MÜÍ“@ìUrOö:ï„°ýÖÞ>ßVLËh&ÁýÞ.¨ŸöU°!özþ_6RÇœÝ$äW.ÊlXóÙf,üFÉYq~»GèIŽFo¹kZŸÒP³7d‡¹ˆw$ˆU`’x€D+oÞê2…ËrÒw{¹±Ñ;-T˜Hc)´úÇ¥xñðÄñ1EPC7¶ÁZ7¼ì¸ø= °9Wæ.ô\òþ–x×2r‡„/Ám„¯–œÜ×¹§â‡ŒÑ³÷_‡´}2»äTŸ·ŒÔ¸ò+©^æg0›¸†Ÿ3fÓ"ø¾‰Zˆëî#_¯7†R“Sz8íeô,÷ä|ÖVI˜#¥h³¾„MçJY ¾Qظàÿìà¸ø[›h"×Ë 3µ‹!¯p©‚œ½Ï«™éêòʃ4ÎÉžÔµŒ¿°£×濜¸:Žz5éçoºE÷ÜMjvÃà•™•ß噆ÅUüþQIF¥ÚXŽh5þlÿ 8$ w@ŠE—à\Ù«vÿ ±©Ž¿Î+¼ VÌà1¶-œ¬KøœÏàF´óMÑŸ©"œú µ\í10_úÉvÅ~„2¤Ã±‰G: ®±h”mwÏL²ÕÈ8Ø‘@‡Ðxz©õ§'¼c÷•=aÖ¢‡./Oç'Uè=÷¦˜Úƒu9ÙoúøKÆ|Ùi¢nŒ]‚²0øäAvjóŽÓÁgÃÞc€Âõ€TóêRãЇÁËgàO]¼0®ÿKšMûÊIh"T|&´ÖÕ" ºzvyåuA¤BáHNðô=Xz.V±™Þ&j¡A«vã7NýË{Zµïá#bêk£¯9’Ê@Þä{ÕofÜ' dÃ9¯@ÍõÇVÄéR}³|Ï㌷obŒ áÍúµ ó'¸ó*oW]¹ïÄ•‘%–É?FýcT‰i[öÊ™!cO˜ùG¦$%Ë‘Â#ø]ãOɧ½Ö`5"9¾m¤¸ÈV‹ÃC±Ë§·†ŠÚ°«J².îx1"5õ fá« JÀèMwéZ„è /¦ ‡ÆÅ”øæC ¿UÇÁÄ©%KWrz¾ZHøh…† ¢n6z„“¢×.&Ì#ÝÅv5±$8Vìf¬"Û1 8ÕqçgJqzþlÊ7WŽÕš<2š%%r]©ñÔªFkq¯ƒú'ßG]Í…™X}c¿©pn¶û˜¥È•sB /ªvÅ?“Œ:ûÍY¤ÒŸ tÜÙh?ª€˜Ä0ÍÐ8‰5o8Zì·w&êÐc®¨lE¹³ÛeÞ÷¤ai%’v»Ú¦ Œˆà~㢘¦ÅYMxRüØ £zûÔ¶ Ãà7ò@s3ý©CA<‡ŒÕ:)¶x2'X6 ®,µWœø’°†{Xˆ ô\¼à§ˆÄ¼øHEÜI"FX6¸‡'Lýùý={Q¸ŒÉDg¼ÁY)óÙ À´Ó®r¹“þcOäLx‘ß—p—Žk»Ý§ gZ$dT¼N1*NŸ€≪:ʇ l1¡OîÑßsw©i…%¿€çhÊ #+Ø<·aÏ’Q¹²+1z·žo+É„—1O¶Û*q°Ú‹JSïÚÜ)ĨÁŒÚHŸའ.ïFg@çúêøšzíðôƒ våîØvy¾(ÛÇ¢IãÈ">Ê©BÔ¶5¨NßÑ£ÌÀ•rF1`ŠÁ6i䙲%Ÿ´¶dþ/"F¥ (“s¹|U]»UCr:·wá`¹Ï´V1€¦v¬žÒÖlTÕ¡ S¨ 5MÐt¡´å.”fOQZñ¤ÄÖ¹EZgɽ÷òZ„˜ç¢¯–_5â(k8ò¸1íñÀ΃ÁW-4kéÒ?vGyh^þu' ‘xÇtWžOçýÞP£Ð â&«ÔÙc•Æ1*¢ 9!ÉŸg¯A¼çîÙ§›F™û>µZ8‚ƒfÚª‡I"ªñºwTs’ð»u–¸-KòT™ôÔ~ñ:‹^À½¥Q€´WCW!hÌ÷áî[5˰ôO]gR#î9uóæÍ¥d¿LÅŠšJÞc+Þgá)õè&÷#$”é ™Ü]NCYrÈ<êVŠÛùzâ½ë‰}?æ™8u¹O«ÿþ ¼ÿjQ²×¦UÃs7_ÏžbÍ@sk¹Xȹ;R{”â4>V?ø’ð`+-°i]ÄöïpÞh7k✃Äóp‚kÆú×Q܈ ÕˆñhïtðÝZ#"ÿI¯Y¨DÄ|ƒcôÀ$6S€S~{lÜ0AÐ6¯¾¶hÆg™ÖÇŽ¨[ò×¥¶¾w2ù÷@iP¶v#’¿9V£qó+Šg7DЋ+¬7Ëdš‡q‹–òî‹Üz7»}ÄûGY`¥›}Òµ™Ã‡­þ§zQÏ…-Ѻ–Q‚îŠYÏ*°±ÆÈ¹MšôñÒÛí¼e°ƒ,ÄâÌúi>Ú #ÑKÑK„ a¶øÆ4_¼º-Á&ù^å2IÆ!= s/0k×Çdðã@%\§ç<.ÊëylfñvûËmþ’ɱ&©þqYrfäÑßJbPólµé'¼ ³ Åð®uÜ„>âÿm˜õPb'f4ÇÚ¥ÎJ·;,`ñ ëé`(Ù(—fyv4ÅÈ å.ÌšAÁ¢ò«%{[œÛŒJyÀ›ÆÓ¸iïMâ&hùö $mc5-U’ƒ!s"Ó zÿí=Šâ¥pxrUí…±#EA¤¹v/:ßÿ$=écÓ¶?C&ºA®Ê냖†¥rB¨tƒ4¦{\Ð.ÚœRæaå.„ÃókŹ֡½¬z;©úÕ?}dVÇ.Ež\*Ó6&˜eÿ‡ÝÌß´ßöu¨¼7rÍ*æÍ²ºòض-ÔŽHaSæ}Iqºº ‰ã3ù¬rlÍѧL:Ûªwß•_…(ñ˜'Î,>(À–^ ÖJ®s+4Íî²ñRbÕmÚ39 ÎN)¼ley"¥ _‘˞˪ržÃ½+ þr𽪩 íS &^¼6QŒ~{n„ÈDIù”El}¼{vì ?®'Ðjªb¢‡a–4}3SîÉH¾ á;F•4båìQmºúeøíÙ„T¼"÷D¿ÕWJ½½Àé* õº^Êſ²z÷Z ÛE8ÿ[~Np<¡OXªvª³õH]¨Õ”îäuLüC©¢G¶}=Ý?²,P@z&J6PÕôCÊNžÐ¿P Úÿæo߹ݕÁ°´ùÜþk¤‰7DšßªßÊŒ]ËëDöX˜Å°°oÇ>¤1pÿ~¤®’e×U“JÞ$í_Hj/Š?oŒ–‹‚jÚú|׿Tp+uòÀ&+cBÊ9ÙýšX9øþÕ‘>O<Õɽ'QÈ+­FW°8ðÿh*Z“‹–ÎΟâš:eÀhƒ‰ö{Eˆ‡çx`ðSp;¾£ =®ïïlë„áVƒtéèXz€i-[ýp°Ù†F™ôL¬B[}šè.¹ %Á4ºT-ÞyÉY‘ˆU~úLƒœ Ž®å³o×;H5Œìy§!1*æOk¬8Oö¾äUГœ…2Üò¤)ú®Ž×ã&½ê@ëˆtðkô7:,g„‚Þ ¼üª< çÁ½oˆ¾ÿÊA£ÌÄAÛäïûÁã•иA ,᪠N—Š«n¹.ñOꆗ½‹#q-3Ú%‚ÿƒß`jÐY1ïq&ÍÆÓ³YüxÛ0Æ›C."À X'ãM_z"ÔÓ_0£%ßÁ>Ó½o®H/ÝmZ­sKѸ›@eO]8ê“KÇMç}ß>yq¨ë$m5’üYòøÌÎ âœÍ””§•Ð.rIÎç`¨s„z¼M4ô´| ¥ d9ç«\p=ÚãµæL8ƒíÉ\*œYTÝØH ¢jª¦Ö@ª¯ã(4·_;ÔBü¯ ûè™.^‚:4‰ù &*Ò‹;ÿêü$¦PI­à@È~S?~9pÖ½@zÚžo›uÍe}¬Äþ!þ‡*øl¹k†‡ž‘óÏfŒ1܆>TÁà–ÃU*MûñAÑÅasîWY=Y ÀsèR¢a듳õÚù¦RÀ­X«{=m2ÌJ¹Ýù›Ð* *Ü ¦4cy’ÇûÏjÑ7Û0‹ ²+pD Æ.–"‹ÛÑâ z·¦¯½€h7‘²?…¢ð CΘ€ÀóÖŠÍ‘Ùv所ø!¤ÿ#š¼~c ilo|ÞXÖµŠ,@¬SXúÜY$cޤê‹:ö‚o?ïæÚ†‰énãI³´™ò³Œuæ܆ÉuŠo›ØÃ×Ã0. µZGçè„࿺iXÓø\ÓÁü;Æ=±/ëƒ7ý:ÕšÞcw5®CËÂrÂJI8з)"³s`?qwhØ‘‘eeŽù–¿ifó 6O¹æºw|ôªÝ˜þÒT°äYVò•Õ½a²~yŒ)±7’äiæÕùi׳–«óÄ­½$>²1Í)‰ßv„jq%¶÷.pô¸¼±gùTBÍж¹$³.] ¿u^ä‘éøŠCr.`eeæM'%MäªÁÓŽÓ%1ݺýA–N?pZ†& ÷è±&O”ô]&7ÌšÒ¦eHú²Ñ.„{ešJZÚ¶Oϰ¤ƒ^B7üÎ6i[÷„Ef|é†×ajñ†8Ö¶œlšÈ‘õ`|Xë±iÞ `ÿ mþÂ/,™|5_ÍO‘l0#yõr°BFï/ÜÆGaEè<jsÃÄ·8M¹$´˜ë£ÛGfõ%ÕæÒÄ‘¤û½¢Ý†ÁŽŽ°±}=T¹¢|›;Äfuy–§H‘AeãaLKfÖb ¦xW]ª¡T YÎVŠ­± 0ÒÀÔë 0sá8æ¬må· `°¿Í½úé ™±>AüÅŠèh“º$¹w·5¾<¥– æAü"Z C¬§Ôõ\‡Ù^jÖñº”šÛªw(ÕØ÷~Ú.a*zAæaÁï Lô‹¾cúþuހġEyÔzã•:‚w|.yþ?Ž‹åŒ".Û…C0ÄþùÍÖH›ÛßïPŒ:„òÝŒyïû{98ƹ o½z™f Œ¼üÒÞÿËööI²jÙ©îÔÒE‘bmX  †JíìÕCÒÊØµ¨÷"NL™˜—?´A4ÚµS >ýž iÿ-H„\oð—â^Ia€¸?@öåb9 1SÈÌQOLA£ |jDJOA2[@¹mã)dfK—3¹<¥¡÷Mð¯Ê„›ô~I.—1þ{T¡:£¯Edånö_Œ[íÆ_ÂùÏ3ñ¦TprrLÑÄ>oÍÛŒ:E¨ªbëh ÄãØPt‡|ÂõkY×ËÏ$¬´#FýÒK æà¹q7oÛ{B2ÉSº“[p~sèŒ5¬…«¦MUðV…×Óz½œÐNУfsð|f3¦‹éuEa €3íIÇ"ô-„][ “õB8·®Zú'£…ßö8¥MÕÛÎÇño¢\€&sñF¥Q d‰,æ<Áºv~žS { Y—Sž½†ý†H²*s%×tÀ:`×¹õȽõ\m„ÿ$Ç Ä­Ð Ys´C}<𭨺öל¤ž6¾Çè÷ìÄwCj°ë°ÄÞa=yðß¹G«ÆwÍ4ãz„¿|¹ân~xŒP~hÄÂê'²ÊÓú‚zzþ¯PqÜz;D`zûñå{ñcF8èý¦±"j¹vîifÄ%’·>•á ‡pGˆøŒ._ï~ ¤\O ÀÓ‹‰•W­iÀ7R±(‹Àãúé)ñ•ª â‰æ®Ýé`Ìv¶¤„`ÖU“…bÍz  šÃ-ÁïùIF¸²oí;p‰»õÙ±û3#lj1˜•Ü~z“KÅ’þù¿¤$`¿qÿ¿òJtòsØ nònbà\ÌÌ÷ù+;äǨòŒÃ0‰sÓ2/5?~ò†1¹ »|gýÿŒ#±Ì¥uiøJAk¦«±ÍÕr+RÛ‚Mª‚‡ãüwLìü*ðïPIÇÈ_ýEŸÃ°ÏµdG „Zc5x¿Ôy·æ õàü× hyŠÓœ´‹è^™â9îUbõLVx©ì ,n—Û¸ºo ÛèÖ*†KÅ+ïþ oø€¼~ìò/ëkbTFÁ·SV½O^ƒT îDiÑÿ¨ÇÞš$ ЖoƒH_†ëÿ aÝÖpU"•Ôö–ÎïÉ|¯áz7ª”?³œ NTáô>Ü@#-ï³Ô×{é&§åÈܤ_œÊQ¡–oã{/Jï¸u‘«Àøò©YÉ‹€ÕÜîcQ¸6‘Ê¡Xrpí‘{:vñxïcÌÖ\ßÔß'\%ä¶³¶´.Ïæ#¨j‡•™yɉ&ýÕš»žÖ72ïö\]üÄÒ)YùyvéÑL•û8=y@›ás­šc¦b½˜JðC”«ñ²H7LåÁ¤¿¦¿üäÖ²Û{»§öÒïåßøgQË%7Ù¦XDÖÑÅŒ&‚¶…#ûD4‘cdíÇ yÅ•FcõÅÍb©1RöÍ4ÿÔU×ÒºÐ`h¬¾ì²¦2ä‰{½xB¬ý!fLÇEql€F‘K1?Ä‚ðQáŽjj8E3ÕÌà¢}µÒz3ÐSÐpkÌy-ª¶;å«àêßÚR .:À5eÖ7%/jßw˜K­+é¯H-9É„ûÁ<Áçàñëú?ƒÿôH®Ôô…v£|˧i nÔ%® ç 7Ã?[—îñýT¤tç0 ÂÚ…œlºXÞî0òœ½& ÿÛ·°ró×!{šÌ¸üv]˜¹C„¹³Þã-? ¨|(R÷Ó/|d"›íÞµþ¥Dd‘ø©Ý!Ù‹úÄÉGéØÑñ›Œ´\¬¨]p>¡]iI23¡nO<"U˜[®–Õ.²ª¬“gHÌÔRRuƒÌÍ%ñ±@¦ÓÛàwúëwƒÓa6\1€6q@ƒ",ÉZªK ºH.KóBaËŸ „óÖìp‰uæ~ýÆ,cGÇ?Q!ð£Ì½ [ÿh‘ú¯’n´>™\‡²)EÊHBüY¬Ú๒Á A_sR0ÍÖfBGŸpjRS kæ.iyÀ¶¼q¼_y¥ö½Ú„úÒ¬­°qe+­Îî>ÃEU2œw`æƒôùŠž:Á áWÃñÑ.¯™]^êÕÂqG8å:óm_6’¹”ÂêINC™¨“Pò!ŠÑëB Š"0 ‰üŸ‡&=Êúè~XÕ诇žû,m휛bË eäÐm·(êWtMH†ï$b_°Ç_j53Šó<8 <éqbŒ[zCÍ«_Š$2}0¤¥ \ó¯Ë¤YD(R$Äi0k‰ðµZ³¦KógbÍðÿ¸aK¡Ç6 ­©Ï§ƒøñxiÙ‘§Qת £ÆœÖ=™~‹ËÅ-o±\P•ÄK&—V½&£¶mL5_ÊT²¼ÃeŽsp…žÎ…rž¦³¿ÌP ÒÞ²àMºCÎáÛp¢MBPLëZÜ»4Ú Ã8ŠÃ·A/ë$dÖ`Sa¸ùØ/w¤Ž_i¯Ê<鬃DT&Ö0I¸]2–á‚áS¹3E uÑžôøeh]$ú·'’L:—=°Îg.®‚þ~~©ù„·Nlv¡díƒM¢›ŸJúäå» Â+èBáwÚ6Û›|òñ[­ðBÿPÄF^¬ÂÅ÷Œ×œy}Ùu›×4{ZêTùvjàÈJÛ6ΫD|ƒ³J~î.Ù\Ã^º!—‡LzïeÜ)W–ÖÐÁén¨ yEŒìÁˆi˜ÓÊ|Yã/l‚S[Ã+Ú°éš uKëÀ«VV“-ŒO÷ÍÃOª<•›ìÌ}Ÿ¦·/8¸¤nþ÷"_]1)”ÇaЃX+«:Œðw¨Bîa—e_ÌÈ(×`§›þ‚ÇÛå‚OÝ\ßåª;A:¸¯‚‡¥•Wa ß2£ß‚Çu|'t!É3JÇ×;Ó¤íÇy΂¢¼8á¾Åg£ƒgVÏü‰Û95ÆŽn×kK¼!/¬y¸YmÝ^Á…N| ]}ÈBuùê´¦ÀŸ;âAb^e–U¨O­ö^ÿ@¦‰±…™½ÅíW=£s%÷¢vÉ…òÔI%ã >DñoÒ^å¥íN*­hH™ÀkŠ5,:c±¶ŒØ íQ0+Øзõ€ÂBP,t»»g{¼–mØMô.»³SÑfÁ40˜…y•×óÙÆøœ¤'™¹KbÈî‹à`’Ÿ(~:Áy9oôÑE!t´0U/?²ƒD“üå;áÔ'QôyW«ú¨=ä—~Þ;g<(G§CRÝžè;'Yh­Æqºff=¦„dlëÀ𡦠â?|b¼ó¨˜¾ $HÉù0§«‚Ìáæ®¬hèJPé‰+7¿,q}{( xÖNKwý¹j¬Ž‘Éï\Œ5>ˆg^÷¿„y¼à7“YL†FFž¢S™¶„>jâ…¾‰M{ñ*òÀgU<IËhçì:íÆ|Öh³ùÈ/0wìýFcËfSž >GÝÎú¸›ƒ‰÷‚³%C2 [³uŽY”ðS~RïXBY|À(å®ùhÿ8¡r‡Ú½s~A‘PŸ‘eÜoÀ<Æ}±kI†=›f§IMîlÜŽ¹x‰g[ÉÙÆxœjÊŽ!øÄÝÞ±Mȹ“â‹÷º¬Ù“œÊÇI–ý~/6È_ÉôëUÛ»,¼ûªˆý’—"6 ù‰¹ „K)Û”Š†§=\ƒË[½LtœÑ¥uD•Üìé iûf¸|löÏåâbp€N*-?}{Ë£ò.ܶÊgSt€)ä‚‹•¯°Üͬ>ê êl¬ækGîEO)?¬ÃIݼWçm9(•Î?9NÁ@ælÊ27ÃÁ>óò98úSëe·mZú˜ÞÝ:fSÀO"‡]¨i-YA,.ΤéØá£ƒmÐ+0ÓÜ1ýX¥Y{’‚È’¾5xçö®óaÌÕ?¶72vðÞgNÈ™†–áØöewQƒ7Û÷D@¹= ©!Ä]J ôÃ$º(C€«( Ìv©#Ê€óšqâÈäµGro´ýp1ó]$žž¼o„$>¨9Þ2¦®±Ã÷s‡9"ä)Ô”•¡ÖÒ éûˆø·™àÝmûuª$¢©Ûf‘òĈˆx±…Ph *[Ý¥ÖE¢M)`¥cîiàv¬Û>‚ÉÂôÏÑ0Jw;·OÀyôB”e­¢ê\ÏÛõiMæ'3jLcë7‰pr…:òV£±eI/Æ%# ’ÞPú» `˜ó¡8Ã;Îωóß· ¼‹,#f‚—™µ'ý:òß\3""5`«íe'"J/ä$’WYHr8Žòæ§9ñ‡ÉÙÓ« j(ÌIUA<_줞¨¦ôÑ\^™ÑïEn„ç6×J±%x7á¸Hiöö9s`ÂJ€3¡Ã'½:ý~4ékùR4¹‡ ƒ0mŸ×*.4ÈÞ,IØ»æA\üRtSÚýrSƒ5zn®1í}ÄA€ù?2ìÈ+¦V(#á^ñà™Ée(ݶ®?7b<Âú:`…YûÆÑtm6i|Æ#]4˜e17OM¯Žá´€_1üQ_Å8Ûu\$CL;­èx§ù ¸a˜AÖÉ笑“M\+vè&Áˆ¾ûk{ä >Ôš=V–êLBcüN†:Ê‹=2Œ©ôÆáw<͸.£gÄ%ó{sÕ]ö¦•o…SWïíDGòŸ¾ž::<­µD-rݦÁUx©j›(N·ú0¾k!”©pÇÿA"]‰!3ÛIi(;Wíráã±Ê´QWѪøg §E2üMåwu‘«?ò‚Ó3 J·=Ø}€‚|¡ ‘!8mGlAþvð¼BY¯|kGHg5šL~ÝÞ^G%{1±›'A…¿×{W|¦ÞŽØþÅ™š‹ëÎHR4yþæÁ×Ñä2gA}´ïËTÙçäGõŠÅÀo˜øN‹ãkæ°a¹“ !L¡Çÿß1žÔ'ÂdÚö7UÑe€é~Ñh5õñ«·Vî÷†oءӵ¯Þë½£ ^¦qžœnmsÙIHîÊnQm‡ÈZê'DОH¢Ô¯ÕÊÑÓ‹^­¼<%>ÔÿßÂL&&' ˜Ûy…,k­L1!g?ÄÕÔ†g/ëO²É©¶Æ¿ †s²§Ø òvVúªê —±Zó츆 €­BHô^2¾>›ó*(,Ùš£xÒ A9òÕ¾q8Ÿþú’}&ÿtÎØŸËoñôÀ~Û•ˆa¦-*Z~$Ê¿Öù„µD- «@%¡ûØS·ÖF1«Ô^ÿ×s.Z†uš"¸æ£ì mW$2Ȩ ­ ¨O`B~pLAXõù¬M¨¸2$ØÚ,‘Àcã ähHéû¸’<ø,ÒÓ(PÛs<› ð, 9¼ýÀg¹rNÏþøi±U[ìÆîÇ—<úóx;Sk÷ »Ó6òsà½üÀMhm)‰dfâ™Ð42Û+ô~E…_/þˆi¢QR±bÎÍu=Àg?8¦‹ñ³Ž’Þ8¯µ©!A}ö^ƒñé§€dh›—‘üBðL̵Z‘cRо: ‘å….$O»°%¿«ÈèhÆ×¶³öd‰[µ‘qò=F4V>Æë_ÉáNBÑǤ‹‡[r«Õù_¯Óþog?¥OΖc¨‘sÊ‘x—¤g’ ÿm¼›ú?Î>+NHñÔ,S=i†néë4ît×àØg‰²·=èDòû¨[5$w®ˆÙG¹s}÷ÞÁL/ïýƳƒFì蚨¨®‚Ú†:',ÌhÛúíâÍ .yÏB& zæ†þ~ëþôÿQŠ’4ä²(üš+Ó øù»™Ä~˜`?<÷›ÃÌ=èÓNŽK)!ÏÕHö‡+R®|ê5ï SÞêräŒËë•ÔG;ˆ=¡/WŠÚ.Òt5ríjêó)ºj#~HÉÿ9 "5@˜Ã‘†€R8W¨ê½6Öµ[=álè2 âåhÖ”ÆP#®‘UŸqR·ËÎ-v$´íþ­h¾Œäª”D`ù|\TUË ÿõqÜõ½æ?J>£p²ˆ)L×[Lß¡Oš<_{IcÌRé =#˦Qå“|–Ç.EF§¤75hN¢ÚjuÑúS£ Í°SµƒèœRoŠòñ ìÈ7RˆØ:7„æóDÕ3}ª&Þáq Ôû²d·IpyãŠ!¬”—…Ò˜™˜¥a´'jíÉgásY @¹O¦¸›\_ä(íI¨oÔu3…0ÃÖZCŸ’Ã°Ì ÇæM!WÉ¿\è ;b½èØæ§®Ãà4Â}Ü@{'1Ý?ÿÈROÅêœ (ãcl˜fŒtŠª4RJ LÙLD%Ð:­Ä{oÜbÈÙÝœF ¾9WiºvàGƒ¡­&Ã9÷6oŠç4­ªÕôÒR!«&ØÂÉØå„ïõ¼UDH÷ZQ/xu°€#›NÞÝOvóÌù'…S]¬6þÅ '‘Ü<ÅtÍOàÕÔ'I]Ï!aÃÎÿ‹•/ïÑ™¤[,á&m"÷÷Z8”&ËDt¤Ïîd轘¤ÊL–ôzŒRµVxntÓ”¤´vQ©˜ÈXPª¼¼È ’gŠ•ØòüK(Â.‡“º<¸C8^¼D=!Ê Ä׸c­R*Áãòn—('Õ¨"4 u'ËtÕÎ9‘€lq…c„—w™š}©Â‹oÂJÜñ:#IËFŒ0Kôù†Á1D}BgóðŒCÌÌ6J”¸,2lâš“^Ìd¦i…ˆõÝ¡•½ÎµèiTszC¹µÈ¬ 0'?tù— €Ä}¬†±uø. Ù·çVú«¹@ʰ8—ú~ RìF_8KËŽ­ZnY3n5o4ÇÚΧ†¥ò„‰\Ê>À˜ÙèÜ sg%äÛà‰‚îE”•T{|a“/SB_H®•»´Döª"¹ÉGù²~¢Ê®‚ÔÅAZš9ü}*/"ƒ ˆL>*Á]µë&ņz«zI`£Š»W?Ш‘yäå.v‘λh‘šÄZç PŠƒôZaÔ<㪯sة늄 –7¶½±a ƒÑn*ˆæ%ý:ÎéEÔqÆ=Ktqñs©Jr Q Ã>Ñ+"Àg¿€(šL® Èœú!¬Y« £åº}¨|*ÒÚÖ¤²bÕ“—.«êm·ƒ¾øM{\óµþÏND˜×Aâš%-V-³®¨€m‰e}ÃøLq¤ פ½¦ì]W”㱓{ýÈV‘×&ª 'IÏOä´ß×¹Švš-œ¹c2h É€æ÷Ø oW˜ö¦ Ô®ê+¿öÿùÇqÎ FL„zªuÖL0Õó) ˜·¹Ù%"ºkAÐko,.åœgj\ñÎÐ:§C‹`zkBÔ^4oÄt« ȸÕå{ððÄîI/rã4¯³Ð¯z'¬ÏŽÛ#ƒ¶ÉÖIÔW\6 ^/Á.û®¤\qÏKÖáXRaÜ+‰Fmýoí)ßDQMhnL˜Ž ód¯í¼n_´”²~yAf$l£Ž¸ß#?fcxÜ’ý½ç¹ÅT¶¤Ë>G›'5èKšþxúnÐÈ–Í'DŸj-  µc@åÞ$hŽÖÞà·¹ØÔŽ}N¹¸GêMö,5 P`S4Æò f3¬gX°Vù<ÚË+N@w‹è=䯄œÜ™0ö:§ößÏ)¼îûð1Ðe­ÄyÐʼnj7û¢pU@”øG¿·hŒšµëR°Bè©ÂÖCúÈ52¤za@ÁzÓðt4~ O˜/oS±Èµn‚ÀËòvUs—ª/kð‘eJ¨¶ì)#ÄÀГ·8£nÎgÙ< RkŽ§ã™¼ŽåS1<Ö¢AbQ¬Ô“™â©ÆéEWCKDQ͉7tQŸ¸óÌeã"ðµqäÑøù6v#û¸å­îÑ}¦gKÌ–¬¸šp8Ø<–þ÷/“¶ífd…;h´\š›çH…üÅ^ƒÜÝ£D—žÿõ¼ vÕ.¯îY¹| –b/öBkbÉCÔókc†!L$=(Uoüžk÷C‰î Ž%)·ILŒR:“UõÎjá™ VÕèo0k-ËdlcâåÍü-E¦„ÇñcŠ`á© p?åÇeC&jYØ~CïãüÕ{·Ü º”lc55d¬Å¬!G©ÏV!ªKnü#5¦(™¶ÓeW!Äm|z‹J§xÓªåÉHÝ?èk3:„7îur݆ûÏ?så…Ú£äu‘û~Øú¯ê:hêd«´f7Þè©¶÷àÚè,…t‡=8F¤Ð~[4wBÿŽ|°ž~n×ï/©VɈ™e¸óµ"ƒõCâ¬OúÛË‚SMÕ{„‹+=ÀÐGõî Ë]‹"*Eq›Ùëåú³WÄûÇþÿ½Ð^)Ò&6kq£(@:µÅ?Ý!¦t»H@h6ß$·õáp¾0a˜F…iR‹Éj:ûU6Æ“Îûä¡«†aÓo."K¾wÏ’”+±&#õŽœ²$à}*ñjãЮm¹óÔ›%I}µf³ö¯žç†nk̤.;Ão×Óa`kp‚ˆjT°‚2Œý„0ç¼m\€‰ö¡ëÇqæ¶®Ñ*[ {ÍÉ CKÊyÕÖ°mjswhh™¬8Dæƒ_ÙR2»v@qìㆥÉÕ=."#·ÍÊ/´)÷-Iå0€ŒJª[ßLóXk7M=|†SøUš.Å$]»,M<•Ã&Â)SÃZô Æô¤sÍ'¬æÊB“©´Ùì˜ßêÞjŸézZ<ñ¸[\…D¼Ž±ÈtlKóƧxîWÚdõYÏ[Àìq×–óºûÉŸY?´°À×ÏÊj¸‘,û¨?ÞC ZS·iÑÆ@<RÙ¢‘0=s)ü\¶•bJ®'Ç屦!H­îÁx~Ž²× qqGó€§è”þ¿Ä25•ot$'WD»L!°» kRåfÞ¹¢sаý,¾ü„ ÏáNt ’3Ä'{–·ÕÈo9‡Õ^€rB.ø¥R—ik)‹":¨Î … r›äYŽ 3H(ÜrüóÞÒ¼„rX)ó÷þùëJí´¤Ä²&1ãsîá@ `gÆí¡÷;29¾>Á×0èÙÂ\ç/»žæË%·…?ÀvKwsØYŸÃåSkéÄù#÷Õv[6rˆ´®ð@ãÑ ª‚twޝ¹ÚÅä3†ZS (ÌŠ_v”·Êtz5 ê5ë[W$GN:7Ã,¼tvÑ´Úwɇ Mã¦Þeþ<ç+Þ¨¨ÿVû3þ$¨v‡‚RÞ§4ǃ5ÉÉåv­ ¨LíÃ<ð‚ÆÓ­ÎMA,?¡ab3¤Ú=¢ÿ¯šÅ>#èNö"qøêu«/û*üh#~߯¦sM«ó%¹Hèn3κÇËh Ý¿£–YjFé‰g¹¸×s ‚ø²_§¥º""äfmmxŸÚ d›o ‹¡]±BH!Iê%AenUвm%9>@üÙ¡rëËrøD»Ug$‘E±C/¢ï@ÞÔßôÁ(õ`¢¾ô懼²=Š_—D¦í-òýí‚!‰)jãfÑ™oj Ê]ÌÐCW¢Kb[ÞSÝ D1¦BgßÐEµÞ².ó¯Ûv—ª|ÙqÕñÛy]öÈÓƒq„Rò,‘Wp® w.¶ºåÙÉqƒY³«}½u­¸P*0Äý1ÅÑoðŸŠíó5®ý*)ët®O¶?¢ßìüî™tE~gr”hÃíZPðê€XG#“t©U”E˜óõø©ÈÜx‰EØ ¨O¼¸)鸡U[þh“ù#f†]ÏqÉ‹ö+$d€E\þ]Û¤«‹e}ˆkÞ;¢·éÏu{«Ù‹‘lC0n³v¹óAc¡×ÁbMéý¸’ë ì8(& 3hÊ‹ùÑ„¡¡¼üŸFu±ƒ÷®AÌ—3wTŒ=“–Gú ¾•=gŒgcIn¢cñžNHcýà<÷·ƒ2O­UzG¸+$ô¨ouw]µ‚M’pÓ‹mÔr¤Íôú´þ;4¹qKÁ5+@ªãª¬9–§›©¬&ï\À±~ÕÍ} õÑEúô([>ÆòÑöM`Œ˜@>ˆü¼ì¤ë²JVäBåL‘…ÙXsj„»Éíª­lM°¥jóãBm‚ »èúr½ålvÆpÜA‰mAÔ°n³7®½eq׿ÓÖßñêºþ-Î=LØ&û$}?ÇçÅáêÄYU>®GMP±“î;Ûˆ]ñ¡Üz|ÚÌLuÅOô6¸ ã5†›øtzúÝòèj& ¸õ`sø©z‘–¤žÅeiC(£GG>`pFûÕy4r“畳sŽsä£Pžà•J…*Ôúé¼4°º–°p†§Æ7šŒ¹a¢í4ê§c_×aø¸Pž@`³Š,Jkž?`ÔT‹o;²+ øðk—ü ¶]eÙ”èÛ^úQƒh33¯X¦.¼ÒŽÙš ²<'Påê`ù[\M÷”ṫrzà»Sxa¦æ2rüëoFÑcg?j×zÔSdg¿½ð—“¬rø$|Gº9dΘc¥^  ¸¤3:ÃðR¦±Ø+ñfóÜh@sSq2Sb×¾dþ—ꪇƒ6Jÿ#ûŽzµ> ñîøON¿ê—Ò-0öűñ˜úµ½&. ŒòöÕ(¨œ Jì„7¡‡ëàC©õìDTwè3æþ²5δç—Ñaó:$3ÔmÓß:1§=InUÃL»Ú:.[©‰&ž²a#À¼}BâõÒJï ]P®‚>I»:JžL‰/hoŸ7³×÷z޾ þšqâ¨IM•ƨ®uÛ.CK~°y; Þ/µ.§ÀŠÇú0ƒÜ“–X ×çÞ ajtŸ±c‰S |Kg¶ôn:°Â4º3Pve «Êð'ñ¤ÒêTìo4r‚ìÀ–Ž;V<9NÌët÷†Éº¼®€Õ¨%®Y„A÷TȣƵ}˜¶~´Å:ÞR,—âÇÛ.ŠÓÇU`Ê»ƒ%(¯ "Ú‹á6¢g&cr¿Z;gŒFåò:Ǥ`~²&½»°}‘g'V'…;å°ÖÇ]K’ SÛÀ#sbçì,í&U§à¶&@¯±œXaãK§£F዇t#â1 ê+n1¡ÛÖ—æÜð®…åÝðŸÃ‡XÔjyÉЩÚÅ“|q¡ITè„OO‡Þ€TÜðþcõÀ–Ÿ»ñä¹cZ‘7°+)ts„'Qr "Í&\è.˜–49±E‡(>Tâ¢s½¼=ù~*”Sq“¸4s Ðì&£Aù'ø²Þ:„Ÿõu—\êhûü\³ g”7>ô&˜Þ©ßðelìDs³e1ï·pçq‚2FÉwOJ°ÀI¾<ñÜð,Ü­b+Ht!Ó`y¥¬”£öÌ !QkÉE周Ôï©=®&ÏŸ5-ƒN<îHk)hï(ë=Ê!Z*]:¯Iî›02Á­nÓrL&Àï÷Œé:Ç›¦´¸8T!HÝîå]7X2†¨¢ P kE$ãöh‰ç&` ÒVë`{d¶zwå0XeÐöY;Sˆ¢œ¿NëN-¡ºÃhêÛy|bÎ4ÞÓpA<Þ0ȹƒ{´»–VnÒv`Nu:Ü:ËÍG¬ÄZtØL9îô™Î(R¥ÐÕø÷Rm=Y·ˆ$sÕão rwG¾{ò¼­Á°{|Ùs£),„>Ží;A®+18ëú×v” ýûQ’4¦oˆ6ÆŸÅS+¦ÍP÷á³:y@…žäÏlˆ;ìþ0&Ã{ÖL WÉkà»Ö¢:cmºdF‹T4½O…«ÐÆË«dPb¼Û¹!™íI·(|ê¾4”˜”¦ƒð&oêYÒ4”(Fë×ïO_Í)­ú}vò‡¹“øÍ ½¨­üøP}¡£˜Ù1 @AK"Þ5ÞÐ+½…«]“Ŧº²X\Ü­®²£D<ijOˆî¨Þ³7LÚZj^~%,¯+÷¶ p‹íÆTþn“²?yâñO²v ,gpñZ25Ñéü/­¥´ÿ‘‰:IÌd—ìÑÁçžç#_êßÑR†ÕÃZ{‘¼w/[Ÿ¹Ñ7Œ·^ . õêzÐõà JËž“fí¸<± þô×fð …Pá}”Ÿ—e3Ԉ̓¦ (s˜©ÕûPK9 øom¸ÏMA’•ÐÅŸ‰bârrnãš0.&dƒO\×á ÀîÉ gj¥ŒÐÍ–´úœ¹¦ô:ýÌQŽúŪaZDÕÖ妞ÙEmš{–é2ù`.-·$X¹Þ®@B$Š3©>‹7 UPŒ®Ð)pºPå˜&ïÑíÀ¨ð%ÀñÞ|-h*\’ƒÛ¸ö„Ž3Bygé}G)^ã®'p0éz/RpTBMIÅÜxе]7!ÿèÁUuÑÃ’؇.bà§G§Îž–ÅÂjø·lŽž›ûÝÁL8¶+·;ÐÒýQ¤ ã3Ã~ç%à[®“Ñ>G¥¾.E6R»o_ŠùýÐ4'ŒôAa¡ÊR~âkž‹”<$÷0jaðtè‘RX¦èàd·ízÄH©|öp½~ -<˜ë%ç«¥{ t‰¨` îM$ X†–>`ò#§¯XÁõ‡•øT >°œ‚}„·£¯Á.µ³á~OP]:O ^â«Ù"MõîE=Èfƒˆsƹ¤[úÚGÈžX° vÇ› â ïm2Òf=ßVöW¡=®†¶O¼ <¸vy¹¼ffÄ*°ìäqáò9„‹:DÒµ.žn^ãöz«Ñ¶ª.¾ÝQù7QÈöf1žzÀÿù1é±%6n?œ“ÒwxÔ¿¯Ä÷X¼ªÊÅœŒA´¹™:«ÀÀYn´2:ÈÅxÚÇG~ûªâ_èêkì9¯„ÛE3²Å†Ïí$Ý«Víç­·W´åé¯!íÚ¥ýÁ`Ï[Iˆ¿“[.½¦oá.fâÉj5çê@Ÿl8~Û¿ªçîLG„ÞjÆÿkEåFßå’–jeôÞ‡Ës`©bklÒ|ÙÎ7`üÈoâ6 Cç÷ê³ÓÏ$T^ËЇôm‡V)Ûž T…f»yåÒÆW–üÝbsxN@V¹ÕsO[BNek!) eÁU²P~ w¬e“ÓdÖ‰DL° [§ J°ž¾9's÷[;ŒŸV³ÖDU ±¤ÕÞÕd÷G£`ëßB¦v·fO”‡Ý1ÚÑÀÁºh#Ê÷Œõq€„$‘êB%h·¸ ŸcÝŒu£+iÙGŽ’Äkܾ€í\i÷Ï „d¨“V=3ûà‹à¼Чw¦‹>äÿ}wƒ¥Ã ŽFO”ýJ …ýáʲ-TÑ¡[8BA1•ÿÞ³:{ ŠnÊD³¶±zxc¹¯ž»¡Z=úãÛôæwŸ6„/À½m’å£^ºòÍÃBp£gGÞѳz6Ç"`Y¥¤ñeb}¿×8)Nê d`ï!DOØÅr·Y“îmçÏï:MÞ\¼¤­ŸHW±Kü6¾°¿eÕvÚ}V¦+ßO4 Îüo”Ž©@––E»{„_Ñ[uЋó@+eîK³.½rä®uæ_¯&XIܯӢ‹6¶‰Û%]¡ê%Gµe—Ó&´Nv6x¥cñ¿Ür’‘q‰Èƒ7£%B/' 8mý4)½ Ê!ÍRŸ\Ö\W\å§Cd f ±oÈ}¯8&¢fÑ'Ô¹[½JÓZ§¡ø°+$ŽK¥Zýa.úʉ4Ù•þ;:ëy÷E`8ÛR3ÖΚ„P?CÆÀ¸P{yÞÇãŠLNÒbfx0¯t'†œ‘‰±¶ø‹%jaö­Rþ– n½¬è&>»L/¶•Ñã –=?ªnê3;fû—.,®r —ìuR†Ø»b<†gò×ÈϲFSB½ ûe»[h÷‰b¨<ØšªM_1ãsìÚ®àñËå°X­·îaÜi\#”WÙnBUò-O©4°{=*Ì«x¨¼°®»YæûN®)Èx£1 Ÿ2+DðdT­S, )çbbØDÉn“n0’VDÆÒ ÿ–/uYgãi‰ÌÃ&í€jï‰Þp–p™}<Á¥ÇêùEZ>. À‘–Ý€Ï^ ™‚˜ u®•€¾+€@®œ½߬®jëk/;#ƒŽ–èïT>ßNÌ:&7Hš‰oN4éæµlÚwP5‰-Ýn î&(&ÂSÊ«D³+0à2ÇÁ­™›ÌNeØB Ý6±îfø³bM‰Ñ(Iqíœ ¿ª>æßбjlÍÇdD]ņô餫‘†ä¾}³­Qʲ²:G"xæ ÓøÃ°ý`ÚÏ`PÍ´×˺Ôu(©WÃ{Pöû(б Ñqh]iß„0sËÇk,´×(ŠÀ º|0#ODùÚL‚6¡VU\É~µÌ?•E´6ÛTHI[bâ¦Hé21² w2 ë€xæéáñpª[k"Å?¶ßQäVƒïbÃýuºô 锂´5ÎI”¯n;èDZô­<Õ?åjR8Ý!ó~¨•øÝí@ƒ1Þ/¤ÝjHè¬"<(¹â`4»·bgzQÍFr»=='ú/f¤VyÜò ó"pÎ-(÷ìN`ýZ±¯©Ú;Ho°£L2ƒüu¶ ¢ Õ85šøí…‚Ki­Úò`ÎJûäwïäjTêÊ`_ ÌÇ>³<#©9¦£ùרfªjd4X ./¨ÿ—DJÞÿ(sò¿jxÿä#?uØ µY u’’r”Gµmµ´é;x•ÊÈgK¹¨ºCíp5Þâ"µdš$ž‹ÞúÂy ‘Kì-m @…ÎÇá¨ëÄj¢ÊÞšìB*2Ijû<¦z¤x®ìºz7ô·! –ð=æ8M[&,z‹¤R)¥œEõŽ`ñí#h`©S­¢!C^zØpxŽÁ7@-fSe³¸DŸdÃÌf­.`€¢Uù§ž¸§¯„Cƒ ̽3k•îˆü¹ÜXh±ëÔgþ_*ß+ë#Ãö¦Ð{·Z¼–3Ó˜×öÔ€îÑÇ2<ô>HŸ„ñ™â¬·Ô|x o¡˜¹ÎŽW–2ZaC•÷ËV¶yh 8ðAªò—e¶œ£¤Ò(êI¹>•$~Åоá¯Ô$ØPÞZz>÷Ó …³R ©Û:Ç‹.ŒSõù-Ñß§\}7´Ü. E7?¸œ¤™«ü6+ûÔÒÝÕ*ÌU²´äÎGꕨl.‘eÃ|pt¨lä$pMÜ{ÃURtWgkb›rõxQnÞVi;‡†AN.U¦(ÍkŒ’ï·ÔöD~*ƒŽWN*׿¥"°ž¾›~/Ø-¾¨a^¼Ö“ÞKîbä½oX+k÷³"âŠcs´I‘xM¢É=¯÷æ«;í„G_z9ˆù“_[=bõiuÒò{ý¡C÷…àÕðyóþƒA'ÎÝr»@"[Óý–UGp%ž˜¿8œº@à/Vˆ­áFwOc¼ürÊËgG0øˆN•¤AT¼!É\·*¬¾Ø0³þ¿ØÃÞ¿ÝÍâzõè´6ÿš ˜ó9ëÛ"èh@‹÷=´e3ŽÒ L-b‘ÈÜGïH&©v°·s÷8¦Âzû‰ÎÒ¤ ·x1¾ÅS“”hQ2^ÿ㥯¯ž¹L Èê|\vS}ƒ¿»O1²aÆÇîÓÕ­2@Û| <+ßýþœH¾¤f­Dæ·ÛÅ‘¢<&p–ü(åâýõˆo©W=cÛ¨ü/lÒŒu&ö"Wµj{pÄ‹!aŠ–8q—tX"ïã= F3^ãÔ21$•ZPd¨ÃE|s¢ÂïËÒö“l}äåp½ïNG 5¯òÏ‚pY»õÛ^JökàãáûoSôiLƒE«à¸N{Ê2½]äQÀ ¼±vµ³\GÞÖ(º Ã[Uƒ3¦LñxÆéä5`(|•rÑs‚[®´÷Vˆ‘«…7ð¦­Ã_»»/á ¥ž;ÇÂ0J †ë·¨©†ø[…ñ#°lKN þãoV†ÿ²GZ“ÍE(ZŒEÆÝêL“ØÀ-6Ó¦yÖ:â}]õtÝÑÿA¾„¿Y–üÌK,›~íS#G+Cßµëšó¦á6(Á¦ÊÕ©N7ԣ騹¨î\TbB æøÑ톌û}\¹~©Ý.•u4¥ûkQ›SñZ©ViÇmÑßet[±I›iI!^Ùvà®ñ$NpC“½¡¾Ã­H£wCdnÕ#²ucŠ‘Ÿ±5|“´4Z8Ýà‚ö1i¦ÆPÜEôóãwp¥š¬‘„Ñ€ê&MÚš4øla´…å'(k‚ZÇlÓ o¬ ©»P„Š¥bˆ¯¦ÊdT¬þ¿ð&„…Œ´;…'!nµÊ'‡UIà7ŒbZ{–ÛI›I­ @Âågâæ|À¾Ñ%—ÛCú‘²(ŒÛqZðâçrkˆ8,Šû8²¡­…Ø’g_ȸ׌µävìþ_ŽŠ—ƒ3þeaÃc¾ãÞSûß4û½b›ÝÄçϾ ÐßõC :Éôrðˆ7ÃPˆìÿÌÌb|Š=H€ZdwD5¥‡Í³í…'“¯˜Gô³6uÖ8´Wß­lÄ}‰~‚¼‡è,Y׋3ðëàãy çGü«KáQÔy.(Î{Ʀu¶«Œ±2ªJ.ñNªÃW¶¼ŽŒ¦ž‘Û«}8!uZRf%ÛÏñ¤´Q‡?Êrù”í™­ÃONÎÅ¡ì½V™+™cþ8˜'5—!!xFÐᬽ‚Ö„VP›n‡?¹oÃ*=;˜é:qI½# Äù™’¿°¬Ã¼:i¡5ðº­Dcü†Ç¦a÷‡¼[ÆéØù-'’½E~YgDR€äÕKâC#)¸Üt²:£¼Û;ƒ*÷„å¯,Ò-˜ µîõÚ¸õÁÂòÝi6$-Ä¿¤*ùõÛ:L«^„`*.Ý‚œöY½‚ƒ½ î– ǺP7’çƒqLuñçøÊ®´ªØ ‚Sà‡{ºGÞ©þÝ€ªØW†psa¹l} ©4wDˆø¦U!­ÿ’ndˆ¿¼Ýn°­>ZfáŽÇ„L%Ö3á÷MÜ"¡o!?q0Mñ'&Ç)B' Bãæº!jiøïÏM‘Â’ŠMöÜÒrÓˆ/{"'Í0Ëž“5Ãé(êÎHq %žÂ’†íÓº1×'þü—1Œ<Ÿ]Ä!…ƒÿw¾ ”Iæ3-̳á›á+C¥!–Z5ϣũc* ƒ¸½P*j%¼£¬ Ê´Ç<V¦6º?í}ôV„RXºØÅÁó‚à6jÏ[gÔ‚Øp²ßšF‡ë©m§» TË;3uC¥„'ÊïÙ4òUÁW>ˆlé_9¼GÑ|Úˆºïgö"®;ÌÊÊþr9ü îrrØäظ×r4w%tãmKzu,šþÇCT®JhO¿w±‚î7çt?:‹f1bšúàd÷öNBDz˜ÙŸ½a vÝ<Þì³þY7ïÞ&¸`9ý·÷éùq¸\“J `3 ñ›¶3 "úAís̉0-l;N¦óm Á.¯&ƒ‹L¨ îPƒ%=Õc_Ò¤îÅrp>âL/ í¹Qr'!êˆã¿-ZÀ1Žßeµõ'¬´‹õÓ#Øk¢…šš‚uûA·tÍØÀ߇bª‡b7¡Ú™´‡h´Úè:ËG&žÜgÐ2 ¯¶é‰äË»ÈrUÇŒ?¬¯r£·? ä»´‘‰½²gY…îµdQ¦Daú:œ JhŠ„i‡®¤¡çêZ˳÷ã¾ÃdöLdÎjŽTØF²yÕB)E3š~÷O Ö¢Oµj"L¬Š®gî”\±‹ÍL·†¯‘]ýÊLæŽ[«å×ïr£U·jjëKÄÓ!–-eKÜÇÐEÕÏÎçÆ½§øýêælé\û†¯t¨TÑiºœâÊ計E ’÷”‹¥jÓ±·韻üG]ßXúÙ-»e-f9ÁdïèÇ4§Ñ„±ÈVs¤Oñ”$2þ ݄Ļ úæI[.@ŒîW)›Cî¿Ï×T5¬qCt¦ÐP3v ͹%©…ËÿO¿~í‹íüíÔÝη¡èÎ5+ÃßÄGGb<úçeZq[„¡Ú½ HxôX¶€4©a ÙF¥ì×!ÐyŠêžFD(ááéÃÜ9˜ºŠÑRF¿þȆÏåψ k ^hŒlû_ \Y§§Å%m—D‘!ÓÕ6-Ư¬”?H´Ò»oá5hûì&©²"ÓÓiW}°G41Bíÿ@6^)»ÐG¸'äo#¬ªd5®Ÿù¤ˆwý>°°¿§™¿k¹29ª[¨a¼&£Ýhøe{ ¤¢âÙÄŒlE ç˜o  Z02WÛ¾³µáTŸË§´9Ä!\ƒL¼s!;†‹‰wTÇC)0µL‹IáZ£2Ë5?…‚_æ¸Ïþ˜òv}¹±ý/¹ÍYЉkúR-¦ˆƒ$»+éA§…e2IWš¶Kôº1(þCˆÑi̱©¯¡<ûÀ—uÅ4×¼Ë>­Ü“ÍõªÕ.#s÷0Q€qàÍ?@ê/¬ }Çp“°ïz—/ ƒ~î¤ÔoÌ\L ¸`˜G‘ûª—€LYé 79RÙIh&¸ðèê¸à•¥¾†·×ÐëËsF?YŠpŠ[ÌÒ@J&W6¯ë¦n­Ä Xj£›"z9 ÎÔÁ#˺ OþŠb”|EÐæÝìXXg¯Ö ÿè}uHÜíï,X›s”m=µ¿ /b †ÔðsË1˜†kî’}*XëÍïà£î·oµvŒÔ¼¥Ø2 1q·8@;™°×ß;Ð<+¸5>J:7Ç–ãSÅCÊî”h²ÉIå³ç%+qÄËÞÙ¿õ|3hvôÊ gèD;+ IJžúT±¼&èìÙ3(¿Kµ5=ßMÍëŽVsƒ˜ÊR6Ëûuš…×䨲ˆ s;nש=•-k¥Ò½™·ìèlrvüçâgÁ“é÷ÿq  ®»Öÿ4º®JýaÖ?´wø4g( }ëUkõ^®{^4ƒ#Ä×ì~æÍ7¾N\Ö\Ãþö¾B•Å@6‘x0ýG-ßL;%{ý ¥,`ï3¢DÀó²v‹SºË”oÌ}Ljdʧ¢cOo‹ÙÕ’š»è®NÈ–¢om̪ Ž™û§… 0Û<îl«a*0~â¹É©<$uX ª¨T±Ú’Ê-IQ;Or”j*¶jq«ÌÜp²VA©÷Þë$÷4¼,‰LHÜñã À š_ˆS CËùÍå¬IqSxHªŸûþ˜Ä¶j «@°õpæ 2“Öeº«Q¦û'ØC¡ïmkÏJN]‰^’Ô“rÄ• ‡ÑŠý¥=hUX9·6ßb«v.ã|¾Î¦”úaÞӋщý…:¡) 1Azrêrê䍿‰âï—·µnù´QˆŒ» K‡ ½gE:’FkÁ¤Žä2ÿQ%C@ ²2_ŠøÁ€£ :vuqe_Ë®Möúà2àáè°—á±Éo•=—³[ðè}®Ï,\¡ÌgvþFK ,Ô¯¾´~ø"ª2áÇúPÚ æöêÃl6\3÷ĺVsn§R¼ªÿröÙ)‰‚²‚gÍ/è[Ó S^œß™Z2 3&&Öh‘¶¢Âð Ù²ãETÓ^Á»ÞÿkP™ôÁŠÌIwÎè >ІöI`œ}wå²Ll׉z‰Di æ(ÖHtÝþp8Ò­/Ješpy½>½¾aÏ~þF$;ó£æË¨äò¸þ•((úŽê:kaä ìTGã-s àËõ8Êmבp€,|€*yx•±›ÑYu©XvØýýàÇÌx†qÔmYgˆSáËÀÍœ&…ÓlfÜ’tŠzó³—\Ð§ÆæõKoáòV?yRë΀ÆgˆP8B­è1ʸŸº„|A=Çmm¼µŸÁÓ$V8"غ6–»—l¼¾sZÛÝ¢ó#™›ë„éÄ©»r ^¤&×jÂKT}Áåf"Rr!—讹šy‘]€d|o| NT€¦!ööiQêûkº°ŒHŠ% nFõ½Fq––(RÚaÝÕ ÜÝmh{Z¹Â¿?£ºAW€uÑg²Ãzn“YpÚVRQ¦[š Gµ9!Ï,¸ó[ùhH'О¬`¤eþ‡Ü¶ÿü„¼Ä%øâš7ýÕ±› ½$þAžïºÁwWñQiŠ$CÕŠ®ñ4ù·È~3=õ˜~UVõ+î+mHd~†Êï»f´maÜÓ–jcöÅ{<¬j…5M¶=ò¶„ãfwß! Œ«vNQL6{b=§:M¢€Cªþök‡?'$Ûïϸ§icÙÑ)1·CÔ"j~Sõ|˜W9(,óH®¼t‚ÛH§ƒ+—ÛmŠéÍ‹n£ŽV÷Ýþ OM’ß|L7XX]jÅ¥RΞÿùXý_dÁ µüH‹¸Dßa Ý« Ÿããþ“9Q=¨e W¬z½R3ßfö¿3ë–Ã&V+ËDédÊ?ȇΆerâ_A`¬Öv^ØÖfÂ_x 3)ÍI«Z‘o×¼ ÖØmƒµsÜ9šÍ'ø_J2r”Mr¶'AsùQÛb•jppÿr©Ýׯ;¨¯O<‘?GTWäãLL9Ÿ6B°‡w:î³·n¶ºyÓŠücà DI߬€±ÂºMΩ¥¹m[K8^”Á“¸ûɦ”*œpݪFæ·[JÁLÇÎÍq“í§)¼'FÞT ò³Ÿ<T/×FÐ Z[¤šÔ¹–áíº±äyAôôëPPÁc&+²óéL"ŸQC°<úä[Øß$ƒ$ÒÏÏá¼*ÑήSãs~ÈÐòF9æS+Îmæ­RÆø4Sq£4‚A®þϸ„c³æ0¦LÊæÛú¹¢Mbª} õCú˜™9µa·¶à*‹”8ðœÐ—2Y(¼Êïf<5Á–hÊ!k<¶y—¸²½íN(ØZQpº“ÅN¼ï?‡ ixÌ©‡ÅmùJ×Öó(':U“fâHZã–½è­q#±dHùÏe]¨rZµD1~Öä6±f\-Vovz]Ód…ϱRžºB^=¦<Ÿ]¸fÈ:§Ñ±Œi§¢ÿÅVÕSð;Iz?WGÝýk·›á°¤wö'dEW]ÄaÃ]a8¥ ·ÌöµÍÐÝ„ØM±£‡US¤l„bQDÿ÷€¬ôƒ»¾e æ6Ä—©pÓd¥Šå²Y³L½Ô!²c¦nÉI8§^E,K&lŽqãÇ;j@z6eTï¾èØU¬k¼ÑH-þ©=7ß-¥BR3•@,[ÅïëÂ>¥è/#$†ÍÕ¬)D‡,œiL_÷z—†=glˆvëx$þ.Ôç!ÞlŒ|o´Noýyÿàù išŸM1ª$Ð4C¿w²þ#Ã…i„yôG¦¼öCÎéjÜ:è±í³Ö5â’)ªû[Ãï´àåèâßš—RD‘7 “SŒ¹ÆToÝw–¼úftˆJqRBÒ×!«D¦† ¼3ÚÄ dŸÿf[°êȾ]9»Çdêa-†tŒˆg h–)@Ñ_u%æ'®‚:‹üBÛ0[±iC™cñõ8ÿ$"¹LGA€kô2ç‘ú³7e«JKËîhQ‰@QÜM ÅÊ7<Âèv‹O˜ÃÀ÷©½ÅÔ`=­¾6ÅP H}rìöôpaééz¢ifljË4Ú¿»Èp½˜jsæ$¼}Y†³¾v¹°noècfA%·¡Ö ~4<ú¸¥€`Ÿ°¨îå4 ›LÕűìñ~î¾Ä?N3éä|àÿ¢Öž?·åÞD á³a2›d Cã6ÉC[ß²zèÖãv4T}‹ç,®p}yyAØVárí)Ý¿lõba‚ù­üû¯Ò1‰;pütglY3ujs9ø¹‹U©ø• )ýô4- òèà¢~‘}Ûv¬Ž’éqÿ4V:ᆠ œÙèúK¹< ½;h}“ð ECûÈúEDÉ’+ÁâËe`{êÀ` µ6iF¦¸#oÑ Ûñ":y‡ Ruö~qÒ"O$ŠXTßš6Ñí•N ö+±+tXoOµ»£‹Éu·Ì„ŽüdÀìÖ$¬ºG4¿ŠËÒ›¥¡!9GS"-pmYqÅÍßDJìyh2é3Û¡†l?ÃKRø v_¢*4†½9ŸÍz¤-!ß”èͨç^öDfö{›ôÞo‰gyœñƒ7´X⼦ë¶McO™ŠñDèб¼#(CáNi‰€“uØv&¡Õÿl„£QE¬§6 ì¤üšñ² ‡Ñe‚'¨Ê¾""O-ÑÕ+¤uEmˆQt­™@ w­Bš­oÌß0)#ó2¬ôRãÀ˘XŠ˜}Òôt]fwƒ˜U‘VEÇ…R}8òˆ*ˆêrΟé,Äâ„5µBÌ-¡éåŽhÞcš©ßm¥úú‘:®¾‚UòtEGÐÁË:Š«…ø|)×õR[R> ·x4˜0#öŸ—€cØžeçBG:a‘ ¸SŒ5vè]1 ŠÄö“z÷›Ñ[e[Âè#©AöÑ¿‚)Ï…?)-oú|ЇʼTl5(µ½Ää"ÂÕwF¿aI9Bl24Ì?|±¥æŽ…ÊoG-)lä›Ôÿù1 ^茖7›„p诡íë^4M”T ÿ—B~mC]•|í¼njgÕD˹\†w ŸôàúZwƒk/¹×Ç€Š˜@ÂÇ­7>W–¢¹‹¡Çð¾Cê]•/‰€¥žŠe”à³ëá@º<8wögETàeõÉbkžâö-²§%ÙJòK1ÔÂ3Ѿt…Úés3Ì&¢Ƴdu‡%õMor¿þ©ÝSeáÓ‚V…A˜ÃOÒHMw·&Oe+™;qX®.üÖÏH2Ë›¿{»ÎªÑ{ÀáÂö_pJpÏoŸ­ñÞ‚ÙbƇÞ7B2f:d¥ä7æÌæû™Ÿd:.Sx>o8Ì {UiÏEö¶·×7—ÖC9<NuB:„_S0®G xö $º ë‰(Ç mHs«}+h¹†´›@´Ð•·CYAM\áLáànª" @~)Ë”¸5õ}ˆšlÇM‘ZÓ2¾Ä…ó&ûÍ’™³#Uó[Y± c›¬¼›x$U ôøÕ™ à^ØüÇtRžo ¬ Tâ‚)¢;15ëÕ¯÷FÅs'^ÈtÛõx9áxÍÊ“òq€è¢Û¹|ëÌX¡ó Ä¼å±lÍãW$Âg¦GèzrÝ,_}¢˜6=ºýóA îÕæoEÓžðŸÕ¤œ‹º,×óºªf6Ý\ ;Ãâ˜M°: ôÕC˜¥™, ÿS%—Šp$Õã@©Çˆ P~.Zå…ö æXj  sœ¡ -j6Åž‘ºC…Êu%|Oq #ê’Ö–í~å—ËÙ$±ÎÜŽP/’´–]«CN7t˪[–¢ò%ÈÂ5L“ãýÒô™tSµ² óU=åJÄà’ÒP?¬…ɲËü2WÃCÔ•w j)tλղBÔ*O`¤°»ÑÁ1XÆÑ`Iq@)±Mp€˜ì}º¼‚ò8tŒ–ä-?y`É”¹&™¯ª–½Þ¡‘Ÿ—¯»Fw7f;7#7¼ôˆ0¹u#9RÐãýŒ2Ê1ã‡^ù?x«’]gECÕì•I÷;-T-,´ƒmY>!—Ÿ Q€µÞ Rvî4Wý¼RÃÃÏ Ø¾²ì|Ûy$i5ݰ }&i\%Õúò£œ™26sL¶‡eœmò3 8¨öĦm4zNiºl–³í‚¬|Jؽ Z¯ÄÁwë,¨¸©Lû *‘ùêÇßÎçMì?·pà#™»Tˆ\¦Â°bÓϙ𡠬#سÓo¡sZzÇÕ² îw‡¨T­¾/å·†|Ê[Nðl o)ˆSÏBkNçúúú~OÜþÆ[ø÷™o%¬Æ–¤kѵQBßÄ óÙ™Är’É|_&*ʉžØÎö@†Ao©7º¶£Öê‰×5ÿP~ñª­„Šå|:U*íËÚá‚hÝþ6uÈå`Œ`§puzý Iuaw‹ð>‡¥üVÁTåÀ®ÓoñA)›æm~ƒÅà›¥¸f7šÎ¸WZ¥üÎ'×Eæ#Ž4)q £6@Ó%¸Ÿl`¡ZbÄcëð‚ùß#¿Þ.Y@G€Î ½bjw¹ri_,Êù‡…Ù}Î"HÔ13¡Ì9c‚ÐÍïìÒ¯`ëZŠk6zW3W ¼·CEdšIsSþg>€;ãùoÕ tÖ`B]vã²1ôÖ< ƒ£XﲟúUk–ÙÊa½„æ¾Ýå”Ò¡[öŒ<Ðxë•ñËËÂØ×¾š¿m43tyËa,@<Æ‘“ârU¯Š Ë¿¢‘Vƒ¸Ç ·Àh§|ÅTT'Ë#ã°«AÑÞyST|ÿ`{“Çá™Úš[ˆ"®V;`@6l­Nx1ÑÒ?¦÷–{ß«Dâ¹küy8%Ą̈(õ™/(’TPFXö·>Û-£p¼„Yêîíy§sU?fÃt•¥ úí˜ö[?W”8)MS„¶RQÄT瘮9‡[+ÉO')]¤šxß`šú”Çy¯”÷àD‚¾Êã~È`ÚJŽ%€1̤`ö)ñl³lü‹FÊf¤uDRÝp÷¨1% ×ÅŒ[í9,ÕLÅó"3ˆ¸S·× áÝi£²`µb(£ú*©†á¶\48Ÿ›8ÑÛ6é4Ìi®µÆ |»Ñ÷|ÚåË,_[¹R(]7£·ý\ýP@i²!Åh„,ÌŽ—¾ØUå%x}çø?ÿH ÏžfÙ+ç¼Î[á^q«4P"þ |UW´|A4Çï:6Û‹æ¬oHŠ·?dF§"Lö¨8«…/Ðߊ,¸åï æÎÐúT <îej[Ð?@³íBvXÞ¿+»§¦ 2 QT|ÔÌ2!Šê¦SìÝÆ1šoEF“i¨Æ¨&â÷*ÙŸ&ŽÀõØ'ý:œO9 u|ÐÍ.«Òˬ ü æ¢age¶¦]¤Æ¡½ &šÚ¼s¥ Ýç\Äv!ë%o†ö¥4g`쇶ޜ É+m1ò"dx­-)‰pÔÛ%Ï=¶Üw¼|Ék@èƒÙÞ_‚ì 0sYÕ$%”@0ó{;ŽËA¦u$u­ ëü¼ã~Ǩþõœ{Ý€eÂ`Q+Æù-}®îhˆª@L>0‡¿ì ×Rº½â,@gªºœ%Ü3;Íér ´qéfÒÁ "‚o󼯪yÌŸµßæ1â-Ëóz£ç¢Y~’’Ô¶¼cTAszÖ@¬†9• )0Ý×whD:‰ñ÷ˆ-mdåŸ;¹VPšG¼’Y(ÆOÙÊ£g¶¹–ýa yN&§»#S¤µÂL›±´›\èîS;±ÑÓìõÝ”îÈá®ü$Àai2´ïŠÄ^™žÚyIe œØôï³”lÝZ¤ÏËyV:U>'‡è™}ªÅÊÿ<¡U©C⌿Þa+ùÀïÄÌùÒYŽËÒ1eÑN.ÞÛä[Ãhðuká)ÛøÀÓ¹¢º„[†b²‡ $×ÖÐk†]Fþ<Vp?˜ ‚ â©ëÚBÃVí4:gºÿ^Ë=Z³Ý‰D÷xtn´Ñ¸Úûßb,YíŠbˆ¿ïJdt¬C?Ðb>HÛgóÅ£D°Smukv9¹.u|h˜5Wü7=1u¨/ÉžfʸˆÖ&ßÕ Àé£'À5ñzs‡–™€œ~£ ”bOm¹¨@8‹f# [#Q‚/_xÛ¬Ÿ¹^3 ,SFmÒ%;I»JŸefƒJ¢?ñLRmœ_ 7ì~$bSI$ˆàßÙu…{m¾Ð8]¹ÞØ(°œÑáµeTV˜Dóó4ÖÄcV^ëqÞ1¾6ΫVÑ~ư>fú-W·$ v bVœÄ¾è;}Õ½³SŬÎQ!­ÁAÈŠIøõšoÁ|7ý»È7®A«s¶y^‘¡#óß;U „Lí+¤‡$;°à>}«&uÐþþ@ꯑ°u<ƒÆÞó¥¶vIh=Ä7£8) hÝd0¢jÖ…ˆ&Ǽ"+7Ý-öFFK&Ìð#Gø<æ‚U,û“_¥åF¨ a¿«K‚B#·ÿJáD·0 ‰ÞÍ\å’­œ£wy/.{Oâ¨néâ i|¹t󮕇|ôzU ;C‡HK¡¯‹ù£§,45Ê,ýÅdŒ]ÛXË»,6QTªz}#†œ{)õ5ðÐÿúàÅÈ×Hè¿£hïQÏÇ·²!É£…“?é0QÙŽs‡Ü´m0J¹Û-ô]¥N‹¦ÐÄ~›7Îë¶›5ûª’üÜKí>yß6'pú¤L~º¬ú˜‚Û¤2 .ëÄ~w¬´[uïê)¼U“*Õ¾ßk+’ÔÒÛDÏ;BBðè68b*mÄ™f‹ý,2]ovìÂlëüÁ‰?®’°U{&u;üÕõ3ô&þIAÆ=NëF¼É­2:uUö‘&“bê70v;–®Æúwˆo–¥Õë¡[!5¶­Æé£z޳9›^~Ч®Ex ³*/ˆa' Áœz~œthùõ ‘kÈ9€h«÷ŒTÓê7`e.õúôø\ !Q8ÔÈ•/ïÈÔ?«=IÐ3ktßý5•ñ‹²¿·nÊŒtqëuÉIÄ`7ýuLZ•:v°4ˆ^ž‡wŸ°¨\v÷‚ræUö%L„™¤¢7ÇvEÿ”¢Ï¹É†«0zN0ãqµSªß“@Ôø@”׈f™ú xèj%F0ÿCèýu'yãÔh³¡KXÆ7<4C»˜9©®å“‰CVˈUM®`èZÙÚ/Ïø‰Ô‡Æj²N>O°®Ó~HTŧz8J$t¢}W²Ú?âü£-ý¨¬ÁñÂÊb3ÙÝ'†®;œ›¢'·daâÏ1z–Z(ó ÔF$™’u–{µ'ØPNqZÃ&¬…3/jíVG%¶q¯‚GmE J|.ù 3‹–ŒoH̊¢V6ÝåÜ4dävsê{Û7ŸƒÁ„ýPB4k“‹P4§Ž„K`X¢wh)xe'Ž¢åsr‚rº°g%iêØæ¼18¥áe*ä·Æiº¤íÚºÖOpm4Ës˜Gç‚@þ|ZtÅÿÊJSÛu½‡ËVüEƒNEèJG«˜¨£g‘‚ÁPW8æ86ÜzUbÙê3~FîQ²·¢kØBúHáQ!rs ûêmÕà|…)<ð6oô[ê /~ÆÙTAÃ1A½†¬æÁg¥&ÞñªÀÜè³qˆ`ûF!¨OôÐ:üáôkPƒ·<ÊŠRšÀ¼) ü~W´u"Z!®.#ýßHüóÙ2YdD€¾ >&BM¹ýsnd£dg¿x°ûïs‘£Ò`Óº$Ù‘F#'Ú>a^5M*:zÒdëN»4Žº³XÒ\09 ~ãU[ÅÏÏY“^ô¤c]* @Ô¤Í" ¦žôôk.Á…›à’Uš pjDTºQüdÖé}‰tAr\MÔ$ÚÕÁóm½øðØI­Ø\»a{R€tôÊ[øȇùDÏËzÜ©pëvk¯ªÓWÎxšsµäеæÕ*Ý;»”œÛwäpÃá"±Buг*¥cêb1öuØ.FÊK w/öߨKôIŸ„oÒÔH[û²ã€ÜìšYuš°–gI<Å;ÁõS‡êçä|hñFù±0&ô £†M^­t‡&­aÍùÛPs2‘° ‰zǺ€ŸØÇFAì†@_˜TÆõFµ{ö–<’á ÉÀW‚… Á./¡·“MBî/!†TÊ)‰ „+Þ´xj]ÆÅP|³Þ9éa$e&Û iŸÒ•ØX¨ +å+¸$ÏþÜyGø¬.T„Éå·  oBeRQ\ôÝ·NAL$üY•Rü¿¦ŠcY¡‹S´)yp±“–Ú †¸?Yå“[ÌëÕ"ó½UMú”"[³X3‘ |þõ²õ™¹HÂÒÏtÏIŽÊÚ˜lþ¦Ö¶<ãÀ¡5 aë¥Cf±È|êK73#¾6-×OÂAó¿û×Q4‘ÍðÐ¥XUÞ…ZGׇ¬L™Õ9ûŸ¼@y¸qZ§>¦Z΂£-qòÛ‚¼¢é’B79yŒ’x!bt1ލº³°¤.TBiý€¹bŽ@b'ž[‘ä¹S9ºO[ =½Ú,k³ƒtSêç{ÀZ>‰'NBê(ß¶”ô/ù½¤~»?Z/ˆ¿‡¨Õ:z n+´Ö9Uêô+FãÜáü Ò–¨¾±dÇ©c-FÙ®§BépJÁ”eä1FóÆ(4¹E; QJW%êw'UÌC·!á.k„…€ïÓÊ ¬’DRoÀüçüw£ä @¢¯LÜõ¬™FÀ]ÿ÷¹›ÖÑya9ûÄ’´vD‰”ÿ§•¤ó,,NzãWìÄß!i+?·6ÒxciЦ¨Uƒ0rúaü(/Fìó¢÷ñ?ªóÇQµx“vírà”žÒ©¾±Ã2uÚÐ'óvJgö ˜Žé@¤æíŽÂq»Ûúã¤çè£æîà¶¢¹ J8‰Ðœ½%kËÎriýŽã"o?ùzÙÄgÓŒÐ(‘\:Qæ^è1ô¹„w™åÈÇÌâxTmqD¿©¹ ûD¢ÛvDK?)sÙ‹”ñŒHé~/4›ÅY[›‡+ÿ®9àØçøæÚäçúÂfãáSŽòÓù}úç^Åðãø ¬ìôÆ.[ãtYû9W¹PxNÎjƒß¦É«Ü8Öq*d‹ƒ¯¥½0k¾ÐPƒp"†ÇJ@<‘ý@£HZ¬‡O–n¤QC }Ó‰¥ÆHkÿø“‘!¦¦íì(²‚=d¸…’pôüÍpX2DÛW6…÷÷°Am’æ+d“-“¹¹#œô jM¿U¸Èbù^د³^Pýþo»¬¡óX2Þåß›~ø~Œ-iŽ¿,Ý'—éÕëˆzäùý¡fi@¶¢ræ”Ý>ž´ÝzF$Y1ŽlÖVˆ=Mê–¿³·ÕCðëÍ©ŸÔVH¾$ ‰àø .îøW{÷šÈ‹ÚîÿåfM耟ÒCrÖû˜µ4÷_c¥ÝÐñ\î’R°U–ôµäª9ä1©U‡”u6.¨»©—3‹x3²ÎRWO†šŸvÄq­RQ¡gWœsS¤ðë<ŒU<¶ë4ѯYñEÙ9ë\?šS¬³O Ý¶ýÒÎÎékK-î¨ÿFˆ‡ê·¬ 5šã4ó¥Œ2Ú1e& «¯¢%ŸU£Tu•ó „‡Ñp›ëëwqœá™‰U ;^,¸Ä{_!iÞççrÁÒý¾zGWXaW×XaÝ_æ_âí7‚:êÕ¹¹ò˜`ÌR+ÉmÄ5æ0WçË´á²CÔÓ/Àý䘅¯°qzw4*éÞ“öM“³7+‡ ‡Ç` Xµÿ¾ïù‰ÏÑ_q*´Þ²½8z’ lüö›³òW(·“Î2^Æþ¼•×íÀøh¾ê,±Lì¬0³UJÞwIüw{:"°´ãÝ G¨ô×3¯Þ„~ÜøW[ŒÖmxµ¦TÔZæ‘á¾ÇÅë¨IÏlØMíó–eD'y̪}¤t*žWu\Ø—ÆßÚõÖêÔÅßÀ¤cg°ŠZXÊ·wyoyDÊ~bM çz›lÏFZEB¯\*Ò+›Âý½VÞ!AàD¾è±›”?ÿÚvÿŽb"™iÔ"G¤²§ÄkzC›|ãëLÇšÊ|>y¿idìs~¾ ¿¢@æò•|.Ãc¼ùç”·â©´J²ÍEöâßr mÊAÞÝísNŸ÷§%ú 8.y uú“~¨%¬'"ÙÛ¶ïì˜ 4Án”E’;Ïþd*!èË 4ÑMJÙ¨Á´ã[s\—1PžÍIêØªàrüHéQl ih¶‰Êw-ŽÃøÎÈNØR2(hÏèC>?\-îaç²âZª¼¦u ¤2:m1½‰Aõ®A½Cp¼¦3*ÒͲöZ€>ü·ã°QKp°FñµÏp‘„c6~Ë7•a¡n6%²º;£z6 -g>ŠÂýï‚–¯5P^/EŸ ;d¡O¶òP T)1ÈÌ¥ð 8¢/Yìðw™[¾Ð)dôUZÂZꎬn’—ÁT®GÜhëy1–Džå™÷W{îFØß‹³'…8WÎàâ|32µ`—·3øÂ9>©«Í8¶rö ªòÅD'¿z.Ô˜e†1[F.öž'èvDC‡WBfÿÞÈÏ£¡˜Ë!j!‚ëF?»Ç‰±¶ ~|&àÇd‰R.‡•æ(¤Ò *‡"êDÀý,pñÎÊ¡ê“I:xžf`kÔ]G–Ùžãt®ˆ\GÎlæ¯Ô$Š‚ó‹ýþ½^O³À :¸r‡s2¶á[¾5û}u·J݃3à ü(Å9G<“!“ŒÀcØâ™4)rŠS¾L GºŽþ—BÀ©.e ÓÜÊÿm(aûGWk×ãZ§±ÙôkÒH°œšŠÒºã‹±l5Ϥä©]Âo“÷Lîãß»(Ö‰N¿Õä_°\_ÕÕÙã{Çi…2U(jÛ^§Ö"·˜lº€R®è•cR¤Ä;Å´äk ÄD z=g¡o“0œæ^ÁÉûBý³ÒÆÛ9L$E;¤‹\êÿo²¤"¢„ñQà7âwtùå¶ý$LÓl¾1S2ùt6¥ì=̱3QÅ-®&it7 ->¢DZ2¢òHD™Ø#])…ô*¨h†°Mxª™Mi¼ œØãË9Ñ%·äDЍw<žOå ?†ÊÒ`€™CšåÂ%ŽWõËN(¦ÜaíZÑ[åƒ`˜Ù>Û&îXRìì4}뉦WûT@¡œ*/‹+ð™lm¶¦)ìz·ã¡»â3Å Ü^î™ØJ/ÿõäAk_.¹wÌàï¿|›bï\â˜¡Ë ³9±Ä ,=8SRþ‰—KKС.ÄÅ¢åç™ä´øó†œÊ[ø8±³®& *É×±Ð:Þ õ%œê×Ò ®!G˜Á 2wúoòÈ”¼Ù¸>Ù„2Ö¶¤L Ä9¢Üv˜»*ŠâµëáFTÊɾk¼ƒ—“á–ÜŠ­Fíº_Ûž cš^ey.2Í5âãîg ¥â;ìG;Ñ èçÃpô˜—i'KóƒMÔÿF¸ƒ1"úFˆÛ¥¸°ùô(hÍBI4Pí¯EºÖ% ìKJ‰Ôa,{ Ž“ü~7¯Ýši DNîx´ä ˃M%mOÑDt¡Îí-#â_”B7T¨7×EŸ0ú@ci+¯+ùÁd‹=³è• Ë´y•ÆÜEÃêÂëäÉtVþµ@6‚" ¼âËZ”˜*”>ÄávMüã ½[™÷ï"“2ì$Ö±ÞÊEÍß´}ÄXùp1݆œT.…„:…ƒã9È¡[¹Çl³ºoˆÑÐû‡63@M„ lß¹t@Т'T+¼ú€uõ(7צŠO+pçAƒÆ²0”)yì'3ñÞ¶PêËiû„,RÊ¿ ëàTk4¸Ç½œÓ”ÌÕæ`¾©%<í']<1O'»yøhô,ÂÈ&!qèèã4CÖ´÷Ný oÅ–‚ þ‰\h7^¸;kbÂv.¤@ÊUɦ\ëÂÛ8ü'/ÅœöH•›å3^\á\4æ·T¿ w”ý±:o·€¹ñ8‚<laÔÝ„ë#åbµLýã†ñm-VføüN«7KçrúµÃOíÁD…vì.«¤b ” »:±Àbî'gI=ð¸ ÃÃËÑö4yþˆ0*(XHÒ°£/¾ ŒjOºï—éÏ?(tw¬¨hÁN_û qyš¿hÁ2¸uHí’›¬Æsð” {‚% Óù~ʨ†$}¨fLÓy;WcPÏèWi‚æQÙ‘õ¯SÚü¡u]74‘Ì^¯µ%¼‡KAÜór5‹{îï%-¾Fûtº«¥(Ð#פ– «Y0ü}jüA*­(¯sâ<Ò‚7SCoF>@"a>zVÔÇÜï¶ö؉D8ÄŸA·èÐÄ[à·:1ä6Ö:¤ky"TXÃð*­ï¾ÿ‹{a@ÐɱÝ„ŠŸF &Äåa±pÛàùd>ÑìÕæôÕ¿PS¢!>uù7äbNú†DhŠÈi–(yt>³l.æ•+q·eiÚRÚ ˆÑ¸ž‡fW:4‰dN•äš2Hµô“!ƒ¬ë îil_ÏsëÎÀþ‚".¢º‡ÜÔÍÜýÀ/Æ´àüQþhF¶ÂÌ|g#Œ‘„ý<"[r(Ð2‘Œ¢5-Áiްp#ÎÈ+ÅiþM‘a3×D ÂõùÈ.¥¨ðÒ3RbƒQ"´/- +þ”*Y·ƒŸÎ£yˆõÑ—Ðv˜&Uí_>¢¯!)™TýºÞ/³sÇ’Bž$ž/2¹/Ø#y«ÅÖÒ é Îðt÷ܨ/@S{§CH» ¨[îp•]ÂfÞ7ØI_¸JKß`’mÉE>¤+—ÿSˆ@[Ë/R…hCŽ*IŒrÚpe¦Ð2 ©„ñðê>íÄÏyÕ•àØ›ÎÚL@P¾”‡å’sL¢Ãñ«2ˆUŽbèTlZXcP:tw~7¬W( “7&g¯&[Ý¢¹Õ‰¼UºŸñð½®B‘Öçú›êkÑìQZ aPË<(9k iûÁú´nJ©®=¶ÉœûˆjŒwƒ$sìã]V>^t†€yÌÕ)À)ï^—uºa›.vÝ©$o5:—xìKÍÉÏÌ÷aŽàòûÚŠ«Ëa5<ö,¹×—Êæ$“/¸ÙýQY»$ù¬f‹öÒMÉM®Ð_ÃEñ™ô1ñÊ&Ä>¶EQÕ§ºÕÎÙ#¢…¤AíÉE9µh_àº8úðœ+f¬tyñü.û™ zRÌŠ×w½o\èž~žÖ2lÛ$kã›äæÒ”ưSþjeÅtAHDN>ŠÏÖÐ\¹ -²U3ÓKT׆IJU/«dTÞ[‘x˜É˜Ýô·“øle ¢&nËi•Œb!^yéïîp 9nÊv5oÚ’KóŒK8™CÍÙP»ÿD\YŒ‘¾:@¬¡c;ÇkºvéÊXm»‘Öž : ‘/÷$LÇÓx—J4V>âÉ™L° ¾8¯ÍU²Zšl¬z" C sñ½|LŒ¦“†˜ûÕx‡6Á¼ºk{}þt‘Ê$Ã6î±J² |(rí©ó‡¦tüvŠÌ÷’P.¤™šHïQ…g$ Yv~"aÏ­é­©:Î?ÿNVZŽºŽ„j^^Y~R •-‡œ¨ð~{Zq8lhô~´W•H¯1Kѽ6ã–IDýB@Ø ²®ž¸H53ß–µ¨¦ دØ>õª´n0§vhØZ ]H ‰âö_Ý5gNomü`%ÏÜGXÖT‹{Z*‡ ‰’©AC½*¿èn³zÞ·¥@LýÌ>ô Qód¤éºTßĤ8õ¨àxLÌß!jJ2Íh´â“T÷•­yþ`pl¡‡{jÇ{oȵ/¼r|!î@Vù ¦’¢x¤²t«"õôkÏÈ q!îÞ1ăZÛ5]O òp,’Z¡C’ßsijRÿ¦ÿË••ð8A ª}·ž:žcJ¦O~KÁ„9v‘vP¿£gÝ WD¹ŽÙÌ40Y_ð½ð2]öc3_sè/Í ü¾mõŒ‚‹_®¥ÔöÝÞó¥Í8PÖÉ¥–ÌþýlžF`ÝÍÄõÞ5x#^yY7íûøÊ¼Sgã/)‘S…¢šX°hRï_x‰#iGoK€;… UÐáÙмU§Â 6/Ók¢¢fôK”PÍl6v5¡A·Î[=¼Ì€úEµÞ mÙÞ}}t8\Š,kñD*…Ø[;—ì™3ùtp0e¬V3 du]ByäáÆe¡,IÅ÷“0%ž©¥åÊœD^']ƒæÇe¹Ü[Ú}¹Õ÷Â&'Í6¯ ;[…´;ç8*nJ2µŠ!îl•Ä☸¼l Ž®% x ›Ïvˆ)OŸõ# ´Aï  Î¼Ãf;:J&NZŸ4 i‡¿Ó”‘ñHfd~÷/DDãßè\º¸Åm$% fÛOjØÌIã?hVŽÄ¯rI¯†Nå‘eäSÙ:hþÅi<ÔöÔš@[µ!>Ê"#pùúrìÇ–$È´•Û3š¤¾zNJåTýÿpÎŽW7ˇúÈžÏë”p¸u‹<öc¼2ÿš-eX{šæ:°ïX^»Ÿfçƒ;!#7EÖg#õpŽ?V+ô¶ózë]äîêóy@Rz¢ZßøßètÑ(hƒ71Q‰eîK”ÃÒ÷Oí¿•Îë§ ¯ jVP‡ìËF€Owä¨Ì1]à¤Uyæó-êˆý\›#JH݈!* åÝÊRð òðî—‹Þ~ŸrÁüðRz½Üž¹¹çõźq>­ð7;•iAzé}Ö£ô_PúbÖNsvnNõÅÌÿÝÀ;€ÂÅ> ¼8qL̉©4‚¿ëÚ|qÌS8‘øäë<+’y5Pìæ²¹4äîl0YèqëñŽ»Ë!˜×{ƒJVT<@QWh·u³’Gù´æ‰RÖ^–ƒÅ tÙÔÒdû†+&bõg‹ÕçûÒøÉ·9a•íø“ Ñô—ÚNˆvåA‚ó ¢W‘ŸË%V\Ÿ5Ú ¨"µ€š2(ѬëÁÁ<ánÑUQEؘwAÚŠqÒ0›ýh¿Å<Õ³2Q"0ä±…J˪ʭРgˆãH#–†ËØÇê@}Xœ¿y"ô¾’KÌ$ô& àbª+lcP…ÒÃ^w”( xEŸ®#ž ÀUºN³LÛon¸`ÁÈgÐZR•ò6Ì3ãÝû÷:e„Á¾7î’9pP ðTò00«b·ŸWÝ% Ê ,C9a~ž…µ¹Z­û„ôò!Ât>xÂ4 në{4î’ÉîËN»Ç¦Ú2Uw¸à  ¨0hÉÜ>ëùtõ§ EwjÈEÚ[äªç6í[Õ.ábƒI;`l†Ù‡U5?'¤«Jší ý€"pac%åK$­ ‹ª?á¯Û‰7³ŽSûmîˆ Gà2¨Ò ìôpçßvÄ\0yï4gŒ?vbœ/÷HÇ>n§»þð¾LÅXÃÀë<Û%ر(IÉš’ö|_Ú…jHèU5qÌ:}|áæï1r“G‚ |2ƒéÅ/z4PàVz½—kgàŽL…hà›§HÞþrŒDñ5¶^ máäÞ}gê.éA#‡¥wÚŒ‡qŸ^-Ɇ@V]3fwTóŒ©,n£¹Q»§ß³J«Ð&ÝCÏX„‰vª /Òä´¹¡Qͼù„Õäë%c…t[ wÅ¿è‹G"!-aÆ^8CÝåÔ ŸöjŸ8+*jB5À †Á<Í(XXÕŽq¸\æª×62µ…wõÖªX1Ë– ™Ä]³à/=æS¥è¶—ÕuÔp‘óOm*ò{jÍä©…Ly§–•íF5, §=% îM?·Oß%Ùl/J/ªéz¿èïjÆm(Yµ?¢Ùek'©J‹câp:Ô䤚€ÖlG1¶™Ò²iï|ZIŠú&ü¢ÁFË€Â[\ û–6ò7 n}ÝCBÚ FAí{aF>±<"šƒ©t MŒÚ3¥ÊXñ@SÞ¥¦rRÞêî7efãçW[Ýít 4Q8¤áÑ0j:½ñP‹ã—I{1WDDvÖÍ&švEò¼ƒ€HNHæ·øšûê•I޽/­ŸëöZÚžˆ:dÝú3òÖ–57ßc»]‰¹cQ¢OîÓ©PD-e‘T;/÷ÅYa°}±W4UÜОæÖZÃ])ªÍÄ…Áƨ ʵX’•UàÙ·÷¢@3þÑ™') pŒõxÎà¨!×[‘¨½ÅÏŸÊò-½›•Pä¥|¶¶.­4îó\°‚Uué 3RV¬‰ÏWŠ4H¶ØIg°C×ky(ÁÏ¿C"㘜,“Ò×” Tó@ÇRX7­°ÿà “Á\tr…€€smm\•lËP}Z=A‹B36›÷,¹ÎH/Ò£2ß»¢Tgún'Yyk³ÍT[Gº4ëQ $•B\‰Jq6g æ)—_T¢ZıÃE÷ ¦§À.§#“péIíÓ;~÷ÂËÑ%<ìKŠ6ó"+ýb&±Õ´ÿ‡ünË“^å<ôê(cfYøý[‹R]0ġҬ‹à›'²I±|yÂÎ&£³ ‰<ô x)4™Î"fó©>,õCšM7æ¨=œÈiä•BhÇS6>+ζ0x¿_š 8²Ï{>O5g¾Ñ(zBðꟼ´ºãê\Ÿ§n»þ(6˜°t˜@›Ï`ÜIÖTdÉÉoÁ{0ä ÔF“7B0$Àà>²ü±pá½îãWDûÑ£¡·®œ @}‚ TëÑ3‹…#=*ŸðãÉ£5ïY°,#Fî´¯o©dûDl ˜ó²N†Ä“ó-Â&ÆÔ¡F…^¹Ö˜ö¢O´ këE®°Yˆ¤ÆÑ‡†o0T9ÉÂgææpúí[0o©7òUï¡<¨B‚¬djœ@‚¨µ‰»ì=‡zAA™¶|mà«$z‚×>䜔_½}º+%+ù]·ã~&ÉrXòÔûWÞy§ÿ`$š{ )Ìíbð—,¯ÿÞŠ÷ÕàðRÐ*i ™ÚΑÝ(È`BMA~iyïê<:ß÷ºã–"â§{w°ÄÝ›¯j¶`15ÿ‰½=”û"l«ž—Üͦ18.bä1ÎehIä ^*Q>/cqed29…íU ØÿÌ–ê¢ADëGÄ…c:-t"gt=þ{,ˆ‘#`Ûè£ ®y `ïXÎÓìeɲzË´ÅûÎÑìþl«úØÖàjJx KU¥ÓîÃÀo•x5ÌÒ®Qd}ò=BFN",WdÏÇÇTK¼.àmêàåuÞ®^–ÆöÓ“#Y ŸTþ—#iH†„Äñ°É£ø+uš` Ö8AÕçäô’™Ý6JÔºÝrÆ Þøßá"èOR 6è–Tœ§mÑ{¨ YP5Ô¡Èl‚úÖ³év7Ç~€rZ€m…^¯ƒÛÞã3„Hµbá§¡…/#òöR4Ty÷àï&ýºŽo&öÏÍNQÝ|IÁr:t!0ï¼Ô=ÝzÛñ¹t Î(ö"Úˆò¸Á*­¦`ÝXºHí^¦JF)GvXä9P–»Ú÷ü(7–™i›0ÇD¢7\–¥sÂø¼ÔâBZotG8„Û7]~—ÉÊcö¾3jñ8PânÛQˆ> yJ·¦O3ö€.s$b«¦ò̵Ž5ÙrýKÛ®‰â™œuþR¾Dê\sNVÝ‘Uâc‹wŽ7}›ÀN¾òÚ:8Øo%’"jr/½Iѹçñäéäf Ô-Î-ºmd×¶4÷.ç•Ù__,÷¿ÄøÝzÀÑ—©/BþåxeVÕ¡Hö¶àHý€{5ï—.•ÓÝ–uT¯§š›°=“1TfÖ~?è·ÊÁÈ&7¥¤ÌUúñŒÇ¦™0 £½ÝT ãˆt 1Q d1¥TØú¤2œi·t¨£ºŠZ0ñ>“<[{¶-¥ ŠÈ<ŸI«dï¹y!°\õè\îGÙûYZ {œ©Vmæÿ¯f\éòiÆžyù;U<•+¢XO¯õ ž t“Où“â­fø¦è§J3´ë·›â‚ÚÒ” Éî¹E“l½D÷FYE7æ >ß"B[ mÙ½«\¸:ÎT®”YžVlÿ–& ª†²‰êì.RО7U¼6,÷KÒ+ ÜÖ=g3žç ª@®ÜI½ÉS6>Û}㬂©:rÎ7ý3ÛÖqjœ wãP¨Tu²¡Úz4Ê›S™í[í0A&é9ðÃ`°‹ÍvDåUv’í†ßJs0['_4~4=†bþ½,"LÓ¦gž5ÅɥƩ”Ì´ˆ±ŸëT“æ]ñîU¤ æÕ™›åÔtónnÏ®õÝM熇ү%®;½±Ø‘@ !aàµÐ„ÍuT(‰ÚÁ®»²ÌYµ_Z˜ípvd\ÿÍöŹ%éÕ+HåÜöü9@ú§Ù@ƒW Ò¢t·}`¤±8í¥¼­;º’Ó K‰NõÓ?“©Ç6ƒSã[v•F§ëæš߀-“k1„mŽpÄg¹ÐÖ+5'2 ’Ëöµ_&š‹7”Ë­ûϳï»%1ÔÒ-•Aª˜¸ë4ìò…²˜CŽÂŸ½bYðê žä¹†Ã»Ã¯²yä¿Ñ=ûb¡g…DzmÏû*÷F°ÕÀ,ª?Ä÷“$_«‘ª‘Q¶cÇA‹Aå‚ñÀÛöUYvf!òkªTçÓ­LWkE TUæßžèü‘±RyAY®ý&í+·)w"ö‚i$/)wÚº±3ÛNíÆCÚR£'öjÕÙŸÖC•-T›:E†[9ü¢Sn}ò—OìjïH 8{¬yþÔè=Ï,h‘؇q(mË\_cW-â¤Kæs:>Z»'ªè.nw²Ḭ́•t¹™dì$ST U}bür]x&K2‰e¥>Ð ¶´ÈÕè§'RaK½·Ó( öW$N…­‘ècWG.y¨lšM±»é›¦$v2aFjr¶fÇžñk½Œ¬ë5Ëô¤uO› •¬ÿ—°Ö Û²ØÚËßðhkzbŠ;¥­rØ[κPTÌÓå9ÛÞ{6Sñ&GtE”÷˜í™1e¶MòجÎlˆ°\z{O ]¿ªî ̹³lÛ¯{r©ö(³'ëÞ7;÷i¹–ñ¼šÿ Ë›êXСÚÈ}5Z9¨¨o@èƒ:ÿ¥J\Ì®,Íç¦ ¡ÞÛ­æ¡<ùËÂgàÿ¹ë<+£°ÍøQXLEá½K ö}…¶uÚ+!¨ëBf5ŽàªHƒ0#jžXðˆÌò)‡”ä·±DœÂ®ñ1ùÍ4Ý vP/jÜï…ÂL˜w¾r”#EÎ,‡r­²èÓcëlߟ$âÔkÆ‚ ¡ý=ËyâNX›ÄþbºfŠŽ¸‹·AK…f­ø¼Øtøs½ã³Fûh¼)#D_"2\¤•ÔÑûu»SÜâp9—íSÕVY°ÜœÎ¬ôw-*Ÿ k9Ž27ÿ òây¼Ž9ã§×ê­i;ã<_ôjÑÃÚ¢’¬5æšd«’Æê4P7Ü (ú‡A #ìÇ Öåž( (Éd¼2¸*Âÿ‰Æ€¥ˆw^ô]O^œ71M—.4Γڄó"–Ôż¯9‹5@}®Þ êÒ€0ˆ’ºªxèmî߬†”;ÚÔ&‘ƒ‚qH…l·_Áü¡È>§q¢ËG!;á‡ù(“îïþõ|ªMùÓó­rå`Ù ï$XMöʺë<ìü©ßÇx§“ž µ,ðÎ÷©²ÌWçúçSËÐWÅ/®u6Ø„¸‡‡—"ÆãøXQB7ÙzqL\ßÞ×qûf¬—þ›Ù»­I¶Í Ý€ìÀoò}É!‚€«3Nâª}h§(véAJÌ9Îëc qükZå»Ì˜ÌB*¥rë Ô=ÏS»Wk±Ó Í)=:Z™´ß±XT:<`öygh„€”ß7ºÁ­eë· GöxK ^}ô»²ÜJkø³Aœ¾aØä`2ý`º×™³ÕÍê×B²ºÏ±®!.â8Tc9Ôm¦¼´EÏRÏXÛö«âûB£/1¨¤øD5uC² RLÓ#ñå7ƒ(7Ü÷näêÆq$íž<™káŠ9åá«ü¿L#7>Á X(œ!×C’íl{~9B 0òïŒDo²9ßù‡úR–àŠå¶òRL zƒYý´_\E$Z¾Ò„mjdQx]–6L¨>4Ö(ÎÊè8˜=ÝžÐÅÌV%·…'°M¢B& ØmæGLw36 °fßàc)YHA†ò›ƒˆ-ž}mò:GêâòN äŸéµ “,)7ûÁêŽS!\Uƒ_ˆÓÀ{abzJQéCâ¹ÿÐq×.+“üU[él—å0 ‹kSwäÊBkˆÖdµ[âm1•ޱ ˜¬ÓD“yI(®ê°ŒÍÀ(sùùKGø¸° f€8Ì*×çzaÌ`Ù…¯ÚN—d?årŸM{Æø\V¿íJË$é ƒ%EË* 4ÑCìFÁ8›P¢¼?¨ø/“P _ÜjÓM¯€VVd¯è Kç=T@À×Ltÿ¯–ïr¹€âùYl5%eZ\PcÀû°P

zcïë¼Õ܈A¦7«¦oÖEØA…Òá]r •vFWÑÚ© +œÑQæeXºŸC18NŸ@+jþ#œºånµ;Âä8í¸¡“Œ®­oó…œëQáàÙž†5ÙqÙãÞ(ºõ(Qþ®e褮Œ,ã»5‹²;Y2åN ¦²‘Ʋ£hëŽÇ!þeøé²B¥ä­êÉe*j‚ÈÛ|:ìK=û¢ŠH¢AüBAå¹ÍÑÖÜ”|ñhœ:FC?öksNÈp‹ÜàeδÝx' ¨1vâéõQ@ZF‰Ù³`ÉÏKt!áð" D*c¤jœþ >Òiåõ•ú`:‡Rróàô`ôDÇö¦ÈgMj0JÎM¼SqR p›úÈÒ°¬‹¢£´ö’‡J†dÚ MééÌ<^E/½þ#öY¿)‚-tߌ5l>ngúW(#?»Ú£†¥êúËýÐ0yA^Ð4}íqÎd´*¨t=¾Œ¿r"#…RÄ ÿ–Öá%R‰¸œ4Âý GšsÎ[ø.8Šï‚g›]ªƒ=Š©¼8ÛAÌr)\CpïôÐâÚSΞZ\ú­àelŠ­ÿ`©‰9¿x÷ŸJ’– ç*)‡ ½û‹^®;F‘ƒø¹é!>0ãjg¥Vã[ˆ‚hgJ"n‰»ÛÛX¤¿®a?þ­E lNµˆIÍ¿Y…£…ث̬CÎ÷.èàÃq•Û€m»Þtti>%9½=Ñ«j/… ©q½–ûr•\iPÕ»´‡yR k&þÚêi1æ´Ùˆ61¸&wè caÈ\ü& ­ž¾w•©èIsß’‘!g™ýeܵ[šº.?l¶ƒ4ÂEZ:hJÍuÖ£ç0vfÆLƒâ–SòcfPÞ²•øùZ© °•¥EvÔµ}¼Â¼çc¶jQlfƒ ½ÖNVˆî½}¹aG[ö}YÖ²¸uÄ6©±ƒaPÄÚQ¦çú¬j;yôš×éÔ¸çñri“®ßÖçHzñWÜ®2JMLbœïSUSóJÒ> %â5O̳ÏÿÍÜ¡€~ˆ7aí„„‰ÜÃAµ-XÈ~El7Ôì`¡dÜå?¨˜~>ˆ*m™ˆ×€²d˜]xË©8f.¸0:v¬N¶Íl$Íq¦Paë‘ÖóÝþCþ8wíÞƒ]D ”æ}¨‹Û»\­èZ‹®Rñˆ+ù¿(gcîä˜fEÔ›Bª·ÛÔ—ëæíò¢ŒŒ­Ìè~½ôFœ[ñd]ìÁáˆq÷±׋Bˆ‡½ÿ&>mf#µL“}Cª?÷o #à©A£âZiO³m¢(¹¸¾¾{J3±h}ÚÿØ;îB3+­ç9hûUÆÙ¥–Q![ËÄñ¥È¥ i©éI‰ýä¼ôoŒr¶]f»î2M‘ròˆžd] BShû°w^«^$––r‡!|Q,tÄô)~§Ñ­Ž.AyzºG {RÕsŠì_p2ä¶§sºan¥Í—O¿/­j“ÐU–˜nfá’v£^Iaò?ö¬¥<…·’MÕ.¢vì“xãOÀ©ù,ßv$Ä zßYê[’OH'Fø•òèØâ•tYvÉä%A\“éÒ‹¶ýØ| ˆÙ"¢Ê•®8~ ,È•Þéc`¥‰ÎU)ØcÕ¡ãÂŤzÔF«ípEÚi‰]ò›¹dÆ2ó…VëX­Ó'ßAƒåÄCQÄÈãËQAàùšù³u¦³£¯‘-"­…sНºW 9*¯‰× ž¿ÊHÚ¦Më]ãHs$•GBÖ #×|ôè¶wÜÖ/)é¡)Ø4w{H!ž]c‡ÿ~O1³¬h§OÙs¨Û ž}¶[jæH/"­D’‡€ýLkA¬©€†˜­/'ùjì»{`kò_ðJð2\"5öÈ·}S­x„Ï´Rç~×~k:®M®Åa"Ö-N-GAmÕNit ¾Wï¦ü|·×FêgüýU É‚¢½ÏÏðº@ŸI?Rùs{ zÏæÎ~Y'X|*¿ÿG´æ¤½ªÔeW‘RP”Ù°fVtCÁüJêä,‚š‚¢dÝWd½çHß­_;u­¡²f#;årëÈ€”@¬GB2ý*túù-‡)ÿýA<Íém*ü\‰Ès9¹Ï* —ÝST»2ºUH$ØÔkdw¾yÞLù'øçh!öaŠöëü€¬óìnIÆ^‰À39@/Ü Ó=XG™ÃüÝMŠÔYÙšø‘,Õ³±¿,%ÂÒa§èrIµ˜2XæD«e3ÄÎN ÔpzzG²’Kk _%’º@ågS~T¼;ëÅ9§=’ñÁUŒïüÚi¥–'sÖÝGÀ¤>©Ì ¶`wâ^‹±%¥ÊvfÚúo÷Hýžñ¯½ša§ø¿IXŸP²ÍF‹‡ú±€äYöކƒ”/–íPAq©þðœ´yQÄ‹÷Tþd»¨˜IZåÏKÛ9ñņÀIㆿK…-óÌ­šÑ 4fÝàÐò0l»éía¢RâS{žºà7«-O°ŸÙñߦ ÃÒÆ#ÊŒr…åYJ0K-ÿõuü¸ö–]M%Ç;Ø0R¿×Òë(j…Š ŠQÓH·˜á3ˆ×áäœbrƒeíô¼Å I!µPa6 ®¼º¡„½L§ŸâˆSý¾Óæ·§W¥}÷TظpäËü‡.øò%jK¯–.–j],­™»ï°?Âùùª]Ì¥zîq€YÍàdº÷Ÿa Žÿ>.?ÏmLì.f/0Œ¯5ÒðiA\>­­Ú³†r—ýµœ7rX‚[¶‰~¿ýÌA>{äÆW‡sWAöšï€»ŸNtW[íg1B ª ÓTdãÅÒ*YЛ­þ sů€ÚÊ®^úÄ»‹ní«¿Œr‹¤LÒ¾~+?Æ|êÖˆZ Ã,Ø<’]ᥳ ¹çQJîQ¦Ë§uƒKk ÿúÛøË*Þz`\ߨV ´4¨5áMÊHVQ¸¿¿‡¼ˆ<¬àt€gÔj8J,MÛÌ¥|¬º‘ÚÚˆlƒ+þƒqÿ§Vâ33&½ŠùÍ4r‹Û,ž`r@HFuŠ–l£Pwd)ùÕ˜ì¬;åFà’$·%yöþ5ò‚êèMKÉG{åW[A»~›DzÛ,Òèd’ƒt£~s¬(Ãñ– >_ý.w€ðÕŽàdFÚ¡Ë ?[*œô«äZ‘è© —Ù)ySe¿X€ƒ6@|¿c“-™Z!·wŒ½ëáViÈ3òÚo§b/pç×Õ˜P/« ß¿»O9üÅ—²›Rxcòyä4ÑÓ'¹.h,ðûj3ÄÄb²ý…w•ÕÍç”…êŽÃëâš²íçecdŒ¾AMjÚ Ö|JÖ‘;vHüO ^ìºØíª0Ю¤‘+GX5+ºHH76 ›X1¬]Rt´ðü\„‘›@ã¥'Ѷ„±¨ÆV|{i">Ã%Ýë•Æ{\edc”="¶9ßP]xS‚ƒ|ºlßHe3âæSq/ ]ck1NÃxh>Óf’•Di¶‰YäîKÉq`åG*Ü+H V0KJ™^â]cµ­­ZÄ*B¦}yZ¸•PŸ"¦ ™Ý°PsCÇSÒÿ:Â?Wi<h­X›:UX™ÊX.¯êXHÃÃ{z»ìûį`Aì¤fQØCLö“ÿù°eOüeOII4D³6ûíi%§¡®E&…àÜA(ºY¾jÛÎÈUpD™?wO2o̳zÑ“J7L7>‘’ƒÍšÂ(ÚHž†h·àÐ_± ¾#\U…VÑž®ž’ ›ô| ´uOý'Ç´œ(ÕùvVzKøe®-^Æs\ åÑr*hM¥ÍEŽàŽÅS ×`’9^ÑHGé…RŽa¼Y*oœ‹Ôçâôv"6M¶Áydtî@¹’I,±Ç·ÈòÈìÎ<¤%µVrt¬OUxG›%‰²Ñu‰_×EzDûP®Ú{"N£º²ó7î›Â¸„LÅ]ªð_HÙ…8¬¬ Üa¯m¶À…šËf½Hpµˆ²&Ú!rHÿ ð<Öe¨?83¬hs5x£ñ/縛֌2Œtw£ÏwSÊ ¢Êb•À¸Gm«ãD¶ T“×28Ђ…z„=Ònô^tXQ–¢é¡¿‚³ªßP÷5TðZŠ^ ´Ó¼_òRè ‚$vßyî!;j­ë2ƒzeßOÕ*Eÿ_³µD˜).ž*ÿ`ÁrÍ sç ´s\$Ø ™ ÚŽ¢W^»J™eÎH3Ðê¿‹çWmf¢ùûe—µH¢¿ÂÖáO–ü|Tx$„ ]ÓM·ëª4¬´w°”Ã>€G6Z§Å© ½ ù½Ôvz}»æ<»‰ˆŽÁ'¡éÎûz‘þ¸v+ÛZuSTÂÔ¶ô‘.ÐYf–¹$ZËü}OºÒ]Ú(ß3°´Õð$B§ñxDÞt "|"ÐAÞëB;³x- ƒVsâõ1¡¼žŒë‰žk1õp¬5D¾tÝü+Ø´;vTç<³-Ë¢vêR²‘#ŒTíø ×=b»çJRnºÔ«hVƒy»ÑÍ×Ôºù$ažÚîï~ÆuÙòê&UŒ>î@~kst«û"ÜD¸Ê•%>žpð~`Ò‘äDG§n4 B\×^ü{L¨™ðœ†œ ŽûLIÁÞõå’͉<SÕ ¹ØÊe|êºM*—žbôÍÖ~¢¦ SÁIЖîC(…òXC˜›¦›bè¸e˜Ïî Eº}ßä–¨ =ÌXÂ¥J†NÏV™´‘à¡õ7:K^S>ã¤áŠϘÞ`ÈtñªT!tßifº"¼Z#åíO¶þŸàçXíT¯ÿxÚl”U€PÅB)·ªÜ¬ü'#rð-Ñ{¼œ«ÒköïÍß"ÛõÀð”䙳wesvÒ‡óûÎ ž2MO±Æ¦>óìÁÁD€w·èLk Ñé”&ï;!"‚ìíô93B•‹SÜÊÆeê&cà—¥ÿNšÄ”GecŽ'¬Î(~`€¼"‡ÅkÍßnLˆ‡¤g`|¥Ohïó³9”ÖPæžk¼[ˆBå€J‹èfÇ+¯% k± ñŸº@‡v˪­Š¯Ä[ðõ¥½\ZE››YÈYÊ–á1Z’QÕš”0ž ˜¨%v°Ú8—ª­­ƒð¢4fMø q@t¿:S« ¨ÛŠ­{®Èï¨6¸݈î¡v²Ò$¢u¾=’93ÈÔÀÅn)I›ýݽo8è -Õ!Ë{vƒ‚º‘ü<©î#„í6ùÞ Hl¾¡Y"c4Þ‚àùšÇÂR•@ƒt B±ãwÛªô67>wÝÈÏ“Ã^ý4Àñ>˜ûÀººìågÿF•‹r]$Ê™È@c Åϸ‹ÏA§²¾:†MÖ8á;óåÖÞ+ØÊ^pÿÑLßBüìØÜÒ FÕ ö˜‡{[8‚F„¾í%zåt<µó_>S:zÙúš/”5‰\*.@²äFð·]¦øLÚŒhF6£G?WÛX¥pºÈDÊj£Ÿ‡wßê¥ÖB-½Õ-ýcä6­Þhê‰ ÷ð7>I|ÿ¿—†bÀ©‚Ñ~ÎèúF`‘¿x²·$EŽÞzÀé` ½_F×)gs‚ 8YäÝuŸ“1Ùžàz\t2Árò„"vµ_î`«¤ÜD²6AÔ»7‘ ÜÆ S\ ’¨„å%É!èÖ;zx¥ÎÜKZ¡½|‚ñ§µØmÔ½™ØµŠ»þ¦·WÐ ›Fô«Ø`†jêÛn 7i°ú'5}FÚ6J[a×ýãk“/…`;Щäh¦÷ô× Š™Ç]e§/ѱɉ¾:ÑÏüwҪDZ+‰²pí‰ÌMƒyzÙi’—|Fßá'þÿ[D‰ ý¾ðw]ˆ%Á!p¹bÑðÑÇ d®À‘:¿ê$åq¹3”ßzb­+Å{%ç>­ º}o:XùAÖ CÓ®ÊSÁGìâq®¨–f-€}í,÷¡*qÉ/qƒ¤ƒv€åÛ{¢;SnW (×Kú#ûå>kÀ½¸Í 2÷šÊ_lh Ì€ý5¶:} ;ÿ¯ÉÎiž°Guâ«ØÒ”¥6—ðòC ;`I˜ÏÏýQâ…ÐÏÖ$ºJkCá3™fÎ4ý%[|§«;¦Ê¿¥)³ù’l‰íãHØ?skþüÑŠäÑœÄ-¶&­·_ÈC£Ü8-&ßXq#wƒÕ 3m}V‰¹Ûåæú€aoN‘‡…}ÔDèú­ð’µºþÂ2ÞTƒüÛf><§pK ®t2tÁmº4´û@\kéPKaí­µo2ÿNn@ÀÙlÀ¶ùß™iy«a[n‹FK”‚d¥™?Ç9P²Ì8ë 6ïH»”­„ƒáUïþ[#Êꮵˆú^µÆçP{¸_R$¹_”ˆRÞt' €ú ú#s­T¬¡LŸb»f5aWN@/ÕÎX.¡þÇSc\Íä—½tšVÜIuê:%nû0…Ù 6ºgnõ¯ÂgÌ•—*ä¯ÿnl¡âÀ¬Í[å}ŸšàPpѦ=:Í„÷`³j5Üå*}bS@a…ˆ¨‰›£–Ø`dب1hc¼R²h¶U†AÏç¯":~š½U ÏKXåDÒ}¹íÇžÔPlBÌæÒtùü~IX0C“»ÓgºV‘ |6¯(C„#W/{´uÛLÞév9칯F»¯'yèöøA@àMâñȶqn±*HÀ9I:-ÑÁ.˜Üä3ùÿŠ%Ø;‹ÔÝv >¡æ6ªG$PF»=ø[3-´ ßMéÎæ˜1ÈöË\ª]ãMÉ*r5mÏx”ª(ÉÔº‚ó¸ä ËµV˜EÿYJ 4ÈE½²âcñG?×µKÕàwPž+ RQZɸrÉ5=-TŽÈ+ ÀÝ-ˆ„ù ÝÉ冯¥ÄÝ“tï¾ÝÙ5e6O¶ýÞ›¤$í©½Îjk´•!ÆîÔ”'qÚIÖ³‚¿°ÉfÓº¯W¦ Ñ¿ #[°#ùÂ/ÅcÝa@Y§iÿvF2»lú«öØïDTto²k= ,e½[kùÊ<ƒ #-é‹ tì‡þÌÍ&TÆ^ÿxýE„´îP«ƒ8ÝN‘ÉyãþN·4q1QnTºðå¬ã¬Á:áµÖ,I‹ØЭËb$-ñ›l‹ûû IRƒ„\aêQÞŒY9€aw¶;pž¹çö’öZH¢cH+§ep%’Sù®S*‡ ЍuéȪ~ÕA¶G5ŠI€ÞCQDÇ’KÄÉïû‰¡3¾ Ü«â®Iªo=ŠuEÓ Ƶ³Sk)ØOq×¾“ãôâ&´,n8‡¤9ˆÔ84ûˆrì$GdRä%@ Ò¸"£&¢„Í,E°(ÏÈS[AB—ú#Ši6ŽÝ%êÞÔË]\ÕMå÷ï1‰ÈŒ(ŒV&Þ#XcÚaÔøª´cŸê8ëœ^è–¦¤O¦ûñ¾²²ÒÂ%"+!át «Xqå6¼˜])QÚµyËÏMª¢-M’L™¡qØî{l"²C ãØ¥eöµÔÓüyZ0Y”£‰Ó<Åÿtïé8¾=¬CÙàáƒi%N4¼à¸ÔÜŽrµ‰à=vÈžœDcýhv1Q&%×P°-Ý-ƒŽŽÝ0镨P î2;î˯N¦¼o˜,É›GŽÛZþœ_%m™Ñw!ºöƒJ€¬¤,ÌÌñáZGö8¤¢¤Gfô Âxu)ܳe'ÐL¨läƒÐã‘#@ó±ŠtdY” ¥ÕM1(?Ô?^]¨ ÉîÂ!f'f NN^ÿB̆p|ä…”?»E_ó³|Ÿ¦/õçUwOÆ–Ð6ÐX¨ýƒyñ²Àçí}_²Éû]ùñån°N•@?CY1ìÁytþª˜|wÆGn$yïàn0(p¹ÐJèéÂè?ý !–±€aÒPó¾óZG§„ŒJ‡ùÉq–Mg?ôïL´5ûà¿ÆB‰.ÖpÓ=w,K»Ñ„T­H͈Ê5ªá-ŽDÕó/BTìÆ¢½ ]"nììÝèM <ù@³“PõðI+€ërª[¿cÞìÇK³Ç#®}ä¤ÈûÑÅ-á›|ÈL6hŸš›ž‰\ö~«ßÁrmýQ •Z‰U…Žtcp­¹¡»M\Þoâ\«IR™ÛqøM$öQ`–{Éów©ÐÏimIQ›µ–€ª×qÓ¯ÛJ;òïV¦*rÚuÇÞ—ul;Ô6Š~þÃnB7ÂG‚?yB†üKš)¥ þAéŠøü0-´ƒ²s Þd·LS¹æU×|½ÀP–A(*æV~€h è²°4 „E±k ³‡Ø+œcT%Û'ц©¯š—2`)PšÒR΋ʦ2÷g¯0À¿²“{L–Î(Ë®Ÿ¸m°&²×ÏÍ©j9q´ÁÓ´Û”OÒ,êôÁ_ßz1APýPh{éVWQÇ&F¬bA\oÄÕ;¬ÃÙåÎæäõq³ýˆìÃ\_ëEx*@L&MïotÁÜ~¹²þ)ç‚ZÙº}ý£û ‹*ø _1BuÚŠ{&R æí0wÔ‘a“ÙÕ§§bQÍý(FùVlñ Ƀàš6éJ]×í:Þf¸¦›4‡j9vý§DäÆxݼ²Óã{ÜÇÓ?.Aoƒ-* ¶2K¢f{‹sЬ•L{sÉ\`U2G-禬#[cñv¯nó3<Ã2ÕºAö°á/g±Ÿ.Î#xs¦s®ž¾L ±ò×9QÛ€‚¨®”ÛL¨¬z=Î…‹9)åïça¦SÈ“½Ìðx«9@nW•aÑOÛ¸ä0’òÃn,é‹IJÍ[ꄞMx~Ã8*­»Ðõ@UV,I)û¤… ¦6=»ç\‰™°á"'%Û«MúæÕ·_c§ÓmVˆM­ÙœŒõAª¸É¬¬6OS(ú^| HüëÖ*Mço(…}+·!VÚw{ï‚ã›\ì2s¥¡žHÌ‘¥r“™…\Ò!Wl€ö`2ÿ2gØFŒ’’³ÎƦ¯ôWôŒ¾ÿy‰½Îp"‡$ª eªm9W7ŽæÜª6Ž»Ÿ‹ðµn+ÉHü&Ú(T#†;oOÖ/-ן,‚MOvZݤ£±©ð¦Gòõ”«¡È8ãÒuPïH\“È`ân½` ýÿO dªmßSo—#×Úi}ú\c¤ëµèðE–‡%=èŸä±—!}‘bZl+¢P¶ÌDÛ$&Òßi>6@@l*5öy˜3  ½ûA9kÒ.`)yº>Ç… “0ì¸Ú,¤jÓU¡NÌy]¾4AÔÒS¯i â|‘œ›/°µzÏé¹ðƒ!£û««àr@ö“I¸¶ÈÕwE~<àF¾¤áÉt¹ÔÑâh࿚¾3^Rº§vŒHŠClF®5Xäs'yÙßÁEåµ8Í•%å‰+Mžã··á-#5Šô¹…ަó¿U´ZĘ‚áˆÃ1ýwß™€iŠiƒñ¥©ŸdŽö%NîwÓ[(êç6ñiQ°!ë2~0(ùÍ™¶m¢VÌ QïTÇø@ǂקÏY”=e !-¸€]Eï€~Û.Ç·¾Toí`8©„Ô1BK|³Š\#ñ@ Sê¬wXŽl“Æb«<‡°¬ýW³`Ç™)æ¥'³Aå3]ÂdÑC÷b5B5–kWƒmÞ³@vl@“Vt5íy9>šyyÝ„Ðusî f ¶^n+~2Ir>ÚÁzÞMŽLðXcˆx¼‹Mã'’?r©ý%`O/h|0^<^VõgȾ jA.¶P!ÔNòÈœe‰<ØŠä¥1v'›'™8^î´¶²u¥ŒÔ€ZhÖ¬“ï,M8•zY;ÅÜäÔÜM‚ŽÎØvLåhÝ/Ö˜#¶çsœ{·€TÓÂ^ê®%"Ô%îÒ_lk×Ëíc6e= œ ™¡Ë ‰nÙ}DUa¶vÚœ»fqìë$¾Xæ,,ñ(c%Í)¦‹&`Œ^¢L 1Z-Ù™}w\m ˜çª“ nÚ–À ΆéxÓR,‰v‹+ëMdµ<˜9‚¨íqµ.¾Ìƒføo¾[Øa%ä?äöܾï…Q…ƶ„ý{ôùÞ·ÛáI¿Lòƒ;À:©±áþ$L¼i¶c~S¹^dÐtåìsüÏ!—l´™Êx¹*œr%ÈZò@éSõŒD'±PµÕ@¤!°« Ð²[:fb™ ’à »57c þ|pïEÀ¬3œ/©nº+šÆ>CŽ•¤÷¬‡õîM252AûÔCðÂ&ÌÍò…㯸߇umtr˜ÿúBfàkU¡TôR±1áµ²!Êmz ›p®K¾Ô±¥wI#œà ÿ¾ëÛN¼&ŇÕ÷IWcF{S¢·fñs ÌøUK!ò$5®Œ2za‡`i²ãªÂШöiŒ–½Ÿ#ÛE¹Ï±—¡¾ãÍá å^Ö¾`6iªˆ6”y½¯e",óüƒîö Ò”Éûòœ¦whW|Ÿ¯z¬*!ä¶ï$cŒ+}3å3D›Y¢]Œ³jyz›ÚØ5¯ò‰ ™œ´m YZÊ£×’7P‘Éžv'n-ŠÐ/žkèÀ*eèó¨=¡ü<ë—fe¦€æEøÅvrÚ22üóÄeætiÂ'0•¢¤¶~Ú(«øgO2í‚AXç¡n™7JÚ§lÜq׆ÄÃ5u®2ò ]wøÌ=^š“rN\i%n¸Ó˼Â:Ãð+>À±=¡²–JÒá9Ú*«b£·IH3«Š0¦¤ÝÖ‡_¦.D묣Òm<Ò?T‚Ä ·^w†€œêú9“ÔíNNu›J,Ö’üO.Kc5Áo6ã䓬÷L!b8!îŠy)¹Ó"÷Ké“ m-iÛÁëa ÷%ûÏ9Ûí~ÃÊ÷,;j4/a ˆq‘hÔD‚•W6Árg¯s5Chéª$”+ؤ$̪ŠÝŸy·’SK•èÛ—²æz˜Ê"lðúÏ®$¦€1@ã& h꣖ØåË—U†¾(Ó>$¾ŽÌžšÈ5ÆŠ§±”Në;£š¼x¿zžÿ jüiøOS9«äµhôC†6玩Òº Ñ¿Ä{ Â\íМñá#nºgðŠ^íP†Ó¬J8f²®þÚÊm¾qDêk;£\,5{Æ%ÒŽ’6HÄR+›T„yˆ4+ JÿòîòÑÖÚ¿¦ ™Ô‹Êed8’D<ÕjÓõ!uúI< ´…û;¿u$rísT‡çVñS?Ã# Æš’fl:œ£%Wôëô²ïŽGhdˆ’#bˉ.­Øó³œª ÿÇÓçÎgY_£!}H°çõ”~Gcm_ÄfS2Œ Ê–¤x€6DêžÑåÆóî¢À¶¬Ghªü§mΨöÕe:Â7hÔ²•û9·¸A@yš¢s·6u}Ιwˇ/?—¶^ÌARßïÖ—ñR%†½Å®7w5¿[ó P÷ˆŠõ¢ú½ ÀöÝõǨš~Öà¸Um§¹•*ei«tºï~Ëwmíó­F­J°ÒÅPЇñ»EåÄéKæ “ÝHñ«3Äõ¾AŒbßö_¾…'½C9!rI¾†ÁžÚù‚½JŸÈ¼–n±/Õøë3Z˜eoŽüÓe“~%>#!è/¤‰¸-›cF}.†v3ÝíÔªôúÑ£ (eÏwk—ŒŒ´ŒéZˆ¬8•)†ÜØŽw*} HÊV+²¬^bÉÕ mY[qᯕ£íN–CN“>¾¦Ì¾FiäðRrú¡¸zQI¥¬Öñv^ñÏbù dµ¥ï¥‹S[¬Àóµ1Á’ä14@ (¶Ýàps"QZMÖüax^~Q*×g“¬‰ð‡?®ÈEÇ+PiÀÞy u{~Oô„i_rñHG¾Ð°CÕ»÷ V'3/$l"®ö]®ñĨ#…ŒX¹ðu gÞ¶¡MË}k¨7¯i/„WUŒà×c¢BŸv ‚CeXále-ð–¤âÜÂ/(FuËí Qá™ÂÌPX…“~hˆ}t&jTB¢K_D ±7.àKe!ën[úHaðãW8‹‰VCâÅ¥Ñ]§Gè¡iÇVÖe'Á’nè[n— ÖUD%ô’È…û%æÉ‚’©¤ÒìJêrÍ[y•RdÎr®eÒó³Þœ—ŽÆû¾M¡¾¸p±þéI(Sº6>ѺGñâæ8ZÎ}pQýï‘é£ýx®îŽ­#ÑV]ô®õC«î’OÐɰ཰èò¥c.º–"~G5­…Ð9´‚Õò¿ ø°_û Ä5©–†Œ!ÅÌMÏÃ…¶È;yÿ6² lwt Ácia¥Á@¢ù¦Ny·¬3Wd™žü:£2æW(F§îPxƒ ÷0XçCÇîå{ò:‰$PbœÐv‘Ç›:f6¹.!J:I˜RTñ}þÄÉwqÌ ÔÔ݈t="ŽùÔ¬~ƒ„Ðâ6Ô…Ñâ©í?ÓÖË›þ˜H«Á9;o8gšÏ(¸ìyG×IHž–À^»ïÑb›åå7„‡Ýjã ëxn€gZÕ#o OÿbX¯ôµ½dÝ—D9Isô^…g§¾Q´ ,èõ]è`T‹„¤¤pSKÝ9G‰•~œÐoþ`öw…Èä0—dÜq> 9pÑ S"8·ƒ'}ÁZ{dÓU)ñ§÷wì‰ÃÉéNjÀ"™âmüéaGÏE,KÕ™ú21¿ÖºÎ àFÉút[†¿Õªk‡ÓZ“)ÒZm6ƨ=%g¸µËŠ+äD-06(¯¾ ä«È{ŒZtJ ILcºxˆ:SHª™Sþ“Ü,¹tÝñ~œ L7ç|z$9v¼6nà=ú”W"Qà!ß‘ð·SÖU£Ed ±ó‡à¯Nb瞨FÙ¼é‚ï»9`f~xRmñ´íù” 軼kjq ŽXgJ3HÉÓ{E½³™÷e‹ó½:5PÄÕ)iñ4¥'”ìÓÞ&eæ?oWr,¥%w];š‘?_OyÞ¾ \ζw‰9K9ãš5ŠIû¶Åµ˜Äg‹AÁ=±-€ÙÇÜ`^_óÑ0á?¨4m‘klgŒS8ç·61# üoσ,âymÒÉ7yº¡š TÿÕJõÚO!jsuA›D)Ó‚Æÿïõ½œÑg¯L`2ùõ"ð‚U7X/Êmϰ=[ ýMTäÉßÐW:‰Ò~¥è¬Yå?(·(ÙUÒh 'gü' YkbxÞ™aPëƒ{¡¢NdWü”E6Í­hŒÕN7a^â•&Ö°&Gã^`N)õô¢Í£6:wÀ7«gYà ‘Tв¥Ûti›–k„¸¨Ï…;n0Pïà;ñk†‚d ¥&›.ï6èPÂÅÑß_Ù•sc÷àûI†c¹ƒªé\fP¥¿^¶4møÅX¶a¶3wÐ ·5:½A¾OIÆä©£RÄ<²^ÝÊ­ŠÆˆŸkàñ,„5°ùÊ f‡š”`·á éLû 'Ñ+Z(\ BË]_·×7?+òì{ ø›p82 G¶ßÏ"dAÔÕÀèX¯h\F:É›ôæ‰> [‚Ô®1âŸu€wÍ.wÞ£raéÇ/, ±ÅHÁÓãÒm¾®Þ!âtÚªóŸÜçýVQ.‡’ U3íÕÖEÙKCß øÍ­Å“£æXŠp¹ÎO2~mò '•¿¾¶‰IqKªËoˆMÝœÇh–ÉÒÎKFÏ» ˜Û­do¾³ú¶Zo¼7<7Çn€sOn+€l¯Ì±À¬˜u,Xê6¨¸=Î]¢ø âV®? žo}ÿM†9¼^ìº$£ŒTÕìÇuü+þ~4ýhž>¢o™¨aê:Ð#:ô{Q+ÿÀsæ6eãJiIL¢V}·­çñGÔªŸw$'f&›iµCúc„:ó!ºtÒQKžr:·LdÌŸo¯Ræ7ÔAî…DJÝŸ¾~Î6ÁÚM!Ç6™çö¥c—Á¢"+ © ·Pwºj½“i±Ì[K&›“¡Ê%¡¹[€´­äøe?Æ.¼—µêU©ÏSŒš(V7w‘7.Å+Á  ]µµ.2“5WEšOãZÜþJ&éHlžb#cïŸ7ó.ÛÐÒØaåwÅT¥ÑZu¾è#*N‹WFHÜ^ƒïÿNbàþ¢ç¤‹<}Ë¡|µ¾0$«\ÑÃI¨¾lþ{®Ò?:–Û´óïÆ>êülºûØ:;ß=»ÉöhÍÅ„^ñÀXFßiÞéŒÃR¸Òž_í¶Çir++_r=ú570t)ƒÞš ,Ï —z@};K&ëÓ/¶TÆ©K‚4¨™M³Åõ‰CÇì<«™<‹Å9›FÂÈ)6›G¼ÄîÂÈO‰f Nb]@™µj ‹jñ–eë ¨œë1D8[á~È Á„ jð|"¶ÆÏÇÕÑ"w³%Ÿ‘ ­Ô¹­ôì훃ÃXãŤ3‹§*MnO ²gÈís- TRª^“í÷ *†~ T¶æç£_}ý?¥%Ê ±Ë‘¹¸Ö#¹ûìÙNs<íkì[%öµûÇ„|*©Æ¾cˆŽK§ûŒcr@¡(IŠ/ìhò?sÉ´‡zN»ð³uzfì]C#±d^è©-Ý'p˜o‚–¼{„aè)w<+ûï„ÜÒÒ–\LâbŽÞ¾ö æxšíäÌ wV#1 ×H«s†å/¯’êtwå&eòÝÞ^ºÈ™‡L“@¾9Q^UŠïž0ëŒÑä£~FGgÞ¨;©ÑòOnx”çzöñµË–È+½„gžûu7u%#/2Î,ÈÕj’òYÚß› áé2àòÇè!V¶=|—çæÂot˜ÁŽž ͈h`¯€e¸0ݰÂ5§pDCÀAç#xÄí˜â¤*Í6 ‹ªß„Ö~®ýY´iõ»¾u~,ŸàžOª+§Aau h)&Èe“ž #èOCD×.’CsïÐ÷ONÄvë«áVÆm ªP"0ˆë9Êè- 8RUøÑgiÇ6Ø›¾üÆÞ“=!ÕNc@BTšp‚Z´ÇÆ-øÁ&JÆÜü¼+6tÿÌcóÜLR¶QãW~ƒ³òë_¨z wàV@-‚@{Zà¿-~¹\nx'HÑ‘ÖE♊ à ð£µlu¨[éàškÖ`  9`ŸÜˆ¨˜æP5§ám"ËÚ‹M7w¦ë%Mò@åÛw+bq[Xíhbÿ­F›ƒÐÙß©Cå®BγÜCYyU¤jñ@Ê$чgòªºpC]%>~c]wêÙÕ¬]Ò‰WáØ–GIâÉjDV#‡srØ3÷RŒ°°fÁPûЗ­ÁqøÕ^ÚÌ^½CH9mI• ªMz%Ý£FkH¨àB,¡RšTwù冎[Å&âC€Ø¾”*_ž #JA cjiÒÉ-¸ïH©syDDPž ®M091!Ø<õkŒƒ)uò#A­©ùŠlri1û¹û\Èä-0xŽƒÀ í­ƒïð`issßd¯3Ûoðl€²É)Á$õjf8´¸Æ8Í5•:;Ѳ$pµ˜Ó=:rkG:˜áUoPˆRÍùçÕh–_K$º¤^’G¬¨ívӳ׌þáÏšÜC>J)ŽÚ·{Ó¦ÍAõQTÖËS„«¿´ÈÖG’-ZnžlšÍùYkómæÏS£[R?wÜ uWÆœ€i§QÝ‹ƒþ4ÓQLxþ9§ÉïÆâ»¼jÇžª^E–è^«Õ:õpèaIµCS-‹¯Ý}—ª5o#µ±Î’N™G„äg¦XÓ†¬ò\Ž:lþ{ÚØÀ}éùr`”»”QA¸/!§\E‡gðÔœ‰¨¥‹4éÈrÙµUÏÐY°AÃÙ$}/K~ëÒŠkqó]üÐ"„ÖÞi=hÀé—&mÖÉ ˆßOwllÊ‚“ý-[—­Sp×,½šGiËP‰ÍÐàµßÿ*¿Œvþá㘑*¢ÄžÝ"_cµm½û„UÚêTV‰àfŒ‡.ºB£p‚^Æöߘmì„Ù@—­ÝÑ6"áôx׋+ºàŠ|JÏóòìv'‘6¬Õ0jp oöù¾K¯·´»Ü( f—êZååõu˜eòÊw1 œñ€Å𘘬}c:^[Tþ¥QiáRY븘 öð/?U€L ²  æƒ[ÓçÙóÞR8ÀräÆÛ ÿH×KB[A`OAúB>žA{ຳØT°Á4‹þû•dÅìsÊxk#—1‰¢¥0§u•°äñ7ãýÁxEûZ¡.Tßç¦$·”Çù0ÛÁ1š³¶ãÅ™ñ¦O%R`×l3¶è’Ã!áqc»¡3“G;l¬Î"5|æðƒÅœse¦—-[Ãêr±Qˆ Ís:v‘öòaáÉ®T,ò³¹ý@I;WσBȼ¼î".l/ÓW,…o7øØU UV‹A­ªZL•®"Pj¯§ëØ&Ve¹Çš)Š‘FP#¨îW­ïKªYĬò]öÏp´’;u°uy>HÐ68;–Tya9û æV¯Ùb•à ¹…à0ø¯ÛŸ´Ï7¢ˆÌð]Ç*·Re6…%û ¥‰Ö“ñ¹^³M&€¸˜×ͯ7,_-{‰Ó¹• ß/ã÷Ê®¼ ¾Žÿ‹§ÃóäËÔ 5(¸ºyÁºg,%mPyMͪZ¸ÇÓŒBß$g³pëdµ ~á«’³Jß0˜½Ø„GlÝLD€œ>y/e<ÙÌGHYÕ,šnÈ€mõèç¶Ð‹À±‚83×b.¥,ð-ò¡-ð¨ÝË”çAoŸ ølïí鱬ÌýüÕ.ùÍ2 KìmbzžjpÁ¢ì‡NødŽa•äðJBhùÚ¢£.ÎIÇýVI?VñxÍò¦„­Ç}TËÕç¹ø€ÅÞ‡ß7„Éz’ŽŒöE53V'‘ADº oÙ–’ÕvíÒ¤¼L¸¦i‚œôÁ×eúš‹‚”á›ÖÜ~ÄWéCdDžä÷ßêL-‘²œ¾±¬˜ï|·0¡3«6D §VóÈ”ñÏÑ!`Æì¼Z;J:7ûÊ3úVáÔ•(¶å£¥2æ¢×žd§yò.È‘ü–ITó–ÐEBúLÆIS‰Ÿçú¡¢ÄZÇlñ=hèEò‹ÔGÆŠ:Á%‚²ä–¡n­ÿž}}@ã Gq)=iÏÓ–=÷ˆ ",iÃÆakOGõKóñßàNÕ·qIÕŒ{dö69Áa)\Uëa•á`½š¼ éllïkhàÐxŒä#Pê‹èf> u«f¯qi˜—R%pÚ•O³à×µøë¡.L~°×ìpB*–úæ ÿ¼•ÕÿêÄU2LÑéd£ˆbïl‰IÕVF t=• Ã!Ùl‘6„eðÜB'>hêû”vÍð5ÌÝþ•×Þý¶P…ÑÅÒÂ-“󢡃©¥eÓ«'‘E¯ûß{RÆF4¡éö´|zðš®÷ó޻߼éVbXb[|E ž›À9pŒ ^‚¿Œab|M,Cí5x×(”(ì ø¯:—A {Åì3ó •ÙHÞ !,”¼ [™:qEX Vü…óLüêk:Ë™gÜl=¨À<_øñ'—Æyß7í´:mÔ6'¤ß± ®xR#åxnµãgTj& ÒÂ,Ía?DÈ1¦ÿà\1|–z1w>Õæm§šà‰éö?!½É€%«„!\wͱ‚2v‘ÐQ¥·¦»V> Žî£Û«¯ ðj¾ –€½ SË(–OžÂR>ø*ÊnÛ+`üØ.Hî9u"$ÇÏö®Ø5`Ïyj(‰6gÚìXn£iIèÚâé*ØGzbiÀ°åÉiZ_G]Œé•ç_ Õ û·ºd›Qþ]ôt•…˼A±G Ì.Ô@ž¡†RÌ9Ø~x<ý…uŸïVÍß> 2eü'h‰‰ÄuÅ 4ÿÛ§˜å–añË•°ÕAÀÖ‹÷MðÖŒkć—íÀü‰BìÝö’! »#'°=x‹²’ÔeèÓ^ucšˆ7·î³$~qbƧȅߛÅ÷"cKGèÇÔ‹CÍ­·ÂêùsB­à‘Ó×™ª¿H§ X¦»éH'/¹ØÈBìAÖ@½õõf ÿ½”O¦e0C9£áõ4¬;©ö£d-¦.xиMya1€žoæWP°£$0Þ?vJðQæH¿ÎCœcjDCIêÂbUF¤YK¡3“æÄÓ4Ý­õ—£,?ÙÇMȉÚHrÈ(Mybs“eÂM#Wvö†¦ÑØõV½XG€Ý†â¼|1E‰:îqT >çëù0£æVHW«'duu|H؈'VL+î &ç ¶ó%2C¢Moàò6Å=˜l_º-,6%{u˜š·á»Dªa˜%FôòòvRÛÂ֮ܳë²Æ¸Õ+ssŠØ†¸÷Ú (;?gä/—ýAÀLr?´»gQ‹£[í–é§ù$»¡Eó9"f«>}§ Ì„0m´w§$B« [`ã_Z›æ•k##‘ÿÊø(¾i”BòïBÄŒ7Ñ…p€Ê?Ul2ì|u¾:ØVpïS½óïù¼[ƒ´õgô;:Á½â¼Gš^9¾#ø–Qá_&)¶ÉB+kϦ8 oT O)\è1D„skõuEP´ÌQŒÒÓcIF$ƒZÛ¾s!"u5(Ý¥:™Ü“Ð9†N¨JβrÉ2Ú뿜µ<»˜×Ôs«ƒÚ´¡ `¡zˆÅäÅ\…lÖUhW°ÑîWªQzèáT]O]ÂG0 dâAÝ<Ç$ûZA*:P”Ô™r|dóÎrr‘| Ýñ˜ãÊàG™ëe“>¨Àw¢÷9[2ÇžŒ*ž.Ë4ëÇ'…˜ÀbÒ}ر«RÙª¦e­ßÒ—2ÇA¶ôuκáÅ­¿Žt´ ´)Aw´.žÚöM;Õ2ù^³“×O%Þ(Öw¾ÓZ„¶ HŸ¼ç.ÕÇÕ( ö!@àéYù[^êÆÿ5†€vlB‘îYo¥Á„út>’¹£;õ¤Ì|®kì!ßÑòîÂtò åJá@cŒKÉNÁÅÖJ˜³¨š?*ÊüÙ4sÜM®a(¿«züg”½)OuS0:^K‘ºxœBû1/(Ý芈øsKõÑ6–f±Ë¥‰bUx«íû1óâ.Ô:!fꔃþôïÜ#ŒQëÓN·šC†þ1ìÆÂ†¯šåÚMÉnÅð‰‰OÇ×㌱ÿˆZËÑ_‹/½î5RöŽlEŽŠôÂB j«n‹þœ»yƒãym;¦Ä ÆÚ"˜Â³ù¤ #*(ÀF¾Yçñ&À{–® Êó« ”ìc8¼ÍÆïk࢛J¨zÙÈ‘u:»3‹¹"T[a âÜVvì$àڻ܂Ÿ°°,Ú÷Rä¿…%²‰oûE„|Š•U6bÕ¯¯S¹C½¯’¶$XÌ[䨑c\™Jh°R$“lÂqAäGèï5"@*ÏT¡ãºI•S¿`Bñ vš)QÃü–]ÑzAçë«wuüèi5Þ|+ãZo¤OK¾ÿŸÈ<ç‰ë·H/¼ ‘²¬ ÀGâ _âDàbáBǦÁl!¾”Ú4ÔƒH唪à–{¢™}ÿuJ:xü_~ï>Lª¿ÀùäŠbxö‚Ý0H‰>Jœ›Äg©Y×ØÎ 8] Î¥ÂÍ# { èî¤ý´Ü à :ÓÒ¦l¿¹¥éˆwKÌ { ®:=ü7šhÇs~¥žúƒ1¥(Ïý:dÜï?<÷¢”¾È¸v[5j`‡ÚŠ$á{eÐç½wòÍ¡çÂ$Ó ‘Ù“×ßy–5òh†(õÊz<ÄÃl²¯ÕóáBÄãqO©çm¼ã‘5†¡@±ç Z¨×,ÛýŽo¢àiÎN‹HQË›–Q*[6,÷Ûà3øñ%?ìÚ/ÛLôXm££­Àø©Ü˜‹™ºÊßÿ6¶ƒ6á•ȳVǘ.ü2 ,ÜÖˆøIOlû„¨*LvX½OÎþ„#Á»óÉoz¿Œ)Ôÿmr ªèc/¨áÝCÍOkÓ[VÐ}dUâA5 š’Vç[Ÿþ¨äñ6^.©â0ì=¦ ú|8ëbÖxM„Ž ¢ö‰#K€Ôú2ù<µD2§‚ß‹ÆmL ýÒ °Bm*”qRBµŽ×7!¬Õ`‡Æ~ýÇúõ7êbiÏɵõ2ÒüÖ ®Í«Rc ÁÙ YÍû–B¬š0û‡m2èƒí‰,«£Jq·v§Aæ,qêh|uOPÎÀc×ãØÌÊA8Ù­K-Ë„¼%*ðQª4Uï´°î pwh©Â‘™Q=ÀC[ÅiàœU,^jÈÞNC{.“#W‡[Ö[NíV•aM5ÊJ¥ÚéägßœÞ|¸Àz¤¿Ã–µ†]qf»÷@µ”5géóˆ‹öâïOß· …–¡ÀFk–³üöæoÖŸE¤fŒÉxÛ uHå^ô4Ínþ°ðzýRuÝy¤×ùDMåßÀr¡!ð1<ÎL'%e‰à”(,ßöåüPÖfзÝ\—ùãâ‹ú÷¤â ]cN'æ"²ò¡O8P·ÎÚÐVcó*é×£.ÞPÛ±d£à€×A¥¨¹eì²jn¯xüÞéç׉ʢ1KÝ+ßÛL'h‰’}ˆÔf‚å<œ™gF€¼mÈ`ÇÓ-C5ƒnhWú>Zç¥?U[WôózÑ[º‡<þS$o'mª©C*g3$lºù`£ðªÂ»G%ø@Œ ¹d3*ÑBƒk³ ¯×ôrN¹ÿdI¸c¯âSJÖøwâ¹#ßGߥâ+hŠþ»´õæ§)_0êýIÈ*ɈÌ8Ôƒ…úâ/â‹ÚÑI«R&ã6ÿ5õ‰Ÿ)È/°9hV²?¬Uè³M)a•˜LC 3U$j¼ ‹ëEóÍÊc†å UÀ—¢`;Ææ–{Œ¢Ó6lDBåáN¿k‘¬¹Èi[ÉÏLÙ«µ†y™Û¥:áÄKbÅ‘ráRB  )b#‘0ñ¹C å=X<^™þî¶ëÑŸ‚es;­®ÈÉѯ uKõðB›(ÿ$N)ÐDÅóŠãvZ¦Á˜û‰ŠiÖý/2¿qßxŒ9FÖ¸µ:'¹ g‹€Ð9[ýXƒb’<Úcп{µ½o†YH0¡†Î%Òx5ÎÕBeÜÄQB¡†gè¶«DHÝ2‹«`¿V^CºLüé*)ܳ\ýG+–Û›çÇ bWf¦‚bÖíj"ªÅ9ôTâc0»öŠB`vûÆxÏ`Š¿N_¾¸~ÄE7‰»_ RfO(¶½Ã ²*šRŠ1‹©ù €e© ƒµÔ$ÝÜ.™AQI9M 6ààWþèÙ9eù¨@wJ_™›!e X+п_óü=þ!ÿõ¯Ž´ô@S²*v¦X»ÔÕ$)h;V݇×÷Mo³æ®G9íÏû x–©oói6vzm×ý8¨ÿZÿð´;üŽ%í¥+0‹ëÊ›: D2–Èyë ?C$f1l³õÍn†G~ìq•l½e—4‹kˆQÕOqì1…ûušM{D¬ªë¡.øøF5çŽ@…öRÀœ rÈÄx6“œ®·¤…ào:ÃZ°þ6Xb-@UºMÇ:)e]•û|xäÏM´[t  àí¼ jÍåÚ4ôû˜$Ì@QŠ<ŽPLQ´ž8¥Ív²?—³"Ù°®~¯In £”q„/ÒoCü€v3µ£…Tèñ;2[òA´æÕh|M4­ª»¢MŒ0‡ ¢ÂL,É‚9†©^ª`£k׿›¤öJßùoö(õa€ËT`¶®8ŸÅnyá.µ,dõÚ?›Y$g:M3øÔjUâò#QéÐA×ʧrd). Küt‰-ùá6¢Ãêÿ.¨îf `Ÿït"0ÂÜêºj¤CƒñŵóÈmñûuÂæ4tßd½Ä M¨@“Ý>J¯ä(gÕiv¤–ñ®°hå:… 2"OC÷@Ђáaò©Ë A}Ôøi5E0‘¾äÕñÍbPqôÑúwÈT€t¿•Ruá&—é=ГCì-Í“AÌ;­âþngÜzðIüÒ»ÂC~¿Âpo.)¼ž¾G‘Sv±¨IØAŠ2 Õ{þQˆ¹Ç"–Ó:aË8â|DîµìqÃÜÀS d{^<÷bÜ }Ó:%Ök+Nõ³B³Ã'=z—ì¥/£z?q~(zü•èÛšöºÇpvš^“Ÿƒ¾ÊÈ ò ƒ^…[.‚nsåƒ2móIÓž»`5±5AêBUݽô ­‚iNÂ@O(•ÇnôDï¨!¤èÜÞÈÄ9Þÿ{¾¤ø.xè}ðøx‘.¸Ã³‹Ïå>CµS’Ÿ9õ3rH­\ÆZjo®¡í@GÌgJ8‘É€„‰ö/õB%u'±kÒc~½Ûˆ8ùüm &d™!?%-+:f±†’¨hÄÉÓ4Æ V>R–Ęl÷½„ÒÕ.#³´ïð©&¢SËŽ¼‹¿YÐ(h:GÜ=ïÑ,¬ »žC³N-‘šÿ‰¤£x<Œ1M˜«+ kÝÅצšøW}rîbO2_¹ˆ€ó_Ä24¿Ü-oïÇ2þ²y¶âÏg ÷{v{$L­¸¬!.~ý&kE衬iÛw[ã‘ø/ÖF¢w¶#(€½‘a¹‹¹ŸSûf>ï°6ÿ‹ þþô–7ù÷ê‰À§”ƒL<¥ýØ—S ÐïÉl(iÝé.º:òŽ%Kß L5›ÞãðR-ëTÕÂ-(P¾?‰W|OþÕ~Jöua}Pú‘×õ~-¢Àu³¤ÎC¹1ßsXÃ>mÁ1Ÿ¬¸¯DQTy ÆÅª Äÿ„gKCR;GL”'cÐÛ¾zNV+cÃþe#ôãŠædaVÕ®uŸj¿@I1?NFÙr1Üex“>ï·ÖšË…àR–~Ò&(µºc÷WhYûr\ü¡›±:ƒØ€øòîÐéJj>@íitˆ–ÖUÊK ²ð3ü-I‡ÙÂðM×h€ÿÝJù`€&q˜¬öµ~Và§P{˜p.¬~Ĭ°×WxËPË!7­Â¹òØ)ÂÄ㹩¶ËŠtärâmÊ»æ<çtÙQå×ÍT{:ôîÎàhcŽÓ:!O 0ˆän%V€’Öµ±û¤Ñ ²$3äT¬Rný;™~•é~bý-„“5÷Ê+ï‹ÌþÏTè‘mrê ÂóE»i¯Œ?Å58Vfá †`(Ð95t¹Díædíþ8!`žps»ò¾] »ì‡íS¸0“LÍ´ƒ¼úI‚[\¬îmÍ|0!öê§w„ùé$±)Z$K½]3Ý–€cCi ƒÉèn\C—%©Š¯þ4Ì>ß2J÷r¤Û.8u_­iý«Wëó‡u¶*L«Óã¬þ¸ñmÐ+¨ûýgà4pþÙÄ®xÉf¯Àw+ãî㪕,yêÿFr·þ¾ËnÿU¯‹ƒ5×ôóµùGi¶‡åŠ±Ú›¸zÊi€Z¯z*E›Š³·‘(S”úàG¬‡—>~Hàâ|Í<™ ÉÙªS±§:¦ÝÏ.I{‰Ç?þKgZ¾^M ±v›£®í=/0ï!à’Óíñ¼ ¤¦Y ayETÚÅC¢Í–èR÷'df„p×÷%XåÝ’dý':VJÐuÇlÅ“WÁ¹šFpf=6˜½4¢©¸Zô|¸ý6•œÔx±~õ Ï7P~Ñ È•iïoãÙý±wã<ƒqÉwÉN.m±cÁ·Éá¸QH¸ïFO#!C0•I/pØ^+`”Ö,[· &,¢Ä뵎¦å1.˜²‹ì(0BJmK(bµäD‘‘\¡îryºÄ¨fñTZì3µÚ%érœ $;4±PØèë*Çßì5b ]¤pš ±0¼%·NBúžÐ'p~èùzÀæ™ÝÁÈ#XäÃ…á (᯺ö±¦óA A”"üPRnV%s Â`ªDyt56Чœ?lÙí«ž¹WZo!£Šàú½=ÍÐ>üïéÍÚÒòKç«*¤(Ÿ)à‘Wd‘I¢Cc:|YË_6ùn^ZúÔ)Î'K轜¥ÒœÂF»¹F™7‡¼õbÐF\¤ûÀ¡UëÚ€‹í´ÿâ)¾Ïë>G't@¾Rw…ÖÕÜŒ&€÷%Z„XôBM‹^=ŠÌ  Ï”g=z©A†;ÏYß®Š+×u½’‰"Ÿ%gC ÃFf]„a  µ©äÀ+îÚOˆJ{¤]ò†=š»óJl+ö-&r‡¢7$dîPÌâVaU/R6ê‘Mq‚"uÑñåçv§a™®,Ë?ó ½Å×Xàå€KD¯äÇÖ ûH‹‘»D\ЂsÕâ=²™kФûÆm‡&ÝÂpWïx±7”¯+ólÎJJ6b·Õ°Ù)Ho;ÂÈè; +ä¡lXW¦*f Kæ„]Ã÷‹"Øð¶Â~£dè•§¨œÍ> NQuFÖ†¬™º[qŽûÔ§ŽI€vÏ/ËÒ‡¶÷,yp@u4‰×Sª1òýW•W˜B|°‚#Í&«¬‹TsÈî’Þ{GMÌ1I~Ø2 *Ð+9x¯ô¸ ªëçõãˇ7¯×œS ªqï´¸-Orù³^E·å¾v1¤µ?q?n.ŽËC}âƒEËSדùÒ÷%ºícÝ]ú:®ÀWIòÐÊõÌÆòý¨§‘2@ÌklŽJĺ9.+ZÇÒG€ï!Ó)ÔÆ=0?ÏÔî¬'7©Ye_HÍ+ÅQÁ»¿–ÿ1Nõ˜ºçj()/$‹g¸œ«Š¶C¨C(‡sKKH¾ÐSaËФ“¶«¥ÜH pËÌE«P÷åSøœüæCMáÆŽewï{îü¤ozqвK A£…ð_|o8¬]rIOì¯ Œæ6'J›Öà–Ø¸V61OãŒVLð:{VòÑ,ìÒ.lÙ¾H] ®£h¦ÍoL„Ñwj&í4óÙïú©Sä姇O¡iJÕ:}!ªuw%ìA-['ýaÓû ž«»¯ãƒËgL;l÷.Š4äæö¶#Élýì‰Zo q“êZÇ+ñVqiº’äÞÕz\\ÆT¼ml`)¦oDÁÎïš È5šô<èº}ŽÔ±¾ÿ,V×ú¡%¯™ÒF¬@³>6‘Äö4$šV:Ó[WmuÏÀ þ6aöU|gÏÂ:2_‹n2HH” QŒ„{*“Ò{Ð7íR¨Ê¬±Nÿ9éU ~×€hœùð¸6†e-Ý„<Ñ.ó[XÌZ€áÖÏâq ù…îÝÀSø^Y”Bp,‡Úìéæœczü²q¦¦Ðcî“¢ûµsupx³‡ô˜Ò× æ›O¶¢ñæèÀKrF¸2%4Œé~ 8ËJBTÜ œ„ ϱ­â“G’ã"›ù–mÁ¾oiL«u¤D[d-ÚÞijŽl±.bé}ØïK•¸t«;²à¥ú»îEÊ„ÉÉ”ÐÀÛ"•%³>ˆTú½Uˆ›*LTÌѶa§L£P~­\ˆ0|l+Ùé§ýÏ]0§¹­äÈ<‡V2’5Ë\ëJÔe¡ æKœ€ì¹»4'?´@Œ^*Á9ðð'ÏÝËäw«Î#h`*w»âA%Œgè[=¨Ót’,UáýäãP­çNøãñ_>¼—7Ì‘åäY½i' þ\zj€1{/íròÛÛìBú•HàÝwÐòàÉ5ßU%¾QÌâÜÙåo ûFÌ¢ÒÃШ¥6wÙn¸î ‰MÊ^ˆ1…S€OU^q[ˬLp1ÏHŽÄW·`#DÑèv^Zc5„$|—p‹Èç+¨(YòS|vîgIRýš§FÀ{çïœ.Ä ®$r$ƒh4¦}øyÑkK„4¾ˆÔ‡Š”šÜ36†V3¥{û#§"Vƒ ú?>ä·òFšè>cÿ¿…üØŸ!›Ï#ÊÞ?uZù欺Q”øM‹ú(NØl‰ ýu,e¡ øè°ÈD¶u^µ$+íüVL0Р胉ß:ŸYÙŽ¥òL/颺w÷ÕaUG4i”ÆÆGrWåѽ|­A·ö¾(imûôÊ#Ö³ÙÄý:ÓÏTúD÷É\%K?‚Bö"´ù0 ä|¸(ôî¿Æížâßì×{«d—Q#‰Æ>óýÙÙI„îÀ[w kè6À—g$Øor¥ƒÙ‰7p¾­BÌS4¹ô5{*Ñf*¢Xe¨FÞnå^æö1zÕ\@ôît,7ž=ã¾0$žW‹iîmD'ÄŸ5k/J±©hâÔ!@D`§\®-±Öesá~[lYnŸ’‡^®ô$èÀYîwʰyœß<Åh¤·­r°—ª´»ïJÁÆ9×”ø]¾ñ Pjëvß…Ê®4$©bçZþêó`†«‡”òܱÕ; EúF<érƪËqíÔÞ0l†38`½åz¥q·“WŒ%:d䌽RþðܪQéTå®c?«uK”æ}Ì ¨F®Þ xHz€ ™çÎÉ”´e%ëI °Õ÷£Bk –¢»~Ò :ÙB‰¥NÔ’Þ|)£pK+"?ÇÜk ®ÝùÀG®ßKÞ£†ä2y•³³`Ô9ä—_ú.Ý÷‡+áæV–Ð(§œ±¶[ã2DÂQ­¼©É_ÚÚ²ý@ÌþÞ\¨$-å¿õÌ!™%!q@•ö<ÃŽ‚Ø¡CkÉD3¯½2Ë0l„ûšeÉ3|YÖ=\µÚ§¯ì°ÆàŒw.3aí§’‘ 7„ê}¶³í‚ŒoËSVêrÐsL …À~·;'5ЪSY|ØÏ2ä9â[,ÎG'!2,[ÔÎÒbKk­ÅÝ'nX*pÝ.$kk €·ójõÍz¸ÀBDù¢Êä]ƒLÙÙîœCóY?Äl^ùW<Éýé@'[ëŽþµši-~~òm4é¼(èYðf Ìmt " ýÀVÍ£$] [Ïs*¨Ê‹“„{‹d ¡O½üF†S> ã ôÛH£6]V¸ÍÄä6+§YA/‰ {s‚„:§ž‚ð·çžnÂûJú+šôý ±³~ÚI¾-Â_mÁgóõ‚û‘ÛÒBf †5;xý~SÔdQ+Å\¯ÚùÎ=ù0£0V±4¸PΦµŒ,\å¤Jœ­¥4€Mõ#ጇŽLÇwmˆxð…U°¡«ƒK)ͤƒ'r×-—×u¦>p74ß>¨{uLËlo¯ ]À¦? æ¶GÝxǬO&+]>ƒÜº_Ëoõ¥Z‡y§þ{¤wÐÜÖ·Ú ËtÍ—4\ßÞ@£Á–ëªô9:ü™ñ’L9~NÉnö•sL° ©ýlÎÉÊ©C©‘NÇB„ïp6™£Î¼™\&¡)W‚éxXù3UšX†’6 B$#a öúôÏ I|™”°¯Ô}]<íÅD‚6tq|δ¼CrÕŒˆfxj+¥ôô¦’³ ÿ1N˜ö½%/¼ ˆ† Ad lô]ºVDÂ0oß3Ë;¢£Ûz´V?Nò-k],¬STPúåéÁRQ ­d*×Ù£G+S'·9¥‰"?ÄP keY¤óÀK¡DÇ|Š 5%Ѐ߷„°iš;~©þÐY…hñ'žhI´í/2Kʺáîr,£XµÆüõÓ—4j§†qŠXé7R/E<â¥óå{%>dR¶™ö,:2…]g®æàÿáPJ´êr ÿ绵X¥ÕÂn~h­ ”—}õùw$ú¾àç{úaù£Ö¬´›È£AƒP)ÅþЬuk¨ËéÉFeŠ&‡Òk#Xë -’‘"’§žìa\Ç.˜•Pˆv‹sVŸ&ÎÝšÐ!Zf¥™5AØ1ˆýw‡¼.¢^hz,(øüÖ¥Ò¨3‘GÃ2‚2øªGT')ºÎ8Õ¾±éðx¾!N, ÖæçŸ{¹ªq«ÿi@v@]€”ò/F›`–šyóM!Yžô®Ñ9AypÞ©Å£‡¥q"]SÀlXwLp1ôÜ»ùºÊ–Ù÷ŸÅžT•Ä9y rTÙ#ç?ÙY™ø‘€ÙÌ(4¦Óî[‚K DAô×ZrÜL|¿ý¬cÄÕø>›áÜQ3+ûÆ98Ðëò>Uí!º  62^MÛ)ÁP©•2úÿO³'ëjªGù"X?Ç€D~X‰„%‡£¢!‰Œ1ù—W¶Æýw‰˯ç¯/aàof0Û´3&…û1.ò ™ÎZÄ¥ìËx¿ôŠBcËW·LÌÌÿMá(í¡ÊÂ0ì Î2 gú×Ù©xs3NÇ]¹’_HvWç¼ÀëC8[cr;môîï`ÿo·.ÅPuCÝ}Èý¯ iÎûW›‹&o“y3}¶ ŒK~ýJz‡â÷÷τ赳Š)¤Y…<&óžªW[ºãsқşNrRù1¼xôê™åJaSû‹†ëÈ«7°Ü ï)[•T­3œ%*ºUk½Ùñ–Û£! ƒ»x;ŸhÙYæA=½ëâËJŠÉ /å °X¯µÉ}µ?j))$Û@­¢&檩˜dVõ¤þ¾á½nG©(EM3Œ„EÛ[±;¹-ø 'm©¥¡•+1'P\Édj¥|¢€Vû|ä$îåùèðèZ¤€IÈZá1Æ‰Íæ¬«GT*I «èš}wå°Q©¬XŸA`‚¡¬ê€ VÒÞS98D£O²G2ĵ^\a?f|\._ycçn4X ‰ËWtIMß„4ðš×OñàƒxÈMuñ:éV"€šŸ!š+ªh¥²n&H‰ßõ¿Ïp]~YQo çÙª*”‘ך—fC? å¿d‰©ó*U #éUƒMUö‰y§Ôïš Þf¿´^+yà Šå ¼Túq¡%¼ ÈZê>Ù/çÆôñ±ŒmªW#¸Z¦ÃÁf§¹8û£vÁ–å׽ܰ«d(âûÅM 1^¥@i'¥6T¥Ç/Û>vWU.¯P­ù˺‡ékÒN‹þ-²Î†¯k3À$ô¬«ýgRæ!vÁΔ¸,³'qt ×gE­êËž†ZeköÝò}­ñ†ï©jwpÖ‡“>«ŸÙ©@1;¢}·‘®±š(Ô…Ìž# À<ãü`%S~w c kÇþ;:tÓä?¦Ìo·¥ÔE'üá¬4d›µd£i6 ­Ø˜K‘ßQÌ:ORr™ {B^ÙËd °e¯þª‹ç¾ŽOøjZ‰êÉô&—ÖªÙ·ðE™nVóôc)±Ñ]*Wåœ]¢VÛWyе¦r(ïëé!•¿à="#Ä÷þ¢’V¸Må 3¢–Ru1•^4Ç}oü2®â2Æ ‘ôêSĪ-ÁE(Kÿä5ƒè}ÆP5J’^²{²Í¡«t9&4㛬M ¶"²œhLÚ†î£ÁƒŒ.) Y¾ÄMjÕK–°Z‹ß»Èm ×c€­]SZ2Ý?Êd9ÇwãøfZ²­ºÿ¯ó k rÁÎÚ}Dë)ƒ€¿|)21†½£Vd c ´ W\Ü>¸šâgéF±‚ë½ÈÀ|í§œcçpÏE†¸Fdñì×fR¥©4[ÑÄÝ$ܲ`Ü$ÇŒ<(çvñ¨t‡«ÜÞL•(ÝÛà(×—>/Á]+ì"µWÿML€|ö “uH%.LµÅþ#7à›&‹öΖ .ÑhàÃç„ÛóU‚ì7¥–÷4¹À' Ë´uãõL/³û voLD‚‚‰gW»ÀªðTw±ÿ*œî_ûÄÖy`Ñ=£vèí:Q>ÐK¾l”z\K½‚Œ5ŸÎ˜ÝKÃXå 6?jÍã›÷sŽ]H‚¤5#§CžAè¹>: ä>¾çpQ†pa*„eLÛ¬è¤þÒ AÇu‰ÎÒ6m¸N.*ïÌ;˜ž¾¿ï7åù<)6éQöp9$7Ùtc À 9y+ëc¬mY}u6ý˜1‰5àÕTŽÏlbì¡lºh¿ä‘Òƒ¹,MÄÐ+MüƒÂçû¸"<¸På|çy#õÚSkãÄÕ¶Ñ’ßX}çVîN|°éùÓ½œ?¾ÏJ,Ål6õ©µQ‰K£XÞì¶ =úã¹>ðŒ„<4âöÂt°Ü€åŽ%25P[ ³¢¼Bï¢ø;_¬n'õ™«ŽôT¤×„ˆ/-?ýpßò!Mk—íÍNdRYøËzb¿^h àžQ[}&,éQŸ,·X ;È8SÆ«Žr§ŒØî¤ƒÊQ18úÇõÀ«Õn[½iÂŒ]r-…Êù0oj+Ö/)XœýŸZÛªii2²Ç´=†b¦ `rÞez-úâÎx=D>÷b%ÕmxÐY½ã4j¯àÚÇòºT÷ X®‹ÚŽö J‰ï¹nèÒÜÞúC?µO,3.í\Ç›Pã´á¦h£y?<Ÿ båHÜþ¨ Õ‚ÂzÔŒ¼øÿzà à‡k&öRþ³WUá¹Væ38ox‘66 —.¢)7û>][˜ÍÞ³‡ýøÝ/l)¼6èº\—íÁVŸÆbHrhýôDÆlÝ“I øç ¤}<‹Ê®Ô‡Ÿ& ­Kr23±e0¡¢-Ï:›ƒx%²ù8';×üI[’`”Ù¤¤ãEo±ßØá ŒX~éâK{k÷à¨rŽêîy¸ßþ]S‘´C.šùëß‘£Oàðm¿jzÆöB¹¯Z—ŸÂàø¶«ÚáËD0ØÁq-lµÏ7L\ƒø¯d¨¼Ú˜¯,X>AR“öÕ.ÃÎoþ ‡¦?¨b_'ù¥I>S÷ÔŸÔ³WÜ'8Üï´(h 31Ûèˆ&ð—A.Œ`†– b—·F!è+ú›Œ„úwŽ^:¼às왬Qhhâ\Vò–ð’™ó‘—ïß À :LjâԱ߂ÕPŠƒ–ñ„ÿ7ôÊÛPÍ£¢´sžPtçÍ5GI´VZØKç÷– ñf³×#Òò¬ÄœæZN{ ë×ëͣĹgÎg¼# î²ûÊè^Qܨˆæ@ÞĆÉJ{,c0Çläµ´ÃèoM¥Äùâ4+ÐgÏ€Nõº”f¸A ü!ŽxŸ:ªÎEêÅ?qtJþá”}üÐä"'Ï-›„Iÿ›K®…’Qj/ ¶I|o 5ÿ ÇGÆ|ÌvØ­c\ˆzÏÔ9 âö¯ÕìMÇ›˜C2¹Y𶉪[Õ qÖ0•hôkÅšŒ ­·ðŠ­¹à½{ÿC~êw³@°Ö{~{8nÛÑCÊ%ðNG@Ìlü(ãÙ"T„«Øâ-{$·¨Àwëãç ±ù“Ùy²Ž&±^ô!U®[áÕ&µ†tÍFx»Í7ä—Dz{ûÜ<ÞË}“’ÉÞp(ÄîíIS¯[Eš8ív†‡™víia`¾§•œÊ$ð%¥ù•ÏÞ–‰”ÿ4ùu‡N¬WÌ&%•µŒzz*£LzÅÇû#f,Ï´ _À=¨c“ЕÈ:ˆ³Ø(µÏ\f'JŠDY"ï"o-ý¨3–©ëDfaŠÙ¶B ¸Ýjë¿Óv1¸÷ÆÂ *S{õpðúØ“>l¸>ëOqQQk(ÂÉ•0_Wç¤yVã®d¹…†Xæ,ŠýÿÐh+- ìÇ‹üžIOJ ®:ÿá~®$yw•]ìT>ÒEžT¨—•@­càX*á/·óèO1¦ÝÔll´ ܸÐöc/e=¢3†%p‡ŸN>Òjygë†ÓoÌŽéÓGNköG-aZWŒ-ù• 5 ÿíMÍæWšÍ9û¦Ö“Ñ]ù>·•£šÓ6l€Ñ?LñÒÓ§œ­Ü•Æþ"-NÙ4t8|c¿°#"´I>߬+ Y/aï¬Áªo_¯~¸ÂMýüÑGý wcˆ‹µW¿"Þwhû “vEÝIzm”aÝMíó—ñ:ÅkC—A•ÖPD¼'z¼e£ó‡Ìnd]nC%ŒZ‚El ƒÝqŸ÷ê0P¨×Ý Ÿ=\,5€#´‚Z97¦ÿL,"¶È#!û¥î `ý¹ÖÈ™þt͉ñ¼n ÓÛ¶ä ˆ1þÌ)¦R톺8™,ZPl{BÉS¼~*Æ·Õ5 ¶Bho7Þ´ßý '3 Âb mm@äs«¾¯\­·‚å[—4/›«äÆHj²òöŒa3¡yY9>X©«ßìÊ´¹Kå om­Q«Ž–"g° E¢…Ñzøà*ó“©Ms彌fsÌcÇÈ ¹ x)Zʾ„^Û¼¼é%‹y>þS¯Ú^<áHZ¾áþ K̛޹õͧ7y1[];§æbhõßÒZL8Õ-Tw‰A¡6OÊĄܼv?a0ò»»ñI“ñ—ƒ”Áy˜–„ú×LáŒXû¬„c©Ú¿Û_Õ9TèÊÜ!À_H„ñŠŒ´%¥R”qâv³é?ï6¹ÂÍ»oQ *XQj©açþ¼ÔJ4£½+ŸTN~|G›pùÞ9WÍ5Ò‡"ÂîÉ«×P‚ªŒÍBE`¤u÷ËÞÞÒ:œ÷ vÛ?Ai”ìÌÊb/†>5:J¨Ä¤Í7ÜjÛ²Z,­ŸÚÎïÉ>6TG¶Ð ç7>"öúÙ]Gtäç•Ü@¤:šBöŽ÷ÿECøÄÅIQ‡ÐÚQ„çjydwwAl™‹ŠÅ—?8N«Š„nO‚ô6çˆÂn»«̬͡#Ïu‹¬ †’窪}RSEµÝð;ð’½ûÖôE½ø2çç×Ûb#•í¾Ž«"ðµ”{¤40˜+c?ÒøŠBÛÁQkrt¢œY„g½2@Åüþ¹Í£nXÛ@ ü8>Á©Õö®$Ù-è£ ¥*¿ýÛÅÛû,úß!±Ó•Ñ+¸'C[GCTˆD¬èÿ Ypé´ØDmç‹~(3ΑžÔfÜV÷ónŒµÕ5Z½.qx#X&Âñãp7öëï¿–¹¼Z~NžKÇŒ½íAì<c5Ÿ 6ä.>…wø™ô°dþ.ÀDvXÄß)Ô†‹¾‡{^,óùª‹0Ñ"16ÃH©z2UÛäÙ>6£Ïê¿_6 }ŸúÏü"!º3“xr¥ƒJäK.¦²* –-ŠÈ_©q±âšLe(mÝÞi5KaûT¬ÐyÈç—¬›?äÑí'áÙežõT¤…$ÅQ**ç—ʼ?…ù»¶Fw3|–qYs³ñ:]÷æØ7|4%~•Æ(QE¹†ÕšYA4h̸X³yàí³ŸL m¨;£ ÔÞØìpSžè±÷˜ÌP [h(üÑÀë;´¬${ÈéŒk?î,|SØýÎiŠÍÁad˜(—¶Æ>O#|á+¨oè˜@zw`:Ý}T›}¶…AzG8fÄù;.â!âÖÆH³«ÿ¸*ú ëÇìyÒˆõ<ßëÔZ•rÚöˆÈ—u”X&|ÖB#^íV’Ýõ¾/gõ hÚß*þzI9î²ÁÆ=øH9Í›ó¢Uâ&´ý‰“&ÙvEDî>辮 £Þ» ò#yá¿Þø®íq¹4 uèÌl;‹¨¢¹í|ò‘Õõ´tßf±ñ¢»Ÿ¯¤¨´ŽÖõhŸ‡ØÁCËF˜u´MŽæMú¢tמÊ÷¢8£ãœ?qkN@jÍ_AƒÿlÖsCŸ‡í(#D©á‘Yi½»iOŸ®ÕO‹ó£c)ÄzÝsïÔ*ЏR—h1ï»Pæen.,fŽ2j‹ZƒtYGÆ/~úŒB‰mY…q“E¿Õú5ÁQ̯¼óK’Ù}ðÏk€meÈý Ù~Š3H⊈u çÕŒ{¬ÞØüë×®»e%äú&µW$a }b<Õ\¦5zcs;&fxʆéE¾heÒ`à%{4Þ¿ýo¸QU³Ìç—Qð¦Ÿ«à ¶aAž«jÅFQjÞUî"Õ5ʼØ$=7öðÎe=Y0oÂÿ’®‡€±â— +Ì”‘ó"Ðyôñ„„ׯt~c§¢ Nm'¨±…?˨蚡]~§töƒyµ?h AŽä†´á£<2Ԥϭ48Rê²ÜsÇõÕ=,ÓÄmÛßát©‘ÿ:½³HÔU•Îܸ’§{jÀÐ öŠ‘!fâ=ÿæ~š!\;A–%M„JOî{#Ù-vÅÂf7±¸Ì­}6;6&O/»È-m{o Ìá‘€ÏXîx¶É»NÌ­†º¬DÎ]sÀôÇ}‰ãP~Iû®uµäk´ÙßuþOD_úûHxÍ2cÂ#5NèiÕ@}J=ˆÆœXÓ’RÎJ¯ü(×G‡øâ"ýqRåOK±¸½Nm)±Àáæ·u=\´ 4V¥Y}´=/À—±A*›ø¶´Qø…f¨þIÝ q:*[^ÈL5ó# G îyÈ#‹«:fS¾¨NP‹­ôz¬ù~ˆ@(!‰ÅQIt¸Êþ^]™_ÿ”†¯·êƒtòœB…™i´Úþ4U$vé~XÚÝУx.çÈ3ͩ݀EúhIòÎ"„Ñ9>o ¦¸ò?õ“ì(÷Aª—ÌÄÉ­Ûè£zߓע®1g“Ë2¡ªø¡XJ@õîæüÔk¡Ñ¸Ð8'î ÑVÛ²¤Òù32ãsµ#ˆ jèOè+Uh`d"„æ–Û@è4 ±ˆ5{½u¸?Ëv™x¿¢¥ð™°>Œw!(±‰4â¸ÀU.úl˜D€ƒ'- î™ÆB¼e3¡Ÿá±ÞõP}©‡*Z½šöU»Ðwߛž„™5a>v)Ó%(½ß¾² [ÂT?î:ë@©ç5ß™T‰e?}NAñÌ·aW€÷›[ÂSÈPÂõ‘!FÖÜÏXÅä ž. ê`X§H~Ü¥ë2ÀÁD²§—úŸÍ«}ò<£™…|KÕEÂ…ò,HÞ7Ñ7 @§ð/#¡^ÊsÍSüð¥ÔËJ°¥´ó‹éÒ $™Ù>XëK ÖpO7±Â­g^¯¸QnYï&¶,ÔèJPˆÂ—rÉM­o’YÒôà€†ëvð¬9v©[.®¹ hJýzDNhïx·Û9@¥ŒxÝ9ø²Þ¨j߇žPH;x(‚7\ð8Œþ®Š²á$ÃŽ½&±Ú8 †n]:Héöä©î\QQ÷ y:+wMZÙ•iˆ+(ož¿8ʼ«>¨jðø&ÿT¾-'z§á ŠîÃÛ‰8k§J¿¡–ù€¤%Œ©Øç1Ÿ4âÞ#Ò}ÅÅág|¬ó†á­šãlA/í«^Œdþ7AZô ˜£ç.‘¨SŸXg†@_Ïæ82ßv —úkh¯þ/ ¶sà© ›ŽÇ‚hÊ*% µŠK^SŒ#œnGGtò="gãêóªÍÏÅäVÑUÅz­ï"Jú‚ûië*ƒ’~¥úñªp+íž;­û°¤"çlâ}ª2º/Æý[<Ñ1TºLù-ž3!Ên6NÄN­t†ïMÔJÝ»%š&¸Ž×£yKÎ|ïœ÷ñbm NWM…DÍ5"œ [ üUˆó2Uy@¹1|ˆ"Ggš¶’Ep•JÙ´¡a“ò8 3Ä"3†iÏ V>ÄT7 »–Ùö`6ØÀ ÷nn¦¸ñE8¿toâ}ïhltîªdôÔRÐóŠÏM|ya=ãmÌ»ºZ 0µ™î¡$*VôÇ…27ó:U™FU™óÙF¸ÃÞ~]ß¼g”bFAºÇKÞ`;/c6‰UôŽkŒWüIv±ÏC¥ë†ë’V,#ZÉ|¼ 4+ ôó'lñô÷ÒJBì³év·e0IzzûÈŠ×úÌÉðBq ã54—GÛ6>i‹QÁÆo7×X1*>9<Æ Xl“‚_¤B2̈k«ÆWÎ,(ub¸I1ͦ‹·°­@ögã¤ã&ä|…µ¹”Bþzi•eøsHB¥Ÿf8Ýüo,:™žÑ–»,´c<Õ‘™s¾³ª‰ÃÀÉ{ ì áùÞÅ€à/uÛû{"Q\Oðí–Ú– Zy·"eš óÚ.ùé'¯¶+wð¼§L } £™sÏù\b#Ÿ‹I„f=§(â —Ø™ý:RÀ#…]m‚އ™Èß©ÉàäMÈN¨ÙÕ’•aäQ6³Ïë™Pn6‰T«í(;0ÿfN‰T*ây¡Ü‘&0Í®ÊøM´1¶èoí$(FÕÿð•­èB%²ô&;éóÍâ‘FŸßÐ'´6‚Àd>!¨]©`qYQE©Þü_v'ý÷gû#ÁX݈°Ùp¬XÆM³m2‹þžåïÛ>KäĤ|åþx <ׯH/°³ŽbõËe¹ã˜@7Œ¼ÿqíÄÓ©ª$íý Pþ£G»'ƒÉ§¦Íy°/kÆsI¦œ™~÷δTE-å¹JžÃvBP¢ Ê^ZXK8Ö¾‰ìÇyè{M¯±Óª¥Œ!h¾íâaWŽ=DFI ®Ø“ÍᥠÜZZwazð ('h›T ” ÊÝ+&=÷Nxwúu¬ôL}Á]øàIÑZ5Y½=R7ý}§5o¿cÊî»kYxß9ß; èjߨھK¾©wú'ŸÔø-9ðК"“[yÅÛR 0ǹrÎÕÇ'ÆŒ‚åïë72|aAÚ ‘ëÎ ƒÚ¢ƒ›1ðQSc£úIÞ–”Lèt «ÙÌÿRõq«Fo× ~Åé4ÔdÄÛ†²ï­™6 @ÕŽ´¼rÃ8U¸u+__GmÖôSò‘·\ÓÚMòͶ …G­Œ|GQ¨&h¹³ÂÕ_öÍös\j±c¸W¬r¦F •chZ¹u±Œ@˺‡n–AÊLézžBSOZÑò™Ú$Ýk˜¶‚Eè¶;PÊRrþ³ÿUÊxBXd.¿RÔ h†ÙPûµt}ÇV €`pä´{3šód´ÿ¥ïnvÅ‹ Æal­hv„ÛϾÿ‹QK¬‡/ÝÆÓ-Äo0™ãl¬.‰¦¿¼÷d¨ôv‘®2öFÚ¨½Ï΂÷eÛ<ƒÑݵ©ÝBN>¯3¡„ègwÿ6£ð:O¯+œ0‹²£‚¯WEÈPàaH©W*Žd¾00&±ïØ`h­ÂEªÓÀB?wwó¹§{±á”—WÈÙZéb`]|ªÀzÞüˆùíb³ ’;¨tâ¹°C¹ìM2“ÇɹšÂíiðÝ€íõóñ&I^u(x éWe¹5¢ªY_óYóÏt—žZ‚††*rBà ¸KÈçvM×Ast?êk2ð•V®üz4‡†¾TWàÜ7ÞAûÃð›/0xV‘lš…½;dµ7Ø™I·pÿùýr>ôB/¯k±u{a0 ‡!ëL‡‹ÁVU3›=>ëê¯ò šAúàÔB”Ð|´n÷e’Xli éï°ÀR¾’Fn¤Ò¨péaŸßL’“é¢âŒœ¾{NÃwÓ~ê"Zoý:ÌQÎvÌŒ9…b¢¡A¤•y,o󴵯yada¦…ìµ­ãßÌ\\®uË.€ (F‡¦ÆÑŠù€•7RdýjƒeºûäÖl¸œ§Ø†ÍBö©…Ý,ë»™å†l&68rTµu&®4BØoºPŽ¥Ç*RUÜUkgS×§n Ã7.^¡m‡r༠†Ož÷ìös6 K°¤©‘†ß7Õ ¬€Èá¡o;…+ËOúÇP¼¬ªxé">—šÄfUSvŸ‰¡…Å ˆ<&8fLÜ“ùwË7‚E¼[.RÉÅ «á"YzÛ3F†ô¥2Ô7{sN£"DýGèéBÕ™¡BÇWóX{N» ?ý'Müz0Ô’¬Öú‰‰ïwrSòD¤5Í bzò+«l0Þ³Ø' _|+ 31P ¨²‚ï\K¢W¿”/Ñ[#üàÌ¢ËUû;6×ìíúç¿ÌôDº:ÚÆ/pÎY*ÁH¡¤«”(¤š™½š¦ ©%>­7¢usZÛyœ²\n™_n~’ [)P Ê¯ž>w=zr¡µ‚”Ĉ“5¼‘?:Æ%ðÇëulÿ1§¶Þfž)Þj‚¾²-›Œo_¤Wd˜œýuÞ¬ñagp®m€‹-à –i!-}ÇÉÊÌŸDÇÕvwÊÕÕ^#fäê5Œ ˜¶Iê ry]÷ªZ\¿*ƒÓ{ç"‡»>>Ýt—Ô²¹‹WDíÜ7X`‹ËÏØÄKæèù)K|°ñe5€œ56ìб &4s},äÆýò<ô©œ{Ùañü¢½Æ´éµÕÛâuÔT¿øNºQ×HêîSR®Mªeú°Œ$Ú^}æ YÇLlNNTïsF¹RJ©ïÖOñéÒ³J´ô c€~S ´[ß <•WânaS€äßV+„Hl`ò™ anšYáD Õà¨Xsæå‚?5:ŽBðP•—• "FÎßjf[!ã\=s KÄYµ>Ƌ؎æ2ðÞUd<=)L¼nP4ò³<bÅiMîîaL;ƒKLµBªxû‰‘™½fô®“¾}v¿:J葟~^ª_#?™š)&æ Þ}Õ&§RWÛ~|æ©´d|¿FZTr^Wf-iXðˆ‘¼RT=—š8ÍN§†¦HJº•†àø{j+’@Dø :0U¶z¨9BøDoáÌóf†ßÈu8Z?A>?Dˆ<Ãëø€/P3àœ.–®<EN ÖåÐþàóUÇÙæ×Âa£½GíRX¨Í›ýå=@½Në|XÇIp®¥§|Õ ÒEôùÔÝšŠ#2 ´¸è€Ãf)eÝ’‰í‚ùŸ²…Žå°û:d¾ AæËA°ÎÛDD˜k ¼çé ªî/·’fèäkPëLËv[ÍcÊœÌ;$`³Ay2U ˯ðÍÁ¼û~Ïh·„…$Î ú^­uåBxÂuPïë ?á Ž.è󤉕Ÿ¾rï.èAKŠªZÖ˜ØölR¨tË][`¬>C°«L"¦á»Š<¬8¡£ñ€+¹—~a6FN«ùI¤«H^õëÆÌJ6¹©l‰YêÜ­ež PXÍÈk™´Ló‡gÌágŸŸ|‡®¬S‘mi—VêÒùÄz€ŽùÍ”ÔɈ{OçÈš–jáG.÷ Ãâ³Æ5ë†Øçµþ­ådÄqÎ_i ü»üÁt'ªËw¯€2ýÊU=á2Ü@±¶‡{ÀôëåÅZéÜšä;Š*qúttˆ¯{_1ü ð¶zaI¥r¡k´®h~´©[¦~)Hüëv!ÒêI»U[·O’:Ik©a }»/âj±›)åêr_ù¼Æ—X@¯k?9Th;¼%ÎA6÷L,ðŸâXnáe‘1¬ôl]^Ñ#iÄùˆ¾°>„•D/Û¼UM'`5±ukö Rð •\ÎÎÖuÐÎxÔ†bF÷v.Jè½mŽ *zq|ëY ª[õÅŸãBøN,ýw>"4OBå"D—«<_< ‰ Çkùt9b9…˨&,d]oÏvA¨ãø§Žü’ŠŠöRQËäÕ΂ŒJÏ‹ õ k1伕tZ¼#:j´CÓ%Ðlbs­Ð÷܉™ÙlôV‘ óÎj§WÐ ¶¿ BÉ:(īآmêÏÏý žvwç^©. ÍLPìYÊ0&Ýù|–鋤(Ã!} J¦üLä)ð/ð¹›ë!v µØŒÓšè~•‘ã/úFBŸk7# W ª‚N‡¦zAuß¿+÷›Ž* Õœ„׬rÖLfàBJú#Ûß‚'²Ã‰|ì4f}ù¿êÂÈ8ŠâyÒ´çåŒwÐÌÎi¯l‘r…ª­Õm#yƒ ‡Qg‰Äól8ÛHž‡_ÏØmºµ!fý[Éâ©Àëƒ9žgûmlPÀMž§È¡.}É?9—†ýp}6Ã9½Z+÷ ío¿¶¦ñÓà¬P.š{wŽÖ ¢Ø©C.ò£_ROÓ èN[zû6<‚œg}òúu@¢x ›Ð4un*ñÿvªE#3‹€™D/.0©0‹ °,/ø|иÖct˜Ê Bo½Œ|ÅDußÚãƬƒÀÕÛßÍ6D€°DB8Â-ª;_EöJÎÍãíò˜2aÄ2ŽO[Íuî€TF¯´ˆ€G¨-<geöi¾l”µœ"`jø[pd*³Í¡•¼‹â]Nà^›$q{a^zâ¾O+eácËÒu…:^íQ@Šø±“VÇO6×SÖ5ú¾òîvqó`§°E ÌÙÒSø°•fÕ!"ÞØIѧ½¹+xÝ$c]¨äI­ºt8çÙè{óo´Å~¥rÑÇá0ÉSϮ֢ìdÍÅÕhÜ™Ã.= ªÉ²Á«(•” Ú&õ›©‘&Ö WÐÁ”As 68pÆ%Q¯l6(ÚŠÜnHG²7õp F>"©¢æ/&^#¥•&è–ÕÚ,’TxäÛ0èi¨!bíö™@ËÔŠí}§ÿÙ¨òñ ‹à=mÈ;/ðCCŸ›ïÉŒTåJ‚"^/œŠûÖ.w†eèÙ)þÝÏë9À¯|˜]˜› 'Å{elRæèÍýÌ‹àj€¿"±vq»¢³ÜW$J…õׯ¹ï/¼¦V~¥Ïã`·rcr=ãµeÝš½†”©®‘<­Â;Ìô¤“7Pêeà¯Ä=IÌš-&ÜþQ0Ùàûú ¦ÂÙnGq,ÌìÍf°S¿áЖväÅ?§ù%ùÙ÷x £’Iª‚Ý[u)Úk㼆¹#Þ÷Z¹É˜GÚiÿÆl »(‰¬à ÷´j&ÞY‡›e0o .¡H×UI¼ú4±fª£÷9=h±o»ýüTÈõ½ÑKÀdÊ8iÊä,m…Ù@"ˆçô‹qõ3w÷Ž’¬Ú['FÑóèB£„£#²4‰Û&_zÎÇ Ãì@aYÃz‘Ï'F‹áÉxÿhÙúŒvê‡$&Cwšºcè–íÏø±/ý¦ûbÀk§U¥ƒ¼VÝ!1ïgcÃåLË\ÂÖ«T’u4ï“~Á³öÿEDoGF^>LµS5`bkÇU/ŸsŒt®E^‰0_Ñu¢™… ­""^&(íë§ÓÞ½7E-®hÂ!ôD*&ưœ!V8†E»~Ój "~m#z ÷_ Y¯p9Š/ô8£Üñøh cè9 ©<ª¥¾!²–u“2ìѺ§çú] u†©Ø¼áGªv X L&—¢îôÞØOßʾ`y1w£ ¨ð`7ž¡”“èèjoÀbÌ/vÕ\Î×Ò#Îraýcªg {A‡=€{„z.ð—.,C6Í`¡k-¹bìdù€O©X›¿ë'$áÂ%í&nÂ+Y{üŠ;Åõ,á²äCð¦˜,´|6¡Í9¯uëG¤{ek«\бpwð¯ªrÉÇU½°”ËÎT”ÐëOêéâ›Ä,Áê†!òs©Íf%”Œz]~mY†/Û÷¶zݘÛjK„[s£’ü:@àáÒ»®Ø:i|vþÂ! ±€ }Ý“dŒ9¥ ÓæÇ#Éyzà|*¿è‰î¥ÌŸÊBàP0Ï)Úõ‹.ý{¨‘ h§ˆƒ jÂ^7åüÐϹ*qgˆÊß©-¥5œ¡~q”–K:ð߈!wWÆî¥™°Ô;&ƒoEoðËÊœ=p2¾ ÇÌ[¢‰pôjj b$OW¾öÐöNä0S¢úÖ¤¯ôæq nÉPÕwã=˜äȹX¨žEw-EàÛuÆ1ý±¤¸“f‘°Ù°ÇÅb!Ô-,4ײ±éºóë?Ùîf’$ Qã+ ¹ ÝùÑv/’«1!¥€u\Ë¢)°*ð÷âe•C¦ð½œ0ú²CuH‚fíyJ5ISp?‚I,­KÜýúŽˆk ö[ "jOÉêø%”ѼßΑõ©˜1Q<õëZò™¯ÃçÑ<¹" >¡üå°‘5 Ã#ëh¶ê¹[?@„ÚÕ=»ŽVtVã+9¢õ.ÉíÓÂDÔÉxjbÍ[· –g•[.Ó3ø-qdZÖ‰ >;‹äïUð¿fo¬õBa±E‡†ý æš—)C+Ê|•–\.ëðÙq¡aŽ4æÈ™(õü;ÿÎ3§|10¶f;§±hÓÊÖ~ÕæQ†g¹KáÙÑèK‡ˆ›n* ìgðß~Õ·,ïbøy®ggˆCm%ð™êº?±i@¢2&Ì¿º™t3½á?Ï+¤U§S(Ê€É'rýÉ1ÿ&¾Z$¼1çÍ¡gQ¿ìOˆ*mѬE¶x_¢ô<0 >ZO$õiu8ñà¼àEHιÖr‹rÊ&E'§eªÕ¶vÇ”PÌ!,qôÍ5kDmÔþ_b‚Ó<§¤(U_ºtƃE_RÊo·Š¸.c¤A«*Â+}ì 0é+AéSz3ò@½æyø=«@ëÀ^ëÙhñáD–Aµ,>ŠcÒú /៘0bìwñ²;îîC·d¾^˜£ùÑ©Vöt8«íNºõ®ý©a…Ó4¨B“ä¹à¨xŽy+}éÐã>#¤ñV†Q,VøgžVtqÜ&ŒŒnÖ=hj ±ÑÎÞ¦°zî=­ ÀåÞ@0"¹ødXD1r<$ñ ½¾ÚF=²©´ÀûIΤ¸V÷´s„BËOc6åzÿDTR°,­X‘Õ‘UµÒBžÅIø5qÖ/±Ý¬ W¾¥kBÚ±1Оœ.bvÂj›@”Vþa«P:è¦'Ú`+JSÐᎫê5üN­{Ñe]æÅ}+LlWîCŠjᬼlk` ÉÄK0’ø±3È<±ŸÏ_!³:u0ŽìIýZªž/S• Þ}ªàZ–ÊoGÃü˜ ,_ÏPcL• “X §:ò™“6Š'¼píbhü±Ñt~l”ßio.Š¿ ü¶3ŒKBºo}€h2M”šºðR§|¬€#0Ñý±ù6¤½)cŒ€×eNüüÒÛ“ÑdL›OáÔ[ÂKÿ’ûÏj%ÚÏcXþ}FÍð7âî(²ðàB üÔqÔ™ÖÏ7KF´–Ø7‹øžËº¬ù¬?:+ÅÔÜpÛä Q]¦ªTw‘€F‘_¼þËMÖœZt„|—›p½õèÕ×þé™yGZ‡lÕ˜BL‚¬…kŸ²rÒbë–Éy‰üÇCXÆ7>=Ýø;®qF@ œF½~]•M|6[¦‘à¼mK*}&¼cvA¡R§Áoøùï$6obŽ8áûúëL2‰áá;P†P#ùÆ?zìÞ«ŸÆ/TÌu‡Ú_·})¬ÿïâÐcôö˜NÓc@ñ*§ö~M:-šµð›Á(TR¬X”D ß†¼€®ü6º«m6ØÏÑyØÖÀbõýûÜõ0Ñš,ß`5•ü¬ãÇ-6„‡ØÄ(©:ɬBwA'f3ŠêÇ ¿ÏÒÞ›P÷¦ÖÛRêW韑鵻û{JRkÉó÷º %z´3]K×1Çf«Ò’È q{(Ôwfqüêóep²}*ã „|â¼#;`Äw· ®dȄ̒x›È$r ñKæŠg³Ól».!]ÝKUÐæQùÖıRö?k Y³—1sC•3×kWšåŒE¿ìIv„×ÂÛe=éä…§‚oÇüçDÿÛ¨˜x9¨ÉÙàtþ¬íŸ ïάã6¥~QÞYša;=|Ì}<åhü£"¦s¡DÍ'^ïùÝQçó™/Ö`½ QYJÚYë?o~£RÐdŠÅcpVèÃ$Y7+¼=Eî_ó²Üî;Û+ÄО4Õë²n0éX*«¤ƒ‘GÇ9žÆYyéü“]l€7é¥D•ÍŸeÆÛ4mËÁî0w³Œœž«a3Ý‹ù† ©7ß<Ê=X΋RÓ/Šëà(‘ñc¥õkV¬Š8áen„«Ð¼—DZq~ÔÌ­¥¦^ú„fW HjW@1µÈÌlÑ•«Ö.3ýÚÎ`ěﱲAN_ÉCÆ òè.YO©)mù>¨×&j¹NË2s ˜™º.^G2x|;ÿ"ïØ=Ö®òÑæÏ·ÍY›ŸôÝÖíçð›Å;C 5ªílïAŒÑIw&CX—¡“²ë\Æi2!9,eÎý ^ÍÐX÷pµd´Ç¸¸ÐEßû“¢ý˜™.xZT?×mT€þžP—Ù±M-:3Ø:RøÌßIœAÀáÖŠa¼,:ÉH>ƒš8:]™­GM­q m/JK‡9…™wá–w2·¿èdz›éPuåÂ#Ç~àÜ£µ‹X*[’È_µÙm>ʧ÷[À‰ßÛJ€FEÿüÑÎ:5Q®òBí[f h\b‚.{·ó››tƒ÷.KØ£§Å'ègã©îOö¸oeˆ$T ¯¸2þƒ÷ª¸q}_Êñ‰h,@)¥Æ1ÓD3©qí;DwüÌêè_šO¦ ŸÒ˜ESÃx‹îKSGÚ„ OÖ½PÈëäY3ÆÄ6Ý È (¨ã/v÷:˜ž?èS¡[ËÚ¯^êvó"¯‘M¸ ÆÕx|³ÃáVÔ׋l¹ÞÑr|¿ÿE;í ²¹þÈä>XÝC^Ðù£÷ð ­ÉË6ôBÉnxtšÌ*‚ß.ûà”AËÈàÔü‡I‚÷$¶ÐW Pfž­Îìm5iÏ"‚h€OfÞ^`ƒüfÑk¦pKƒJ#AÑÕ›£@µ<‡µÝp”˜c<Îä™ ÍsWrÈÉV¿Rç íæÿÂl©Ì`<ÍÔ<ÓÌ=ß­ÀUT B“.Í…n|~” òºÚðð¼+Ô}%ÅO*¡G¬øåìëVT##ë&ÌMÒî“<š;èT%Š­œû=¹ÄãFœ£µ¯bŠïÉ*㱞Ô!C£‚ª~VÇ^£Xg>Ÿµ“ ïÆ ªo‰°Yÿ•>ž'éz‰±~œçuìçªW<ðû,&>/¦ñ=$r¦ÚEˆ”±’[%kÖˆž¼1(Wò[b#°òD3yçȾΆ֪ؓ›Ã_àï !M$ÙL!tÊÐæî†þ/ÞÙ¬ ?#)n1øðÐüÏW¢éÛTã›%ÏMOÄ¥fªý¯"–Ú† ó†šef_cÍgŠ˜‘s\~–[½EÇáíÆ;K¨ÆÓ’wI“b=Þ….MµicWr™¨R /5¢÷õRµI5:BÞ›–æ¬}!©ô¾Q™G5›Ý{J ÞŠLçQšÎ*î–”ÇÕ¶üÎ}¿=6k´4öÌ/èX›­ìžWSä]DªòóÖ£Ban~+U·¢uâ\±éºèBD4µs©s¼Ž}O!&lž{X²f¹„!F¡OåMcKö–>åÚÚ€ž‰GVO&¼ŽÖ ©n[Rh}NK+8 £«]oðÐr^>›Ä{ËhVãÌ„æ/S]™±*YàÅmRLUraä5ªÌJSODTÛ0Çä‘“äý”ú½³ä>©’„ý%U@¡"Û†á¼j_¥«r&šË‚ˆHEÞ¶_tŽaãñS“"sŽÅVýçøŠ¹=Òƒl´¦ÿŒYZqL¿¹dA°ÂÉÂy/TÿÄfLeÚ¬*’•+Œ!áÉO¨zÎýÇÒÕ YFŒº‰š$ƒÔHèE17Û9…Ø;˰BbBûwØÌÞ=°åò£4¶^ë8ºËåy‚-ñ\qüË[C€(Î1ÏIjF<Ô=sªVdÎÃxfœÅ$LºÀTÊð§»ÊÍ'RBÎï&1Ó»ˆ8'lòI½¥{Ô\y(›5$Ü Ð¸±ù >\ÒCè{%Rªyifö2×8T+1žßÔhñ:BJcñÑ(ª;:sÀÿ“RÛ,ĹÂJT>‹)¸–lÛªeÔÒç|Èõ ¶ö#}@”Wehñ%I¸QÙÒÍz×qµ!}€ùŠZ™CŸ¾ù¡<—WÊÛm–³½Žû^-Ð24i'©0‘ÉñóD1ÕO:ËsOŽóôçA‰rý;VT½è µAiVYë¶£ z™r2`,S nÁŸ¥_†óý ÖŽ±ÛÿêŒXFÚ8ƒ šÉ”XîŸìŽƒÉ7ÖW·ôÅ|¬)Ð÷íã[·©D§6Ͱk ôŸÉò‘2•æê©E”ʳžÔmh»êjb–bW!nüfŒÐâeœÉ|M†¢:RÔOa®Pk’±>½¹ô" )ÚÜfIG øñmsƒ-I€"¶ÏÌó$‚_}B”’w†$aÎè ûnn¿¬“އç¾qØjõ™ÉPï=£9M;‘‹F€ÓÌÈÈŒ‡¯Ô·z´5tôÞÞoÕGÕJ×>ÆìJVu—KŒàÌ"ì½!¯¯å[*h—…§ø\V<Ù+Àp › møL¾é¦ÎÆ~{1¤­-GÊ,–H¶U"¢·–ºv&©Û‹o3ü™%;«ì‹ÇáûùÐ*i …°ðù{—fø‰bTL•gL»~±`÷„ö¾uHjHµžðoS³èÙHSóVÿuPhÿÓž×ZÍóºÂz­2—‚Ô#î†çáu½ŽS¯†§u¦ñ¤°æcñÀ{ Y:v|Ë­h/³‚àíð7õéÊ\ƒÇTTØ«¬U€/&Þ|µËÉéÆ Ð^»”eìÏu°¯Ñ1¼ª.ŸX‚¨è‹•um†}kqëßÛÆþ¥\Ò4¸J&Ÿ©H¿ì°Jä™L-¸OY\Ú¦ƒcÚËúòìÄ&‰D9#Áya~‚–Ûm’4uzpžêÉzK nOޔĦMª'L Uké*(‹¯Þò·‰(ÌÛ3Ï©@m Säo²_[À"U³¢ÏcgЕ2©WÙÍÎS˜„;mrUÍ&_¿Ã©7Í»5”Õy˜på²î¿Ñ Ô4Û·)K:x[ÿ­ ¯„%º±AµXfÄæoô k•Q[‘ìÿ:ø@á Ÿ¸8ã¶UF¸9Ù–`v–îS½ÅÏ®púH =ÙÖ¸þôφõC¨¡Œ½”T¶1¥öþQUÆõ]Š.Ö #ð&Õ„±Œ:„Ôq>>W_·t!6S}ØÒ¨Íq‚6à&jŸ°ù<¢Ôþ?¢¾Å”‰#χ`‚Ã×W0O¡5D+{ÙäÞ¿NúT+÷?‘p$¦õèÌôx©D׺f‘dÚ^™½„üMÝè1𼪭 ‡—‘ßIðýB¼Hý¿ý÷„¾¿—ÛsxΑ WÒ6°UU“â¢OÐ^a Ë Œânçæ1íØµ#õ W3¯D7&×sí4›1¼Ê^‘h¥ºxޤU s}©µR©^S}?×Ù}&†êMÀ¼B-``ÔÖxçWÑ–-LàYÏìóx9à˜OC}ª šv³Õ¢¶2‹kÈ ¼¤9þM ÐFljÄk¨Š}¨´žÕåjÃ|Ê.DÀ>h(u¨xB•(Ë{¼üŽáŽ R²Ä}Wœ$‹8nv`€œé¼˜ˆÎ¬°½<±}GÏ\£âö„o¦ÙÐ~OY.õµû] S‚ê|{û=[žhårêòÛW°×œJ‘w2I( «g–pfhþ¸±eÊ߉ºAëò¡žÔxñ’H¤¿u¿Ä5ƒ#‘7Ø âĉI\dókÂðÜ:nˆÃ„:ý¡L—ëëì+YÕ‚ûC‹BWJ< §Ïó ¯c Qs—hGÆw-ñ ÒËu¬ˆ‡Æ‰‚{¶jv5[¶ú !w˜EïƒKºä™ó*óȜ٢6=Fm¼1È–‰YLòg ïf\¡ä”}ßJ³#´÷ §!¿d„m¾€5R^¿ïB!÷X†D†rЮèBbR´Ì9½ó‚× ŸÀ¶“†Y= 08þXJóçK–ßã§Ë™ÏIŸ<| €^·~¡„··÷0õMeZ‡àþÌÓN‰¥öí¨M8ìùŽ6ÐyZ¨¡2O~=kªR»ªö90™ï¿VTÙðÎg‹…µÅÉO SëüãlîóËÙ¡™3å¿ÈäÝ ®,×´ðôtMw‹¢ðkþ·¸!z8$„)¹×ÏÿŽé¯Î{FjŠZê¡yrV 9ºkNBúÞ®YÞæ@Q^ó-cJO #²ªÛOuÊtÜ,-Ey6-¼O m­‹ž‚?´ãàY]i÷ålâ5O3Á'üÿkŠgéŽöÝ<Lj;S£ò¬K¿ë©Y?ÔXªÛçrP'¬€ðhlTÒ]Î}Þ¤RwV³˜¿F øÛ+tËPuK 7”•&`\g'¿>É Å¾\Ž´6|LßÜϧ9ˆ¾¨ô½­F6Âd^S¿û²tl™Ë°fÑ)"ÝÛ8–•5y2˜›dNÑ38r~9T›é["áA<ËÜKE~YpÞÒI™0®þfuÉç®Úf¨ñ0’ÿ­N‹ :è)Âl>ùÙ¯ò%…Æ·þeÆ¢0™¥%\Ɠ¹¨Z?̆w,ù ¹„Ê ¼–äÃx+ÿPt»44´ WüOŒ3nTF_C*˪ÍoknTZ#¤éÐÈÈí£Ä]•qK£=Ã\*v'9à5Ê6µžN/wñœskôqó°\ão ÜÏ(ÕIí‘ÎùÌ‹(C2‹©´j–@vA#UzNI-_/W¯ êò-Ô3çv WÙ—= =˜Ãä'ÇtÐÝùgJµXìÀï ë ú¯~yôðó˜{ŸÙ(—0’²Xï~ÑÊzµÐpC¸åŒSí‘è^W6à7gü¶æŽ)I;Á€%OÜ'ï&ÂNôc|ªÜ÷,~Þ‡\ÕOA©ÆÐÊj×7ÂÜ–âKÖ}ø’æs;_Â"çôž'ž_-ðêßÓ2s`Ž»SÚñµvÅÉái›C5}øâøGÛ¨©¢ƒŽ.d=ë&êþ˜ M4Øâ«¢×‘öªéŒÉÙàƒ.7¾ÙÖsYÖÉù!Ï¡ç%ñV“Yã‡O±Ò”HDßý¯Å1E±Z¿—º Ô¿³Þ¸™µó1·øž…útv¢sv•¡Ó~ÌSF pW¼ ¼°VH¬+{Bl‘ò5¯Í[ûß9©;5²©š‰Å}3šs^6¹ÀXò ’ANÁ?~ÕLðû?àðÅi[¦êÖno1VÑt?´¯ð·A¾ú˜°‡†ÁN¡÷ø¥Òè»Yk¡®Iæ¢%DÔü*&}[4Dgæi¬›A¾Û[sêî~`n0äŒnÃ=¬Á¡É!òy%3B¥³ì£Ã|šÅ‰9Ûý·Úç5t†rÙ‚¿ÑÊ–‰›+Ò².á$ÅæŽ4%Ýp TôäË™W$ÅæíY\‰gaôLÅ–Ïê  ¢FjΑÛ$sPÒ©V®íñÁ)*ƒÁyœîÐîQ8ÆÃÏ~©Qi½Cýñ=7™*ŒªúÞ¾h÷¢¨õ: ‹<®V¢N>©T²¹g-'÷È|t,‡ãòqæñz7–L- f÷͘ïjl×Ûm0º Œ~ù”•€ÃR7?˜‚vÝ!&´£ÚûÝ‘_äÏç§Ó/X8Íxò+™¦F¸ó´väÏý‚œ¡4^XiM•CãbI0γã{l}h;8íËöØ"AL6Š•ˆà»„6RòªÏ-ü›ò÷… ;ÆvÑøõÇþP èpôŽtÉtB0c\µƒ>;²GŸow{=[÷ø nëà *2‚¯¤ Cl8PÓÔN7TÉùVŸu´ºo¤4<5"5,éX©uz¸€ÏùãF¦_ ïþ¼Ã¬gÌvxÌh©w½ô¶S×ûþ&’˜Ð;g™‹É¸Š+fÀûž˜]Š ÐÍ)æZt~‡6]=¨ò5_[IŸ,øöošèêšSŠ_nc3XèÆ~ •œ=ò8`ßph°ÄΗ);!yƒm–ª^™GE^ƒëo8YvWWv^ù̾wž-§={Hš°ÒFðï‚b.SÛq H»Ýn[ÖIÊùæ9!|Â’ŸDg”Æ'Ë>j­Ö¼V‹Õ¥Ûã¿€ 2`I›u]ôŸ<°9å¾»çaˆ¼ÜMHl€šŽ^wÅÇËs/óû½l ´ð÷Í]¸aå4³Ó­ò‰Ç6Œ$PÇÃÏè¤S%¥Ô*Óš°2Z2Y’uãŽçŠÀ´ôî\šß®kª÷ûÈn+%lnù݆׋bU ë'—Hç@»ï!5*2Ç0¨6 ¤bvÈ-„»þ#"›•ˆ"èKŠàºû¬í\”Ía‘T¢=Ï—È üîë?Z3Ý®?K¶õb—XÃßo“©©sê™NŠ­ ,e"TÖçŽ5ÐG…JsѰðM®œ#F‡¸¦-p“Zq*¬ËÂÛðizƒºQŽœl|ÝU3“œ¸Áx§æÌk²bÿÖʉ'üÚŠŠ <š^3nÓk–±8ö#uþ!óЪÄi%-v(E—½¤›Û3 …}º¾Q-Šír ý2R¾H¬R>ž­kA%œ’åXîù Q†ºÜWØònA¼Àà‹»ø1ÕeV‡¤íÜrAOÆûYñlá!@#¡Ï_ø—‡N]ØÑäTk %°b¸LBs =i‹¯>À£xñk–«šN˜]cÅ9PÄKé‰í YŽHžŒõmåL‰k¸F”’AU‹RèÓ¤qá§æìª¶ÑÃÓeQŸ§ K~êƒjûe­°‰—I¶¯f„—CYÈï×´ÑrÍ`™eÐ9(<‚Ø…öг1Úq)Ñ8«•Æzß{9˜&Ãì)æÜŽæ¥r_4ùϰýñÁ°R%n~ 6ÉîÑWZåÕ(úÜW—³3k¾ëÙûíÓêO»ô” ÇökžºAŸÂˆ¾ŠÛ¸gKм4ˆ è.Ô«eÏCÕuw>Hêé±”E=/j Vè&ný¼pSš›»žŸ„ Þ;šä@ù1›g‘ÍV]w¨?P‰øŠ«1~  GʽßÒøsŠÒó„ê›…V5¶Br,¼ÑáM«ÉЬw„»ØPm¼âðñãé*i`4X|ˆDBªÞ¨Ì2>Æò’Ü%ÜÙ–»¥@KDÔiŒ²:K·À·Xa¤IÕ­°&±bÑ>—†;c\ZÅAä;×ïƒxù|»âÛLØ\µcÆín¼¥z…$Äͪ 29œL@- OϹmB¤]~ dq¬-¢q]Bxz‰9 }(”“ͯ\˜E´Î?Ú.Òó–Âs%Lµ5ù¢6XlùÐ¥èU]u sfP)€Ó+Š¥$-RŸL¬u‡­[¡_Õ ö³%…Î2ð«í¤ƒÜ Ï¿ƒûÍž²Yʬ6Z\m`ðmØOÓºÅiÖ^jMa 6püÖE8ó™.‡üÞ’“ÃP6¾Fk‘\qÉV+þˆ›Pc¹‹™‰É:h’?zÖ™Èt9ÿ\9¯QEˆÂ‹[Lq“[44Ž¡¡áƸdêø³³›Òl)Ú}­új˜Ñe7Ü^ÉÉ-Ô.háÈä뢋tŠæ~p½]@cIqOqZ’˜‚äF}¸¬ù羈&$ù —ÂàFós؅أ04x]ÿÌ[ š'ß„Ÿ¼V•¸þÔÙk•xð¼ßï8ÛñyóûJ›<c$ào¿¿{I$G}Ôê›îlƒ¸ ¼¦¦èQ's ­‘Š–ð.¶^&¹¢›P·õ~  rƒZ¿Eñ&ëÀ8Ìòæ<  s3¸ LJÇg ‰Z •f8 0I¹ìÚÚHú·;w{¸Å€ø{s%b´@¡+l˜çÖÿH¢#^ðŸ~nvÒµ)Ÿàc¾ñy¯‚#ùc‘ íÓn ¸ãuþT0¶¦Bßç€v¬d& –ÂW ¶û\®£M¦rrØ*[20=ñó¢j#‰×0 çÜ1 vnéÄe•0ØŽy#š, Á€%ýkµ?*·íîÚ#€i}Ák‡Ö.ˆçÁŒ-·E´6nïß<;¢'})‰°RCL"[•¾¼IàNï;Ð=þ…×±“ a0ZÅbÁ lK „ì³i~8¦Å1—+5\acPfÏ3n@ ;GÌPÌ ’íb/Ák”d)ü“ŠðÜLÂ"Þr€ôVID² ÿÝB“.»³Ãa=`Àž$ã1èVð]÷Þ'8+`wdq‹¶éÞܼږÅèT^$×à: ¥»(§= ¦qÒàÔ\¥Y°B·Cºe+XJ,¡ãÖ vâØƒÈHÉ0+5VfëOiYU¶1 ßhÓv&¥ìûeXµ†CLü¦-+æÂ;Ø*“ȡͬ’`"QýSö¶Od*y{6!m_í´­xhá°Rzñô9=iIùNR‘øqÕžýº/âê”kü<‘úš°¸%_ÌÂfzô{‡'u¬ž4 uæûgN÷áåFüÂ(ØünÖa2˜FN4«ÀÝç’!Ÿõ¨0ü½g˜kBL~ÜÚ©çñ˜á8ܪ¡®\ó¯iÞ–õx;áPzAe]¢7îgsÜ$ÿ–ŠqY6J¹ì˜½Êž­nÔAŸRV‚£ì,„ëÔóp¯gÅW(÷9QyUñhwMQ¦avŸãÂ3êju{Emü;µ,ÎW“×»^Ú‰êYDê~#YïÐ#§wŸµ]P>àÄ •yåD7¡u\¤ßjœ±XÞõI’%ä²[óxoÿ´(5»´´ù¹¯«QÀª.ƒ¦^ø?¡W‹oŸ˜ž‰P«UÞ“ Øæ¥åŽ}0F#Àäòó6ö4×½·~,¿öÁT‡pe‘Ê„œÄ—Û°Ît‘’UðxÀ|]kdz—~È|0Œ•#`:ëØÕ56%ó¯,Ö°»å±¸à‘™ö¢ê€uo Éf<°3Lñ×eý€í¡›N~|\Ф…9Pô~Šöá°ïòeBŸý‡…qÇéyšæB8ÖE‘B'øÁ;âãc¯wG7 Ç"¿CøµÛØ€óŒSÖ{Yü6*=7Mmrªp˜ ›sb5 û\Tb'ÉzùÞ·º¹k¸Æ¤/ê-ƒêë9D?î­%„BWRz¶m/?ÑQýž4èd4Žy„e×Ðw0Že[$ÉÓ©#ê®÷§¶fÜU)Œ dH¹<¬©‚½äˆÆ˜¢þzo]G¹ñw EÉÁ*ú¤¿¯É¡º÷` Ó$eZ™œ±/oKÒ¨3<ÀóHÔéuÆr}£†œšG¯¶qØßEŒo8Õ!Oð€¼#¨¯-d«ñU„Ö÷µop°ù õž0lƒÇG« ‚~窢sCoi„OB{ý€¿óK¿|IV,Õ2@!õÅ$Èj¹DOczH}».¹¸[0e^#ìÀÏHÉP4€NLº D_™–P ðn›äºÀ‘«ÌkµcïÂä"jK•æŸj—@ PéÏ;êžÄ ‚×nöêÌc6¡ö8«8såsÉ|¡5`¬½ÊRP§Ë,Œòýú„¸@1扣·_ˆÛ¦!“ªcgÙe:æšObÚÐÛü3Bår:t©ªÑkøì7&âÆ«‘ØÆ` wÃÊ"Û$„Ôf6½ÁÖ¼¢ÃGµ“ÄK·Q~XïyVxÅ ÒúÃ/•@oZ²n)p)öØ‘ù¼7µL~Øšk9ø¨§í1_;ý¾ÍÖ¥*òÍmó¦ #¬ANÊ>þäaÊÕ‡à¯&{î¨}y9¦eåWä÷VΑ)Y„©Ô\ßj4ÃOqÁ£÷}%F&«^•!´6B¥ D”i|JÍz“»s9Իɕô§úÑcSM.¹õÃ¥äbaÀÏ®÷Ÿˆ-¡ãrªo„ªJ6­­ÙŠ˜\Až…¬=,³ ÚL…þ<kôÖß¼¬+EnS_è*¿þ7¸rˆÀ^hÀ}ÿ5´×…<€W*Î%ltøÕèþ܃]l¡³” o[®Ádì5S¤µë–Ôs/äJ‚érc*š‘=ºQÐÎAÈ·”“8ÕM¤FclQÖK˜v §J+bB;Dâòd±Œ8>7Ƨ°r(Øýt±÷…\5Ãhª¤Og΀™SNewëùÜLÓ(åÕ]BÅÌêŽ)XØÍuCA½Ì>òqϯ¿èwú™pu0N·@h˜øxë@6ØEL¢´ÓPjsƒ~ÒD-a&ï8¥Ì^ £2^•oŒ~wƒ §ÁeÏÕ´íÃO„”h‡!{Çv‚˜0.8•™q¼·<ñ»Âï,’Å®k~›Äf¤Nšصö²ðô¶ìÁj»°ðx—býe:Òë¤Ц&ÒaT1Õ‹4“|P£³Õé|ɇu:’`ÙglŸ¨}R,Œ°–ª´ÓO‚˜í¥fKîJ[© ƒOVͶ#»AHú»Öv¸ óJ³ÝqË\êËš’ŽlT£8¡ïl½Yö‰JàÕÅ!…‹µhù*1È…@ŽFËòþÒIûëNk%YëC ]iÙ>s Þàwá:äÓmgÜÕ`s}3­Ò± ~8æY€åó8M@œÆäNe±)ëÊ©‰ß &`®W„:_uñ@úådé¶ý³zc%ÕEH»9T*˜Û–ûðÇÒqE„óPp=*J(B~l­m>ƒeÖ>aÉò•u˜WÃx¬/ú23‰Äÿ­Õ€G^ÿz[L‚a‹LPxF·G‹ž;í ¯Ùº  Ú¡»¸»î—þ•IŠƒú¬)»œ;¥M&H>G„-]’,%ð¬§Wn‰B½PÙbÓ(ú·¹¼c¿a=¯ÌüÔšC‡$«Ÿ+*Ùދ̽åê.Š»¯‹Í Æx®ôPmú½Y)Ó0{ªŒ I‘8Rò‹q½• à£{s_ζ™B|ÊË’Ùá€Ô•Ë8z™Þ{ÊIc†Ù#/?³üè¦Æ»ˆ÷¦f>‚3ª7ÚnRðd´EÊç4–0¾Ê‡æTçÐü¹ôúõV¾ŽÃój«m/ì;'¤ŠkPÁ›¶`@Ó|1y¸úºö¦£Áí¢Ux>xÓO_=~W*Ѯvh$Ñ+‚™×­Å<—ÛÑ÷¼šÔÅóqìÛxŠ3„Hñݦá%šäóºsõ›àˆm{"Kç Ó¥-î|ˆ¿E¬w'ÅLÎfûÅÊéÌ)Iñj¢a´?¬dƬ¡pÊüùíÔ;¨ òжMô0OÄá6Kã~tï[ï5ßâˆèÝ$S J7ÂÎOŠoª†œ:ÄS4í8Û|o*0î{UO8¦XlðòßX‡Ð*¯“­°xË^ØZÒâÌ&dô®@4È~a磽 ûb¼?Á ˜ÇfFõÒ6Ì ô‹tÛW›Gèèq)b>Ök¸q<ÏÏXd¼½®â@ø£ä³UiRo· ÇÆêä5…åÁ›)|UkGî&SûX¼´Í-éZ-gHxøá$÷î¢4oŠfIr^¶TÛ&»Xtÿ?µOŸ}q Ú~¿ŒR›xàq(µiO_x僟Eù*äX³y½f­z˜^jú/“YÏÂaѺ2ë¡!Fw?UfU´X@ñ ÕéÅ2µžu÷͈ßþô ô%Äe:0§‡÷lõȧò‚߈7q(”G–‘IÚG2ÉD2ìWp¯Ã« MÖÒzØÃ¨Fg¶¾‡‚Ù_$*û¤‘2›š]¹úmüö/ìI­1à‰ ÂPÒŸ+S$äEqz’£ï)Њ#ß}ò \ÿBU¬€1®¶j“ƒwm7Y¢xü|g’*×Ôñ0ø@^f§?@úáa#bŒ›¯bEÈȼi¡<¼šÔW¯£7ØŸl70}-p¦_ ¸¨ó¤=N 2Æ ß>ÎhTÐK‘å't±ÕݧŒœko§÷_q¨9ýéÁ†é™n]ûèÿè…zë&Ðë´U˜Ú\VCò!ÈýN5ä*f°µëÔ û™–Šñâ­¢OλX~bÝäJ>qw~mC2ðÞ7ò,`µ'ïá Áª‘©¿u­÷¸‘TFÿM:娆 Òì4k=þà««‹´YÜ«ˆcÊ&¶Ïo!’Kv"äKD‘§ùçO¸.Ö)ÙÈmíHåÖ_T ˆÈ/<“˜¤Qû¹œ+ ]✉'ÛÖøæ¨iÕt®‡*±KõÔ™-UÅ2³ ~·†¹¡ƒÛX;ûšñså[q´z—ù‘»s+§ÐAMÓ#L7ï–ÑY iWIÿWbÚüÔ8¤ÍƒÔמttÚ$xäzá¿Ó™©‘$¬«ÂÓ"¦—„ì#õê%*zîmš°–)Ö_¤µÙ/PZ˜Àm\aÁŠÞÂ&Ahý7-g…_žå]+Ù¨*e¤ê^9S‘Ä¥6Å´·ü¾Î–Ò…Ëļ^®‰ª«ú_0Í:ÞÔÜŠ,è<ÝšP)pÂlHÿéÀ}ŽÇfƒ¬ÒrnÞML;äT+ôÏ¥R¨C^‘ÈÓð«ùUÓÚQQ*/Ö ù˜Òa;ØD)û} õ£æš=$8V·×D5/ÚôƒãJ«6µšë›ÊºÚ;´º·˜‡Ö@ýÞªn àÔéÞPþ½ª¾Åé"Bî‘6øƒ1àÙÉoÞ[°0K·ð³<À ¦Œ2CÎÇ9~½‚5Y(s!.ø­¡Cq•còµ½{wC±9 ™MêC¡¬“`º-ÿ•v+m€9ÈÍ;oÂÕå´dþîêàÀÀóò݉›ÿœå@G«V»ýøéhw¶œJ‚íyM,骑V–¯õkÓÇH=F#Xa ÇMšÖ•ô§óqVé± á 0 çq馢7m`F e©NÐŃžhÒt¦Ê½Z”² ­$5?޳é¹®7§žYð­ß(“™34^ƒnS4t¹òÖN f]!°(x¡ãI^^þÁ½…S¹?4hü<â¾ÇUZº„8NãáJÂB;١ý^gîrušœËÛf”(¼·-ÑåY,ñ¡JS$<Œ4xLDÌ}Ç3ʘ¸a°ü V™¬ŠæÚßB£@%ý9£4ì¦ë#Ö\Õ<4E‡å>æåG6…¬ùjqg\r®¤°tÁ‚â¹ýâEs‚*žaaÏ-“98€ž8­#ˆ ¦ïòy8;„- g§ö¨t/|‹—Á Û°2¼53ÍÖ˜Ф?Ø;Èa¢ím°ªœ¨o0ò ËÍ‹²„ø!ãz9¹¥œ.^r@ûJÝ¢S,@&‰À冦RLX‰€WtÿÕ“å‚9 `¹xÏe˜!MaNÐ)= ¯ÆW7åÜ:™ èÛÈXC^ûí}9¹ÿß¼V‡{ Åî‚ÓN®K1'‹­ØS`îËX EEŽl ›êWàÿT™Ñµ°+cÛ¹®óGʽòU ÚÑ-\€e¢Îª‚ü¼ÍßâÚ³ k¯zïJŠ=ôYjƒDæ]mïä't$EÑ—1:jd‡Õ´Ü‘¬|hÙùÞöÄRžñG–!‚íoØ7Qx=]åOZ…n9xÉ Ú òÔÞèö¼_%r€ÇÄ‹$éŽúÏQÝ)Xë-}ÎRüë^£×•vðÐÒŸóc•¯çD{ä 3Dýÿõ0œðÀYvà\'à‚ë7Z¨‡¼Q¯Ö,¨ÎUb°Vt^ˆÖþì(ù=°uZèþ|ý:±'£è÷„nÝ_™Y«”ÈР½cœpG·¸HÐwGçÓÆåxc™|˶"ìa|šU7ňÓ}’¤†U"L悔X(â·û« Uþ•ê°ç5ÀÅ:“u¶9C6À´âá xZ–“”I‹Ìæ-çµdU¿1'ÇJ7XÇyn÷Ø‘ÿuö{Ÿ¨Ù¢t#¡^`^ó¢JýtªÛœ>}WPy‹öÙ©¹ˆâª§À¤9¬0^NJXåe…¿Dðå<{âiëaH»ÍÛ#çxŸ}U©l‡6õËE-í¿ûe×ç¬aî€ÚÊA¼OZé0ÓÍaR¯“Éø8¸j˜”c ob REùé\„9É V Çä#ç2É.w¹s®/‰È×ä0œZÊ–'¦wƒY¢É<_D»Ù`l[sdM£·/ÚÔóœ”[2wï•ÄZà€à~Q~¼—°—€ƒéðÝv«ˆ^5- ± ¤9‘›BÒ2ߘ  Ä""¨„Ä”Ø_G3àõ׽ú« ˜bˆàGRmsºh E.~ßÄ b»¸Pl|¡qßh¸d‚À[/îØ8uÐd|W^ÑÄØÍP:åÆ Dº¢Y¢Ô$b§  \ù§Š)p*ÅA–N`ó€c”ÎTÛ» ]+Å+=è ûª>ÈNÃo}- KAƒØlOè ƒG`ÄØá›Ò-°5ãfíËÞŸ€ÇEƒpó ûÝN_xÐ †®#¥û5LÇŒXÖ,ÕµÚÚP4ûƒ¹6þC͈/^ÉbUŠýP'æ¾'ѹ[4.é»ûÐŒëhLЇ% o~Î)ÿhKR`:O=ÜÉ…'@yÍÐTŸª:`5M>zâþ$W9’mÀÅ?dwrÖ/‘ë¿i°ìຓš¾ÄoÇó‘?›p€QIö먠½º×±m>nN{(éæá*©Ð]“F~+•–wå0hCIèvxœ«:zóØôêö"FŸ­¼Ü¸z(g¥µ®Vœ¬Y™ó Ù7ÔPMÚœj°‡Ùé× ·¥òÃjÕ:Õ‘«27<^…É˹%FQ= Me²ÛªŠZŸÖG*!€QúP8ZÕÅ!RÜÑ#§™¡+fMU%œÈ~rÎ0(NJq©±bÀˆS¡^FN=k¾­w|79qy† 9ÌŽe;´ŒG›¶íÝÄ‹FDp}]ýÜK„Êió, „ÕcÙ®e›pо øp`wÆihI7 - »üw-ãÒí¹w{P­2'Çnšp|Óœ`.¢1©àžÍÂû µ¦àØ'"xáC˜·Ø”ôBåQþpÏœ²"ù¡nOhÙo†íÀƒ´zl8`EÒ&á ]aFŸ›nm ²8eùcïS† wUÌîò_”·n¾ÊÄïªú–v„4=rä}ŸvTdÆ¡HèšÛÁ£A¾îŽª¬ÃÆ’%6#yEßM :J´1yPL#ú,ÿdyZË¢‰÷žTîÅ´õiÂ#7ü©§¯¿è@Îå#øéãÉ‘9‘ʧ‚ß;kizG,þ:ÑÕñZWR€n ¨í çnTd+j¾Í¾û–Ûö EbR,íD.Ó‡¯ÆÆ‹Cƒ !ØóÎc:À²‚ìzÑ5®¼Š@"ßqüâ lÔƒæLp]¸í…GeX"xnU£‡©Z†¸[~Äz¾ ¿~[÷ÈV_?ˆÕoÕ ÓgÞÃ;¤ªâ£ž—¦{¦Ñƒ‚€í¬JÉg〠@Œ¾ZV¦„@þ”ªDÔÊ7ÜöB­åG„ìÄJ¦ßî²H 1íõA´8^™Œd°4ËbEƒ€Pw^°e»ºæâÅÿ)½—¯,žG‚ë°‚ä1b8r©qÛýN¥˜ÙIðé¯;õ#äklEu©û+KW†ì´&î˜Ä†V`{ ”Ù3'?AW‘ä ªù‡¥Í±]íx˜hÙ’3ü½bþ¯NaxúŸÀY^Û«^¹ëbÖDTh¥„Í"-7¾Cÿ†‹²5x5JE®Ó«`Ô,a(Ý6lV®×ÂøJ1uz݆2T'±@Ú‘f äÂ,õÝâ¿Ýì!:©1b¢ýŸ2–ÖK`tŸäT×™(H\4–»Ø¿ƒ­Çy½`[^fªZ_ÐŽ ER6¢­zÏ1 îÄšžQ~æmFÈ-Å{ÁÅO¦•:“¼Û:p£‰*æ›!h½ö5gejÊÌ@pqx“&=(|NkóP æ´ÁÌ‘R2Þ(vÓúË’ º‹ rÎð”—ÁàX¨Î‡FXûþ@ Îz£YÜý~ŒPò¡µ¤7:erQ¬Y”Ö¯ãvÊmOá n†è¢ÇÍ®†ðÿkÉ4pæÀÄ” ¨q3ÐÃûn*Éù‹`ó¹6dÆì˜,9ê† ë·ÔÿÏøŠS@"'q ¼^ì[¸óþÌ¥…Œ`«sÝ\Ö`?pFÑËŽòˈÉ#Ÿ™þí±x2@šV¹ÁaHsÕ.ذ/?t¥Z˱ع$el#sy.5÷Ý»¶)[Ò^ZîZïˆYJ¹øuPž0/Â@w½ e ì«cæ>dôƒ £Ô^ð<ÎfgµÎ÷˜Òºv4͡õ‰n³¹eè0»¾·) R¨ÛýCá.°Ý„ê3¢ý“nÝÛK½a);¥üOáÃivžsiâÍm'dqE=kÛÞ#Yùb9»º¢ÆgYœþ& ½¦Ý&8‘@ªßÑ…ê’u¼œQŽYÁxºo.÷ax põuðq<Z1RŽ ’ëMGˆÖÚXàÌ¿lá7®¬zæ5eketr$·ð1¨5eÖéXÂ|CÊ͵–®,²ÏÁ¢û×Þ'תÒßA1V w.m”Ò?IRÆ;°[g:³˜÷÷r3 !ð{‹žz' ;¶å"¾‰ÊO¤F³ÓdÀ=dÜÊlLjhXt ›º†¤‚ZíÏ—9ÇüÑÈÍ IqÈ›_æ7Á 8·•<#yèàñQk`u(úŠÊÑö‘$ýß?ØxA uŽ‹.¬œ_HË}– ^kCé#ú·\|â§ Ðħ›»gãÚ`× 9D%k8iNÞ†¸w£†þì¿öt_eþì*ÿ‚~l†§„®ž|SC¿™nãUÉX”S©Ç ­5»ÄÍ>hãÉ_oK¿¦Ä\süî,¢l‚4©!(laðо(RÇ<¡OÆÆõŒ`u¤€ù”ÃtŠÀŽñæn’5¡˜VÚ!ëÃbß2÷FiŠ“ÁRìáºÑx×WÏÆ°6ô8jïõ¨$[Þ[tcÍÊÌ›÷!a;×ë¨ ²2c[I-iÅ4²wZ¿Ê! ð«\ëwpÛÎÑ‘Sú‡Tâa±šÕbž[inv¡gëÛŠýð­›mçŽp­9YŽ—ßˆoÏ*"ɪær>W8;“¯¡ücˆétÕmôå½þ9@&ªc³öcC-Xr9ŸœJ*;%JL»8l¤–‰€nø5ö®)óXPg 1'îI°äî#|¿ÛØ ÙD à«r_¼¯É‘9ŸÑcgÑáöÅ!›Lç£àÏf†-ç¾Ê†ÿ«ß‘Øîx+É`É¥wÝš÷~FuÁ-ÍöIâ˯ãÒ¯Æ$âG©Ôk1^k6Õ§SÔX2PFþæ”ñ,äôëç¸ØwL*¨Nb?Ú] d$š…ý=öš=vÌZ÷ŽvÚk:ûϼóVTlƒÚ‰÷ŒC΋ƒuò|=si 6=€ˆeʉaˆš•Ö[˜R8;Î?ûÇn9?ãq~¢G§&mãå‹è•Æ›ÀãmÚT/7áab>8AûŸ3ùÍí›ÞÙyI“<Ò¨IÇâJÕ&¹ç³[à8¿ÛÅ4ÝIö(ð«ãÄ}éSbÏmk8±ÔúWÛJÐ3£‚{¥qúoˆhÛ<Ãä‡ôn…ð3Ç] äêgÒ²/¡—~û¥ýåå(û"Ô°ÃA«/ah˜iòâo{ÂdýÅп4>Ð3¾¹Usd²”¦‡íÝåcMÂáJk*Úq{o —þ¥”y,¢€%Õ”¥‡nG°xþ#Ô7ëk‡pÉ]ÊzF‹HñÆÐ DË¢* q‰þëïio{˜ê@Úµ0'KþËå2î‡ïMTµâÅä÷ój¸!¸r†åÛ›'g7ô«oç2›™: ^*¯r魯}Á +ž/RHX•Þƒ-m}$O¨f_¬d3&3ŽÓõ/=뾕ýü¢ŽBÔ¶î×À̦¶É‡BÌ­mòê—^Vx-;ñ‘Φã )å —¨,hCU,ýaÙQ? ¥óhF'þþ‹“ùw.¹€áÈTð€Ã“HþGè ªó"ï 2¥ẨA}Ne!£¥Œq™,-$"}VSakjÈQú²Ó;øå©`Aßð¥¤Ã×6èsèÝb1@¼0Cä2²™þœP ¯vþ‰ÜJù˜îë#6`¬`jç6 i+„ÒÀ=`$Û¯Q‹bD,þ”L¦èBìU0Û1ó.O,õY«­¶*Uª"©ÿvœ`¼íTSƒ'e­h­n@ï-(†ÃLq±çJy×߆Ôàc ²bÓl)Z|äó»C꫹ÙE‰¶cE¯ ƒ«{ ß+)ðCLLýèù­Ga$ï݉y*ùØô,é‰o¡ë‡2RUgXm ì"±ª9¿+¦#>6ÅÆ$0ßO÷¹:¥¨@|zKÍþFºG wáw¡šƒšQÖ6­kÔüÉõ@Üq*Êr³ø7€i3´ÃOÌ-Þ‰-4䥊²ñ£žVÔ¢¤2\¤š ľã?3»Îò&Éö$ÄÌîgqa¢äT[†W,4 ò¼å¯ÈÃh‰žß˜êkÎ)%êu¹9{úyÒÚ—‡Eì ;ŽUZ3Gõ)ãÚt±MuW™{&¼6@ÔÏ–~sŸ?Hê³EÅÂf” žÔTJòo3çÕ®×ñ\½˜<_'blCŠñôo½ÅÐWÑáv–²2ÝŒ·G$”€©Ì^º7á?”L:qšëufn×®˜'2e>|¼çþ û‚Ùñ|‰Z³+Œ3f2„À€E/†Î<ñŽ*ëI˜º¹›Þ~-toN‰SñÁU¥ª˜„qšþ¹–‡vŽ ;EÕŒ™;¾ (V)"édUp{Žêù‰ûÀ›ëØãY‡U"â!½WtÄô§êY¶º[=0qNl2'üw9¥Šûž`^ ¨’£«ÎW«è™ ÷ÆܶÝ3[P$¦zOò[Dþ ƒ L¹Èwašc(Ýß‘6gdJ¹¢zAX;p¥•‚µ|Ø¢®ùf¯bec'îÔr¹ê0‹úÝ ¼ÎüÉ,P¼’½ïþÉs?×r»}«Ï§§õÒ… Ä6¥ÎÅÒæßxõÄÀf­æ¯öwd[îùØU!"÷—ç_UþwÒyïëžÑÝe†º•©DNd·†súÿPBlvØÛé%¡ïô:ãEð‹A¡eð5™[ï=êðÏijO«€BZ²*½ˆÈW_й’!P7Úmm|¿éèž•QDfЬ¡l$ñl¸ž9 M“jðÒà3Ç‚#,eþ$3÷öÄVâ`­›Òå©qâ°æN~þF>Ž 0n*\ìs´»îóí¯¾¼¥6σñMì+¼SÀr‡T q<àSf–¬†N²÷¦ÓŽø2pj²ò3ªJêÅ6 Qxóz:‹'V5vÌKÉŽ!ÊÞ•”¶1ß.%‘)T*[~üâT@CnáÆ]¿M­0áWm -‡D¬°;÷·p U7‡ýžšÉÊÁÿÍÏÑ ~:ñ_B>µvƒ®L²ó~¼ª Ãðü^ÓÆîFêjøVøY%߉µ?eÉ/\>N¯ÞVºHòâ O«ÍVNy $ÖQÆÉ7·£ø³×5}o»'»¢—©~ùC:Ý Çþˆ¡¢ÅðTà™áÎ}Q5ô‚ Î××ÈÄmœ„Ž=´×ëF@âʭLj&oõË­h‹Á¤4—€œpKÙ‰•…cÞŽ¶KæJeçiNJO3ضWµv]s&Ó)¨S˜‚Û‘Ž3Œº™È”ô½‘v3cç¸"†`Ä™þ L“{›Oïä| \û½dÕµ]òG|ˆÂTo…V.S%ÈîÉóµåP4¨Ìz°×ÎZkAÅbÑâÓÕ{fä#A—xñŒ®‡ ]M‡²‘ =ªB¼=©=È[<ŸZÔOžy´ÔßpñL¨Ð7^^ÆeÇTÛk ºAäðqw$™X÷ÒyKÂ`+*G±b HdEóô²¶´ŠüöŒ„…0>Xn™•¹xãïyµâèEºCDøÆîå]æïg|Ô™ðŸµ${b'„Ò*HyŒŽýA]ݲ»kéùJŸ't.w7q—4*Õ½Åëxp镤cUÉjŽVâþºÔlIʯÿ„¹n;µo±^V¦•RJYżç«×‘]îp‚% ÈÅÞÛÕ·{ó…ŽtʽNÓƒljþIÙÜ­æùù‘y5’›Ì»åé’Î×¹mNÏ ‚n=âJ-„aÊœv§)ŒH,ßÿÿý`#'%ïÕGVí Y©\N¼ÆM“Ÿ}‡òdv&m¨FJ³­@¥–,¸Žc5;Vëo¯->‹>ÎñÕPRÐ#˜®l5™-þB|[× a›%¦a%nÓººï”`n÷ þÙ»%7HwK‘.`¾ñw„}zCp³ÆvÕàæ³”\b:#hç¢jõ"I Øí惯¥réyÌ ñò²ê(Ï&k8I2ìroÙ*«ìô150©ô˜ºDqã[Õ=¡š]ÿÌR„vÂRƒÐÈÙaFÀ ª®Güž,k”ÀŠ£ÊÒ?Dƒ˜U§ª3Î+n¯IcU²l´$9É-ò$¼”ê$˜\È ©«%‹­3³¥ˆñVùÆwk.+žAµ¥éñ¸ñ?kžÜGÅ'n¯Ewv“—ñóòoç!GùW8R¹®dÚ[Lâbyë-¯GPúp(¯´%_3¤ÀÇ4•»qÆÉW.¢7YOÿßÄ’Ló⨖ñ©‰ö‹[°åbM•”,¬t¥_õ9ãÌó©9Ài^]|'sy™^ÎH*¤õº´.ñ"§Ã3H­™îÀ`·Ò?/W4»/6`Ø÷³³QyÝ NŒz=JÞb”o”K"Èû ýpðÿøÊÊÇwby›·Ë’Cig²yÂ3O}Þ& ‰-qmùW!à6Á¬)tß øõÀ™I¬K4«Áö’³‘ ì ñgI¤|U„ÑNqMÿz3eͧ³öeŒ¶â_ŒÔ|ñ@!¥½¡×|Y¬ “t߯@~€ë±îp­K¨V1tÖ¿µ{¨GSø‹ìŒQÈ‘¢Ù²dh•oÎW/h2™°=<×d¹½tÞ ‡b+Ã)O¿ë¯âOó-½1g‚Š> A™"Ò±µ´ˆZvͬ¥K|w)ìeÙ·‡Q¸ØI›\n–oÚeœ¬/í&£H²ÀöK´ºÇ<\:íc~KvŠêÐøSN먈s—¯Ð@îUöê?‡¡…¤jbô 5•Ö8ØwçH¬mͧÿç¢}ÌE ›ŸÉ”—% hœw_‡ýûO’ j¡.ÅÚ‘r~Ž^\Ÿ£XþކÉkU‰%A‘-Jô–Ù!/Jö̽¹PFœ„lÇé½Â~Ôâù¢µjù–çmÄqÉo†_B\ÛŒwªÏŸS/ 𓕬ǬöªÍ%àÚxa#mZ½ëñ`:€b%Âoc6ñƒ äL×óýÐ ÓŸ•é ›Î3æîvh?œNC¥´§–ÒÆöÅwú[DŠÃ*}»Õ_Øü@Ì:œ)޽UdœñšÙ¨¤oî²FœîaÐC\'æššW;¶v’çBÁI^¹ #äñy[Cö3!µfºM”0NN•/Ÿ`è5‚dÕ‡G*‚†%s¹Y~³šÀ~»ÔÃÄÞ½nêå¡ÊÎk XÒsìèõåûõ)3×Ô7Ò9åáºîXæ—Êà_‘åÑŒë6yË×z$°•@Wøà {ËoDÏ`µ¨)8öEÔNOß<ÿŸ«l`o‚žžÎÿ€ÅŸ†RÏ¡Éanø±;ãìF‹lÆ ¾å&Ï|ìh­[š€‰‡Ó–ñr÷Þ™æܵó`Ù^&°RÛæ©ñO…Æ}3*fz¸°Ví¿3ÿ÷ä×j:¯Œðc8ѨA_XmàÉA×P‚gäô‚éÙk¥ å_À",=Ö­È×&‘ˆv†¹ÿ{£Ç4hT4ø…Or"""\¹£ rîÐß¿8n'0ÃÝ1-{€mi×Jzï:…Ï!o:Kàï0E‘9Ä ¢[ê¤RÁîáOg*…÷qgWÄÔ ÈÒf÷Ç¡:èÂm@Ú¼3V3 œî“ô³»4ó ¿|QŒÿï`Û¡ÚIàCÆtW—1JÿŸQcÛ‰¦'51ÔìÜ¡K4Í‚B¹ÂŸã–Sêׯ)&Ÿz’×x øÓ"“}I‘Ì/zþÁ&øhø _R+ñÏKYS—j‘±Ÿ0šn€WE\)eÔ/à¡‹ŽYÀÞd*óå©ãqõxNEЬ¸°±8$ikl~­õPb¡ñ­toÅ``ç·+°fŒdÐIîŒ^š=·Rl‘ÙăŸ5 º«µ4V©¬„ºP™Þò+gÀªÐ‘­÷Z±,K f„9ò˜÷¾§dõÊÞ/÷¼†M€Ü_ÈÙ¹Cf¬È‡÷.@eX¸#–É(·wnî9ò{D³Ø4÷»‘‰~¹V®ÏãÍ é€Lä+†”qû‚ÛÀ<|œ\•¬¼U3ÏÓÝþ­#Ttì(ªÙNËl#ÿÀž)…^ƒÀ>60ÑÏdã}¡l%` jLÀk°ð!/²Ïp\bJd缎áoB©¯·o‹ÇƸ¹öyܬØÂWBÄsg9šÖy3ÕD_Uò¼ƒwpYÈX"ź§í  åõ‘ÅÒ®vÍÈ ”²Ø]¦øîÕj‰€ñ*ÏŽIžýk/«GÅ"nÐzÀí‘ÉU}i:‘þãXîi¶§3<MÓ­›¥ÐºÏòù™8^ÊQäÓGAI¤Oq©5¥ø*Õ8¥Á…í‘WÚfóçÅë¤çäX™ÛE­yÒ–çnm8>F)ËÖúîI:œ8èÚ‚øÜþÚ}`z4hª&È%¨[ö©Å!o,™Îç€s«£éÌ£9æÃ3•oéÛ@Ö·˜ÐÒ‚Egûu3¦É8ÒDbüXV6<‚*Ï©Œˆßê©Þj… þsfÆ.TôQpdåî=oà2òc9t[×?ÏÌrg»%·ðÖ²¼ÉÚ¾ñjŒÀ®@ƒ•£«ú ƒ&³£ƒ¸o¢Ëæò1y0ζ¨œ¯!õ½é„ÈΠk 5XÍPΣÁçÛ9¥ÖÜßF¿ÕÜ\i¯”þÔàŠ.³PéKž æHöžlq̤Dg;^¿NÕR¦rG/Ž”gÙ&$÷/èû7«‘Äq&P»<ÿKa/†êC´"N &ù>²ŠÿDûê ­ MOrK‡»>FE`÷Õ~\nÌ¢Ù°îüìkí½Mž=ËÍNUWªvØFíR­Pƒ½‡9³¦d¼¡wSJ•Õ~k)rØÜ‰oiX)+æ6ýZ;iAF½È'Ù§ˆ%_“Úß~¤®¾H¡û„“ÓƒYKùã*åe ǯ_¸ÐpD 36„óÈ{£ø^°}pÎRµF¨¯«jîí*Þ‚ú?¼šùó‘Æf PF΀XŽñ°üäM_š ¸.þ8,Á¾I}NodÐ>6ÄqõýÉÿ L[-…ÑÝ,½Îo5ŒèÕ~Èú¾Q¬é =ßõ÷Ðg±;!³AZ$­G~ú‘ ´?×”Mêæƒfê¤P;aåÑIZÇm¸Ùc~»=Å4uuiÅÒ,d»‡4%ÿ©Ì“$â`íƒoê–rªô3Ñ£† 2išy!ÒôP!«$Ü­êÛO:Ù9Ì%·G·Wßdhó–M80]ÝJ ¿”µ¨(Z@à'¹û:$È‘Ü];ª’29N(L«ÑÞp'íO»¤d~¤Zÿ}³æ—Í\‡µ,·µð g5å]¸C6±ƒ•\† 6y¨.­ ÊóâÂó=¿ˆà…;Ú³²ÞdÏúbe,,”-G/àü"1ÈÚ?eâÍ_Ž›ËÁä›ÎÝ´¨ D\Ýw`Àèœ>/k­ 7žàdaÁ>êâðërÇ笒üþfƒÔ%Ðñ<–N¶+ã NàX¸v 'ÅñÔM:ÒyDѸeQÌwS Þ¢àÀÂòOuÒíæoèŸTÊßf—ûmšóòÿ¯ ²'m_`äé§±‹š€N=úË hÁÇìªÁÒ]„Ó«ÿ³=á˜hjéÔø-ˆRRãK²S¿ Àb±™€èå±üÎ_ÐÝØoW·òã§ùºVgŒÇ‡žë‚þÂÂ*Wá}¼ÜøOÈéÐ< ÀåOýl°ïߘ'; lX‚4Å©/?¹GƒOŒùñÝ"Ÿ…v[4 ¿±º–3—¨߃úéë-iµk :ò¯é©ÖßhKõ;€U©(¿ä@£{jº¤AJ“ÎòÔ?1¥iˆÑƒðN`¬m;-DÊñ¢a~jVoe¯&õé¼/ÂÙM²ªÞ£µ4¢¦±˜tV¥—ìqÕÝÇMXŸ²Ï±“ò´‡”Ú &Ë" - Kï-Á¥ÄÈ1JQ;šaC³¤UZÜÌՖѤƒ«oœªcÍ'Zämb¹ƒ¢ÔÅÆGÓ]ù™E,'*6¥£±µßÈy#‡Z_3\‚MËKعö´àÞþ¹h±§·ÖuÓ¶üsÖÄ­,Ø9ׇ“Ú“-¡E‹Ó*%;±à¹ªöÔ]ðþ½óîú§.G <ŠýúƒÖYÆ"i­ðõõ¥'Ì™‚’^戅ûDÕåo&&a.¥éñ`É¡#t¬xåxUmø±'Äí&‚É‹ÊП«ÝpÖ¹£2„ @ÝkðU>Û΂& ŵÜau’\ŠÝ ÷ Üo‘‚ .g…~trpÌ…é¹\ºÆ0+± Lƒsa=e&)`Àû„¥zÇo|@è¡¢Ò(ÒµêF¤kC2k‹,d%ö`A Ë4Rãm¥ãÙ H7óæebäß/BCŒ÷aµÝYÚr“u—P©ÎG3kÎè t޽ÞAγ§~ÀN‡½³p÷ŽÓ‹Úh?½ŒðGƒŒÒÕ €:Ô 7 \Ÿ-ôw1,Å=‰!–XAZ”qÅH‡š—Ô fœ:h’’ƒ8þ7Ñ£“çà…kÆ<‰‹›Þål¶Ú@§‹Šyx+7diøD[±í±°ã»„Ø<±§ÁfŒX§ù.áß_³k÷`06.“1:­ÅjI†Ÿ×ô³c&¤œ6ÛñÀCI¡”ò-ÆœraäKWÖi•Y'‡*þçŠ]°#¥ÇòþŽûà)ëÅû§»úˆ¥‹Òá™ý(§¾Ú4ºv:8AíXAïˆáÅÆZ,Å(]ú‘Ðä$:]æ/B>Ö·ßæ¾.FU©ûdbÂéÛkCÚ¦64¨h ÿ³ÊnÚÆÝ$­ <°ä`כּkƒî½Š”D»yTyütè hÙŽC”¸xP¨§ýmþ.>’º)S éSp2n½â;á~`ÌFü×%g5±ÀåM{½¨æqx«Jiô©/ƒ¹»I+úý™7„-áAªúGÝ3@ ÒØ„µ™£LáÿóZ@[ÞPµF4bc‹é4eI %/£9ÍæAáBÓ%ñ²®K*f~¾uvQÄ.„F–×J5Xò‹‹”‚”âÛ—N4K °Ó~â‚90ri¡Yû}·K{¾1ÕÑúƒ[É;…®åÁß÷’¤EùôˆËbö‰,Ö7 ÌÚ2™ˆ)‘ó£ò–±ƒàškîÄk2l{}i¢”YFà;€­^!ŠI"§í‚oض˜r°KE(l’7ãv-ñ⯂á!Úÿ¬Cma£Ì²^ñ,¶$ç’ß/˜ñÈ,OÅpq.èÜ˨ƒÏö{vm*Õv_Í'N6×õ–\Í$Wí:\'u\%qU_Эõ»¸ë8öÒ5*¹ŸnÎ1üM¼0áõÄu5Û|®Œ2— ™Â–=ûV>ÏR¦,P°‘w†*q«–üªòå_* øqKÉ›Ñ<„ók 1ì?Œ¹BA« :_n–‰Í~v©÷&“ a³"$4ìZ /Õü«±³Vâ·YŸÊyÿû§“͸Á›¸lÑÁ9f\™AÙ^½ä#â›ÜÙ…,·áº*¿¿YÃOÈí€a’P‹Dybn¹‘íZ’³\%ËâÚÅá{°»„ZÇtôPÑ^‡ªÆc´’óŽ†æ9½2ÈlV+×ýëÁL¤½NMMªŒõ«™wz0€Óªe°›¹×®j›@|^¶›uZZ å[ü02ê6¬†÷Ýêì¢b¾tRA‡‡”áØUãbn>™Ñˆ{](ZÓ¸ÒTú}Ü3­‚rP¯ @BÈ—Aí4ž:3}Ä’Ãi×jàÕgKí«‘½¸ÆxË·’*îêéš\‚ÇŒ@ÎUtp‡¯†;ÔÖJËLÕýo äÂu¿,ƒË1}½(³À|è²&“KJÊu§eë}Ä×3´Ÿ«7ÀŸ$ÓÃ….k1T]¨®D‰Ujþϸ-¶È®'aÒ_¿ÛøVmç+•"¬‡ô–y¿qWøv[0…±u770@ë*=ªdQ¶ TP3SlæúFy!ø‚Ž÷ÙîX†§>°Î|õ†÷ ÉŸ™¾ûö$°œ :<ñ¥ýšÑq> –Dc„»(¼ëÉwòÿˆjf±v\+ø£À-ߑԨmGõLu°ZÍmý ¡`mç]YUÂã$ßNvÚj$F‘ÌüÓúŸÑ¤“|ÚÚ!%ì.L†¼ª~àb“­úÎâ¦eÑqœ}_Å“5¥ÛÅËÇ_¹ f„ òJm~ÿN¹¬sd¼Ãù凫È4tVÅ1¶®MËhÒÆô¹â;ÁÖCHj)söT,¾ñ-»”|Öó[Ñj* ÒØ·žeØÌÐŽ#=ˆ/7mõ&j±¬ûN?Ê`P%çMAÌgzÃnéò(rõˆçv×ê¶4ã¼’å0wºz!¹âÞ†7Ù¡zÎß"¶›:ôv=·þ¸8ùûã}ÆáºT·[ÿÐÌÆ¦OlÕ¤ù‚ÛOò|”&òð¿p"ò(F=ÒUíM³ïó>|ÿïIH¸k•HJ]Í y§s9ö”CV—ÝYr­ÌX…±Ù£WG÷ßÀba½ÆÈ؉˜ZŒš¿ÉæWÐ7Ÿ'%˜‡¢¬¶´k¢‹ÉÜé¤~zoƒáá )%Ü£À ´˜Gac¦¶£þàj!ï¿4ÖGšRpWÅ›)7 ªºõ“Œ'"UE©ô8¬nñbAïpîÝq¡ú2dyU±"ñCœ…‡}Ò'Ãq×þÄùv aB 0Eˆ½ÕÿKDzÏk1è9½‘JH£ÖðÆGÍ¦Ò CòU"’–©fIk ©]q}„kÚÕÐø|^ðlöµÙ!™sdUQZî–ªmö ¸ŽjCûÙM„kÚØN² ãÆöa˜Ìå \=k™Žr[˜Çâ€w„{Ô¢÷’Ñ °dÊkÖ=¿ŸÍ¥Al†wÒ8 v$­ôciòR¯Ꮀñ$‰ù®S9„Yw®^…F´³}áý(K~þFøˆd•l᎚f¡-²pl"Kù­Pæ&e pËÚJœè:ÄÒ„U¨KÒª/|÷öF{?ä´é!!¹î¸j}ò)Îî‹;Ò°”rÅ#¸²MµÝ6Þ7ö`5¿Ÿâxö1<€D@!;qš DÙÌEnŽ´+§»+FƒƒÓ†͸E©^/.óo.‡’(@À“¬$H8"ëªövл\Ðc -“|5ר°+,Ýx´Ûßñ’Ú ŽýÄÃòË¡NQn^¼¦2·ÚºÚSlbAÒ¸Ú"ßA>ªîƒµ´Ø3an”›¤`ú%áÙm¸APIÄ_h´~ô’„CÊ[ŽVkàº,Ó®‚ý~Ž€^JN@š0§¬³ß(ùí®Ä¡8š;iÊüÔùÐ~A–àš7÷6y¶U K÷ õn—ûèÑ|>”nÒ̺ü“‹dòXR>½2âVü™ºÄ^,¹©\Ð…ê5èWv.KÅòy<ªN7AâMHA°Ëæ³ù6'Èäpº|!­M/¨Õè³£xÅoH§a2²´Qð½ð¸–s‚b…Õ‹*Wa‘ ØVÑÆ )ã->-?¡dÁC9R6y™ #Çí€ïMrs:Žy;¦¥˜»;‡!û?®yz¥‚‰ûz‚Õ,˜7?œA’ò ›–´ Øæ6,ø¹Æ”˜29fÒ6ŒMV;;CˆŽÔKÔý6@mâì{ˆÕqg™‰ÇÁPý×»ƒ×.¸¾m£´NäÏ5$¥õEH"š¬ÁãúO)ù?ŽÀ4,*³›a‰<•ñB!¤-#·q¬+Zb\Å.õ¦µ†è…ò…ì—ñ¾gòç¢@°Þ™|-ëo<¡>k‰»— V™ QŽSörÁÔýèž:üǾ~  ]Øqí!Z3ÎÇ*Q ;þâ¼ÆÀäà II7ã!F"‹€ñ“CŠ!-šä15ÂË¥)ŒVü†SCLjG®¬Ó ÄW¹ÙA¤vÄÍnÔzV¢éÏU# ª©mCÏB“îùÔRÉD°ßÌPZÅI€Ô Ì£³ªÊî‹A+@è‹”ñ§%”Ö¥l–Ä®·»vîÏ„ ZÊ@؃Ž˜MRÖ"*·7Lh*<Š 7]µPÚnÙ—dEÊà,¶ÅÉ—s}ôÚu?Œ:>œ*ðð× Ws*º høª‘žã(Ípgp‡‹º H~Þ«:?œˆ±ÑT Þ‰Z ò¼ÉƒÎ½L­oCƒ}°'¦ î)¶>3Uú=+×C?Cå;7ôˆ8NîÎú_)LëÁfŠf3KÕäûÛ[äU|g4ÒeÆðyÉ(Í~ó3þP†s†ÿÂ%êhü$"PƬ ºnH„Ðú&EH”æéXØKi‡—ϹiŠä.NBÛG#Ä}ð؉üƒÌ­Î>‡ia§@”·IC2>¹ü]:f—·½§ˆçÆ!¦ T^JWCÝnÍ`Ø,ñQ,&0A`Q§[cvpV²àà3öñ:ÐYz9ÊR¥9+z9 × V­ ²K¥v¡rJI‹}Æ,½úMœ‹k)=Î5Á&E‹£çPÎB…/ ï·ö×W\ô&£4;NYíÎ\UG…3ÒjÊ%9eñrSøIŒ†¦ažÙK‰©øÄN“šþI–ÆcÏ*ãì®Ng[ñ ݤVt»Ùík6Þ°œ·|êþ<‰8ô[ÌÉ0«ë hRûUc ˆa¿<«DiF¸ëÉòYÀ~]J#}¬gg 5 æÒÖ÷å­’—y¦6µq}XÊìqR ·l_70ú•‹ÙŽôþ²»ñCНAaƳv…£ËIŒ¹ÃÄ€9]f·O(ÝÈd?š]ÕvoÀKÁ©¿jWòÕ/2t2dņ, ÿ¦”UkJ¼£ÍÜn @ ûm’¯$·¯”w Eå­”ÀEú脦éK 3ˆ¼ÅXQ8ð&gý¨*çé¬CÿýÖ*„šÄÒ +©Õµ–Ú³FU1IùéBHG•”|ëÎùJïPë\ž!þlÍàžû6ªS×D2ñ‹qA­ŽÜò’ÍÍ#‰ócØÛŠ*ntÜ‹HÙé¹èU¤ÂU±²4}ÛÄDq¦¬ÚäEñ$jü‚".N[£(9(=éç@³ÅP*ÝSÿ…r©}1¶Ø#ó`YVÉdQÕ´PŠÈRjÇxÿÈjÍ+a ³am='&zÖB >ï¤ÛÈ þ @&j cKä½ö^âõLæwÖWnŽÏ„úöžq14Ÿä÷CJ¤“s¾|@®tˆC´å¦< <¼Î¼B3|‰>Q‰‘I2ÚX“Å—AMUe!7”¸J Íå—ÑŠô´BrUè*KÔÐØØŽ0¯„÷ÒYî¨^iƒRÛ2X˜„žOk<%ÁlôoT7Ãrà JÅ:AÛfUô¦È¸x›·}¢»j69j8úœ b^]貈í?þ‡F/! éqý®ÈhIð ¦_C+Ååhu~‹ŸXær:x`òÄ]Àñi eJÂ÷T΋&b1œER®r÷@@*{‹4ìÐSˆ.”· óŽ·Jæz?Ûh|IHýZ9ÌXzy;f‰øÊï¸n…ÒIDÙx¶R…RmŸøÊ~™ä%R¾ ¶Vü|N]d×Ê…n©\?Ab“£q?ÌmñÌU…àº/Zg»«Fùg‚OEãÅqâ±>I. á‰nj´=ùfH¸=¹¶’0ÒÑ¢IªqÕ²“±¢;‡'è ˆw¥1–ôÇÌ;,¯çde£§á%Á®#HEOÒ½k¾É °¶6bx§¦Bï4ñBZìþ¬Š›¼ K»?J ×Çwu,frJÓH} pu&Έ«”¨úuiì«xŒ‹DGƒ^Þå§›`AÑ˦¶(ä—ΓµÇ–c;“^»JêœÐ.N[TþÑ\ÁñˆÞç©DuUfîfqûQQyà¾b\ïŠLxžC‰K&kwWKPU±âÔ„1°‹ˆC„‹¸>&õŠÎilPª­s”Ó­TK6ÌÓw'R—‚5üÊàÛ½¿x2TC%]†š]öC+ýHþ”¾ÕÜú5Õ2k™Mø(®’tf/` #Ox¯1Zm]™$yv½êµ Óí¶»RˆÊÿµ ¾Åb³Ã½B$¼öàPº}õÚ’ÞædVˆž”@(ÆB’·¢&c|¦–¦cW#¾+¶¶“:.5ñh”âáGuK?%Côî-Ò$hE(£N‚$[4òV}ƧZwš@‚ÞÁ9?è›zqX$m![y}¿Z2…õ沦Ñ0û6”ÌdQqGpÇš‹]ckÆ.Œuƒ{œpxQIè“sfúž2†‰ŒMWÿse·Ùw}ó.Èá¯Õ´/sPp›Â>]{¯P:Ì¢-Å}„2,Ø<ÿXUq”ブ·‚¨ÐSS5^ìÿ…5Юă(¶2Ábh~¸—§¼ÛÙ^q²¡DÚ¦aãsœaúð+…`•Í9Þªrahñìç²Ä hÑž«þÿš`#!¤ä5Ë!Bý½mTq65cª $ó*ûnÜb®8¡ûúÓ1Ÿ’bP’ç4 ‰u ŸEƒë“žž³âprˆ¼óú#Š|fˆ¾î#L!Kôkñ€9„ÐÒ–—T„L̃š1û½²Ú` OÍ„Å_N\ŠL ݦ̚H…î^@Œ‡­0h%#œÒq¡‚”«`ãfŸ[ÁáÁjVi£°©>(˜ˆBAŸZÙC­(Rö¥ØxNE´\Tº|,Eµd5¯îñs¥¹{(¡-ùOÛµX¯{bí5éCUšeD F–´Ð8Ø ddjNéíª‰ÆË«^ÃfßHà>‹kâÓ{~Ó°„TVMçêŽ#íC0×F/UPà›OHXMUá¥ê»[ ³SÓæWqºíoR°!Œ02pšÌÕ6uì×éêÆOÅ»›þÎÀÑûÝ÷W$Ð.²”hídDK"åÕŒ4â(ÏÒ@½Fçð…æ}õ¥(vq³ú™º@ÅØŸ ³øv~ºqÕK÷&²¤ËNeõ³—£sá´ËEÕÑæý…1ÛöÍSÕ(,c9çk¢uHÂС Œƒék‡è‚“Ŷßï ;°3]¥¹f)Œ[š˜A*Ë‘0áÆÇ›ãí0N>‘ǯ÷ÈŒ+':ÍrfÍYh8‡„ä:زžó‹f “XÆgc Ùs¡BÉbÝ"òÁ|®ýÄô³Š)i£æ€‰¹*ȃ–0¾k0eW¾0DTkñˆ"ÛJë¢ïà—Ûk…N¶±“£Ü }ËÉþIiDSìcs1ËçÃÑäï€â[§ÁFÕ¬ÞJGU`#—©™$$îæ:ÏÖòÂ$Ÿ$åÊâ«=%u Ù¦j.bœßBö¸\ý€»ÚƧ_›0²VÁBz$‰[zxNÄ87 ç•oAÀè‘1½|Ð_(ù{aŠÛ2xZÆpÚ›Umg•Û"þo6qÒ­¬Ã°À2ØÞõü+­Î3—… µ+Oò®Ïë‚á'µ¥•à˜SQ Òì\S¬•†%À'OQ±KÛÕÙá€æì~[¾“—ªQ£H¦öç‰Ðs–#ÏfªjÎ%?œÛƤ«J MØ.-«¸¿SŪÊtRŒ÷±JIsï©„«.{Û¿PåBØþˆ7Á?˜]¨ÜGû©ƒÄn\óâ3Æ¢•ÛêÜÀmÃÕ{–£ _f¬û¦Ø»Æbn¡d™éMéB›Ú”tªT­œ€–t™ϬÖ UE〞²œfi±!,ÜÁX»rÎ Œ:x¾*þuXè­Ý]¼ºàÝ5©2_³Žåý,AàOÎGä…–>ÄVò_:}9g¯‰÷À—7áËMÿ·en¬µÃq¾ýéõû™ÞÛOb§ûy•x³Ø,Að3E׬Â`¢5ØÒ%†ßUÁ’Øk³[“†)Q¸jPü«-Ù¯Í%N«Í˜$›ÍžžÞs=ÜÁ+Žx°é4æ¸Þ7 € ÏBA¡Ê8ü££çPòº_*©Æúx”)G\e$¿ :%.ΪZ±ä+â 4h½É@7ã§ëº…œû•Ì3e6½‡hXÞE¼Ú,Îd¥UÓð¤) ;cy¯K~ð2Á›CWó/Ðjt&Îhf·ó|cúÄÙˆÓV‹«~ZzXÔ'+ZÌ÷[¢5´Šø£âBô–,­´&tsã0(s¥d¸òÕÓ¼|kØ‘×䡚µÆÏµ¹} ÒRR­¼lÄf“À„ÕÚLrVFx²[çz:ê”ÐYÓ =_uÊa°¢ÔÉô“°lá8‘„Xc›DsÛ­e:a·ˆr4 {Þ' „ÛQ¡ÓõzCtÇç÷—¿k,&Y6¸3*eáµq•‹£,Hn°T’Z÷á”?Sû¾ @KÛO˜QC‚€žHÔù¶Ù™r–axQJ€³áÐrÌ÷fzZÏ|¡”Þ‚n1)+Ü_ï¹°@$æ:‚½À×P{³S¡‘÷™ßÅÜq¸i´îé3Lb VXF=Ê: cØïÞzà/¸:tUt )¢Dćäë<ì®#2õ u¸aG)¯íý?ߎäë1Ñ ¯(µ³"¢c çÂÁQïÕçóHBS¡ý Gäü…}s”ÎÞɇRí5þ¦°ÒÛì6Uð× p±±æ³:6.J.þO‹\Ë>+*c»cç~Ÿp ®¹¥Ù6÷„!¸ÜÅ¿!MXŽ«\½Ò y™Èd ~K»j?Aw‡á‚ÁYG××%ÿ¯Â 'Šwj¯j´†èÄ#:ýXOvÒjœ9­‘lq.Y~ôëŒ÷ϾúXšâ_ÅrÏÒùþH/[‡ðåž~¬µÛ Ó´Æ{Ååf7ç¹Aã_Ûˆl”šSVµÔNhä5¬]Ãqœúr¨HR²:ÀZNxS&=„âI ¨^RÌ!žX­ò¯‹–7Ã"Ô€.[2Hïgm˜“b!È,Äœ:ÖŠrkɼ)}øåFÎùnbÒé`—УTd&¿&¹Ð4¢×ý†ÖþnÚ ”Mk¡ºtΑ‡x~ÂlrÉ÷ëÄ­IœÀ  YBÝûj=IOùD\(:¢QÏÄÿ}$Àbl³ž7˜óÈSõـ쑨Ÿ£ºoàRqß&}¶ûóiÚ—•|À3õ ®[8ÎYú£¹{̪ g«¢Ä—e6Ö‚í=A½ÄU7pз×äʦ±…Ó{Éí'5ѼtÝŒ ‚ÉÜŒ'MàaÇ`ªKÓSuç1¦dŠÙg~¢ã>pºïw©1ûÙÆß  CÆó¯~E—‹[´p2ÞpeY‘0µÊ„H/«ñyºv0Kb™ÐuØÈ Ï™zÝÁSVžT¹è‰“3ŸÂ_´†ð‘4°ïœ¸CŽ„= Œq×3 Ž FŸ…áQÿÖ0Òa ú¤0Ï!§Jjâm<­xD…¦¼œùyJU¿*$xqdH·•Ìýî€â•{{vJj`-vI·Éî¤&ÓJ眇#4½jtöz JQ|œs± Í_Äd’Œ ð(jF¶/=~ŸÀ¤£ûC‡T4—ïos‚®ú{nò#°ß'ú™v¦7ò÷°‡ÈHu½Ýòh7AD§]š¬QÓÿ¡1±õb‰›Ã|0qEÁñªX9’d8½Y ü[7'Ì#ÙŹ®c¢¦Oîgg¸šÍVÓ¨ï«ÄÀAªsS‹MrQ |¡©¿ªQÅôš‡qúÔÍ1GÚíèÇÒý éšžÒÈ,…ØŠ°y?¯@UÜÓX°ß{F0(~Š-%ýweÿZ,Óü¿*½M%S@¾w6sFÿ¨8óµó°»Xa1ó‹`|Þ9PãpPzüs´4hXÈì©uýHï5Ïrº/ó1¨”áÀë·á2½‰¾íRâ,ú‹á$ºX¡®–—WH}þ©¢äžì½ŒêÝ)v¤’{›öHþ.úk§¬(`ƒËü-‡…,-/GX;u~߯QO|³h8~§z›†RR€f¾¼í“ü¨@Ô|ìµ*‰Éæñµìÿ¤¹‘爭À ¯¢ HÝ6Г…Þ¯\Ô©”¼^©÷s\NÿzYݹkå& ¤ q"PÞ@m Y)°(wÏ5åh䤑Ú[LǾnÁ)€vq̽ÅIqÖþGÖǧf¤idƒïü:ãÆäÔýn­I R±Ë”†›Bm´žXC­—¯ÖíÖtƒ8Ç«t~ø|¥OšX0G-b‘ÉœSMòàÍJ -ã/÷k.p '”HÒXç2-;%ÓÁŸ•݈6=éØ1[YÜäC*h}!ÏxW-ñwvÑ0âP89ÉÕÙÁ(V:ñ¤`KjiçU=ìdæB×'ÊßçËÁ‚XÁJQ *@B=ÉG¾:¤¨1T€uwƒme†STIÄ´9¾Ž³úAãä¸Ül¯³ýð¶CÇÓW¬Õëõh1hXJðÞZ/‘òï´_wIÊäªymƒu‡èÔ-ä æä—¼â2/˜•µX‡·~RÑ’Ñx 0 š„¸f±0å’/ (Yìyäoï;•=óïÿŽDÑW¹ßòºIΰn…|2OÔ' yôäY©H¢wûÓ=(ìŽ3ÙZTjæÏ­cZM.¿( jOv7’îæšfÝrav@'ÈÐWÖ†¼5Ó)÷£ic/”S¬ÙË ŽB"Žýˆí»`%ñr_Ù¦'ý!Ý¿¿~éo15‡Ä‹­¯ ¯À(¬Áщ  \x^3éN;L>ïú0ú{óR¨œÒRað‚êÊ÷oŠ?§ÍrüB¸S» Á'a\Tž ¬5á9 ¬“dÉDž¥ûÄ´>“ÔÁFÜ{L¿¯qÝ5o à7ßAz5/é͹.ñ±è û@Š›¹õsa®víÓ¨GŸ5Cê °Ö†ð• Çpo5#s\z×Ý3ÆTáyؼö`šD¬¥íVolS˜³–”EòóAX”(»þ Bx(n0™ÿ5¢EÞ íÆDÞáFŽX”*9QžÎAjPQKymÙ7ßï?H3ƒ”Õc`ßÑOôÝ“á u¼¦1›°\(ôq QŽv9Dég¥p—$‡ÊƒŽâ\QÕõAå(Òü¸jܡơqÛDíø*¥‡98 ß/£>Yc:e¥¿X:>Áf(̼ϻÿ+&úzJK´á±t}…ŽEÝ+˜¯A˜É”[c¿Y•»‹ãý^¿S&@Ö.ZRehx f<{‡‘›ë¨SBžJ$ÓˆÈ5ü*«`Èú”–ÑÌ~  ¸YûÍ€ýÂОÞÍwù¼Z®šá½JEŽ’b!¨SAÑéÃEE‹JÍÙ¹º±~›¾£ÄKŸ—‡`>!Ìd×ðÕRê‹Âp´å›6e2ÑÖÓê]ëÑvº„ô‘ÑŠ_I¶"Úýqó´Êï µfÄ^4C.w³9+ûa­!É`èJP½ue£¯¹æUS'¯Ë½v ¤MfœX¢ž ³•öƒ`vrjU­2\ |8ü{RÎf µ¸ö6ü±²¯hŠeY,'…GûÌkI w©cO*W¨縄°«%Ä¡^ýÊÿëà… •ÀSJYþ¢˜Öãd‰ÁgkWðá$¹[Y 8xú Œ(.ß};E,¾ã|zY¤Ø@4Ÿ²±¼W,i¤2@ ù³wù‹Ð=¤¶ÓŸî¥+IæUÏ}=ÜæËg;ÆT!¿vI9–†#Ò™FÛ4ªG‘šõv l°: (LïLJ~)q®¯@ô’š"›B†9 ~òqÀ}VÈ÷Õb°y kfûòÆf+É ,þ÷] I øe8ˆ«¯}WꋆäºC î ßÃdv8 &fzŸ?’[`°ÇšP)s0üÐߖ߳ผ$¿ÀéÕÛø¡Þ«8O—%ã2mâ~¨°•½Ê4ŽeŠØ…`5n‘M{!n7<`?dhBÂãü½G–Û’T`^¶c´ Ú†kn×X?NÄæñIÛÇ ¯¥$ãg¡×ö ŠUx™´Ö£ÌzÓû ‡”×û”$0.t¶È1ñqŽøÁ<0bŽ4zŸÔÁR’à° c¸³‡ˆ¡‹Öe 6çÜb4úm2aÄÖcèjÊê’Å®ü-½zöo5?²÷+L)€ ŠÛš³8 ¹]ÈŸDþ71#¨ôKûL£öíJ@ûZŠäÿÚJêæ¡TN+³Ò…ÐiMñ¶žV†=ýÞ ÁS©!†ePÎ çöèNþˆß{®çÝKõCÃAž¹âä@èä¼;¼bö¥ÔŸú;?’ éd±”Æ>£®.u• ¦ô—0é$¨LØá"ð¸Ob£ š NæÎŽœ‰&îL[OÒ¤˜)e¸ˆÉsÇÙèXÒ"›ÕʱÇýnˆ%VLÔ¼hõ"¾mØd4-›ÌµE&¬Ò1âÞ½·¤EÀ:Ó!ˆMUƒôn/DÙk‰ÅJË#Cõ鎳$>£bÀ™WK[çö´EãŸ#–==Gáaˆqlé´Žõ‹[à¯>D!•ßúö2>ÌM­”|…îÞßöWÆû¬ÃÍ•L«ç¢› 0„[JÛ[ñ÷·ˆ¥5Ê4í³õùì+À1ä›2¸:Öçç¯O-¸ ´}M¥¯œ–ê™rèŸÆL†»èKü¡†~mˆ6—FLÎp¾%Ê4Jn¦@5EÿCž¥l*R|l–ÖÎR–˱\nzE‚g¶+;}CFÉىŦð÷êøëÎ ÞõŠ¿n}ª36í³¨ÿ§üëa'…úxkÈ `,à•1Yh7#µW¤G»ê­cR}%ˆÑ’¼åo‘}„ºIV¿Ñm¶Šbœ5>t.€"²­&£ 0}noøMZászíé"__Œ;Z%Õ¢øÉd ¸$žë{¬&j^nŸOk¨aðŸá¦È–çvæ0]¼®ÁîªSÝéZ­'Òb¦ñ’S]ÛìÀY $-àõtZö|éF`;ö”Øš©ÔPt(pÍIu—ý Š/Tdž>»âñ÷Þ!ß{ÅY/¥ümæSñ8´r^Î ÃTK-¬Ø¥èe>¤®àŠG'ãáo Ec"(e½Íåá½¢¼¯ÕÈa¢—[%Ä?“,ÿ5 ¼ñÎJ°ŒÜ9È"¤…á·×IC•êŽÀ*ÛaæŽcáq}NÇïÇAgç<˜‹Rs`hüÝ1J,_‚?ª3¡gí7“˜ù~@IZ‚fg–8æit‚Ê+¬G¸^› "_Ü,¢¿Ÿ˜5–õ$Êö_Ó´¯Á»Þ"4Ø A²m‡~ÆÑ"“6 •¯H_èè¢Ãr—ÝÊìæIAw·²ÃïKv€¬4'øþóZÞJ¹"åQ—»qægb´&U—‹á@÷Ê8Õ¢µÆ3ˆ[by2BçÁÙ´"¨E1ådÈÙçc“Ñë%b‹ñ=cƒÎeŠÓôW—&,ì;õw ¼°£w±poý謃*ÅG˜BV­,s7S4þá2ýè˜ÙB 7ÛšN ¢¿¨ŠÚ¿Âruú“ü(®k¯ØnÚµãlëþÐÖú5<ÖÚÑä?}EС`h(vH;DgC6Þè»~Î}àåVŽÄ¦EÖSÞ•‡•b¬$QÖOk¯yÀkw Žá[À”H@V*G'Éôñä»…# ml»ü%%Zð¨Ú0‡±ÿ‡V›¯•éZÃsÈ|YsMË6;¤éA•ö ?Ÿz6Dâ’{%—Àa>Þ‰¢–óü4BMO½ë¾Ìu£Ê0°d¾¦jÎ-èóç:Î…_®(°¨S -Z<í݇y…bs@@Ow÷Uj™ëíðt¶sÈ]¯õZv9CÎÆÀë²9Yä¹kïùœfA+5°ÀˆL©‘Žú,²'R›WPšÿ¹î±SÏ.ÊÅ$C ?ªœ…!Rty«R¨˜ã$=‰‰Í¢¯1©›Óòù«ÞïDlý yHð:C¶SŽËµ;z O”ë·)H©¹h8 ªjê™!´û$S®¿iGf˜§âBŠž£ª•Q–×&«=ÀÞñ4´ÄŽjÒF~žQ‘ð?›A5<`~­Mb$Á&h•Ú¤Dˆ¢eÃÛÏ$ é0ˆ…£xlÖÕìFØëß' 5µªêVÔè·|£Ã+ÄÏuxÍõ»Õim^~à+o¼àª²A¬{9°_ßEËË×˜Ë¥óÆŠ”h/’âÍgØÔ¸EÛõ]*=ß4[sp b$Áð©-‚÷û¿›ãhÍòÍ@wõáT`zOŠu­H”ßĹõFtÓAFºÃQ@<¬ä;}œä0¶iu©ÀÏ´J™ž³ÃîÊ:×%òf2æ³KhÅ¡*‹ŒÁ³5DtDË…Nî{.K“Äà·Ä€€ìõÑ­fvXt?³F;n¨POwFUD$VãgÚâE«(qÄÞ7Âr,ö H…!]9ð/²› Ö+Ú߯\;,§]ø,|“€©"](!Pù$Å󨀤†L7€Qð˜l¾*AV§ÏL±vo¡ˆÓY¹ÈÙ—*ªfË& ¾¸@´“ñpl$…Yß" ô$³ö-CL¼5 ª‡_­×&;ª‘°¶}%ÄÙø¹Ò¶&Ÿ<ý›ƒbÃikæ¬É±…®dšÂêTm¦á¦¼ÉÅáž:¼¡¿âÀÿ¿ìX²ýÖ€LÙLøB„­@¥HÒ«ß )¼~›ŠIžOÊ¹Š— ˜¯IžEI,fG°²)Ù?ÕiwfÕQblëŸYG[pþqeã€fîÆ€´ÐT¹Õ ø§}ÉaÊožêÚþ—â‘©BÆ’·ˆ[_¨þè  GõD€#ÆêA¢”Àçú…i¾§zÜ„›$©bö){áÏǵ%ßö“Ì}XÀ;…ß|îÇËÇ(Ö…L(öí)=7¸j”kŽ4,K>ŠßgJ¤´vë¥(M˜6u²iuÝ:z…%Ý,F"‘$)ºašl¨«7žˆì@¤Á`v“¦Ó- ÖÖöò¹1ԯŗt‚(À¿ Ò¬í|¶sÍÔ1W¹EÆñY*]ÅžódÙGv@bl{^”\_yOQþ"ÊŸÕxZ’®äµ™å891¼•zB»²Ò7†6ØÖ€I“5QÄ ¹"°wRß;“l3ì¿Òfou¥-=Mk²äjf×¤Ò Jïñ–a§cÖy·¢ÕWZâJõ _1FAëTŒ¥O œí\|c‡zPit9ÊÍ2ºs=ÎûMœÔ§º9z‘”§v@‚fú¾)TJÍ»”,c |'¶üO7´ÛÊé;GÕK©öµ€ÜNØåÓ.—ßÝ6Uù™&hoÇ3T×ùÀ¹;8²1^ŸÐÉŸ¥ÈvKsan&î‘_òôµçIöð­T•ë×cüÍ'ï/¦$?!VÎûWTFU~¹Z.m¡³ì››zE׫‹“¹Ã« T—l~uàé™.Ç4®V*ѰÒö>žvBZ@3»òR2'$S¤nYxÞþÆÏ¼4Ó:í/õ/?Ø“hWŒÁW:¢jgzu_™ŸŽhôF=JÀ¨”e·M-oËlÚ@>‹ÔÎRà/†H{ÈÊÐî¿J`°K@zÔ%r<¸û–ÜE]·'‚?…©è¢1{Òèå¯Ï”/„^‘Ã<=šâ§çÎ:Æ¿áN©‹X †…0è‚MÅzN³ogÑ”ª2ìwEe+¬ o'Îb‰EŒ0ÄÅ:Rçqç:ãjOºme;ÿA\[NúH,‚Ú‘ârÖz-]ÚO6¤Ë<Àw2C¹i!«´û¶s,èÞïæåsðwmí„•±ž Ebþ"ß É,f\´£„U~5ƒíyH¯aMЋ»ÂÛ94ÎÆTnS'‰ •[çéòF¸ägÖªsGíÍe¹D·îV5–ùájº¢ þ? EkÕ=/ÿ¬~ÙfB?:•qZ;õù3d]-Ý •ÒÕÂU/8÷ÙtD:PK~êÐ:%Qš¾ÌbÙÇÆ¸”׺ÛÁ9§Î&Y>ÍÈ â«-øç™Ë.dþZò ÜÞ©©æ‚$].ñöÒÁþNü3¨Áž%ÿ³}‘6,‘“®½±…”úƒÛ™o€qúø­0‘(j»›Ïr?lœú2w¤-)1kæA6ÚÊ;`À¨èÚΟ¯žsæO·3Ç‚h¨MÉjáøØñK¿A¦MÐâΜ‘r‰]6–¹+iB„Ø3 7OÔ&»ñ]×Ëh©Ì•Gg·9m­N6»^“NbÒú®÷¶êMŸÝÁi„M~±0ÌÀ À+öëcy~6f„üúÆ›d=v)IżæÚl ¯›Ëò[{3ÝÇ ºa¨ÚÇDLÕs5Õ>c¢•SâSyî¹<…ô\:<7/ç YH^öÿi/!ôVbÚŽý¿Ù5§šö(g;âË=வÒÎ`Í'â² EþÒPb F^ÚÚU¤Nd¢Ïï¸èܾk45»,Z:øFt——Ê;\Žj†Uå"#­”ѯb…%ºà€"”7ró±"VÀ®gäFöë.X:¸tÒ–=a ï’ÀX Å+´€‹$hà0‹Ä÷~~L:K¤ˆ @§IN1)È÷‡#Ô9zõY'óAüO‹rWö˜ ‰V5Î@Ž¿ÞrBŸÃÎctí×Vö!TæÔ–0òdš‚¡ìQb® ª$;Cõå½ò3-¬jQùõÝVLøº›˜ûÍõçÊq›/‡B¡8GaZ'˜SxçýŠã¬ù_Z… vcÝìz6õü aÝ e Qá!ìI2Á®ŒâïYqþãQ'²oRô¸öá/8Dä¡Nùf„ìFAÂfÝY¼BlU¸‘á­†;‘òµE‘Δ9"êuYX½>‰m0lvÖDs†ñê}ÉãÎ ø1ž?L^¹vÊZuØù)LC2;9¿Y›CP€µ˜WåÍøiw‡ær ßå$Ïl2Wš`bvЧ!¤;çÕWƒŠ+z8ç¨ßD—ª–Z?lÿ®múÔ‡YÃŨƒ‡§W‹Ñq'â,/]H`µ~‰ µy¯Ó RoÈ~t9~|Ž‹ÀŒŽ»<ÛTzØÀ£ê6(±S/0ô–r‰• ˜~%+ýù¸¬ /¥‰?~ÌŽÿ‚ÅË.ëÃYÔ­Ù¡ýØûi/¼‡¡*ÚAÊÚ¾3xGîÜk .*nh‰1ÔÎSyuÙP[¿kLEá¸NÇÿj6(ŸžU“™f½ƒ0•Ø÷1ÿ×XùÄV_'KÀŽQqö³^]ÙƒÚÒÃG Ì€Äc¢ù¨µµ?Ò:ÿ©ñ4›7O|€ôct,Tlßè¶Óêí󞿆©Â)œºÃPƒ¼ k[pˆÏŽ|ž¬§+¢gá+Ž5&q±`t¾&ãìÅ<Ø¡nšê`…ÊÏf³q!Qåk”fìÇ Íè†D]F˜.úàÈÍòkC9,¢–a?EúÑ;æy‹™9†rÃG9†Àyr}òٰٗ×GCVc„5¶YSQÊU¨ig•üÃ$V‚®{õÀN^ñ'ëËR^ÙK"ÍS”N!ʵħLßÔÀ‹$8‡?2†"tWtÌõ.(†˜–M.ùõƒÂ Òà ‰óÖŒ6#ôݦ*ÈÃ_wçõóržÎZBÛ¬j=wc±yì1ð¦ üOe·÷¶Òn‡ywä ª°2œÚwâçµæžoë{lOÿíäe˘›±¶N‚©„7S˜ÃSßÌ“$ä®Âa¢zŠ3ZaåÀö~]ó; \ò_þ÷²—E- æ ‹fK¼Ûe ÐA¤GíŽ" —ÚNL`–¯3})á%s1R6“.5ßkt×÷*cD7öÆÝa´Ñ苃í;p[Àw|ýr€@ZµEÅß»"ÆÕ¾qžÈ{0iôq­à·áG‰`nz`SZ jsd±€¯²Eçxúq”†iá¬Romx¤Z#\ûDGhœ¾˜yô„—,åÇ@ò±†ªaˆ§Lˆ2DëZ-ÔlÔn‘Þ"øö!¿ùkM˜Ãþ2’¡˜êñ 1w*™Ý„Bü½”a”7A“¨l´ «4v¥E3¾S•Œx°^ÜÔ%Ðyë$âïä¢ÞPN{Àä?~sk v©z )¯ož`\o?N.@Ø+kO@F}Á;dÜË-ZÄ2}—Õ² ‘š¬"³¿¿Aú/Ž]'Ä>ð]úD\äX‰ê÷˜.ùrÄ?DAÓ¡Þ"F÷óä½k[šÄ5ïÅœ£Ä ÖþVøb¬m—o$ûk¬³U75>ÎÚú{q~:š5sƒì™„”›ZইëÀà™9 W;®¿öUE¥Žñ6çÒ 9?Ñ9&-ŒQÚœõ™“ÿ^“nµ„ôRð€¾•Œý9 ¿ºOõÈòlNŒÈ½;_¿•Ýï±ÌÝʱPÁx«°.ò´¼:ÜUƨ.ÿE0Å(ŽÏÖÊUŸ: × &[ ©?% ªb]‘W° ¨®›¿Ö\×`ó““Yr“²„ @³þ dÖן“Ëj§k¯eÑF°_’µ»Ð#'¨øÇa/¾qRt¡ËÅoÂJÿVŽáçPqöŸ$ä—b𢠘Ýã_ÓTÙ8u»@ÏmÅü ×É‚T~5ŠÌrñ¤¤7›™æ @R0ü¼±ï«¬e,c K¸¿rÙø*]°[>üQpÏuÓN65 ·‰ß}f~ô„Õî/?ã‘øû*DuÑ/ƒãÉô g­…*ÆÛõ ò¸‘S]<áž]<"ó‰ry¬ ¯Êt<­tÝ«2³Áñ- N kôk?­†ûõ«y‰o$“7Œž½Ø×ÐìíÙs˜awÛÕ‘0!v¢|Er‹dR$ÿ/œÂÉ’X&q]è•¥êvG‚ÓtV "¬¹´Ï9bB„j¿ÛÀ{ÚÓ`—zIµÈÛC,m Ç»p¤ð‡ ÀBÞ.qæ¼i4¿¦ÆÀkÉŒã§nçm!x¤HhR¸¦l8ƒéÅN>} È¢ëÌÀñÆåYŒDëöÄ×­ ˆ„›uÿÉ€¥¤Fðû=ÙÖ.y±jìÛÇt(Aëÿ„gÝ4T‹A:ù“AØšu£ 3qL`ë)hí4a9@.2€ÎsËàò>t^»çcaH6ÄÛËX¼ìº ÿ¤MتÎÛY¦©Ú{_ª0ràòê¾®Ïí‘GÅ5¿+{âý·Qá)CMÇ®¤ÍgÔ°¤$½ŠL8_¨ŽîôçÛçZ!…=Ë”ü†—m™¿ F“1­ËÏÿ#;tþöñkÈ‘ö™¡O6ðÔ–å ÓM»›îË’Ö ,Þ—¼oU°{¤ã´ÇÌþüö;hœ¯Ð½OöO´{ OœänUÛ²º?ɹ9±æEY\­YC¹ßåŸï_aw»£¾¯·¿;ÇÙò¼¢=¦°Cr®œù`$5Èê¿`É¢–°‹Â<¶üC)Úb Ñô 8N9M o–¨Õ!4‡›5Gl¿l¯U_ÃÂ3¤ÙÖÈð,¢¦ñ~‰Û„Ä}v!.·_‰:€j- ¡ÁAZ:ðîµî†6fŠð¦ƒ’ÑW%"€ÒXU¤fFë€zÁ¢ÿS;"À˜l<Æi^ ¼½\–0,q&Åýàâ¡™Ó»²«èÌU«{lÄT튽=z|lÅ À-6î­îü ¾„pPØíódÍÇÐ ÿµû$w€ñP†±—/ Ên>›x½-†&p N¨J™@ïßÛÒd;I†e6ᦉcŠ#\Êz³_MtÁþ™±&j+/°|É"ÚØ¬ éé·‹‹¤Ì:h’4«JÓ ^‚NÙÞÍÙè„N’þž@h“5-ҘطVÏ\ä«n½_m`z ¬SIŦAú‰mš* vǸuŸAoV6-BM½`>TDþÕWÃ.™“—R^“¡u>Œ‡†(¨~o)y`ݤsëñá„PÌJû?i}ðtÛˆg )ØÚ´ðqO"6y9EÃ_o'æe–_­ Z‹kBvü[NÕ Rû{îôæY3¦ûô½ Qò0­žâú &ÿè…ý‡ze°*/î,KÁGlk´UžlŠM¦}“hoà}¶Ëá¬r÷»So€ÃÁ^¸p¶”mÉÿ)ׇ#× 5¥†2¬_œ0+Yó¶(–})5ŸF5Zûx&2Gt]ë“,Gވ̵L8hÁ+S:R@q›æ"4ŸtN ¤~ΕÖG+…nÁÝ gÛð± =ÍŒ^“ñD³9{]Ì•}B+°ÒÜ î8Gºá´Aâ<ë ´==H ëFÄ0ª—ã‘xXçF¼Uí(¥'xÚ²ÞãwPCØZwCºÈ”sÖ¡¸Î´xZâãT\y¬‡bk9„íBù\%)A$j¡`˜cÙßBºÒ9êG¯6*RÊÂþ$uô:ݼŽêmsCM:ÃuF÷j ’¶š/ ZŽ>bÏÿGyI³=ë'4 ÷e-.Ú…Y’vƒüò8C¬ß=mþ±É ¶¡¶ø>3i¡Ö%Ÿ_ñi‰W{ÜMènoƪJýpLð÷¥³4ôxh¿`A”S܃ÉÊ䆕6‹Ý—'bgð°šöIw¯N xÕ žÑȽ̎ÑㄪsGfý|¾ŸÀ /gsö_b"  ˆ¹}¶Pæà vJå Ïûji¹”ç Ÿ´3s­.M-EÖ äFK•éUY3£}‰Ô4ÙšaÅ,~‘°0çÊÓ-1Øx 6wæ\×Ëíòû%&÷ Y. tý†ûd ¢‚šþ¦ú‰šoEÕrLàœv`(2JÜ‘´¹ò>±¦¥oŸ±¢5éñ#¤ÈŸY!þM´ÉÒ˜ Þ é×&1ërÛt߬ƒ.Ê9jÛÑ–(é¡ùj˽³ chÃÐ|g|·ÖŸcp~HÙ ‘yº±…Eލ(²Ñýbþ¢ ³µ60Æéío‰]Ú{|?GVǯöýôÑ i{–w'ÓúFTæZå•ÕÌœS™í(„*mþP:Ft> fltÄg 0³ÛH`ÿÚcÖœ•ä@QɇØj”,¾·ÛkQäÎáxþšÆ˜AwÑ”½„ ›+7’íáµuÐ)§å–/Ä”¥Î9Y …(XJáåàQ멯¨¼UMþØi&z|Ïw9¤ÚÙS^î˸L–þÓŬaø¤jÒõ{pÉ¿·”x~º"Ûjc½´¹Z ìrè` 0"bAMŒ5y_|?Rˆ§ŽÅ²v´‹6%1ñ(j¼×Lï¡zî¿~«\þÍ}Ä㧦A¬ç°Ô0•R?Œ>.ß‚&HIÉe¤òå°¥¨Š¥|Ï4|ä<ö«FGÁ·¯è¹B}åèæú²µü¼M0q¦€–,ÛÞ…Ñ£)µYï&.¦ÉÍy š‰óá÷Õqµv8-U9~19 ÙV¾BwA÷á8ÛêÅxÞMWMßy Jô~u 4i<е¯fidnGG~+r5Ñû…š­MmàÒ ~ þç²;b~Yã˜Zd3ÈÚ$¾ud@Ÿz—•»öÙp[åY;l'ü5¥~×m”Rãr³(ge²;ëuÞœc‰® iá³ù°b‰‘ ”ˆÐv=ù¶-<ˆk¬6©’ã)±o8>Kìù›s<õ.™‰ÚfêQK\W¦­ f!Ö¢G:ü ¢S'E‘áñÉùS7Ê*ÈÔj+Ì;eìd« IÚÅM Ý}5u 4 )(ⓊA괱LÚ¢ÕÜ#†{´©\ˆ—¼ÓéŠXóeÁÏÛ\ÝÂÎx¼ê¬@¨{Ù|Ø¡רNñ†lx-§ÐÅê"Mµ–¬KwÀMLe#ä¿p5C®©$ÇêñÓÏÕ^®íÒ¼§&º>F.é`¾¿}ž~:rÜ¥“P{ƒ ¹Û ó‘=%T¯IçéÕw—8ß*ÁiÒO縤&Ð Eóü" ˆBŒu¨óîÞ‚¥9Àw¡<¯¢† +t¹µ0—Ü”%bê‰=ÔÃÌ™ŠÅs–=©Ì×£ÿš5ÄP“qæR€â³RmgÞÔ¸ÀõoëŠHêæÛø±O3­7*Î /“¾ruæóÜ—ýGŒÒ[ŽO:å•kôcÞÈ{ñjW$6è‘ú :wÛf)B/5:/j°AçŠ ê³§ç0ˆ¡—ø‘®!%'_ooužpbe›¬©Œûh+ñQ?*(øÅP2£Iuª³KñÆgÝÔCäõ» …aüÚzE¶ 7G¹S+'7üXr=`*;MX¬«JÅßǵބå!eF Ñï{cx4ÆÉ¯w¼ `mo6Y1 ÎûëÍiã„IM¿ƒézÞ‰Œ¢ö£añš37\KÒ¤ðp¶¦ ­sö‡c":(OÚê¹b#ÅV½{>€eUBSj€9žM¥L««üʆ2ÜÚ‰!Ø®$AŒr@§ûƒ­²TûÂLöAÏaÙæÌŸ3éÒn:B‚¿5€Tæo…è9ò¯Þ_ùˆ"—$ÓEYî¹^V/æa¬®éר2ž­ìÎÃ%2@'5f&ž£ÖƒK]é][`¦uu‘¿ÆP]“ë]~‡‘p h Y«€]PﻚœhöO]l¬ùÃ"å$S/p´ï¹˜ƒóN¯¾¸+‘ž|ƒ\ŸÝÃÛqáŠBü&èÐ@RáI-¹B…& VÏ¥Žá'Páºzãð¬uó$6~òÏ5B“ì^÷5V%8ÍU¶­%‚¥C¦§gdP\­ïf¨Ë­ªS„; `=Y¿©ë°rtÿT<;òïgg†@ ªN·Œ—Õx3 ¥- 2Å2PýäâÏ+fɵÁÈìL+y‹„WˆDÄàv"¼†Áµ§á¬8±ßÑí„ÊÁ£FÑvzv–œ´"kÎX£‹-$4ÇÍXá Dªo« ÏÒ:“éÜÐd‡MœÓ#G;xí¯òÖˆ±IÌ/t¨åüiôŒÐÄYS†å›…€¨¬ËL¯FôŒŽ1WP!µæ'™"æBüŸ`cfd›jŠª–Õwþ9²TÊ_¤OÙ%MU÷Y}»MÍ«bº=zͺ|w"º«« ÐÆt:{u-ùȧyS§32‹w’ޏ@\"¯)eDpÿzÁ€n!T,œËY1O(E±ö£ c«B¾(ú‡"ÊCÚ¼nÊYþÈ—÷C©˜z&¡Å‚zMϵ-žlÆ®_1•k™ ë°W“^³·¹ƒò/*ŠŒ»øùwš˜é‰Ñ³mk‘¬¶6„½£ŠÝ«hþ©UyÒ7WyÅr G£Žñ7˜¬ „f¶wWêf£ÈÌ:6^Þx‘¸üágã‹î#+šùþ4J—uœ­J¤: ©!P8šS‘-Žø`·­x7ƒb¦9¼3'‹k{d»v Û$}»-Üða`¹qívÂ]Ù‹;Aù0ˆTÀ¿e Ù_ ½²s…¹bÂ"/Sû½*õùÂÇÌk¼–P Y#èUʇϨ+ü ™àAþè­W6]Ÿ¡Ë²**nR¢©ß¶ØPcÖ~L‡i­¿¿j݈§f?²2àmø¸~i¯ ð  •QÞ0ÿêDƟ캥õC6¶„†N?˜\äõÒññ µ` ·úS¾-ç4Žg9”gOBb +šøÉ@"*Cró§ÀD•ÇÐs?У»Õ½ê‹3¥©·Û>?Ì×PðØÌk¯£‚K™¾ö¤ù+õÏ—µ&2 @çC®¤¾ ×!ßžê™Æm‘ƛH=éYß$?H?%ž&ÐÝ_wR$GGø0CMít'ZÍHfÕ)ìnìH}G9€êËëÁ—‘+ònË£rÌÀ²=ÒzÔmÎÔþHDt“…çß4Ø`03e8·dê™W˜ ‹éÎãÄ-¢wVî7BauøÚ¨y¿´¡Ûóycâ™3м=¢u­“@* F‡b¥lùA"Ö+Á9þͺhrV©]4qãß ù$™ãÍCÚÆ±òq%ÃÙ¹%ír{°Í‘ã,ñ‰1¶_åJ¿x+¬5bŠÒÓÑ£òUÐD´©Ö.ßãÕÖwc0u¦X¾ZÛ™ç.pB£j7 ØÄžYÙã]‰¶Lžß],À—ÕÞ¤’ÐRyD%ݺÕ.ñ^ÏÂŒÇ|œ-SŸ"‚Ù†4Tgq¸Bwýõg*ŠN$|1EzbĈóšXËK‹¨§Ì“¯m޶5OÞoK(ÃEá±3·ßΜÂ76ó™Å¾& (zÝü|´xóóÑäRý²ûŽNF^°ôî"uü‹¨àP¥½BÚö&ôèy~à|l ±ÙÉæ^×2Ì…RáqWû`…yÈN£í(ÕåTÄê¤bâ:#ÛÛÆyß0)–åM¡à‚ ¿‰HÓˆ*ÌO_|WF$(ÇÚkÍê“€m£¾½õÑcjC¤”Ü#gòO¿ü›Ðð=X€È¯±ZÒcʤOJrðRGœŠJU p@n×zV˜Ô(¹*d¬š–_õU-Å*£Ùû3ù : ¨ß•¯x†9Aâõzu”‡lŸ:ò|wÉŽ9cñgBPô¦©˜¾ºÎmcåéçš>›"ÖÛvxÑœ>_४øürbjöÖ¸\N.¿>“‘´}¢éÏ&sdñ±~²¸¡ð5ÏHϦ‹f§EïhdÛÀAÐDyRû™§C#aŽR(b~"R܃e¸³œÎ¦_v O†'„Ï|Ðú)ÄÑèÀ÷- ‹}>ãY/> ÙÃéÀÑ(•²e­©DÌrû»;‡šoÇO÷G˜D±ß+èqf¿ÙðˆÙ½ž¾~ŠÝ4NfÙ Àf°†Oç3pÛj<1åˆÂá‚bwS=XÖ'xaȤÌŠþü-ŒØAØžpS8`ˆÅĈ"zç}›ŒöVÂõÿã“ç¬^’Â&ëCÖ§ÿðôKn·œ-×âÎKuâlKϨ%ÃÊŒ-½FÐÑö +…À_MºBò9}/ÓÔET¨¯¥û€¤Î^tdá_‹mîÊÜ7¾•Þ·~S Kư„^®zèÝãƒZfH‹ÆE¤ãlw2‘"oŠ¡[7!Ò÷“`2(ñÜau•æ˜è?Øçì}Öoîè'¬Ôb«þƒeÕ®õ»ûKýŽ­ss Ú^ˆÃûôàAò:h ñg2þh«ÇxëßÓsK·…wm½‰üºâ+oêÂ]°²¶ëØÂ…;SÏ-›¹Sš¼NzšxøLUwžÎÆl\FÊfá’sù• eþ·¢‚ò¾d'1Õ’#eàSÉBAÆItªÙºåÅ)vCÖ7HS.¤¬ÄD½˜‡soÁæ¯åE)¾ï.'òeô8?ŠÊÈ9HZ‡™ÌÒZxëõA¿’ÈÜ Ö ¦ _>Ü1Íšçû–è ÑgTð;¿"ˆîü‹ˆÎ£Òwºo=k ©ñåùºOÁgî"?¨£ç6ûì´ÅÍÀûa?Á “‚œé"<Gòçá‚PÇE—;Z ¡~ÚÞ`_=<ñ¯Õ+=#Ûºw$TÚM÷zÝ”}·•Ð í¸W.ú½©ÖäV±˜Ws•ô½R:!ZÁ Å{F§~¦j°S+÷v™¯«›œS(#Äw¿—&-O¯;R©'ºÐÅÚVÙ2_tÒ>!%þÅ8óp›´«ûÞ}§ùd:¾b‡cpÙíð¥†xID ÅMÌç²t;ªîгó„€sã·ówO™Ú˜šNŸGô°”éÛytP‘2ØñØuG?¬1E »..V"l2¥íRüÓ–êìh¯]ãŽ_rây5—Ÿ[Û~Ög‚è?ÇA)Æ‚>wàÂ¥H“PáQºJß6û¼ÕªÏ$À³KØ ˆ#!‘R[>WÙ=õál¶¼%¤1Úª½|mOŠ:ß-{gI2úsщ6Ïá¯8ðh8 óJ¹ì‚B[í­¿’ç˜[-KV·ë“´%½Tõ\¹ /çvgweÜÙÇùäR_þ³·| ªo<ý¥ðTM¶K•ÃÓ‰c¡ømîWà[ÞíçæúÌ;1‘‡óÌNäáPÍ#§ýÍ ˆàFÀÇg,Jÿ'L*džgªËT«fT8@,ÇÒ $fÑîI±#2⬖pó#®Hm„q·ô‘ £¹¨™Ï‰l6¨ßÂ^^Rœ¸íì¬Úf´@×Yƒ8ËM“&„ÔæFÈ6¨dŽ;?ß Ò˼1ƒvNZ’¤Õ/†k½å30ÄÚ왈®†m´×’PlúÌc‘P¬œ€,ÜýiÖ3 Ð)„ó=sj'ÓýJUOŸØÈ'õHµñ™¹Âí¼Vó%Ú¯îi²‰„š;ºð¿£5Ú#þulêKåU$ ó ¬añ\ H:.å¤2x!ŽüsÐxê€Ðè@ÿ(èVóxwv•ä]3¸iCóvƒP*öÔ¨¡Ù¼nͼ;¯í'jÿIÆjJ½~-—T¯2;c^¾±åý27\­çGÝ dŸ ½F‹³ÿ®wAÎ(Ç Ñ{_‘…ÞÀfŸb®»Ç}.¹±äZA’R,µØX]âXb$âXô`ú-gVë×É¡; –Å(ÕÇ\|¥Å•~r€&ÖïæÙv~s$cGmÏyò©Xðž»B¾fnL€¦î¡$UÅ?Üòôm{ô0ÜØvßëUÊ t¡5ó‚¦Nº~ÇpÒ²CôNZùrzÅbX¾ H· ä°&šÍ¢j&' Q”Ô¢¤Lƒz[¢ ·¼8P@9”o¥`þ„1h÷ ð€•´Ò±(qB1F÷I£ ð]ä k^NËÁrÖEÿ±¯Û; ò~”Û¬1JKêX²÷¾è%ÞåÛñ€Öú«"`Ñ £:ـ͕p»¶2­Èf?Û-&Qýaœû¶¥î÷u§âð¬€# óDÖ[öû.B¡«¹a¶ÔèFœ‘ßÓéNÜéÝLšüöñæºQIýòšÔ1r¸¶p;-F ¹ðÂîã"Ö8†Q¶2j&¹‡Õ·NwÁ8ò,bή宣Ûi>Ñ_[Ž1JGÌöážLMŒø¹ØZòIJê2DZúó{çi¤ú€A«ºß L‹IÿÚ[ÇɃù&ÑY¡å+Óº RD¶Úç~‚ß¾&õ³þ¹þàÜyêyÍ4”âÐÓ®ú‹1Lºk.(½òµSECïR°o•å§`;ó›ÇýœUÜH‡\·zJìO–X'+›ûF-G˜þ>ô©M#ct¹ÛL:¬:ÝüÆ;ÊÉõ£ˆÝ°2»€¦­EP¾¦Üˆ ýbûéþåvAkw rCPM‡.Mq×Õùû±ªFà¼`yÍ»û®Qn'þ®JÉ„0øç-ÆUòè&·àüøI&¬dô˜ñ™¹ÉYÝ%Õ–8ípÚ‚æz‰©¯o‚b•]\ wDvÔ*aÕC´nï>’›‰ï Å5;ŒYš¨ØÄ:©!mv±WÎZºZŒœÍTæ¼Dc;¥Û¦æáÚÖ×…!zŽž×k‰fö+VVaj9ÆwŸ^<•[1ä£9cäü†ÿ£W$–ì·ØöIý­,݇ĿÏóˆvØ^³Õ?“@µNŽŒy»ý¼§f6R8ÏIó´³c»_ ðGÁ½Àb×$ñA„VnœJ8>3^(ú,ï²2/²ñárE­Xm?B]BsûŽU£}„¿9¢Ì + Ϋî5¥VñMû8ÁtNöØÖ½<ç‰(Ïé>ƒÃ9tâµH˜p$ËÆýxÙg¨"¹§”¿¥H>‚ó³O„‹Ÿñi/ÛÕ”ú<ô‚TëÓ5!æÆáJÏcûª‚”¡4@•˜Ã&¶<·õTÐQ‘p`?jzèà"2›s€5û•{¤¿²ô‚~  uº³®Lç ¼ÿxÚÒùemÞ'¹(æFTYÖ×cSëªãÇãÐJê¤Pg×ìCüz%‚àGTëÔâJ£[0ÍÜ!od,#0nº¬a?dÔðáEárTEÁpxUÈÑvG¤ûôqtña§»''‚Ìû=h5÷+ñK`ˆ¬òÄQt‡Ò¤ªÍ×öØÍ¢‚é*#jH¸zԡ݃²ZïX¬åt¤eõ3Ã…†-‡amúÖc3°–Þ«dS0’Íâ¯ñ“&>_þû7_.MÖ^Á"ÄÍÔwš§¶]9ö¡èY¸ð·ô·:ã5æSv¥Ù P¯÷<ÙÜ ’ç—â­}°X¡½#óÖ«¶[Ò<¾‚ —‚È"=[¾;Òañ†ÓA‹±huÉ]rVµ?tÈUqŸ„LÔ(MT¡;MnŠ…äí%×l´ÇOû,sâÜÿ*§$s®íAp¼ÎŠØ•ÌwK¬gÉÒþæ×cr¿ˆ$€~Ì›køJ‰îb]˜ÿ+ù¿p)ÈnÅ&K I‚~‘¶ZUÔ8CäÅ\²eŸD&sâ8Á6‹E{Ò ªëüõÞé&¨O dF­ ºð´Øzb>Øœwxµ€ê¬rDO“h W•7"à]œjê£yÿòI;N[eš`  JXVÓ›E ›~=KMì* #lûµNë*‡‡ºÈŒ lµ´¹A Ðiðºe¸Üéjá©&ío…ÁKv( \O1ÒRØ,ÖŠã‡B!ô§ýõæbuZ¦q>Μx¯ù'˜AÁOÒÙ–å6_  `çgMçÆ&qçrS’GŠ#<É.1 ÑøõLXfÆ-†ü§Yqe8ÌÖÐ`íøÃ»5•ÐXjô¨qrî9¿Ñzê ]“µy{±ˆè¬{“=—È[…³q`¥ JØD”Ú½j˜Îþ'Ò…’…Æ'ÐûLåÇ Uu‹‰7Sí"*Qä[Ø|É—W^k<±Âá¬Tzáºî3lJ­ß§“Hæ}~èªC bó 4ýó3¸þKöÝ9Õ‚ ZÈùuÒbDq Cgò¢ŠæB‹ «ŒÁÏ*EaøÄ&ûð"ýâÚ£GïÒÐ7Ò.XÅ)ÂMIjÏ’bÖñ‚ñÃKÊ®xT‡›óDÛá6 “žñçÛ›þ@¶—ð~Ärýñž“7Õíì—®ÎG´;ݯRs‘8–¨yë’ÿWm%’ª|cNÁ Q#ÇðäÈîÿT‡xÙa`«N^~É0ši¶œ½@&Ÿ¢¿þ'o›8LÁ„«td´Ù*Añ+ÙjŠ1µÝ›{É9ÒpüâgÚßê'2¤×H>÷F bœ¢±[—ëçcÿmž"ò U¬1¯­¹Û áBÑ¢Cþõ&}ó¹ ÿ*È£@Âß‚ &£ßŒÚ5'Pæ0Âã°¶ÏÍÓÉðY}Ø–´úƒ_݆mg¶±"ûÿàMH•!©Öú݆wT†kÚ½†‹±§b²?1ø5¯ß†æâ°%HD*D¸šT½8ÂâèvÄEÔéÿáÂ0ÊÍÂop®­:\{.„Kªý[Ô€¨oLý•—>Ê {þ’ÛjÕ2üá‘Þ;+g"|+}È¥¼µ9ýŒ6‚-ÿTÒ§(_ÑÎj£<¥ãt+ ŒÝ¬­ÖŒv`ÒÂÊú°0Þ ÆÀé¶Õ8'‡žì^ܶ䱑`4Ô–êTQÀöÛ2Ø€B–ðÞÏ1!‡È ´0SС€Y õXš0áÑ™àÚÏ//%ˆY„àävÌÆø¢(/v¥™\}z€‡Ï«ÂôŒL[ð:Œ º=þÈ)|bBÞ r2~ø¨#W€¥nqôþ<‘ܶQ:D¥óN)¡œ«é' tCסÏÊÕÈ[ÖÆ¨Õ™$ü¥ÈNôúF‡s#„8·†û nÎn—"¢˜Û8>õÿŒk]˜3˜Ž1P”†uîþ÷é}I ö©©uöI±º¨EåNÛïI¼nj¥ªÕIª•,UO´¥/[ÈÔêBÌ£J“!÷çÀЙ, ëoEPÓ·`ý‰‡°V¬ÖyY†Z'ô^˜‚— T Ï)xl†™& mpÕË„Cb[î°“V”ÀëïE¹ôÛ Ï×!)Š|gxÜ– ‹síST>*JQù{í8×½çŽÒÒ·ÀZ?œ +V=‡÷Eß¿nŽŒ-Ø+šÏ-©0.Ó=ñB·¶+°ïK§€,Ú}m+K¿ä¾2B~Àp!ePv, ¦ 鬶_m”¾ôÍcà€¥¯ZM–Qû‹¶dÀëf—)ѽ=¦mÊSLL™Cާöj­—Z|a&„ççtξŸê³IDÞx¤p¸Û#ô%vÇ‘ØÛ¿‹ËMéGTHÕÙR]BÑHЈFÓ% RG‘D˜¾_¡òºrçB†v8Šn$ížYtëH÷x!÷þ6É”}×µì8(»³ÃŽéT_ÁÿÄK$bGœLø>m‡³6æ­8?€½¾μx‰&€–¡ æ.'ë4«#íT&>Î|ªá ÆöäôùžCƒR¸e£›¼,šFÓOAÂ4ïKw5KX…z÷[d›Å!u CÞ¿OeC¢ÃMöêO;DSW*•ÀVæ’ÿym¤eg+‡¦¡u5ûx;;v,XR#†héRVS4S•?òO G|ßÄô«9ñ&4«ÕÚ'WÌO§ø•ëþÃ{1^Ð_g®<¾ÕŒVÑgŒÝuýhüfœØÎŸ³T‡•ÎY>È;WŽË€C•qÏšN~Áã–lwE>'ÛÊ1~ÀG–âÙI댥¦— ó‡gSNµ^#»‘úv¶Â!T&v²¥*…©‚M¥D æµ,îh[Q Fi‘"͆‚±c½eõXÂvJàvaÏÆ¤Ò-Þ´PÉêK0S2ò¨Ò¡a.–Ä |ÈC†¥KKJ(]w¼2Ås-M´ Ý`Ra-¦„ßá¡"ðDU鮩Ü/ œº³\5‰íÞŒ¢ Æ8è¦6ŠCþÈ Y…#ޤ=gb" 1f]«/y|Ó?M›HCéñ<*gD,š@ˆUÜ£‡vàÊÿŽºìG¸ý”òÆ!õm'&’;,Œ,\W!ªÖèÇ"•ÎèÎ+…:Ô~GûîJV¡tº==X²1*h—˜ “h#ª¢ˆýIîªxùÂI˜˜úÿ£·æ¢¼yH®ãà²á\–r˜@UBÄ!v’ºkãæŸÝšÑ1a( Õ2ÊE­Âʦ‡åw mðJ7‚m®N¹]¥H’ ¹Áù·1 ‰ÀO‘‹öÌbê9 u53hÇ­Þf«ë*9Ûú±Íöߎ2üW95•Ÿ¥â=êƒ/Q–Wd£óÛ'&¹”»ŽñÖãô ¥ev1ä¸ò¤äA¦åóœ¢LW( ^UUòKîãPªaE–u‰~öâÕúrùGJÖŒ™¬ÑìP2Δôù-(ß÷•'¸'HEd%#÷Õ:ÌÙ¾¬g^£±iz€å¿Ù½(W„?)Âêös·pªO$ò¶J¿á¢*Uù6„ƒƒÂ%ôW~SßóÜE• 7e<7>T 6ŠçÞUp“ª{üôFÎÆ Y*òFÌCÚFÛûÁë’žçKØ!KTå³,†sï õýŒrÃüÈìÐÚ,4:Î^©î@D«ŠŒÐßÙQq´u›ß[­:Ó=h&›§ØIÕÅ­ém÷ L|wñ8ø8X¢`/Á`a(ûÑñÿã#\J ,GíBÀÐ}ÖÔGØ#ÿ²Ê Òh`€»÷زTþ’®iä´Y“O0ÆÉGs¨•j“÷j÷íùÕ~¼“Àüœˆ³§-ˆ!H¢NL¨À“‘ÕÖGÊ×´¾ð áéµY ´i 3¿ÀËyñó¨û2¦ÆÌb²¥¹ïM”IÆès˜5WBåC‰Mæ¡útTéñ{\B5ÑÖhé=Dý’B¾à€u%rû±aÔÁøn—ª‘R”‰ôŽ/½ä‹ 5ò¿àÁZxÚצþô+žLÙ%}Uómª sv{pðØˆˆãTh[ÖLó s ÷ÓWåÄý±‘øqØ)|uIèj¦åû³ÎR ø&„ˆ€ò‡¼Þ<ù «?w UÊ UwaÄÃZ‘p®ˆ ò¥D!#˜ÄÞ*%=’4{èÙᡬli_5÷Ĩü6Õ?2…º†»Ù\&,/¨<’Hß+?òñ˜µ@ƒ?÷ÀÁ`Ì_Їb©ªµ5Šé©-ÒªÉÉæ§ê+oWžÉÜ­ÌA”áðT. "Ò$Fg°ë”suÐúÛ„$vh‘óó²VÈØQß4•|1àh ¯k¸úój]NV÷îs׿§ÛEÍf§ÛuÁø¹Vבîþòjâaw›“ŒŽ7á%«Þ Ðl¼®½ ]Iˆ4…E®Ø+AIJgi;ÁF5u„ÛÒö7­²‡Hž@;ôêg?4T”_V…‚O ÷óSéYS_r6R¡ôÞ¿˜˜üࢴ…ãÊXbTEA›7~A£àU f€)éô=!ƒ¿‘1]‚:að/Ýj}›@1[<³šââü£¸4ª®[ØæÄœýHàMŸˆ#x3ü*¼‘’#g=5³^ÕzÛ?ߥ/yðxl1Ô“úçCm xß}Ò=Ä(Ë|R4Rø*"7Lüã=šW”üÂr€ÀGí^D› jÞþ3à%@,».Õ–÷"ÙjC˜= n1Ã$ MÁœŸ-ϦU,¯'HÍù™„`'T-w]B»€œ€Hv7™n-éÆýÄ|±Ü»Erêí äø¨Å2¹y :àÏœý`ÉDºa #O‡Ðιå¶Î8jéþ—þ:p(S„üÿm@öH—Ì ñ5æÒÿ%4ö°‡~×ó üm’ØKó–+‘€Ip æaOoÅ­ŠVÒ„Šƒ­v°)×µ5Y2BÂkÛ×çÖ_.)kŠðq.f¹]yà<Á/ȉoõ§;ÕÛš_ÑR‰ž;‚}«$e¼²4 T­Ï¯C0\_é) qE÷ð3†;ö[ŠÇ¬-‹"w\üe¿±<3¢É=W½(18RÀ‰ŒèÜó#zJÁ?}·‰aŽ&$½L½ hÖ!݃ܓ\›@ ІcIHR*ô³f[Ýëƒä eŠ›ÿqÍpsÇÇO¹î2uÉ™áƒ"¼KÇc‰ñVª1‚РS¯ß6`n{Ší3H­#–“AïP mPŠÌö¢yøñœÙU»%o½‡ŸiÝýÓGíÒ#™ E©÷”QŸ‹žÂÈ2Ú‡2‰TYDCíðD¨L§Ÿ„'§Y?t$±ÌÃz“,dö6÷X½Æ.©Ë¾8Žøi€–ͽ?lžŽ/ ‘?(þÀð¶Î|o %P?›P OºV–aKB"ÙA” Õð3vm¶%2j‚=qœ6\•Ê @)?àŒº‹®8±‡ 8T[£P÷ߨuZÿ\X4›£BÁžZnÁÝ©‡t¾ðO0¬U Mµ"-¯uȉ*Gw‡8ÅAöŒ[;¶=.êÊ<ây$ßö öQýæ»Þ“Kð^ &Op„Y´€Ò\à"#`UûÄÆ» ^ûáõÝœY“¢‘máÂzæ“Ã(>ÙÀÔ~Úm–Éž5¨™½ÖκnVÂKæJê©ÿ‚®U¸.µTW%‰PmÏdVÁÈß×dÒŒW0*á-KŒ ïRTO¯’ ìýí¨z/]Y ¬ W°½tAíéËEXú†'3üvÆat}òÕ‚Š…q©Ÿ‰‘á¬yQÝËßJ×¢PYrÊnÓ‰7 ˆùèÛ(ëÕNÙ„Þ¡pÊXÕóOM‡Ó( ÖA%¾šSÄóÊï q€—*Pü¿áü-7(KA¸.¤füö´Ö›w²z&ÚºÒ°õœú8€øï(aÕº7™fµ)Æ5Ô| tꀅvÜz§1¹þºˆ7‘xtù —r¨UàòÎ&¥øâ—¹ÚÑï—8—I²ÇÀ_óÓ…²y„` š™Â€°­!ÅÆæòΔu#E¿ú3x¸Y[…UËq‘ݱíhZ-n¢r‹—bßê› ¬±eú­šŒUëD'zÆÝò3[_S¦kA.åÜÌ4È2ñÍL³‰L©”0̤M\¯®&#¶ Á½»zÓzª3Gn8"iÖ7“‹Âõ…öÏÍGÔ‚ÃBI([)·ú|]|ñXÖmU¢ÏðÓC©Sã8 y9”à¤îº)'L=ŠT½4.&èºJä§.Ýz®ÀÈýç[ºe‡sÉ$¥ˆÑ1úÛdwõŽ¡²îZíØ›Ð‹1éŠñ>1‘1i½“¹Ú<¾"Š•Q‰9ø"'hlÚŠ…}0‘”¥¼æë,_bF@ ÛÌk»Võô·ýž ´S^YGbŒã1` ]9:RÓå ùÝÁ{y»@ã´¢œß&¡hD’g]o(-€…yöt2Šÿ9¯A ·^SsÌtKf‡…ÅÎ7)'9 ÅðAà s–¥õÙè+¢€°?Vnž áƒ6êef†‡ò3vp4‡m&)Ö&ÂQ|€«kåK_Ï…ô•"íÞÈò{h¼ý Áå@@¢ŠaV¨À„#´wÎ~ñŒà5™Aí6¶Ku%«F!–6;ÙôYìµÛGÏ?‚§/áHü©{VcÖØ‡*[¯)Ðð…ª‹ÆðÓ ŸX"ðè*†/ ©‘#žü¼+-¯»Ä~•6iWº #è,$&Å`Ú\F1ïU‡7m;t÷¼¶¢—Õ¥ÇN—Ç =ÑðÓË,ïžÌ—Šk±¹ŒäCÈ?†-Æ~x©‘“ß®ªð‡+Œ_üN·7diâëpñ_äÅiEU‚Åymýx‹¥eÄVr&6ÔþGÔ—“/Æùª²È]¶`A[RéÜgæ1ršÝ½»tðt‹ªÆÕ·(ÇPz¼º»é›‰7Ÿ6ö&gÒi¡=—âpb긋¹Á–¹2šµX梽æÁ¯n׌üAW|PoÐU'k—F_¤û‡¤Ê ŠàÜ£4·<›}P]–z*ïK1ïZ×Û—³o—@¿ª©«ø26¼kýtr$6Á“:Í“ŠçóεG¶*’º4Ù3÷äéÌ÷¦±’ 9ûß©¨gÜðûW{üåÕ9Ť3Šlmx¾»KûGSã+ôËæ@süÉÔ|÷¨z‡ð·¿ò†@• ýmUÉ'ªÀ™¢—‚Œ, Jâ—ýáQ„E~h0"f«Úõß@t(ŠI`D³‚RøÞ¬—ãŠq×âwJÓÓ„¾°I©ÛMœköËQnUqëÓh*òÇ'Ò(¤¿G§w°ô#[ ìÊÖ‰}euxv›!X±ÒŽÓþç¾cÛV§YÔgb[hþ i›ë2NŒ‰èÛ9OÒ¥fÇ!®¨[vè[W7Válòø~M‚ü@œ‡‚¡¸*FjðcˆVìÇlG7躒mÓ•7UijŸÿG5´ ù&hM“Ò®´Râ.—O¨ÀEzdUŽñ"[óBjâg~V ÛæS)_\öŽiKZîoh(Å,{ÓþSñ^ºÎŽ4ó›ùÕË9—# ñþ”G4"RçQv™Û6"޵¥Àî¬ý0²à üãG:óà?œHoQµ'öl!gõ¯ð‹C*Ô¥xr µ¯¸j_wÏâLÙ>Z@iùµ˜’*sÉÍ.Öy_úƒFÂlÏ2i;õí9&­\rÖf.Ÿu Ï/4çúi]šª®çAF-bÄDo§Û"]Û4öv'”»]DLšÛl3tÍIÏtd–Y”Êçí[/u|ªùsÝ$3‹¥˜®û'k„èb0Å©r ,a¿(èZž-ŒjšÂ^‘6ÁÖ­²äò#x«´ž)øœ.Ú&»tÒŸëà Ô\Qc—+ÏõS:¼òVªÚ°½GÈn#s|£4˜•!›Cÿlnâl–>U«‰ª>+¶¡3bvy*kñ,7J‰¼æÕÞe¯òѽ©‹‰‹qÞbÑ!Ù-g"FÛoj¤1•Ž ;ɾýÇCø2µIÜVg»¢Âä$ µl8¾ÃfA;ݣȎn Þ®»¹À#}ÄŒ‚ÅL.ìê4Ûo·ía=Ë>S±&XmŠú¸1ö%>FH™^}Òúq@Ý$=˜ýÓT•Cž_SSþ[í´ªs€&½²‘®¾1?ÏøÂ³ …,$—'êr®z×T¦úXJ`²+¡,ÈïSÇé A™C+ø Á#‘öÌ9®áÚX¾ì~ü_çÖ§l+]Y.P:Ê''ÄÞÙl,ZÉ,OE¾ˆZ†1{4„zoux¡_¹Zç”|©´§:‡O¼ÓAl>vèØ3¿0Efp‰%‹meî§ÈŽŽê`¤X+Ÿ'Pqy@$<Þ«áeP¯!ã™ãþƒ¶J|Ysœ•öò‚ðÁe·™Vý×ç„èƒ.·“¡ÅÁ€Ï“á8ƒˆ÷_Åö¦-êÊPƈf W³–“p-‡&ÑVRÆÝïS:«ÿeÛÛîÍ!EÂ,ùM@+)·q@Á븥RÒBÅà™ºß~n:ÉT¡7q$i«€#¼ÿ›7ÎÄ•4 ûu^ìßoàpÔ›hª¢©ÙH“N3B߬õ] Í)ÇóÍia³¤äŸ-f¤Ÿå¿ªî˼|¥>¥ïÈŲ́jµ 4)‹8(qßè{ÜžŸÛo‚fÓ=á寰1}§B×òYÉ“µvXŠN–·2K³EÏ,¹ÆE1,ÝA!›üÀIá‹Ê NÑ?%ô°3pQa/|ЩnÊ"§Vïxº>×èË2Έ—»ß1ï–ep€eÁ&¿£8§=I«ršSÚYv·˜MÆ•ÝÁ»æF$KJ_y]WnÑb÷.i€‰–<µcJÇe¯Åm{Ò¾$øu¶ÂÿïžÙÚw6¦v ¹ûìĦ}a¡g¿°.­ß  ³PeE§l«º-0ˆª®Ïˆã[uèDio†'5C%²Àè«¡*xƒfïÆ Á›³T=@Ñ«›:‡ŠÖ´$µ—eÓ7¯¡!<2€Lñѵj—‚ûáˆV¥ÃAÕõsÁ¦»ìù|}ma;ÎF¿‡6Ÿeb³Ë¾èÝñŽDí­Îò¸÷mIPßÈ38Cåõ£'Ž‘«n̵“|G½/Ø€®µ³)ÊðÑ8ý§:PßùgR¸ÚÑóûÍOo p/zÃI`?ñd£‘s2•í(E¦Gûᢕ„‚wzï"‚ƒèpR\rFfÞ9´¡f²‰pgƂа„þÌ^…í…Øs/¬„ƒhņ̃¸6Öwð4gbS^Ø#ŠRP²ÿ¼„òîŽÏƒ W›‡xêWlaAã^”f)3ÆOVÍœ‰˜ó;L…Í¥xÔ2NlZ¿àu¸Î.E¯S+;U´U±šéÅþ劖-Fµ:”ðKôà«þ½»*×%s¯îY›A.<¨BúNXè%ª¯8™ø!ó)ÅÑI'ÒOäÃãgòç¾ÜúÅ@‘_ø?ÚŒæJI¢sjî=¾5¨çýÈ1‚Áz"ýPÞÏ£¥sÎîшÐe¬Ø+–;Ù-KÃäû|›ÂsŠC?ÛñØhÕÚå5S"5]¦­H€¤8à‡6´joD5xO·&‡]{䘡þ%Hâ¡WMdÊòûŠ£™Î¦—p Ì-ˆŒ ƒ'ÆS¯…³„Ö]oؽ³Ö/óéF5ÔÎÂÎ9;[k}ˆÌ 0köÛD-kî×FáÆU¬6ߑɥzì÷.w¨08X¯ÒU}%ìÃV3q¸n¨*T Ðѵé½' ±­·5¦ §kÉs÷@þrô¾ßºØî;ÝRÝ/3N† ÕI%Ží?¸x2qç6Õg^2³´G‹Ñ©L˜Ö˜tøxªûxpûE²èí’Ÿ¿ZY°?[I­¯/Õ0{‹v%Œeíf€e`Ó¸úpsò:ãÍýÿx]D40£ àjÐè¼MÞ¢¤Üë ¨2ÒuÙøªü¡¼}®˜ùÉÝ[Â[Ħ2f ~Ì­ü7ºWðáüdÐC`27Û]Oä¢õ"fÀËbç ~rW9H ¶y­PCq9&ÉNÐï÷êÝCžÐé²êµÛ¸ÿËy°Ý¸÷' iïØiTÑ ß*g]£#Fhl¬ø•*ä<—ŒdØXµUW<{CDë04àLÄÁ^ –Áí'm™;&Í™!}¦Q?y†¾úPRs¿ ÇMËV.ñ¡ÓžNC0à&s™+$»Ýk_ µ½Ék¼Å^¸¶n0uê+E‹b~RkUÆ2»›LghÉ*ïõ…ïa¸ñ*v:­geN€5ý àð‘F[r9AðárdªF¢04õqð ÎÙ±eÕzZ$> •3yL¬ûÿ%ðÂ,ãZ¡¡3h„*)ø3ÉŒoƒ1™+×Ыºä@! GVõüÊâ´{žªçÙBŽfþ&âM¬8¢9âh€|¥Æ?tÅŸ¶tä`S"«q÷+^&ÓhðÃ.–%yTìÏÔò|¬S¼§PÒUdr~¡›üô†Ähź¤Å ‰[RÌ6¡­®Bö{ÕÝCõ#ó&‚Ø{Ó>8 e­Å¤è3Æ õ˹}ÅY´¸ÖïcÝ”iЋ?o_ü& ÊE˜¸Ë°[OÎæ9âiƒ¡AELã`Êä}eÖ“a…ƒHò.iÆÙKþÞ²'¯m4<2IJS`°¬â)½Ùôª+eµ`ò5)QOŒûâë­”‡BFÌ{­„_€  G'M·¼¥qóq=`5=ú8Våö ÷A&å$v]&VÐ÷ò[®åé’OoüûÎCD™¼ñ'Ïâ–ô4œ&£ ^¼nü¢H=!Ÿ(¹Ýqü›ôNwt`tB…­[ «É“~­Zaum/€þ‡/³R»µR>÷u*í6XûK ÃÙK:7wÁ|DÕº¿£ù*àA_÷f„à{õlcøÔ_t0¾cXøkjE¥‚‰iõòÉ($¾‹Uñ)¾iq×—µÒ»‹ëÉyµN0•\¦1*nÉ£FÑÍ›&EÞcj/…|†8­ æJ«ªWSL_È™=à Aÿæu ÍyvûR âNøßa<q¸ \Pr%Ú Ó|ÖPUÜ¢ðì]þ§­´û±`íV±jkÄ=¢hëBeÅö^ø¾±·ÇCƒ¦ñUæE|:ˆn{”?J]’ã^gb–Mˆä—M3F<¥ö‰–‡m¢® ñ9zÒÂgiá¹°Ïî i”ôÿÔ=NÛ^÷î V>–D§šr¸ÿw4íå¸Ûˆ°N ó+«N&µ43 ‹‡u0[Ôb¯?‡ïô›ˆË˜šÊ@ýÉ£†i©C8ò•WP@ÎÌ-‡s ØmƒÿTäBfs¯Ìñ–yÎä®/׿æ5yZ.è–°e1ht-ƒaÕ_ÚÁu9J¿Þš-ÝhL³Âß+“™¶êýü5Yh–wM"ÊåjÙç2î0 Æ”kKŽ<‡aÄ–Z‚Ù¡1ºÄíÉá‰ì¢üÍy¤Íæ±D*æ_»«è[.^ƒ ¬b2P¹-Óª DɧìüàE?³nºDˆNÞ©Ï7hFADìÚoØ7_ÞKe,ŒòË쵓ô*"ï«©“졉ãx¾F3¿fNh]<Ž]7/\©¯>¦›€þûX×YOXÝž$Ód’ø‚¤ßòË®U:¨+NW‚ùÂWÈÑ/ø^&ÃGíCQð…TÜ…¹Ï ÁnÖyVª_ku¸Vå¡MЊœ‘êî¶ëGÄæ+U=ùñ{´ZdÐ…ƒ_æjù_ïÂmïš©áé¶ 6 ³Xì,.~œ¸3tI’PmâOBˆ† Ñ…Þ¯#‘úÑ 8Ùhº­œ5õ`§ õ`>Ì‹÷º`’Ë"b]äkìTÖ„65È4|øžÈ_^¦o:ô±× Ç›ßt#(hb“xëyš*m¼=îÙA¨wÑüœîr½W½i Žs—yDp˜_[cüF×èGÖ’7ªãи3î¯Y÷Cß])¦”Œ|É8®Ôh·;ϱ‹¾•q̦á×aVÞL©}”ûó» ”NmÌßíùcBÔ^ S9ͪšªYVÏüæ?±ö^ÿÄLùeå*â¿Âä^#„ÃàÚã@¬Q‚¶)?6]ÌX[%U­ðÂrôžZÞy–!ŠS‘Yíü±eZ¼éFßÁýG§L#5lðx£"LdG´±ÆÂŠ:„yÈL”£¾ÔäPf«s†ößÇUB±{:s0!å•álËšGT`’´ä%öéõ“UЦ›Æ~‰TÏÞ1"43éÕ±K`[âËàŠØÝ®?FÜ€í¯ \èïmAÁð ĶƒNX(ˆPöëÆè‚ƒ@ó‘é}æ`éy-Õ*éyïѾ?•—x¾A€),UMmƒ3Ë#s¯Or¥±Ûmöª û$J*€>a6ü‚šV{e ÷i5o΄ÑõLØ6õ»´þ¥rèpw –œ¥ƒDÄ}|‘ØOÃèts„IuÓÅ•ºØÆ=ÎO˜e3Kwy|XxÒyÖMy£VÃöFá†{Ô§˜êÑ×¢],‡— ƒk}ì”ì¨Í±aj(ÜY]‰ÊצJâÒÇ+ÈËî›±TÚò¯L˜âÐåìõ¶)Æ;äãl^; K+²Hx£ M_"ãFºí&ÖaûûÏváÎOzCõwÍ|ä)B6ëÛ:X¨e*Ó×çŒ+?ú"eÍc`fûÝ8ñïjaªÄ½FÆÉG7ùüÚ­âÉ@õC4áü™È¹=Eë4)½U&O£;râÐìÌÃÑåU•{úÖƒ©½îâWìó—·-NºÌÑŽˆ bo†‰É¯5ð 8 ›™ëshˆP„&§c<+õ_þ‚ÅýD \PžæA‡MžöÅãéK¯ Ê{× m—‹Ã² Æ'ow|Iþ$"å·*W TÜ0û!ˆ’Œ$ª &í¾}ÃZð Ùž”‚5É!¯lÙüš4ÄHAÄéKåQ¥N0ÈtwJy®óý~ÐuÉ'¸ß ›r¤æGPô[id!õüÊ.ŸSå9 UöÅCÊÎ;ïHBzUÈ÷-°‡mbÁfÅ'¶èH€Šeâ8˜È„WÔüˆ&ÆÔüv’þW"µYa%~VR« ¿}õQ° þ§Qä»7ÌØ–±lÎÁoîÞ†MŽ™n8?d¿œs«A}Yké?õÝShV@sN´wS?^ï2a<öJyzÄñ‰ª¬É,ÊõU{R±öL6îB)a­ÓþfnraÖ%îi¸ýýÃ3žnm]æÆÐ,²`Ç­Ü|ݬ‡s ò?¼9+ü’Ö¥:‘ÚGØ3ZÒfr…²Ùî>CÎ gu ª±¨st8­—W©ƒ¸ÚNªw±7‚©ZTM@Êõ*Ú|,½ˆg@S¨)fÍm©žá!­÷/êvRŽ;!ãé º_­ |ï¬ÓîOk«?Íþf1Îzu¡/¦é´±}MŒ·¬(~ŸrÍ”€sx ‰;¾Ô°ˆŸdÜ‹³Û—\Éq×uÔžD­Ë…SŠýWGšfGï{€ù·ƒ]8ÌÆ˜ü[‡Ö gg#źšˆùÉ^N¼½ÊØ¥Ç@ öÕ†cÕÛÚV%¶:³Fÿi‰­ˆåâŠï§«ÿ9àÛ4s£AK%“’ÞÃuãË­*.ï·l“Ë凓Œ£`J™Mt ÃA^°—¦* *»¦0UìIh­ÍÞiÎ_Xôr+‘šà>šæÈÆý;s¯R ¶ª#²ßÏÊ^råøÿÞæ§‘ìœeÃë:\÷ë‚;:.Àvyà·³…w~³Á#¤çx1³ÅéÂ~Û0?±kÀ»#:à_;Àô aµD"vm/Ö÷‰þ—|­ÞgøœSYSG²øHƒæÌ¦—랦ÑßèÐÒ”µ›øæ© U¬Ä£bÖ²¯oµ¸"w-‹€/ïQÇëL::4L)Áñ^8›ò¼ý£‚ù “ö¡»þíõŸ©gû5º¬(Àû“Mƒ¸wB²*‘·°”bUµA±àq7/]Äyñµ”&•+ˆs‘ÆÔc Zäõö›¾h2®ŠÐüƒeû“Z“VÎr¥õÖ ²+²H„³/ä„ËrEB뢯?×·]Áa‚¸3®…%;Ô5¥²•¸Lúïe¨¶'ŠêMAÈVØôÌ›§§´ DÛþo[a|v¯(?ï@}ëÒ¤ÑÚœÊxH÷˜Þ­¥#À(+·M ïŠç÷`¸ŽEÛiñLPÛDZc6êâÇ÷0@îÔæ*DgÁ ]V¬üŽÔ—Q7ˆË—W ÷ ž{­+<¹ oà=¶Á­7bÂä«uøÚ1\h¹Ý÷ýª×µ‡ùp$Ë¡ÿ½êÔ(˜ï®Œ×U]‡çEÍŽ—é–³³>vаX¨<É–l²»^r=æèÛy4 I$WÝKJ­›2®ðeËÆþnÂÁ¶d×áu>pq‰½ž„<³o"j(›¨'üQ—1*ä×JÙ`ÙÕt˜ìúÂ|fIU&™æ•hÇu20í.È_ƒ‚À§\ÂÀŸ,¸_ÃÄÂWJN×·:èàfF¢7! ¥ñ{¦uò—§;íÌy í`¼ªóÁF[1*cs°eèÒ=1ÃÐ7±µ¡OÃü>µþÜW &+zÔ”‹Þ9€‹[—¿¯Öb‹ÖW3ÔÑú¶~TÎ_Àšü«Õάí¼0 ×9æÎHý„qGÚX‰‰ÕòF»ºlúŸøÉ…‚8bþå™u¯Pë1µ_i…ºk·Ïú¤¥øršÁ?í(¬Ç7'߯ô”Á|¬R9‰„FÚ…©DZúìæ„.Ê&ý¼:bÔ6úejóñÑz8ûŠYMÀÇð¤Ä2MœÃe³O›¾Ñ‰¸Ê#zŠñë´Ê‚» SvLº?§Õ@A.pl`æ¬)h2©…u7òXZ)Ýf]óqê\‘hXˆÍ¯àChÂoËLˆÚ7‹Ldæ‡q wXlÏñmœ#KŽ)_…À6áÀ7ÏCEÛ:p¿ÂYá‡~@Õ‰­mõéÊý—/ÿ×*Æ’zÆäv±ÑæÃ{.¡ìTCéË=…!»®j½Ö=¥TÁ²b©Mp%PëT|¨¥õBº9hSøýHkÙMÔ}C×X¥þ‹‡%Ž~xñrO¶¥èœ€¤”PN­J”øÝ­ïÊxç>Tµòƒ.þØ/v}à³ëÈv!ͲÚšt"O)4œŸûš)Þ ê²¡‘`Âk—í½îvXªb ò üÑqp$ÑŽoHŸIªïÏÂFR³ #ʤC½•3íS¿ºÅe|Õ êzÛÃ]À9„Œ°PdÜð+‹÷þ«· æ‚ðk}ï/ÚÅCÚSg?lBtNûXO7’Ò¸-Î ¦B«@TïKᖦ∾s÷É2»\¾X€½9Ä©* [òWÐwM¶º˜µ‘!—{ZQ~ýx+ÙHR{Ìš¸z©&!¸8PŽRÿ¬‘~ÜïÛ`‡oQº´î?æØ}fi­—ŠºZnyT³¿ü[$X¼^ëå>ˆÖêª~ÇÄfƉ#ÃcBóuLsV—±èJcLSæíS çTáúÓ·óeÔæÞåcLápت£æߎ÷»_ëžÚ"[|GØI.v8€)¥·)1ô/›NÔ"«nÌ?½Ž²kíÜŽ«ö0—»ª½l#á³/Þ½5»@x ~r‘]dLìÈ×ZÐæWðòªCb¶%`­—ÿKuQ²8&]}[þA'ιUU•¶Æ†Ð ÛnÝñ+í¹¾Ì2ùœ}G;­.©'qîO„Ö¼RüxëÂbf’‡SIäS.×뀎ójäãPDZ3„ëãÓœ4-BcþÂFªäÿçW˜“ÀÉcÄÜüŸŒ&ªÈìv0MIN†E˜æÕ G”Âr“+Ùû]r&…/ÙK@ški·VÕæŽä÷¥èyWFÇM¡¼çàôïd9à›J†•Qt¾ÛHƒŠ@6?¥?q[x¤ÑÅ1tô_„ØX7ü>î1œûõ³OËÀ¡Ñ/ÎQïÕ’Zìa¥J)ì©FÀ›„Yÿl†Œ,[Ô+ï€/ÃS2K¡©´¬1ûkæ¹§“iRiÈØ€‡þÀñŠHÔ:ß2ð.UNDanÂYʼn×Ã/a•k¬À›8íPRUˆ,KÐÙ²1†.Ú®=œÊšU ÿ¶3c\WL²N“”× _"¾pÕÙÛ‘7>&´ÑªÓV'z:Á45§û*‡r¾Êxµîó{b†&9¬‡¡.Ë7Ïy¿ôƒomkWk8`šóâA•æÃ3‘Ÿ+K¡{A`kÝaî,ù\úìCÈ»Ø6Lv¨ßx· ÿ ÂEY*új%L…,‰ÑF›Lgiâõ¬t›ÞJtqçRó³E®õ Z1¨"<ÅBù; A0ÁŽõŸu“gxRüò šëŽb¹½†Èá×›© o™êõ¦Ê±µ¸N!êK]('ƒxüK_]€F0ÞÄìíÃÐn¬ùœPÝ(&G¤³žÏŒüqœªLÇP½#U‘. ò—ðÕ&Îz| ‡5h‚‡Cöù«-5â,éJDüÁ%Y'¯Ò¼yÄÄf6xl|³yçHÿlõ& Eyfq¹"§ì¾Ürµp”êØ™‘õµÅêtÄò|ÞÔØNÑUDéãìžg:³)Ljðvä‘f" ±äƒgž)Å>¯}ßxÔú溄ìr˜b¤‹?@¹*Uò¦žE=$ —‰õߨI`?¼ä¹êÜ*Ë—Ú¢î™5®iE¸"½½|zP —èSïDÉŽ±\ØŠ×4fªS‡?{+óæxËÛÓ {èee F¬…?J´ÛT€]Ö^.}Údîߢ‹ ÎÍó'ëWðƒkïQr,—ê‚´ BhìºÖ…ŸSÀUPC”›0iîw¨¢Lnµ÷ aµŸ$û/áM4+M`û7]ÿO×p+ N®)‘®‰I@¸¡$Jïj²o¨ªõ—ú,gr?C„‰,…I{?nÖŸéÊ+Å<™FõM)Rbßœ0Û©j@’ûÞNˆ-<:ôÛÍã ½þ¦iñ‚+ÍÉR­wm¸ß.Ç4Õâw~º2üj†qÃŽ½Ê½ÍæYL$6S¹¼)9otËS šÈ‰Ö ¢rA<—œSMÎBÇ«‚›Ûox a ¼ÂMÂ2g‹çþ;ØŸ"^/z|_4M¬Ôó‰Ð%VDËú&~_}—!ÄÞ|Rÿ¿ÅY†ø Œ«±Äv9–zæ:¦uC}\×îÿÁÕ0©&ë- u`x˜õÖŸ}°hIÉð+Þ«„gàѹaDKµsõ ÐîF;zþ»!dö¥Ô qq¿²|¯ª‚öPà$-†ÑÙ&©’U‹Ü¦„˜n)¶*¬ñEóotK>Ï:¡jCΚN–û9®êjÁv(ÓÛ±}ñB X§—ÔR‡Ïœ(BP3Ë'±è-Š©í² í„D×âø\ÄZáõ+Þ-näÅNnvYJF;m1E± ­C>½mÓ¯î+“W²ÿ/ª[¶þ’°3üNWNhe´¿†´rîÄ‹ºcÝt4È?öP~CeïµèòbùfÇ«Ï^íoˉK^³LŒÅy6¼å¤h‘f‡^­ ºèb•#¹¡mo¶gÏ×;×Àcˆ Î;ôš;µz ê³Q?­’ëœN›‡ „ õ˜úfá˜ub†?6£Ž37l,ü›ì7>¤e™îª™0ç?õ¼¥ƒ¬¥0>:Ç9§“¯x_iek}«ÿTTW7í4' ¬`W–:-‡"×ÜŽ7ôëtؘöDù|?šyuÜï¼(eP»ŠA/ €aŸYüP} }NG®ÊEx¤GÝJN0dºF÷P À!„›<ÛÐÑŠ¦0â³ íÉž¸mªû§¸N‹¤¹ÿ"Õ£ä\…>¨ ÷¸vyï :µ9À{)[\‡hˆ]p¸Ïàß™¿WGxÅýµ7ûú”r¼ÉW¢ØŠŸþ@ó°à¼Y—ÎæQËæIR´¥ûýE{l×Öˆ!B8Ìò˜Ž<že¸‰irf#&Sn[Ûf¾Ì—Üžó Àª†”çd’F‘yÛè‰ê·6ðd¿Ä,ƒ]T<««PŒCHïxLZûúgלRxÏþ¯dò0ô™¸SÄݲšìDê¤ÀØw3qx€ä¿^U€÷X5¼Ž›ð˜¹Å… ¹îUdz|Ï“¼˜¢ b4öi[J–'k/ü^9Öè2„D²cV!Cóg`-¸ãÐLJ—§­j+ɇbuø@~ã Ô!ùK§LׇY㫜/“¿œ"â0ýWߤ˜Ò¢²_Ñy©q@2Ï5ù9 ãû ©gšÎ#@¹e²Øb¶¡œPìYX°<Ôôƒ~õ¬QW ÓU®Š>y ïºaBó£—©v0m‚¦w°vù–÷ƒ-©°½h:óîÖ€`5. Ö­ -,'72þjrF :á*çîî/yöß²ð®Ã#C>˜R‘?òq <ÚæftöDq²¹‹`;îDnÚ•’è ºoÙ‚f ä(ã°Á¾Ò¼!Gâg“x/º°aRˆþwêOºÌ(˜^;òB}ÜÓ`Àø¶èVô‰ñ¡#Ëâ\lß«ˆÝ:%ºyļ‘*¡ôÙþ°óìqi±—ŸùEèØÁð=‚há¬Ö%¤òæ+AÅ®!ƒÞ-Å;ú×;ò/Ù™@eÕÖ×ÛþkÚ!è›ìŽýŖŸq;ÌŸ=“ÊFãiŠ»X Ý`Ê´#åhYnÐCtêשÿªÃnX±$;à­vãP{1(ñâc7Üm+BZÂ3*Ó¥y`’7WÞ=qŽÉÞ"†Ã€‡ i)/+»nlÄj çèÏcÝûtvæó¯Âøß‘E—¦º0Ó?Z…N–  nE¾V þç˜R>õeÀÏÉk$Êj„Z|ÙydZÒºNñ.[ýd…ÐN™Y@À¬LkÒâcâX+^Š~Ò¤]íµáeL7z"5‚É©ûhà‘Û¹à¡,äÜ0ªÁˆ†+vý—í2 Ñ5`KDtlwØ“·Å¼HÚ#s™kÀ@—¸¤ßTqa]Ë$¿Z™:a~0‚“ª ÙÊüd3ú%e Çi–×…g#Ð!¨°Ú¶ª–¦Ÿ)¯}hcÐ"Øh4¥;Þ \ø“bJÐ>JÐÿ2v _¶Ü ëáv4…„äz§úkäU0Uaúk 1_݃¹[õ¨"ç'½†2ºü5¥]ª:7ö½l|·6CÔGÈÁdZ‡ÖÑAöÞÈ+eõ¢N¾AÊø2¼i%Ò!gA¼®83EVâU§LÀ=G§í'µ®ížY‘æ†mØú\,^ÞÁ3êò0rúHAXè5*â"9Ù\Øo©XÂÓež£}a| ´=Ý‹òòWÍâñÉ€-!'.T‰ï7é7·Nn“½¶oʦ†¤Cëeœ0ÖÊMHz,‰h–­êi‚„C¿õ ÛÐã©ëLdiÚmºzénê…z_V#+ɳӽ¬ŒÏ­CáàîDx2@õá¸Ì½Âÿ±nºTaB.˜¯»FsT5F¡M›o”É­ß´T«’á@IŠ'¥Î4”ž^Ðö§¨s^_¬à!$%i&ÓjáÉ7æ¬-¦âã³sb9mõ¿ß)kl9I„­w(ˆ¼>Šö¢Œ)ÖYÛ{ ÙœÅSžš\eê[¼W <*ÇÅ°ïøØi8=·dmÎËø¶{ ‚Årw¥ëš¨eó^ºÚ–øßºô„çÊêð!MÌ0ЦIè „‡KŸ¸ÇŸ)£%Ñ0ÀC„W8‹—”Éǽ»ya¯˜N£.*ö±ºÏ©þF`‚ ]°G;Úä2’íkc¥­¦ôœIr%·CÇD}ðgÖÏÄI’=e; Ç14ç¹ÐëIÛ¥ÌËö«Lô´c`´r¾m«]ðlrB3[¯š/¨žÔuõù2œü<,ëœ{<Ï÷¯îç¾ Î¸Êò„ÑØJ¿é_ê͘dHPÑ©›2ÝïjœS€}¥¶›*â@4ÀiÍ«R÷á•î4fä(Ûž‹OQ {êèiX~±“Ý÷¦îþržPVá‚òê~¥ÕyCa¬#ÙlÆ&)C²Ÿ\| q¿œÄöcŒW¹1½;ë!­@½MúŸŠÀˆòdëj2‡m 9Ò(oÓ<QŒ­Ã+šÉÄ—¨´¯äU†Ën‡ © à(¸ι:¥»‘°é•¨½:œy׃ú…áA£,ÙwÿƒØ±%h­5)½²S3÷}sÿˆF|9è"éR¯“plØìØ©ðgù÷:¤?z í¶ä$…Ä„vö}Ðí¢Êê­µçð!×1­Ü+Åõ°‹<êú;Q.~Jþh„ˆ™îˆÄxL¡>¥¬3Ú*à:]³(Y( °]q”Œ½¤_]Iš}”7 :²*¨T`AfN°4f¸–‚©À픸`š^™qýýÏhKX©Ü{;XÜ…^9óhª•ȆF'9x&¯Â¿ü®ŸÇé¬ÉõÀ¿NÞæÌ@ØÛº&j3<“г¹QõLãM»&Uÿ9€ì¡„ Vèp*¹$DëÛéi˜ˆANq*ÏvëE]“Å´°hBàø¡§¹~ý ˜ä[ÌšãY¬4`ýfílŸØ‰ha:½Ñö§Až.Ñs~•š…ùÅ/ò8 š­âõ‡VMH ÅWêÕdwFPèƒl"z¹.¦óùò`œbž·ˆ‡ŽE¶ƒ)iáÄcSàêÛüAp-ì#R xµ•îgo¬xiòtÁ¤¯wUâñC@ë'ÝN—^…箯N†€íˆFC¥ì¥HÙGÐCƒÉ7$”ÎéÐpä:ÖQUÅ"¸çNÈ!ƒOœšLŸñJŠÒæü«J, ‚#x¡±B§ ‹&oó\•$„ÞhùÏ› ¡HÔ¨íÈb/@viÔ+3¨ÉÝÁ‘ˆ¦ÕÄ;1~ø_ŸÕþÉå̓ôpÀÿž¼bã§šD^ƒS)x(¦Ò©ÛD-z|ý®ü7#n ?IJôî­bðk}¯9SøFµ/Y LxÍt¥nê1wá‹éV®yøˆ±Ìl õÈ%,pž º"OºµÓ»<˜¶ 9óz£ÑI¾äÁÉ)Cë±3z)ho.Ä÷ 7p>sm‘Y³pÙX—ÁêÁE¸³¢Â~ðÕ·(¡‹ÇqmYˆ 0ì7CJ˜žw\»Ô³ß€{è0u­sëc5Ç.(‹_?‡YacG$E¸Ú<ïK«}kÎí€Aî9x>`R±ãMf|¼ÜÔ瘣N ·ÿ›ßGß`M@}g!Üd4¬Á-XNê=m,™maÁ4gï÷üȶ6yÿo>ÐZK‰ŒÙa(]¦p÷¹lgÄîÓj6¦LâFƒ¼¹"±5ÛŸè0 PO'ÌäŸï›º÷ ¹´û*n×Å¥f6ò…ט¤hF±F'ßòÕ ]6|',&{BFQÌò!Æc»Ê`R[[î`ì8ù'„:õo9<6sÈ:XÚˆ¸ &!;;HHðÉkϼ~£D©³û3bF”o²²H«4‘Q8›`ˆgàcZWËmN–ÆñœtSÌ’Ðsªuˆ°GÆ@&é±Ã¶X8 â}}̈¿? IÍýþ¤´ooŒ6súLT?ê²Ï±„ÇlÄGûVžxå¹l­ÀÿœhëcuÓÑe¹òfÀt[[1C¥‰¬ãOš=R:þ:¶»-cVu»Ñ ™2Uís 4HÝ„}Ö#ÎÖ%Gl›€WÇh|tjÑÈSVÿ”ïršìµ™ÇÖØl÷ÏÊP×H'ÔÄ#Â&È.Îý±l¢ïðx~ÉsUš€*Àü æÁ\Ë"¸/Z9~÷+V¡½£2(Âp[ÕÛj@¸µ|"ჃŸô álž¶s¸è°ÕTr‚S|Ú`ßÏK_I³ Áfm2â³_mY%.Ù§çÃXž‚íÖb¨– ë«ìeÉü=ÌŒ¸]‹O®KjBe=uslºáX¶¶3ÔMFtñGê²êC¸“Q9oñÏ#ÿju>³­”‹¢è.ÄuÓ‡ŽÑú• åbÈî{Lä“‘¬ìÈІK•ªuˬ€;"û™0xLÐÇ$ÇLGÿýúŽ” õ1yYá6ðñ}òÊuH€°¦Ÿä} 9.y£BÅô(qñ)’ñá1úG¸$»>þ˜è¡íæÆƒ¿6аÈO¹â<]Ѩ Õ$ë›×OÃéâŠ$f‡íøoN߬ï˜@ìe½üÁio>ÚÙKíÜ~=8ÈôE·ÈnøG/ @”´k¡fÏf WaîèÉ6Òµähn…fܬÑóí"IäþÝÌÅÔwŠð«ãÔm/…Ëèàƒ3Èf–Ä ’Ó-üÒLRÂNTÃDðÛ t€.ý×>Ë„¥¬ÞÕË~ϰ‘ÞÇV Ò •aµ'(kµ…˜tÕ¡!»]â“ÊÀP¶Óy«F¢#C·*Xdfp³SѸ EéÚDÅi¤–[O÷óúѫ̷V¿TtpW¹î—Í8!§ët^ñ·ŠYhúîVžÄ_ì–òsŸI­8b ¸ŒÇ-@§À"±té{·Þ%JŒ—yKƒºü_‹™Òƒ(W¥c9¸:_U˱~ÜZ`½EâD xÙñ \…Ô‚ñßDðŸ?[ƒ†;JÜéÿ£ëè„*tjHe>GÙÙ&âÖTÃkQ7±ØÂü³‡LÕ]²—X`™irM0}•ôžŽ¯1£4õ¿¥@þIþ ØÑÔ— ¨¨MDã¤6ÔìÁ45‚Ÿ ‹€Yä@mëæy‚úµxßI¬mÑd¼]ij¤\ U~z(_ éåÿR¦ƒˆRBD(÷òVI·E8Þ*•(†—]¸=ZoaÇõ íJ)žSd«ãáV"§&5ßë=ÌÉ<»}°ÛÈ‹{~÷Ä@ªÅ`Gm ŽGÅŽ`”ÀŠÒÄûWæå}û½šôàþt›¼Q …Å|®ÖÍ'f¬UÖdÑá/ú›® —Ì_¸àPç­*®$€ð³=úÛ2I’µ´ñmS¨«wN[Ìá_1é{e‘˜0=®±ê‡²–´3Oç~Æ£_BRž}Ú;Lm}nÏ–™>¹Ñ+³…: wQgU •4`Â-ïjëz`dF»mâ˜3¢×<Šiâ—­@ôˆ5Çehž_ž5öªêîQ!·‰^ò€\Ѹ¸ °¥QÞÏxßãDç-ŠæÿÑçl±‰¹@óÊf¤E€+ÞÉÍgÊ;ôÝdþÆßØÅ?nãc@õD,ÒOÙ?÷¯Ûõ—LD­bN€­ä$õëúC÷湯¥TX«zu+Bµjj]&Œ½'¥0CùFÑ/˜©³~¶_Êß/‚jÈØ›=f®­º;»o°)´:#%`SÀ†h•˱ÅݼE1å)õ/ÝEØí;ngqÑ„£Vxóø­+B¹Ð‚ËÇ _þqЕ)£|0Œøü£#‚ö¨mæ¼ýêÉ$*ì2X5)ø|q®©UÏÞš‰,`J ãÿ5{˜=éŠPa †.:u›[Šã‰P I‹¹-ƒàWÜV*‘kÆ£H“¢žë˜ËN„§.®ð¸*”ùª'ìÒ‹…ÇeLj”¬Ó»öj?{yF"…ôóºËÆ€ÝJ·¼a‚$ÇiU"ù«ë9T;«ÑƒãŠÌ2°åjĤ––ó¾Ë•3¤ú°yþ2µïý1KöPn™'Ð6‹Dri(+!O"Ýyec;ð±ÄÃBc/5|(9 òï×[A ‘Qü ìÉNÜ¡­„¾b•^H!K 6 .ƒÌ¦ƒfE¬sËŽKRá¨V À˜° é¼´aó4øJÑŒ¿²¤ç"¶÷.0ä&ÁåûÍ_d0sÁ뎄³©­í= %†ÉA‰>œX‹MÙ¯,#µ™‘ßi³p•€$•4‰{ݞВI©ñ“Utùvá!ø¡’â Œï§#J>8Ñ>¯ÿ+!I}‚F­;±7jü—xuˆ;*I‡×`þWwX*Ó*6P!Ù&…í48-p­±S;Û>G«ð?‹ c%•_ý5V‚fÄÃÇ$‘ØNgŽÀ žVôI£b²t¬h…ËPÖÓ¡dÐâò¨ý3FÔczä+÷½R%<~A18J:YäâŠ*2ÜÑÍAâÞ¯N{î ¾O«Qí’‹;Q¼›¿ºo·¨×°½EH€eZrØ&–õðú¾xˉ;GGëÛìe´J½”eÀ™¦œæ¸U7Üóm º_½Z|sîÇ*Ö@ÎÄ$ÓoPÔ’úA“%[ËF=<à¶>ŒxøbË0ÕA`çÐåhï%°6M“.ÍX¥×gÔMBÄ0¦WžŠn8Á¨}E ï1G43èi©}z­ïHäùÓñ[¶¦ËæZõ`Ò¾¶-^ã2˜Î«’ñ@y÷E¿zmÖÀjѦÿò$ª)±n•fÛ^Þ B)½,‡)q qLH¤ég¥9q‡­<À‘>Y†÷BR¸[¤ºhé…Zqüûx¯ëܤ…ÎK!iÏí³Lû±J%‘Aäúî}ÍfÝzrÉúè¯Òw#pC¸‡™6× .•³®•‘í’"Ü «!ÙAlg È'-¶°C *é‚YIü¨·FR"ܱÅRuÕ_ý¤çÛVªãI›ËêzÈÂL3 å9Ÿ ´xÜL«Q ­pÓ“-r‹/µÝ,H¼~‘Ë>Q“Ä£wÕÉÚ¼GF¶±I&vžnÑNd´'Õ^ñ‘ÂÊ{áßTZõ5Olÿ…·à¼&núвWKîqNÀ”I¸ÁúULvIu`ÄH•üJcFD+õ™ïQ¹¢™Iiô”¢¾H_¢v#nSC¨ø~èÙ¨JÊK2ÁÀy³ oÝì0 j"zŠRý;ö¡Ö; ·š•ýâl"Kb€k®¨Š1™”—ï±ÝÊ*r]w"LøößñPÏ"m{] @ ­Ä¹çƤ0®pÝõ³Ä;`­%uÜ@FÍNc > ‹}ùuÛ#È÷‡¨L‰¬Ò»Á¼ú¸” a1)§áGJ¥ì£HÅ™ULc ¤8 ž|Èèz+rm”„®^w™ÓÅYZƒ„F‘ðªî–ñªÕÓ¢?—$@nž4¦»HX´|*ƒ N¡œ`ÅžŽ ’fõú‰ïÈF%¼]Fv%@Q‹xˆÖÉÿÈý1™Ðµeîz‰h’‘ ?Ç׿Š!sjqu¤œ@»ûŒiB€˜Ñœé¸ ü{ëÒº·ŠÞO†ôËr-N¤ìÓÝî¹O©jÛ³UvR!#«è._c^…¤[µÂ«)}Š^DµÍ¹* 1lŽÛCÁ­JGÎÂ%&?.¢àƒ½JKoa;ʦ œaª¸xüdø§;Gõ-B†å@‡5š—ÈNáÜÒÊ+'áÛg³ JVs BþÓÓ;~rQØrwŽÞöEN ä¼ò¤U?…oå@´´÷£!cÎ"¡߆ޠoXB,hÁµ²p'Cb{ÉWa+ßK?àI™Þ)JúFõ&õÿÈa¸ ?¡ŒœÃ*Á©gˆn`d®Óˆ±›–ŽˆH|ïËúµoõcÙ@)ïË€l&4ŽáåêÅh$Į̈¢Ãõ_þ…N·™Û¯b…P%ú‡7Mé2‚WAhˆ{¿k››i¢Ì­JMpŽªdA)3AXéóÙÙÄ”¸ÿ"ƒ·¸ã³Pc¸$j>ŒR¢Äh‰ÛžIÒK'<Öÿ!¶[.EX´ö[VùcZèXŸç®m›˜dmD¶•4)ôlâ€îÞÞÄ‹—Ԯ󩯢xƒôù¶žçíþD$ú+LàÑFø9!õ½8™J,#7DŽhšhà>¶Aì:&YÐCWë ²¢"¨œ”öÒÝ3iArRÎï õý!n³"8¨D\Gþ^ßiN°Í*%f4ÕŒ7ÞhÓÓŸ.MÅßÍû>½¾Àd-~é étÙО‰UÍNw\1(" FV)=ùý½l¯ûôáƒ@ùÿK«¼8ážóð‚N.H‚¥ ËÈ ÞÞ-·Tmgl°t/$ n5†[$«Ž¬ÿØ<'$<¸¼Ü`;¥JÐë3îX½ -„•L5NŸI°B:õý[ÎÈ{5‹^Æ<;õq‡ß‘â®V‘Љ;hˆÎ#, o¥õ•p(`×Í›ûDö¥ ^£–;¥O íEöHF¦ò%x HóÅ ÷m*+5ô ÀÅO©›©/ØËã„°øbÒ1:á@¾,gÞ¤|uݨ½…£(%¬Š4¾±À§ ‘;NÈ'²'#s®Û5sºŒt‘ë8ÛžM]ÕÒ‡ÑÌ36Ù‰¸‹A77øOfZ÷CÎy†Ó.%`¨5í;ß¹1&F÷`€â~À³PâÞI½ï=7Â¥ÀÃÁ€nBéÚ®ÿ@¨Z„ñv9ñ®”==¨œ%Ý$ëøs‹&Ìßr©Ÿùè áZ‡õc8!Œ‘#Eëi˜RFžvÕÑKÓýSEn¸¡Ø1îC>vFzq.7ÊçÇ×wЧ)¡3xRg„iýQ\é¶\tçrû œÏÐ>“ˆÓQ#¯«¢±œ² ñl±B­ml{ÏfÁæØ}~Ö= iØ6m $emH—I ÿR3uÆ|y|yéQüh;·½‰¨ Í¡I¬?M|€ldù¦g~“Ñêš¿H)&AÆZŠÏS<1¢n"|QÌwò¡Æð±¥@«€Ás¥7¯#å%™ï€¼XN¡J„ʰ ²Lž:x ƒÙª ·¾Á}<8yúëF¥ß:&‡ME/ó<Ép·¨Ä zŸ:ùcFõ\°ýG[Âå‡XŸT‚?uÓ¢ò†'n¯£Ûà D{=Ú4^JÃÊÑȾîš$4þÈ3ÊàÝмå©Dl‰j’×Ï)ùÊMY£ËºWZ(¹.>¶™f+@i÷‡ì–ªú߸hPÇÉ£ 0AÙÍ&dP°i„¤t¨ª>Â’|ëÄøüÕÖp¢6 VfáµzÿÄÿѺ‘L»Êå—C|kJɤXl@²Œ÷-¡æÆØšŸII«)P#œU X]ê|–åPv˜ú:å{*.ö-Œ-¨ÌŒ2l•2©iÈ.írhv+/F ÏçÛ£SŒÁ1zWɆfKÅv xi¸ê´ ÔÙ ân ÝcpÔy)¾~„T’÷avAÀçíÚ„+$Í-ÑòÊm¢W7›ÿ)ù´+ĵÐH¡ò kú< ;g¼¬üËÄÔßí2­ ÷)–ýâð²€];øH>©x1c§}ŠTÃãŽ-L®ƒ*`­YA6¯‡~à$ W±iUÑZx!H¶Áã^­³+mp $¥‰7¾1Å+“±£…„_sÂBõ¢n‹LTþ4¶~ ¦Í]S‚ô¨†4$Í›Þí¸vÙ¥ï²1Ò}¯^‰$Nþ§Z•È‚æò*éúb·…0}\n…³-i}ª<’ƒ´òpëöý…KDí„Ì”Öå̧´Mʆ\}Ðò(A›Ïþä—>=ë‘Ê/fE%ÃjFDWîá MvïÕÃDÊ:Žc‹¢á¾ËÞèr0·m¦-ÆœXçš¾79'£Ârùb…Ѷ>^¿-3RÀ8§SG_ˆ+â­yë*Ê÷§–*ʼnȯò.jN+*~!… Àè'Ú>y»2.PóàþÓ$Ná;{©‘2ž\ip“›<)ta:/§Le¥ ”Øíø½¹©V±‘Ðu…ÜçÒ:~w""1Î`ãþPKà%Î%λ/@ˆÍí…KxiídБ0ú™†'¤Ú抰´¹"¨qëktÌ™HˆVØ~?ð©ÒÍSœËËLË"0ñd t”o7!¿H…ûb}%.Qø€~Ü0Ú¹3â%ØG_ hÉt÷¯%Ä*ék†gö•ɽ7oJ~‘Ž6·r(®F4ú–cŒB¨Š„?4óÊË´ß õ¯LE*ð¸9ZßEÓ¡·:´'†Þ-ÁǧÁkèÁN¾î@Q÷žYUG¸ ÅùL3CƒOicQ+ ‚ÅrjXt¸‚@Bñ÷ɇ²«ëWÿ:–CŠƒ:ZÖjÿ7¯5t³GÊTÍϪ°5†ÔÜRÒd*¯èâ¸Ý\?kppY Õz–€V 9Ô®pßyH8 Öy ²¿^[¸…L~#”Kcü×Ñ+SY1NÔ™úk–nßXáZOÇÎ&þCÍ;_ÐXîCUÀ¿N² úþf’ÍÅöì:•‘;ÀÇ^% 9qþFºh7¶uÏqÈÝÚ±´ö#ãÆ…©Gªe•â7h >Zd±Ì^CRm€ú$ÀôÂÄ0’%pžNÚ+Z¸Áw6Ï(¾[¯–ÖC­©©ò^Näݰk!?•ÉQ%S´ }míH¹7ð¼éxf¢×’¯zT7cX>I .éÝÛ1÷¸ÃðI‰¸;ÉÌI…Hw–¹fÓ!;“1þ­OÉ tùÿ'Gž'jB,r Q`wç{÷Ï>;é_h´bæîmkbà®´x9jøÓdÅ5ß|ƒ÷kÌBœ9íNú5C4si±ÆRU°Êu*Kú{½;|ÄFšUÁDæïO²&碒‚N&Ù غôŽÉÞ’Å>Æ;0«ƒËê±RD.Xo§ö¨$w Ýž^é.u§ò¢`el;k0-gþfAß÷ ÁšØŒ01|é 4‹ÓÛ;"ö2Ü>ß3¦=Üã¶²Ú.&ã‰d]i‘À\Js²„ò5\Q¤ñ‰Ã[‚R¬ì‡È±ßÚŸ[s§¼gû¶r:Ç2ÌñWÜód±Þ']•a9J“}6 ù°÷¬@«íË£ë0mÆŠI‚ïrHßäzܤ’Úh@Ýåñ¬ñ{9îòSzÜ> ËËþT%?Ÿ@´µÓ””Ã3&Ú ì+„¤a ¡!k£Åôøx×Üßï1= /‚©N%ë(ƒ]²Û»›Ôú¡W™ižbå'¼oÓÑÖWÙê ~þ¢³Kתdž3vcU&¿Î ’°(E|$õR`ÏMÉ(ø[r¹ØÇÂ&ÀÐG*ó H¿ßžØ»lÎð 7CøHƒBµÍÊ÷bØÁÉ¶ÙØ×¢±Y åZú-–À¿v2„…œQ²÷Üvõ°wrQAºLâ‚KSݯ+Û„ñ«uW”' (ŽÀCô™ÓõRA÷ö‚Ow.Æçºˆ– Ý;».q4+F^ äZÐÔ°3]¥ÆÑQ+ÍÐ$eÊÜ€"Þù¨Á¼•°fp¾bhV]Š…VÍN¿™rìê<¥Ì÷Ii,Ü bÚH¦?K•yû¸¥ÿáP·pœû˜é㑇7+}ûü.æR@È¥ðìp¶ÿòгXHè'çÔ¹±G Rìä§üY©‘Ï8?±¤c™=“!Ó„¥’}ªv`±×aùø­âÚ3²A’R1Zª, 7êÓ<©É汜mqD84.$÷߼̪À9‹Ÿ5sH”KF›ÐIhã1Š¸ÂŸoôaN"–ù*Ǻ›§gÜ#‘ì°EjžG bL,Š€²¹,È ¾ª‡j:¢NEvœ )Ȳ|iŸ+O2»û5oM"NÇð:Ô“Ø@ï²xj°åDéã;IŸÏÕß›À[¯C¬ÛìâÒ+ø·ßùä`ï||1J9”ÈÙ)|¹¹0]j1ó`§õ—ÆTè0b":gžáÓ‚L€y¡ûm¬Âð+þÔ.îh-¾€lãaƒ(^ä·¬›†­;}ÑŸÄóv²pvÄê¹i®þ¸œ# ~ÇÌbZÛ`Ï2É Å4PÚLIVXîß–}½{VÒ?.z°DÏæÐB^3 omÔ= ò↯P ¦^m]LÜkÊÙb"¿†Ô7¹$=P<§;G”T£(Ô¼«©ßM Ó…QðR1š°8^#wýñ1|Å̘U!ˆQÝ´0Ý'br+€†Í”úrLtИҽìˆ:°c/Oü£f¥ÇðÓlD‰ ¾½A¼—¼hßÿ7“S˜Â°Éf’Åd°½@”t ÌøïöUjéù‹“õ­ œà¾*¡œÏIPÜÄOê¬ÍIÔ{c S–ôoÿB ©PÅ)„ù!µ`•²iålÈ|·ç¾óˆ©Ä݄ڀÖï·¬nµ½ÂB½;`˹tâþeYÓ,-GÍz~­Ð›³…Ò…E4ƒ€ÑIÊñ`_¢öÇb3zúWé%–¤ï7"U¸Þj{’ÍÞí-E¿¢ò[vh¥¥£SDØd›è̵]úyÙÄK¤%I¾Á/¿™6zà3D«¯Û¿C%`y6ø¶zXù[Ÿ{<…¸(ÆfÌ\ëjœ½PÏßö‡UOâ "ýÓ f{ßgñ8™ô®ÒívµË#Ûn8£Aãù:¸¿¢9ÜXÝš.‰®M¸___a“ì ¼® å$rû¤ºÉž}–" Öqö[mVÍ帑T¹ os»œ‡ôt¥2=<‰•U°@ó:’œn»B\#ÎÌ¢]Íc c·kV.õBÑ4ÒF±&CЇÚ∉!xóë©ð¸ H‰ô1¬<Ƨ¬á70_ЉÆÌ.£ßXEpzòt·³éÎX³~ê¼ÿŠ)køgYØÐg4עΨÓ'gH @6ÁjÈ­¥ïö2ï8Õ<’áݨ åü*DÝÚÇ—tì ]õûš¤\6ù\fc0ë?¯pÖB‰!"ÆLx?Ò •£±oµ@í„æS¿RB”¼/:ñìJ‘ÜD k.f¨…Ðî}öüo?z·kÏž½(‹d)s“Ììð‰KEØs/·ŒGÖ†J}Þ+}”œänkpÉ U>.´Ýö-rÔ û Â\2ìs}d÷cï ª„îJÉy¼"lÜÌš^#ñX$GÆ‘w¼Ë…r©z~¨±Z<æ’)^ñj.Ã!nT¾&øðGå~‘r_Á˜ÿsä֔нzyA÷†îÁÅ<œá Í |»@=uïùü]”<²¦p‚ä=â†î';âïyé©z߯3ï O™¯*H¢ï©Ùî†kœ+ðcôN;ïVEÖðdðN )@Ø›áonÀˆ ê}Óiè.§½ÜüÅÕñàÖËW³× S¡l Tïv¤a,OÃ[2±¥«pÉR·²%Á9?e)ä ¤ÿ}¯SR,QMÔ°ï×®>³Ì4‘òˆd]:Ôöâ»33y »·ã^æ&W‘üìqçS¾;!Æ"C`’"©Ýy²ö=xùq²¶ñµX†€I{¹5ˆ$n+;)ˆ yx¥7ïÔº3lò)r Q“£Ïbuí‘á„™2¾»dkn °D…MË_¸†ú>Øk8ØÛ¢µÉWjff„sPbôÛçœÈ BL²è•mÉåÄ|<£0"ÇÔÃŽÅ 4uW Ë‘0ÞþÍde»Ðô9‰òð*¨¸ëÈw¨cÈi‡ÞòUX< ýiŠŒo_ëÌPʸðG2f Õ›lžŸ}¡õAEðk³·*Ø„]zAµ}æ®"?ë]r«~ý €^ñ`söÆ=ÒD'°pœÝ}ŒÍr¸Ó,É-×yži¬šr:ìu¶j¡Øž€–/¡ýx e®… ˜_ÄÜ9à¤^:ÌS ‡~ZÑœ"TÐSÊ$Óg͆“3öýï€ß[æäïý¿KD¡gé~jô½ïù¼79tLü´¾WJ+]ÃÃûWýïÀ¼>4.ws{DŒMM$mÌÈœìîCâ(üNcrx¬HWØ´5Y™Ò˜´AyäFÓkÊ]ðýøO#J`\¼¹5Fß]G°¶4Ñ{¬:UuÑ| \-zN¨ˆV{¼ïÏŒ~ hØ'l™Gî’p–œ(7ÊGòOßý÷’cÿg1ðkë)B"Iú{(•À‚©wi¬Ê>ˆ™%å||=H=³kí“XOúbltR±gLÛp¸æxà¸Hƒ,¯3·ï6U–¯½#H§‘5¾£É¥çÒ<°öÈRrÀ¸8×êRóòÕ]é)=t·Û(¿bÀ0G+Rñõ9›¬ŸÒÂ6ÙnSß Ó0¿ÒMêd0SwÆŽ)>6´ñ=Æ…ëϱUŽ€Ó9ôå]0Ö«Ü,ÝXÐf¡P,“4°ò‰³ÙëÚ&œN÷dM‹‰Xë'ò,£ C25u ’ŠŸ×ç0÷­Ïئ­.=•BïOpS÷G¶ìž0ÃÅ»Q T£Ϲ© ÉðäC8oqQ§Á Îb_ cÖáùÀÓw³ÝЇ åå»l¸árE\ùaØCÜ^ãvé­ïK>S(§3Ãä üà®R;‰¸ëW_ëÑ;N:eH÷¼£é4ÔgË­pf…Á†™ºÜˆð_Žd.”u@nY%æ•ûìl6 `‘#—Âdv\ß>U¥pvÍZ¨”^a’jû…$ÍMÙÓ“mìÑGŽeGÌ¿6°‡Œøè³÷5È2þöìj'Fð_€üöî#0MÓ …7­dÄ÷ôj 9ŽÛG¤ýîl¶ï8kG;Ëô+Ï[Ø~¡‰ oÔtáޤ¬¤¼xà%2´Îx;rðš1×ÔF@ÎSÀñu6P&•‹_rZµä©_½Ì|c+wIð rê5 'x’ýq×íwÅƧ¢ãY€Å©Ý£»ðg$àÁæüC÷A¹Þ(å7êÓú¯ûÐ l»Øq!å°ˆÁLj~î7.…Q#ìuƒWY»È©ÞzˆJ§Â5Z¯O;ÔÄSlÆ8]hÃGVê¹ë'B°9DíYöZo¨ÍÑÎ2úYû~q·9j¬ª‹=\¹Ç°3,VP—ÖúÜ,áᤚ¯¢j~ÇÌȶ˜:Ñd)ðÉ3kGð_ýÞUܸfjÛ—YÝQîæ'¤é,]^&•}bs³.ùWѬ0¸1ïãw|«ÿûSD Ñø“«í*EO@jÓn?­¬pâï“ý*ò¬ó/uŠ¥Þ[ït§… • ¼ðÈrmEšúççtŸHšaDÉù–zðÏ5/ñm“ËçyçÄ‹33冸x­ÝE—Ä3»³ZΠɨn6«ÄÄË›Cjvä}ƒÏ(œ}£ý".Àå-0à„¶N FšŠb@A~ðÃå"d"Ô¹®é¥‹ÔYî°ñÖ2ÒÙª·€ÄΕ99߇íŽf®íÒZÏ9{iÛ A8‡Ë¬¸#£²bì ,WÒ× « c«œ°ùøu¼†*ceÁBBP1óý¢­¼7KjYüþê5BD‰×ÓÆˆ B¸cǦf™æÆƒ½5¶eÌ4ÀC#[¨iEtsÈÌÞ[ÔPkÿØgßEäB&&Žªihêj2Ÿ:E#0 ¯èVó˜çCAŽ|/l.ú3ÓNéPl¬FlEoR•(À¼æU¤¸åyªÏµ•A^7îõÿýb\cØ™ÙÔ-Æó¿šW«lòq=k0g‡Aíab>e6Ìk^¿(½:{ÖPAÇDg”'w90À‡BÚ$Hó•%$3üì¶>WXÑÆï‹ÿΪTp1§.°;¡ ½fC|ò ^†ÿ«ÞT X]ͶŒm+˜åµËÍ;ºiEnKD£bŽC`ºrA: þ{¬—¸Ólh(Ìš»¿žnAH¯Æ%Ð=^-_ ×A2¡ÈËo}–";0 åÛºŠ)a¢¾À^Ù²,%ãñë]YK‚ê,;é¾áäár çƒò4ÙÅ\ÀÁ}…“99®ŸÛz×<·=yTèˆ[¥€Xô˜¶DÝ=¥%J‚‘tzðy)÷ûD² ž–FÇ'ð?º $Qׯ 4Þ·ßâ~^v#óÕcõ½+y>/U—QSÆ\Žœ ˆ,zz•n ¨ÃâÈ8€¸bcŸ!&ÌüÞ@jRKr' XCRÍ,hŽs¨†Ùijçu¸O´<7¿´¥°Õ[Bî™m"Ú*Â4\T¤ŽX´VäìHK´¸ž4?ìoªÔkÂnüÖéx!²½ü8KS—m¬¯ýë(+ ÿŽ2ù——ðņó1éâž½Ü<ÍG hÜ´Ný¢k{IQAx-uÊÒ½‰ÕÔùIV¸Fh“{!ŽUJvKjŽõ|À#ÿ lËWk_…d¿,ÇY¨ë‰Ù] ÞÒQÔÄ-Á!@æ>Åef²¯˜os@ýHµ•WL϶ñr3àÙÕˆ›wúU¶DàžÖ3šÈ”)ØÜ‚’òwËžø¶ÎHC;ºßH-¾/ø?{Ä»·Å Ž/¥IH‹.p!^[vzKT^ªFIæ}ãWo®µèÚ®Q¹›ÁOjúc\¶—Mm¥{‹ÁöÒ€&ý0#ÒiÉ´Õó؜Èa•ÔݤÙËgtA˜{t´øCÔq—QÎÚñÛ¡ë¾÷"/{3€Ì¯Iàj’iJ= W \q%Û  9•ÇlZúUãkH€ªͰ¡K,3à5>ór“,ç†Í„3éßn·ö¯ø‹GÕ¢kÚ’l\MB¢§Ìù cÀsC!ÞúYø$˜§yƒ„² TÜ›éŠQ†¤ññN$Ü\EpE]ë`9?8²’3áQÁCA„®Szœƒf‚Š<7z½§)û8©KHX ãhµqš¾jeÖdr=Lè.7{°t3~:—‡zZ¾¦m÷ÈUÖ’†-À¯Ó¯m{‡ÄÀ…»}k§ žÔxw >äT»ÀIxýœHh‹Î¤óÝÛvqSëj£tŠ9Kp{ÂNº.+\5Ô½¸ê‚ᢳ~Õl#6¡v²ÓH}ÒÑÿ\@OIÁÔ*":ŒN~€–I¨/¨]¶)漋êô›9ì§øøòý?‡°BEE}×86~íq;>³b;qt‘Z³ö]E†¾ý¡—eOkGYŸé<3æ·äj7mÊ4•¾\ÖÝ'1Ô²3Ã?0÷a!¿Ò#FþÄä&ï1ÄÑÙÐyìÁù€u\–T¬g#жiB c™yúˆ@é ©óSI0aîh[ËRxëÆÏŒAœr#Žd®‘:ÊoϤƒdšÊýÔyø‚Å jöñ”I•Åoz‡Oý'q‹¾kÁÄÞ-ÕPfCI˜‘º@Òª)ÏV±änåAþzyP¿6fø›ž|‰Ô´wóSö,êW5À9ÿOê⾪'’L76W 0£BÜ#$‚ùË?í½‰BŸ&gÄL÷¿«Õ›@ÛLR5©ÒÃËÁ[þ·‹uó“Ö;€Úæ†} ¦d(²y‰¶©Äæ²ú”òy~¿tV|–vÝt¦Ú¦|C]®!ROº¤: }j$¿Ñ/®½÷áýÔÀ-þÁ;e“ÔÄJ¢ð£ïIP†ßÍ<Óžy³D¹µõ •˜øõ-¨'x>æ{6ôKmÚçAóŒVý•.„ º¡=€iO¼žƒ‹oI¼a §à¶uœQg^áAiÝäF `Œ—°øTÏoòQ_»þz)•PîXÖP6ÃMððC—MVÈu?ßpKÞ…ì[x¿¥FØ.”Qé!ͦµêBâ­@›3z1 Yõ…ÿß!µ´>šRl-¿_[bÝŠ‚OÑkœ¡ÖCh!«S½øöI}ld˜ØÆ›-˜.Âè!¹DâÉíb`x•}E?05ð‡IaÜÊò«Â uä­Å„}†qøÉæ³±‚´§¢š%Òÿ§WeWX]@ý »ÓÀx°ÅŸz¶ä?ÒŒOºj¥ñÃèlIªZÌ”Ò̹ªi¯·‘1È‚y¢~W™+`. ÒþöžeX›qña§,wVƒ„Bž{*l¾„ V¿‘ÈáFZE]-Ñãòx÷χ{ÖÒ›eŒ4 ïª÷<ƒ ¾ÊÄŠ¦Vªìú•c#ˆŸÈ!É;~h\14’õH*ö-¾ ŸÅ'ûZ„˜ãZ9L0Xçß#™02ÁÎê;Ž£÷Qª†Ò'd«aYàÇp5SëKådFZ,¶=¾w?@†sA!ÞZÓ…µ¤Y!@€¹§¾× Ê'^¾¼€I@b;kÁƒZlUïÕK²|Ùš'4£ÚÒ¨]¡(SÅŒ"Ð㡟­Ü¨ E!ûYB¹®|ûÂjµ)”jl}+zj?#£ŠxÛ;ÎN¦¢µw€à>B£›ÍmVшçYmoô|¾ôT^!r¯M^€ü4>s&gþ >Ø2‚ÀüY øç%¨icΔ:„ÄÌ~Ž$\DHH©Xù“XÞ¢O[¼” t—^‰BÔ*Ô"+p’ëÊ•RûÄJh€,åY–Û N†£ÞŸë\q†JŸmhJôÕÎP6Ff2°18GéËœJÙˆËC&†§=Ø¿-S~b˜¡ÅµBò—“ˆø+UC8Î$]À/QêHçý û™yIÔeDv›¤…K*ÛŒú¡bËþ,êGÆM^®›ÏRŸN+›ã¾²ôØã($Îr·G '÷1î¿×=ŸÞBᜬLå1M'Y< ŽâmºŒ‡¯ýIgÑ©\¯äÌbêa¤  ÂϰJ;­±çäâÚM×úb>fPÀÙ— ðòS²­‹ ›$¥ÍdRK£ÝJÁ>-VÂv;º±Çüí¨ ê=ÁûºÙLç‡3;ŸÛ–Ä—Ð @r±_Ä=G¶Cj]|±«n?cAÇÒŸ_üRýP°Ò=°œ°“¦ ‹/.…ÿËÊð¸µ^UsÚºó¬;b˜<v§±:Yýoxï:}R« 2u:Çë´ÿ°IA€²p¢a´v@Ï‹bÚÿ¡GYt`˜kSvd»5é‹4÷¼¬³?qðœ«Äç}ð…®ü ×´ ÛV>QköÕU¤ž’,¸ÿ6^èÆ(Á$Mää­ª-øU>êÝ´áBÛá d3=áV‰ÏlV&†‚  ïhAü0BfßW¢;\«JëÛ÷Æv¹ÄÃq‰o(¯€=¢ ,Nv¶¦-¸’6ãŸÊ¥½ÄNi/™5úÏ?Ðß<àœhM'ûG+E¾øªKi~Ž¡ÑíFõü ÷¸;¦H1AÖø>UE#Û:°!ˆw wª\7“SvåûhœXf,7zL“šTaÊ•XÆèñè”®+OùJ£eÙEÎUz«çq$õz˜´<úa¶Ñì;Wú*gøAè^ÁÖ´…dâ_®´ú&¹È‘HºãÈ©\ëb¢"· žT•m¼g¾&N½±4^ÛÐÝKÛhï¿oS¬8©xur¥©à$>¾X\¢°p„$}¿§Ân¬;Ô–œÃ–Í ÷†ùS~c/‡ðŸxûãå9¡ŠïSsŠ’OP“8ÀѸ)ÚÀkD%‹å\øŽ ‘Cíý÷¹âøN‹ç©neKûlÓ4O£L8„Ê—×ÝÒ*³U…q*ÃØQãl^Ÿª¥€5¤¦ã· ?׫"3…+»ÏÚ?Æ¿à8ÓÙÆ&YVÆâž[ž1£ÛR¦õ^b   «Vï{öD‹à§eºnÌ÷Ó 6Hcf¯J‡-´ ‹È`wd畺ö-éð·,«°!¹¦”8ù5ª ‚ƒç‡nþáÕ@/’µupÓU¡ê ½É«gعô››áIúøÍ‚û.6F?ö÷rùF1p)À…O»@¹BÒÀ‹Á Å+É<’j'ûqŽ¢cûšk3W}¦­H"™|1ÙC‚Z%,ßPsZ—ºÜ/Ö"(†N»è!T•J=l1¯ól{êì·œ§í“Æ-šw²Uëµ%¥V…=À’¡ÖŽïõ6QÉLbÈ?f·´Šò¹ lô”"àeX—¡n´­Â”©~4 þ¸Æ_ÅõN.i&™Eq¹Û“tàÿs¾G?Rš¬+‚:Ukés~õ·þ*Úþ+aåxKÁ>~êý¼E°X¤c3¡¿€¼,T6¡tÜ 9¯ýûÞ”9múV°³ ýå[¿;¢÷É€È)*òîMÄå5|‰æ½Ë€¿‡¿í±¡×£±Û˜!Œ<óÚßç%ûkŸ%œÿ™·½lKGˆjÙU1X¡2ù)¨ÑY¤¾m^D‰ÛJ{}*˜È@Óºá>Y*‘Ô)_Âå& ¥Äç1n¸äÁGÅBàJ£’¢Àç:O£{0cóS ÜöµîõV¾Qî|'3~)<5ïläàcßÍÛæA–+Ê#›ìG»ì”öêR?7ÐWb¤ ñ&:]ÎM±Ócÿbã¯ÄNòqRû5r:žv´Vï‘ÌrL`®éIã~ÔŠ™…>«ŽKÔ×ï\Qù¢véøº°tº°]³Bz-¥¹Ï¿§ã¥>„˜V‡Q7ŽP6•å÷$QšlR­Ž{q9A4èl}@“Cø w|©ùf¢†Í’°áã¤íîþž(9¹¥BX¸À×°ï|U —&“ÇöX€sB¸¹¬èÁ2S=á '’-زܺ\±)´)ëóp‹31Äó$æld„yx¾–,*4c©ŸBk¿ ª/-·3®»”zefÆàúØÌÕlÂìk¢,Þè¨]}+¨ÙLxÍaA¹7AÈïøª!ûÿì§\t¬«a±ËÌS"n¿»\•¤k‡Å†¤ ªI6)!³霘™=ù‡Žöi€hó=Se ”KÓ´Ñ|‚ˆÊyä¬ÈßP±¹‡°·¹!N^ß|OSõÿ€ú»eVl•ëµL‚ ˆÀÜé¥4‡ÈÍÿÈm¢Ã‘K2Áãøð¯èXÑ’v!:Ï'¾± ¨ 'N¾úÐÉ\¸dê9±rq0]”ŠIO0nx)Ó¯_¡Ì8I13kZŠ _œ@Ò°­!âô~ú¯Äœ_“,ù§[mïÆÝή oƒceO_ƒgP´]¹û-=7—pu«H~ÞU—޶Eô¡{œ4‘'÷éoÏ-Íc÷RŽÕ®µZz˜Cæ| ôôÖÖŠm*Q„®¶imŒY0Ö!…ᬄÔ;'£÷_Ce%›ƒCñçÒ‚ÌŒ°gR%Z³¥L“­=ÙC¯ž ëY ކˆ\rŸ‰Ì6å…XxsRv|:€¤N¼ àÏ9M†ÑBÎLޏvä—Àn‘s3ÚJÄøy?I“üHåÜ)ðÖäP…˜GÈ«fTJ<뇿ƒÔh¢1ª›Ô¹“E™Tâè‹Õщݛ'^þ]¢ž×†hU¦®¬]ï¼Z7PÞ§xTØ| äc!ýMùDǾèôÜû?Äî1ñ—nçVú˜ÚA/‡ôe%í(Œj©Ò9«…¨´;ªí¢rOI#F®¸+ÑÞ_.¼šÃäIïÈÀÐ0÷.ùÕTçȧ÷P‘AÌî+g¯œÞÓ§XÀÛ#*©ºðn«ìùˆþ: YœO‡Ä[ã‚qÆt¼pÿòršá&}C®²îÔú-±=DB†æt°ÇÍó Çä†z\§õúëŸ& Hˆ7ù„I?[¬lN}µ±Hv¥ÂPÚiWzÒ¨tàý*1?à߯…8àÇQ¡Ët$/Ø`ˆ¯‚7'I_<õHÖ3Q(r¡xÖ°´CGR©_·¶@¿£:¬§f=ÜøÄWÑᆌc1• ïÝŒO©º°t¨eÿƒrV½‰€-;%ÉžU»Ï¶&'Ì> £J@k¨‰ ²= 6h”ƒ%Ö¤ˆa ð°G©‘anx^>4ÁÝË»aòIÞn_«¸hRä¸%í|FLËÚÌ’Yç…£Ðx¨ˆÇXULïd€êoA”è^@Ë™Ô a‰"ñø©nJóN/ëŠ.9u^lrlò•îüóø›u}£­þîÓQ¾÷h­Éác¼_ù z´NŽdÍÞÅV· -¬”˜eQt¾««ü~^Å‘ý†u¬Î©A^qZG¥ÚìOD{èq¿jü«:ý„MÕqðÏS5mÊ|ôQPóP™0cÅGĤ‚(›-Ÿ”ð2ß“mr1ŽaY4ņèì ÒKÛ :tâÕ$f½EÒ¾A1Õ<½+ž2/êÒ—ò ÉÊ" 8ŠŽø*Mù§Éã „€È8æ&›,bâ®Rj*ë"ÈCЭŒ5qŠ:, ³×£~§¿ùÄq#“%W¹$—dIÇ$kö”QPnáC)æ$l£XN äŒdå]ÿ‚T˜æ{#qéE`ÌÁE3óò[£ŒçÛ}Ÿ¶-C#¦´{/œ”mA5FYÙ$ Ç=—ßwZ :V+‚W)«ÛFüÓoCwèHè†øñC+~Óìú2CZ~P]½XºtùYíÝF5˜ÐNj¶›ˆƒA:•êö„§SyÜ•3›!ª½5a’¨@_ˆ^5Øâ6É Q{^)kœ…Rwú@Û‡¬nÿæ{âPB­æÃš²<+ñ¶ØyálžL31è=§1K!˜–e÷xv„«uö¿—³e¯î³‘GÅӿХs›½‰ÿ|’ªu¦– \˜šbvXÜŸa½öùß‚– ˜æm¡~}@:Tbév1V¡äÕ† U°÷À{OÌ/×ÞÖª.ïCz»º;k,vŠ&îéK|J1Žy˜–Y}²ã‘~½e´éI¦oc©ô®  _6¨ªæs]-¹¹pÚÍÐá‰X,öýDÃ^In7ÑPš³Z•mÙ¨ÛUcB}w÷“§*s'¨ë»Y‘âäTe±Áj ‹ÛɲF$NT¸¶úô¤õœr×a\“HlŸxK7Ô4 O¨ºÈaö‚¹lm«ýáû0346²dÄí¡œÀG±ïV´ É.OtÀáÀ¢í¨ ð­…Kõ¢ó{^ÿ¶Æ=!Œ_oá%ý§v¡ÎVµµnT­"7A]ÿ²?¼ïú¢ *§þL?bf’§›£Ò:üIoû´£ï'h‡­¨½Ö Ò,¤ºß ]<2„œ*ìô]<¾9×ïŸß¹ãïù0ó²^ e°FŒ—Çb\a&ÚÈÚ{¤¤÷ºžwØEÇ·wFd&| S¤Õ ý>äàS†ÚUê {¬ÝLjéÄ ®”%†ã²Õé„ F‹¿4JtTÉ:ûÔÚJ}òË{*à/äD¨?‰Ã¯+T•Ay½eº½tŸcX!C.ü ïþÝ[|un7 ÒŸÃfc ®n;…-Ɉì)¸HqgÈol’èJò§vâQuSªã˜© ´ËúRŒ?º4õ÷{oK™!X€Ñ¬n~ëMÊxCi:(»ARíÖì£ìok ã©àƒ%/å¾Ê÷¯xúÅõ­žÑe®ÒC1HîïöK·È¸ô|.ð*˜æÐÀJlèÏF«ÊtË¿_}mׯ7Æ´ô¹¨Š¨pËéÕ±·‹umðì]úy’”"˜¿-b–4Kþ„z,Eeßve<íùìŠØQ&C-”•À¢ªµë ”ó]f½%FExP‡ë7´?û¶(^DäÀoiÍfÓÌ1f³E< ûEÔÜ_0Yp(ãó(ÃÃÿa¶,Vsé²§±GiöQ»¨i9ÁãLe:_Š“qîyõšØç.RNÞT²Ïx¿Íæ|ÖeS¯V%ô7ÒÁ¶Šáó„ˆ}7@_vv“ímh‘|"§r᛺ræ|P#Šô;CÈBŸ¾¡¼qn$ÖD^YuÙçVgh‰ïÝüÇ’uÉYþÁÓ}yåÊnà¼×^¯b%™á l‚fQ”Õ·XDRõ•ïz 6óNxÛ£†eíåýÃòHãˆÖ˜kUøÌ\1+Éx:þΖüJ£€Ýƒ«²y­,B›[[v0#äÚ€9pµ”K•Cg©±3šÕd™ ‰@ñüñ[µÑ¦X{û “ަ‰.#°êÌóG¤¨À X3Ó#MMœþˆ*k£9Ü’ %¢â*Ø”a×µI8³òƶ'B§{‰jËö£¨‘3_¬\·ÎµI!ÿªŸI‡žùQÉOŸÚFo-µF5¿µ¡Ÿ^ÞV vÈ?3|)ë1™úq¹%ÿ*:&{…ï ƒÁà)–mÏ1Fånµ­á]lúr¼Œ1S¨ ûŸdN’yëó1î9ãßöC2µã%ç(î£ñf"å¹aR“fÀ»=œÇåõç|<^ÌéCAmL‚ÓÐ1”îô¥r®OŒá)o:踗 õ« 9/_ê~Jë¾_.&j(-ĨjvÏÌïªÃˆZ [~5‡×_¦Ä“.ÀTE,ï øãY¦ '6#žµ¿¿lÏÅÐå£k†Ì¨¥qK½òÞ&}ì§+Šb¢u-æX®%{ t¨N²ídƒÔüë¹ã¯ˆî ““‹WmpôЦ†!t§Â“c‹¥z]½¾kl«¶£iôïÄVz ±¼þÓkÄqÊ&P'›MgØ.ˆû]Ö6W…ñ_¯@¬`(ìâ³/UC™‘­ÞÖÅè¾ Í‰ÜA-}þµèÿ9bŸ¡@Ÿˆgk øŠó\‰) `¯CMCY`7ò.çp –u/È\˜ìqpI q¡Ö!À\qwxlÊh,—ãdSÓq„&Žq”h]GÇNaЈþÈ‹+.ôW=ÓÀrE¤5˜K™_‚tHo±„Väý=Fµó¼|¤dV‘­œÑØŽÃQ•PïîcÛ3µY¤£Ì>”©ñßxN iñ9vŸ”ÁÚºº—B!¶/ q…¦xÂÖãȥʞó´tW²×°åÛ’fÍ œ)>ïïÐ,wÄ%’Èz‚‚•6U©k¶‚kaù(JÿeÎ$N}`†ßãD+#g}ý84™y„ð#㲘oáP.¥¡r‘ìУ9ÙÆ¸X#CÌ.ø›žðy™L6jØ–ŒÅ}8gmŒZ‚XþYí^t/,ñþGl)5÷ÖC% «=r'܉hêºÆœ RÚÛ98Ïžlnõ,ËòY©äëeŠ:•:h•´¥I(œ)Ç3§í»J®£÷=ƒÈIáxæ·ÿïäÎûìÖR†¬ÖæñÞ¹±›¸IYÉyâš% X™kcƒ]#WáÛ„å(N²ýíƒ%}ö+÷—†{p¹°É¨`äRˆ¶*_s¤]¾ÎƒFWÞðŒ0²±¡ñ¤hš‡ná³J°`©·Ç……¼ ¢:w> Ç·L•ëׯ{Šª—V±¼•¨+B‰è!ƒÉÓÊL¶´É1GY¿é|@Õ lÇf;1pñá‰"TA1Þ;g{ñH–·®˜ÎuȪ+:fçT¦RÅ2Yk貞åv¾k•xjM*¬×qªÞÌVào8¾…§×uW6÷§¸¶\bß²¨=K ߣàAÐÛ>þ½Ì3"@Ó¿YêCáÈnqÁî¨{ƒÙ·È+-•ði,{¡Uk¥ ü-I¯(‚"h©®ã62ft9[’\gtÀÛñ=[b!ź˫|LñÖÚ ~Ÿ^vòNô5ñ´µêáóî„Á—ŸÿHfkxvMV#Ì’¼ÍöýËç>!N´A£P÷jH‘ñW¼6š93ÄÁí™ÏÒkÈÎÂäéŽì•AëJ²Çó‚8šRêV5jÁô“7Sáyâu+Ûœ’!6Ñ%„Fkšˆ°ŽðSÇtx£'Â?¬èB/d©W˜këÝrú}[C_»Ë‚“ˆ?Òÿ@ Ô;tW•¹—Ådÿ¸ž“†<× uJÖ Ö%‰´\êÔ/æõªì_ÆŠ@C‹c’ž–(èñ›Å/Á]@Ÿ©Z1”£øßÊdg¤‚Ã’Ê^ð`K'ëáHÿ;5î¦>ºaЮœ×{nÕæTáŸ7lÿ-Þÿ…vàõÄë¶Î9Ùò€!—Àç”ok¹t‚eÞµ¯š?%µ A;×ÈBkº'æ½ö94WàU‚Éš7Œ¡Ð… Þ©Tꕳ¢Ð=ñè„ÿóPànÿHÚ¬bï¢>¤¸œ*b”á: ¸w2(  ¢&ÒàoÛ<Ëè”;ù°þ§1vàŠ¹zÆ« tÒ©7èO}ù›ŠÔý«vÓ4h ‡«²9¥òDa”Jâ’oaˆl'«¦f²â¶Å²W<%V½ºrgmý|òŽæúnx båu5\I*ŠO½T)0ÁWjÒ"ÖèPðµ$`Î*T§š3Ú ÉñÁÃs=?-ù¡Þ±æ/ÊwÏ^.Dp£%—BN÷¦;9œ0ÇJ~mW.ƒœT#䎅;3–·ï×\¦t54;E{ˆø: ýí\eË‹»áq)V¥ å-ˆžd²àœÆáô hÜ'zã¹æl“Od˜%úcÒ.¨q–²û@÷É×M–Qƒµã—ÑåCOÞ ÍÔÝÙˆŒˆäí.í¢u mji¬•”à·=Þ¿P7b0DüQA%/‘ßÑì@5¡ÊòOÐf…àÿöäÁ¥fb«z/ÙEß<ìf{bHº£õ¯Ç¦(üÃ>Â|œY†`¬O•}îþcº³¹g\‡nôÎÆ‰…¥î뉟ádŒÍ”ƒà^òÔÊ8P£ºçA'Ã9>ÆC .IX§DêÈç#s@³F½÷§'fð%ݬǮ–Ûbí÷#yô,ÚrJlå€R €¹-Æ<üƧ7Ä qëËý«wï®1žà$˜ â]cw§“ÈŸ&jBÙÄè7Íòs=‡Ì3ŽVK|iuq½ó}{„M/XZáðLšBÃwq—…ð†–p¤y9ø§ ê KBt_ÍKñâSǼ”öžu`¶à8¦‚)‰ÊwZïYÐ÷ð`jN}Ž›ü\¸ºð˜Ë{gNLœÓ_¨éå\¹ÞÈt\Š˜Ì+›Ã8­RÕi7—–æ„—i¬Ö<ÝõJø«ª…é—ŽK}”û2iTÕ…ú–êL¨ØMÜ¡J½ õOìðYÆŽ!N ‹è1B©ƒ£°iÜdP;/}¡‰Ã¶[sCBï&Ó6 RûT¶$^NÀ¡›Êö‡`¤ã´–ÃG o%ÓÑŽÂ#¥Ekm¡0Z§W Añ&3OæLÎÉý"!ü£å¨ƒÂò:á’ÿÒ#ˆ1–¦Jf/ßk•{Ž*Ñ}µ•ð]X$³ÀÜ\|ÒòH•_Pg3‹«àðÿãB¡RºŽ Ü…n¹!ŽBÜ$+øÉOÂdž,†Õ¹¸¿L*‹ëª„…é’?*´Úl¨ýžÁŸø|ÿ¤6BÛÃ@·‰Ìݦ†˜Š¶ÍÐI%Hôn¥ÎäºIC4EÆ^é˜IO‘îÏÂìÑÔ&³rÝM3Ñs%‚€í΀lM{BnÓz}A«³r7E€e“¢»­×lòÍQ–&Xµ7“á€Aªîø ãhiþÐøM¡ÝžõÄs3­¨*Û©Xè5o 0I—E ÕÜ÷¼…p| é‚áÌ9óø»8Ão02ÀEΠ‘mDÔKpEÿ;()ï2bEªÍZûW‹0*·•#%R9ûÏ¡*…H¢â0s)Ê• ô«˜°ÅBÆRD_ùÒ‡4ËK"„ 2õ¼iôÀòz„‚”ÒŽŒë›ª\Fëùà&×/ʯùL4 ÿuû%Kú$ÕŽpæ&½¥n8á`–\xÛÔA…^ýc#—£V«#½cšÛÈ×/™w3äL^&â­Ab ##àcÇÖYTÑÑ›h6AC~‹`Á|Ë70Â_‰bT$áâ\…#–KxÙ›D™“qBïIzÌ<ÉþÃF®·VPì_¸ñ6;i&KO*»ãq±]P³‡Ø؈)‘Fåu_!SšdÍy|ã3i°`55!ÓV¤™º&&®ã«eÕêá†ZqÀæŠ1ÒŸ•cÕ ðI‰À¥",yÌe™c`cnôäkc/1˜ . =[Êär8;£¨Ê4 ÙJÊlÇPÍÆä¶ÌC£±NêJFØ,Ê2Ú®ø½ûe–5Š¡«´/9± |3ÝW.ÙK„bt¿šÅÆš¡Ú-¨!#7PȼJÁ·ðëµÖA¦}í®ÀÎþó ­ù(Ï΄î­\*3ÉgÈàã#úãø–¢B(ú¤šÜ踼ˆÄ„¨©°»-l–= + ¡: 5!H>þK{Ç8ä7¤P¯½ZEsØ€ZpËÍ›ÓMAž˾뉇WhÁ„’#LI·kö9Φƒ‡¾@š 5NÏ=iâlVÛìr(…þi *`¥Pó¾RyréÃìœaÒGØ¿« á¾ l×]üJÀÙôÚov¬ {ñ¾³6ñ*Q¸uV¼XRò6Xóî¢8 Ï¿#ß[ýÂ8ã3òp¬óì^½çѱi¢_h.}]^EÎ|“2fã›Hß2´!©OõÌ®éóf¸ÂWhΟuÑ@èmÜ%z  Êmj"º(T÷' ß7ÐïÚMTCïGɰò>Ò&í¤‚tMK Ùâ*÷FŸ‹ÆÊ²×kz|ZEb>³Ar*ÃÙ¢ EÁ…ýWkaøCnXlÀ„\`¶Ã$)ï/98Ž-~G3&%T„pW¹þA÷Öî<—i—亠¿tŠ€wqJ*f%˜ÒkS¯#$Pg›Ž=(!Däê.÷ÿ9ü@ªj¨oÇ,“„«»îZND2d«Qç£ÇK¿aoÛ¶¯zÜBmvkäôÏ|V4*’ŽÑ|hÔã×p¥<(Úqdp–¤”uMR£jè½–IÊî)ýÞxá5ù(é¾Nl;™ÂÛ€åU±LŠÇV€žó¯óò…ŲáÍ .4¿D68L¤&–ÉŸwe”ƒ’ÀAÂ:’Igúï1G9•0¾ÅaÇr¯R¸ýÑŠ•—»£1g¨—Ó²h`£Y[\j Z×£ÕÚó*ÃGKÅR±ÇeƒrHÜi~’BõÔ—’…øþÉ’âþ&´×mCk­ï­>Ýh°­üF,ÔüCWBðdµˆ8é§ð¯R­(#޽hŒÁ{”É"ÉJ¯7w»0³  r‹Hç»A“è»!¬J¦ZúD kãþWÞ%¨×B òòw>#Y© !-í Ì/˜„Á$¹…"êr?EÁÔXZ*\d“_Eònøîá$Dj*,rËcS최ë´g> a _4œ<b½qó!kŒÙÈÊ<.ß­0_ vz¦g£\áÚøŽ8¾3qæ<ƒ2ó¡ýÛ6¤ Ž»ÀŸÿ¸&[r¢‡¨çãW·<Ùz‚ˆÇ´¯Î¡`¡¶4 ¿Á{Ë!ïùÎ…tÚŸW_ÄtȽL\¹ç ]êu¡Ï°}(o€ÿLð¾&“½  íÖ΀vÚÐ#¹þÐ9ðaïë€wjmS &•–Ðy~04Èm'k&(©HyDOÕùNØ8²ÿT3 uƒðµ>O?Ò;YA…¸€†At"_£s‰ËZ¦B , šì¹ÂŒl7qUx?e +èš¡{þÚóü‰àLªÔ+Xßâ ÆâetqØ•S¢„L+Ù 1Û¢¯¹™Ú– hÚ‹©.”, ¾Ìð,%s‹:LàËwÚŽè 4q‹ì7¸oòÉÝ…s”‡ö8ÔñSg³~N Å1ÖçNó°ŠYóÓP[© >zJºà±%våÁ³6°%¤¿ì®Ö³€0dY·?ÁQÚá {­/)»ýM‰È"ñœÅö³söý#qÈxëŽ,C·âïF‡¾GW¨§>´i*Œs±e•Bz Ý=¼‚eÛ2bB9ý0/M€ršì]\mRR]/Ä0ìK½8H{˜ÓáïeðG:iêƒÔå´É@¸˜§Fc«Å0ΖnŠ U&†/²õÛ×”y "È”‘LjhüÆ8œKJà¥Îýý.8û='ddd@€É`sI/ØãwdmóE%÷ºàXŠNü§ Çx%¶·xRDe¡›o.çìMž‰ · »wq£ÙÐbÔ.ð¸^gïmºˆ+¢0VT.J Ióô=²LP£áß(±EQ'ÛÉ~ó8ÙZ0Q§ËÖ„V:Ô\u×/8@ÕÆ`Â6’"Ð1‰GÏýFÓ3A¶Õ±s'à$…Ó@2.´ «Êhru®¿è"‚þšÌƒ™ÜŽaæÍŠnÛ*}Ú’|àéˆTÇî ¬|"ú¹še3µÜÃëRæê,²µÁgA%×0x˜µÕ`²C:lÅÊ~õÌhó)(¶ÑãTU FÈ#ù6Ò°Èiª« ,0 ÔE¼ÄÁ±²o¬Þ=(ü™Ü[îoš¾rèu$Z½7²è’]ò€(ʛϾµÏeJu.R¸è×°°Õ¹.,šº¤aÒ“ÞÉ–—Õ&JT ¡_ˆ¾é=î¹ÃØäCúˆ•¸ƒ×ð^¤Õ0Ât@댵¦“ƒ"‘(’±Æ7ªŸ·/iãÆLªzã~c¼Þ%àýJtL–6¹ëM\úG¿m÷ïÅíÓ×jüÖ¸ïÄ ÀÓ/ ¯RôÎÐÓâdËG{’ŸÐ†ªLæ(Ùåe¢gl®¢"BÝû«K$ØÄÓÐv†Òê7;¥^ÛZÐCdª¬Öì%­vÕµ3LaÏÞÑÊÐÚÁGH`‹”ú¿¼gf ¡¡F½»°nÐÑáuë3ä—Âl°ÀocϵuŠ„ïR*g^³—œn:|A‰%¼g9YZ¾Ê’™gx¤e*aȨnˆâµ›Õo¸}Y9ÝLÊ  n§\R%d>¿_ÐÃÁd–:¤­Éëþ "< ý6àgØÆëg1L)<Ž÷׳–WGà‹K¸è•9H8Â+ʼ0KVbœÂŸë„‚-Îò*Ažú)Üp" CpjH€æ–Ô´“‰Ì‡ðYª¸ 8íT)}”¯J9³5ûäÒ¦ÀŽ-WÆXn‘'^Ëçr¶u³U$¡{{/}Õ 8œ/pý)¹9d<Êdæ-ÌíÓ¢LfÈw|ùOÊœ«Y6Kyg!OXERÎ9¼Ú©$¥1–dN+U36ë1TèíB׉ îyÉ4ðñ/GÏ¢°Ð…ÝÁݳ¼Þ‰ _¹Œ\o¥p*ØZJ»ˆX𵂻VºÀ´rä1¦€‡Ç£h¤ºbO^ìoé9í¥_ÚÆ1‰%R®0^•Öb‚[ܲ„1=0šHÛFìPÎÁ¬tEv”JgdñŒ<•}{Ô¨nßNþcBõö›¡¡Ï’HÜVAtWöœ"žïöé—ˆ–b …8^nÑÓ4ÐÖcRkd‹âàa‰Ásl‹¤-W.É2N©ç½Î•Ú.“´5÷ó«Ãtí~ÀˆyŽRÒçØkîºH†¼µz6Íf™éØõ ͶⶭËö€ÕÏ& ¸Ôhú—¾·ïÀˆAáô!sG¬¤¾s<кK\;Š Û.Kw øÒÓ £Ú€$D~¦ö™EŸ9Òy½(‡â,Âm²Wƒ^—L©¬¹ðîJYg÷ ¢=úA ©2œþ"˜9 ýÉØrêüz¯^3M;ƒ¾“Ã[ͦéð!ÁjqöýÍ’Î-ÃS!(PÚ&±ÙHŸ¬=ÏÛYÇ«i%0T= œ|çŽ5¸w¤×¤Å7ZîÚ7IÙ±/•E|–Y†dÉ€Oì§o8ç·¶{óy¿¹ÃWá@}4èGWÌ>įüOŠæØÁöOIʽV”èÕVÚ¡â9ká­ò\¨]ƒ,‰²æ=px •4ÊŸ§áù}¿ñÖlÉívŸWð l›±‰‰º°˜­\oý­dUÙeóÌŽrˆËÁi ,ø¹‰(#"…Á“ 0 «œzÑÂo™þ𘔴Ô{SAx6CæÐ&W²“*`+öWÓ¿L\,«‡1ôV±V•7—ÿÏÀ‹)ÜV~ÕX¶[ײ}k9!Nœ#bZl[cÑk ƾ¤c÷z£,íH‰3¦–àRÿÙ(¼­&‰@²‹ˆGR=G<€Df&Ê…ùÃâÖÆN$9\ŒDPj’Ú›t"ækw"8 5(ÙWÛ× ¯­‘çxïÕ9÷Áÿ˜~¯ â°Þ bf*äTrØe¸ë·gd+8ªO†Ì1nIß.ÝÝ%—r¹¥¿¤Ÿî1–ï¦ F6š ÜÕ y'‘¾ª¾¾bóÐéÅBgìÿÀ¨3Tu /Òˆ²ë9û[È*‡Ÿâšd¥˜Û.+†=!fNŸ@d¡;”ÓÕõm ùdÔLøœ¯EBÕÛ•¤ó­¦vpÇš;¤ð(ðSUßóÇLöS¸¿hDg¹bÔ/úµT‡_³eפBN-Ÿ4¸¥È Çe,\ár”Uœ&ú¥·u«ÄOzç+y)ï{"_οu¢7 Û¨oÌwN^¶1vpjåÖ›±ès¥-jýï&µ˜7íý!ÿ'>t %A#+Â’&ðôီ;• NP©Ñ'õWyz-%ü™ü0ü_’[¹Gf3aÔw77 ÕVÍê4; Òè$]J–/-‹[•ög«zõO?ia½€ÁmûæÂ%“:nÌs—ç·_Á¿þžÜì€iž|¸Ç;?kÉõ0äù)ææZ8n÷õWœÔ>‡sF –ælþÑ/ô¥]èóÑŽY]¼óC`Åy²¦}¡ÏsV‘ó«ÐSÏAíÁ{Zåï¹ydIš— U”—›½UŒ™œdY¦ÄëýÐþÁÿù÷î|GÊM¯F«àŸåjø ”-/DÏf~ü¨ üûĦ(VF”YøS~Z•ð˜‡òuÞ°'ºõ¼`.ÝŸ°ˆc¶’ôáC*¼|Ö¸HÚMb]""ŠáÏò@qþ–K„Êiòâ šâE¯?Ïj{¯”³gÓ%§ô«<ä æ“`È Ú›¡Ýã;Lõ™R´.^,޳ ”P¢>k=Ī^÷ )l€ßx(5Éÿ&mª̇ÉëàáèZbòmœqé|¿ ‚G‰‡Pñ ù¦oßX\¤ÀãH gÍK¦´s¡•ï&Åk š^<]îl€ù•ÈH¶•jLÑÊrsÐ^Í Û¹Ð4e€ ïË~?üeæ5ôÙD¯¤]¬äýCFš²´u\Ó/W âž??9ÛÐàbL@cÛO°5™êĬs<.@•¹…ÆZ…qPŸcÖš›–ß§Œ¨=oÚ¬J·ybDM+Ç7±KÏ5‚V÷†®1'†Œ ,ÐîåEÉ-ô*{å$±ºJ‹G êV(®’Xî¤Ì¹ hÙLŒK"¸m£~ˆcz,*ÌbOšv”ë,®Ím¾ l£Ñ[Ïg‡\fBѱ Õ¬.ÒëËë€ ™9b?wžÁÒ2ðn+×ëMãæ· óìED¸ ðÛËy±´-d¿ Õ›mؤjä^é›Ðo#3Ây 1Q”Z rÉ/Ïï;Y—¯¡šÞœ3DõZI÷bP¨”ït»ÅªI•ÆŸÍÒd¼„P­Lûþ² *c6ÐF¢÷ÑÁËtxª¾>ggY³n·‹ÿ¹®.â  L .«S^ÓeïœOw¯?š­ž—Ô!5y)7B šøgU¨]R˜5†à?áÕÓ&»¶÷²/߇9,É”ž `6jÐõ·ÎlæØA)Sš­Ê€zÛý#ügÿ‡wtŹìYaåzQË[Îöøõîaº‰þÕe˜á;ÇQ)psNFxWdzýÞ‡wãeÂF«0‡< Ô°aYrMS¾ÆÓ±wÌ zX÷0qÝx8ÊUÍ…Î4éµa8\:@™†é‹Œî³G”W‘˜£ýÉLÜYÞfÅ`¶ÎJ- š Æ«zõ/ç;ˆ—Ç»zƒÏ«¼“÷3ÿ“Îî¡¥'\Ì O¨šp +ó˜,œËZcW‹×:wV'ÔMâE¬2ÖŽ}fçÅ€ü9Uáéf÷Yµ霉,.ƒÝò )â£P€)  ÒR@{³›‰d}«°" ¤ã· Ÿ#ŒhÆÈ÷E9_+P´V‰‹`4e©èF+‡p”ƒÔ¸0û¾›~=£mÁyÌ›úW½Š$0hË‘%w¹?;/ä.NSÐÊ/°ò0Ž\qçâ|ÄöDC`TœîìÆP Éhìä[°íu=Îb`54¥š§‚Éxð•ÿè_†Èªe\Õ£‘Èר›O™­’kªê¸Ø~àIÐJõD͹FÀ}(õv¯_ÞñÒE•FÈãªX _­Sß5p.rA—n¶¼«õ¡Ð༳ÄRÄ¥@Õßû~wƒgL6×@e.tÀî3Op¼¯bü$Q,’,KjñøW)Н¾šðeIC|my’;§#!µ'® ¬àfÈj–·ö”p*ìc®,R‰ Y3ÝÒ"K^óŽÃÓ{àÙ¾ÒÔ`å¸x1ßL ’z†^˜þöï’GñYû XbÄØßZZïAT½l™”7¤Ù n¾VR'à uwnBº@O›*À›ó772„¦«Â¯>5‡,F…‹ò¥á:” 5Ïd˜öI¨09žÚ'L¡È,©-‹¹E-qñ¾ öùaäòÆl!bÛ“uA|cFÉ}‰"=Bá!¸ìg>ÙÙoh\Íõ¶­©m¡ äî{Ö°ã+êo‡OƬ·e|Èö, ;ì’€YFmÞ;™7UúÇ%t>¨3r´óÆO¯Qf±¶ÜqvÞ¬·€U©wD?⼞åį¼ƒöÄ­ y±0Azb“´xս詥aPe ìºâ/lBábþÜNq•ï±§Ðgµ¡>rà>”¹+}ÍûÇ’7 \éBGŸµn‹káU¿eîð©ø¥Šס»[„å`‘}ŽÛ™hÏsÜâQ6®È7 ñŽÐ#9V`X{…A$*À{é®Ä™f<–@T }Á°ðÚƒ¢1»!ðï$߃(O«ª],Ëh¦. ?$/¡` @q“…qDÕ;}óåk/9ÉÌWH¹í#˜Ù±^‰ýÅOÛÞ•Ý>ž*7<™ÆËúîMøúE]Ò³ÕÒ® Á#Õ–•¶ý¬Ç?gÀ­à 0‹kÄPf:4t§^>Ò±ÜÊ£ké²J¯‹`KøÃàˆ°o[&ÐLÊV«wì’ï·m â­,‘ )BÚz/— /p›\á¤3zƒ®çµ°‘e˜¿¦6özøÄlêeScíÒc:>xÓª#²X2ÿå îCž©hÊþ†©)ø2¦M´ŸøãÕHVéKÖéùNEøïpÞò!löH¼â"ò;eÚ; YÓˆë"N8´Ã¯1=¤×¢UŽÅ߸e•—gƅа§,M5”$vGÒw&‚ÓXû–ÔpfÛÇ´O Š `aÏ,û‚ÿ{o`[–5‹¾J%Æ÷òË“¾©âŸj⌜úV÷Zk¦µ#¥ý¿d<†ç&#îɼ®4‚¶:Ew¯’`Ì =A7èÒ‘DÍ®À­LNˆM¿.`°V{çËÀÓ55ÔßK¢/ʦÐJØw Ήóétó¡íf‰¿ök,R£ò±;Ö!Ó½ž1WÞzZᢅfåÝóH1ñÝòã¼çÜu¼(X•/Vp}#ðs} r&à‰£žGü$ÖóæÅþ´`ò³„ZûZ­zÉæÒÞÍ3!¾(‡d—h³ý9¨|šš4Š™fpß{Ýš ”—x%AÜÐÖ`Ydgbceø@çÞ»«ŸÃ_olÀß¼*ºEF¬7òGP†K¦¼éŠ JP~0&=S yØ üFç~}­yVGF~_%uŠ*,z¸áAEç ü×­%_±ÑÐUkíÁ¿F$óeEÖ7aìŽã¥Ô~¡'qÒ² ±ÇÃLü:\¤±,Ÿ˜â~_„é*ÂÇs»”H_÷ÿJŸtËñ”uëc?·1££@G×ìÍÞ.Bz¹(èYEªòc×Ý=â6¦p]p ¤ÃoΔS yø¥óÐBíלt*Bv)G‰–lkðW¾F"]Gáž'êÕâ‹=âBHóŒé›kæ%â¿>¹Œ6frŠxh_mLr¼<Ðê<!Ðs<\4-á- T³H8„ º½B;*àíÇ&i1âMîËyÊ@óÍZZú¹=ײÿØõêÞàY™{ã¹øÛ2 …>NŸ\Ìš>̹B8#X c>F¦­rOǸ-3¶Ê‰€ ̧aé,JæÍ öz‰éz 羬.˜ÆN±xôf“¿Oz£ˆÓxIž·™zTÔÒzem×òhA"¡šÅW2Š6.ôž@€KvD[U°ºë"h,û¹ÊŽŒ{Ö°jý¬òóÍ¢‹^¿øMÐøê¾Ýa¿YÖ43§ž»s´X`.¾ë86-®ÙžA*ËF©ù"ųv›¸q3†F޼áÉ‚vaÉ™Ýz¿^ iÄDVáf·ZÜBJçrJ‹ª˜¤[µ/4àcXštxxûWŸ@ÉÙÝü©V£ž>L¶H· —ó|u$¦:tÚ$YµM€uÜ9ø^Ú»Ø÷]D¸…²” ´a}ç÷ÿ]£ÄúTG”è*«³o!cD4–´ÈG:fìAŸåœãŒ7Ö,®B.. T«²|srB×Ïâa?{i‚X*3Jjn³¥"&,Â^#b5*Šæ%Íâ;ƒ®j³$9õ>:ßÁÂᑲjò7Š—˜!¹É¦ÊJŠDXÿÝäêT™ïæ|0¿zxNá!È™PZnIAfjµœÿ̃óë”·Yv­±Feõ¡Ž·ƒpà³ã2 ¼îÄh¶³[Ï·¾ 4Z«@œ©vÚ‡ó÷¸“£¶?$4ñb}9„å3â'i+ oWéH›ß‘‘ºAÍÔˆc7'‚ч?£ST5C²Oñ'Ñ)!Þ£9bÃÌyþ᫦t÷Á»MËᒠͪD!øì\@uKtÉõÓ;h1{E« 3BžÂμ8ánnŽº*>+%Þ;¶dQµ^B!Vðþå¥6BŒSô€¢ Øë íË„øP`¼´K=ή‚´ c!B¼ÄÊÕ:žþY> ` >b¢£íŸáœë‹i\Æü"I3!úÉ:Šæ¾Ä1Wìó•ai §Íõ¥’Tò*ðÏ0¨u^÷¤bQ¾A E Ñgkš—ñÄ{ðˆ 4ÝKzÿ£â»ÇÉò¤Ë*鎹§*Å Kð£|k`ÌÆet ý@9<Õ `,À³ø  ¶F8Ú«Ü_᪦ЩCíó#©j&¯¯põ6èBr¹ki ­˜[”Áfi;§§+îÕ§·“ɧò%&šÉØm<ƒ=q;+]Íù¿ ‹:iÅg–’éêÔëï0к©NC½z¹X„¢L#5¢GјG/¶„aí€üÁÚïÎ7¯kc·ïeQQ MÒÊöË6šÉ$Áq³ãi-¶,7?Žë¦÷šÚ°æWBAUqí?ó€¶<™ae8<ºsßPÿêå6<®$M]?ÌàO)Ê\Â•ÆÍæœ'Uÿ×péBæXÂsB7æëN <+šáãµ*ø¤) s`T|ó–.Óá &ãìÛB]dÞ‰ün&ñ®A›Ñ>–u.aCgVÆZ?*ï`{þJTÒ¿«8r;±µ2¼éDßd8¹‘x8Œ¥ðË#ª®­¢Î%>UŠ·5‹?Ó”T‘’–¹ùr+°f?~ï´jg—T6Ê’Ú€ƒg÷øÖAá.©9„ôïùvÚÝcJiÀPÇá'†r¯M,ÿZŠ×‘Ž ½Ÿ+Økàê Ö ¼‘©9ì#ÚYAUíØi_ÈB’¡EðÐ,¥g{åâÞ±ž+B¶>^ËØ¥­Q–r²ZjÑ?>Þ’rÄÄ_AkÖ…ª„:ëö # ÿ\6QoC„øî·LÑ oP4–è÷ƒ&ƒIØ©RŽUÔ¯4Þ0=ÓGëÖ´ÅQa-™£ð¸ \.ŽŠ]âuÞI³v‰m>ÙIlvAÝéx,\—Ùo’ߣgW¿èÑ.Ù0R*{©­£šˆXôd±¯ú¥êëÄq%úÄ ò0Áô¶Ar»[‹Õ½»MZ—O/~g&·µ((4ïÔ‹YÈÏSû@¸øAš:kœBO{\®ìû»¤çh‡žTÄå1Æ8€æ:´Ë·1{!_@& ª p š7›ÚÛÏiý¨ –Ìxˆ`ù;½½®¢q=âI0±,ºm2¤¿B¿òâ—+wIÀm‘ ¾H3QfKPÀœÇ *ªzš¥¿"°íî{'¥^ Rù„¾Ì$3mk}·ÛbsN6„4Œž{³w2&Ü™8Ú‘Jп š0ØAkµô –ÍMwÆÔ¦k^×ýªé z7™‹·Dž±ª6ÿÐ*]›hÙÆÛÔº‹‰ÝqÀ i±æËž8~bŠñלsšã—wKk¸DÕC±UëJÞ/&ü’«©|£ÀˆsÎD?*qÕÉøH ŽHïXëÊøpB9FΦ­3__°P¹^­ªÁÖ(’¬pŸ³<á… ñ±UvÙz®a´:ÙxY 0íš.Ë4v!®:ö/Ꞁãb•a±kH’MÆœt]‘ãÃúÀ‡­¸¯kWôÚ9\ýÈ(?”Ð' 7Ms\T›M„JÍÅ;XËT’ß> a>}GÑÿž.:øI‡™È¿5;SS‹5Þ:W±'¾ÝLßÔgWÓy„ŸE˜.%«_΃ÆìZ*ÈÌ‚ìÊ7SþÌ¢ø‚†1[x²4{ÞE™áæìÕ§èºbFjW{<«‚¯f]ƒÛ'ÂõZTµ[fbYÆÀ;?ÒHšü…$k@,°¯“âi†ÐgGrfdc“ÜÜB´÷ý…›¬¿±y­•¬`ÀýUœeCÙq>aIØÈ¯]é‹r BE¬>y5mƒ…ðÕ‰Õ$´à%îîÇX˜Õì‚‚w,c„Eœùb¤>õèÄ“!¸¾B/›l‡YwúÙ;åÔù¹n¯&Ÿ ¬²=Þ pllý“šê0™2©•ÁœœÖ±MDcÒ0REÜKý@J1 Zð®ûø…<¼à2T¦Ø.É):iÆ*É;Ëîk’HGå l!WåØBC¶Îék»Ò´€(’÷«PñȸË@Õ`éäÔþëmw¼Z1jΣ®-?Þº ðõw¦Û×Jsä H; _5*aKpm'„骺wn—w¶ùþƒ’ü› JRE˜)ÂíZ•ZýËâì+Æ3iCÚW`Ó€“!jä1XÄÝ’SÆÕtòuh7[·,»c š2‡¡æecÔg†HÞ4˜ºÖæ’ÄÃ85Ї&Åxá_Л‹u¬³´>KN|wÉ¡NCˆPQl@G×o6 ˆqtJÍì_83J¾3G}•|¾\ uõ…2ÇE0"ËX`夕^z'Z#»kEfÉÒ+ŒÛ%d—¶&Lj¦¯1(Еņn`.³ åö^SØYí¶ȬMf ‚X?Ê‹¦Eù(ûÁî3^“U P,¸Ê–s×QõC661×ʹg«Yã7ð8èþl®Ó}åÅ–Æ·¿cVð§‡)C}ëÏ𰓘nÇÛâ•€uƒ_õákÃd;kŽSî‹swé"Snõ'@Ò”0Æž~0°g¾ ù{[7H…”•2O5Î%ù&Š*ô"t²[•Eú³Iba \o¶ U¾Õ– £ïLðKĦ9‚`V—*Ž•èQÏÙìErõ@3>±úÄÛCчjüz¿!SÏP]Säð3u{vöàÉ?ë¼ueeê@… êhƒÄ½iŒ),û¾ë=+°y›l¤»ü6TPx=*QÒ!ˆ@ÄÛ)e˜3Žv–DÝ(ìÍtAð÷xÉŸ€†èNÁƲQâÔá,Ãù4ÈÏú¨ ¯>mlk¡á\¯:ñƒ—H> hÊ-¸H:©0ú¦ËD’öè‡ÿ[‚Í4ó~ŽDÇOJœ2ox*F$"YGAb[æÃÊZžå€JyÏÙ.¯‹qÊU“ñBO?Üôòç˜b •ðSB«Üã´£iGÍæ:žõSÕSMEó$Þa)b?¿Nð·˜;JŒKú’#³Ê]ýÕ‡S¨¿'CòÃb¹¿JZî[9òB×I$¶œÆ¢·÷—,¸ ? Ê`/Rƒæì—s¹l`8É©Áг'Ó²ÕÕº±a‚Ìú+(Uuâ˜T£7ØçÍxaö)bú¸yYž­“¦ð¢ÿ¨z 0¼²I‰ÝQEáÜôÏÚ&/Þ‡C~lô+v‘dŠû±ÿ䃵—¨ÁLŒ-öˆHÏxë¡N͵¼ŽVË Üøž†‚ÏW\mî˜òÞCOò 8Ý}XIbŽÀþd›û_rÓÿBhØäÆ¢CS+1mŸT„¿NòzëÀt­ö”ää†B&›®àŠÜÏ489¬Î°¥vø >µXØývû"$ ›µ«c$ÐÁîAš§ŸJ“LÑQ¶F¸}¿ýܧ5¢HÍⵇ~ƒ Q i¹#_Õç ‰Ð^QØW).OGºÒû®.n5Ôëž- @µV|J™qór‰LÈ!&ÚæúKÍxàkg½~ )xÌØA‰*ÀZâ)^MkwÀW«i2¥Ô%e²Ý³Ó~¢qúWK» 4[wÅCÌ⊮¹OîÎ1ùbšç cuBJ´“o{,%©°cûŒ+|Â<(»ªð¼}á@þUY‡(Ëj¹à9Ûö}¬æ£ý-`õ¨{@îéÈR8¨+CÓÀ$ †y Oû¶¸áöi"þøQ™a çfdú„ܨ@ëkúÎFáÎÞ ÿ‰åM/_Ÿ5+Ðëhårçd½A0X*÷ZÓ»†ç¹”M3Ÿ¤—OÌ/Ä~•o±4Y/{ýñPªéîÆ))Í<2fÓBƒO]²}Ì‘ÜX/A¦ÇôtëÙ›kÌBhâçÜêÖ x0µfR'EûÓʤ{f°VТ¸¶__âYí_‘ð°Pæ«líveÚÀyQÚ»=RÅdÊò_ˆiÖSÄD.½‹± Ä€ _Ú«>W4Ô ¤S%¬Ë ¾ œÍŒLÓ•¨«‡]d…ã^(éRO1° ‘ÆZ’¤þt˜Ã{ ¥@ y€X,ýØŠsPÁ%dM¹Šsz-!(€*%è5O3…}ÙÏ'™*߈¹¦+Ï )V´ÔB­O{*V; ô¹Ã¹k0Ÿ/³È ‰z‰ªZ{ÿÈTáØˆ<}øTÏÄÈS<¨b›æ^OŰ3¾×Ì|ðÊVÊÒóÅÙØÉŠi.j/×Sµ±êzžö÷ëòW¿þl¥„LµöB—[Få~$U‡Ù ?»f\ræ/J5º²å¢¶Ì¤ó2Ûm% v.Ãü5#…;„é[U¬ÓÂñù&v1ƒ„~Ÿ$RZ)xÉ>¼Va:˜_öë5Ó¡nŒgpÓ™#TÜØu @é ·j–¢kH‘Wéhâ:_C*Öêš¶ T°nJX+B¸ß<ÜÓð;2S}f†—;³ —†#6ÂMûVÂçKüe¦î*ÂÉ{«õ'Àóy{+Ä®“¸¯0Qræèßy ·zm…½z:\ÐÃmï·³"„µ7¡ü†ì½¨ÑD=“ËA¹ýµuXˆ©ÓL¦GKžëK•±y?ûCÕl•°ß„‡êYøO¤%ɘOS&ñôáw&¨<³ë—EJŠï)üµ‹­"biDš N†OSvÙ`qâÈ}3ã ý?Õ¨‰—s±OÛ>Ö/NÀIŠèŽþ ¯…T4:>Ôi¬Ã˜¤k¬‰4ƒ0’:£¸\YMÈÕ¦AºÑ–”¿¸Êó‹ü!:^ôg¶ùc8&¼ £ôV­M¾øÝ멼<ö½kÕƒ^-ÙuzÀ?!vÄ`ò±ÜLÿÚ?ùb•™Èj4]Ç(´ž¿á'º2Žss_Ò|©3?`íüÀ_.cñ`ÜàPœSRŠà8Ïl»“u³ÔOû…ÂŒÇ ¢x± ýÍ,¹/Û¸p“5²`y9¡3Ý91ϳI Lå48]Ýd—éb/ÐÊ IŽ[¡º3)´ &¶«Ë—R­‡®Z›úŠÒ ÙÒà¬d;Š:š®—äŠÔÄŽX‰våmÛP¬MeÜùò ¶.ÓG"ùë$m‰¬ó2rȰÀ•kÊèÁü¸›`KÖ””ˆ|jò 8Á±‰üLrµ)–3$µ%úH^¯ª¬#! NÛþF«bTs¼Ì"–0ÕçŸÁ=ƒ‘b‡X#r1{üY—™šʾZ[ÛšÔ'ÀMµmµ9PlŒwŽæòÏ<ùˆ‹¿úŠuÿW¢‡ª8¤{œÓµl/±±0‹òl'of;5¼ê/žž¯Áó!24Åë²uK »@ÆJ†q+F¢}fÜÓTTØæ¿ ¬:3‰”%õl7*ªs¿½&7UûðÖ«±±ÔëÎi©éŧsU ÝÔðx~©{}Eº;Â[«J‚8°‡kifÍ‚%K|,Œ.G¨ (æÇ½ ¯[éè×g6¹þU”v–kÁTscÛB£‰¨žÏœ…X­ °åí%HÀ¤c†™æ€®#êÁMeßȾ¾Ð¡weó*îÙŽˆžŸ”he±¢¦'?dr×ofÒoøßãyÚri˜§‰ëkõ·*ñqì)`Í»xô½ÑÀ×=ÔånÄeí¨Z9Ç~ÀY¹Ðµ°:™å1EÔfhع°ªgr(_ õݽÂê…20fýuÄW¤Åö¬Åë¯þSú¶Øjȸ=~½zIÍQy}`µZƒ^ðAƧfQëA(W© –Äùª[Ì 2†7¹M”@gÍ×RC†Né`Ûø¯¬ uPÎÀUM¾Bf¤Åù2Õ Užú2ó<©N±ÕP‡‹ñ•2lñ‘}Z‹DEsÛ¥ŽQL]!Yj[µµm>K{‰ *jQ÷§ÎqÓÌ~-k.õñtP9ëïÅìåϤôýèIºmÔjÑÇòA¹#Ó7µàߌ|n\z†!ù„üæ 9cî¼¹<³™KâOØÎœgƒ]Gñ0?ÏvC™¼Ÿk ˜ÉC¾ûظ2¡nм»Øh§W\ƒkÛ•W>Gx÷s0kW+ü¯nì¶~|H ¶å£ßNxwŠ­#âUÜ)àX…Lë÷±?ÕÓsÍ· 2h70…€Í—û&)ÏòfÍ:M˜)eƒéL•·ŸÍîKê¿ â˜ÃÇæúž¸“õX¿cÝ’–ãȯ‰Ã$×m"i×i•÷ã1.øÒƒågh¤Àa9ìi &‘/©ŒA÷Ï©öõ™Øoéq8àaÆœs·8o’Eþ© öéæP_¢¯%à닸dqÏȆM,ßM(1ý¿É$ÌèìñÉ Bègón62ô³–ëÞUÑúÖ§¦ýQ±ÈYšûį¶!x_j˨¿®I-‹¤¶(ħ¿ƒ%–ô¹l¥ØU9»ndLq¶A­°te<Ósvh‹eÇäaÃùUÙ[£~Cd>ZexÀÕ©Bó<® ïá'°ØÁ ÜOL~lOW?P©Ñ ÍölTÙ£#˜}¶6é@¼ü´øç áäS8D@(¥J¢pu*3ÈÄ£½ªK9óì›`Õ3È€8’›¦‡+rÛÍtå+àD{ "[—múŽ}B±f9íE>£¢[bS/r’œ…ì6ÎbSöF·Äú¹ýøî]çžBy)iÈqÇ'þÌE61(¹‡ºàz“t1FJ6^âÅ3¡RÅœ…Éc¯tN]ç׆}o{¦˜õ–}^4ÎP´ÁVhƒ ­‰MZŒ^ŒzyøÍ6œ $,O;éd#òµž^é÷ç|æ³ÊŠ‚~Âöý©Ç9è`T’"»×Âdé†Öuüo<¯ÀG‹8°ÓyšuS{;zÛVN’_xCf+£ÿ •]_XÉÖ?™{rE½€‰ÌŸÁZk§ÝcêžOþudP_ žŽŸl,g¾Šx¸ˆul÷©ó/Ö|¼%n& AQÙE¼€0¯¶¡{8½çpÞX“hÖLá×è/Bë²×foÕï¸Te+±Érzµ$›DP®£·Y*ñ)E×´lªH±ºPËÿGËc‹q“6Çíˆ%ѧzVù;<ï¾6¿Ûš‡ÅpöFµŽ×ÑbÿÒ(þq­3a·ŠÑã~– [-B¤Ñz%§7“R:˜{¹/ëŒSå$ “u#OIL‘`Òœ ¦É{Ê·‰(“UßÖdÝ.8H”µ$¤ÈTH(ê:ßtï?afÛ¤ þ©¯3;bQcFÆ/ˆŸÖ2Ãåä l Fö¢ØP)Ͻ>G¯Ÿå&h¹w¯[_ªó¹ÿIªŠ–cŒˆâS·j#ƒ"è†×GÊX·ß±6¥.&÷¬XÈD>a(/§+~}ÃETô—,Õùé­ÍCFy9ìúg z®hF'd +¯Ñ™Oâ8x÷Âë·5š9¾Ë’¹WÅ‘C6‡ì‹ý{º )ZÈoŒÈ×÷â{§Â"•£)vÛ¶´©Y®DÑÓ4 C?L4½Á"£UùìëuÜ}yèð‚¡Ï‹y© .ôôáâ¹Èæ É,”rÿ¬ï^çâçcW?òÉåÿW®lÇ=š€u—~„ó'œ“ÞæÄ?ƒZ"Á<|êtðlw?·@ÕËo‰®òBÄïÒÂ4‹Jz%ªLŸgzÎÓÌ^n €±Iª ¯Ò ’s7ó•60ôô? âZ ÞÂF‹,-ýØ/ü멉!ÿûýk‰íÿ ‘“3Ú‘Y6I…V@¡ŒæOÈɆÍq ~„Щ³»7¬3 EHžMd1Œåzz¨èŽïBÞXÕ¯Úø›ÖÄ€ëÕ“¶±ù­3öÎß× =µ6²«uû)|ˆÍ»€BAË낌݂Ө¼¢ë†-ê$„zÄkà™IBV$T+“+2o.s“\~Cpëý‡e óšf²KrLF†ê¿.à¹Ó×éüUptû†AØ#xøtê1É"ɺØ1cõUÐò윽¹PS^8~‹AÍùFîe÷Þ¦ µû f® ×=ãì×=0IKz†åùy]ÍÓŽà2A>RØÊd"f¼¤aG¦Ð=ç·‹‚‰A  Ø.½yMçäVt£‚q‚âí‘d¢>Ë»ûSŸ¯”Õó<óïi…¬YÏnaŸ‡ ÌS½þÛÞÓênë 1yËsBdcdŠƒ‰Ó)Ilf1ÀÏ¥d‹·¼•»Ô8ÿe¦HˆuçÉ)[Z•¥³=¬Cü?®Ó/ZGl¾à» á:CœƒQˆ4ß©)÷b³‘Fm+MÁdb7ƒ”PˆÖù…¬¤6’vYekÔÙRˆ–r`ƒ½.à\$ÂEhÕìf¯ýlÆÅu±”·˜÷Á°þ(áu3¢;5ûqù¡óíŠ8³L+ÜYZbkõ?³§kœçÒ3œ@Ê‚¦˜å1 ´¡ÄÄh**ÿÐVS’b>òávwZŠ_ç§vwÉC›…(ÀÜ¡›‘Ó;Q-GxòÏóy™N¬dvvÜ¢­ úyÌuYÈ礤=MþÏÃ3é9’‹½¨Ã}¥i¿Pî.#ÿ¸Hz¦&±+ÚÆI Í0"§ Ê<(äK’rÅ,C¶N¬¦Ä¾vT+OsÃ*¬é\&׿¿ ¤á¯ÔÅýaÚ—>¢õxZd;°dmÙ†XëÐÓrẩAkíʱz‡Þº+ãZæð<³¾šYô}ìä˜lÛÙç¬.˜¤X‹†7k\Ùhæ²)ÊR¤„M~í79/âÁsh‡ì` ]ì Œi]ÙÃ1û5G€ZM½(·ÒðÑì$%ÃJI”^i•îŒMVØ3`$ÑV)Gf»s­L‚E¦-9'1‹ØyÝ·µ‚_Ia¨ä÷#‰×¹q‹ ålS°FÌèÓœø4OBe]dŽl¬“¥°Ç€Õ?V^æ¬Ùe)¤6é¸<›ã¦=ù×ôê tF‚ëuµÇýJ`3ߤ „=éÊ{®ˆê{®2ÒîÑpÚ2GdH{,¹r!Ó2Îk¶º˜a8Ý'm©¬~…Ëä­oðõÖÎfÛEûg[oËr{ÊìÍdg-ŽzäE¨ƒ ¹Ñ™È•YX¦Þ l*Œš7£‚—Ÿß6 ¹ñ.diÿ4÷:’€=(n“ëœöeýÃŒ×ÈýÏú'ÜèR”’(•I%2Ú„êCÃØ”秸æjÅUœÄI”û>ˆUÖx¿¥ü–úe¶IÍ<²ÜÉ[Oú7I {Éy¦+.éÄÈVnÞ}.Zo`¡ê#5QÐ"ÝÇãö*-žÿ×ò?£;õN Ì&GÍJ†¬œaðÁødoµÿ?uúÂ)烾.gÿø}-™Y’l‰)šÇ#ª¨CHÿðݬý•´ {±iøuðàD—8‰6Yüý2P63_“;ŒAuÔ ‚hÃn“Ï©1áJn/m¾B_5…x]`omVõ¢í©¿6 2'ÚxþÀ0•ÒÑœÞ km 8^ãŸox´Cöð§Qµ’ ¤…¸»_S QMAj²üdº¸Ò?1ÄðƒMYkD(ÅHó;P¾Sém…6QÖh“§á¸ðÒ¸"u:0æ}¡&3I/*ÔëÒþï†KzeÝ*ûïþ¤&÷?S8I±zŸ¸–%`&\~¦+ØßÚ+æLôæ°&Øc©ýU7 Ý`ãY^]²+h›¤ìõJøŽ‚2GîÆíy9Ü×?[!Ùþhó˨C?ü*;ù!,HÆ÷þßÒOöƒ|ª¿zD2‘Ê •\êWOAI€ v §N” Ë«ä Då!3ARô6'/óéå Ïä$eGY8k‹þ¿²ïû3ņD\'ë\ÅW"&Ó£²þfÚ6j H±k #bÓßÀ–:ÚQ²DÖnGNl”Ú´ç“WÓ`ÕgÒ ó§ºÈ5¬Ážõ‚€óS¤„Ñ[§Ä (Ü4u“c(lÉB³É±AbÁ²:ìRmMdÀ %l2.+;}Þ2­å²7,HœÓ¥Û·6×s‘q!¹ÔˈWH{Ý>褧<-w$&îå£q'ÈéÍ~t(D%§&´·¼p°óu×­úTõ^*07'åRÖÝ÷K‹MÛÖX×ÿ<‹×Å¢3,cD"º–[gÖTÛ&2;ñשË@ÌÇÕhÎhNœ‘5.ôW€¢{‡2¸•gbüÝâK3Æ …^]ÛZiP1›y.F·ŒS_ȱ溠I eódiîÉ&¼îZ;Hßeka"ØQ_¦•g lµ×ÉÉcäBc1¹nÆ¡¾í¹9FJÔvˆ8ˆA&kÉêßX$ÎÎ cPAŽÌBJTÃ"OUµªÚs’ý/†PG]OT*E©N ü!Ї•ø¥Ï:ÍT±êwÄò N OAnéÂväw©¡­m´mæ#4LЈÁ\ˆ8 xžaàwPQÓhZSotj"‰ÕOS¬‚ еdŸ3¨XÕD=F¬á¬ZÉÅ Z9ãmœ¹9Û3²ô¹­Páˆ@t§V¨¨œ³4sç$ÈhÑÅ<ôUµÑ2,¹«vO¿ OOb3§C¤QÏÊ[¨ôdÇIJ§ïÅpZÏWÉðfØŸH„§ªr/k‹MÏF½–»dÆR™Môž*UäÕÇ$@ËEQ0+T—"—\XÈ õ£€ÕDØw$ë»üñ爄íKE-ÓåðUMQº ŲŸ™l¾o×Ûº} R%=ò›óNècÓœþÈNžÐ_–‹Îw e Ìe(8qƒzà}Êáé\¬ ñ\ñ9A+Ø¥Ïg£›OR‹²yŒMRMÙBíôr)F½—îûÚÆë£=¸cµ:0*‡]_hh¶Ô~‘ S#!Ù€×O_½U+=M~?÷‰wv¯§žø¨=ü˜[;û%¾ÊÚ‰|@¥íL5÷…Ú“š¦†zödpG¢‰ä_Œ¢§˜4~EyI2ˆLÐ ƒHÝ ~ì#;®@Øú8#ZÆÍ¿è>iôŠ»¡"”2P]§ØÐ~Í•\﫜œ÷º’oX4iOxå²ÛÄÆ Zmv³Y¥W鎥'6ýNœ‰=>Ÿ¢ô‡ST7€_"CÕô€µM8²Vô•iÈûó5ol<¶Væ_·ã· à¢4jâAòµ»PçF×$6aš“`*·‰ãŽ J¤ñÐImĽ“›qp5°½'•îáÛr<&¬hö÷èˆÇX«ØfÛÁâ3JÊ|!®ZFÑ‹ÁÁÝ·Úƒkï~¨Hl:ÿñó@¼89^¶>‡n:IWËæx+#ïÙ*`ˆÂE·;ƒ°ÂÜrØâH‹ p×]X©>¯ý;ly'íŸfäþîk<ͤµ9n°v‚ºk!\,çj…_Œ‡-ѹHk´¬¸“c~5J5»‚åÐg >sm rßȯª$ð5S¾MÂÒbTŽ9Îúâgâçf½¹¬An¿‘å »^³~€ÚXxøsyð ï?ù±üyÙ—$Ϭ<б98 u—}ïm܇“(T ûÉŒÕJÝ´ó¥­QW¥4ÃV*nà»|­à;= x%ïù5 tÂg*sÇö¬¤¬C·¾^ û‰\(ƒ—©Ò™ÿÜ…þp.§¶ “u_LYø_}œ•ƒúûÖMåq¢‚Á# Óˉ…˜]/?UÍiÑÔÁ÷­†PA1¥Ûm$…Öªâ=¨Ýs½ 4y„Ÿ‰[W>¼W岯?Ç_¨7“sMæ…®­bÛýÚY§^r–'—þ^9¨NƒQ©é4,¡Hº(ÝÉëQ_ ž¤ˆøÈ4轱ᢠ˜b(W¶RÐZ:ãiM¼ô ¿RÌT‘oÚÊG« ó–O}HZG£Ã,[µD¡{ [Td ˜ïùKP®F F€¡þíüo21£zí<ØNò3NqîÏ –<’\¬Em&‚³ ߢÍåªLRÛcM]ʯѻÖëHJm>'1î·§Ñ-u¸¨Å“eB1çnPòiRßÕG#~´»™„yÃá7;étv$÷¤Û'BÌÏ#TD&Í[KÜ^ÄdÞë4S¾ç°þ”<ß4¹‰ÖY^¿âг­2WO³öƒ/ƒ4üì<-¯H>][ðÖß^F˜Ìc1¸SþtC‹³>ùâìjÝyÂâå–‹ÛŒôp¸›Ñé4q¸M÷¹x¢øŽ$ޤþM›§Ëá6Š»J}­ÞØRðK~†Ž kRµl¯tÁàMð”É1ã<ÐHÛë'ø‚ä%Öê|,h^€u:õ«&ÓxTÏ{’ äPÓbÎü±VH~bÛ@[€:etЏ@ÀÆGremc݈ÔºÙ\]>èHÚp̶Œª\ª}5gÊoçßtjT )ñ>´€¿z9.ÔÛÌ˦;»~ã@óo¬b±@Úº÷¤úNî¨ß2§õ¾¼6ùD‰"|Ö8<±^™ÐæýÓ ~”§@Mnã-Ñ€\æSNã|4é‚Ý ÖÓ)HÓ6û¦Ù½Tþ´?« Á¼ÔÅ;û$_Ö Õ©¯4“yA„&¾‹˜+^ÔDBaê“„}8Ù|B.RÙBAøö.‘vü -&ô>¬©¥°fwá•@w 1%ÿXU »Uö^6yYú=&æÉ1Œš¤:РéúÊ%deÿ\ 8fÞÏ1†ý´9a÷döÕ ‘‘ÉÿÎøÏ£üºìYן™ÎÈO¸àÑ×MѪº.Q5a'“ï&‰$·…Õ¼`}è3ÍGRî#{y9”UžRˆÁÆ~o©‹Âìø0ìlK™mÚÆ{Ƨ —/Ò&“$­üªT%Úï?úÏ«HhêzKBIX;Rû¼(ßH!„s7Ô ×, t|:på•ÛµŽãƒÎÇj6‘/Çx#|f8Ó¢/¤¯ï<v7âÔc! RõPßMy[4JcX Ñ“ƒUÎÏR9'ñ+£ºSÉà_ '|pãV§µ˜€·Žs‚Ø6þb¡Òù‡X€—ötÄ‚¬ÂlÞ8Ì‚6A·aÌ5A¼¤7¯V3®šUâa~iyç'Èî<"À ÎäÈ¡å;qX×Þoú©Ç× œ¤Ñ»J<‡¨YüA »òjÎþÊÍ,b`ÑàCe•|Óö,¾‰èI`õà~mýÉù=é"…ÉUa”ýÆíŒÇ͘-MÆ—µ„Kf5¡Ãe¼‡¾Í98pU êrd…Ò8˜pdmŽ©äÁ‘ÍQ.³Ö>¥ nî †3Co9‰ª~Û@‹êDʸQ±52æÜŸ()ÑkX,ö[¹ÛšëP˜ßËBM qiëMƒhJ¶ÑÌ5niæ¼7¿ð®ÆØ$¬¾­õçÁµìì1T 0\ªÓ'L1tï½éð+nE'¶MÙ ¾Xï ®öê2{‹Á‡ÖBê-¥5æ½És¼„BF´â³Þ€o¥ð3ù–}tئœš×¡ëH$ehÿuoèáÒ´î–'¡ÀÿÛj‹Ì¡ˆÞO—¨…é&ª÷ôA¡pn€é6ˆ×ˆ“]ý(¾zä±{î¿?#Q$(r„^§C©òÏ+7”p¸´ÄŽF§íç;~”Nw dbø\\†}÷Ïpãಉÿä-B÷ia£ý­MîQ}ÕõÓ÷;BYíõïusÏß_‘–Ž’k ä%UbE˱S5£øbç/*M¿S+%y0s·†ÚÖÜlÔô•“„ ›RQÚ(¬÷õç.hÿTZ·Þq÷?Ü ]ÒÆ¡¿ÝÌæ²}Ž’_;ݳRö®f$ò/]hTo–\Úˆ¨g‘?dA²º4¥uÏ &¦-Ý•>WQò:8(Qío•ca„„Âõ2‡ø“O0DÚ©žÆAÐûV}ñ¤/…ãÓ–í«p³zÿËq´V‰LãÒ]d*]Õð­=ÖBxÃ-ÒI¤ðÌ¢/*ä·z%;®–åÆSî ¹D¶°2î2G‚B.Þ›P·ËbC§$ÍPÐw¿Ñ˜W¶º(¡°ª‚ÖÙ*²†'²æy«±¤ ³”üvå[h ­Oÿ™vÜGôÀFá8j¤Ø5g—7-g^+ä-Å&µ8 ø Ì•;ìmЏ9ýö®²Qõr_ò+ëþxX´G“{®i9çþ~Q&hN6Ñ"£¥´Ò.þµÆÝD:§e”˜1ú5 ý›>Ö1k£y?®l©´ì¿¼³^Ï"ÑŸ¦=ð“ca3ÒÎ)´e¶o絇ϯÊõ¶6!9˜5–µÓmOÈäs/÷=µå”SúïØ&ƒ‘ô¦a½(/ëÇ>ŽY½pë5¹Ú“pHiF·Ì$XtdÞ‰\«¥ìG¼Û‰FàtÑv¬¬vMå´5­ŒU@«§Ôt)]ª† Æ Ü„ÁqQH˜ ªLbHÅíâŒÆÕ$qD‚N¶ñÈùïÏt>–Ï ¸êÑT†a6 h¬¬²é̆Kªu>ó¦Þ9Sy"€…ÿø{ú <¨[T|f‡Ðª/•¤˜ÿÝ=6ý MÜ™~З Ѥ0T›!dÚÙ^ n1G3h–àûª˜‡APÚ—~D5Ysà_Œxúy#|´ýÚ¥¦±Üù ½Éf&cv²âºKFÏõâX]zNŸc®ßGd÷H7îĹ0ù™hÍý‹0¬´=RÜvKuµÜ[=5:2ÔÞµ+ôPj”ŽÞãÓÖNb9²LfbØÁêÞäCª‹[ÎŒÉ÷åvg!„ç•™Bù,Ö2ô5ëwR’9 Àà÷¼IëÏû½ mÎÿŸ—‘Uæ©Â&uÙÚÚ9aÇc-Úm^õ߇u:Ïf?lœÝ%læ„=?œ[§S/P„~Išc³ŒD1!_J½ù:‡º“†¡7éYŽöˆùÄ“m®àÁÕ´^?D4óZWñü¼ˆ’‡+Iq6D$ó‰ìûg¶°MD³v¶Å·„ð=°[QfCÑ4nÚ®\ôМ—.å cú4Y»½æzËÏÓi›—d1ëì5Ó±·™‘ñãô= 6rÀ+ãÂᑞaR  ?ã“næ‘…òÒ³]ÑÛV'…ÅùSžD€Šc±=]h“AɯXwˆ õËJm5 «¦]l©ZŠÍ7ñDÚ)è¶®¡þ?8ét‚éâ$ªNêˆ?]9mbq2Õ¦ïq±™üó2 ÊJÇ*`ƳD˜x S±‹†vŠÞ("|yàVEÌUùãùm%‚¨?ÝCOU£ù'é¦QU%ÔÜZDÇñ ËU‚ž\¯Ã¶´>ù±\¿Çƒwå׋Hb?>éAí÷³±áÐê]ìeŠ’öÌ^4~,Ù1;ë°n¬i†>æ™û)Óô% I/ªPø4Ñg뮃W]„®`T")(ÇÕ•._>±%ª-E,ŠYÎtwñØ“ÂÑ= ‡˜J ˜™¿3hK0kç;öÏݬ Ö¶!lÏÛ3=|*’²ÁÍÕþšOÖ|ÛþÆcÓ{(®yÂÿÈ™W€µÎeÀÿ@EiXY nåÂjòqøœs{qÞ{íÚøWW1™]c.€Öû»D“J· ]U„+v´çX½V“²ÃÍp@â°Õ ;#‘ËjèÀ?c&ãnº_.öÁ ›êþ@4 s™õä ˜Eî7_4>–ñ¨¨BLóŒaOrF½¿So“ðB|’1E—dórÕïf-ªàªŽB©àÉš„¤CI ž˜ø-ÆÀÐÌ&ji¹ÈI½žÓ%9DVŸæéòóÛ7~ã<;éÿn:™»{÷ìiÊCi>Ô¡†£‰ \ËÇ·:H÷.}$SúBy8ÌiiHä|x Ô ·„Œ|/ù\}r{„ÆHÛµc[=BÉn)å•lx—>*‚ú ±Õ#‹°¡VÁò}ßifðg¶´°¦Ú€{‘Ã=¬»Ì_¿°†þ»¬&«è[ž)’xë± En›ïf6bÆò¸&/ga)g+/äò7VÑ=;!œî“µ—Et¡â цà5ø…3ÅšÛß¶íÐ-C¹ƒ PÚ#RB¾Öw!á²Hz.òpwãj”2õò£ÁÔjì\ÃÚ×¾Ëø^ÇQQÉnŽôî&§3Ùª"ó‹íöâšF tþLÕ‡ @Û}èÛû"¸s…+F¢,¼qTަóQëW¦À ¡gÊ ÙŽ­¶ZãÖ’÷\­e·¤7ûÏtÖÀò™ºœäG‚ Üu OûšA£åd§˜c¡ˆ·Ó,è}Ô‚úÛ[{‡<ƒ5*¡ÌȬü€ä,çx¨d…JZ¯‰?Æú¬NÁÁ_ÿk“ªšn|Þgƒg" ¹–qøibÏkùAë©â(ÇqFÁ’~ѫídËÛ¬6¹åqœ¿Kµln"˨£fv¥ß,Õ™Ok”i3Ü©#›‘¬Ë&GÁe­O¹py‡'vÖ0ù‹ÇÃ÷xæéKªäÒ›Njß*žÀî85ÚMÛ«PÐx`füõ˜5ÇçWhˆáÖFCðç[”°„.Œ[äW7ê™HÏ“Ýo¹;ë(Å]šõ”u4Ä¥š èòCn@–ÉB%+t˜íê3H— lKÒ ¯úßµ”·ŸYÐ&È™àóB {Ƒ뙥c•úàŽ}Íè ]e©?¬rTþФÂÃd§¨—|~·bw” Àö8ùJ{Še>xEP-f·!±¾k+<þx®åO‡FŒå“P$4©ÑûÊù·F/û¿…LC¨éi2~ý# zOùb …e®)5³¥Ôª€wx{_€Ù†#‡¿_b'`£¨ÀƒK` 4ñ@ã>Yö‡èë냑‡Ø€‘Ì)ÝÌ*?Ù/YŒU¿ïJ¢÷Ÿ” H¡‡HA`Þ?ä êÂøÍ æ=µ?àÛJ`ˆ2ßâ±Ü¨pUK¬H¥)ËR€ª1÷è¡g G Ó ‚ÛËîqåˆt-½óÛK-ߦݼÕG¡ÌÐe%иFæÜvÚ°Ä¿ÇÂÙú‹Þ?—#Ƥ¨Eu) r½)9à;-H=îNÛl`{HÑIF$&T·¶)˯Tl-¿ÒßýÊ2ðy;ÙRÅ53‹éeœœú÷cN­Re§^²S‰†¥R±)‘˜®2:ö ÆÇ&·³¿g…W¶²I¾–Ôf²d„½ga ç'@M:Lð•>qÂ7§Ê©¢}ž™•ï{œ¡E¬÷1•k‡Ø&~½æî9±7Fp;§±ôÞÂÞ&ÛG üOÃÅÅ@GÒ(×÷¼‹ .…® Éæ*@l 1PV25+Ï bf@#V—9TÑMð9°Üu„Çf.H“£Êì× Cë¬ÊE¡Vm½ÝëM  Ü€ö¤„ÇÚJ è̱Ÿw˜èP”7ÍÃléºï´ŠÏímGwð¢Äô]’ÓBlÛLS®)þ ”ݯ®^ñ¯˜9háD“ª}}H¾FK؇ó³ƒ&,Ä0òäÁc{OiU§Ô‘*ý3Ø~™7 ¢ÛA´”w£Û>F^WÍÀr Zû½SÀÛ)rÑ›°v)TÆÌc…oê•'ÞÆºác[W‘àˆ¨ =IPœòÕ¤*4î7sY¡Iý?{]6V&‰¢nn™Æïx³³p&x³.T±Ü™ ºÐ2~u|C0X‹] ámû¼Â‹×3{ñ¶DÄÒZ†Ù¡.·òøYùç®q§Ñú±ZüùÚ»’|[pzé¢{†,`7HÛÖ]ñH<Š’Áމ[ñ˜ÜæNÛåYé z$L‹ÊW,Ê}”ùW+{òrØhãѱÒÎXxòÁ„®QÿŸ³]‹ër¾e)F™'âÉ×߀y /vl⸷‰Á·\ACB“^1gÿ0›zT®‚è'½±iNÀxM]ä%q•bÜ`ó¿%póÝ=÷ï ž FA¨ðþ.ü¢p"ýV€IŠâ%ÎJÀkû@KN‘ˆMŸ=£n{ê{ö ’Øü×&¯­.7½^¶%âåX*ªŒTþÛk|%»˜v ,ß ¹ÂP‘Cm›-ÿCçtÁ×*R tÞàŠÞÍwkŒ×i”Ü@=*©ÙaD7ïÌ`ÀÏÀbY¶òUbþÿŠ3VfﻣFÑð¢Í.f¬ÞLI{eô7S@&Ëån™ý³äâÕÜW@áY»Ý³F€0†m9à¹ÀÊ/–|æH %ÙÄzá†(ÍÌèw‰È&Ãq)8(`”ÛŠÓ\ƒÃC>N£ ¯ÚTôfó3Éh–ÜíÑ}ô%/}ê:I^º—Ëby¡øÀ@{·ø€® }‹>܇“ Žªè™?Žéè¿ä.Þ×?7ˆñÂ,–y–&ïTQL•H=ê©C3(qðÑØýßVý¹ zñÿFüæ òæ½/FÊɈíÁ¬÷ß``(…èx•¿ÇC9ªÃñ¶'šƒ<²c} ÄŒ@ÉãS¢C?õò©0[Hço·´ý´ƒjïü! ÆØŸßïã<á,^Gtl›s[*§·}Jæ€ Ï–þ™À0f‚ôÚ&M}ü%#ó.Û²«L«/°:&S{JÚVeÝ‹'›¹Žf6ÿœ2ìqï™4· l2UÑÕÁz†¢¦à¾ ¿–€` @Ùi÷VEú¤}àK.8ùù$ä%ý?‰û¯U»€äv:# Ò:´…ƒx_"0fnÀÛ>;ýtš¬°þ9K€)è ï¿_} ÄÌá:¿µñö ¤ ;‡bK3~ „$¿Ûs=P6¹Ãç'ÌRÐK†ÿDÿMQ2Ù”@aÅ s[áñ½!Qv·ák:_T“öémRM÷=ÅìsÌYßT‡) Ù6ã 9Ø”#ôûs‘û–Ç`b@ÿS‚,ïútïš°ô‘¨DåkW•’”9”Uœží¡Kw²š1r–H5O×Ç¡ïKY×£€üwᆓð<诌ùn0Lˆð?ÁàݲúÕrp±@§ÎZڇQf%Áó¸/ê±…*'ö\]kévmým‡‘mÏ–Öó°rú[w&;ª]·sfX:]l†ÇWÔE‹~–ÙnÍ4¡€Ô±œßyœzIÂÊ”£|ùQ¿Û·ß¦áž=4¡¦½æP¥::ýx ‚Ï8ŸsBL,­a`=‡Ðª¾D¤öã v\à!¥¡Â-Êhº4²{|±m€½9[EV׫yáÆA™˜½•Ño±ˆìX „‰-Ã=ÒQý—È|mé^ë%¼ˆ˜¶Ám{#"j_¤%ÒbvÉ0Èpô2˜ÇÏLhðQú…ˆ©êwTÁlb†pMŒ¹=ºÌæïïiસՊ|ÊæýHÏÃq;°³ò¨üì‰X`V¶8@Œ¾ó%ÄÜX˜ eð—™¾ˆ^TBÄî] sî*ø="²g³y«–¬êü×·€ÂºÛêsÔ¢c•TÍ“ƒïr¿Ÿ§Ã–,ê©á°Mö#Y-uscî¶ÂˆÛ *)# . (aŠÊ}VÆM•ª_”ÄûÇ­é–q'É'ìZwu7_l»ÞáOùÒ÷»è³ôÙš\%?~)ôÂPÎÁà{a¦`F'€B£Tƒšß%:-"UåœD*ð'åN¾…¢¯œ¥Aüð®ÛF-¯\Ûê9R/Ö[Qô¥=6.f‘]¬&jšUOźÞÛ^µë`M`Ñ Êú^qfÚŽ…`§*kð«àç€nŸ¹’?™9¦SÖÒòP #R¾ž 7ÌÞÍÔ ÿu G«CjÚ殺ï·ÿe½á0 ¹7¢ƒAȵ0^ÕæìEWá°Ï«ÈÕO°_FãmÄdtàO)LÃ.¼WO¥ð|/_,NïÛ„n4€w=ˆ†=åÂek€~a‘†=‹–ÖŠäE ËÀ”Ôî‹ñ`,ÿ×±Èɧº@¶”dlÑ6ØIpŠ¼Ñ±”HaA]é¥U¼Í.w.¾µ¿¿„p¯$ÙÊ=ÜÛ°¢æíó&OTŸ‰·ÀrŠŽMˆÅMБ'ßüÔÔ~6/Λ±#q…A9À÷:ØmQGqFá”ËæR¼Î³½z­î•þ ÛûšYÇ_'ð´Í›^b ƒàƒ?„£´3"RRõ|GFÄÕ ý¶ÊG¯hÜ›ÜãîTi»WÁ;õò[RøgõÔøïåË`sÖ óZ° r z :é_¢.olì–K)‰Œs•-T ;Å/9ð2¾æ ›ätÙ™l÷ûË–'‹;ÏfQÁ°åýZN÷ž)îGÝòU¹å¸ã ÉcåQF,õz]­P­‹?(%¯'‰ázŒòV‹êÑZf‡1*‘8éúHçŒ~;{Õ‚ÏX–_¶Ôcþ$±Šõl­YÝ–kr¼”QYýèÙŠ¥ Y5åS,>·]oq-™«ä{XNPxåòÂÊ…‡Þ 2vS€zLºÃñi×Â8*£äJ/=ÆÄ£4×On>sUsPŸ› Õ­X†ø%ù…¡ô)‡éd@Ci!Æy–ž‹UŸIè©a‰ó+kƈ…ÕÚKqíÉæ "WDüë±Ôô)À³î'ð¥)ÆÏý#¥Ÿœˆîs¯ =Ö E1¨jn²z¬ñ×Î@¿×\LAa#³yÃ0~7¬êž^üxH°)Þm0Ü¢!Š} "ØJf~Ê¡Ïú‘ÿ|JÄáw¥þ€ÿ"sú"U³3ðJêÄ /eUtñŽˆ¡Ñ+Íß%mù;é~ÁÓBì‡ÅëF ‰÷·WæE%„ʾóVñâ|í2€!4­l´ª­:%üRØ~÷YÃ-âgWE~M4M?›í´àHeKœîo™7ÄaYëà)&öPcÔ\E€ÐíÙ‰âêYcœy J?–ë?¸2P¡ÞaðjÚÑŒosAØŒ¼/ ø„õÂ~&3ehÖdÑ!Ù¸ƒÎ:gçñ¯»¾„ѶîKäò¢µW¢OXi«‹1+­¢*Îý)É¡]øð¸2Bò „IëåÛþ/nÓÿöE9µh¿åÊUì¶Û”ê‚΀8û]Ÿž3É¡8‰1èJ¡ÅÊ5)ÅÂ!¨³ÎS0 •ްy«ùFO×XÖvÜ]Â9î4# ?la<Œ†’D´ƒÅôÓ¾ÆÐ•º üãªA˜c‰Iÿ±¨â¾ÈÇÉlzqyAuÏBÒ–šP0¾Æ%<ºÞ™ƒ®ÍÐý ŽŒä öÌ’‘k¿Õ=ïp[BpçáNÆ .)dÈ—ä9×} ‡nq{×6æ8èŽöÃÛÉ\{Aëÿî/wœWüäÓ6ǽrÕι8åÀH‡9 +5N{TÓ÷÷Šy£—€&½©×bÜ*Piañ "킇ÇNï•l‘r~¤mF´a9€:ªÅÿîä¶þõê+9 ß=Â>êç§GzÜé¡ñQø$m¥°ËPÙÿPŠ;¦ÛV+P y"Œn[tM°¾Mj³qãë’3ܤ¿Û¤M‰ è¹:ç#ºÞ~À›JX‘i¤L²<‹vJdÇÿByÎf.ÐíSfôI5&2–5)Íf`gìÍÉñÏ`XСê1F³¶sìêm¥(ݼÀ¦]ŠÚ[悵T¤½ôãÌ0苾^§a¹³¼¿®û yâ??Ái­Èâ©MÞä­»ž*J?~Çä…dôð#+GÜøPÈ À‹û Œ%…_–ñÖ’aç5 é³çºÓžM»K.ï_‹³·$ÑœŸx7äÕ.â­¯âzþE†©Óa-0åëDûaôuéäÉáY½¬v9)IRÊÎ÷Â…Álpœ—ûfUœËû‰ZùÎvaÚ>c™7.Ö:ŽK£ æ%˜“ís†0ݪ©ì’޾úàuòe$C±<Ò·}|&TPõœê-‚lÁoyê7¤,“«÷±p¸,0JÜTXŠÃ“ÒÙr•-_Cö&Š·U<…Ñm° /uð"÷ñÿY…:šHDj¤Š¹ÊJ-ÝyÕUÆäÏ™Áû9‰‹PŠ {½…Ö_ÓkFö©°á;Źû1q?C²’½O±/q‰,nÉ–¤þCRÕ ÓNþ ·p$7íÎ6?;Ç ’¾ +&áÏ`­á-> ¨›Ÿ7)oèEBõ=Z ’}­‘ ò£fU¸‰‡;¬)5!8ˆc!Ñ€¸:e ΀µMªÚùã(¤–º#¹EXœû]½Ë=Š œ >k ¯É_ žü#iÈlê2çè›Ñy¯ŠL!Sa9âô–@>»ùzÊ„Cº°2-#:@òä÷Ɖy¤¥à‡äÞòX eñ(Šm9&éèÍ罹¥1(ÿÍ<ŠLßqM(»Ó õzædòYv[lgGä¦òàn‚ºÔ~®pÆ$KX}äP\÷ÝY­(?Û¤W:ë2žâ5’+xv†„Ô}Ö!ÅħSJ‰Éju—(“û±Æ­CPVYá›NXІ]d;¼ëYNvÚµß϶D8"­(ª+L^îÏ’®öQ¦ŒlóÄòÒµºõ¯^/{.!;ªäükÞ6ÝO:‰jaŽ Ð³ÄÒöëH{FŸSWÆ7P{?Ê©KÖüÕxdñ‘æ"o5YÂ:‹9ˆÃcTâ¶•!b[Uò<½ërßO8W%8ç?ÓÙ¥œòKøƒô+|ùÒ(a¡7µKŒ,?< |Õßlêzòg­¯o.ÁƒO ý&+<8üª^MY½Æè ¬£õ/¥’{>×{Ù¾é±ó ¦ê©°o>M6€—Ü,§ýrY›ÐB¥®¢ò¿ï´Úæg§.½Iÿ˜Lþ?î`ýª×gùª¨•ßÄõ4D©Ô껩 rHy|§ÀÐÿ§MZȈ[Tjçà‹ÄPSV¡VËå§„ú×Im•};R„ö“÷üá*’Ê®Òkn:-ù—ß7ÐænÀÙ‘—{Nkò1ê•VÍTý2ú’$3¤”‡v ØïÿnöúÞ[ñö2PâÙíUí­*9ÙÈr2û5Žõ°Rû¯N”i]6RÊÌa»k·P f.©ýPÑqÑQñõ†buqMÞªùâ‚]¨òÔ³–GXo¥æwÎRÝ„9Šîå'5«K8UÓPŒ'|5!w–Á¢œPÄpë„qPuœýXaÌl_ƒ(Qb³Ã$ÉóCIïŒ6·i¡ƒ,•‡$¶’Þ§,„Åps§Í5R¥ë•QÄVb&êI y‰ÁFà£À¶— dæé€xBÁçÀdѦ"+ƒ ®Õ«CñòiÖ`¯^§Ú 0ÃØsk*[@’KjôxŽ5Èsü’\Õ‹»Ñ1íÇ Þ“¼Ûc*$þyDü G–·+ÛÞá4äör§ºuÙ+/Ã3;ƒîFR2õéËm¬C³úkï¼þRÿC’Ö•×Ç/0º>œ“¥øì8å9âŠfÇÚ•ZΓóv‡òí78TÈWÓqùΣ_¥+§OOrÒXkͺyº+c@hŽÓTе^@HgDg{KŠí'ÚDºÀt?Qyœ¬ÚŠSÓøÓÊ:î•v`R8OÄàí„§÷lÅÜYˆ6ôGŒ£ù•D&bKü^Ú˜TÜ«}½e€"©éHO4™j±qI<].!¹Á!” Au¹-Ù«¬ùó/¤±TŠë10ãCž,¿ùÆ> ¾Oµl°€4£ ®É­pÍëì0ã? ‘¾õ¦Üf÷%ëæDöiáSm°/"0H~½œ â „ŠÝW<µWpYèÂqHU|m¨ÏZço~&W¶6º”§ucwá+΀Œó½Çµóˆ4îZâJ ™ÅØáŸÜ=`1.­¶R¨i7÷D†G¸TYvºÈ}‰gTáCÂ)îùý¹éEâ~÷Uå¥òÞQ;?H«Á%Sàê×W 颷Y0Žkwn‰ë*­?åŠ ‡ ûÑßÀžŽ–êúõÀ1F¸™¤sƺ¬ÌIØ™’:îcá²¾$jšö§¤›«öIø©òe3™*j—q"‡Æ óíçN`A^~qß:‚숳)¢ÙÐ¥ÙP1…Ÿ¹”V¹8ê·Îq”µ«»aêê§Jט±{J7—à|×3ÑmPlÞ¡ÿÆ,(š7ƒa«¡…I<®Aöà\…C¦Žr/,´Ÿôñ*†¯Þ°^2Ø¿åø1#H‰5ƒo-QÆûB­eë7cÚà|´âi}©|ÄUϦ‰,ð:¥=%©µwbIvÛ’¤áb-3å¬Ôƒ+ò(§d¾Áyy‡$e£}ª¯\¦)zÌcÒu²¼âgßÀ¶Ô+º~fè5âò…ܼ”ßÚós§y(Úùp2^—9„n][ ›FD²^QŒÍ,Oéã JÔSÓ-O¿X®Úy`€þYD$Ñ"YG?7;kòƒø L ˜‚£V:¥•'åqYô5Ö? ^»âÔåê(/sÙGÁZËa’§Ž¤Ñfñëõ–ÇF™oo¾ ÑnªgÁ©½Ÿ›CÑ©ŽÁ6 <é‡R%´¨(ª;’4øºÁ¥“™ö€ÃÓŒþQ…Dž‚Ö˱5¹ÄI¶2Èup¨?ª¬³®ŒîÅw0–ðïxc»T&v8瀢FMµòMtOyeª’ŒÂ?1øÁ©Eî­Ãbœvôz¸8CÙÖFëÜ€Á-ñ# ƱËó½ÈÞd]n•Z¸·½“~>epˆ&~nË­ª.{@“¯:5ÐaWM,}8g—ÓϦ§ElJv¦ÙgÕ÷Œö¾¨¾‘ þ¢¯q5ðö^]c¨TsŒo5‰(pë?¥ „š¦e—zÓÒÓl1÷ÅÊÍ  |·ÌŒÊ©LW Q>Õq!çGìì²P®  9KLÞåxˆÂÀÞ>Põ tÜGç˜V‹'gê}Ïä §_r„F³#œs|Ö"ÅZ‘-Â3²¦š)Es´Óæ´tš<Ãrdjkñsm&Ñ̾6ß²rÞvÂB¬Cƒ©õêè&V6S•,•Agçöüh!%– A©t\jj® =qCÄ^ ºsÀ™Ùƒ4I¶FðÔø%Ô _=,J`÷ç)ÐåÏbÏU…÷ÀìmGñíМñðïÁŒL»‰UÔ¼¹{[HûÁÀÑĘŒÍi— ÄÎÕ¯”ÏM9oÒ¿Ÿr!Þ"ÛúLEf<ÜwlZM`ü°àŒî£4#Ì ;›Ø©+ôá¨{µæzÕòß9Ú¶õ³7èä  ïñ·½md(鶘ð燈Ší}ý;ŒãÇ\@‰{Fk_ÒköÁœdÑÑpžË¦ ºiÉ(@(½ÜþìÀ}ÆíuÙQ§ÕëÌÔgƒƒ~à¾yú1E$¾k÷=Û\¨G‡¯^½žiuZ¸¬±ä2'^J°FÜlzŒ‡èõI|PŒñ: ª;Yi4.x ¨Ö4\¿ §¬ƒ¿yÑó.âBÕ>³{Õ™{®Ên•FÚU±›­PŒŒ9gÓXjø+èù (Þ¨UÝgß r·QöfΞ{‘­j‰r|Åá3â`áe;yÝʺ°hiA•– "ìÐä–Zã m¯cûÇ—gŸ´C`Rax5iº…¦k9‡Î_’ ´¸jí2øá31€ÂÏå’ºE2d*îìpÞî\óîyÛ¾!!iìèN+â"Õ¨ýIïý Aõ>¾×]›×˜r©;l Š€p¹"âÇ…õ¢Œ°Ý”ÆpНh”ÃÇÆÙbzâÖ£GÜÆYJ[bCGÊTg1¥i úY<¥ž<¯—Ý­²a>ÃÛZc/~g¼’åÕç]Qä™@¤°F¤2Ji çsQbQb8è6*(ÛØ»o†¬æ".ªËа¾ç\þݼÙ(‘Q”BÆñ¤ºÞ-ýëè < íPON :oz†n`Ðð¸_FÉÿ88¸î¼ÒAnVü>‰(A³y1}«”àÃ3é…2øª¨Ò+Ðþ »ÅÕ“äV¾k ¢vždžÑ“Û >¾°B»™Chš(3@gЄ;Í…_|Øx îzyÍkY¥ÐŽÃMATƒðíœ(ÍÊÞ¾ÃNd†R´~w‡…é¿b&7†õPV†«Ô˜È.AIÝQ¥zàvu²¢„º]¿DBÒpz±¬ó§ˆ(ñ3§&¯f‹ç’Òî›Kác-ÞN unú®ô’S{ß+yUåH4jj,*?p€ÑÁS ‡”Bµt[,b¶ºkœT!7fJS·9=æ¯h5Ñänsšn±$†Û´ö kK_+àU¬V‡ä×VívÉAÛú’PžïÜZÝ÷¾b+ty{NЍ–yûé Ô³†h }àoïyÖcb†¥®")ƒcbõG=ÝlY«¢h({ù|¶‹FÛ¼ý¶½sª¿°+yœ·diø’mRÀr·Îºµ2¬Dû4³GV"s³F“)¡ƒƒõd6·[°K+iß—OÐè&oæE£–â†VÁ-DªL½vlÇ naC¾BYž~¿;¹”Ÿç€, ïêÅ`ÔM3#W-6h˜šÉ®•¿ÃTèvûUì“#Ò±W2¼åž2¼™FLCþŒ½÷>ü¼•‡²½2†Âô¯sÏ%B¹AZ?¥<uŽxºm}Î…5Ö_g¨ô. ¨†ï5Ò–«ÒÈ›»íš×#Ü$ ›9ôö΋Áù@¶·°í¦ ©û§‘aí©¬ñê]ÙÎêË[Íû*aÎ ÙL·ÕÔ}ÃàÇœmz3ăc–ä&ŠlîŒcbæMG¶°—”-OK%I·ÇIàåö¦.L)ýEü|^ÜvÖIA¼5îº:ƒ§\>¯L§vžãm$ÒÁª§Àyª9il jì(L¿Ã3UeRj)¡dqZ7ÛmÓ††ºåŸúXêm¬UMLâ0‡Èû NYO+_†•–‹qÕÉd`™îQoÕü&͉`Ç"¸Â°ÖYÎd%¥Å`,j d5¡Yæê§˜¹õΩåïØº7,ô¤~r9‚Kì÷ ±÷K’¬­Õ`öþb¥Ò$&pkòÎåðÚ•¸‡Å ½3‹uFªÑ«l23êvUÔât«p4`@6ù‚§ç¡ïdø\&ë´Š°=Qà°Ô.º®ÂìW ZÌc„[¬=À†õ >ú ЉYöKÙëMÐþ“O¡%@õa×\qÔŽROêQ–“µÐ÷¡¶7Å#¶Øó(ðï8ðR[¥ì¥‰pä¤á\&¥½o¥Æ È9ì\l²Ã ìx”‹H¹BWè÷´\çÎ#ë NÓÖÚpËN–«(.¾7»™ò>#­øeÝgE/É_u ˜]£°Ð›n´R«}ÞK8ýàiF«!öhÅæN¤öI¡æ5Ö’4ƒõŽ^†A,¾¥ƒÝ_o¸ëo!8šf{Ä…vebnZYŒ] bω±Üs§ç>qÕ~¾&ÃÀ¥hÖò‚„ÛôÚ{Y „î&Ûo×Éä{Ö ü~³[ÐJûÀ–믵žŠM¯ã$ŸÁFý(x:-вñÚâÉë$ÁÈF3úàµó…j÷ðuÜ¡ÆN,Í Â0!ÆõæÍ“~1Šòn–é=ÛB%ãM¸DžÅGÝ^»lwdÀg¾¤ã¯s‹p—îÁelë²´Ø´X”EÁ°]ÀiEJ¥ÿ£Ñ ¡ eóÿ³ Ð §~½¥óSÈΫ…Î`ÑàsÇ0È!è2þÂ:‰°i²íûÝ\ô§‘ °%œZce\”KÒÿ0ŠQõ˘Nש5os’’èh¤¨¨@Z?ºF9±Ü Æ­ùe:ÏÂîJB1t@‘Þèâ+YÜßÊÕÜ­Oä¥E+ c½”Ñ”—R;¾Å ¶ž—nÿƒ[˜À…Š )¿G…Y7Þ\?¿ÀlŽ{lÑ‹?ß<Îç@àüŽ­¥Ý áP,vp¨£`#e2­þj¢JðÛyÝÈñH¥2²8C;ÜJd“7Á碑³LXþîlˆé9šlõÄjýîuG‹RÛSÒ)ÞŽh¼5&#ÂL{¯m;•±d¾³ôWL=[a€’¬ ”B¶@t!Ìò<9D×(Ð=eš‡ÊŸ'+šõÃ8EÅ5ênm÷œºêœÐñ%¡©L<‚ƒN¢SFêÌàÄ!Ÿæî…ûi?çRí‰tá1!³ŽS°U‚(àÝù44-]5¾#¤Mœ÷yÓŽï™Pyå¿ø#Nø‹½uØâwU©eÓÁÝ ¢9_îæ©bЊ¤ªJ™Ýn½OMÐ÷énS|^%\~ ƒö«q) ð uc׃û}s,[j+¥‚uÊ«ÝGäjߥ⯄ˆX†6'O ȬrÃër_Ž^÷bd/^1Š£ ööabA—Äê{ ³Ûx Ä°Rû}o-Ê:S‹DDÒªâ>^²Œ`»Žî̿ԂRzÒj½|7Á“½$ê"* @Ò¥t Än+5,^âsºâtÖë“@Ï­9~f*Y<›ø5bú•¦xB¶ „!RÝÔÐo³þZ«PýÖÉïäI‡2žA5¦øÙŽ­¯!ã OëD©ϵ/:eŽÄçÞT!Ó"0wGêO{L­éTayãßJÈ„†=ãW·RûïÂ>/»‚ÙòŒ¼Ç¼ý#q28¸ZR7e.‹eüª†ñÈ+c Þ°¥êÔ"‹ožñ¬ß^5 NT«ÆK0ñœ„¿Û ¨k}FÕÜêTdÓtH¼‹]^ZÀ¼^Söþ•ñéöŠ}-«"‘ãE^çÂ$¦¾ÿg{Üz;h#7µ%ÕÑsÒºj®Y>yŠõwQ¬¾>ykÖnžƒi ò-ÅPÒËT·úñþÂYÏ \#%¿Ó*¦ÞðVb!ÞîO§ „^£¥è¯ÊÖ0>€g ÊßcJÀ&¡òš5·ÊÙÚ…Û7»È‰“œ@"Üï;܆èCžVòvŒFÞjûî¬Å§ò QY¯–Uf£ç>íJ¸Õ²ë}©¹ÝÄ&Yn"`À#SênídÆ0:²Þ`£¬oH2}âøi"m;Ñ÷2iFé÷OÃTÑÔ}Óëê„$/;!G U ß Ù,]BÂ2ƒ˜™bW™#߆¬´˜±•Œy…Nb2Ä1… ?Š`:rÍÏãK´¢&¡¤¨ ë“çV¡Ã˜¤õüv£Û Sª–3b5" šD|ÈÄÑO:ü5ÎûÿX…>aÐe¬8ð £Û‘úÀZ=G3=âav2Íqî`ÿÌð‰¬J[|攃·ä^îpeÕÒÙ}ÙEõ-Z@‚’ž)’Ê™À²íyôqnÔõŒÝhÞ±ïF¢"Â:èJL»V? #¬¯²ó¶Cq ûýç·”"à X¿ÍÊA¸a¥ùD·Úºà…Èø©G‹ü>0 ‹YZgeosphere/data/wrld.RData0000644000176200001440000047236015147425256015060 0ustar liggesusersý7zXZi"Þ6!ÏXÌâ3ïþ])TW"änRÊŸãXVÀØø%>Áƒ§"UZ •ˆ¼€œJ3¬+s¡›µ;€–Û•Ê<™&ý|×DNúü¶Ùù–ŽüÎaNÏMJ%­ëÿqg$ù&ÌÙYô˜3åòÎ.:ÉKk8¯LµÌaáZÊБçþVv0ºnØ Ñ¡ä(–K¶åL °uŒ2ð Ȫ{‘"ášÎôö¤œÏl*-¶˜Kñx·ÖÉ›´h8$½ºÒfmsiœ ¾ÿϬ¢¸qu5—ܦ;|-³ ŸHVmêUм ’Ë’';„ZòO[³r ¢ÖX<€D¸¨"ù‚IñòrÝÝÖ7õÈæË] ZF_­ýØS(oID4…QÚˆúüjz€ñ-ãWÔXyå`— Ì9O6ë–éXAnÏw_Îi4z]Ë v2Lòt_ñaäà“ùÚ£·ÛÝ~'Þ6ÄxÄÛÓó“ ¹« %Ùš&k’‚Œ\Ö_؉¥ÐgŸjx¢˜‹™úÈÚšƒg‰ƒ%%aúN·y¼šI87I4Û´eaçoj¸Iäàš¦qkPžèÃeÍ B¼&¢‡í×ÖWî?HLàg{Ökaú ?Ïîˆ%&¬|½ÕêÞ[ €ù”û¶ù=ÖoBÅdË}pÀ—Ý ­ˆ„\jd!EfS4¼þq•Ú€v‘--OU]¥9Ò¾d8`Ô‰Ô mAÕO˜Xi€%Z@½BË‘] Ö.W3óϲ°‚Å´`\ºaÛþ©ì=®ByB’ Ð1Ò¿,fü—øê*C<@åèNŒ·'sÉ-¿HÜ)Ì•ÇÈ–²\õó$Æïn¦¸ˆxj—l1c$·$ví¸sµ[]#«\ðËð®9-OÓcG_øHˆ!8=½Ý5²¼.¦N?`Çù0à2«¸z²)´6(¨÷nªª)7*‘4æ«fz‘ú Ø'Æl#r»<(ýàˆIµ8³Ÿ0ëë€]Xîæ[µfÅPq)/s;ÿõ}W²dÜd (”§DåL ´²Ã~_£<‚˜±Iªƒºöâù8 À—¸jM»Píú`*ê…¤´›N—RJhÝã5ðÔÐ; $È!_Œìók΃BÊ: ú^Xja\+Fj/.Þ˜­x& Рä·“«Î•’èYi•ׂæ:ËÝ®öC|,Ëú@Z&_m-Rl¥®Q‰o¨q„ñéûUókmª1cýw¡8gšJ¹¸È§!z<}›Á\³ÇÉÅ»ˆ»{ªKé­úë(N™Ë®RkSÔd* ESR°Âl螉ÝT윈AÅRÄn¤hÓ#Yµ¿ˆõIÙ, ½Ó£© :Më*;Õõ¾3g:öœAü583¦O|åS5ßÖþ¼Ó@ƒ)þ>ÖsŠ©\V$‘¦T{5'Û*XÜî¥ó(8Ú5õ7ÂëšñUacØçƒH…åܳ+s4oÒ5F9žùÖ=°0Ox3¸Æ†Eöj•>®fÓ úö²òÊß!Ù Z:q8~ïÚÇÃqñòÿJ Nm‘ÿÅÁÃÖ|‰ÑÜì”{^+kð$¢e¸pçSpd; Æaôf”E‡«6i†ø÷+u4Õ {ôh ‰&‰Ãs ãØ¾Ì¿<íÞ»¾v±¹Ç¤P‘â§[H—ÃKù¬ø–50cŽKOÿéÏj…€ÙˆjîÐH"áïÍ@WýÀfõîqs¤4üÜ`xLíMpõb”•™öÂ~9eîÑ*y¼$È@¬mš…v0(U·ó©¥‘ñ£äˆ/1‚6ó¢ÿã% Dv"VÅ™÷eY#‡³ro>†Øê’ÞâºÜ£Þ§ÜŸ²ÄâÒ—9 zöá¡Úq#jÝ@ìLýµ£hà òŽÜ™qt´Ê][ÂßÅÌÂÀòÌKœHŽ Œ)À¾Š°U)í%JÍ'Üö™3ÈY˜-†BZ¶'mU¡kçnrJ×q0ƒ§\$hZKkÆbQK5Q S!WÛgôçÙÜ%ø^»œrÆ8wQì³{Í®â¨h]FœMèõ„-†€Eutᙾ†­Ÿ¨Ó4Ìp•Ì9äVaðP ×|v@ù™_ÁÊ#^» Ý­5uþ2ì´/GöXÐòX‡ïÐOOz$Û‡—‰H(kši@ï\ö‘˜¬ð¬ =¼¤QÇ ŠO`<ÃŒŒ¨£Á[RÓ­HÃiS*,ÝmºN™ë0azÅ5-©ù.i–ýv…aKààPð×XqA§Œ®9ÓЯWê™Þ¦¯„â|·pTÓ_MB†c8[›ßÑ28Âu+\òª…\¥%?§?¬”ë“++aš¨1Õ²TaíñÂq?8Ýï²Iµ¬:²œâø\+‹˜’Âr+ß5hö{ón °ÞHV7)Äl\ÅÝc¾ tr ¿ÓIîÈeuñDA%Nboç‹K©]NöThkž( Òö¨õb¦¿¿bî¼ /OŽ&n„Úh[«äî» ¦™aD㻇qÖ­"÷sô XnÒÅ'”ß!‘Ñ”ž Á}J ªV,¬±Ö®-àˆÀ âô‚) ²þÔâ^BÆ@]@¡W׈Œé*ðI¢ØX!+Ÿwé¹§õdâAïÏÕ»²¡z(“mÜX´ŒË¡Ô ¸›GÕËïñíeÜ)Ž•FY±ù÷c¤N•¤½éT‡DòÒ3Æ`B1x&­›ûnÚÄi Ñû{q‰‰pœ OwltmµŸˆÌ‚r¸¨ ‹Ð¯¼Â#¥qä¦pv×r¯»“u+BÎ5îÏ—×òÙ™·Ú(7€¿w¢½Æ¤óµ­h~˹["8BÕ°È[çíÖ†k©AòÌnõK^l#ËÖi8Ä•N)&“3Íök¡×B= ØXmyé°í3-+ž–c|,Ã$@b…²j° »PD~^ãé.ÙØäí±¡?í)~ù(ö”fÀëѵ$!ƒtíóA-^^$—Lq©ÍÀ®cX;ÔBÓò¸¤"Á /,‘Ä à þ–Ÿù¤?™t¡Í£3İÙë¢y”8›ÅxNz®ãOΈèîBóùæ+C&®Zþ÷þدB¶|ƒEMuTV~-˜·>ç‡ûèu©u²GˤtïÏÿ5HÒÒš¯|÷Â$j GòMy,úÓ¶™OI²;{¨(c¥l=n|(·»Ç̪AsÓû›JW#œfOcøp IÆÉT—‰³óò·µÖöoÿZx'»”Hþ¾ Âøä;Rlû©PЋv¨ªŠÂæ[ÜlúÆ?ÑV8¸bOžq‘öïéï©@~Bó ±ÝÙX8Å µ{ØC‘cFKi¾z¤⓱îÝüû®^Éæge8Äë ›œ±R.÷uö%iL»-q¯5‚‹ nÉ ÇmÍM5>{ ›4:£ñQ/æìŠÆ›zbPÅ Õpsš‰DœL—óMy$2$JAQSݱl£ð&W§&q± œ*£üÓè¹¥‹Í)¿7ïõÈxenÙ1 +bÎPÛ›¤íƒ±X;Cn¡¿ÔDÚGvR’N»»)t¦Bä/Hk†c:¶¡´—Æb÷¿ªäÑYTÂø9xKPÉ«œóÕÒß[Xïgw—ó󒱎ÀÞÓvP·Œñ´øY9S¯Ô m¯¤Ðò—…Ð)v©5¼»"œË áöâ)t牟¾åPFV… : âAu¥³Iµà–0rÀ–Â&)CÉÕðÊ|³`„–¦5–ëi!’ à Û5ÔZ‚Óixˆ>´6Ö|ݽ:ûšÝ»¤UÕê¼n{~oö‹Sk‘Ò½)þ}‰À#Ë0 Â’Š #ë™^îe_Ë„­4ƒDÓºô¹hpúdp¬ô{¦F"`%YÐÏ5‡‹;—áó<…!sm˜û|ÎS;Y‹-/˜ ˜¥hùËæR›ƒÒ*õ–H 1X@ÛÏÐw ó£:åû [ŒÜ3N¼“߉x)Ô/fh2Ř)ÿÓW­¡Mí‰x£7\Ò_ŠË€e®A.w7®8_ªç@àAmF`ô‘!úÑ‘$· ƒ@\þšñ)?ór+óåéŽ"·ñYÀ¡jN1Ùv2o8Sdé°; ç¶ÈÈK¸-4Ûº/‡“à{U;‘‡çÝäZX£ H­\ú`j‡E_W3Sy“àâ&#ž‘ë%\,•—ÿšùù™¡^½E[ñµ¢ã¢ñ_õ©RÐ2ìO¸N§.8›g†€s”•Ähcsض¢À~Hí.¦Ç^ë¾ s»Ü8(ÀÍ ÉÛ ×Ë ø“ÓnSáä ÏhÛÇu?ýN†'´&¯• Ño›°’úª ¾þër”ð7iÅʤ¹§ÔÈã¹ý‡RmÚ?œé8—±q˜†üw]-æ1L@:¿Ù®%y8qnù«x‚ í¡öæ)R¨™&ÔRú.˜®Äz÷í»Þxoç5tVÈTo:£^žé„•þl|ñ‡uÿm…%ƒ°”Cî–®_ŠÖ«È`aµqm¶ßìô·Oþ,ð:ÛÓ8Õ0LrS„&½+£|»Vatì{¸{+›’;ŽÆgR]ÀIpüÉÚß5×ȸüÉ\ûaßôp¥º5Ð#¥ gÛ8ñI½]åúáa"Ë¡Ì+2£‚.&îú§=úÁ–EòŽ!EŸbƒe–ÿŽ4Ÿ ×uà lëšç%|áëO­ÆãAÌMF!‰Ð ….6âªqÂÝ¡ç§ÙbÆ«Ÿ;~z6í§Ší“°c¾WÛ³vÍu¨€kŽpÊè~­6”0û™§Î[¬xÅ·’ß®ÃÆ šèÃ^a›|„qà£ßJêIˆ®Û„.àÖIë.õßrXNüpW¸lÃð<\ƒÛb] ˆ‘C«ûÎÌ>žÏ؇ù•TXÓ/ûéÑF#j?ÿX& L5Рå”ÔH¼x]Þ“Ü./R{`§¯™tK "¯Þ JÈB€Ð._?&Ž¥Á´À_ŽÒÃ蚌þÊõE$o’`Ocw V&Ó­ô°Â~`¿ RLtÛTÇÏx>ï@\ë¯õÙàÞ_Å®Yt+by÷NaZ¬+eïbb{ÿ (+O{ˆog©$iØðÑh0C û#Ú˜µSáÝÍàOt =äóa -ÎÝûn¤‹äÌ'•vÅ7nÉfûÿŸÍV‰_S˜¾4;”nRYÔƒçù1ßg¨²jÓ‹ ¢gU!Û%‰81kYÑÄÙgì¨*¢Zi] Ïäå¯0¸—'Ù ¼C0U…ß¼´ ¹ØCNèÒ6€טQÓÚ¦âc¶¶÷Ù× ãRA1ËòH= O5Áã§S4)[;(k³´¸áy­½bX҇˲+zð.ð¢Ë’üzé,=ñüÙ‹ÔµcÉpCbjäÙöv;=!¥°_¸×@ˆE+¼°n€ gôú.·pb¯ˆóÜXj’8áÇœÚeT™½Kjÿ.7&H‰ÒP6ÔÑ;¼˜]+˯ŽZBJž~Å›êü·e#Q%ÙJéQ¬…žNHO?ï´N%‚ù°‚fRßòõvcc°Ùµ˜;b±ýX«‡D,Ùñ/kþ ß½’\’¬î†~HýoäâZôºaŠÈâ=y÷Zþ…µÙ+d\N[fÿëøm ­êqÞä㸃ßËMdkRÅ̈6÷u¼…{3°´p…[–3«×e«ù» Rü"W9÷ăiÅ5yƒgëv¢yº®°ÔÒï^<‡RžŠÀIÁ¸›¹¹Ñ]ø1”^tcV´éP¸|“}tîw4®°ç? ÈïðÍÚòöÕ÷‡Á#úÏÛ`Œ×xÀMvR쉪)êlSŒW‹êyÔÛ.¨©< £‘ªP-Y• ÅJç.1f°gÒBqÜ)Æöe.ŽÔ J+÷-ÝØjÌ©XûÚkU‡‹øÆ<ì`bËÑA½JŸ†°½‚Å|o§&JIëðî©Ï>ãˆBæjÑ Ñsÿýpƒežá¦¡9–`ÔgU‹™ ݳˆXØKez5ýÙ¢lY–hݱS«„^kt«„œë‹)>Âé…*èæê0ÌV—¸¯ "IXt½ø$ΈW$ûWÐ-&e¦¦'ȇ—˜é³Ÿˆ^§²=3"<*§´¥Ýt0BŸeÍ2u‘<µ\ëâ»:DÏÑ*RÆyù A}BQ*1¡)âÔ?„0“oÏwon^Úl&“­1‰ãÏvh¼Ä¤ ?6@x#¨9lQŠ;Ç”IBJ#Цv*6ð¬Kd4{>4s‹¡•Ö¨‹*: ¼ºñs*å^ö˜å°#E¨Ün‰bìÎå-!mmºÓÒ(ÝþügÚB—^N·^4ñ‹ê­³|[õòè©‹ 1M¼Þ«Biʉ01sí@¤u¦Ê Ñ+ìpÀhûv· Œó ðXÑv£Ê¡B´œðo¬Œ]vÙûù&M ÓÞ±ÍN®–wØ‹0Â2?ý4•»m ×ÆÔžK=4,Õ×@U>Æš!r Û¢áÙ_™ËTâ×Õ~•ìâݹz‘+€ð´ÒÖ†Žë4l"`b.J¶„¾_- Qí¾³7¢¡ßAçüF2ÎñGÇ•ÑóL}lòj/HN4o·íÈàX_i(62"€%Œq½]:H#¥Å¼§È⛑ÞâÊfü—nv¤D»±õ±Oà&“5çÑ’˜s×vA3àMUëÔt‚Q^¼WÓw; )‰ÉB??cø—%t ¦•¤ÝÊo‚Þ½8Î}/ú)•1ó³›ç e£%\I¬ û›D(þ«Qa.×?E"W°eúý‚æ5ôA)F¹}ï,E'hXZÒcM*‹muKÑЧS°°õÏZJn„Â7øaŽ õ,£8®›TQÃÁÞTD â³Žîâ´äˆãàuÆV°ÅѼ©Júˆ™$f0w·€¹zme`¹Uc\¼ÝÐm³Nžö Yæôà»zÈÎD\:FÚ™$ùVr±_ѽ[_¯7D5ø„¥ `Δå FørÿD.‰·cöÔ‚ù7ø}é”Ù2F±Ö\®kõI <ófUàªû{>¡µŸ%åÜöÿ¼e¼³+Íé“rÿ­ f¿Ó°d ¾È ~ìÔ‹he‚¶,±UO*dtÏtØíý'Ï\vjµQE=jÑÓ¸Ît¨j’`§îb+¤4X˜¨†YÃn¯'/ÜÜH‹ø°zÀtý §ÑU‡|® R2õò@„Q·';Ÿ•àƒþiÒÿÓçX`?Þ?q `¢®‡ÎrŒš.xJ;ıðbîxDªo,!¡œ½ûd ⺔·Ø/¿ê²“QÞY߉Â`ˆ®Èhô%$µ&Þ{Ž}T÷5<1Ôî9÷¶I¤BƒZ$”Û ¦µ”*Û£ÚØÈ–2Iøú b¶fÌ í«l!“Ùß)—é¨Þ‰Ü­¼äØÆ—Çz²Z|=ZOlˆm¦Œ¹!¦´ØäC‡¤—çî×úK›Ž¼ ˆããöuý^ä&$’9& »çÿçkú=œ]ÁaBÛ}™9΢jI?°‰cHàH ¯bÒéo^Q /oǧjW†8|ˆ'±ÏnCè`¦1™ñ%F(!þêˆÝzÕºÕþE^âÁ»Ù/™|×k xl“ù"â^¤¼”¿ü¡A?T'+¦mßP1“Ï aºöªøûD L¥F?Ž%DV*£9xÛè¢ ç ì+öÊô¹PÞ¶VÆ®Š €e\7äÍ*¥Ò /¹ÈœeÓÕ•7ú}»ÍÑàÚ¹7sé¨ñr×WôÐQ°0 +6 ZëŒY•{î+µÞIv³Jƒ°}œÙ¿ð[ŒÑ;°V§Û÷Õ°7΃Í}èXƒzúm]ÎPùçÕfT?¼´žœÎ‹¯ˆŽÝ­Zm‘òJ· „‹e©)ƒ 0û©\êÂnHBb„.õe•›9¶¡G Ïzd4;f6àÊòñ𓨢äuÞî!óÁüpúy¨Nt´KL®‚Q±oÉ5EÔ\½ÈÄ•!M|GG f‹½ÖÃIK‹K 8ÐPùØ0™„§Ô[ÂRJ6 ’,ñN|§ãRJ¥ã`Ó¹;ˆ”ËgÝ=ì0ýƒªY,ø»± éÚŽ\ôÁ³íËWÛ(qm}TÂ%£`õße  "Gýƨ> ©ê}:‡áì5ý¿t]?á91IÇr¬jÑ4թͶŠÚ}&ƒöò “·Eá«£#0)n0'4äzþ&Òòó•Ч«EÍÀ{¬äPvðflË#jñbÉ`ô÷&É™åJx9²¦ïl¼aLÐñâ.}&‚¤‡Ë:×*Þë<϶ÿS #np\~ó;IFÞ¿å¼fÙ0ì­ÇòcÝÌ'€Ížywwƒ9KÓ²—Ampl)Kí°å4ʿݺ(÷µ—h¯¾.}.å~@ íü6µ¢(M±7õÒ»d.œ»EÎiX¡ ²pI»[ 5® «f½ºüÂÚøðØ·ÍÏðÞŽgF/m¢23i)̰ÂÃkG7Nœe‰ô–,6ðÚüÃE[Câ‰è©P¤ÐÛx󬿔V×ÝŠ ØÌ9¸¹ÿ€–b=.U#%`ŸŽâŸ÷GÆ)y&òWÑ:EaïXG.<àE"®ûêFM^y§dÜ¡\~qŸá9ì™ÿ)I¾¿ª©—¤ê(CòVùËI5|„GϤa?œ¨g!û›ÙTO•÷̼`”#ïò„îá2S“É™Â.£é¥òL´§wõÓSS<Ñ @d;wd«]¨0£Ñ¯jÅke ŒéS«Ke0q!¿Ü’ þpf•±G´,Œ+5-I•ø]5ðÄŽ·ö}Ž¿W*Ë~UÊE®2Áœ²ÍÅ\œç1Öu/&ÚÏAŒAŽÈ´çÔc«hÏ«ŒZ‰Âlæþ÷²¿þkº!yÕ>g4–=#ñùÕ 6†Ù¬)»£ºÖÉQ'Úˆ}?Ú|¤ààO*TM"ø±µ=C…>|tÇöî[õ%GíE ‡íEJ’¾É3HǼªRÚ~Ìýd‰„©×Ü@ì}Ñ&ê£÷0“q_K@£öÑAA¯ž™OR®‹ìì¹xŸd‹øÏ“$M9ü÷Í- H(S“†ý(°I«jâ2ÓßÖš‘Ç žÑލOž>~ª ¾ü;rË2_Z_ÝýÑ–ƒª§=1^ÙQÓÒ™}&‘J xøÅÐ>‘ë/…ÀVþî^ñ>qÿÌã·Ù»…eAÝÛb5 !˜º¤ÀJ$÷üïÒ ë?¹CSl˜ÄÅÔ<0‘û}®\ù¿w„à•/ôb—ñð•M7Ãô 0ùj}UEÅ¡AéæÂéŒ"è¡oK…¿q„FõæÝnõêÄaÈ8UÀen.f‰fT½õ¸äÚ yý”,úL|o%O;¶# p€Ý·yEßB¡ÈYerX¾08¤Ó¹ ʽ»A4¥Óúˆ„ ûÚL±FYBŠçünk 2»T ûcíœèLo®ìU 1¼€|&"ÃqLtCRç´ùôŠ#Úˆ€à ^:Þ £ïXÌÛN¿–°aƒ¡ ¬eµ4S«^±‚#áœê”Rgh¹òýðC ޝöOwÇÉöK\=“ÞºlI;g|)6|´ìûÑøo©•ò „ÛÁªÍÌgÅS|à2ºÑ`iŽ|EZ*‚(ÞæÆ|ÇÏg…Z§]½åç.3ƒ< «Mr“ýe°/é ;ÄŒ>ÌÏrFÒÖ";§"¤*v…Š3¾ãî_90hA¨‡ÊÅü!@Öï´Y3}Ô÷°€Þ•íG{Ötšu÷¡êANìQù=Ñ÷Í^ýcÍÛB¼å>áO¢2”úZ& +\ïݬÕx?~t³ŽŸZIÞ%OL‘óÿèdpA)'‡Tù3?üøàºÿÞsT ÷! ~Ww¥1šAØFæö<ƒå}¬#ÍûÐÕ•­R" }AþzW›År7Šusõ*ôµ^×ôi!ûÇß|^tÎùýuY9tóõÙÜ:&•ªÒÇU|ì2±Æ 3ÀÉXå§»úË€­@y'žî«kK*¶V;…uÏØwÀ·é6q¬vj39/W:=9—µ¯6Ρˆå}¤Ó&ÐýÐ#漢PlUŸ9ðJx¶ÜLGå2Ç«.E|@F»€CåJdúп¸Ï8t”vPªåí›biãÈÑ( ]¡~2Ò*œÄÇ&7Ðæô…Ñ´¾¨šl×vžds…]À_¶€Dr¤`!¾¾ÍUñnºI0ÐôÍ”œx)ÚÌyc—½R_îY•gmóúð”žÏ¼µn hqÈ„ZT|ý¼8e_ lY}ä6€=V9P[ñFúÅš¡)qÏœ$;¦ia±µ Žš'&Ù½†´:“qd\zóîËæ¤wÐ؆°ž$õ)ê…¾§&ûÞhÕz.—æ·°A©(¹gøÝ'¥8˜UÔï\…"VGû1ieý,º§‹<„’öo¸/‚µÖrŸÖ=Åy–6èᵇŸ``4ïxˆz}ÿûã˜Ü<ðñLÔ |ù¸$’-tÚ”â/yê\O0ïú=`È)³Á É €Ù° VØeŽáC~Æö‚èÓ'O¨ƒQºªÞK/ÛÅIO*ˆ¯ ó3< æR ªhäúC ¦L½áA°öÉÃãvý‹“ÝM’n)0*fF¹ƒ ܨ©l]SŒåü²ÒQ BOq@"¨§ ýÆàûs[ªl;b×͉8QdÚHùW$ë0j…ÑÍàN”ɬÒ%ú:—•7ýN  Úçt(j‰5•‡xìéžaØSàâÀªê1^WÁ]g4¢f”·åµ…ÞÁÍ-ñf…v­z%lA—Kä)™L‡rwÇ- ù/Äß}ðڷð¦ ãsíåeÜ Zýñ¹V\ͺSð81ÐXŠ…íÝýyxû°ê˜oœ©ÖvÅ#›ÿŒ¹Ä0§LT°ŒìÓaÿèü™½?’ þùÁˆ¶Lz!xqë²±Ëõ]Råt¾udÍ3‰”^ô¦°`tŠ;Ëà{±_¬Öʈ-è1æÐ[!;JA«½ÍR]®c7é¹²[. “Õ¾˜Áj”¹M=¾iv–01I ]Ó8&úÂÈ•“FRsÌÎQ>°WXÞé6©ºPˆ%"2j‰ºV+ÛI¡;˜ (ä­Æ‡Óô͵ÞwìõåS$ó³îDX•ãsŒÛ÷Sóá2¹­-ýtôh8ãE£1ÄʾLªÎzF‰ÓÊôÏ©éŽ/¡«-׫_%.ŒÙÊKÿ£Rv¡Å*ÃÒ¶!à¹?€%ªâ×IØJ§‹ä…1”µD(¬Í’ß»ÑÆ›hÓäh^Ê+“Q(ó…ð+>ãÜyùäÇav|Óá §›0“Zªá% Ê *¶Ücr,;CÐîHWë%®-L×l öùm» =Ñ%6;‡Î!pkhà2xeð±0 –ŸO&鯋m;%¥ŠzÜ*@Pöodšý‰) upN7ópŸ0?4  ¦¥|Œ ‘GF§ñüe#$2êGAšgEOÁã¹Hwþ1w—:¹R³ ²Ì:Ü”2Ó2[Ñø·iWŒÚxWpSƒ*¡dwÓJû¦›ÞOHÑã°9ÿA7ŒÙWëÊä§¿•’,çëœÏÃý,SUÇÓ§|9Š¡q¡ƒÐF­8‰¢G>¡ï0ÇW±•±øŽ׎ùsˆ@‘êH9, @ Ãq6¹ôš‡ß €Sdv¡e¶Êÿ []É_´uÈg¤îõб?ÁÕÀš[à8aH&ç/ÌéIƒêÖ¶ ýå0ÏHj¥Àýˆã$goÖÁ!4ù½ÙÇé†2±Û'ݨ%’wtÁ3÷¥íô=`\è22 =ÍP•Ò~1¯à6+ªX9¹.ßû´õ'%&¶õ,UG¨Ú6ì„3jDZÓô½K9r9òV^eÕ^Ë*BABʲ’åC h\ ì;N1Ç›måšk.;çC¸) ¼Qw3ŽZ‹õÝÓZôÚêªîiÁŸ+„؉·Ül5ƈÿ=9FôDP; cá'œV'»ïç&TÉr=ð%ll‡÷O¥Ú#¨nt±hñ`‡æ¿{¶4-i“ƒýUDô*’öuçmú¬uh{ÊWeï—UzzHyê5Rßh,΋±gsE=ÖÝ{BÑ_8ä5TïÀW'“õ­m@6îmëèaü,êšq†Ò‰èËÎÚ«³¼ð´ù9ÂÝ©ÁÅ|Ä‚ú#¸©2ÓiìpÇŽªV_Ç«®å;ÔÝÉo±øêÑÖ=::÷ï·Y³Qa‘°êWçZ‹”ú˜,J\F 4})Wbê[ÊÏ2r9€ÈÄœ0LÖWÐ]è_LúÒ' èþÊ|â\™°Ä­o¢¨”ÕyãŸåžaÀqá%þ£á=h1±dÝGßÉË'„ä»ç‘”ûy¨4hÞÿ M7 ¶8h¡cï}ÄR¤ÜušÞü' 3ž2ìö½9”½Tš%¼'ÜȹÊóz…Ù{QˆP³û]Žvo°/¼¹ÊK‡1OÊîÍÑÅ—.å‚ïcr»ÏPÆ^¥{ÞŒ¬©çÃ&’úÙq\ž|ˆ·Ó[ÈXÔ=ÙÛN=ƒšÂ¨~Ü’SçKY“·b×A†–x~ÚmºkÛÒ 1ˆ¸S•5CüýÄNÏýn³¢+a ”|ªÃîD=8|Æ&<Á íÏýptx¬¼Öæ Æ ÈC?¹ÞtkÀ4Lö#[3œª>­dbÒL¨¾åLËý¿ /À0ZŽ& x8¡µQ9M‘QgÑiò¡¨Álm®,e ZvÈcô eÍî^§\÷í­ãÄnÜ¢,”ûHeC/[õy§ü°çú°¡Ù„U™•D®Á—a¾ d·«{_>Bd¯Gw!’ Ž•—9U»+‡P·ŒE‡[³'2 Ø÷Y¼ae}íb)íœØaWÎtC8¶<Sê…vLx}²SÀ>ÒæØ÷§™ògg“ B‹–Z¿;”¢Ôïæÿj´î׌R¡2 ·k”ÿÁ(c Mùè3´/Xyc›_ºÌ€NJÊoΊZš9ýºJ«ÿVÑf=(h\[¬$ˆW‡É– ¦è¯Ÿ;ßÜì|Yq¦Fƪ߰‰q·µ 3çÕkÁ §eòÜ``÷»làí£<2š­¨þûZ{X løSæpî }žºHÓOtì]‡™w^âµâÆ|VÒ˜©p‹›_«øÜäK&£kÙ ºÃUZÙ4 v^ºžÓ׿‡ØåßÏYïe´Gsr9=i ah ü2M<;)Û{‡ºö*ݶ³XÚ…2s³/Ãü‰?nEJ÷žÉ°G”öwðÌ?é"fbyÒXéÃÇÍžÁé„ höøû¯[™kímø¶32Ûºãîú·®¡ 9ߺõ…X³,²R&eš·o¨»‰w6WÇO ¿+²¹iDæ…W?ç3²Ï)éÙuƒ†ê±?Î韫…¾l˜" }y®<’Ñ8µCGãªåRÍkTuõ' ÔŒ+f‹+Ñn…]ý¾Q*«À¨¾F2ó9¸{ó­h]óúx]ƒÔ\(0¶Îi³ËYÌûÕb¢¶r+ˆDÓu½ûœÿÝ@·>,þû†©KªÕŠÑQû‘jm¯è-ígsf2¬…ÿßınÌi²}ëØË;õ½¡qeäâ@_Μø*®*7Þcö[…X,1H9îÝZÒ;1ÄŠŠ‘– eñìÀåÙ{j®?˜iaBîq±½˜QmÐlø)£AŠÏ„¯æsø[8á\å)j¯y¨tIKP–bÛˆ}Ë|°ºzÞºÓFȡÌæ/` 3X«Ö˜äïrA8¹Obs°ÀwaÈuÀ`µ ‹Z[z¦AâªõàEW+¶ömž†³ð´éã·¦þ—BßQ˜pù=_{ŸwŒ½ $ ±9»ñV¼/ -.axÆÇÞ³ê2|¦·QœŽ‰Ñ´ £Ý:K¶|ìñœ·Å²ÀØ.. f†qx87‰5 x©}lè ¯Ú{ sGÁ¢þ¡­PLšD˜çê¶¹Ï;ÖL·<¨V„ó†õF?c ‰XÓ!%œ°ùA$Õh¯Làë õ•ÇàQ¢ ”ìi1K$Í@!„Kô0ŸæMO4ãå{€Ï… ?½nÏÈÜHb͓ͻƒûÌ‹ÆçÉ3Û@g„Óis §p[Ùã:‰Î7 ¥oä}©Q¢nˆ<òtgå;fŒlwà6óQ;ÇXfeÄHuCè.“¨¯\hl CXñ¢ù7Lwª9¹·ÐþÙË'LöûÃllûM›ŸÖ1¥¥Úz‚„Gç‡:“d7 \yá4²«?(©½ë þ<­€¼æGú¤à#¼)k_ï;£ÇFˆ2¸S/ “.X<ƒ¿æCB=ü¯W-ÀVËÏžÿ}`…ÚŽæ °…l+^lØ Yøå9«•N ®È¾)šúS«ø\W€8;6˜ÛžŒ_$}_­Ã˜ÛI­T¤©îñ.¹MÍM)Wöy†? û¿A1 9>œ[iÜôzpÅDš]*" v5µ†Á‡›œ•Ö@hBɬ÷ ézoá³i9„w/L°…¯ëhãµP ˆ0Ò$àæãeºá¦|,Wíø4EI~í]“r‰üùÞY¥;=ÚcäÚð‰½ƒ¨¥™Æ[öIì²âˆøW€DNÌi0&‡M^™‚úùªÏiëˆVJÖRU\Üa!‚Ïj:#²¥9Hç4z¸SR,óª1‹•‚5øàò^Ba7I†ï) ©Xæ÷é‚¢RbÅ7ëSØç¥Ü/ò90â‰7‡]Pk2–L‡Üì3=¿.cáÔD…§¢3Ä]ÛþA†† ×ö%ôr€d˜œM)º[$£:Uf:VD¦ÊÉ¢:¯(ÙM&°¼4k¯‡_M¥Å/¿.¬0íeö×¼¯Ý|6l“ŒÐùÞÑPioš£Z˜g_•mA¢?Ëÿûn„ãªÈ#½»³ÂSÔµ>ŒÊ/›aá]™ Œ‚œ+fÂ[°íÎ+ Ì{L¡3*¤Ùtâ£(£z絞eû­Ü~;ði±e_€p eµÞ¢44.ËáÎZ3'Ó0òÐá÷-bÞkó­!1ŒðYÁÀË™qÙÄT^ ÃPÊÇ=Gh"z¼7+ãC(¨ …5—õ[¼J¶—hl-[ºÔ¬6»@Ë;,6,©\¨kóÿ#1ør¡›%§Åî·žt€¶–yèiLq¢wªÎ¸vXëÍïi,Œ¥ßŠËª, |¹äñ›G(øÐ$εÖcš#â¤?µ҄s¶T—óŒ,¹ xÿF¶!V:pÅž¼uŠ©0"У¢£¹Á¶€øDe•éàz>à|ÿ€øxº|V[ÜÄîçY@ðynÛxm¿µ—(ì;9%ÔyÃí­Gv#SÆjpöÎŒÌ$HÞLþD±Í YƒÃO³Å¤h„fƒaÕo3ö® 3z‚ÎØ‰Ò×L®m׎†ÌŠÜø´¥bç%<"¼xºŒdøér·íŠ}¡ÛeaÈã C¦7q&çPж+ƒE5ûïü;=û%=.#¤L¶ÁÝSYüAVÎdNòϵÑw±šXÜšŽüw°}–ý i©}  ©Œ|ÔÑJ±Šó†FVK àXe?íêÕ:ˆqPûW²‡©)#ÞþëTíž;&ñüH\Å—!Y[¸}rÐz’ÂéÙbPÜ÷𙨛Ø_Ýé+ªÇ ´æÞ6ÃÆvéR…2Ü~U´ ~éê§‹@uÈ`ù´«MŒ¸5ìº;{‰_%Þ¿ã!†£¾G‡K,ö4~c·–ÏûÕäAh¢2.'ù l¯¤.ãBéŽ\u Ñ2nˆSÅ»‚{«Éô/¢ïG%3 îñT4>bÀ¶áÒ±Û›k=é”tß(ù³8 ÙÅäIô^Ï•?ãqå>þ›¶ÉJºÞ¤¹¤Æ y.¤¥íÙbÏ«dL½6®î¢Òò3,Ü0oôöCÓ0¤ M)ÊîµýºtéîB¨aÇI„š­A‚" àdz×Gï‹fÝõ Ü R¿ùѾÊ\€Ú/DÉfL]âÚ«ÃKNЫc¹¹Ç] í~él—/žÚ: _âi’fÞëïá–©xu#¡]Ž=”»Ë©¨R1YS,kk….?% dôUÿx§óeO5ÅŠë—Ö¹·‚×ÚÞ.~_3rïc „Âv¬¨ßN¬ðü&:ú—ÁKÛì7¦y B¹oã;F rsXNâ«¶¸ªm}Εêûž‘ÀiiÏu-<S^"ʒѶpt• ÏÂéÌJ+|àó[–Þè…\ãT=ï6þÉ©=íMÑÇÜÞh~EIÒ÷2Ø—¯mnA—àZµxÁ ÜÏ-#† 5Ò¾Õ&îá‚ÉÝïÄ.rZAçþaÁG'ÿ}±e\Ð/” ‰Ë{ž|ÍÀæ4l(áôËØŠ—&R+¼ÆPÓ{5ƒ}P ¥µø‚Š’¿«AªÔþCÛâÉ5að¦Šd:ÂÛ5ã-=è&ê¯nuÃ{ÉúùQAõ”pÊš "'îŸÅ[‚èãälú‰ë§ˆìáoþ@’Ö­ŠCˆ¾ú‡" ÓÅp˜®tÆ4 ëó/ñÈð:úöVA—œÒg~õÃ¥C·†’>wFËPsÖk¢àº¸¬ Ãn¢¼ @h1ÍÉX†êjz½Øì÷µòî(('/&Uà‹mgÄCÊÏíø—N<mn{ª:<µú–šåK§-hú´÷‰°´GáâÉC´ñ¬ù¯”»š¹+\ðôŒÝTg!2€ˆ*‡#þ_2ïêÀˆèá‡Iùë-¦–˜òUj`Åó ðž_ÖT]ÈtL0m ¯V:­Ó£ç½Çv9/ü7¼³0.t‹{_DQ&15Ëëý^dõ aŒo­y| WXŒ6­U†"çïH{*ùû‚®0§ßMµ mS™aÆ*Cf2/zF sŒø,ÂòŽ Pÿ0û£ª” ˆ'WõôïÕÉÒ9«þîÊ3¶ô½ŽúÓ8™/2ñGö¯ƒ8jœ#Æ»5ÿàËuYKu$F×[sÜžoâVLqªäqµgÒ9É|éû‚„,`:ˆUOÚôòÄ2fÚÙüÝ}¯úӭ½‰(~¤jÕ¤– Yš$Õ­è»­!ƒVÛ Êƒƒëa}|Á3RAŒüEçŸ7‚í{‰×§¨·Ù õ’–f“»½ÇíþNZ+´g¢7ô ÈP±ÆÊ™™=8~=æpð¬¥V æÍ{¶9›gzÅú>Îl‚>¬±H)²šàˆ/RÐI-jl=¦¾÷%ô'½!‰¼OÓÔ“¥ÕècU»îÆpúW@ü,˜&ÃÚ—*8´–@²g\A{@ ­LX=Mùn篆¾nHÉ…ÂÌ xˆ+óîJQGwJ8X¦)ßTÊXÇX^$½¼ßµöäg¯NÎjiDÝ:’xèÇYÍl§ö„OV@Ð3JeÆ\,„Ê;–ú±hgbh“l& —!Ú®œé©ãæ1d°Í‹›}–ap£»J²ppÿ'Bó”Êÿxä̪Tëh¡Õé‚åŒÞèù#±¾‘ä"”6÷¸%áÉà%ó—Ô‘b¯ü1S ßãþÀØðÑèø¸x¾‚µ—j•³ßZ/I—ãE ¸…õÍÌÀÇA‹‰êÚЈ?ÁZ·1½VÔ-V”´…â‚âl&I„LBêÙÞÒ ZÕÑé¾2TÛ¸.SÒý‚ÚEÇy8 Œ·BÎâ+ªleþ ÞÚ"CEôݨxsœ®4$[‡îäñôëÃ&“knf".§L”DëÝŒŒ89Œ‘±’À­ ]ŠÖ¶ž—¬Ç4Ó~6âlB4/Ùíe2æë‡Ȧ¡è¢ZØ+ ‚Yy©üÓí‚ÄÖyˆ§®;ÃQyÛQ³.‰ÇVÌu9‰+}ƒkšºº8ÿBÇ+™Íó·†=XW:±…¢í.ê)ï>Vi*½´uJ_ïå²'àÉaä4hû.|ÚòH?ZPYñщ$?|N7uΟÿœÃ´R³^~®ùåô‰&FÑ5¢Æä.g¨Iª=7/ÑÄ­K7^o/7sƒC #ãlÂ:¶è6àÔå!ñ«qÌùZ\–™·Â0Бžß”ªêm-ûâzi‘ã+m2ÓÖùR YÇÁ•6–}ÿ|üø#¯ú¢þ‹‰bH^•A튟H[,Oç©à\;cÜnv¹Ýq¦L?ùƒ:ºÁÅœ5s„P¶ƒO’óåc> ÐõH*4…‡Åêʯ¡#1ÉŠëö¥!1€Zöîƒ~Ù­¼p“µÝ¿7·0'ÏB œ.8 âQ¾]ÞÖ®d…™¨1ë9¨WãHµ-ô‰ž¬Û HàÚÂÓÌk…¸Rjª¤öޏÓy~>$ÎÔZؽ/ ¹ÁÀ´Êù±æ ½×쩽_`rVµ±–dó;Ç)çä‘÷åïYnòz8(Ú²r]r:¾š´êQܹ•Tx 7¦[z KÙX§÷®ßJ`÷‹þžÓ'Q\Lù~roîý“È”pà¢wS‡¬ýÛhQQ²/:ÕEsÝ õ ÌÂϸÑ[ï­ ¼bô¹óä¬V´wùÒÑñy0ШÝs2wW÷Ç`>"šáÅ–Ï2 ­ˆëJ¡Õ¢²S—+ˆü,ð=ïg Y=Ü]ݤUÚ yqûü¨}6ÂtZBh*ÒȧaB–qx‰óuÜi%_òó[4$mõ,‹Þ‰*…^ˆƒpoDIY=íR’ö?QîZíéH)ýCåÎXƒ~à{øþ¬uGñ˜Âè‡KY»ß NsnÜö–Ù¿uuJÞ_X‰un"•Êô2,WÜÕòNbè`Àëu:“Ô l÷³›áWð€0¨Vߣ̹«–GÞaøì:KONóÅ⇎ Þìás˜¤M·b~^ÁKøgªQ¶„ ‡ˆ ¹Ï|—WAÝGñeØoY@ߊGˆIS¶|"ˆ£öF_ûusHŠô•rL×ð…¾whòeKjUŠÏµM3Êÿtö±Pú·F¨áû$äÒgOsÖ#‡ºÄä©9€SR<ãö9þf‹ëÌäNÏñ“;U üÜ9ño0¾c¸{ÒŸËïf„(2˜ ü~YîD±í#Í™wùÔA BÏ>9dÿ a=P0uÖ]wqª>ü>Ç2þ r‘*¢•_^ƒÍMSý¶õV·Öª Wg~xàË=ñ9ËYQäú€"á·;+¦ìN‚Ü.zÙ­ÝÞTÕ°¹¦èçÿÈ¡ÜWÅ 5!.‹TnƒAš)ìrú—zÙN³J4 Ö¶e˜FCS,Wÿøký ˜>uïh”pÖŽc\xE\£˜ 2 —ž}lŽæ%š‘ŒñHH´uê 74Žý½Haœ|TÐ'—PÀ€-ÊjnâméÈã¸}FBüW ƒ??Ö‚ÀþšŸíü3T  ¹°ø›»ðèù|—Р1öª|â)Á¢ÙÃ&ã´Ø§1ÇÙv½d&mÍøÔpÇ0ÖÍÀ ÷Ÿ(ÜÈGt68µßIE­»îºÿOßÅ 0™V@ÉÌ,ðÿ)$ïwæ¬)à@þïÚ*«oë·™ÝepÔKuÒGëÛõ¬ ” ‰J²me³«ºsA6=Ë ;ó·Ú¹üôq8X&¸æ,†m¬§£Í"C–RG8¤šüwÄ­¿©Z9ÙY¦JÈ S”)¾3:FÚÐV˜2|éœíQçì”ùƒ|’ÊÏŒ^]Pà„ í ¿á kùŸÉñ®©©oTá`áVšïYfSJΙIÀ¼;@ÌÙ©>”×ÓÔT<.±(6lìaüNnò—e˜F6º°ÌÎyS&ce€'Æóòk†øízSšºø®º%$Öß7²–»V·®å„ö–4áý˜@MñO¿ðà{¦ ë{MóåÔˆWÞ¥GD¶ãK›}¸ .¢<Ïx¬Ë72„ûȳ٠ŽçHNà§_lT!íó-"Ômh€'^±XÌ – ª_áBª*ïá8=6f”'ö8.uç¾Bá›ì'™~a ´hÍãNîk{¬Œ3<äÖÈåemš) CøÕzGV¬FTİë@RÓHƒiA-:”½¤ÿTFeÛmÈ^ñ$æÁj®»EÔ·ï\„·¶&ù†¿…1¡Ê~•Yx#­÷ù\£rzaâûFÄÁ&cƒ·µ•ÖŽ¹dI윣üœ™¾ÝY 0´Zžt.Ó WG»!™þÚíòö 5¡PÁ´§¥iŠÜÜñÅ×CPÙ¼tU }æ–ïÉíÖ _"»ô'ûí^KuTÍ6,* }€l¯mÁ R ª_«%R3$4¥×yäØÉH²NG{0>ònk¿4EϵЕ9¦40âbèˆû—~½)øV­à«^‰ç¥K(Y¨Ìê$(5¦å_å®ßñ,”¯•—ÒÖ¿KOkë 7αCØü%,­lîPÀ®‡TÇTv§?d’+¦^ru÷íëU·4^úÇ/ÀØõBçd¹šƒUñ&»Oï@£ëÅ_þçH¥¿–×¹}™Ìn‚Õõ3…&,©]VO5ß/@êûk¹Ès|¯¶‚nÿ&<õŠÄ³ÝEʬֻ) 4°Ÿ:˜G |&Ñskó<ô²–õ {ͧw ÊÌË¥{‚ÓÜKˆ¨¨™]ÍxRô[?BÀ<7ÜþŠèèHNØü¾»ßÀOFÇy6å¾ø¸C[ºtа¬äð¢š=Už@à2ªˆ Œ”ÖÚDøÑд81BÐû¯"ÀñâÜM†šÚjXžuÐʳáñÞ"£æQ{Òá®o™d7½çT¢®æ›¦òNi6ƒþñçP¥’kAÙeÎÍóÿk ¸5nÓ¹MÃ÷”a¡§:»› ÕÌ:<ÛÝ‹fëó;×½ò´Undj%>:Óá÷ P»rŒ!µžúß4ˆÇ9öd¨ÏB½wè¦`[å#ó¥³Möž¯Ýv(îì×Þ ª”Hç4p,$aXÓ¤ýY¬Å?Kf44ßyŒ$°-ðµæRE0Ã ŠŽûq6ü{w5:§‚*… ‡Ö_¡¡oÏÖH‡™H$döBWkf¥²)Ø÷ºR¿œï2ç ŠÍbÔæ›¯_Wk1ÄåQ?¸h=pOÛª3CUÿ|#Å׃Ü]ûˆŽ*Ìm(Ù_9|}šéÆÑ J>J:lNæ6’-‹‹P¯Æ)!ìéÏ$íp€¸²e àÜÝþ¨žS}ûûé[ }UîMÒÄŽIÛ„Î>èDtÀŠqÆ™{:rVêÚO8¤ ˜‰ðÐŒ‹Üš»0ƒ«G }ŸÓ®p;¹=mLkÄëK~WΚÍÿ‰ˆ}®£TïÒÎØZ ãUãp­u„(ý~ÍýqÉZpMÜ(ézBöªÁú&½C’ZWû ây†ÿrq,‡s4·(kÅîœÆïH‚öxWvZ†»" M{÷å¨+€™àcý¨£°ì€¢î'†’iŠ_M®@ZÙ¬Z²c³V† vH‹ÞÑv%Œà£ ïë=cÎé ãb>t<~6gÏ©ù#ƒ ÿ&ܶ«»FŠŠ+Ú, kë̵þº;ƒ:F˱¬QÆìó{ÍH5üWªPHJÿrã.e”ˆÏ)©ìæs¼×·‚åæÉŠÙ4r“’ÑÊ› »Sز _þ_ô%Sì<ù¾`Í[Ö1wkºÌv¬ýìËjãÆ^Ûð !s¤‰å´AY‡@QJêk»ÝÏä"uyxlKÆU˜Rܬ òË”1èS6t0㿤\n1«ÖMñœ7ùÎFÕ¬!^(HÏæ«W?+µªàÏ´Ké"Ùkß½v“uš¾o³ùß²ÕÛî¹4(‹g[í°"i¥Ü¤4<øÝ (£²Ò_@ä§]ÅvDÒNŽ~Ì7%¯AG‹#OÝô<Ú¤øE^`Þ7Êuò~…¯c"O¼§‡´šÚ^Ó߇oXd³¦Ž‹AYr¾°„‘FÌ-†cøö–£Í„)2…9îNªÿ1ÎNÆ.ô,uu{°7Š­ƒ±Þèþ2c~’ rÔIBopN@5ì²ðf ÅÕ¸ÿø~Ó»3«Fi/#˜Öþd«œïØj4Í„ƒïîh¶YpŠ3ó]ï¦é»Í/º¥ë7Ìä&Õ· ô-­€ÔËÆ1ºà­éÐuîÀ½sÉÈa’væSõ£+¾4A$zšuŒ96Û*­'[M€b.¾Kei†ßAOÜbÛ>oFªTðóaœ¹€b%¿ÑfÆpYÑe År(Ô:žˆÉìÔ†þw¡£&±cÙ6ܽ„T­ÄÉto¡ÌòÐü‘¯¬P0|8é &¿Ø€/HŽó•LœÁ,'Fä!Œ­-QOESqÿUOBWÙ[0iàæÂÞ³ËÜ÷ Á¶XäÛÈ´‰û±ô à2Z¸ÕW‘=Î6gÊó_Ã&´ù䤂ðϼruýDrb û ý+lÑó<+•c+9d®“ç䧉ãŠZåf)Kña£a¬\ÀÿÆwT@1´lUß™Öé£)0K˜;ÆÊÊœWõîˆmJy®™G‰¨§~BwÇ‚ŽØÐyø÷öáG‰:ëäWöÛ¾*¦B|¢k}‡~Q¼=îÓ=aÙø`*<Î[ž;&/Y>édòÿ…)œ”FÖ–þøÑëÐL¶•8Ÿ@¹b¥7‰ØÍ¦Ÿ\áˆCXøÕd-:ÆÜHXéblë+ ñklVG§éƘIŒ9PøRfEøö=UÂÁß/t\e;«Ð˜¤ ”p¼© ˆz­ÿ=$ØWJRB옂¨`ÀrïTª¹ìRg?ò®næj_lÝòX·õW¦½Ñ5™døÔCÿiºF‹ÅO,¤(ÚÍÿyY3½¬èÔÈñ¥ùoßÿ‡ëžÌ¥½1<6£^†se‰ó²Œ_d¨Ã1ÚÑÞ܈ÕÝ$‘2•Ì?SKí…Y6‰“)àÃÕ«ëMNÔK¡ »ptq"nŸ†2>ušU†µSýæ°ðÁÙ×Mí+O8•öÍñ±ËÄŠÇw®Xغ±æÅ ·u 7‡ßæÞ»Ó/_o7#¦Û¯"‚éövÞÖAÚ•.A7´éÍyF%”ç74+E6-è†/õ¨fúÏî0OHØÜà"¼ ó€èYbjÞê‚S¦Ïƒä²ï[ æ`_*{¿®³oÃ-|k8—ãög ±’ã Í ¶ýË VÝâäñ¬¿,^UÕ0äµZ°Žö™‰–òÁ ø;¸»Ú¥1–ðÒ%"ò´w‡¿MÛ›õÉ'<ò tíM.¯ÊËä1«„P»;}©wºËHIž=¢ŽuERÞ`èa7rÕ&¿3¾é$KüY¤‰ÈQ0ʱlf@ÄcNÍ’¿9 F™Æýft_Fu…,”òΣE-p(œ4½ÂŒÒÄBn È P¡,iT+Éõ9@ô@©uÖ;÷b4º*;ФÝyH]}0aøãbn¯Rºõ2/¼=ý‘x~‹?P6»0jÕԛݡ¢ü§zGºh!í¥¡7“'|R¾ÐÄÚ?Ã7Ê£×bÉ«’õ”ŽþÅ”2hïîÕxËéï¬ù6R5mÕ@öëQpY:ÔlYÕ›(a“Xƒ@DªT6bAtÔR„+E°}s°ãØXøÉ=Ê™ððø)õèS‹,¸ž@Qè|PýñL¯w!\öY®žÞÍnIJ ÚÅœTˆÓ[ÔjˆáEÖ¡ðôªµ1N7êå…š° © D¿#öÙ«¿jÁø©RóÙñÙŽ¿y ÷ͱê!ûéõ XÅW=Ë& lÙ„‰¥Õ{a ‰ÀMǰÍÓƒrÑç”á ´‚)£¦²}•<¥ÎCu“;ò×¹,^¢Ç¥VàŒ;YR­"5¾ÓC)LÞX¬¦–@üØ—Æ<ÙÍýÚ%0M›ÒgO–rkQ =ý{„<îòßø¢}®ôŠ¿L÷HívªG'‚Nu›žqä½Lkˆ`’r8­»@¾C/ ½Í—E2!Sã™DL6ç¿w’m#ÃQYÆÆVëZ±Í3@›õ¦‚ö/Í™ió¢Áx·ì•ufåú¹Œ„õÂV Ic{öAŸóôQú&!º™kë—xhùBc5ëò¼!eé¤??è¿û´ÊVÀMP>Ê^~žÔL¡\SzžoÛbÎRæy4o²`Í4!ÖKl8Ñ»×\Yþh¿äM\ãÛP<ýäïЂ snUàË×á¢ÂW@ÜB8÷sUvõ@­6þhn|Í1,V“æ Š´åò„\ŠÃpì¡•´PŽiX|;“ Г_“®§àǼÇGŽ8°ÿð¾@ÏG“…€RÎî·¶UŽL`«‚“yé^}±}‰&ØbìdõëPÓ(Ò†Q‘wäÅŠ·uþ«hÐi"›UÝH‚5=—A“j,Ìðô&«9Î.¶î=nüi¿­ ¡hldR@ÚŽ3ôT ÀàF2äRÎû¾’ýÿö×hR§]SJ³Ùn])Sf^b¶ãU^D‘Ž*p¹.''áìíc¡dܼ §”Od¤t» ­y/ȵüÚÍ%¬»7‚ «‚lÝ@»9jíà–z„wW[5\M{ 5¿ŸHzkä^Â6¤ÚrÜf×cý×ã@Ç`<Ê–ÍÛÁAÖÜש«öÆœ$137S)ô=äh_EgX>(Gàsꬃޭ¼IÑÆ4wÞ©.u³2²ÆÅXØIb׌¥ ¹óÞ#ž€—nìZd Þç!¾ ‘жÏ;xæ¡7’óè««/ßi$X+åJ$ ž;t-‹°T0þeOî^Â.–á<4*¥cZƒÆî^oK¼H\ µkjb«.ÛN–Iýe­ÉY çćúÙGæè[u¤¬×üõ _Ɇ_ºïçá ÐE&üW9, Y…#”U`Il¾%¹ˆ‹†ytð³)±RÇ QC!`¿>'òìÛ$ý0€w™îæ˜m ;i|ÅÚÁ¢“Á‰ˆçqM±»!üž¹[-àùET‹TmŒë#ÆÿüV;à±Äá#þr­RÞ…u4=° ºnêj‘X6Àêh،ؖ+1ÇK¡JªlüUÞ¹mzÅË„!ëL’.C€×…S|GŒ+y, >Rl˜¬xªS"I beÇN𖣇¦?"\«zïfÃö³zvÇ"ÀˆG·Äº›K÷þ¢µ‹ÞŠ¡ñrãr`ö8‘lË;CS‘åÖ=`Á:x0&˜!Px ’¥#¢Ã¶RÆÅÞû~5ìCr.~ó6hÊ¡@O(VUh‘²>&K}”¨dÞÔø³%“gJ¯tTmÓœžû»œ=O¨SLå–º87›v…WŠˆBÇV4&€§²ÑÉ¥u;/¼Åù’c:ŽÿçÎ)J” ôg‹×ꢳ»ÎÙ³ð%àI#Ù"$+á*uí&Â¥Ë>nqÿ¡ŠÖ%3¥eGøëý§'ãÑIœ^zÓAìrv¯r>‹¶ Ž2Õ ±˜&C„À¦‰IJ © ßÕDH2 |.M?, ¾%ý¢RÈr —l Lx>ki :þQ«Ìd@åAú?İv¬×ÇõË u)3q»wMøl«Ä {¢¡K·Bó;G¶¼=VaÖWtŒ<rDJlƒÞnu_8”ÊI .šŒ”í¹X2rä×%Xà ô›t„3]…S3PžW*4m˜bvÃ{M'¤†åéû¡’³¤·¬˜k¶¡ÂMéVªØ¯c‡Š &&ò«•–Q­ó•šœ‘û×0¯ßÙF]sHÆ’cޤÌ<»”8뤞rïpë<¤Æ¬ BŽy®›Þ0"ŒŸ€–øöƒQCà¬ÚçÚâPr®ÇÉK»m*ù»Œ-ÅÙ½¾õ[=rvR­©à~‚a7Lž04\$ôæ#'§Åq¬ççu ëBëÁLýKÎþ†·ö“³d'Ϥšì˜Õò¸5jÕS¬ßÑÏ÷‰€«zc`éÀâ€Õpgψʓqyãð¸ V·eÝä"pd~ã³H•ÙÆõ‚2îƒüyU­Yîï^[NÐ*Óˆå0.'Ÿ¢Jýžõ/Ü= aXk~Ó)â!!{‡Ç0tªÇDg0LÁØN–‰Ùg¦»0\ý¿¯% n½Ê.ÍEš•JHñ0úb}û`86[‹Å(£bTa?ÜZ2 ¨cu»áÕ<¢!™ü¢©°|‡þêf7ˆÉU²Êó…6}½?nâ®u*ÂÌ\8 Õ•úîHG’×â)$Ó6 èÎ}¼Ë_*Æõ!éS…,Ù‘zçnê\]F)“•^Ìæ»x?gŸø^YÍשO@š°˜î›V(YfƒõV¶)ÞW¤ùöIû¿( «õòÓÐûéœÂ~%‰ÑÙÐ6h­@m(­MK N¶D©…®!² :rÇ´jßçë-Ö;Ñb«òžáŸ|ÇSA›%Ðü]y0~5ªÇ®÷×Ad³R¼Ç·k²‡â‡Ãá÷°‘O…¢’´ütQ(Š›E+{Lø'nÎh Ëô ›çy‘z"F›Œ¡8q¥î Ü~ŒÂ>ÂÚ¦7G8%:-¸0×—ó8AŒË?®¼"ïe£‡­iÉsË`WqwAé*¶]?êy#àÐD9ç•ù®®-Uý¤,7»å +¢®€´æôO”á–%O·í;@nðe hð×ÜáÞ?çläªØ.Ù Zç66@ß@7e±»ò(Û³çfljó9І֗“%‘@½‚bbßÊ?2˜ŸíKDR2{&þºµíŸþÅ(‡‚GU k’7ùÇ*Ä«æp‡v»ü´^kG 6ÔݱÏúà˜ŽeÜËÕÜ'³-k—„gùGª¹+¥@7†uȦž/÷a§`vŠÎ‹q¸>ÅÛ›j`ˆïì׬{]4œWd©£|2Jz G›fRçi`mDZuƒ½AÀ ‰°Sa±[»š$éÒá-í—Í ½,åfž±ì»Éb¯cìÏf D~°keŽ©6þÖ0n®\X[Yó]Δ¢ŽDéºÀí ®a܃œ_º~««Û7®ä§7Æí~ߤvøÒÇIô†'”syÕCêP õØ^d3›Y\š ‰ç ü˜@;‚F4\ïöhTµW5ïØkÙA„Ô{âÉŒ1 ˜Ð,Ôë UŽ—!C9íæÀ/üÙâÁgYÎLaòâ"Jðû|¼tŸ_¾š—N‚¦t8ëÇ‚Yù!÷-9öFZ»X*ƒë,~]ïb+) ¿Œu’¢ø“dk¼Â9Ðv¶§f³.ñ áRžàñ1h‡)˜æ×„ÙË:¾¥LÈÞjú¤L­Ç3Z$Hy¬x§¬äU6áÉ+¹J_µë}äN„#l–Q&ŽÊŸøÒ@»ÛMcÈvo›4—:÷JƒT…GŤ:Lê|žvlL^bzÒ„|ÙŒ»¢§¦ÙoæòÒ 3‰ òó/O—/dXAxèl#“ÂᥠrÎËöùlµ¾‰·ÙÔžðtHPøz‡ß¥ŒPÖu9e…þ{µš=öMú††Ñ™ÞìN' ?cûýï“^Gûü)¨§ÁÍÍ\JU¸ð¸_†ÈÍ»;„ñÏ-fˆ`>i] 2&ÐëvËáæt›Cb,L¨Z‚:nî·aQhâÅNñjTšª™–y* ¨íþê—Ž-ãÉ3ŠßÿHâ¸ØF'Rñ `AØÉù^g_’c±¦XÚcŦ%ØÞ!2ih`‡°¥–È N.†œ°¬[×G#ÄxÕOgyàÏ)žc¡ŒG‚âZ06†p}:ªbp)µSm&:xC³E=í~l54Щ%2®47EAØ)†+cÕ•ŠˆŸsȣưˆ¯óYä:1ÒûäÓ½ÂJq¡‘m/ϱ.±¥À¾|·5œÕRììÁΪx,’åºÎr;CÏŸr€3kæ·CùîÄ”ãý1T‮/^DÙ饀ۈ0ûùåTúY¶(Økžë?T<™OøZLùÒC|bÄ¿ÿ dx’rHëçƒOðÓ=–Îä½ ÀÓ@+K øVZÕw6• ¬RòÀž§®NžüVEÝñdª ú?Q?}Ó…ª úK}Œ!-²êÍ/Ų^-‚Ud:ö†*CÆÉ«.ñn]ú3G{Ç;þËÓ3ꨊÒn‡tÂ}n"¦ƒŠÌÃ7˜2È C×ýßÏ< €cˆM9}nð—ñpCI½W}@Ùè*+5‘‚ÙMJVM€œékßÉbõAòÒ*Ðÿ/}r 9t{͆6¸-À$_K›³óÙxÅ®[Eú •YjLjÀ•ÖQ0ëªXç£U臦ÿ„­ÿþ’šô§vót3*UI.@7À«ÜÒ äw‚˜“I“ ¿×y8‹¥l¤–8N„„ e‘ƆMqtä$5ÚßéÝß[0ÇŠ±~¦¨!_Ãh£4o¢°©dZïæÀa½ëBøó¶6lì5=xŸºJ—UPweY³&Óà+õ´î½fÖ²¬¯³¹ûpöp§E\FÈ”pýž—ú9OÊýdðج<™Ù¢klø^Xfp¸òæ.vèÀ’p+ =ÊÑ']¤œvË•ÅVéï¡(›X GÙŽZø¾mÓß]¯fý8Ö0²qêwô}£¿Ââu¨7Öq¿lÇ×¥¸bŒ–Gµ}NP3ÇÝ?7ŸÆ[£ÖÎÄÉ©Õ~´´·}Ä8í¤FuÑ…-‚Æ6¥×\ß SݶzýP€[qÉvôOÞ)·Ú¥,Y%p€{âUä®Õ¥‹6ûRã–äæƒØŠœ{–/û>¨Ö³dz‘ÍF´ékGtíE&Ÿ›#„CBBHbDï_…‚C–š°-êeWý›“&)玬êÌDz¼/“.˜ÏO¢é ÑC¿!ÚT G­P Í쵎ÞÊêÿ×Å#’K“Žƒ€A:óW‹À˜!q¡°ñÅ>¼  IÏaÐ.k êçÛûö?ïÁU9ûŠ/ã…zIUU^áWóiÃîëÊSsÛåÌOENWGkç±¹Ão¹-ÎHNìÍ›’è­p ÚÉk|3€ÁvrN ”VŒ ÛÉ&”¤…I›2ËRÊ÷£î9ØrFlç7W&¾Ìs ÆÆ^%A„B»çg górì©ö©<€"M›½7)yëñ—Šé…;ÕNò1Ó±ÝÕjØ ¸ÿtØ„}gòìU¢J™'¼ŒÐh:µ9§<\VŠ#!ðrüËÇL{>~‡Ãx“âf䃕Ã>ÖPÓŒÈÔ  ßè—ÉaÈxŽ¢ª°1ÓZ.x@Nçòpüi2­š„[9zx®Å`Ê «u'>HÒÑ ²ÊÇEìIe³HG‘Ctg·)|žrK¿tå…€çÝpKzP§À¢»`Þw€liFøÿñŸ{ÑŠÒG𩃼†Þ[*·-¦Žl!<7ƒ«+^‰Lâ)N¬’!¥¥ÿ A¢;¤½ºÒiß})ZœÔ ßFá-nÞ5Å‹^¯5xßYž”ñéÔÌóþ³V¨BDî©…Ç¿’2§I¢îFåö,›x \UWÎà2DÖv/Ø|˜YYçkRt¡æj”k¢œÊRÑò™ #œH¯ÔÁ÷µèuв”:‰LÑN’ èXÑK7wÿ¸vU±¹2a30)e›…¹ÕðVgsC7L¸^yº°R‘,7?ÙnI&á^X u±_¤DvÌrÏ/šýŒþaY.Š9À†Ž,ïœY`¥º·†Ì’ªðkvÑØ+¯ÐÅw¯‚ñH%¥5@[£Ük)޵rbÇ·l÷2×ÿ)¢æˆ¨$Øl.˜@ãpö³¢• ž­¬‘úZ‘½AÇ3YàÝÏaÅ(}²JÙ ¾&\ZÛ©:•ãÕÛ¨Ýê‚̯°Ç/ù¬àò8W¿Hê›”ÀZ–½Ùºp9äá;á´ÙكɸqÇÊßzýE•®¶·WóÎ÷S%_*í†ÉÏØOe-ªmæå éßKíYa[K»k Ö>'/˧ɅvW–½í8Ù¬pòpR°£Á¸ó¼VY)×aÚj/Õn×'mó~Âz˜ƒ5‰rù®ƒ°H¦áò¨Dª‚ÎA{yÑšaëõæ07- ?ãóüÄéßöæÊ3q§·#÷ÔߪxNÃŒ–b#çöӉƦ'ÁT^´óBð Ghpa¡ßøø™aL0;»yæaã½eCNÓ>¸T™Ïn;ž~«gMùVm¢+4MQ =åìuÛ4{¸\ìþ“É䮊ˆÌ©@Ïê—Ïer±kÏý§Ý /(ùc5 ì/8•€Ynãx7à-'ó3Ÿ¶ðä!¯¸ÂÓô1ú‰tˆm0²pHÑz-Xˆ@ò¸QzôB§ºùüBBÑÌs‰•bÆÚ€¬Ý£" 0¡ƒÇ±&¬ø´"aÏㄹnHe÷æM¯Ú¾¢ÁápV"bWsEcQMjñW”ã :œ9­®‹U»l‘4–6+Îñì^ÖÈM…oãþâ˜ñh7"ÐØÝÙ(¤½g”Üzbèr:µƒÇsb×d9æ]m‹v4©VþÄÌD¦‘¿m²’Ü#Šh.[Å<+´Ò´åÝïÆ¹ðÀo2à‰-[ôù|#¤Â¨£YOøÊÖÐIGóËgG=€ºšJQv]yÇ€½ã`. :³þâE8®²Ï¡ÛèA¨™Á"A“€6ßC Œ'ˆü O˜>{Žgœ/¦ã&~çXg e‰r‰ãw×åcúÉ™!;*÷ßOï›ÜW^ýò#—²—̘B8M¾,œªÆjêR­}íÃç²K2·áá<Š2q^ Â.^~P¥}SØž¹ ïÓä)Ke]Ú!ÿ”Éz~7ê‹£×5Mÿä¾ûç0Ÿ¨Ó­ºÌé‡5­õ±ŽOUK¨ŸZª€lÎÄ„jL LŽí|ÙŽzÞ{­¾](ù§Ôñ+õ6P@>ÑOëtR6‚Ár9é»ÓØ}"I´š¬· ‹8[“bÉÃÍeÄTáÃòShesSÿֳѭ"—«RÍ9(Y`fB×ß»*‹šT›«5MŽçÄ:•íwíu"hâÀ µÞGçOèAA¿g‡(©*M§›êi¶–⿃ð“ºçÕ˜ô½x¤ön›ú¤ÑP/Îñ;11ÆNǦy\ rÜ =² ŽôÒ/`4çÃÖ ¡(‚€ gYRTâä»ú ý IbEµ¯âï½™™ý~vxŒ³æŸŸ·ó”LQwèùQiÛ=óAw=FíSÕgã¹È—KÒÄÛ£Kÿ@‰×I—¼¹Uä tiXâëÇ­W°aHø†Ú r¢¿Â“Wî-õC ›fL°>ìSîU:°©ÒŒUfVOí?ŒÆÕ–å„€—rPp^ýP›…}ã ¡ŸàeòÞ—N\ +ɸú$øÚüj†iûCÝú%¤ò̤Ø{ÿ‡˜‡Ð¼n·æG8É:‚\çq.7s—R®%qš²Üûì‰Wµƒ!®™›b·f—§ƒµÛåÊxâ\¦Jô ,]éb}J ýbN¹Ô“æeËR* 3së9ÐÌÛ²­¦«šUÿÞëˆõv—,®ò ¾c„7¹ZSdY´‹KßçAGά›å2]'ïØSNÓfd\©”CY€€Näbê$¹kÝÊ@!~ô± UµªÚŒß tý®ùòÓ—Xô ø÷ßÞ'wTÖ_S"êÎ\2S,ÿôÑ›B5ÒT#ËÑrZdݽi|÷\ÿúɨñ:V¶;mŠ Ïv=0Ø¥„"»rCÉB¬R6âs %¾µCÝTÉæ¨,bG˜Íû\ÍfïäS]¤·O˜>"–àÅ]‹ß—…ÂֺȹQŽ:FÃÀÓl»3L÷ëöl€í]^Aˆ¤y²R*Åÿ#Q(¬;åêÂ|ƒ®©9¬î¡£o—–Æ^Õcño™šà±à” €“ýç ñ&¤ó´‘ÊÎÊùÒ4d#µ¢ƒ}Þjôí4-7V”Uü3¨Ý€ ý»Ït·Ç'lôÚîï`B3¨Pz ~ÑÒ¢þx`8ÕyÉÆk¢² š½Ãê F^'r¥nD1ß¶Õ^¢˜¬\{a“äÀŒ›õ™½Õ‹`z˜¨~îû ^‹a=IWiÐk8sVõÃ*³¹ˆr>Ÿ`ÄÑ *fÔée¹ºS¬DAÚ°I‰Zâm8HN(w·Fš‘R`B:ÅsU;ØaǾÃYÛ-òs)#7˜£ºèÄ¿Öæ“š.éÞç ù¥tzÎ}¬#¶eÔÈeUî.+¥ZTqΩ²8 “bb»tƒ/í-ˆÔF9»NåÙØï꫌? š°÷KøïCoõó]ëu¯£è{²°òM2”¶ I$†júçþZkÍ©¥Ò¹ZDÈè¦:øÊJªEDešÃšESpª;ÅɱÏYœê7œ&˜ÐÀ”vKQ˦UËÒ¢Ïõ¶]ú6¥D>k‚Þs·'5yF'áäbÔ3¾Råõ ’ÑGµ‹S摱NWíšxÞØ­­Ÿ¨Ú~ÐaVƒ‰ ›šø¼÷m.Ù$è T€Íy^Máð„ž“fzƒŒaq5AÎå'+Á«ô RFè7Ú±UÅkób¿LÒW8ÿı ÅÄ:R¼ëBvU«wºJI&Z†µÝs"Zéñ4ñ|+ñ|R¿;M*`w¥í³ŽlIÐXÈÏ ÐU¬|‘´¬4½¹œT×#‚÷MÛÀÌÝ-Q[7©|ë<<¯sµXúýgyçä³’ŒåoÚ•Îd«VŽ'GujÐä½@ÉMà)ÊS¨/ztGðTY+½Ù„׈ϪM²Â‡èvm*Ñ£C"“²º¸SU‡pŸÕH“%Û¥ï­mŠö hŠ£ò-2ñé¥ûIœ9oÃåsô2“²yH¤ÑÍ´|P«¨¡èWÈïö7ôõ- ÄöWN›·›{àް`¼*Ží¢ß2tšÏ‹T⥙f_œ‚Ô©”ëž7éˆSf9®ÅäÝ‹ÐDh <ë%lqä¤;æ&˜‡¢uàp>àísd8ÂIV¨UÐ9v†6—±áäçž×Û ©Ìƒ"5íP2&§_wæjIé£ðÚ`S`þo#2I&³4¸¼N8í™[?ëÌ^êÖ¡¡¡·Ew|­¼ô“ppÊ ‡²ZøÄW*Ãi³Ìø-ࣿB~n‹¾t"W7\9\B F¶'DÙö×"å"}ˆqáJ©í+úÕ„¯÷gÕ…ÈûÇùx‰NO €+dòl*ðÍJRéÎ=3òШ’p¡)‘h¸ÔòòR¯,‘qT³ÒâÄ5WSÈÎ.¿™n³@_Aÿ$µ ŒòÔL­ö¿ËGôÀ'‚ûŽÇ½töéåû´ûç%!‹IÿGýZûÓ,ÑìÓq=,Ì‚óS½ ·WK,÷tì ¶Å8?vФ-Äîð‹–I.詆ɟﲥ ¢éfT¦Äv&:È¥Cø° ¥Ÿú¶*hŠzÍ :ŠªtÌj»næXâQ° ç`ÏÆuÍLô=DŽ<7UªNÜBá÷ý( \‡ñ¬aޱƒn|—ÿæÂ‹)(ðÔÝn¥HíkJµ?m –'UXût$ Úϼ‰“KÖuh6|ƒlÕi§mꄲʒíôÞ#•n/{ÅšËø÷Ti£øÉ „ cúŽZ*Ìò&i#V”>–hzåìD[P²ê§N ðT‘6óó6Ó¥/Ý7Ù@£[òJõ4©ýãÑçh6Ã"η°˜ëÙI¶ÕS%5ýªzyñYÀó*À«¬ PI,¤,q±5ÏšýÓ\ÇȈ_{sý|a>L6¯6í•÷¤<°–éã³Ô?1ÛýH‹”+*ƒÎúŠËᆫH!ålêàâïãeýÓS3¦‡®m¡&לn¤›ËŽZÏ$öÅßuXøè£ÛšrOÿ?Œ¸yÃD÷ËËY4wß.R°)3+ZÂìåköÅÑ=Å+/¾JeBb«ö›Ñ_—F!~Ö½Ÿ7®º^tbj·u q˜.I[K½3"íèPÜ’ßWã´iK[ª³G”??ú×),!ò‡† âHú)hjz±Ñ8Õ¥mw`ÝAw¹`¨3¸„ÐW©£8`© N‚DmMîGvbLªTÙFoåBÕIu¶2p¥”؇ݞ/8Ô/Œæ;€Ô”¦æ%÷º5=«7íY2nıJõRîåþƒŸ&+h@‹Á)/öÌ,•‘9ˆ}°JÐUñ–ð6«7®8Gê~ é„*•ôu(⬆9hžwƒÌ]»é C·HjcwoüÔUOÍiõú’ˆ”§_éx¤ã‡óŸ6{"Bb>cÅ6|€FÛÆÛÊU‡ b(äNòT@@ýÞg¾mø!@6Ú2 8Ä„åù†tV,+8uh,õë‘òø|4ë¢s`gz—’³¡S”ß%†ˆ Íê]ÈUðý‘\ âä†\“7ò##ü¥€ÇâT _>ˆ{Æ lóÔ¦ÕžzŒ ®v”¡]P'tÃ’ÏdöÏóÞØþøÉqÏéEI¾û¡@œâÝOµ¸´A²!Hgº ÌŒ]é…é-Gz*4šþŽþ0NkÜ–› žA ò5lß¾û*PøHˆ/¼œ¡±®\-ø:8†õ Û_‚PõÛ&ˆ‡pŸøÊͽ`vkDHð¶mÒi]v!ßYÍ@©=ê¾AáÛè¸9Ÿ\D°9RÈ×:òQˆíÿ6Vù"&ºg'ýÀïeyN+åN ±(MIìa­¶k [#Ìâ®1W“2§k™ÞÏ'%Ô{yOa™oGþ9ލh˜G÷‘FŒHãĉëØ\½Ô¼!p»…Z@™«(¥ÁWel±‚2”Œô“("™Œ`&ʧÇ,Á"†pNv*ELOû¢´_Â×°]¤¯î•ñ%@ð`Ä \âOlúàäoBadÞ½¬Q`n0výÃCŠ9/òâ '+€~Oúäûm‹ _"Êwým4o¸‹52Ô·mǺÔ‹qŸ¶ÈàUآᴸº6èÆg=GÉ€Ûßj«Lul¤4²ä÷[cƒhk8/zRmÎ@æÏq¶-ÏMtGã6‹ÆõäLéØxÔQnÒ—Ö]Õs”…Ð⤧)\}Q„9ˆ?á$,Z.™¿0J‚ê²_êïîÐrS9—Ë„è•K =.¡ëcÛ÷xAþ{N$"üËB%Á`A…sÿè«t'Pš¦…(²™ä½— å.r½1·ü"ëR¿fµÈéU¹¼lWÆ™¡õ0,¸€ºkľ6Ôê¬ö†1›nÿHûbêI?".Ÿ¤ÿå+«!Sl8gë«kù΋ÀH'7e¾\œVJÚIëÄØÓ?šÎ"Œ9ÎÙc0ãŠôؾuþ‚âú,føÄcÃLKÁ÷CçYÓ*LKŒœgB¤eêÿ%¦µ£¢8Ž6íUS¥»äÂàëœNª)ð¢ÞM7úÙ4¤ð€&ažéKšÔÑ×WuÈVÞ)ƒŸ€ «ˆÖr÷¾jí­¸EåqªF:.Gü¸Æ€E~8œ17Ãg.GwG——Ô´Ìv«¡„0w 7'ÝÒ›P>".š‰æt°ëN"úÛì­ÈØéÂW*¿$a:kÖKø¹6¿‡äuyìôn²U8<ÿåƒ ~Ÿ8tF@ªN†õìæQèCþ˜~2E˜Õ/0ð>Ó ±i5LÞ{Xâ²ðò÷Rãê{î±lPÀN Ý,r}á$­WW?óþ×$´‹FÝœÇa·B«_w¸«aÕgˆÑŒcZŽ·é‹{ça¯ÑÆS ­˜›11–\ìŠÉ~ÓJÁ?‡ß–íÂ^=·ÈL³Ó0ÖAœ¼Î;øhÀ®ÝÖPN›9vªÊ?°x7‰ß}žF ‰ñ@aÇ… ¦²F>1.ß.hÃ7N»,ŒîIEó¯ÆÄ~T¡Ñ­LndÎoô!1}Ð2!;ôE'.ÏïùiZ5¦¯òòþäUöb3³êVvç€A@¿ÝöÜtaAKPÄMò„ÂyI¹üj!™2?çá¾ôõa°f[þs8ñS±…`Jµš–þHkœæÇRœb¶¼ˆ§æœÙŸfë›n¢ByÃã^@^ÖƒÚ°ßXgU°£¨Ù6ÃÈO à+17uÄœ‘¬f—Ű×õ_鑺(àöwÝö]("|B­µMÇ„¤à³#ò òWbf4uþü|<…Ëw# $Ðlõ R&Æ yPa…¯È]áâé"-®'òô̽…(Øýª7Ê}t'ÚWÒ‚Öñ05³¦¿F6º76IxºËm+\긱ÌH¼ëv¡Ô= l;¿óâx£BJùÃ7Ô4Zäg¯A¬†³èÄ%önRJ— îª wBHV•–Bë[ñŠF–°Æ‚¿¡N¡Šo·È€à ÙC(OÕ¯ÁìÒ±éË2C‡apKÉAõ曼ƒßúüÄÊuþ8q›Î$ü3ÿ3,ëïWÆñ ˆ_ùGDVÂb®¼Š§'‹+xÌ”I$µÃð+•ZÛ”þê-t‹(`YxÊ‚Ã->% ûm®hfmAËEY4Á;òk&ä¨1M1Pn"¼›Ì’ PX!Rþg9Ìo"¯€¦˜?Ã;Kéâ–^Þ× ëô޲Ôú³·Jµui#fréïÀëæÛѯ{øüÎ'¦;¦Ìä<Ÿ/µ‹;?}kñÿåD—ûâhõ«ºá[Œë^¶õ­–ðDãñjZwз­„滊ŒÔïÚ%ÁY4I°Œâ:›ì¡ 7W dY@)Iyk¹‡µî@óüP1Ûß*qVIãq mbþ‰V@¼ÏZ,È<“*$·t#üÎUV|êK¢&IJ]•º¯»™œý‘õ‚i‘ rñÏ ìsYWÆÚhSÃÔS&n×§å$¬ÿ;jM$ÌÒN7'ûhPÿ”¥”¨:VìBD¨z GÉòñà—®Äù‚…0•c ú±áqñQƒÄät… +iD¨K« 9Ã=]kòr/Ü}2‡ bËt‡rŒïÇsàû…ÌÝÈ>"úKÞ’„×2Lrƒ<,'éÛ¶Õƒ^ÉÙ<õèßH%Sy—ºê¦¶½ËL‘ß0q{eЏ„'Ÿ%)11Qk ŒvqÁgd $3¤r’ `qFFµ¿Ìs2eËv Œ†e©h;]…ÄtMʈ¸zù0BW©Êr êË÷ý E€+ÿÉMÂŒ ¶R§Q™†4|ës5‚©‹½”†œŸ1òT°Í¤ª5|ú¤~e"|¶ƒåVÕ‚š±l‚Y&ÿ›Ýóit‰ºí޶w»;Óa|:@éù0ýP@ŽÏ ÿ|„VY^ý&(Ùö ö›IÜ}å§9Ø™xEú¹»„£'n³O ¯’ž×ïuE?fuì7I¯5¾jÎOtÓB‡Z77ï4`^]€‡©9s [ã1lfv‡Úb:yÛ_ké訂*JMN!~%x¨¿78Cõ5À•ç1 „¯ü 5º€€‚²9› 0Íàìãý „×Êg/ÕBAÏIzëHÕøÃÉÑu"¬:¯ÒRHÓH¤Ê¶ Õ²q`…ª¹Ž. ~~.£ûRþQbýó/ÁÖû$Z,­1_Áà ,:À¤`nY'7BÄ\XÉ?׬ ŒñLó¾R{X“NÅÊwü=!»í”{=&[r b±nôêcþ<ÒÉ͸ƒ¼P¢ Ï÷” ·§õÖ—ìüé.)‘1¶´ꯡÊ3ïP——Ò䣩jéåÙ;[J¬ÛAÀâ99m„(ÝNaâQu 1*ú¹M1Kȹ5QP΋[DXŽÍ4å<’€¤ê=œ¬6p‡ãðìNRGÍ­ƒz¹æT37š$.ä“'æó ™++’,`éb¼м1dÞó%%k ydèöÚ¬ìÈ-È­£oT*FÇ«ÈW%?¨¥èÌ6C²=¸Wq‡®¦Ø‹ï‚´>öQe'ª+:³Ý³yÓ†!‚}f¿¥üžúçSú®jš*q]2šô/;¬å¯Rú”èiYò>„ÅÍ/+›¯šÄ\¸—q< _’ÌMU­Ïù¸ºÔÀ?‚šŽ ¾”©$6méóæQD¦»«Ç‘gÆDÝ»â°kTxþÛòÇ3$\¹©èÐì¯VW½©8Å?Ȇ~õ˘"ÍO AÆe° ×iÛ*>@†ÅÄž”Š 3~æÈêÅc8BC^ì]²ÿdŒø#†¯ú¸>RŸöóJ|óª6›ëÅ9ŸqˆVdŒ}Ü(nüX<Ò†pk0cþåþ=üMæ ¡;¡þ;W¶jm]G{Váš@nÈæè¦Š+Å $õe mõÅŽâhÑcÖø|ŠÄÿ3 ¥œ’ 3ÌŠÇ?2Êìr݈í—ëª) ¼Õè:¾Òß6¨§›U:AAÚ÷/ø‘+à~°Rö]¨úh%ìàr.HVd{!m®C:ô*œ}2#4䵄ùy öxÑãÆt‘*]â >¼.÷bͧ†J÷Þ™LJŒtuÂϼ8†ê9,Ì*ôŸ—­›ŒÇn†£y\S$ÁçišðõWît°=DÜ„‚⽕Èé/€7;µó’ª(XÝm÷lº.Ë–v_Kÿƒ{fÊØoç`{¥d×)¯¨YHäÙÏAjÖôvM>EÊóñ~«h¾íõJN” >MÃþ„ƽFÜ ?þpúI½µÐb£1¥HaåÌ2u¯–))Ø9HûoÓéÄß­i N ™gýá}5zw`ÅøátÊð¦Pí~q~i }»'”è-îû• ŠR°JoÚž²¥Ëu'œHãsfbëñßÜgWWøº÷ø¡bu¢Ák&lYì~YC‚ª7… kú¤â/ŸU5«±ì]¨GöÊ” ~¬Ð^ˆ7±“«ßò`(½€OàÌÊ…gŽOÀÌù`ŽUYu(i6͙ӸÑÛý.^½I»[‡&(^ÓH Œ¼àh>Þ«?ÂO,õ–w‰ÐVJÄA‚Ç.š–Ýoà›„pqž³j×õž)aJWÔÞ’Uå¼™CÏ UÒõ±ËpreÖƒA°½:÷¤ñï¡ ¬¬"ö®™äÚwixK=ÁÑÝ”¤…d³ÿ+\¯Ç“$íÊÎéåëèGÏW©>[rîÔv¼.˜|²á¨áw"GµÜù€áRØ@õ”Gª„]Ý=ouøÜ&`úÑkš›A{f]gíûëv,T#Q§çøëŒt†v­Œ­m7?eÕ·Öí1¥t"bpÁü¬u¯§ÙÉåBÆýú¡×¡V¯0´âQå¶RucŸpe®|b–Ìήr¬bÕ««¬/¯7ÄX²ÎÅb€[4¶1ƒ· vQÖÌŒTé·AÖOd¶#.1÷—FY%Ý×R5Œ‰¶Ú~ÛE=dâK…§ƒÀY ¸ Wàu^eEd”P®²1xÙ×¼ˆµÚ’”×è¬ë°“VÁš?‹<^ ƒ×"•¿êf9Ü×ô¬ÿ˜:ö0w>µLýòuZãÈ+£óò®ÝaZ’Úà;»c×ÙË6•*ºÙúzÕ¿8‚žŸõê²Ì.€øj¡ÿ?’J£ÉLšß–ÖðSÚ[»Ï¹4‚¿íkùsR HÛ`,lœ&ÐdSAìÆÿ¥“u;Ý·d˜1²k¦…u…Iƒíóaá­(-Äô:ŠŒ°Ž2SêÉÑÓ}i¤)×­täíMæ|ÿÄP\än½)\#cté&öbpý‰%Ju•ޱ ÜŒy¯¼bvl'x@ß>·ðÞ…U¾¢HP£øËà盄w^§û2¨Û*“EO„gÒ R}"ÑK‘sZf‘ê¤ûTØÂ‡&óDâñÛaÂUíç=–—¸†¯xE­úp–$×qŽõâjF,‡¤*²¤ReÁeO9²Ší½wZTÙäÈšW' s dŠ2ðH²u·¤¬õGŸ6(æe«ÖбöÂ"08Û8VIÉ£[:<Œá[—°3zMÌ\âÙ˜}™šË‰™í[­²_ê¹ïh[ºÉÉ Ui¯¯2ˆÑÿjž2ª7ñ,C=^(%ÛÈêáÞö±›:îÜ:À“ƒ’ÀE'˜“èÅe»›} nȼ¶ÿ¸!ÝïH.¦ …¹Ç‹–žr·t[ÃGÇwR>3/[Ö\ñadØœOÝIEmR1ßÞe}¬¼âW—¤‡Ú1à5$£”qÚ9EÏíÝù™ð.J>Çï++„ú°ÏË|V…ó„2r-PBœx¦QÌÈÂúQÒû@,(e–¨PñÙÝë9âG[²˜é6„~öŸÌŠ nXd8«£ÑGƒû°”W¶Ã]¥_ÂW×h…—¤P)A‰ÂÁ1‡=T‹ÛÆH(á)·´ûTQ_Z´oJ48¡åÓÄl¡CeŠ(– RV÷x ù?¿·Yä—Âø½rë:1ê8[Z•›ãÍMêÑG'ò¿\&pOmºØjª³ÐÇ 2sÞÇ_d–bydFs}¶X¤c ›‹3±°ÉL‚#1¯O¹-v¢õGYîM\lÊž a&{OUc¬¾ å+Gl£P!_¨›Ž*ÏߢX רýFñ:naÊ™!.?"…û€5[ý¡÷ÿ¶ÿ*»EJjâ—GyÏ¹ÑÆÆúT0e`µ9&âÖ/þBšº¡c¥]`秘ºØ<:|9?«(éÝϕ݌/ÒuÉz5È8lp äÍpàd²ÒN¾à¡ä.q¼Fáø'ªÍS“»)¿ò²< ÿ‹Îu³¥iâaáÏÖžì{ä±-Ù•¿ˆÓì\x,£ÛßôÏ‚}kèØÒã…/À@·&³Ð‡u¯š×”ªdÜèƒÆ;E+½ýܼ½§D¯òœo ÔžùóÌT8Äà!Æ ž öþ1ð\´=Îw(F­ô®ø‰¥:¼OŽ µÌ@ñÓ¦;±ZIaU•k/Ø\³sPœ7¼œýˆô²!ŒLÖOmY黨^àqӤް¦ v&ð=' ˜\M8ä^ÁÂŒ/_Äñ:êˆÈ¬Ü’ãyG“;c:¼‹ÿ1lz[tpÿcü§Rác™[ŽÆL”Øp(úb™Še³aî4»Ýl¬]ËUÊÌJ ¢5Ž~¹ÉË_«ò•XˆÈ£Q¥ÖUö¬Ô¾ 0iLröØKàÔŽjQhÛ8•½ã×-(Æè:1S]ܽŒñÅp¼w2_JV¡«M÷ý]Ùå©O/Ω˜ŸaM°>ÓG½M_Å› å¶â8.CÜ‹$:ƒ¶ñ€ÚMÝ¥Ã|£ßá¾;Šn„•r*¡øêEê÷fG+^B~ذ¯aÿãÒg PãÊüšÕ±ëËúö<>¯T,º­[¡òFË©xNÕ·½ˆ`‰·Žåfîs¯´7Tá¿\äŒ*»2<±»ÏÑfhn–=ÚŸàx‚š½LÖšH~Ò¡Ëd€¦”x_ê@mȉnÍáU¶[²NÓ¾ã*ûS£c4zy¢'ôˆ Ó.v³Ï߃¦áÀôEøºV~?ÚQÄ¥ JÈž—OÕL#±È[›‰s%’¬±,„1aËqŽDD¥°$w#­ê_ÇH ’h:B(òÏ68­¡÷æ»°YùƸ…dW*Ìè>á^¹ˆ†û­dn=ôäãî§…Ú}ß’<õ?Ö¼5tsG€a5PÄÓ*­#Aûœ|ßÅf‹fßZšHŸ™ -Ë_[ÔÚEðXPÆ`_JV©_ L6ùà,öTLÇöãÖúÎ.0Ctƒ½<ÿ¿ö)½ÎYùBªš£»£V¶/äx2^²Ø½új£'cð®ðvÝXÖrç\,﬉‘¬ÌT„QE÷øG;šYÜ ÝÌ£#¿ìÌ8£‰ÛF Â2ɈÁήbu áBM9óÉü/ÀÄ<õÁv=ÑÀTR8<ÁYï寭‘ÛvP28ª#ÚöU¸]–à]Dªû[]6¶½É–«o1´Múz'Šô¨'5_ìÎ]"Y9ðµLÓ-és4¾E÷Y’+Lžf´Ø3qDë(Ø#=O6š×o¾Éöù½ìmÀTóL‰õª…Y`æîÌ:O¢ å%¤z;D8§§ªíéWoÎk±§o,Íáµ¶ÄÂà(¿A¿c?]#šÞ+\aPcðJ†n9¶2š6çÞ†5Oר–¹þn©mŽ÷Þ£sÌU9Ùï|CH«|/ –AHk•¹$Îh^ý'˜wbR+úô¶ ÚÌè å’±ýDû:§.8vÒRÛd…@îC®}M*ËÈ5TÏÛÖy(nÆ7$¸°žÛ476ýVæ±v-=8a–‰üż–2»À&Ô£à(7ÃüÚR»ô¨6©Qùƒ¹8ú–vK‡V’1D5Æ÷ðÿÒܵ’ÉMÍ+YíE ÍùzrnÕ€-xúæéÄaxà\TÜð¾y1m¦’x{:åÙCÌfqë!κ.šâÌ‚áÒYîÖ>ðÃöI ÆÀTûp³+x〧}EË•rŸÀ‚xØä‘À4å¾I†¤ÜB@©ÊÂÚâÌSb½æ(w6Œª(§ç’‡Q'u¯¼ÞF¾æ#s=ÚDÒ(¼iÚ‰Ùƒ¼*Ù,øþ~\—GÿV›šÝÇDÉÿ™Ù»ˆþ6—»7"ž©wIʳÙý¦ç~ÿæŽ)Ýs³èòõ{®¦ °ªz!ý:ü Ï7ÇzƒØÓÂTù~¸©öÛ‹N5/n'ÕmĵúãJ$= ú.w*hÕüñÓo·*§Ëäå ×1Ìÿß>k_Íb³G½kú¶X†™¤«[tí6†*Ø© ]܈²úí$ ¥þ2Ü $Kf[ðëf¾År”F²tF´àVÉ€?CÂê”p¿wh$)‰åÎ%¾1xó¶@E¼mÝ ì×]]îmÆ€é¼Mþ6kÁU€ŽåœôlzËü î«]V¬9Ÿ{B9¿£çCn&c5e©0Ä|OáK¯è@bÓdV•d^ÕðäÝOmÁIß“ül æÂÑ-ET’àôç§ î¸Å€™©¦•)"6tëÕ”¾ì—-Ü{ü´^¿.¿¡KÉàÁCéF-ÂQ›>Í»pVf(ÑX¹þWtù‡vÅÀÄJ„€ªðƒ ]²צ:ûÉ‘n0¹VáﬧÄýºI{ÅANðÊð¥úн§ˆ…Ý0gõA´\‚Û†’†¦°ö‘Š|cõÃ{¥Ü0|*)'Ü Þi^ºÁïNž„£@‹7=㵪7ÅXØCöZ¡+[Cahä)2ÙÎèãJ_f[ c«’m”ár囑-òp¬”üãlYíImý ²iòΗe=a= åÈä^Âxýsî2‹dm3屿¯FkÈE¢|]oÊ ÃèëvÚ›ÓêpÁ¢úƒ6îШvˤ’à0Xæß¾Ýá¨çêocã…ª¥ Vìýg+ÛìcytÓ`Ò·} Ÿ¨UhNbÊ+%ÛTÉÚ¯gÉG†Ç™ÙܺCÏ1þ°­’ys½Iù–#ÎGÒ †Ë|Ádc=óC¼AñŠoï}Æhnüž¡'ŘP8‚UÑ•9‰ózLÉ Ýu@½&l½2„©…<ãz²Ê®ÄuŒÆìNÄ¾Íø\¨úÆž)µžMNtvbEû½ÍA0]à$I…™¯Ig¸¡1¯#yægSMá¤AûŒÁŠU™íÖ9ÒIå Ú´Õ†6Û¼r<”¹Ûìæ—o¤m`eÑ9?G4É$|õÖÝûµpR‚ lè%÷}ÙB/`šYU°ž¶ô|¯I"ÜÝç5÷í»ŒÞÑ"=`Ù`àÜÖ·6m |tøýå9>k3,òLYù†‡¯6"Q€ Æ€Ìuâ@#lÑ"f—‚ õN¨Ü$ØÏ|´jÀgrDZa…æÉûµ½˶€?b}H$ª¢ñÁh¹ÎGôêY·ž=ã0Õyº)G¹¦’7VYéOMî¿–K ½°î°—+)£—VKô׸e-£—‡ˆµ¸fI2šr5 ‡+€£é´Ù•–ªéÍ=Èqy„@¦ò?ˆÍ÷^ýÈ aÉ®ªÁ*”­£,=ÎË<²î`ˆhmhºŠ„cº£@Àýê×;€—bÍfj'@þNÚóØ%Q؈æ$JXøÁ06u|IC”H{±­ªÖYùGL iN%ÑJ-~­½'ztÝ9j%>mš}¿]1ç¼ ¡ÑyEP.–·Ü^ù´WN{Ò³½ºFHÝLØÄz x²ñµC?v¢â觇)MÐÇÑhÜ:YD6Ÿ»–}Ã[ùb¢?›÷ã*ÑÙº¹VÎCÜ7)á=¾uþ8|ý´­éx†k³Ùe£CЮÙ¶\0å¼Ä ýö"ò:|–á9:*§D"Ž…š—àjÌ Û‹Ü€•KU­@Ÿ°=Â[=igh>ƒŠ‚d!è˜÷ii›.2ThÇGT@Ì °}®÷\j›¸<°-†~€Ÿ¢¢¶ gŸâ qAÚ«1 ³ÛDø%4él¸?ÆØÀg’ëëÇA m¥¢ò&‡Puöá/ÿ€cWlÍ+HXSÌì' pkÝw~âѸÛÅòé âÊY;Ø–CùZ7 RšÏK¢«EK°wJãKþºeò߯ÆbÉšœ “yN†6X½<~É2ˆ“|Ë ™þç‡X+(ð¾¬Q \wáué…CßÜ0(×39ìvÛ…ÄâS>ýgêÍ}‡bEB„Bäã_™i©-Ë<ÝPoBöúÅo‘Ñ{Cc¼³33 ¡Îbxª·“MƒƒyG¡¾ÖM2ž„Íxá¸âéRuj*‡¶¾Fïzû$Ü•->•¥':95»”A»H@ØôFáC}°àD©ŒSÚç¬Ñu&GútØ –"uÄ;`ÏÁ[$©"3Þó×]ë¸5e`ZL“.};e4Í#™Ñcç±ÂS=’~ùk¾Æc`œÍà\q+j§ «^ê@P y„$sªÁ`èê›qÉȸ”Çì°°“ÏÞ_[†˜<Žq$Ôþí1_²§qIï$cÏ{]’âN:ßÚ_ùö©¿dT!¤”;a ¸rߣ°kß3ÞÌ’fŧ’ä[GªÅ9 ý¼Ã¾iÆàúÑfz+¾.X;[ÒHÇÙSŽXî¹Xú’VÍžŠêæá㙩”ýµZ¤†ˆ6e'êÇ= Ü/Z'¬U~_ý'\ˆÁ©Ûè0PþŠûÆNõ1®w7‰ƒ€í×t2XíEüÍ/Ék28<óX®ÎÙ`m˜*2üƒ±@çœÞæ±ÙÌ+Ç×Gé¸È»€š0k1ãÿ,­¦û¥i·`‰«hDÊ®†Í¨T4‹:]e+'cÜÊèéñ±¢ä):RÔ|­ê¼ð ‘r¹ÅSä͇®$ÛÝrÃðÔ®»U0wjzŽÛúJ]›p7‹Â.ôÍ„Edhì€ÀÂüËL4iD^¦NzùiôþÔ8Öh¾c¬d0ÉBN¨€ò˜ˆ­þ +ùZúì¸wîÁÈ…]Þ/êc°,Næ>Y‰ä’}Šdާ¶¦}>p[]´‹f+WÅÍuå§iöOÿA5e":é5nͽ^ê8[mWH}ÉÄŽ|'¦­‰ÂàÞ6±ˆð¸´{íH_À>†ÁæÓ2–; FŸŒðG0éìi ^pµ4–æm²iGܤ=ÒvÃÔdd9œÚ×vUaÄ{U‰e;®;í¨²- õ÷#K5€Ò%ÕH–n5àõ6ŽXã wåÍ/G²Ÿ[õ' ÊѸf:M•¼·‡õÕx8%®$˹*!*Y“Ù>t3òßçÄúUc>wLô;Ñéܬ½”*Eó„¬CÂÔÃuDº71’ŠRð|§Q§„=ñÕ0âørIÆ,@Öl{[¯sÈš^McGo²;=–û`°"/®;“ҦϠP|¸ƒ6ÉB©½ÞcÛ¶W>ÈšaîVñÝÖeÅÛºÆO‚_a\òKèl ÉÑzǨž;˜‹ãþÎ_¦ã®ÂàPÙø–Ó´u¤´,“·ëM ŒkLqzï© ƒ{Ë/ÛòÑ[Ü3†ùû”1º7"ÊÀ+¿ÜT²xÜ:#×@î#äXËQNØa2hÿ7ÿ²€ˆPs_MÕ8Píiç?Ô Ì‹¢ëg:RßX¸OMêôtkR|ÔRðñ3";˜cŸEÓ†ö‹ÍUcJ2G“L[h "šÁ6ħctȆüoe;RNê>LZÞ@:oØ86†nÓqJogTÆ)‹†aƪP!fRüë+F0âRžcÁœ¡Œ/9ìXhÓÉí˜ÌþµÔ´³.¹ ¿ØOoRNÎd¯ú!•?¼GLiöAeFaÔZZçâ„éø HäJFÌc;ksޣݭé@CiÃîŠÖ†Š¬uxíoj›ä¾»#«ÌÅ(Z‹"êßÃí‹rÛÞøÚÏP¦÷ 96¹Žƒ&0 Be­Ly9®¦¢¼"2½_C¦0hUl¡&Pž€©/˜Ð$¼þPOuDf[E0|9g$\ã¦Õ‡æV^˜§_JßèEåï‡þ>ñ+…ÈYä3Á…µ¨1ŠwÕ'¬˜§Ö@&È›NŒ©þ&´#Çç€ I–.vøCÕ/NðA(%v®m¦’Õ™ìf+Ê.ûVu±/¯Òp¾ Ûã,÷ë'®à b?eMþ„tß«…ؤEÓŽ•TJo»ÖõTrO F´§¶ÉÓ@nÞ¥Qó/Ì6h:S^W”Ã$I´;Øvc–X¶Š®¨C¦A¨LѨ”Œ5}˜¿ÕYj–à,MinLk}LpûWܤI®Œrk›¥6²ÌM+"AÌÉ`oqÔ÷g2$`ªIëoKœîО×J4YN´Øž”ÏôÄC_u£qí!SÈ–À4ˆèàå¼6 ÷±‡úÖÓZïÍMïÕ»vÙ¤»:¿gÃ&. IX쪀@²>)\«µÑ;XðÑ®<=h«5†Zí|¡(CÚãhr%@‹Á\õÜis´P‹>Èi€c*ß&Çfæ`v¨w}ž–Ìq×?ÔúÇ_©€ªwcÃÉ(á ¨§ÓDí#޾‹¶˜Ç¯Bê²W¤4Ô›T{ú`cNµÜ;€­¨¯.|NUÒ;Eo©r‰˜Š¿ë:YrŠ™~ \'2)oãõÃâ®z5Â<Ü‘7CÂ8ünU~ ¥mV9gŸh{#$D!Æpã‘—³{ºÜǰCþÜz6;¹YÃô±#¼{Úmhï¶ã†-xˆ÷ÜÏ".-cÍ«ÛvŒžD¸O¹cÏßô"´±ÇПÔ#´YBPÞu‚þc2z‹ D1*SàPu-Ä©Ñì«úïÀy·*e7ÃwFÿLÙÜ€¬ñ×èd@¾ÙΓ §œ•Cu3âó´E܇—°:FΈ^µÇDÜC Ž<¬xäŒÃJ÷É·|zî"%ÿ+…ë‚´ƒ“Fûyê Üoê“ÈçûÓ“{naÆäºßW”ºÙ2çhÉñé*W’¹Ó7Psœ¦y½§Œ 2Ó(Ulƒ {yZ ¶8¯w@;_l]•cÌxÛ`õ 1ù˜ç\M8ï ¸Ç]GB¸É伪úmg¬û[ÇKL~¬q·ñþ¥<ýÉØYä ”ó«Ur!̱ÉqGÙÍ9Ío%Ó‡ÎP¨žW]:ª¢‘—†4N¬‹hú`²‘s[Ö!§™åˆi?yçBЍ¹>ê¢þˆ¥Ñj´ 2Ù½ì‰ÝÑ]'›ýð½+¨Ó„lÀð`‹dÑÇÜeö-ÝlÖÈ%nÌ–™XWµkÕ™îõj¤Ò|ì”8Å ´Új¸i7Æ}QÆëü“$¤ ÅÚõjÿͺ›‡/&^Ç:Âu‘gMNº›WŠtì@»åè•ìoÛŠ'Â\ G‡?mùç"+ËQÆûY;?jHçRmuµ´º2h¬’ôE‘`ܶüAsZ‹y`"œ¼Nþž+.µ‹Ï"ãÑœ¾)ºEî3‹îBšÆÆ?³ê…ãôj÷%é<ÐFª’9—¤x*ŒŸ4[¦Ôž—µy+R}\1‘s«ñòçCpg¹Úr‹Ø­®cÿM ^s0’ ,›¹ÜÜ2aëâL…5Ú‘T½­NÜšYI >d &Ìfz»éw8Äu¡0ƒ©úV€as½Ù[6WF¨ÊsœÆßöê Ø Uª/øäÎcSKÜV® Ñ%f+y/(K*+Å G‚z3Ω}…gß4Ü”aÑp1n×BÄ1mN<ó!éȱ‘Ä ]ù ‚>ÍQ•k7{Cf´¥Ù´c x*çªB;TùW–}[ë1ïçà˜XjJe $vðy1ëúPY¤3b…;iH¤î¶ÝTMVdúØöŸ9vÞõ ê·™¤|òºëùõ¸ØfD(§Bº©Jcà [õ <¡|À4£Jû›9pª±§‡êe=çѯ@}JË1É•f‡²Œ|ô™|$†/fŸ±RCPéÉï1)ãvñÂ[©þÿØ%El‹[ Aå-À1íÝ'r›.f¼v(CË®=|´©?_«.–­ü:é:Ÿxjÿ8ÕIäÐGt|cÔòY¶¦Ò’ù™N†R—zI¾Š¿zJÄ¥Ï0lÒÊ*à‰ZÕJ›m6³0ÞìÉÈ S{™–E3Â’Ð=~pÆ9¯3?ŽœH‡w7ˆÕ±ÜëaÙø8‰—ø…UCšR[a ÅŸi¯jù5[/PÞÏ‚ÜÅÏÌß›™_2Ãþ!„ÙUn‹G%êØžôBé]ôt‹ A-ôÑ5mÆ­â®ú 'åZáf…±J+‚’`Ÿ|ÄÃKl±qX·Úê3©«XM¹³ã@/¾K¹C•ô99`áZ~æ¤Ð²Ø™+\°„A[œÄ­•ص@®Œ(v9”âtq¾¾ oɾž=1Ug×û‚©"ÒƒÎj£2¬.<­eÒ³ä†ÿ!$¨^~iP"HK ‰£‚ÆlÏaÝýZy¬ ÍÒe6%¾ÖÒá¶]¶ îH6ùƒ có/¨µ82žÙU(ùGzxO»b­®ya,âúD7pªZ° é¯[HKörà«®<(5 ŒG˜Æº¼Ó!S¼FüÖš^ ø¤ï?g15Ÿ b`I³ªÖµU¿PH²ì&+éã<ŸY:(”¸+ ªÕ„Us†ç e9““7–âp%—]JØÊô*?Œë¹^Ì_Ä ¨ÒƒuϺ&oÀ=-÷!ý:jàž"'uþ¯¼Z†n~’•=¤¤ÿa+âØÎ;õˆûU÷J>eô ²ÙU’‹¨éëK­Ì1àÍÒ–ñ›o9hŽΜº`Q„¥1]øôðx¤vEý¨2.ö’˜ÎÓÒâÃÛt‰ÅÓ¢^s¢"¸´=lû¿óÃÅ­ìˆ!޹ØÊ¯©u§×CQ8„†ZAPTukÝ'/äf<"õÐˈ~Þ“¦s„߆÷ßYA¹!†/·ÜGW³Ð¨—2¤IkWDɨ´/ê8Û›# #jc `¿«¯;"Éh?/Êë@­?ƒ÷ÄÍÒ^1ØS~'È“ARþ4E…è?-8ú*—ÿM‡ h ïà$ŒæìžX?ˈþ²øˆ“&Ѥh6¹Šh¸tÞW¯o©Èjв ì’^n‹óÈx*H`×ß7éŸuË9öˆC‹á6ÖX`èò© [{˜Ÿˆ™g@bñ™í«P ·Œ0î–¨‘¨•Ì Ëà0¡Æ¢áZsN@´ú0¸hCö™³…Ó,2ž=9Ì[„€Qv?@ÒÓTìÔŠ[GìÝÿqêÌ J£Ë¹HÍ`ÆhD”I9öß²äœÉð…3%­ØÛ3œ§„,âùfï›…txSºç('7Ýë¶@…¾W·¸ô½Ü¿’°>nÔûõ}ÎÖõUÄ,S‰f¸¤k<šëõ|’ÙäÃPø 3ƒñàõ.»øUp]…è» 0½-è÷;zK‹)ÅÔÀÉ  žSª‹û|Ê`È™QA›´=9F¥ô>8|˜8prôá=ûÒ=Þee6‹ªq„çûšËDAW+?·—ÕÂax©ðà&lÀN@™ §æò鮿ðÑk'VÅ@@“îÚZâ'ö°Òo+®èº1Q$¦g‘] ^…jdMÕtëoYsÂÒîvyÏ 8d+ÄgN¬t-½„ŠæQˆ0§^Æ`*sÀsC|Jm¼¾‰˜—¢ï §ö± hÛœ&Fùç ðìÄ0âx˾úÝâpå3À5ÙÄH9µ[p¨H»jüÍó~Õv¡HÞ?Qçás\ jkÄ w?ës$Õ‡„å쇄ûç´WIGó@n¢ò¿¢ íS׺l§B*Ö´ŠÜo:›^–<•±ëc©É73›Qwª´KÃ$3'ºZ*êJðCAJ#þôæÄTKÏš=P™•2ð§Þ÷Uî[©ÜÈ,¹>ܨ˟ôÎGŽ•Æ•ìó¼Í½A#Ÿ‹Ëy5j¼©Ob¿XÏé–óåã~èR8¹k¥¶° [qyÇ®¤ë5þLå*£Ñe/QìÉš F0}Ì¥šØGÊÄ&Vž`>qô äúêPÿÝùI›]êIu4LŽªåÜqoä¼ÍÕ©UGz¸€@Ö õQÁBê&zœ^ÁÈù0›ÄDã{P4Ó(Ó+añx6Ýk7i§E¥Z.yULNͱÞP̪\üÓAÅ窙s],ÐÍù Oµ p)ü° gÿÖ3ñ\D8)ZnF©ÈêÜ+k´ë¥gqÑ.u¯Læèjbz‡†ëäC0>ÌBæàÝVvêzw”êþXµïÃ@=¬ø9Ývæ7^¼†gàÃ~y̾˱Öq9{Ol˜.û%•ÈV E,=eaŠ[Ëoß!ؽ¸QUýµ‹P+й£’ö:š8L§Ñ»èLÖKh·À+¦…*±È ¢-þ´Ö ëeXC,.LŸë0¯úò˜LbŃä"€¥fêä±iµ¹µ6±½y¬ådòŸô“ÌT y)žŸšðbò‡Æžh‘6˜YYIÕí%—úžË¥…iå×蘶jü÷F'¦´.?~ÿl9½pî(¨o¥GFÓK˜ã÷Šx)õ9M òÏC#QqÿîkQÉvYd¨ŒÁŽªÏ‘UyÆùb$LozL0Á—"S£ß2ÀA‡ý²$‡!nNN¸n‹J÷R§Q®³SɃ#Qa5ߨgA6¡³€·g7#¬ÃQ&zõQD•£ }%°"•¶ &Ýàì¹šŠ¶7·A³ú³Pï)n5¾|+Þ9À nêöºVðZ¡}½#â·»¾BøÑ±™”µ™/'ÒÝ DýL¬’¯h&‘þÛ0j¥aåxÁîqö»*‹ã!¯Ý®ÓW”#²Ög‰(ÎyU¢D<ùd4p»y3)L»ÚÜEï´¯üC$†FùÁµ¨êReBîíБØ[i¸ÎˆÃ†dCt ?½pþš3jÓÉèÚS¯‹”{؃àö­–Àˬ`&3–L)UôaøÞK˜=Ô}ŸhI}I y•¬ ‰t€x (÷=í)íK$ßâzrpÀú,Á“]_oP0nYƒ‹GIèÊ6F5ŠŠ`jÀß !c) æóÌË?ò0y[QJ­­O¡ÅÐIƒæ­ü#bsع%ë =[Öæ^§/gÐ#œÌÇûWð0q¿SÓ”sZ &‚̓#ŸA¶Œôv¥³Æ¼àÅ–0ªÀÂá?¹¡qêWÇZkôS¦ž ¼@(LÇ rÀ#½µS¹!Wlþwñ³_б0¯Ì$Âë—9çm禈¤|Iö0ãÕKò•™˜fBpjÇí_Rm#]Ð+4CæM“ ¬HîF½êhÞ5Ì’Ðʈþ½±7l@ßU›m¶<8Sm/Æ»“Ú)‘ÕhJR È´nÃaµÀ9°MzÚ™X9õBÑ5ó£¹ Ïý±!ùˆþO^IÎF#ë$z =X ìðj'lÅgXLÁ¢ÍÏKíߪLø=W}Õã­-\éêY”/ yoiý˜o¬aªóúd&Š&«,jæMzohôE!•Ë䵨)ýsƒÈKLßÃ3`XShxç{ÿ˜Çš·cvq4èuûÙÏäÚ¼̨õÂ6ÐhÕÜ“ŽoMë`M°|ç^ÝMýØ‚sŸß@jEC×T*†Eÿ¶•)›n©ì¢4߇±+’CÄ|H ¾]ñBÝø[δM*wWáy?‡&Â4vXéß©Àw‡Êm`&œÞ_°Èõ«ÔÐMδÃûn”vÄBÁF—Âìì LñãTžýÌ—%¨½w×ɇý댾ln¨¸¹™ÅüB¶ôæ†ÒâÕoÁ¼XÏ€¯kM÷*XïŸÁ›å?›„ \itUM2ý³jŒTwÌíŽKå¸:ä.š°Ÿá8':^¬ [²þÒä’ #6vöù¼Æg¸&¡"tÆ—O¢ Üfâ²Á•cšÑ_´ñÛV[÷Ù†òú½ŽfŠ#ÙWÂNßÅ÷ÅyW›ofÉ5œãF¾pp÷Cæ'õJ’!§ÂTE.q¨-&Q c/0êåêåæÜÔf4ÖAl*1z°h¯¥ ÑÞú+›ÇÔkØßš‹‘9u}* x!À•‹ è«­‹Çáøaå$VIªrój&½Ý ê] ÍV…Yj…ýŸÖ.‘‹§f…Õ4‰Í,1©ñâµÚbÆ5< éM(QºkoJq׿\nÿí¿ñOî¶vë·â “´,ÇhUq²Víg xSötŠ,•M«iqƒ®ãÎO“´úÆå ZuðLP…ºiŸ›ŶD=¹O¬p,“†E* ]ÎùHû}¤E.®_sê÷—wz¼é s/ßìÌ ÀPeiòá¶Â$`—€ÝÄ~Õr˜ØPŒð=¦ýµhþâµ![¬ü/qã3lùàróœjG žPYÞ6~i¢­š`H 4þˆš«—òÿ›¥£Ñd}gΊt­ù¼["eúñ†'ÇjM¬l?„Üü…Œ^ëc‡šö2Ÿßº"RÉ7¤7 ‡Û›Æ”m‚DÄTi2n°’þ¦/ìΨêC¯UÄh_îÙȾFçÅØÀoÄ—Oºï92Òû™T9:ç¼8Ý´\À ²{¦j‹­º™Dò½1xþ#+ý[ß'p¹8tŽ˜Ïšfc?„p`´Ý\bòÅásAË45ÔÙ¥ÝÕ™9 ™ø¢µsúoà2†æwùÒÍß1ïöNÛAó{é½%OV¿Þ¡ú…ÕýÑOÇŠÚæõK!ë)Õ{óôòn‡_™KtPáʶ¾Â•Kv üË;”kä¶òÏ´©D0 :/\;M¦z·ŒÞ—-Ú ,ö“Ø^Ý×h×øj×}‰–íº”–b5*eÏÝ—Õ:ñ¸0IQOR£ä¦Ã]L5apÔü«äš«ÊXÊkk³ù¸ÆßŽÅZ‡G ø¡ª™;س¦¥Ý…œ{Y*Ì$@ñ¨•ë™§œÑx‹=V¨U=û+³FÞuªµ­oˆZ¼Ÿþ®-K®”ù«Gæ‡ ‚)0sMZëÅÌ6 Ììþç0ô }Û¾ß|‚ÖÇt;Wï&BnÛþ[ÜRt ´žgN¤µù¾¢ÝÌef»µ:¶Å·Ø+òhÙ×.#ሠY³WR_†ó±:UHVí0ëî7¢O/OKsâËÑW`ŸæÀ±^C9”S 4"oÆÃ2ð7§avp[ý*G[у®ê Pa­fàL¶Êw|oÓʦôÙ}¶N”|dW´*'u0V¹¨B” äÿÈ‚ÜJ}U–Õfž2ûoxWþÜýµøO›¨!ÐvHŸÇRdÖž<*´x§™‚4¦‰'GPLþ6sìSÔóñr½é­‚DïÐðjÏwp-ªeMø –Ö߉+q¼h¾+!­pPãR¬Œ;¿Û¬Û¾.żŽìÈ3H.>&—‰a5ñA©±”./ªvå)Cw÷öþ«d›#@Tã6-kD"ó!íA1 Á°ï)¡×dL ô…wx>b /ªö´1U*)IXA˜˜À2&|Û#[*Š;-#LòØ#Êgr?9è›´¼…l¡²Ñ[s׌vùy¡äŠÕèÕGé=3ñÑŠ;å<–aRÑL¬~;‹¥yOŒm1¡E•ÝMaŠÞŠÀ$\Îhmûê¥ã«Írš#nè"BYN™,Ðaï$R»|A‹YD_ÃßêíñÚÊmÿ'ȱhZ41™ÇEWåvÜ|Pñs´Â†·”ÝÄÌüw¶n[B×ö,Ê4h² -S’øÀ"ŠqÑŠ<~ðIíì—Ôàæ_¢ªKšçp¸î‰Ž—X>p„˜X„ ˶ÁR±ª€$.C 6ùu5äTgú0Y´ ©=ÔfÀÑd™Éàz¥-ÄC*„Ô-鉣£ƒ *ó}[š¼6T‹fÊkzb*|4ò<0H|fü_ßpÄÑî„j¿=› <Ý­dˤbGôðˆHÎлŽãÔXeFH™Ó®´8’Ø¡w„ö$4ö1¿ò26‡²’Ým‘»àªI¿tVóëG®è¦Xíì‡qm¯ âqéfMnDjtÒq£ ­KË]Ò×ÃѲTëW ªB© "½(ú Y^ÅŠÏÒ"æÝnCѬfV‰qz )_eÖïle´8QE„ Å[a6ƾ)ŠX,bÚ}+È"ý?Xò$Uù¹s¾ÔŒ !ø¢Jl+WÔ¸ºîQ¸žW]1ŒªPñ38 ̱³¨šst‚Úmmãňÿ›@Ós*Ùªöΰ<ïà y ò|ßã·™V Ç8ÏÅ‘`tŒ‰°ýì•êºTåxËZWOꙋ%y&þBìÓJ`±Ót‡! qȯ<=4;ÊoÖT»½º*Ì ÿl]bßMËúÀ¶g7Ö¾ NŽí3„ùî´XžA½:ª9ë~åç&WßMýÁáXA9l?¹ƈð^ß·yíFòô?òÁýG1P[HDÇ}÷ bx˜GcMq×€ƒj¾·¯ˆÁ8ç»JNÄ`4µ‘Í»e»úÒ•†q6˜ÞeO&GYc2­¯Ä÷uœB3‚ê8í5õëp~P^vrùžPÀ†"íï‚0 Ћ] SZšçª]f*?,r'áBJ À†´•ûÓjtˆÇTOœ]ðó¸¹Å´IM+:ép¾ø°Y»V v)3xƒ+ëÙû°EtÄû)½»á|²íÂŽ>¹…Î~ç•zÏû"b }ŽÝä—#p‹J¢›xUô)‡M ëò‰¾ðöîA·!A µOI?÷JRÂÓ‘ÇdrþPG޵ˆmËA9@;-Új#3ØW¨QÈv”zlýá犜_¾Êƒ¦ÝšË¦¾Ho¬_Ù½DÀ‰:æÍ:MÜÚ:ŸïëW‰- #eêèäSôL&@×WÂ7²>â@@@¡>{Öӽ찌NB 8 ßU+‚\SÜ–ã<¿Vø¦kX×ÛÏsÁKÈ»ô¤Õ$s—z`¸š š’¹Ù¸ë[Ý_ÿ;› LŸNïá^Q0 î"0[à9W­jx¯Š_ËnF·¯êÜïÆj{ìW:$6b¤diȲ¢¿| ýHÇùÚæÃ¯ï ´þ7K‹w²F«|¸ Ð\6w2…Z®6ª¾Âç›N …ŸÏJ[@¼¿©í[-šÁ;AUü,äÙZô@½ÆgMØÂz¨2×陜·›qu—äd2ã¹ÚOäìr"œNùËu7ͮΫ'SuÞV»ï–Í(¼{ö0L†Åä»BåÈä,j>Á`(0ñí´ƒ¤0Â¼ÕÆï I¯€©£VGî1eµ)ÚY“»õO%»ƒ9oÞÄ8¼nM§W™ñóÜQ»¬Šº¼ê¦N’n?ÐÎ6vL›T=03Å#U= #í]b^ƒï z 1G ï¸§ã?ˆIµFí{:™´í§}PÛ'§t…[ú¿ˆ.$ÝóÇ]hk}yÒRøšQ dp˜ùsž ¹´d:³å?PwÓ`!€G’|ݷ懋 ÓUœ}­,¦´ªME´ËÜ?g!"ùõ¤ñÛ(D@j°#ÁÌÍéŠZn×íÓ­ç¥:^¯!ûmï"ÞÚÀÐ]êøTb8Êjš¡Ù)N…$j8ÑpdäjÊÆGòpn«Í@WAœm w¨ðB¿nk8zí2Ž#ù9tSÏng Þ$`RzÝãÓôÒÿ½Lé9£-"*k¶‡×ór‰éóïP­¥‹ÛÄõo3ˆŸS€ôãT§Š³<}1¦#ˆê§Z*:I0—WœVîï6G¶±[/lYÛ$³a°½¤ƒhATjJûå9G~ÿ¤ßiU Ü7B¨žüHè-š÷KâVÓy²xè „Q mM¼˜å Ñ0è$·|•„±øÄšÀ3ûO¨,íG¯ë1r².Ê:H±ˆG¹$+œ/Ù÷®².KÛn™³2ˆs ç7Úô>ÕÛÔ±Ñâ@÷ÊX›ÌL^E¤„Wf¨èŠá!/!.,®Ú\óu³„Eƒ™þâ¢i%îb¶êåP„)H;¼zM{ÓJ“0nÖ‚y‚½bXÀ憤ƒf(O ]¾€3 ZspþV×LjnÌô&!ë¤ÈXÙ\à‰ô•Ä«C‡°e¾ÎF¬èsÛ,¡ÍÛ Í‚ÊcÉ•¸Ô@)Ÿ•–j]ª6ÂÓg ‹OZò=‡lÖḬ̂1 †ÁËS ¢Ô†6µÑ’TÃ1ëó$«›™¯z€‘M.þ†üŽ)×E”2è„R_´ ¶ÞݨȘ$¡Muu›––ÔÀÈ~òÖù# 6n'Ø4Ò››MO|°Fµ×Æý›0Š##VuÑTßRº6 <áK«—œ×°ptÌtˉf[gäõKÖÎËè4Rá`õÀBs4Ü`©6mZay K›)mÈýô笸½Ì!uÛêY\øÿ\>òNLlpWAd©ÎÏíÙãjv®ÈU>F bÞ¦I}AÆÒþOm@Y­0v›v=ºÑbÈw`ºÏ4Ëòlþh… ¼Ê–õÐgCd±à½^a”µÉBg˜ ÃûkMTŭEÖòƒ½E`ÏvŒ¾–žÑƒº û’(w¹gwõ›¤Fʰwfž-$Á…¥OÈêâÜfÓi1*ì âÜ©\Ñuó4CÔ‚xï‘™ú¼tÊ"ZÖ’:,£Äôݶ²í?í âà“ü+Gá?ÇWaXŸ"–ý– ùúRý@¹;.—@¿¼}aËMk-nË×héââËyýŒ0&—´(TžV>Ö¥’2 dŸd£×0´&—BTø½ŠèX˜äV¸VcS2È{r„ÁÑqùMˆcÐC2àbÞ×+hB¸Ç²¤¼Æ‘U‰ÁÔñ ÇÐrµÔÌ·'Q»ŒKf– w£]uvi“~‚ÇÌeS *kÙÄŽýâðWHÆl›¦d¶wVRÈ~'™cZÑ@¤ÌÆr§bû6¡;tÙ@³Ñ3FyQkt*$œëµ zuø …â2qÞ¬K©‘e]F¾鑽ŒšðtðuvœÆ7Íl_ö(!&ôøYÇEé…H渱*E— m¾®ræqjŠãê†t¸„Çi0>âš}ösi5bk“ª+P&qÔ.E¾1!¶LéŸ^Py»dâ¢KV6M= +Ûösð>´ˆ°TØEö‰Á‹m$EoŒñ± »âÔ‚¾Yù&‘ÇR9‹t¿âí—ÔAO›I½ºÉüIÅpâjÖ¨S{^ìqšÄFGZkŠ ^Ú£-›>O5}›¢Ÿæ - ø.„“=b$ÓRé{Ý·'ÞQL°ÆèçÒ è`{áù[ü‡és~SûÝØ¿/K;únÉF‰se&sÅì„DúnªV!ü‚lƒÀˆåÚAwúÌ\¿eûOÿ“ÆÓ3þÕÙ€òpˆaòy–#V Á¦Ç±PÓÖnÚI“Zû«1ôd(%f…ÞƒÂì£ ÅI%¬õ‚ĸj†¢RÓ²ëw‚2‰h†h²M…©S6ö‘O—ñªJ_nË?]á Â;[BéêÆwže+šÍ:‘& â·çUëÔD&œ^›Føú0E_´6 %üo¸òLåó{yj'c\ãŸÿòÌa Ë`~­./‹(Îèg¿Æl\€Z%©5]ˆvBú¡£©¡ˆ½ˆ9ŒÚ‡¸’O#ÐÊ©¿ññ Ù€6¶1÷fPóÜ…»èÏü@6.æâ¦nD.>„5Ï/×Ü>N{aëN8ÁêÑDÛ)%¯"÷æ|Û’kêMË‚Y øvì¨÷WÃH«Sª]#®—W÷M I«|º†Q7êóßý‡EòÙ8ª*P–qzB³ni©kê0Åý-¬,ÿd5¡h|†nêx¥ÎF„0\SVz:/;¶%ÁɦbšeØUGÆuEJl~\U¢%¦ù6³fx=—D%ÝÚ`¦åøuøUŠ¢¨ù>€Œ/¡–H+‘š¼B„W•Èã»m¨ÙHuHÕn_»UÁ A®>æ¬FÀž nâÿcE²:fM¸ê——uêD» ƒîÒB=cì?ë¿°À:}Žïðð™M7¿1%‘žgmn²;!ðŽc.ãBF —p¬µÀòp#¬šy$×ZÀ±. ¯?ú,g ÀAì¶€µF{öqà>;>H“Á*öbl3×T>IWh6ÖFúûc¨=?Ÿm;ž ;¨ž,t¤:WˆžÌ2¡in þÙµò{f(I&’[¥|.Nþð‚áõïÿÅÎ&¡‡ëU™@¦ˆF¨Õž¡¨ƒÒ®$ëfX~¡Êù¤ ¶ÓµKÝ5ÞŽºÀÏVÓÌŠ¤µFçÖx@X*ôZÝ—–ÙZ|ä³™ ²·ç w8«\6<åŒ&€¾yñdÒùÍ/ 0Áyœ»@¾æ…>ls%ñTUÀ¶(š=B¾µ™kVÇàÞEÇ™òé !k>T>2PqÎ|ñÎ5€µ›\eç[J=]ÝÖräï^©ì2! b×*7S!™h+lÚkÅŵkßâö@«*E&<ÓQÆ7+¼²An'áÆjÚÂî6 …‘IubÅõ@5ëN~2 Kï—Ÿ¯›8 ’Mi^õüdu¦*õS‘-ÇHYá´Ò°p|O!6*LßÈa¿åtèN”òLwúúì"=4p_$½÷G/ZònQJ¢Ð.þ?LB„¡ \:Å?ßDh+Æk‘mk½Û&šòŽÒ‰‘Z¦{ÝivX; r#pIZ6¥Ý•m¡ÓžÚåI‚Z§r†쑨œ ¸ääC´Œ Š2 YîÞ‘D1 ýhÊ‘æmJS͇jqƒ{wcÇÈñÙ¸Õ˜æâ±­,¯yÇ2´Ã]ïš*ÄV yÑpCÕè!Íæ ÚÖpÑÑHK$ËNæ°²•iÖ,¨÷{o2eîÎy#:¨”{Îq®¶2tÉ&7”™òTŸ¥kªÝáXêí$ÉïÑò~$ëåmð²&nQÙ÷[zY8ÚYŽÝêèáy‡ðÀÙ‘«Û”xuÞ™][Xv`‚x“h|Ñᶸ~äUëIãdírÊó9$Ƕ](¾SÛÏ9 ݽ£ˆ§Ã F5.Œ"BE˜˜;¹5~:qó>îÉk‚}b¯àù_p˜˜W㟠¤æò+Psª›'õÌõGÍõÔh’c\­©Ì6ô`8 7:áZ1£x˜oY^!çnOôcòJƌݼ½‚‚É0VES ›û·ï‡{¸ÔEBÝzJ«'½Ò /¿ßÛ4ê†gϯÜsslõlv¸°Ÿ–¯ÔH’‡?Å19P‚JTŠÐ݈š"ç­óõó¹nû²‹½Æ8’¤*¸ðR)Ád 5Ç «ÉÖ£ß] Âp-.'\–¯áþBã<6‘úñsà‹  O ‚˜(>)éêåÏŠEp JÎXW¾îiv*Ùcÿáwgå¯ ¥(Šóò}­ªÂ ¨Ñ— P| ¬/Îû¼¾ Ó<Ê È±âȨyT‡«N)Fæ‘ýx§€Ciì„8èròx| ¸èa£¡)ôb]ŽÀ}ÀO=Ñ Íô'{0G&"}™¸Á î¨ú3Œ·wxžÛš…¡µrô¸™ƒ[âÌŒ²éãÝveôAbœÛÝÿAªùO³NáþÖ÷•à)pʱ•CËu0Q±ù{vù}KÊúzb«®GF•JZù¶ÚµEÇ;òæ¦Á9¬Ë $Ï2Þ“ áxȇAKÌäZ–U.®{såMÇ!Sç»Á+Ã(Ý ˜>«Žu,¼NÖäÖDÓ¶Âÿ$´ •S—ãËáË%¼wΆ^^²(®ðýâx+µ•m¹*K²éI3‰¤x=ÂÓøM½™å±]ü˜¢ ‡gÕBSº3½ÉQ¥âþÎÄJ5ôB¢Î®ã!¿pÝcýph˜ÅkûU#Â÷Ë>œðYiU> Ȭ̵»Ú90Ñy½…̰Žx›æ8óuå°ÓèËñh<3j–q³šgEö¡sÁÁ"™/G’;•™gnwW5Ôχ3¨á÷¨=n0œ`ú³§4è©×ÄÈÍU¶çmQ’} ŒAC*&&‰´”ŽáÑž˜n8¥ãŽÐH)T8Hÿ‘D—bE»†œ´e½Ììsp½´•ѽ¾–žâlsU¯ý)]ZJƒ‰¯ºh ¾É*R<ƒ‚d"À—€Nƒ\?¥”1éalïP±æ‘-ú h6”’iIØhÿîâiÆ.~ÔÙe»F¦*ê.£Cé©( ¸}Y5c8}8Ö>P}¨OSV/Z‰?Ç]U¥rQ¡á ¨üjÐ×­¦vQㇿ?&±QR±@gÓœçyøG—£^ÏÝ©“‰•7/ÂYO› X=CÕ[α>-”Ú¯¤%¨Ýå£Ô–jÏX²Âä®Bƒ{8ƒ³yäwò=gBô7\Âï·©}\ý“G—"F”{9Qw¯p!q/L-AX°±‡í¿ þÿò_Ñ—Ì·þ^g¹ùŽ9£Y~icµÉ¤ ŒWÁŸ:“ü°Õú'ßœa)Ú@ÎpB`7‚¼ ’óLì­•2ºDL÷—¹“pÏ .}Óèq ˜»~P(Œ39惙q݃’>©D£€hWbˆKçÛŠSÚ¢ív¼h †X®S®æ_¡ý’¯ŽÖ³ŽÛE-WÂ7.öºÇÔå¹ggçç}—G¢uê•„C”Ï9‘›‚ËÐ%4hך›g·dR©:Ì%œ¡lM É ÝÁß„ Jªu¦öéÏtЖB×g*úÊy§©CÿApÝòéðSÆjO¿ñ!…ÛªK½µÀeUžïÎ+\Ñ|Hr 9áþ¤§‡­Ã-YœÄ8'ÒÕS["?j+1C¤”$”Æñs7%ùz­5 h<=åáç%8Êz8`*g…ø9ª‡²©4äam>–ˆ±QÖþ‡Ì€žW®‘bI»Ë”émÈÊÉ\ýqÌ`›œ®%ÏVC¬ær¾Qã²Ùû˜oú!“ ®Apdœ\;.Kœoã ËaR†Ôèù\|<_x2À.8Úx7WÓ9*S/HQ­ ¶ÎP¸H2s戸å€}Q8ÞÍl{ða›4Ç”ƒ¶ð¤®wiídà/ÌwäÇA±F[w¡‡ }·käå0ùމHi ˹Oee´ÿfHŽ,;?«jµ×2v%4Ký(õG)¢ ¥ú%ýæPópàÔ³_7- ÞlxK!Ë Á^ª!,6 PYLׄ®¿#'rèÊ?Ñ÷±Ç¤ýÛ³Å!}Õ Þ®~$'Zõ̵d4ŠÓ¸Cÿn­pÿ܃´OGl laõºËð9±Çœ;3ŠQ å!îï=½ðuÇ#¡Tÿ‹Ö²xd˜{ìu^—®?ý‰Ô£(ðùI Í3â£ù¦/Sÿýc‘j3÷ §Œ&MRØ7Ķ(Î,üÛO/A‡¦^µÜ™gqÂ'ú'0À0™ÑÏDd„´ZÁŸZnz2§µ/¹>Ø÷³+y¿8š!ˆÌwþn§º\×ÉeÇrÖFŠ¥¥H9%k%õ5ÁvõCûp~á¡ümÊÙ‘‚™o‚VˆÃžuL Ò%5ô*bJ}„¿W.«k&éÛkSI·i7ªòJ›~HèÊ$WŒÆã?V~Š™{¸Ömªþ{|þÅ”qÿÌ^DÇá~ê/ƒ9Ј%c=ØW¾ê|Ûd$4!´Ï`Æ€¸c{wØÅŠ«Fñ-5³5 Fq3µ5W)>ñM jÞùG,ãÀΗ?3‘Ês-MåXbýš±8¬¶AñõJcôÊL° ÌÓ&O! ±O\‰©Üzö”+ ¯köK/™¾dyºb¡KQÏ«GÞ0 n(Î~ÊâHÌ0KÞ,3š‹É«'2{«Š‚¡s8E”Äl$w“Ž0‘Ð;"ÒåÃ;ñ`°}í?D|KXŽ£¾BÜb4˜šèýÏËÑZ±LÐpc0 99YDNú1ý=ĈÜ`At…iÇGg…‹ðKm,ËîÚ8;n[B›Ïœ'Þ]½IŽ ­iCüÅž#æì…Ô–]}ñìßÖÒ_G<ê““ÝW¯uLД[¾Q{i6 ÞO íéâÄ/[WO)D*ÑÖæpÖ Õ¼t€ ÀU¢w:{-•â¹äêXUÕ„¦¤'¢œç5„#@Ã̆Œ€xq ±þ%Ìÿçƒ;ÞhH.À!jq£œezK3D¶Q¾ì¦—¤~ ñ/Þµ¿ÀC5“D”üsX@}®©@›]“+oL؉&T×YŠyV«ý˜8]@ Uê­ÈlàV[ªY·üÀßáàÙè²1·ïŒ¨Ò_7YãÍT:ÐeœNþ…4BÎüz‚` &Mï0¦4´?™Ê"³þÈ:4»–*× À@@ð¾AuVüº F1qÔ“ŸS³.œÎà^=²Ø÷XðôÀ±óЩ!)†ßÜ"ˆ-{F÷‘èþ¹"8‡ÎR"¾ cêÀ„<èHÿí˜Ä⨧ÊÎÍr_ÊdqÉ®Z¦.s"MYi€c^ôJg늚ÜîC°túY~Êõm´|÷·¨ö©g+ä«úІ.m2M™'®æl`ݦM8z-„W¦0PoDò8#®ž’Œl50‚d4ù70æ-0ôçõ¯ü«ˆ ÜQÐm mÌM/|zûuxÈ€Ÿù;¤Ð5´,jþ„jT×Xå—Ø¼?_³iæÜšlþXB„ñ€6¸ðû"‹«ÞÛK\•H“pöžŽÕ/Ö$¢X4|Ô–Yl­ÖònÀóÂZbButCš‘_k×7²Ñ©óhô>æÖ½¦ç¤ê,zni v¹VêÓsvímÂÀEó‚%H”òûý' ´¼#ö"æ—Ïclt¯¨{ó®µ@Ædòdu0à€hiIžëc)ôö»K~¬îq1ÞÙ\7«ÏЍŽÎÆå£˜X>ÎWZÃJ2à††Y9él’¬Ç,_nÒøâÞ ÝiB%‹¡­é±Zçû?rÎÖDò» fÿúxNõº[³Ò1ª½¼ÃÙÜöLwŜРû˜mTÙlœAÇxsðqÇ'ßÕàùÑERˆ*Dµšô±/õ”v‚‚6òpleëq^윭~`î]lñŒÉ’Nú+ ¾0ëOàöEÖö}iŒ„]m»›(²L'Ëùi¹üØìâCÉš'.§øßM( ë×þ9 ´úá—×ý~/Ïçà •߆S% ^Á{Á •¤^®éŸ“T6†…M¼¹8ÊÍŒê^_BFçmˆ~‹¾ "‡9Íó{úÐçëòÙ¿O^*Ép–¢ÄÀªTZ0†êo½¼û¨sðËâ|•xõÈ‘{m¼²ÜšÎdtïµ]ÓËp†úˆÑA±œ“ ´¼ÑpÕVH&›G:¥uÑ@o¤=gÿüy·PS3þãÅZWeâ¯÷¼zp§QO4ãmˆ-v†Y(v ¬Ð VT3%ƒØßì­IÓ"oÀ»;VÌÜø2p–l.Ncc!¤‹¥QɰóYtæĉDa˜{Xyk¡¿þ!ö÷*¬áŒ=‘Ýì¶V¦û ÎB zó£ÏòLt» ;î4Ùoãc\õR9\C`»vb§÷廉cž)œ0 —Û§ËØŽ!o™Õüæúç†|Ù샌ì_s§ ^ÉæíÃF÷äN5¥·ìBî$WÎ~Jè ÙK4¶mNy<Ã]È™êy¹I ˜8³åÕÛî&äGÕÙ-,vge›8†4“.🦋£‹U'J¸ËÙ!˜Þ¯©«¡µÞ¯‚he÷?,j•—~äîiË]å\u:®õaÃûÉ Eê×=x&ÜŸº«ˆ5Û-…$’»ú¹Š —¨+#¿Ó ‚·+ufßž6í{GhÎa„Í‚¡ŸÓw,¤Þe 3S/‹0t}9£¡¸² -Œ4…35)%ÈLO(fÊK7ÈD‘|ÎÜ(T °¶A¥L¤åРׄUç[EnSˆ£œ™ƒä¿ØóSQ˜€¶Hu‰ká…R„V»2Maù¢èÅ{Fcüz`ލV}S9x†Öý ñgvÅ‹9HÁº…ñ‘ç°L‚YÎ'Q­|Z4ö¨ƒS+„U Zd¦ öÀ2r{Q4„(æ8H(p´qŽËµ ßì~6y·,$uä5îØ×(XË|ü#7úRÇ¹ÖÆ1ó©qÄœ¹½“À\ý_á{aGÎ!‚|!\¸lhLn’XòÞBr~ƒdæÎr“7­¼fô¡coHÇi6Põ¨©¦‹Å45ÿNßS/Øj:­|² ¬`þÑHpÑ×{Büëÿýä˪E;CIjíÕôŒ\'éÅx‹»3xÛNT²ÿg½Öȃ”Ó FkRÇZ &„Ž„×2*y§“Ü ø¡†XA…ÂjþµlX”ZtùV†R-„†ßGÙ Ó¶7#Fµœ’óµJ¢5kÐæ¢S3¼¯²âoÍfÞ—Sy³ °é”4»7V±™ÀoéåaÂð)½kïÅÛ$þi± ŒNÉþδPêuq…AUXÛÊùÁù¦ ×˜HÞñ-$©°áùßÔØCˆa0TJ|ð¯q$ž&©1Å„ô¨NSÐT L3ïÍ9Xe,HGË.þÕe"þ,“yk üNRÂO1ëRœmhM‘Ö7_\üìƒ#Ïʆ=näµ(°]ÓY¬ŠŒ­„ø2*nÄÞ­KÄ̤“Qòu²æ2ª¯¶Àw²¶¾q!”nM cÒuMBÇË”´B67Ž<uS/ßûÂÿr‚Qšܹvùà ha Šß{R;i›ûLôù¼ÑŸƒ}uóÖddÐw"†³$4»$zÐD$[à¿~ëXV\ÁÄO ‡µQà’áU 8;Ÿ\¡ˆ'£¬ ôv7ŽnÍä})*w½°¤Šc}-áôÜÐBiæ€.”"ݦx†x­Zs¢Š³K%w¦v€o®Ú §—öͥؓ—ã£æÑ^¥q ~–‡]Qc|!°9|YíäŠ<0œú`»[7ßÝùâõ†^׊ÕöS"W9¸ýÚ"Ÿ¼âQÿZ†dŒG°”S'ßFȇMð\–¦×©Aì¸+ȱ[-×RÄ•04“DsiAÄà´ ïƒ „%kàX»Tiw 1øÃ2\pdÛY&…wiw·ÇBJˆÙé'Êw‡§mÙÎRyBv)ŠÆÐº,'*’÷{¬¿kÏXN߇ÉY«÷’l” "÷¯´Ø!€ž%öñb¿‘‹B jí™oWëC ^L¸'=ê'`=“ÑwN(Ñ_áù LÀ·„.à²<¥>Ýøñ“>¨Ïz—,SÅ€ÍOQÈÉàˆ˜¼‰1.X¹e2¹À\„aœÇ÷å˜DoØñC˜Ê•8—fù±îjMX –d^~¸A+–èÕ|UºŸàgõ ”­±Î¡ÀJ…пéé¢<Š’Ø@àMp^—h·Õ :E!îHDKºs2NØ'A¡N€ ‹-ó(y:ž¤€~Ìg“Žû`Þ¹°ž‹Nh¯õ~½CsŸœöÇàN]¥]U$([T‡ó\oµŽpÚðµ¼»ÔâóÑLÉ›Ü °>¿:G+ÒŽ9[seÁsz<%jYòàðk‹Œà>tŠúÇD(CægÉ>®ÀЊ)-%; ØùWdg|c˜žÚAYpÊsa÷m—NëwyÝWáÎñ´Gôþ–zñk-íÞé'Vlt¼iž^?ÒOâe•âÒC~­[Du]«³PG¨×“ZEp‰¥Û”–áÁì—ÿ²$JÕˆŸ=°îâ6‚ý +$šºl¢‰£Ô½ÒžüË@£w0ÁÔ8šîÓ€æí‚àÃÅcgcë…%¹çR¿=¸hµÙõ0K6nÖC‚ÊåªP£Í!´ #Ê2 ªhŽxe ªD†w!í]ó·7ýƒ8`:À+ÄŒdÙpHð„3øÖÓ3¾@±nMÌuôÊQ?r'3á…iL'„,úNøÀIÿ¿VÇ{'¬ص“‚ëy*@>I rœfSí+ÝÔ¾‘A}ÐÄÜðÖÍÕºvHæÊö´ïÑ![>LTÖóä-,í‘s5ø8-P?ãŠÓ iˆî÷ ‡zÎ>út9‡ß¤ûLJ àÌ&”ÅBˆp`6mM5‚d­?c>áN€Ã„Þ²-»@¢Úš<íKÞL=(“ ð¾ùäyO~ -K«Xø§ãüA@fdÁçåÝ~}CV”SªMš¨|^„8LÞœ,Ž óŽã¤êkÜG;4P’R·Lqåø×(£Ä.;—@›ËI_/Û㪑UD÷µÎœÅŸ¹dN5O±FI#–Ð ›H€ÛtÌ ™ùa,l YËå‘þŽÒ÷³ˆ”~¤ig£ |ñ¥‹ANírÅ!¨Kã,O —ÏÓ¤8þyÃ]¤è@ªú\ýåò„×ñV6àùTE¡ï'çÿûx5É}J…Rà5[}€2^x-ºéSƒ“uƒ Ðåþ¬ §®I‡þàY½¶m2V±¯n§¼Äí¾:,\œ½¨¸IøæX{SyÁ&ï6A¯…Þ˧;ç£&¹¯#­»‘6„‡èÕ': ¨ÛÝ,?.C±ìÆ9‡‰ñiªðÀ»6@5`.KÂY¹‡ÜW©²dÕ©+Ê4r—Ï;»ÊÛÞQü²kŒ:KyÄéÂNïK¥g ÇúWÖmHÞËGSYÛYj°r»ýk=ó-´S (uhòºeŽºÃTìüSßYö¶W¼nÙ²hËM˜fá­hÅ.öß|©™ ûj)HÿˆøRÃAcRX‚µå¥}Ï‚¶q¾5ê7t{:Ú@MD_“ˆ¶‹Ý^GöÃì«ò4뮪*¨AqU¾ÇoùÒò·é6ËRÑ^q¦Z•5ÆH˜€Úßêä6#%êÒQéõf®•¦¬ÝÇu¿qì ës=OðFA’¹O!\ö‰¿ð¹ÈíYžË²_êúÙ7_8P’ª^oý[?¶¾Z8Ýð‡ >TÀ "Ïêû,‰à_¡^¡ëUàGK‚\3ñFÓ×Jް¹jñ=7@,Lò†¤äCékÓeØÈaßšT'0×7àÚ#%þ~†î 5X-6‰ÞbÓ”.»œW*ÖÊ=Q­ÌÒõ‚glÿ»#ÍÝ¿–¬:”–t§g5qI“&ŽÛ׎©/J8—÷l©´îbî-ö2Úñ‹…¤äžXhÛâeñ9ßnmÕŸrYä²pøàø,Çx(51_ósT¡®{ÏC· çt*µdUUš÷õŽM-ÁfÁ8h“…òEІIÎ(‰>vk4š~ûC’ö;BÞ†U §«](ýŽërÓÀ‰•ý”Û‹ˆ“ãÊ­WÒš]Í·‰‹YZÛ3‡uâYv¿ƒ/cTïyйNð<„;L}²ÏÇÜÖúRá¡üʆ1jŽÜû\*- V½÷ïB|Ìÿ¾Pvû=RBÊ$M2=Åð"VÙ·êøÀêÿ¾!Êy˜TðœÂL]ÌyF÷Á€Ué(Ý,‡¥égÍ–¶$Øø^ªŠLyäí×â”Î{^Ó,Ÿƒ"×9ÿà§.ñeòæ KÂa៊£¸4$xfØ#3FN:0ÕœþÂÍJ/Ýߢ¼e«¨0Ñ+Z gƳXrcÿ»€ñ¨)¡¤“Ú¨UÄ-á ²1/rX)ò¬¤ŠJ"™²Gçþ¦`+½§ñ}­P\ý¡fSQÐÒ¢àä”Á-0•ÁÜŠECJ ² ¦íè)J®ªåÊ!vgæá  Ë[—£ð¾7µuŽÐ¼R’ÇñæÝʺ¸ØAœ€˜¯áÁj/fuF2Æ´ú«QÑ#©ñ%`Z;à[;Ëþ̆M°zm­ŸÀiçüäÕæÞaé³eóô?yî …[QÈRR>=déÉÜÔ<'ÇuOÉ)­Á;¦ù(EMµC ¨˜(c¥3?³Í8á¥\hÍ]/`d¢ˆrü§ƒo#pó.Ç+”ý²T)³’•ï3 W“A¡#A " 8žß(0Êûr>Ьä~šäÁfk¤Ø4LKLqš¹Sd³[ðÚ¹æ›ÀŠWÑüS;TÌe~‹o+&hŽwyR³g Ž0ɬþ þ”1W»°9/}ËôªmrÛª+;“`ùŸ{'¢uÊ)_›Ñ{}rUùO*Ëí¾A•LÛržwÔÛ³„‰¯/lšMÕm5Ã|౉i|Æú‚ô’=‘MmÎ5kžO ‘͸éà¦À¾æ3SůÓöÑr¼¤qç´H™?w³Ð÷5¦s¿ Eú±úWXZ¢kœÊ ]õxyüX9Kpߌˆ+„Ó£_¼ÑUžP´«Ozuà)HÏÇÒ0òX—[c™c9¸$Ç®³ŒScl{…EBo(­[«èFŽ-„Á³›R +šñâ=d†®ÐÌûFAcj_(ûàÕ™MúŽd"j/5:—‡@A Ȉ0aó/å¤Kž-æHcÌøD¼[êy@=ùIyåu6½Ið")Z–ÙBc –;sV›°n™-Ìë:´’Zr®¿¥V{;ZdEqx{×I⪤ÇsÚ1n…~nU¯;àùa€t>Ã\Oä¹Ël¢ÄZSaM!Ô”›·<4· v¶˜d²õ$=×O ¡mÏÏ\æ{ X¯ÿœë=õcæ2œÇ³åÖ u –â{í´)Áæ’šžÒåÂé—‡ûKг`1<>˨ø3ÏlHÛV_û4Á¬ˆ'ðà-”Æø:ŒôÝ æ­ß£suóžÀdì´»–8fï äÐð¦ZI“R ½=A¥æ¹O‘ß©˜°’L÷o"u)—H¢¶§"W¬œ²¦ÒAÜ0_gàa&¡0ÃV*(qÊ¢Û{tñ¥r™ô—÷tGÌ"#§4ÚÌÒ ñá;‹=ª\ÐÆìÚššœÿÊ­Ÿ÷h•XH&ön‹y‘¥G¢Ù¾,íGCèY¿¶éýÿ†–÷дhW–#ŒÒ`î B«¡>^þEך ZZÆß²FÐb®á)ê»’1!!ñ>+M2;ù1SÓI‰E°i@5Èù€~^qÃ~œ¿ÚÓ“z\gì;¸l:@Š76³>Œô» âUj åî³P²sð¬E>´&jzí Æä±ËÞ{E௚A‹Ÿïž2…±yfrCKoîž…56Y#“–jŒ1‘©O¹˜·t£{&{e%¢*#ÂÜ[±Ò¿ÄÈ;.WÈ…J.¯Ï*|I ý¨þ'õžc—SÈÄ~vn”ȹÔ/a—RФ¨ :Dßš² €nÌ^ÑK’ÆfIâlF Š L*sòëï¶WÝù¸l²Pï–ICs\Y ¥»}yÿŒÓåÑys]bä ’‹iL—N)7‡°S4y*]å™Ò£ßzådHÊýÿÐ"ˆÜ±“ iÔ+o~þìŽgøµúX3]£¾ûÛ?ÛåßͰ¢5‰éMýèO4 Œ¡»Ü5Áî1‘£ÚÄ “@—±j˜ÃmEÃ]qtg§GåuV¸Ÿ( œ¶ß Ÿ‘ ÚR ´)P± N@”8ü¨Ì}"¿&_21hwbš¯¬”Ë´ñ¹ç·“¶Ž§ýÆÒÔ¦¨Ö|íÿ§sÂWBZ>#)ok¾w [¤qEá?Ûù>( {·ౄÆ“>à;Ÿb½¦2£®/X]v0}†ƒÐ£Ò³AÛéûÉ%ó1ã,fÁíÊæ`w|¼¢ýÀî9½°ú@ø¥"k¢ƒ-ïxVÔø‡ìˆB¿üAkæÞ†‰?ö "6~¨Ý«R­-\æ¾ g”íÇ20øžK&—úJTÀî“wµŠläzf{ÉVب˜y§B™;”šš¬ìåà>W !o[Ú©Z ¬Oõ-ßf”*yÎÞ§«öFŠšòÍI1tøH}mubíã80ûˆc¿›f bÖhßµ·Éü5÷‚¼¹ˆÿYüà``ò=`c 6Õæé\ëûqî0¾Ó©ÓàÏËÙàŒ¯‚–Ãcf¿±ÂJàÀë´]ÄYlÜ@]÷à™+†ð†€ªŠ.ígJ¿ó ^оrG­›òrZòOÛw‡=vÅŸ^Öÿ ¥J:|©s%z]P€´©×«êý;îÒ(¦E2ÇÁô——/4"»¥ 5‰€4Cèa!OH¸>Xz澆’ro0¦8O#‚®wlÆ-ZC¨jkjiÒQŸ¦9„drú” ¤EÁkÓ)Ï"O^€ÍNñK¨ôuéŽXŸÐè¤Ä|P¬B©Wx¥ôÕókóRºœ¹†9öKi_u‘ÚŸ\m‡?Ã÷¿u¬ŸcæúÙÄ,ÞŸ7Ø+›-$zX+ü¼)¯alï©wYu-ÑâÆ=˜]<ÃŒÆók5MWФHVOXɬLs”òMyÄM‡üÓIž¤ò†p²ð4i?¸wÔôy"UuŒ´lxßn£hd"¬äMßmÁ¡à )LJrÈz|î ~>Ì9Vp{‡š"jù_xýnô”f³µ [ðƒ¦æ<"ýÄ+}3j:Rà"Û…ã=·Ž [%¿f *½N&6å{ /¹ªö ï€ôÑZZñHÔ±;zëw­LYtô}• Rp‘'`úŒÔ+X”gèN ;|ô†.Wú?ØÝ£hÄìÁo…$Ôá¸)-ÈhOg{ΕC“Åc¢ãΘþ·!Åã®pµéü_X¯–ƒ»k÷Ó«¢ÌT»f•(gï]ûSžrX= VÒ“„*(y©¬ͤ„«ÈÈ‚5­Û¦"tÙbáo;ïø\dW§­¤“2õPs»!Ø…AVGÌ` hžŠs¯fY°ôà3œôâ;@ƒ>¦“S!›ìd»|0= Jsl&#·ýݽ«uKvO! nüwo¶a+Ï—mq8)‚)à>@oc›5@6î®Ðà‹ÑîÖ…[ ¿‰ÅœyzÞ¡^‡=¢f÷÷²C‡ôz²#Ë%_‚V:ºÔcšXÏ '‡‘l†iÇêÕG©;ƒ+­žFÛiòþÊæ8’H¿–±›Ä}yÍ—1ÑÌps0ÂÁzà¤ÃÁâŒìq—5&aݽWËð>‹±©å 3ëÝÞ´w/6GÈð¥9;'0ç·×P)@ï•sÊšo³ê)¦ä¡ôÑG|€E³–uɹöÒíHŰ}Ë'â0{u ÖVE[Ø™ v벊º‡3q¿`o.餷YËóÅÔç;^­Î> j‚]É„ôÖîD“)ͼÝO¤Pȹß÷W_þ«èÆÐ tŒÇíˆ&î‡é+t½1Ûú4WO,Ò]â||'5“tB.å$9æ¦'ZÀ”%éiÇNÚz—h9ŽÔM©ž®hl:^íY¿â/±O!ë©oý¼®@äc™Yâ»T¾LLh\›Æp@Š¢D&4¬Ô榑]̤kP'Â>bk¤Ln#’> .ýõ˜Ó„fª$¨”T\PeŸ'°èÍLH^jX4@Ì.Z¤óøÍ?¾•Z: ¬ÁW€• X_¬Z 4åÄdûS÷[#׿3ÐJxûÙ'ãé¿ûkѤÊæW`_F¤ÅkéÖò¿YИƌҬC³§km;®HlÒ¿H‰ØÌ„$²J^WQ³ëpc,Ç77 ÁÔ 4N몰ÍÉ;äeš3nÖæ`̲š\ª3`RDm›¦Ñ™¬Ô¯XÉ‚äŒÙ>3#WQpõdÂÔíWE­½[0“†cÌ"ó«!îÖÞôÏs5w0¼3;»,ñm†ý¨/ËÏíÌžjd6ùLJ\üÉXí×±ÚÝÝ·s.³ ‚ræ¿>4ïü*Дo0¿ïÿùCÁûÀTw›Ycà#i­«4¼«dX_ҒχpÁ ƒ•Wú“mùȱ& ˜¯Cm2ˆ×^ê%b&/½äPC×òHË”±%/Ú2ø-.^R bœçsY9²`Û하¤Äb›DÅ—˜ÑàÄ|‡„ŒÄÌŠ` 8¯Ãßž’íæA€;éØK–Æ¥ü\§Æµ_r*ªû`O1Œ‡<ÊKëqwÛg°J$ JòlLåó°c'НÐ=ç)nãwCYj6ÌéGETnXH‡HöÈ&C¢`Õ(ž£¡‡ÉÆÚNާGœ@ >òLþÄ0nHÒö³ªÀOX/¼¿ÈïîHÙí»ûäÇ‘©åñ¦œ&ÞX œÕç=m¬:$ÊÆ'~o3ö.?}â©ÿßÜ”“ ÁõQªKd(†hÆ‘QP¦’ípܦIŸR±_$ =öÉXæ cKïC¿-G*0,Sˆm‡1c´w' ií‚ÄvG\¯tTÄßõ Ó¦FDÖ”¤F11mðv,éLhcG6W>Q°—›å;îçÇ9<®óàsžsX 'ñÞD² ºÐFZiù«?=!M^(ö_¸cŒ•7‰ãÔ~á©óÀQ`Ë´Iê,aQ9cNÍöÉøy¯a%hÕÄ!Ïpì|íEŸ øçnꊵc·Çˆ–{w”Xc­\·èz¦ˆgyå•5‰ˆÎ_r‹yçÐLǸ¥âù;S¶~yEº yîþX÷8ñp‡öŠqóG–h\ËÖ•²AT,Àã§„3á°sZþí]Pnì*šJö€™\ÿ j¹&ªØsßËÎŰ¾CÉ™NdÜP&ÆN#ƒ†IrŠ£³¯ý 8ò!|6ò^µñ¬Æ¬–À ðy ;œû§‘V‹e«±È?”ddR¹šˆ—í»€"‚¾|ò<9UP0ÅX8§ÑEéÝqÐÿ­u;$v¬»0/šSdñâ }áï6JŽK¥0C‹A>ªAº:Ü02 Iù­ œä“p ‚ “Keˆˆz¸1±pÈÿãĆ“zXL»zeÿÁv¶ÝdÞyô*_ñôw_ëý`©LýóôªŽ{¸u~5ÖG/¿éA±Þ@‰šÕEs«kOx<‚½·–2‰‘¾®‹½¶à¶Ã~°M×D3 Ž!ïÖY¾ácrø“ C÷›5à²˰±o1Œ#¿¶n ާüNºF”¼ÚÙi›‰jò¸›OT~ =¨#¿Ý8tÇMÒÛ™¢¡|Gü‘Y“RC¨"ˆÞÖ­ûŽqMn)Ó>gmº‡–|ÞB …ê™}=SüØøÜʉ Y)ö¨.*‘ç3‚ïŒý­—´—+ÛŽ×XÍ‚G‘ã2{þÜHz¢Ä-ÀfGîQኀâ)v.Ô'WàXdo3‘våÄTÑQ=–:ÆÎ3¦ÙàÖÍ ó ºW[®-?ÌÂziYc"žÅ:øÄIxS‰%íq»gS<3ºŠ©ƒµjM¡>™h#âŒÑÙ¦,TdI×ñ„Þí6‚^.˜à„ý⦨؄O•ñhp6W-ñªÊ×V×ÄÕq¯ír¨¬^¶ªIë+þÝnýw PÄUžŽ§Ná£ýLûÚ!ôLë¨lÔ¼9_×DÑË„tÉßÙ©EqšôƒMñß“«ôˆdé ‰Ñ9 ±zçÚ©Î Ex~Š#•:‚q£=ís¿U†êÙ/!ö’®\àžêà9"¥ F¨rÝE?îJÜ@˜ ntCÕÈÈ*©¡¤‡Vè]æôdeæÉ4‘®S@eXÂ3öT:™mŠ K¿ÉèmZD9÷éc·ˆuÜìj¥’ÜŠö̰ïÔwÃd²SwD_îxՖѦù+‡ý[%‹AV( È€2¯ÅHCðHÇ$X»2IZ"ùêr;T¨WÁ•sü¡AM›ÊKAFdÀ†1~™,>°”uÿª2ÐBâ}ë‰÷J_%£…7“|ÙŽ­ê°§ï¨Èßd‘#r×úQY'‡s"ÂU%ô‚fÊÈh.ú‡ØN‹ÒRÍ6Ìô%¡•½sè»w*Ð@ ò÷"‘+9ÊÂT¨²;I€¿:®Ñ•ºkòÒLÉ ¡­)Ì´ÛÚ3Ÿ×b%¢y1¿UÍMÙ èïU·×¶„Á* 1ºÜp„?%ÀKU «®éæ 9àxy0…ß–tõÔDÍ Ü!€v–Œ 7…îÌÒŽ9!Å9ZzDøÕXÔSXP}‰Ž•´½Vu€ñè)D ³B,H?ù8jþdW ˜Øë#†™62tÀ‚ÍpÔp£Nó]þÃ'ð"Zf*ôÎúüžTy>Óç9íªÒ<Ê¢nñ­©ãelUè¾SúÌ$@²0Tµ S›^@ߪ&•$*å÷›‰¼7µÝàRÈZØÍôÖ¡Tœ ‚ÍìRAÇÜèÜI¿º¥öVÐLhØ9ŸB²·(­j¤m‡;_=ÊnØOÍ!”³”ªæk‚ªæFÏTÀCKñtÄâþßû;¼H™É?ìåØÿè(=€Ñ>ÒâÁ •iPtTžQîª?tt" éµU¹ gÕ4ÔMýøR­â€g‘eFáö,"ÎH÷lZ[Ÿ$“ ŸJÞJ+<ððæÞQÑ-°ß5ãù*0Ë:À©ÖK{úé<ÄîüÂ9Ãý„Zá ˆïms0È_>Ŷ€{'ðÌBRš D¼˜0¶ƒzyBC¹yZXµ+©/ëL04 ùý‹UQR@os ¶Æ"KUù™{|7ú2§Lž $4ywcW‡OÏZ{) DsD.ÅœT³PºÂâ«so^ ›ïÖóo%—zJ¯Y‡µ-ûµtBÌ8¶Åk´éLÌ6ÊoËH9k(Åòy¹0$G6Ã(¢ÎVªãþ!жrûÛg—0ßHR黋pI°"e4J%þÑ0f«0m¼¿¬ÜGè¢9&0œ´‚ϰÏú¦T‰XÜ š‡Œ–™SÑVļb³n¾ŸY^/›ªœÞDNÔT0¯à¦*É_ ·ça)âq©IaŸËĹB‚QweŸ¼©…«úx ñ‰ü®˜bô~üñ&O§”£áÌšRn_‹4­qßœxƒë}z7X]RÎ&콄ÌÂ\¡±=ZˆŽ;€ÈRCq³ŠÞ]uìÝ ¼VûiŒ'Ôñ}l1ýzŽÄÊIlà R Á=ÜæMLk¡$µV|´z}}ÁAiŠ>ª¥´ó ù¤T`Ä‘4v&£CIøûþ˜Ù·Ù«ç+¤­îbÛÅ……ü …N :/èïÏ=©(»á>pj·ZQ6@ÖO"½b_g:~pµvMѬßÿÈæµC'9P¡b }żð[è1uI— .Lw< ¤fµR#‘ª¯ÞÚ;4÷΋Š2Å#ëEèrû`ƒž–j~X@!Ð/Kš¢²þzðr›ô7ëemÝ߈©~4ðÛpÐ+Raz¹? Æ%:Î6IªsÍY~mf+Ö éÞæ¦½€Ndo\²eg $Þ Óg˜š²»Å蘆f‚&îžtÙÏÍ+ã¹\ì—M<¼2±_Qä'çÃêõ£Õ5ÙÀÄY7&°NO@Ö,/O|A¹ñà9›sÖ|W•ó‚\…ÒàhÁ´<Ç^:ªzǾîcˆöܳ@ÁXˆ™0ôt“g"©6ͽfu"âÒæ@Ó,î¢ïÒ vÃÓÀ†²gÛ»uWâcõ½Êwúdšÿ~óÌ÷÷Sö*€T÷Jk o¼‘—+Š‚Þ&6á(q+‡ËN†ÆÞ4O¢T)·Ò–‚0ûÄ!²‡;MÚ,";„Hà¹|&…=Å«ÄÇÕ¹+ÿw~ZÜ/2aÚ*@£(™–}ï~l »™ÃÌ",ÔY!kЫ©nû” {°JÚi«¿>ó†DðoDm2ݬ,ÿ”4þpÑPš&òT£òšÅ _¡gòªE‡f[B‹±_¥ãá Ó0‘‚ƒîÙjá3æ1ök¦æÝA‚²™Z8“g&ø© %æw×ë3°'¼×ÐÜ¢K=Àñ„P‹²ÏáÁõWÃ_—’ã­D"þ˜[8Ÿ:‘óÀc’  ¦¶pµmS©pŒ]·û€…lÙ\ª.xmŒ/©Æ¡˜M¾ùÁY†@×`™Ì쿬÷k>/W×'õêhk‹>ÙgRkØåõît"×ÿMàµ6nj5±÷}@Iއ’@µ/©ùää³<‡†¼Î$éØÛáIÕ×aº¦El/ðÉüÇQge¹ä/ÛfÐÑz¹ûÞ 7]ɯÝ|ô}º§Õ$(8… ã£($cE–ßá´ºý­2Žö‡s'ì Æ¥;HÞ- l”ÛPtØ Û™î\ŽB0›çr ÷›î>X¡J&ÍGXªß‘£ôxuE±¾§áhGаEGe4‡V(v7çŒHAlz_sÌåë£õDI¡›4Gq£'œ8º\ o>²K.uz"rÆm>ýò:~0«ïc ·m[ئÙ'º<—[kW×<!ó $£"x¿pIœ™‹¥>zÄ׫EiÂbÆZ@íÉG]¯„µ¸6£¸Ù¬mǃìÍ:Ä”zL)Õ^$ãm˜æVŒW¶…n6@M@‹Í¤¥¢!ŠAA¾œçôVÿé†Õä°ÿXûI‡†"B$ö]ðêÇo¶Åö ËykM²(Åè¬ÒÐ/FÒî:ûp‰CM \v–†7•–a+õ#’Ç/~—öíØg)ƒ“«s0G‰±¥/ÖF@ÊXÞ¶b¹ŠG7a™ÙÌé~)OÞÁZy•¤¦Z ˜2È>Ø"»>žÎf±a˜§&|ùí,Œ§7h{çõÓèœ2Tføz[à’ZS’„dßäx»E³ à”™ý6ö{f–n¨Ôtj:é}ICE}Wû±y4¶d/ñDiÚàs¬^€3%Ïê:ux^\ KŒ1`|ŒŽ+‰ î| Àë_Óî³³_òˆŒóõÈ%_ñ°?C>¾.Ç1³Áxá3žÅŬo»”"xù¾1¼ppB!]:: ”[7ìq’ÑEÙx–œ}ÜæÆÂ“~U!HLYÓñŒ!y¥âw'[‡bÕì—Ù›Ã~0*«f@Bjè†NÐ{ø9ïd*8Ø?OÛA¿E¥<Ú“T/`È£qåZAUn3QK÷ûI6úå/ç8±ÄÔõ>£¸>¸™jF0tk1䜮HTîÍÈŠ‰šÛ`]¦wÈèÅÅ›ª’ê8ÚŽ©ßf¼)ÓZ¿ FD+ºùòÏK —ˆ@vb¨£x'/â{ãqZô™¨¼ýëntZ'ƒÆÞPŽvXüB^%¾ù!œ_Ê\(éôqÿôvP ÃýN‡ÏTÛiX+msçu&Éž™.7)ÛIÂÈ™4÷:Ïc> •˜Úh©Ïh¶mA¹oLbŽ¢dZ*’Ŷ³Ç`—!©P‹RçÁlŸqPQbãP°`â%lÍyÔ?÷úTÉÿñJZö8P\ÎH Óìfr¹YkÍñóOÜ LR(ä}TB.øj2ä8rÛ#—±=æ›(HE—.¾Ó¥ûÎ?}O fT´vsˆ^§2 qà†¢ökÒuÑ[̱hýîí–ƒ×jtÔ†ã·öqXôµ¹Íþ¢Ú€w‘âOÎpDðR_Þ^‡9ÉÅ_þ2’V¢&ĬÐiÜQâÖ4I«á÷ÏèNêªÇY@J˜Q]ߥ›£ðw'ŒQ“ñ€Ê€V÷$½Tø^T 9ÏÄÅЀÛ),MÞZzÒ£ñ½Æ CSg£Ç TÈÞ*¯t¶I$zíoôÊÈBæî´õìüJ»/”¯ùèEPr/a‰ÝÁTŽÌ8Œó(w‘_~N“OßÿßÄÿ—] ÌÃ}5¤$šç ”Õ¾ÀWèðR‘Êqän°^c~h£g‰O!â ó*ÈdM†SÈ› …¨óĘ…N½ 3cÎ û$zèó]õ4—¸ëD-íÖ,߯6ó‰9Õ  (j}/7­ÝÙ7·’šeÀ‚Ò¹€EÓ¼{µá=cÖ…Ú¡7på/¸ÔÈ¡-M å³åí®4Mï÷sJvZ×õ’?S­0"yšãep†÷Ęߔ…‚–Tr­ŠìÁañ -­½³è³D0±²Tð÷¹äçéJ ï äle6^ÔS¸PšáŸÈ¹„憌ëšG€Àغõ9N[œqqi½PŸ7Gæ?TßÖP± yÇuV³§ ÚEAäIÖ¦r¯‹BùløŒ97wkç¬Éý{J}ä—«ç4älS5þîÍŸWCDÙŽÁNeõS™’¡fv”(0. h.mfåþhr‰ÏB ÞØë½"sKPWƒþ¨¡;Oñ YpÍÔÌÙt€y«mÐ÷.ïlÈ+ËÉ[§í-n¸V­ŸVØ‚ïI«¤Ñ~z@޾xmäAJ¬µâݵVónˆ.7•|Z]Ïl8&è©•¾ÎÌ+±X&ÝœþÊBNtLV»h¿MhüÈÔ­«æ"¥©¦í ¢MÇÆfGYBã„t x¡Í–ó†’öz9vbX2¿˜:ÙÍÜ~±l|lMvÕNF NÓm§¬!¡b 2jßèbJÎÙ.*xŠÐÿ·²29Wî!ŒÍ»D|ýsÓtƒ+A3¹S\?CÙ˼§.[Cû³áVí@ÌÍ=’³#;=äPÞw-Úu‰‰‚pZŽN½7ŽÊ„p“]5QƒHÈ/TfÖv‘Ü»ÆíßÅü``þi÷ªƒM×ÂõŽ‹²¶…A¾ô¼3ÈcæM†"htHZËNÕU}q€³WaÒäÞ;¢ÞsÛvK¢*zòJú­•Vn® a¢eD놛–t;d!Øïì$ó£Ž&"( l w°å…w«¹ÎTèÛœ@ª½V²PùnæMu¿‰è–ÄžHÐüµè‰¿X{öéÅ{lÛBŽ8ꇨ…1Þ91·@.nrÅZfµWæ1‘ ƒYçÑ]€ ZÇß•…Œ:ì8aߥ´äGLf9wŸà$q3¥ËÖ\jûÑA9Ö Ô½ø±›=ZÉs3K™ívË}fs÷há*ÖÝÝ›,õ± _@ ÿ½[€öÂ);šG4qHÝ­æœËw•ƒh“ËQAX:[õÐ`hyÅ1¸ZN¿:-§oôâ{lÓÙÇíEŒtÇÐ×Ù|ã™û™çÊ„i¡ó2ÜQ/.Üów_K›Ãiíþé¨"õñ1bV_Àø«ZÆêLU ReH¦Q­¨F`´níºv}Ûkˆ Ìð 0# ‚¡V.aR”Î ·Tœ±!*öÚza†kySñl-UdŸž€" {5õQ¼íóùEvA(”ÞPï ³Ê>ŠÇ¥¹µÉZ‡@€A¨kÐkíè!qΟ¯©éqÙ¦¤^ˆ{UXÎ”Š—IžžµTñEæP9±¸$ bHD)ïÕ ]È…ñÍÁ&§3@yÅ´û]Ûb™ŸW‚-ÿáX3”¹] 3t«Ç–V`½m×,L:áßÔ};7'°´D»¨‡ ó¶-nN„@÷ŒH€ñÒFbTi|ŘìÔçD×3¿½\ ä x¬c⯟HŒžhê[Ÿz|48g[¡ÿ…Ç@/œOXµè[Œ-ë÷"ìÎ8ìøOÙg9s¶¾ú3‚“œ¥¾–º‘*à0ðœÄ±:làÐ!a6ž<®|q ÔÞׇ'ãß@J¼1³%Gor8’Þ’šÏU0Sì„mêÕº˜¶R]‡š£µZÀa¯‡AÛÛ¨Uø˜ |¿f?…—7èX›]Cß]piGjlp Ýâ¹GʱîÃï¶|»û~°?k? çU›CÊö[Ò'ÚÞÕ ÿKç7ù¬Êå˜Z}h›’„©¿Qï¹õ¹PABEòÃv¡ /?Æ[=¤m`ã‡ú$€`] ª†¶PiÓ2[XÄØ7öå\¾ÃiKO‰ Ò4&òTçÏ÷_äŠ{¶O ›û&‘¶æã¬¤ÃaÇ8ìAå³ëuG®²f‘jŽÓ—Ìì£Ý·››Ì œ£äø*Ý…Q ´Ò¸La±“øÒœ…òòà\ãD}’6KB¯«z@}‰üäÔÏÍAtd™“*Ö<ù­‰ù}‰1ùP…¢á­å£0Ï.ÜŠ’çŠÛÝØÝ¸¾øøÃ–bWýR¹?Å}´ÿîк#=¥6‹Š3 ²g+ódÇEs˜ç¨e“ DàÉ»Š2„ýNLÉYµ.Ê%d“JÅÚæœì»¾®óߦqß:íu¹zHÊí*1+Å|8‘<¿]ªÍ|ÚS“‡ÃªjqŽïR% ßpì#ð€· ¼U¹$3Á»ëœ>´‡N•‡¿"Ál°³X¨Ë: ÊóFÄãâÛi äjêÇã7ÏèˆÎ…mR5k>ɲ7ÄÉwã«´šÐ»`æ½m¢³ÞLY ÇߺQý×wHÄ]|¾[ÓI+ ˜LÐ/½êÞ¶ç˜2uŒ¨ß¶š¨·Z#ôïUë~çe_V&­‹~‘f)v2Ã4ª¡Õ6ÎÍè÷”ÃÂ.By âY™æ¼ÒäZ¦>gdv¢ñZÌŠŽ/ïtšÈµ»Œ0˾Ç~Šn `Œéã¨Bå°ò9c¿¹?Ãò¿È,ã9;ÜT¿Kñ¤º•ZÓM1³2€x€¬… ÝX»zTàZ@\ð5¸J\J‡ áˆÈ!Õþøk$¯+¨÷Ë[žy¹hZêƒÂ‘×̇;Œ?æ‘€œŽÊ@Œ¸¸2„s*îvV¨ï’ËÙ¡íÑ îÅvÓf¶5·°ºl/á6ôuÝ|œ´Zö?€‘±:Æã ÷¢’zh^{Y-)ȸ‘§<àb&²Ä˜Âx43óP&GÅß™êM?;œ5£€úµC3ì¾`îj½ØÁš3¶*£Xß‚ïd-Õ~V´)»Š€<–š²<l2óiQý;·‹‚]›i•i[´òdmô;™Äë2ó÷|µüeD•Ì)1È5±’à Š3Ã?A>ÃÉFÉzÄdCtÏ¡y+U®~®F„Wç«íŽšŒú`lÙ4Ô5ÌÿU°z= Âöîq|Ðy†,ÆQﯲ³D ÃÂŒ6|¶8kâ o܇Béì ið{L -˜’•ˆš…ÓñrtPÞçÕ©;kÐ?‰ÇÙö!ªr {E»ÖPX"A¸”$¾µ8 /<âëÅØ•^ÊA®²‡tFa;!•®wžZ…øI="ãí‰ënò/$Üìré“EæØÕ<'{%ÖäÁbïÆ¹5\õ°™˜•³b‰K4¡h`£ªFû¹ YÙpîRáj:¨³ÊGs¬Õ vEWbÉ~‰ÿWwóP~ù°½³&íWZ˽}ǃ:ÃÐFw†á€î_V”~»Ñ¥T‚ýp•%¿!©}Ù¤:>3M^Puv§EÆŠÞ²rü(VŽó!B;|' ëÖY#U}ýlCº hDxõÙ  Ø0׺ºê¨n[¼â!“–¦mM/ô"mKIVéZ:WÛ˜W‹ ºÇÊþ@¬]c„áÍ5•Êð=%ù*õdÍç|pmñ¦Š“6R<ÿ-zUx4 T7ò]°êpÐÅ7©%"5W Ck€è‰]‰Î·6Úrq> ‚ún)jòuX9|Ÿ)eõ>W.~Ý·à|þœ´'ßÆÑ‘ð¯n™¯ßût‘¥²~ŸÄºàß©²ìE3A·mPÄm9‰äC "3GqèÿÍ(Þûº1.!c9û$w‡@ðÎ&С›¼' ³ÖÜÔ¼kõ>\¡ÊŽa8×v^­ƒ+ç±€ú€°™ÄQꨶ%hÊg~J>…O\ äS]æŽT ù`'jÈ?MWbymøÒrLæÒ24¢ö"c̱ :ëBíûC9ѳ /G«ÎÜ/ªœùKAʔ۟<¸«Ñ@ŠôhCËåÄ”_z+—~ó~Ψ²agç×0<-ËÖ{ÃÖb;èº!?1‹¥ÕœB±®®$þîŸá¥"÷zË8 }¸ö•ŸÈZ åY«(‚ô˜J°Ø6ttº31öS؆:&çXYŽq[ý)OОÇyU¥Y42˜‹(pã´sÙFÕ¿ütNevìVòéöóœæzBTHs`ùî7S3 ‹'ýŸ8ÛöoÏ~iÔ¿ëè±åé¿°ÄðÙ­VÙ¨±E ƒã‚‘¡4F½L…ÛȺ×Õ¨nÀÕUÛ]h÷9 }7ŠÂ%Zã Õ²‚(®ÿ–«Á-ñѸûá1“’¶8•¬µÕ^¾Ã4€ K÷B"“oÄVr,Çwê–@åšT/ýœOµaeÝpþ§tÎ_Ýn’}úY¸<;cì,ÂsK¿mê‡Ø©»Œ¹0×'ìIாÑWa·”,GSDS©Ë°T‚ÝÁ•ëþ‹Ì#ˆOiVÞq#DÕä~WXüÜ`ò„\!%t.b Ä‹€áÉ·Ùb,™³¢Ýn°Wbš"*í#ÐE¥¸_ô:BÖþÅ8]Þµ.ÛìiÑÁ[šÒIígªÜ¿äúj…BÈ€K æþ?ìKÆ»ì-oÕRI«€ßºñc¼C` 'ʲâ!éÜÖ+TtbH–|€…è Pe7 øUòcPi§ûÈnëÿHµN7«î2ïïóR½3ž¥d÷–ìïÒ‡" ç»4ìÒ‰O2 µóF±ÌòÈ”§]~è`ÜJÏ]°w±b§ÊJ°5RAºÿ¥¹­¨¢e 2wæ!X\²»ëº\ž#ëwóÝ¡ÕpSðÒ¾dœ ¨i%ë#pcdÒ—LË*Çl§³³\Xáæ¤ =WècFUq=ð7C(ÖOæøÿ)&y5Ň,sûÝZ¹%UvoŸñq4Â-¥êñÎxuÉSÒ)˜ rg¸4-ùêÖDÙŠ¸P­ Åu²À_ƒlä¥í<¡ËI?&waŽíú¦ 7LÚ&H9h#ûÖãŒåˆçÍ(×6Äs-Oí9¾³‚<²Ÿú bvyqF'ƒïE't‚´·D¥‘ÃúB„˜hâþ‡´7ØÔ¦²VPq¢ïßÊ7ûu£]3yˆïzóË?°¸Ù£$Ý3Ö&ø–]¢Á”´VÞNh <õ¹³Hð·,Z଴]̨û5Kµä¨¿rtswÒ±x¦˜•|ÜŒ?…HF¦Y‚ß²C-`..É1rx'ßßXJB<à·ŠÊíöÕ]ó û&{C¤y@¹-jöq£ãì·q¿˜Å,d£RW¯^¯žXÀ ÔGZí;¶†58Ÿàj»H :fŒèk¼l âk:·¦ÁóHëºÎD$”+ŽŠîØ< h•ßBõ,ähÔûÙÕ4åq9°Ç;Q÷œ¬×¾iÄJÃö|‡šÝt¢Z÷Ÿ;”Õk5œ£7yKËì­¼[´V’[ø§iûÒÂX3@º…|z*ÙÒ‡^¢ Æj´•q:w¹ê èHwwß/M :ÐÎR¨`Ó•Púd<fýuóZlï:ÛÑ\½Ü8-ÎÜ<úÜ¿ e+Þ’,캾½ÅXe#AC7F‹ú…"P£ËÏŽ9Á‡º7®Ê@$¢Åø8oãFªvšåÑ"¼ …¢5è O±b®)¥ÿÂvéÁ!Ž =öÿ=Uô»Úá`½™l—ìÊt æòe‘F´ˆ‚ù \ÙÔc‚%8"kóÉmì©V„Rô½ñpd»ôÔhªÚD"aoцmj¢˜ûXE½˜:H*ƦˆÈÛ¯%tE$šëíFß8‚¼!S7öòÑ]kàÜUÕÞåÖ|ð ñôká`*«q:ò,}•šÞ°Ò Å_;À¢úqzò`‘âYÇGo¦ÍäþþaÔÒœÿ7D¼5hÑ­ÃâÆ\$«S É¥îC'K—I_ðÕ¼çåq$yú÷D„‰a ÂÐS¼£•šÁ-ð×å÷ûì®ý¾Üø”?ÔÊÄÄJ@y!x‰óìŒ.9‰‡Ñ®fá4•Úî/`›§©}ºh«‰1Voy“©* bûûgä]b,¬lQ‚”{ËmŠê³B¾Áö ¦+Ü]¹/íLðAUҿ Ðí{ŠÝø6 ,_@'­Þ…·!2¡ÙrM[Õñ?(´½³oû;î+`ÑGD±ùX²Hµ0 ª±´ïÑrItòU¿f0^V¹Ž#²h‘vÛå£T§\²ï?BÛ*)¡?V³c3!:E´D䃌ñ¶¥ÅEÝ[:pd¾.<"±žMp0Qpí µ¼ú¯l@]Å.Ù¦/ŽWÞßL(„Uï -³)êkFÑMÖ†ûÎKÑÇꈒ”;.>ü`.Q5³ËOÜ–Þ´\ƒÖ÷«]rîrøVºÕÆ]•͸ï´)¤ªb¶“n@Ÿ—t´§äXЧÄ2ú24äïSté 'Sad)ŽŒ/Z=`ÞˆdŽy)W&#‹äÄ 2ç¥â\p >㎤—Eo°ãüûº* —‡‰ùÜÊ‘DmòF·|·~§Ê!è]ö9@n)Ž×—œˆ0W·Ü´¡½ƒ@ZHÍt½o@ƒƒWuØ>›0Í)"_zÿ_…€dÅl¨XmsY™±ã—biÄŸuÞ½Ã4]ˆïØÖôåŒ^¢ÿ˜Rð8ŸÕÔ÷xœ[Ñg L6͘z¸s=‚'izQ,#Ž[ò®i óî  ì¦®+!õ)ÅAvÂ×zôÜïkWºñâœ"ƒë(*$Ì”„iøHI7….ÛÜrnÑYb,þ{¶X:ÍÓrdÿg'{¿‚dcÛú&‘Û}˜ cTX‡OU‘›?Yô•Žé’Sµ³Ê‚Ì+€´ÞæAc³)0~€¡ÎsN$œ«¤ùé¿»Šs.W§+y=å—ï¬ApzV®àë÷‹Í%.÷³Ã÷…R¦Éš"?™†TÃH£ÆçÄ×Ñe¦»dürŸ—[ V¬n~ó4š"d-ӣȨûwh½W±Û’žk,qGEaÿcb9ÜU­†š[%EþÌ$bu/l×KÑŽdÆ»¢$g“sÄžÍuïwY.·öéýdVØ~·l½_ÑòlÕ„&;b¾A!^¹1GçëÑ,„K¸††§-äÌÏJ¾~{ßÝÁX{‘›gÜQßÔEÐÑsDKZ‘?Žé¥Z¼#æ3¤ên¥1l§3¶®&f/Eö-} k®¨¼H±îÉý½&:‰!£Ø¦ï ÿmÂtªW]9‹su£žææ$œæ13s“«ÎE%¤@ CæäŸc¬-¥˜Â‹¿|;¢¯¬¨+æBÇTâç.ÈÝ3EÐÇN4¤†ÏÉ[D9 ^ÄÒâðw€\í +1ø±àÈÇEJúÒÃY¶S›U–6²Œ`TôÑeXœ©(¿øHzþú9m8ä½PåI¤{µ=9ñâ„g~‚5 Ÿ+¯Ä®ð€…³" 5¡iÀ®«]`aEOJ9”puÖW70¼=ž+R@`~˸AWé/çç…W¡øê˜vÅ”M¦§‚F2$ªmêÌ •WÁBFŒ/cmZÁÿEQØM @Çd‘ôÔäl±~™ Kq¦<êI±džÕÐþª¿8'?Ó‡š >bm=ü³m!1¯¡apexq:Xš÷V5z!Éylø >\Ü¥½"œ%í8†Ñš{ò Ñïteulõ[~ï¢NüxM¨ÃóñéC_G$v¡™Þ“ÆbóÄ%£–,¦èê±DGø¦öš{ ?©;÷Å•¶sS„Ü„Á,ÙëSØ™‘M¶³´q¢·(Êx%/Ïæ5ÓÐ÷¥Ñ1tßüÎÏbÙ‹¢Rø³‡€Î`z·ü$ -F<ÒÈgöáwaŠèt†‰åÏh/ø)Và”h&ÝIzaˆêYüR^-áSe¡r×í È»óú4ê¯wÀôÁµðÌ¥5©žye¥ç1 ý¸Ç*zyJùVÌdЍÒ‰ó¡‚íÃfÚË…©‘ó‚p}Oáu t“S¼C£h¶xò-´¬\´áçòBWkQ°¨B1eœb™„53Š}k3F/_6K‘0PXåpi5Ê<3Å{|¡Ç¨Ì«­$Jz×+wXhhDëÆF„Öëšà•f©@ 6x;_iSÆÐi¸ÿ¹ÛÛ×(z·`™[ÅsËuqSðcÚ“tZz ”e¯\”ÁëE•Sö‹J7B¥ŽÑ,ÞÉcþÖôk"LÛþûîjÃÈf0˜ÅY<’Ú;±ýneÐPŽÁ(>gg#K ¸G’ԥ™°€0²*]óÓ· Ÿ)©â¿#©S†}WÀ˜¨Jœ´Òí´œ6·zG~%k^„m’iëq)æw]j› ·Ó3“ •D«»aÏ|b¬‘ç!B'ÞÖ¢¹¤íüª W ‹îÖe£Z•Ö`SùÌk´½[£Ý£‰ô’'˜‚2h}Kÿæ †$ãJÙÇvÅ mE"ƒ‡ šw¦~õô&µQÉ]1¯löv‰y–Ç9|aÆyyÑx®|ÖP§ñkÜNÈõ3Hùn`‹Œ<“ ë°¾ó‹’è)þ©ª|í¿¥„ªk?p)FS2F„×@AÍ€'Îo.‘ñLç-¼wŒõÓ1×wϾœx‚0£É¬°â¨Þ4Ë”ÐU¼ˆæíÖôù]­>ðç€‚Ž‰(‘tóÍ»h^&Ň£`‰Á^nL§‰ELGU­¥Z“¼Ïfê&U&ëÀr ¿6*ŠP¥Þ9Rxj´‹H«û¿ÓzÅøêèRXÈrC·ïnÜWn*%Ò£¹˜|ÖD©TØJ ©µŒŠP'ëSÿ¦&ÿÚn\ÌÙøËø© ¾]ÚJ%è‡mZ ÕESò*†„’÷×Éú2g§mT3¾)㘧¥5©ÖYZšçÕplp4?‚®æg/úÍîDx‚O@Ä€¯Þï“hÕ³‘7ÚÇãÒêû²Ê#aÃOÊ-ÚPq 3„eúzߌ´­þÿ×ß–ÔI("¦l!Yï5Hv!!ĵі[þÉ{‚EiDÕ$ 2­cšAÏÆ»!ž¯Àº­4+ºÀ»X]u3¹¢6]ù —êæ[OûiÕg}±)XW ‰ƒYp#aodw*¨£Úá^[ .A]F¢ýVSô` Sw2h- +bá§Ê!¿.Þ#“$U=Sö¥ =nKn/˜Ï„Š­ŠÁv0–+¾â«‹… ž ÿSÏã ÅÛȳ6F ¨g‘nÍ~€w| `u˸^núÅî*‰õ“¥r¶j¼ÄÞq ûDþ𣑈0à…ñ·H6£CÒˆØîg``ÑJëQ ±ô’ëäŒòˆàõÉ¡ìák'«”ÇéÍ‹øoò÷6zŒÙŸåB”Í-!M ‡F^Viÿº@UI$;"†e|ÙÔ¨æ¨Ód©$[GÔMt8:¬hßÂ’ª±EŠ› Ëø>AÈôxEìùo»Éý°¸ÿÊ`¨áhÑví«Ú@™BÇËdã.Äýî’½0üÒ†¦Žæ‹—òTó ŽeÑóÊœ‡Û7Å¡«F¶á“ Ki.G ©lgC <ËÉs/N£[v¥‚qÁº®5“A)¯}hUU ñkÂÓU{Ò’4™†&æ®ö"o”‘ Âsºðïu;™Ú3DÿßÔĺ¿BýT.çÏ6’þê=x¶‰m±*ø³FÏZoX9P’ezWõ²Êi”jû §dB¾\b½ ¡ÕoÈi¶¶,U²`loŒà1Œ¯YE¡—@‚|/zæ0¡“Ó `:+tÕLCVlì;¸,\d{VvV>r¢q£E·Y^NÊÜu‘|d&tÛÏØìs+}eâägSšÊeü) ))|lÑ=Tõé·Ö`ï¾>èm~…;¹¾Šz‚]ŸÓ©N²_Ä6à>=8¦žAöù8Q•WH}gàÀ»ÝÞãP”E?ä+B;ÇÊü¾ü£ª‚R&Ùµ"oZ°ëjÛ 3×dþ5“`7œ‚‡"HœûØÆ«½ÿ³pîÎ㵘®œÅ¼ÑV£4!M˜HØÚÚl ¸ê?]àrVæÁªÜà´eÏCÜÎÂ÷„ì é°Î ãl&¤_#ÿ›Êß9´œ97#„2W]ú¯7Ê Jv`z¥Äû"öf‘¢ç…y·¿zïõ‰¨DЋ …ààÞ ^ Üã¹/l×¹cöEXñDÓJmï[é]ÇÂIº~ ê¨m`¦žÇ´½àiìÍ”¡cëp‰ˆã3‹ÉÏâ“Ê´#:ýá¡Yz2˜(xþ÷ç8ŸvB(L-Ïר4¾9eã¦Ü}M¨hÔµ×'q¶ªY®}¶”¸Ï#7EKV Æóª£¨Šà8¿¯'½†‘ÙòwC¾á&a#…˜º[ßcì±6é#‘Ç“¬h“6t5ÇDQuO’]Åè ³ø.š “KÁG•ã‰9 L<ÿÁ“û)žXP_É„Ïä«d }„ô¥Ix 8]ˆ8êåÃÕáZÐ!èô´›"=èéÛÛ =ŸâtC}Ößô¸7Mâ*Y·2<ÒD;.üOEk7Z¦ä£Í/WW;ë•Ûw[bÓLÞ˜50‚Ò£ îåýÅ6—5ñ u«èò»GÿÐYö¿4Æcõj’ÖϹÂ<¦¥È›’BGËÞ˜ot¤b6m øÚºƒöÔ%_ÏκµÎ¤ Euµ¥W÷H™\ª–ev—M'k¸Ì¼Ü¹äíóÖ*'¿—ßSx_ÌPõÞxÆ.®¥8wcW˜–sˆƒ0é³£†¹×Ý.žªô‹íªéºù'ÌÏŽË÷¯|ü†Ì!aÓÕÆó&lSB›¹³"„3ª¨Ð !;¸AVôcCBˆÀh9&1ó[+º”„m*¤Ç„@-}vùåê ôL,ðœ…x'´|M5x^Væ¾Y§AùØÒù”6Èmp½$SG[Uº#õîzΚ+äËmÁÞ¶µ×;3înáäY­w†ÙÏ ã³P‘ý:´Ý¹0?³ãø£*È#§ŠŠÇ£`È'ªcÂ- 0°>Çg°œ&Ô%!—W` /'þÏûž† X´¼y÷‰Jã”"<œzP…`gé 3–jgŸ:ò)(–Í»¦ëíðP¤c} Úæ"¼I„81Ykà„6Tã2QÀ ¹>prÆó37Kp€+}q¨ÁÖý²!u ¶ ð÷ æ¥X½\µ#0ó»ÐÅ*µ£ÐÏ#É-þø©H½‡rw :¨ÔÙQ+ŠR ËP=ùKøé?«]ÍÂý&,¤PAhÓgšBe£­©Z ‹rSk®~ï2|JÆbhÓØ  !DdBBʦ[@£ÒOyÆy%ZÒ±ë±{­^3¤ÜÅ"½JCŒ©ÀoÕûôë™–ƒU>Ús×DTøJŒŽ…^Hâºg<ê»þÕîx¦Qš\ÿbã XôÆàõ2–0]aÄîtøvÏoîÛrîHU gQlŠ‘U,û"eânŸ@¨XXU³8ãü醆M© ×½éÌ6´¼Iâo\p‡X˜ Hö·¢U ¥;S×ê}Fô8Ú#IQ³‰¬Ù+Gy•öøŠ-(äuï.ʾ*XŠx4»uR𠤿œè*°œ§0²¾öb€ÉÞrMRûWÔ¸Sé,yÀ^™+:È=öhøiG €÷k‰òϳò&ìµX¨ (æS¡)J±ùË­»]V@ö‘Èþꦥ‰‚4v^mã‰F“ßêOð²·\ÎÑ].²’#'OÔ-Ï@²ú#ªöÑz„ðþ± Šnˆ¸œ/ÍÝ Ò¾]«Ä£Y>M¿ž2í”oÇäò‹ùйm¸ƒ$Ñv‚êÞ1D‚-ü¡>‘%k§ÎöÓCÝg¤»è¤9ùǦº½õ]ÿ·‹ÀU¢?>-Pù\Ê8›› B\pëj™“vµWóXY±ûˆc´LÆe~b¬¬§p,ghºàáƒ6N`»,œ³lOȨ7 Z¢œº”âl3M×µórÊ©A–îŽòÒí€jõ‡Å´>ÕÍ Pò¢ø@ì^ÎaÔ;ûáÒzÑÁïåšÔÐMx*"À¢ Š®3‹Hà8±9¸*ù‚m’¬Ò'˜£:–p l2@·ÌS|û·ÂÉóƒ©C<[­AiÃÖVж¾ù\%>ÌÓ)©ÂÂeÀ ¼Á9ºÎN§i«X˜œc=ù‚$_Ï hA-¯ K1C4êvû|Æ‚QÄœ–uÔ¡ïÒÃMŸÕ»º,ŽhŽí± ¶7Þ$“ÊyeUI-fÅÖ5,;˜^Â4vr,Ïññ<âç‘ñÚà NчÃ1˜=„7½.,Լñ¹©M¬¬ˆ Ð7‘A3œÔÜñhJåT‹Oi7ÛEhø±j!‰Q6^ëò/p†VEí*Â,ŒÍ™3/çZW>sIòþT8ç,cÛIø¶jÝ)êàÔ¸“³2‹çjð<’µ'´šßHØœ†éûgü`9#>%3ˆÍçr ’ÀØŠ ¨Ié®ñØü ãs|hôÈéK¸hjÙQŠn]£<Æa=¶båöôUH|º‚Q^Õl\2jh!ÌÒ1~f„‰Ol]š¤ë´™íØfØ €Eà€=s¹“†P–€^wÚà™83éd™ogv²çœ±Žp{N FTuÕŠB䊽lÔ}_Äxµz{¥¢í4ñ½„ᘌ(˜]ÌÂç ܶoXæ`è× ´ŒOTù€øÕp}ŒÍ~‘bnDß Ý¦%û¥¤ëq'0Ùë‚!€·‚p0Y Qi@93épåq_@qÆ¥Õ[`píµ×mGú ïÑðÛBv–|«¦Tµj±øGðˆ%HZ7⯵,:\§tèä©(G©µ"ñ.ædÀ£ë8÷\ÕÌ“C19³ÿ±ûºs„ 64x§´ë¾x q¯x+ôXÖ·ÿùQ¬#Zµá' í]Ól´YƒÁ=ñìfˆÁdD‚¶×*îPô eÖ º’E³ž½þ°íXÿÉigAžñ“-2Šºâti ½÷‘© ÔP æ{î|yÊâ Ê[ÀwL5ÍýûôœÏã]ºe.%(&[rÝufÃS=æÁ:LŸÎY‰-" Aºã×yÞ…PG¾ÌnyS ªçNO'ˆåë‚k{K—÷Úà{ò§^ø,?6I×áŽUA@]§3®ð)'†UFò”ÈÅy¡_°¹+ µ3ø§æñscüØ<[Ox¼-=y]^ k(.(¼k¯±š)Ñ¡Çfä áÒÒSÝ#váPÒº8“ÂÄ$ ­hHN‚¼0©†±£ “ qýλ¢’³§á7£± õïæó8†ô!·^ʨ´þ‘ÇíB¶¸n£…¢¢\ŒãüC¿£Eý"?×ʎΔ­@„!®ÒJLtèû,³a…(ÙÚªqd Ü‹p’’tí˜bG[Ñõ—:5#±`ž(QìIÎdSÉâ]çƒj_éì™ÐÔr‚äg³%£×è“™‚¥5 –¤Ø®±aa,Ì ¥_wÔéCS*¹ä;äÔ`ÌòÊö»ääA‰:™¿“Å 6t1¯FÔUñq”<*详›ÁòÇH=ò¶s=7…êLà-XÏ•W^WÍ:BS` §®N¼ŽáÑ©$’ñÿÔ|úiõ¼ë™ö‚_Z¤%'xõoþ£zÐ4V¸ï3ãfZ"²À^ò­.ÑtüáF½H¼wë6©¯vN# ښ Iå…4¿«ñ?í¤ˆò¡±i®4’J99†/»BA²í†FÙ;P8ÿÈ-Åt¬>·Ú¼&>Ÿò{¬Zw¸<!Æ«H°H½¡ÎUüIû%n—díœyöoúEÌSÓ×òTBD1?ªÏÉS‹5”Œ:6ãœäSçï#&J{×ÊL5çæµ×Ž8®Dl”?Ýš…nê}XÏS`ý¸ïxKâÈ/6_;M˜y²ðAâ¾”»W—ºï0ÄÔ^„³–bþÛªÝØîL±yÎɆâwÔ:°C Ó3ŽÇÆÅ ¬§^Ó”d‹„П‹¢¯H¦å’.Æëì ÜÉ™þ`aÔýµvsA1>Øt;Y 9÷äv9 Ç›í¡-œÖu£ô¸ø‹3ÑÝ×bLÈBTÙÇ´V&·5•ŸïuÙµzaƒ¿s½c»+Bα¹_#¥ŠI"k*âút)ÚH)où¹f®]˪CNІÓÔù &ãò,³ ²~Xthýµÿ&1¶—\Ê̲ë6´G/:nÚó"åÿ }¶1|ŠûÄ·>%Æì6>€9Íó¹>Œ²à –ðÈ•ž¹ÈsO7»4N]ÙážÝþÂ3ðÏ|`¢˜0NV¸ªÍÚ{JÑه㔡k™¡m½µ¾Œ5É@€tÌ_lGÀßV™8ÜüqZŒ_÷ÆMcJ:l"…W‘&5f¸ ÔÄ®4M–|õêÎ%îzŽWö§"Ÿ5ÑÞÀ*j(~×ã· Ìf˜i,Kã¬Ù°iàa^Õð™‚8ÿd<‘=ÆÕ*¶ÿI µnÆ8EQÁ°¨ù¡s[ЫtAG„e›)þ¸Õó %³ü'•è67IØG"ìîYX"»óÔób;ÁøTkk#k«Ò m"}L¼g×Õb™'Ž;¯€Ç§f?oî©tXÇ9ö‹Ûf1•gŸ¾Çëæ¢âo›Vö |óô_ÎÓ«å°¾Bµ¬âÞ%¾k¾TJ¤Åwkry|\''J~ïZæ2=ôûå/rÌô’uª€5téMU±À¡|¥wÖÍÍ·$Î1ûâ¹±?]VéÎ\íʧÝð¶„´jsòbKÈõx¦•ž²¬“–ÝëõÕLT¿Æ{=–Pÿ…¼ y0æ­¤OÙ t›“E»sùÁ«×Df¼ùzŽuVÖƒØÎÏÓKí˜Xnt0×äðv‡ó›Yê@ºíB_Öq¦3õ't >1¡6ñŽr®”éµM«?‰UJ€ð<‡trún??ÎWp¾þÖPKlÚ­re±úf¸—›ù 4ñµ9ÊBÚÿŽC§PTô‘Êøß¶Õâ:u;@ÀldÝá³"§Ò4dUYÜ¢úÓ~bàL]O!ÜõSY[ØØÂÓJOŸS\oªmõ³¯ü·ei2jùAù«ö€ŸŠÇÕX#\ëêéPÏ,Äðh–zÓþ]àgüC‹ðÅcÅbPlø-ÿ“ÐyÕ`k§Ä¶Vææ•´[4‘×¹Ã@;>/ç÷9›ú-xWÂÞ4ïsãëŸ=Ge ¶þ­=RQ¢zb9Ñäüxx›–â%1_wвTíÈÇ;¼u –ˆ–ÛYeÏŸIXeÓF5®K90Gìί՞Þ.¬±ÞéA2¢ Sm1Qõ•˜£¸^Ð0G/dý£,Ü—kóÇ»·C[Œ bþû5l?ø.wÍ¢ÿ Bð d'C—Ûgh+á¬ôOÅw ‡å»XåšàV¶D>÷f´;}2¾Ïj妙Ö,Ç€°¨íêl%®ÂmrÝÄíé“‚nmäÏõâQó1—Ö1å5@MZ?BUƒÚ3æO“ ỡà [¼j>:cÑu§„†µ@ÃÆÉ,^½µ éf{ “Œz'‹?W–‰øÁcÏCçDËå¥áSí¬ï–Ÿ5HÉh}˜:-Ô䳪;º nw˜œÂ¶âžiõwE^]!š[Ê,1ˬHUÅ»ÇH| }Ô‘Xì´ÐÉ-lŽˆß|$FÖ수ºÊ RÒ€ÄÄBmLÑ>šf+âM ­æÍ‰Á§˜mÙé^íDZ½T—ŽÖ’Ãj:«•Ç&]9›Kôå.&yžx`¨˜a7Ú,­8m¬>dÇQ÷¬? ¥§¶TìñÞŒÌñðYÐáÓÒÖà"nUÑΓ¿ú˜FRqToä-»þñt¢•ÜÏ1 ®Ú|mG!kL’Þ~€Œ³ãÓî˜K˜,÷E_¿‹d”Aʸì 7Ëh§i¤`_â}M0k©…[¤·õ7D|å0+øÚ“˜ƒ€$ºÒ/¦.̾IœÑ÷ŸáõºƒWà_€¸Wñ9·ê˜€q”tÌ>gv(spcœDpð-e–qñ˜ÌCBâUÏTä-üÁàÎmœæ,Ã9‘È{‘®ƒE7ìé¼U)¥2)=€`C6ÁOÜŽdZ×Ìh/Â?)Òˆ°œ-Íuýžp.çI‘ⱆ UB.*aä{Pæ·ž3|÷Ã,a#Ï‹u²tE'Ë›YdôŒ×Prp%o¸‘"8I \XK‚Ú–›‹Ô(²'g¶bÂ_[’ hò\^]j‰rwœlN]<øe™Î È$ë& ì‚‘!ÜŘÁ°Ä# o SÇfÐA[¦DÐ?Ïx w<ŸA³……Z,iåé “p;%v+©ÏIôá)ÿ¤)«Ù:à–<¯å½¹7²^I€”M˜Ò H•,Ë¥q#:QNµã B5æ·ä†Oë•«¹&^&ªÈÃ"Ú ökCèÚ‡¼uÎû6^V挸"­1®ºýp·9Ȫ&êãÁ#cOè¶ÖGNó— JöhˆÖ183sÑÓ$”æáð 9Ò«*=ÅõPqýC/…%ÕvØßX½Ìt%‹“Àa>f¹YÉ/S&ÀÍ´*´Wĉ¤8¯ô¸gÏq¶Í–Gš‹ˆàª “¯—jzgTçÙ·}ï*“…É„¿ðö£vüq˜M ¦Kƒh#iÆYH3)ùMJôM`Ü$/*Öé¦ ¼‚Å®ÄO×1¸U `4Œ‹¯™û=[3† ìÁ//ÃÞQÝ=²)…1IvvéÛþ#™%£¢¯,†ØnO€K=ö÷—`Å '“Þb}Aµ´¿Å{ vGJzÛ{Ôÿ‹ÝÎóG¢ÿë ãѲýg V[Š|¤,ñ1–c[’4%A)[EÖ”Î&=s'§mï ›LcòâØ x÷Æ‘Ãéw½Éú"%GLóc¾M d&#;0ÅB~^~Oþ"‰€¢Çñ9‡¬V¿¡n(sÁQþ³šïoÕÎö›sw?“#óÕf¸¦”n¨ÑÉÃàÃ)ªÑ`èU1 F¥t—Ì©-œÑª)ÈdÀ1¬ðªÃ£Zó'/h•éI¯ªSÁýùGŽ÷³$‘< ‹uç+2ˆÀ°„¶õ3]¼s¥"ªã…ëN(4ÍmEºm¶qVók#)B~:d+ _a˜à*j=JhÔÿJ*j}м‚5!GØ‚eøe\mHŸ7¯¡ðÎ+HzDºä1r;š_Þ°‚Áe&©ù ñŸø¬~Ò¾°}Ö7G¿ öɬùÚÞŸ«÷¢Æä³¦@éÛ]̧² ( L¡.Iå!îik'qºC¬A©«·l¬˜•¼ÔÚnváwÎ^jk·…[U¹¨öÊQ<ÃqHÂÍzáS¢¸Øuh®ªç¥WлaýIù”ô¨tmøÿ`n‹7¯ž³ Ù t! ûÖÎ4HãTëèÀÎv,€ !)#»„2P{òÅ>b¿zn®þ ɶE<Í 2ÂÕ¤_,Ÿ²…7ÈË¢„ ÁÊ{‰]ñC‰sgâÿï•êøkí kd‡@cùÅ],ÓÖ\ &RÞ–•«Ä ÝÍ|áÎ gçUˆ1·Æ ,9Yß¹Õä½cÿ+8 6C¥öfä|Œòª…D ‚¤[ •ÒéÞ¶fþ0()‚¶…°ïK:êfgÑi`í]Ì*õnº™Am‹X/­š»ú°Ø™ ´ÛgWðµC"¬i[™GbZg0åÓ ÏWyu€¼%~ÙÉ6~wßܶ®ÛË ±´a¬*ˆ®âs‚#Ƶ˜ÆÐâØ‚£<ض¦«UÕ§Mö˜ìÄ›»ä •#˜mT&\¡—QT¾³ºWò>Ô ;}…5ŠuÂ:Fe>üË:œ(ÃÕÀƒ—,þ(u™}{Ýý»‡§ð!v0wµßWü  Vﮆöwr‡‡‘1œãálk’‘œdÚšæá¯¬èâF‰ËÂa ©Ë/‡nîM©$ÖÆÏYø2æl@Úέµ‹¶Uà¨+¤ù™j&<7ÓO‘9]N°éღþígØ—§ )”ðãÈÉÎ-*î^¨ª”ÿ%!å) á ­Ðü`ø·±bÏâOÛÓ÷ |»ðÝ »òæÊ˜ó«þÔpWRÿT©u‘+ô C’k–=ú<ÌWŒê˜Ô%º²Ÿå$…6²¼<¢š0Wpy‰–¬Ä‹ÅÍÁ^ʒІ$W»`5ç„fÊÙû›#®Ø;무U(¼ÃPy'y87tl‘9þšô!êƒ aöÓ ó½Cœ ³2óæoÒþOèGd…ð§WÎÜós´;0U?@«±¡n¥zŒLëoôÏ‹Éyì—0q>vï‰JwÃËÑÑ.áhMœ%Ò3¨’ÐåZÍ¥˜á§<ê2’¹'Î0[å…¥ç5‘ë;É×;Ó°/S²0Lƒd +!éçî)í­¼ ù[: C&iýkoõë.Wä u²onõÖõø(8ï¤E€}„›WP"Ò³oÙ­"6󟃵Ý| §›:èèæÊúf"o9¾Þ~ SøÙÆó×y˜~á¼±Õ½÷#®«¿\bÏ”Q`?¾}FQÉø¤árëRgàóÑ%ôPö’ź§ñaO‹l½Äõç¦ÄMªƒé?—P ß^‚á]'‚²ƒˆ‡!£F#÷ ½£Í‡“¦ã%ŽÅ|k$‰—Øúè†Yò]ì4KÈ Šœì“.¥>ÁC×"¬…˜q‹”:œ¬'.Þ 9Èdgï¹v°ñrTÁµªïyìDçWň}Ú¿±È¨5¿øí;?Óvv>kˆj ¬Ç0l‘¸TÙg~°É£ËjÞÂöŸ~@Š[‚¬WQ==…Çúþ'ó'üYÆ2§ë³ƒã¡YÚ^ƒ%ù&D >ü¡á.?’ÀB\/j»ÕDX5W”HêΤöcì7ªœ¢L4€Œ"ÛJRZ¶ÝÛÀ«3E‘ÀD]Þ}‘•Žomä”öÁ7WyÃöàu|ª›E"*ñ‘.µ¢îÈÁ×ZbhDÞò˜#¼iF; ÅÛßm^GIO¹z¥/#“]šrã,àÞô³gñ`>ÿÅB¨üpPrIê0p¿?8yù,Âa~&l•ØèMùÂüâVŸ¤ÿïŒç®'Ô4AÚ$/~V%éâ¼p]/ \aýˆ&úç­Mh+‹'²ð-¨Ü:uT‰kR¹áä¹­©‰€Þë€"Žê ]Êçw@–7)ƒ>sÔ{í;¦pcöEM‹!}Æœ+Ãx‰IÎÜæ|°ñÉó!<v`Ü2‹iç=᯦+sMÜ8­¯˜%+êZ•û,q‚ËÆ*õX°>¿oí=Yª¹íVGX{ ¹¶~–í%7XÃÏ—+ƒ|²WÅhÀÎ[î²S ÆTtT ˜ +"QK_3]“”Ü«Ž4ñ6 083p´‘‰gý›~¶öŠJL[ ÐQUW ˆÁ“A_ñ÷¼”ÛÃÓ²ÒÝGrd©jã´a~/gjn™Ñ„fró‹6‡¢VÅ51Äá¾(›ûS–¶÷E96]AݯÄÏZÒ2‹«o§‰Õ˜ø-ÿ|E*ÐR¨*Àãi›6Dš˜VîZ¨x”y{r}ÅZŠ ƒ=Ù¬f¼Á)Ú ~ûÆ\É!«B¸ÏíÓ(Ò"íïnèí kIWüT¡ -¸ÏlžÍúE?j,±¿JÚÛÙ‚\ùúÈ.V‘Í™©v»ìóžAœykŒ%ØÎ D;§CÏìO6£âd~äýe• úV(öÕ(Ž·GãX|QÞgPìP0ÿ¤±oz ÐÊÆžúœÿ¸íÞec¿…¡ÖÛvtïÒÔï‰)¹Î(þI „7»Rx¹´ Z™Yê”¶‰£ú@u9Ǭœ,ügñO5%PÊš˜_‘(¶ ¿ ÃÑ{nzÌâoÎ÷¶cÐQíz‡Ev#fý(ÊoÞ2)# ŸÇthhþ2÷³ß p™HâçnÎ0–*d,îÛœ¤z¾w']%Ÿž]ð-ñ-66 #4 o^ê….bëMÃm”x ÖzðJ¥»=nÄ„P.ÌÃÊ™¹!R…Ü^»¼” …â¨ü†*Äœã@,Ç9 õ5:D„¾p %Z`Âoʼû¡tÔ^³ZGН®cv4 ßXG¸–Ä<APSoä;Ö‹ß‘E¥]7Roæ©pxP§âÍ‹ò—¨3lòc(:kJú«<ª‡ØûÅEØÏŒ *ÿhÍÖª0èÆµjíDƒ1/É–Šh/Ò½@t¹±à>TÏbC8¬—güU¿ßج õH¾†¤™I„¾mDàTÃv²¿ÙÌ*ƒ”94ʨ5¥@ªÎádu m°Ø¯¨u𢠚Ô/%”nvڪţÊ8RW_eß=¹ü›PÊÜFSÝ-cåÁÛ°6­?h`õUWbi»_–ŧú‘‰I‰@´"—ujf‚ÐÕÎÅø&'.ÎûÞߺ&ðM|O"LÇ]*_-….›]5K’ÝaYŸ8‚ óó¤ÙM¯'3„RH p®ÿ,5¨pGVÃÿ»p[ — ¾€cÌSõ¶ºÆß2Ó,…/nÉqM+¡Ày•ŸyM" ÕÎ#î6³d·²+ŽÕ.òt–4· W斮r:+n ­/¹CšÐíÓy` @:çµÜÉ;òæ…kÚ÷³yü3+_.ª«?í!2@Ø1ÿZ-óÊù:;V¬¬„ cÿÕNÚmˆÅcÔ‘À0–yÛ6…L–(ÿu¿å÷;"5vÞ~"M„ä’ªÊ'MqÙÈÕÂ05B0üù·¨#‚=Ø„j%´ Ñ6ya‹;$IKõ’–²ê¶UG¼³P|HÈɬÐÿqeðb\¿õ+È>=i}MacºÃ»V¤,~QôÌø]z{,®ÝغÌn„v}¡Ìõ$¨-9Á©$‘UNFiQÛ“µxDÁ#çYJØ´ñA¾´ž ‚ºíZ³#;ÉXNgdݽTD,[g§­R±êÙMCVBÞ‰TVÏ7g%Ý*æ˜*]CÕßqH„~ÅÊ÷ùõV¼Ë/'P™o,K¯œ;öÉ•´‰D0t틌¸øýµ“”ù`¼N/€è€.þ}1æ¨Ê£u…l­|6R$­ºÙüýØ_`ªãmÖYíÄØ„+3Ë?auÌMgV`ö;@W‹x->çšwNÝÞƒ@OñäwËEOM¥¦þsŸãuʯ"øÄ¼v¸o‹µPa¨ÿ±Üɵ¹È0)1>ü‘ÆÞ(=X‹‘lþ÷6ÀØ7CááImJi’û€p1þˆa .#ýhžfD§tOûñ±šxÝeWM%îSæ(åÏL°ÅÄεeÓ§òÓ´ª¿å1èžC¾ã»· í‰.ìú'8áŽi²Á™ÚH(GÙ)rÅ1½ÄoÁCr€—>…0¼¯)10Üô¸6SÇùdUàs˜‡µU· žYbœÃ}7]ÃŒw¼Ë#Ý62ºýö®zY?BT¿>cö)ä—ù<Îþ#í³<ükÃÅ1±Íßš ª ÝÔ˜&1=fºùH!ˆ9Ô>ŒòÕ+t+â5,oGãmH^} ˜ä7oèÅû¨ßN‚† ˜.ìj~¯™Ú3e2ÎuµGÁ¥ ¾ä;¿^›Qœ˜cÕ=Íš) 'ïzßù­­R€Wê8e`ª{ I‚ë´œüµbt”¶5`vê|Åu½*FN?`šìB¬ëÕGåþ¸•fé2íìÛ·µ+H‚Fhi‚»L›ajÀٸɖ0þi8ônA\ÊÃF2¡—H–&zB鼦w–’h&šø2^`5þÉX¹ u§ì jßjÆ ´HMN|«EÊlÁ?d¯WNÃ*5‘úä#œb-’Ë ‡³O¼3t®t ^\=¸ZͦMz1§çF½%\œÈNô+ð¨)KÝæ&¬¦ç)ИY§†fÀ•z‹(@oÀô¹M7 Í|#ˆûí³RV¯dà¯iu_£ž¤ñFS4â-d>ü9KÒˆòµ¼{´8¢*WîåçÄ9–Ì‚xs+Tß\ú4j‹’}T?¬{N ¼‰ŠÛ‰‹Q¯Rô|llŽ—½òO¸žÁi-"zƒŠ‚1Eo„ÜË,­þ¶Ý—ןö<¤K²»=„x‚¬±-)oÖêa®êêät‹sß¡…ÜGµËüB&к~Ø…HWsê*2_à &<Ãf€}Ä:žh "2Æ%B;"¯f×þK»ú½˜…èz«>çêC®Çþ’G~ÑAá¿ÚֵЖHâ2ß1±AšÃò< ¨ úlÜǦU"ÏU=pŪ°'&Tz÷Ítô\54Öèz뎮Œ†—¼iq쌉ʲ)Äæõ‘ýwÐÙˆãJ^—yµy®\»)[ ftƒ[Ú´Úå8h¦ŠäÞh‡Á}ó¾ú@‰G”ZœV2†Ò¹jÓiÇj;ž¢9øe•ŸÃ°¼Y9h@lI€ _ˆ‰´§y±ofû×̨*»x¤×¹9ù`R ¥›‹ÄK-žoŒ .üx.õæ0²W”-O5ø¶ CJ¿lð=§ ¥C³L\º÷;/•c•3¢<Î%yÓxܹ…TÓk0ݸuÛF1Î.ÆGÜ3¬^ÂY&¡yb±9NŠÂé|Íoò6Ú¤€öÏA7K#¯Œ" Ì·$y¿©ˆ¡Jº`^°xß¿}²w9Ų5­ò*R:é]!¾ž÷Í!>¸WÞ'¼^!$ƒ¥è™,Q(ž"úƒÍxÌžØ6¨Iìû¥&© ùÚ$°:Q˜çzbÚx¾sуÓuß8‹å:ÀÉ©\§qN ÍrJ Šú«¥R}R|GðYœ1ËÒXÐlhöÄÚ4C¼<ò¡ý|¸L£óãã®a°Gº9ÒuЍ s ±äRŽÂkàÒ²Á3iUšÄ«b.ÃPtå•ÏÙØqú¬p?Ùû´†Ðìá<Ââ™Is¦V¯h êFÞ1ßwºYDßȵ [ùfǤk¼¿Yés‘ãÁO=ëî¯bƒŒ hÕ‘²ã£"²¨^!ìmÒü-ÜÄUI5çÎ`H[PD[ ^‰–$n£wF}‚"ˆ©…Í–œ/áõ.¸Tºø1ñØPžÄDûè¡+æ¬ëëÛÈÄÑOÊý€z;9ïë¨j ê$–ƒ9ZH7ÿý.WÏ}“0‚]Vµ…ò·Â²Ä*>ÄZ¯CP£N ®gLh=7¢SßgW×Nýy'‡ð¸8›PHˆîžµTyâM"±OK¨SÏ™»™¹ïNÏý':ƒ2§ªô6…4d÷¼ h1…šø÷_MÆ)§òñÃ;×èä÷ÇÀ鯄œìÈ›2,€ª*ë¹pÏ›ñwmBñW›=›TÅ8#xì­‡N²GÛ‡o ¤ö&H£wPÉ|³5ÔÖˆ ëÇ•d* þ€³wr”®„q3rȺ½½ƒ™}Í¿Á‘É‹úøÍå,«ƒÎHÜõ“wìó ˜°yá…X`÷¼.¾Eô÷ì~rùEe… Ì~´hN'»¢Fa!‚pö´õçèl»‡¿Ý7o”–ór+1ï·ù:äþÎý;ö[?@‘;ûšúÌTB~÷ö³]ÊI葳–Ç' EhC)ˆµ"ÆžWL¶~eJ]n,½ƒÌ· î?×á+Ú&ƒ ë; ÙV™Æ't1#0•±´Žm˜€kª[FÈËÌÕ˪>%þ'—‘-Ÿk¬Ó# þ¿ÅakyAöÂ#£âR"*Ô‘þJîV7'þ÷ ¦ fÞb‚ "”ͽä*D.‰™6«ÊÿË>0Õ*ûOËWÙ7<´ï+ÁpµŠ¢7|*fñ*ÿV­â¬ÎîG§Ö>ÎÔëÅjÔ/óËÄ<ÛÅùŒ|Ak4‡ÁmŠ~h«a[MòŸ2ûnUãBùHì ²/ÄÉHP‡ûÂÂö˜Ò:FÖú6¥¨âƒ:êBŹ…OQ³ t}¹ÁMjE`¨ž_%©P°ìQˆ}›g؉©+]J¹}ιÐ=YyÑõQ‹wˆÄq~½i èåÿ4Dza!ªþz%±°¯Èb/„©iQ#©Ò¤¯z±.þCf}ˆ—sRjº–/éOãTE5U® )Úó§°h'ü;M·vJ=ý¥Ñ7uOb*›3۟Шù½YJ ­GKý\QÙdÒšY©‘K•’ˆÊìÓ9»A°`é°”_!%‚ë»æ3-6—#0™Ý¬æÌgSÛ£:{ÛM½&@Cž“»þ³W䇨qª‰—]äïž–ðMº ¨³Xï}k/Ùÿ„}”Ì–h/éÇI‘SñâûJ³PÄinú€ÑßaƒüKµ¬õå­ò®eE”!tTm™é)-õ=Çs;ŒÑtõ%U…t¼ŸU6­A¯8>tXQ»¡¸Ù &ñÞxym Ÿu&“jöQÃ¦í§®;øp.£ ²É‹ýËÊNW$2š]ØzÊty8è«syd†¦ûlòÑ™ÄÊ€‹w}Ò%\h7íÞÑODÍÖ!TY¯Xˆ¸¬Ú n8 3¥Ã]@7Ž)Ôd2ŽRæ­#3²%óöÍ'ȇ·Àµ˜‘¶?A¿íé£HΛ¯ hÀ·Ž‡UŸÍì‹Kp¤«ÁÏæâƒw„ ‰É Œ -î)׬¡†ýaì£Æ&¯Ç®¿¾é´"—A3ÌAyÛ–=38éÙÆo8ànä €†-w®¹Ú{¶„êsÈÞ;Dî>æÀ_ÈÂÚ ÐÝ«øÜ%xú±Cš8âHáá­Þi×ïRÑk‘Ù£rkビße|e|LJÆÄQ̇¤4¡²®? ¨¥¢é´:`¦þséN™psì;„Ï‹?¹ð@‚pÞ"­]sm%`À$Äë}ÊÊQõ±Æ]£QD÷¾TKT1âdFr½£4°<õè¡bÈ]Tð ÍEŸ¶îߪ–aQfo§ZwWÉ7ߺ1z~Зêe(–¼¸š€¿¬ð­_l ÙmµŸ®Ó¸O:ÃC=è¸Ëºoö5„¡†z)¨ûLà}Áúå’öT“hw{áÁ`è_¥1unó¬Ž,gØÓÓ_Qâ÷‘5„¼¯ž6ƒLêŠ~Ö}’㾓xF`b ãD¹šžðžs\¡Çöé|·²+ÎË/ÍGø:ìÃÓ©]s¬Â)Ö…}Ôq¾µ¡0°hC…fÖ™¢µ”F°£ä\1&~Àþ€™8ÿË›®_UÁ^0fëW=zº™µ°‰Ž< °*ðÆ™Oi–V6ñ~ ãë~Ôbü($rµ¹œÇñÂÌÈê×Ïw¦ÃB•u'À©b©²êÖà­O\,ÎÉ„<Œë¡¾2Œ'Ì3.š Oº‰V-^þ|Âʬ”QœßÕ—~kAÖC*GR* ¬â»A€p‚Ä9®µ {ùʈv_«§í €JJ›EÂã‹1‘1 V"‚]ïI¡ûfÃ~ïßS‹±è1ó5âÔHGOê’ðR¤=°©¹B–O¦Ó•Ì Ó±ßc2: YÛ1èÍM\®ã1°à6‰ÔÔ¿€L'¶A %føë·Õݰ`€–ô}ŸgqŸœ€.>‹:dŠMýÁCçË’MÚQnªZtluBYè:ÔÙppe4ußÔûì\skÑ#ß„ÔÉ£ä0Yƒ”c•ÎA×>êL™µ[²µAëwÑ€,ÙÖÃb=…ËAá}e-ÞT">ëŒÆzCùa ¶Ô]œ­N/žvÑÿ[pü*Q/ÈÅýLj6ŠŽä ¨žã¼³î|ç÷C4%V€–ô‡±¤A6,Ç QXL:ÈB´_‰+Væ³2” [Õ{vKÀ0>³Ð.ë¨~Aë®$p¾â#毲ö•=9Ø"´¹6îå=T5Ú)ãsÑK* OÉÏO²SþK ÷ò'µk—ÝãÉjË‘ðq_NËMìyI“¼#;šÀ/^ÆFxœ€m ʟ‚•^FMïLÁ0ã´s 4: hù•^ÐáÔƒ’âb¨qNó/Í…y|»Ç…í÷Q§ ˜€¯Ù9rÆÈÓ4Äpö:ôÁ"^¹"ýè’®}[ßî$K{—óë" Ǒ‘ñ8;üw.[¬a øèš¶Ô‘ŠmAÚ5¤Q3Æ\:4þ‘Sãf°»«êd×,«N°@üÜrŠ{øÂ Ý֘ݩ×þGSØxÈžùÌ]Ýò™“ Ç…#Ùß‘uÖò ÞŸkÂCÏÚ)Ü5±È£›db6HþÃ5„\ò arèãÕ´gùß,ÜŽöùJ6pi·D9³°FÑž‘aÂfž„ô,ò)²ˆõ>§7¤}ƒÕ©3·~†Ó”úbgKè„e9zÚ‘x‡Z·ÞÅÛ›a,ïˆ'=]T_*vйIBþà cG•CRStt]‹áç[Û…Šú5Jr e{uâ…ÿÁÛ ²{ÍH—åÔ' >O‚P½F P D‰*Þ3Jèƒ•šæŸæ´„â?ôG|™+‡‹¡yè÷Ì–Â=,ߤQ}áD*´4[›7äö…1ÇQù®¿Hà9Ûž %–@4®;çÐ˜Ü /`‡4$F8=nvæÖwð åm) ÃDS¹Žæ9¨`½wY:Yñ.àîê…¼ááxF3€t3 ãé‚Q'¨ðü¦ŠûÒŠi Žþ>^qrK .¯¥vÐèÒO÷[ ²+ð¡˜yµ×ù£+ ö]N¸ŽÜDzèâœTxºƒÈ(¹Õ‰*òGEÄ9v9¯Èò•«¯qa7Ô3KÞÖEe顜ï6$µ­kJV°œQ&v”ñ¶@¬åg•ýy¨`7àDÒ³Wøð9š0Ò‘ã ´ÁÑ­>…¯7EBáî΢Õ5r àìnfÅã¾ß¨U¶»˜L¼%VòÅ÷0_ê[ õ ©ƒB¶R hÝ«G’TFüƒî’¢é‚BL#ÚD-F­k¹Äü-Òe²tEâѧaúY‰>ê:‹¿&ö ɳ Tƒ,sÿŒÆIàhñ׿jY™ ŠÁ[Í&¥dÍL¼°yÊî´æ] _2%€“ÈcdzvÙï“ˆ|;€qBf$¸¦—Ncß} ‰!m—ƒÏ l‹Ô(ß<¸†4c'ÝW»åÙQ#~c“ˆx"ñäú4Qh†l¬¹#ï!⺑\›gÙ]^ÖnSº ¢fÐòÂ+S`°Q»›‰•ÿ\ëá5:Ñ$£þMõ $ßv³‡–´$ˆðbºðj#ÞGœ³ž6ÎR úÓßTõ±¨`ö„•á‹ô+%;2âUQŠ»$ƒ`û9]™\YNÙp}‘íವz”¡ZqêÝØê¤sE[Õ®x<@‘½S•.°¯ã˜óôKTà&·W+ˆÈÇ›ÈΛk¤8°’oÉÅøe6:Ø–äu1Jo¨õãKõªBÝç±±E^úº÷Að<“moÊ1}CŽ!±q:x3åâ5ïá­-oH¾Û [D¼xé°Í·f+=¿zˆ\–ÎLâ@Ì‹ÕüZ&308%H'qT©øÜx•Ó“"´üòâ¼>’(™òµ—ãb»s–h ‚œPsLæ»LÓxL€&¯€Ël&´6-âqÎÞf” F€VJÓwÔ:w,Åí™ADÏ•=288Z0ÿÊ7&*é¬Ì:{Ë»ZFPÇ訮âAšnìû÷:õˆµëgÛ‚ŒAGµ,gEE-jPYc½î[ ¼Td6Û Z }øõŠ1îÒ™Å=ówŸ[xñPÁ§³òZkó ärÄi3§{þ®}1ßÊHÐ;{—èåjc­ŠA‘»»u}i^þ´ù6©ŒbKõתP L7ó 6ÃZýÊ}ÖSáÝ[ñsT²)uàTÖ—ªÞ¨ Ô<‡}®Ì„ãqÖΆwÅ·„QL’f•y¶,J°¼à¡SÊv$ÖA &¾ÀÔ;¸ úæù­Uoò,0 Øé÷2'q€pS4A¾¾F8`8À„ñ±ñÇÏm@x#®abŽ }¸ó븊ŽìDÔk8 Aéͦ¯Ý¨'fÔ¡b¦‘#ÑKÒ Ù{ DCŽ  jè”)'}šÍò¾ÍÈê o вT¼ë›˜úòÍzA`êþ/ A„L£+B§# óޛθœ SYaþö>ÍŠV~kXôꔃQ9§ÊýE³îe®,ÄœÜvÞ|³Fi¾~ræ~Òô¯àÖŽ—#D`â^[-DLhÌ?fn­]ˆß~ÅkÂÔá@™[õnÕ¥úc ®b b—Á í;üÁOM“ÞS¦ígºÐˆÜªùjª Wi:qWþû¨<)ÇbIVmïùMø(˜6ÜGmÕQÏ%³U#ª§®ëDfÓ÷TXA’±€ì•ÏÖ^›f€{Ǽߥ¿:•1P•f¶\üPØr¹ú¥¯bp] <ƒÉûê. ™ê[æ ë3¨A~¬+CRКŠ/:áOןÁä‡Þ%™°©ãv£ 1Ðmð‹W‘|2º”{ ••f+ ‘54›RÙB$qÜaU?VÊ +öåŠÛOD  ÕÃ1dx“lºm¤˜ý‘ýÖû¹XúA ÁîhKû’ž,'(Áê].Î'Ú+Ü2y”\0§J¤‘g)lbKÉZ¡AW ;£ç`œ¯foÊ|u…eö xîØÑ·¦,[© vá ¦H“îbE»éÕ=Y®±ŒŽŸ½µŸV '®V‚_jµ­þHTå}ò³Á‡¶hm˜uY™Œª÷AS‰‡#Í€&Š}ch­»Dé¤:Õ•f71Ú Éjû>¦?ŽëŒxVLiòGl„Œ7n65Ÿ»­Ó+9Y¸§#®Ù›¾t `D˜T .-â@Ø-7ÞP¾1}ãß­2j-Ú/¯z”Š!‹Ú\Gè‚¡çe–BÄ¢¡£#ó!s)³ñW>¼Ã8­ùÏHA9y÷Â6_$‡ÁÚñË%&¶¡H—Þåd©U²²–!z*¬ås¼CÃl(VQ–)¨ #*ÇKÉZ~Ad¼?Â4*ÀAÎl¤€,Žh]j8ŸïF©^EÇ ©FØEÈí»>”öåó¥NnçøÆ¨2ù}¶ w`sòÍÕ~Dòt•_«LJxÜ»¥·1·À?uÏzήA?°+p5 lü§kçy"Oú“¿ÜqÓ&S2T]þ`YÁFŒî&xÒž‹ÈÉA›Š¨Ä!„UÁ§y¯ˆAõ…Vm™ã8™Ÿ‚¸‡x`@øãŒšÚ8{–„– QŸÒÒÌá@¢“N° îî¬>Z•»4§ó^/’O˜ª»âì¸i¨Lý«²)‡º37¼Òƒ¬V:¼€¾ø†ØÃb…ý3ÈÎ4)˜¥êX/Áû˹­a‰nESƒGiÊ ”ZÖÔ Ü•‹ªÃ‘mŸÀÁ»©¬'An®Ô=>bz0sÚÝtl)ÔÞ{ý$di*kEÁ¼9Qe~OÉ¡Gz.ƒ@ø•Á+øÛ£<Ê%FkZ+J=§dy!Ü .|ÿ mÎd.U• ß6ø«O.õÑÛ¹úòuèæm:Âà!{‰¢é™®€â§&ž¦€¹ÆÏ c-¦jJSšR¥»}Õp¢‹F^IïûOîi|íï>™VÓ©¾µQ/u”LM ~îåQ_Lü—ÜE®åÍœã¥ìˆ;Gàl€öó^/2ï{EÙ tÏKëWœï(Ï7 4é\Óªûœ«¥o ©)ÈJ¤ Y/ýýŸ3T¬LíF$ Òñã¯ñ‹„ðGÕÕ«˜Ý4¾\¨J±Ð$Rxv;-hüi—œøgê$·4<Ä\I ¹~–>ãƒ,Ⱥ«êšQ¬žÖ{'žk™VH}\fdÛS½g;ê³È¬ãTlLù˜ÐI–ì„ öÓã=ÿ,$UßT᫜‰r5BÉï»pkö µv«™2_g0Ñ`þBëúî™Ù踲݉M¶O扚 õ©|¹¼eõæs|¨v* œ¸~ŠŒÊjßN<ÛJÑA]ä½´ ýwâÄÛ¼¬*xÚØÙwÝÔXÃõÆ4£E Ë{âaµEÒm7O“áÔ¾y®§ºhO3ï Ìয½v2ÑfÄ•èQòpÈÂgX•Z©Þ,…—ü¼øgtrWA]>L¦3´{ tÑÈKÖËN×\×qʳìg*ø"½­¿« ÁMsI‰—qÍzPQ^a1uCcõµ}+£‘­ø<€fï–ØÀЍ[cèmðɇüÜzã}"€öàɲ 85»i­YÕ‘Eƒ;èG™‰B>ÒM~óº>iÄ&ó©ï{¸¹¯§Àw׆Œ×5 Ù«?Ÿ¦Uô+ÿƒöî´|ÑÁ8Siœlƒ10Ïÿøè}ÂW*Ѭã;Ëÿ¨‚q½nªø#RƼàL9!ºþ7V4^ìJ$ΔNU|[xpýCvüƒà;‡(ið}…͈-ÏÆk´£%<\Ö¢fMÒùn´}ßR׌.  œHóéÝÞËAš8âùž\]1TTÂÒ2ÆI!o›‹§ ÷ؽÐÁµƒž_ðûÌý.¸,ÀeÈÁ™ zÕ€Tm‚íû,`±C†ìË.DÐŽsÓsØÕ)`D%×ÎÑ´î3Uó‚'èÓð+^¹£Õ™IÃr¾!GV‰=rkêHsÙd‹€1°LCY»¡y*ùCL2[Xñ¦Oî f$ÊÛŸMÅ ?ËZ­ò)á/ÈgNÄ8í]=Щ@K$L/®9·˜™½]£âvD8Ê"Ï”=é<”V€4rDú­hÿ%÷ê~ܹ§b5}R!&ˆŠ¢ ć ?õœ©²_Ãú3†7$ÆšÔ³®ŒnŽPz–?./ûei3¹q{ ÔâqAó›=9ÜÕCE}KâõŒ–cy‹U PJÏ’WhVšÞ"þæ@W‘x2:%ç,@„Çg~™Ïç5߆ȘˆÍX©UbªL¯AÌøïö˜R0Pn3 ­Í–ÞS'Og×bÛ‘[`‘¿Ž¸(Lã-6Ý' {O%<É)†µöLZòrÄ…YÊ* Éϯ3Õzç÷–xp)$ÈSÜôK)F²µ™†ûbZ9FÉ´Dð™˜JAȰ Xl™z1 ´(¨ñl¡ºïíŠÈþæXÎÒîTN\ Ô±ðHŠH’˜½MÍ`Ò\,Ï¥Y85Y Od½òÎ[|_¼ !㔵8Àõt{‘’òñú ÍÊÞÑð:…ùÓbßð?‰èruw8Œ‹ªÕ˜r#ù¤œcoi|¼xêãÙ‘šâþ1kî7+øks›‹Ë‡p]w¯õhsBdâp”0îBcÃh^§ìäÑ×NÿÃAâÍ-`?畱»p÷(ÉÑm3%7áRD|K0%a<ÛpzUÑB* “ÔŸ  *HžÝz²6Ñÿ†Ï0óH â±€u]N¤Ë^˶Ö%Ñ(h@e'ã+Ip3BÁÚCáàxŒÌE­uQ&^y.mÿÖ̆º$t}”E±à ᬛ,gÊ®áÒÅ p*³34tšýYYSw/0E”Âèr±†ãä&a@/ÏÜýÀšg©õY¢Uê·EtGÎPÿš ä]¢"x²µ «V÷Ÿ XKÁYæóþÚ)ýš&¤CHNâìDóV6ݸ²á}gF3بÒ2ÞJõáÒÛƒ]kÈ•pa8GÂè‘òBR€n`êÃJJÖ*5žåüZó]ŒÜ\ЬW<»$4Ì¿4z›6d×÷ È¥ñç œïÞðÔR Wz$F‘<6#•\*Ø › XJCøñ `i¿]“í}ÕC·ÀßôÊ…bX(ïfª8 ÝÌÍðÉ4”£RÊ••†ôB›ÊË’ W'tØ~“ÿ 0/¨oÈ/ÑCÔ3–·:ã«A˜C[2šÚÉ *c\'ª¸P¼¾sÙrE¾¡¹<Ä¥¾ªäHá嚦[¨c@ewH‚£½h5ŠcžlùAú <{˜Ta„Ìí1h¹Î€·1¬2·c|ö‡º•!ª K¨›Ûh•ï=‚~ïцYï—2\…¾nHBn`å§ûŒ?iŽ hQŽ&´¡ôiŸ·-£dáà^ ’1ŠOŽÃùZ5ºˆü8”ØçÊ"³Ó®°“ì;í° yÁFeîS X¬Y•äËÀžûªÂ:í¼qæ?˜ ³®¹À8k#•_ÌDîðZÅý˜ç:‹ÒÝ)}ff4Aîlþ*h)«n·ždÝä˜£Ž¬ÞgЍüÂתÞRsíÿdg‹#=xžÍß÷Ì“ÝÌÁ'ßÂÁF)‹¿É7ƒNö+é~öÐÅË>ûyZ‹ gÐΨ¿kóì¥z«’ìyý²|æPöTôm®ê3/傟íJ;h¯·jØ1¢@[•rð¥„;j¨mäµ³xÆJ=Þ#K¥º >´Ðÿ†i¿¦¡.æÐ´Þ‡—£ã—[ŒÄý2HŸðJ·'áª^g¾¬ãR˜%¹ØÜl ®§Ý°)­ë³_¤æº éÜââß ±¡Œ')0+þ1‘’Ù ¯GÌÕÞP‰U-–@?ãäéßó"¾[2îò†P×ТÑóH1”M+© Mæ±K›>;^6|z²@ˆµ¯ÔkÖÂçóÞÁ9 ôcŠU…KþFúûÈX}ï:Ò3–(5šã d Ç”@¡:ea»ÑÌ—ö#’¬ûüÑûïõÔÝ‹ZºÌ΃þ8wæËׄ JƒLJvê7£”ýŠ•½ßÿ…¾Ù­0ˆP•°Ÿ·9ŠgªÄŽ‘É4¢m[ËBOMGÒ]¿ܲNõ<3™†ž17ÓР—Ú´mTX®Ì„=UîÛMIÏ'ßO¹ž:ƱM³ÄøSjthlà!TŒ@ð²&L É]ÀEWõ9ÈWIÌ¥këKRØíÚº¬L uAG¸ƒÞ¦Aù-²iÀ*I§œ@ÿÚÍ"1ù€~äÀCTD?ÄÜã›\F†8¯,5øGÿº] ×)„ˆS•±«†Ê?FÄDö!fvn9²ËÿÃÉiü{yY¡·ÃöO}†e¦\$fF/(õ§x’±&ÇÝ‘§‹eç­…Ý£7[f¬g_ΨpõUµ¸9-µê~;¨ ógQâ]³}~®4"Sì*ç£Kàð›Ý—yaF!z¤6wµ®L‘ä÷˜^í¿Ë9ówQÚq} U'ßî¢Pp2‚ã!~nû˜ïJîÿ$Œó“®×ÿ,O¾Õz/km©³$xÄ(Ù,b‹ ¦Æœ›Ce.šKŒÐÂNs7º »\ á¢;…ËÀfÇ0°Ýo/#l6ÐN€ >ëa#ø‡<ïªÅSœ¤r úu Æû¢€b¼ÖQŠf‘«Åçž"”ƒ¢ Ï…q©«Ql¥à€ˆZ€·|h¬~á àÖêH§ûŽ^¯°}’ ®Çx×Rol,ZÇ¡ƒ1ã­'‡"Q Œ1¤¹„‹ y¾ò¢‘JœmƒeÉ[‚û¾]Šž-mU7«õí#æ2óz â,ÈUàÈ$HõY|a±$ž$xUé’1¦Æ8¢{¬Mñ9œüØN‹Bãý‘F¯šyë(`ÅXϹ”]Žðõ£ 0J¢ñžOÂnIÌ–œ@½}¬ªBc‹ðBˆŸÎÕL¼K$ægí5Ì9!”®Žû„аv"U°¿;Î^(«u‰? –³2­Eë ”ðƒÄµ ‡òZ†`†-CàÊůÁ¼p‰ºÄŒ¬­ÆëBÝçûJ¿!ž£PÀŸ=ŒÜ²ŒøP¨°ÓÚ­}ɱuÅö”]:xÊÿó5-l¸Ùo§nõ§…IñâËÝðÈ+ò_êc©Û H¿Æì}î5V?šaêÓøïô¯Þ1”û©°Ú=gï²dû¶ØŒ €Í>ú«8µšE%V^=]%̱Å3-º§ŽÚLÅ^É\lhú馬íŽæ–w»pä€T5Ž&ꤢv?i.~ü× šh¢"¥FœŠNæ¸Ú7# ’¤–;宎—‰Ûé®~”ˆ„@C؉¤DpäÿqÝM\!q!Å€wB9!?‹’»PdïlÀ~ˆ¼pòÓvsöŠâF‚0Ó¡@ÉF;cÂTú<`68¥Õ£0¡tíb~*¶ÛdáØ«)Ek¿¬+nJmýÔ‹FX¼*ßìv<ö¡ˆ¬Lgœ(P0‚2ÂŒ]Û!Ñ€}{uj1 š4„ÀZAp[©ÿA>½ürO…aXWÓ4Èõ=€.?Ú@‚óQŠ$ß 2åÁíÎÿ"ÍI‘mÀÜÅð?8ÀX·¼žó±“üš{†âR¨4 ãØøz3ëz›Í9^<]‘ªr€÷D€2d …§ŸEW£÷ŸQBŽ|[û-kRî±Ý+×wº1Èáz£þx´ ï7«†@ÁÉê:” æ×7ŸÖ( ¨—ñ}"'CI×u¦+ìß³´À´h0O„¼˜]AÝÏ;wÑ:ÂG7UWzؼõ(­Kw¾„úŠ’ïüC&E%Ý|\¯c«ùd$÷kéF”ì2E`ËÜšÕ¦"ß gÒy#ìÅ®”Ž<2d±^nWéç#¡²YGov¥]V(·ÝKñ€)øEdßuþéóç O_>Ä5z/ÚbmïÀ2]ÈÛ.’.ÇóÂvyíQÙyú7à››†Âoa$„$¨ZÝdÃÂHÏ[k4¤ÿÏdÔÚ ìƒ,¦Û>Û¬½‚ëˆÇÓ‘êagcÝOWC“mÞ^ÑÛ&?jàãll%~ šÖЈŒ÷G— H™ ¢vp€£ÑµÏ}ïdnJ¥‰ÁèUyÛ'ÈÕ…æxM Hä÷ທæ>Ëé´†‚$?­TºýØEãaÂ` [öÙððAsÀðÍ¢'ç'ÅO_¬¦q ÄÒÑ×»~8JÒ+wÁÒYÄ„Èù{>^G8É>ÍŸñò]¶©W./©Z€?.=%C5I5lžTx*Îuø€ÍЊ¶Ãnܳ߸ü9™nCÿ]¢"šAn¨:}Ä?˜nÏ9Å¡ÿZA3æýÉ„EùÍÕwYŒvS(jÐpȯ~ã6Îày³9yª3Ð`¦²Û•¢œi§¶\çŸTìÕ±X´Ñ‡Ò6XF†€ŽÈŽÛ6IŠÂ£³¢©ô8>¯‚©½#F¹ !"LRíRkË^Ò;zu8¸Žªg¢ž¦áˆ&¢ ¡ª‡õÀþvÊ{óP$ ˜»«¬Môöç~8÷nQÍT(§¶—º³ZºÜ·Až.*ÜpÓGI“E. K:Y gÌÕ€tkË»Ý1󢘆×ì_g8.¡ e™õ˜õGU΀ö„}Z†-(D“*‰ @à¾Ud3BÄhE÷I°¸[‰H¾2l‘+ ]ȉoJ+ðuSÈÒ-%dØüaµjcyŽI¹‚?᜚ˬ´ßð!ï—!÷>¾¿áÌ÷ ýå_97*Mç!QeXg¦ñmseË}îýʲµhá×dp^ç©ó2Ïç'XÔ$­ð¹Ûõèö0—;MϽç‘~ðr¢m§ ¦y«Óä㣹„GœoÝañ˜O\ ˜­²táø†¹# @¾œ¤ø_è#±‘¯ÐŒ…ŒsýÒ¡iŒ÷(AVÃi0²Î&Ã6Q+; ¹rìr™ßªÇ®Ã–¡F>¦#J¸lÆ7Ԝ⛴ûÁØÖD-|5ÊzùͼCà°ðßÁÜî³/eêÍâª2–”%]kào¦~ãUa¦bõ‰oOI4ÿjï}¶Ã”ü’ˆÜW*÷¸øŸM{UºD¨Ë­¥w÷Ë’±eS„=Ý×kh4@‡f¾ù3³iùK«]λ„H}¡¢Qðû³uVÃáÑ,|q¥Þ¹[TTfåÔêÆ[šfޝL!Ã0&gŒxNßklfÉÒO /j[€þÛ*ÙŒs{ÖŠSëž]›¼}|i8Ф}‘£ ëm\H—ʃWð8–ãÉ€Qe}]òZð\wj¦éwDÞœù+bÇå Üœ!˜„À.@æúxÈÙò9åMá£èG–¿fOP{Ÿ”A&– ×ÔU¶µ=Îì—¥„…)=céŸwÙ1üÚ8îØÛºðZþŽýyŒ3;DkŠÐK$ðü]ÛuöRE(€/!¦áIo ­?†ëJ]ŠL³\âôt¬A…|HLõÄÿ>šåa*Š|T–?ÖÒ ”‰=@ÿ-±Ú/ÒÃâÕfžKŒV[¼\2J¡QT'ODï!CÒëd@cÂ¹É ÿèiS5ø§Æø‹ë¹f„oäð°âNŠùÛkf؃v“ž|Ìõ(‘ÔêŸRxÅk¼²Y~íø¬¤0wº@»uD ù¤€9}kl´p|ÂÈR9ª91úæw†&áQêãÌ\õŠTçQ :‘!À~$¡¦òˆåX|ð ɼYe´Wµ!áv¥òµt !÷›e4_ý—T/¸n†=486Ï’¶%gŽG€­³Ð1d¡z|”+0²óä{[¡¢t•EôÖìé†DËS¥'£Oð‰ªÏúê‘pî ª½Xü€ fÙòÔûâ0ŒW‘¤”ª¥)*3„‡|—ùNߢœgê- Öh7R ¬c%ÇvæxJ^û¯ÕcJUÒ[5ŒôFNRT`|^|y/|ÞùôÁ% 3u×ÈÿW=ƒgøÂ.σ-[´Õ;° ‚*[‘6è4÷ë¤I„“šuŒcל*rlÛÓðik^žêùÚÀE·m6UÅvLd˜Ey"À‰WåAüe8‹ëÔ÷Ÿ‘0KÍ\qƒS‡Ÿ¸ö–tÖ¾™ùíXäõ0ÁŒ‹Ód=•…<át]…düßòì”,¾ÙC½!2Þs—©È&$£3ðú¬|ºé¶xªúÿ?Ò–ciÃfÊùìí A„Nÿ᯸,RYµ²Qä‘r'°äÕÐy$úhzë~H#ù4Ýè))zðÓ”˜“Œ¥(U* üHY÷*††Éw9±ÂÚ-d®{ÏQL¶4ÈÕBñ¯JÌõþmä¦V11 ž—˜ÁbÕo¢1ÁÙÃùû"€ÜAè€EmJ\ðy$5¿ÉT™& ;&BBRKåu ÔƒžÉä®Ó¢%±œˆ/í5ËÁÜì)%á4?ŒxtE½–[_~ñÇÀå¯c ÏÈ`L1ᤆAÑH·"Ó_‚vÖy¸Þð}®uäÿ™š—<î€1}•¾,‹÷©^â2™] m(c…~êBîXŸkÅïRWí/‚wçH*¼W@Ñ£^¿%Ý&Më¼’Âî‚Zöôý‹¥ž‰Mú·Œa«rÙd²¡¹>Êì'HÊÀ1‰hÀå»4¬w†€ÁìÁþqÿ}9:ÁZìgï¥EÿÈaÍ ç<Úìn$_·8u³_0µ. 6%;B± v¹ R ÉOuã¶ ÏÉ#¡´Rͯ;çK‘4=JsCjcŠ-mÕŒÿ÷­Š0Ját.¤‚ŽÊ,Zé=ªf¼X™Þ=;ý¬{AXSÒ’«$R Òa4^&Þw­ËaþÞi†(‘I-j+ÿ:ókÏ2¹üÊ?Ç5 a4:[¢,ø„Ñ£DW„FéøðÑ´ªÑñÃica%§¼Ì\°czü5y©êº‡þ3ÃCwzÝ0Ê,Ì`¾zò<_>™^:…Ò´öÜ‹«1Z²9þ$1Wjž¯Ìãº9|·©Û¹}­J†½êðMS+ÅoÒ .]c€ü—Oô±W–;•¡¥^v, ¤’¨Ã|Ö€+Œ!Í;é ê´Ö’^öì°lý0•ÊídkÞþ*´ª¼ù‰™a§U /b?ÜþP”ÕSñ>XI'ÈIÉËmháOeæ~õBŠÜ×,#¼ª£ÜÿZ\xÀX€”ŽÆ{äS¥}vŸ¾¼´Mû- ñ5KÈ£ÖE\€ž_dF:!È¡ü¸Ó䌙Z˜R¾AøÏ±ØØ7„ cƒÉgÃÂ{±N¶oÉb–ÝÐ(1Õ æ{`n·dÏÀ)³ýÑ}ÒÄnÚå2\žç07[üDmèéS7Âß PRí7laÐtaÑ7z+õÞCaUÚ@±ªÍQ¦5Ǥ¦U§=WÆÉÙÛýÀm¾Ï ô§ Eè#^¦–È^‚–z€ÇO«œižØÙFØ©pˆ±rgW ü°€ÈTc †ÓìIiJúéúØíüì{>0MzgÞ½ƒŸGìmÞƒû•è‹eˆÌv‚…¨Ä» ¶È«ùøG_‡„³]Å2ÊRNÖÞ ô;ò²+k6@*S`=Yìà%°K!ÿæXWs5üyÕ,ª›mcU þÝÍ­S´$œÏ_"1—ö0yñ‰ø`"1›ícæÂ½aož9#8~Z"FOeÜ÷.Ÿ5¦û†&\˜l¹2V÷krw{\ô>¿ç½64äT9hÇWY—É]û©¿g¿i¯7O݉³ÑñÃÖSšhËüÊߤ]»ª›X®!s‘86„¬„aŽõ}PóRÂÚiÏ+Ÿ.4Ü*Р29ÉH:€‰ËQ°M§Akè· .r)%p…eAgboZ²í„ãšs“ .æÊ¬Î÷èâ‡J¸ ÞàNàGú[ÁƒO˜$ æ‡`Â/²E»Y0`‰ôïvèLgm1Ž8gç ¢«6DRK† |ð!p)NÞ;¹‰êm[¤ÅóS6ªz' óÄ Ã ‚µMü×®JyMŒˆ"ë ø;`úütA§>ÐO–vÜÆÎàPq[,ò¯òÀèâ)•ºÔƒ¢øHµaVJTVOï§Ù’ýåƒ0It2«Eßݳ‰ KJP‹‹¡ÔÙQCX(Òù]œ7¾“­tºŽ¼‚GM•»J½Æ¼Pdk&c›K4â”j%qf°iýñaв8hµ©:»8K_¦W^•°¬‚»9å/ï ߤ õø\h9j¯BxBT2²™&;ÕL㬔IFŽÀ‰Œ¥Ì§Ý˜0åJ.ïÛ¤ôª/ˆ#2)¶7Kä{(Ò8Ü¿¬™’-9;#T²'7Ä} 3ݲseèULA_ý/¦÷QIzN#îœÖ–Tõñµ/³×ÒP½/¾6Œò´²f:N7ë—nŒÓ ÿj‚–D>â ‹5—‘Ö={,rà·æ¦*é\Þ•z¼ŒG™DnŒ¢ÞÉ]“δùëW“)míûqƒõ• GÉâ2ImùJ,ÂTÊ;+<ÒÃçÖÍý„‚æËS;Ο»:HÚ(_]aú^výËù´ü«¨âËCa‰È(p¬ ý7ÌMX8¯Vèåó>êüe¦âµ¶ âÞ¶*Œªr Ç«@;4Êâ—L}ôس½+Y€ÿ서¨k2Ã_üàƒ=Åךž™àºàgPâP(šYºü–,TK/ò84{«Å~¡cµ¡_…=B&[%´/µZþÿû @¨"¬ÆÀübó}٘ă°5Ù‡‰‹…PGX…&7¾f³?¡ógd‡g”`þ=²ˆzt=9Ö«!Þ®dô\z>ò=u(,;Póí•×òÚzlSßîÔì¶nÙùZn¥š&”%®d¯9#ë^Ô¨þ?Adž Ä…>9öñ»¤‡ÜVy•°Ï‹Ò¨%¹ª*ò‰œL' j;a“1™¿&$˜W8¿oR4E¤bmæÛ îý€Z®âq/.8SÈ Û ‰é/¦“›Z/!È5‡{ôç}å²’j’bˆô⨘žÉ£N‚á7ý—è¶ íg+Tÿ¾(Í|*!Õ–¥ŽF[>F¸dñœùoM zV@E[TÐÚ›þæMQÓã>³Ô¦}[ñÍÒ_BÇÕÅR©1YœCêo—Ù*ÙvçH“_€¦l&“®` 3ÏXªÊó^Éë.üÓ¡ÚŠ×#¶“/D 1‡dËBî9;)ž"Tï€EPÂG@M\Ÿ&êéÎH¡À=³!’¬œ¥ÚRM¨€.Ôê#éÉš°Cý»I/´(é:TvÆ|YÈC¥BÆÁ½hå0ÏÅÈl†ºÕ¯ïñ†Ìš²˜CÞ-Vûe…)¼öO,c—Uîkæ]xlma“7l@{Vý¯‡"Úú~‚}ÜnW˺ï½­à!r¦ û"û8,Q&§öäÞz}&EQÎà·(=’ànÞw‘ðÌ”ëy|Òþ4ÜY¯,E²\s¨©%ï”` s¼†Û~*YˆÏÌ®@8yp³ˆ¬%QX\[­×—ÆÍêuAE£:—MÜ<ZOH)ú¿î´«U³³Kô]¶À”‡±yÎÔiU»^Ú™ˆâ÷6¾1@õÛãsäØåZb&0â¢ûí‘í×ÕöÊG{I®XFLÆ!ÈtÔ3̪-Ö4S'€ðIНÑaíµí¸cÀ¥íéjuº`c‘µþ;˜Ö,´ß?ˆ˜·+º†í¤R6´kÉ1¸FülÚQÆj úU‹òœ+ÒÐÔ~£Z÷=Zí~þB»yœ=®½0H…’Æ«¨óÒÖ¢œ¶NÞæÁ²ägžÿ}ƒu Nþhds ®cIÂ$Âxƒ)[PA“JÉ8d0m§&úÁÔ«¸ù8~¤®©‰ÒßkÅeÒjê|åóI—‚ÐFÊÿDò¨â1 ½…¤š6íÚR©úðò"šZ8XSÃýßêzCvìêþ™ýkô4îL¾=¡f·K÷Ð|Ï¢+^1Ë™™-_š{qÆ$÷Žüÿ7®Pj*9LrÁ9hC3ºl a…àåÓŽp®ÇìÏßyÁÛª:5šÎ±ˆ’àðbXCŽâvT–>,G |ݸÐíé‹‹¿'>3*ñt|~w"ÑÓ¥%of|tÓ‡©áVÖh:0'Æ•^l?¼–ö3 §Ó!G“¼]\¹&â’“.™¢rdô˜xKUá:Mì^a¹‡œ3€Ð¾rH÷PªÿS]™Ë.ÍjB²a ¤7Á.$çåZ;%_@5ö¥U°¥.ýˆ,©ÊBËÊÚ""lb)'M“vlÇçoâ£Ê!^´tÉ6†UîDÇ罉Ǿ ¯~PäiŽ4|Ò‘* ç‘2|)UG"&Œ;Û‹zz‹%Š–Z=yï?ìœÊ{ËÆy´^ádçößæþt/XÓ!ÿ™ì@¨¬ÍÃ÷ƒ[»®ªp^Ô¥61ä÷ˆ<2lu¾¨;œIFÈixeðè«äDuŸÓðaHéͤ¡©Õ…Zó¸™ ÆM»3V\ÂõefEˆž ÑYì°÷ ’½-QìTzë}§­†Ft+“ìNùÍâï*ªyIC­· ¯N9ìØZFÁ@˜~Ö¨vì&mª– $82Q  ]+ño¢Ãl§ÿ´—øO6Â5]—Îf+G*ØòeÛ¹ Ú9'š€ˆ…' 6wyßWD¿gKrV§Y¦T°:´¢™ð±»ÓÏfÛ$*ËÅ5dÁÿ—;µeü³¿$Á"ÀÖ9iÙze6èÍ”³ê2 ×*û¯Þîe' b¹ÍèÂûP¡>KK-V'›€rž¦5|4%D9|Û¬G½}tÏ>¼Ø—gHr¢„‰gëþNJØG¾¼¾¥ðãSç å&is"Ђ¤1~¨biì¬Eû·pÕ¶sÓä@7 ¬¦§%im¸]½¨•QÔÜÛH@4Oå\#YñÒ"Ó3zio™à¡flÛ˜ç±çˆÉm…ïó²i+›õP‰}½ïï¼Ä‹X´NpœÄzz‰:ÝúɲXNÖRÖA6ŠL8×™è¿ ”}ŠZ¸O~¦ël ˜ôáDÉ|’´Ò.AEMwäÕ‡Ù*ÖÆ¾/½tüêÿ> rRŠxR*æÁ£¡æ:ÐW±"J><m5g¢Á]'3>gu6¤ƒHúÒ|¤£ñ›wª {“t2gn2¾E_4¾6 ''ùî^­pæçjõª.¯nZv1nزÔO~Q¢k8P™Ú¢sRiãʵ‘Žc”öSÀ\ŠOþÿ7ð¶7J²¸Âz2­« Mâ÷®'é“Ïû®ÔÍP ½€B±…ÄóôÄw˳Ó{”àÝÓ„ÂÆyüéás³ØÝæO‚CG]Ö¨15q´AkK·–(løÉBð„q©L&VU”F&¨ßOË¥[×P… §¯››zŒÄÌ/´ÔsŠmoTãX½›¸ß™”ÜÓêÎz o×]èsuNœ<æ~«¤.ÀŽÝF%ÿk-……â4ü xϽ !‰’b%¯|b‘êÓfK ÎS+× ¬ ÆfK^j“º‹›šŠâ\Øù3ÓCIŠ/Ôìñšy·Tã2Pâ£6çõïT}lþ«¸/ßÕ ödæQKçKHg«ˆ¢i»õ(ŠÿâŒN—彺„@¢ô…5ë¶£#8 ªçœÑ®G’xÜ{f™šÉˆT­”¿§OÈ#(O{ÇpJWuâÝþ®®‚ï»SíŠÎW Ñ 9àB¬š ±4Þ?@z½:Ò³(oE­¥$ztHj T" !k9ÅÃ’ô4ˆ.`‰E7Ó¸ÝÊm(^ßΣn¸d.ûd‡« AkyY²º’’Çס›Ëÿ|ѦÕOy˜¬Ëž3pÝÉÏȥų¤ÌçKá¸Þ…Ô‚tÖo«üú©lÕ¥QovXX 7'PÏUò`*!ž€R€Ne‰ðZÏò‚Ý·ðÚ1»·ÂA¬™(GïÇÒuÛn¢hEÚÃû)@¸¥Œò’ žOT¡åÄŒžåQsu&¼;“å•á"®7ˆì$ã°;^ò¨Y”Lþ…H8ä¡OQò|67®êv4ÉXj(4ã2NÙõ{mýöß[ÛÓ¥ÙÈëÿsÎ#5þ³`fú²6à›'°ë!÷"`É„x¿hrдÆiÎ!s5f^Í\ˆ½Ôºì@’‹üBÀÜ¡n)<(ÃÞªy2g J|‹±ˆ)Õ£,.µ„œÓ'5mìCí©4¢‘ *ß!ôycb{íp| ©_Þ‡¨Ô-™)þg@¸ã,᳂°I9:‡Ë†3~«¢äܺ±ÃO8BË1å1]•ñúlŽû&ÓBêC§È¨C™Ø#aìÑm;½ùªË}t¢Ïž.gÐwÑsäý7ýQjù9Id倶m9?Öq r€S6wP˜œƒ4Ü퉕´Š•Šp—%¦8ï3³EÆî }NçâÊø²x)̨qöó÷ÿ¬Ü¯L/‘O`²ëÄÁ kÅ«×îÞK™KÈ9î7>©æÄ|én>{­ý]¦³Ð“Àè‹C3Ëh½oT¥ÍØÆ÷Ü­±ˆÚô¡)‰D±§ìõo+ÿáe#d“íô:rÊP£yÀM˜È1v&§*È»8_ë…bûÑ›­Oõ,Áû’G°ÀµÛ¿TÉÍËwþŸ0«ÒŠ›ÈÍÉ¿ðذK 6èê#D©19µHn2bÚ1´>¾—Ì ÖÎ7ÞŽ'£«Ñ=_«3ZÀ˜JnðâÝQzöH†ã+¡/ÏÆá‹ìòr7ùعº¼¼Ü}*4PVºÉà>ÔÖgàwu{¢?*ßþ,òÜQK8s]úy‡[•#•cIoÝn/@B}$ÊœÙJ;!p>öš›"I)¼nè#eDH,ö¾J]P†®ŒñVõâ<æ¥v€|ç Ùè9ލ¹”‚$+ž1óŒ)àêöÝÓ.¿¾·_Ƥ‘Hºô]ºBè ï]~¸+J-9öÆ5ÒŠ á| ?‹Foª¡ìR†ôl®Ý~*¶˜‰jrˆŒ¥t¶³pÓŠÿYÝKó·ï_ý4ÆÃÞ¸¾ªcB² ®»|)Yàܳ£*e«ÐÎ- T6Fr} ¨"EqIæ3±”/ZUh[«b€¥Š+µqh³“YsM2ÔPb>€þ „2©ÙñÆg¬¼’‹™“ –?i€O©·Q¦¦$PÁæíW[|ØÑcç‘Îõá#ž€=Å’ kí „²¯b¤n!0"RK )úAB—ֹ,0–ž™«6žd·Šj÷<«&ÎóLV¦@4«ÊˆÉ7œ½d­*|¦¦>Í!K}\ðFí©›ð*X9¯žÛtÞ½ ¥rúÏ£¿åû¯º&ÿZ¡Püõ.ï…¥$dmÉ|ßI¥D3ÀàAã`¢v H7cô?‚¬”X”ÃTóa³yχà‚˜‡ Ocì6½Žê>wo"x²«Š8¥¢‹ùPÍb?¿1µÕX"LuDÃ$™2‡ªA®¥ŸLuæ£áé‚‚ öeÔâ¿‹™øÃi­Ä£§3E+ÀZ¢ec„M IN ~½=@fÌÊÏ|)L®éHX‘ÈÕç0nܓ̄Jß_Ș`ºŒÏü  à‹bÇüäÌÉƒÊÆ¸ÎË4RË©/{"ÀrôÄηÔç!6¶äpe \ÎÖ\Ý*uÆ€¶ø7gÆ„ æ(½} T¬ò°-›<íw«& ÿé„}Ú*5àY“ª›é»IcÓ Ó¦¸ª‡×Uýîa¶‚Ìhþ¯Îƒìø)v¢Zdk ú€JPæE‘'bÿpyv¿3±/së@A`;Ý5øì( ŒtŽ¿âs³üþ"‡nw}¿Ð³Ì“ÁòUjꥱ-íSê€÷­éM%‹“²Õ*‚_æ?¼Iø «¨lËÿ4ýöyYÖÖÒRŽúЮü¶ÙTM Êò*¶¶,‡êVÑ‚Wd©ÓÇnÓ‡—±#‘±Í™ÀÒ3¸õŠDEÃ4Ìç—pÏJoå‚Ñ;|ÆÜ9ÅéÂã^d(óVŽÙ¸æah”àž•¹ïåu$Ûæ_úúîØ3®úùMÉUßÕ°ˆ§þónÑ”ˆ–ž¿Mît¦5"å:…§u» þ£2@—Çh6/«"E#Q¿%ßû¸ÜÇÆË?¹â¾Yv!5àbBV9ûk`Mz\Ämˆ¯ŸŒ‚ž|ü‹«J ··äb"âaO7&bÍÆŸVRÙgTƒ´®:LöJ­É»ÅÓ½¤Pù¡^OuÛÒ½<û;§¸>6Ô1ôóó;{¾àìWxÚ²õÕþ~ÇÒ Æv¡·€¾¶±ý¤˜ËCZÅŒ€XµgÖa¥è‰ð¢0ƒçšâÀ¯þwár½#í|P0¹Þ¨ÎÂÃL[×ê‰U\’ë„–Ÿê•î\ž|m^ !•jHIìV3Š×†É Ñ;±™q!c3噥ÒW8ÑÇ Ê†AJ†*Èä§ÍµSKÏ­nèiw’ŽÏ„ %†nO‰ïöâ´Sèë&ƒèbÍ@àÖN #<Íù{Öá¤ò.G˜ª¸¶}ª©>Nà˜©KX(~mk˜§¬mtÌù\Ì^c\a¨µ§UPÇ[#‰ÍÐOÙì¯ÆL‹¦$U,ãÉ iÅ¡6üœlmeç ßË„¦>%ÿ²{C2„A^IU&ª¦EžÜl!Öÿ1 ÆÐ%û‚qeýÛ»§¹fœB¾ùG-øˆT2ÙHÉDÜÍ—ßYíÙ’AnÅlf'ÅÌCƒØB©§æìÕÐá@Ó5¨Kì¤_Z{5Q·2Ы§ÉNþæ"%ÑÕØf»M–ßKrú•@tsªÕdgM4*¦ÕWh0zCŸ\³͹¿1ƒ­Dº£_(ú’˜±‰ÐÒZp =zþºÔ³AˆŒ‘»ôõñ¤LÍ´R»jòdÈ¿Š§a¾©³ébBÓÀšcgìT çÿ5½ªD¿6Ö€ž·…˜ãM:g8®% æü­LT8&Žæò–.ݧ²YùYs³r˜ýjóVô½·ë~O$â¡WÑöiwöÖÕö©½“¿õ2×µ–·ù)ª))ôƒ£ gžˆ‚bÍÌA”"F6kuUzÊ6%|—˜q³(rß]PÕ…{ÌÚR.²ƒÓ‚¾»Óß{Õg-¾U¹µÛ ~ìR¼›ž£™o§r]î´úDÍœx>×/Tv€ž8Kª[R}ÉË î<òg%S¾¹ë„^wáU,¹wWçpµ~”ïP٧ꈊÒ{»ðśФÍtЫ¥“zòN ;£¬º>΃ÈxV$­jCåª[XÆûñÖq+LÔ*—¬åq€×µ4B©0‚JcøZœ¿6>gFÈC¦ao~DÄè¿^’ƒ`hàˆ»Níhž7œDµGeƒhœ5¸Mípî·§Ú(c[€¤­TcÙæÉŽçb •±U0ÐÝ‹iÉ[Áé'³UÀ»œÀï·¬ÂST6ê÷Cñ9 È`V]‘Ì൭pýÉ&•ýŽ‘…oóuª,± À}ƒEù/LåYRèšsnLüRg ûF£³?K  »}åÕ¾œ«úô;Û(9pN Q—=^päŠàÇ”q¸dp€¯„«2ÍÐ}EК†hÿZOlT«›kì÷¨‹Ú{áþ¡OBÄ-`ì!j@ÀmP…›Æß4i¢õ w>›sk©_•Šœ¢|·EÄu5X–ö¯b¡g¦Jäð½Á›A…}çøµqÅáF "ÊïdY.é:‚ëåð€øªY}¨pŽæl¹p¤ßpŒ+ôºuƒ¼ôCç¹Uî¡’Qd÷¦Zˆ µÄm§… ˜)ÿ éˆ9¸ºùiRãøÀ£˜ˆ?jAˆ>U>ô±ÏÄäã Óë(o\uK—öÊOiÍž±1§Î\E‹èôÖ¡N4¢ä|­]$Ct9 ÿ¶ ¡ÍtÖuÅo€=yb\¬Rغ˜ªÅË’ä¯*¤íÖ^u `¡×ÆÔSS*Ï­]Ê}>{ƒµV¹0¥Q³Çiwh ùA_4Á³^JP5^´(åÌ{ÿê°®4o¢Å´öjf½ÛQÃ|6û·™H!غL…í¼5g©B‚©ÂÚ‚bvtÔÍÌ•†™Åë4c Ç*ôÄ‹Ü%Ù lÀŒy®¬aÃn˜–À¼„ÿü¦*¹ˆlƒ1[ 3iŸÂ覥2 øQ…´3¸“Î0Ki”¹ÂË2%O²•°îb õt¢DÃãóÒÃÄVÉxM…ƒâh£WýãYðÓœßn¬ÛÓ·Û¦<òE‘u]z‘•‡²/Ç cL”Š2`.xD£ïjöKIð)Ç“>Bå÷ì,ô;wpƒ]sv$˜ó?Sê:î\Q›Xž¯ù G¼Î…ßÇèSäèc£cÕïϹñeâd|·™Á–íAÝTö¦jþßÛk^Á¯©ª “[Tû78ñ¢wCC=×í@Þ`$ÕÛw “f}Ë´CñA? 1„ ÃsîRË—²=w5Î×±"”Ç£?85 ¨lyI ]áñË8ákñ‘ôÚÝæH¸ÌÀÂWé”üöOý±q<ð«}wLSq²©šíÿ²ô/¹õ•ô €6g2ïªã“žLOýŽÆa^t—çÒ— éû²ï”º52ÑGàwáïdO[ª“Ê̬”XÖºÎAåñ?ôöæœwãv4ª7ªˆ:ûÏE9|«/7wá|a#‡Aùš×{û“üsy.E Ï ,¬¥…À|uvQõ×Ïr ÏŠ§ OÙ ´:dÜÊC”5#è²Ab—áF9þÍ )SO;è[ÍQwGî:s)¹öþnàÉ…4ºFe-_Œ®/È|Áþ˜FŠH@ïÿ¤ás` Z™‘xËÈ'ŒupMé‘.>Œ¶ÛE-ó,CPפæ×rØ9ŽMùæ6Ƚ2ZJ¥H·@Ó ¬ÏI[)†5¿;‚²/네!2°eBm¨êaú‹‹ØârÌM7¯~9@JȲU¶ø’Œw‚‚JŠß„™sH72Ý\0ÍÿD[… ½´!t§³Vdò²×à'pÇ´$E‡Ì¾•þ`šÏÿ¿ ±ÁDã%UM켞MOqÁб6ôN/¥à}fyQö«?^<@KÂ%Z°ª’Ý_¢Æ µÀµ˜ nÀÔÁ0‡ˆ]ˆ´¾¼d¶D{r1Y»'E>²Q·ñXxñt‰7Í!¨C6ë0¿þöv–…vjÎU>ö T*±ç=n¶ƒM4Þ„ ^áø¨&XãÉ;ÅÛÜáÀ 3‘ ‹Òl 0¿… œÚuòõ¯þQŸÔuh¯;Ø lŠˆ Ë—CPß½ìµu€|ÑÇÂø[ãò=.øí4 DÆ9dî¯VŸw6Ï Œ±V<åRUwtilÖ>ÏÁØßKƒÒ#kåS1: ÑUO: ßiÖ7™§Ö­!éòÁ¶ôMªT'»/‘ÃõEœ~ŸºA«Rîáb¦IïÎpr)XxÙ䥗(þ) V÷°Yv_Ù½@¥o¤¤¶†ËPssþû½†6ÆS©#ÐùkÊ‹×Øo…R 7ê¼÷|‘Ó㥧ôË–|ä‰ßD7xÉÑô”‘+ˆª†€Ñ×]³~fOùðË´UÆUðÌkQj ˆGâô7ïkrF“ëR¥Z* ^Ö–P2H³ä·I8y¿“í&:ÝUœ‡9 2»ö»B÷-$QV\o³õGêº1BïØe3OÏùÕO!Ã20•Qvîc¬Íh‡ïñK3$&‚w™Í̃/zžI  W/Aœžè»Sž(Faè’µÞC,'f€È›18H[{¸¦ùðm7šÌìÂ:ã9âŠ>Ýùî‹Êì&ð¡ÙW‚šî¼ä)e¼Ü¥tZ´ã>èî-c3Øò5íS}˜Œ#ƒá1}¯j®À#¯»§Í‹ƒ¶ë*n5½¹Åcm!PôÖ—ê?¥]$©ÀKýg¬I©lîb©˜ˆ¢ç;¦0I÷AãGÓY22ͰP¹x<­áñƒhæ}`'k<âNŠðÐW9KÔYG£[‹)MèUq/P?—§õgh´þ„Pƒó5®õ옕­>ñut.»ìø8Fr(óÎÒ:ª%)ÿtR¼‹ ‚ŠÚOVÙ›ù@\,oªjh¬VËË;“I`› ;”¹A¢¡8ª“êy}s8¿ŸÂÅ••€Õ“gžªäAž\€™(×6~¥½nEêåe '@‹W÷“¼©¤è÷ŸðÈr1]ö Ó¥?Àpfªg*+Ía!øÐ‘=Â¥äû¿šiˆ¾5ha' `uö_Õ@È­ ÈGn=OÚ)—û¨PîÆ%'É«²;Þq³e _`Mk6öw;ùؘº©[·” ë\_€”!®u²[ò•ÐJãQÖÉšVZÚè$~—ÚâBÁf ¾ˆ·é^¨?&je£ð»[»)ÖõSñAëæŠ3L†­s¶·1üR#ä¼Ý?¦¢pEy©b‰»U}²q“XíUÉEš~{0¸³¤ÐH{¾·¿Â†¦=ã‘ÄE»/DYÜnêy «Ë¼d¸8ÛÌd†;X´7K—D’a4 µ"[KˆkwîÝM…“D ±húyðÞ-£§)Ū#ÏùݾfM¡=0!¢V3Ku}=½q ñŸÏLþ• H®Ì}—!3D’qG£G±Quäs[Û æOn²=Åì›§Û'Øe½#ñQ‹¢Ã7 ={€%ðsb½:›Cï,rL‚wh,UÄ*Ã3Ç& Ú#Ø?è22PŸÑ-W¡ Å-ƒ½A•µªki¤óZúû¼ß$/åÜ^¯eD÷Át9þ@"ŸŠÆ<+¯§qÕÝiL´ÿUÄ¿Ë[ˆŽÁzZò5)©Ë?’.jdièàtVµ½^ßùJ7x7~7\'Û×ÃËô‹Úâþš¨9qaûÍ–Œƒè‹ƒHYEu¯Ågœ|aö\¤IÖÂáTàÏf+ÕD_5뛂à”%(; ÁWt(•äÌóAA¤/0H–íQŽr'§–J)€~ÛÙq¢®‚3‰?<õ‚À@W¼j©*íð¼2³Îi¡‚籂Hq¯Ð²DÜ Mç:‚LÚõšd!Lnºˆ£Aúi 6"K¹pC76³Üγ‡œ½bÙNçÜ/¿³Õ2bX9&%òÂ)à…ñ ­¦aÓ2u4 7ŸèŠÜñµYx!hkºp7¼UO×óf‰òr< ’XöŸÝj!°cz‹Zô ´Ž­ÐUÊO´ôœõŽö!ÀlIk8{г¼(M#±G¯14¤Ø ´µ;@КÍ—UaéæûV5r²˜4'"(ŸW>Ôc‚ô­’~jC²j}Aâ–G^yU¶²ãÝ+ä”üÄq°^ïR$ýކ_TžLd…c‘o•p”2ØÊ6Ÿ^=hD>S6Ñ_#¶Û;OªPuß²sÓ¦‰7X#õ·ebS³¿{´9"ÕCÈÖÁ±2à O(aÞð à9?ÍâzwÓ­-l¶ O2/fá ´Þ,Š8OHt2ïÅéØû­QÎpw?Nda2'a,­ïy™o¨÷ûì­àç‘ß Ÿ|aTSe¥ãžs‚~Àao¹uå©aú¼rL»fY×ÔwmŸù UHË瀩=“ì5ÿ†oliHBo£èÒ6Zk‹gLüZIБŠ<«ÅŸŒ`k(Û©æ–¤Eãtœ”…¯NÖÑ[ãâ¯KzSmþÐ3­½ÆŠèeQÞ©îD Íy¼6À®”,;?ò”ädv#H^€)“ûˆ?ƒ®%¶wB›,m»ØRß7’m~£1ž²%¹”Xx¢ñpKˆÆÒnk›[7R.8Çò¤fÖ”Fõ*×q3è.:t÷±_F ÿfõ#¶Rº¦„|ëETAbmeë9s.8rÜœoÜŠ-Ûü=p#Ænø@ÖE 7AóåÔ¥Õk¤ç m›<7g®Ñrõà —(.!ªaÌœlxóg=%[þྑ…ýûqp¬‘3I¹¥—"TÔ:u)*º‘‰÷ŒQƒwy Õ}´ÿ§/…†¬Øîéš_@'´v±V¬²×Ârä¯?ëÐÆÙF-hªˆTÉÓ€fíà?Q´'À‡Ù†ÄþÀ»wáG¢iŽLа,3‡J 8LÞ-þ‹°aÛ…ᯮ¦q`¬:K6N(™.£4—Á´ÖØäžÆÎÛx5 üKÓ^ñÀ6,sV X1$‘ûÐxfÑUö&n„÷)Ž_eðdiN<žê—˜ŸOð7® ;x ãQ vÇF¿Û^°Í§k|+Æcf¦r8‰=”§[hp{ÉMåü\$Õk’ª"Ì™±”!‡¾LgB¼Bžm7þ OT,Ä %aÞ øKöÄŠ|¢žñéüòVE“Ú ,®î“pƼY-ó¼ý_fŠ|ª¿÷.xÁF@ÆK„uZýåÈy$+Wðfˆùn½Ø/¬­+TŒ:ª7a­2N"±n$Aipäf:¼¤p“1¼s'ŠñM_$'éûAGH¨’©|—Ëû¡Fì“q4´¾R,ò*]]æ´EÏm­ô(MqåKÛÛ7áô.Xèª55kñsçn ¢4õ3èòZ3í úhoè (}pbVGwùÉx/é£"ýAå¶¼9ävÂÕ½Aæa…éž3vÀO¸ÍÀ¾A¿y½M ˜<ûÀy1 ¤Å·™ð›Ž¢d—Ñ¢$ÍâÖD6i¬.¡-¶Í‹;ì}»§Egø•/Œâ°I€¦azã¿E5?°O1ýså}!‘W0íH#ükB·ÛÎ&ÆÚ㜩¡Lh!õ7m¥jŸßt®½wÈÊŽ©·Û³ ¦€@%u[.’:´Ä”JÇ»H|–±4c¡s<¸0¾ÊÅL€ªNEF}“ÖV’â„”A‰Ç-|Æ ±ú…-²]×)MýïüÈÏ2rˆTiçáöÄWú÷­™t» ‚[­Ðîá—ï˜6wˆÂÍÍ^Çÿ“\…WÅSð§Œ6øÀmH°º`Ð¥5¥= )Ѷ«¶—ýZÑÉgGË›¾æŠÂ¢J*’Qÿ²›U·þŽ·šœð­Ûñ¥ªE* ,Oé(ª}·P>—˜øßrñå†kµÓ€Ðj8spé¥e–åÓ„jªêH¢‡4HaòŒ½mqÍ˜Ó dÙ=úH%,Ó7Śѣ4‘S’“&L 7¾ÜÝNNk‹¸p&Ö<@ÛdWuf^ÑÖ‘A$¼gM¢[ ¢·Y½I3ì=vئ£lŽÝŠÙ¢†[nG'È9#ü µxÛÍRÞÊO꿜˜òŸ±ëjcC8 -mhÀ:Ä]5Ç)Q÷4-÷Œ‰lHÔ«óN–ùÉT“BLƒl#ÖºùWTöå]Ííiþ¡}‹u1F<á=žO„ýü¡qŸó?'“ÛÕ¯…ëÙNÔ8ZÐ=b9€a´ßµlŽ,2þ£pám©ª§hF *pÙ%Åê“ GL(a:t²ðNhm¬ÐŽŸàI=-ÚY×ELÝ$©ëo´CE|÷h‘Zp?|WÕÇ/$¾¦/N)¢ 8fí`<5 †OƒÂ¶,[¸ñ…á%›×eDÜŽ\„nŠ]nºMŸ`ðÔÐï,jaƒø`v®‘åôL™µçÁ¬/ûzRßPætmó`[©Z&M‹ÅvÝÒxÞBvÀN.Ô_áU/ Ep—Ümé¬Ñ’)Û¤•íCh#ýCžzÊÄ”—g±®²< ÃÏÚ^ Ê%Í“è½èÀ×#ùÎ #`:kCÒ“—‹#0—GÉ¡}Pÿ0‚¸pb€}jÉàS=äZ¸£D,"u•o‰J7;}<€Š“YõN€íJµ‰\zöN)aÀ%ß©Ëï‚’$VÃϸ´œ‰ºZ à¼æ¢"Ÿ¼_P67µ{6Y*YŠš«ÑÁ÷’zâ »áö_ý1î æi~(FÈmBÙÀ§qÞå;x~R,ùJrz¹¨ ‘í€â>:oyþÁïEx‚YúÚ•§#ç¹»N/óÇ์ho‹¾<(æšš«2Xõ%Úœ;|9¶0ýž‰±ª)þ•wUXÎh桬µ K}¦ÝíÙÑA!(Ü¡Lp=n'Oð'/Ìûb©q}o¤ámñŒ.U ±Û××#‡+äK­|Ô½~Ô8i}u }m…I„²-}Ym¦å8¢C63 5Æšº\ð*¿9!àFl°~œrŒËØ,G²¸k|’Ö*)ÎhkoÄ 3´ƒâ[ÌâåIr5*N>ªGø~0^ª×33+´€‹ib"´Vȕʾ™Úºo¹â³‰$`ÄàX+ ñFU$(×~v²Ï{¢@§ƒaO…wS2RnJ$-¨N ‹û§ e–ÐÌÑ÷£ìZ@£6 ¾©7ýn‰Yì'À2È, á©Å®3 Ú#xãG´'¼0.Ö9‡E‚ÆrJËùíI q[1hŠfê©’ÐÇAìïgz˜Kw{œ —AÕú‹ýj ]»ø#“ƒ xðy?§œ¤9Ë ó¢ÐW W\‡M×Tåî”Ç=L4ã–rnÑŽñ{_–Û۵£Z§ë8÷+»]ÆVàXôÌñÛ½¹hŒÿb²¬/{XD‰§¸´î]º§°ö%#e,²MØ[6!_¥5ÿ¦o«NÁ±ð\¯iÏ¥” <쉜ø„oVúÍÓ §É‚ò$lm|˜lôÕSœÓˆNe΋% 6Ò]å––É·ÿ¢'ÁnH¯/îaÝ7®Ÿ«ëÉi˜ûWMAW]Ù• ëië’Ü’0fž@§Tâ±ñŠºUX ‰•í~q9AMÔOâÊ5«úã}—DϽíhÖ÷Bå[0WMöáëk‘7N'Õ·Øôó}îb"äo݇ª>܇z6czU*¾ÞØuÛ}G](=º¢ ±oè„xhOï‚âµôÂ02t¶´ƒ°œ4ëíDD Oš v¿ä.‘xKþ|þ¦ÿ\DÓ×/ N|á®à¾NÏ•LM•;'KÃLV…œdÆÎÇ(³ªçþ8<˜z`Qñ×W\ã˜ñaÏ_â:Ÿ–ùÚdE“mý‰–A«ãRpïöµ‡¼º(˜y‘«#°s4 r‘ß0û_‹€µR–Ó¥ßåy¯?Ù ¦}>";Éc ÜN«íYA ŸP+mù ,æƒãt²W®~Î:ÛŒ0ÿ`~­|V«å@Ÿ€ÈÆnåàh¼”Wù„zý*ÒT²¿Ési³÷DŒË»^·ˆš ‹ ©öó›•q•˜ŒWƒü ÏD©y@ãÃ4iá6eÝ{Q¹ÇŸ…å¹õpxå×#åËžHþÿ•ì.Fä¸ìåX—IÄMzÔÈÐJ—àç–ÅMþÚœ¤m×—üÈ™Žó«´x…Q3äAEŒß‹¨úN+ò,ª>`¯óÀŽz‚ºûÅŽã†%N:®ÿtÎ4-´"… —ªÆ~˜ÙR$Œw¸µ…ÞSw¨) ñ˜_;Œå‡/a>™ç(¦±ÔãÍÓ®Û"uÐ 4=ñXþF¯nuGšì¤hyêq7ÜmØ»žeÉ(Dpy™fÒxoÊJIµsžft+”ÄΨx<ä.OiL=ëS»T¤÷ ÚÍ$ [ F»sk-*T×ø¢bmãÕpxJ:’Ò\ pôcd8¬uÖ>ø¹ÍZZÒøèxŸ]> ëp1V(ò)PA[a—ÐÓ°¦Kd"4™­F¦H¶Ë[÷eWÐGëŠ7‚`*¹OúÞjhâQôj®9ŠÞŤòEàË¥{îï×v`«­rèî£ÚgS°Ðˆgà/}ô=¶Ú¤¸ÔÏ;ü[ª`>åx¡ÑE(îú€Þ J‹‚a«mþ  vÖÍcìçx‘Wò'¯þû)À„Ë-;]Wb§KÚ¹GCÏ”öÀÀ \­‚<­Í5ék'“ÚPŽZ–æõÞ2`I<ØÝ6|˜¢hYŠæè+ïfý«] ùö¬·÷Iojnß;’pÃØQé™L[7³ÖÏ+À~oÃ^ Tª{zöˆëª̇Ô×ákH°¹›õ^+“ Gxn $¯b:¡D³F3_Ì/ùÜÔ¿¢Ý½ç•Õ¼B}lz¦à1¿;Ëȹ ¦¤–}"4ûJÔôÎ¥3ÿálþ—ÛßÉ»eÕ„(ðŸtín~€H– °eqÎÍaHâ¶"¡6 < \ß.*ÆÅ²8 ¢8´ ˜71lÈ r™ Zc‰d…‰dxö^Ê®RÄ$Dñ3rÂx@’•Ú¬Åã1¤.×N#3 ë(Ýø4˜v ÿÜ]©åî=Ö˜Kö’à°´àˆ@g‚塚_ã.„ ‚lKc_²BŸ/Þ¯wmÆ|þ:T0|)&-g º¿}©?È£Ðb×\‚O¢êŒÜå_Xúw þP«×2¬E£A©3¿ÖÞÒÙ±ÕYw2ôÅ%oii诠®ë޲ÓÏ÷¡ö¤ÃÐîâ’Ð`½Ò€p!q¥"JºqQy½ iLpíÕ=ì”ʵ­[N^ \Ê7.Unè¤ òS¯éŸ£‰Â6…4D®™¶â-ç™øtŠ´•äšÆýzç"3¤ùA‚TÉÇÏO’Ëε!Ãg\Á¹Xïƒ\ÛŒ“U×þJ¦IsRÖXü3@?iOèU•„ÖƒTfüGzª¿ÖÍÓ%_­ä{©R{î‡òµyÃ~}­6¿“/¶P `²²GlTËD?5úÑÂØ•ã û²ˆØÁrÄ‚5$KPž Áâè#ÃúӋ잘J&$’¸h×*½QñÁ²²N3äÅ•‰+ÎÊþ¡Àq–Xiž‹nEcŸK,©”“ÊÞ¶&ÚU£ô ·.àãù!²£ÿ»áÆ‹òÌ õÕÚQ¶¼RàÝ ·ç»µy[]›2ìtVƒÞ´ŒŒÌWõ³Ï}%ˆo÷UÄhš"`!g—`³ÌÎ>ìÕÚ‘c2šÉÕ$—i\:c³õ[ûbæÙÒ>ºhLhýz$ ƒ¨·›Ì`ÙÀq+Æâ¯ß*gο+w-YµX4K~œ(ÿýÒ¡ƒ¤ÝªÌ}ÁcãdzC<¤‹}z;Qn[Oë>k‹µª¡iéV‡RUçîHæøóªñvÃ`ÌXÒU¼›ö ŽäõÁ7ÉÛnDánjÊQÔ q ¨u/˜>"iuYd‡ãÌÚ˜û:ÏÅø£:Àra¿¦˜ëιY ET8[˜`kÎuèlîÀj@cmbŸ:ÃV `© eŒö WyÁÔ#q¶¬ÞÌ&¯v7‡¶= Ö-üíÇ V•û¼‹#•%/¢p)¦§&è~úŸ6Œ÷/ß\[bWüh[ ut޶*ÕÀ­Ínæ£]”-AÜZ „ÝxÞ ôf’-’[¥E ½ÿ½nÃ_·p ŒeJÊCu»U€'Ò®òç!Zýåó^VÉk¹$Ýi”ƪ&jþI¤@T>Û08Êý."Þ"ß´òiûÀ¯ÂüÑë®.ÏÝ=–ÖÍmH13‚ÅËC-ûÚ ZSÛþ0k´gR l>WÖ. ±='˜#MëëÙ1cBí=•q¼[çB“xºO\tåàZUÄbUÖ\†§|JUö!Mæ‚›Á‹.$%6h”*Ž7Dô¶w;ß1ûæ—6áw"ûLLîÖÊ´¯'ö™GM nK…°-N–“qñ’[·!2rJ,ŸBÁEÜÿÄÕÒ?XâéEp“;‚SœíþYÌ5T€OºjɶÓúËÊF§v2LxhÄ:0÷vàÌꆭ£`Ú3Žõ9ºâ&9[o¥¡æ$© \Y½55¹§¢ ~K…õFª;ùšê]¶†Šg•¤Èg™þ¥ýzñ÷ÁaŸÑ†ùU’¦mkD#¦iÏ;þ¿p䕜lûQi¤p[jÊUùX<¤òÄ¢³›®™|‘>røƒ7@gö¼²Ÿpb&Qø J#â õû¥È¢û2«—'â<Ú×îº6½î·ý°+ª±E©u‘ó³f[6”'&+þV«fmš-– €q¦»\ÌC ¨zk½Ž½]8§F%$´vš ©?2¯5}<­?²T¼?ëÓ”Ùk”¡.ò—mô~ÂUQ]>ö´,l49_.®ü2>ÅU}Ðëk,¢zç'ÄC¬fÄëäîÔtèÁ´}[­DæZèj]&-¥ Ž‘‚™z²+@GfX¦‡Z|æÝÇå¾@kŒâÐï±È®ªâÀ ¡íÂWž,ô"ûYDéîdŸÎbþ ÉoÔ‹ËÂè6¯ ÉŽ¡Ó&ï—¢ºqóùÀÔkè¦<•ô{:´AÁÛŠ¿í+Ûêó>îà#ëÒwãšÐÑz,*ä‘7¾ÈûŸaÂTÀ¾EÅçKP·’ØVJ¯7Šy1û¸•ÓÛÃÓÈÞVMF:¾Å_Ô¨n¥cáê,¡œ‡R=¶Ð€o^›$ÜQ€C=mÒíü’™÷ˆaƒïÐ,RuSÓ®ä^>ߘ$Ìз]|_¦º³l@£)–0m¢úî?‰\C{)I<2¾¶ 5¥‘R¨ì=ìYGŒ7 ±TRWÓc(jSÂÖ70½·¿ ¨×Ú‹¿1ûÅ­IôQíÕá7lÌðJÜE-tuSöåt%ÿ_#M¸:ù(§fÚ ÚŒRn3É|ʧ+ÛŸ›¥¢ˆfÊmš’·'—}í »  Uu…$G!ÜÐKàf9é1 ‹ÖBn¸Jš9u´¨‚Q·Ê‘'©­Û~w"¦@=÷¥¬» ïš”þÛoΊ’ËFaé§®¾Ko¼(eê&pÖð-Jò<¡‚ k\éÇ,ª5iXq¸ é9º†ã/±zËæµs,'{9ótÉûŠé3 ŒìÆÿþ——ü@¾Šµ‰_RÜe! ŽýKAìÓ ;2£rŒŠïÛL@†YëU½IG.B]úçxFÃ}&cOâCèØËwfopÚbM¥ñp •ÅñØ&A”A[yªP)Y¿¨àårœÞ¬e²ßþVçOš0ëy´ †cÆ¥`#°0î·h€Œáôò0kÐm„±î!ÝP nûœR–•Q L¼®Yµ²Ûô›xm$çDÒÄqÓÙÛŸíÔw›Žy·1¨õ€©M™aÅS†1Š}„k5“nΫHŒúð =üÕ¼›äÁw]AüN¿Ð=ɺüÕýCeïã¼yÝ– ð ËžUp9õm‡íªß‘#ñTŒì©úÅ[šæ’…â+•ý…#ª–,Ñ]@šma-ñVçÁò¨&+H\Û¯Dõ“¯&˜œf«…_õ`AâR%Îé º„_ÁÂz¦Ðx]³  ôã^ï Ôó¬V©-¯ªÈõݶvÄD¤ú5Ó|CŒç‘;;B#¦Û¶t®ç»¤üÿޏlÕ”ÁúB-@PA+Æð±¯çÌimNj ¶€EºîF€‘š¤§Ã½Kÿ“ÔŽ]2UÀ¡Í{_Í?þSPø—íPE{Ã0áo`~÷¢òºÕ¶«&¡Ò¾¯‰?¡Š,‘¯ç£EáJY¬!X5à·1nqmÚ~ñ,yuõÐ6†M·¥¿æëAj¬›‰Ñ»®¸·. WýPAW¤Î ¿÷cÍþœ”{à(1Rªæ¨~Ìî<²"Õd„‡ XÔÏ=0”zÕ}ãž1Ç«ÓÒ—êZpÜÇ!m=|Þ#õ?h~ÉPÕÄz”zž˜±õçŤ8ÜOOOÛ÷Ÿ$^³qy´¼4¢²¤4P鱯$ôñ¾rŽ@l_ØCÛ¢ƒë°„{72m½S .ú%)}~àÊ[€`×¢¾/·A¨@Øôû2AÓÖÔˆø ºmA÷¨ƒj:†9p5ébØ»±s‹2ÚÈB¼T+WÒô¬¶rÔ<7Ô‰ †k°é›Ü¥ß2?Sû>ø¼•ÊLiâý/ ÆF’Œm;O|@¸Õyfaô´¬ãìñëðÚ­Ü ¨†›SLè´PæÌ¨Ôæ{oÚÚôT.ÊH'!1>¸)5\ðšÅ¡¤\ßRZœsÇýãülËáKœRèì`tµz”i—˜ñ?5 !‚dç|€£­C‡óô¨%rõ>õºls}¶kžˆ_Óyʨ‚Ó&2Z¬Œ÷iÀ˜ŽV‰ßÍùoƒÿ##}ñ¯‡'¿p{g°¬`t9†”ÓGŽŽáf©JRQÄ@ 0²˜®„ôrõÏÕà- QrŒé…BѾμGPa…»+ÖKV¯Óáji~h£>Œdë3¼^„XÏvÚmÿ<”ÛØCaäVO5’39Ub—&í È‚Ê ô·dƒë·NÖ8Øb9&æáz¹?ôêµ:Ñ7YP@ÆV뽤=ÁRsþpˆÕúf‚Zs,h°âý\~0žE„ëX;HÐè¦>Qî7¬”±o£pWä`ÂÁõ´I½Ñô30ëmÍCÁÚþ¹$%PàQgæNA%ù4V¹û~r¦lU`¢¯ý*Cw8‡æäB[¹B=Ì;¼g|åçˆ\EËøÝ’ãD7²o7%šOýŒÐƒA3`:I ’\J ¹Sœ•[‹~¶|Æ”°)©òÁ\ðŽ~K“¨æaóYšŸ”4îRáy7±„ `çlAš¬Þ·Â×#8ÈÝ«õ)³hSɬ4Pÿ Í§Q“þ‡óØŽdêÐ*® ªüö²{–;ÆI[ÙRZ;vªŽ)e ÕK¹Ý¿…¥&)ù¤òÐæ¶ûD³×x :¥Î²=ÿftå_­úwy¥äãuóÀ‚°&fSwU¹àÍÖâ’›LZåqKdzn“I}8,6”ªËÛð!¾'Õ7  töl¬ ‚»Tz’#F{s/XíH)Ø Bе­æÙ—5ó]ÀTyB±qÁJÆQ#üV9 [«( \ˆ4`¤ï3͆æÎ¹G¸ð‡ù-å©·EÅ È:¤¿È¢1Múh Ï ‚åEÛsŽEFVN¢½\ë&ŠæÌOãÒ¸W:­à%-,¸ŸöN ¹ñª˜›Ñæ'„l½¥˜MRyY|$I8 Ñrï’QÚj/7ÜEz—^‡ÎKh=FCž~ŽÏné®ÕBžöZ5˜§ÞˆwBelZ§=±œËè1öñÜy¬î)*°Q< _Vúã¦ÊJ“hÇ\Yä8I½è¬ã–«àTñ‚Èe¢°þÈ+”«îyÿxÖ’UÕ®Óå¨åxõïÒcøê|xjCñÐáÄ–Ø&t ÂäQ„ß>KŠ2¼SÐÇtÌ3ÖÛ&À&Ú×'‚ åøqÅê(\CR’ÁÜ \\%Y2=à;ðð¸ ô.`Bô¤‘eÂàö~`JY‰>{|§üª£Y^*P§FŃ×A«œ·ÝD³¼õ Á¬^³@Ü 6ƒ)4©tZz yƒäôüw—±mó—×ajÞÎk32«¤ïT¤É ýìõƒÕ4dh¼ÿGâ_ú¬ËéRŒ  #ì5ɪøY0G!¢Œ†ŒCæ Ÿ.ýœž¼:\ m¿Ñ@¸b`ÿX>žsòtB°ÑpÑîçЧ¨áGžI*|ôp’{E›¾œ .F«àœ?êš”¬™é˜ˆëâ`ixἨ3_\†J?Œ¸·¼ñbÚ>’ ùQÉéÁ—¼8¬–˜ÖÈé+(Q  u“îšqÿ6׋+i‚×>– èœÚ$èO±ÂÞ¼6'Rãzs/ô]­Ü°*Ý$oÿf þê6pÊ 9µ æiC¼;®ApÕ— ŒµÅ%øìùºMù¥ŽT¹\ÿ;¶ §ë’‚ ~œX IóØÏr—‡±ÚƒHFy*¾z¼æT;bГ ?Á¹‚£uñv´Šë›gŒn›ë+scGQâØï†èC[1%”¥öèöx®ý½ß'|t€ú.áí{¬¸=šÐÙ‹b˜z”¨’…ßÇù•›’×!öguúm;Z~eH6·’þí› ¬ŽI„j™•½fÞ¸†´zijΜ0v–oš’^ôÍU}Qôi®Õ6M¢úÃ^†ÿ–Ň¥Ä.Š3`î˔Îå vs¨CUXÙš%<NG)dAÚGÜ2ļÍþçÉ2Ë8ùÂ*'§[ó%œ®£€¥IŽcrÊ•[ö«Ž©Ø¢ž}(Ýdgwy‘ùb{$v’¥ò'RÚÖ˜­ÇCƒˆÈºr˜þÌÛ|Dí*7F×–á™®@NŸíÁ!I0iάøT1*Æ×6ÞÇqü¿Pþ„q××Wgj®jE‘÷MùT,„G×d$ÆètËÍ9µ¶ORürkØ(œûLý¡»;M‘xôî3‚Ÿdý.CÙ$,J«øë?É:÷­ß¶@*mº¢ðô©¿9d~Êõ´oû¹‚<¸ð]y¶—¹lG0½3‡Wåê–Nm†£u" O …c@1 È”r…R‡må:gfŒ¶Ó#i^{ƒìH³Œ žÆÉ~éª5ãy yÏX»|"€É ªC‹Ñãs‚G˜ÓmW1[˜ öѶ¤žUœ^.ü(bÞdjÖr& ñã£U+~ÎüqbÑãè™Ï>¸$ÛfKן`š%ýMÆÓÝ[ØÇË>&ˆœ=‘ <­M@*!v0ä|@B¤},©ª?§»ˆè¹Òó DPIï;Ó‰\Äp;¾c ¢Ñf%f§v Ž¢7ç&¶6ÊÑõÕ‡ZîõÞ;OÁ¬Ü.·fèÕOkdi«[÷ytÔœZ«ß )Ý.d@ΨƒP6EßuK_>|Ÿ–D<—¬Uõk5")Ð'°Ðé%\´U#TÄ–{QùRwPOã(ô,2æßH«õQ¦šm7 B©¤Æíë‘èZ51η˜¨0¼3µÉ¸½õ†}Éc¸Cîôöëîz}·ËÿvÌ! ‡ox²+þì¥8R•f“r¸ ¸&@’ܵ,ϼª¡, èåasWE7 þrЀ[Tƒ5‰)›‹a6.‘Êv„¢ç!°óL‡5†SÐÜ]¹Q_*bš[´ùiä l7ÓÁŠ%îŸwbQÞ-4FÜxuoÐÍÓÄššñ»äÙF$Íë –þþ[:´¢¹XŸ:!H‡¼«´þDÎίô~QšN,Òãwâ®â1)Úø”„2YÝWrœ¶ÎT.ª‡âl§ºÄqܾœÈôqvÝò¡=(h¯­-s–WýOöù¹„Ô ½¯Ü{lóÏÿ&D•Ø¡íêÑJÜ,¯å6à‹iꌭ,Ú¼{™îÖ.B‚ý!—ÿ%IxE,òà,x¬`YZv™Í snÔáÛ¨óË|ÊÅn"Ö&=°Vw/ÖlÎOp'#˜<‰F ¬&shž}…¥,JL?Ó žŒfU†ýJ¯¦{ã=UL^ 8\ÛiÑSÛ»»5ZïA\¢—}‡t¥?ƒí9ÏŠt GQâmD¬ûétÊw€âû’Vœ'Ýò0åWð•ò€öÿL aþ-‹gT[9ØH¦áÿœCúÚ¥ {ÈÑuŽw ‡ÆKÔ^Jé>í"¬T<ý¥d† •ÿyç"!°mBF‹³)˜¤ŽU?)/ÑR[ btá*)õ’R¯)=Ü^Ý–6~ÊOµçà —ÑÔõr꯵­™»¬¦ÀQêö ':Ãû˸TÇ·)ä-Õ¹!R¤çŠ±Çž$-1­ µÖýà˜ ñÙÒý{ÊY:©Á¿`äÍŒCgê‘qH®[sç‚€ gNqÉñjÃׄòŸ½[’J"d›{W=W™ùe†…Ù,–ؤkUÀáäï+[6úa¯ô™?h¡“­xŽò²ãoÏóÆ=”pUÑÁsq åWï¨7uiVQ…:ß®veqåܯ„úéì²0,Bãàñ¬P—/¹?  ü-j5J5ý*š`<%9t^9‹½ RÞ2“z V=nœlò¾ýÇ]ûÐiÅ´ì"W¦¦aÕðk¼¼<`Ca¬AÁ€õÚÖínÜzíÃBfî[rC}%BÈVÐŒ?ðhz«çž  2ÚßìâÛ/Y*©ãÔÅ×±°MX¶® RÐ ó-„zß¹`w2‹ŸÉÝ œð_4¶ŠÓ¯ÒÀfÅøéÃêÌbß%&š™Ó¹´®FÜGÞ®ËCôÛ!¹pˆ%Ó¯Ò_÷ŒUiqüzáª|©Q¼@Z[Î~…þ™°¡<臑1–0s؉nH÷¢m̼kÕgF_u½¦ugÞq¡L=.™ÚòaÉà *ÀTÆ¿r1A3ôk¹R±Ç)Eõšš“š—A>Î`SDC‚óŠÂï^fèk ú$½D>âü Ã=ب$ëÛÁɧˆÔÛvgúŸ28Œìµ †ûMõ×TÉÆ²âAûXrS…Þ%C€ò\Ü{ZµÃÔÅ \bˆâôô‚@É¢ð7Gºy™é· „N›¿‰c±J/œÉŠ¥WST,CaXì­ ï2ƪjUÁ_§SõÂ(1ëI>ñ…ñd:ÿìhÃ̬u 8sMµˆÖ5ÞE©ëNQÝÞ­žˆ÷™ F[<c!½ ‚MXºµÎÄ~|(GŠôª†^/,(ñéÄE›c!?Ž:ãPê[¶²bY¸vöÑ—’êÁ¢šRüå<(ZÆšiqŒÌ…Æ ïàÕÏfãøõ å³6PʖИ“RŒX‰Øi.}àöYvÅÁðì×xLÅ®‰Â,Äœ—™]Îb¸?{d1.äYú5V;G>K]m’ÝJ)…I (éÐý/QqÜ…?£$ júÕî:Ï:´FR”Çâu(ˆ 0ã°òµP =:pb¬MåS m˜¢ZQ&N:ĺÄñ^q¥Ïµm÷ÁVº?6ïS^\÷gÉÁœ„ÉawàHø¦ª´ƒo;sؽ³íFxJ–¾úpˆÉ´¢ÿmÜ"âÓÁ}—½^ö Ëƒ(8‰˜r¬,ÌX´e’€Üãí{a¢QÙj.ãµ9Á?ënS ëå A0Ž#^®Q>©EÓ.AÙ¾¢ÿ øœ[Àÿ˜k¥=U ‚t@sV\ëw›¶’…¸í»ùу¤Š:¾Øåíº"JuTÞÏþzVZìA>ZEVÁ_ns)’å4G§ °­{ªpNˆ—=×'Úãƒ2MxñÒñɳ,ɺ˜ËÒý«ìíô†ßEàquŒBEÁôæ‰ ‰×² ù^lÞ*C9o$Ý^B8ð±\•¥¸kA%vÖÏ+oqð¶(æ}E¥D« ͆uǘ×ÊÆuг¢‡ãK^kÜé-.¸]kƒ‚²Í¾S;&1à@0üÜÌØ|J½/¤8¹Gôâ+»/°2>ðÓ´‰¸¶Ðšic«Üƒ›ñºöêZŽ·ÿi÷ïò}ëþÍjèsQ©HñW«rjNÿÁ³DˆÉ9Õ<ȧï’Ïü ëâ¡9=ûnË㟖"‰¬Øü³@zðÄ…‹;‰¿- Ô ƒ‰Úó;é9ÝøË£ÐîJ\wV4AáCûFµkº/sW롘ã ÀðE46¤kŽz¡Å`†Ý–³áJ}ÖûÚý/Hô]:8aé\)ø4B”í‡N{· ËcÐÄbmúpKvó·ù¼žD0¸²lj®V~aÚ_6\Ç"ÒОß`&¯¿K"Õg€3[À~nm”^Ð!°r$deˆ/kªéŒ›<‰dùêÏ„è ™²´ÃùæeÅ1ž1për'ùÛkëÛü‘áA€ì[„÷¨äyÿçgû ÂÒgX KUàƒeG9ÞZKðÌ ¦u7<øýÛm!Ù ¼×pýR‰9Ôs¯s¤H±¸.Œt*žj2;™]û›R‚ý¾Á“Áðˆöÿa÷†Wbæ«›,&ºûÏe¥)¸´†$ˆ¹=ÉÃ0«|ªˆñáÞz²¬(¡#,`>¬)XV]0/ ×kU$•ÉŽ€ŽHfàIcMŽ{ÐsÎKÊ{ú‚‚ý›>Ø:0®ªy+W&˜Ó÷ÆÆ¥ˆ±¶ÖQ¹˜t©¯HÖóæƒ‘ùC}ÿ^ÞÆ7›â¹KƒØª­X:¤)ó¸ù`D*MFŒrïv^«[3Ñ“ôÔa?éÆõ`zd‚¶lUÇof<ùPTY³E¾l‹¬KàšŒ±2Ä ãX¯'¬+ZɮВ6‰êL—Ó 7] ñËeàcµvéûUÓ)(lí×ÎÐG©|ducywí¬&¬ÕNh‹–ƒÕJ"QÚ‚‰G’ª¦"Õœ(ê~Whw’es@‹Ñû½ç0Z:Iç”Z6Õ¨Ÿá¾ˆ©\ÜC5Ø—Dhâ;Ïÿh ÿGš®Û§š³­ë?^÷Ò¹0„h-«¸ ¼ÝáÖ¹¶íæµ6f‚Ià\4™Sñߤê±hgÚ¡¯¿å§õK<è½ßÉ{®üS´ªÆ¦~cyÙg"È¢Zçz–âR×în&=¢ž¤œyIa«žËO³Ï™Ì·Yž7êS“0VV1=JwÒZK¿½½EÝ=ù¢ ìx}: b­è2vœÌƒÚÐQ7ø6*W ‘Á{A…:齇ΑÚmº ¼ã¶B¹„þAvè× ® û°ßÖðÃÜôŒéÚ¦šˆu±¸ »ø@‹<×½Î|ïI:Ó8Ur©’i‰ÉWq.~Mý†¾7¦ø@‡ìV²­ œ—¯ßñï‰õZÛ“Œf£ÿÐ0ðY\%»éw’Z‡£¾TÌpÀ+Gm8/jöµÿxä­—:ÑàgAø$©';`,èn‰¥i>çIEŽÂÞ"t ø’³ÛÁ²“÷¶¨œßdZw²§Ué²>ô÷Q¨e‘Ýh|ELm×P£„ÍÝ€OYås«ƒP}[0]ˆª µóU  JÛO2þV¬Ó†`®=È™m·Èµf¹“º"ÿE„*âc8gÛÿ*€L£)à@È¯é¡ 7Téç_P[},4r™ªYu ˆ&úšÝþ`¸ Ë}³(ã@¡÷Ü–û«‚Ëšìy–|ä  œ“$hòø¹vN€DÒ¥™\°ÜN­¾›|KtK“4«có2÷Ý’¼wØo '¿I24!|SÔ,Ÿ¤ªëó_Ö9¡# )Ù.“ÑÐßÚyoßHI=’^¸4D=½5@lÝZdî ªªÐ&øu›ìdÒË‘&0HomÑ>ÿgÐ!UcÒLø7Î0'ì-kºj¾Ñ*XɈT o*- ¯Y(äF~J˜±òí`Þ:%?…øå îÎ9©¨<›ZžvSžJ‡Y[ÏØ,Þunæ*BṅùôóÿÅmß_5g³X8Ý~ŒK%J'Èð»ùèE̵S ¶t»´®F]`y¸Ë ã4I—y—I,ÏCÂÈà}ïW²i•×WŠñR™L6P<¥òL¶°ÄŽä`0ÇŒCÇH!ÁFÿ”§ô¬Ç  ážç-»Û,ÏËþ4b´…¯üÊk»z%óc³F'Žn!"FÝýì—œBºHýß{Q›y8Ø­Æ\¬â‘˜ý—HA¸…o'¢—\¥høo¯K¹Øv!fñõÕh"æi Øpt]‹eÍPµîeB`ë}åö«‡Ö˜aa/œRá÷kïB€è–F–WÚy‡s"Š Ñ^’(üåHëjŠÉÚ̦KUôžx(ŸYQ¼M d‚éãîK~jßO¾"lmvÌŠý¯ƒ‚àŽ~¹nû¼›™€©= ëÕ^«{næ]oy¯ÒÎz3/j¾ÎÖ…)n @:Õq«ž”%&~#b4…q´)[u¶òóTG«ÌŸ=íÊ”%vÚW á™ N-3ˆYŠp|»/æ±Â· ƒYwL’E·!OVo;³'|k~eCì«{æ’@`ùd|›Ö=9ggs(„ü° _Ï:‹ÿi¥ÕD|™!à32dø|šCÄxÔØAš]_Çç^ùh^.hxvT›è˜ýæ ~ž=»7§)-ï 2àfZýk%óE‘TƒºùU6Tw_™†Ÿa=YéÜŠO¾»ªµ*õXuÊ”– ï|÷á׌½\ÖBí“øs—"‚\Œó‘`"¯K­†þáC»A?Þz*~nÓÂb–®ì\Úc§e“?Íb4øý{â¶•Š =ÎSSF™˜ Ñìè$¿R¨¾f8vér–Ç+Òq¡h/‡½¤%(L±OFåd6°¨€Êˆ[SÝ[&}p&ZsúŽýGê¹óŸ_c~²³¦®ß%e¼IFXÙ¢ÿYùŽš CõaÏD L›i"L·I SÒSLŒ@ø5·÷½Ž%FD+™´úbìÅX„Œ´úæ¤8ôÕº=í;dófŽÅ–6ìýN9Æüß"&•yÂýg8Ë?²lÓÎð•BÛ§YShyK/^îîôIHö§Ò„š£÷…Æd¼‹]"û'YöÙ¦S‘‚ [ôÉeêÍ'¼izÒ}{)L¦‚Äl^ÊœºçjµÂBãúú6 F-°–Ôo,äÙ#Vç$ù;žAvÔGÁî§Y&O¢ÑÅBÍÞ§îý³âßð÷gó‡¾Þ“‹œu“°/EýÝö4'"V»+L–É"µƒû\™­—ø öùѱ*›€P ª* çVy×€$M¢uŽÁö­7o&p2ï„jÇJ™x¶çç3¯ŒnQÆ>AÏ E¨å ?Ób²…ò/‘ð¶÷ƒÞeÒƒLæVÙÌÓˆB€8¸9ª½pøáñ*‡:ͶQ¡ŒvÖU+H–Háo羊Koßó»I§ÊºS¨Ì%LYÒ© "ïiêoéÞUƒ-V—&‰xuÖF¿˜Qév+ß¹¡vº7½Ä=³æJpÛŒ¨[½²qoÙìr)ÿy3uYõò²$Š™1ÑÊü Qà#Ùö>’DkAF¦­Yþv1!ÕCbæAÊ Åè2Ⱥníæå¶fN«=^‹YÇò§0«Fȳœ}#,vˆ'ÃëÙ{ ’° Æôê ×6Úá`þdÕ"8:ÚãêÔKý Ø$æsõ¥_pVPS¥ˆóz‰½@Õ ©2›Î&W%|δåk^x°¡RÝÀTNÂÝ­†NQ—ra$nl6ø¥NTßÓö#~ª ²r•*ü¶3Ǩìü|ÞÁj¶B9î«D+yÖíjvЈ ¬l¶F—f3ò?ÃÓÈÀu”ÓÕ; ·Yñ§¼›>ž|пŽðº^­Åðâ|‚±ç¸ U ˆ™‡‹ôò=ø2‚ÅaTçt„äÆ7!è¦øÙª¾XÌâËŸC„a°{ö ÊórP\ç¯rÖÙˆ\ú׉ÿ„p"\¦Óh…h¹ ½ág(2û‹m6x3#Ȉt¸sAgÔ3\ßð‰%<£^ÙÚad>!¨L@ÝoódW<ÃöážÁr~™ûrô3œàq €)îÙÔŽ½# ¸¯äaXé\õ}ܽ lxCó[]¢#¹7§A,nðGç¹ ¥‚œpÌ—ñѲp|a×þ>Š,û‚°vþ¦Q$PÀòÿBž»(†g|Ö„më‰ÝHGq/ƒwéoñÄZ(d,@˜ã.üF¦Ç›f˜O{¤­ÅÍü„²÷ƒÅžUp“ä\‚ziBÑ.C„œÓc“ðô­Ès)oÙ^Õ8Q¢òºü\Ú]¹±[m Z¨+a‹³vzø@Œ«Ru¬šìêPo|ãž9„ž³ÏÔ® gµ´fR3ò¯‡`MòÔUc@#›xxËŒ Ò/`f€W¿â¨öäºyØ RÏ3£)4ñøÁøK,Ù¯˜Û~¸”w}íòµý8œJÍšªzÚ~·œøøÐ5‰ sÆÉXÒcÌõÞ¬¡ «>% ©M Æè²y¥x µtIèåÒ‘W vVEŽ’•¦²—ŽØ;ÒG±®›`¿<õ‘=sK£øÄÍçnÜ6áK%æ¨ žŒÄ‹¡î{ ÂÀØsíÃÀ˜ÚJ×1†[æD`ÎQ‚IòÓ©’ ®’a?;”ðs ΞéöÍ÷O£0ºÜÊ9“Ân$®½Ãã×´m{‡ÿ¡8™øžÃdÆ5òc‘†J€šÖèîjÕÔ8TS¶-&¼â~z—Þ…¼ Ëã"SV1¢ýQ9E LUËŒð ï’ÅÁn*+ÇøÂ¸3ìǹoXþ¹ˆã'›‡]°l_¸eo%øYí…˜Ðýþ0¦$á,¼;]kÝEj˜1ÑÞ,Îf$úHÖª[¸cM\*H<–úý‰(¼FsGV©?ã*©D¿hÿÜrÅyr7è”F2“®§‚r¾šèWRå1ˆËÁÞkDh BË•¤DF©Ã• o¢O]FZ¥TˆXÊ‘zŽÛ€È +ö£Q8ɯàÏk 1ù€Ù6±‘4Kì×_ôÍ#©ê׆Ò8M´¾¤@8…?¾Ù8÷’lÒëbšUjîX€©‰E¢‡Ÿ³;JkQj"¬’‚ÂÜ–]¬% f#T¾=ÓÚÇu©`¶½@ÆèŸÿ;»µêw äÊ’ Fº¯l{ìî¡3¿þðr:!ì¬åªë>–_O¥ÃW:ßH¯é çZŸA‘¥+ƒïÒ`%ëðVoþûr7Þ ¦÷ÉòÊgÝTͧfg;l-·©<Š®??‚ƒi8¬P'«±4ð?dĆÎÔt›Ûér)"7ã~Áš Ì5= «¶Ô}äçç÷¢äæäÒe‹œHåß7‹‚£*l¤\õ¼]¯b-¥C5È&,Áœ^Ö±h”$ƒ·al(ŒIÒ©Æ!KüZ—‰y¿Ô¥ý9¶ëU²Q›8D‰ÿ)šÕ¦7a rã÷Ep]Ä&Áò E¤µí`uq[WíßH#ñÄŠŽÎv˜69¶ó_ÅJ¬Ðø¶W89Ÿ˜ËèÍ ~.Å-"x¥ )7€î‡~Z&é'ú×@óñÿ\ñ&8_p=QÝÓµuÝÝîY¥æ6Kc™˜)ÅìîG4#«/ÑV•Ì6ÎB¥–ôKJ¶.Ú™Vóû¾ÑѨôj°ÇH?ÌoÝ#^ˆe'/x‚>ê‰Û\™¯!acÖ+ÉÞK4Ú'Ïï©‹ƒ$qƒ?5£áŽ~.dÀÌÊfª†KÚvÌbùìBèhÉû°b*_It *‡m£¶°Âóßò‘a“¬Xª-æYóšhp¥µ·˜ÛDpÜ•›4ëæUu³{¢g·>M <Ñ:–~2q=×۱öÑîÓ˽Ùk÷ e"¿#3ì…ç'Ü8_€O:´?'F”'q9µ”QÁÿ´þ&@­ÝîIàŸ{_L>BiäÓ0RúMSÎmû~ çHx æÔnºiúÚÒådÏÒþgeù‡ºÀ[<>ÁÓ£§yÌ´’ªD¯ô¾M8z¥Ï%¿¶*èû ¥žf¯*ŸAûÁœõ‚¼zÊKÇÉ<ì¼ö³]DkRò¢”_Ž“N¨1xàþý¾iOG Ä~«ÜtN–ªùNÓ8,Be=µe]c4á4ÇmàÍšRÓY#èļo¼ù~–„ЗE¿x÷ù 'qÅ äg"veºæË©>h›ŠõHj.ˆÛèäáÖºEÖê Úƒª4âkçµF\ušã½|W&ý¼°ˆxÕPFŠiàgKý3›*Pøƒ0áå5N§`!Ó.„»Eþµ%‹~ ;Ô±dD†Wèõ9ƒ30Ñw”,E¸ú""¡yF§ OÞ±%'†BxXì{º’º¥äáéÓÏ>@„›õ·ÄÙnúëÖ&ÄŽI•ÿ üëQÆFJShïò,[{ ÆŽÇyEGÂ%Û#{÷ý\¨Q†º%®—›îŠ'ïÜ'Û±›€´‰Ä´bÒEˆ ¸aÜPl`ƒäŒûIƒ¼?Ïçß6N«öN¡LŽÔðkÌg2G-Ï0Dé?)3=SR8ïA¹¿ç _2ó}O]ù:žO¤S3¸‰ Ù¢Œ?àQ×ÒD~“a‰/&$sáer»’¹=iE¦¬TLè~;Áa|„æxݳ±E‹Ê„aŒ¡-–”?x}I¬GifæîmVì[lͬŠnÔ¯[2Ø~÷ŽlÊÝ¿­Rž™(¾*zÓÖo’ñeF<÷ðEVc×ÊÆñXEÞÆçœOì›4€qÒD·.–Ž_ÐÉÅ!¹QïÏæv ¼sªOÓ œFR5…ŽRËŸZtûçæû?OR1‹i±KÓÍgŸ®ÀCÒÒiI el§%ÈVWt׫·³“¿$Ê0²ÊCajõ!•é uÝåî8?)-OÅ+‹ˆªó–l8‹ É´ˆc(®¶öþ™@ëg&dÆ,èv,ø°ƒÉ£ÐQ}.Í:^‰I¥KÝÝTÏG#ÕŽO^Ê–Éu¹ˆ‚ìêïPdS%¬ >Ïr‰k&I«‚+5€š!WÜ¢%A€*Î½Ø N•†ÛÒšbíµæî•Õ_Ÿ­gÀ?¡ Š;¸ëh18ê–Þ°ØàfsnðèüŠÖ2Š\HÉŠüÌ^©Þ—/i†Ôêç2žìíî—6á‚{yFuÓëk»åª¯è8IÜþdi?é]ÆiÞÇ7Ä3 g=ÿ0~Ks@(LÞý¹Ÿ2~~BÛ ÜËAã÷ÄM$ëÌ&†Qd¸ó¾Š³ÈS?ðÉ‘)özÜÃ%|·î^UËj¼}1ÿÍW(¤R|(¸/›RÂu’-à…1Ÿ››¡ôQÛ™J z+¸ ·ØD²\|žo…\]¬ ¥ðƒ ï9 Uß®¯ç ùþé”Þ~¯7Áx3•ñkѰ3YØï¼`ó£& ÊJ 69½žfâ½KѺâS~E"y}…˜)e,O? âQÖN™,ÿec0Ó Oo¤´{ЩàM?ÎãdöÀi0Þ®Ú(e`ýWŽö¶r’ +k4€µoÏt6ý(û÷šñEŽ¿i“Ø4 Wèljuo1Þè(&üáwí™D3,DTMaz_%ÿ·š=[‘)–opQÉîDZ†ÎS‹úòÐg³.œ¾ÎA™ÁQ…s²`Í’6@í¦uó­?Xé MãÇM=t[xºž ìĆéõœ¯-\v¥-†¼ C1ánŸð&Æž‡k¦=û†ÒdãèO™y±V¢¬ öVRjó›—‚À|«ïjÓ G–àkÅá™·\w”yö‚L‹4qJ½Ì-ÖØ+Awüåþ¾ï £°¨(ïìÎ0'ªÈ¸uù§ ;Ъëîð\Ç5еïø4yû! Zð‚ž¹Ë;égLHÐæ/þË$ñ}mƜ̬K{ñŸ1+N¦™ º‰h«)ŽŒÌôîÖV6­#Ù0ç¦k€{»¦÷~««Ú* ^B’DMýGKõpv€ÚïÍ<\žŠÇ]U3tìø”}L+­÷(!¨¤µ‘×Np€m}Rò’ rZ±ðåúòGÅ-˜ƒCsÒÓ³(2”£l’Ä-oÕ”˜˜ÑŸªá[ 6ùÚD?ªêx«»Ç ª¾‰zD…vÚ›ãŽÇ+eR{¿Ñ_+º'ÖðR±OiÖdã6¦ÿ=»±s׆†Úu?? ‰g-ˆì<ú!Ì@ûñ‡×¢ûÚûHo{]KKmšÄ&*ž—.ÿz}Ú1‹.·*êÎor7g<Øe6žÿjÕgMWÓ2Üa! Bt÷6q=ÝÛ^‹]Ó3êòOofÏ+ ÓBÉ­çÐãa~0BÓ`¿ïôO“Wص#\ûÄð9ã*þ wŸ»Ü÷r‹}eÍi´Ý½»)ˆ¬×!É¿~DëÊ‘TeP„↛cóå÷y»`ß×Y7“Ã0êÅ‹÷Oê}>ŸnéÍZ¥SBg&¿*¡ƒÆ7ÕüàèÕ‡ìb¨¶W¢¾ëþJ›è ¯ô©ï0CÌߣþLÂËà‡€7P@©BØDÌ Ö¿&ž ~Okão v•›q_z:ŽW4‰ù±áùàÀÓšØ~ð± õñ]dÉ«II€+—åêÀûËòä¦a0ÈC)ûäÚþ§'¶Ù÷¥Ä´*S;>]”"ÿ®õaAi %,i¨ö&"O‚äm“þ¤ÑàÌü$lË"Žd>\“G‚VØB‹í€qÝ7œYZ8èUߺ …ˆ¡ ñçšao—õ“V†¶)n¦RÁŸëë°³"šØ|äfÖgÈ¿ÁEiÎ a{ÃóÕb÷•âzÅ…›âGÔ©Îí Gö·-j<¿ŠÑãF†!óÀAîsƒr~)ÓÍM8Ž+…IÒr31}* êáŽJÖ$¬¹™%Ìå Ê]S÷Â5L>çoå8†[éŽb¥[Ø M/ö› ØxBkduffv+4ɦ—Å@gbB–…2MÕæØ‚¦ô:Iêƒ ŒKÅ5ÐH| ©¿×M­s ó/ÝâÞí%ƒ¹>ÙÂÈb4œ®©¸ž¡ Sf‚A¶Ö ~ì1#–‚Ù!qeQ_—x&„'aؽ´Z‰@~+äÌÕxƠáÄiúe·â•œÍ„¬×ʤ麗Nø­3±OÛ’Ç 4Vä i _‡f¾ÃJÑÐLQœZÅq§\Y‹¡“ N^4Ä'çWz ×RßD>œxÿÀ¨ð²Œ Y.¯5_"ôÚ8¼Ë¢U›¶ÀE¥b ПãÃËC.¬ûlI·‘â›fX Ÿ†ž8&¯Q‚¸g°Já°?]OL°¶Y^s?S0G!"ÙÊë_íU‡‹dzìj‹øÑãç9_7tçÆþº)ñ¡¹¬ÐÜ:‹âÐØo3ˆup® ×_K8‚ |è¶§oérѤû‘!JÞ½J,{}µ [sî—¯™hÇ4CZ¥Óƒ/üš»9©ÄîÑFkàœ@¢n;ƒ® ìÎJÈ}hìmìdp¿ŸP¬°ÚLJ™äº__™ÍªÌp¡½†0D±Î>gV¯Ãmûö;éº)Rl×3ôÔz’oq®TÏ e½pk7}¼ßÒ赇P‰£¹Wq×¥©kŽ&my·ÇÅóD.‰ÄŠ™œ‚×ò¬„Ì]¬ói¾«Þ‘ Ov\úÆMôKå Õè¨pfÅ7>_bj&”cÇ n*˃‡+ÉîXwüƒÝâe HSz/L¼¥Ó®ÏÀœáÇÏž Dñ T‘‚»×¨Íïß‹—sýÑ]ìiD:dõç’ýÙ ŠåeÓ‡ ŸR(†6Ž‚–ãjäð6.vã†uì÷¹¾x»¥7Ó ãŠoªßèÚ£K¡Y… «|7áŇ]ßÚùCî§«¡fß{P»~wTÞÞº)¼Z³— "ÍóD{7ºÅ¹º‚6§⃿™Žÿ€Þ.È0p›}úJáOäD›ð¾ŒQ]{,˜Œ¸÷^%Ýí"ÕœÉðÈï¤ä#üâVuÑ»µ8Ñsçô=U÷ÌŸón’tÚ0‘Ûñ¹»R½3¾säÃ`η$àGF9j‰!!’xç-Õ¦Ž@< ¶Ä4¾gŠfÌ™Dù$ íù¼¼¢Žå&p—ÜxX|—½L ÊG§,ѹq>´›|í GhQHAõj*q7 o±;ñØcu\ 8ÙVÁÛ$ƕڮø¦Ùìwî좻է(ÜŠ‚³ì•†'#ÎÞùÚ9tèst£ûe‡—Ì+´à c„ÎHÕbƒÈŽc%2Ø(tñ¿^'¢üdlÒÊãÂ)ÓÏ&³cL[IuÔ›ê)-`ÍõÈ.ó¦4…ALGÏ¢ûñv/­Ÿ¥)\5«aºœë#ã÷A•3ÿ6àôáNg‚¤nçÿçó*høÂtÊí–yÒø)˜6ÞÞ(h ããOÉgßšCã1û'’HPã¤'šCwZóddä©#o|¬𙩎zƒC‘ZÎs••K×&u-&p/Öúv~§ºÄœ‡\ ]¯‡:6 »ÂˆºS@(|RãQSž×–us ^à¥Õ­Ysw‰³-¸\¨"ACwšñ7ÆžãÀý¨w Úû'Ä?ÖÏ·¹1Q'Çâ\…¶‚j‡Q˜líNƘ¹u/•÷ù™}Z#W?kŠªJ#h»•øÙT™Ö?8ü€Òâ0ö¡ÔWÆN%j׈¹oé ܤOñ Ð!cé`JÅPÉ5}}DÊ™-ËNžªÑ—µma.5#¢ú«n—4~±òÌ!üd)!ÁäšÚ4ÛüœþÚ8Ïaꚥ•ÓØe4ÐpXˆîºLŽLûšbJ½ç¡%Dãçþ,óæ ßó¾yFa'X"îJ#ÔÐ>½Y; Çû[Š@RíÆ]¢«×çQÔ³ˆéË{õ{îíaØõÎ\¤‰—ü½¡ÐžEt'a#+„kµ£[ö ÌWâ<ë;`&ÔŸ,K«ä;ö ©&ÔdÎ6ƒ0‹¿›‡ 9çdVXƒÄþ~Õ @KãÍÿ’4ÎáeC¨™·ï¶ˆIãÑpeëwùÒÁt)ŽëÃ?Qã¾°ôüÐÒoši,*¡ÆXü0v½ª§!k"x*+÷+œ{tZË™îÏŸk;®ôãU›Ï^¶&º»¬o®¶pœ¯3’˜µ³©Á=¾=„…/‡Îð¯M ûÊÀÔÜ"–Ú?ã=ˆa‘+Æ:J÷+ìCë#çtkwƒ‚«¥‡À§gð÷Ã’‰Š±Ç<òZÙÄ^9@eot%xÌêX@ÙÜ¥E¡÷½ŒÛÿ-ã»Ë ,)ëbëÕQ}{Aöåuš¸Å RVWEêë"wàʆӱ:¶•8¸Gqö›Àã Í*fž!ðI^1•ƒ5‚ì˧¼ÔxEsMŠyë¿™DJ•DZétÍP´(Û·¤c‘Ñ]پ̨]zuA¢ÃÍL"ž…é ê©Ç,¹çÁŒÖí´™á„É|UmQ—×~ À ž7ýoF<¥@Z*ü%(¦kA” ÔUoá‡ô /»ìÎsä}Äl›Xê•öHSägb+[Q÷¹…ý}%ŠbdÙšüwU]þ|sx™¢<®Mvè÷´6T¯ZN»:ú­Qt/{­‡|Ý}³£ê›¿ ä|qRÀ×cÒ ×÷R›ù=ÈÁ³Å¦S¥âÒwq%øyh¯;~Ñ=aŸöØÌ{¿*Mk×ÖŠ Ëþ`QŠ"µ8¦R|Êšs ÔH7íÃß3zÐ$%Ò”ÏðÑu¡ò+’=Ã#ú#¶jµÀ?[V†”Lß÷Lñ…#29{áì~ @ „F_ÔΆð¨8ð,ü%ë.½ËÕÕp,ßDÉÄNE:Þæ>R~2[²Šj£JˆÍìý³Mšy¢àÉTÙÞC«ÛšðP…U°tdÞðž^ƒøÁtbÃÚÌQعÃ/y™ÆšÚ§¡øòŸwV’uŸlÒyÇaT½õ‚5q:t« g9“ê3=‚Ci>»­ôéçÉK-¨‚ ¨RŒAæ\Îl«§ Ù#É*MŽ=*‘c£Óæñç#ÉÝÙe7-ªû.¶ØsÞg.rØŽê]b²‚9Vï¡“·‡Ñ0[3á âùŠN½UYР„ÉVñ­*åoŠ 4Õžýƒ“’q^ý•ÐÔûõ­•¼ Í2©ÄiÒGäô8Ñ–Lõ“*ÈÜ$kls¹[!6²ÜDI©;†é æC¯7v¾«ï4 ~2Aè Ef)¿bkÝòŒûwZÌ!Ç R ì7¾Õ<^Ý'Žï1}ot+·f ••vgÙ—Sí.t»Ø]ß½oôˆ-£®àCúA@ùxˆà넪lÁÈo03Ö"ô8LxÒW¢cb¶Šª3 ©Ùg¢mRçA°4ÎØ®°~ãõKA~êlâmËŽ*¸  £8¨¿‡š?U¹ :ÚnâÚÝØÂÎ ƒ”éóƒ+›ÕrKÇÊjÕ¢àH·ŒètζɢOd§3?)ξ §d«m„ŵ.>AtKâU{4# n˜…!ÒŒ:4ð t•(ÂY<±Hòæm– Ë9æâºÅf¯v„ų‰oÐËõ<˜ˆºú¸NFèC:dçeÇÇ-^*¦ãjG> ~ò ÿ{—7­b‰þ/ƒŠºÛ±¤ €n1_v©héX៘Zí†ôï x'¬nvíáuè“ÅpÅù-`÷ƒ{3Fiµ­Úbѧ8„5ëÇÎ.ÔÉ.ðµ­cÀÜ—a Q?Þô‚^ŽŸëý£Óö4e¯Ú…ƒr¦€ÜäTÛÄïeÜ·ÿtH{€˜–AmbuÇÉmÂ`Ô$KõôWèü^ÑpJêIb;xÅãõ}ެ7׺ÕÜ šå¢—*.€ #›NÇÐGYˆeuIÁv§Eç~ÕinŸI8gY碈Îs~þQƒ\\攥ïÇ <µƒ7ÞŽD5Dœ†‚’s™1ÒOÄ­JÎÞYy² ª}K"ø Ø0T¿ßµ„¾ %†D+Gf‚¹Ùâ2`¸< ­{'ýbêèIF R$ªæ-± r[Ú§¯ûõñ0üóÔ¨²ZQ Iôš¼€îZIÐÁ‘pãhΖT•.å‘ô å=‰6}:…Ì86ªÝlçã8bTàÏ¥g(¼ì›¹DŽÕØäýTI©à‹®*m…¾µ¶ë°(¬¢´›ÒÓå†8)j2=ã¢uGÎaÜ<ðRå¿Ø,ùöBØ<”`¾4‰˜ÔTÉ4„&²ò8ÒDë)˜´?7*l— ‚ž©ÕG.«ßv­‹?øœ_tïŒòLäKYéŸÛIšZá••k\//žt`¢¡AJõ´3[_sþж)ý>ˆ®Q/L5ÄŽÏ’uWÆ+¬(Þlòb”â3_õââ ÃË« ¸¡6íu}£ÙìÃ^$ŠéNg²5ñA\\%Kð1ß+JF»úwÞño¢ß/R,^ý׈ÞÏ|PBq.ÐZHí¯l±û™N"ÇF Õs^K<š¶m<cô·>Y‚ù] ‹|&9zS–R PL;iÛŸôÊñ¤_ÔG„º\e„<‡¤˜iÀy{ù€“Ð’ÓóFQy)©Qè'_Bäi2ÔïÍÙ¿Ž×°;õG7^<c¥r͵Ù(éüÕ-:{ÿyn5'ƒ£’ÊÆ¨L8'„Ñ™fÛôîèê/©nMguÑ*qú²“rmèÙ[NðU+Ã÷õþ]/·/~@C.ÇSLB¼¹Éﮟu‡[VQ®íDÐÀ½±ù QÃq8rÆîÑßP’Œá=ý‚áúdæÙúdîfÙÓí% &kµ/ŠX’4LJåƒJÎhesÌgÜ—¿î)×}êTŸÞÚ„ôÙ.tx%?-aWé ZÔ„DŽØ%(?C”D›ªeìÝ' ] ¼2ÅùGcCŸ)¼%ÐY¢êèˆæâk¸ùƒôz_Ÿ£š%£´¼‹;•ruLÍ3ÿâêü‚ÁÌZm‚ÌLäØÜeQŒÿÅCö_³´Žf¿~o)‹,˜˜ZoyÇ'7ºh†Š;kÛ¥ÌFšrýcàYÛÌ'±´lñ» šÞ4œ>2HZç>­’m ŸTt25É­ÅÃÅ5ÉÔí^q† ÊcP3Å«\çÐd‘ šÁ¦C=ÙŸ;¿°ô`ß\šWá["ñoÓ….ðPIšÛÊXÅ9[H?¦Õ”ŒÜYO“?£iÃ˾¸¡.sŒV|Ç“—²P­a °êþ³_5ޙ̿ŒfÌh{h/¹/R6v:„SLÔxM½q¢sôQ~€Í'í,´ ˜n‹Ü” <·BZrq:AFÃÊ „q’úŽ©pÔåÕ“yÚš U'<¸ ŽDý¥B>៥øÇ _ïÅÌaà½ñCßx«³Ü©×‡£Ù©^Ûa¡p÷Õßð „„Bqÿ9dØÏópÆ­úçÙƒÑÉÜ•½%×ñ|Q0†ÆÙ~']Š,àœÜÕM+÷Ÿƒrz#„R¶ˆØµ,ksÓô÷™WÓXB_MšFsV€qÆ-É=»U·—FÎy‹m’Ò ³$§¥2Áw~ aÆ7—°ÞTÂÈc¤M =b'ÿhCjØùæYcÏÂørËÜyTQf’¯Ïp@¸°ýät‚šÙ]ÄÈ•æ=£?=kʱæòerÁ¤hê¸H²¿×³f;íä¼ä2ÁzcCŽ$?¸zKKZ‰F ‡E ô;†çíJ¹Æž³i#D¼\-Å~»\¤ÞŽ"’AX¨“½êCAQøØczq;H…ˆ!ž`"ú°ºèÄùÌÒ‚‘DºÍ·ºšï‹â'äÔ‹/Á©nosÞ•ü©a`öÌhî•A©úüFÖ`}Ü¿¯ õõÿá£a¨£Áó‰ú'*ØLiy÷ž¹’ŠÝ9>)O´¯QîÌ”‚÷²qæüîa+ÐG»Êà›ÄŒÒøú<|ì†EÆ"Q â¹’:pîGð„í»H‹s®¶Ä^µiñå0ýEŸ{É6» b;Ot©ÚÃ`:yß&ÔÉågT¾À~#ß÷À¡ŒÍt=(aäb|{í®4®J{ÿÉ`Θžîú`ÎcgÎ-†$ýÉ«kt±(Q‡$ ÖÆZ ¦ß)—ðùà¤èz¡¸§¼D~#ð²¾”þÃË õ0X4¬$Âüºâ@0†A ‡b#*rP–œ†9kýºcJŠÙ—Þ7¡0JÙ`BE*MÆÏë<ÂOùàÛpTq]Êaöö%…2§d#ÿ®1qBZB×oƪ{àoKŒ]Z¨9\`s³J÷­ý™^ îy«û+œ¯àL¤]ùAdË@ó3^C¾Ìá¾&ÛêNA,k» +ÜriâEá°àîœv"ô{ü,`SȺôê_Qe{N’ž1ÂÙÇ)NKëø§R¥Í¢ Ù)0‹ó…ÏŒâ/¨\I§X‰€Û zh/ø@0´š¡P1o„þ+´Î3’âo IëœnÑÎ7„5ÿCš‰ 8¿”³ºÀÓÁœ/½‘eènÎÒbT¶…Óïìe¼k¦:Dyâ‡:×ÉÅÂïßë}ö‘i¿n¼È·í/ˆ޾/”ÎR¬ ›[›¾ìÖ2€m4 É ¶Šêø÷ z%`+=JG: ë&™·§MoØGd¹¬/ˆÖíŠrŽŠ›2¼ùÜ{â£} ’‰û?·ËãÙ!«òežƒtØìàµÑ%ŒµD[åBÑöH‹ ¶ L™Ž·´ÅeYgWþ¬r¦ÚKãr² Çœ…ûá3[v—ªžÂY¤ÂµEæÝ`ü‚ajØÈ ÒÚq‘L¦Þ„ÂN«Ê˜Mòkpúײ±«ñe]ÌÒY× ¹¨)%çtS\cô§›’ÏÇ/h÷=}˜}MkIÄM&£Î¾QŠ,³‡Ï¬†Ë—kgÈ»Ê8ùÒv);ÜùçÈgÃEê>:f”5Z/ÑxÖ4Utó/jaªšÕ4¼ŽnæQû’o>º(…ÙXVÎi*n:9h 5¨茣Ø!úKÇ-w­m>È›ñÁ`Áµ å“êÑžW›³à‰ž4…tpj„-¢®¶p~k«ˆÀ•\}mçº5³|ýB•ð~–0E8ÛoŠjÂW}Š$NÿÒbý†KÞo =B–&ÃI’dÈn3¿ìPmÙ Y¦µëÈëîTø0LFU¸¹‚ÅŽbþ%së»s°‡Mk+Vv«GwZÏãäeDOáíbÊĈ-}€ÝL3/Ç¿AÏ.â* x;í‹)E`Up0KøW-ÁÉÁ+®zÕƒ‘h”Sw·¼+˜-}ûCRy.CS¹Á+lBòœÄ2øx޽èPO¨Néɉ(“ÁB[¿ºuíÍE uŸ‘gŽ2wNÏàT,h*4:ü¼á\0ÅãÁCÊ}ø5~«±Xqÿ'à©rò÷¢™ 9¡;êëÁÇ"‹#|®7š“8¢;чnÊÜÏ0{ú#KÂ)ù4˜O 'èUÆIŒþvÚ½1|»µs§sÄ,²5óàe²?¤m36èëps,]X‰â+¬QçôÎ<§“bQ&Î` ­‡•[®B ðÜ®Þݨç@öË­9û‘ïÒÏ7öH€XMô•ê¿J;¥Uû‘€SüÁF13“â´œÀM)½b]Œˆ‘ÈžÕàyÚ-,»¼B‘ͦå)|²Æ¢*¼]¦²êö^šôýHª·”Ў߇?¼õ¤¬‘¨xÐC;’6ƒ]åõ,ºö¶aM>ïLMÜ´V l_ãû>Ö~Âã¼ál>ÃÇÎoôèºLZyù’yQd‚&ûs»Œ¡%j‘È!yZðÉ%µ›ø.Ÿ’Ì€‡®Šÿ•Êô¦³ï¤½–‡‡Æ¨ÌnqwÞæwý^ MÜñR8Þl;¬ ô¿kJ;sÜ¢²¡/N² ¶öe‡‚¸[é¼'¼Ÿ¨VwÀ­Gøü˜÷¤XÈîmò_&ZÓ»qŒ5¶Gnæ˜uÊ£PZfՙɪ }”¬ 5šE9Ü 6ÏçÝa î©£óH#- MÝð[ìô ã”Ê\kî›Và¦A(˜«] ûuÍ GO|ý̲µVB˜ƒEk„3a)T©Ni³§Ëj¸lO+²ÃYu¤¨ýªÁX%·šá.w•3ök±QU €÷\ŨèωôªÊ<_«ã„!jOJœ¼èC2!u_Þhs¸¥°X9þ‚O!˜ãÊæÎÁ´ ‘Åsà3|¹Fu†SÃÁë|Z5øÎà›DŠÊîÐTZ‚²ñÌ)<ƒü  ZŠb3ê¬RßTñ•Kè¯ÃP/a)ºÜ€™J‹ ÔA’3ZsÒ@´€·øÄý^T…Œî0`  ­©dôNÝŠvõ摜å«@<j<ÿ ŒSÀ<‹xÚÐ0š1À‘¥ýI?°zRÕlkyËŠÞa)?Çñë…ì‘•Rúè3xÍ(t†¡±×ˆÌÅ[Q BX&%T‚U.öÒ£=ûÕÓóöä€`›T"ÃØ¹=¢>Æ›¿³Ó³Ë}œßå%–òùåí¤xEµWÀá2.Ð+ÆûÎÀÔHL$ßh–eò$g%¤¿&<îtêåm××ôûêç;2˜¶Uó÷iÍðJ.ZëVS+娧ù(€‚Ââ8Sbñ0`îiC¬l¿Ÿ,=¼ÈÇö™$܆lƒ²«Lãrûéç͉¿I)Z"ec|ñůYÚnÙ¤7ùH‚“NÀ´Ñ7‡\d­1UÒíw[³¬œW# å·¸Ö«ß³­KƒâúÄ âów“ æ#Fý—=47zùl8% µÆ| aš<š¾èø*½yW×'Ñ:Å;žY›kÙÞ|ž°#’Ü t1Û[“îU®ãñ¡Î@•߀šMÏxÃ繈¨o«vjm7¼ÿÁ&‹hïØ.¯ðÜsj²eØ®6¯ÕÍ%Viï]>åS`muvO«ÍƒÇ¾:Y¬¾® øÙ¼E¨°µnƒ*Ÿ+ÁWŠUt¥„`±}M ƒ¡A§!oÔæ:î³èÁ=‡3[é‰Tˆ\oxî$"µñ¢|Ç®·øËº0J¬E´ uDÙRMÉ6²Èr^ÿhqˆ†¦œ­‡…Ùè…jôû](?òXØE[KH<¨N£;O ædž6¨Šªëb‰‰Ó\ aÈM×|5é°øjn…Föœ_Všx÷¥-r“ý¹´‘D¸®§¬Úr®'È,°=1W½¬ô!"HÐp < QLÙ[<óÍ3Ä…ŒÿÍx_FjÑöm# 1“ǧúûvuAM¯žGý ã¦(u‰sü4âE[¨ë‘ÿûeÀYÕ’r¹ÁŽúnÖ3”÷×ò¥=ÚÄñ ^?(T¶j=Vmb‰y`_¯:K”Qf¸ÿîÁð!YKž$PÄ}ƒ¯ÞAÙ úï¨ÉýcÒßüæÂœá$qêBb1tÑË•.£4ñµówÓqB¡UÛÈ™÷;ò«²FÇ Áü6A/±€/ìîÿæsºnö@Ä0ŽmÊÌGœ>!Zì?E«h1T~ûãÕ‘n#Bâ—·¬ãÊ 0Ä«@™4è7˜ž“W\m¤”×À7ùtŠ”+,_³Öë ²[9i2t¦û'ˆJžoRóÈ=x<ó[UP=jÆ}Ú"õC­œ¬Ï0ñÛ¿u³î‹#“xëK#Èå]×ÉŠ51'£Ë¬Ì2DÖòмdÛsN,AÒÝ•ÑÁcevt“þ›Š¯_Té*|æ ·¸ÅÝà~6š–Û<ž›Õ+ÇJ.§÷´´xOÒã§PJ§ßm_ó¿F=-W*Wöó<†±É¬‰ÖASÓMõ+JÚ µ[a‰ëL±ù’-¤4Ñ¿¨¾[™÷œí¢XîEW+n’˜Bþ§ÿ$‹|R ÅÿÏš æËT‰ "Ëfôú¯–ï˜ÔñÓwÕþL¶pê‹c¼à?!;DtÃIŸž×î(HaAÍmט°­ Ž::rÃDpÍ÷³¨Qe'ß›@¡îÎ÷ ÷èZ%>Gà?&4p  «É±Â5}„S4oû7Œ{´·© °FÃ¥bÀeå  }Ìö–s- Aû8*ß*:?„Ä©XîÛA°½%8Rz¸‚5¾vЛÿܨ4Û¨7Âr8ZÝ\´e"¤ªX6Y‰p C7Éâ—x/lƃ×È6 Üìíê`â7¯0"}S§u‰ '.Œ,lç. »¥.u?o^=ÐS¢è‚Œœ5sé{OhfÎ\Ê®çÂ4‰íðp1gå!€<«'x—_‡0ŽP\Ÿ¨£‰TZ˺±y¯0eáÚ ¯¢„Þ­¸—uì¤æ¨30>ŒÐ#,µáJžÅ–/³ú#jÀúX·?4tVÈ€BhåĘV×+Òî/×ïÒg@¤ÑkªÖZkÔ=´>\²ÿºÐuŠ|2†Dþd5…/#ÐQ¾vÖBoéóY¿àM˜ªG[· !UÔn¢«0 µò{/¼Iž0€+ìü—— ÁÓÑí(éò=d6QIÀ)´VØÕÐú“ªLÑ޽{,:”Kvø—‹sžÙú£mJÝ9°$›‡ÿíCØ- O¿}¾/vžéµ{œbÓpçúå¶¹­VF(È<žÓŽi‘#-K¬7ÕðãW¤—Øû]ºÖÕ“­¿Ìÿ“ ÃHwÞÿ3l‘Ь=¤ò½mjà­`7µ8c4͈1Ë÷QÖ:A#½'8ôRp÷I?U¬jºk™µí¤î8•ž™IM¯Qf†ÉÍ^±l³ª´QÔ’à¬#ezÞªÜtO“™eÆqhLüsëTIYOÿ—eÈsÀE»š°Ý…ý+¤\¿¾Öb¯¾òŸáìàè ª[_3w…ƒu J¢&Á5׺va@[;¯iÁ†SÆùÐ×F:eócÝ °'´º‘ÑŒ°I¼£MË6IÍúl¦H[†z\FÖ0HÃh½at­ÄÜêÇÖJf|MYKíò jÄQ]$øÄl­èñÆ`Ëñ!ið[žÙÏÃÄÄKzæꦀ ‰»êØâz=™: 7Òá}$½¤>éywˆrlú\ÓD j¡´,î½ú×pŒkÄd°ú"á|[2Ge‡‹ÌÑ‹Rš2ùH¼ /Ï|†V&©kzPû™Ayò[ ÌHäÕÜÍ!lDlaµP,®{9KØ{NÈìB‹;J8:»T@=¼ïC` ô¡¦ÓéŽ>ÌúðMüLþŸ»”á¹£<Ç2!bέˆÛÝæÌ‹ €P;½pïE1h]‘pâgxµT£Tt…Õ:òeÔ,âÖqŒ÷{[ÓNüåõJØì]_6Ýli„Ç „´Û³yDö.eº‰ CwA5Ú̲5RÛ‹’þE§H¢ÊDÿÄד3g‹"9‰ÄàOѳOì;3<'V¾òþófbF ³=WºµÚ‚.pgJìè†Ðæ‰K)3TŒè¤—R\"JB©Û›I±.¿À“$,墸žºê„0•ªRQ*[~H–·Ç ÅO¾q¦ \jR—Pr”¶¥F죞4µ|¢3¤)l¸ù“é›.Ñ>»+s{•M¬\}€Ý`n¡%œ:‡ÓÃŒ6ðG"½¹qÆRM‚2•Ž|ájÓµéÊ@áÔÕ5YçˆÌÊûdz`Mxâ£ÔDIŸ€zÒƒ·™ý¯vcƒª]Þ¾Äpꃬ–™É\®«/¶Ì=¶ú Œ$!ÔkTÿ¯@šÿ6´Äµ‡¹¦Î$…§OÒ?Zm2o±ÅÕH8âœwd Í´¹ÚSlЧ±#"Ήfâ%[kã¾`½Ïö€†iß3s³û&ˆÀ–vãc–p èó\¢¢¸8µAyŽU-Ü<ºØWŸ(— —‘ÝŒë;g| ”¤X¢H%OebvõŽ9¡ÕâUÿf}½Z»¿ÇX%¢5—ˆ¥rK¬–(ŽS8ØœLU ý0EVëÀ«ào;$w T×t!‹¿ <þþ@r*!Ë*Ô´bI„ × $m.ùJîÞ¥ËüÊ<:Åþ* ©Ž?,ã F}2ÿóZ„uÁF½AÉnP=bGãÚ~$”ä2LÙ ¦Þf s%%­M5YÂFºMaÕj¿*Q?çpOO ‹Ñ5'ðËkþ ÒE—„ØÇiä…!ÌÅ|ñ‡”B®¢©Èˆ‰OnäÐç¸þ;¨sí·q`ª}´ú–Ñ ¡ÛYvÐY Œë•U³û U%W¬Å¨Ë•ã€âç–ðQ<Ë4ZsÖoÁɱܞuê¬Q"á–2QÞ‹ÙÄvY„´2vWNª6>."Û¾ñ”XM*ø,Q±jW˜ò€˜“½rÐÍïo}Ì}©•\TO]# µŠFô¿˜(ˆ6'œ(¶#!œ·¹À2þáüùRXÕ‘jÕc²é™ÉéÉtMÚµÐÑP…ÔÛ²mÀŸ{­¿Ë‚ïþx±Ç„%´Zc›rÙFÃÊ-hà$³ryb/÷¢&ËbW$rýÛÖ¨ Ùðþê¡éçQÚHêšb^æÿœ?`²›œ©îé] É<î g ‹ÝGþ›jû,òr“ÇV¾p/D?¶™hœs©ƒ;‰Èh.?‰¼ùÔ„ECô“—“ i,ƒ/7ÕÒì³7‰àãþy·Ucüè™nóT¸ÊñødRo[\—Q]¢&{ÄvÞÃ!»î2GMx òø¬»Åg–T~‘™ ç–ò6¯Ö,¹º³ícb FˆF¯<=¸F‹˜¨-áá9ÍÐPÚFo3‡â©“©¬Õ7©×*×OÖáõ6Uoȧõ‘ä‚5Øéïûö´VYV«tO6Tp>ŽRv!´Š'Žö¨ÒÊ“iÊÒŽ*¶-;³5©Ëþ§ÄïrÅçÑKÀ­Õ#OÛ1®>§r¿YÓ$ÙÁJóX áÚYëZ~›]©‰Oع!Õ˜]Ƴ;hk<·‘Üa¿qKHþµ´ÁRÊL{¿€ðï¥ê­2Ãô¾Çô ÛÔ aƒ×vívƒëÉù"Nœ÷œ@Ì¥ë3 u<@˜8xÕûž¡€u\Ûv—ÖÀþ§¦¡ î—ˆôÅÅ‹rÍÏø…¡Oúo…½i èx…ë˜Ìû3cL)}Ôb­O„'“£w¹qe130«Ûv=y6§nòEÈ¢ì äKÍC’ŠÔdFž4"Ê`›ÔË…}Ðß"÷ùšå\º¯*ˆGŸ±ob¾ém‰SjÁŽjÊ#¾…Þé„íz‰ƒÅ†,ó€‘? 3xý••ßo¶fÎÑ©ª³¡É;€¾m†v=X ‰˜ôÄDÕ+Òil†RU«Œ5‚Xß«ånzt»H¶âÆ% qûë~u-œ°Ä¬å^Ü–AFÂ\u+Ú÷¿êÆaŠQÏŸýܜūm#})Z¹ýÝúÐÌm·ÐíR@Q¡4膫ÙðEGèøÀ‘³¬á[[ÙŽ] 'u¯aˆªÍ$œ.ìGʲªžI¥~Ò.îñ§ÀÙŽWg=¦Œ PÙöqßÑhu»o»7ÂyýVôô\ê<âóäÖöêDNA >8À±s3ïoãgFâSoo+’üë‡+´òtü ‹QCã:é,xùg/ ÁþÛJOC¦h×÷7âXIòÝ*hÿnH­wǺ8gólÕ®:,ü²"KõóDÏ~ éÅÃîÂ`£uϯ4·›kzt ¸ÞõäȘ¼cÌé §«(¢q>0 ‹YZgeosphere/src/0000755000176200001440000000000015164275510013030 5ustar liggesusersgeosphere/src/Intersect.cpp0000644000176200001440000005315015147425256015505 0ustar liggesusers/** * \file Intersect.cpp * \brief Implementation for GeographicLib::Intersect class * * Copyright (c) Charles Karney (2023) and licensed under * the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include "Intersect.h" #include #include #include #include using namespace std; namespace GeographicLib { Intersect::Intersect(const Geodesic& geod) : _geod(geod) , _a(_geod.EquatorialRadius()) , _f(_geod.Flattening()) , _rR(sqrt(_geod.EllipsoidArea() / (4 * Math::pi()))) , _d(_rR * Math::pi()) // Used to normalize intersection points , _eps(3 * numeric_limits::epsilon()) , _tol(_d * pow(numeric_limits::epsilon(), 3/real(4))) , _delta(_d * pow(numeric_limits::epsilon(), 1/real(5))) , _comp(_delta) , _cnt0(0) , _cnt1(0) , _cnt2(0) , _cnt3(0) , _cnt4(0) { _t1 = _t4 = _a * (1 - _f) * Math::pi(); _t2 = 2 * distpolar(90); _geod.Inverse(0, 0, 90, 0, _t5); _t5 *= 2; if (_f > 0) { _t3 = distoblique(); _t4 = _t1; } else { _t3 = _t5; _t4 = polarb(); swap(_t1, _t2); } _d1 = _t2 / 2; _d2 = 2 * _t3 / 3; _d3 = _t4 - _delta; if (! (_d1 < _d3 && _d2 < _d3 && _d2 < 2 * _t1) ) throw GeographicErr("Ellipsoid too eccentric for Closest"); } Intersect::Point Intersect::Closest(Math::real latX, Math::real lonX, Math::real aziX, Math::real latY, Math::real lonY, Math::real aziY, const Intersect::Point& p0, int* c) const { return Closest(_geod.Line(latX, lonX, aziX, LineCaps), _geod.Line(latY, lonY, aziY, LineCaps), p0, c); } Intersect::Point Intersect::Closest(const GeodesicLine& lineX, const GeodesicLine& lineY, const Intersect::Point& p0, int* c) const { XPoint p = ClosestInt(lineX, lineY, XPoint(p0)); if (c) *c = p.c; return p.data(); } Intersect::Point Intersect::Segment(Math::real latX1, Math::real lonX1, Math::real latX2, Math::real lonX2, Math::real latY1, Math::real lonY1, Math::real latY2, Math::real lonY2, int& segmode, int* c) const { return Segment(_geod.InverseLine(latX1, lonX1, latX2, lonX2, LineCaps), _geod.InverseLine(latY1, lonY1, latY2, lonY2, LineCaps), segmode, c); } Intersect::Point Intersect::Segment(const GeodesicLine& lineX, const GeodesicLine& lineY, int& segmode, int* c) const { XPoint p = SegmentInt(lineX, lineY, segmode); if (c) *c = p.c; return p.data(); } Intersect::Point Intersect::Next(Math::real latX, Math::real lonX, Math::real aziX, Math::real aziY, int* c) const { return Next(_geod.Line(latX, lonX, aziX, LineCaps), _geod.Line(latX, lonX, aziY, LineCaps), c); } Intersect::Point Intersect::Next(const GeodesicLine& lineX, const GeodesicLine& lineY, int* c) const { XPoint p = NextInt(lineX, lineY); if (c) *c = p.c; return p.data(); } std::vector Intersect::All(Math::real latX, Math::real lonX, Math::real aziX, Math::real latY, Math::real lonY, Math::real aziY, Math::real maxdist, const Point& p0) const { return All(_geod.Line(latX, lonX, aziX, LineCaps), _geod.Line(latY, lonY, aziY, LineCaps), maxdist, p0); } std::vector Intersect::All(Math::real latX, Math::real lonX, Math::real aziX, Math::real latY, Math::real lonY, Math::real aziY, Math::real maxdist, std::vector& c, const Point& p0) const { return All(_geod.Line(latX, lonX, aziX, LineCaps), _geod.Line(latY, lonY, aziY, LineCaps), maxdist, c, p0); } std::vector Intersect::All(const GeodesicLine& lineX, const GeodesicLine& lineY, Math::real maxdist, const Point& p0) const { vector c; return AllInternal(lineX, lineY, maxdist, p0, c, false); } std::vector Intersect::All(const GeodesicLine& lineX, const GeodesicLine& lineY, Math::real maxdist, std::vector& c, const Point& p0) const { return AllInternal(lineX, lineY, maxdist, p0, c, true); } Intersect::XPoint Intersect::Spherical(const GeodesicLine& lineX, const GeodesicLine& lineY, const Intersect::XPoint& p) const { // threshold for coincident geodesics and intersections; this corresponds // to about 4.3 nm on WGS84. real latX, lonX, aziX, latY, lonY, aziY; lineX.Position(p.x , latX, lonX, aziX); lineY.Position(p.y, latY, lonY, aziY); real z, aziXa, aziYa; _geod.Inverse(latX, lonX, latY, lonY, z, aziXa, aziYa); real sinz = sin(z/_rR), cosz = cos(z/_rR); // X = interior angle at X, Y = exterior angle at Y real dX, dY, dXY, X = Math::AngDiff(aziX, aziXa, dX), Y = Math::AngDiff(aziY, aziYa, dY), XY = Math::AngDiff(X, Y, dXY); real s = copysign(real(1), XY + (dXY + dY - dX)); // inverted triangle // For z small, sinz -> z, cosz -> 1 // ( sinY*cosX*cosz - cosY*sinX) = // (-sinX*cosY*cosz + cosX*sinY) -> sin(Y-X) // for z = pi, sinz -> 0, cosz -> -1 // ( sinY*cosX*cosz - cosY*sinX) -> -sin(Y+X) // (-sinX*cosY*cosz + cosX*sinY) -> sin(Y+X) real sinX, cosX; Math::sincosde(s*X, s*dX, sinX, cosX); real sinY, cosY; Math::sincosde(s*Y, s*dY, sinY, cosY); real sX, sY; int c; if (z <= _eps * _rR) { sX = sY = 0; // Already at intersection // Determine whether lineX and lineY are parallel or antiparallel if (fabs(sinX - sinY) <= _eps && fabs(cosX - cosY) <= _eps) c = 1; else if (fabs(sinX + sinY) <= _eps && fabs(cosX + cosY) <= _eps) c = -1; else c = 0; } else if (fabs(sinX) <= _eps && fabs(sinY) <= _eps) { c = cosX * cosY > 0 ? 1 : -1; // Coincident geodesics, place intersection at midpoint sX = cosX * z/2; sY = -cosY * z/2; // alt1: sX = cosX * z; sY = 0; // alt2: sY = -cosY * z; sX = 0; } else { // General case. [SKIP: Divide args by |sinz| to avoid possible // underflow in {sinX,sinY}*sinz; this is probably not necessary]. // Definitely need to treat sinz < 0 (z > pi*R) correctly. Without // this we have some convergence failures in Basic. sX = _rR * atan2(sinY * sinz, sinY * cosX * cosz - cosY * sinX); sY = _rR * atan2(sinX * sinz, -sinX * cosY * cosz + cosX * sinY); c = 0; } return XPoint(sX, sY, c); } Intersect::XPoint Intersect::Basic(const GeodesicLine& lineX, const GeodesicLine& lineY, const Intersect::XPoint& p0) const { ++_cnt1; XPoint q = p0; for (int n = 0; n < numit_ || GEOGRAPHICLIB_PANIC("Convergence failure in Intersect"); ++n) { ++_cnt0; XPoint dq = Spherical(lineX, lineY, q); q += dq; if (q.c || !(dq.Dist() > _tol)) break; // break if nan } return q; } Intersect::XPoint Intersect::ClosestInt(const GeodesicLine& lineX, const GeodesicLine& lineY, const Intersect::XPoint& p0) const { const int num = 5; const int ix[num] = { 0, 1, -1, 0, 0 }; const int iy[num] = { 0, 0, 0, 1, -1 }; bool skip[num] = { 0, 0, 0, 0, 0 }; XPoint q; // Best intersection so far for (int n = 0; n < num; ++n) { if (skip[n]) continue; XPoint qx = Basic(lineX, lineY, p0 + XPoint(ix[n] * _d1, iy[n] * _d1)); qx = fixcoincident(p0, qx); if (_comp.eq(q, qx)) continue; if (qx.Dist(p0) < _t1) { q = qx; ++_cnt2; break; } if (n == 0 || qx.Dist(p0) < q.Dist(p0)) { q = qx; ++_cnt2; } for (int m = n + 1; m < num; ++m) skip[m] = skip[m] || qx.Dist(p0 + XPoint(ix[m]*_d1, iy[m]*_d1)) < 2*_t1 - _d1 - _delta; } return q; } Intersect::XPoint Intersect::NextInt(const GeodesicLine& lineX, const GeodesicLine& lineY) const { const int num = 8; const int ix[num] = { -1, -1, 1, 1, -2, 0, 2, 0 }; const int iy[num] = { -1, 1, -1, 1, 0, 2, 0, -2 }; bool skip[num] = { 0, 0, 0, 0, 0, 0, 0, 0 }; XPoint z(0,0), // for excluding the origin q(Math::infinity(), 0); // Best intersection so far for (int n = 0; n < num; ++n) { if (skip[n]) continue; XPoint qx = Basic(lineX, lineY, XPoint(ix[n] * _d2, iy[n] * _d2)); qx = fixcoincident(z, qx); bool zerop = _comp.eq(z, qx); if (qx.c == 0 && zerop) continue; if (qx.c && zerop) { for (int sgn = -1; sgn <= 1; sgn+=2) { real s = ConjugateDist(lineX, sgn * _d, false); XPoint qa(s, qx.c*s, qx.c); if (qa.Dist() < q.Dist()) { q = qa; ++_cnt2; } } } else { if (qx.Dist() < q.Dist()) { q = qx; ++_cnt2; } } for (int sgn = -1; sgn <= 1; ++sgn) { // if qx.c == 0 only process sgn == 0 // if zerop skip sgn == 0 if ((qx.c == 0 && sgn != 0) || (zerop && sgn == 0)) continue; XPoint qy = qx.c ? qx + Point(sgn * _d2, qx.c * sgn *_d2) : qx; for (int m = n + 1; m < num; ++m) skip[m] = skip[m] || qy.Dist(XPoint(ix[m]*_d2, iy[m]*_d2)) < 2*_t1 - _d2 - _delta; } } return q; } Intersect::XPoint Intersect::SegmentInt(const GeodesicLine& lineX, const GeodesicLine& lineY, int& segmode) const { // The conjecture is that whenever two geodesic segments intersect, the // intersection is the one that is closest to the midpoints of segments. // If this is proven, set conjectureproved to true. const bool conjectureproved = false; real sx = lineX.Distance(), sy = lineY.Distance(); // p0 is center of [sx,sy] rectangle, q is intersection closest to p0 XPoint p0 = XPoint(sx/2, sy/2), q = ClosestInt(lineX, lineY, p0); q = fixsegment(sx, sy, q); segmode = segmentmode(sx, sy, q); // Are corners of [sx,sy] rectangle further from p0 than q? if (!conjectureproved && segmode != 0 && p0.Dist() >= p0.Dist(q)) { int segmodex = 1; XPoint qx; // Cycle through 4 corners of [sx,sy] rectangle for (int ix = 0; ix < 2 && segmodex != 0; ++ix) { for (int iy = 0; iy < 2 && segmodex != 0; ++iy) { XPoint t(ix * sx, iy * sy); // corner point // Is corner outside next intersection exclusion circle? if (q.Dist(t) >= 2 * _t1) { ++_cnt3; qx = Basic(lineX, lineY, t); // fixsegment is not needed because the coincidence line must just // slice off a corner of the sx x sy rectangle. qx = fixcoincident(t, qx); // No need to check if equal to q, because result is only accepted // if segmode != 0 && segmodex == 0. segmodex = segmentmode(sx, sy, qx); } } } if (segmodex == 0) { ++_cnt4; segmode = 0; q = qx; } } return q; } std::vector Intersect::AllInt0(const GeodesicLine& lineX, const GeodesicLine& lineY, Math::real maxdist, const XPoint& p0) const { real maxdistx = maxdist + _delta; const int m = int(ceil(maxdistx / _d3)), // process m x m set of tiles m2 = m*m + (m - 1) % 2, // add center tile if m is even n = m - 1; // Range of i, j = [-n:2:n] real d3 = maxdistx/m; // d3 <= _d3 vector start(m2); vector skip(m2, false); int h = 0, c0 = 0; start[h++] = p0; for (int i = -n; i <= n; i += 2) for (int j = -n; j <= n; j += 2) { if (!(i == 0 && j == 0)) start[h++] = p0 + XPoint( d3 * (i + j) / 2, d3 * (i - j) / 2); } // assert(h == m2); set r(_comp); // Intersections found set c(_comp); // Closest coincident intersections vector added; for (int k = 0; k < m2; ++k) { if (skip[k]) continue; XPoint q = Basic(lineX, lineY, start[k]); if (r.find(q) != r.end() // intersection already found // or it's on a line of coincident intersections already processed || (c0 != 0 && c.find(fixcoincident(p0, q)) != c.end())) continue; added.clear(); if (q.c != 0) { // This value of q.c must be constitent with c0 // assert(c0 == 0 || c0 == q.c); c0 = q.c; // Process coincident intersections q = fixcoincident(p0, q); c.insert(q); // Elimate all existing intersections on this line (which // didn't set c0). for (auto qp = r.begin(); qp != r.end(); ) { if (_comp.eq(fixcoincident(p0, *qp, c0), q)) { qp = r.erase(qp); } else ++qp; } real s0 = q.x; XPoint qc; real t, m12, M12, M21; lineX.GenPosition(false, s0, GeodesicLine::REDUCEDLENGTH | GeodesicLine::GEODESICSCALE, t, t, t, t, m12, M12, M21, t); // Compute line of conjugate points for (int sgn = -1; sgn <= 1; sgn += 2) { real sa = 0; do { sa = ConjugateDist(lineX, s0 + sa + sgn*_d, false, m12, M12, M21) - s0; qc = q + XPoint(sa, c0*sa); added.push_back(qc); r.insert(qc); } while (qc.Dist(p0) <= maxdistx); } } added.push_back(q); r.insert(q); for (auto qp = added.cbegin(); qp != added.cend(); ++qp) { for (int l = k + 1; l < m2; ++l) skip[l] = skip[l] || qp->Dist(start[l]) < 2*_t1 - d3 - _delta; } } // Trim intersections to maxdist for (auto qp = r.begin(); qp != r.end(); ) { if (!(qp->Dist(p0) <= maxdist)) qp = r.erase(qp); else ++qp; } vector v(r.size()); int i = 0; for (auto p = r.cbegin(); p != r.cend(); ++p) v[i++] = *p; sort(v.begin(), v.end(), RankPoint(p0)); return v; } std::vector Intersect::AllInternal(const GeodesicLine& lineX, const GeodesicLine& lineY, Math::real maxdist, const Point& p0, std::vector& c, bool cp) const { const vector v = AllInt0(lineX, lineY, fmax(real(0), maxdist), XPoint(p0)); int i = int(v.size()); vector u(i); if (cp) c.resize(i); for (int j = 0; j < i; ++j) { u[j] = v[j].data(); if (cp) c[j] = v[j].c; } return u; } Math::real Intersect::distpolar(Math::real lat1, Math::real* lat2) const { GeodesicLine line = _geod.Line(lat1, 0, 0, GeodesicLine::REDUCEDLENGTH | GeodesicLine::GEODESICSCALE | GeodesicLine::DISTANCE_IN); real s = ConjugateDist(line, (1 + _f/2) * _a * Math::pi() / 2, true); if (lat2) { real t; line.GenPosition(false, s, GeodesicLine::LATITUDE, *lat2, t, t, t, t, t, t, t); } return s; } Math::real Intersect::polarb(Math::real* lata, Math::real* latb) const { if (_f == 0) { if (lata) *lata = 64; if (latb) *latb = 90-64; return _d; } real lat0 = 63, s0 = distpolar(lat0), lat1 = 65, s1 = distpolar(lat1), lat2 = 64, s2 = distpolar(lat2), latx = lat2, sx = s2; // Solve for ds(lat)/dlat = 0 with a quadratic fit for (int i = 0; i < 10; ++i) { real den = (lat1-lat0)*s2 + (lat0-lat2)*s1 + (lat2-lat1)*s0; if (!(den < 0 || den > 0)) break; // Break if nan real latn = ((lat1-lat0)*(lat1+lat0)*s2 + (lat0-lat2)*(lat0+lat2)*s1 + (lat2-lat1)*(lat2+lat1)*s0) / (2*den); lat0 = lat1; s0 = s1; lat1 = lat2; s1 = s2; lat2 = latn; s2 = distpolar(lat2); if (_f < 0 ? (s2 < sx) : (s2 > sx)) { sx = s2; latx = lat2; } } if (lata) *lata = latx; if (latb) distpolar(latx, latb); return 2 * sx; } // Find {semi-,}conjugate point relative to s0 which is close to s1. Math::real Intersect::ConjugateDist(const GeodesicLine& line, Math::real s3, bool semi, Math::real m12, Math::real M12, Math::real M21) const { // semi = false: solve for m23 = 0 using dm23/ds3 = M32 // semi = true : solve for M23 = 0 using dM23/ds3 = - (1 - M23*M32)/m23 // Here 2 is point with given m12, M12, M21 and default values s.t. point 2 // = point 1. real s = s3; for (int i = 0; i < 100; ++i) { real t, m13, M13, M31; line.GenPosition(false, s, GeodesicLine::REDUCEDLENGTH | GeodesicLine::GEODESICSCALE, t, t, t, t, m13, M13, M31, t); real // See "Algorithms for geodesics", eqs. 31, 32, 33. m23 = m13 * M12 - m12 * M13, // when m12 -> eps, (1 - M12 * M21) -> eps^2, I suppose. M23 = M13 * M21 + (m12 == 0 ? 0 : (1 - M12 * M21) * m13/m12), M32 = M31 * M12 + (m13 == 0 ? 0 : (1 - M13 * M31) * m12/m13); real ds = semi ? m23 * M23 / (1 - M23*M32) : -m23 / M32; s = s + ds; if (!(fabs(ds) > _tol)) break; } return s; } Math::real Intersect::conjdist(Math::real azi, Math::real* ds, Math::real* sp, Math::real* sm) const { GeodesicLine line = _geod.Line(0, 0, azi, LineCaps); real s = ConjugateDist(line, _d, false); if (ds) { XPoint p = Basic(line, line, XPoint(s/2, -3*s/2)); if (sp) *sp = p.x; if (sm) *sm = p.y; *ds = p.Dist() - 2*s; } return s; } Math::real Intersect::distoblique(Math::real* azi, Math::real* sp, Math::real* sm) const { if (_f == 0) { if (azi) *azi = 45; if (sp) *sp = 0.5; if (sm) *sm = -1.5; return _d; } real sa, sb, azi0 = 46, ds0, s0 = conjdist(azi0, &ds0, &sa, &sb), azi1 = 44, ds1, s1 = conjdist(azi1, &ds1, &sa, &sb), azix = azi1, dsx = fabs(ds1), sx = s1, sax = sa, sbx = sb; // find ds(azi) = 0 by secant method (void) s0; for (int i = 0; i < 10 && ds1 != ds0; ++i) { real azin = (azi0*ds1-azi1*ds0)/(ds1-ds0); azi0 = azi1; s0 = s1; ds0 = ds1; azi1 = azin; s1 = conjdist(azi1, &ds1, &sa, &sb); if (fabs(ds1) < dsx) { azix = azi1, sx = s1, dsx = fabs(ds1); sax = sa; sbx = sb; if (ds1 == 0) break; } } if (azi) *azi = azix; if (sp) *sp = sax; if (sm) *sm = sbx; return sx; } Intersect::XPoint Intersect::fixcoincident(const Intersect::XPoint& p0, const Intersect::XPoint& p) { return fixcoincident(p0, p, p.c); } Intersect::XPoint Intersect::fixcoincident(const Intersect::XPoint& p0, const Intersect::XPoint& p, int c) { if (c == 0) return p; // eqs : [p0x-p1x = -c*(p0y-p1y), p1x = px+s, p1y = py+c*s]$ // sol : solve(eqs,[s,p1x,p1y]); // => // sol:[ s = ((p0x+c*p0y) - (px+c*py))/2, // p1x = px + ((p0x+c*p0y) - (px+c*py))/2, // p1y = py + c * ((p0x+c*p0y) - (px+c*py))/2 // ]; real s = ((p0.x + c * p0.y) - (p.x + c * p.y))/2; return p + XPoint(s, c*s); } Intersect::XPoint Intersect::fixsegment(Math::real sx, Math::real sy, const Intersect::XPoint& p) { if (p.c == 0) return p; // eq0: [p1x = px+s, p1y = py+f*s]$ // solx0:linsolve(cons(p1x=0 ,eq0),[s,p1x,p1y]); // solx1:linsolve(cons(p1x=sx,eq0),[s,p1x,p1y]); // soly0:linsolve(cons(p1y=0 ,eq0),[s,p1x,p1y]); // soly1:linsolve(cons(p1y=sy,eq0),[s,p1x,p1y]); // solx0:[s = -px ,p1x = 0 ,p1y = py-f*px ]; // solx1:[s = sx-px ,p1x = sx,p1y = py-f*(px-sx)]; // soly0:[s = -f*py ,p1x = px-f*py ,p1y = 0 ]; // soly1:[s = f*(sy-py),p1x = px-f*(py-sy),p1y = sy]; real pya = p.y - p.c * p.x, sa = -p.x, // pxa = 0 pyb = p.y - p.c * (p.x-sx), sb = sx - p.x, // pxb = sx pxc = p.x - p.c * p.y, sc = p.c * -p.y, // pyc = 0 pxd = p.x - p.c * (p.y-sy), sd = p.c * (sy - p.y); // pyd = sy bool ga = 0 <= pya && pya <= sy, gb = 0 <= pyb && pyb <= sy, gc = 0 <= pxc && pxc <= sx, gd = 0 <= pxd && pxd <= sx; real s; // Test opposite sides of the rectangle first if (ga && gb) s = (sa + sb) / 2; else if (gc && gd) s = (sc + sd) / 2; else if (ga && gc) s = (sa + sc) / 2; else if (ga && gd) s = (sa + sd) / 2; else if (gb && gc) s = (sb + sc) / 2; else if (gb && gd) s = (sb + sd) / 2; else { // Intersection not within segments; place intersection in smallest gap. if (p.c > 0) { // distance from p to corner p0 is abs( (px - py) - (p0x - p0y) ) // consider corners p0 = [0, sy] and p0 = [sx, 0] if (fabs((p.x - p.y) + sy) < fabs((p.x - p.y) - sx)) s = (sy - (p.x + p.y))/2; else s = (sx - (p.x + p.y))/2; } else { // distance from p to corner p0 is abs( (px + p.y) - (p0x + p0y) ) // consider corners p0 = [0, 0] and p0 = [sx, sy] if (fabs(p.x + p.y) < fabs((p.x + p.y) - (sx + sy))) s = (0 - (p.x - p.y))/2; else s = ((sx - sy) - (p.x - p.y))/2; } } return p + XPoint(s, p.c*s); } } geosphere/src/GeodesicLineExact.h0000644000176200001440000007161315147425256016535 0ustar liggesusers/** * \file GeodesicLineExact.hpp * \brief Header for GeographicLib::GeodesicLineExact class * * Copyright (c) Charles Karney (2012-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_GEODESICLINEEXACT_HPP) #define GEOGRAPHICLIB_GEODESICLINEEXACT_HPP 1 #include "Constants.h" #include "GeodesicExact.h" #include "EllipticFunction.h" #include #if defined(_MSC_VER) // Squelch warnings about dll vs vector # pragma warning (push) # pragma warning (disable: 4251) #endif namespace GeographicLib { /** * \brief An exact geodesic line * * GeodesicLineExact facilitates the determination of a series of points on a * single geodesic. This is a companion to the GeodesicExact class. For * additional information on this class see the documentation on the * GeodesicLine class. * * Example of use: * \include example-GeodesicLineExact.cpp * * GeodSolve is a command-line utility * providing access to the functionality of GeodesicExact and * GeodesicLineExact (via the -E option). **********************************************************************/ class GEOGRAPHICLIB_EXPORT GeodesicLineExact { private: typedef Math::real real; friend class GeodesicExact; friend class GeodesicLine; int _nC4; real tiny_; real _lat1, _lon1, _azi1; real _a, _f, _b, _c2, _f1, _e2, _salp0, _calp0, _k2, _salp1, _calp1, _ssig1, _csig1, _dn1, _stau1, _ctau1, _somg1, _comg1, _cchi1, _aA4, _eE0, _dD0, _hH0, _eE1, _dD1, _hH1; real _a13, _s13; real _bB41; std::vector _cC4a; EllipticFunction _eE; unsigned _caps; void LineInit(const GeodesicExact& g, real lat1, real lon1, real azi1, real salp1, real calp1, unsigned caps); GeodesicLineExact(const GeodesicExact& g, real lat1, real lon1, real azi1, real salp1, real calp1, unsigned caps, bool arcmode, real s13_a13); static constexpr unsigned CAP_NONE = GeodesicExact::CAP_NONE; static constexpr unsigned CAP_E = GeodesicExact::CAP_E; static constexpr unsigned CAP_D = GeodesicExact::CAP_D; static constexpr unsigned CAP_H = GeodesicExact::CAP_H; static constexpr unsigned CAP_C4 = GeodesicExact::CAP_C4; static constexpr unsigned CAP_ALL = GeodesicExact::CAP_ALL; static constexpr unsigned CAP_MASK = GeodesicExact::CAP_MASK; static constexpr unsigned OUT_ALL = GeodesicExact::OUT_ALL; static constexpr unsigned OUT_MASK = GeodesicExact::OUT_MASK; public: /** * Bit masks for what calculations to do. They signify to the * GeodesicLineExact::GeodesicLineExact constructor and to * GeodesicExact::Line what capabilities should be included in the * GeodesicLineExact object. This is merely a duplication of * GeodesicExact::mask. **********************************************************************/ enum mask { /** * No capabilities, no output. * @hideinitializer **********************************************************************/ NONE = GeodesicExact::NONE, /** * Calculate latitude \e lat2. (It's not necessary to include this as a * capability to GeodesicLineExact because this is included by default.) * @hideinitializer **********************************************************************/ LATITUDE = GeodesicExact::LATITUDE, /** * Calculate longitude \e lon2. * @hideinitializer **********************************************************************/ LONGITUDE = GeodesicExact::LONGITUDE, /** * Calculate azimuths \e azi1 and \e azi2. (It's not necessary to * include this as a capability to GeodesicLineExact because this is * included by default.) * @hideinitializer **********************************************************************/ AZIMUTH = GeodesicExact::AZIMUTH, /** * Calculate distance \e s12. * @hideinitializer **********************************************************************/ DISTANCE = GeodesicExact::DISTANCE, /** * A combination of the common capabilities: GeodesicLineExact::LATITUDE, * GeodesicLineExact::LONGITUDE, GeodesicLineExact::AZIMUTH, * GeodesicLineExact::DISTANCE. * @hideinitializer **********************************************************************/ STANDARD = GeodesicExact::STANDARD, /** * Allow distance \e s12 to be used as input in the direct geodesic * problem. * @hideinitializer **********************************************************************/ DISTANCE_IN = GeodesicExact::DISTANCE_IN, /** * Calculate reduced length \e m12. * @hideinitializer **********************************************************************/ REDUCEDLENGTH = GeodesicExact::REDUCEDLENGTH, /** * Calculate geodesic scales \e M12 and \e M21. * @hideinitializer **********************************************************************/ GEODESICSCALE = GeodesicExact::GEODESICSCALE, /** * Calculate area \e S12. * @hideinitializer **********************************************************************/ AREA = GeodesicExact::AREA, /** * Unroll \e lon2 in the direct calculation. * @hideinitializer **********************************************************************/ LONG_UNROLL = GeodesicExact::LONG_UNROLL, /** * All capabilities, calculate everything. (LONG_UNROLL is not * included in this mask.) * @hideinitializer **********************************************************************/ ALL = GeodesicExact::ALL, }; /** * Typedef for the base class implementing geodesics. **********************************************************************/ typedef GeodesicExact BaseClass; /** \name Constructors **********************************************************************/ ///@{ /** * Constructor for a geodesic line staring at latitude \e lat1, longitude * \e lon1, and azimuth \e azi1 (all in degrees). * * @param[in] g A GeodesicExact object used to compute the necessary * information about the GeodesicLineExact. * @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 GeodesicLineExact::mask values * specifying the capabilities the GeodesicLineExact object should * possess, i.e., which quantities can be returned in calls to * GeodesicLine::Position. * * \e lat1 should be in the range [−90°, 90°]. * * The GeodesicLineExact::mask values are * - \e caps |= GeodesicLineExact::LATITUDE for the latitude \e lat2; this * is added automatically; * - \e caps |= GeodesicLineExact::LONGITUDE for the latitude \e lon2; * - \e caps |= GeodesicLineExact::AZIMUTH for the latitude \e azi2; this * is added automatically; * - \e caps |= GeodesicLineExact::DISTANCE for the distance \e s12; * - \e caps |= GeodesicLineExact::REDUCEDLENGTH for the reduced length \e * m12; * - \e caps |= GeodesicLineExact::GEODESICSCALE for the geodesic scales \e * M12 and \e M21; * - \e caps |= GeodesicLineExact::AREA for the area \e S12; * - \e caps |= GeodesicLineExact::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; * - \e caps |= GeodesicLineExact::ALL for all of the above. * . * The default value of \e caps is GeodesicLineExact::ALL. * * If the point is at a pole, the azimuth is defined by keeping \e lon1 * fixed, writing \e lat1 = ±(90° − ε), and taking * the limit ε → 0+. **********************************************************************/ GeodesicLineExact(const GeodesicExact& g, real lat1, real lon1, real azi1, unsigned caps = ALL); /** * A default constructor. If GeodesicLineExact::Position is called on the * resulting object, it returns immediately (without doing any * calculations). The object can be set with a call to * GeodesicExact::Line. Use Init() to test whether object is still in this * uninitialized state. **********************************************************************/ GeodesicLineExact() : _caps(0U) {} ///@} /** \name Position in terms of distance **********************************************************************/ ///@{ /** * Compute the position of point 2 which is a distance \e s12 (meters) * from point 1. * * @param[in] s12 distance from point 1 to point 2 (meters); it can be * signed. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees); requires that the * GeodesicLineExact object was constructed with \e caps |= * GeodesicLineExact::LONGITUDE. * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] m12 reduced length of geodesic (meters); requires that the * GeodesicLineExact object was constructed with \e caps |= * GeodesicLineExact::REDUCEDLENGTH. * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless); requires that the GeodesicLineExact object was * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE. * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless); requires that the GeodesicLineExact object was * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE. * @param[out] S12 area under the geodesic (meters2); requires * that the GeodesicLineExact object was constructed with \e caps |= * GeodesicLineExact::AREA. * @return \e a12 arc length from point 1 to point 2 (degrees). * * The values of \e lon2 and \e azi2 returned are in the range * [−180°, 180°]. * * The GeodesicLineExact object \e must have been constructed with \e caps * |= GeodesicLineExact::DISTANCE_IN; otherwise Math::NaN() is returned and * no parameters are set. Requesting a value which the GeodesicLineExact * object is not capable of computing is not an error; the corresponding * argument will not be altered. * * The following functions are overloaded versions of * GeodesicLineExact::Position which omit some of the output parameters. * Note, however, that the arc length is always computed and returned as * the function value. **********************************************************************/ Math::real Position(real s12, real& lat2, real& lon2, real& azi2, real& m12, real& M12, real& M21, real& S12) const { real t; return GenPosition(false, s12, LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH | GEODESICSCALE | AREA, lat2, lon2, azi2, t, m12, M12, M21, S12); } /** * See the documentation for GeodesicLineExact::Position. **********************************************************************/ Math::real Position(real s12, real& lat2, real& lon2) const { real t; return GenPosition(false, s12, LATITUDE | LONGITUDE, lat2, lon2, t, t, t, t, t, t); } /** * See the documentation for GeodesicLineExact::Position. **********************************************************************/ Math::real Position(real s12, real& lat2, real& lon2, real& azi2) const { real t; return GenPosition(false, s12, LATITUDE | LONGITUDE | AZIMUTH, lat2, lon2, azi2, t, t, t, t, t); } /** * See the documentation for GeodesicLineExact::Position. **********************************************************************/ Math::real Position(real s12, real& lat2, real& lon2, real& azi2, real& m12) const { real t; return GenPosition(false, s12, LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH, lat2, lon2, azi2, t, m12, t, t, t); } /** * See the documentation for GeodesicLineExact::Position. **********************************************************************/ Math::real Position(real s12, real& lat2, real& lon2, real& azi2, real& M12, real& M21) const { real t; return GenPosition(false, s12, LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE, lat2, lon2, azi2, t, t, M12, M21, t); } /** * See the documentation for GeodesicLineExact::Position. **********************************************************************/ Math::real Position(real s12, real& lat2, real& lon2, real& azi2, real& m12, real& M12, real& M21) const { real t; return GenPosition(false, s12, LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH | GEODESICSCALE, lat2, lon2, azi2, t, m12, M12, M21, t); } ///@} /** \name Position in terms of arc length **********************************************************************/ ///@{ /** * Compute the position of point 2 which is an arc length \e a12 (degrees) * from point 1. * * @param[in] a12 arc length from point 1 to point 2 (degrees); it can * be signed. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees); requires that the * GeodesicLineExact object was constructed with \e caps |= * GeodesicLineExact::LONGITUDE. * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] s12 distance from point 1 to point 2 (meters); requires * that the GeodesicLineExact object was constructed with \e caps |= * GeodesicLineExact::DISTANCE. * @param[out] m12 reduced length of geodesic (meters); requires that the * GeodesicLineExact object was constructed with \e caps |= * GeodesicLineExact::REDUCEDLENGTH. * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless); requires that the GeodesicLineExact object was * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE. * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless); requires that the GeodesicLineExact object was * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE. * @param[out] S12 area under the geodesic (meters2); requires * that the GeodesicLineExact object was constructed with \e caps |= * GeodesicLineExact::AREA. * * The values of \e lon2 and \e azi2 returned are in the range * [−180°, 180°]. * * Requesting a value which the GeodesicLineExact object is not capable of * computing is not an error; the corresponding argument will not be * altered. * * The following functions are overloaded versions of * GeodesicLineExact::ArcPosition which omit some of the output parameters. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21, real& S12) const { GenPosition(true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | REDUCEDLENGTH | GEODESICSCALE | AREA, lat2, lon2, azi2, s12, m12, M12, M21, S12); } /** * See the documentation for GeodesicLineExact::ArcPosition. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2) const { real t; GenPosition(true, a12, LATITUDE | LONGITUDE, lat2, lon2, t, t, t, t, t, t); } /** * See the documentation for GeodesicLineExact::ArcPosition. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2, real& azi2) const { real t; GenPosition(true, a12, LATITUDE | LONGITUDE | AZIMUTH, lat2, lon2, azi2, t, t, t, t, t); } /** * See the documentation for GeodesicLineExact::ArcPosition. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2, real& azi2, real& s12) const { real t; GenPosition(true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE, lat2, lon2, azi2, s12, t, t, t, t); } /** * See the documentation for GeodesicLineExact::ArcPosition. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2, real& azi2, real& s12, real& m12) const { real t; GenPosition(true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | REDUCEDLENGTH, lat2, lon2, azi2, s12, m12, t, t, t); } /** * See the documentation for GeodesicLineExact::ArcPosition. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2, real& azi2, real& s12, real& M12, real& M21) const { real t; GenPosition(true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | GEODESICSCALE, lat2, lon2, azi2, s12, t, M12, M21, t); } /** * See the documentation for GeodesicLineExact::ArcPosition. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21) const { real t; GenPosition(true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | REDUCEDLENGTH | GEODESICSCALE, lat2, lon2, azi2, s12, m12, M12, M21, t); } ///@} /** \name The general position function. **********************************************************************/ ///@{ /** * The general position function. GeodesicLineExact::Position and * GeodesicLineExact::ArcPosition are defined in terms of this function. * * @param[in] arcmode boolean flag determining the meaning of the second * parameter; if \e arcmode is false, then the GeodesicLineExact object * must have been constructed with \e caps |= * GeodesicLineExact::DISTANCE_IN. * @param[in] s12_a12 if \e arcmode is false, this is the distance between * point 1 and point 2 (meters); otherwise it is the arc length between * point 1 and point 2 (degrees); it can be signed. * @param[in] outmask a bitor'ed combination of GeodesicLineExact::mask * values specifying which of the following parameters should be set. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees); requires that the * GeodesicLineExact object was constructed with \e caps |= * GeodesicLineExact::LONGITUDE. * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] s12 distance from point 1 to point 2 (meters); requires * that the GeodesicLineExact object was constructed with \e caps |= * GeodesicLineExact::DISTANCE. * @param[out] m12 reduced length of geodesic (meters); requires that the * GeodesicLineExact object was constructed with \e caps |= * GeodesicLineExact::REDUCEDLENGTH. * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless); requires that the GeodesicLineExact object was * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE. * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless); requires that the GeodesicLineExact object was * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE. * @param[out] S12 area under the geodesic (meters2); requires * that the GeodesicLineExact object was constructed with \e caps |= * GeodesicLineExact::AREA. * @return \e a12 arc length from point 1 to point 2 (degrees). * * The GeodesicLineExact::mask values possible for \e outmask are * - \e outmask |= GeodesicLineExact::LATITUDE for the latitude \e lat2; * - \e outmask |= GeodesicLineExact::LONGITUDE for the latitude \e lon2; * - \e outmask |= GeodesicLineExact::AZIMUTH for the latitude \e azi2; * - \e outmask |= GeodesicLineExact::DISTANCE for the distance \e s12; * - \e outmask |= GeodesicLineExact::REDUCEDLENGTH for the reduced length * \e m12; * - \e outmask |= GeodesicLineExact::GEODESICSCALE for the geodesic scales * \e M12 and \e M21; * - \e outmask |= GeodesicLineExact::AREA for the area \e S12; * - \e outmask |= GeodesicLineExact::ALL for all of the above; * - \e outmask |= GeodesicLineExact::LONG_UNROLL to unroll \e lon2 instead * of wrapping it into the range [−180°, 180°]. * . * Requesting a value which the GeodesicLineExact object is not capable of * computing is not an error; the corresponding argument will not be * altered. Note, however, that the arc length is always computed and * returned as the function value. * * With the GeodesicLineExact::LONG_UNROLL bit set, the quantity \e lon2 * − \e lon1 indicates how many times and in what sense the geodesic * encircles the ellipsoid. **********************************************************************/ Math::real GenPosition(bool arcmode, real s12_a12, unsigned outmask, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21, real& S12) const; ///@} /** \name Setting point 3 **********************************************************************/ ///@{ /** * Specify position of point 3 in terms of distance. * * @param[in] s13 the distance from point 1 to point 3 (meters); it * can be negative. * * This is only useful if the GeodesicLineExact object has been constructed * with \e caps |= GeodesicLineExact::DISTANCE_IN. **********************************************************************/ void SetDistance(real s13); /** * Specify position of point 3 in terms of arc length. * * @param[in] a13 the arc length from point 1 to point 3 (degrees); it * can be negative. * * The distance \e s13 is only set if the GeodesicLineExact object has been * constructed with \e caps |= GeodesicLineExact::DISTANCE. **********************************************************************/ void SetArc(real a13); /** * Specify position of point 3 in terms of either distance or arc length. * * @param[in] arcmode boolean flag determining the meaning of the second * parameter; if \e arcmode is false, then the GeodesicLineExact object * must have been constructed with \e caps |= * GeodesicLineExact::DISTANCE_IN. * @param[in] s13_a13 if \e arcmode is false, this is the distance from * point 1 to point 3 (meters); otherwise it is the arc length from * point 1 to point 3 (degrees); it can be negative. **********************************************************************/ void GenSetDistance(bool arcmode, real s13_a13); /** \name Inspector functions **********************************************************************/ ///@{ /** * @return true if the object has been initialized. **********************************************************************/ bool Init() const { return _caps != 0U; } /** * @return \e lat1 the latitude of point 1 (degrees). **********************************************************************/ Math::real Latitude() const { return Init() ? _lat1 : Math::NaN(); } /** * @return \e lon1 the longitude of point 1 (degrees). **********************************************************************/ Math::real Longitude() const { return Init() ? _lon1 : Math::NaN(); } /** * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1. **********************************************************************/ Math::real Azimuth() const { return Init() ? _azi1 : Math::NaN(); } /** * The sine and cosine of \e azi1. * * @param[out] sazi1 the sine of \e azi1. * @param[out] cazi1 the cosine of \e azi1. **********************************************************************/ void Azimuth(real& sazi1, real& cazi1) const { if (Init()) { sazi1 = _salp1; cazi1 = _calp1; } } /** * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses * the equator in a northward direction. * * The result lies in [−90°, 90°]. **********************************************************************/ Math::real EquatorialAzimuth() const { return Init() ? Math::atan2d(_salp0, _calp0) : Math::NaN(); } /** * The sine and cosine of \e azi0. * * @param[out] sazi0 the sine of \e azi0. * @param[out] cazi0 the cosine of \e azi0. **********************************************************************/ void EquatorialAzimuth(real& sazi0, real& cazi0) const { if (Init()) { sazi0 = _salp0; cazi0 = _calp0; } } /** * @return \e a1 the arc length (degrees) between the northward equatorial * crossing and point 1. * * The result lies in [−180°, 180°]. **********************************************************************/ Math::real EquatorialArc() const { using std::atan2; return Init() ? atan2(_ssig1, _csig1) / Math::degree() : Math::NaN(); } /** * @return \e a the equatorial radius of the ellipsoid (meters). This is * the value inherited from the GeodesicExact object used in the * constructor. **********************************************************************/ Math::real EquatorialRadius() const { return Init() ? _a : Math::NaN(); } /** * @return \e f the flattening of the ellipsoid. This is the value * inherited from the GeodesicExact object used in the constructor. **********************************************************************/ Math::real Flattening() const { return Init() ? _f : Math::NaN(); } /** * @return \e caps the computational capabilities that this object was * constructed with. LATITUDE and AZIMUTH are always included. **********************************************************************/ unsigned Capabilities() const { return _caps; } /** * Test what capabilities are available. * * @param[in] testcaps a set of bitor'ed GeodesicLineExact::mask values. * @return true if the GeodesicLineExact object has all these capabilities. **********************************************************************/ bool Capabilities(unsigned testcaps) const { testcaps &= OUT_ALL; return (_caps & testcaps) == testcaps; } /** * The distance or arc length to point 3. * * @param[in] arcmode boolean flag determining the meaning of returned * value. * @return \e s13 if \e arcmode is false; \e a13 if \e arcmode is true. **********************************************************************/ Math::real GenDistance(bool arcmode) const { return Init() ? (arcmode ? _a13 : _s13) : Math::NaN(); } /** * @return \e s13, the distance to point 3 (meters). **********************************************************************/ Math::real Distance() const { return GenDistance(false); } /** * @return \e a13, the arc length to point 3 (degrees). **********************************************************************/ Math::real Arc() const { return GenDistance(true); } ///@} }; } // namespace GeographicLib #if defined(_MSC_VER) # pragma warning (pop) #endif #endif // GEOGRAPHICLIB_GEODESICLINEEXACT_HPP geosphere/src/RcppExports.cpp0000644000176200001440000001334615147425256016041 0ustar liggesusers// Generated by using Rcpp::compileAttributes() -> do not edit by hand // Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 #include using namespace Rcpp; #ifdef RCPP_USE_GLOBAL_ROSTREAM Rcpp::Rostream& Rcpp::Rcout = Rcpp::Rcpp_cout_get(); Rcpp::Rostream& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get(); #endif // geodesic std::vector geodesic(std::vector lon1, std::vector lat1, std::vector azi1, std::vector s12, double a, double f); RcppExport SEXP _geosphere_geodesic(SEXP lon1SEXP, SEXP lat1SEXP, SEXP azi1SEXP, SEXP s12SEXP, SEXP aSEXP, SEXP fSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::vector >::type lon1(lon1SEXP); Rcpp::traits::input_parameter< std::vector >::type lat1(lat1SEXP); Rcpp::traits::input_parameter< std::vector >::type azi1(azi1SEXP); Rcpp::traits::input_parameter< std::vector >::type s12(s12SEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type f(fSEXP); rcpp_result_gen = Rcpp::wrap(geodesic(lon1, lat1, azi1, s12, a, f)); return rcpp_result_gen; END_RCPP } // inversegeodesic std::vector inversegeodesic(std::vector lon1, std::vector lat1, std::vector lon2, std::vector lat2, double a, double f); RcppExport SEXP _geosphere_inversegeodesic(SEXP lon1SEXP, SEXP lat1SEXP, SEXP lon2SEXP, SEXP lat2SEXP, SEXP aSEXP, SEXP fSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::vector >::type lon1(lon1SEXP); Rcpp::traits::input_parameter< std::vector >::type lat1(lat1SEXP); Rcpp::traits::input_parameter< std::vector >::type lon2(lon2SEXP); Rcpp::traits::input_parameter< std::vector >::type lat2(lat2SEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type f(fSEXP); rcpp_result_gen = Rcpp::wrap(inversegeodesic(lon1, lat1, lon2, lat2, a, f)); return rcpp_result_gen; END_RCPP } // polygonarea std::vector polygonarea(std::vector lon, std::vector lat, double a, double f); RcppExport SEXP _geosphere_polygonarea(SEXP lonSEXP, SEXP latSEXP, SEXP aSEXP, SEXP fSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::vector >::type lon(lonSEXP); Rcpp::traits::input_parameter< std::vector >::type lat(latSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type f(fSEXP); rcpp_result_gen = Rcpp::wrap(polygonarea(lon, lat, a, f)); return rcpp_result_gen; END_RCPP } // geodesic_nodes std::vector> geodesic_nodes(double lon1, double lat1, double lon2, double lat2, size_t n, double distance, bool arc, double a, double f); RcppExport SEXP _geosphere_geodesic_nodes(SEXP lon1SEXP, SEXP lat1SEXP, SEXP lon2SEXP, SEXP lat2SEXP, SEXP nSEXP, SEXP distanceSEXP, SEXP arcSEXP, SEXP aSEXP, SEXP fSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< double >::type lon1(lon1SEXP); Rcpp::traits::input_parameter< double >::type lat1(lat1SEXP); Rcpp::traits::input_parameter< double >::type lon2(lon2SEXP); Rcpp::traits::input_parameter< double >::type lat2(lat2SEXP); Rcpp::traits::input_parameter< size_t >::type n(nSEXP); Rcpp::traits::input_parameter< double >::type distance(distanceSEXP); Rcpp::traits::input_parameter< bool >::type arc(arcSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type f(fSEXP); rcpp_result_gen = Rcpp::wrap(geodesic_nodes(lon1, lat1, lon2, lat2, n, distance, arc, a, f)); return rcpp_result_gen; END_RCPP } // osgb std::vector osgb(std::vector x, std::vector y, std::string p, bool geo); RcppExport SEXP _geosphere_osgb(SEXP xSEXP, SEXP ySEXP, SEXP pSEXP, SEXP geoSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::vector >::type x(xSEXP); Rcpp::traits::input_parameter< std::vector >::type y(ySEXP); Rcpp::traits::input_parameter< std::string >::type p(pSEXP); Rcpp::traits::input_parameter< bool >::type geo(geoSEXP); rcpp_result_gen = Rcpp::wrap(osgb(x, y, p, geo)); return rcpp_result_gen; END_RCPP } // osgb_rev std::vector osgb_rev(std::vector g, int prec, bool centerp); RcppExport SEXP _geosphere_osgb_rev(SEXP gSEXP, SEXP precSEXP, SEXP centerpSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::vector >::type g(gSEXP); Rcpp::traits::input_parameter< int >::type prec(precSEXP); Rcpp::traits::input_parameter< bool >::type centerp(centerpSEXP); rcpp_result_gen = Rcpp::wrap(osgb_rev(g, prec, centerp)); return rcpp_result_gen; END_RCPP } static const R_CallMethodDef CallEntries[] = { {"_geosphere_geodesic", (DL_FUNC) &_geosphere_geodesic, 6}, {"_geosphere_inversegeodesic", (DL_FUNC) &_geosphere_inversegeodesic, 6}, {"_geosphere_polygonarea", (DL_FUNC) &_geosphere_polygonarea, 4}, {"_geosphere_geodesic_nodes", (DL_FUNC) &_geosphere_geodesic_nodes, 9}, {"_geosphere_osgb", (DL_FUNC) &_geosphere_osgb, 4}, {"_geosphere_osgb_rev", (DL_FUNC) &_geosphere_osgb_rev, 3}, {NULL, NULL, 0} }; RcppExport void R_init_geosphere(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } geosphere/src/EllipticFunction.h0000644000176200001440000006725115147425256016474 0ustar liggesusers/** * \file EllipticFunction.hpp * \brief Header for GeographicLib::EllipticFunction class * * Copyright (c) Charles Karney (2008-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP) #define GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP 1 #include "Constants.h" namespace GeographicLib { /** * \brief Elliptic integrals and functions * * This provides the elliptic functions and integrals needed for Ellipsoid, * GeodesicExact, and TransverseMercatorExact. Two categories of function * are provided: * - \e static functions to compute symmetric elliptic integrals * (https://dlmf.nist.gov/19.16.i) * - \e member functions to compute Legrendre's elliptic * integrals (https://dlmf.nist.gov/19.2.ii) and the * Jacobi elliptic functions (https://dlmf.nist.gov/22.2). * . * In the latter case, an object is constructed giving the modulus \e k (and * optionally the parameter α2). The modulus is always * passed as its square k2 which allows \e k to be pure * imaginary (k2 < 0). (Confusingly, Abramowitz and * Stegun call \e m = k2 the "parameter" and \e n = * α2 the "characteristic".) * * In geodesic applications, it is convenient to separate the incomplete * integrals into secular and periodic components, e.g., * \f[ * E(\phi, k) = (2 E(k) / \pi) [ \phi + \delta E(\phi, k) ] * \f] * where δ\e E(φ, \e k) is an odd periodic function with period * π. * * The computation of the elliptic integrals uses the algorithms given in * - B. C. Carlson, * Computation of real or * complex elliptic integrals, Numerical Algorithms 10, 13--26 (1995); * preprint. * . * with the additional optimizations given in https://dlmf.nist.gov/19.36.i. * The computation of the Jacobi elliptic functions uses the algorithm given * in * - R. Bulirsch, * Numerical Calculation of * Elliptic Integrals and Elliptic Functions, Numericshe Mathematik 7, * 78--90 (1965). * . * The notation follows https://dlmf.nist.gov/19 and https://dlmf.nist.gov/22 * * Example of use: * \include example-EllipticFunction.cpp **********************************************************************/ class GEOGRAPHICLIB_EXPORT EllipticFunction { private: typedef Math::real real; enum { num_ = 25 }; // Max depth required for sncndn; probably 5 is enough. real _k2, _kp2, _alpha2, _alphap2, _eps; real _kKc, _eEc, _dDc, _pPic, _gGc, _hHc; public: /** \name Constructor **********************************************************************/ ///@{ /** * Constructor specifying the modulus and parameter. * * @param[in] k2 the square of the modulus k2. * k2 must lie in (−∞, 1]. * @param[in] alpha2 the parameter α2. * α2 must lie in (−∞, 1]. * @exception GeographicErr if \e k2 or \e alpha2 is out of its legal * range. * * If only elliptic integrals of the first and second kinds are needed, * then set α2 = 0 (the default value); in this case, we * have Π(φ, 0, \e k) = \e F(φ, \e k), \e G(φ, 0, \e k) = \e * E(φ, \e k), and \e H(φ, 0, \e k) = \e F(φ, \e k) - \e * D(φ, \e k). **********************************************************************/ EllipticFunction(real k2 = 0, real alpha2 = 0) { Reset(k2, alpha2); } /** * Constructor specifying the modulus and parameter and their complements. * * @param[in] k2 the square of the modulus k2. * k2 must lie in (−∞, 1]. * @param[in] alpha2 the parameter α2. * α2 must lie in (−∞, 1]. * @param[in] kp2 the complementary modulus squared k'2 = * 1 − k2. This must lie in [0, ∞). * @param[in] alphap2 the complementary parameter α'2 = 1 * − α2. This must lie in [0, ∞). * @exception GeographicErr if \e k2, \e alpha2, \e kp2, or \e alphap2 is * out of its legal range. * * The arguments must satisfy \e k2 + \e kp2 = 1 and \e alpha2 + \e alphap2 * = 1. (No checking is done that these conditions are met.) This * constructor is provided to enable accuracy to be maintained, e.g., when * \e k is very close to unity. **********************************************************************/ EllipticFunction(real k2, real alpha2, real kp2, real alphap2) { Reset(k2, alpha2, kp2, alphap2); } /** * Reset the modulus and parameter. * * @param[in] k2 the new value of square of the modulus * k2 which must lie in (−∞, ]. * done.) * @param[in] alpha2 the new value of parameter α2. * α2 must lie in (−∞, 1]. * @exception GeographicErr if \e k2 or \e alpha2 is out of its legal * range. **********************************************************************/ void Reset(real k2 = 0, real alpha2 = 0) { Reset(k2, alpha2, 1 - k2, 1 - alpha2); } /** * Reset the modulus and parameter supplying also their complements. * * @param[in] k2 the square of the modulus k2. * k2 must lie in (−∞, 1]. * @param[in] alpha2 the parameter α2. * α2 must lie in (−∞, 1]. * @param[in] kp2 the complementary modulus squared k'2 = * 1 − k2. This must lie in [0, ∞). * @param[in] alphap2 the complementary parameter α'2 = 1 * − α2. This must lie in [0, ∞). * @exception GeographicErr if \e k2, \e alpha2, \e kp2, or \e alphap2 is * out of its legal range. * * The arguments must satisfy \e k2 + \e kp2 = 1 and \e alpha2 + \e alphap2 * = 1. (No checking is done that these conditions are met.) This * constructor is provided to enable accuracy to be maintained, e.g., when * is very small. **********************************************************************/ void Reset(real k2, real alpha2, real kp2, real alphap2); ///@} /** \name Inspector functions. **********************************************************************/ ///@{ /** * @return the square of the modulus k2. **********************************************************************/ Math::real k2() const { return _k2; } /** * @return the square of the complementary modulus k'2 = * 1 − k2. **********************************************************************/ Math::real kp2() const { return _kp2; } /** * @return the parameter α2. **********************************************************************/ Math::real alpha2() const { return _alpha2; } /** * @return the complementary parameter α'2 = 1 − * α2. **********************************************************************/ Math::real alphap2() const { return _alphap2; } ///@} /** \name Complete elliptic integrals. **********************************************************************/ ///@{ /** * The complete integral of the first kind. * * @return \e K(\e k). * * \e K(\e k) is defined in https://dlmf.nist.gov/19.2.E4 * \f[ * K(k) = \int_0^{\pi/2} \frac1{\sqrt{1-k^2\sin^2\phi}}\,d\phi. * \f] **********************************************************************/ Math::real K() const { return _kKc; } /** * The complete integral of the second kind. * * @return \e E(\e k). * * \e E(\e k) is defined in https://dlmf.nist.gov/19.2.E5 * \f[ * E(k) = \int_0^{\pi/2} \sqrt{1-k^2\sin^2\phi}\,d\phi. * \f] **********************************************************************/ Math::real E() const { return _eEc; } /** * Jahnke's complete integral. * * @return \e D(\e k). * * \e D(\e k) is defined in https://dlmf.nist.gov/19.2.E6 * \f[ * D(k) = * \int_0^{\pi/2} \frac{\sin^2\phi}{\sqrt{1-k^2\sin^2\phi}}\,d\phi. * \f] **********************************************************************/ Math::real D() const { return _dDc; } /** * The difference between the complete integrals of the first and second * kinds. * * @return \e K(\e k) − \e E(\e k). **********************************************************************/ Math::real KE() const { return _k2 * _dDc; } /** * The complete integral of the third kind. * * @return Π(α2, \e k). * * Π(α2, \e k) is defined in * https://dlmf.nist.gov/19.2.E7 * \f[ * \Pi(\alpha^2, k) = \int_0^{\pi/2} * \frac1{\sqrt{1-k^2\sin^2\phi}(1 - \alpha^2\sin^2\phi)}\,d\phi. * \f] **********************************************************************/ Math::real Pi() const { return _pPic; } /** * Legendre's complete geodesic longitude integral. * * @return \e G(α2, \e k). * * \e G(α2, \e k) is given by * \f[ * G(\alpha^2, k) = \int_0^{\pi/2} * \frac{\sqrt{1-k^2\sin^2\phi}}{1 - \alpha^2\sin^2\phi}\,d\phi. * \f] **********************************************************************/ Math::real G() const { return _gGc; } /** * Cayley's complete geodesic longitude difference integral. * * @return \e H(α2, \e k). * * \e H(α2, \e k) is given by * \f[ * H(\alpha^2, k) = \int_0^{\pi/2} * \frac{\cos^2\phi}{(1-\alpha^2\sin^2\phi)\sqrt{1-k^2\sin^2\phi}} * \,d\phi. * \f] **********************************************************************/ Math::real H() const { return _hHc; } ///@} /** \name Incomplete elliptic integrals. **********************************************************************/ ///@{ /** * The incomplete integral of the first kind. * * @param[in] phi * @return \e F(φ, \e k). * * \e F(φ, \e k) is defined in https://dlmf.nist.gov/19.2.E4 * \f[ * F(\phi, k) = \int_0^\phi \frac1{\sqrt{1-k^2\sin^2\theta}}\,d\theta. * \f] **********************************************************************/ Math::real F(real phi) const; /** * The incomplete integral of the second kind. * * @param[in] phi * @return \e E(φ, \e k). * * \e E(φ, \e k) is defined in https://dlmf.nist.gov/19.2.E5 * \f[ * E(\phi, k) = \int_0^\phi \sqrt{1-k^2\sin^2\theta}\,d\theta. * \f] **********************************************************************/ Math::real E(real phi) const; /** * The incomplete integral of the second kind with the argument given in * degrees. * * @param[in] ang in degrees. * @return \e E(π ang/180, \e k). **********************************************************************/ Math::real Ed(real ang) const; /** * The inverse of the incomplete integral of the second kind. * * @param[in] x * @return φ = E−1(\e x, \e k); i.e., the * solution of such that \e E(φ, \e k) = \e x. **********************************************************************/ Math::real Einv(real x) const; /** * The incomplete integral of the third kind. * * @param[in] phi * @return Π(φ, α2, \e k). * * Π(φ, α2, \e k) is defined in * https://dlmf.nist.gov/19.2.E7 * \f[ * \Pi(\phi, \alpha^2, k) = \int_0^\phi * \frac1{\sqrt{1-k^2\sin^2\theta}(1 - \alpha^2\sin^2\theta)}\,d\theta. * \f] **********************************************************************/ Math::real Pi(real phi) const; /** * Jahnke's incomplete elliptic integral. * * @param[in] phi * @return \e D(φ, \e k). * * \e D(φ, \e k) is defined in https://dlmf.nist.gov/19.2.E4 * \f[ * D(\phi, k) = \int_0^\phi * \frac{\sin^2\theta}{\sqrt{1-k^2\sin^2\theta}}\,d\theta. * \f] **********************************************************************/ Math::real D(real phi) const; /** * Legendre's geodesic longitude integral. * * @param[in] phi * @return \e G(φ, α2, \e k). * * \e G(φ, α2, \e k) is defined by * \f[ * \begin{align} * G(\phi, \alpha^2, k) &= * \frac{k^2}{\alpha^2} F(\phi, k) + * \biggl(1 - \frac{k^2}{\alpha^2}\biggr) \Pi(\phi, \alpha^2, k) \\ * &= \int_0^\phi * \frac{\sqrt{1-k^2\sin^2\theta}}{1 - \alpha^2\sin^2\theta}\,d\theta. * \end{align} * \f] * * Legendre expresses the longitude of a point on the geodesic in terms of * this combination of elliptic integrals in Exercices de Calcul * Intégral, Vol. 1 (1811), p. 181, * https://books.google.com/books?id=riIOAAAAQAAJ&pg=PA181. * * See \ref geodellip for the expression for the longitude in terms of this * function. **********************************************************************/ Math::real G(real phi) const; /** * Cayley's geodesic longitude difference integral. * * @param[in] phi * @return \e H(φ, α2, \e k). * * \e H(φ, α2, \e k) is defined by * \f[ * \begin{align} * H(\phi, \alpha^2, k) &= * \frac1{\alpha^2} F(\phi, k) + * \biggl(1 - \frac1{\alpha^2}\biggr) \Pi(\phi, \alpha^2, k) \\ * &= \int_0^\phi * \frac{\cos^2\theta} * {(1-\alpha^2\sin^2\theta)\sqrt{1-k^2\sin^2\theta}} * \,d\theta. * \end{align} * \f] * * Cayley expresses the longitude difference of a point on the geodesic in * terms of this combination of elliptic integrals in Phil. Mag. 40 * (1870), p. 333, https://books.google.com/books?id=Zk0wAAAAIAAJ&pg=PA333. * * See \ref geodellip for the expression for the longitude in terms of this * function. **********************************************************************/ Math::real H(real phi) const; ///@} /** \name Incomplete integrals in terms of Jacobi elliptic functions. **********************************************************************/ ///@{ /** * The incomplete integral of the first kind in terms of Jacobi elliptic * functions. * * @param[in] sn = sinφ. * @param[in] cn = cosφ. * @param[in] dn = sqrt(1 − k2 * sin2φ). * @return \e F(φ, \e k) as though φ ∈ (−π, π]. **********************************************************************/ Math::real F(real sn, real cn, real dn) const; /** * The incomplete integral of the second kind in terms of Jacobi elliptic * functions. * * @param[in] sn = sinφ. * @param[in] cn = cosφ. * @param[in] dn = sqrt(1 − k2 * sin2φ). * @return \e E(φ, \e k) as though φ ∈ (−π, π]. **********************************************************************/ Math::real E(real sn, real cn, real dn) const; /** * The incomplete integral of the third kind in terms of Jacobi elliptic * functions. * * @param[in] sn = sinφ. * @param[in] cn = cosφ. * @param[in] dn = sqrt(1 − k2 * sin2φ). * @return Π(φ, α2, \e k) as though φ ∈ * (−π, π]. **********************************************************************/ Math::real Pi(real sn, real cn, real dn) const; /** * Jahnke's incomplete elliptic integral in terms of Jacobi elliptic * functions. * * @param[in] sn = sinφ. * @param[in] cn = cosφ. * @param[in] dn = sqrt(1 − k2 * sin2φ). * @return \e D(φ, \e k) as though φ ∈ (−π, π]. **********************************************************************/ Math::real D(real sn, real cn, real dn) const; /** * Legendre's geodesic longitude integral in terms of Jacobi elliptic * functions. * * @param[in] sn = sinφ. * @param[in] cn = cosφ. * @param[in] dn = sqrt(1 − k2 * sin2φ). * @return \e G(φ, α2, \e k) as though φ ∈ * (−π, π]. **********************************************************************/ Math::real G(real sn, real cn, real dn) const; /** * Cayley's geodesic longitude difference integral in terms of Jacobi * elliptic functions. * * @param[in] sn = sinφ. * @param[in] cn = cosφ. * @param[in] dn = sqrt(1 − k2 * sin2φ). * @return \e H(φ, α2, \e k) as though φ ∈ * (−π, π]. **********************************************************************/ Math::real H(real sn, real cn, real dn) const; ///@} /** \name Periodic versions of incomplete elliptic integrals. **********************************************************************/ ///@{ /** * The periodic incomplete integral of the first kind. * * @param[in] sn = sinφ. * @param[in] cn = cosφ. * @param[in] dn = sqrt(1 − k2 * sin2φ). * @return the periodic function π \e F(φ, \e k) / (2 \e K(\e k)) - * φ. **********************************************************************/ Math::real deltaF(real sn, real cn, real dn) const; /** * The periodic incomplete integral of the second kind. * * @param[in] sn = sinφ. * @param[in] cn = cosφ. * @param[in] dn = sqrt(1 − k2 * sin2φ). * @return the periodic function π \e E(φ, \e k) / (2 \e E(\e k)) - * φ. **********************************************************************/ Math::real deltaE(real sn, real cn, real dn) const; /** * The periodic inverse of the incomplete integral of the second kind. * * @param[in] stau = sinτ. * @param[in] ctau = sinτ. * @return the periodic function E−1(τ (2 \e * E(\e k)/π), \e k) - τ. **********************************************************************/ Math::real deltaEinv(real stau, real ctau) const; /** * The periodic incomplete integral of the third kind. * * @param[in] sn = sinφ. * @param[in] cn = cosφ. * @param[in] dn = sqrt(1 − k2 * sin2φ). * @return the periodic function π Π(φ, α2, * \e k) / (2 Π(α2, \e k)) - φ. **********************************************************************/ Math::real deltaPi(real sn, real cn, real dn) const; /** * The periodic Jahnke's incomplete elliptic integral. * * @param[in] sn = sinφ. * @param[in] cn = cosφ. * @param[in] dn = sqrt(1 − k2 * sin2φ). * @return the periodic function π \e D(φ, \e k) / (2 \e D(\e k)) - * φ. **********************************************************************/ Math::real deltaD(real sn, real cn, real dn) const; /** * Legendre's periodic geodesic longitude integral. * * @param[in] sn = sinφ. * @param[in] cn = cosφ. * @param[in] dn = sqrt(1 − k2 * sin2φ). * @return the periodic function π \e G(φ, \e k) / (2 \e G(\e k)) - * φ. **********************************************************************/ Math::real deltaG(real sn, real cn, real dn) const; /** * Cayley's periodic geodesic longitude difference integral. * * @param[in] sn = sinφ. * @param[in] cn = cosφ. * @param[in] dn = sqrt(1 − k2 * sin2φ). * @return the periodic function π \e H(φ, \e k) / (2 \e H(\e k)) - * φ. **********************************************************************/ Math::real deltaH(real sn, real cn, real dn) const; ///@} /** \name Elliptic functions. **********************************************************************/ ///@{ /** * The Jacobi amplitude function. * * @param[in] x the argument. * @return the value of am(\e x, \e k) **********************************************************************/ Math::real am(real x) const; /** * The Jacobi amplitude function and associated elliptic functions. * * @param[in] x the argument. * @param[out] sn sn(\e x, \e k). * @param[out] cn cn(\e x, \e k). * @param[out] dn dn(\e x, \e k). * @return the value of am(\e x, \e k) **********************************************************************/ Math::real am(real x, real& sn, real& cn, real& dn) const; /** * The Jacobi elliptic functions. * * @param[in] x the argument. * @param[out] sn sn(\e x, \e k). * @param[out] cn cn(\e x, \e k). * @param[out] dn dn(\e x, \e k). * * For this routine k is restricted to the interval [0, 1]. **********************************************************************/ void sncndn(real x, real& sn, real& cn, real& dn) const; /** * The Δ amplitude function. * * @param[in] sn sinφ. * @param[in] cn cosφ. * @return Δ = sqrt(1 − k2 * sin2φ). **********************************************************************/ Math::real Delta(real sn, real cn) const { using std::sqrt; return sqrt(_k2 < 0 ? 1 - _k2 * sn*sn : _kp2 + _k2 * cn*cn); } ///@} /** \name Symmetric elliptic integrals. **********************************************************************/ ///@{ /** * Symmetric integral of the first kind RF. * * @param[in] x * @param[in] y * @param[in] z * @return RF(\e x, \e y, \e z). * * RF is defined in https://dlmf.nist.gov/19.16.E1 * \f[ R_F(x, y, z) = \frac12 * \int_0^\infty\frac1{\sqrt{(t + x) (t + y) (t + z)}}\, dt, \f] * where at most one of arguments, \e x, \e y, \e z, can be zero and those * arguments that are nonzero must be positive. If one of the arguments is * zero, it is more efficient to call the two-argument version of this * function with the non-zero arguments. **********************************************************************/ static real RF(real x, real y, real z); /** * Complete symmetric integral of the first kind, * RF with one argument zero. * * @param[in] x * @param[in] y * @return RF(\e x, \e y, 0). * * The arguments \e x and \e y must be positive. **********************************************************************/ static real RF(real x, real y); /** * Degenerate symmetric integral of the first kind * RC. * * @param[in] x * @param[in] y * @return RC(\e x, \e y) = * RF(\e x, \e y, \e y). * * RC is defined in https://dlmf.nist.gov/19.2.E17 * \f[ R_C(x, y) = \frac12 * \int_0^\infty\frac1{\sqrt{t + x}(t + y)}\,dt, \f] * where \e x ≥ 0 and \e y > 0. **********************************************************************/ static real RC(real x, real y); /** * Symmetric integral of the second kind RG. * * @param[in] x * @param[in] y * @param[in] z * @return RG(\e x, \e y, \e z). * * RG is defined in Carlson, eq 1.5 * \f[ R_G(x, y, z) = \frac14 * \int_0^\infty[(t + x) (t + y) (t + z)]^{-1/2} * \biggl( * \frac x{t + x} + \frac y{t + y} + \frac z{t + z} * \biggr)t\,dt, \f] * where at most one of arguments, \e x, \e y, \e z, can be zero and those * arguments that are nonzero must be positive. See also * https://dlmf.nist.gov/19.23.E6_5. If one of the arguments is zero, it * is more efficient to call the two-argument version of this function with * the non-zero arguments. **********************************************************************/ static real RG(real x, real y, real z); /** * Complete symmetric integral of the second kind, * RG with one argument zero. * * @param[in] x * @param[in] y * @return RG(\e x, \e y, 0). * * The arguments \e x and \e y must be positive. **********************************************************************/ static real RG(real x, real y); /** * Symmetric integral of the third kind RJ. * * @param[in] x * @param[in] y * @param[in] z * @param[in] p * @return RJ(\e x, \e y, \e z, \e p). * * RJ is defined in https://dlmf.nist.gov/19.16.E2 * \f[ R_J(x, y, z, p) = \frac32 * \int_0^\infty * [(t + x) (t + y) (t + z)]^{-1/2} (t + p)^{-1}\, dt, \f] * where \e p > 0, and \e x, \e y, \e z are nonnegative with at most one of * them being 0. **********************************************************************/ static real RJ(real x, real y, real z, real p); /** * Degenerate symmetric integral of the third kind * RD. * * @param[in] x * @param[in] y * @param[in] z * @return RD(\e x, \e y, \e z) = * RJ(\e x, \e y, \e z, \e z). * * RD is defined in https://dlmf.nist.gov/19.16.E5 * \f[ R_D(x, y, z) = \frac32 * \int_0^\infty[(t + x) (t + y)]^{-1/2} (t + z)^{-3/2}\, dt, \f] * where \e x, \e y, \e z are positive except that at most one of \e x and * \e y can be 0. **********************************************************************/ static real RD(real x, real y, real z); ///@} }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP geosphere/src/Rhumb.cpp0000644000176200001440000003145415147425256014625 0ustar liggesusers/** * \file Rhumb.cpp * \brief Implementation for GeographicLib::Rhumb and GeographicLib::RhumbLine * classes * * Copyright (c) Charles Karney (2014-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include "Rhumb.h" #include "DST.h" namespace GeographicLib { using namespace std; Rhumb::Rhumb(real a, real f, bool exact) : _aux(a, f) , _exact(exact) , _a(a) , _f(f) , _n(_f / (2 - _f)) , _rm(_aux.RectifyingRadius(_exact)) , _c2(_aux.AuthalicRadiusSquared(_exact) * Math::degree()) , _lL(_exact ? 8 : Lmax_) // 8 is starting size for DFT fit , _pP(_lL) { AreaCoeffs(); } const Rhumb& Rhumb::WGS84() { static const Rhumb wgs84(Constants::WGS84_a(), Constants::WGS84_f()); return wgs84; } void Rhumb::AreaCoeffs() { // Set up coefficients for area calculation if (_exact) { // Compute coefficients by Fourier transform of integrand static const real eps = numeric_limits::epsilon()/2; qIntegrand f(_aux); int L = 4; vector c(L); DST fft(L); fft.transform(f, c.data()); L *= 2; // For |n| <= 0.99, actual max for doubles is 2163. This scales as // Math::digits() and for long doubles (GEOGRAPHICLIB_PRECISION = 3, // digits = 64), this becomes 2163 * 64 / 53 = 2612. Round this up to // 2^12 = 4096 and scale this by Math::digits()/64 if digits() > 64. // // 64 = digits for long double, 6 = 12 - log2(64) int Lmax = 1<<(int(ceil(log2(max(Math::digits(), 64)))) + 6); for (_lL = 0; L <= Lmax && _lL == 0; L *=2) { fft.reset(L/2); c.resize(L); fft.refine(f, c.data()); _pP.resize(L); for (int l = 0, k = -1; l < L; ++l) { // Compute Fourier coefficients of integral _pP[l] = (c[l] + (l+1 < L ? c[l+1] : 0)) / (-4 * (l+1)); if (fabs(_pP[l]) <= eps) { if (k < 0) k = l; // mark as first small value } else k = -1; // run interrupted if (k >= 0 && l - k + 1 >= (l + 1 + 7) / 8) { // run of small values of at least l/8? _lL = l + 1; _pP.resize(_lL); break; } } // loop exits if _lL > 0 } if (_lL == 0) // Hasn't converged -- just use the values we have _lL = int(_pP.size()); } else { // Use series expansions in n for Fourier coefficients of the integral // See "Series expansions for computing rhumb areas" // https://doi.org/10.5281/zenodo.7685484 #if GEOGRAPHICLIB_RHUMBAREA_ORDER == 4 static const real coeffs[] = { // Coefficients in matrix Q 596/real(2025), -398/real(945), 22/real(45), -1/real(3), 1543/real(4725), -118/real(315), 1/real(5), 152/real(945), -17/real(315), 5/real(252), }; #elif GEOGRAPHICLIB_RHUMBAREA_ORDER == 5 static const real coeffs[] = { // Coefficients in matrix Q -102614/real(467775), 596/real(2025), -398/real(945), 22/real(45), -1/real(3), -24562/real(155925), 1543/real(4725), -118/real(315), 1/real(5), -38068/real(155925), 152/real(945), -17/real(315), -752/real(10395), 5/real(252), -101/real(17325), }; #elif GEOGRAPHICLIB_RHUMBAREA_ORDER == 6 static const real coeffs[] = { // Coefficients in matrix Q 138734126/real(638512875), -102614/real(467775), 596/real(2025), -398/real(945), 22/real(45), -1/real(3), 17749373/real(425675250), -24562/real(155925), 1543/real(4725), -118/real(315), 1/real(5), 1882432/real(8513505), -38068/real(155925), 152/real(945), -17/real(315), 268864/real(2027025), -752/real(10395), 5/real(252), 62464/real(2027025), -101/real(17325), 11537/real(4054050), }; #elif GEOGRAPHICLIB_RHUMBAREA_ORDER == 7 static const real coeffs[] = { // Coefficients in matrix Q -565017322/real(1915538625), 138734126/real(638512875), -102614/real(467775), 596/real(2025), -398/real(945), 22/real(45), -1/real(3), -1969276/real(58046625), 17749373/real(425675250), -24562/real(155925), 1543/real(4725), -118/real(315), 1/real(5), -58573784/real(638512875), 1882432/real(8513505), -38068/real(155925), 152/real(945), -17/real(315), -6975184/real(42567525), 268864/real(2027025), -752/real(10395), 5/real(252), -112832/real(1447875), 62464/real(2027025), -101/real(17325), -4096/real(289575), 11537/real(4054050), -311/real(525525), }; #elif GEOGRAPHICLIB_RHUMBAREA_ORDER == 8 static const real coeffs[] = { // Coefficients in matrix Q 188270561816LL/real(488462349375LL), -565017322/real(1915538625), 138734126/real(638512875), -102614/real(467775), 596/real(2025), -398/real(945), 22/real(45), -1/real(3), 2332829602LL/real(23260111875LL), -1969276/real(58046625), 17749373/real(425675250), -24562/real(155925), 1543/real(4725), -118/real(315), 1/real(5), -41570288/real(930404475), -58573784/real(638512875), 1882432/real(8513505), -38068/real(155925), 152/real(945), -17/real(315), 1538774036/real(10854718875LL), -6975184/real(42567525), 268864/real(2027025), -752/real(10395), 5/real(252), 436821248/real(3618239625LL), -112832/real(1447875), 62464/real(2027025), -101/real(17325), 3059776/real(80405325), -4096/real(289575), 11537/real(4054050), 4193792/real(723647925), -311/real(525525), 1097653/real(1929727800), }; #else #error "Bad value for GEOGRAPHICLIB_RHUMBAREA_ORDER" #endif static_assert(sizeof(coeffs) / sizeof(real) == (Lmax_ * (Lmax_ + 1))/2, "Coefficient array size mismatch for Rhumb"); real d = 1; int o = 0; for (int l = 0; l < Lmax_; ++l) { int m = Lmax_ - l - 1; d *= _n; _pP[l] = d * Math::polyval(m, coeffs + o, _n); o += m + 1; } } // Post condition: o == sizeof(coeffs) / sizeof(real) } Rhumb::qIntegrand::qIntegrand(const AuxLatitude& aux) : _aux(aux) {} Math::real Rhumb::qIntegrand::operator()(real beta) const { // pbeta(beta) = integrate(q(beta), beta) // q(beta) = (1-f) * (sin(xi) - sin(chi)) / cos(phi) // = (1-f) * (cos(chi) - cos(xi)) / cos(phi) * // (cos(xi) + cos(chi)) / (sin(xi) + sin(chi)) // Fit q(beta)/cos(beta) with Fourier transform // q(beta)/cos(beta) = sum(c[k] * sin((2*k+1)*beta), k, 0, K-1) // then the integral is // pbeta = sum(d[k] * cos((2*k+2)*beta), k, 0, K-1) // where // d[k] = -1/(4*(k+1)) * (c[k] + c[k+1]) for k in 0..K-2 // d[K-1] = -1/(4*K) * c[K-1] AuxAngle betaa(AuxAngle::radians(beta)), phia(_aux.Convert(AuxLatitude::BETA, AuxLatitude::PHI, betaa, true).normalized()), chia(_aux.Convert(AuxLatitude::PHI , AuxLatitude::CHI, phia , true).normalized()), xia (_aux.Convert(AuxLatitude::PHI , AuxLatitude::XI , phia , true).normalized()); real schi = chia.y(), cchi = chia.x(), sxi = xia.y(), cxi = xia.x(), cphi = phia.x(), cbeta = betaa.x(); return (1 - _aux.Flattening()) * ( fabs(schi) < fabs(cchi) ? sxi - schi : (cchi - cxi) * (cxi + cchi) / (sxi + schi) ) / (cphi * cbeta); // Value for beta = pi/2. This isn't needed because beta is given in // radians and cos(pi/2) is never exactly 0. See formulas in the auxlat // paper for tan(chi)/tan(phi) and tan(xi)/tan(phi) in the limit phi -> // pi/2. // // n = 1/2; // e = 2*sqrt(n) / (1 + n); // e1 = 2*sqrt(n) / (1 - n); // at = f == 0 ? 1 : (f < 0 ? atan(|e|)/|e| : asinh(e1)/e); // q1 = at + 1 / (1 - e^2); // s1 = sinh(e^2 * at); // h1 = f < 0 ? hypot(1, s1) - s1 : 1/(hypot(1, s1) + s1); // v = (1 - e^2) / (2 * h1^2) - 1 / ((1 - e^2) * q1); } void Rhumb::GenInverse(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real& s12, real& azi12, real& S12) const { AuxAngle phi1(AuxAngle::degrees(lat1)), phi2(AuxAngle::degrees(lat2)), chi1(_aux.Convert(_aux.PHI, _aux.CHI, phi1, _exact)), chi2(_aux.Convert(_aux.PHI, _aux.CHI, phi2, _exact)); real lon12 = Math::AngDiff(lon1, lon2), lam12 = lon12 * Math::degree(), psi1 = chi1.lam(), psi2 = chi2.lam(), psi12 = psi2 - psi1; if (outmask & AZIMUTH) azi12 = Math::atan2d(lam12, psi12); if (outmask & DISTANCE) { if (isinf(psi1) || isinf(psi2)) { s12 = fabs(_aux.Convert(AuxLatitude::PHI, AuxLatitude::MU, phi2, _exact).radians() - _aux.Convert(AuxLatitude::PHI, AuxLatitude::MU, phi1, _exact).radians()) * _rm; } else { real h = hypot(lam12, psi12); // dmu/dpsi = dmu/dchi / dpsi/dchi real dmudpsi = _exact ? _aux.DRectifying(phi1, phi2) / _aux.DIsometric(phi1, phi2) : _aux.DConvert(AuxLatitude::CHI, AuxLatitude::MU, chi1, chi2) / DAuxLatitude::Dlam(chi1.tan(), chi2.tan()); s12 = h * dmudpsi * _rm; } } if (outmask & AREA) S12 = _c2 * lon12 * MeanSinXi(chi1, chi2); } RhumbLine Rhumb::Line(real lat1, real lon1, real azi12) const { return RhumbLine(*this, lat1, lon1, azi12); } void Rhumb::GenDirect(real lat1, real lon1, real azi12, real s12, unsigned outmask, real& lat2, real& lon2, real& S12) const { Line(lat1, lon1, azi12).GenPosition(s12, outmask, lat2, lon2, S12); } Math::real Rhumb::MeanSinXi(const AuxAngle& chix, const AuxAngle& chiy) const { AuxAngle phix (_aux.Convert(_aux.CHI, _aux.PHI , chix, _exact)), phiy (_aux.Convert(_aux.CHI, _aux.PHI , chiy, _exact)), betax(_aux.Convert(_aux.PHI, _aux.BETA, phix, _exact).normalized()), betay(_aux.Convert(_aux.PHI, _aux.BETA, phiy, _exact).normalized()); real DpbetaDbeta = DAuxLatitude::DClenshaw(false, betay.radians() - betax.radians(), betax.y(), betax.x(), betay.y(), betay.x(), _pP.data(), _lL), tx = chix.tan(), ty = chiy.tan(), DbetaDpsi = _exact ? _aux.DParametric(phix, phiy) / _aux.DIsometric(phix, phiy) : _aux.DConvert(AuxLatitude::CHI, AuxLatitude::BETA, chix, chiy) / DAuxLatitude::Dlam(tx, ty); return DAuxLatitude::Dp0Dpsi(tx, ty) + DpbetaDbeta * DbetaDpsi; } RhumbLine::RhumbLine(const Rhumb& rh, real lat1, real lon1, real azi12) : _rh(rh) , _lat1(Math::LatFix(lat1)) , _lon1(lon1) , _azi12(Math::AngNormalize(azi12)) { Math::sincosd(_azi12, _salp, _calp); _phi1 = AuxAngle::degrees(lat1); _mu1 = _rh._aux.Convert(AuxLatitude::PHI, AuxLatitude::MU, _phi1, _rh._exact).degrees(); _chi1 = _rh._aux.Convert(AuxLatitude::PHI, AuxLatitude::CHI, _phi1, _rh._exact); _psi1 = _chi1.lam(); } void RhumbLine::GenPosition(real s12, unsigned outmask, real& lat2, real& lon2, real& S12) const { real r12 = s12 / (_rh._rm * Math::degree()), // scaled distance in degrees mu12 = r12 * _calp, mu2 = _mu1 + mu12; real lat2x, lon2x; if (fabs(mu2) <= Math::qd) { AuxAngle mu2a(AuxAngle::degrees(mu2)), phi2(_rh._aux.Convert(AuxLatitude::MU, AuxLatitude::PHI, mu2a, _rh._exact)), chi2(_rh._aux.Convert(AuxLatitude::PHI, AuxLatitude::CHI, phi2, _rh._exact)); lat2x = phi2.degrees(); real dmudpsi = _rh._exact ? _rh._aux.DRectifying(_phi1, phi2) / _rh._aux.DIsometric(_phi1, phi2) : _rh._aux.DConvert(AuxLatitude::CHI, AuxLatitude::MU, _chi1, chi2) / DAuxLatitude::Dlam(_chi1.tan(), chi2.tan()); lon2x = r12 * _salp / dmudpsi; if (outmask & AREA) S12 = _rh._c2 * lon2x * _rh.MeanSinXi(_chi1, chi2); lon2x = outmask & LONG_UNROLL ? _lon1 + lon2x : Math::AngNormalize(Math::AngNormalize(_lon1) + lon2x); } else { // Reduce to the interval [-180, 180) mu2 = Math::AngNormalize(mu2); // Deal with points on the anti-meridian if (fabs(mu2) > Math::qd) mu2 = Math::AngNormalize(Math::hd - mu2); lat2x = _rh._aux.Convert(AuxLatitude::MU, AuxLatitude::PHI, AuxAngle::degrees(mu2), _rh._exact).degrees(); lon2x = Math::NaN(); if (outmask & AREA) S12 = Math::NaN(); } if (outmask & LATITUDE) lat2 = lat2x; if (outmask & LONGITUDE) lon2 = lon2x; } } // namespace GeographicLib geosphere/src/Utility.h0000644000176200001440000006733515147425256014667 0ustar liggesusers/** * \file Utility.hpp * \brief Header for GeographicLib::Utility class * * Copyright (c) Charles Karney (2011-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_UTILITY_HPP) #define GEOGRAPHICLIB_UTILITY_HPP 1 #include "Constants.h" #include #include #include #include #include #include #if defined(_MSC_VER) // Squelch warnings about constant conditional expressions # pragma warning (push) # pragma warning (disable: 4127) #endif namespace GeographicLib { /** * \brief Some utility routines for %GeographicLib * * Example of use: * \include example-Utility.cpp **********************************************************************/ class GEOGRAPHICLIB_EXPORT Utility { private: static bool gregorian(int y, int m, int d) { // The original cut over to the Gregorian calendar in Pope Gregory XIII's // time had 1582-10-04 followed by 1582-10-15. Here we implement the // switch over used by the English-speaking world where 1752-09-02 was // followed by 1752-09-14. We also assume that the year always begins // with January 1, whereas in reality it often was reckoned to begin in // March. return 100 * (100 * y + m) + d >= 17520914; // or 15821015 } static bool gregorian(int s) { return s >= 639799; // 1752-09-14 } public: /** * Convert a date to the day numbering sequentially starting with * 0001-01-01 as day 1. * * @param[in] y the year (must be positive). * @param[in] m the month, Jan = 1, etc. (must be positive). Default = 1. * @param[in] d the day of the month (must be positive). Default = 1. * @return the sequential day number. **********************************************************************/ static int day(int y, int m = 1, int d = 1); /** * Convert a date to the day numbering sequentially starting with * 0001-01-01 as day 1. * * @param[in] y the year (must be positive). * @param[in] m the month, Jan = 1, etc. (must be positive). Default = 1. * @param[in] d the day of the month (must be positive). Default = 1. * @param[in] check whether to check the date. * @exception GeographicErr if the date is invalid and \e check is true. * @return the sequential day number. **********************************************************************/ static int day(int y, int m, int d, bool check); /** * Given a day (counting from 0001-01-01 as day 1), return the date. * * @param[in] s the sequential day number (must be positive) * @param[out] y the year. * @param[out] m the month, Jan = 1, etc. * @param[out] d the day of the month. **********************************************************************/ static void date(int s, int& y, int& m, int& d); /** * Given a date as a string in the format yyyy, yyyy-mm, or yyyy-mm-dd, * return the numeric values for the year, month, and day. No checking is * done on these values. The string "now" is interpreted as the present * date (in UTC). * * @param[in] s the date in string format. * @param[out] y the year. * @param[out] m the month, Jan = 1, etc. * @param[out] d the day of the month. * @exception GeographicErr is \e s is malformed. **********************************************************************/ static void date(const std::string& s, int& y, int& m, int& d); /** * Given the date, return the day of the week. * * @param[in] y the year (must be positive). * @param[in] m the month, Jan = 1, etc. (must be positive). * @param[in] d the day of the month (must be positive). * @return the day of the week with Sunday, Monday--Saturday = 0, * 1--6. **********************************************************************/ static int dow(int y, int m, int d) { return dow(day(y, m, d)); } /** * Given the sequential day, return the day of the week. * * @param[in] s the sequential day (must be positive). * @return the day of the week with Sunday, Monday--Saturday = 0, * 1--6. **********************************************************************/ static int dow(int s) { return (s + 5) % 7; // The 5 offset makes day 1 (0001-01-01) a Saturday. } /** * Convert a string representing a date to a fractional year. * * @tparam T the type of the argument. * @param[in] s the string to be converted. * @exception GeographicErr if \e s can't be interpreted as a date. * @return the fractional year. * * The string is first read as an ordinary number (e.g., 2010 or 2012.5); * if this is successful, the value is returned. Otherwise the string * should be of the form yyyy-mm or yyyy-mm-dd and this is converted to a * number with 2010-01-01 giving 2010.0 and 2012-07-03 giving 2012.5. The * string "now" is interpreted as the present date. **********************************************************************/ template static T fractionalyear(const std::string& s) { try { return val(s); } catch (const std::exception&) {} int y, m, d; date(s, y, m, d); int t = day(y, m, d, true); return T(y) + T(t - day(y)) / T(day(y + 1) - day(y)); } /** * Convert a object of type T to a string. * * @tparam T the type of the argument. * @param[in] x the value to be converted. * @param[in] p the precision used (default −1). * @exception std::bad_alloc if memory for the string can't be allocated. * @return the string representation. * * If \e p ≥ 0, then the number fixed format is used with \e p bits of * precision. With \e p < 0, there is no manipulation of the format, * except that boolalpha is used to represent bools as "true" * and "false". There is an overload of this function if T is Math::real; * this deals with inf and nan. **********************************************************************/ template static std::string str(T x, int p = -1) { std::ostringstream s; if (p >= 0) s << std::fixed << std::setprecision(p); s << std::boolalpha << x; return s.str(); } /** * Trim the white space from the beginning and end of a string. * * @param[in] s the string to be trimmed * @return the trimmed string **********************************************************************/ static std::string trim(const std::string& s); /** * Lookup up a character in a string. * * @param[in] s the string to be searched. * @param[in] c the character to look for. * @return the index of the first occurrence character in the string or * −1 is the character is not present. * * \e c is converted to upper case before search \e s. Therefore, it is * intended that \e s should not contain any lower case letters. **********************************************************************/ static int lookup(const std::string& s, char c); /** * Lookup up a character in a char*. * * @param[in] s the char* string to be searched. * @param[in] c the character to look for. * @return the index of the first occurrence character in the string or * −1 is the character is not present. * * \e c is converted to upper case before search \e s. Therefore, it is * intended that \e s should not contain any lower case letters. **********************************************************************/ static int lookup(const char* s, char c); /** * Convert a string to type T. * * @tparam T the type of the return value. * @param[in] s the string to be converted. * @exception GeographicErr is \e s is not readable as a T. * @return object of type T. * * White space at the beginning and end of \e s is ignored. * * Special handling is provided for some types. * * If T is a floating point type, then inf and nan are recognized. * * If T is bool, then \e s should either be string a representing 0 (false) * or 1 (true) or one of the strings * - "false", "f", "nil", "no", "n", "off", or "" meaning false, * - "true", "t", "yes", "y", or "on" meaning true; * . * case is ignored. * * If T is std::string, then \e s is returned (with the white space at the * beginning and end removed). **********************************************************************/ template static T val(const std::string& s) { // If T is bool, then the specialization val() defined below is // used. T x; std::string errmsg, t(trim(s)); do { // Executed once (provides the ability to break) std::istringstream is(t); if (!(is >> x)) { errmsg = "Cannot decode " + t; break; } int pos = int(is.tellg()); // Returns -1 at end of string? if (!(pos < 0 || pos == int(t.size()))) { errmsg = "Extra text " + t.substr(pos) + " at end of " + t; break; } return x; } while (false); x = std::numeric_limits::is_integer ? 0 : nummatch(t); if (x == 0) throw GeographicErr(errmsg); return x; } /** * Match "nan" and "inf" (and variants thereof) in a string. * * @tparam T the type of the return value (this should be a floating point * type). * @param[in] s the string to be matched. * @return appropriate special value (±∞, nan) or 0 if none is * found. * * White space is not allowed at the beginning or end of \e s. **********************************************************************/ template static T nummatch(const std::string& s) { if (s.length() < 3) return 0; std::string t(s); for (std::string::iterator p = t.begin(); p != t.end(); ++p) *p = char(std::toupper(*p)); for (size_t i = s.length(); i--;) t[i] = char(std::toupper(s[i])); int sign = t[0] == '-' ? -1 : 1; std::string::size_type p0 = t[0] == '-' || t[0] == '+' ? 1 : 0; std::string::size_type p1 = t.find_last_not_of('0'); if (p1 == std::string::npos || p1 + 1 < p0 + 3) return 0; // Strip off sign and trailing 0s t = t.substr(p0, p1 + 1 - p0); // Length at least 3 if (t == "NAN" || t == "1.#QNAN" || t == "1.#SNAN" || t == "1.#IND" || t == "1.#R") return Math::NaN(); else if (t == "INF" || t == "1.#INF" || t == "INFINITY") return sign * Math::infinity(); return 0; } /** * Read a simple fraction, e.g., 3/4, from a string to an object of type T. * * @tparam T the type of the return value. * @param[in] s the string to be converted. * @exception GeographicErr is \e s is not readable as a fraction of type * T. * @return object of type T * * \note The msys shell under Windows converts arguments which look like * pathnames into their Windows equivalents. As a result the argument * "-1/300" gets mangled into something unrecognizable. A workaround is to * use a floating point number in the numerator, i.e., "-1.0/300". (Recent * versions of the msys shell appear \e not to have this problem.) **********************************************************************/ template static T fract(const std::string& s) { std::string::size_type delim = s.find('/'); return !(delim != std::string::npos && delim >= 1 && delim + 2 <= s.size()) ? val(s) : // delim in [1, size() - 2] val(s.substr(0, delim)) / val(s.substr(delim + 1)); } /** * Read data of type ExtT from a binary stream to an array of type IntT. * The data in the file is in (bigendp ? big : little)-endian format. * * @tparam ExtT the type of the objects in the binary stream (external). * @tparam IntT the type of the objects in the array (internal). * @tparam bigendp true if the external storage format is big-endian. * @param[in] str the input stream containing the data of type ExtT * (external). * @param[out] array the output array of type IntT (internal). * @param[in] num the size of the array. * @exception GeographicErr if the data cannot be read. * * This routine is used to read binary data files for the Geoid, * GravityModel, and MagneticModel classes. In the case of GravityModel * and MagneticMode, the data is published by a government agency as text * files, and the coefficient to realize the models are converted to a * double precision binary format to minimize storage and to simplify * reading the data. * * For GEOGRAPHIC_PRECISION == 2, the data is read faithfully. For * GEOGRAPHICLIB_PRECISION > 2, external data of type double is interpreted * as an approximation of an exact decimal value; this exact number is * convered to a real number at the higher precision. **********************************************************************/ template static void readarray(std::istream& str, IntT array[], size_t num) { #if GEOGRAPHICLIB_PRECISION < 4 if constexpr (sizeof(IntT) == sizeof(ExtT) && std::numeric_limits::is_integer == std::numeric_limits::is_integer) { // Data is compatible (aside from the issue of endian-ness). str.read(reinterpret_cast(array), num * sizeof(ExtT)); if (!str.good()) throw GeographicErr("Failure reading data"); if constexpr (bigendp != Math::bigendian) { // endian mismatch -> swap bytes for (size_t i = num; i--;) array[i] = Math::swab(array[i]); } } else #endif { const int bufsize = 1024; // read this many values at a time ExtT buffer[bufsize]; // temporary buffer int k = int(num); // data values left to read int i = 0; // index into output array while (k) { int n = (std::min)(k, bufsize); str.read(reinterpret_cast(buffer), n * sizeof(ExtT)); if (!str.good()) throw GeographicErr("Failure reading data"); for (int j = 0; j < n; ++j) { // fix endian-ness ExtT x = bigendp == Math::bigendian ? buffer[j] : Math::swab(buffer[j]); #if GEOGRAPHICLIB_PRECISION > 2 // typeid doesn't allow if constexpr here if (typeid(ExtT) == typeid(double) && typeid(IntT) == typeid(Math::real)) { // readarray is used to read in coefficient data rapidly. Thus // 8.3n is stored in its IEEE double representation. This is // fine is the working precision is double. However, when // working at higher precision, how should be interpret the // constant 8.3 appearing in a published table? Possibilities // are // // (a) treat this as an exact decimal number 83/10; // // (b) treat this as the approximate decimal representation of // an exact double precision number 2336242306698445/2^48 = // 8.300000000000000710542735760100185871124267578125 // // Here use (a) if the number of significant digits in the // number is 15 or less. Otherwise, we use (b). // // We implement this as follows. Any double which can be // represented as a decimal number with precision 14 = digis10 // - 1 (= 15 sig figs) is treated as an approximation to that // decimal number. The high precision number is then obtained // by reading the decimal number at that precision. Otherwise // the double is treated as exact. The high precision number // is obtained by adding zeros in the binary fraction. // // N.B. printing with precision 14 = digis10 - 1 allows short // numbers to be represended with trailing zeros. This isn't // necessarily the case with precision = digits10, e.g., 8.3 // becomes 8.300000000000001. // // This prescription doesn't exactly implement the method // proposed. If the published table of numbers includes // 8.300000000000001, this will be interpreted as 8.3. This // doesn't apply to any published magnetic or gravity data. // E.g., the coefficients for EGM96, resp. EGM2008, are given // with precision 11, resp. 14. // // This conversion of doubles to Math::real comes at a // substantial cost. It adds about 14 s to the time it takes // to read the egm2008 gravity model for quad and mpfr // precisions. This is acceptable, however, because high // precision is only used for benchmarking. std::ostringstream str; str << std::scientific << std::setprecision(std::numeric_limits::digits10-1) << x; // Code for GEOGRAPHILIB_PRECISION > 2 and types double/real if (val(str.str()) == x) array[i++] = val(str.str()); else array[i++] = IntT(x); } else { // Code for GEOGRAPHILIB_PRECISION > 2 but types not // double/real array[i++] = IntT(x); } #else // Code for GEOGRAPHILIB_PRECISION <= 2 array[i++] = IntT(x); #endif } k -= n; } } return; } /** * Read data of type ExtT from a binary stream to a vector array of type * IntT. The data in the file is in (bigendp ? big : little)-endian * format. * * @tparam ExtT the type of the objects in the binary stream (external). * @tparam IntT the type of the objects in the array (internal). * @tparam bigendp true if the external storage format is big-endian. * @param[in] str the input stream containing the data of type ExtT * (external). * @param[out] array the output vector of type IntT (internal). * @exception GeographicErr if the data cannot be read. **********************************************************************/ template static void readarray(std::istream& str, std::vector& array) { if (array.size() > 0) readarray(str, &array[0], array.size()); } /** * Write data in an array of type IntT as type ExtT to a binary stream. * The data in the file is in (bigendp ? big : little)-endian format. * * @tparam ExtT the type of the objects in the binary stream (external). * @tparam IntT the type of the objects in the array (internal). * @tparam bigendp true if the external storage format is big-endian. * @param[out] str the output stream for the data of type ExtT (external). * @param[in] array the input array of type IntT (internal). * @param[in] num the size of the array. * @exception GeographicErr if the data cannot be written. **********************************************************************/ template static void writearray(std::ostream& str, const IntT array[], size_t num) { #if GEOGRAPHICLIB_PRECISION < 4 if constexpr (sizeof(IntT) == sizeof(ExtT) && std::numeric_limits::is_integer == std::numeric_limits::is_integer && bigendp == Math::bigendian) { // Data is compatible (including endian-ness). str.write(reinterpret_cast(array), num * sizeof(ExtT)); if (!str.good()) throw GeographicErr("Failure writing data"); } else #endif { const int bufsize = 1024; // write this many values at a time ExtT buffer[bufsize]; // temporary buffer int k = int(num); // data values left to write int i = 0; // index into output array while (k) { int n = (std::min)(k, bufsize); for (int j = 0; j < n; ++j) // cast to ExtT and fix endian-ness buffer[j] = bigendp == Math::bigendian ? ExtT(array[i++]) : Math::swab(ExtT(array[i++])); str.write(reinterpret_cast(buffer), n * sizeof(ExtT)); if (!str.good()) throw GeographicErr("Failure writing data"); k -= n; } } return; } /** * Write data in an array of type IntT as type ExtT to a binary stream. * The data in the file is in (bigendp ? big : little)-endian format. * * @tparam ExtT the type of the objects in the binary stream (external). * @tparam IntT the type of the objects in the array (internal). * @tparam bigendp true if the external storage format is big-endian. * @param[out] str the output stream for the data of type ExtT (external). * @param[in] array the input vector of type IntT (internal). * @exception GeographicErr if the data cannot be written. **********************************************************************/ template static void writearray(std::ostream& str, std::vector& array) { if (array.size() > 0) writearray(str, &array[0], array.size()); } /** * Parse a KEY [=] VALUE line. * * @param[in] line the input line. * @param[out] key the KEY. * @param[out] value the VALUE. * @param[in] equals character representing "equals" to separate KEY and * VALUE, if NULL (the default) use first space character. * @param[in] comment character to use as the comment character; if * non-NULL, this character and everything after it is discarded; default * is '#'. * @exception std::bad_alloc if memory for the internal strings can't be * allocated. * @return whether a key was found. * * The \e comment character (default is '#') and everything after it are * discarded and the result trimmed of leading and trailing white space. * Use the \e equals delimiter character (or, if it is NULL -- the default, * the first white space) to separate \e key and \e value. \e key and \e * value are trimmed of leading and trailing white space. If \e key is * empty, then \e value is set to "" and false is returned. **********************************************************************/ static bool ParseLine(const std::string& line, std::string& key, std::string& value, char equals = '\0', char comment = '#'); /** * Set the binary precision of a real number. * * @param[in] ndigits the number of bits of precision. If ndigits is 0 * (the default), then determine the precision from the environment * variable GEOGRAPHICLIB_DIGITS. If this is undefined, use ndigits = * 256 (i.e., about 77 decimal digits). * @return the resulting number of bits of precision. * * This only has an effect when GEOGRAPHICLIB_PRECISION >= 5. The * precision should only be set once and before calls to any other * GeographicLib functions. (Several functions, for example Math::pi(), * cache the return value in a static local variable. The precision needs * to be set before a call to any such functions.) In multi-threaded * applications, it is necessary also to set the precision in each thread * (see the example GeoidToGTX.cpp). If GEOGRAPHICLIB_PRECISION > 5, then * the precision is set to GEOGRAPHICLIB_PRECISION, the compile-time value, * and \e ndigits is ignored. * * \note Use Math::digits() to return the current precision in bits. **********************************************************************/ static int set_digits(int ndigits = 0); }; /** * The specialization of Utility::val() for strings. * * @param[in] s the string to be converted. * @exception GeographicErr is \e s is not readable as a T. * @return the string trimmed of its whitespace. **********************************************************************/ template<> inline std::string Utility::val(const std::string& s) { return trim(s); } /** * The specialization of Utility::val() for bools. * * @param[in] s the string to be converted. * @exception GeographicErr is \e s is not readable as a T. * @return boolean value. * * \e s should either be string a representing 0 (false) * or 1 (true) or one of the strings * - "false", "f", "nil", "no", "n", "off", or "" meaning false, * - "true", "t", "yes", "y", or "on" meaning true; * . * case is ignored. **********************************************************************/ template<> inline bool Utility::val(const std::string& s) { std::string t(trim(s)); if (t.empty()) return false; bool x; { std::istringstream is(t); if (is >> x) { int pos = int(is.tellg()); // Returns -1 at end of string? if (!(pos < 0 || pos == int(t.size()))) throw GeographicErr("Extra text " + t.substr(pos) + " at end of " + t); return x; } } for (std::string::iterator p = t.begin(); p != t.end(); ++p) *p = char(std::tolower(*p)); switch (t[0]) { // already checked that t isn't empty case 'f': if (t == "f" || t == "false") return false; break; case 'n': if (t == "n" || t == "nil" || t == "no") return false; break; case 'o': if (t == "off") return false; else if (t == "on") return true; break; case 't': if (t == "t" || t == "true") return true; break; case 'y': if (t == "y" || t == "yes") return true; break; default: break; } throw GeographicErr("Cannot decode " + t + " as a bool"); } /** * Convert a Math::real object to a string. * * @param[in] x the value to be converted. * @param[in] p the precision used (default −1). * @exception std::bad_alloc if memory for the string can't be allocated. * @return the string representation. * * If \e p ≥ 0, then the number fixed format is used with p bits of * precision. With p < 0, there is no manipulation of the format. This is * an overload of str which deals with inf and nan. **********************************************************************/ template<> inline std::string Utility::str(Math::real x, int p) { using std::isfinite; if (!isfinite(x)) return x < 0 ? std::string("-inf") : (x > 0 ? std::string("inf") : std::string("nan")); std::ostringstream s; if (p >= 0) s << std::fixed << std::setprecision(p); s << x; return s.str(); } } // namespace GeographicLib #if defined(_MSC_VER) # pragma warning (pop) #endif #endif // GEOGRAPHICLIB_UTILITY_HPP geosphere/src/Intersect.h0000644000176200001440000006566015147425256015163 0ustar liggesusers/** * \file Intersect.hpp * \brief Header for GeographicLib::Intersect class * * Copyright (c) Charles Karney (2023-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_INTERSECT_HPP) #define GEOGRAPHICLIB_INTERSECT_HPP 1 #include #include #include "Math.h" #include "Geodesic.h" #include "GeodesicLine.h" namespace GeographicLib { /** * \brief %Geodesic intersections * * Find the intersections of two geodesics \e X and \e Y. Four calling * sequences are supported. * - The geodesics are defined by a position (latitude and longitude) and an * azimuth. In this case the \e closest intersection is found. * - The geodesics are defined by two endpoints. The intersection of the two * segments is found. If they don't intersect, then the closest * intersection is returned. * - The geodesics are defined as an intersection point, a single position * and two azimuths. In this case, the next closest intersection is found. * - The geodesics are defined as in the first case and all intersection * within a specified distance are returned. * . * In all cases the position of the intersection is given by the signed * displacements \e x and \e y along the geodesics from the starting point * (the first point in the case of a geodesic segment). The closest * itersection is defined as the one that minimizes the L1 distance, * Intersect::Dist([x, y) = |x| + |y|. * * The routines also optionally return a coincidence indicator \e c. This is * typically 0. However if the geodesics lie on top of one another at the * point of intersection, then \e c is set to +1, if they are parallel, and * −1, if they are antiparallel. * * Example of use: * \include example-Intersect.cpp * * IntersectTool is a command-line utility * providing access to the functionality of this class. * * This solution for intersections is described in * - C. F. F. Karney,
* * Geodesic intersections, * J. Surveying Eng. 150(3), 04024005:1--9 (2024); * preprint * arxiv:2308.00495. * . * It is based on the work of * - S. Baseldga and J. C. Martinez-Llario, * * Intersection and point-to-line solutions for geodesics * on the ellipsoid, * Stud. Geophys. Geod. 62, 353--363 (2018); * DOI: * 10.1007/s11200-017-1020-z. **********************************************************************/ class GEOGRAPHICLIB_EXPORT Intersect { private: typedef Math::real real; public: /** * The type used to hold the two displacement along the geodesics. This is * just a std::pair with \e x = \e first and \e y = \e second. **********************************************************************/ typedef std::pair Point; /** * The minimum capabilities for GeodesicLine objects which are passed to * this class. **********************************************************************/ static const unsigned LineCaps = Geodesic::LATITUDE | Geodesic::LONGITUDE | Geodesic::AZIMUTH | Geodesic::REDUCEDLENGTH | Geodesic::GEODESICSCALE | Geodesic::DISTANCE_IN; private: static const int numit_ = 100; const Geodesic _geod; real _a, _f, // equatorial radius, flattening _rR, // authalic radius _d, // pi*_rR _eps, // criterion for intersection + coincidence _tol, // convergence for Newton in Solve1 _delta, // for equality tests, safety margin for tiling _t1, // min distance between intersections _t2, // furthest dist to closest intersection _t3, // 1/2 furthest min dist to next intersection _t4, // capture radius for spherical sol in Solve0 _t5, // longest shortest geodesic _d1, // tile spacing for Closest _d2, // tile spacing for Next _d3; // tile spacing for All // The L1 distance static Math::real d1(Math::real x, Math::real y) { using std::fabs; return fabs(x) + fabs(y); } // An internal version of Point with a little more functionality class XPoint { public: real x, y; int c; XPoint(Math::real x, Math::real y, int c = 0) : x(x), y(y), c(c) {} XPoint() : x(Math::NaN()), y(Math::NaN()), c(0) {} XPoint(const Point& p) : x(p.first), y(p.second), c(0) {} XPoint& operator+=(const XPoint& p) { x += p.x; y += p.y; if (p.c) c = p.c; // pass along a nonzero c from either operand return *this; } XPoint operator+(const XPoint& p) const { XPoint t = *this; t += p; return t; } Math::real Dist() const { return d1(x, y); } Math::real Dist(const XPoint& p) const { return d1(x - p.x, y - p.y); } Point data() const { return Point(x, y); } }; // Comparing XPoints for insertions into sets, but ensure that close // XPoints test equal. class GEOGRAPHICLIB_EXPORT SetComp { private: const real _delta; public: SetComp(Math::real delta) : _delta(delta) {} bool eq(const XPoint& p, const XPoint& q) const { return d1(p.x - q.x, p.y - q.y) <= _delta; } bool operator()(const XPoint& p, const XPoint& q) const { return !eq(p, q) && ( p.x != q.x ? p.x < q.x : p.y < q.y ); } }; SetComp _comp; // For ranking XPoints by closeness class RankPoint { private: const real _x, _y; public: RankPoint(const Point& p0) : _x(p0.first), _y(p0.second) {} RankPoint(const XPoint& p0) : _x(p0.x), _y(p0.y) {} bool operator()(const XPoint& p, const XPoint& q) const { real dp = d1(p.x - _x, p.y - _y), dq = d1(q.x - _x, q.y - _y); return dp != dq ? (dp < dq) : (p.x != q.x ? (p.x < q.x) : (p.y < q.y)); } }; // The spherical solution XPoint Spherical(const GeodesicLine& lineX, const GeodesicLine& lineY, const XPoint& p) const; // The basic algorithm XPoint Basic(const GeodesicLine& lineX, const GeodesicLine& lineY, const XPoint& p0) const; // The closest intersecton XPoint ClosestInt(const GeodesicLine& lineX, const GeodesicLine& lineY, const XPoint& p0) const; // The next intersecton XPoint NextInt(const GeodesicLine& lineX, const GeodesicLine& lineY) const; // Segment intersecton XPoint SegmentInt(const GeodesicLine& lineX, const GeodesicLine& lineY, int& segmode) const; // All intersectons std::vector AllInt0(const GeodesicLine& lineX, const GeodesicLine& lineY, Math::real maxdist, const XPoint& p0) const; std::vector AllInternal(const GeodesicLine& lineX, const GeodesicLine& lineY, Math::real maxdist, const Point& p0, std::vector& c, bool cp) const; // Find {semi-,}conjugate point which is close to s3. Optional m12, M12, // M21 use {semi-,}conjugacy relative to point 2 Math::real ConjugateDist(const GeodesicLine& line, Math::real s3, bool semi, Math::real m12 = 0, Math::real M12 = 1, Math::real M21 = 1) const; Math::real distpolar(Math::real lat1, Math::real* lat2 = nullptr) const; Math::real polarb(Math::real* lata = nullptr, Math::real* latb = nullptr) const; Math::real conjdist(Math::real azi, Math::real* ds = nullptr, Math::real* sp = nullptr, Math::real* sm = nullptr) const; Math::real distoblique(Math::real* azi = nullptr, Math::real* sp = nullptr, Math::real* sm = nullptr) const; // p is intersection point on coincident lines orientation = c; p0 is // origin point. Change p to center point wrt p0, i.e, abs((p-p0)_x) = // abs((p-p0)_y) static XPoint fixcoincident(const XPoint& p0, const XPoint& p); static XPoint fixcoincident(const XPoint& p0, const XPoint& p, int c); static XPoint fixsegment(Math::real sx, Math::real sy, const XPoint& p); static int segmentmode(Math::real sx, Math::real sy, const XPoint& p) { return (p.x < 0 ? -1 : p.x <= sx ? 0 : 1) * 3 + (p.y < 0 ? -1 : p.y <= sy ? 0 : 1); } mutable long long _cnt0, _cnt1, _cnt2, _cnt3, _cnt4; public: /** \name Constructor **********************************************************************/ ///@{ /** * Constructor for an ellipsoid with * * @param[in] geod a Geodesic object. This sets the parameters \e a and \e * f for the ellipsoid. * @exception GeographicErr if the eccentricity of the elliposdoid is too * large. * * \note This class has been validated for -1/4 ≤ \e f ≤ 1/5. It may * give satisfactory results slightly outside this range; however * sufficient far outside the range, some internal checks will fail and an * exception thrown. * * \note If |f| > 1/50, then the Geodesic object should be * constructed with \e exact = true. **********************************************************************/ Intersect(const Geodesic& geod); ///@} /** \name Finding intersections **********************************************************************/ ///@{ /** * Find the closest intersection point, with each geodesic specified by * position and azimuth. * * @param[in] latX latitude of starting point for geodesic \e X (degrees). * @param[in] lonX longitude of starting point for geodesic \e X (degrees). * @param[in] aziX azimuth at starting point for geodesic \e X (degrees). * @param[in] latY latitude of starting point for geodesic \e Y (degrees). * @param[in] lonY longitude of starting point for geodesic \e Y (degrees). * @param[in] aziY azimuth at starting point for geodesic \e Y (degrees). * @param[in] p0 an optional offset for the starting points (meters), * default = [0,0]. * @param[out] c optional pointer to an integer coincidence indicator. * @return \e p the intersection point closest to \e p0. * * The returned intersection minimizes Intersect::Dist(\e p, \e p0). **********************************************************************/ Point Closest(Math::real latX, Math::real lonX, Math::real aziX, Math::real latY, Math::real lonY, Math::real aziY, const Point& p0 = Point(0, 0), int* c = nullptr) const; /** * Find the closest intersection point, with each geodesic given as a * GeodesicLine. * * @param[in] lineX geodesic \e X. * @param[in] lineY geodesic \e Y. * @param[in] p0 an optional offset for the starting points (meters), * default = [0,0]. * @param[out] c optional pointer to an integer coincidence indicator. * @return \e p the intersection point closest to \e p0. * * The returned intersection minimizes Intersect::Dist(\e p, \e p0). * * \note \e lineX and \e lineY should be created with minimum capabilities * Intersect::LineCaps. The methods for creating a GeodesicLine include * all these capabilities by default. **********************************************************************/ Point Closest(const GeodesicLine& lineX, const GeodesicLine& lineY, const Point& p0 = Point(0, 0), int* c = nullptr) const; /** * Find the intersection of two geodesic segments defined by their * endpoints. * * @param[in] latX1 latitude of first point for segment \e X (degrees). * @param[in] lonX1 longitude of first point for segment \e X (degrees). * @param[in] latX2 latitude of second point for segment \e X (degrees). * @param[in] lonX2 longitude of second point for segment \e X (degrees). * @param[in] latY1 latitude of first point for segment \e Y (degrees). * @param[in] lonY1 longitude of first point for segment \e Y (degrees). * @param[in] latY2 latitude of second point for segment \e Y (degrees). * @param[in] lonY2 longitude of second point for segment \e Y (degrees). * @param[out] segmode an indicator equal to zero if the segments * intersect (see below). * @param[out] c optional pointer to an integer coincidence indicator. * @return \e p the intersection point if the segments intersect, otherwise * the intersection point closest to the midpoints of the two * segments. * * \warning The results are only well defined if there's a \e unique * shortest geodesic between the endpoints of the two segments. * * \e segmode codes up information about the closest intersection in the * case where the segments intersect. Let x12 be the * length of the segment \e X and \e x = p.first, the position of * the intersection on segment \e X. Define * - \e kx = −1, if \e x < 0, * - \e kx = 0, * if 0 ≤ \e x ≤ x12, * - \e kx = 1, if x12 < \e x. * . * and similarly for segment \e Y. Then * \e segmode = 3 \e kx + \e ky. **********************************************************************/ Point Segment(Math::real latX1, Math::real lonX1, Math::real latX2, Math::real lonX2, Math::real latY1, Math::real lonY1, Math::real latY2, Math::real lonY2, int& segmode, int* c = nullptr) const; /** * Find the intersection of two geodesic segments each defined by a * GeodesicLine. * * @param[in] lineX segment \e X. * @param[in] lineY segment \e Y. * @param[out] segmode an indicator equal to zero if the segments * intersect (see below). * @param[out] c optional pointer to an integer coincidence indicator. * @return \e p the intersection point if the segments intersect, otherwise * the intersection point closest to the midpoints of the two * segments. * * \warning \e lineX and \e lineY must represent shortest geodesics, e.g., * they can be created by Geodesic::InverseLine. The results are only well * defined if there's a \e unique shortest geodesic between the endpoints * of the two segments. * * \note \e lineX and \e lineY should be created with minimum capabilities * Intersect::LineCaps. The methods for creating a GeodesicLine include * all these capabilities by default. * * See previous definition of Intersect::Segment for more information on \e * segmode. **********************************************************************/ Point Segment(const GeodesicLine& lineX, const GeodesicLine& lineY, int& segmode, int* c = nullptr) const; /** * Find the next closest intersection point to a given intersection, * specified by position and two azimuths. * * @param[in] latX latitude of starting points for geodesics \e X and \e Y * (degrees). * @param[in] lonX longitude of starting points for geodesics \e X and \e Y * (degrees). * @param[in] aziX azimuth at starting point for geodesic \e X (degrees). * @param[in] aziY azimuth at starting point for geodesic \e Y (degrees). * @param[out] c optional pointer to an integer coincidence indicator. * @return \e p the next closest intersection point. * * The returned intersection minimizes Intersect::Dist(\e p) (excluding \e * p = [0,0]). * * \note Equidistant closest intersections are surprisingly common. If * this may be a problem, use Intersect::All with a sufficiently large \e * maxdist to capture close intersections. **********************************************************************/ Point Next(Math::real latX, Math::real lonX, Math::real aziX, Math::real aziY, int* c = nullptr) const; /** * Find the next closest intersection point to a given intersection, * with each geodesic specified a GeodesicLine. * * @param[in] lineX geodesic \e X. * @param[in] lineY geodesic \e Y. * @param[out] c optional pointer to an integer coincidence indicator. * @return \e p the next closest intersection point. * * \warning \e lineX and \e lineY must both have the same starting point, * i.e., the distance between [lineX.Latitude(), * lineX.Longitude()] and [lineY.Latitude(), * lineY.Longitude()] must be zero. * * \note \e lineX and \e lineY should be created with minimum capabilities * Intersect::LineCaps. The methods for creating a GeodesicLine include * all these capabilities by default. * * \note Equidistant closest intersections are surprisingly common. If * this may be a problem, use Intersect::All with a sufficiently large \e * maxdist to capture close intersections. **********************************************************************/ Point Next(const GeodesicLine& lineX, const GeodesicLine& lineY, int* c = nullptr) const; ///@} /** \name Finding all intersections **********************************************************************/ ///@{ /** * Find all intersections within a certain distance, with each geodesic * specified by position and azimuth. * * @param[in] latX latitude of starting point for geodesic \e X (degrees). * @param[in] lonX longitude of starting point for geodesic \e X (degrees). * @param[in] aziX azimuth at starting point for geodesic \e X (degrees). * @param[in] latY latitude of starting point for geodesic \e Y (degrees). * @param[in] lonY longitude of starting point for geodesic \e Y (degrees). * @param[in] aziY azimuth at starting point for geodesic \e Y (degrees). * @param[in] maxdist the maximum distance for the returned intersections * (meters). * @param[out] c vector of coincidences. * @param[in] p0 an optional offset for the starting points (meters), * default = [0,0]. * @return \e plist a vector for the intersections closest to \e p0. * * Each intersection point satisfies Intersect::Dist(\e p, \e p0) ≤ \e * maxdist. The vector of returned intersections is sorted on the distance * from \e p0. **********************************************************************/ std::vector All(Math::real latX, Math::real lonX, Math::real aziX, Math::real latY, Math::real lonY, Math::real aziY, Math::real maxdist, std::vector& c, const Point& p0 = Point(0, 0)) const; /** * Find all intersections within a certain distance, with each geodesic * specified by position and azimuth. Don't return vector of * coincidences. * * @param[in] latX latitude of starting point for geodesic \e X (degrees). * @param[in] lonX longitude of starting point for geodesic \e X (degrees). * @param[in] aziX azimuth at starting point for geodesic \e X (degrees). * @param[in] latY latitude of starting point for geodesic \e Y (degrees). * @param[in] lonY longitude of starting point for geodesic \e Y (degrees). * @param[in] aziY azimuth at starting point for geodesic \e Y (degrees). * @param[in] maxdist the maximum distance for the returned intersections * (meters). * @param[in] p0 an optional offset for the starting points (meters), * default = [0,0]. * @return \e plist a vector for the intersections closest to \e p0. * * Each intersection point satisfies Intersect::Dist(\e p, \e p0) ≤ \e * maxdist. The vector of returned intersections is sorted on the distance * from \e p0. **********************************************************************/ std::vector All(Math::real latX, Math::real lonX, Math::real aziX, Math::real latY, Math::real lonY, Math::real aziY, Math::real maxdist, const Point& p0 = Point(0, 0)) const; /** * Find all intersections within a certain distance, with each geodesic * specified by a GeodesicLine. * * @param[in] lineX geodesic \e X. * @param[in] lineY geodesic \e Y. * @param[in] maxdist the maximum distance for the returned intersections * (meters). * @param[out] c vector of coincidences. * @param[in] p0 an optional offset for the starting points (meters), * default = [0,0]. * @return \e plist a vector for the intersections closest to \e p0. * * Each intersection point satisfies Intersect::Dist(\e p, \e p0) ≤ \e * maxdist. The vector of returned intersections is sorted on the distance * from \e p0. * * \note \e lineX and \e lineY should be created with minimum capabilities * Intersect::LineCaps. The methods for creating a GeodesicLine include * all these capabilities by default. **********************************************************************/ std::vector All(const GeodesicLine& lineX, const GeodesicLine& lineY, Math::real maxdist, std::vector& c, const Point& p0 = Point(0, 0)) const; /** * Find all intersections within a certain distance, with each geodesic * specified by a GeodesicLine. Don't return vector or coincidences. * * @param[in] lineX geodesic \e X. * @param[in] lineY geodesic \e Y. * @param[in] maxdist the maximum distance for the returned intersections * (meters). * @param[in] p0 an optional offset for the starting points (meters), * default = [0,0]. * @return \e plist a vector for the intersections closest to \e p0. * * Each intersection point satisfies Intersect::Dist(\e p, \e p0) ≤ \e * maxdist. The vector of returned intersections is sorted on the distance * from \e p0. * * \note \e lineX and \e lineY should be created with minimum capabilities * Intersect::LineCaps. The methods for creating a GeodesicLine include * all these capabilities by default. **********************************************************************/ std::vector All(const GeodesicLine& lineX, const GeodesicLine& lineY, Math::real maxdist, const Point& p0 = Point(0, 0)) const; ///@} /** \name Diagnostic counters **********************************************************************/ ///@{ /** * @return the cumulative number of invocations of **h**. * * This is a count of the number of times the spherical triangle needs to * be solved. Each involves a call to Geodesic::Inverse and this is a good * metric for the overall cost. This counter is set to zero by the * constructor. * * \warning The counter is a mutable variable and so is not thread safe. **********************************************************************/ long long NumInverse() const { return _cnt0; } /** * @return the cumulative number of invocations of **b**. * * This is a count of the number of invocations of the basic algorithm, * which is used by all the intersection methods. This counter is set to * zero by the constructor. * * \warning The counter is a mutable variable and so is not thread safe. **********************************************************************/ long long NumBasic() const { return _cnt1; } /** * @return the number of times intersection point was changed in * Intersect::Closest and Intersect::Next. * * If this counter is incremented by just 1 in Intersect::Closest, then the * initial result of the basic algorithm was eventually accepted. This * counter is set to zero by the constructor. * * \note This counter is also incremented by Intersect::Segment, which * calls Intersect::Closest. * * \warning The counter is a mutable variable and so is not thread safe. **********************************************************************/ long long NumChange() const { return _cnt2; } /** * @return the number of times a corner point is checked in * Intersect::Segment. * * This counter is set to zero by the constructor. * * \warning The counter is a mutable variable and so is not thread safe. **********************************************************************/ long long NumCorner() const { return _cnt3; } /** * @return the number of times a corner point is returned by * Intersect::Segment. * * This counter is set to zero by the constructor. * * \note A conjecture is that a corner point never results in an * intersection that overrides the intersection closest to the midpoints of * the segments; i.e., NumCorner() always returns 0. * * \warning The counter is a mutable variable and so is not thread safe. **********************************************************************/ long long NumOverride() const { return _cnt4; } ///@} /** \name Insepctor function **********************************************************************/ ///@{ /** * @return \e geod the Geodesic object used in the constructor. * * This can be used to query Geodesic::EquatorialRadius(), * Geodesic::Flattening(), Geodesic::Exact(), and * Geodesic::EllipsoidArea(). **********************************************************************/ const Geodesic& GeodesicObject() const { return _geod; } ///@} /** * The L1 distance. * * @param[in] p the position along geodesics \e X and \e Y. * @param[in] p0 [optional] the reference position, default = [0, 0]. * @return the L1 distance of \e p from \e p0, i.e., * |pxp0x| + * |pyp0y|. **********************************************************************/ static Math::real Dist(const Point& p, const Point& p0 = Point(0, 0)) { using std::fabs; return fabs(p.first - p0.first) + fabs(p.second - p0.second); } }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_INTERSECT_HPP geosphere/src/AuxLatitude.h0000644000176200001440000004175115147425256015447 0ustar liggesusers/** * \file AuxLatitude.hpp * \brief Header for the GeographicLib::AuxLatitude class * * This file is an implementation of the methods described in * - C. F. F. Karney, * * On auxiliary latitudes, * Survey Review 56(395), 165--180 (2024); * preprint * arXiv:2212.05818. * . * Copyright (c) Charles Karney (2022-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_AUXLATITUDE_HPP) #define GEOGRAPHICLIB_AUXLATITUDE_HPP 1 #include #include "Math.h" #include "AuxAngle.h" #if !defined(GEOGRAPHICLIB_AUXLATITUDE_ORDER) /** * The order of the series approximation used in AuxLatitude. * GEOGRAPHICLIB_AUXLATITUDE_ORDER can be set to one of [4, 6, 8]. Use order * appropriate for double precision, 6, also for GEOGRAPHICLIB_PRECISION == 5 * to enable truncation errors to be measured easily. **********************************************************************/ # define GEOGRAPHICLIB_AUXLATITUDE_ORDER \ (GEOGRAPHICLIB_PRECISION == 2 || GEOGRAPHICLIB_PRECISION >= 5 ? 6 : \ (GEOGRAPHICLIB_PRECISION == 1 ? 4 : 8)) #endif namespace GeographicLib { /** * \brief Conversions between auxiliary latitudes. * * This class is an implementation of the methods described in * - C. F. F. Karney, * * On auxiliary latitudes, * Survey Review 56(395), 165--180 (2024); * preprint * arXiv:2212.05818. * * The provides accurate conversions between geographic (\e phi, φ), * parametric (\e beta, β), geocentric (\e theta, θ), rectifying * (\e mu, μ), conformal (\e chi, χ), and authalic (\e xi, ξ) * latitudes for an ellipsoid of revolution. A latitude is represented by * the class AuxAngle in order to maintain precision close to the poles. * * The class implements two methods for the conversion: * - Direct evaluation of the defining equations, the \e exact method. These * equations are formulated so as to preserve relative accuracy of the * tangent of the latitude, ensuring high accuracy near the equator and the * poles. Newton's method is used for those conversions that can't be * expressed in closed form. * - Expansions in powers of \e n, the third flattening, the \e series * method. This delivers full accuracy for abs(\e f) ≤ 1/150. Here, \e * f is the flattening of the ellipsoid. * * The series method is the preferred method of conversion for any conversion * involving μ, χ, or ξ, with abs(\e f) ≤ 1/150. The equations * for the conversions between φ, β, and θ are sufficiently * simple that the exact method should be used for such conversions and also * for conversions with with abs(\e f) > 1/150. * * Example of use: * \include example-AuxLatitude.cpp **********************************************************************/ class GEOGRAPHICLIB_EXPORT AuxLatitude { typedef Math::real real; AuxLatitude(const std::pair& axes); public: /** * The floating-point type for real numbers. This just connects to the * template parameters for the class. **********************************************************************/ /** * The different auxiliary latitudes. **********************************************************************/ enum aux { /** * Geographic latitude, \e phi, φ * @hideinitializer **********************************************************************/ GEOGRAPHIC = 0, /** * Parametric latitude, \e beta, β * @hideinitializer **********************************************************************/ PARAMETRIC = 1, /** * %Geocentric latitude, \e theta, θ * @hideinitializer **********************************************************************/ GEOCENTRIC = 2, /** * Rectifying latitude, \e mu, μ * @hideinitializer **********************************************************************/ RECTIFYING = 3, /** * Conformal latitude, \e chi, χ * @hideinitializer **********************************************************************/ CONFORMAL = 4, /** * Authalic latitude, \e xi, ξ * @hideinitializer **********************************************************************/ AUTHALIC = 5, /** * The total number of auxiliary latitudes * @hideinitializer **********************************************************************/ AUXNUMBER = 6, /** * An alias for GEOGRAPHIC * @hideinitializer **********************************************************************/ PHI = GEOGRAPHIC, /** * An alias for PARAMETRIC * @hideinitializer **********************************************************************/ BETA = PARAMETRIC, /** * An alias for GEOCENTRIC * @hideinitializer **********************************************************************/ THETA = GEOCENTRIC, /** * An alias for RECTIFYING * @hideinitializer **********************************************************************/ MU = RECTIFYING, /** * An alias for CONFORMAL * @hideinitializer **********************************************************************/ CHI = CONFORMAL, /** * An alias for AUTHALIC * @hideinitializer **********************************************************************/ XI = AUTHALIC, /** * An alias for GEOGRAPHIC * @hideinitializer **********************************************************************/ COMMON = GEOGRAPHIC, /** * An alias for GEOGRAPHIC * @hideinitializer **********************************************************************/ GEODETIC = GEOGRAPHIC, /** * An alias for PARAMETRIC * @hideinitializer **********************************************************************/ REDUCED = PARAMETRIC, }; /** * Constructor * * @param[in] a equatorial radius. * @param[in] f flattening of ellipsoid. Setting \e f = 0 gives a sphere. * Negative \e f gives a prolate ellipsoid. * @exception GeographicErr if \e a or (1 − \e f) \e a is not * positive. * * \note the constructor does not precompute the coefficients for the * Fourier series for the series conversions. These are computed and saved * when first needed. **********************************************************************/ AuxLatitude(real a, real f); /** * Construct and return an AuxLatitude object specified in terms of the * semiaxes * * @param[in] a equatorial radius. * @param[in] b polar semiaxis. * @exception GeographicErr if \e a or \e b is not positive. * * This allows a new AuxAngle to be initialized as an angle in radians with * @code * AuxLatitude aux(AuxLatitude::axes(a, b)); * @endcode **********************************************************************/ static AuxLatitude axes(real a, real b) { return AuxLatitude(std::pair(a, b)); } /** * Convert between any two auxiliary latitudes specified as AuxAngle. * * @param[in] auxin an AuxLatitude::aux indicating the type of * auxiliary latitude \e zeta. * @param[in] auxout an AuxLatitude::aux indicating the type of * auxiliary latitude \e eta. * @param[in] zeta the input auxiliary latitude as an AuxAngle * @param[in] exact if true use the exact equations instead of the Taylor * series [default false]. * @return the output auxiliary latitude \e eta as an AuxAngle. * * With \e exact = false, the Fourier coefficients for a specific \e auxin * and \e auxout are computed and saved on the first call; the saved * coefficients are used on subsequent calls. The series method is * accurate for abs(\e f) ≤ 1/150; for other \e f, the exact method * should be used. **********************************************************************/ AuxAngle Convert(int auxin, int auxout, const AuxAngle& zeta, bool exact = false) const; /** * Convert between any two auxiliary latitudes specified in degrees. * * @param[in] auxin an AuxLatitude::aux indicating the type of * auxiliary latitude \e zeta. * @param[in] auxout an AuxLatitude::aux indicating the type of * auxiliary latitude \e eta. * @param[in] zeta the input auxiliary latitude in degrees. * @param[in] exact if true use the exact equations instead of the Taylor * series [default false]. * @return the output auxiliary latitude \e eta in degrees. * * With \e exact = false, the Fourier coefficients for a specific \e auxin * and \e auxout are computed and saved on the first call; the saved * coefficients are used on subsequent calls. The series method is * accurate for abs(\e f) ≤ 1/150; for other \e f, the exact method * should be used. **********************************************************************/ Math::real Convert(int auxin, int auxout, real zeta, bool exact = false) const; /** * Convert geographic latitude to an auxiliary latitude \e eta. * * @param[in] auxout an AuxLatitude::aux indicating the auxiliary * latitude returned. * @param[in] phi the geographic latitude. * @param[out] diff optional pointer to the derivative d tan(\e eta) / d * tan(\e phi). * @return the auxiliary latitude \e eta. * * This uses the exact equations. **********************************************************************/ AuxAngle ToAuxiliary(int auxout, const AuxAngle& phi, real* diff = nullptr) const; /** * Convert an auxiliary latitude \e zeta to geographic latitude. * * @param[in] auxin an AuxLatitude::aux indicating the type of * auxiliary latitude \e zeta. * @param[in] zeta the input auxiliary latitude. * @param[out] niter optional pointer to the number of iterations. * @return the geographic latitude \e phi. * * This uses the exact equations. **********************************************************************/ AuxAngle FromAuxiliary(int auxin, const AuxAngle& zeta, int* niter = nullptr) const; /** * Return the rectifying radius. * * @param[in] exact if true use the exact expression instead of the Taylor * series [default false]. * @return the rectifying radius in the same units as \e a. **********************************************************************/ Math::real RectifyingRadius(bool exact = false) const; /** * Return the authalic radius squared. * * @param[in] exact if true use the exact expression instead of the Taylor * series [default false]. * @return the authalic radius squared in the same units as \e a. **********************************************************************/ Math::real AuthalicRadiusSquared(bool exact = false) const; /** * @return \e a the equatorial radius of the ellipsoid (meters). **********************************************************************/ Math::real EquatorialRadius() const { return _a; } /** * @return \e b the polar semiaxis of the ellipsoid (meters). **********************************************************************/ Math::real PolarSemiAxis() const { return _b; } /** * @return \e f, the flattening of the ellipsoid. **********************************************************************/ Math::real Flattening() const { return _f; } /** * Use Clenshaw to sum a Fouier series. * * @param[in] sinp if true sum the sine series, else sum the cosine series. * @param[in] szeta sin(\e zeta). * @param[in] czeta cos(\e zeta). * @param[in] c the array of coefficients. * @param[in] K the number of coefficients. * @return the Clenshaw sum. * * The result returned is \f$ \sum_0^{K-1} c_k \sin (2k+2)\zeta \f$, if \e * sinp is true; with \e sinp false, replace sin by cos. **********************************************************************/ // Clenshaw applied to sum(c[k] * sin( (2*k+2) * zeta), i, 0, K-1); // if !sinp then subst sine->cosine. static Math::real Clenshaw(bool sinp, real szeta, real czeta, const real c[], int K); /** * The order of the series expansions. This is set at compile time to * either 4, 6, or 8, by the preprocessor macro * GEOGRAPHICLIB_AUXLATITUDE_ORDER. * @hideinitializer **********************************************************************/ static const int Lmax = GEOGRAPHICLIB_AUXLATITUDE_ORDER; /** * A global instantiation of Ellipsoid with the parameters for the WGS84 * ellipsoid. **********************************************************************/ static const AuxLatitude& WGS84(); private: // Maximum number of iterations for Newton's method static const int numit_ = 1000; real tol_, bmin_, bmax_; // Static consts for Newton's method // the function atanh(e * sphi)/e + sphi / (1 - (e * sphi)^2); protected: /** * Convert geographic latitude to parametric latitude * * @param[in] phi geographic latitude. * @param[out] diff optional pointer to the derivative d tan(\e beta) / d * tan(\e phi). * @return \e beta, the parametric latitude **********************************************************************/ AuxAngle Parametric(const AuxAngle& phi, real* diff = nullptr) const; /** * Convert geographic latitude to geocentric latitude * * @param[in] phi geographic latitude. * @param[out] diff optional pointer to the derivative d tan(\e theta) / d * tan(\e phi). * @return \e theta, the geocentric latitude. **********************************************************************/ AuxAngle Geocentric(const AuxAngle& phi, real* diff = nullptr) const; /** * Convert geographic latitude to rectifying latitude * * @param[in] phi geographic latitude. * @param[out] diff optional pointer to the derivative d tan(\e mu) / d * tan(\e phi). * @return \e mu, the rectifying latitude. **********************************************************************/ AuxAngle Rectifying(const AuxAngle& phi, real* diff = nullptr) const; /** * Convert geographic latitude to conformal latitude * * @param[in] phi geographic latitude. * @param[out] diff optional pointer to the derivative d tan(\e chi) / d * tan(\e phi). * @return \e chi, the conformal latitude. **********************************************************************/ AuxAngle Conformal(const AuxAngle& phi, real* diff = nullptr) const; /** * Convert geographic latitude to authalic latitude * * @param[in] phi geographic latitude. * @param[out] diff optional pointer to the derivative d tan(\e xi) / d * tan(\e phi). * @return \e xi, the authalic latitude. **********************************************************************/ AuxAngle Authalic(const AuxAngle& phi, real* diff = nullptr) const; /// \cond SKIP // Ellipsoid parameters real _a, _b, _f, _fm1, _e2, _e2m1, _e12, _e12p1, _n, _e, _e1, _n2, _q; // To hold computed Fourier coefficients mutable real _c[Lmax * AUXNUMBER * AUXNUMBER]; // 1d index into AUXNUMBER x AUXNUMBER data static int ind(int auxout, int auxin) { return (auxout >= 0 && auxout < AUXNUMBER && auxin >= 0 && auxin < AUXNUMBER) ? AUXNUMBER * auxout + auxin : -1; } // the function sqrt(1 + tphi^2), convert tan to sec static real sc(real tphi) { using std::hypot; return hypot(real(1), tphi); } // the function tphi / sqrt(1 + tphi^2), convert tan to sin static real sn(real tphi) { using std::isinf, std::copysign; return isinf(tphi) ? copysign(real(1), tphi) : tphi / sc(tphi); } // Populate [_c[Lmax * k], _c[Lmax * (k + 1)]) void fillcoeff(int auxin, int auxout, int k) const; // the function atanh(e * sphi)/e; works for e^2 = 0 and e^2 < 0 real atanhee(real tphi) const; /// \endcond private: // the function atanh(e * sphi)/e + sphi / (1 - (e * sphi)^2); real q(real tphi) const; // The divided difference of (q(1) - q(sphi)) / (1 - sphi) real Dq(real tphi) const; }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_AUXLATITUDE_HPP geosphere/src/Utility.cpp0000644000176200001440000001627715147425256015221 0ustar liggesusers/** * \file Utility.cpp * \brief Implementation for GeographicLib::Utility class * * Copyright (c) Charles Karney (2011-2022) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include #include "Utility.h" #if defined(_MSC_VER) // Squelch warnings about unsafe use of getenv # pragma warning (disable: 4996) #endif namespace GeographicLib { using namespace std; int Utility::day(int y, int m, int d) { // Convert from date to sequential day and vice versa // // Here is some code to convert a date to sequential day and vice // versa. The sequential day is numbered so that January 1, 1 AD is day 1 // (a Saturday). So this is offset from the "Julian" day which starts the // numbering with 4713 BC. // // This is inspired by a talk by John Conway at the John von Neumann // National Supercomputer Center when he described his Doomsday algorithm // for figuring the day of the week. The code avoids explicitly doing ifs // (except for the decision of whether to use the Julian or Gregorian // calendar). Instead the equivalent result is achieved using integer // arithmetic. I got this idea from the routine for the day of the week // in MACLisp (I believe that that routine was written by Guy Steele). // // There are three issues to take care of // // 1. the rules for leap years, // 2. the inconvenient placement of leap days at the end of February, // 3. the irregular pattern of month lengths. // // We deal with these as follows: // // 1. Leap years are given by simple rules which are straightforward to // accommodate. // // 2. We simplify the calculations by moving January and February to the // previous year. Here we internally number the months March-December, // January, February as 0-9, 10, 11. // // 3. The pattern of month lengths from March through January is regular // with a 5-month period—31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31. The // 5-month period is 153 days long. Since February is now at the end of // the year, we don't need to include its length in this part of the // calculation. bool greg = gregorian(y, m, d); y += (m + 9) / 12 - 1; // Move Jan and Feb to previous year, m = (m + 9) % 12; // making March month 0. return (1461 * y) / 4 // Julian years converted to days. Julian year is 365 + // 1/4 = 1461/4 days. // Gregorian leap year corrections. The 2 offset with respect to the // Julian calendar synchronizes the vernal equinox with that at the // time of the Council of Nicea (325 AD). + (greg ? (y / 100) / 4 - (y / 100) + 2 : 0) + (153 * m + 2) / 5 // The zero-based start of the m'th month + d - 1 // The zero-based day - 305; // The number of days between March 1 and December 31. // This makes 0001-01-01 day 1 } int Utility::day(int y, int m, int d, bool check) { int s = day(y, m, d); if (!check) return s; int y1, m1, d1; date(s, y1, m1, d1); if (!(s > 0 && y == y1 && m == m1 && d == d1)) throw GeographicErr("Invalid date " + str(y) + "-" + str(m) + "-" + str(d) + (s > 0 ? "; use " + str(y1) + "-" + str(m1) + "-" + str(d1) : " before 0001-01-01")); return s; } void Utility::date(int s, int& y, int& m, int& d) { int c = 0; bool greg = gregorian(s); s += 305; // s = 0 on March 1, 1BC if (greg) { s -= 2; // The 2 day Gregorian offset // Determine century with the Gregorian rules for leap years. The // Gregorian year is 365 + 1/4 - 1/100 + 1/400 = 146097/400 days. c = (4 * s + 3) / 146097; s -= (c * 146097) / 4; // s = 0 at beginning of century } y = (4 * s + 3) / 1461; // Determine the year using Julian rules. s -= (1461 * y) / 4; // s = 0 at start of year, i.e., March 1 y += c * 100; // Assemble full year m = (5 * s + 2) / 153; // Determine the month s -= (153 * m + 2) / 5; // s = 0 at beginning of month d = s + 1; // Determine day of month y += (m + 2) / 12; // Move Jan and Feb back to original year m = (m + 2) % 12 + 1; // Renumber the months so January = 1 } void Utility::date(const std::string& s, int& y, int& m, int& d) { if (s == "now") { time_t t = time(0); struct tm* now = gmtime(&t); y = now->tm_year + 1900; m = now->tm_mon + 1; d = now->tm_mday; return; } int y1, m1 = 1, d1 = 1; const char* digits = "0123456789"; string::size_type p1 = s.find_first_not_of(digits); if (p1 == string::npos) y1 = val(s); else if (s[p1] != '-') throw GeographicErr("Delimiter not hyphen in date " + s); else if (p1 == 0) throw GeographicErr("Empty year field in date " + s); else { y1 = val(s.substr(0, p1)); if (++p1 == s.size()) throw GeographicErr("Empty month field in date " + s); string::size_type p2 = s.find_first_not_of(digits, p1); if (p2 == string::npos) m1 = val(s.substr(p1)); else if (s[p2] != '-') throw GeographicErr("Delimiter not hyphen in date " + s); else if (p2 == p1) throw GeographicErr("Empty month field in date " + s); else { m1 = val(s.substr(p1, p2 - p1)); if (++p2 == s.size()) throw GeographicErr("Empty day field in date " + s); d1 = val(s.substr(p2)); } } y = y1; m = m1; d = d1; } std::string Utility::trim(const std::string& s) { unsigned beg = 0, end = unsigned(s.size()); while (beg < end && isspace(s[beg])) ++beg; while (beg < end && isspace(s[end - 1])) --end; return string(s, beg, end-beg); } int Utility::lookup(const std::string& s, char c) { string::size_type r = s.find(char(toupper(c))); return r == string::npos ? -1 : int(r); } int Utility::lookup(const char* s, char c) { const char* p = strchr(s, toupper(c)); return p != NULL ? int(p - s) : -1; } bool Utility::ParseLine(const std::string& line, std::string& key, std::string& value, char equals, char comment) { key.clear(); value.clear(); string::size_type n = comment ? line.find(comment) : line.size(); string linea = trim(line.substr(0, n)); if (linea.empty()) return false; n = equals ? linea.find(equals) : linea.find_first_of(" \t\n\v\f\r"); key = trim(linea.substr(0, n)); if (key.empty()) return false; if (n != string::npos) value = trim(linea.substr(n + 1)); return true; } int Utility::set_digits(int ndigits) { #if GEOGRAPHICLIB_PRECISION == 5 if (ndigits <= 0) { char* digitenv = getenv("GEOGRAPHICLIB_DIGITS"); if (digitenv) ndigits = strtol(digitenv, NULL, 0); if (ndigits <= 0) ndigits = 256; } #endif return Math::set_digits(ndigits); } } // namespace GeographicLib geosphere/src/DAuxLatitude.h0000644000176200001440000002016515147425256015547 0ustar liggesusers/** * \file DAuxLatitude.hpp * \brief Header for the GeographicLib::DAuxLatitude class * * Copyright (c) Charles Karney (2022-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_DAUXLATITUDE_HPP) #define GEOGRAPHICLIB_DAUXLATITUDE_HPP 1 #include "AuxLatitude.h" namespace GeographicLib { /** * \brief Divided differences of auxiliary latitudes. * * This class computed the divided differences of auxiliary latitudes and * some other divided differences needed to support rhumb line calculations. **********************************************************************/ class GEOGRAPHICLIB_EXPORT DAuxLatitude : public AuxLatitude { private: typedef Math::real real; typedef AuxLatitude base; public: /** * Constructor * * @param[in] a equatorial radius. * @param[in] f flattening of ellipsoid. Setting \e f = 0 gives a sphere. * Negative \e f gives a prolate ellipsoid. * @exception GeographicErr if \e a or (1 − \e f) \e a is not * positive. **********************************************************************/ DAuxLatitude(real a, real f) : AuxLatitude(a, f) {} /** * The divided difference of one auxiliary latitude with respect to * another. * * @param[in] auxin an AuxLatitude::aux indicating the type of * auxiliary latitude \e zeta. * @param[in] auxout an AuxLatitude::aux indicating the type of * auxiliary latitude \e eta. * @param[in] zeta1 the first of the input auxiliary latitudes. * @param[in] zeta2 the second of the input auxiliary latitudes. * @return the divided difference (\e eta2 - \e eta1) / (\e zeta2 - \e * zeta1). * * \note This routine uses the series method. * * In the expression for the divided difference above, the angle quantities * should be understood as the conventional measure of angle (either in * radians or in degrees). * * The Fourier coefficients for a specific \e auxin and \e auxout are * computed and saved on the first call; the saved coefficients are used on * subsequent calls. The series method is accurate for abs(\e f) ≤ * 1/150. **********************************************************************/ Math::real DConvert(int auxin, int auxout, const AuxAngle& zeta1, const AuxAngle& zeta2) const; /** * The divided difference of the parametric latitude with respect to the * geographic latitude. * * @param[in] phi1 the first geographic latitude as an AuxAngle. * @param[in] phi2 the second geographic latitude as an AuxAngle. * @return the divided difference (\e beta2 - \e beta1) / (\e phi2 - \e * phi1), where \e beta is the parametric latitude. * * \note This routine uses the exact formulas and is valid for arbitrary * flattening. **********************************************************************/ Math::real DParametric(const AuxAngle& phi1, const AuxAngle& phi2) const; /** * The divided difference of the rectifying latitude with respect to the * geographic latitude. * * @param[in] phi1 the first geographic latitude as an AuxAngle. * @param[in] phi2 the second geographic latitude as an AuxAngle. * @return the divided difference (\e mu2 - \e mu1) / (\e phi2 - \e * phi1), where \e mu is the rectifying latitude. * * \note This routine uses the exact formulas and is valid for arbitrary * flattening. **********************************************************************/ Math::real DRectifying(const AuxAngle& phi1, const AuxAngle& phi2) const; /** * The divided difference of the isometric latitude with respect to the * geographic latitude. * * @param[in] phi1 the first geographic latitude as an AuxAngle. * @param[in] phi2 the second geographic latitude as an AuxAngle. * @return the divided difference (\e psi2 - \e psi1) / (\e phi2 - \e * phi1), where \e psi = asinh( tan(\e chi) ) is the isometric latitude * and \e chi is the conformal latitude. * * \note This routine uses the exact formulas and is valid for arbitrary * flattening. **********************************************************************/ Math::real DIsometric(const AuxAngle& phi1, const AuxAngle& phi2) const; /** * The divided difference of AuxLatitude::Clenshaw. * * @param[in] sinp if true sum the sine series, else sum the cosine series. * @param[in] Delta either 1 \e or (zeta2 - zeta1) in radians. * @param[in] szeta1 sin(\e zeta1). * @param[in] czeta1 cos(\e zeta1). * @param[in] szeta2 sin(\e zeta2). * @param[in] czeta2 cos(\e zeta2). * @param[in] c the array of coefficients. * @param[in] K the number of coefficients. * @return the divided difference. * * The result is *

     *    ( AuxLatitude::Clenshaw(sinp, szeta2, czeta2, c, K) -
     *      AuxLatitude::Clenshaw(sinp, szeta1, czeta1, c, K) ) / Delta
     * 
* * \warning \e Delta **must** be either 1 or (\e zeta2 - \e zeta1); * other values will return nonsense. **********************************************************************/ static Math::real DClenshaw(bool sinp, real Delta, real szeta1, real czeta1, real szeta2, real czeta2, const real c[], int K); /** * The divided difference of the isometric latitude with respect to the * conformal latitude. * * @param[in] x tan(\e chi1). * @param[in] y tan(\e chi2). * @return the divided difference (\e psi2 - \e psi1) / (\e chi2 - \e * chi1), where \e psi = asinh( tan(\e chi) ). * * \note This parameters for this routine are the \e tangents of conformal * latitude. * * This routine computes Dasinh(x, y) / Datan(x, y). **********************************************************************/ static Math::real Dlam(real x, real y) { using std::isnan, std::isinf; return x == y ? base::sc(x) : (isnan(x) || isnan(y) ? std::numeric_limits::quiet_NaN() : (isinf(x) || isinf(y) ? std::numeric_limits::infinity() : Dasinh(x, y) / Datan(x, y))); } // Dp0Dpsi in terms of chi /** * The divided difference of the spherical rhumb area term with respect to * the isometric latitude. * * @param[in] x tan(\e chi1). * @param[in] y tan(\e chi2). * @return the divided difference (p0(\e chi2) - p0(\e chi1)) / (\e psi2 - * \e psi1), where p0(\e chi) = log( sec(\e chi) ) and \e psi = asinh( * tan(\e chi) ). * * \note This parameters for this routine are the \e tangents of conformal * latitude. **********************************************************************/ static Math::real Dp0Dpsi(real x, real y) { using std::isnan, std::isinf, std::copysign; return x == y ? base::sn(x) : (isnan(x + y) ? x + y : // N.B. nan for inf-inf (isinf(x) ? copysign(real(1), x) : (isinf(y) ? copysign(real(1), y) : Dasinh(h(x), h(y)) * Dh(x, y) / Dasinh(x, y)))); } protected: // so TestAux can access these functions /// \cond SKIP // (sn(y) - sn(x)) / (y - x) static real Dsn(real x, real y); static real Datan(real x, real y); static real Dasinh(real x, real y); // h(tan(x)) = tan(x) * sin(x) / 2 static real h(real x) { return x * base::sn(x) / 2; } static real Dh(real x, real y); real Datanhee(real tphi1, real tphi2) const; /// \endcond private: static real Dsin(real x, real y) { using std::sin, std::cos; real d = (x - y) / 2; return cos((x + y) / 2) * (d != 0 ? sin(d) / d : 1); } // (E(x) - E(y)) / (x - y) real DE(const AuxAngle& X, const AuxAngle& Y) const; }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_DAUXLATITUDE_HPP geosphere/src/OSGB.h0000644000176200001440000002265315147425256013750 0ustar liggesusers/** * \file OSGB.hpp * \brief Header for GeographicLib::OSGB class * * Copyright (c) Charles Karney (2010-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_OSGB_HPP) #define GEOGRAPHICLIB_OSGB_HPP 1 #include "Constants.h" #include "TransverseMercator.h" namespace GeographicLib { /** * \brief Ordnance Survey grid system for Great Britain * * The class implements the coordinate system used by the Ordnance Survey for * maps of Great Britain and conversions to the grid reference system. * * See * - * A guide to coordinate systems in Great Britain * - * Using the National Grid * * \warning the latitudes and longitudes for the Ordnance Survey grid * system do not use the WGS84 datum. Do not use the values returned by this * class in the UTMUPS, MGRS, or Geoid classes without first converting the * datum (and vice versa). * * Example of use: * \include example-OSGB.cpp **********************************************************************/ class GEOGRAPHICLIB_EXPORT OSGB { private: typedef Math::real real; static const char* const letters_; static const char* const digits_; static const TransverseMercator& OSGBTM(); static constexpr int base_ = 10; static constexpr int tile_ = 100000; static constexpr int tilelevel_ = 5; static constexpr int tilegrid_ = 5; static constexpr int tileoffx_ = 2 * tilegrid_; static constexpr int tileoffy_ = 1 * tilegrid_; static constexpr int minx_ = - tileoffx_ * tile_; static constexpr int miny_ = - tileoffy_ * tile_; static constexpr int maxx_ = (tilegrid_*tilegrid_ - tileoffx_) * tile_; static constexpr int maxy_ = (tilegrid_*tilegrid_ - tileoffy_) * tile_; // Maximum precision is um static constexpr int maxprec_ = 5 + 6; static real computenorthoffset(); static void CheckCoords(real x, real y); OSGB() = delete; // Disable constructor public: /** * Forward projection, from geographic to OSGB coordinates. * * @param[in] lat latitude of point (degrees). * @param[in] lon longitude of point (degrees). * @param[out] x easting of point (meters). * @param[out] y northing of point (meters). * @param[out] gamma meridian convergence at point (degrees). * @param[out] k scale of projection at point. * * \e lat should be in the range [−90°, 90°]. **********************************************************************/ static void Forward(real lat, real lon, real& x, real& y, real& gamma, real& k) { OSGBTM().Forward(OriginLongitude(), lat, lon, x, y, gamma, k); x += FalseEasting(); y += computenorthoffset(); } /** * Reverse projection, from OSGB coordinates to geographic. * * @param[in] x easting of point (meters). * @param[in] y northing of point (meters). * @param[out] lat latitude of point (degrees). * @param[out] lon longitude of point (degrees). * @param[out] gamma meridian convergence at point (degrees). * @param[out] k scale of projection at point. * * The value of \e lon returned is in the range [−180°, * 180°]. **********************************************************************/ static void Reverse(real x, real y, real& lat, real& lon, real& gamma, real& k) { x -= FalseEasting(); y -= computenorthoffset(); OSGBTM().Reverse(OriginLongitude(), x, y, lat, lon, gamma, k); } /** * OSGB::Forward without returning the convergence and scale. **********************************************************************/ static void Forward(real lat, real lon, real& x, real& y) { real gamma, k; Forward(lat, lon, x, y, gamma, k); } /** * OSGB::Reverse without returning the convergence and scale. **********************************************************************/ static void Reverse(real x, real y, real& lat, real& lon) { real gamma, k; Reverse(x, y, lat, lon, gamma, k); } /** * Convert OSGB coordinates to a grid reference. * * @param[in] x easting of point (meters). * @param[in] y northing of point (meters). * @param[in] prec precision relative to 100 km. * @param[out] gridref National Grid reference. * @exception GeographicErr if \e prec, \e x, or \e y is outside its * allowed range. * @exception std::bad_alloc if the memory for \e gridref can't be * allocatied. * * \e prec specifies the precision of the grid reference string as follows: * - prec = 0 (min), 100km * - prec = 1, 10km * - prec = 2, 1km * - prec = 3, 100m * - prec = 4, 10m * - prec = 5, 1m * - prec = 6, 0.1m * - prec = 11 (max), 1μm * * The easting must be in the range [−1000 km, 1500 km) and the * northing must be in the range [−500 km, 2000 km). These bounds * are consistent with rules for the letter designations for the grid * system. * * If \e x or \e y is NaN, the returned grid reference is "INVALID". **********************************************************************/ static void GridReference(real x, real y, int prec, std::string& gridref); /** * Convert OSGB grid reference to coordinates. * * @param[in] gridref National Grid reference. * @param[out] x easting of point (meters). * @param[out] y northing of point (meters). * @param[out] prec precision relative to 100 km. * @param[in] centerp if true (default), return center of the grid square, * else return SW (lower left) corner. * @exception GeographicErr if \e gridref is illegal. * * The grid reference must be of the form: two letters (not including I) * followed by an even number of digits (up to 22). * * If the first 2 characters of \e gridref are "IN", then \e x and \e y are * set to NaN and \e prec is set to −2. **********************************************************************/ static void GridReference(const std::string& gridref, real& x, real& y, int& prec, bool centerp = true); /** \name Inspector functions **********************************************************************/ ///@{ /** * @return \e a the equatorial radius of the Airy 1830 ellipsoid (meters). * * This is 20923713 ft converted to meters using the rule 1 ft = * 109.48401603−10 m. The Airy 1830 value is returned * because the OSGB projection is based on this ellipsoid. The conversion * factor from feet to meters is the one used for the 1936 retriangulation * of Britain; see Section A.1 (footnote 10 on p. 44) of A guide to * coordinate systems in Great Britain, v3.6 (2020). **********************************************************************/ static Math::real EquatorialRadius() { // result is about 6377563.3960320664406 m using std::pow; return pow(real(10), real(48401603 - 100000000) / 100000000) * real(20923713); } /** * @return \e f the inverse flattening of the Airy 1830 ellipsoid. * * For the Airy 1830 ellipsoid, \e a = 20923713 ft and \e b = 20853810 ft; * thus the flattening = (20923713 − 20853810)/20923713 = * 7767/2324857 = 1/299.32496459... (The Airy 1830 value is returned * because the OSGB projection is based on this ellipsoid.) **********************************************************************/ static Math::real Flattening() { return real(20923713 - 20853810) / real(20923713); } /** * @return \e k0 central scale for the OSGB projection (0.9996012717...). * * C. J. Mugnier, Grids & Datums, PE&RS, Oct. 2003, states that * this is defined as 109.9998268−10. **********************************************************************/ static Math::real CentralScale() { using std::pow; return pow(real(10), real(9998268 - 10000000) / 10000000); } /** * @return latitude of the origin for the OSGB projection (49 degrees). **********************************************************************/ static Math::real OriginLatitude() { return real(49); } /** * @return longitude of the origin for the OSGB projection (−2 * degrees). **********************************************************************/ static Math::real OriginLongitude() { return real(-2); } /** * @return false northing the OSGB projection (−100000 meters). **********************************************************************/ static Math::real FalseNorthing() { return real(-100000); } /** * @return false easting the OSGB projection (400000 meters). **********************************************************************/ static Math::real FalseEasting() { return real(400000); } ///@} }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_OSGB_HPP geosphere/src/AuxAngle.h0000644000176200001440000002166015147425256014717 0ustar liggesusers/** * \file AuxAngle.hpp * \brief Header for the GeographicLib::AuxAngle class * * This file is an implementation of the methods described in * - C. F. F. Karney, * * On auxiliary latitudes, * Survey Review 56(395), 165--180 (2024); * preprint * arXiv:2212.05818. * . * Copyright (c) Charles Karney (2022-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_AUXANGLE_HPP) #define GEOGRAPHICLIB_AUXANGLE_HPP 1 #include "Math.h" namespace GeographicLib { /** * \brief An accurate representation of angles. * * This class is an implementation of the methods described in * - C. F. F. Karney, * * On auxiliary latitudes, * Survey Review 56(395), 165--180 (2024); * preprint * arXiv:2212.05818. * * An angle is represented be the \e y and \e x coordinates of a point in the * 2d plane. The two coordinates are proportional to the sine and cosine of * the angle. This allows angles close to the cardinal points to be * represented accurately. It also saves on unnecessary recomputations of * trigonometric functions of the angle. Only angles in [−180°, * 180°] can be represented. (A possible extension would be to keep * count of the number of turns.) * * Example of use: * \include example-AuxAngle.cpp * * \deprecated The functionality offer by this class is also provided by the * more general class Angle. It is recommended to use Angle for new * applications. **********************************************************************/ class GEOGRAPHICLIB_EXPORT AuxAngle { private: typedef Math::real real; real _y, _x; public: /** * The constructor. * * @param[in] y the \e y coordinate. * @param[in] x the \e x coordinate. * * \note the \e y coordinate is specified \e first. * \warning either \e x or \e y can be infinite, but not both. * * The defaults (\e x = 1 and \e y = 0) are such that * + no arguments gives an angle of 0; * + 1 argument specifies the tangent of the angle. **********************************************************************/ explicit AuxAngle(real y = 0, real x = 1) : _y(y), _x(x) {} /** * @return the \e y component. This is the sine of the angle if the * AuxAngle has been normalized. **********************************************************************/ Math::real y() const { return _y; } /** * @return the \e x component. This is the cosine of the angle if the * AuxAngle has been normalized. **********************************************************************/ Math::real x() const { return _x; } /** * @return a reference to the \e y component. This allows this component * to be altered. **********************************************************************/ Math::real& y() { return _y; } /** * @return a reference to the \e x component. This allows this component * to be altered. **********************************************************************/ Math::real& x() { return _x; } /** * @return the AuxAngle converted to the conventional angle measured in * degrees. **********************************************************************/ Math::real degrees() const; /** * @return the AuxAngle converted to the conventional angle measured in * radians. **********************************************************************/ Math::real radians() const; /** * @return the lambertian of the AuxAngle. * * \note the lambertian of an angle χ is * lam(χ) = asinh(tan(χ)). **********************************************************************/ Math::real lam() const; /** * @return the lambertian of the AuxAngle in degrees. * * \note the lambertian of an angle χ is * lam(χ) = asinh(tan(χ)). **********************************************************************/ Math::real lamd() const; /** * @return the tangent of the angle. **********************************************************************/ Math::real tan() const { return _y / _x; } /** * @return a new normalized AuxAngle with the point lying on the unit * circle and the \e y and \e x components are equal to the sine and * cosine of the angle. **********************************************************************/ AuxAngle normalized() const; /** * Normalize the AuxAngle in place so that the \e y and \e x components are * equal to the sine and cosine of the angle. **********************************************************************/ void normalize() { *this = normalized(); } /** * Set the quadrant for the AuxAngle. * * @param[in] p the AuxAngle from which the quadrant information is taken. * @return the new AuxAngle in the same quadrant as \e p. **********************************************************************/ AuxAngle copyquadrant(const AuxAngle& p) const; /** * Add an AuxAngle. * * @param[in] p the AuxAngle to be added. * @return a reference to the new AuxAngle. * * The addition is done in place, altering the current AuxAngle. * * \warning Neither *this nor \e p should have an infinite component. If * necessary, invoke AuxAngle::normalize on these angles first. **********************************************************************/ AuxAngle& operator+=(const AuxAngle& p); /** * Construct and return an AuxAngle specied as an angle in degrees. * * @param[in] d the angle measured in degrees. * @return the corresponding AuxAngle. * * This allows a new AuxAngle to be initialized as an angle in degrees with * @code * AuxAngle phi(AuxAngle::degrees(d)); * @endcode **********************************************************************/ static AuxAngle degrees(real d); /** * Construct and return an AuxAngle specied as an angle in radians. * * @param[in] r the angle measured in radians. * @return the corresponding AuxAngle. * * This allows a new AuxAngle to be initialized as an angle in radians with * @code * AuxAngle phi(AuxAngle::radians(r)); * @endcode **********************************************************************/ static AuxAngle radians(real r); /** * Construct and return an AuxAngle specied by the lambertian of the angle. * * @param[in] psi the lambertian of the angle. * @return the corresponding AuxAngle. * * This allows a new AuxAngle to be initialized given the lambertian with * @code * AuxAngle chi(AuxAngle::lam(psi)); * @endcode * * \note this sets the angle χ to gd(ψ) = atan(sinh(ψ)). **********************************************************************/ static AuxAngle lam(real psi); /** * Construct and return an AuxAngle specied by the lambertian of the angle * in degrees. * * @param[in] psid the lambertian of the angle in degrees. * @return the corresponding AuxAngle. * * This allows a new AuxAngle to be initialized given the lambertian with * @code * AuxAngle chi(AuxAngle::lamd(psid)); * @endcode * * \note this sets the angle χ to gd(ψ) = atan(sinh(ψ)). **********************************************************************/ static AuxAngle lamd(real psid); /** * @return a "NaN" AuxAngle. **********************************************************************/ static AuxAngle NaN(); }; inline AuxAngle AuxAngle::degrees(real d) { real y, x; Math::sincosd(d, y, x); return AuxAngle(y, x); } inline AuxAngle AuxAngle::radians(real r) { using std::sin, std::cos; return AuxAngle(sin(r), cos(r)); } inline AuxAngle AuxAngle::lam(real psi) { using std::sinh; return AuxAngle(sinh(psi)); } inline AuxAngle AuxAngle::lamd(real psid) { using std::sinh; return AuxAngle(sinh(psid * Math::degree())); } inline Math::real AuxAngle::degrees() const { return Math::atan2d(_y, _x); } inline Math::real AuxAngle::radians() const { using std::atan2; return atan2(_y, _x); } inline Math::real AuxAngle::lam() const { using std::asinh; return asinh( tan() ); } inline Math::real AuxAngle::lamd() const { using std::asinh; return asinh( tan() ) / Math::degree(); } } // namespace GeographicLib #endif // GEOGRAPHICLIB_AUXANGLE_HPP geosphere/src/Constants.h0000644000176200001440000003530015147425256015163 0ustar liggesusers/** * \file Constants.hpp * \brief Header for GeographicLib::Constants class * * Copyright (c) Charles Karney (2008-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_CONSTANTS_HPP) #define GEOGRAPHICLIB_CONSTANTS_HPP 1 #include "Config.h" /** * @relates GeographicLib::Constants * 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 GEOGRAPHICLIB_VERSION, below. **********************************************************************/ #define GEOGRAPHICLIB_VERSION_NUM(a,b,c) ((((a) * 10000 + (b)) * 100) + (c)) /** * @relates GeographicLib::Constants * The version of GeographicLib 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 #if GEOGRAPHICLIB_VERSION >= GEOGRAPHICLIB_VERSION_NUM(1,37,0) ... #endif * \endcode **********************************************************************/ #define GEOGRAPHICLIB_VERSION \ GEOGRAPHICLIB_VERSION_NUM(GEOGRAPHICLIB_VERSION_MAJOR, \ GEOGRAPHICLIB_VERSION_MINOR, \ GEOGRAPHICLIB_VERSION_PATCH) // For reference, here is a table of Visual Studio and _MSC_VER // correspondences: // // _MSC_VER Visual Studio // 1900 vc14 (2015) First version of VS to include enough C++11 support // 191[0-6] vc15 (2017) First version of VS to include enough C++17 support // 192[0-9] vc16 (2019) // 1930-1944 vc17 (2022) // vc18 (2026) #if defined(_MSC_VER) && defined(GEOGRAPHICLIB_SHARED_LIB) && \ GEOGRAPHICLIB_SHARED_LIB # if GEOGRAPHICLIB_SHARED_LIB > 1 # error GEOGRAPHICLIB_SHARED_LIB must be 0 or 1 # elif defined(GeographicLib_SHARED_EXPORTS) # define GEOGRAPHICLIB_EXPORT __declspec(dllexport) # else # define GEOGRAPHICLIB_EXPORT __declspec(dllimport) # endif #else # define GEOGRAPHICLIB_EXPORT #endif #include #include #include "Math.h" /** * \brief Namespace for %GeographicLib * * All of %GeographicLib is defined within the GeographicLib namespace. In * addition all the header files are included via GeographicLib/Class.hpp. * This minimizes the likelihood of conflicts with other packages. **********************************************************************/ namespace GeographicLib { /** * \brief %Constants needed by %GeographicLib * * Define constants specifying the WGS84 ellipsoid, the UTM and UPS * projections, and various unit conversions. * * Example of use: * \include example-Constants.cpp **********************************************************************/ class GEOGRAPHICLIB_EXPORT Constants { private: typedef Math::real real; Constants() = delete; // Disable constructor public: /** * A synonym for Math::degree(). **********************************************************************/ static Math::real degree() { return Math::degree(); } /** * @return the number of radians in an arcminute. **********************************************************************/ static Math::real arcminute() { return Math::degree() / Math::dm; } /** * @return the number of radians in an arcsecond. **********************************************************************/ static Math::real arcsecond() { return Math::degree() / Math::ds; } /** \name Ellipsoid parameters **********************************************************************/ ///@{ /** * @tparam T the type of the returned value. * @return the equatorial radius of WGS84 ellipsoid (6378137 m). **********************************************************************/ template static T WGS84_a() { return 6378137 * meter(); } /** * @tparam T the type of the returned value. * @return the flattening of WGS84 ellipsoid (1/298.257223563). **********************************************************************/ template static T WGS84_f() { // Evaluating this as 1000000000 / T(298257223563LL) reduces the // round-off error by about 10%. However, expressing the flattening as // 1/298.257223563 is well ingrained. return 1 / ( T(298257223563LL) / 1000000000 ); } /** * @tparam T the type of the returned value. * @return the gravitational constant of the WGS84 ellipsoid, \e GM, in * m3 s−2. **********************************************************************/ template static T WGS84_GM() { return T(3986004) * 100000000 + 41800000; } /** * @tparam T the type of the returned value. * @return the angular velocity of the WGS84 ellipsoid, ω, in rad * s−1. **********************************************************************/ template static T WGS84_omega() { return 7292115 / (T(1000000) * 100000); } /** * @tparam T the type of the returned value. * @return the equatorial radius of GRS80 ellipsoid, \e a, in m. **********************************************************************/ template static T GRS80_a() { return 6378137 * meter(); } /** * @tparam T the type of the returned value. * @return the gravitational constant of the GRS80 ellipsoid, \e GM, in * m3 s−2. **********************************************************************/ template static T GRS80_GM() { return T(3986005) * 100000000; } /** * @tparam T the type of the returned value. * @return the angular velocity of the GRS80 ellipsoid, ω, in rad * s−1. * * This is about 2 π 366.25 / (365.25 × 24 × 3600) rad * s−1. 365.25 is the number of days in a Julian year and * 365.35/366.25 converts from solar days to sidereal days. Using the * number of days in a Gregorian year (365.2425) results in a worse * approximation (because the Gregorian year includes the precession of the * earth's axis). **********************************************************************/ template static T GRS80_omega() { return 7292115 / (T(1000000) * 100000); } /** * @tparam T the type of the returned value. * @return the dynamical form factor of the GRS80 ellipsoid, * J2. **********************************************************************/ template static T GRS80_J2() { return T(108263) / 100000000; } /** * @tparam T the type of the returned value. * @return the central scale factor for UTM (0.9996). **********************************************************************/ template static T UTM_k0() {return T(9996) / 10000; } /** * @tparam T the type of the returned value. * @return the central scale factor for UPS (0.994). **********************************************************************/ template static T UPS_k0() { return T(994) / 1000; } ///@} /** \name Triaxial ellipsoid parameters * * These parameters are close to the values given by Milan Bursa, Vladimira * Fialova, "Parameters of the Earth's tri-axial level ellipsoid", Studia * Geophysica et Geodaetica 37(1), 1-13 (1993). * - longitude of major axis = −14.93° ± 0.05° * - \e a = 6378171.36 m ± 0.30 m * - \e a / (\e a − \e c) = 297.7738 ± 0.0003 * - \e a / (\e a − \e b) = 91449 ± 60 * . * which gives: \e a = 6378171.36 m, \e b = 6378101.61 m, \e c = 6356751.84 * m. Here take the semiaxes to be whole numbers of meters, with (\e a + * \e b)/2 = WGS84_a(), \e a − \e b = 70 m, \e c = round(WGS84_a() * * (1 - WGS84_f())). This gives * - \e a = 6378172 m * - \e b = 6378102 m * - \e c = 6356752 m * - \e lon0 = −14.93° **********************************************************************/ ///@{ /** * @tparam T the type of the returned value. * @return the major semiaxis of a triaxial approximation to the Earth, \e * a, in m (= 6378172). **********************************************************************/ template static T Triaxial_Earth_a() { return WGS84_a() + 70/real(2); } /** * @tparam T the type of the returned value. * @return the median semiaxis of a triaxial approximation to the Earth, \e * b, in m (= 6378102). **********************************************************************/ template static T Triaxial_Earth_b() { return WGS84_a() - 70/real(2); } /** * @tparam T the type of the returned value. * @return the minor semiaxis of a triaxial approximation to the Earth, \e * c, in m (= 6356752). **********************************************************************/ template static T Triaxial_Earth_c() { using std::round; return round(WGS84_a() * (1 - WGS84_f())); } /** * @tparam T the type of the returned value. * @return the longitude, with respect to Greenwich, of the major semiaxis * of of a triaxial approximation to the Earth, \e lon0, in degrees (= * −14.93). **********************************************************************/ template static T Triaxial_Earth_lon0() { return T(1493) / 100; } ///@} /** \name SI units **********************************************************************/ ///@{ /** * @tparam T the type of the returned value. * @return the number of meters in a meter. * * This is unity, but this lets the internal system of units be changed if * necessary. **********************************************************************/ template static T meter() { return T(1); } /** * @return the number of meters in a kilometer. **********************************************************************/ static Math::real kilometer() { return 1000 * meter(); } /** * @return the number of meters in a nautical mile (approximately 1 arc * minute) **********************************************************************/ static Math::real nauticalmile() { return 1852 * meter(); } /** * @tparam T the type of the returned value. * @return the number of square meters in a square meter. * * This is unity, but this lets the internal system of units be changed if * necessary. **********************************************************************/ template static T square_meter() { return meter() * meter(); } /** * @return the number of square meters in a hectare. **********************************************************************/ static Math::real hectare() { return 10000 * square_meter(); } /** * @return the number of square meters in a square kilometer. **********************************************************************/ static Math::real square_kilometer() { return kilometer() * kilometer(); } /** * @return the number of square meters in a square nautical mile. **********************************************************************/ static Math::real square_nauticalmile() { return nauticalmile() * nauticalmile(); } ///@} /** \name Anachronistic British units **********************************************************************/ ///@{ /** * @return the number of meters in an international foot. **********************************************************************/ static Math::real foot() { return real(254 * 12) / 10000 * meter(); } /** * @return the number of meters in a yard. **********************************************************************/ static Math::real yard() { return 3 * foot(); } /** * @return the number of meters in a fathom. **********************************************************************/ static Math::real fathom() { return 2 * yard(); } /** * @return the number of meters in a chain. **********************************************************************/ static Math::real chain() { return 22 * yard(); } /** * @return the number of meters in a furlong. **********************************************************************/ static Math::real furlong() { return 10 * chain(); } /** * @return the number of meters in a statute mile. **********************************************************************/ static Math::real mile() { return 8 * furlong(); } /** * @return the number of square meters in an acre. **********************************************************************/ static Math::real acre() { return chain() * furlong(); } /** * @return the number of square meters in a square statute mile. **********************************************************************/ static Math::real square_mile() { return mile() * mile(); } ///@} /** \name Anachronistic US units **********************************************************************/ ///@{ /** * @return the number of meters in a US survey foot. **********************************************************************/ static Math::real surveyfoot() { return real(1200) / 3937 * meter(); } ///@} }; /** * \brief Exception handling for %GeographicLib * * A class to handle exceptions. It's derived from std::runtime_error so it * can be caught by the usual catch clauses. * * Example of use: * \include example-GeographicErr.cpp **********************************************************************/ class GeographicErr : public std::runtime_error { public: /** * Constructor * * @param[in] msg a string message, which is accessible in the catch * clause via what(). **********************************************************************/ GeographicErr(const std::string& msg) : std::runtime_error(msg) {} }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_CONSTANTS_HPP geosphere/src/GeodesicExact.cpp0000644000176200001440000016215415147425256016261 0ustar liggesusers/** * \file GeodesicExact.cpp * \brief Implementation for GeographicLib::GeodesicExact class * * Copyright (c) Charles Karney (2012-2025) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ * * This is a reformulation of the geodesic problem. The notation is as * follows: * - at a general point (no suffix or 1 or 2 as suffix) * - phi = latitude * - beta = latitude on auxiliary sphere * - omega = longitude on auxiliary sphere * - lambda = longitude * - alpha = azimuth of great circle * - sigma = arc length along great circle * - s = distance * - tau = scaled distance (= sigma at multiples of pi/2) * - at northwards equator crossing * - beta = phi = 0 * - omega = lambda = 0 * - alpha = alpha0 * - sigma = s = 0 * - a 12 suffix means a difference, e.g., s12 = s2 - s1. * - s and c prefixes mean sin and cos **********************************************************************/ #include "GeodesicExact.h" #include "GeodesicLineExact.h" #include #if defined(_MSC_VER) // Squelch warnings about potentially uninitialized local variables # pragma warning (disable: 4701) #endif namespace GeographicLib { using namespace std; GeodesicExact::GeodesicExact(real a, real f) : maxit2_(maxit1_ + Math::digits() + 10) // Underflow guard. We require // tiny_ * epsilon() > 0 // tiny_ + epsilon() == epsilon() , tiny_(sqrt(numeric_limits::min())) , tol0_(numeric_limits::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_)) , tolb_(tol0_) // Check on bisection interval , xthresh_(1000 * tol2_) , _a(a) , _f(f) , _f1(1 - _f) , _e2(_f * (2 - _f)) , _ep2(_e2 / Math::sq(_f1)) // e2 / (1 - e2) , _n(_f / ( 2 - _f)) , _b(_a * _f1) // The Geodesic class substitutes atanh(sqrt(e2)) for asinh(sqrt(ep2)) in // the definition of _c2. The latter is more accurate for very oblate // ellipsoids (which the Geodesic class does not attempt to handle). , _c2((Math::sq(_a) + Math::sq(_b) * (_f == 0 ? 1 : (_f > 0 ? asinh(sqrt(_ep2)) : atan(sqrt(-_e2))) / sqrt(fabs(_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. , _etol2(real(0.1) * tol2_ / sqrt( fmax(real(0.001), fabs(_f)) * fmin(real(1), 1 - _f/2) / 2 )) { if (!(isfinite(_a) && _a > 0)) throw GeographicErr("Equatorial radius is not positive"); if (!(isfinite(_b) && _b > 0)) throw GeographicErr("Polar semiaxis is not positive"); // Required number of terms in DST for full accuracy for all precisions as // a function of n in [-0.99, 0.99]. Values determined by running // develop/AreaEst compiled with GEOGRAPHICLIB_PRECISION = 5. For // precision 4 and 5, GEOGRAPHICLIB_DIGITS was set to, resp., 384 and 768. // The error criterion is relative error less than or equal to epsilon/2 = // 0.5^digits, with digits = 24, 53, 64, 113, 256. The first 4 are the the // "standard" values for float, double, long double, and float128; the last // is the default for GeographicLib + mpfr. Also listed is the value of // alp0 resulting in the most error for the given N. // // float double long double quad mpfr // n N alp0 N alp0 N alp0 N alp0 N alp0 // -0.99 1024 0.09 3072 0.05 4096 0.04 8192 43.50 16384 22.01 // -0.98 512 0.18 1536 0.10 2048 0.09 4096 0.06 8192 0.04 // -0.97 384 0.25 1024 0.16 1536 0.13 3072 0.09 6144 0.06 // -0.96 256 0.36 768 0.21 1024 0.18 2048 0.13 4096 0.09 // -0.95 192 0.47 768 0.23 768 0.23 1536 0.17 4096 0.10 // -0.94 192 0.51 512 0.31 768 0.26 1536 0.18 3072 0.13 // -0.93 192 0.55 384 0.39 512 0.34 1024 0.24 3072 0.14 // -0.92 128 0.73 384 0.42 512 0.37 1024 0.26 2048 0.18 // -0.91 128 0.77 384 0.45 384 0.45 768 0.32 2048 0.19 // -0.90 96 0.94 256 0.58 384 0.47 768 0.34 2048 0.21 // -0.89 96 0.99 256 0.61 384 0.50 768 0.35 1536 0.25 // -0.88 96 1.04 256 0.64 384 0.52 768 0.37 1536 0.26 // -0.87 96 1.09 192 0.77 256 0.67 512 0.47 1536 0.27 // -0.86 64 1.38 192 0.80 256 0.69 512 0.49 1536 0.28 // -0.85 64 1.43 192 0.83 256 0.72 512 0.51 1024 0.36 // -0.84 64 1.49 192 0.86 256 0.75 384 0.61 1024 0.37 // -0.83 64 1.54 192 0.89 192 0.89 384 0.63 1024 0.39 // -0.82 48 1.82 192 0.92 192 0.92 384 0.65 1024 0.40 // -0.81 48 1.88 128 1.16 192 0.95 384 0.67 1024 0.41 // -0.80 48 1.94 128 1.19 192 0.97 384 0.69 768 0.49 // -0.79 48 1.99 128 1.23 192 1.00 384 0.71 768 0.50 // -0.78 48 2.04 128 1.26 192 1.03 384 0.73 768 0.51 // -0.77 48 2.10 128 1.29 192 1.05 256 0.91 768 0.53 // -0.76 48 2.15 128 1.32 128 1.32 256 0.93 768 0.54 // -0.75 48 2.20 96 1.56 128 1.35 256 0.96 768 0.55 // -0.74 32 2.74 96 1.60 128 1.38 256 0.98 768 0.57 // -0.73 32 2.81 96 1.63 128 1.41 256 1.00 768 0.58 // -0.72 32 2.87 96 1.67 128 1.44 256 1.02 512 0.72 // -0.71 32 2.93 96 1.70 128 1.47 192 1.20 512 0.74 // -0.70 32 2.99 96 1.73 96 1.73 192 1.23 512 0.75 // -0.69 32 3.05 96 1.77 96 1.77 192 1.25 512 0.77 // -0.68 32 3.11 96 1.80 96 1.80 192 1.28 512 0.78 // -0.67 24 3.64 96 1.84 96 1.84 192 1.30 512 0.80 // -0.66 24 3.71 96 1.87 96 1.87 192 1.32 512 0.81 // -0.65 24 3.77 64 2.33 96 1.90 192 1.35 384 0.95 // -0.64 24 3.84 64 2.37 96 1.93 192 1.37 384 0.97 // -0.63 24 3.90 64 2.41 96 1.97 192 1.39 384 0.98 // -0.62 24 3.97 64 2.45 96 2.00 192 1.42 384 1.00 // -0.61 24 4.04 64 2.49 96 2.03 192 1.44 384 1.02 // -0.60 24 4.10 64 2.53 96 2.06 192 1.46 384 1.03 // -0.59 24 4.16 64 2.57 64 2.57 128 1.82 384 1.05 // -0.58 24 4.23 64 2.60 64 2.60 128 1.84 384 1.07 // -0.57 24 4.29 48 3.05 64 2.64 128 1.87 384 1.08 // -0.56 24 4.36 48 3.10 64 2.68 128 1.90 384 1.10 // -0.55 16 5.38 48 3.14 64 2.72 128 1.93 384 1.11 // -0.54 16 5.46 48 3.19 64 2.76 128 1.96 384 1.13 // -0.53 16 5.54 48 3.23 64 2.80 128 1.98 256 1.40 // -0.52 16 5.61 48 3.27 64 2.84 128 2.01 256 1.42 // -0.51 16 5.69 48 3.32 64 2.88 128 2.04 256 1.44 // -0.50 16 5.77 48 3.36 64 2.92 96 2.38 256 1.46 // -0.49 16 5.85 48 3.41 48 3.41 96 2.42 256 1.48 // -0.48 16 5.92 48 3.45 48 3.45 96 2.45 256 1.50 // -0.47 16 6.00 48 3.50 48 3.50 96 2.48 256 1.52 // -0.46 16 6.08 48 3.54 48 3.54 96 2.51 256 1.54 // -0.45 12 7.06 48 3.59 48 3.59 96 2.54 256 1.56 // -0.44 12 7.15 48 3.63 48 3.63 96 2.57 256 1.58 // -0.43 12 7.24 32 4.49 48 3.68 96 2.61 256 1.60 // -0.42 12 7.33 32 4.55 48 3.72 96 2.64 192 1.87 // -0.41 12 7.42 32 4.60 48 3.77 96 2.67 192 1.89 // -0.40 12 7.51 32 4.66 48 3.81 96 2.70 192 1.91 // -0.39 12 7.60 32 4.71 48 3.86 96 2.73 192 1.94 // -0.38 12 7.69 32 4.77 48 3.90 96 2.77 192 1.96 // -0.37 12 7.77 32 4.82 48 3.95 96 2.80 192 1.98 // -0.36 12 7.86 32 4.88 48 3.99 96 2.83 192 2.00 // -0.35 12 7.95 32 4.94 32 4.94 64 3.50 192 2.03 // -0.34 12 8.04 32 4.99 32 4.99 64 3.54 192 2.05 // -0.33 12 8.13 24 5.81 32 5.05 64 3.58 192 2.07 // -0.32 12 8.22 24 5.88 32 5.10 64 3.62 192 2.10 // -0.31 12 8.31 24 5.94 32 5.16 64 3.66 192 2.12 // -0.30 8 10.16 24 6.01 32 5.22 64 3.70 192 2.14 // -0.29 8 10.27 24 6.07 32 5.27 64 3.74 192 2.17 // -0.28 8 10.38 24 6.14 32 5.33 64 3.78 128 2.68 // -0.27 8 10.49 24 6.20 32 5.39 64 3.82 128 2.71 // -0.26 8 10.60 24 6.27 32 5.45 64 3.87 128 2.74 // -0.25 8 10.72 24 6.34 32 5.50 48 4.51 128 2.77 // -0.24 8 10.83 24 6.40 24 6.40 48 4.55 128 2.80 // -0.23 8 10.94 24 6.47 24 6.47 48 4.60 128 2.83 // -0.22 8 11.05 24 6.54 24 6.54 48 4.65 128 2.86 // -0.21 6 12.72 24 6.60 24 6.60 48 4.70 128 2.89 // -0.20 6 12.85 24 6.67 24 6.67 48 4.75 128 2.92 // -0.19 6 12.97 16 8.21 24 6.74 48 4.80 128 2.95 // -0.18 6 13.10 16 8.29 24 6.81 48 4.85 96 3.44 // -0.17 6 13.23 16 8.37 24 6.88 48 4.89 96 3.47 // -0.16 6 13.36 16 8.46 24 6.95 48 4.94 96 3.51 // -0.15 6 13.49 16 8.54 24 7.02 48 5.00 96 3.54 // -0.14 6 13.62 16 8.62 24 7.09 48 5.05 96 3.58 // -0.13 6 13.75 16 8.71 24 7.16 48 5.10 96 3.62 // -0.12 6 13.88 16 8.80 16 8.80 32 6.28 96 3.65 // -0.11 6 14.01 12 10.19 16 8.88 32 6.35 96 3.69 // -0.10 4 16.85 12 10.28 16 8.97 32 6.41 96 3.73 // -0.09 4 17.01 12 10.38 16 9.06 32 6.47 96 3.76 // -0.08 4 17.17 12 10.48 16 9.14 32 6.54 96 3.80 // -0.07 4 17.32 12 10.58 16 9.23 32 6.60 64 4.69 // -0.06 4 17.48 12 10.69 12 10.69 24 7.67 64 4.74 // -0.05 4 17.64 12 10.79 12 10.79 24 7.75 64 4.79 // -0.04 4 17.80 12 10.89 12 10.89 24 7.82 64 4.84 // -0.03 4 17.96 8 13.26 12 10.99 24 7.90 48 5.63 // -0.02 4 18.11 8 13.38 12 11.10 24 7.97 48 5.68 // -0.01 4 18.27 6 15.36 8 13.51 16 9.78 48 5.74 // 0.00 4 1.00 4 1.00 4 1.00 4 1.00 4 1.00 // 0.01 4 18.57 6 15.62 8 13.75 16 9.96 48 5.85 // 0.02 4 18.70 8 13.86 12 11.51 24 8.28 48 5.91 // 0.03 4 18.83 8 13.97 12 11.61 24 8.36 48 5.97 // 0.04 4 18.96 12 11.71 12 11.71 24 8.44 64 5.23 // 0.05 4 19.09 12 11.81 12 11.81 24 8.52 64 5.28 // 0.06 4 19.22 12 11.92 12 11.92 24 8.60 64 5.33 // 0.07 4 19.36 12 12.02 16 10.52 32 7.55 64 5.39 // 0.08 4 19.49 12 12.13 16 10.61 32 7.63 64 5.44 // 0.09 4 19.62 12 12.23 16 10.71 32 7.70 96 4.50 // 0.10 4 19.76 12 12.34 16 10.80 32 7.77 96 4.54 // 0.11 4 19.89 12 12.45 16 10.90 32 7.85 96 4.59 // 0.12 6 17.01 16 11.00 16 11.00 32 7.92 96 4.63 // 0.13 6 17.14 16 11.10 16 11.10 32 8.00 96 4.68 // 0.14 6 17.27 16 11.20 24 9.26 48 6.64 96 4.73 // 0.15 6 17.40 16 11.30 24 9.35 48 6.70 96 4.77 // 0.16 6 17.53 16 11.40 24 9.44 48 6.77 96 4.82 // 0.17 6 17.67 16 11.51 24 9.53 48 6.84 96 4.87 // 0.18 6 17.80 16 11.61 24 9.62 48 6.90 96 4.92 // 0.19 6 17.94 16 11.72 24 9.71 48 6.97 128 4.31 // 0.20 6 18.07 16 11.83 24 9.80 48 7.04 128 4.36 // 0.21 6 18.21 24 9.90 24 9.90 48 7.11 128 4.40 // 0.22 6 18.35 24 9.99 24 9.99 48 7.18 128 4.45 // 0.23 6 18.49 24 10.09 24 10.09 48 7.26 128 4.49 // 0.24 6 18.63 24 10.19 24 10.19 48 7.33 128 4.54 // 0.25 6 18.77 24 10.28 24 10.28 48 7.41 128 4.59 // 0.26 6 18.92 24 10.39 24 10.39 48 7.48 128 4.64 // 0.27 8 17.00 24 10.49 32 9.17 64 6.58 128 4.69 // 0.28 8 17.14 24 10.59 32 9.26 64 6.65 128 4.74 // 0.29 8 17.28 24 10.69 32 9.35 64 6.72 192 3.92 // 0.30 8 17.43 24 10.80 32 9.45 64 6.79 192 3.96 // 0.31 8 17.57 24 10.91 32 9.54 64 6.86 192 4.01 // 0.32 8 17.72 24 11.02 32 9.64 64 6.93 192 4.05 // 0.33 8 17.87 24 11.13 32 9.74 64 7.01 192 4.09 // 0.34 8 18.02 24 11.24 32 9.84 64 7.08 192 4.14 // 0.35 8 18.17 24 11.36 32 9.95 64 7.16 192 4.19 // 0.36 8 18.32 24 11.47 32 10.05 64 7.24 192 4.23 // 0.37 8 18.48 32 10.16 32 10.16 64 7.32 192 4.28 // 0.38 8 18.63 32 10.27 32 10.27 96 6.08 192 4.33 // 0.39 8 18.79 32 10.38 48 8.58 96 6.15 192 4.38 // 0.40 8 18.95 32 10.49 48 8.68 96 6.22 192 4.43 // 0.41 8 19.11 32 10.60 48 8.78 96 6.30 192 4.49 // 0.42 12 16.45 32 10.72 48 8.88 96 6.37 192 4.54 // 0.43 12 16.61 32 10.84 48 8.98 96 6.45 192 4.59 // 0.44 12 16.77 32 10.96 48 9.08 96 6.52 256 4.04 // 0.45 12 16.93 32 11.09 48 9.19 96 6.60 256 4.09 // 0.46 12 17.10 32 11.21 48 9.30 96 6.68 256 4.14 // 0.47 12 17.26 32 11.34 48 9.41 96 6.77 256 4.19 // 0.48 12 17.44 32 11.47 48 9.52 96 6.85 256 4.24 // 0.49 12 17.61 48 9.64 48 9.64 96 6.94 256 4.30 // 0.50 12 17.79 48 9.76 48 9.76 96 7.03 256 4.35 // 0.51 12 17.97 48 9.88 48 9.88 96 7.12 256 4.41 // 0.52 12 18.15 48 10.00 48 10.00 96 7.21 256 4.47 // 0.53 12 18.34 48 10.13 48 10.13 128 6.36 256 4.53 // 0.54 12 18.53 48 10.26 48 10.26 128 6.45 256 4.59 // 0.55 12 18.72 48 10.40 64 9.10 128 6.53 384 3.82 // 0.56 12 18.92 48 10.53 64 9.22 128 6.63 384 3.87 // 0.57 12 19.12 48 10.68 64 9.35 128 6.72 384 3.93 // 0.58 12 19.33 48 10.82 64 9.48 128 6.82 384 3.98 // 0.59 12 19.54 48 10.97 64 9.61 128 6.92 384 4.05 // 0.60 12 19.75 48 11.13 64 9.75 128 7.02 384 4.11 // 0.61 12 19.97 48 11.28 64 9.89 128 7.13 384 4.17 // 0.62 12 20.20 48 11.45 64 10.04 128 7.24 384 4.24 // 0.63 16 18.39 48 11.62 64 10.19 192 6.05 384 4.31 // 0.64 16 18.62 64 10.35 64 10.35 192 6.15 384 4.38 // 0.65 16 18.86 64 10.51 96 8.71 192 6.25 384 4.45 // 0.66 16 19.10 64 10.68 96 8.85 192 6.36 384 4.53 // 0.67 16 19.35 64 10.86 96 9.00 192 6.47 512 4.00 // 0.68 16 19.60 64 11.04 96 9.16 192 6.58 512 4.08 // 0.69 16 19.87 64 11.23 96 9.32 192 6.70 512 4.15 // 0.70 16 20.14 64 11.43 96 9.49 192 6.83 512 4.23 // 0.71 16 20.42 64 11.63 96 9.67 192 6.96 512 4.32 // 0.72 16 20.71 64 11.85 96 9.85 192 7.10 512 4.40 // 0.73 16 21.01 96 10.04 96 10.04 192 7.25 512 4.50 // 0.74 16 21.32 96 10.25 96 10.25 256 6.44 768 3.76 // 0.75 16 21.65 96 10.46 96 10.46 256 6.58 768 3.84 // 0.76 16 21.99 96 10.68 128 9.36 256 6.73 768 3.93 // 0.77 24 19.41 96 10.92 128 9.57 256 6.89 768 4.03 // 0.78 24 19.76 96 11.17 128 9.79 256 7.06 768 4.13 // 0.79 24 20.13 96 11.44 128 10.03 256 7.24 768 4.24 // 0.80 24 20.51 96 11.72 128 10.29 384 6.11 768 4.35 // 0.81 24 20.92 96 12.02 128 10.56 384 6.28 768 4.48 // 0.82 24 21.35 96 12.34 192 8.99 384 6.46 1024 4.00 // 0.83 24 21.81 128 11.16 192 9.26 384 6.66 1024 4.13 // 0.84 24 22.29 128 11.50 192 9.55 384 6.88 1024 4.26 // 0.85 24 22.82 128 11.86 192 9.87 384 7.11 1024 4.41 // 0.86 24 23.38 128 12.26 192 10.21 384 7.37 1024 4.58 // 0.87 24 24.00 128 12.70 192 10.59 512 6.67 1536 3.90 // 0.88 24 24.67 192 11.01 192 11.01 512 6.95 1536 4.06 // 0.89 24 25.41 192 11.48 256 10.07 512 7.26 1536 4.25 // 0.90 24 26.24 192 12.00 256 10.54 768 6.27 1536 4.47 // 0.91 24 27.17 192 12.61 256 11.09 768 6.62 2048 4.10 // 0.92 24 28.23 192 13.30 384 9.74 768 7.02 2048 4.35 // 0.93 24 29.45 256 12.46 384 10.38 768 7.50 3072 3.82 // 0.94 24 30.86 256 13.36 384 11.16 1024 7.05 3072 4.13 // 0.95 24 32.53 384 12.14 512 10.67 1024 7.72 3072 4.53 // 0.96 24 34.51 384 13.42 512 11.83 1536 7.09 4096 4.40 // 0.97 24 36.88 512 13.45 768 11.24 2048 7.11 6144 4.16 // 0.98 16 41.78 768 13.48 1024 11.88 3072 7.12 8192 4.42 // 0.99 8 44.82 1024 16.00 1536 13.51 6144 7.14 16384 4.43 static const int ndiv = 100; // Encode N as small integer: 2,3,4,6,8,12... -> 0,1,2,3,4,5... // using this awk script // // { // n = $1; // if (n % 3 == 0) { // s = 1; // n = n/3; // } else { // s = 0; // n = n/2; // } // p = int( log(n)/log(2)+0.5 ); // printf "%d\n", 2*p+s; // } // // A couple of changes have been made: (1) the decrease in N for float and // n > 0.97 has been removed; (2) entrys of n=+/-1 have been included // (incrementing the previous code value by 1). #if GEOGRAPHICLIB_PRECISION == 1 static const unsigned char narr[2*ndiv+1] = { 19,18,16,15,14,13,13,13,12,12,11,11,11,11,10,10,10,10,9,9,9,9,9,9,9,9,8, 8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6, 6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8 }; #elif GEOGRAPHICLIB_PRECISION == 2 static const unsigned char narr[2*ndiv+1] = { 22,21,19,18,17,17,16,15,15,15,14,14,14,13,13,13,13,13,13,12,12,12,12,12, 12,11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6, 6,6,5,5,5,5,5,5,5,5,4,4,3,2,3,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,12,12, 12,12,12,13,13,13,13,13,14,14,15,15,16,17,18,19 }; #elif GEOGRAPHICLIB_PRECISION == 3 static const unsigned char narr[2*ndiv+1] = { 23,22,20,19,18,17,17,16,16,15,15,15,15,14,14,14,14,13,13,13,13,13,13,13, 12,12,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10, 10,10,10,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7, 7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,4,2,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7, 7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,12,12,12, 12,12,12,13,13,13,13,13,13,13,14,14,14,15,15,15,16,16,17,18,19,20 }; #elif GEOGRAPHICLIB_PRECISION == 4 static const unsigned char narr[2*ndiv+1] = { 25,24,22,21,20,19,19,18,18,17,17,17,17,16,16,16,15,15,15,15,15,15,15,14, 14,14,14,14,14,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,12,12,12, 12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10, 10,10,10,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,8,8,8,7,7,7,7,7,6,2,6,7,7,7,7,7, 8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10, 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12, 12,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,15,15,15,15,15,15, 15,16,16,16,17,17,17,17,18,18,19,20,21,23,24 }; #elif GEOGRAPHICLIB_PRECISION >= 5 static const unsigned char narr[2*ndiv+1] = { 27,26,24,23,22,22,21,21,20,20,20,19,19,19,19,18,18,18,18,18,17,17,17,17, 17,17,17,17,16,16,16,16,16,16,16,15,15,15,15,15,15,15,15,15,15,15,15,14, 14,14,14,14,14,14,14,14,14,14,13,13,13,13,13,13,13,13,13,13,13,13,13,13, 12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,10,10,10, 10,9,9,9,2,9,9,9,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,12,12,12, 12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14, 14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16, 16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,19,19,19,19,20,20,21, 21,21,22,23,24,26,27 }; #else #error "Bad value for GEOGRAPHICLIB_PRECISION" #endif real n = ndiv * _n; // n in [-ndiv, ndiv] int j = ndiv + int(n < 0 ? floor(n) : ceil(n)); // j in [0, 2*ndiv] int N = int(narr[j]); // Decode 0,1,2,3,4,5... -> 2,3,4,6,8,12... N = (N % 2 == 0 ? 2 : 3) * (1 << (N/2)); #if GEOGRAPHICLIB_PRECISION == 5 if (Math::digits() > 256) { // Scale up N by the number of digits in the precision relative to // the number used for the test = 256. int M = (Math::digits() * N) / 256; while (N < M) N = N % 3 == 0 ? 4*N/3 : 3*N/2; } #endif _fft.reset(N); _nC4 = N; } const GeodesicExact& GeodesicExact::WGS84() { static const GeodesicExact wgs84(Constants::WGS84_a(), Constants::WGS84_f()); return wgs84; } GeodesicLineExact GeodesicExact::Line(real lat1, real lon1, real azi1, unsigned caps) const { return GeodesicLineExact(*this, lat1, lon1, azi1, caps); } Math::real GeodesicExact::GenDirect(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned outmask, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21, real& S12) const { // Automatically supply DISTANCE_IN if necessary if (!arcmode) outmask |= DISTANCE_IN; return GeodesicLineExact(*this, lat1, lon1, azi1, outmask) . // Note the dot! GenPosition(arcmode, s12_a12, outmask, lat2, lon2, azi2, s12, m12, M12, M21, S12); } GeodesicLineExact GeodesicExact::GenDirectLine(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned caps) const { azi1 = Math::AngNormalize(azi1); real salp1, calp1; // Guard against underflow in salp0. Also -0 is converted to +0. Math::sincosd(Math::AngRound(azi1), salp1, calp1); // Automatically supply DISTANCE_IN if necessary if (!arcmode) caps |= DISTANCE_IN; return GeodesicLineExact(*this, lat1, lon1, azi1, salp1, calp1, caps, arcmode, s12_a12); } GeodesicLineExact GeodesicExact::DirectLine(real lat1, real lon1, real azi1, real s12, unsigned caps) const { return GenDirectLine(lat1, lon1, azi1, false, s12, caps); } GeodesicLineExact GeodesicExact::ArcDirectLine(real lat1, real lon1, real azi1, real a12, unsigned caps) const { return GenDirectLine(lat1, lon1, azi1, true, a12, caps); } Math::real GeodesicExact::GenInverse(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real& s12, real& salp1, real& calp1, real& salp2, real& calp2, real& m12, real& M12, real& M21, real& S12) const { // 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. real lon12s, lon12 = Math::AngDiff(lon1, lon2, lon12s); // Make longitude difference positive. int lonsign = signbit(lon12) ? -1 : 1; lon12 *= lonsign; lon12s *= lonsign; real lam12 = lon12 * Math::degree(), slam12, clam12; // Calculate sincos of lon12 + error (this applies AngRound internally). Math::sincosde(lon12, lon12s, slam12, clam12); // the supplementary longitude difference lon12s = (Math::hd - lon12) - lon12s; // If really close to the equator, treat as on equator. lat1 = Math::AngRound(Math::LatFix(lat1)); lat2 = Math::AngRound(Math::LatFix(lat2)); // Swap points so that point with higher (abs) latitude is point 1 // If one latitude is a nan, then it becomes lat1. int swapp = fabs(lat1) < fabs(lat2) || isnan(lat2) ? -1 : 1; if (swapp < 0) { lonsign *= -1; swap(lat1, lat2); } // Make lat1 <= -0 int latsign = signbit(lat1) ? 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. real sbet1, cbet1, sbet2, cbet2, s12x, m12x = Math::NaN(); // Initialize for the meridian. No longitude calculation is done in this // case to let the parameter default to 0. EllipticFunction E(-_ep2); Math::sincosd(lat1, sbet1, cbet1); sbet1 *= _f1; // Ensure cbet1 = +epsilon at poles; doing the fix on beta means that sig12 // will be <= 2*tiny for two points at the same pole. Math::norm(sbet1, cbet1); cbet1 = fmax(tiny_, cbet1); Math::sincosd(lat2, sbet2, cbet2); sbet2 *= _f1; // Ensure cbet2 = +epsilon at poles Math::norm(sbet2, cbet2); cbet2 = fmax(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 = copysign(sbet1, sbet2); } else { if (fabs(sbet2) == -sbet1) cbet2 = cbet1; } real dn1 = (_f >= 0 ? sqrt(1 + _ep2 * Math::sq(sbet1)) : sqrt(1 - _e2 * Math::sq(cbet1)) / _f1), dn2 = (_f >= 0 ? sqrt(1 + _ep2 * Math::sq(sbet2)) : sqrt(1 - _e2 * Math::sq(cbet2)) / _f1); real a12, sig12; bool meridian = lat1 == -Math::qd || slam12 == 0; if (meridian) { // Endpoints are on a single full meridian, so the geodesic might lie on // a meridian. calp1 = clam12; salp1 = slam12; // Head to the target longitude calp2 = 1; salp2 = 0; // At the target we're heading north real // tan(bet) = tan(sig) * cos(alp) ssig1 = sbet1, csig1 = calp1 * cbet1, ssig2 = sbet2, csig2 = calp2 * cbet2; // sig12 = sig2 - sig1 sig12 = atan2(fmax(real(0), csig1 * ssig2 - ssig1 * csig2), csig1 * csig2 + ssig1 * ssig2); { real dummy; Lengths(E, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2, outmask | REDUCEDLENGTH, s12x, m12x, dummy, M12, M21); } // 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 if (sig12 < tol2_ || 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 *= _b; s12x *= _b; a12 = sig12 / Math::degree(); } else // m12 < 0, i.e., prolate and too close to anti-podal meridian = false; } // somg12 == 2 marks that it needs to be calculated real omg12 = 0, somg12 = 2, comg12 = 0; if (!meridian && sbet1 == 0 && // and sbet2 == 0 (_f <= 0 || lon12s >= _f * Math::hd)) { // Geodesic runs along equator calp1 = calp2 = 0; salp1 = salp2 = 1; s12x = _a * lam12; sig12 = omg12 = lam12 / _f1; m12x = _b * sin(sig12); if (outmask & GEODESICSCALE) M12 = M21 = cos(sig12); a12 = lon12 / _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; sig12 = InverseStart(E, sbet1, cbet1, dn1, sbet2, cbet2, dn2, lam12, slam12, clam12, salp1, calp1, salp2, calp2, dnm); if (sig12 >= 0) { // Short lines (InverseStart sets salp2, calp2, dnm) s12x = sig12 * _b * dnm; m12x = Math::sq(dnm) * _b * sin(sig12 / dnm); if (outmask & GEODESICSCALE) M12 = M21 = cos(sig12 / dnm); a12 = sig12 / Math::degree(); omg12 = lam12 / (_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. // // initial values to suppress warnings (if loop is executed 0 times) real ssig1 = 0, csig1 = 0, ssig2 = 0, csig2 = 0, domg12 = 0; unsigned numit = 0; // Bracketing range real salp1a = tiny_, calp1a = 1, salp1b = tiny_, calp1b = -1; for (bool tripn = false, tripb = false;; ++numit) { // 1/4 meridian = 10e6 m and random input. max err is estimated max // error in nm (checking solution of inverse problem by direct // solution). iter is mean and sd of number of iterations // // max iter // log2(b/a) err mean sd // -7 387 5.33 3.68 // -6 345 5.19 3.43 // -5 269 5.00 3.05 // -4 210 4.76 2.44 // -3 115 4.55 1.87 // -2 69 4.35 1.38 // -1 36 4.05 1.03 // 0 15 0.01 0.13 // 1 25 5.10 1.53 // 2 96 5.61 2.09 // 3 318 6.02 2.74 // 4 985 6.24 3.22 // 5 2352 6.32 3.44 // 6 6008 6.30 3.45 // 7 19024 6.19 3.30 real dv; real v = Lambda12(sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1, slam12, clam12, salp2, calp2, sig12, ssig1, csig1, ssig2, csig2, E, domg12, numit < maxit1_, dv); if (tripb || // Reversed test to allow escape with NaNs !(fabs(v) >= (tripn ? 8 : 1) * tol0_) || // Enough bisections to get accurate result numit == maxit2_) 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; // |dalp1| < pi test moved earlier because GEOGRAPHICLIB_PRECISION // = 5 can result in dalp1 = 10^(10^8). Then sin(dalp1) takes ages // (because of the need to do accurate range reduction). if (fabs(dalp1) < Math::pi()) { real sdalp1 = sin(dalp1), cdalp1 = cos(dalp1), nsalp1 = salp1 * cdalp1 + calp1 * sdalp1; if (nsalp1 > 0) { calp1 = calp1 * cdalp1 - salp1 * sdalp1; salp1 = nsalp1; Math::norm(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; Math::norm(salp1, calp1); tripn = false; tripb = (fabs(salp1a - salp1) + (calp1a - calp1) < tolb_ || fabs(salp1 - salp1b) + (calp1 - calp1b) < tolb_); } { real dummy; Lengths(E, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2, outmask, s12x, m12x, dummy, M12, M21); } m12x *= _b; s12x *= _b; a12 = sig12 / Math::degree(); if (outmask & AREA) { // omg12 = lam12 - domg12 real sdomg12 = sin(domg12), cdomg12 = cos(domg12); somg12 = slam12 * cdomg12 - clam12 * sdomg12; comg12 = clam12 * cdomg12 + slam12 * sdomg12; } } } if (outmask & DISTANCE) s12 = real(0) + s12x; // Convert -0 to 0 if (outmask & REDUCEDLENGTH) m12 = real(0) + m12x; // Convert -0 to 0 if (outmask & AREA) { real // From Lambda12: sin(alp1) * cos(bet1) = sin(alp0) salp0 = salp1 * cbet1, calp0 = hypot(calp1, salp1 * sbet1); // calp0 > 0 real alp12, // Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0). A4 = Math::sq(_a) * calp0 * salp0 * _e2; if (A4 != 0) { real k2 = Math::sq(calp0) * _ep2, // From Lambda12: tan(bet) = tan(sig) * cos(alp) ssig1 = sbet1, csig1 = calp1 * cbet1, ssig2 = sbet2, csig2 = calp2 * cbet2; Math::norm(ssig1, csig1); Math::norm(ssig2, csig2); I4Integrand i4(_ep2, k2); vector C4a(_nC4); _fft.transform(i4, C4a.data()); S12 = A4 * DST::integral(ssig1, csig1, ssig2, csig2, C4a.data(), _nC4); } else // Avoid problems with indeterminate sig1, sig2 on equator S12 = 0; if (!meridian && somg12 == 2) { 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 += _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) { swap(salp1, salp2); swap(calp1, calp2); if (outmask & GEODESICSCALE) swap(M12, M21); } salp1 *= swapp * lonsign; calp1 *= swapp * latsign; salp2 *= swapp * lonsign; calp2 *= swapp * latsign; // Returned value in [0, 180] return a12; } Math::real GeodesicExact::GenInverse(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real& s12, real& azi1, real& azi2, real& m12, real& M12, real& M21, real& S12) const { outmask &= OUT_MASK; real salp1, calp1, salp2, calp2, a12 = GenInverse(lat1, lon1, lat2, lon2, outmask, s12, salp1, calp1, salp2, calp2, m12, M12, M21, S12); if (outmask & AZIMUTH) { azi1 = Math::atan2d(salp1, calp1); azi2 = Math::atan2d(salp2, calp2); } return a12; } GeodesicLineExact GeodesicExact::InverseLine(real lat1, real lon1, real lat2, real lon2, unsigned caps) const { real t, salp1, calp1, salp2, calp2, a12 = GenInverse(lat1, lon1, lat2, lon2, // No need to specify AZIMUTH here 0u, t, salp1, calp1, salp2, calp2, t, t, t, t), azi1 = Math::atan2d(salp1, calp1); // Ensure that a12 can be converted to a distance if (caps & (OUT_MASK & DISTANCE_IN)) caps |= DISTANCE; return GeodesicLineExact(*this, lat1, lon1, azi1, salp1, calp1, caps, true, a12); } void GeodesicExact::Lengths(const EllipticFunction& E, real sig12, real ssig1, real csig1, real dn1, real ssig2, real csig2, real dn2, real cbet1, real cbet2, unsigned outmask, real& s12b, real& m12b, real& m0, real& M12, real& M21) const { // Return m12b = (reduced length)/_b; also calculate s12b = distance/_b, // and m0 = coefficient of secular term in expression for reduced length. outmask &= OUT_ALL; // outmask & DISTANCE: set s12b // outmask & REDUCEDLENGTH: set m12b & m0 // outmask & GEODESICSCALE: set M12 & M21 // It's OK to have repeated dummy arguments, // e.g., s12b = m0 = M12 = M21 = dummy if (outmask & DISTANCE) // Missing a factor of _b s12b = E.E() / (Math::pi() / 2) * (sig12 + (E.deltaE(ssig2, csig2, dn2) - E.deltaE(ssig1, csig1, dn1))); if (outmask & (REDUCEDLENGTH | GEODESICSCALE)) { real m0x = - E.k2() * E.D() / (Math::pi() / 2), J12 = m0x * (sig12 + (E.deltaD(ssig2, csig2, dn2) - E.deltaD(ssig1, csig1, dn1))); if (outmask & REDUCEDLENGTH) { m0 = m0x; // Missing a factor of _b. Add parens around (csig1 * ssig2) and // (ssig1 * csig2) to ensure accurate cancellation in the case of // coincident points. m12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) - csig1 * csig2 * J12; } if (outmask & GEODESICSCALE) { real csig12 = csig1 * csig2 + ssig1 * ssig2; real t = _ep2 * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2); M12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1; M21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2; } } } Math::real GeodesicExact::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 = Math::sq(x), q = Math::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 = Math::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; if (disc >= 0) { real T3 = S + r3; // 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. real 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); } real v = sqrt(Math::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 + Math::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; } Math::real GeodesicExact::InverseStart(EllipticFunction& E, real sbet1, real cbet1, real dn1, real sbet2, real cbet2, real dn2, real lam12, real slam12, real clam12, real& salp1, real& calp1, // Only updated if return val >= 0 real& salp2, real& calp2, // Only updated for short lines real& dnm) const { // 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 = sbet2 * cbet1 + cbet2 * sbet1; bool shortline = cbet12 >= 0 && sbet12 < real(0.5) && cbet2 * lam12 < real(0.5); real somg12, comg12; if (shortline) { real sbetm2 = Math::sq(sbet1 + sbet2); // sin((bet1+bet2)/2)^2 // = (sbet1 + sbet2)^2 / ((sbet1 + sbet2)^2 + (cbet1 + cbet2)^2) sbetm2 /= sbetm2 + Math::sq(cbet1 + cbet2); dnm = sqrt(1 + _ep2 * sbetm2); real omg12 = lam12 / (_f1 * dnm); somg12 = sin(omg12); comg12 = cos(omg12); } else { somg12 = slam12; comg12 = clam12; } salp1 = cbet2 * somg12; calp1 = comg12 >= 0 ? sbet12 + cbet2 * sbet1 * Math::sq(somg12) / (1 + comg12) : sbet12a - cbet2 * sbet1 * Math::sq(somg12) / (1 - comg12); real ssig12 = hypot(salp1, calp1), csig12 = sbet1 * sbet2 + cbet1 * cbet2 * comg12; if (shortline && ssig12 < _etol2) { // really short lines salp2 = cbet1 * somg12; calp2 = sbet12 - cbet1 * sbet2 * (comg12 >= 0 ? Math::sq(somg12) / (1 + comg12) : 1 - comg12); Math::norm(salp2, calp2); // Set return value sig12 = atan2(ssig12, csig12); } else if (fabs(_n) > real(0.1) || // Skip astroid calc if too eccentric csig12 >= 0 || ssig12 >= 6 * fabs(_n) * Math::pi() * Math::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 x, y, lamscale, betscale; real lam12x = atan2(-slam12, -clam12); // lam12 - pi if (_f >= 0) { // In fact f == 0 does not get here // x = dlong, y = dlat { real k2 = Math::sq(sbet1) * _ep2; E.Reset(-k2, -_ep2, 1 + k2, 1 + _ep2); lamscale = _e2/_f1 * cbet1 * 2 * E.H(); } 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, dummy; // In the case of lon12 = 180, this repeats a calculation made in // Inverse. Lengths(E, Math::pi() + bet12a, sbet1, -cbet1, dn1, sbet2, cbet2, dn2, cbet1, cbet2, REDUCEDLENGTH, dummy, m12b, m0, dummy, dummy); x = -1 + m12b / (cbet1 * cbet2 * m0 * Math::pi()); betscale = x < -real(0.01) ? sbet12a / x : -_f * Math::sq(cbet1) * Math::pi(); lamscale = betscale / cbet1; y = lam12x / lamscale; } if (y > -tol1_ && x > -1 - xthresh_) { // strip near cut // Need real(x) here to cast away the volatility of x for min/max if (_f >= 0) { salp1 = fmin(real(1), -x); calp1 = - sqrt(1 - Math::sq(salp1)); } else { calp1 = fmax(real(x > -tol1_ ? 0 : -1), x); salp1 = sqrt(1 - Math::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 * ( _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 * Math::sq(somg12) / (1 - comg12); } } // Sanity check on starting guess. Backwards check allows NaN through. if (!(salp1 <= 0)) Math::norm(salp1, calp1); else { salp1 = 1; calp1 = 0; } return sig12; } Math::real GeodesicExact::Lambda12(real sbet1, real cbet1, real dn1, real sbet2, real cbet2, real dn2, real salp1, real calp1, real slam120, real clam120, real& salp2, real& calp2, real& sig12, real& ssig1, real& csig1, real& ssig2, real& csig2, EllipticFunction& E, real& domg12, bool diffp, real& dlam12) const { if (sbet1 == 0 && calp1 == 0) // Break degeneracy of equatorial line. This case has already been // handled. calp1 = -tiny_; real // sin(alp1) * cos(bet1) = sin(alp0) salp0 = salp1 * cbet1, calp0 = hypot(calp1, salp1 * sbet1); // calp0 > 0 real somg1, comg1, somg2, comg2, somg12, comg12, cchi1, cchi2, lam12; // 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; // Without normalization we have schi1 = somg1. cchi1 = _f1 * dn1 * comg1; Math::norm(ssig1, csig1); // Math::norm(somg1, comg1); -- don't need to normalize! // Math::norm(schi1, cchi1); -- 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(Math::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; // Without normalization we have schi2 = somg2. cchi2 = _f1 * dn2 * comg2; Math::norm(ssig2, csig2); // Math::norm(somg2, comg2); -- don't need to normalize! // Math::norm(schi2, cchi2); -- don't need to normalize! // sig12 = sig2 - sig1, limit to [0, pi] sig12 = atan2(fmax(real(0), csig1 * ssig2 - ssig1 * csig2), csig1 * csig2 + ssig1 * ssig2); // omg12 = omg2 - omg1, limit to [0, pi] somg12 = fmax(real(0), comg1 * somg2 - somg1 * comg2); comg12 = comg1 * comg2 + somg1 * somg2; real k2 = Math::sq(calp0) * _ep2; E.Reset(-k2, -_ep2, 1 + k2, 1 + _ep2); // chi12 = chi2 - chi1, limit to [0, pi] real schi12 = fmax(real(0), cchi1 * somg2 - somg1 * cchi2), cchi12 = cchi1 * cchi2 + somg1 * somg2; // eta = chi12 - lam120 real eta = atan2(schi12 * clam120 - cchi12 * slam120, cchi12 * clam120 + schi12 * slam120); real deta12 = -_e2/_f1 * salp0 * E.H() / (Math::pi() / 2) * (sig12 + (E.deltaH(ssig2, csig2, dn2) - E.deltaH(ssig1, csig1, dn1))); lam12 = eta + deta12; // domg12 = deta12 + chi12 - omg12 domg12 = deta12 + atan2(schi12 * comg12 - cchi12 * somg12, cchi12 * comg12 + schi12 * somg12); if (diffp) { if (calp2 == 0) dlam12 = - 2 * _f1 * dn1 / sbet1; else { real dummy; Lengths(E, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2, REDUCEDLENGTH, dummy, dlam12, dummy, dummy, dummy); dlam12 *= _f1 / (calp2 * cbet2); } } return lam12; } Math::real GeodesicExact::I4Integrand::asinhsqrt(real x) { // return asinh(sqrt(x))/sqrt(x) return x == 0 ? 1 : (x > 0 ? asinh(sqrt(x))/sqrt(x) : asin(sqrt(-x))/sqrt(-x)); // NaNs end up here } Math::real GeodesicExact::I4Integrand::t(real x) { // This differs by from t as defined following Eq 61 in Karney (2013) by // the final subtraction of 1. This changes nothing since Eq 61 uses the // difference of two evaluations of t and improves the accuracy(?). // Group terms to minimize roundoff // with x = ep2, this is the same as // e2/(1-e2) + (atanh(e)/e - 1) return x + (sqrt(1 + x) * asinhsqrt(x) - 1); } Math::real GeodesicExact::I4Integrand::td(real x) { // d t(x) / dx return x == 0 ? 4/real(3) : // Group terms to minimize roundoff 1 + (1 - asinhsqrt(x) / sqrt(1+x)) / (2*x); } // Math::real GeodesicExact::I4Integrand::Dt(real x, real y) { // // ( t(x) - t(y) ) / (x - y) // if (x == y) return td(x); // if (x * y <= 0) return ( t(x) - t(y) ) / (x - y); // real // sx = sqrt(fabs(x)), sx1 = sqrt(1 + x), // sy = sqrt(fabs(y)), sy1 = sqrt(1 + y), // z = (x - y) / (sx * sy1 + sy * sx1), // d1 = 2 * sx * sy, // d2 = 2 * (x * sy * sy1 + y * sx * sx1); // return x > 0 ? // ( 1 + (asinh(z)/z) / d1 - (asinh(sx) + asinh(sy)) / d2 ) : // // NaNs fall through to here // ( 1 - (asin (z)/z) / d1 - (asin (sx) + asin (sy)) / d2 ); // } Math::real GeodesicExact::I4Integrand::DtX(real y) const { // idiot version: // return ( tX - t(y) ) / (X - y); if (X == y) return tdX; if (X * y <= 0) return ( tX - t(y) ) / (X - y); real sy = sqrt(fabs(y)), sy1 = sqrt(1 + y), z = (X - y) / (sX * sy1 + sy * sX1), d1 = 2 * sX * sy, d2 = 2 * (X * sy * sy1 + y * sXX1); return X > 0 ? ( 1 + (asinh(z)/z) / d1 - (asinhsX + asinh(sy)) / d2 ) : // NaNs fall through to here ( 1 - (asin (z)/z) / d1 - (asinhsX + asin (sy)) / d2 ); } GeodesicExact::I4Integrand::I4Integrand(real ep2, real k2) : X( ep2 ) , tX( t(X) ) , tdX( td(X) ) , _k2( k2 ) { sX = sqrt(fabs(X)); // ep sX1 = sqrt(1 + X); // 1/(1-f) sXX1 = sX * sX1; asinhsX = X > 0 ? asinh(sX) : asin(sX); // atanh(e) } Math::real GeodesicExact::I4Integrand::operator()(real sig) const { real ssig = sin(sig); return - DtX(_k2 * Math::sq(ssig)) * ssig/2; } } // namespace GeographicLib geosphere/src/TransverseMercator.cpp0000644000176200001440000005526215147425256017404 0ustar liggesusers/** * \file TransverseMercator.cpp * \brief Implementation for GeographicLib::TransverseMercator class * * Copyright (c) Charles Karney (2008-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ * * This implementation follows closely JHS 154, ETRS89 - * järjestelmään liittyvät karttaprojektiot, * tasokoordinaatistot ja karttalehtijako (Map projections, plane * coordinates, and map sheet index for ETRS89), published by JUHTA, Finnish * Geodetic Institute, and the National Land Survey of Finland (2006). * * The relevant section is available as the 2008 PDF file * http://docs.jhs-suositukset.fi/jhs-suositukset/JHS154/JHS154_liite1.pdf * * This is a straight transcription of the formulas in this paper with the * following exceptions: * - use of 6th order series instead of 4th order series. This reduces the * error to about 5nm for the UTM range of coordinates (instead of 200nm), * with a speed penalty of only 1%; * - use Newton's method instead of plain iteration to solve for latitude in * terms of isometric latitude in the Reverse method; * - use of Horner's representation for evaluating polynomials and Clenshaw's * method for summing trigonometric series; * - several modifications of the formulas to improve the numerical accuracy; * - evaluating the convergence and scale using the expression for the * projection or its inverse. * * If the preprocessor variable GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER is set * to an integer between 4 and 8, then this specifies the order of the series * used for the forward and reverse transformations. The default value is 6. * (The series accurate to 12th order is given in \ref tmseries.) **********************************************************************/ #include #include "TransverseMercator.h" namespace GeographicLib { using namespace std; TransverseMercator::TransverseMercator(real a, real f, real k0, bool exact, bool extendp) : _a(a) , _f(f) , _k0(k0) , _exact(exact) , _e2(_f * (2 - _f)) , _es((_f < 0 ? -1 : 1) * sqrt(fabs(_e2))) , _e2m(1 - _e2) // _c = sqrt( pow(1 + _e, 1 + _e) * pow(1 - _e, 1 - _e) ) ) // See, for example, Lee (1976), p 100. , _c( sqrt(_e2m) * exp(Math::eatanhe(real(1), _es)) ) , _n(_f / (2 - _f)) , _tmexact(_exact ? TransverseMercatorExact(a, f, k0, extendp) : TransverseMercatorExact()) { if (_exact) return; if (!(isfinite(_a) && _a > 0)) throw GeographicErr("Equatorial radius is not positive"); if (!(isfinite(_f) && _f < 1)) throw GeographicErr("Polar semiaxis is not positive"); if (!(isfinite(_k0) && _k0 > 0)) throw GeographicErr("Scale is not positive"); if (extendp) throw GeographicErr("TransverseMercator extendp not allowed if !exact"); // Generated by Maxima on 2015-05-14 22:55:13-04:00 #if GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER/2 == 2 static const real b1coeff[] = { // b1*(n+1), polynomial in n2 of order 2 1, 16, 64, 64, }; // count = 4 #elif GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER/2 == 3 static const real b1coeff[] = { // b1*(n+1), polynomial in n2 of order 3 1, 4, 64, 256, 256, }; // count = 5 #elif GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER/2 == 4 static const real b1coeff[] = { // b1*(n+1), polynomial in n2 of order 4 25, 64, 256, 4096, 16384, 16384, }; // count = 6 #else #error "Bad value for GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER" #endif #if GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER == 4 static const real alpcoeff[] = { // alp[1]/n^1, polynomial in n of order 3 164, 225, -480, 360, 720, // alp[2]/n^2, polynomial in n of order 2 557, -864, 390, 1440, // alp[3]/n^3, polynomial in n of order 1 -1236, 427, 1680, // alp[4]/n^4, polynomial in n of order 0 49561, 161280, }; // count = 14 #elif GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER == 5 static const real alpcoeff[] = { // alp[1]/n^1, polynomial in n of order 4 -635, 328, 450, -960, 720, 1440, // alp[2]/n^2, polynomial in n of order 3 4496, 3899, -6048, 2730, 10080, // alp[3]/n^3, polynomial in n of order 2 15061, -19776, 6832, 26880, // alp[4]/n^4, polynomial in n of order 1 -171840, 49561, 161280, // alp[5]/n^5, polynomial in n of order 0 34729, 80640, }; // count = 20 #elif GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER == 6 static const real alpcoeff[] = { // alp[1]/n^1, polynomial in n of order 5 31564, -66675, 34440, 47250, -100800, 75600, 151200, // alp[2]/n^2, polynomial in n of order 4 -1983433, 863232, 748608, -1161216, 524160, 1935360, // alp[3]/n^3, polynomial in n of order 3 670412, 406647, -533952, 184464, 725760, // alp[4]/n^4, polynomial in n of order 2 6601661, -7732800, 2230245, 7257600, // alp[5]/n^5, polynomial in n of order 1 -13675556, 3438171, 7983360, // alp[6]/n^6, polynomial in n of order 0 212378941, 319334400, }; // count = 27 #elif GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER == 7 static const real alpcoeff[] = { // alp[1]/n^1, polynomial in n of order 6 1804025, 2020096, -4267200, 2204160, 3024000, -6451200, 4838400, 9676800, // alp[2]/n^2, polynomial in n of order 5 4626384, -9917165, 4316160, 3743040, -5806080, 2620800, 9676800, // alp[3]/n^3, polynomial in n of order 4 -67102379, 26816480, 16265880, -21358080, 7378560, 29030400, // alp[4]/n^4, polynomial in n of order 3 155912000, 72618271, -85060800, 24532695, 79833600, // alp[5]/n^5, polynomial in n of order 2 102508609, -109404448, 27505368, 63866880, // alp[6]/n^6, polynomial in n of order 1 -12282192400LL, 2760926233LL, 4151347200LL, // alp[7]/n^7, polynomial in n of order 0 1522256789, 1383782400, }; // count = 35 #elif GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER == 8 static const real alpcoeff[] = { // alp[1]/n^1, polynomial in n of order 7 -75900428, 37884525, 42422016, -89611200, 46287360, 63504000, -135475200, 101606400, 203212800, // alp[2]/n^2, polynomial in n of order 6 148003883, 83274912, -178508970, 77690880, 67374720, -104509440, 47174400, 174182400, // alp[3]/n^3, polynomial in n of order 5 318729724, -738126169, 294981280, 178924680, -234938880, 81164160, 319334400, // alp[4]/n^4, polynomial in n of order 4 -40176129013LL, 14967552000LL, 6971354016LL, -8165836800LL, 2355138720LL, 7664025600LL, // alp[5]/n^5, polynomial in n of order 3 10421654396LL, 3997835751LL, -4266773472LL, 1072709352, 2490808320LL, // alp[6]/n^6, polynomial in n of order 2 175214326799LL, -171950693600LL, 38652967262LL, 58118860800LL, // alp[7]/n^7, polynomial in n of order 1 -67039739596LL, 13700311101LL, 12454041600LL, // alp[8]/n^8, polynomial in n of order 0 1424729850961LL, 743921418240LL, }; // count = 44 #else #error "Bad value for GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER" #endif #if GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER == 4 static const real betcoeff[] = { // bet[1]/n^1, polynomial in n of order 3 -4, 555, -960, 720, 1440, // bet[2]/n^2, polynomial in n of order 2 -437, 96, 30, 1440, // bet[3]/n^3, polynomial in n of order 1 -148, 119, 3360, // bet[4]/n^4, polynomial in n of order 0 4397, 161280, }; // count = 14 #elif GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER == 5 static const real betcoeff[] = { // bet[1]/n^1, polynomial in n of order 4 -3645, -64, 8880, -15360, 11520, 23040, // bet[2]/n^2, polynomial in n of order 3 4416, -3059, 672, 210, 10080, // bet[3]/n^3, polynomial in n of order 2 -627, -592, 476, 13440, // bet[4]/n^4, polynomial in n of order 1 -3520, 4397, 161280, // bet[5]/n^5, polynomial in n of order 0 4583, 161280, }; // count = 20 #elif GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER == 6 static const real betcoeff[] = { // bet[1]/n^1, polynomial in n of order 5 384796, -382725, -6720, 932400, -1612800, 1209600, 2419200, // bet[2]/n^2, polynomial in n of order 4 -1118711, 1695744, -1174656, 258048, 80640, 3870720, // bet[3]/n^3, polynomial in n of order 3 22276, -16929, -15984, 12852, 362880, // bet[4]/n^4, polynomial in n of order 2 -830251, -158400, 197865, 7257600, // bet[5]/n^5, polynomial in n of order 1 -435388, 453717, 15966720, // bet[6]/n^6, polynomial in n of order 0 20648693, 638668800, }; // count = 27 #elif GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER == 7 static const real betcoeff[] = { // bet[1]/n^1, polynomial in n of order 6 -5406467, 6156736, -6123600, -107520, 14918400, -25804800, 19353600, 38707200, // bet[2]/n^2, polynomial in n of order 5 829456, -5593555, 8478720, -5873280, 1290240, 403200, 19353600, // bet[3]/n^3, polynomial in n of order 4 9261899, 3564160, -2708640, -2557440, 2056320, 58060800, // bet[4]/n^4, polynomial in n of order 3 14928352, -9132761, -1742400, 2176515, 79833600, // bet[5]/n^5, polynomial in n of order 2 -8005831, -1741552, 1814868, 63866880, // bet[6]/n^6, polynomial in n of order 1 -261810608, 268433009, 8302694400LL, // bet[7]/n^7, polynomial in n of order 0 219941297, 5535129600LL, }; // count = 35 #elif GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER == 8 static const real betcoeff[] = { // bet[1]/n^1, polynomial in n of order 7 31777436, -37845269, 43097152, -42865200, -752640, 104428800, -180633600, 135475200, 270950400, // bet[2]/n^2, polynomial in n of order 6 24749483, 14930208, -100683990, 152616960, -105719040, 23224320, 7257600, 348364800, // bet[3]/n^3, polynomial in n of order 5 -232468668, 101880889, 39205760, -29795040, -28131840, 22619520, 638668800, // bet[4]/n^4, polynomial in n of order 4 324154477, 1433121792, -876745056, -167270400, 208945440, 7664025600LL, // bet[5]/n^5, polynomial in n of order 3 457888660, -312227409, -67920528, 70779852, 2490808320LL, // bet[6]/n^6, polynomial in n of order 2 -19841813847LL, -3665348512LL, 3758062126LL, 116237721600LL, // bet[7]/n^7, polynomial in n of order 1 -1989295244, 1979471673, 49816166400LL, // bet[8]/n^8, polynomial in n of order 0 191773887257LL, 3719607091200LL, }; // count = 44 #else #error "Bad value for GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER" #endif static_assert(sizeof(b1coeff) / sizeof(real) == maxpow_/2 + 2, "Coefficient array size mismatch for b1"); static_assert(sizeof(alpcoeff) / sizeof(real) == (maxpow_ * (maxpow_ + 3))/2, "Coefficient array size mismatch for alp"); static_assert(sizeof(betcoeff) / sizeof(real) == (maxpow_ * (maxpow_ + 3))/2, "Coefficient array size mismatch for bet"); int m = maxpow_/2; _b1 = Math::polyval(m, b1coeff, Math::sq(_n)) / (b1coeff[m + 1] * (1+_n)); // _a1 is the equivalent radius for computing the circumference of // ellipse. _a1 = _b1 * _a; int o = 0; real d = _n; for (int l = 1; l <= maxpow_; ++l) { m = maxpow_ - l; _alp[l] = d * Math::polyval(m, alpcoeff + o, _n) / alpcoeff[o + m + 1]; _bet[l] = d * Math::polyval(m, betcoeff + o, _n) / betcoeff[o + m + 1]; o += m + 2; d *= _n; } // Post condition: o == sizeof(alpcoeff) / sizeof(real) && // o == sizeof(betcoeff) / sizeof(real) } const TransverseMercator& TransverseMercator::UTM() { static const TransverseMercator utm(Constants::WGS84_a(), Constants::WGS84_f(), Constants::UTM_k0()); return utm; } // Engsager and Poder (2007) use trigonometric series to convert between phi // and phip. Here are the series... // // Conversion from phi to phip: // // phip = phi + sum(c[j] * sin(2*j*phi), j, 1, 6) // // c[1] = - 2 * n // + 2/3 * n^2 // + 4/3 * n^3 // - 82/45 * n^4 // + 32/45 * n^5 // + 4642/4725 * n^6; // c[2] = 5/3 * n^2 // - 16/15 * n^3 // - 13/9 * n^4 // + 904/315 * n^5 // - 1522/945 * n^6; // c[3] = - 26/15 * n^3 // + 34/21 * n^4 // + 8/5 * n^5 // - 12686/2835 * n^6; // c[4] = 1237/630 * n^4 // - 12/5 * n^5 // - 24832/14175 * n^6; // c[5] = - 734/315 * n^5 // + 109598/31185 * n^6; // c[6] = 444337/155925 * n^6; // // Conversion from phip to phi: // // phi = phip + sum(d[j] * sin(2*j*phip), j, 1, 6) // // d[1] = 2 * n // - 2/3 * n^2 // - 2 * n^3 // + 116/45 * n^4 // + 26/45 * n^5 // - 2854/675 * n^6; // d[2] = 7/3 * n^2 // - 8/5 * n^3 // - 227/45 * n^4 // + 2704/315 * n^5 // + 2323/945 * n^6; // d[3] = 56/15 * n^3 // - 136/35 * n^4 // - 1262/105 * n^5 // + 73814/2835 * n^6; // d[4] = 4279/630 * n^4 // - 332/35 * n^5 // - 399572/14175 * n^6; // d[5] = 4174/315 * n^5 // - 144838/6237 * n^6; // d[6] = 601676/22275 * n^6; // // In order to maintain sufficient relative accuracy close to the pole use // // S = sum(c[i]*sin(2*i*phi),i,1,6) // taup = (tau + tan(S)) / (1 - tau * tan(S)) // In Math::taupf and Math::tauf we evaluate the forward transform explicitly // and solve the reverse one by Newton's method. // // There are adapted from TransverseMercatorExact (taup and taupinv). tau = // tan(phi), taup = sinh(psi) void TransverseMercator::Forward(real lon0, real lat, real lon, real& x, real& y, real& gamma, real& k) const { if (_exact) return _tmexact.Forward(lon0, lat, lon, x, y, gamma, k); lat = Math::LatFix(lat); lon = Math::AngDiff(lon0, lon); // Explicitly enforce the parity int latsign = signbit(lat) ? -1 : 1, lonsign = signbit(lon) ? -1 : 1; lon *= lonsign; lat *= latsign; bool backside = lon > Math::qd; if (backside) { if (lat == 0) latsign = -1; lon = Math::hd - lon; } real sphi, cphi, slam, clam; Math::sincosd(lat, sphi, cphi); Math::sincosd(lon, slam, clam); // phi = latitude // phi' = conformal latitude // psi = isometric latitude // tau = tan(phi) // tau' = tan(phi') // [xi', eta'] = Gauss-Schreiber TM coordinates // [xi, eta] = Gauss-Krueger TM coordinates // // We use // tan(phi') = sinh(psi) // sin(phi') = tanh(psi) // cos(phi') = sech(psi) // denom^2 = 1-cos(phi')^2*sin(lam)^2 = 1-sech(psi)^2*sin(lam)^2 // sin(xip) = sin(phi')/denom = tanh(psi)/denom // cos(xip) = cos(phi')*cos(lam)/denom = sech(psi)*cos(lam)/denom // cosh(etap) = 1/denom = 1/denom // sinh(etap) = cos(phi')*sin(lam)/denom = sech(psi)*sin(lam)/denom real etap, xip; if (lat != Math::qd) { real tau = sphi / cphi, taup = Math::taupf(tau, _es); xip = atan2(taup, clam); // Used to be // etap = Math::atanh(sin(lam) / cosh(psi)); etap = asinh(slam / hypot(taup, clam)); // convergence and scale for Gauss-Schreiber TM (xip, etap) -- gamma0 = // atan(tan(xip) * tanh(etap)) = atan(tan(lam) * sin(phi')); // sin(phi') = tau'/sqrt(1 + tau'^2) // Krueger p 22 (44) gamma = Math::atan2d(slam * taup, clam * hypot(real(1), taup)); // k0 = sqrt(1 - _e2 * sin(phi)^2) * (cos(phi') / cos(phi)) * cosh(etap) // Note 1/cos(phi) = cosh(psip); // and cos(phi') * cosh(etap) = 1/hypot(sinh(psi), cos(lam)) // // This form has cancelling errors. This property is lost if cosh(psip) // is replaced by 1/cos(phi), even though it's using "primary" data (phi // instead of psip). k = sqrt(_e2m + _e2 * Math::sq(cphi)) * hypot(real(1), tau) / hypot(taup, clam); } else { xip = Math::pi()/2; etap = 0; gamma = lon; k = _c; } // {xi',eta'} is {northing,easting} for Gauss-Schreiber transverse Mercator // (for eta' = 0, xi' = bet). {xi,eta} is {northing,easting} for transverse // Mercator with constant scale on the central meridian (for eta = 0, xip = // rectifying latitude). Define // // zeta = xi + i*eta // zeta' = xi' + i*eta' // // The conversion from conformal to rectifying latitude can be expressed as // a series in _n: // // zeta = zeta' + sum(h[j-1]' * sin(2 * j * zeta'), j = 1..maxpow_) // // where h[j]' = O(_n^j). The reversion of this series gives // // zeta' = zeta - sum(h[j-1] * sin(2 * j * zeta), j = 1..maxpow_) // // which is used in Reverse. // // Evaluate sums via Clenshaw method. See // https://en.wikipedia.org/wiki/Clenshaw_algorithm // // Let // // S = sum(a[k] * phi[k](x), k = 0..n) // phi[k+1](x) = alpha[k](x) * phi[k](x) + beta[k](x) * phi[k-1](x) // // Evaluate S with // // b[n+2] = b[n+1] = 0 // b[k] = alpha[k](x) * b[k+1] + beta[k+1](x) * b[k+2] + a[k] // S = (a[0] + beta[1](x) * b[2]) * phi[0](x) + b[1] * phi[1](x) // // Here we have // // x = 2 * zeta' // phi[k](x) = sin(k * x) // alpha[k](x) = 2 * cos(x) // beta[k](x) = -1 // [ sin(A+B) - 2*cos(B)*sin(A) + sin(A-B) = 0, A = k*x, B = x ] // n = maxpow_ // a[k] = _alp[k] // S = b[1] * sin(x) // // For the derivative we have // // x = 2 * zeta' // phi[k](x) = cos(k * x) // alpha[k](x) = 2 * cos(x) // beta[k](x) = -1 // [ cos(A+B) - 2*cos(B)*cos(A) + cos(A-B) = 0, A = k*x, B = x ] // a[0] = 1; a[k] = 2*k*_alp[k] // S = (a[0] - b[2]) + b[1] * cos(x) // // Matrix formulation (not used here): // phi[k](x) = [sin(k * x); k * cos(k * x)] // alpha[k](x) = 2 * [cos(x), 0; -sin(x), cos(x)] // beta[k](x) = -1 * [1, 0; 0, 1] // a[k] = _alp[k] * [1, 0; 0, 1] // b[n+2] = b[n+1] = [0, 0; 0, 0] // b[k] = alpha[k](x) * b[k+1] + beta[k+1](x) * b[k+2] + a[k] // N.B., for all k: b[k](1,2) = 0; b[k](1,1) = b[k](2,2) // S = (a[0] + beta[1](x) * b[2]) * phi[0](x) + b[1] * phi[1](x) // phi[0](x) = [0; 0] // phi[1](x) = [sin(x); cos(x)] real c0 = cos(2 * xip), ch0 = cosh(2 * etap), s0 = sin(2 * xip), sh0 = sinh(2 * etap); complex a(2 * c0 * ch0, -2 * s0 * sh0); // 2 * cos(2*zeta') int n = maxpow_; complex y0(n & 1 ? _alp[n] : 0), y1, // default initializer is 0+i0 z0(n & 1 ? 2*n * _alp[n] : 0), z1; if (n & 1) --n; while (n) { y1 = a * y0 - y1 + _alp[n]; z1 = a * z0 - z1 + 2*n * _alp[n]; --n; y0 = a * y1 - y0 + _alp[n]; z0 = a * z1 - z0 + 2*n * _alp[n]; --n; } a /= real(2); // cos(2*zeta') z1 = real(1) - z1 + a * z0; a = complex(s0 * ch0, c0 * sh0); // sin(2*zeta') y1 = complex(xip, etap) + a * y0; // Fold in change in convergence and scale for Gauss-Schreiber TM to // Gauss-Krueger TM. gamma -= Math::atan2d(z1.imag(), z1.real()); k *= _b1 * abs(z1); real xi = y1.real(), eta = y1.imag(); y = _a1 * _k0 * (backside ? Math::pi() - xi : xi) * latsign; x = _a1 * _k0 * eta * lonsign; if (backside) gamma = Math::hd - gamma; gamma *= latsign * lonsign; gamma = Math::AngNormalize(gamma); k *= _k0; } void TransverseMercator::Reverse(real lon0, real x, real y, real& lat, real& lon, real& gamma, real& k) const { if (_exact) return _tmexact.Reverse(lon0, x, y, lat, lon, gamma, k); // This undoes the steps in Forward. The wrinkles are: (1) Use of the // reverted series to express zeta' in terms of zeta. (2) Newton's method // to solve for phi in terms of tan(phi). real xi = y / (_a1 * _k0), eta = x / (_a1 * _k0); // Explicitly enforce the parity int xisign = signbit(xi) ? -1 : 1, etasign = signbit(eta) ? -1 : 1; xi *= xisign; eta *= etasign; bool backside = xi > Math::pi()/2; if (backside) xi = Math::pi() - xi; real c0 = cos(2 * xi), ch0 = cosh(2 * eta), s0 = sin(2 * xi), sh0 = sinh(2 * eta); complex a(2 * c0 * ch0, -2 * s0 * sh0); // 2 * cos(2*zeta) int n = maxpow_; complex y0(n & 1 ? -_bet[n] : 0), y1, // default initializer is 0+i0 z0(n & 1 ? -2*n * _bet[n] : 0), z1; if (n & 1) --n; while (n) { y1 = a * y0 - y1 - _bet[n]; z1 = a * z0 - z1 - 2*n * _bet[n]; --n; y0 = a * y1 - y0 - _bet[n]; z0 = a * z1 - z0 - 2*n * _bet[n]; --n; } a /= real(2); // cos(2*zeta) z1 = real(1) - z1 + a * z0; a = complex(s0 * ch0, c0 * sh0); // sin(2*zeta) y1 = complex(xi, eta) + a * y0; // Convergence and scale for Gauss-Schreiber TM to Gauss-Krueger TM. gamma = Math::atan2d(z1.imag(), z1.real()); k = _b1 / abs(z1); // JHS 154 has // // phi' = asin(sin(xi') / cosh(eta')) (Krueger p 17 (25)) // lam = asin(tanh(eta') / cos(phi') // psi = asinh(tan(phi')) real xip = y1.real(), etap = y1.imag(), s = sinh(etap), c = fmax(real(0), cos(xip)), // cos(pi/2) might be negative r = hypot(s, c); if (r != 0) { lon = Math::atan2d(s, c); // Krueger p 17 (25) // Use Newton's method to solve for tau real sxip = sin(xip), tau = Math::tauf(sxip/r, _es); gamma += Math::atan2d(sxip * tanh(etap), c); // Krueger p 19 (31) lat = Math::atand(tau); // Note cos(phi') * cosh(eta') = r k *= sqrt(_e2m + _e2 / (1 + Math::sq(tau))) * hypot(real(1), tau) * r; } else { lat = Math::qd; lon = 0; k *= _c; } lat *= xisign; if (backside) lon = Math::hd - lon; lon *= etasign; lon = Math::AngNormalize(lon + lon0); if (backside) gamma = Math::hd - gamma; gamma *= xisign * etasign; gamma = Math::AngNormalize(gamma); k *= _k0; } } // namespace GeographicLib geosphere/src/a_geodesic.cpp0000644000176200001440000001050015147425256015617 0ustar liggesusers #include "Rcpp.h" //#include "geodesic.h" #include #include "Geodesic.h" #include "PolygonArea.h" //#include "Constants.hpp" #include "GeodesicLine.h" //using namespace GeographicLib; /* Robert Hijmans May 2015 December 2021 */ //SEXP _geodesic(SEXP longitude, SEXP latitude, SEXP azimuth, SEXP distance, SEXP pa, SEXP pf) { /* //[[Rcpp::export(name = ".geodesic")]] std::vector geodesic(std::vector lon1, std::vector lat1, std::vector azi1, std::vector s12, double a, double f) { struct geod_geodesic g; geod_init(&g, a, f); size_t n = lat1.size(); std::vector r(n * 3); for (size_t i=0; i < n; i++) { size_t j = i * 3; geod_direct(&g, lat1[i], lon1[i], azi1[i], s12[i], &r[j], &r[j+1], &r[j+2]); } return r; } */ //[[Rcpp::export(name = ".geodesic")]] std::vector geodesic(std::vector lon1, std::vector lat1, std::vector azi1, std::vector s12, double a, double f) { GeographicLib::Geodesic geod(a, f); size_t n = lat1.size(); std::vector r(n * 3); for (size_t i=0; i < n; i++) { size_t j = i * 3; geod.Direct(lat1[i], lon1[i], azi1[i], s12[i], r[j+1], r[j], r[j+2]); } return r; } //SEXP _inversegeodesic(SEXP longitude1, SEXP latitude1, SEXP longitude2, SEXP latitude2, SEXP pa, SEXP pf) { /* //[[Rcpp::export(name = ".inversegeodesic")]] std::vector inversegeodesic(std::vector lon1, std::vector lat1, std::vector lon2, std::vector lat2, double a, double f) { struct geod_geodesic g; geod_init(&g, a, f); size_t n = lat1.size(); std::vector r(n * 3); for (size_t i=0; i < n; i++) { size_t j = i * 3; geod_inverse(&g, lat1[i], lon1[i], lat2[i], lon2[i], &r[j], &r[j+1], &r[j+2]); } return r; } */ //[[Rcpp::export(name = ".inversegeodesic")]] std::vector inversegeodesic(std::vector lon1, std::vector lat1, std::vector lon2, std::vector lat2, double a, double f) { GeographicLib::Geodesic geod(a, f); size_t n = lat1.size(); std::vector r(n * 3); for (size_t i=0; i < n; i++) { size_t j = i * 3; geod.Inverse(lat1[i], lon1[i], lat2[i], lon2[i], r[j], r[j+1], r[j+2]); } return r; } //SEXP _polygonarea(SEXP longitude, SEXP latitude, SEXP pa, SEXP pf) { /* //[[Rcpp::export(name = ".polygonarea")]] std::vector polygonarea(std::vector lon, std::vector lat, double a, double f) { struct geod_geodesic g; struct geod_polygon p; geod_init(&g, a, f); geod_polygon_init(&p, 0); double A, P; for (size_t i=0; i r = {n, P, A}; return(r); } */ //[[Rcpp::export(name = ".polygonarea")]] std::vector polygonarea(std::vector lon, std::vector lat, double a, double f) { std::vector out(3); // n, perimeter, area; GeographicLib::Geodesic geod(a, f); GeographicLib::PolygonArea poly(geod); try { for (size_t i=0; i> geodesic_nodes(double lon1, double lat1, double lon2, double lat2, size_t n, double distance, bool arc, double a, double f) { GeographicLib::Geodesic geod(a, f); GeographicLib::GeodesicLine line = geod.InverseLine(lat1, lon1, lat2, lon2); // number of intervals if (n == 0) { if (distance <= 0) { n = 1; } else { n = int(ceil(line.Distance() / std::abs(distance))); } } std::vector> out(2); out[0].reserve(n+1); out[1].reserve(n+1); out[0].push_back(lon1); out[1].push_back(lat1); if (arc) { // intervals of equal arc length double da = line.Arc() / n; for (size_t i=1; i * On auxiliary latitudes, * Survey Review 56(395), 165--180 (2024); * preprint * arXiv:2212.05818. * . * Copyright (c) Charles Karney (2022-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include "DAuxLatitude.h" #include "EllipticFunction.h" namespace GeographicLib { using namespace std; Math::real DAuxLatitude::DRectifying(const AuxAngle& phi1, const AuxAngle& phi2) const { // Stipulate that phi1 and phi2 are in [-90d, 90d] real x = phi1.radians(), y = phi2.radians(); if (x == y) { real d; AuxAngle mu1(base::Rectifying(phi1, &d)); real tphi1 = phi1.tan(), tmu1 = mu1.tan(); return isfinite(tphi1) ? d * Math::sq(base::sc(tphi1)/base::sc(tmu1)) : 1/d; } else if (x * y < 0) return (base::Rectifying(phi2).radians() - base::Rectifying(phi1).radians()) / (y - x); else { AuxAngle bet1(base::Parametric(phi1)), bet2(base::Parametric(phi2)); real dEdbet = DE(bet1, bet2), dbetdphi = DParametric(phi1, phi2); return base::_b * dEdbet / base::RectifyingRadius(true) * dbetdphi; } } Math::real DAuxLatitude::DParametric(const AuxAngle& phi1, const AuxAngle& phi2) const { real tx = phi1.tan(), ty = phi2.tan(), r; // DbetaDphi = Datan(fm1*tx, fm1*ty) * fm1 / Datan(tx, ty) // Datan(x, y) = 1/(1 + x^2), for x = y // = (atan(y) - atan(x)) / (y-x), for x*y < 0 // = atan( (y-x) / (1 + x*y) ) / (y-x), for x*y > 0 if (!(tx * ty >= 0)) // This includes, e.g., tx = 0, ty = inf r = (atan(base::_fm1 * ty) - atan(base::_fm1 * tx)) / (atan(ty) - atan(tx)); else if (tx == ty) { // This includes the case tx = ty = inf tx *= tx; if (tx <= 1) r = base::_fm1 * (1 + tx) / (1 + base::_e2m1 * tx); else { tx = 1/tx; r = base::_fm1 * (1 + tx) / (base::_e2m1 + tx); } } else { if (tx * ty <= 1) r = atan2(base::_fm1 * (ty - tx), 1 + base::_e2m1 * tx * ty) / atan2( ty - tx , 1 + tx * ty); else { tx = 1/tx; ty = 1/ty; r = atan2(base::_fm1 * (ty - tx), base::_e2m1 + tx * ty) / atan2( ty - tx , 1 + tx * ty); } } return r; } Math::real DAuxLatitude::DE(const AuxAngle& X, const AuxAngle& Y) const { AuxAngle Xn(X.normalized()), Yn(Y.normalized()); // We assume that X and Y are in [-90d, 90d] and have the same sign // If not we would include // if (Xn.y() * Yn.y() < 0) // return d != 0 ? (E(X) - E(Y)) / d : 1; // The general formula fails for x = y = 0d and x = y = 90d. Probably this // is fixable (the formula works for other x = y. But let's also stipulate // that x != y . // Make both positive, so we can do the swap a <-> b trick Xn.y() = fabs(Xn.y()); Yn.y() = fabs(Yn.y()); real k2 = -base::_e12; bool flip = base::_f < 0; // Switch prolate to oblate; we then can use the formulas for k2 < 0 if (flip) { swap(Xn.x(), Xn.y()); swap(Yn.x(), Yn.y()); k2 = base::_e2; } real x = Xn.radians(), y = Yn.radians(), d = y - x, sx = Xn.y(), sy = Yn.y(), cx = Xn.x(), cy = Yn.x(); // See DLMF: Eqs (19.11.2) and (19.11.4) letting // theta -> x, phi -> -y, psi -> z // // (E(y) - E(x)) / d = E(z)/d - k2 * sin(x) * sin(y) * sin(z)/d // = (E(z)/sin(z) - k2 * sin(x) * sin(y)) * sin(z)/d // tan(z/2) = (sin(x)*Delta(y) - sin(y)*Delta(x)) / (cos(x) + cos(y)) // = d * Dsin(x,y) * (sin(x) + sin(y))/(cos(x) + cos(y)) / // (sin(x)*Delta(y) + sin(y)*Delta(x)) // = t = d * Dt // Delta(x) = sqrt(1 - k2 * sin(x)^2) // sin(z) = 2*t/(1+t^2); cos(z) = (1-t^2)/(1+t^2) real Dt = Dsin(x, y) * (sx + sy) / ((cx + cy) * (sx * sqrt(1 - k2 * sy*sy) + sy * sqrt(1 - k2 * sx*sx))), t = d * Dt, Dsz = 2 * Dt / (1 + t*t), sz = d * Dsz, cz = (1 - t) * (1 + t) / (1 + t*t), sz2 = sz*sz, cz2 = cz*cz, dz2 = 1 - k2 * sz2, // E(z)/sin(z) Ezbsz = (EllipticFunction::RF(cz2, dz2, 1) - k2 * sz2 * EllipticFunction::RD(cz2, dz2, 1) / 3); return (Ezbsz - k2 * sx * sy) * Dsz / (flip ? 1 - base::_f : 1); } /// \cond SKIP Math::real DAuxLatitude::Dsn(real x, real y) { real sc1 = base::sc(x); if (x == y) return 1 / (sc1 * (1 + x*x)); real sc2 = base::sc(y), sn1 = base::sn(x), sn2 = base::sn(y); return x * y > 0 ? (sn1/sc2 + sn2/sc1) / ((sn1 + sn2) * sc1 * sc2) : (sn2 - sn1) / (y - x); } Math::real DAuxLatitude::Datan(real x, real y) { real d = y - x, xy = x*y; return x == y ? 1 / (1 + xy) : (isinf(xy) && xy > 0 ? 0 : (2 * xy > -1 ? atan( d / (1 + xy) ) : atan(y) - atan(x)) / d); } Math::real DAuxLatitude::Dasinh(real x, real y) { real d = y - x, xy = x*y, hx = base::sc(x), hy = base::sc(y); // KF formula for x*y < 0 is asinh(y*hx - x*hy) / (y - x) // but this has problem if x*y overflows to -inf return x == y ? 1 / hx : (isinf(d) ? 0 : (xy > 0 ? asinh(d * (x*y < 1 ? (x + y) / (x*hy + y*hx) : (1/x + 1/y) / (hy/y + hx/x))) : asinh(y) - asinh(x)) / d); } Math::real DAuxLatitude::Dh(real x, real y) { if (isnan(x + y)) return x + y; // N.B. nan for inf-inf if (isinf(x)) return copysign(1/real(2), x); if (isinf(y)) return copysign(1/real(2), y); real sx = base::sn(x), sy = base::sn(y), d = sx*x + sy*y; if (d / 2 == 0) return (x + y) / 2; // Handle underflow if (x * y <= 0) return (h(y) - h(x)) / (y - x); // Does not include x = y = 0 real scx = base::sc(x), scy = base::sc(y); return ((x + y) / (2 * d)) * (Math::sq(sx*sy) + Math::sq(sy/scx) + Math::sq(sx/scy)); } Math::real DAuxLatitude::Datanhee(real x, real y) const { // atan(e*sn(tphi))/e: // Datan(e*sn(x),e*sn(y))*Dsn(x,y)/Datan(x,y) // asinh(e1*sn(fm1*tphi)): // Dasinh(e1*sn(fm1*x)), e1*sn(fm1*y)) * // e1 * Dsn(fm1*x, fm1*y) *fm1 / (e * Datan(x,y)) // = Dasinh(e1*sn(fm1*x)), e1*sn(fm1*y)) * // Dsn(fm1*x, fm1*y) / Datan(x,y) return base::_f < 0 ? Datan(base::_e * base::sn(x), base::_e * base::sn(y)) * Dsn(x, y) : Dasinh(base::_e1 * base::sn(base::_fm1 * x), base::_e1 * base::sn(base::_fm1 * y)) * Dsn(base::_fm1 * x, base::_fm1 * y); } /// \endcond Math::real DAuxLatitude::DIsometric(const AuxAngle& phi1, const AuxAngle& phi2) const { // psi = asinh(tan(phi)) - e^2 * atanhee(tan(phi)) real tphi1 = phi1.tan(), tphi2 = phi2.tan(); return isnan(tphi1) || isnan(tphi2) ? numeric_limits::quiet_NaN() : (isinf(tphi1) || isinf(tphi2) ? numeric_limits::infinity() : (Dasinh(tphi1, tphi2) - base::_e2 * Datanhee(tphi1, tphi2)) / Datan(tphi1, tphi2)); } Math::real DAuxLatitude::DConvert(int auxin, int auxout, const AuxAngle& zeta1, const AuxAngle& zeta2) const { int k = base::ind(auxout, auxin); if (k < 0) return numeric_limits::quiet_NaN(); if (auxin == auxout) return 1; if ( isnan(base::_c[base::Lmax * (k + 1) - 1]) ) base::fillcoeff(auxin, auxout, k); AuxAngle zeta1n(zeta1.normalized()), zeta2n(zeta2.normalized()); return 1 + DClenshaw(true, zeta2n.radians() - zeta1n.radians(), zeta1n.y(), zeta1n.x(), zeta2n.y(), zeta2n.x(), base::_c + base::Lmax * k, base::Lmax); } Math::real DAuxLatitude::DClenshaw(bool sinp, real Delta, real szeta1, real czeta1, real szeta2, real czeta2, const real c[], int K) { // Evaluate // (Clenshaw(sinp, szeta2, czeta2, c, K) - // Clenshaw(sinp, szeta1, czeta1, c, K)) / Delta // or // sum(c[k] * (sin( (2*k+2) * zeta2) - sin( (2*k+2) * zeta2)), i, 0, K-1) // / Delta // (if !sinp, then change sin->cos here.) // // Delta is EITHER 1, giving the plain difference OR (zeta2 - zeta1) in // radians, giving the divided difference. Other values will give // nonsense. // int k = K; // suffixes a b denote [1,1], [2,1] elements of matrix/vector real D2 = Delta * Delta, czetap = czeta2 * czeta1 - szeta2 * szeta1, szetap = szeta2 * czeta1 + czeta2 * szeta1, czetam = czeta2 * czeta1 + szeta2 * szeta1, // sin(zetam) / Delta szetamd = (Delta == 1 ? szeta2 * czeta1 - czeta2 * szeta1 : (Delta != 0 ? sin(Delta) / Delta : 1)), Xa = 2 * czetap * czetam, Xb = -2 * szetap * szetamd, u0a = 0, u0b = 0, u1a = 0, u1b = 0; // accumulators for sum for (--k; k >= 0; --k) { // temporary real = X . U0 - U1 + c[k] * I real ta = Xa * u0a + D2 * Xb * u0b - u1a + c[k], tb = Xb * u0a + Xa * u0b - u1b; // U1 = U0; U0 = real u1a = u0a; u0a = ta; u1b = u0b; u0b = tb; } // P = U0 . F[0] - U1 . F[-1] // if sinp: // F[0] = [ sin(2*zeta2) + sin(2*zeta1), // (sin(2*zeta2) - sin(2*zeta1)) / Delta] // = 2 * [ szetap * czetam, czetap * szetamd ] // F[-1] = [0, 0] // else: // F[0] = [ cos(2*zeta2) + cos(2*zeta1), // (cos(2*zeta2) - cos(2*zeta1)) / Delta] // = 2 * [ czetap * czetam, -szetap * szetamd ] // F[-1] = [2, 0] real F0a = (sinp ? szetap : czetap) * czetam, F0b = (sinp ? czetap : -szetap) * szetamd, Fm1a = sinp ? 0 : 1; // Fm1b = 0; // Don't both to compute sum... // divided difference (or difference if Delta == 1) return 2 * (F0a * u0b + F0b * u0a - Fm1a * u1b); } } // namespace GeographicLib geosphere/src/Rhumb.h0000644000176200001440000005524215147425256014273 0ustar liggesusers/** * \file Rhumb.hpp * \brief Header for GeographicLib::Rhumb and GeographicLib::RhumbLine classes * * Copyright (c) Charles Karney (2014-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_RHUMB_HPP) #define GEOGRAPHICLIB_RHUMB_HPP 1 #include "Constants.h" #include "DAuxLatitude.h" #include #if !defined(GEOGRAPHICLIB_RHUMBAREA_ORDER) /** * The order of the series approximation used in rhumb area calculations. * GEOGRAPHICLIB_RHUMBAREA_ORDER can be set to one of [4, 5, 6, 7, 8]. **********************************************************************/ # define GEOGRAPHICLIB_RHUMBAREA_ORDER \ (GEOGRAPHICLIB_PRECISION == 2 ? 6 : \ (GEOGRAPHICLIB_PRECISION == 1 ? 4 : 8)) #endif #if defined(_MSC_VER) // Squelch warnings about dll vs vector # pragma warning (push) # pragma warning (disable: 4251) #endif namespace GeographicLib { class RhumbLine; /** * \brief Solve of the direct and inverse rhumb problems. * * The path of constant azimuth between two points on an ellipsoid at (\e * lat1, \e lon1) and (\e lat2, \e lon2) is called the rhumb line (also * called the loxodrome). Its length is \e s12 and its azimuth is \e azi12. * (The azimuth is the heading measured clockwise from north.) * * Given \e lat1, \e lon1, \e azi12, and \e s12, we can determine \e lat2, * and \e lon2. This is the \e direct rhumb problem and its solution is * given by the function Rhumb::Direct. * * Given \e lat1, \e lon1, \e lat2, and \e lon2, we can determine \e azi12 * and \e s12. This is the \e inverse rhumb problem, whose solution is given * by Rhumb::Inverse. This finds the shortest such rhumb line, i.e., the one * that wraps no more than half way around the earth. If the end points are * on opposite meridians, there are two shortest rhumb lines and the * east-going one is chosen. * * These routines also optionally calculate the area under the rhumb line, \e * S12. This is the area, measured counterclockwise, of the rhumb line * quadrilateral with corners (lat1,lon1), (0,lon1), * (0,lon2), and (lat2,lon2). * * Note that rhumb lines may be appreciably longer (up to 50%) than the * corresponding Geodesic. For example the distance between London Heathrow * and Tokyo Narita via the rhumb line is 11400 km which is 18% longer than * the geodesic distance 9600 km. * * This implementation is described in * - C. F. F. Karney,
* * The area of rhumb polygons,
* Stud. Geophys. Geod. 68(3--4), 99--120 (2024); * DOI: * 10.1007/s11200-024-0709-z. * . * For more information on rhumb lines see \ref rhumb. * * Example of use: * \include example-Rhumb.cpp **********************************************************************/ class GEOGRAPHICLIB_EXPORT Rhumb { private: typedef Math::real real; friend class RhumbLine; template friend class PolygonAreaT; DAuxLatitude _aux; bool _exact; real _a, _f, _n, _rm, _c2; int _lL; // N.B. names of the form _[A-Z].* are reserved in C++ std::vector _pP; // The Fourier coefficients P_l static const int Lmax_ = GEOGRAPHICLIB_RHUMBAREA_ORDER; void AreaCoeffs(); class qIntegrand { const AuxLatitude& _aux; public: qIntegrand(const AuxLatitude& aux); real operator()(real chi) const; }; real MeanSinXi(const AuxAngle& chix, const AuxAngle& chiy) const; // The following two functions (with lots of ignored arguments) mimic the // interface to the corresponding Geodesic function. These are needed by // PolygonAreaT. void GenDirect(real lat1, real lon1, real azi12, bool, real s12, unsigned outmask, real& lat2, real& lon2, real&, real&, real&, real&, real&, real& S12) const { GenDirect(lat1, lon1, azi12, s12, outmask, lat2, lon2, S12); } void GenInverse(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real& s12, real& azi12, real&, real& , real& , real& , real& S12) const { GenInverse(lat1, lon1, lat2, lon2, outmask, s12, azi12, S12); } public: /** * Bit masks for what calculations to do. They specify which results to * return in the general routines Rhumb::GenDirect and Rhumb::GenInverse * routines. RhumbLine::mask is a duplication of this enum. **********************************************************************/ enum mask { /** * No output. * @hideinitializer **********************************************************************/ NONE = 0U, /** * Calculate latitude \e lat2. * @hideinitializer **********************************************************************/ LATITUDE = 1U<<7, /** * Calculate longitude \e lon2. * @hideinitializer **********************************************************************/ LONGITUDE = 1U<<8, /** * Calculate azimuth \e azi12. * @hideinitializer **********************************************************************/ AZIMUTH = 1U<<9, /** * Calculate distance \e s12. * @hideinitializer **********************************************************************/ DISTANCE = 1U<<10, /** * Calculate area \e S12. * @hideinitializer **********************************************************************/ AREA = 1U<<14, /** * Unroll \e lon2 in the direct calculation. * @hideinitializer **********************************************************************/ LONG_UNROLL = 1U<<15, /** * Calculate everything. (LONG_UNROLL is not included in this mask.) * @hideinitializer **********************************************************************/ ALL = 0x7F80U, }; /** * Constructor for an ellipsoid with * * @param[in] a equatorial radius (meters). * @param[in] f flattening of ellipsoid. Setting \e f = 0 gives a sphere. * Negative \e f gives a prolate ellipsoid. * @param[in] exact if true use the exact expressions for the auxiliary * latitudes; otherwise use series expansion (accurate for |f| < * 0.01) [default false]. * @exception GeographicErr if \e a or (1 − \e f) \e a is not * positive. **********************************************************************/ Rhumb(real a, real f, bool exact = false); /** * Solve the direct rhumb problem returning also the area. * * @param[in] lat1 latitude of point 1 (degrees). * @param[in] lon1 longitude of point 1 (degrees). * @param[in] azi12 azimuth of the rhumb line (degrees). * @param[in] s12 distance between point 1 and point 2 (meters); it can be * negative. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees). * @param[out] S12 area under the rhumb line (meters2). * * \e lat1 should be in the range [−90°, 90°]. The value of * \e lon2 returned is in the range [−180°, 180°]. * * If point 1 is a pole, the cosine of its latitude is taken to be * 1/ε2 (where ε is 2-52). This * position, which is extremely close to the actual pole, allows the * calculation to be carried out in finite terms. If \e s12 is large * enough that the rhumb line crosses a pole, the longitude of point 2 * is indeterminate (a NaN is returned for \e lon2 and \e S12). **********************************************************************/ void Direct(real lat1, real lon1, real azi12, real s12, real& lat2, real& lon2, real& S12) const { GenDirect(lat1, lon1, azi12, s12, LATITUDE | LONGITUDE | AREA, lat2, lon2, S12); } /** * Solve the direct rhumb problem without the area. **********************************************************************/ void Direct(real lat1, real lon1, real azi12, real s12, real& lat2, real& lon2) const { real t; GenDirect(lat1, lon1, azi12, s12, LATITUDE | LONGITUDE, lat2, lon2, t); } /** * The general direct rhumb problem. Rhumb::Direct is defined in terms * of this function. * * @param[in] lat1 latitude of point 1 (degrees). * @param[in] lon1 longitude of point 1 (degrees). * @param[in] azi12 azimuth of the rhumb line (degrees). * @param[in] s12 distance between point 1 and point 2 (meters); it can be * negative. * @param[in] outmask a bitor'ed combination of Rhumb::mask values * specifying which of the following parameters should be set. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees). * @param[out] S12 area under the rhumb line (meters2). * * The Rhumb::mask values possible for \e outmask are * - \e outmask |= Rhumb::LATITUDE for the latitude \e lat2; * - \e outmask |= Rhumb::LONGITUDE for the latitude \e lon2; * - \e outmask |= Rhumb::AREA for the area \e S12; * - \e outmask |= Rhumb::ALL for all of the above; * - \e outmask |= Rhumb::LONG_UNROLL to unroll \e lon2 instead of wrapping * it into the range [−180°, 180°]. * . * With the Rhumb::LONG_UNROLL bit set, the quantity \e lon2 − * \e lon1 indicates how many times and in what sense the rhumb line * encircles the ellipsoid. **********************************************************************/ void GenDirect(real lat1, real lon1, real azi12, real s12, unsigned outmask, real& lat2, real& lon2, real& S12) const; /** * Solve the inverse rhumb problem returning also the area. * * @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] s12 rhumb distance between point 1 and point 2 (meters). * @param[out] azi12 azimuth of the rhumb line (degrees). * @param[out] S12 area under the rhumb line (meters2). * * The shortest rhumb line is found. If the end points are on opposite * meridians, there are two shortest rhumb lines and the east-going one is * chosen. \e lat1 and \e lat2 should be in the range [−90°, * 90°]. The value of \e azi12 returned is in the range * [−180°, 180°]. * * If either point is a pole, the cosine of its latitude is taken to be * 1/ε2 (where ε is 2-52). This * position, which is extremely close to the actual pole, allows the * calculation to be carried out in finite terms. **********************************************************************/ void Inverse(real lat1, real lon1, real lat2, real lon2, real& s12, real& azi12, real& S12) const { GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH | AREA, s12, azi12, S12); } /** * Solve the inverse rhumb problem without the area. **********************************************************************/ void Inverse(real lat1, real lon1, real lat2, real lon2, real& s12, real& azi12) const { real t; GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH, s12, azi12, t); } /** * The general inverse rhumb problem. Rhumb::Inverse is defined in terms * of this function. * * @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] outmask a bitor'ed combination of Rhumb::mask values * specifying which of the following parameters should be set. * @param[out] s12 rhumb distance between point 1 and point 2 (meters). * @param[out] azi12 azimuth of the rhumb line (degrees). * @param[out] S12 area under the rhumb line (meters2). * * The Rhumb::mask values possible for \e outmask are * - \e outmask |= Rhumb::DISTANCE for the latitude \e s12; * - \e outmask |= Rhumb::AZIMUTH for the latitude \e azi12; * - \e outmask |= Rhumb::AREA for the area \e S12; * - \e outmask |= Rhumb::ALL for all of the above; **********************************************************************/ void GenInverse(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real& s12, real& azi12, real& S12) const; /** * Typedef for the class for computing multiple points on a rhumb line. **********************************************************************/ typedef RhumbLine LineClass; /** * Set up to compute several points on a single rhumb line. * * @param[in] lat1 latitude of point 1 (degrees). * @param[in] lon1 longitude of point 1 (degrees). * @param[in] azi12 azimuth of the rhumb line (degrees). * @return a RhumbLine object. * * \e lat1 should be in the range [−90°, 90°]. * * If point 1 is a pole, the cosine of its latitude is taken to be * 1/ε2 (where ε is 2-52). This * position, which is extremely close to the actual pole, allows the * calculation to be carried out in finite terms. **********************************************************************/ RhumbLine Line(real lat1, real lon1, real azi12) const; /** \name Inspector functions. **********************************************************************/ ///@{ /** * @return \e a the equatorial radius of the ellipsoid (meters). This is * the value used in the constructor. **********************************************************************/ Math::real EquatorialRadius() const { return _a; } /** * @return \e f the flattening of the ellipsoid. This is the * value used in the constructor. **********************************************************************/ Math::real Flattening() const { return _f; } /** * @return total area of ellipsoid in meters2. The area of a * polygon encircling a pole can be found by adding * Geodesic::EllipsoidArea()/2 to the sum of \e S12 for each side of the * polygon. **********************************************************************/ Math::real EllipsoidArea() const { // _c2 contains a Math::degrees() factor, so 4*pi -> 2*Math::td. return 2 * real(Math::td) * _c2; } ///@} /** * A global instantiation of Rhumb with the parameters for the WGS84 * ellipsoid. **********************************************************************/ static const Rhumb& WGS84(); }; /** * \brief Find a sequence of points on a single rhumb line. * * RhumbLine facilitates the determination of a series of points on a single * rhumb line. The starting point (\e lat1, \e lon1) and the azimuth \e * azi12 are specified in the call to Rhumb::Line which returns a RhumbLine * object. RhumbLine.Position returns the location of point 2 (and, * optionally, the corresponding area, \e S12) a distance \e s12 along the * rhumb line. * * There is no public constructor for this class. (Use Rhumb::Line to create * an instance.) The Rhumb object used to create a RhumbLine must stay in * scope as long as the RhumbLine. * * Example of use: * \include example-RhumbLine.cpp **********************************************************************/ class GEOGRAPHICLIB_EXPORT RhumbLine { private: typedef Math::real real; friend class Rhumb; const Rhumb& _rh; real _lat1, _lon1, _azi12, _salp, _calp, _mu1, _psi1; AuxAngle _phi1, _chi1; // copy assignment not allowed RhumbLine& operator=(const RhumbLine&) = delete; RhumbLine(const Rhumb& rh, real lat1, real lon1, real azi12); public: /** * Construction is via default copy constructor. **********************************************************************/ RhumbLine(const RhumbLine&) = default; /** * This is a duplication of Rhumb::mask. **********************************************************************/ enum mask { /** * No output. * @hideinitializer **********************************************************************/ NONE = Rhumb::NONE, /** * Calculate latitude \e lat2. * @hideinitializer **********************************************************************/ LATITUDE = Rhumb::LATITUDE, /** * Calculate longitude \e lon2. * @hideinitializer **********************************************************************/ LONGITUDE = Rhumb::LONGITUDE, /** * Calculate azimuth \e azi12. * @hideinitializer **********************************************************************/ AZIMUTH = Rhumb::AZIMUTH, /** * Calculate distance \e s12. * @hideinitializer **********************************************************************/ DISTANCE = Rhumb::DISTANCE, /** * Calculate area \e S12. * @hideinitializer **********************************************************************/ AREA = Rhumb::AREA, /** * Unroll \e lon2 in the direct calculation. * @hideinitializer **********************************************************************/ LONG_UNROLL = Rhumb::LONG_UNROLL, /** * Calculate everything. (LONG_UNROLL is not included in this mask.) * @hideinitializer **********************************************************************/ ALL = Rhumb::ALL, }; /** * Typedef for the base class implementing rhumb lines. **********************************************************************/ typedef Rhumb BaseClass; /** * Compute the position of point 2 which is a distance \e s12 (meters) from * point 1. The area is also computed. * * @param[in] s12 distance between point 1 and point 2 (meters); it can be * negative. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees). * @param[out] S12 area under the rhumb line (meters2). * * The value of \e lon2 returned is in the range [−180°, * 180°]. * * If \e s12 is large enough that the rhumb line crosses a pole, the * longitude of point 2 is indeterminate (a NaN is returned for \e lon2 and * \e S12). **********************************************************************/ void Position(real s12, real& lat2, real& lon2, real& S12) const { GenPosition(s12, LATITUDE | LONGITUDE | AREA, lat2, lon2, S12); } /** * Compute the position of point 2 which is a distance \e s12 (meters) from * point 1. The area is not computed. **********************************************************************/ void Position(real s12, real& lat2, real& lon2) const { real t; GenPosition(s12, LATITUDE | LONGITUDE, lat2, lon2, t); } /** * The general position routine. RhumbLine::Position is defined in term so * this function. * * @param[in] s12 distance between point 1 and point 2 (meters); it can be * negative. * @param[in] outmask a bitor'ed combination of RhumbLine::mask values * specifying which of the following parameters should be set. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees). * @param[out] S12 area under the rhumb line (meters2). * * The RhumbLine::mask values possible for \e outmask are * - \e outmask |= RhumbLine::LATITUDE for the latitude \e lat2; * - \e outmask |= RhumbLine::LONGITUDE for the latitude \e lon2; * - \e outmask |= RhumbLine::AREA for the area \e S12; * - \e outmask |= RhumbLine::ALL for all of the above; * - \e outmask |= RhumbLine::LONG_UNROLL to unroll \e lon2 instead of * wrapping it into the range [−180°, 180°]. * . * With the RhumbLine::LONG_UNROLL bit set, the quantity \e lon2 − \e * lon1 indicates how many times and in what sense the rhumb line encircles * the ellipsoid. * * If \e s12 is large enough that the rhumb line crosses a pole, the * longitude of point 2 is indeterminate (a NaN is returned for \e lon2 and * \e S12). **********************************************************************/ void GenPosition(real s12, unsigned outmask, real& lat2, real& lon2, real& S12) const; /** \name Inspector functions **********************************************************************/ ///@{ /** * @return \e lat1 the latitude of point 1 (degrees). **********************************************************************/ Math::real Latitude() const { return _lat1; } /** * @return \e lon1 the longitude of point 1 (degrees). **********************************************************************/ Math::real Longitude() const { return _lon1; } /** * @return \e azi12 the azimuth of the rhumb line (degrees). **********************************************************************/ Math::real Azimuth() const { return _azi12; } /** * @return \e a the equatorial radius of the ellipsoid (meters). This is * the value inherited from the Rhumb object used in the constructor. **********************************************************************/ Math::real EquatorialRadius() const { return _rh.EquatorialRadius(); } /** * @return \e f the flattening of the ellipsoid. This is the value * inherited from the Rhumb object used in the constructor. **********************************************************************/ Math::real Flattening() const { return _rh.Flattening(); } }; } // namespace GeographicLib #if defined(_MSC_VER) # pragma warning (pop) #endif #endif // GEOGRAPHICLIB_RHUMB_HPP geosphere/src/EllipticFunction.cpp0000644000176200001440000005170315147425256017022 0ustar liggesusers/** * \file EllipticFunction.cpp * \brief Implementation for GeographicLib::EllipticFunction class * * Copyright (c) Charles Karney (2008-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include "EllipticFunction.h" namespace GeographicLib { using namespace std; /* * Implementation of methods given in * * B. C. Carlson * Computation of elliptic integrals * Numerical Algorithms 10, 13-26 (1995) */ Math::real EllipticFunction::RF(real x, real y, real z) { // Carlson, eqs 2.2 - 2.7 static const real tolRF = pow(3 * numeric_limits::epsilon() * real(0.01), 1/real(8)); real A0 = (x + y + z)/3, An = A0, Q = fmax(fmax(fabs(A0-x), fabs(A0-y)), fabs(A0-z)) / tolRF, x0 = x, y0 = y, z0 = z, mul = 1; while (Q >= mul * fabs(An)) { // Max 6 trips real lam = sqrt(x0)*sqrt(y0) + sqrt(y0)*sqrt(z0) + sqrt(z0)*sqrt(x0); An = (An + lam)/4; x0 = (x0 + lam)/4; y0 = (y0 + lam)/4; z0 = (z0 + lam)/4; mul *= 4; } real X = (A0 - x) / (mul * An), Y = (A0 - y) / (mul * An), Z = - (X + Y), E2 = X*Y - Z*Z, E3 = X*Y*Z; // https://dlmf.nist.gov/19.36.E1 // Polynomial is // (1 - E2/10 + E3/14 + E2^2/24 - 3*E2*E3/44 // - 5*E2^3/208 + 3*E3^2/104 + E2^2*E3/16) // convert to Horner form... return (E3 * (6930 * E3 + E2 * (15015 * E2 - 16380) + 17160) + E2 * ((10010 - 5775 * E2) * E2 - 24024) + 240240) / (240240 * sqrt(An)); } Math::real EllipticFunction::RF(real x, real y) { // Carlson, eqs 2.36 - 2.38 static const real tolRG0 = real(2.7) * sqrt((numeric_limits::epsilon() * real(0.01))); real xn = sqrt(x), yn = sqrt(y); if (xn < yn) swap(xn, yn); while (fabs(xn-yn) > tolRG0 * xn) { // Max 4 trips real t = (xn + yn) /2; yn = sqrt(xn * yn); xn = t; } return Math::pi() / (xn + yn); } Math::real EllipticFunction::RC(real x, real y) { // Defined only for y != 0 and x >= 0. return ( !(x >= y) ? // x < y and catch nans // https://dlmf.nist.gov/19.2.E18 atan(sqrt((y - x) / x)) / sqrt(y - x) : ( x == y ? 1 / sqrt(y) : asinh( y > 0 ? // https://dlmf.nist.gov/19.2.E19 // atanh(sqrt((x - y) / x)) sqrt((x - y) / y) : // https://dlmf.nist.gov/19.2.E20 // atanh(sqrt(x / (x - y))) sqrt(-x / y) ) / sqrt(x - y) ) ); } Math::real EllipticFunction::RG(real x, real y, real z) { return (x == 0 ? RG(y, z) : (y == 0 ? RG(z, x) : (z == 0 ? RG(x, y) : // Carlson, eq 1.7 (z * RF(x, y, z) - (x-z) * (y-z) * RD(x, y, z) / 3 + sqrt(x * y / z)) / 2 ))); } Math::real EllipticFunction::RG(real x, real y) { // Carlson, eqs 2.36 - 2.39 static const real tolRG0 = real(2.7) * sqrt((numeric_limits::epsilon() * real(0.01))); real x0 = sqrt(fmax(x, y)), y0 = sqrt(fmin(x, y)), xn = x0, yn = y0, s = 0, mul = real(0.25); while (fabs(xn-yn) > tolRG0 * xn) { // Max 4 trips real t = (xn + yn) /2; yn = sqrt(xn * yn); xn = t; mul *= 2; t = xn - yn; s += mul * t * t; } return (Math::sq( (x0 + y0)/2 ) - s) * Math::pi() / (2 * (xn + yn)); } Math::real EllipticFunction::RJ(real x, real y, real z, real p) { // Carlson, eqs 2.17 - 2.25 static const real tolRD = pow(real(0.2) * (numeric_limits::epsilon() * real(0.01)), 1/real(8)); real A0 = (x + y + z + 2*p)/5, An = A0, delta = (p-x) * (p-y) * (p-z), Q = fmax(fmax(fabs(A0-x), fabs(A0-y)), fmax(fabs(A0-z), fabs(A0-p))) / tolRD, x0 = x, y0 = y, z0 = z, p0 = p, mul = 1, mul3 = 1, s = 0; while (Q >= mul * fabs(An)) { // Max 7 trips real lam = sqrt(x0)*sqrt(y0) + sqrt(y0)*sqrt(z0) + sqrt(z0)*sqrt(x0), d0 = (sqrt(p0)+sqrt(x0)) * (sqrt(p0)+sqrt(y0)) * (sqrt(p0)+sqrt(z0)), e0 = delta/(mul3 * Math::sq(d0)); s += RC(1, 1 + e0)/(mul * d0); An = (An + lam)/4; x0 = (x0 + lam)/4; y0 = (y0 + lam)/4; z0 = (z0 + lam)/4; p0 = (p0 + lam)/4; mul *= 4; mul3 *= 64; } real X = (A0 - x) / (mul * An), Y = (A0 - y) / (mul * An), Z = (A0 - z) / (mul * An), P = -(X + Y + Z) / 2, E2 = X*Y + X*Z + Y*Z - 3*P*P, E3 = X*Y*Z + 2*P * (E2 + 2*P*P), E4 = (2*X*Y*Z + P * (E2 + 3*P*P)) * P, E5 = X*Y*Z*P*P; // https://dlmf.nist.gov/19.36.E2 // Polynomial is // (1 - 3*E2/14 + E3/6 + 9*E2^2/88 - 3*E4/22 - 9*E2*E3/52 + 3*E5/26 // - E2^3/16 + 3*E3^2/40 + 3*E2*E4/20 + 45*E2^2*E3/272 // - 9*(E3*E4+E2*E5)/68) return ((471240 - 540540 * E2) * E5 + (612612 * E2 - 540540 * E3 - 556920) * E4 + E3 * (306306 * E3 + E2 * (675675 * E2 - 706860) + 680680) + E2 * ((417690 - 255255 * E2) * E2 - 875160) + 4084080) / (4084080 * mul * An * sqrt(An)) + 6 * s; } Math::real EllipticFunction::RD(real x, real y, real z) { // Carlson, eqs 2.28 - 2.34 static const real tolRD = pow(real(0.2) * (numeric_limits::epsilon() * real(0.01)), 1/real(8)); real A0 = (x + y + 3*z)/5, An = A0, Q = fmax(fmax(fabs(A0-x), fabs(A0-y)), fabs(A0-z)) / tolRD, x0 = x, y0 = y, z0 = z, mul = 1, s = 0; while (Q >= mul * fabs(An)) { // Max 7 trips real lam = sqrt(x0)*sqrt(y0) + sqrt(y0)*sqrt(z0) + sqrt(z0)*sqrt(x0); s += 1/(mul * sqrt(z0) * (z0 + lam)); An = (An + lam)/4; x0 = (x0 + lam)/4; y0 = (y0 + lam)/4; z0 = (z0 + lam)/4; mul *= 4; } real X = (A0 - x) / (mul * An), Y = (A0 - y) / (mul * An), Z = -(X + Y) / 3, E2 = X*Y - 6*Z*Z, E3 = (3*X*Y - 8*Z*Z)*Z, E4 = 3 * (X*Y - Z*Z) * Z*Z, E5 = X*Y*Z*Z*Z; // https://dlmf.nist.gov/19.36.E2 // Polynomial is // (1 - 3*E2/14 + E3/6 + 9*E2^2/88 - 3*E4/22 - 9*E2*E3/52 + 3*E5/26 // - E2^3/16 + 3*E3^2/40 + 3*E2*E4/20 + 45*E2^2*E3/272 // - 9*(E3*E4+E2*E5)/68) return ((471240 - 540540 * E2) * E5 + (612612 * E2 - 540540 * E3 - 556920) * E4 + E3 * (306306 * E3 + E2 * (675675 * E2 - 706860) + 680680) + E2 * ((417690 - 255255 * E2) * E2 - 875160) + 4084080) / (4084080 * mul * An * sqrt(An)) + 3 * s; } void EllipticFunction::Reset(real k2, real alpha2, real kp2, real alphap2) { // Accept nans here (needed for GeodesicExact) if (k2 > 1) throw GeographicErr("Parameter k2 is not in (-inf, 1]"); if (alpha2 > 1) throw GeographicErr("Parameter alpha2 is not in (-inf, 1]"); if (kp2 < 0) throw GeographicErr("Parameter kp2 is not in [0, inf)"); if (alphap2 < 0) throw GeographicErr("Parameter alphap2 is not in [0, inf)"); _k2 = k2; _kp2 = kp2; _alpha2 = alpha2; _alphap2 = alphap2; _eps = _k2/Math::sq(sqrt(_kp2) + 1); // Values of complete elliptic integrals for k = 0,1 and alpha = 0,1 // K E D // k = 0: pi/2 pi/2 pi/4 // k = 1: inf 1 inf // Pi G H // k = 0, alpha = 0: pi/2 pi/2 pi/4 // k = 1, alpha = 0: inf 1 1 // k = 0, alpha = 1: inf inf pi/2 // k = 1, alpha = 1: inf inf inf // // Pi(0, k) = K(k) // G(0, k) = E(k) // H(0, k) = K(k) - D(k) // Pi(0, k) = K(k) // G(0, k) = E(k) // H(0, k) = K(k) - D(k) // Pi(alpha2, 0) = pi/(2*sqrt(1-alpha2)) // G(alpha2, 0) = pi/(2*sqrt(1-alpha2)) // H(alpha2, 0) = pi/(2*(1 + sqrt(1-alpha2))) // Pi(alpha2, 1) = inf // H(1, k) = K(k) // G(alpha2, 1) = H(alpha2, 1) = RC(1, alphap2) if (_k2 != 0) { // Complete elliptic integral K(k), Carlson eq. 4.1 // https://dlmf.nist.gov/19.25.E1 _kKc = _kp2 != 0 ? RF(_kp2, 1) : Math::infinity(); // Complete elliptic integral E(k), Carlson eq. 4.2 // https://dlmf.nist.gov/19.25.E1 _eEc = _kp2 != 0 ? 2 * RG(_kp2, 1) : 1; // D(k) = (K(k) - E(k))/k^2, Carlson eq.4.3 // https://dlmf.nist.gov/19.25.E1 _dDc = _kp2 != 0 ? RD(0, _kp2, 1) / 3 : Math::infinity(); } else { _kKc = _eEc = Math::pi()/2; _dDc = _kKc/2; } if (_alpha2 != 0) { // https://dlmf.nist.gov/19.25.E2 real rj = (_kp2 != 0 && _alphap2 != 0) ? RJ(0, _kp2, 1, _alphap2) : Math::infinity(), // Only use rc if _kp2 = 0. rc = _kp2 != 0 ? 0 : (_alphap2 != 0 ? RC(1, _alphap2) : Math::infinity()); // Pi(alpha^2, k) _pPic = _kp2 != 0 ? _kKc + _alpha2 * rj / 3 : Math::infinity(); // G(alpha^2, k) _gGc = _kp2 != 0 ? _kKc + (_alpha2 - _k2) * rj / 3 : rc; // H(alpha^2, k) _hHc = _kp2 != 0 ? _kKc - (_alphap2 != 0 ? _alphap2 * rj : 0) / 3 : rc; } else { _pPic = _kKc; _gGc = _eEc; // Hc = Kc - Dc but this involves large cancellations if k2 is close to // 1. So write (for alpha2 = 0) // Hc = int(cos(phi)^2/sqrt(1-k2*sin(phi)^2),phi,0,pi/2) // = 1/sqrt(1-k2) * int(sin(phi)^2/sqrt(1-k2/kp2*sin(phi)^2,...) // = 1/kp * D(i*k/kp) // and use D(k) = RD(0, kp2, 1) / 3 // so Hc = 1/kp * RD(0, 1/kp2, 1) / 3 // = kp2 * RD(0, 1, kp2) / 3 // using https://dlmf.nist.gov/19.20.E18 // Equivalently // RF(x, 1) - RD(0, x, 1)/3 = x * RD(0, 1, x)/3 for x > 0 // For k2 = 0 and alpha2 = 0, we have // Hc = int(cos(phi)^2,...) = pi/4 // For k2 = 1 and alpha2 = 0, we have // Hc = int(cos(phi),...) = 1 _hHc = _kp2 == 1 ? Math::pi()/4 : (_kp2 == 0 ? 1 : _kp2 * RD(0, 1, _kp2) / 3); } } /* * Implementation of methods given in * * R. Bulirsch * Numerical Calculation of Elliptic Integrals and Elliptic Functions * Numericshe Mathematik 7, 78-90 (1965) */ void EllipticFunction::sncndn(real x, real& sn, real& cn, real& dn) const { // Bulirsch's sncndn routine, p 89. static const real tolJAC = sqrt(numeric_limits::epsilon() * real(0.01)); if (_kp2 != 0) { real mc = _kp2, d = 0; if (signbit(_kp2)) { // This implements DLMF Eqs 22.17.2 - 22.17.4. But this only // accomodates kp2 < 0 or k2 > 1 and these are outside the advertized // ranges for the contructor for this class. d = 1 - mc; mc /= -d; d = sqrt(d); x *= d; } real c = 0; // To suppress warning about uninitialized variable real m[num_], n[num_]; unsigned l = 0; for (real a = 1; l < num_ || GEOGRAPHICLIB_PANIC ("Convergence failure in EllipticFunction::sncndn"); ++l) { // This converges quadratically. Max 5 trips m[l] = a; n[l] = mc = sqrt(mc); c = (a + mc) / 2; if (!(fabs(a - mc) > tolJAC * a)) { ++l; break; } mc *= a; a = c; } x *= c; sn = sin(x); cn = cos(x); dn = 1; if (sn != 0) { real a = cn / sn; c *= a; while (l--) { real b = m[l]; a *= c; c *= dn; dn = (n[l] + a) / (b + a); a = c / b; } a = 1 / sqrt(c*c + 1); sn = signbit(sn) ? -a : a; cn = c * sn; if (signbit(_kp2)) { // See DLMF Eqs 22.17.2 - 22.17.4 swap(cn, dn); sn /= d; } } } else { sn = tanh(x); dn = cn = 1 / cosh(x); } } Math::real EllipticFunction::am(real x) const { // This implements DLMF Sec 22.20(ii). // See also Sala (1989), https://doi.org/10.1137/0520100, Sec 5. static const real tolJAC = pow(numeric_limits::epsilon(), real(0.75)); real k2 = _k2, kp2 = _kp2; if (_k2 == 0) return x; else if (_kp2 == 0) { return atan(sinh(x)); // gd(x) } else if (_k2 < 0) { // Sala Eq. 5.8 k2 = -_k2 / _kp2; kp2 = 1 / _kp2; x *= sqrt(_kp2); } real a[num_], b, c[num_]; a[0] = 1; b = sqrt(kp2); c[0] = sqrt(k2); int l = 1; for (; l < num_ || GEOGRAPHICLIB_PANIC ("Convergence failure in EllipticFunction::am");) { a[l] = (a[l-1] + b) / 2; c[l] = (a[l-1] - b) / 2; b = sqrt(a[l-1] * b); if (!(c[l] > tolJAC * a[l])) break; ++l; } // Now a[l] = pi/(2*K) // Need to initialize phi1 to stop Visual Studio complaining real phi = a[l] * x * real(1 << l), phi1 = 0; for (; l > 0; --l) { phi1 = phi; phi = (phi + asin(c[l] * sin(phi) / a[l])) / 2; } // For k2 < 0, see Sala Eq. 5.8 return _k2 < 0 ? phi1 - phi : phi; } Math::real EllipticFunction::am(real x, real& sn, real& cn, real& dn) const { real phi = am(x); if (_kp2 == 0) { // Could rely on sin(gd(x)) = tanh(x) and cos(gd(x)) = 1 / cosh(x). But // this is more accurate for large |x|. sn = tanh(x); cn = dn = 1 / cosh(x); } else { sn = sin(phi); cn = cos(phi); // See comment following DLMF Eq. 22.20.5 // dn = cn / cos(phi1 - phi) dn = Delta(sn, cn); } return phi; } Math::real EllipticFunction::F(real sn, real cn, real dn) const { // Carlson, eq. 4.5 and // https://dlmf.nist.gov/19.25.E5 real cn2 = cn*cn, dn2 = dn*dn, fi = cn2 != 0 ? fabs(sn) * RF(cn2, dn2, 1) : K(); // Enforce usual trig-like symmetries if (signbit(cn)) fi = 2 * K() - fi; return copysign(fi, sn); } Math::real EllipticFunction::E(real sn, real cn, real dn) const { real cn2 = cn*cn, dn2 = dn*dn, sn2 = sn*sn, ei = cn2 != 0 ? fabs(sn) * ( _k2 <= 0 ? // Carlson, eq. 4.6 and // https://dlmf.nist.gov/19.25.E9 RF(cn2, dn2, 1) - _k2 * sn2 * RD(cn2, dn2, 1) / 3 : ( _kp2 >= 0 ? // https://dlmf.nist.gov/19.25.E10 _kp2 * RF(cn2, dn2, 1) + _k2 * _kp2 * sn2 * RD(cn2, 1, dn2) / 3 + _k2 * fabs(cn) / dn : // https://dlmf.nist.gov/19.25.E11 - _kp2 * sn2 * RD(dn2, 1, cn2) / 3 + dn / fabs(cn) ) ) : E(); // Enforce usual trig-like symmetries if (signbit(cn)) ei = 2 * E() - ei; return copysign(ei, sn); } Math::real EllipticFunction::D(real sn, real cn, real dn) const { // Carlson, eq. 4.8 and // https://dlmf.nist.gov/19.25.E13 real cn2 = cn*cn, dn2 = dn*dn, sn2 = sn*sn, di = cn2 != 0 ? fabs(sn) * sn2 * RD(cn2, dn2, 1) / 3 : D(); // Enforce usual trig-like symmetries if (signbit(cn)) di = 2 * D() - di; return copysign(di, sn); } Math::real EllipticFunction::Pi(real sn, real cn, real dn) const { // Carlson, eq. 4.7 and // https://dlmf.nist.gov/19.25.E14 real cn2 = cn*cn, dn2 = dn*dn, sn2 = sn*sn, pii = cn2 != 0 ? fabs(sn) * (RF(cn2, dn2, 1) + _alpha2 * sn2 * RJ(cn2, dn2, 1, cn2 + _alphap2 * sn2) / 3) : Pi(); // Enforce usual trig-like symmetries if (signbit(cn)) pii = 2 * Pi() - pii; return copysign(pii, sn); } Math::real EllipticFunction::G(real sn, real cn, real dn) const { real cn2 = cn*cn, dn2 = dn*dn, sn2 = sn*sn, gi = cn2 != 0 ? fabs(sn) * (RF(cn2, dn2, 1) + (_alpha2 - _k2) * sn2 * RJ(cn2, dn2, 1, cn2 + _alphap2 * sn2) / 3) : G(); // Enforce usual trig-like symmetries if (signbit(cn)) gi = 2 * G() - gi; return copysign(gi, sn); } Math::real EllipticFunction::H(real sn, real cn, real dn) const { real cn2 = cn*cn, dn2 = dn*dn, sn2 = sn*sn, // WARNING: large cancellation if k2 = 1, alpha2 = 0, and phi near pi/2 hi = cn2 != 0 ? fabs(sn) * (RF(cn2, dn2, 1) - _alphap2 * sn2 * RJ(cn2, dn2, 1, cn2 + _alphap2 * sn2) / 3) : H(); // Enforce usual trig-like symmetries if (signbit(cn)) hi = 2 * H() - hi; return copysign(hi, sn); } Math::real EllipticFunction::deltaF(real sn, real cn, real dn) const { // Function is periodic with period pi if (signbit(cn)) { cn = -cn; sn = -sn; } return F(sn, cn, dn) * (Math::pi()/2) / K() - atan2(sn, cn); } Math::real EllipticFunction::deltaE(real sn, real cn, real dn) const { // Function is periodic with period pi if (signbit(cn)) { cn = -cn; sn = -sn; } return E(sn, cn, dn) * (Math::pi()/2) / E() - atan2(sn, cn); } Math::real EllipticFunction::deltaPi(real sn, real cn, real dn) const { // Function is periodic with period pi if (signbit(cn)) { cn = -cn; sn = -sn; } return Pi(sn, cn, dn) * (Math::pi()/2) / Pi() - atan2(sn, cn); } Math::real EllipticFunction::deltaD(real sn, real cn, real dn) const { // Function is periodic with period pi if (signbit(cn)) { cn = -cn; sn = -sn; } return D(sn, cn, dn) * (Math::pi()/2) / D() - atan2(sn, cn); } Math::real EllipticFunction::deltaG(real sn, real cn, real dn) const { // Function is periodic with period pi if (signbit(cn)) { cn = -cn; sn = -sn; } return G(sn, cn, dn) * (Math::pi()/2) / G() - atan2(sn, cn); } Math::real EllipticFunction::deltaH(real sn, real cn, real dn) const { // Function is periodic with period pi if (signbit(cn)) { cn = -cn; sn = -sn; } return H(sn, cn, dn) * (Math::pi()/2) / H() - atan2(sn, cn); } Math::real EllipticFunction::F(real phi) const { if (_k2 == 0) return phi; else if (_kp2 == 0) return asinh(tan(phi)); real sn = sin(phi), cn = cos(phi), dn = Delta(sn, cn); return fabs(phi) < Math::pi() ? F(sn, cn, dn) : (deltaF(sn, cn, dn) + phi) * K() / (Math::pi()/2); } Math::real EllipticFunction::E(real phi) const { if (_k2 == 0) return phi; // else if (_kp2 == 0) // Despite DLMF Eq 19.6.9 this is probably wrong, since // sqrt(1 - k^2*sin(phi)^2) -> abs(cos(phi)) in the limit k -> 1. // return sin(phi); real sn = sin(phi), cn = cos(phi), dn = Delta(sn, cn); return fabs(phi) < Math::pi() ? E(sn, cn, dn) : (deltaE(sn, cn, dn) + phi) * E() / (Math::pi()/2); } Math::real EllipticFunction::Ed(real ang) const { // ang - Math::AngNormalize(ang) is (nearly) an exact multiple of 360 real n = round((ang - Math::AngNormalize(ang))/Math::td); real sn, cn; Math::sincosd(ang, sn, cn); return E(sn, cn, Delta(sn, cn)) + 4 * E() * n; } Math::real EllipticFunction::Pi(real phi) const { real sn = sin(phi), cn = cos(phi), dn = Delta(sn, cn); return fabs(phi) < Math::pi() ? Pi(sn, cn, dn) : (deltaPi(sn, cn, dn) + phi) * Pi() / (Math::pi()/2); } Math::real EllipticFunction::D(real phi) const { real sn = sin(phi), cn = cos(phi), dn = Delta(sn, cn); return fabs(phi) < Math::pi() ? D(sn, cn, dn) : (deltaD(sn, cn, dn) + phi) * D() / (Math::pi()/2); } Math::real EllipticFunction::G(real phi) const { real sn = sin(phi), cn = cos(phi), dn = Delta(sn, cn); return fabs(phi) < Math::pi() ? G(sn, cn, dn) : (deltaG(sn, cn, dn) + phi) * G() / (Math::pi()/2); } Math::real EllipticFunction::H(real phi) const { real sn = sin(phi), cn = cos(phi), dn = Delta(sn, cn); return fabs(phi) < Math::pi() ? H(sn, cn, dn) : (deltaH(sn, cn, dn) + phi) * H() / (Math::pi()/2); } Math::real EllipticFunction::Einv(real x) const { static const real tolJAC = sqrt(numeric_limits::epsilon() / real(100)); real n = floor(x / (2 * _eEc) + real(0.5)); x -= 2 * _eEc * n; // x now in [-ec, ec) // Linear approximation real phi = Math::pi() * x / (2 * _eEc); // phi in [-pi/2, pi/2) // First order correction phi -= _eps * sin(2 * phi) / 2; // For kp2 close to zero use asin(x/_eEc) or // J. P. Boyd, Applied Math. and Computation 218, 7005-7013 (2012) // https://doi.org/10.1016/j.amc.2011.12.021 for (int i = 0; i < num_ || GEOGRAPHICLIB_PANIC("Convergence failure in EllipticFunction::Einv"); ++i) { real sn = sin(phi), cn = cos(phi), dn = Delta(sn, cn), err = (E(sn, cn, dn) - x)/dn; phi -= err; if (!(fabs(err) > tolJAC)) break; } return n * Math::pi() + phi; } Math::real EllipticFunction::deltaEinv(real stau, real ctau) const { // Function is periodic with period pi if (signbit(ctau)) { ctau = -ctau; stau = -stau; } real tau = atan2(stau, ctau); return Einv( tau * E() / (Math::pi()/2) ) - tau; } } // namespace GeographicLib geosphere/src/TransverseMercatorExact.h0000644000176200001440000002734115147425256020033 0ustar liggesusers/** * \file TransverseMercatorExact.hpp * \brief Header for GeographicLib::TransverseMercatorExact class * * Copyright (c) Charles Karney (2008-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP) #define GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP 1 #include "Constants.h" #include "EllipticFunction.h" namespace GeographicLib { /** * \brief An exact implementation of the transverse Mercator projection * * Implementation of the Transverse Mercator Projection given in * - L. P. Lee, * Conformal * Projections Based On Jacobian Elliptic Functions, Part V of * Conformal Projections Based on Elliptic Functions, * (B. V. Gutsell, Toronto, 1976), 128pp., * ISBN: 0919870163 * (also appeared as: * Monograph 16, Suppl. No. 1 to Canadian Cartographer, Vol 13); * * borrow from archive.org. * - C. F. F. Karney, * * Transverse Mercator with an accuracy of a few nanometers, * J. Geodesy 85(8), 475--485 (Aug. 2011); * preprint * arXiv:1002.1417. * * Lee gives the correct results for forward and reverse transformations * subject to the branch cut rules (see the description of the \e extendp * argument to the constructor). The maximum error is about 8 nm (8 * nanometers), ground distance, for the forward and reverse transformations. * The error in the convergence is 2 × 10−15", * the relative error in the scale is 7 × 10−12%%. * See Sec. 3 of * arXiv:1002.1417 for details. * The method is "exact" in the sense that the errors are close to the * round-off limit and that no changes are needed in the algorithms for them * to be used with reals of a higher precision. Thus the errors using long * double (with a 64-bit fraction) are about 2000 times smaller than using * double (with a 53-bit fraction). * * This algorithm is about 4.5 times slower than the 6th-order Krüger * method, TransverseMercator, taking about 11 us for a combined forward and * reverse projection on a 2.66 GHz Intel machine (g++, version 4.3.0, -O3). * * The ellipsoid parameters and the central scale are set in the constructor. * The central meridian (which is a trivial shift of the longitude) is * specified as the \e lon0 argument of the TransverseMercatorExact::Forward * and TransverseMercatorExact::Reverse functions. The latitude of origin is * taken to be the equator. See the documentation on TransverseMercator for * how to include a false easting, false northing, or a latitude of origin. * * See tm-grid.kmz, for an * illustration of the transverse Mercator grid in Google Earth. * * This class also returns the meridian convergence \e gamma and scale \e k. * The meridian convergence is the bearing of grid north (the \e y axis) * measured clockwise from true north. * * See TransverseMercatorExact.cpp for more information on the * implementation. * * See \ref transversemercator for a discussion of this projection. * * Example of use: * \include example-TransverseMercatorExact.cpp * * TransverseMercatorProj is a * command-line utility providing access to the functionality of * TransverseMercator and TransverseMercatorExact. **********************************************************************/ class GEOGRAPHICLIB_EXPORT TransverseMercatorExact { private: typedef Math::real real; friend class TransverseMercator; // Allow TM to call the default constructor // Private default constructor to support TransverseMercator(a, f, exact) TransverseMercatorExact() {}; // Do nothing; used with exact = false. static const int numit_ = 10; real tol_, tol2_, taytol_; real _a, _f, _k0, _mu, _mv, _e; bool _extendp; EllipticFunction _eEu, _eEv; void zeta(real u, real snu, real cnu, real dnu, real v, real snv, real cnv, real dnv, real& taup, real& lam) const; void dwdzeta(real u, real snu, real cnu, real dnu, real v, real snv, real cnv, real dnv, real& du, real& dv) const; bool zetainv0(real psi, real lam, real& u, real& v) const; void zetainv(real taup, real lam, real& u, real& v) const; void sigma(real u, real snu, real cnu, real dnu, real v, real snv, real cnv, real dnv, real& xi, real& eta) const; void dwdsigma(real u, real snu, real cnu, real dnu, real v, real snv, real cnv, real dnv, real& du, real& dv) const; bool sigmainv0(real xi, real eta, real& u, real& v) const; void sigmainv(real xi, real eta, real& u, real& v) const; void Scale(real tau, real lam, real snu, real cnu, real dnu, real snv, real cnv, real dnv, real& gamma, real& k) const; public: /** * Constructor for an ellipsoid with * * @param[in] a equatorial radius (meters). * @param[in] f flattening of ellipsoid. * @param[in] k0 central scale factor. * @param[in] extendp if true, use extended domain (default false). * @exception GeographicErr if \e a, \e f, or \e k0 is not positive. * * The transverse Mercator projection has a branch point singularity at \e * lat = 0 and \e lon − \e lon0 = 90 (1 − \e e) or (for * TransverseMercatorExact::UTM) x = 18381 km, y = 0m. The \e extendp * argument governs where the branch cut is placed. With \e extendp = * false, the "standard" convention is followed, namely the cut is placed * along \e x > 18381 km, \e y = 0m. Forward can be called with any \e lat * and \e lon then produces the transformation shown in Lee, Fig 46. * Reverse analytically continues this in the ± \e x direction. As * a consequence, Reverse may map multiple points to the same geographic * location; for example, for TransverseMercatorExact::UTM, \e x = * 22051449.037349 m, \e y = −7131237.022729 m and \e x = * 29735142.378357 m, \e y = 4235043.607933 m both map to \e lat = * −2°, \e lon = 88°. * * With \e extendp = true, the branch cut is moved to the lower left * quadrant. The various symmetries of the transverse Mercator projection * can be used to explore the projection on any sheet. In this mode the * domains of \e lat, \e lon, \e x, and \e y are restricted to * - the union of * - \e lat in [0, 90] and \e lon − \e lon0 in [0, 90] * - \e lat in (-90, 0] and \e lon − \e lon0 in [90 (1 − \e e), 90] * - the union of * - x/(\e k0 \e a) in [0, ∞) and * y/(\e k0 \e a) in [0, E(e2)] * - x/(\e k0 \e a) in [K(1 − e2) − * E(1 − e2), ∞) and y/(\e k0 \e * a) in (−∞, 0] * . * See Sec. 5 of * arXiv:1002.1417 for a full * discussion of the treatment of the branch cut. * * The method will work for all ellipsoids used in terrestrial geodesy. * The method cannot be applied directly to the case of a sphere (\e f = 0) * because some the constants characterizing this method diverge in that * limit, and in practice, \e f should be larger than about * numeric_limits::epsilon(). However, TransverseMercator treats the * sphere exactly. **********************************************************************/ TransverseMercatorExact(real a, real f, real k0, bool extendp = false); /** * Forward projection, from geographic to transverse Mercator. * * @param[in] lon0 central meridian of the projection (degrees). * @param[in] lat latitude of point (degrees). * @param[in] lon longitude of point (degrees). * @param[out] x easting of point (meters). * @param[out] y northing of point (meters). * @param[out] gamma meridian convergence at point (degrees). * @param[out] k scale of projection at point. * * No false easting or northing is added. \e lat should be in the range * [−90°, 90°]. **********************************************************************/ void Forward(real lon0, real lat, real lon, real& x, real& y, real& gamma, real& k) const; /** * Reverse projection, from transverse Mercator to geographic. * * @param[in] lon0 central meridian of the projection (degrees). * @param[in] x easting of point (meters). * @param[in] y northing of point (meters). * @param[out] lat latitude of point (degrees). * @param[out] lon longitude of point (degrees). * @param[out] gamma meridian convergence at point (degrees). * @param[out] k scale of projection at point. * * No false easting or northing is added. The value of \e lon returned is * in the range [−180°, 180°]. **********************************************************************/ void Reverse(real lon0, real x, real y, real& lat, real& lon, real& gamma, real& k) const; /** * TransverseMercatorExact::Forward without returning the convergence and * scale. **********************************************************************/ void Forward(real lon0, real lat, real lon, real& x, real& y) const { real gamma, k; Forward(lon0, lat, lon, x, y, gamma, k); } /** * TransverseMercatorExact::Reverse without returning the convergence and * scale. **********************************************************************/ void Reverse(real lon0, real x, real y, real& lat, real& lon) const { real gamma, k; Reverse(lon0, x, y, lat, lon, gamma, k); } /** \name Inspector functions **********************************************************************/ ///@{ /** * @return \e a the equatorial radius of the ellipsoid (meters). This is * the value used in the constructor. **********************************************************************/ Math::real EquatorialRadius() const { return _a; } /** * @return \e f the flattening of the ellipsoid. This is the value used in * the constructor. **********************************************************************/ Math::real Flattening() const { return _f; } /** * @return \e k0 central scale for the projection. This is the value of \e * k0 used in the constructor and is the scale on the central meridian. **********************************************************************/ Math::real CentralScale() const { return _k0; } ///@} /** * A global instantiation of TransverseMercatorExact with the WGS84 * ellipsoid and the UTM scale factor. However, unlike UTM, no false * easting or northing is added. **********************************************************************/ static const TransverseMercatorExact& UTM(); }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP geosphere/src/a_dist.c0000644000176200001440000000744115147425256014452 0ustar liggesusers/* Robert Hijmans, June 2011 */ #include #include #include "a_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) { /* 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 by 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 NAN; } 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 (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; cont = (fabs(lambda-lambdaP) > 1e-12 && iterLimit > 0); } if (iterLimit==0) { return NAN; // 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) { if (*m > 0) { for(size_t i=0; i < *n; i++) { dist[i] = distVinEll(lon1[i], lat1[i], lon2[i], lat2[i], a[i], b[i], f[i]); } } } geosphere/src/GeodesicLine.cpp0000644000176200001440000003140015147425256016071 0ustar liggesusers/** * \file GeodesicLine.cpp * \brief Implementation for GeographicLib::GeodesicLine class * * Copyright (c) Charles Karney (2009-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ * * This is a reformulation of the geodesic problem. The notation is as * follows: * - at a general point (no suffix or 1 or 2 as suffix) * - phi = latitude * - beta = latitude on auxiliary sphere * - omega = longitude on auxiliary sphere * - lambda = longitude * - alpha = azimuth of great circle * - sigma = arc length along great circle * - s = distance * - tau = scaled distance (= sigma at multiples of pi/2) * - at northwards equator crossing * - beta = phi = 0 * - omega = lambda = 0 * - alpha = alpha0 * - sigma = s = 0 * - a 12 suffix means a difference, e.g., s12 = s2 - s1. * - s and c prefixes mean sin and cos **********************************************************************/ #include "GeodesicLine.h" namespace GeographicLib { using namespace std; void GeodesicLine::LineInit(const Geodesic& g, real lat1, real lon1, real azi1, real salp1, real calp1, unsigned caps) { tiny_ = g.tiny_; _lat1 = Math::LatFix(lat1); _lon1 = lon1; _azi1 = azi1; _salp1 = salp1; _calp1 = calp1; _a = g._a; _f = g._f; _b = g._b; _c2 = g._c2; _f1 = g._f1; // Always allow latitude and azimuth and unrolling of longitude _caps = caps | LATITUDE | AZIMUTH | LONG_UNROLL; real cbet1, sbet1; Math::sincosd(Math::AngRound(_lat1), sbet1, cbet1); sbet1 *= _f1; // Ensure cbet1 = +epsilon at poles Math::norm(sbet1, cbet1); cbet1 = fmax(tiny_, cbet1); _dn1 = sqrt(1 + g._ep2 * Math::sq(sbet1)); // Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0), _salp0 = _salp1 * cbet1; // alp0 in [0, pi/2 - |bet1|] // Alt: calp0 = hypot(sbet1, calp1 * cbet1). The following // is slightly better (consider the case salp1 = 0). _calp0 = hypot(_calp1, _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. _ssig1 = sbet1; _somg1 = _salp0 * sbet1; _csig1 = _comg1 = sbet1 != 0 || _calp1 != 0 ? cbet1 * _calp1 : 1; Math::norm(_ssig1, _csig1); // sig1 in (-pi, pi] // Math::norm(_somg1, _comg1); -- don't need to normalize! _a13 = _s13 = Math::NaN(); _exact = g._exact; if (_exact) { _lineexact.LineInit(g._geodexact, lat1, lon1, azi1, salp1, calp1, caps); return; } _k2 = Math::sq(_calp0) * g._ep2; real eps = _k2 / (2 * (1 + sqrt(1 + _k2)) + _k2); if (_caps & CAP_C1) { _aA1m1 = Geodesic::A1m1f(eps); Geodesic::C1f(eps, _cC1a); _bB11 = Geodesic::SinCosSeries(true, _ssig1, _csig1, _cC1a, nC1_); real s = sin(_bB11), c = cos(_bB11); // tau1 = sig1 + B11 _stau1 = _ssig1 * c + _csig1 * s; _ctau1 = _csig1 * c - _ssig1 * s; // Not necessary because C1pa reverts C1a // _bB11 = -SinCosSeries(true, _stau1, _ctau1, _cC1pa, nC1p_); } if (_caps & CAP_C1p) Geodesic::C1pf(eps, _cC1pa); if (_caps & CAP_C2) { _aA2m1 = Geodesic::A2m1f(eps); Geodesic::C2f(eps, _cC2a); _bB21 = Geodesic::SinCosSeries(true, _ssig1, _csig1, _cC2a, nC2_); } if (_caps & CAP_C3) { g.C3f(eps, _cC3a); _aA3c = -_f * _salp0 * g.A3f(eps); _bB31 = Geodesic::SinCosSeries(true, _ssig1, _csig1, _cC3a, nC3_-1); } if (_caps & CAP_C4) { g.C4f(eps, _cC4a); // Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0) _aA4 = Math::sq(_a) * _calp0 * _salp0 * g._e2; _bB41 = Geodesic::SinCosSeries(false, _ssig1, _csig1, _cC4a, nC4_); } } GeodesicLine::GeodesicLine(const Geodesic& g, real lat1, real lon1, real azi1, unsigned caps) { azi1 = Math::AngNormalize(azi1); real salp1, calp1; // Guard against underflow in salp0. Also -0 is converted to +0. Math::sincosd(Math::AngRound(azi1), salp1, calp1); LineInit(g, lat1, lon1, azi1, salp1, calp1, caps); } GeodesicLine::GeodesicLine(const Geodesic& g, real lat1, real lon1, real azi1, real salp1, real calp1, unsigned caps, bool arcmode, real s13_a13) { LineInit(g, lat1, lon1, azi1, salp1, calp1, caps); GenSetDistance(arcmode, s13_a13); } Math::real GeodesicLine::GenPosition(bool arcmode, real s12_a12, unsigned outmask, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21, real& S12) const { if (_exact) return _lineexact.GenPosition(arcmode, s12_a12, outmask, lat2, lon2, azi2, s12, m12, M12, M21, S12); outmask &= _caps & OUT_MASK; if (!( Init() && (arcmode || (_caps & (OUT_MASK & DISTANCE_IN))) )) // Uninitialized or impossible distance calculation requested return Math::NaN(); // Avoid warning about uninitialized B12. real sig12, ssig12, csig12, B12 = 0, AB1 = 0; if (arcmode) { // Interpret s12_a12 as spherical arc length sig12 = s12_a12 * Math::degree(); Math::sincosd(s12_a12, ssig12, csig12); } else { // Interpret s12_a12 as distance real tau12 = s12_a12 / (_b * (1 + _aA1m1)), s = sin(tau12), c = cos(tau12); // tau2 = tau1 + tau12 B12 = - Geodesic::SinCosSeries(true, _stau1 * c + _ctau1 * s, _ctau1 * c - _stau1 * s, _cC1pa, nC1p_); sig12 = tau12 - (B12 - _bB11); ssig12 = sin(sig12); csig12 = cos(sig12); if (fabs(_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 ssig2 = _ssig1 * csig12 + _csig1 * ssig12, csig2 = _csig1 * csig12 - _ssig1 * ssig12; B12 = Geodesic::SinCosSeries(true, ssig2, csig2, _cC1a, nC1_); real serr = (1 + _aA1m1) * (sig12 + (B12 - _bB11)) - s12_a12 / _b; sig12 = sig12 - serr / sqrt(1 + _k2 * Math::sq(ssig2)); ssig12 = sin(sig12); csig12 = cos(sig12); // Update B12 below } } real ssig2, csig2, sbet2, cbet2, salp2, calp2; // sig2 = sig1 + sig12 ssig2 = _ssig1 * csig12 + _csig1 * ssig12; csig2 = _csig1 * csig12 - _ssig1 * ssig12; real dn2 = sqrt(1 + _k2 * Math::sq(ssig2)); if (outmask & (DISTANCE | REDUCEDLENGTH | GEODESICSCALE)) { if (arcmode || fabs(_f) > 0.01) B12 = Geodesic::SinCosSeries(true, ssig2, csig2, _cC1a, nC1_); AB1 = (1 + _aA1m1) * (B12 - _bB11); } // sin(bet2) = cos(alp0) * sin(sig2) sbet2 = _calp0 * ssig2; // Alt: cbet2 = hypot(csig2, salp0 * ssig2); cbet2 = hypot(_salp0, _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 = _salp0; calp2 = _calp0 * csig2; // No need to normalize if (outmask & DISTANCE) s12 = arcmode ? _b * ((1 + _aA1m1) * sig12 + AB1) : s12_a12; if (outmask & LONGITUDE) { // tan(omg2) = sin(alp0) * tan(sig2) real somg2 = _salp0 * ssig2, comg2 = csig2, // No need to normalize E = copysign(real(1), _salp0); // east-going? // omg12 = omg2 - omg1 real omg12 = outmask & LONG_UNROLL ? E * (sig12 - (atan2( ssig2, csig2) - atan2( _ssig1, _csig1)) + (atan2(E * somg2, comg2) - atan2(E * _somg1, _comg1))) : atan2(somg2 * _comg1 - comg2 * _somg1, comg2 * _comg1 + somg2 * _somg1); real lam12 = omg12 + _aA3c * ( sig12 + (Geodesic::SinCosSeries(true, ssig2, csig2, _cC3a, nC3_-1) - _bB31)); real lon12 = lam12 / Math::degree(); lon2 = outmask & LONG_UNROLL ? _lon1 + lon12 : Math::AngNormalize(Math::AngNormalize(_lon1) + Math::AngNormalize(lon12)); } if (outmask & LATITUDE) lat2 = Math::atan2d(sbet2, _f1 * cbet2); if (outmask & AZIMUTH) azi2 = Math::atan2d(salp2, calp2); if (outmask & (REDUCEDLENGTH | GEODESICSCALE)) { real B22 = Geodesic::SinCosSeries(true, ssig2, csig2, _cC2a, nC2_), AB2 = (1 + _aA2m1) * (B22 - _bB21), J12 = (_aA1m1 - _aA2m1) * sig12 + (AB1 - AB2); if (outmask & REDUCEDLENGTH) // Add parens around (_csig1 * ssig2) and (_ssig1 * csig2) to ensure // accurate cancellation in the case of coincident points. m12 = _b * ((dn2 * (_csig1 * ssig2) - _dn1 * (_ssig1 * csig2)) - _csig1 * csig2 * J12); if (outmask & GEODESICSCALE) { real t = _k2 * (ssig2 - _ssig1) * (ssig2 + _ssig1) / (_dn1 + dn2); M12 = csig12 + (t * ssig2 - csig2 * J12) * _ssig1 / _dn1; M21 = csig12 - (t * _ssig1 - _csig1 * J12) * ssig2 / dn2; } } if (outmask & AREA) { real B42 = Geodesic::SinCosSeries(false, ssig2, csig2, _cC4a, nC4_); real salp12, calp12; if (_calp0 == 0 || _salp0 == 0) { // alp12 = alp2 - alp1, used in atan2 so no need to normalize salp12 = salp2 * _calp1 - calp2 * _salp1; calp12 = calp2 * _calp1 + salp2 * _salp1; // We used to include here some patch up code that purported to deal // with nearly meridional geodesics properly. However, this turned out // to be wrong once _salp1 = -0 was allowed (via // Geodesic::InverseLine). In fact, the calculation of {s,c}alp12 // was already correct (following the IEEE rules for handling signed // zeros). So the patch up code was unnecessary (as well as // dangerous). } 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 = _calp0 * _salp0 * (csig12 <= 0 ? _csig1 * (1 - csig12) + ssig12 * _ssig1 : ssig12 * (_csig1 * ssig12 / (1 + csig12) + _ssig1)); calp12 = Math::sq(_salp0) + Math::sq(_calp0) * _csig1 * csig2; } S12 = _c2 * atan2(salp12, calp12) + _aA4 * (B42 - _bB41); } return arcmode ? s12_a12 : sig12 / Math::degree(); } void GeodesicLine::SetDistance(real s13) { _s13 = s13; real t; // This will set _a13 to NaN if the GeodesicLine doesn't have the // DISTANCE_IN capability. _a13 = GenPosition(false, _s13, 0u, t, t, t, t, t, t, t, t); } void GeodesicLine::SetArc(real a13) { _a13 = a13; // In case the GeodesicLine doesn't have the DISTANCE capability. _s13 = Math::NaN(); real t; GenPosition(true, _a13, DISTANCE, t, t, t, _s13, t, t, t, t); } void GeodesicLine::GenSetDistance(bool arcmode, real s13_a13) { arcmode ? SetArc(s13_a13) : SetDistance(s13_a13); } } // namespace GeographicLib geosphere/src/a_geolib.cpp0000644000176200001440000000320015147425256015275 0ustar liggesusers #include "Rcpp.h" #include #include "OSGB.h" //[[Rcpp::export(name = ".OSGB")]] std::vector osgb(std::vector x, std::vector y, std::string p, bool geo) { std::vector glv = {"100km", "10km", "1km", "100m", "10m", "1m", "500km", "50km", "5km", "500m" , "50m", "5m"}; int prec; auto it = std::find(glv.begin(), glv.end(), p); if (it != glv.end()) { prec = std::distance(glv.begin(), it); } else { return std::vector(0); } bool fiver = false; if (prec > 5) { prec = prec - 6; fiver = true; } if (geo) { for (size_t i=0; i out(x.size()); for (size_t i=0; i osgb_rev(std::vector g, int prec, bool centerp) { size_t n = g.size(); std::vector out(2 * n); for (size_t i=0; i and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ // Constants.hpp includes Math.hpp. Place this include outside Math.hpp's // include guard to enforce this ordering. #include "Constants.h" #if !defined(GEOGRAPHICLIB_MATH_HPP) #define GEOGRAPHICLIB_MATH_HPP 1 #if !defined(GEOGRAPHICLIB_WORDS_BIGENDIAN) # define GEOGRAPHICLIB_WORDS_BIGENDIAN 0 #endif #if !defined(GEOGRAPHICLIB_HAVE_LONG_DOUBLE) # define GEOGRAPHICLIB_HAVE_LONG_DOUBLE 0 #endif #if !defined(GEOGRAPHICLIB_PRECISION) /** * The precision of floating point numbers used in %GeographicLib. 1 means * float (single precision); 2 (the default) means double; 3 means long double; * 4 is reserved for quadruple precision. Nearly all the testing has been * carried out with doubles and that's the recommended configuration. In order * for long double to be used, GEOGRAPHICLIB_HAVE_LONG_DOUBLE needs to be * defined. Note that with Microsoft Visual Studio, long double is the same as * double. **********************************************************************/ # define GEOGRAPHICLIB_PRECISION 2 #endif #include #include #include #if GEOGRAPHICLIB_PRECISION == 4 # include # include # include # include #elif GEOGRAPHICLIB_PRECISION >= 5 # if GEOGRAPHICLIB_PRECISION > 5 # define MPREAL_FIXED_PRECISION GEOGRAPHICLIB_PRECISION # else # define MPREAL_FIXED_PRECISION 0 # endif # include #endif #if GEOGRAPHICLIB_PRECISION > 3 // volatile keyword makes no sense for multiprec types # define GEOGRAPHICLIB_VOLATILE // Signal a convergence failure with multiprec types by throwing an exception // at loop exit. # define GEOGRAPHICLIB_PANIC(msg) \ (throw GeographicLib::GeographicErr(msg), false) #else # define GEOGRAPHICLIB_VOLATILE volatile // Ignore convergence failures with standard floating points types by allowing // loop to exit cleanly. # define GEOGRAPHICLIB_PANIC(msg) false #endif namespace GeographicLib { /** * \brief Mathematical functions needed by %GeographicLib * * Define mathematical functions in order to localize system dependencies and * to provide generic versions of the functions. In addition define a real * type to be used by %GeographicLib. * * Example of use: * \include example-Math.cpp **********************************************************************/ class GEOGRAPHICLIB_EXPORT Math { private: void dummy(); // Static check for GEOGRAPHICLIB_PRECISION Math() = delete; // Disable constructor public: #if GEOGRAPHICLIB_HAVE_LONG_DOUBLE /** * The extended precision type for real numbers, used for some testing. * This is long double on computers with this type; otherwise it is double. **********************************************************************/ typedef long double extended; #else typedef double extended; #endif #if GEOGRAPHICLIB_PRECISION == 2 /** * The real type for %GeographicLib. Nearly all the testing has been done * with \e real = double. However, the algorithms should also work with * float and long double (where available). (CAUTION: reasonable * accuracy typically cannot be obtained using floats.) **********************************************************************/ typedef double real; #elif GEOGRAPHICLIB_PRECISION == 1 typedef float real; #elif GEOGRAPHICLIB_PRECISION == 3 typedef extended real; #elif GEOGRAPHICLIB_PRECISION == 4 typedef boost::multiprecision::float128 real; #elif GEOGRAPHICLIB_PRECISION >= 5 typedef mpfr::mpreal real; #else typedef double real; #endif /** * The constants defining the standard (Babylonian) meanings of degrees, * minutes, and seconds, for angles. Read the constants as follows (for * example): \e ms = 60 is the ratio 1 minute / 1 second. The * abbreviations are * - \e t a whole turn (360°) * - \e h a half turn (180°) * - \e q a quarter turn (a right angle = 90°) * - \e d a degree * - \e m a minute * - \e s a second * . * Note that degree() is ratio 1 degree / 1 radian, thus, for example, * Math::degree() * Math::qd is the ratio 1 quarter turn / 1 radian = * π/2. * * Defining all these in one place would mean that it's simple to convert * to the centesimal system for measuring angles. The DMS class assumes * that Math::dm and Math::ms are less than or equal to 100 (so that two * digits suffice for the integer parts of the minutes and degrees * components of an angle). Switching to the centesimal convention will * break most of the tests. Also the normal definition of degree is baked * into some classes, e.g., UTMUPS, MGRS, Georef, Geohash, etc. **********************************************************************/ static inline constexpr int qd = 90; ///< degrees per quarter turn static inline constexpr int dm = 60; ///< minutes per degree static inline constexpr int ms = 60; ///< seconds per minute static inline constexpr int hd = 2 * qd; ///< degrees per half turn static inline constexpr int td = 2 * hd; ///< degrees per turn static inline constexpr int ds = dm * ms; ///< seconds per degree /** * @return the number of bits of precision in a real number. **********************************************************************/ static int digits(); /** * Set the binary precision of a real number. * * @param[in] ndigits the number of bits of precision. * @return the resulting number of bits of precision. * * This only has an effect when GEOGRAPHICLIB_PRECISION >= 5. See also * Utility::set_digits for caveats about when this routine should be * called. If GEOGRAPHICLIB_PRECISION > 5, the precision is set to the * compile-time value of GEOGRAPHICLIB_PRECISION and \e ndigits is ignored. **********************************************************************/ static int set_digits(int ndigits); /** * @return the number of decimal digits of precision in a real number. **********************************************************************/ static int digits10(); /** * Number of additional decimal digits of precision for real relative to * double (0 for float). **********************************************************************/ static int extra_digits(); /** * true if the machine is big-endian. **********************************************************************/ static const bool bigendian = GEOGRAPHICLIB_WORDS_BIGENDIAN; /** * @tparam T the type of the returned value. * @return π. **********************************************************************/ template static T pi() { using std::atan2; static const T pi = atan2(T(0), T(-1)); return pi; } /** * @tparam T the type of the returned value. * @return the number of radians in a degree. **********************************************************************/ template static T degree() { static const T degree = pi() / T(hd); return degree; } /** * Square a number. * * @tparam T the type of the argument and the returned value. * @param[in] x * @return x2. **********************************************************************/ template static T sq(T x) { return x * x; } /** * Normalize a two-vector. * * @tparam T the type of the argument and the returned value. * @param[in,out] x on output set to x/hypot(x, y). * @param[in,out] y on output set to y/hypot(x, y). **********************************************************************/ template static void norm(T& x, T& y) { #if defined(_MSC_VER) && _MSC_VER < 1950 && 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. Reported 2021-03-14: // https://developercommunity.visualstudio.com/t/1369259 // See also: // https://bugs.python.org/issue43088 // Bug still present in my version of vc17 (2022) updated on 2025-09-01. // Let's hope it's fixed in vc18. using std::sqrt; T h = sqrt(x * x + y * y); #else using std::hypot; T h = hypot(x, y); #endif x /= h; y /= h; } /** * The error-free sum of two numbers. * * @tparam T the type of the argument and the returned value. * @param[in] u * @param[in] v * @param[out] t the exact error given by (\e u + \e v) - \e s. * @return \e s = round(\e u + \e v). * * See D. E. Knuth, TAOCP, Vol 2, 4.2.2, Theorem B. * * \note \e t can be the same as one of the first two arguments. **********************************************************************/ template static T sum(T u, T v, T& t); /** * Evaluate a polynomial. * * @tparam T the type of the arguments and returned value. * @param[in] N the order of the polynomial. * @param[in] p the coefficient array (of size \e N + 1) with * p0 being coefficient of xN. * @param[in] x the variable. * @return the value of the polynomial. * * Evaluate ∑n=0..N * pn xNn. * Return 0 if \e N < 0. Return p0, if \e N = 0 (even * if \e x is infinite or a nan). The evaluation uses Horner's method. **********************************************************************/ template static T polyval(int N, const T p[], T x) { // This used to employ Math::fma; but that's too slow and it seemed not // to improve the accuracy noticeably. This might change when there's // direct hardware support for fma. T z = N < 0 ? 0 : *p++; while (--N >= 0) z = z * x + *p++; // To compute z = p(x) and dz = (p(y)-p(x))/(y-x) at the same time // See Kahan + Fateman Sec 2.3. If y = x, dz = p'(x) // T z = N < 0 ? 0 : *p++, dz = 0; // while (--N >= 0) { dz = dz * y + p; z = z * x + *p++; } return z; } /** * Normalize an angle. * * @tparam T the type of the argument and returned value. * @param[in] x the angle in degrees. * @return the angle reduced to the range [−180°, 180°]. * * The range of \e x is unrestricted. If the result is ±0° or * ±180° then the sign is the sign of \e x. **********************************************************************/ template static T AngNormalize(T x); /** * Normalize a latitude. * * @tparam T the type of the argument and returned value. * @param[in] x the angle in degrees. * @return x if it is in the range [−90°, 90°], otherwise * return NaN. **********************************************************************/ template static T LatFix(T x) { using std::fabs; return fabs(x) > T(qd) ? NaN() : x; } /** * The exact difference of two angles reduced to * [−180°, 180°]. * * @tparam T the type of the arguments and returned value. * @param[in] x the first angle in degrees. * @param[in] y the second angle in degrees. * @param[out] e the error term in degrees. * @return \e d, the truncated value of \e y − \e x. * * This computes \e z = \e y − \e x exactly, reduced to * [−180°, 180°]; and then sets \e z = \e d + \e e where \e d * is the nearest representable number to \e z and \e e is the truncation * error. If \e z = ±0° or ±180°, then the sign of * \e d is given by the sign of \e y − \e x. The maximum absolute * value of \e e is 2−26 (for doubles). **********************************************************************/ template static T AngDiff(T x, T y, T& e); /** * Difference of two angles reduced to [−180°, 180°] * * @tparam T the type of the arguments and returned value. * @param[in] x the first angle in degrees. * @param[in] y the second angle in degrees. * @return \e y − \e x, reduced to the range [−180°, * 180°]. * * The result is equivalent to computing the difference exactly, reducing * it to [−180°, 180°] and rounding the result. **********************************************************************/ template static T AngDiff(T x, T y) { T e; return AngDiff(x, y, e); } /** * Coarsen a value close to zero. * * @tparam T the type of the argument and returned value. * @param[in] x * @return the coarsened value. * * The makes the smallest gap in \e x = 1/16 − nextafter(1/16, 0) = * 1/257 for doubles = 0.8 pm on the earth if \e x is an angle * in degrees. (This is about 2000 times more resolution than we get with * angles around 90°.) We use this to avoid having to deal with near * singular cases when \e x is non-zero but tiny (e.g., * 10−200). This sign of ±0 is preserved. **********************************************************************/ template static T AngRound(T x); /** * Evaluate the sine and cosine function with the argument in degrees * * @tparam T the type of the arguments. * @param[in] x in degrees. * @param[out] sinx sin(x). * @param[out] cosx cos(x). * * The results obey exactly the elementary properties of the trigonometric * functions, e.g., sin 9° = cos 81° = − sin 123456789°. * If x = −0 or a negative multiple of 180°, then \e sinx = * −0; this is the only case where −0 is returned. **********************************************************************/ template static void sincosd(T x, T& sinx, T& cosx); /** * Evaluate the sine and cosine with reduced argument plus correction * * @tparam T the type of the arguments. * @param[in] x reduced angle in degrees. * @param[in] t correction in degrees. * @param[out] sinx sin(x + t). * @param[out] cosx cos(x + t). * * This is a variant of Math::sincosd allowing a correction to the angle to * be supplied. \e x must be in [−180°, 180°] and \e t is * assumed to be a small correction. Math::AngRound is applied to * the reduced angle to prevent problems with \e x + \e t being extremely * close but not exactly equal to one of the four cardinal directions. **********************************************************************/ template static void sincosde(T x, T t, T& sinx, T& cosx); /** * Evaluate the sine function with the argument in degrees * * @tparam T the type of the argument and the returned value. * @param[in] x in degrees. * @return sin(x). * * The result is +0 for \e x = +0 and positive multiples of 180°. The * result is −0 for \e x = -0 and negative multiples of 180°. **********************************************************************/ template static T sind(T x); /** * Evaluate the cosine function with the argument in degrees * * @tparam T the type of the argument and the returned value. * @param[in] x in degrees. * @return cos(x). * * The result is +0 for \e x an odd multiple of 90°. **********************************************************************/ template static T cosd(T x); /** * Evaluate the tangent function with the argument in degrees * * @tparam T the type of the argument and the returned value. * @param[in] x in degrees. * @return tan(x). * * If \e x is an odd multiple of 90°, then a suitably large (but * finite) value is returned. **********************************************************************/ template static T tand(T x); /** * Evaluate the atan2 function with the result in degrees * * @tparam T the type of the arguments and the returned value. * @param[in] y * @param[in] x * @return atan2(y, x) in degrees. * * The result is in the range [−180° 180°]. N.B., * atan2d(±0, −1) = ±180°. **********************************************************************/ template static T atan2d(T y, T x); /** * Evaluate the atan function with the result in degrees * * @tparam T the type of the argument and the returned value. * @param[in] x * @return atan(x) in degrees. **********************************************************************/ template static T atand(T x); /** * Evaluate e atanh(e x) * * @tparam T the type of the argument and the returned value. * @param[in] x * @param[in] es the signed eccentricity = sign(e2) * sqrt(|e2|) * @return e atanh(e x) * * If e2 is negative (e is imaginary), the * expression is evaluated in terms of atan. **********************************************************************/ template static T eatanhe(T x, T es); /** * tanχ in terms of tanφ * * @tparam T the type of the argument and the returned value. * @param[in] tau τ = tanφ * @param[in] es the signed eccentricity = sign(e2) * sqrt(|e2|) * @return τ′ = tanχ * * See Eqs. (7--9) of * C. F. F. Karney, * * Transverse Mercator with an accuracy of a few nanometers, * J. Geodesy 85(8), 475--485 (Aug. 2011) * (preprint * arXiv:1002.1417). **********************************************************************/ template static T taupf(T tau, T es); /** * tanφ in terms of tanχ * * @tparam T the type of the argument and the returned value. * @param[in] taup τ′ = tanχ * @param[in] es the signed eccentricity = sign(e2) * sqrt(|e2|) * @return τ = tanφ * * See Eqs. (19--21) of * C. F. F. Karney, * * Transverse Mercator with an accuracy of a few nanometers, * J. Geodesy 85(8), 475--485 (Aug. 2011) * (preprint * arXiv:1002.1417). **********************************************************************/ template static T tauf(T taup, T es); /** * Implement hypot with 3 parameters * * @tparam T the type of the argument and the returned value. * @param[in] x * @param[in] y * @param[in] z * @return sqrt(x2 + y2 + * z2). **********************************************************************/ template static T hypot3(T x, T y, T z); /** * Implement work-alike to C++17 clamp function * * @tparam T the type of the argument and the returned value. * @param[in] x * @param[in] a * @param[in] b * @return \e x if it lies in [a, b]; otherise return the * nearest boundary value. * * Requires \e a ≤ \e b. Unlike std::clamp, \e x can be a NaN (and * this is then returned). **********************************************************************/ template static T clamp(T x, T a, T b); /** * The NaN (not a number) * * @tparam T the type of the returned value. * @return NaN if available, otherwise return the max real of type T. **********************************************************************/ template static T NaN(); /** * Infinity * * @tparam T the type of the returned value. * @return infinity if available, otherwise return the max real. **********************************************************************/ template static T infinity(); /** * Swap the bytes of a quantity * * @tparam T the type of the argument and the returned value. * @param[in] x * @return x with its bytes swapped. **********************************************************************/ template static T swab(T x) { union { T r; unsigned char c[sizeof(T)]; } b; b.r = x; for (int i = sizeof(T)/2; i--; ) std::swap(b.c[i], b.c[sizeof(T) - 1 - i]); return b.r; } }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_MATH_HPP geosphere/src/DST.cpp0000644000176200001440000001216515147425256014200 0ustar liggesusers/** * \file DST.cpp * \brief Implementation for GeographicLib::DST class * * Copyright (c) Charles Karney (2022) and licensed under * the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include "DST.h" #include #include "kissfft.h" namespace GeographicLib { using namespace std; DST::DST(int N) : _nN(N < 0 ? 0 : N) , _fft(make_shared(fft_t(2 * _nN, false))) {} void DST::reset(int N) { N = N < 0 ? 0 : N; if (N == _nN) return; _nN = N; _fft->assign(2 * _nN, false); } void DST::fft_transform(real data[], real F[], bool centerp) const { // Implement DST-III (centerp = false) or DST-IV (centerp = true). // Elements (0,N], resp. [0,N), of data should be set on input for centerp // = false, resp. true. F must have a size of at least N and on output // elements [0,N) of F contain the transform. if (_nN == 0) return; if (centerp) { for (int i = 0; i < _nN; ++i) { data[_nN+i] = data[_nN-1-i]; data[2*_nN+i] = -data[i]; data[3*_nN+i] = -data[_nN-1-i]; } } else { data[0] = 0; // set [0] for (int i = 1; i < _nN; ++i) data[_nN+i] = data[_nN-i]; // set [N+1,2*N-1] for (int i = 0; i < 2*_nN; ++i) data[2*_nN+i] = -data[i]; // [2*N, 4*N-1] } vector> ctemp(2*_nN); _fft->transform_real(data, ctemp.data()); if (centerp) { real d = -Math::pi()/(4*_nN); for (int i = 0, j = 1; i < _nN; ++i, j+=2) ctemp[j] *= exp(complex(0, j*d)); } for (int i = 0, j = 1; i < _nN; ++i, j+=2) { F[i] = -ctemp[j].imag() / (2*_nN); } } void DST::fft_transform2(real data[], real F[]) const { // Elements [0,N), of data should be set to the N grid center values and F // should have size of at least 2*N. On input elements [0,N) of F contain // the size N transform; on output elements [0,2*N) of F contain the size // 2*N transform. fft_transform(data, F+_nN, true); // Copy DST-IV order N tx to [0,N) elements of data for (int i = 0; i < _nN; ++i) data[i] = F[i+_nN]; for (int i = _nN; i < 2*_nN; ++i) // (DST-IV order N - DST-III order N) / 2 F[i] = (data[2*_nN-1-i] - F[2*_nN-1-i])/2; for (int i = 0; i < _nN; ++i) // (DST-IV order N + DST-III order N) / 2 F[i] = (data[i] + F[i])/2; } void DST::transform(function f, real F[]) const { vector data(4 * _nN); real d = Math::pi()/(2 * _nN); for (int i = 1; i <= _nN; ++i) data[i] = f( i * d ); fft_transform(data.data(), F, false); } void DST::refine(function f, real F[]) const { vector data(4 * _nN); real d = Math::pi()/(4 * _nN); for (int i = 0; i < _nN; ++i) data[i] = f( (2*i + 1) * d ); fft_transform2(data.data(), F); } Math::real DST::eval(real sinx, real cosx, const real F[], int N) { // Evaluate // y = sum(F[i] * sin((2*i+1) * x), i, 0, N-1) // using Clenshaw summation. // Approx operation count = (N + 5) mult and (2 * N + 2) add real ar = 2 * (cosx - sinx) * (cosx + sinx), // 2 * cos(2 * x) y0 = N & 1 ? F[--N] : 0, y1 = 0; // accumulators for sum // Now N is even while (N > 0) { // Unroll loop x 2, so accumulators return to their original role y1 = ar * y0 - y1 + F[--N]; y0 = ar * y1 - y0 + F[--N]; } return sinx * (y0 + y1); // sin(x) * (y0 + y1) } Math::real DST::integral(real sinx, real cosx, const real F[], int N) { // Evaluate // y = -sum(F[i]/(2*i+1) * cos((2*i+1) * x), i, 0, N-1) // using Clenshaw summation. // Approx operation count = (N + 5) mult and (2 * N + 2) add real ar = 2 * (cosx - sinx) * (cosx + sinx), // 2 * cos(2 * x) y0 = 0, y1 = 0; // accumulators for sum for (--N; N >= 0; --N) { real t = ar * y0 - y1 + F[N]/(2*N+1); y1 = y0; y0 = t; } return cosx * (y1 - y0); // cos(x) * (y1 - y0) } Math::real DST::integral(real sinx, real cosx, real siny, real cosy, const real F[], int N) { // return integral(siny, cosy, F, N) - integral(sinx, cosx, F, N); real // 2*cos(y-x)*cos(y+x) -> 2 * cos(2 * x) ac = +2 * (cosy * cosx + siny * sinx) * (cosy * cosx - siny * sinx), // -2*sin(y-x)*sin(y+x) -> 0 as = -2 * (siny * cosx - cosy * sinx) * (siny * cosx + cosy * sinx), y0 = 0, y1 = 0, z0 = 0, z1 = 0; // accumulators for sum for (--N; N >= 0; --N) { real ty = ac * y0 + as * z0 - y1 + F[N]/(2*N+1), tz = as * y0 + ac * z0 - z1; y1 = y0; y0 = ty; z1 = z0; z0 = tz; } // B[0] - B[1] = [y0-y1, z0-z1] // F[0] = [cosy + cosx, cosy - cosx] -> [2 * cosx, 0] // (B[0] - B[1]) . F[0] // = [(y0 - y1) * (cosy + cosx) + (z0 - z1) * (cosy - cosx), // (y0 - y1) * (cosy - cosx) + (z0 - z1) * (cosy + cosx), // return -(2nd element) return (y1 - y0) * (cosy - cosx) + (z1 - z0) * (cosy + cosx); } } // namespace GeographicLib geosphere/src/Accumulator.h0000644000176200001440000001754615147425256015502 0ustar liggesusers/** * \file Accumulator.hpp * \brief Header for GeographicLib::Accumulator class * * Copyright (c) Charles Karney (2010-2020) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_ACCUMULATOR_HPP) #define GEOGRAPHICLIB_ACCUMULATOR_HPP 1 #include "Constants.h" namespace GeographicLib { /** * \brief An accumulator for sums * * This allows many numbers of floating point type \e T to be added together * with twice the normal precision. Thus if \e T is double, the effective * precision of the sum is 106 bits or about 32 decimal places. * * The implementation follows J. R. Shewchuk, * Adaptive Precision * Floating-Point Arithmetic and Fast Robust Geometric Predicates, * Discrete & Computational Geometry 18(3) 305--363 (1997). * * Approximate timings (summing a vector) * - double: 2ns * - Accumulator: 23ns * * In the documentation of the member functions, \e sum stands for the value * currently held in the accumulator. * * Example of use: * \include example-Accumulator.cpp **********************************************************************/ template class GEOGRAPHICLIB_EXPORT Accumulator { private: // _s + _t accumulators for the sum. T _s, _t; // Same as Math::sum, but requires abs(u) >= abs(v). This isn't currently // used. static T fastsum(T u, T v, T& t) { GEOGRAPHICLIB_VOLATILE T s = u + v; GEOGRAPHICLIB_VOLATILE T vp = s - u; t = v - vp; return s; } void Add(T y) { // Here's Shewchuk's solution... T u; // hold exact sum as [s, t, u] // Accumulate starting at least significant end y = Math::sum(y, _t, u); _s = Math::sum(y, _s, _t); // Start is _s, _t decreasing and non-adjacent. Sum is now (s + t + u) // exactly with s, t, u non-adjacent and in decreasing order (except for // possible zeros). The following code tries to normalize the result. // Ideally, we want _s = round(s+t+u) and _u = round(s+t+u - _s). The // following does an approximate job (and maintains the decreasing // non-adjacent property). Here are two "failures" using 3-bit floats: // // Case 1: _s is not equal to round(s+t+u) -- off by 1 ulp // [12, -1] - 8 -> [4, 0, -1] -> [4, -1] = 3 should be [3, 0] = 3 // // Case 2: _s+_t is not as close to s+t+u as it shold be // [64, 5] + 4 -> [64, 8, 1] -> [64, 8] = 72 (off by 1) // should be [80, -7] = 73 (exact) // // "Fixing" these problems is probably not worth the expense. The // representation inevitably leads to small errors in the accumulated // values. The additional errors illustrated here amount to 1 ulp of the // less significant word during each addition to the Accumulator and an // additional possible error of 1 ulp in the reported sum. // // Incidentally, the "ideal" representation described above is not // canonical, because _s = round(_s + _t) may not be true. For example, // with 3-bit floats: // // [128, 16] + 1 -> [160, -16] -- 160 = round(145). // But [160, 0] - 16 -> [128, 16] -- 128 = round(144). // if (_s == 0) // This implies t == 0, _s = u; // so result is u else _t += u; // otherwise just accumulate u to t. } T Sum(T y) const { Accumulator a(*this); a.Add(y); return a._s; } public: /** * Construct from a \e T. This is not declared explicit, so that you can * write Accumulator a = 5;. * * @param[in] y set \e sum = \e y. **********************************************************************/ Accumulator(T y = T(0)) : _s(y), _t(0) { static_assert(!std::numeric_limits::is_integer, "Accumulator type is not floating point"); } /** * Set the accumulator to a number. * * @param[in] y set \e sum = \e y. **********************************************************************/ Accumulator& operator=(T y) { _s = y; _t = 0; return *this; } /** * Return the value held in the accumulator. * * @return \e sum. **********************************************************************/ T operator()() const { return _s; } /** * Return the result of adding a number to \e sum (but don't change \e * sum). * * @param[in] y the number to be added to the sum. * @return \e sum + \e y. **********************************************************************/ T operator()(T y) const { return Sum(y); } /** * Add a number to the accumulator. * * @param[in] y set \e sum += \e y. **********************************************************************/ Accumulator& operator+=(T y) { Add(y); return *this; } /** * Subtract a number from the accumulator. * * @param[in] y set \e sum -= \e y. **********************************************************************/ Accumulator& operator-=(T y) { Add(-y); return *this; } /** * Multiply accumulator by an integer. To avoid loss of accuracy, use only * integers such that \e n × \e T is exactly representable as a \e T * (i.e., ± powers of two). Use \e n = −1 to negate \e sum. * * @param[in] n set \e sum *= \e n. **********************************************************************/ Accumulator& operator*=(int n) { _s *= n; _t *= n; return *this; } /** * Multiply accumulator by a number. The fma (fused multiply and add) * instruction is used (if available) in order to maintain accuracy. * * @param[in] y set \e sum *= \e y. **********************************************************************/ Accumulator& operator*=(T y) { using std::fma; T d = _s; _s *= y; d = fma(y, d, -_s); // the error in the first multiplication _t = fma(y, _t, d); // add error to the second term return *this; } /** * Reduce accumulator to the range [-y/2, y/2]. * * @param[in] y the modulus. **********************************************************************/ Accumulator& remainder(T y) { using std::remainder; _s = remainder(_s, y); Add(0); // This renormalizes the result. return *this; } /** * Test equality of an Accumulator with a number. **********************************************************************/ bool operator==(T y) const { return _s == y; } /** * Test inequality of an Accumulator with a number. **********************************************************************/ bool operator!=(T y) const { return _s != y; } /** * Less operator on an Accumulator and a number. **********************************************************************/ bool operator<(T y) const { return _s < y; } /** * Less or equal operator on an Accumulator and a number. **********************************************************************/ bool operator<=(T y) const { return _s <= y; } /** * Greater operator on an Accumulator and a number. **********************************************************************/ bool operator>(T y) const { return _s > y; } /** * Greater or equal operator on an Accumulator and a number. **********************************************************************/ bool operator>=(T y) const { return _s >= y; } }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_ACCUMULATOR_HPP geosphere/src/TransverseMercatorExact.cpp0000644000176200001440000004141515147425256020364 0ustar liggesusers/** * \file TransverseMercatorExact.cpp * \brief Implementation for GeographicLib::TransverseMercatorExact class * * Copyright (c) Charles Karney (2008-2022) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ * * The relevant section of Lee's paper is part V, pp 67--101, * Conformal * Projections Based On Jacobian Elliptic Functions; * * borrow from archive.org. * * The method entails using the Thompson Transverse Mercator as an * intermediate projection. The projections from the intermediate * coordinates to [\e phi, \e lam] and [\e x, \e y] are given by elliptic * functions. The inverse of these projections are found by Newton's method * with a suitable starting guess. * * This implementation and notation closely follows Lee, with the following * exceptions: *
*
Lee here Description *
x/a xi Northing (unit Earth) *
y/a eta Easting (unit Earth) *
s/a sigma xi + i * eta *
y x Easting *
x y Northing *
k e eccentricity *
k^2 mu elliptic function parameter *
k'^2 mv elliptic function complementary parameter *
m k scale *
zeta zeta complex longitude = Mercator = chi in paper *
s sigma complex GK = zeta in paper *
* * Minor alterations have been made in some of Lee's expressions in an * attempt to control round-off. For example atanh(sin(phi)) is replaced by * asinh(tan(phi)) which maintains accuracy near phi = pi/2. Such changes * are noted in the code. **********************************************************************/ #include "TransverseMercatorExact.h" namespace GeographicLib { using namespace std; TransverseMercatorExact::TransverseMercatorExact(real a, real f, real k0, bool extendp) : tol_(numeric_limits::epsilon()) , tol2_(real(0.1) * tol_) , taytol_(pow(tol_, real(0.6))) , _a(a) , _f(f) , _k0(k0) , _mu(_f * (2 - _f)) // e^2 , _mv(1 - _mu) // 1 - e^2 , _e(sqrt(_mu)) , _extendp(extendp) , _eEu(_mu) , _eEv(_mv) { if (!(isfinite(_a) && _a > 0)) throw GeographicErr("Equatorial radius is not positive"); if (!(_f > 0)) throw GeographicErr("Flattening is not positive"); if (!(_f < 1)) throw GeographicErr("Polar semiaxis is not positive"); if (!(isfinite(_k0) && _k0 > 0)) throw GeographicErr("Scale is not positive"); } const TransverseMercatorExact& TransverseMercatorExact::UTM() { static const TransverseMercatorExact utm(Constants::WGS84_a(), Constants::WGS84_f(), Constants::UTM_k0()); return utm; } void TransverseMercatorExact::zeta(real /*u*/, real snu, real cnu, real dnu, real /*v*/, real snv, real cnv, real dnv, real& taup, real& lam) const { // Lee 54.17 but write // atanh(snu * dnv) = asinh(snu * dnv / sqrt(cnu^2 + _mv * snu^2 * snv^2)) // atanh(_e * snu / dnv) = // asinh(_e * snu / sqrt(_mu * cnu^2 + _mv * cnv^2)) // Overflow value s.t. atan(overflow) = pi/2 static const real overflow = 1 / Math::sq(numeric_limits::epsilon()); real d1 = sqrt(Math::sq(cnu) + _mv * Math::sq(snu * snv)), d2 = sqrt(_mu * Math::sq(cnu) + _mv * Math::sq(cnv)), t1 = (d1 != 0 ? snu * dnv / d1 : (signbit(snu) ? -overflow : overflow)), t2 = (d2 != 0 ? sinh( _e * asinh(_e * snu / d2) ) : (signbit(snu) ? -overflow : overflow)); // psi = asinh(t1) - asinh(t2) // taup = sinh(psi) taup = t1 * hypot(real(1), t2) - t2 * hypot(real(1), t1); lam = (d1 != 0 && d2 != 0) ? atan2(dnu * snv, cnu * cnv) - _e * atan2(_e * cnu * snv, dnu * cnv) : 0; } void TransverseMercatorExact::dwdzeta(real /*u*/, real snu, real cnu, real dnu, real /*v*/, real snv, real cnv, real dnv, real& du, real& dv) const { // Lee 54.21 but write (1 - dnu^2 * snv^2) = (cnv^2 + _mu * snu^2 * snv^2) // (see A+S 16.21.4) real d = _mv * Math::sq(Math::sq(cnv) + _mu * Math::sq(snu * snv)); du = cnu * dnu * dnv * (Math::sq(cnv) - _mu * Math::sq(snu * snv)) / d; dv = -snu * snv * cnv * (Math::sq(dnu * dnv) + _mu * Math::sq(cnu)) / d; } // Starting point for zetainv bool TransverseMercatorExact::zetainv0(real psi, real lam, real& u, real& v) const { bool retval = false; if (psi < -_e * Math::pi()/4 && lam > (1 - 2 * _e) * Math::pi()/2 && psi < lam - (1 - _e) * Math::pi()/2) { // N.B. this branch is normally not taken because psi < 0 is converted // psi > 0 by Forward. // // There's a log singularity at w = w0 = Eu.K() + i * Ev.K(), // corresponding to the south pole, where we have, approximately // // psi = _e + i * pi/2 - _e * atanh(cos(i * (w - w0)/(1 + _mu/2))) // // Inverting this gives: real psix = 1 - psi / _e, lamx = (Math::pi()/2 - lam) / _e; u = asinh(sin(lamx) / hypot(cos(lamx), sinh(psix))) * (1 + _mu/2); v = atan2(cos(lamx), sinh(psix)) * (1 + _mu/2); u = _eEu.K() - u; v = _eEv.K() - v; } else if (psi < _e * Math::pi()/2 && lam > (1 - 2 * _e) * Math::pi()/2) { // At w = w0 = i * Ev.K(), we have // // zeta = zeta0 = i * (1 - _e) * pi/2 // zeta' = zeta'' = 0 // // including the next term in the Taylor series gives: // // zeta = zeta0 - (_mv * _e) / 3 * (w - w0)^3 // // When inverting this, we map arg(w - w0) = [-90, 0] to // arg(zeta - zeta0) = [-90, 180] real dlam = lam - (1 - _e) * Math::pi()/2, rad = hypot(psi, dlam), // atan2(dlam-psi, psi+dlam) + 45d gives arg(zeta - zeta0) in range // [-135, 225). Subtracting 180 (since multiplier is negative) makes // range [-315, 45). Multiplying by 1/3 (for cube root) gives range // [-105, 15). In particular the range [-90, 180] in zeta space maps // to [-90, 0] in w space as required. ang = atan2(dlam-psi, psi+dlam) - real(0.75) * Math::pi(); // Error using this guess is about 0.21 * (rad/e)^(5/3) retval = rad < _e * taytol_; rad = cbrt(3 / (_mv * _e) * rad); ang /= 3; u = rad * cos(ang); v = rad * sin(ang) + _eEv.K(); } else { // Use spherical TM, Lee 12.6 -- writing atanh(sin(lam) / cosh(psi)) = // asinh(sin(lam) / hypot(cos(lam), sinh(psi))). This takes care of the // log singularity at zeta = Eu.K() (corresponding to the north pole) v = asinh(sin(lam) / hypot(cos(lam), sinh(psi))); u = atan2(sinh(psi), cos(lam)); // But scale to put 90,0 on the right place u *= _eEu.K() / (Math::pi()/2); v *= _eEu.K() / (Math::pi()/2); } return retval; } // Invert zeta using Newton's method void TransverseMercatorExact::zetainv(real taup, real lam, real& u, real& v) const { real psi = asinh(taup), scal = 1/hypot(real(1), taup); if (zetainv0(psi, lam, u, v)) return; real stol2 = tol2_ / Math::sq(fmax(psi, real(1))); // min iterations = 2, max iterations = 6; mean = 4.0 for (int i = 0, trip = 0; i < numit_ || GEOGRAPHICLIB_PANIC ("Convergence failure in TransverseMercatorExact"); ++i) { real snu, cnu, dnu, snv, cnv, dnv; _eEu.am(u, snu, cnu, dnu); _eEv.am(v, snv, cnv, dnv); real tau1, lam1, du1, dv1; zeta(u, snu, cnu, dnu, v, snv, cnv, dnv, tau1, lam1); dwdzeta(u, snu, cnu, dnu, v, snv, cnv, dnv, du1, dv1); tau1 -= taup; lam1 -= lam; tau1 *= scal; real delu = tau1 * du1 - lam1 * dv1, delv = tau1 * dv1 + lam1 * du1; u -= delu; v -= delv; if (trip) break; real delw2 = Math::sq(delu) + Math::sq(delv); if (!(delw2 >= stol2)) ++trip; } } void TransverseMercatorExact::sigma(real /*u*/, real snu, real cnu, real dnu, real v, real snv, real cnv, real dnv, real& xi, real& eta) const { // Lee 55.4 writing // dnu^2 + dnv^2 - 1 = _mu * cnu^2 + _mv * cnv^2 real d = _mu * Math::sq(cnu) + _mv * Math::sq(cnv); xi = _eEu.E(snu, cnu, dnu) - _mu * snu * cnu * dnu / d; eta = v - _eEv.E(snv, cnv, dnv) + _mv * snv * cnv * dnv / d; } void TransverseMercatorExact::dwdsigma(real /*u*/, real snu, real cnu, real dnu, real /*v*/, real snv, real cnv, real dnv, real& du, real& dv) const { // Reciprocal of 55.9: dw/ds = dn(w)^2/_mv, expanding complex dn(w) using // A+S 16.21.4 real d = _mv * Math::sq(Math::sq(cnv) + _mu * Math::sq(snu * snv)); real dnr = dnu * cnv * dnv, dni = - _mu * snu * cnu * snv; du = (Math::sq(dnr) - Math::sq(dni)) / d; dv = 2 * dnr * dni / d; } // Starting point for sigmainv bool TransverseMercatorExact::sigmainv0(real xi, real eta, real& u, real& v) const { bool retval = false; if (eta > real(1.25) * _eEv.KE() || (xi < -real(0.25) * _eEu.E() && xi < eta - _eEv.KE())) { // sigma as a simple pole at w = w0 = Eu.K() + i * Ev.K() and sigma is // approximated by // // sigma = (Eu.E() + i * Ev.KE()) + 1/(w - w0) real x = xi - _eEu.E(), y = eta - _eEv.KE(), r2 = Math::sq(x) + Math::sq(y); u = _eEu.K() + x/r2; v = _eEv.K() - y/r2; } else if ((eta > real(0.75) * _eEv.KE() && xi < real(0.25) * _eEu.E()) || eta > _eEv.KE()) { // At w = w0 = i * Ev.K(), we have // // sigma = sigma0 = i * Ev.KE() // sigma' = sigma'' = 0 // // including the next term in the Taylor series gives: // // sigma = sigma0 - _mv / 3 * (w - w0)^3 // // When inverting this, we map arg(w - w0) = [-pi/2, -pi/6] to // arg(sigma - sigma0) = [-pi/2, pi/2] // mapping arg = [-pi/2, -pi/6] to [-pi/2, pi/2] real deta = eta - _eEv.KE(), rad = hypot(xi, deta), // Map the range [-90, 180] in sigma space to [-90, 0] in w space. See // discussion in zetainv0 on the cut for ang. ang = atan2(deta-xi, xi+deta) - real(0.75) * Math::pi(); // Error using this guess is about 0.068 * rad^(5/3) retval = rad < 2 * taytol_; rad = cbrt(3 / _mv * rad); ang /= 3; u = rad * cos(ang); v = rad * sin(ang) + _eEv.K(); } else { // Else use w = sigma * Eu.K/Eu.E (which is correct in the limit _e -> 0) u = xi * _eEu.K()/_eEu.E(); v = eta * _eEu.K()/_eEu.E(); } return retval; } // Invert sigma using Newton's method void TransverseMercatorExact::sigmainv(real xi, real eta, real& u, real& v) const { if (sigmainv0(xi, eta, u, v)) return; // min iterations = 2, max iterations = 7; mean = 3.9 for (int i = 0, trip = 0; i < numit_ || GEOGRAPHICLIB_PANIC ("Convergence failure in TransverseMercatorExact"); ++i) { real snu, cnu, dnu, snv, cnv, dnv; _eEu.am(u, snu, cnu, dnu); _eEv.am(v, snv, cnv, dnv); real xi1, eta1, du1, dv1; sigma(u, snu, cnu, dnu, v, snv, cnv, dnv, xi1, eta1); dwdsigma(u, snu, cnu, dnu, v, snv, cnv, dnv, du1, dv1); xi1 -= xi; eta1 -= eta; real delu = xi1 * du1 - eta1 * dv1, delv = xi1 * dv1 + eta1 * du1; u -= delu; v -= delv; if (trip) break; real delw2 = Math::sq(delu) + Math::sq(delv); if (!(delw2 >= tol2_)) ++trip; } } void TransverseMercatorExact::Scale(real tau, real /*lam*/, real snu, real cnu, real dnu, real snv, real cnv, real dnv, real& gamma, real& k) const { real sec2 = 1 + Math::sq(tau); // sec(phi)^2 // Lee 55.12 -- negated for our sign convention. gamma gives the bearing // (clockwise from true north) of grid north gamma = atan2(_mv * snu * snv * cnv, cnu * dnu * dnv); // Lee 55.13 with nu given by Lee 9.1 -- in sqrt change the numerator // from // // (1 - snu^2 * dnv^2) to (_mv * snv^2 + cnu^2 * dnv^2) // // to maintain accuracy near phi = 90 and change the denomintor from // // (dnu^2 + dnv^2 - 1) to (_mu * cnu^2 + _mv * cnv^2) // // to maintain accuracy near phi = 0, lam = 90 * (1 - e). Similarly // rewrite sqrt term in 9.1 as // // _mv + _mu * c^2 instead of 1 - _mu * sin(phi)^2 k = sqrt(_mv + _mu / sec2) * sqrt(sec2) * sqrt( (_mv * Math::sq(snv) + Math::sq(cnu * dnv)) / (_mu * Math::sq(cnu) + _mv * Math::sq(cnv)) ); } void TransverseMercatorExact::Forward(real lon0, real lat, real lon, real& x, real& y, real& gamma, real& k) const { lat = Math::LatFix(lat); lon = Math::AngDiff(lon0, lon); // Explicitly enforce the parity int latsign = (!_extendp && signbit(lat)) ? -1 : 1, lonsign = (!_extendp && signbit(lon)) ? -1 : 1; lon *= lonsign; lat *= latsign; bool backside = !_extendp && lon > Math::qd; if (backside) { if (lat == 0) latsign = -1; lon = Math::hd - lon; } real lam = lon * Math::degree(), tau = Math::tand(lat); // u,v = coordinates for the Thompson TM, Lee 54 real u, v; if (lat == Math::qd) { u = _eEu.K(); v = 0; } else if (lat == 0 && lon == Math::qd * (1 - _e)) { u = 0; v = _eEv.K(); } else // tau = tan(phi), taup = sinh(psi) zetainv(Math::taupf(tau, _e), lam, u, v); real snu, cnu, dnu, snv, cnv, dnv; _eEu.am(u, snu, cnu, dnu); _eEv.am(v, snv, cnv, dnv); real xi, eta; sigma(u, snu, cnu, dnu, v, snv, cnv, dnv, xi, eta); if (backside) xi = 2 * _eEu.E() - xi; y = xi * _a * _k0 * latsign; x = eta * _a * _k0 * lonsign; if (lat == Math::qd) { gamma = lon; k = 1; } else { // Recompute (tau, lam) from (u, v) to improve accuracy of Scale zeta(u, snu, cnu, dnu, v, snv, cnv, dnv, tau, lam); tau = Math::tauf(tau, _e); Scale(tau, lam, snu, cnu, dnu, snv, cnv, dnv, gamma, k); gamma /= Math::degree(); } if (backside) gamma = Math::hd - gamma; gamma *= latsign * lonsign; k *= _k0; } void TransverseMercatorExact::Reverse(real lon0, real x, real y, real& lat, real& lon, real& gamma, real& k) const { // This undoes the steps in Forward. real xi = y / (_a * _k0), eta = x / (_a * _k0); // Explicitly enforce the parity int xisign = (!_extendp && signbit(xi)) ? -1 : 1, etasign = (!_extendp && signbit(eta)) ? -1 : 1; xi *= xisign; eta *= etasign; bool backside = !_extendp && xi > _eEu.E(); if (backside) xi = 2 * _eEu.E()- xi; // u,v = coordinates for the Thompson TM, Lee 54 real u, v; if (xi == 0 && eta == _eEv.KE()) { u = 0; v = _eEv.K(); } else sigmainv(xi, eta, u, v); real snu, cnu, dnu, snv, cnv, dnv; _eEu.am(u, snu, cnu, dnu); _eEv.am(v, snv, cnv, dnv); real phi, lam, tau; if (v != 0 || u != _eEu.K()) { zeta(u, snu, cnu, dnu, v, snv, cnv, dnv, tau, lam); tau = Math::tauf(tau, _e); phi = atan(tau); lat = phi / Math::degree(); lon = lam / Math::degree(); Scale(tau, lam, snu, cnu, dnu, snv, cnv, dnv, gamma, k); gamma /= Math::degree(); } else { lat = Math::qd; lon = lam = gamma = 0; k = 1; } if (backside) lon = Math::hd - lon; lon *= etasign; lon = Math::AngNormalize(lon + Math::AngNormalize(lon0)); lat *= xisign; if (backside) gamma = Math::hd - gamma; gamma *= xisign * etasign; k *= _k0; } } // namespace GeographicLib geosphere/src/PolygonArea.h0000644000176200001440000003232215147425256015430 0ustar liggesusers/** * \file PolygonArea.hpp * \brief Header for GeographicLib::PolygonAreaT class * * Copyright (c) Charles Karney (2010-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_POLYGONAREA_HPP) #define GEOGRAPHICLIB_POLYGONAREA_HPP 1 #include "Geodesic.h" #include "GeodesicExact.h" #include "Rhumb.h" #include "Accumulator.h" namespace GeographicLib { /** * \brief Polygon areas * * This computes the area of a polygon whose edges are geodesics using the * method given in Section 6 of * - C. F. F. Karney, * * Algorithms for geodesics, * J. Geodesy 87, 43--55 (2013); * DOI: * 10.1007/s00190-012-0578-z; * addenda: * * geod-addenda.html. * * 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. * * This class lets you add vertices and edges one at a time to the polygon. * The sequence must start with a vertex and thereafter vertices and edges * can be added in any order. Any vertex after the first creates a new edge * which is the \e shortest geodesic from the previous vertex. In some * cases there may be two or many such shortest geodesics and the area is * then not uniquely defined. In this case, either add an intermediate * vertex or add the edge \e as an edge (by defining its direction and * length). * * 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. * There's an option to treat the points as defining a polyline instead of a * polygon; in that case, only the perimeter is computed. * * This is a templated class to allow it to be used with Geodesic, * GeodesicExact, and Rhumb. GeographicLib::PolygonArea, * GeographicLib::PolygonAreaExact, and GeographicLib::PolygonAreaRhumb are * typedefs for these cases. * * For GeographicLib::PolygonArea (edges defined by Geodesic), an upper bound * on the error is about 0.1 m2 per vertex. However this is a * wildly pessimistic estimate in most cases. A more realistic estimate of * the error is given by a test involving 107 approximately * regular polygons on the WGS84 ellipsoid. The centers and the orientations * of the polygons were uniformly distributed, the number of vertices was * log-uniformly distributed in [3, 300], and the center to vertex distance * log-uniformly distributed in [0.1 m, 9000 km]. * * Using double precision (the standard precision for GeographicLib), the * maximum error in the perimeter was 200 nm, and the maximum error in the * area was
   *     0.0013 m^2 for perimeter < 10 km
   *     0.0070 m^2 for perimeter < 100 km
   *     0.070 m^2 for perimeter < 1000 km
   *     0.11 m^2 for all perimeters
   * 
* The errors are given in terms of the perimeter, because it is expected * that the errors depend mainly on the number of edges and the edge lengths. * * Using long doubles (GEOGRPAHICLIB_PRECISION = 3), the maximum error in the * perimeter was 200 pm, and the maximum error in the area was
   *     0.7 mm^2 for perim < 10 km
   *     3.2 mm^2 for perimeter < 100 km
   *     21 mm^2 for perimeter < 1000 km
   *     45 mm^2 for all perimeters
   * 
* * @tparam GeodType the geodesic class to use. * * Example of use: * \include example-PolygonArea.cpp * * Planimeter is a command-line utility * providing access to the functionality of PolygonAreaT. **********************************************************************/ template class PolygonAreaT { private: typedef Math::real real; GeodType _earth; real _area0; // Full ellipsoid area bool _polyline; // Assume polyline (don't close and skip area) unsigned _mask; unsigned _num; int _crossings; Accumulator<> _areasum, _perimetersum; real _lat0, _lon0, _lat1, _lon1; static int transit(real lon1, real lon2); // an alternate version of transit to deal with longitudes in the direct // problem. static int transitdirect(real lon1, real lon2); void Remainder(Accumulator<>& a) const { a.remainder(_area0); } void Remainder(real& a) const { using std::remainder; a = remainder(a, _area0); } template void AreaReduce(T& area, int crossings, bool reverse, bool sign) const; public: /** * Constructor for PolygonAreaT. * * @param[in] earth the Geodesic object to use for geodesic calculations. * @param[in] polyline if true that treat the points as defining a polyline * instead of a polygon (default = false). **********************************************************************/ PolygonAreaT(const GeodType& earth, bool polyline = false) : _earth(earth) , _area0(_earth.EllipsoidArea()) , _polyline(polyline) , _mask(GeodType::LATITUDE | GeodType::LONGITUDE | GeodType::DISTANCE | (_polyline ? GeodType::NONE : GeodType::AREA | GeodType::LONG_UNROLL)) { Clear(); } /** * Clear PolygonAreaT, allowing a new polygon to be started. **********************************************************************/ void Clear() { _num = 0; _crossings = 0; _areasum = 0; _perimetersum = 0; _lat0 = _lon0 = _lat1 = _lon1 = Math::NaN(); } /** * Add a point to the polygon or polyline. * * @param[in] lat the latitude of the point (degrees). * @param[in] lon the longitude of the point (degrees). * * \e lat should be in the range [−90°, 90°]. **********************************************************************/ void AddPoint(real lat, real lon); /** * Add an edge to the polygon or polyline. * * @param[in] azi azimuth at current point (degrees). * @param[in] s distance from current point to next point (meters). * * This does nothing if no points have been added yet. Use * PolygonAreaT::CurrentPoint to determine the position of the new vertex. **********************************************************************/ void AddEdge(real azi, real s); /** * Return the results so far. * * @param[in] reverse if true then clockwise (instead of counterclockwise) * traversal counts as a positive area. * @param[in] sign if true 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] perimeter the perimeter of the polygon or length of the * polyline (meters). * @param[out] area the area of the polygon (meters2); only set * if \e polyline is false in the constructor. * @return the number of points. * * More points can be added to the polygon after this call. **********************************************************************/ unsigned Compute(bool reverse, bool sign, real& perimeter, real& area) const; /** * 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 PolygonAreaT::AddPoint and PolygonAreaT::Compute are * used. * * @param[in] lat the latitude of the test point (degrees). * @param[in] lon the longitude of the test point (degrees). * @param[in] reverse if true then clockwise (instead of counterclockwise) * traversal counts as a positive area. * @param[in] sign if true 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] perimeter the approximate perimeter of the polygon or length * of the polyline (meters). * @param[out] area the approximate area of the polygon * (meters2); only set if polyline is false in the * constructor. * @return the number of points. * * \e lat should be in the range [−90°, 90°]. **********************************************************************/ unsigned TestPoint(real lat, real lon, bool reverse, bool sign, real& perimeter, real& area) const; /** * 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 PolygonAreaT::AddEdge and * PolygonAreaT::Compute are used. * * @param[in] azi azimuth at current point (degrees). * @param[in] s distance from current point to final test point (meters). * @param[in] reverse if true then clockwise (instead of counterclockwise) * traversal counts as a positive area. * @param[in] sign if true 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] perimeter the approximate perimeter of the polygon or length * of the polyline (meters). * @param[out] area the approximate area of the polygon * (meters2); only set if polyline is false in the * constructor. * @return the number of points. **********************************************************************/ unsigned TestEdge(real azi, real s, bool reverse, bool sign, real& perimeter, real& area) const; /** \name Inspector functions **********************************************************************/ ///@{ /** * @return \e a the equatorial radius of the ellipsoid (meters). This is * the value inherited from the Geodesic object used in the constructor. **********************************************************************/ Math::real EquatorialRadius() const { return _earth.EquatorialRadius(); } /** * @return \e f the flattening of the ellipsoid. This is the value * inherited from the Geodesic object used in the constructor. **********************************************************************/ Math::real Flattening() const { return _earth.Flattening(); } /** * Report the previous vertex added to the polygon or polyline. * * @param[out] lat the latitude of the point (degrees). * @param[out] lon the longitude of the point (degrees). * * If no points have been added, then NaNs are returned. Otherwise, \e lon * will be in the range [−180°, 180°]. **********************************************************************/ void CurrentPoint(real& lat, real& lon) const { lat = _lat1; lon = _lon1; } /** * Report the number of points currently in the polygon or polyline. * * @return the number of points. * * If no points have been added, then 0 is returned. **********************************************************************/ unsigned NumberPoints() const { return _num; } /** * Report whether the current object is a polygon or a polyline. * * @return true if the object is a polyline. **********************************************************************/ bool Polyline() const { return _polyline; } ///@} }; /** * @relates PolygonAreaT * * Polygon areas using Geodesic. This should be used if the flattening is * small. **********************************************************************/ typedef PolygonAreaT PolygonArea; /** * @relates PolygonAreaT * * Polygon areas using GeodesicExact. * * \deprecated Instead of using PolygonAreaExact, use PolygonArea * with a Geodesic object constructed with \e exact = true. **********************************************************************/ typedef PolygonAreaT PolygonAreaExact; /** * @relates PolygonAreaT * * Polygon areas using Rhumb. **********************************************************************/ typedef PolygonAreaT PolygonAreaRhumb; } // namespace GeographicLib #endif // GEOGRAPHICLIB_POLYGONAREA_HPP geosphere/src/GeodesicExact.h0000644000176200001440000011530315147425256015720 0ustar liggesusers/** * \file GeodesicExact.hpp * \brief Header for GeographicLib::GeodesicExact class * * Copyright (c) Charles Karney (2012-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_GEODESICEXACT_HPP) #define GEOGRAPHICLIB_GEODESICEXACT_HPP 1 #include "Constants.h" #include "EllipticFunction.h" #include "DST.h" namespace GeographicLib { class GeodesicLineExact; // Visual Studio needs this forward declaration... class GEOGRAPHICLIB_EXPORT DST; /** * \brief Exact geodesic calculations * * The equations for geodesics on an ellipsoid can be expressed in terms of * incomplete elliptic integrals. The Geodesic class expands these integrals * in a series in the flattening \e f and this provides an accurate solution * for \e f ∈ [-0.01, 0.01]. The GeodesicExact class computes the * elliptic integrals directly and so provides a solution which is valid for * all \e f. However, in practice, its use should be limited to about * b/\e a ∈ [0.01, 100] or \e f ∈ [−99, 0.99]. * * For the WGS84 ellipsoid, these classes are 2--3 times \e slower than the * series solution and 2--3 times \e less \e accurate (because it's less easy * to control round-off errors with the elliptic integral formulation); i.e., * the error is about 40 nm (40 nanometers) instead of 15 nm. However the * error in the series solution scales as f7 while the * error in the elliptic integral solution depends weakly on \e f. If the * quarter meridian distance is 10000 km and the ratio b/\e a = 1 * − \e f is varied then the approximate maximum error (expressed as a * distance) is
   *       1 - f  error (nm)
   *       1/128     387
   *       1/64      345
   *       1/32      269
   *       1/16      210
   *       1/8       115
   *       1/4        69
   *       1/2        36
   *         1        15
   *         2        25
   *         4        96
   *         8       318
   *        16       985
   *        32      2352
   *        64      6008
   *       128     19024
   * 
* * The area in this classes is computing by finding an accurate approximation * to the area integrand using a discrete sine transform fitting \e N equally * spaced points in σ. \e N chosen to ensure full accuracy for * b/\e a ∈ [0.01, 100] or \e f ∈ [−99, 0.99]. * * The algorithms are described in * - C. F. F. Karney, * * Geodesics on an arbitrary ellipsoid of revolution, * J. Geodesy 98, 4:1--14 (2024); * DOI: * 10.1007/s00190-023-01813-2. * . * See \ref geodellip for the formulation. See the documentation on the * Geodesic class for additional information on the geodesic problems. * * \note Instead of using this class directly, it is recommended to use the * Geodesic class, specifying \e exact = true in the constructor. * * Example of use: * \include example-GeodesicExact.cpp * * GeodSolve is a command-line utility * providing access to the functionality of GeodesicExact and * GeodesicLineExact (via the -E option). **********************************************************************/ class GEOGRAPHICLIB_EXPORT GeodesicExact { private: typedef Math::real real; friend class GeodesicLineExact; friend class Geodesic; // Allow Geodesic to call the default constructor // Private default constructor to support Geodesic(a, f, exact) GeodesicExact() {}; // Do nothing; used with exact = false. static const unsigned maxit1_ = 20; unsigned maxit2_; real tiny_, tol0_, tol1_, tol2_, tolb_, xthresh_; static constexpr unsigned CAP_NONE = 0U; static constexpr unsigned CAP_E = 1U<<0; // Skip 1U<<1 for compatibility with Geodesic (not required) static constexpr unsigned CAP_D = 1U<<2; static constexpr unsigned CAP_H = 1U<<3; static constexpr unsigned CAP_C4 = 1U<<4; static constexpr unsigned CAP_ALL = 0x1FU; static constexpr unsigned CAP_MASK = CAP_ALL; static constexpr unsigned OUT_ALL = 0x7F80U; static constexpr unsigned OUT_MASK = 0xFF80U; // Includes LONG_UNROLL static real Astroid(real x, real y); real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2; int _nC4; DST _fft; void Lengths(const EllipticFunction& E, real sig12, real ssig1, real csig1, real dn1, real ssig2, real csig2, real dn2, real cbet1, real cbet2, unsigned outmask, real& s12s, real& m12a, real& m0, real& M12, real& M21) const; real InverseStart(EllipticFunction& E, real sbet1, real cbet1, real dn1, real sbet2, real cbet2, real dn2, real lam12, real slam12, real clam12, real& salp1, real& calp1, real& salp2, real& calp2, real& dnm) const; real Lambda12(real sbet1, real cbet1, real dn1, real sbet2, real cbet2, real dn2, real salp1, real calp1, real slam120, real clam120, real& salp2, real& calp2, real& sig12, real& ssig1, real& csig1, real& ssig2, real& csig2, EllipticFunction& E, real& domg12, bool diffp, real& dlam12) const; real GenInverse(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real& s12, real& salp1, real& calp1, real& salp2, real& calp2, real& m12, real& M12, real& M21, real& S12) const; class I4Integrand { private: real X, tX, tdX, sX, sX1, sXX1, asinhsX, _k2; static real asinhsqrt(real x); static real t(real x); static real td(real x); // static real Dt(real x, real y); real DtX(real y) const; public: I4Integrand(real ep2, real k2); real operator()(real sig) const; }; public: /** * Bit masks for what calculations to do. These masks do double duty. * They signify to the GeodesicLineExact::GeodesicLineExact constructor and * to GeodesicExact::Line what capabilities should be included in the * GeodesicLineExact object. They also specify which results to return in * the general routines GeodesicExact::GenDirect and * GeodesicExact::GenInverse routines. GeodesicLineExact::mask is a * duplication of this enum. **********************************************************************/ enum mask { /** * No capabilities, no output. * @hideinitializer **********************************************************************/ NONE = 0U, /** * Calculate latitude \e lat2. (It's not necessary to include this as a * capability to GeodesicLineExact because this is included by default.) * @hideinitializer **********************************************************************/ LATITUDE = 1U<<7 | CAP_NONE, /** * Calculate longitude \e lon2. * @hideinitializer **********************************************************************/ LONGITUDE = 1U<<8 | CAP_H, /** * Calculate azimuths \e azi1 and \e azi2. (It's not necessary to * include this as a capability to GeodesicLineExact because this is * included by default.) * @hideinitializer **********************************************************************/ AZIMUTH = 1U<<9 | CAP_NONE, /** * Calculate distance \e s12. * @hideinitializer **********************************************************************/ DISTANCE = 1U<<10 | CAP_E, /** * A combination of the common capabilities: GeodesicExact::LATITUDE, * GeodesicExact::LONGITUDE, GeodesicExact::AZIMUTH, * GeodesicExact::DISTANCE. * @hideinitializer **********************************************************************/ STANDARD = LATITUDE | LONGITUDE | AZIMUTH | DISTANCE, /** * Allow distance \e s12 to be used as input in the direct geodesic * problem. * @hideinitializer **********************************************************************/ DISTANCE_IN = 1U<<11 | CAP_E, /** * Calculate reduced length \e m12. * @hideinitializer **********************************************************************/ REDUCEDLENGTH = 1U<<12 | CAP_D, /** * Calculate geodesic scales \e M12 and \e M21. * @hideinitializer **********************************************************************/ GEODESICSCALE = 1U<<13 | CAP_D, /** * Calculate area \e S12. * @hideinitializer **********************************************************************/ AREA = 1U<<14 | CAP_C4, /** * Unroll \e lon2 in the direct calculation. * @hideinitializer **********************************************************************/ LONG_UNROLL = 1U<<15, /** * All capabilities, calculate everything. (GeodesicExact::LONG_UNROLL * is not included in this mask.) * @hideinitializer **********************************************************************/ ALL = OUT_ALL| CAP_ALL, }; /** \name Constructor **********************************************************************/ ///@{ /** * Constructor for an ellipsoid with * * @param[in] a equatorial radius (meters). * @param[in] f flattening of ellipsoid. Setting \e f = 0 gives a sphere. * Negative \e f gives a prolate ellipsoid. * @exception GeographicErr if \e a or (1 − \e f) \e a is not * positive. **********************************************************************/ GeodesicExact(real a, real f); ///@} /** \name Direct geodesic problem specified in terms of distance. **********************************************************************/ ///@{ /** * Perform the direct geodesic calculation where the length of the geodesic * is specified in terms of distance. * * @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 between point 1 and point 2 (meters); it can be * signed. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees). * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] m12 reduced length of geodesic (meters). * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless). * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless). * @param[out] S12 area under the geodesic (meters2). * @return \e a12 arc length of between point 1 and point 2 (degrees). * * \e lat1 should be in the range [−90°, 90°]. The values of * \e lon2 and \e azi2 returned are in the range [−180°, * 180°]. * * 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°.) * * The following functions are overloaded versions of GeodesicExact::Direct * which omit some of the output parameters. Note, however, that the arc * length is always computed and returned as the function value. **********************************************************************/ Math::real Direct(real lat1, real lon1, real azi1, real s12, real& lat2, real& lon2, real& azi2, real& m12, real& M12, real& M21, real& S12) const { real t; return GenDirect(lat1, lon1, azi1, false, s12, LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH | GEODESICSCALE | AREA, lat2, lon2, azi2, t, m12, M12, M21, S12); } /** * See the documentation for GeodesicExact::Direct. **********************************************************************/ Math::real Direct(real lat1, real lon1, real azi1, real s12, real& lat2, real& lon2) const { real t; return GenDirect(lat1, lon1, azi1, false, s12, LATITUDE | LONGITUDE, lat2, lon2, t, t, t, t, t, t); } /** * See the documentation for GeodesicExact::Direct. **********************************************************************/ Math::real Direct(real lat1, real lon1, real azi1, real s12, real& lat2, real& lon2, real& azi2) const { real t; return GenDirect(lat1, lon1, azi1, false, s12, LATITUDE | LONGITUDE | AZIMUTH, lat2, lon2, azi2, t, t, t, t, t); } /** * See the documentation for GeodesicExact::Direct. **********************************************************************/ Math::real Direct(real lat1, real lon1, real azi1, real s12, real& lat2, real& lon2, real& azi2, real& m12) const { real t; return GenDirect(lat1, lon1, azi1, false, s12, LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH, lat2, lon2, azi2, t, m12, t, t, t); } /** * See the documentation for GeodesicExact::Direct. **********************************************************************/ Math::real Direct(real lat1, real lon1, real azi1, real s12, real& lat2, real& lon2, real& azi2, real& M12, real& M21) const { real t; return GenDirect(lat1, lon1, azi1, false, s12, LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE, lat2, lon2, azi2, t, t, M12, M21, t); } /** * See the documentation for GeodesicExact::Direct. **********************************************************************/ Math::real Direct(real lat1, real lon1, real azi1, real s12, real& lat2, real& lon2, real& azi2, real& m12, real& M12, real& M21) const { real t; return GenDirect(lat1, lon1, azi1, false, s12, LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH | GEODESICSCALE, lat2, lon2, azi2, t, m12, M12, M21, t); } ///@} /** \name Direct geodesic problem specified in terms of arc length. **********************************************************************/ ///@{ /** * Perform the direct geodesic calculation where the length of the geodesic * is specified in terms of arc length. * * @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] a12 arc length between point 1 and point 2 (degrees); it can * be signed. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees). * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] s12 distance between point 1 and point 2 (meters). * @param[out] m12 reduced length of geodesic (meters). * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless). * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless). * @param[out] S12 area under the geodesic (meters2). * * \e lat1 should be in the range [−90°, 90°]. The values of * \e lon2 and \e azi2 returned are in the range [−180°, * 180°]. * * 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°.) * * The following functions are overloaded versions of GeodesicExact::Direct * which omit some of the output parameters. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21, real& S12) const { GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | REDUCEDLENGTH | GEODESICSCALE | AREA, lat2, lon2, azi2, s12, m12, M12, M21, S12); } /** * See the documentation for GeodesicExact::ArcDirect. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2) const { real t; GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE, lat2, lon2, t, t, t, t, t, t); } /** * See the documentation for GeodesicExact::ArcDirect. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2, real& azi2) const { real t; GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE | AZIMUTH, lat2, lon2, azi2, t, t, t, t, t); } /** * See the documentation for GeodesicExact::ArcDirect. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2, real& azi2, real& s12) const { real t; GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE, lat2, lon2, azi2, s12, t, t, t, t); } /** * See the documentation for GeodesicExact::ArcDirect. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2, real& azi2, real& s12, real& m12) const { real t; GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | REDUCEDLENGTH, lat2, lon2, azi2, s12, m12, t, t, t); } /** * See the documentation for GeodesicExact::ArcDirect. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2, real& azi2, real& s12, real& M12, real& M21) const { real t; GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | GEODESICSCALE, lat2, lon2, azi2, s12, t, M12, M21, t); } /** * See the documentation for GeodesicExact::ArcDirect. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21) const { real t; GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | REDUCEDLENGTH | GEODESICSCALE, lat2, lon2, azi2, s12, m12, M12, M21, t); } ///@} /** \name General version of the direct geodesic solution. **********************************************************************/ ///@{ /** * The general direct geodesic calculation. GeodesicExact::Direct and * GeodesicExact::ArcDirect are defined in terms of this function. * * @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] arcmode boolean flag determining the meaning of the second * parameter. * @param[in] s12_a12 if \e arcmode is false, this is the distance between * point 1 and point 2 (meters); otherwise it is the arc length between * point 1 and point 2 (degrees); it can be signed. * @param[in] outmask a bitor'ed combination of GeodesicExact::mask values * specifying which of the following parameters should be set. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees). * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] s12 distance between point 1 and point 2 (meters). * @param[out] m12 reduced length of geodesic (meters). * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless). * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless). * @param[out] S12 area under the geodesic (meters2). * @return \e a12 arc length of between point 1 and point 2 (degrees). * * The GeodesicExact::mask values possible for \e outmask are * - \e outmask |= GeodesicExact::LATITUDE for the latitude \e lat2; * - \e outmask |= GeodesicExact::LONGITUDE for the latitude \e lon2; * - \e outmask |= GeodesicExact::AZIMUTH for the latitude \e azi2; * - \e outmask |= GeodesicExact::DISTANCE for the distance \e s12; * - \e outmask |= GeodesicExact::REDUCEDLENGTH for the reduced length \e * m12; * - \e outmask |= GeodesicExact::GEODESICSCALE for the geodesic scales \e * M12 and \e M21; * - \e outmask |= GeodesicExact::AREA for the area \e S12; * - \e outmask |= GeodesicExact::ALL for all of the above; * - \e outmask |= GeodesicExact::LONG_UNROLL to unroll \e lon2 instead of * wrapping it into the range [−180°, 180°]. * . * The function value \e a12 is always computed and returned and this * equals \e s12_a12 is \e arcmode is true. If \e outmask includes * GeodesicExact::DISTANCE and \e arcmode is false, then \e s12 = \e * s12_a12. It is not necessary to include GeodesicExact::DISTANCE_IN in * \e outmask; this is automatically included is \e arcmode is false. * * With the GeodesicExact::LONG_UNROLL bit set, the quantity \e lon2 * − \e lon1 indicates how many times and in what sense the geodesic * encircles the ellipsoid. **********************************************************************/ Math::real GenDirect(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned outmask, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21, real& S12) const; ///@} /** \name Inverse geodesic problem. **********************************************************************/ ///@{ /** * Perform the inverse geodesic calculation. * * @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] s12 distance between point 1 and point 2 (meters). * @param[out] azi1 azimuth at point 1 (degrees). * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] m12 reduced length of geodesic (meters). * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless). * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless). * @param[out] S12 area under the geodesic (meters2). * @return \e a12 arc length of between point 1 and point 2 (degrees). * * \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°]. * * 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 following functions are overloaded versions of * GeodesicExact::Inverse which omit some of the output parameters. Note, * however, that the arc length is always computed and returned as the * function value. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& s12, real& azi1, real& azi2, real& m12, real& M12, real& M21, real& S12) const { return GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH | REDUCEDLENGTH | GEODESICSCALE | AREA, s12, azi1, azi2, m12, M12, M21, S12); } /** * See the documentation for GeodesicExact::Inverse. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& s12) const { real t; return GenInverse(lat1, lon1, lat2, lon2, DISTANCE, s12, t, t, t, t, t, t); } /** * See the documentation for GeodesicExact::Inverse. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& azi1, real& azi2) const { real t; return GenInverse(lat1, lon1, lat2, lon2, AZIMUTH, t, azi1, azi2, t, t, t, t); } /** * See the documentation for GeodesicExact::Inverse. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& s12, real& azi1, real& azi2) const { real t; return GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH, s12, azi1, azi2, t, t, t, t); } /** * See the documentation for GeodesicExact::Inverse. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& s12, real& azi1, real& azi2, real& m12) const { real t; return GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH | REDUCEDLENGTH, s12, azi1, azi2, m12, t, t, t); } /** * See the documentation for GeodesicExact::Inverse. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& s12, real& azi1, real& azi2, real& M12, real& M21) const { real t; return GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH | GEODESICSCALE, s12, azi1, azi2, t, M12, M21, t); } /** * See the documentation for GeodesicExact::Inverse. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& s12, real& azi1, real& azi2, real& m12, real& M12, real& M21) const { real t; return GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH | REDUCEDLENGTH | GEODESICSCALE, s12, azi1, azi2, m12, M12, M21, t); } ///@} /** \name General version of inverse geodesic solution. **********************************************************************/ ///@{ /** * The general inverse geodesic calculation. GeodesicExact::Inverse is * defined in terms of this function. * * @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] outmask a bitor'ed combination of GeodesicExact::mask values * specifying which of the following parameters should be set. * @param[out] s12 distance between point 1 and point 2 (meters). * @param[out] azi1 azimuth at point 1 (degrees). * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] m12 reduced length of geodesic (meters). * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless). * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless). * @param[out] S12 area under the geodesic (meters2). * @return \e a12 arc length of between point 1 and point 2 (degrees). * * The GeodesicExact::mask values possible for \e outmask are * - \e outmask |= GeodesicExact::DISTANCE for the distance \e s12; * - \e outmask |= GeodesicExact::AZIMUTH for the latitude \e azi2; * - \e outmask |= GeodesicExact::REDUCEDLENGTH for the reduced length \e * m12; * - \e outmask |= GeodesicExact::GEODESICSCALE for the geodesic scales \e * M12 and \e M21; * - \e outmask |= GeodesicExact::AREA for the area \e S12; * - \e outmask |= GeodesicExact::ALL for all of the above. * . * The arc length is always computed and returned as the function value. **********************************************************************/ Math::real GenInverse(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real& s12, real& azi1, real& azi2, real& m12, real& M12, real& M21, real& S12) const; ///@} /** \name Interface to GeodesicLineExact. **********************************************************************/ ///@{ /** * Typedef for the class for computing multiple points on a geodesic. **********************************************************************/ typedef GeodesicLineExact LineClass; /** * Set up to compute several points on a single geodesic. * * @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 GeodesicExact::mask values * specifying the capabilities the GeodesicLineExact object should * possess, i.e., which quantities can be returned in calls to * GeodesicLineExact::Position. * @return a GeodesicLineExact object. * * \e lat1 should be in the range [−90°, 90°]. * * The GeodesicExact::mask values are * - \e caps |= GeodesicExact::LATITUDE for the latitude \e lat2; this is * added automatically; * - \e caps |= GeodesicExact::LONGITUDE for the latitude \e lon2; * - \e caps |= GeodesicExact::AZIMUTH for the azimuth \e azi2; this is * added automatically; * - \e caps |= GeodesicExact::DISTANCE for the distance \e s12; * - \e caps |= GeodesicExact::REDUCEDLENGTH for the reduced length \e m12; * - \e caps |= GeodesicExact::GEODESICSCALE for the geodesic scales \e M12 * and \e M21; * - \e caps |= GeodesicExact::AREA for the area \e S12; * - \e caps |= GeodesicExact::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; * - \e caps |= GeodesicExact::ALL for all of the above. * . * The default value of \e caps is GeodesicExact::ALL which turns on all * the capabilities. * * If the point is at a pole, the azimuth is defined by keeping \e lon1 * fixed, writing \e lat1 = ±(90 − ε), and taking the * limit ε → 0+. **********************************************************************/ GeodesicLineExact Line(real lat1, real lon1, real azi1, unsigned caps = ALL) const; /** * Define a GeodesicLineExact in terms of the inverse geodesic problem. * * @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 GeodesicExact::mask values * specifying the capabilities the GeodesicLineExact object should * possess, i.e., which quantities can be returned in calls to * GeodesicLineExact::Position. * @return a GeodesicLineExact object. * * This function sets point 3 of the GeodesicLineExact to correspond to * point 2 of the inverse geodesic problem. * * \e lat1 and \e lat2 should be in the range [−90°, 90°]. **********************************************************************/ GeodesicLineExact InverseLine(real lat1, real lon1, real lat2, real lon2, unsigned caps = ALL) const; /** * Define a GeodesicLineExact in terms of the direct geodesic problem * specified in terms of distance. * * @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 between point 1 and point 2 (meters); it can be * negative. * @param[in] caps bitor'ed combination of GeodesicExact::mask values * specifying the capabilities the GeodesicLineExact object should * possess, i.e., which quantities can be returned in calls to * GeodesicLineExact::Position. * @return a GeodesicLineExact object. * * This function sets point 3 of the GeodesicLineExact to correspond to * point 2 of the direct geodesic problem. * * \e lat1 should be in the range [−90°, 90°]. **********************************************************************/ GeodesicLineExact DirectLine(real lat1, real lon1, real azi1, real s12, unsigned caps = ALL) const; /** * Define a GeodesicLineExact in terms of the direct geodesic problem * specified in terms of arc length. * * @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] a12 arc length between point 1 and point 2 (degrees); it can * be negative. * @param[in] caps bitor'ed combination of GeodesicExact::mask values * specifying the capabilities the GeodesicLineExact object should * possess, i.e., which quantities can be returned in calls to * GeodesicLineExact::Position. * @return a GeodesicLineExact object. * * This function sets point 3 of the GeodesicLineExact to correspond to * point 2 of the direct geodesic problem. * * \e lat1 should be in the range [−90°, 90°]. **********************************************************************/ GeodesicLineExact ArcDirectLine(real lat1, real lon1, real azi1, real a12, unsigned caps = ALL) const; /** * Define a GeodesicLineExact in terms of the direct geodesic problem * specified in terms of either distance or arc length. * * @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] arcmode boolean flag determining the meaning of the \e * s12_a12. * @param[in] s12_a12 if \e arcmode is false, this is the distance between * point 1 and point 2 (meters); otherwise it is the arc length between * point 1 and point 2 (degrees); it can be negative. * @param[in] caps bitor'ed combination of GeodesicExact::mask values * specifying the capabilities the GeodesicLineExact object should * possess, i.e., which quantities can be returned in calls to * GeodesicLineExact::Position. * @return a GeodesicLineExact object. * * This function sets point 3 of the GeodesicLineExact to correspond to * point 2 of the direct geodesic problem. * * \e lat1 should be in the range [−90°, 90°]. **********************************************************************/ GeodesicLineExact GenDirectLine(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned caps = ALL) const; ///@} /** \name Inspector functions. **********************************************************************/ ///@{ /** * @return \e a the equatorial radius of the ellipsoid (meters). This is * the value used in the constructor. **********************************************************************/ Math::real EquatorialRadius() const { return _a; } /** * @return \e f the flattening of the ellipsoid. This is the * value used in the constructor. **********************************************************************/ Math::real Flattening() const { return _f; } /** * @return total area of ellipsoid in meters2. The area of a * polygon encircling a pole can be found by adding * GeodesicExact::EllipsoidArea()/2 to the sum of \e S12 for each side of * the polygon. **********************************************************************/ Math::real EllipsoidArea() const { return 4 * Math::pi() * _c2; } ///@} /** * A global instantiation of GeodesicExact with the parameters for the * WGS84 ellipsoid. **********************************************************************/ static const GeodesicExact& WGS84(); }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_GEODESICEXACT_HPP geosphere/src/Geodesic.h0000644000176200001440000013224515147425256014737 0ustar liggesusers/** * \file Geodesic.hpp * \brief Header for GeographicLib::Geodesic class * * Copyright (c) Charles Karney (2009-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_GEODESIC_HPP) #define GEOGRAPHICLIB_GEODESIC_HPP 1 #include "Constants.h" #include "GeodesicExact.h" #if !defined(GEOGRAPHICLIB_GEODESIC_ORDER) /** * The order of the expansions used by Geodesic. * GEOGRAPHICLIB_GEODESIC_ORDER can be set to any integer in [3, 8]. **********************************************************************/ # define GEOGRAPHICLIB_GEODESIC_ORDER \ (GEOGRAPHICLIB_PRECISION == 2 ? 6 : \ (GEOGRAPHICLIB_PRECISION == 1 ? 3 : \ (GEOGRAPHICLIB_PRECISION == 3 ? 7 : 8))) #endif namespace GeographicLib { class GeodesicLine; /** * \brief %Geodesic calculations * * The shortest path between two points on an 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 azimuths \e azi1 and \e azi2 at * the two end points. (The azimuth is the heading measured clockwise from * north. \e azi2 is the "forward" azimuth, i.e., the heading that takes you * beyond point 2 not back to point 1.) In the figure below, latitude is * labeled φ, longitude λ (with λ12 = * λ2 − λ1), and azimuth α. * * spheroidal triangle * * Given \e lat1, \e lon1, \e azi1, and \e s12, we can determine \e lat2, \e * lon2, and \e azi2. This is the \e direct geodesic problem and its * solution is given by the function Geodesic::Direct. (If \e s12 is * sufficiently large that the geodesic wraps more than halfway around the * earth, there will be another geodesic between the points with a smaller \e * s12.) * * Given \e lat1, \e lon1, \e lat2, and \e lon2, we can determine \e azi1, \e * azi2, and \e s12. This is the \e inverse geodesic problem, whose solution * is given by Geodesic::Inverse. Usually, the solution to the inverse * problem is unique. In cases where there are multiple solutions (all with * the same \e s12, of course), all the solutions can be easily generated * once a particular solution is provided. * * The standard way of specifying the direct problem is the specify the * distance \e s12 to the second point. However it is sometimes useful * instead to specify the arc length \e a12 (in degrees) on the auxiliary * sphere. This is a mathematical construct used in solving the geodesic * problems. The solution of the direct problem in this form is provided by * Geodesic::ArcDirect. An arc length in excess of 180° indicates that * the geodesic is not a shortest path. In addition, the arc length between * an equatorial crossing and the next extremum of latitude for a geodesic is * 90°. * * This class can also calculate several other quantities related to * geodesics. These are: * - reduced length. If we fix the first point and increase \e azi1 * by \e dazi1 (radians), the second point is displaced \e m12 \e dazi1 in * the direction \e azi2 + 90°. The quantity \e m12 is called * the "reduced length" and is symmetric under interchange of the two * points. 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. The ratio s12/\e m12 gives the azimuthal scale for an * azimuthal equidistant projection. * - geodesic scale. Consider a reference geodesic and a second * geodesic parallel to this one at point 1 and separated by a small * distance \e dt. The separation of the two geodesics at point 2 is \e * M12 \e dt where \e M12 is called the "geodesic scale". \e M21 is * defined similarly (with the geodesics being parallel at point 2). On a * flat surface, we have \e M12 = \e M21 = 1. The quantity 1/\e M12 gives * the scale of the Cassini-Soldner projection. * - area. The area between the geodesic from point 1 to point 2 and * the equation is represented by \e S12; it is the area, measured * counterclockwise, of the geodesic quadrilateral with corners * (lat1,lon1), (0,lon1), (0,lon2), and * (lat2,lon2). It can be used to compute the area of any * geodesic polygon. * * Overloaded versions of Geodesic::Direct, Geodesic::ArcDirect, and * Geodesic::Inverse allow these quantities to be returned. In addition * there are general functions Geodesic::GenDirect, and Geodesic::GenInverse * which allow an arbitrary set of results to be computed. The quantities \e * m12, \e M12, \e M21 which all specify the behavior of nearby geodesics * obey addition rules. If points 1, 2, and 3 all lie on a single geodesic, * then the following 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 * * Additional functionality is provided by the GeodesicLine class, which * allows a sequence of points along a geodesic to be computed. * * 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. * * The calculations are accurate to better than 15 nm (15 nanometers) for the * WGS84 ellipsoid. See Sec. 9 of * arXiv:1102.1215v1 for * details. With \e exact = false (the default) in the constructor, * the algorithms used by this class are based on series expansions * using the flattening \e f as a small parameter. These are only accurate * for |f| < 0.02; however reasonably accurate results will be * obtained for |f| < 0.2. Here is a table of the approximate * maximum error (expressed as a distance) for an ellipsoid with the same * equatorial radius as the WGS84 ellipsoid and different values of the * flattening.
   *     |f|      error
   *     0.01     25 nm
   *     0.02     30 nm
   *     0.05     10 um
   *     0.1     1.5 mm
   *     0.2     300 mm
   * 
* For very eccentric ellipsoids, set \e exact to true in the constructor; * this will delegate the calculations to the GeodesicExact class. * * The algorithms are described in * - C. F. F. Karney, * * Algorithms for geodesics, * J. Geodesy 87, 43--55 (2013); * DOI: * 10.1007/s00190-012-0578-z; * addenda: * * geod-addenda.html. * . * For more information on geodesics see \ref geodesic. * * Example of use: * \include example-Geodesic.cpp * * GeodSolve is a command-line utility * providing access to the functionality of Geodesic and GeodesicLine. **********************************************************************/ class GEOGRAPHICLIB_EXPORT Geodesic { private: typedef Math::real real; friend class GeodesicLine; static const int nA1_ = GEOGRAPHICLIB_GEODESIC_ORDER; static const int nC1_ = GEOGRAPHICLIB_GEODESIC_ORDER; static const int nC1p_ = GEOGRAPHICLIB_GEODESIC_ORDER; static const int nA2_ = GEOGRAPHICLIB_GEODESIC_ORDER; static const int nC2_ = GEOGRAPHICLIB_GEODESIC_ORDER; static const int nA3_ = GEOGRAPHICLIB_GEODESIC_ORDER; static const int nA3x_ = nA3_; static const int nC3_ = GEOGRAPHICLIB_GEODESIC_ORDER; static const int nC3x_ = (nC3_ * (nC3_ - 1)) / 2; static const int nC4_ = GEOGRAPHICLIB_GEODESIC_ORDER; static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2; // Size for temporary array // nC = max(max(nC1_, nC1p_, nC2_) + 1, max(nC3_, nC4_)) static const int nC_ = GEOGRAPHICLIB_GEODESIC_ORDER + 1; static const unsigned maxit1_ = 20; unsigned maxit2_; real tiny_, tol0_, tol1_, tol2_, tolb_, xthresh_; static constexpr unsigned CAP_NONE = 0U; static constexpr unsigned CAP_C1 = 1U<<0; static constexpr unsigned CAP_C1p = 1U<<1; static constexpr unsigned CAP_C2 = 1U<<2; static constexpr unsigned CAP_C3 = 1U<<3; static constexpr unsigned CAP_C4 = 1U<<4; static constexpr unsigned CAP_ALL = 0x1FU; static constexpr unsigned CAP_MASK = CAP_ALL; static constexpr unsigned OUT_ALL = 0x7F80U; static constexpr unsigned OUT_MASK = 0xFF80U; // Includes LONG_UNROLL static real SinCosSeries(bool sinp, real sinx, real cosx, const real c[], int n); static real Astroid(real x, real y); real _a, _f; bool _exact; real _f1, _e2, _ep2, _n, _b, _c2, _etol2; real _aA3x[nA3x_], _cC3x[nC3x_], _cC4x[nC4x_]; GeodesicExact _geodexact; void Lengths(real eps, real sig12, real ssig1, real csig1, real dn1, real ssig2, real csig2, real dn2, real cbet1, real cbet2, unsigned outmask, real& s12s, real& m12a, real& m0, real& M12, real& M21, real Ca[]) const; real InverseStart(real sbet1, real cbet1, real dn1, real sbet2, real cbet2, real dn2, real lam12, real slam12, real clam12, real& salp1, real& calp1, real& salp2, real& calp2, real& dnm, real Ca[]) const; real Lambda12(real sbet1, real cbet1, real dn1, real sbet2, real cbet2, real dn2, real salp1, real calp1, real slam120, real clam120, real& salp2, real& calp2, real& sig12, real& ssig1, real& csig1, real& ssig2, real& csig2, real& eps, real& domg12, bool diffp, real& dlam12, real Ca[]) const; real GenInverse(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real& s12, real& salp1, real& calp1, real& salp2, real& calp2, real& m12, real& M12, real& M21, real& S12) const; // These are Maxima generated functions to provide series approximations to // the integrals for the ellipsoidal geodesic. 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[]); void A3coeff(); real A3f(real eps) const; void C3coeff(); void C3f(real eps, real c[]) const; void C4coeff(); void C4f(real k2, real c[]) const; public: /** * Bit masks for what calculations to do. These masks do double duty. * They signify to the GeodesicLine constructor and to * Geodesic::Line what capabilities should be included in the GeodesicLine * object. They also specify which results to return in the general * routines Geodesic::GenDirect and Geodesic::GenInverse routines. * GeodesicLine::mask is a duplication of this enum. **********************************************************************/ enum mask { /** * No capabilities, no output. * @hideinitializer **********************************************************************/ NONE = 0U, /** * Calculate latitude \e lat2. (It's not necessary to include this as a * capability to GeodesicLine because this is included by default.) * @hideinitializer **********************************************************************/ LATITUDE = 1U<<7 | CAP_NONE, /** * Calculate longitude \e lon2. * @hideinitializer **********************************************************************/ LONGITUDE = 1U<<8 | CAP_C3, /** * Calculate azimuths \e azi1 and \e azi2. (It's not necessary to * include this as a capability to GeodesicLine because this is included * by default.) * @hideinitializer **********************************************************************/ AZIMUTH = 1U<<9 | CAP_NONE, /** * Calculate distance \e s12. * @hideinitializer **********************************************************************/ DISTANCE = 1U<<10 | CAP_C1, /** * A combination of the common capabilities: Geodesic::LATITUDE, * Geodesic::LONGITUDE, Geodesic::AZIMUTH, Geodesic::DISTANCE. * @hideinitializer **********************************************************************/ STANDARD = LATITUDE | LONGITUDE | AZIMUTH | DISTANCE, /** * Allow distance \e s12 to be used as input in the direct geodesic * problem. * @hideinitializer **********************************************************************/ DISTANCE_IN = 1U<<11 | CAP_C1 | CAP_C1p, /** * Calculate reduced length \e m12. * @hideinitializer **********************************************************************/ REDUCEDLENGTH = 1U<<12 | CAP_C1 | CAP_C2, /** * Calculate geodesic scales \e M12 and \e M21. * @hideinitializer **********************************************************************/ GEODESICSCALE = 1U<<13 | CAP_C1 | CAP_C2, /** * Calculate area \e S12. * @hideinitializer **********************************************************************/ AREA = 1U<<14 | CAP_C4, /** * Unroll \e lon2 in the direct calculation. * @hideinitializer **********************************************************************/ LONG_UNROLL = 1U<<15, /** * All capabilities, calculate everything. (Geodesic::LONG_UNROLL is not * included in this mask.) * @hideinitializer **********************************************************************/ ALL = OUT_ALL| CAP_ALL, }; /** \name Constructor **********************************************************************/ ///@{ /** * Constructor for an ellipsoid with * * @param[in] a equatorial radius (meters). * @param[in] f flattening of ellipsoid. Setting \e f = 0 gives a sphere. * Negative \e f gives a prolate ellipsoid. * @param[in] exact if true use exact formulation in terms of elliptic * integrals instead of series expansions (default false). * @exception GeographicErr if \e a or (1 − \e f) \e a is not * positive. * * With \e exact = true, this class delegates the calculations to the * GeodesicExact and GeodesicLineExact classes which solve the geodesic * problems in terms of elliptic integrals. **********************************************************************/ Geodesic(real a, real f, bool exact = false); ///@} /** \name Direct geodesic problem specified in terms of distance. **********************************************************************/ ///@{ /** * Solve the direct geodesic problem where the length of the geodesic * is specified in terms of distance. * * @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 between point 1 and point 2 (meters); it can be * negative. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees). * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] m12 reduced length of geodesic (meters). * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless). * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless). * @param[out] S12 area under the geodesic (meters2). * @return \e a12 arc length of between point 1 and point 2 (degrees). * * \e lat1 should be in the range [−90°, 90°]. The values of * \e lon2 and \e azi2 returned are in the range [−180°, * 180°]. * * 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°.) * * The following functions are overloaded versions of Geodesic::Direct * which omit some of the output parameters. Note, however, that the arc * length is always computed and returned as the function value. **********************************************************************/ Math::real Direct(real lat1, real lon1, real azi1, real s12, real& lat2, real& lon2, real& azi2, real& m12, real& M12, real& M21, real& S12) const { real t; return GenDirect(lat1, lon1, azi1, false, s12, LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH | GEODESICSCALE | AREA, lat2, lon2, azi2, t, m12, M12, M21, S12); } /** * See the documentation for Geodesic::Direct. **********************************************************************/ Math::real Direct(real lat1, real lon1, real azi1, real s12, real& lat2, real& lon2) const { real t; return GenDirect(lat1, lon1, azi1, false, s12, LATITUDE | LONGITUDE, lat2, lon2, t, t, t, t, t, t); } /** * See the documentation for Geodesic::Direct. **********************************************************************/ Math::real Direct(real lat1, real lon1, real azi1, real s12, real& lat2, real& lon2, real& azi2) const { real t; return GenDirect(lat1, lon1, azi1, false, s12, LATITUDE | LONGITUDE | AZIMUTH, lat2, lon2, azi2, t, t, t, t, t); } /** * See the documentation for Geodesic::Direct. **********************************************************************/ Math::real Direct(real lat1, real lon1, real azi1, real s12, real& lat2, real& lon2, real& azi2, real& m12) const { real t; return GenDirect(lat1, lon1, azi1, false, s12, LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH, lat2, lon2, azi2, t, m12, t, t, t); } /** * See the documentation for Geodesic::Direct. **********************************************************************/ Math::real Direct(real lat1, real lon1, real azi1, real s12, real& lat2, real& lon2, real& azi2, real& M12, real& M21) const { real t; return GenDirect(lat1, lon1, azi1, false, s12, LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE, lat2, lon2, azi2, t, t, M12, M21, t); } /** * See the documentation for Geodesic::Direct. **********************************************************************/ Math::real Direct(real lat1, real lon1, real azi1, real s12, real& lat2, real& lon2, real& azi2, real& m12, real& M12, real& M21) const { real t; return GenDirect(lat1, lon1, azi1, false, s12, LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH | GEODESICSCALE, lat2, lon2, azi2, t, m12, M12, M21, t); } ///@} /** \name Direct geodesic problem specified in terms of arc length. **********************************************************************/ ///@{ /** * Solve the direct geodesic problem where the length of the geodesic * is specified in terms of arc length. * * @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] a12 arc length between point 1 and point 2 (degrees); it can * be negative. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees). * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] s12 distance between point 1 and point 2 (meters). * @param[out] m12 reduced length of geodesic (meters). * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless). * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless). * @param[out] S12 area under the geodesic (meters2). * * \e lat1 should be in the range [−90°, 90°]. The values of * \e lon2 and \e azi2 returned are in the range [−180°, * 180°]. * * 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°.) * * The following functions are overloaded versions of Geodesic::Direct * which omit some of the output parameters. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21, real& S12) const { GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | REDUCEDLENGTH | GEODESICSCALE | AREA, lat2, lon2, azi2, s12, m12, M12, M21, S12); } /** * See the documentation for Geodesic::ArcDirect. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2) const { real t; GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE, lat2, lon2, t, t, t, t, t, t); } /** * See the documentation for Geodesic::ArcDirect. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2, real& azi2) const { real t; GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE | AZIMUTH, lat2, lon2, azi2, t, t, t, t, t); } /** * See the documentation for Geodesic::ArcDirect. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2, real& azi2, real& s12) const { real t; GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE, lat2, lon2, azi2, s12, t, t, t, t); } /** * See the documentation for Geodesic::ArcDirect. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2, real& azi2, real& s12, real& m12) const { real t; GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | REDUCEDLENGTH, lat2, lon2, azi2, s12, m12, t, t, t); } /** * See the documentation for Geodesic::ArcDirect. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2, real& azi2, real& s12, real& M12, real& M21) const { real t; GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | GEODESICSCALE, lat2, lon2, azi2, s12, t, M12, M21, t); } /** * See the documentation for Geodesic::ArcDirect. **********************************************************************/ void ArcDirect(real lat1, real lon1, real azi1, real a12, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21) const { real t; GenDirect(lat1, lon1, azi1, true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | REDUCEDLENGTH | GEODESICSCALE, lat2, lon2, azi2, s12, m12, M12, M21, t); } ///@} /** \name General version of the direct geodesic solution. **********************************************************************/ ///@{ /** * The general direct geodesic problem. Geodesic::Direct and * Geodesic::ArcDirect are defined in terms of this function. * * @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] arcmode boolean flag determining the meaning of the \e * s12_a12. * @param[in] s12_a12 if \e arcmode is false, this is the distance between * point 1 and point 2 (meters); otherwise it is the arc length between * point 1 and point 2 (degrees); it can be negative. * @param[in] outmask a bitor'ed combination of Geodesic::mask values * specifying which of the following parameters should be set. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees). * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] s12 distance between point 1 and point 2 (meters). * @param[out] m12 reduced length of geodesic (meters). * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless). * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless). * @param[out] S12 area under the geodesic (meters2). * @return \e a12 arc length of between point 1 and point 2 (degrees). * * The Geodesic::mask values possible for \e outmask are * - \e outmask |= Geodesic::LATITUDE for the latitude \e lat2; * - \e outmask |= Geodesic::LONGITUDE for the latitude \e lon2; * - \e outmask |= Geodesic::AZIMUTH for the latitude \e azi2; * - \e outmask |= Geodesic::DISTANCE for the distance \e s12; * - \e outmask |= Geodesic::REDUCEDLENGTH for the reduced length \e * m12; * - \e outmask |= Geodesic::GEODESICSCALE for the geodesic scales \e * M12 and \e M21; * - \e outmask |= Geodesic::AREA for the area \e S12; * - \e outmask |= Geodesic::ALL for all of the above; * - \e outmask |= Geodesic::LONG_UNROLL to unroll \e lon2 instead of * wrapping it into the range [−180°, 180°]. * . * The function value \e a12 is always computed and returned and this * equals \e s12_a12 is \e arcmode is true. If \e outmask includes * Geodesic::DISTANCE and \e arcmode is false, then \e s12 = \e s12_a12. * It is not necessary to include Geodesic::DISTANCE_IN in \e outmask; this * is automatically included is \e arcmode is false. * * With the Geodesic::LONG_UNROLL bit set, the quantity \e lon2 − \e * lon1 indicates how many times and in what sense the geodesic encircles * the ellipsoid. **********************************************************************/ Math::real GenDirect(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned outmask, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21, real& S12) const; ///@} /** \name Inverse geodesic problem. **********************************************************************/ ///@{ /** * Solve the inverse geodesic problem. * * @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] s12 distance between point 1 and point 2 (meters). * @param[out] azi1 azimuth at point 1 (degrees). * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] m12 reduced length of geodesic (meters). * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless). * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless). * @param[out] S12 area under the geodesic (meters2). * @return \e a12 arc length of between point 1 and point 2 (degrees). * * \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°]. * * 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. * * The following functions are overloaded versions of Geodesic::Inverse * which omit some of the output parameters. Note, however, that the arc * length is always computed and returned as the function value. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& s12, real& azi1, real& azi2, real& m12, real& M12, real& M21, real& S12) const { return GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH | REDUCEDLENGTH | GEODESICSCALE | AREA, s12, azi1, azi2, m12, M12, M21, S12); } /** * See the documentation for Geodesic::Inverse. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& s12) const { real t; return GenInverse(lat1, lon1, lat2, lon2, DISTANCE, s12, t, t, t, t, t, t); } /** * See the documentation for Geodesic::Inverse. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& azi1, real& azi2) const { real t; return GenInverse(lat1, lon1, lat2, lon2, AZIMUTH, t, azi1, azi2, t, t, t, t); } /** * See the documentation for Geodesic::Inverse. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& s12, real& azi1, real& azi2) const { real t; return GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH, s12, azi1, azi2, t, t, t, t); } /** * See the documentation for Geodesic::Inverse. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& s12, real& azi1, real& azi2, real& m12) const { real t; return GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH | REDUCEDLENGTH, s12, azi1, azi2, m12, t, t, t); } /** * See the documentation for Geodesic::Inverse. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& s12, real& azi1, real& azi2, real& M12, real& M21) const { real t; return GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH | GEODESICSCALE, s12, azi1, azi2, t, M12, M21, t); } /** * See the documentation for Geodesic::Inverse. **********************************************************************/ Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real& s12, real& azi1, real& azi2, real& m12, real& M12, real& M21) const { real t; return GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH | REDUCEDLENGTH | GEODESICSCALE, s12, azi1, azi2, m12, M12, M21, t); } ///@} /** \name General version of inverse geodesic solution. **********************************************************************/ ///@{ /** * The general inverse geodesic calculation. Geodesic::Inverse is defined * in terms of this function. * * @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] outmask a bitor'ed combination of Geodesic::mask values * specifying which of the following parameters should be set. * @param[out] s12 distance between point 1 and point 2 (meters). * @param[out] azi1 azimuth at point 1 (degrees). * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] m12 reduced length of geodesic (meters). * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless). * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless). * @param[out] S12 area under the geodesic (meters2). * @return \e a12 arc length of between point 1 and point 2 (degrees). * * The Geodesic::mask values possible for \e outmask are * - \e outmask |= Geodesic::DISTANCE for the distance \e s12; * - \e outmask |= Geodesic::AZIMUTH for the latitude \e azi2; * - \e outmask |= Geodesic::REDUCEDLENGTH for the reduced length \e * m12; * - \e outmask |= Geodesic::GEODESICSCALE for the geodesic scales \e * M12 and \e M21; * - \e outmask |= Geodesic::AREA for the area \e S12; * - \e outmask |= Geodesic::ALL for all of the above. * . * The arc length is always computed and returned as the function value. **********************************************************************/ Math::real GenInverse(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real& s12, real& azi1, real& azi2, real& m12, real& M12, real& M21, real& S12) const; ///@} /** \name Interface to GeodesicLine. **********************************************************************/ ///@{ /** * Typedef for the class for computing multiple points on a geodesic. **********************************************************************/ typedef GeodesicLine LineClass; /** * Set up to compute several points on a single geodesic. * * @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 Geodesic::mask values * specifying the capabilities the GeodesicLine object should possess, * i.e., which quantities can be returned in calls to * GeodesicLine::Position. * @return a GeodesicLine object. * * \e lat1 should be in the range [−90°, 90°]. * * The Geodesic::mask values are * - \e caps |= Geodesic::LATITUDE for the latitude \e lat2; this is * added automatically; * - \e caps |= Geodesic::LONGITUDE for the latitude \e lon2; * - \e caps |= Geodesic::AZIMUTH for the azimuth \e azi2; this is * added automatically; * - \e caps |= Geodesic::DISTANCE for the distance \e s12; * - \e caps |= Geodesic::REDUCEDLENGTH for the reduced length \e m12; * - \e caps |= Geodesic::GEODESICSCALE for the geodesic scales \e M12 * and \e M21; * - \e caps |= Geodesic::AREA for the area \e S12; * - \e caps |= Geodesic::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; * - \e caps |= Geodesic::ALL for all of the above. * . * The default value of \e caps is Geodesic::ALL. * * If the point is at a pole, the azimuth is defined by keeping \e lon1 * fixed, writing \e lat1 = ±(90 − ε), and taking the * limit ε → 0+. **********************************************************************/ GeodesicLine Line(real lat1, real lon1, real azi1, unsigned caps = ALL) const; /** * Define a GeodesicLine in terms of the inverse geodesic problem. * * @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 Geodesic::mask values * specifying the capabilities the GeodesicLine object should possess, * i.e., which quantities can be returned in calls to * GeodesicLine::Position. * @return a GeodesicLine object. * * This function sets point 3 of the GeodesicLine to correspond to point 2 * of the inverse geodesic problem. * * \e lat1 and \e lat2 should be in the range [−90°, 90°]. **********************************************************************/ GeodesicLine InverseLine(real lat1, real lon1, real lat2, real lon2, unsigned caps = ALL) const; /** * Define a GeodesicLine in terms of the direct geodesic problem specified * in terms of distance. * * @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 between point 1 and point 2 (meters); it can be * negative. * @param[in] caps bitor'ed combination of Geodesic::mask values * specifying the capabilities the GeodesicLine object should possess, * i.e., which quantities can be returned in calls to * GeodesicLine::Position. * @return a GeodesicLine object. * * This function sets point 3 of the GeodesicLine to correspond to point 2 * of the direct geodesic problem. * * \e lat1 should be in the range [−90°, 90°]. **********************************************************************/ GeodesicLine DirectLine(real lat1, real lon1, real azi1, real s12, unsigned caps = ALL) const; /** * Define a GeodesicLine in terms of the direct geodesic problem specified * in terms of arc length. * * @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] a12 arc length between point 1 and point 2 (degrees); it can * be negative. * @param[in] caps bitor'ed combination of Geodesic::mask values * specifying the capabilities the GeodesicLine object should possess, * i.e., which quantities can be returned in calls to * GeodesicLine::Position. * @return a GeodesicLine object. * * This function sets point 3 of the GeodesicLine to correspond to point 2 * of the direct geodesic problem. * * \e lat1 should be in the range [−90°, 90°]. **********************************************************************/ GeodesicLine ArcDirectLine(real lat1, real lon1, real azi1, real a12, unsigned caps = ALL) const; /** * Define a GeodesicLine in terms of the direct geodesic problem specified * in terms of either distance or arc length. * * @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] arcmode boolean flag determining the meaning of the \e * s12_a12. * @param[in] s12_a12 if \e arcmode is false, this is the distance between * point 1 and point 2 (meters); otherwise it is the arc length between * point 1 and point 2 (degrees); it can be negative. * @param[in] caps bitor'ed combination of Geodesic::mask values * specifying the capabilities the GeodesicLine object should possess, * i.e., which quantities can be returned in calls to * GeodesicLine::Position. * @return a GeodesicLine object. * * This function sets point 3 of the GeodesicLine to correspond to point 2 * of the direct geodesic problem. * * \e lat1 should be in the range [−90°, 90°]. **********************************************************************/ GeodesicLine GenDirectLine(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned caps = ALL) const; ///@} /** \name Inspector functions. **********************************************************************/ ///@{ /** * @return \e a the equatorial radius of the ellipsoid (meters). This is * the value used in the constructor. **********************************************************************/ Math::real EquatorialRadius() const { return _a; } /** * @return \e f the flattening of the ellipsoid. This is the * value used in the constructor. **********************************************************************/ Math::real Flattening() const { return _f; } /** * @return \e exact whether the exact formulation is used. This is the * value used in the constructor. **********************************************************************/ bool Exact() const { return _exact; } /** * @return total area of ellipsoid in meters2. The area of a * polygon encircling a pole can be found by adding * Geodesic::EllipsoidArea()/2 to the sum of \e S12 for each side of the * polygon. **********************************************************************/ Math::real EllipsoidArea() const { return 4 * Math::pi() * _c2; } ///@} /** * A global instantiation of Geodesic with the parameters for the WGS84 * ellipsoid. **********************************************************************/ static const Geodesic& WGS84(); }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_GEODESIC_HPP geosphere/src/OSGB.cpp0000644000176200001440000001245215147425256014277 0ustar liggesusers/** * \file OSGB.cpp * \brief Implementation for GeographicLib::OSGB class * * Copyright (c) Charles Karney (2010-2020) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include "OSGB.h" #include "Utility.h" namespace GeographicLib { using namespace std; const char* const OSGB::letters_ = "ABCDEFGHJKLMNOPQRSTUVWXYZ"; const char* const OSGB::digits_ = "0123456789"; const TransverseMercator& OSGB::OSGBTM() { static const TransverseMercator osgbtm(EquatorialRadius(), Flattening(), CentralScale()); return osgbtm; } Math::real OSGB::computenorthoffset() { real x, y; static const real northoffset = ( OSGBTM().Forward(real(0), OriginLatitude(), real(0), x, y), FalseNorthing() - y ); return northoffset; } void OSGB::GridReference(real x, real y, int prec, std::string& gridref) { CheckCoords(x, y); if (!(prec >= 0 && prec <= maxprec_)) throw GeographicErr("OSGB precision " + Utility::str(prec) + " not in [0, " + Utility::str(int(maxprec_)) + "]"); if (isnan(x) || isnan(y)) { gridref = "INVALID"; return; } char grid[2 + 2 * maxprec_]; int xh = int(floor(x / tile_)), yh = int(floor(y / tile_)); real xf = x - tile_ * xh, yf = y - tile_ * yh; xh += tileoffx_; yh += tileoffy_; int z = 0; grid[z++] = letters_[(tilegrid_ - (yh / tilegrid_) - 1) * tilegrid_ + (xh / tilegrid_)]; grid[z++] = letters_[(tilegrid_ - (yh % tilegrid_) - 1) * tilegrid_ + (xh % tilegrid_)]; // Need extra real because, since C++11, pow(float, int) returns double real mult = real(pow(real(base_), max(tilelevel_ - prec, 0))); int ix = int(floor(xf / mult)), iy = int(floor(yf / mult)); for (int c = min(prec, int(tilelevel_)); c--;) { grid[z + c] = digits_[ ix % base_ ]; ix /= base_; grid[z + c + prec] = digits_[ iy % base_ ]; iy /= base_; } if (prec > tilelevel_) { xf -= floor(xf / mult); yf -= floor(yf / mult); mult = real(pow(real(base_), prec - tilelevel_)); ix = int(floor(xf * mult)); iy = int(floor(yf * mult)); for (int c = prec - tilelevel_; c--;) { grid[z + c + tilelevel_] = digits_[ ix % base_ ]; ix /= base_; grid[z + c + tilelevel_ + prec] = digits_[ iy % base_ ]; iy /= base_; } } int mlen = z + 2 * prec; gridref.resize(mlen); copy(grid, grid + mlen, gridref.begin()); } void OSGB::GridReference(const std::string& gridref, real& x, real& y, int& prec, bool centerp) { int len = int(gridref.size()), p = 0; if (len >= 2 && toupper(gridref[0]) == 'I' && toupper(gridref[1]) == 'N') { x = y = Math::NaN(); prec = -2; // For compatibility with MGRS::Reverse. return; } char grid[2 + 2 * maxprec_]; for (int i = 0; i < len; ++i) { if (!isspace(gridref[i])) { if (p >= 2 + 2 * maxprec_) throw GeographicErr("OSGB string " + gridref + " too long"); grid[p++] = gridref[i]; } } len = p; p = 0; if (len < 2) throw GeographicErr("OSGB string " + gridref + " too short"); if (len % 2) throw GeographicErr("OSGB string " + gridref + " has odd number of characters"); int xh = 0, yh = 0; while (p < 2) { int i = Utility::lookup(letters_, grid[p++]); if (i < 0) throw GeographicErr("Illegal prefix character " + gridref); yh = yh * tilegrid_ + tilegrid_ - (i / tilegrid_) - 1; xh = xh * tilegrid_ + (i % tilegrid_); } xh -= tileoffx_; yh -= tileoffy_; int prec1 = (len - p)/2; real unit = tile_, x1 = unit * xh, y1 = unit * yh; for (int i = 0; i < prec1; ++i) { unit /= base_; int ix = Utility::lookup(digits_, grid[p + i]), iy = Utility::lookup(digits_, grid[p + i + prec1]); if (ix < 0 || iy < 0) throw GeographicErr("Encountered a non-digit in " + gridref); x1 += unit * ix; y1 += unit * iy; } if (centerp) { x1 += unit/2; y1 += unit/2; } x = x1; y = y1; prec = prec1; } void OSGB::CheckCoords(real x, real y) { // Limits are all multiples of 100km and are all closed on the lower end // and open on the upper end -- and this is reflected in the error // messages. NaNs are let through. if (x < minx_ || x >= maxx_) throw GeographicErr("Easting " + Utility::str(int(floor(x/1000))) + "km not in OSGB range [" + Utility::str(minx_/1000) + "km, " + Utility::str(maxx_/1000) + "km)"); if (y < miny_ || y >= maxy_) throw GeographicErr("Northing " + Utility::str(int(floor(y/1000))) + "km not in OSGB range [" + Utility::str(miny_/1000) + "km, " + Utility::str(maxy_/1000) + "km)"); } } // namespace GeographicLib geosphere/src/a_util.h0000644000176200001440000000054015147425256014462 0ustar liggesusers/* modulo */ double mod(double x, double n) ; /* Convert degrees to radians */ double toRad(double deg) ; /* Convert radians to degrees */ double toDeg(double rad) ; /* normatlize longitude between -180 .. 180 degrees*/ double normalizeLonDeg(double lon); /* normatlize longitude between -pi .. p1 radians*/ double normalizeLonRad(double lon); geosphere/src/AuxAngle.cpp0000644000176200001440000000332415147425256015247 0ustar liggesusers/** * \file AuxAngle.cpp * \brief Implementation for the GeographicLib::AuxAngle class. * * This file is an implementation of the methods described in * - C. F. F. Karney, * * On auxiliary latitudes, * Survey Review 56(395), 165--180 (2024); * preprint * arXiv:2212.05818. * . * Copyright (c) Charles Karney (2022-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include "AuxAngle.h" namespace GeographicLib { using namespace std; AuxAngle AuxAngle::NaN() { return AuxAngle(Math::NaN(), Math::NaN()); } AuxAngle AuxAngle::normalized() const { if ( isnan( tan() ) || (fabs(_y) > numeric_limits::max()/2 && fabs(_x) > numeric_limits::max()/2) ) // deal with // (0,0), (inf,inf), (nan,nan), (nan,x), (y,nan), (toobig,toobig) return NaN(); real r = hypot(_y, _x), y = _y/r, x = _x/r; // deal with r = inf, then one of y,x becomes 1 if (isnan(y)) y = copysign(real(1), _y); if (isnan(x)) x = copysign(real(1), _x); return AuxAngle(y, x); } AuxAngle AuxAngle::copyquadrant(const AuxAngle& p) const { return AuxAngle(copysign(y(), p.y()), copysign(x(), p.x())); } AuxAngle& AuxAngle::operator+=(const AuxAngle& p) { // Do nothing if p.tan() == 0 to preserve signs of y() and x() if (p.tan() != 0) { real x = _x * p._x - _y * p._y; _y = _y * p._x + _x * p._y; _x = x; } return *this; } } // namespace GeographicLib geosphere/src/Accumulator.cpp0000644000176200001440000000113315147425256016016 0ustar liggesusers/** * \file Accumulator.cpp * \brief Implementation for GeographicLib::Accumulator class * * Copyright (c) Charles Karney (2013-2022) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include "Accumulator.h" namespace GeographicLib { /// \cond SKIP // Need to instantiate Accumulator to get the code into the shared library. template class GEOGRAPHICLIB_EXPORT Accumulator; /// \endcond } // namespace GeographicLib geosphere/src/Math.cpp0000644000176200001440000003215715147425256014442 0ustar liggesusers/** * \file Math.cpp * \brief Implementation for GeographicLib::Math class * * Copyright (c) Charles Karney (2015-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include "Math.h" namespace GeographicLib { using namespace std; void Math::dummy() { static_assert(GEOGRAPHICLIB_PRECISION >= 1, "Bad value of precision"); } int Math::digits() { #if GEOGRAPHICLIB_PRECISION == 5 return numeric_limits::digits(); #else return numeric_limits::digits; #endif } int Math::set_digits(int ndigits) { #if GEOGRAPHICLIB_PRECISION >= 5 # if GEOGRAPHICLIB_PRECISION > 5 // This sets ndigits = GEOGRAPHICLIB_PRECISION ndigits = numeric_limits::digits; # endif mpfr::mpreal::set_default_prec(ndigits >= 2 ? ndigits : 2); #else (void) ndigits; #endif return digits(); } int Math::digits10() { #if GEOGRAPHICLIB_PRECISION == 5 return numeric_limits::digits10(); #else return numeric_limits::digits10; #endif } int Math::extra_digits() { return digits10() > numeric_limits::digits10 ? digits10() - numeric_limits::digits10 : 0; } template T Math::sum(T u, T v, T& t) { GEOGRAPHICLIB_VOLATILE T s = u + v; GEOGRAPHICLIB_VOLATILE T up = s - v; GEOGRAPHICLIB_VOLATILE T vpp = s - up; up -= u; vpp -= v; // if s = 0, then t = 0 and give t the same sign as s // mpreal needs T(0) here t = s != 0 ? T(0) - (up + vpp) : s; // u + v = s + t // = round(u + v) + t return s; } template T Math::AngNormalize(T x) { T y = remainder(x, T(td)); #if GEOGRAPHICLIB_PRECISION == 4 // boost-quadmath doesn't set the sign of 0 correctly, see // https://github.com/boostorg/multiprecision/issues/426 // Fixed by https://github.com/boostorg/multiprecision/pull/428 if (y == 0) y = copysign(y, x); #endif return fabs(y) == T(hd) ? copysign(T(hd), x) : y; } template T Math::AngDiff(T x, T y, T& e) { // Use remainder instead of AngNormalize, since we treat boundary cases // later taking account of the error T d = sum(remainder(-x, T(td)), remainder( y, T(td)), e); // This second sum can only change d if abs(d) < 128, so don't need to // apply remainder yet again. d = sum(remainder(d, T(td)), e, e); // Fix the sign if d = -180, 0, 180. if (d == 0 || fabs(d) == hd) // If e == 0, take sign from y - x // else (e != 0, implies d = +/-180), d and e must have opposite signs d = copysign(d, e == 0 ? y - x : -e); return d; } template T Math::AngRound(T x) { static const T z = T(1)/T(16); GEOGRAPHICLIB_VOLATILE T y = fabs(x); GEOGRAPHICLIB_VOLATILE T w = z - y; // The compiler mustn't "simplify" z - (z - y) to y y = w > 0 ? z - w : y; return copysign(y, x); } template void Math::sincosd(T x, T& sinx, T& cosx) { // In order to minimize round-off errors, this function exactly reduces // the argument to the range [-45, 45] before converting it to radians. int q = 0; T d = remquo(x, T(qd), &q), // now abs(r) <= 45 r = d * degree(); // g++ -O turns these two function calls into a call to sincos T s = sin(r), c = cos(r); if (2 * fabs(d) == qd) { c = sqrt(1/T(2)); s = copysign(c, r); } else if (3 * fabs(d) == qd) { c = sqrt(T(3))/2; s = copysign(1/T(2), 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 } // http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1950.pdf // mpreal needs T(0) here cosx += T(0); // special values from F.10.1.12 if (sinx == 0) sinx = copysign(sinx, x); // special values from F.10.1.13 } template void Math::sincosde(T x, T t, T& sinx, T& cosx) { // In order to minimize round-off errors, this function exactly reduces // the argument to the range [-45, 45] before converting it to radians. // This implementation allows x outside [-180, 180], but implementations in // other languages may not. int q = 0; T d = AngRound(remquo(x, T(qd), &q) + t), // now abs(r) <= 45 r = d * degree(); // g++ -O turns these two function calls into a call to sincos T s = sin(r), c = cos(r); if (2 * fabs(d) == qd) { c = sqrt(1/T(2)); s = copysign(c, r); } else if (3 * fabs(d) == qd) { c = sqrt(T(3))/2; s = copysign(1/T(2), 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 } // http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1950.pdf // mpreal needs T(0) here cosx += T(0); // special values from F.10.1.12 // Should we copy the sign from x or x+t? Given that t is small, there's // only a distinction if x+t == +/- 0. Here are the cases // x t x-sign (x+t)-sign // <0 >0 -0 +0 different // >0 <0 +0 +0 // -0 -0 -0 -0 // -0 +0 -0 +0 different // +0 -0 +0 +0 // +0 +0 +0 +0 // On balance, taking the sign from x is better, particularly for the case // x = -0, t = +0. This choice also avoids the bias towards +0 that x+t // gives. if (sinx == 0) sinx = copysign(sinx, x); // special values from F.10.1.13 } template T Math::sind(T x) { // See sincosd int q = 0; T d = remquo(x, T(qd), &q), // now abs(r) <= 45 r = d * degree(); unsigned p = unsigned(q); // r = p & 1U ? cos(r) : sin(r); replaced by ... r = p & 1U ? (2 * fabs(d) == qd ? sqrt(1/T(2)) : (3 * fabs(d) == qd ? sqrt(T(3))/2 : cos(r))) : copysign(2 * fabs(d) == qd ? sqrt(1/T(2)) : (3 * fabs(d) == qd ? 1/T(2) : sin(r)), r); if (p & 2U) r = -r; if (r == 0) r = copysign(r, x); return r; } template T Math::cosd(T x) { // See sincosd int q = 0; T d = remquo(x, T(qd), &q), // now abs(r) <= 45 r = d * degree(); unsigned p = unsigned(q + 1); r = p & 1U ? (2 * fabs(d) == qd ? sqrt(1/T(2)) : (3 * fabs(d) == qd ? sqrt(T(3))/2 : cos(r))) : copysign(2 * fabs(d) == qd ? sqrt(1/T(2)) : (3 * fabs(d) == qd ? 1/T(2) : sin(r)), r); if (p & 2U) r = -r; // mpreal needs T(0) here return T(0) + r; } template T Math::tand(T x) { static const T overflow = 1 / sq(numeric_limits::epsilon()); T s, c; sincosd(x, s, c); // http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1950.pdf T r = s / c; // special values from F.10.1.14 return clamp(r, -overflow, overflow); } template T Math::atan2d(T y, T 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. // With mpreal we could use T(mpfr::atan2u(y, x, td)); but we're not ready // for this yet. int q = 0; if (fabs(y) > fabs(x)) { swap(x, y); q = 2; } if (signbit(x)) { x = -x; ++q; } // here x >= 0 and x >= abs(y), so angle is in [-pi/4, pi/4] // Replace atan2(y, x) / degree() by this to ensure that special values // (45, 90, etc.) are returned. T ang = (atan2(y, x) / pi()) * T(hd); switch (q) { case 1: ang = copysign(T(hd), y) - ang; break; case 2: ang = qd - ang; break; case 3: ang = -qd + ang; break; default: break; } return ang; } template T Math::atand(T x) { return atan2d(x, T(1)); } template T Math::eatanhe(T x, T es) { return es > 0 ? es * atanh(es * x) : -es * atan(es * x); } template T Math::taupf(T tau, T es) { // Need this test, otherwise tau = +/-inf gives taup = nan. if (isfinite(tau)) { T tau1 = hypot(T(1), tau), sig = sinh( eatanhe(tau / tau1, es ) ); return hypot(T(1), sig) * tau - sig * tau1; } else return tau; } template T Math::tauf(T taup, T es) { static const int numit = 5; // min iterations = 1, max iterations = 2; mean = 1.95 static const T tol = sqrt(numeric_limits::epsilon()) / 10; static const T taumax = 2 / sqrt(numeric_limits::epsilon()); T e2m = 1 - sq(es), // To lowest order in e^2, taup = (1 - e^2) * tau = _e2m * tau; so use // tau = taup/e2m as a starting guess. Only 1 iteration is needed for // |lat| < 3.35 deg, otherwise 2 iterations are needed. If, instead, tau // = taup is used the mean number of iterations increases to 1.999 (2 // iterations are needed except near tau = 0). // // For large tau, taup = exp(-es*atanh(es)) * tau. Use this as for the // initial guess for |taup| > 70 (approx |phi| > 89deg). Then for // sufficiently large tau (such that sqrt(1+tau^2) = |tau|), we can exit // with the intial guess and avoid overflow problems. This also reduces // the mean number of iterations slightly from 1.963 to 1.954. tau = fabs(taup) > 70 ? taup * exp(eatanhe(T(1), es)) : taup/e2m, stol = tol * fmax(T(1), fabs(taup)); if (!(fabs(tau) < taumax)) return tau; // handles +/-inf and nan for (int i = 0; i < numit || GEOGRAPHICLIB_PANIC("Convergence failure in Math::tauf"); ++i) { T taupa = taupf(tau, es), dtau = (taup - taupa) * (1 + e2m * sq(tau)) / ( e2m * hypot(T(1), tau) * hypot(T(1), taupa) ); tau += dtau; if (!(fabs(dtau) >= stol)) break; } return tau; } template T Math::hypot3(T x, T y, T z) { #if GEOGRAPHICLIB_PRECISION == 4 // Boost implementation is given by // https://github.com/boostorg/math/pull/1318 // might make its way into 1.90 or later return hypot(hypot(x, y), z); #else return hypot(x, y, z); #endif } template T Math::clamp(T x, T a, T b) { // Use max/min here (instead of fmax/fmin) to preserve NaN return min(max(x, a), b); } template T Math::NaN() { if constexpr (numeric_limits::has_quiet_NaN) return numeric_limits::quiet_NaN(); else return (numeric_limits::max)(); } template T Math::infinity() { if constexpr (numeric_limits::has_infinity) return numeric_limits::infinity(); else return (numeric_limits::max)(); } /// \cond SKIP // Instantiate #define GEOGRAPHICLIB_MATH_INSTANTIATE(T) \ template T GEOGRAPHICLIB_EXPORT Math::sum (T, T, T&); \ template T GEOGRAPHICLIB_EXPORT Math::AngNormalize (T); \ template T GEOGRAPHICLIB_EXPORT Math::AngDiff (T, T, T&); \ template T GEOGRAPHICLIB_EXPORT Math::AngRound (T); \ template void GEOGRAPHICLIB_EXPORT Math::sincosd (T, T&, T&); \ template void GEOGRAPHICLIB_EXPORT Math::sincosde (T, T, T&, T&); \ template T GEOGRAPHICLIB_EXPORT Math::sind (T); \ template T GEOGRAPHICLIB_EXPORT Math::cosd (T); \ template T GEOGRAPHICLIB_EXPORT Math::tand (T); \ template T GEOGRAPHICLIB_EXPORT Math::atan2d (T, T); \ template T GEOGRAPHICLIB_EXPORT Math::atand (T); \ template T GEOGRAPHICLIB_EXPORT Math::eatanhe (T, T); \ template T GEOGRAPHICLIB_EXPORT Math::taupf (T, T); \ template T GEOGRAPHICLIB_EXPORT Math::tauf (T, T); \ template T GEOGRAPHICLIB_EXPORT Math::hypot3 (T, T, T); \ template T GEOGRAPHICLIB_EXPORT Math::clamp (T, T, T); \ template T GEOGRAPHICLIB_EXPORT Math::NaN (); \ template T GEOGRAPHICLIB_EXPORT Math::infinity (); // Instantiate with the standard floating type GEOGRAPHICLIB_MATH_INSTANTIATE(float) GEOGRAPHICLIB_MATH_INSTANTIATE(double) #if GEOGRAPHICLIB_HAVE_LONG_DOUBLE // Instantiate if long double is distinct from double GEOGRAPHICLIB_MATH_INSTANTIATE(long double) #endif #if GEOGRAPHICLIB_PRECISION > 3 // Instantiate with the high precision type GEOGRAPHICLIB_MATH_INSTANTIATE(Math::real) #endif #undef GEOGRAPHICLIB_MATH_INSTANTIATE // Also we need int versions for Utility::nummatch #define GEOGRAPHICLIB_MATH_INSTANTIATE2(T) \ template T GEOGRAPHICLIB_EXPORT Math::NaN (); \ template T GEOGRAPHICLIB_EXPORT Math::infinity(); GEOGRAPHICLIB_MATH_INSTANTIATE2(int) GEOGRAPHICLIB_MATH_INSTANTIATE2(unsigned long long) #undef GEOGRAPHICLIB_MATH_INSTANTIATE2 /// \endcond } // namespace GeographicLib geosphere/src/GeodesicLine.h0000644000176200001440000007567015147425256015557 0ustar liggesusers/** * \file GeodesicLine.hpp * \brief Header for GeographicLib::GeodesicLine class * * Copyright (c) Charles Karney (2009-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_GEODESICLINE_HPP) #define GEOGRAPHICLIB_GEODESICLINE_HPP 1 #include "Constants.h" #include "Geodesic.h" #include "GeodesicLineExact.h" namespace GeographicLib { /** * \brief A geodesic line * * GeodesicLine facilitates the determination of a series of points on a * single geodesic. The starting point (\e lat1, \e lon1) and the azimuth \e * azi1 are specified in the constructor; alternatively, the Geodesic::Line * method can be used to create a GeodesicLine. GeodesicLine.Position * returns the location of point 2 a distance \e s12 along the geodesic. In * addition, GeodesicLine.ArcPosition gives the position of point 2 an arc * length \e a12 along the geodesic. * * You can register the position of a reference point 3 a distance (arc * length), \e s13 (\e a13) along the geodesic with the * GeodesicLine.SetDistance (GeodesicLine.SetArc) functions. Points a * fractional distance along the line can be found by providing, for example, * 0.5 * Distance() as an argument to GeodesicLine.Position. The * Geodesic::InverseLine or Geodesic::DirectLine methods return GeodesicLine * objects with point 3 set to the point 2 of the corresponding geodesic * problem. GeodesicLine objects created with the public constructor or with * Geodesic::Line have \e s13 and \e a13 set to NaNs. * * The default copy constructor and assignment operators work with this * class. Similarly, a vector can be used to hold GeodesicLine objects. * * The calculations are accurate to better than 15 nm (15 nanometers). See * Sec. 9 of * arXiv:1102.1215v1 for * details. With \e exact = false (the default) in the constructor for the * Geodesic object, the algorithms used by this class are based on series * expansions using the flattening \e f as a small parameter. These are only * accurate for |f| < 0.02; however reasonably accurate results * will be obtained for |f| < 0.2. For very eccentric ellipsoids, * set \e exact = true in the constructor for the Geodesic object; this will * delegate the calculations to GeodesicLineExact. * * The algorithms are described in * - C. F. F. Karney, * * Algorithms for geodesics, * J. Geodesy 87, 43--55 (2013); * DOI: * 10.1007/s00190-012-0578-z; * addenda: * * geod-addenda.html. * . * For more information on geodesics see \ref geodesic. * * Example of use: * \include example-GeodesicLine.cpp * * GeodSolve is a command-line utility * providing access to the functionality of Geodesic and GeodesicLine. **********************************************************************/ class GEOGRAPHICLIB_EXPORT GeodesicLine { private: typedef Math::real real; friend class Geodesic; static const int nC1_ = Geodesic::nC1_; static const int nC1p_ = Geodesic::nC1p_; static const int nC2_ = Geodesic::nC2_; static const int nC3_ = Geodesic::nC3_; static const int nC4_ = Geodesic::nC4_; real tiny_; real _lat1, _lon1, _azi1; real _a, _f; bool _exact; real _b, _c2, _f1, _salp0, _calp0, _k2, _salp1, _calp1, _ssig1, _csig1, _dn1, _stau1, _ctau1, _somg1, _comg1, _aA1m1, _aA2m1, _aA3c, _bB11, _bB21, _bB31, _aA4, _bB41; real _a13, _s13; // index zero elements of _cC1a, _cC1pa, _cC2a, _cC3a are unused real _cC1a[nC1_ + 1], _cC1pa[nC1p_ + 1], _cC2a[nC2_ + 1], _cC3a[nC3_], _cC4a[nC4_]; // all the elements of _cC4a are used unsigned _caps; GeodesicLineExact _lineexact; void LineInit(const Geodesic& g, real lat1, real lon1, real azi1, real salp1, real calp1, unsigned caps); GeodesicLine(const Geodesic& g, real lat1, real lon1, real azi1, real salp1, real calp1, unsigned caps, bool arcmode, real s13_a13); static constexpr unsigned CAP_NONE = Geodesic::CAP_NONE; static constexpr unsigned CAP_C1 = Geodesic::CAP_C1; static constexpr unsigned CAP_C1p = Geodesic::CAP_C1p; static constexpr unsigned CAP_C2 = Geodesic::CAP_C2; static constexpr unsigned CAP_C3 = Geodesic::CAP_C3; static constexpr unsigned CAP_C4 = Geodesic::CAP_C4; static constexpr unsigned CAP_ALL = Geodesic::CAP_ALL; static constexpr unsigned CAP_MASK = Geodesic::CAP_MASK; static constexpr unsigned OUT_ALL = Geodesic::OUT_ALL; static constexpr unsigned OUT_MASK = Geodesic::OUT_MASK; public: /** * Bit masks for what calculations to do. They signify to the * GeodesicLine::GeodesicLine constructor and to Geodesic::Line what * capabilities should be included in the GeodesicLine object. This is * merely a duplication of Geodesic::mask. **********************************************************************/ enum mask { /** * No capabilities, no output. * @hideinitializer **********************************************************************/ NONE = Geodesic::NONE, /** * Calculate latitude \e lat2. (It's not necessary to include this as a * capability to GeodesicLine because this is included by default.) * @hideinitializer **********************************************************************/ LATITUDE = Geodesic::LATITUDE, /** * Calculate longitude \e lon2. * @hideinitializer **********************************************************************/ LONGITUDE = Geodesic::LONGITUDE, /** * Calculate azimuths \e azi1 and \e azi2. (It's not necessary to * include this as a capability to GeodesicLine because this is included * by default.) * @hideinitializer **********************************************************************/ AZIMUTH = Geodesic::AZIMUTH, /** * Calculate distance \e s12. * @hideinitializer **********************************************************************/ DISTANCE = Geodesic::DISTANCE, /** * A combination of the common capabilities: GeodesicLine::LATITUDE, * GeodesicLine::LONGITUDE, GeodesicLine::AZIMUTH, GeodesicLine::DISTANCE. * @hideinitializer **********************************************************************/ STANDARD = Geodesic::STANDARD, /** * Allow distance \e s12 to be used as input in the direct geodesic * problem. * @hideinitializer **********************************************************************/ DISTANCE_IN = Geodesic::DISTANCE_IN, /** * Calculate reduced length \e m12. * @hideinitializer **********************************************************************/ REDUCEDLENGTH = Geodesic::REDUCEDLENGTH, /** * Calculate geodesic scales \e M12 and \e M21. * @hideinitializer **********************************************************************/ GEODESICSCALE = Geodesic::GEODESICSCALE, /** * Calculate area \e S12. * @hideinitializer **********************************************************************/ AREA = Geodesic::AREA, /** * Unroll \e lon2 in the direct calculation. * @hideinitializer **********************************************************************/ LONG_UNROLL = Geodesic::LONG_UNROLL, /** * All capabilities, calculate everything. (GeodesicLine::LONG_UNROLL is * not included in this mask.) * @hideinitializer **********************************************************************/ ALL = Geodesic::ALL, }; /** * Typedef for the base class implementing geodesics. **********************************************************************/ typedef Geodesic BaseClass; /** \name Constructors **********************************************************************/ ///@{ /** * Constructor for a geodesic line staring at latitude \e lat1, longitude * \e lon1, and azimuth \e azi1 (all in degrees). * * @param[in] g A Geodesic object used to compute the necessary information * about the GeodesicLine. * @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 GeodesicLine::mask values * specifying the capabilities the GeodesicLine object should possess, * i.e., which quantities can be returned in calls to * GeodesicLine::Position. * * \e lat1 should be in the range [−90°, 90°]. * * The GeodesicLine::mask values are * - \e caps |= GeodesicLine::LATITUDE for the latitude \e lat2; this is * added automatically; * - \e caps |= GeodesicLine::LONGITUDE for the latitude \e lon2; * - \e caps |= GeodesicLine::AZIMUTH for the latitude \e azi2; this is * added automatically; * - \e caps |= GeodesicLine::DISTANCE for the distance \e s12; * - \e caps |= GeodesicLine::REDUCEDLENGTH for the reduced length \e m12; * - \e caps |= GeodesicLine::GEODESICSCALE for the geodesic scales \e M12 * and \e M21; * - \e caps |= GeodesicLine::AREA for the area \e S12; * - \e caps |= GeodesicLine::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; * - \e caps |= GeodesicLine::ALL for all of the above. * . * The default value of \e caps is GeodesicLine::ALL. * * If the point is at a pole, the azimuth is defined by keeping \e lon1 * fixed, writing \e lat1 = ±(90° − ε), and taking * the limit ε → 0+. **********************************************************************/ GeodesicLine(const Geodesic& g, real lat1, real lon1, real azi1, unsigned caps = ALL); /** * A default constructor. If GeodesicLine::Position is called on the * resulting object, it returns immediately (without doing any * calculations). The object can be set with a call to Geodesic::Line. * Use Init() to test whether object is still in this uninitialized state. **********************************************************************/ GeodesicLine() : _caps(0U) {} ///@} /** \name Position in terms of distance **********************************************************************/ ///@{ /** * Compute the position of point 2 which is a distance \e s12 (meters) from * point 1. * * @param[in] s12 distance from point 1 to point 2 (meters); it can be * negative. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees); requires that the * GeodesicLine object was constructed with \e caps |= * GeodesicLine::LONGITUDE. * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] m12 reduced length of geodesic (meters); requires that the * GeodesicLine object was constructed with \e caps |= * GeodesicLine::REDUCEDLENGTH. * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless); requires that the GeodesicLine object was constructed * with \e caps |= GeodesicLine::GEODESICSCALE. * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless); requires that the GeodesicLine object was constructed * with \e caps |= GeodesicLine::GEODESICSCALE. * @param[out] S12 area under the geodesic (meters2); requires * that the GeodesicLine object was constructed with \e caps |= * GeodesicLine::AREA. * @return \e a12 arc length from point 1 to point 2 (degrees). * * The values of \e lon2 and \e azi2 returned are in the range * [−180°, 180°]. * * The GeodesicLine object \e must have been constructed with \e caps |= * GeodesicLine::DISTANCE_IN; otherwise Math::NaN() is returned and no * parameters are set. Requesting a value which the GeodesicLine object is * not capable of computing is not an error; the corresponding argument * will not be altered. * * The following functions are overloaded versions of * GeodesicLine::Position which omit some of the output parameters. Note, * however, that the arc length is always computed and returned as the * function value. **********************************************************************/ Math::real Position(real s12, real& lat2, real& lon2, real& azi2, real& m12, real& M12, real& M21, real& S12) const { real t; return GenPosition(false, s12, LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH | GEODESICSCALE | AREA, lat2, lon2, azi2, t, m12, M12, M21, S12); } /** * See the documentation for GeodesicLine::Position. **********************************************************************/ Math::real Position(real s12, real& lat2, real& lon2) const { real t; return GenPosition(false, s12, LATITUDE | LONGITUDE, lat2, lon2, t, t, t, t, t, t); } /** * See the documentation for GeodesicLine::Position. **********************************************************************/ Math::real Position(real s12, real& lat2, real& lon2, real& azi2) const { real t; return GenPosition(false, s12, LATITUDE | LONGITUDE | AZIMUTH, lat2, lon2, azi2, t, t, t, t, t); } /** * See the documentation for GeodesicLine::Position. **********************************************************************/ Math::real Position(real s12, real& lat2, real& lon2, real& azi2, real& m12) const { real t; return GenPosition(false, s12, LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH, lat2, lon2, azi2, t, m12, t, t, t); } /** * See the documentation for GeodesicLine::Position. **********************************************************************/ Math::real Position(real s12, real& lat2, real& lon2, real& azi2, real& M12, real& M21) const { real t; return GenPosition(false, s12, LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE, lat2, lon2, azi2, t, t, M12, M21, t); } /** * See the documentation for GeodesicLine::Position. **********************************************************************/ Math::real Position(real s12, real& lat2, real& lon2, real& azi2, real& m12, real& M12, real& M21) const { real t; return GenPosition(false, s12, LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH | GEODESICSCALE, lat2, lon2, azi2, t, m12, M12, M21, t); } ///@} /** \name Position in terms of arc length **********************************************************************/ ///@{ /** * Compute the position of point 2 which is an arc length \e a12 (degrees) * from point 1. * * @param[in] a12 arc length from point 1 to point 2 (degrees); it can * be negative. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees); requires that the * GeodesicLine object was constructed with \e caps |= * GeodesicLine::LONGITUDE. * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] s12 distance from point 1 to point 2 (meters); requires * that the GeodesicLine object was constructed with \e caps |= * GeodesicLine::DISTANCE. * @param[out] m12 reduced length of geodesic (meters); requires that the * GeodesicLine object was constructed with \e caps |= * GeodesicLine::REDUCEDLENGTH. * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless); requires that the GeodesicLine object was constructed * with \e caps |= GeodesicLine::GEODESICSCALE. * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless); requires that the GeodesicLine object was constructed * with \e caps |= GeodesicLine::GEODESICSCALE. * @param[out] S12 area under the geodesic (meters2); requires * that the GeodesicLine object was constructed with \e caps |= * GeodesicLine::AREA. * * The values of \e lon2 and \e azi2 returned are in the range * [−180°, 180°]. * * Requesting a value which the GeodesicLine object is not capable of * computing is not an error; the corresponding argument will not be * altered. * * The following functions are overloaded versions of * GeodesicLine::ArcPosition which omit some of the output parameters. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21, real& S12) const { GenPosition(true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | REDUCEDLENGTH | GEODESICSCALE | AREA, lat2, lon2, azi2, s12, m12, M12, M21, S12); } /** * See the documentation for GeodesicLine::ArcPosition. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2) const { real t; GenPosition(true, a12, LATITUDE | LONGITUDE, lat2, lon2, t, t, t, t, t, t); } /** * See the documentation for GeodesicLine::ArcPosition. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2, real& azi2) const { real t; GenPosition(true, a12, LATITUDE | LONGITUDE | AZIMUTH, lat2, lon2, azi2, t, t, t, t, t); } /** * See the documentation for GeodesicLine::ArcPosition. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2, real& azi2, real& s12) const { real t; GenPosition(true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE, lat2, lon2, azi2, s12, t, t, t, t); } /** * See the documentation for GeodesicLine::ArcPosition. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2, real& azi2, real& s12, real& m12) const { real t; GenPosition(true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | REDUCEDLENGTH, lat2, lon2, azi2, s12, m12, t, t, t); } /** * See the documentation for GeodesicLine::ArcPosition. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2, real& azi2, real& s12, real& M12, real& M21) const { real t; GenPosition(true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | GEODESICSCALE, lat2, lon2, azi2, s12, t, M12, M21, t); } /** * See the documentation for GeodesicLine::ArcPosition. **********************************************************************/ void ArcPosition(real a12, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21) const { real t; GenPosition(true, a12, LATITUDE | LONGITUDE | AZIMUTH | DISTANCE | REDUCEDLENGTH | GEODESICSCALE, lat2, lon2, azi2, s12, m12, M12, M21, t); } ///@} /** \name The general position function. **********************************************************************/ ///@{ /** * The general position function. GeodesicLine::Position and * GeodesicLine::ArcPosition are defined in terms of this function. * * @param[in] arcmode boolean flag determining the meaning of the second * parameter; if \e arcmode is false, then the GeodesicLine object must * have been constructed with \e caps |= GeodesicLine::DISTANCE_IN. * @param[in] s12_a12 if \e arcmode is false, this is the distance between * point 1 and point 2 (meters); otherwise it is the arc length between * point 1 and point 2 (degrees); it can be negative. * @param[in] outmask a bitor'ed combination of GeodesicLine::mask values * specifying which of the following parameters should be set. * @param[out] lat2 latitude of point 2 (degrees). * @param[out] lon2 longitude of point 2 (degrees); requires that the * GeodesicLine object was constructed with \e caps |= * GeodesicLine::LONGITUDE. * @param[out] azi2 (forward) azimuth at point 2 (degrees). * @param[out] s12 distance from point 1 to point 2 (meters); requires * that the GeodesicLine object was constructed with \e caps |= * GeodesicLine::DISTANCE. * @param[out] m12 reduced length of geodesic (meters); requires that the * GeodesicLine object was constructed with \e caps |= * GeodesicLine::REDUCEDLENGTH. * @param[out] M12 geodesic scale of point 2 relative to point 1 * (dimensionless); requires that the GeodesicLine object was constructed * with \e caps |= GeodesicLine::GEODESICSCALE. * @param[out] M21 geodesic scale of point 1 relative to point 2 * (dimensionless); requires that the GeodesicLine object was constructed * with \e caps |= GeodesicLine::GEODESICSCALE. * @param[out] S12 area under the geodesic (meters2); requires * that the GeodesicLine object was constructed with \e caps |= * GeodesicLine::AREA. * @return \e a12 arc length from point 1 to point 2 (degrees). * * The GeodesicLine::mask values possible for \e outmask are * - \e outmask |= GeodesicLine::LATITUDE for the latitude \e lat2; * - \e outmask |= GeodesicLine::LONGITUDE for the latitude \e lon2; * - \e outmask |= GeodesicLine::AZIMUTH for the latitude \e azi2; * - \e outmask |= GeodesicLine::DISTANCE for the distance \e s12; * - \e outmask |= GeodesicLine::REDUCEDLENGTH for the reduced length \e * m12; * - \e outmask |= GeodesicLine::GEODESICSCALE for the geodesic scales \e * M12 and \e M21; * - \e outmask |= GeodesicLine::AREA for the area \e S12; * - \e outmask |= GeodesicLine::ALL for all of the above; * - \e outmask |= GeodesicLine::LONG_UNROLL to unroll \e lon2 instead of * reducing it into the range [−180°, 180°]. * . * Requesting a value which the GeodesicLine object is not capable of * computing is not an error; the corresponding argument will not be * altered. Note, however, that the arc length is always computed and * returned as the function value. * * With the GeodesicLine::LONG_UNROLL bit set, the quantity \e lon2 − * \e lon1 indicates how many times and in what sense the geodesic * encircles the ellipsoid. **********************************************************************/ Math::real GenPosition(bool arcmode, real s12_a12, unsigned outmask, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21, real& S12) const; ///@} /** \name Setting point 3 **********************************************************************/ ///@{ /** * Specify position of point 3 in terms of distance. * * @param[in] s13 the distance from point 1 to point 3 (meters); it * can be negative. * * This is only useful if the GeodesicLine object has been constructed * with \e caps |= GeodesicLine::DISTANCE_IN. **********************************************************************/ void SetDistance(real s13); /** * Specify position of point 3 in terms of arc length. * * @param[in] a13 the arc length from point 1 to point 3 (degrees); it * can be negative. * * The distance \e s13 is only set if the GeodesicLine object has been * constructed with \e caps |= GeodesicLine::DISTANCE. **********************************************************************/ void SetArc(real a13); /** * Specify position of point 3 in terms of either distance or arc length. * * @param[in] arcmode boolean flag determining the meaning of the second * parameter; if \e arcmode is false, then the GeodesicLine object must * have been constructed with \e caps |= GeodesicLine::DISTANCE_IN. * @param[in] s13_a13 if \e arcmode is false, this is the distance from * point 1 to point 3 (meters); otherwise it is the arc length from * point 1 to point 3 (degrees); it can be negative. **********************************************************************/ void GenSetDistance(bool arcmode, real s13_a13); ///@} /** \name Inspector functions **********************************************************************/ ///@{ /** * @return true if the object has been initialized. **********************************************************************/ bool Init() const { return _caps != 0U; } /** * @return \e lat1 the latitude of point 1 (degrees). **********************************************************************/ Math::real Latitude() const { return Init() ? _lat1 : Math::NaN(); } /** * @return \e lon1 the longitude of point 1 (degrees). **********************************************************************/ Math::real Longitude() const { return Init() ? _lon1 : Math::NaN(); } /** * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1. **********************************************************************/ Math::real Azimuth() const { return Init() ? _azi1 : Math::NaN(); } /** * The sine and cosine of \e azi1. * * @param[out] sazi1 the sine of \e azi1. * @param[out] cazi1 the cosine of \e azi1. **********************************************************************/ void Azimuth(real& sazi1, real& cazi1) const { if (Init()) { sazi1 = _salp1; cazi1 = _calp1; } } /** * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses * the equator in a northward direction. * * The result lies in [−90°, 90°]. **********************************************************************/ Math::real EquatorialAzimuth() const { return Init() ? Math::atan2d(_salp0, _calp0) : Math::NaN(); } /** * The sine and cosine of \e azi0. * * @param[out] sazi0 the sine of \e azi0. * @param[out] cazi0 the cosine of \e azi0. **********************************************************************/ void EquatorialAzimuth(real& sazi0, real& cazi0) const { if (Init()) { sazi0 = _salp0; cazi0 = _calp0; } } /** * @return \e a1 the arc length (degrees) between the northward equatorial * crossing and point 1. * * The result lies in [−180°, 180°]. **********************************************************************/ Math::real EquatorialArc() const { return Init() ? Math::atan2d(_ssig1, _csig1) : Math::NaN(); } /** * @return \e a the equatorial radius of the ellipsoid (meters). This is * the value inherited from the Geodesic object used in the constructor. **********************************************************************/ Math::real EquatorialRadius() const { return Init() ? _a : Math::NaN(); } /** * @return \e f the flattening of the ellipsoid. This is the value * inherited from the Geodesic object used in the constructor. **********************************************************************/ Math::real Flattening() const { return Init() ? _f : Math::NaN(); } /** * @return \e exact whether the exact formulation is used. This is the * value returned by the Geodesic object used in the constructor. **********************************************************************/ bool Exact() const { return _exact; } /** * @return \e caps the computational capabilities that this object was * constructed with. LATITUDE and AZIMUTH are always included. **********************************************************************/ unsigned Capabilities() const { return _caps; } /** * Test what capabilities are available. * * @param[in] testcaps a set of bitor'ed GeodesicLine::mask values. * @return true if the GeodesicLine object has all these capabilities. **********************************************************************/ bool Capabilities(unsigned testcaps) const { testcaps &= OUT_ALL; return (_caps & testcaps) == testcaps; } /** * The distance or arc length to point 3. * * @param[in] arcmode boolean flag determining the meaning of returned * value. * @return \e s13 if \e arcmode is false; \e a13 if \e arcmode is true. **********************************************************************/ Math::real GenDistance(bool arcmode) const { return Init() ? (arcmode ? _a13 : _s13) : Math::NaN(); } /** * @return \e s13, the distance to point 3 (meters). **********************************************************************/ Math::real Distance() const { return GenDistance(false); } /** * @return \e a13, the arc length to point 3 (degrees). **********************************************************************/ Math::real Arc() const { return GenDistance(true); } ///@} }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_GEODESICLINE_HPP geosphere/src/DST.h0000644000176200001440000001572715147425256013654 0ustar liggesusers/** * \file DST.hpp * \brief Header for GeographicLib::DST class * * Copyright (c) Charles Karney (2022-2024) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_DST_HPP) #define GEOGRAPHICLIB_DST_HPP 1 #include "Constants.h" #include #include /// \cond SKIP template class kissfft; /// \endcond namespace GeographicLib { /** * \brief Discrete sine transforms * * This decomposes periodic functions \f$ f(\sigma) \f$ (period \f$ 2\pi \f$) * which are odd about \f$ \sigma = 0 \f$ and even about \f$ \sigma = \frac12 * \pi \f$ into a Fourier series * \f[ * f(\sigma) = \sum_{l=0}^\infty F_l \sin\bigl((2l+1)\sigma\bigr). * \f] * * The first \f$ N \f$ components of \f$ F_l \f$, for \f$0 \le l < N\f$ may * be approximated by * \f[ * F_l = \frac2N \sum_{j=1}^{N} * p_j f(\sigma_j) \sin\bigl((2l+1)\sigma_j\bigr), * \f] * where \f$ \sigma_j = j\pi/(2N) \f$ and \f$ p_j = \frac12 \f$ for \f$ j = N * \f$ and \f$ 1 \f$ otherwise. \f$ F_l \f$ is a discrete sine transform of * type DST-III and may be conveniently computed using the fast Fourier * transform, FFT; this is implemented with the DST::transform method. * * Having computed \f$ F_l \f$ based on \f$ N \f$ evaluations of \f$ * f(\sigma) \f$ at \f$ \sigma_j = j\pi/(2N) \f$, it is possible to * refine these transform values and add another \f$ N \f$ coefficients by * evaluating \f$ f(\sigma) \f$ at \f$ (j-\frac12)\pi/(2N) \f$; this is * implemented with the DST::refine method. * * Here we compute FFTs using the kissfft package * https://github.com/mborgerding/kissfft by Mark Borgerding. * * Example of use: * \include example-DST.cpp * * \note The FFTW package https://www.fftw.org/ can also be used. However * this is a more complicated dependency, its CMake support is broken, and it * doesn't work with mpreals (GEOGRAPHICLIB_PRECISION = 5). * * \deprecated The functionality offered by this class is also provided by * the more general class Trigfun. It is recommended to use Trigfun for * new applications. **********************************************************************/ class DST { private: typedef Math::real real; int _nN; typedef kissfft fft_t; std::shared_ptr _fft; // Implement DST-III (centerp = false) or DST-IV (centerp = true) void fft_transform(real data[], real F[], bool centerp) const; // Add another N terms to F void fft_transform2(real data[], real F[]) const; public: /** * Constructor specifying the number of points to use. * * @param[in] N the number of points to use. **********************************************************************/ GEOGRAPHICLIB_EXPORT DST(int N = 0); /** * Reset the given number of points. * * @param[in] N the number of points to use. **********************************************************************/ void GEOGRAPHICLIB_EXPORT reset(int N); /** * Return the number of points. * * @return the number of points to use. **********************************************************************/ int N() const { return _nN; } /** * Determine first \e N terms in the Fourier series * * @param[in] f the function used for evaluation. * @param[out] F the first \e N coefficients of the Fourier series. * * The evaluates \f$ f(\sigma) \f$ at \f$ \sigma = (j + 1) \pi / (2 N) \f$ * for integer \f$ j \in [0, N) \f$. \e F should be an array of length at * least \e N. **********************************************************************/ void GEOGRAPHICLIB_EXPORT transform(std::function f, real F[]) const; /** * Refine the Fourier series by doubling the number of points sampled * * @param[in] f the function used for evaluation. * @param[inout] F on input the first \e N coefficents of the Fourier * series; on output the refined transform based on 2\e N points, i.e., * the first 2\e N coefficents. * * The evaluates \f$ f(\sigma) \f$ at additional points \f$ \sigma = (j + * \frac12) \pi / (2 N) \f$ for integer \f$ j \in [0, N) \f$, computes the * DST-IV transform of these, and combines this with the input \e F to * compute the 2\e N term DST-III discrete sine transform. This is * equivalent to calling transform with twice the value of \e N but is more * efficient, given that the \e N term coefficients are already known. See * the example code above. **********************************************************************/ void GEOGRAPHICLIB_EXPORT refine(std::function f, real F[]) const; /** * Evaluate the Fourier sum given the sine and cosine of the angle * * @param[in] sinx sinσ. * @param[in] cosx cosσ. * @param[in] F the array of Fourier coefficients. * @param[in] N the number of Fourier coefficients. * @return the value of the Fourier sum. **********************************************************************/ static real GEOGRAPHICLIB_EXPORT eval(real sinx, real cosx, const real F[], int N); /** * Evaluate the integral of Fourier sum given the sine and cosine of the * angle * * @param[in] sinx sinσ. * @param[in] cosx cosσ. * @param[in] F the array of Fourier coefficients. * @param[in] N the number of Fourier coefficients. * @return the value of the integral. * * The constant of integration is chosen so that the integral is zero at * \f$ \sigma = \frac12\pi \f$. **********************************************************************/ static real GEOGRAPHICLIB_EXPORT integral(real sinx, real cosx, const real F[], int N); /** * Evaluate the definite integral of Fourier sum given the sines and * cosines of the angles at the endpoints. * * @param[in] sinx sinσ1. * @param[in] cosx cosσ1. * @param[in] siny sinσ2. * @param[in] cosy cosσ2. * @param[in] F the array of Fourier coefficients. * @param[in] N the number of Fourier coefficients. * @return the value of the integral. * * The integral is evaluated between limits σ1 and * σ2. **********************************************************************/ static real GEOGRAPHICLIB_EXPORT integral(real sinx, real cosx, real siny, real cosy, const real F[], int N); }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_DST_HPP geosphere/src/PolygonArea.cpp0000644000176200001440000001647615147425256015777 0ustar liggesusers/** * \file PolygonArea.cpp * \brief Implementation for GeographicLib::PolygonAreaT class * * Copyright (c) Charles Karney (2010-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include "PolygonArea.h" namespace GeographicLib { using namespace std; template int PolygonAreaT::transit(real lon1, real lon2) { // Return 1 or -1 if crossing prime meridian in east or west direction. // Otherwise return zero. longitude = +/-0 considered to be positive. // This is (should be?) compatible with transitdirect which computes // exactly the parity of // int(floor((lon1 + lon12) / 360)) - int(floor(lon1 / 360))) real lon12 = Math::AngDiff(lon1, lon2); lon1 = Math::AngNormalize(lon1); lon2 = Math::AngNormalize(lon2); // N.B. lon12 == 0 gives cross = 0 return // edge case lon1 = 180, lon2 = 360->0, lon12 = 180 to give 1 lon12 > 0 && ((lon1 < 0 && lon2 >= 0) || // lon12 > 0 && lon1 > 0 && lon2 == 0 implies lon1 == 180 (lon1 > 0 && lon2 == 0)) ? 1 : // non edge case lon1 = -180, lon2 = -360->-0, lon12 = -180 (lon12 < 0 && lon1 >= 0 && lon2 < 0 ? -1 : 0); // This was the old method (treating +/- 0 as negative). However, with the // new scheme for handling longitude differences this fails on: // lon1 = -180, lon2 = -360->-0, lon12 = -180 gives 0 not -1. // return // lon1 <= 0 && lon2 > 0 && lon12 > 0 ? 1 : // (lon2 <= 0 && lon1 > 0 && lon12 < 0 ? -1 : 0); } // an alternate version of transit to deal with longitudes in the direct // problem. template int PolygonAreaT::transitdirect(real lon1, real lon2) { // Compute exactly the parity of // int(floor(lon2 / 360)) - int(floor(lon1 / 360)) // C++ C remainder -> [-360, 360] // Java % -> (-720, 720) switch to IEEEremainder -> [-360, 360] // JS % -> (-720, 720) // Python fmod -> (-720, 720) swith to Math.remainder // Fortran, Octave skip // If mod function gives result in [-360, 360] // [0, 360) -> 0; [-360, 0) or 360 -> 1 // If mod function gives result in (-720, 720) // [0, 360) or [-inf, -360) -> 0; [-360, 0) or [360, inf) -> 1 lon1 = remainder(lon1, real(2 * Math::td)); lon2 = remainder(lon2, real(2 * Math::td)); return ( (lon2 >= 0 && lon2 < Math::td ? 0 : 1) - (lon1 >= 0 && lon1 < Math::td ? 0 : 1) ); } template void PolygonAreaT::AddPoint(real lat, real lon) { if (_num == 0) { _lat0 = _lat1 = lat; _lon0 = _lon1 = lon; } else { real s12, S12, t; _earth.GenInverse(_lat1, _lon1, lat, lon, _mask, s12, t, t, t, t, t, S12); _perimetersum += s12; if (!_polyline) { _areasum += S12; _crossings += transit(_lon1, lon); } _lat1 = lat; _lon1 = lon; } ++_num; } template void PolygonAreaT::AddEdge(real azi, real s) { if (_num) { // Do nothing if _num is zero real lat, lon, S12, t; _earth.GenDirect(_lat1, _lon1, azi, false, s, _mask, lat, lon, t, t, t, t, t, S12); _perimetersum += s; if (!_polyline) { _areasum += S12; _crossings += transitdirect(_lon1, lon); } _lat1 = lat; _lon1 = lon; ++_num; } } template unsigned PolygonAreaT::Compute(bool reverse, bool sign, real& perimeter, real& area) const { real s12, S12, t; if (_num < 2) { perimeter = 0; if (!_polyline) area = 0; return _num; } if (_polyline) { perimeter = _perimetersum(); return _num; } _earth.GenInverse(_lat1, _lon1, _lat0, _lon0, _mask, s12, t, t, t, t, t, S12); perimeter = _perimetersum(s12); Accumulator<> tempsum(_areasum); tempsum += S12; int crossings = _crossings + transit(_lon1, _lon0); AreaReduce(tempsum, crossings, reverse, sign); area = real(0) + tempsum(); return _num; } template unsigned PolygonAreaT::TestPoint(real lat, real lon, bool reverse, bool sign, real& perimeter, real& area) const { if (_num == 0) { perimeter = 0; if (!_polyline) area = 0; return 1; } perimeter = _perimetersum(); real tempsum = _polyline ? 0 : _areasum(); int crossings = _crossings; unsigned num = _num + 1; for (int i = 0; i < (_polyline ? 1 : 2); ++i) { real s12, S12, t; _earth.GenInverse(i == 0 ? _lat1 : lat, i == 0 ? _lon1 : lon, i != 0 ? _lat0 : lat, i != 0 ? _lon0 : lon, _mask, s12, t, t, t, t, t, S12); perimeter += s12; if (!_polyline) { tempsum += S12; crossings += transit(i == 0 ? _lon1 : lon, i != 0 ? _lon0 : lon); } } if (_polyline) return num; AreaReduce(tempsum, crossings, reverse, sign); area = real(0) + tempsum; return num; } template unsigned PolygonAreaT::TestEdge(real azi, real s, bool reverse, bool sign, real& perimeter, real& area) const { if (_num == 0) { // we don't have a starting point! perimeter = Math::NaN(); if (!_polyline) area = Math::NaN(); return 0; } unsigned num = _num + 1; perimeter = _perimetersum() + s; if (_polyline) return num; real tempsum = _areasum(); int crossings = _crossings; { real lat, lon, s12, S12, t; _earth.GenDirect(_lat1, _lon1, azi, false, s, _mask, lat, lon, t, t, t, t, t, S12); tempsum += S12; crossings += transitdirect(_lon1, lon); _earth.GenInverse(lat, lon, _lat0, _lon0, _mask, s12, t, t, t, t, t, S12); perimeter += s12; tempsum += S12; crossings += transit(lon, _lon0); } AreaReduce(tempsum, crossings, reverse, sign); area = real(0) + tempsum; return num; } template template void PolygonAreaT::AreaReduce(T& area, int crossings, bool reverse, bool sign) const { Remainder(area); if (crossings & 1) area += (area < 0 ? 1 : -1) * _area0/2; // area is with the clockwise sense. If !reverse convert to // counterclockwise 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; } } template class GEOGRAPHICLIB_EXPORT PolygonAreaT; template class GEOGRAPHICLIB_EXPORT PolygonAreaT; template class GEOGRAPHICLIB_EXPORT PolygonAreaT; } // namespace GeographicLib geosphere/src/Geodesic.cpp0000644000176200001440000022113215147425256015264 0ustar liggesusers/** * \file Geodesic.cpp * \brief Implementation for GeographicLib::Geodesic class * * Copyright (c) Charles Karney (2009-2025) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ * * This is a reformulation of the geodesic problem. The notation is as * follows: * - at a general point (no suffix or 1 or 2 as suffix) * - phi = latitude * - beta = latitude on auxiliary sphere * - omega = longitude on auxiliary sphere * - lambda = longitude * - alpha = azimuth of great circle * - sigma = arc length along great circle * - s = distance * - tau = scaled distance (= sigma at multiples of pi/2) * - at northwards equator crossing * - beta = phi = 0 * - omega = lambda = 0 * - alpha = alpha0 * - sigma = s = 0 * - a 12 suffix means a difference, e.g., s12 = s2 - s1. * - s and c prefixes mean sin and cos **********************************************************************/ #include "Geodesic.h" #include "GeodesicLine.h" #if defined(_MSC_VER) // Squelch warnings about potentially uninitialized local variables # pragma warning (disable: 4701) #endif namespace GeographicLib { using namespace std; Geodesic::Geodesic(real a, real f, bool exact) : maxit2_(maxit1_ + Math::digits() + 10) // Underflow guard. We require // tiny_ * epsilon() > 0 // tiny_ + epsilon() == epsilon() , tiny_(sqrt(numeric_limits::min())) , tol0_(numeric_limits::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_)) , tolb_(tol0_) // Check on bisection interval , xthresh_(1000 * tol2_) , _a(a) , _f(f) , _exact(exact) , _f1(1 - _f) , _e2(_f * (2 - _f)) , _ep2(_e2 / Math::sq(_f1)) // e2 / (1 - e2) , _n(_f / ( 2 - _f)) , _b(_a * _f1) , _c2((Math::sq(_a) + Math::sq(_b) * (_e2 == 0 ? 1 : Math::eatanhe(real(1), (_f < 0 ? -1 : 1) * sqrt(fabs(_e2))) / _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. , _etol2(real(0.1) * tol2_ / sqrt( fmax(real(0.001), fabs(_f)) * fmin(real(1), 1 - _f/2) / 2 )) , _geodexact(_exact ? GeodesicExact(a, f) : GeodesicExact()) { if (_exact) _c2 = _geodexact._c2; else { if (!(isfinite(_a) && _a > 0)) throw GeographicErr("Equatorial radius is not positive"); if (!(isfinite(_b) && _b > 0)) throw GeographicErr("Polar semiaxis is not positive"); A3coeff(); C3coeff(); C4coeff(); } } const Geodesic& Geodesic::WGS84() { static const Geodesic wgs84(Constants::WGS84_a(), Constants::WGS84_f()); return wgs84; } Math::real Geodesic::SinCosSeries(bool 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 c += (n + sinp); // Point to one beyond last element real 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) } GeodesicLine Geodesic::Line(real lat1, real lon1, real azi1, unsigned caps) const { return GeodesicLine(*this, lat1, lon1, azi1, caps); } Math::real Geodesic::GenDirect(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned outmask, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21, real& S12) const { if (_exact) return _geodexact.GenDirect(lat1, lon1, azi1, arcmode, s12_a12, outmask, lat2, lon2, azi2, s12, m12, M12, M21, S12); // Automatically supply DISTANCE_IN if necessary if (!arcmode) outmask |= DISTANCE_IN; return GeodesicLine(*this, lat1, lon1, azi1, outmask) . // Note the dot! GenPosition(arcmode, s12_a12, outmask, lat2, lon2, azi2, s12, m12, M12, M21, S12); } GeodesicLine Geodesic::GenDirectLine(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned caps) const { azi1 = Math::AngNormalize(azi1); real salp1, calp1; // Guard against underflow in salp0. Also -0 is converted to +0. Math::sincosd(Math::AngRound(azi1), salp1, calp1); // Automatically supply DISTANCE_IN if necessary if (!arcmode) caps |= DISTANCE_IN; return GeodesicLine(*this, lat1, lon1, azi1, salp1, calp1, caps, arcmode, s12_a12); } GeodesicLine Geodesic::DirectLine(real lat1, real lon1, real azi1, real s12, unsigned caps) const { return GenDirectLine(lat1, lon1, azi1, false, s12, caps); } GeodesicLine Geodesic::ArcDirectLine(real lat1, real lon1, real azi1, real a12, unsigned caps) const { return GenDirectLine(lat1, lon1, azi1, true, a12, caps); } Math::real Geodesic::GenInverse(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real& s12, real& salp1, real& calp1, real& salp2, real& calp2, real& m12, real& M12, real& M21, real& S12) const { if (_exact) return _geodexact.GenInverse(lat1, lon1, lat2, lon2, outmask, s12, salp1, calp1, salp2, calp2, m12, M12, M21, S12); // Compute longitude difference (AngDiff does this carefully). real lon12s, lon12 = Math::AngDiff(lon1, lon2, lon12s); // Make longitude difference positive. int lonsign = signbit(lon12) ? -1 : 1; lon12 *= lonsign; lon12s *= lonsign; real lam12 = lon12 * Math::degree(), slam12, clam12; // Calculate sincos of lon12 + error (this applies AngRound internally). Math::sincosde(lon12, lon12s, slam12, clam12); // the supplementary longitude difference lon12s = (Math::hd - lon12) - lon12s; // If really close to the equator, treat as on equator. lat1 = Math::AngRound(Math::LatFix(lat1)); lat2 = Math::AngRound(Math::LatFix(lat2)); // Swap points so that point with higher (abs) latitude is point 1. // If one latitude is a nan, then it becomes lat1. int swapp = fabs(lat1) < fabs(lat2) || isnan(lat2) ? -1 : 1; if (swapp < 0) { lonsign *= -1; swap(lat1, lat2); } // Make lat1 <= -0 int latsign = signbit(lat1) ? 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. real sbet1, cbet1, sbet2, cbet2, s12x, m12x = Math::NaN(); Math::sincosd(lat1, sbet1, cbet1); sbet1 *= _f1; // Ensure cbet1 = +epsilon at poles; doing the fix on beta means that sig12 // will be <= 2*tiny for two points at the same pole. Math::norm(sbet1, cbet1); cbet1 = fmax(tiny_, cbet1); Math::sincosd(lat2, sbet2, cbet2); sbet2 *= _f1; // Ensure cbet2 = +epsilon at poles Math::norm(sbet2, cbet2); cbet2 = fmax(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 = copysign(sbet1, sbet2); } else { if (fabs(sbet2) == -sbet1) cbet2 = cbet1; } real dn1 = sqrt(1 + _ep2 * Math::sq(sbet1)), dn2 = sqrt(1 + _ep2 * Math::sq(sbet2)); real a12, sig12; // index zero element of this array is unused real Ca[nC_]; bool meridian = lat1 == -Math::qd || slam12 == 0; if (meridian) { // Endpoints are on a single full meridian, so the geodesic might lie on // a meridian. calp1 = clam12; salp1 = slam12; // Head to the target longitude calp2 = 1; salp2 = 0; // At the target we're heading north real // tan(bet) = tan(sig) * cos(alp) ssig1 = sbet1, csig1 = calp1 * cbet1, ssig2 = sbet2, csig2 = calp2 * cbet2; // sig12 = sig2 - sig1 sig12 = atan2(fmax(real(0), csig1 * ssig2 - ssig1 * csig2) + real(0), csig1 * csig2 + ssig1 * ssig2); { real dummy; Lengths(_n, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2, outmask | DISTANCE | REDUCEDLENGTH, s12x, m12x, dummy, M12, M21, 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 if (sig12 < tol2_ || 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 *= _b; s12x *= _b; a12 = sig12 / Math::degree(); } else // m12 < 0, i.e., prolate and too close to anti-podal meridian = false; } // somg12 == 2 marks that it needs to be calculated real omg12 = 0, somg12 = 2, comg12 = 0; if (!meridian && sbet1 == 0 && // and sbet2 == 0 (_f <= 0 || lon12s >= _f * Math::hd)) { // Geodesic runs along equator calp1 = calp2 = 0; salp1 = salp2 = 1; s12x = _a * lam12; sig12 = omg12 = lam12 / _f1; m12x = _b * sin(sig12); if (outmask & GEODESICSCALE) M12 = M21 = cos(sig12); a12 = lon12 / _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; sig12 = InverseStart(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 * _b * dnm; m12x = Math::sq(dnm) * _b * sin(sig12 / dnm); if (outmask & GEODESICSCALE) M12 = M21 = cos(sig12 / dnm); a12 = sig12 / Math::degree(); omg12 = lam12 / (_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. // // initial values to suppress warnings (if loop is executed 0 times) 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; for (bool tripn = false, tripb = false;; ++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; real v = Lambda12(sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1, slam12, clam12, salp2, calp2, sig12, ssig1, csig1, ssig2, csig2, eps, domg12, numit < maxit1_, dv, Ca); if (tripb || // Reversed test to allow escape with NaNs !(fabs(v) >= (tripn ? 8 : 1) * tol0_) || // Enough bisections to get accurate result numit == maxit2_) 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; // |dalp1| < pi test moved earlier because GEOGRAPHICLIB_PRECISION // = 5 can result in dalp1 = 10^(10^8). Then sin(dalp1) takes ages // (because of the need to do accurate range reduction). if (fabs(dalp1) < Math::pi()) { real sdalp1 = sin(dalp1), cdalp1 = cos(dalp1), nsalp1 = salp1 * cdalp1 + calp1 * sdalp1; if (nsalp1 > 0) { calp1 = calp1 * cdalp1 - salp1 * sdalp1; salp1 = nsalp1; Math::norm(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; Math::norm(salp1, calp1); tripn = false; tripb = (fabs(salp1a - salp1) + (calp1a - calp1) < tolb_ || fabs(salp1 - salp1b) + (calp1 - calp1b) < tolb_); } { real dummy; // Ensure that the reduced length and geodesic scale are computed in // a "canonical" way, with the I2 integral. unsigned lengthmask = outmask | (outmask & (REDUCEDLENGTH | GEODESICSCALE) ? DISTANCE : NONE); Lengths(eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2, lengthmask, s12x, m12x, dummy, M12, M21, Ca); } m12x *= _b; s12x *= _b; a12 = sig12 / Math::degree(); if (outmask & AREA) { // omg12 = lam12 - domg12 real sdomg12 = sin(domg12), cdomg12 = cos(domg12); somg12 = slam12 * cdomg12 - clam12 * sdomg12; comg12 = clam12 * cdomg12 + slam12 * sdomg12; } } } if (outmask & DISTANCE) s12 = real(0) + s12x; // Convert -0 to 0 if (outmask & REDUCEDLENGTH) m12 = real(0) + m12x; // Convert -0 to 0 if (outmask & 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 = Math::sq(calp0) * _ep2, eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2), // Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0). A4 = Math::sq(_a) * calp0 * salp0 * _e2; Math::norm(ssig1, csig1); Math::norm(ssig2, csig2); C4f(eps, Ca); real 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 == 2) { 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 += _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) { swap(salp1, salp2); swap(calp1, calp2); if (outmask & GEODESICSCALE) swap(M12, M21); } salp1 *= swapp * lonsign; calp1 *= swapp * latsign; salp2 *= swapp * lonsign; calp2 *= swapp * latsign; // Returned value in [0, 180] return a12; } Math::real Geodesic::GenInverse(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real& s12, real& azi1, real& azi2, real& m12, real& M12, real& M21, real& S12) const { outmask &= OUT_MASK; real salp1, calp1, salp2, calp2, a12 = GenInverse(lat1, lon1, lat2, lon2, outmask, s12, salp1, calp1, salp2, calp2, m12, M12, M21, S12); if (outmask & AZIMUTH) { azi1 = Math::atan2d(salp1, calp1); azi2 = Math::atan2d(salp2, calp2); } return a12; } GeodesicLine Geodesic::InverseLine(real lat1, real lon1, real lat2, real lon2, unsigned caps) const { real t, salp1, calp1, salp2, calp2, a12 = GenInverse(lat1, lon1, lat2, lon2, // No need to specify AZIMUTH here 0u, t, salp1, calp1, salp2, calp2, t, t, t, t), azi1 = Math::atan2d(salp1, calp1); // Ensure that a12 can be converted to a distance if (caps & (OUT_MASK & DISTANCE_IN)) caps |= DISTANCE; return GeodesicLine(*this, lat1, lon1, azi1, salp1, calp1, caps, true, a12); } void Geodesic::Lengths(real eps, real sig12, real ssig1, real csig1, real dn1, real ssig2, real csig2, real dn2, real cbet1, real cbet2, unsigned outmask, real& s12b, real& m12b, real& m0, real& M12, real& M21, // Scratch area of the right size real Ca[]) const { // Return m12b = (reduced length)/_b; also calculate s12b = distance/_b, // and m0 = coefficient of secular term in expression for reduced length. outmask &= OUT_MASK; // outmask & DISTANCE: set s12b // outmask & REDUCEDLENGTH: set m12b & m0 // outmask & GEODESICSCALE: set M12 & M21 real m0x = 0, J12 = 0, A1 = 0, A2 = 0; real Cb[nC2_ + 1]; if (outmask & (DISTANCE | REDUCEDLENGTH | GEODESICSCALE)) { A1 = A1m1f(eps); C1f(eps, Ca); if (outmask & (REDUCEDLENGTH | GEODESICSCALE)) { A2 = A2m1f(eps); C2f(eps, Cb); m0x = A1 - A2; A2 = 1 + A2; } A1 = 1 + A1; } if (outmask & DISTANCE) { real B1 = SinCosSeries(true, ssig2, csig2, Ca, nC1_) - SinCosSeries(true, ssig1, csig1, Ca, nC1_); // Missing a factor of _b s12b = A1 * (sig12 + B1); if (outmask & (REDUCEDLENGTH | GEODESICSCALE)) { real B2 = SinCosSeries(true, ssig2, csig2, Cb, nC2_) - SinCosSeries(true, ssig1, csig1, Cb, nC2_); J12 = m0x * sig12 + (A1 * B1 - A2 * B2); } } else if (outmask & (REDUCEDLENGTH | GEODESICSCALE)) { // Assume here that nC1_ >= nC2_ for (int l = 1; l <= nC2_; ++l) Cb[l] = A1 * Ca[l] - A2 * Cb[l]; J12 = m0x * sig12 + (SinCosSeries(true, ssig2, csig2, Cb, nC2_) - SinCosSeries(true, ssig1, csig1, Cb, nC2_)); } if (outmask & REDUCEDLENGTH) { m0 = m0x; // Missing a factor of _b. // Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure // accurate cancellation in the case of coincident points. m12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) - csig1 * csig2 * J12; } if (outmask & GEODESICSCALE) { real csig12 = csig1 * csig2 + ssig1 * ssig2; real t = _ep2 * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2); M12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1; M21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2; } } Math::real Geodesic::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 = Math::sq(x), q = Math::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 = Math::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; if (disc >= 0) { real T3 = S + r3; // 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. real 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); } real v = sqrt(Math::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 + Math::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; } Math::real Geodesic::InverseStart(real sbet1, real cbet1, real dn1, real sbet2, real cbet2, real dn2, real lam12, real slam12, real clam12, real& salp1, real& calp1, // Only updated if return val >= 0 real& salp2, real& calp2, // Only updated for short lines real& dnm, // Scratch area of the right size real Ca[]) const { // 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 = sbet2 * cbet1 + cbet2 * sbet1; bool shortline = cbet12 >= 0 && sbet12 < real(0.5) && cbet2 * lam12 < real(0.5); real somg12, comg12; if (shortline) { real sbetm2 = Math::sq(sbet1 + sbet2); // sin((bet1+bet2)/2)^2 // = (sbet1 + sbet2)^2 / ((sbet1 + sbet2)^2 + (cbet1 + cbet2)^2) sbetm2 /= sbetm2 + Math::sq(cbet1 + cbet2); dnm = sqrt(1 + _ep2 * sbetm2); real omg12 = lam12 / (_f1 * dnm); somg12 = sin(omg12); comg12 = cos(omg12); } else { somg12 = slam12; comg12 = clam12; } salp1 = cbet2 * somg12; calp1 = comg12 >= 0 ? sbet12 + cbet2 * sbet1 * Math::sq(somg12) / (1 + comg12) : sbet12a - cbet2 * sbet1 * Math::sq(somg12) / (1 - comg12); real ssig12 = hypot(salp1, calp1), csig12 = sbet1 * sbet2 + cbet1 * cbet2 * comg12; if (shortline && ssig12 < _etol2) { // really short lines salp2 = cbet1 * somg12; calp2 = sbet12 - cbet1 * sbet2 * (comg12 >= 0 ? Math::sq(somg12) / (1 + comg12) : 1 - comg12); Math::norm(salp2, calp2); // Set return value sig12 = atan2(ssig12, csig12); } else if (fabs(_n) > real(0.1) || // Skip astroid calc if too eccentric csig12 >= 0 || ssig12 >= 6 * fabs(_n) * Math::pi() * Math::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 x, y, lamscale, betscale; real lam12x = atan2(-slam12, -clam12); // lam12 - pi if (_f >= 0) { // In fact f == 0 does not get here // x = dlong, y = dlat { real k2 = Math::sq(sbet1) * _ep2, eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2); lamscale = _f * cbet1 * A3f(eps) * Math::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, dummy; // In the case of lon12 = 180, this repeats a calculation made in // Inverse. Lengths(_n, Math::pi() + bet12a, sbet1, -cbet1, dn1, sbet2, cbet2, dn2, cbet1, cbet2, REDUCEDLENGTH, dummy, m12b, m0, dummy, dummy, Ca); x = -1 + m12b / (cbet1 * cbet2 * m0 * Math::pi()); betscale = x < -real(0.01) ? sbet12a / x : -_f * Math::sq(cbet1) * Math::pi(); lamscale = betscale / cbet1; y = lam12x / lamscale; } if (y > -tol1_ && x > -1 - xthresh_) { // strip near cut // Need real(x) here to cast away the volatility of x for min/max if (_f >= 0) { salp1 = fmin(real(1), -x); calp1 = - sqrt(1 - Math::sq(salp1)); } else { calp1 = fmax(real(x > -tol1_ ? 0 : -1), x); salp1 = sqrt(1 - Math::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 * ( _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 * Math::sq(somg12) / (1 - comg12); } } // Sanity check on starting guess. Backwards check allows NaN through. if (!(salp1 <= 0)) Math::norm(salp1, calp1); else { salp1 = 1; calp1 = 0; } return sig12; } Math::real Geodesic::Lambda12(real sbet1, real cbet1, real dn1, real sbet2, real cbet2, real dn2, real salp1, real calp1, real slam120, real clam120, real& salp2, real& calp2, real& sig12, real& ssig1, real& csig1, real& ssig2, real& csig2, real& eps, real& domg12, bool diffp, real& dlam12, // Scratch area of the right size real Ca[]) const { if (sbet1 == 0 && calp1 == 0) // Break degeneracy of equatorial line. This case has already been // handled. calp1 = -tiny_; real // sin(alp1) * cos(bet1) = sin(alp0) salp0 = salp1 * cbet1, calp0 = hypot(calp1, salp1 * sbet1); // calp0 > 0 real somg1, comg1, somg2, comg2, somg12, comg12, lam12; // 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; Math::norm(ssig1, csig1); // Math::norm(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(Math::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; Math::norm(ssig2, csig2); // Math::norm(somg2, comg2); -- don't need to normalize! // sig12 = sig2 - sig1, limit to [0, pi] sig12 = atan2(fmax(real(0), csig1 * ssig2 - ssig1 * csig2) + real(0), csig1 * csig2 + ssig1 * ssig2); // omg12 = omg2 - omg1, limit to [0, pi] somg12 = fmax(real(0), comg1 * somg2 - somg1 * comg2) + real(0); comg12 = comg1 * comg2 + somg1 * somg2; // eta = omg12 - lam120 real eta = atan2(somg12 * clam120 - comg12 * slam120, comg12 * clam120 + somg12 * slam120); real B312; real k2 = Math::sq(calp0) * _ep2; eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2); C3f(eps, Ca); B312 = (SinCosSeries(true, ssig2, csig2, Ca, nC3_-1) - SinCosSeries(true, ssig1, csig1, Ca, nC3_-1)); domg12 = -_f * A3f(eps) * salp0 * (sig12 + B312); lam12 = eta + domg12; if (diffp) { if (calp2 == 0) dlam12 = - 2 * _f1 * dn1 / sbet1; else { real dummy; Lengths(eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2, REDUCEDLENGTH, dummy, dlam12, dummy, dummy, dummy, Ca); dlam12 *= _f1 / (calp2 * cbet2); } } return lam12; } Math::real Geodesic::A3f(real eps) const { // Evaluate A3 return Math::polyval(nA3_ - 1, _aA3x, eps); } void Geodesic::C3f(real eps, real c[]) const { // Evaluate C3 coeffs // Elements c[1] thru c[nC3_ - 1] are set real mult = 1; int o = 0; for (int 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 * Math::polyval(m, _cC3x + o, eps); o += m + 1; } // Post condition: o == nC3x_ } void Geodesic::C4f(real eps, real c[]) const { // Evaluate C4 coeffs // Elements c[0] thru c[nC4_ - 1] are set real mult = 1; int o = 0; for (int l = 0; l < nC4_; ++l) { // l is index of C4[l] int m = nC4_ - l - 1; // order of polynomial in eps c[l] = mult * Math::polyval(m, _cC4x + o, eps); o += m + 1; mult *= eps; } // Post condition: o == nC4x_ } // The static const coefficient arrays in the following functions are // generated by Maxima and give the coefficients of the Taylor expansions for // the geodesics. The convention on the order of these coefficients is as // follows: // // ascending order in the trigonometric expansion, // then powers of eps in descending order, // finally powers of n in descending order. // // (For some expansions, only a subset of levels occur.) For each polynomial // of order n at the lowest level, the (n+1) coefficients of the polynomial // are followed by a divisor which is applied to the whole polynomial. In // this way, the coefficients are expressible with no round off error. The // sizes of the coefficient arrays are: // // A1m1f, A2m1f = floor(N/2) + 2 // C1f, C1pf, C2f, A3coeff = (N^2 + 7*N - 2*floor(N/2)) / 4 // C3coeff = (N - 1) * (N^2 + 7*N - 2*floor(N/2)) / 8 // C4coeff = N * (N + 1) * (N + 5) / 6 // // where N = GEOGRAPHICLIB_GEODESIC_ORDER // = nA1 = nA2 = nC1 = nC1p = nA3 = nC4 // The scale factor A1-1 = mean value of (d/dsigma)I1 - 1 Math::real Geodesic::A1m1f(real eps) { // Generated by Maxima on 2015-05-05 18:08:12-04:00 #if GEOGRAPHICLIB_GEODESIC_ORDER/2 == 1 static const real coeff[] = { // (1-eps)*A1-1, polynomial in eps2 of order 1 1, 0, 4, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER/2 == 2 static const real coeff[] = { // (1-eps)*A1-1, polynomial in eps2 of order 2 1, 16, 0, 64, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER/2 == 3 static const real coeff[] = { // (1-eps)*A1-1, polynomial in eps2 of order 3 1, 4, 64, 0, 256, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER/2 == 4 static const real coeff[] = { // (1-eps)*A1-1, polynomial in eps2 of order 4 25, 64, 256, 4096, 0, 16384, }; #else #error "Bad value for GEOGRAPHICLIB_GEODESIC_ORDER" #endif static_assert(sizeof(coeff) / sizeof(real) == nA1_/2 + 2, "Coefficient array size mismatch in A1m1f"); int m = nA1_/2; real t = Math::polyval(m, coeff, Math::sq(eps)) / coeff[m + 1]; return (t + eps) / (1 - eps); } // The coefficients C1[l] in the Fourier expansion of B1 void Geodesic::C1f(real eps, real c[]) { // Generated by Maxima on 2015-05-05 18:08:12-04:00 #if GEOGRAPHICLIB_GEODESIC_ORDER == 3 static const real coeff[] = { // C1[1]/eps^1, polynomial in eps2 of order 1 3, -8, 16, // C1[2]/eps^2, polynomial in eps2 of order 0 -1, 16, // C1[3]/eps^3, polynomial in eps2 of order 0 -1, 48, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 4 static const real coeff[] = { // C1[1]/eps^1, polynomial in eps2 of order 1 3, -8, 16, // C1[2]/eps^2, polynomial in eps2 of order 1 1, -2, 32, // C1[3]/eps^3, polynomial in eps2 of order 0 -1, 48, // C1[4]/eps^4, polynomial in eps2 of order 0 -5, 512, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 5 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 1 1, -2, 32, // C1[3]/eps^3, polynomial in eps2 of order 1 9, -16, 768, // C1[4]/eps^4, polynomial in eps2 of order 0 -5, 512, // C1[5]/eps^5, polynomial in eps2 of order 0 -7, 1280, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 6 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, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 7 static const real coeff[] = { // C1[1]/eps^1, polynomial in eps2 of order 3 19, -64, 384, -1024, 2048, // C1[2]/eps^2, polynomial in eps2 of order 2 -9, 64, -128, 2048, // C1[3]/eps^3, polynomial in eps2 of order 2 -9, 72, -128, 6144, // C1[4]/eps^4, polynomial in eps2 of order 1 3, -5, 512, // C1[5]/eps^5, polynomial in eps2 of order 1 35, -56, 10240, // C1[6]/eps^6, polynomial in eps2 of order 0 -7, 2048, // C1[7]/eps^7, polynomial in eps2 of order 0 -33, 14336, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 8 static const real coeff[] = { // C1[1]/eps^1, polynomial in eps2 of order 3 19, -64, 384, -1024, 2048, // C1[2]/eps^2, polynomial in eps2 of order 3 7, -18, 128, -256, 4096, // C1[3]/eps^3, polynomial in eps2 of order 2 -9, 72, -128, 6144, // C1[4]/eps^4, polynomial in eps2 of order 2 -11, 96, -160, 16384, // C1[5]/eps^5, polynomial in eps2 of order 1 35, -56, 10240, // C1[6]/eps^6, polynomial in eps2 of order 1 9, -14, 4096, // C1[7]/eps^7, polynomial in eps2 of order 0 -33, 14336, // C1[8]/eps^8, polynomial in eps2 of order 0 -429, 262144, }; #else #error "Bad value for GEOGRAPHICLIB_GEODESIC_ORDER" #endif static_assert(sizeof(coeff) / sizeof(real) == (nC1_*nC1_ + 7*nC1_ - 2*(nC1_/2)) / 4, "Coefficient array size mismatch in C1f"); real eps2 = Math::sq(eps), d = eps; int o = 0; for (int 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 * Math::polyval(m, coeff + o, eps2) / coeff[o + m + 1]; o += m + 2; d *= eps; } // Post condition: o == sizeof(coeff) / sizeof(real) } // The coefficients C1p[l] in the Fourier expansion of B1p void Geodesic::C1pf(real eps, real c[]) { // Generated by Maxima on 2015-05-05 18:08:12-04:00 #if GEOGRAPHICLIB_GEODESIC_ORDER == 3 static const real coeff[] = { // C1p[1]/eps^1, polynomial in eps2 of order 1 -9, 16, 32, // C1p[2]/eps^2, polynomial in eps2 of order 0 5, 16, // C1p[3]/eps^3, polynomial in eps2 of order 0 29, 96, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 4 static const real coeff[] = { // C1p[1]/eps^1, polynomial in eps2 of order 1 -9, 16, 32, // C1p[2]/eps^2, polynomial in eps2 of order 1 -37, 30, 96, // C1p[3]/eps^3, polynomial in eps2 of order 0 29, 96, // C1p[4]/eps^4, polynomial in eps2 of order 0 539, 1536, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 5 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 1 -37, 30, 96, // C1p[3]/eps^3, polynomial in eps2 of order 1 -225, 116, 384, // C1p[4]/eps^4, polynomial in eps2 of order 0 539, 1536, // C1p[5]/eps^5, polynomial in eps2 of order 0 3467, 7680, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 6 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, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 7 static const real coeff[] = { // C1p[1]/eps^1, polynomial in eps2 of order 3 -4879, 9840, -20736, 36864, 73728, // C1p[2]/eps^2, polynomial in eps2 of order 2 4005, -4736, 3840, 12288, // C1p[3]/eps^3, polynomial in eps2 of order 2 8703, -7200, 3712, 12288, // C1p[4]/eps^4, polynomial in eps2 of order 1 -7173, 2695, 7680, // C1p[5]/eps^5, polynomial in eps2 of order 1 -141115, 41604, 92160, // C1p[6]/eps^6, polynomial in eps2 of order 0 38081, 61440, // C1p[7]/eps^7, polynomial in eps2 of order 0 459485, 516096, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 8 static const real coeff[] = { // C1p[1]/eps^1, polynomial in eps2 of order 3 -4879, 9840, -20736, 36864, 73728, // C1p[2]/eps^2, polynomial in eps2 of order 3 -86171, 120150, -142080, 115200, 368640, // C1p[3]/eps^3, polynomial in eps2 of order 2 8703, -7200, 3712, 12288, // C1p[4]/eps^4, polynomial in eps2 of order 2 1082857, -688608, 258720, 737280, // C1p[5]/eps^5, polynomial in eps2 of order 1 -141115, 41604, 92160, // C1p[6]/eps^6, polynomial in eps2 of order 1 -2200311, 533134, 860160, // C1p[7]/eps^7, polynomial in eps2 of order 0 459485, 516096, // C1p[8]/eps^8, polynomial in eps2 of order 0 109167851, 82575360, }; #else #error "Bad value for GEOGRAPHICLIB_GEODESIC_ORDER" #endif static_assert(sizeof(coeff) / sizeof(real) == (nC1p_*nC1p_ + 7*nC1p_ - 2*(nC1p_/2)) / 4, "Coefficient array size mismatch in C1pf"); real eps2 = Math::sq(eps), d = eps; int o = 0; for (int 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 * Math::polyval(m, coeff + o, eps2) / coeff[o + m + 1]; o += m + 2; d *= eps; } // Post condition: o == sizeof(coeff) / sizeof(real) } // The scale factor A2-1 = mean value of (d/dsigma)I2 - 1 Math::real Geodesic::A2m1f(real eps) { // Generated by Maxima on 2015-05-29 08:09:47-04:00 #if GEOGRAPHICLIB_GEODESIC_ORDER/2 == 1 static const real coeff[] = { // (eps+1)*A2-1, polynomial in eps2 of order 1 -3, 0, 4, }; // count = 3 #elif GEOGRAPHICLIB_GEODESIC_ORDER/2 == 2 static const real coeff[] = { // (eps+1)*A2-1, polynomial in eps2 of order 2 -7, -48, 0, 64, }; // count = 4 #elif GEOGRAPHICLIB_GEODESIC_ORDER/2 == 3 static const real coeff[] = { // (eps+1)*A2-1, polynomial in eps2 of order 3 -11, -28, -192, 0, 256, }; // count = 5 #elif GEOGRAPHICLIB_GEODESIC_ORDER/2 == 4 static const real coeff[] = { // (eps+1)*A2-1, polynomial in eps2 of order 4 -375, -704, -1792, -12288, 0, 16384, }; // count = 6 #else #error "Bad value for GEOGRAPHICLIB_GEODESIC_ORDER" #endif static_assert(sizeof(coeff) / sizeof(real) == nA2_/2 + 2, "Coefficient array size mismatch in A2m1f"); int m = nA2_/2; real t = Math::polyval(m, coeff, Math::sq(eps)) / coeff[m + 1]; return (t - eps) / (1 + eps); } // The coefficients C2[l] in the Fourier expansion of B2 void Geodesic::C2f(real eps, real c[]) { // Generated by Maxima on 2015-05-05 18:08:12-04:00 #if GEOGRAPHICLIB_GEODESIC_ORDER == 3 static const real coeff[] = { // C2[1]/eps^1, polynomial in eps2 of order 1 1, 8, 16, // C2[2]/eps^2, polynomial in eps2 of order 0 3, 16, // C2[3]/eps^3, polynomial in eps2 of order 0 5, 48, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 4 static const real coeff[] = { // C2[1]/eps^1, polynomial in eps2 of order 1 1, 8, 16, // C2[2]/eps^2, polynomial in eps2 of order 1 1, 6, 32, // C2[3]/eps^3, polynomial in eps2 of order 0 5, 48, // C2[4]/eps^4, polynomial in eps2 of order 0 35, 512, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 5 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 1 1, 6, 32, // C2[3]/eps^3, polynomial in eps2 of order 1 15, 80, 768, // C2[4]/eps^4, polynomial in eps2 of order 0 35, 512, // C2[5]/eps^5, polynomial in eps2 of order 0 63, 1280, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 6 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, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 7 static const real coeff[] = { // C2[1]/eps^1, polynomial in eps2 of order 3 41, 64, 128, 1024, 2048, // C2[2]/eps^2, polynomial in eps2 of order 2 35, 64, 384, 2048, // C2[3]/eps^3, polynomial in eps2 of order 2 69, 120, 640, 6144, // C2[4]/eps^4, polynomial in eps2 of order 1 7, 35, 512, // C2[5]/eps^5, polynomial in eps2 of order 1 105, 504, 10240, // C2[6]/eps^6, polynomial in eps2 of order 0 77, 2048, // C2[7]/eps^7, polynomial in eps2 of order 0 429, 14336, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 8 static const real coeff[] = { // C2[1]/eps^1, polynomial in eps2 of order 3 41, 64, 128, 1024, 2048, // C2[2]/eps^2, polynomial in eps2 of order 3 47, 70, 128, 768, 4096, // C2[3]/eps^3, polynomial in eps2 of order 2 69, 120, 640, 6144, // C2[4]/eps^4, polynomial in eps2 of order 2 133, 224, 1120, 16384, // C2[5]/eps^5, polynomial in eps2 of order 1 105, 504, 10240, // C2[6]/eps^6, polynomial in eps2 of order 1 33, 154, 4096, // C2[7]/eps^7, polynomial in eps2 of order 0 429, 14336, // C2[8]/eps^8, polynomial in eps2 of order 0 6435, 262144, }; #else #error "Bad value for GEOGRAPHICLIB_GEODESIC_ORDER" #endif static_assert(sizeof(coeff) / sizeof(real) == (nC2_*nC2_ + 7*nC2_ - 2*(nC2_/2)) / 4, "Coefficient array size mismatch in C2f"); real eps2 = Math::sq(eps), d = eps; int o = 0; for (int 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 * Math::polyval(m, coeff + o, eps2) / coeff[o + m + 1]; o += m + 2; d *= eps; } // Post condition: o == sizeof(coeff) / sizeof(real) } // The scale factor A3 = mean value of (d/dsigma)I3 void Geodesic::A3coeff() { // Generated by Maxima on 2015-05-05 18:08:13-04:00 #if GEOGRAPHICLIB_GEODESIC_ORDER == 3 static const real coeff[] = { // A3, coeff of eps^2, polynomial in n of order 0 -1, 4, // 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, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 4 static const real coeff[] = { // A3, coeff of eps^3, polynomial in n of order 0 -1, 16, // A3, coeff of eps^2, polynomial in n of order 1 -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, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 5 static const real coeff[] = { // A3, coeff of eps^4, polynomial in n of order 0 -3, 64, // A3, coeff of eps^3, polynomial in n of order 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, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 6 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, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 7 static const real coeff[] = { // A3, coeff of eps^6, polynomial in n of order 0 -5, 256, // A3, coeff of eps^5, polynomial in n of order 1 -5, -3, 128, // A3, coeff of eps^4, polynomial in n of order 2 -10, -2, -3, 64, // A3, coeff of eps^3, polynomial in n of order 3 5, -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, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 8 static const real coeff[] = { // A3, coeff of eps^7, polynomial in n of order 0 -25, 2048, // A3, coeff of eps^6, polynomial in n of order 1 -15, -20, 1024, // A3, coeff of eps^5, polynomial in n of order 2 -5, -10, -6, 256, // A3, coeff of eps^4, polynomial in n of order 3 -5, -20, -4, -6, 128, // A3, coeff of eps^3, polynomial in n of order 3 5, -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, }; #else #error "Bad value for GEOGRAPHICLIB_GEODESIC_ORDER" #endif static_assert(sizeof(coeff) / sizeof(real) == (nA3_*nA3_ + 7*nA3_ - 2*(nA3_/2)) / 4, "Coefficient array size mismatch in A3f"); int o = 0, k = 0; for (int j = nA3_ - 1; j >= 0; --j) { // coeff of eps^j int m = min(nA3_ - j - 1, j); // order of polynomial in n _aA3x[k++] = Math::polyval(m, coeff + o, _n) / coeff[o + m + 1]; o += m + 2; } // Post condition: o == sizeof(coeff) / sizeof(real) && k == nA3x_ } // The coefficients C3[l] in the Fourier expansion of B3 void Geodesic::C3coeff() { // Generated by Maxima on 2015-05-05 18:08:13-04:00 #if GEOGRAPHICLIB_GEODESIC_ORDER == 3 static const real coeff[] = { // C3[1], coeff of eps^2, polynomial in n of order 0 1, 8, // C3[1], coeff of eps^1, polynomial in n of order 1 -1, 1, 4, // C3[2], coeff of eps^2, polynomial in n of order 0 1, 16, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 4 static const real coeff[] = { // C3[1], coeff of eps^3, polynomial in n of order 0 3, 64, // C3[1], coeff of eps^2, polynomial in n of order 1 // This is a case where a leading 0 term has been inserted to maintain the // pattern in the orders of the polynomials. 0, 1, 8, // C3[1], coeff of eps^1, polynomial in n of order 1 -1, 1, 4, // C3[2], coeff of eps^3, polynomial in n of order 0 3, 64, // C3[2], coeff of eps^2, polynomial in n of order 1 -3, 2, 32, // C3[3], coeff of eps^3, polynomial in n of order 0 5, 192, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 5 static const real coeff[] = { // C3[1], coeff of eps^4, polynomial in n of order 0 5, 128, // C3[1], coeff of eps^3, polynomial in n of order 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^4, polynomial in n of order 0 3, 128, // C3[2], coeff of eps^3, polynomial in n of order 1 -2, 3, 64, // C3[2], coeff of eps^2, polynomial in n of order 2 1, -3, 2, 32, // C3[3], coeff of eps^4, polynomial in n of order 0 3, 128, // C3[3], coeff of eps^3, polynomial in n of order 1 -9, 5, 192, // C3[4], coeff of eps^4, polynomial in n of order 0 7, 512, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 6 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, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 7 static const real coeff[] = { // C3[1], coeff of eps^6, polynomial in n of order 0 21, 1024, // C3[1], coeff of eps^5, polynomial in n of order 1 11, 12, 512, // C3[1], coeff of eps^4, polynomial in n of order 2 2, 2, 5, 128, // C3[1], coeff of eps^3, polynomial in n of order 3 -5, -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^6, polynomial in n of order 0 27, 2048, // C3[2], coeff of eps^5, polynomial in n of order 1 1, 5, 256, // C3[2], coeff of eps^4, polynomial in n of order 2 -9, 2, 6, 256, // C3[2], coeff of eps^3, polynomial in n of order 3 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^6, polynomial in n of order 0 3, 256, // C3[3], coeff of eps^5, polynomial in n of order 1 -4, 21, 1536, // C3[3], coeff of eps^4, polynomial in n of order 2 -6, -10, 9, 384, // C3[3], coeff of eps^3, polynomial in n of order 3 -1, 5, -9, 5, 192, // C3[4], coeff of eps^6, polynomial in n of order 0 9, 1024, // C3[4], coeff of eps^5, polynomial in n of order 1 -10, 7, 512, // C3[4], coeff of eps^4, polynomial in n of order 2 10, -14, 7, 512, // C3[5], coeff of eps^6, polynomial in n of order 0 9, 1024, // C3[5], coeff of eps^5, polynomial in n of order 1 -45, 21, 2560, // C3[6], coeff of eps^6, polynomial in n of order 0 11, 2048, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 8 static const real coeff[] = { // C3[1], coeff of eps^7, polynomial in n of order 0 243, 16384, // C3[1], coeff of eps^6, polynomial in n of order 1 10, 21, 1024, // C3[1], coeff of eps^5, polynomial in n of order 2 3, 11, 12, 512, // C3[1], coeff of eps^4, polynomial in n of order 3 -2, 2, 2, 5, 128, // C3[1], coeff of eps^3, polynomial in n of order 3 -5, -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^7, polynomial in n of order 0 187, 16384, // C3[2], coeff of eps^6, polynomial in n of order 1 69, 108, 8192, // C3[2], coeff of eps^5, polynomial in n of order 2 -2, 1, 5, 256, // C3[2], coeff of eps^4, polynomial in n of order 3 -6, -9, 2, 6, 256, // C3[2], coeff of eps^3, polynomial in n of order 3 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^7, polynomial in n of order 0 139, 16384, // C3[3], coeff of eps^6, polynomial in n of order 1 -1, 12, 1024, // C3[3], coeff of eps^5, polynomial in n of order 2 -77, -8, 42, 3072, // C3[3], coeff of eps^4, polynomial in n of order 3 10, -6, -10, 9, 384, // C3[3], coeff of eps^3, polynomial in n of order 3 -1, 5, -9, 5, 192, // C3[4], coeff of eps^7, polynomial in n of order 0 127, 16384, // C3[4], coeff of eps^6, polynomial in n of order 1 -43, 72, 8192, // C3[4], coeff of eps^5, polynomial in n of order 2 -7, -40, 28, 2048, // C3[4], coeff of eps^4, polynomial in n of order 3 -7, 20, -28, 14, 1024, // C3[5], coeff of eps^7, polynomial in n of order 0 99, 16384, // C3[5], coeff of eps^6, polynomial in n of order 1 -15, 9, 1024, // C3[5], coeff of eps^5, polynomial in n of order 2 75, -90, 42, 5120, // C3[6], coeff of eps^7, polynomial in n of order 0 99, 16384, // C3[6], coeff of eps^6, polynomial in n of order 1 -99, 44, 8192, // C3[7], coeff of eps^7, polynomial in n of order 0 429, 114688, }; #else #error "Bad value for GEOGRAPHICLIB_GEODESIC_ORDER" #endif static_assert(sizeof(coeff) / sizeof(real) == ((nC3_-1)*(nC3_*nC3_ + 7*nC3_ - 2*(nC3_/2)))/8, "Coefficient array size mismatch in C3coeff"); int o = 0, k = 0; for (int l = 1; l < nC3_; ++l) { // l is index of C3[l] for (int j = nC3_ - 1; j >= l; --j) { // coeff of eps^j int m = min(nC3_ - j - 1, j); // order of polynomial in n _cC3x[k++] = Math::polyval(m, coeff + o, _n) / coeff[o + m + 1]; o += m + 2; } } // Post condition: o == sizeof(coeff) / sizeof(real) && k == nC3x_ } void Geodesic::C4coeff() { // Generated by Maxima on 2015-05-05 18:08:13-04:00 #if GEOGRAPHICLIB_GEODESIC_ORDER == 3 static const real coeff[] = { // C4[0], coeff of eps^2, polynomial in n of order 0 -2, 105, // C4[0], coeff of eps^1, polynomial in n of order 1 16, -7, 35, // C4[0], coeff of eps^0, polynomial in n of order 2 8, -28, 70, 105, // C4[1], coeff of eps^2, polynomial in n of order 0 -2, 105, // C4[1], coeff of eps^1, polynomial in n of order 1 -16, 7, 315, // C4[2], coeff of eps^2, polynomial in n of order 0 4, 525, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 4 static const real coeff[] = { // C4[0], coeff of eps^3, polynomial in n of order 0 11, 315, // C4[0], coeff of eps^2, polynomial in n of order 1 -32, -6, 315, // C4[0], coeff of eps^1, polynomial in n of order 2 -32, 48, -21, 105, // C4[0], coeff of eps^0, polynomial in n of order 3 4, 24, -84, 210, 315, // C4[1], coeff of eps^3, polynomial in n of order 0 -1, 105, // C4[1], coeff of eps^2, polynomial in n of order 1 64, -18, 945, // C4[1], coeff of eps^1, polynomial in n of order 2 32, -48, 21, 945, // C4[2], coeff of eps^3, polynomial in n of order 0 -8, 1575, // C4[2], coeff of eps^2, polynomial in n of order 1 -32, 12, 1575, // C4[3], coeff of eps^3, polynomial in n of order 0 8, 2205, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 5 static const real coeff[] = { // C4[0], coeff of eps^4, polynomial in n of order 0 4, 1155, // C4[0], coeff of eps^3, polynomial in n of order 1 -368, 121, 3465, // C4[0], coeff of eps^2, polynomial in n of order 2 1088, -352, -66, 3465, // C4[0], coeff of eps^1, polynomial in n of order 3 48, -352, 528, -231, 1155, // C4[0], coeff of eps^0, polynomial in n of order 4 16, 44, 264, -924, 2310, 3465, // C4[1], coeff of eps^4, polynomial in n of order 0 4, 1155, // C4[1], coeff of eps^3, polynomial in n of order 1 80, -99, 10395, // C4[1], coeff of eps^2, polynomial in n of order 2 -896, 704, -198, 10395, // C4[1], coeff of eps^1, polynomial in n of order 3 -48, 352, -528, 231, 10395, // C4[2], coeff of eps^4, polynomial in n of order 0 -8, 1925, // C4[2], coeff of eps^3, polynomial in n of order 1 384, -88, 17325, // C4[2], coeff of eps^2, polynomial in n of order 2 320, -352, 132, 17325, // C4[3], coeff of eps^4, polynomial in n of order 0 -16, 8085, // C4[3], coeff of eps^3, polynomial in n of order 1 -256, 88, 24255, // C4[4], coeff of eps^4, polynomial in n of order 0 64, 31185, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 6 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, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 7 static const real coeff[] = { // C4[0], coeff of eps^6, polynomial in n of order 0 10, 9009, // C4[0], coeff of eps^5, polynomial in n of order 1 -464, 291, 45045, // C4[0], coeff of eps^4, polynomial in n of order 2 -4480, 1088, 156, 45045, // C4[0], coeff of eps^3, polynomial in n of order 3 10736, -224, -4784, 1573, 45045, // C4[0], coeff of eps^2, polynomial in n of order 4 1664, -10656, 14144, -4576, -858, 45045, // C4[0], coeff of eps^1, polynomial in n of order 5 16, 64, 624, -4576, 6864, -3003, 15015, // C4[0], coeff of eps^0, polynomial in n of order 6 56, 100, 208, 572, 3432, -12012, 30030, 45045, // C4[1], coeff of eps^6, polynomial in n of order 0 10, 9009, // C4[1], coeff of eps^5, polynomial in n of order 1 112, 15, 135135, // C4[1], coeff of eps^4, polynomial in n of order 2 3840, -2944, 468, 135135, // C4[1], coeff of eps^3, polynomial in n of order 3 -10704, 5792, 1040, -1287, 135135, // C4[1], coeff of eps^2, polynomial in n of order 4 -768, 5952, -11648, 9152, -2574, 135135, // C4[1], coeff of eps^1, polynomial in n of order 5 -16, -64, -624, 4576, -6864, 3003, 135135, // C4[2], coeff of eps^6, polynomial in n of order 0 -4, 25025, // C4[2], coeff of eps^5, polynomial in n of order 1 -1664, 168, 225225, // C4[2], coeff of eps^4, polynomial in n of order 2 1664, 1856, -936, 225225, // C4[2], coeff of eps^3, polynomial in n of order 3 6784, -8448, 4992, -1144, 225225, // C4[2], coeff of eps^2, polynomial in n of order 4 128, -1440, 4160, -4576, 1716, 225225, // C4[3], coeff of eps^6, polynomial in n of order 0 64, 315315, // C4[3], coeff of eps^5, polynomial in n of order 1 1792, -680, 315315, // C4[3], coeff of eps^4, polynomial in n of order 2 -2048, 1024, -208, 105105, // C4[3], coeff of eps^3, polynomial in n of order 3 -1792, 3584, -3328, 1144, 315315, // C4[4], coeff of eps^6, polynomial in n of order 0 -512, 405405, // C4[4], coeff of eps^5, polynomial in n of order 1 2048, -384, 405405, // C4[4], coeff of eps^4, polynomial in n of order 2 3072, -2560, 832, 405405, // C4[5], coeff of eps^6, polynomial in n of order 0 -256, 495495, // C4[5], coeff of eps^5, polynomial in n of order 1 -2048, 640, 495495, // C4[6], coeff of eps^6, polynomial in n of order 0 512, 585585, }; #elif GEOGRAPHICLIB_GEODESIC_ORDER == 8 static const real coeff[] = { // C4[0], coeff of eps^7, polynomial in n of order 0 193, 85085, // C4[0], coeff of eps^6, polynomial in n of order 1 4192, 850, 765765, // C4[0], coeff of eps^5, polynomial in n of order 2 20960, -7888, 4947, 765765, // C4[0], coeff of eps^4, polynomial in n of order 3 12480, -76160, 18496, 2652, 765765, // C4[0], coeff of eps^3, polynomial in n of order 4 -154048, 182512, -3808, -81328, 26741, 765765, // C4[0], coeff of eps^2, polynomial in n of order 5 3232, 28288, -181152, 240448, -77792, -14586, 765765, // C4[0], coeff of eps^1, polynomial in n of order 6 96, 272, 1088, 10608, -77792, 116688, -51051, 255255, // C4[0], coeff of eps^0, polynomial in n of order 7 588, 952, 1700, 3536, 9724, 58344, -204204, 510510, 765765, // C4[1], coeff of eps^7, polynomial in n of order 0 349, 2297295, // C4[1], coeff of eps^6, polynomial in n of order 1 -1472, 510, 459459, // C4[1], coeff of eps^5, polynomial in n of order 2 -39840, 1904, 255, 2297295, // C4[1], coeff of eps^4, polynomial in n of order 3 52608, 65280, -50048, 7956, 2297295, // C4[1], coeff of eps^3, polynomial in n of order 4 103744, -181968, 98464, 17680, -21879, 2297295, // C4[1], coeff of eps^2, polynomial in n of order 5 -1344, -13056, 101184, -198016, 155584, -43758, 2297295, // C4[1], coeff of eps^1, polynomial in n of order 6 -96, -272, -1088, -10608, 77792, -116688, 51051, 2297295, // C4[2], coeff of eps^7, polynomial in n of order 0 464, 1276275, // C4[2], coeff of eps^6, polynomial in n of order 1 -928, -612, 3828825, // C4[2], coeff of eps^5, polynomial in n of order 2 64256, -28288, 2856, 3828825, // C4[2], coeff of eps^4, polynomial in n of order 3 -126528, 28288, 31552, -15912, 3828825, // C4[2], coeff of eps^3, polynomial in n of order 4 -41472, 115328, -143616, 84864, -19448, 3828825, // C4[2], coeff of eps^2, polynomial in n of order 5 160, 2176, -24480, 70720, -77792, 29172, 3828825, // C4[3], coeff of eps^7, polynomial in n of order 0 -16, 97461, // C4[3], coeff of eps^6, polynomial in n of order 1 -16384, 1088, 5360355, // C4[3], coeff of eps^5, polynomial in n of order 2 -2560, 30464, -11560, 5360355, // C4[3], coeff of eps^4, polynomial in n of order 3 35840, -34816, 17408, -3536, 1786785, // C4[3], coeff of eps^3, polynomial in n of order 4 7168, -30464, 60928, -56576, 19448, 5360355, // C4[4], coeff of eps^7, polynomial in n of order 0 128, 2297295, // C4[4], coeff of eps^6, polynomial in n of order 1 26624, -8704, 6891885, // C4[4], coeff of eps^5, polynomial in n of order 2 -77824, 34816, -6528, 6891885, // C4[4], coeff of eps^4, polynomial in n of order 3 -32256, 52224, -43520, 14144, 6891885, // C4[5], coeff of eps^7, polynomial in n of order 0 -6784, 8423415, // C4[5], coeff of eps^6, polynomial in n of order 1 24576, -4352, 8423415, // C4[5], coeff of eps^5, polynomial in n of order 2 45056, -34816, 10880, 8423415, // C4[6], coeff of eps^7, polynomial in n of order 0 -1024, 3318315, // C4[6], coeff of eps^6, polynomial in n of order 1 -28672, 8704, 9954945, // C4[7], coeff of eps^7, polynomial in n of order 0 1024, 1640925, }; #else #error "Bad value for GEOGRAPHICLIB_GEODESIC_ORDER" #endif static_assert(sizeof(coeff) / sizeof(real) == (nC4_ * (nC4_ + 1) * (nC4_ + 5)) / 6, "Coefficient array size mismatch in C4coeff"); int o = 0, k = 0; for (int l = 0; l < nC4_; ++l) { // l is index of C4[l] for (int j = nC4_ - 1; j >= l; --j) { // coeff of eps^j int m = nC4_ - j - 1; // order of polynomial in n _cC4x[k++] = Math::polyval(m, coeff + o, _n) / coeff[o + m + 1]; o += m + 2; } } // Post condition: o == sizeof(coeff) / sizeof(real) && k == nC4x_ } } // namespace GeographicLib geosphere/src/TransverseMercator.h0000644000176200001440000002311215147425256017036 0ustar liggesusers/** * \file TransverseMercator.hpp * \brief Header for GeographicLib::TransverseMercator class * * Copyright (c) Charles Karney (2008-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #if !defined(GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP) #define GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP 1 #include "Constants.h" #include "TransverseMercatorExact.h" #if !defined(GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER) /** * The order of the series approximation used in TransverseMercator. * GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER can be set to any integer in [4, 8]. **********************************************************************/ # define GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER \ (GEOGRAPHICLIB_PRECISION == 2 ? 6 : \ (GEOGRAPHICLIB_PRECISION == 1 ? 4 : 8)) #endif namespace GeographicLib { /** * \brief Transverse Mercator projection * * This uses Krüger's method which evaluates the projection and its * inverse in terms of a series. See * - L. Krüger, * Konforme * Abbildung des Erdellipsoids in der Ebene (Conformal mapping of the * ellipsoidal earth to the plane), Royal Prussian Geodetic Institute, New * Series 52, 172 pp. (1912). * - C. F. F. Karney, * * Transverse Mercator with an accuracy of a few nanometers, * J. Geodesy 85(8), 475--485 (Aug. 2011); * preprint * arXiv:1002.1417. * * Krüger's method has been extended from 4th to 6th order. The maximum * error is 5 nm (5 nanometers), ground distance, for all positions within 35 * degrees of the central meridian. The error in the convergence is 2 * × 10−15" and the relative error in the scale * is 6 × 10−12%%. See Sec. 4 of * arXiv:1002.1417 for details. * The speed penalty in going to 6th order is only about 1%. * * There's a singularity in the projection at φ = 0°, λ * − λ0 = ±(1 − \e e)90° (≈ * ±82.6° for the WGS84 ellipsoid), where \e e is the * eccentricity. Beyond this point, the series ceases to converge and the * results from this method will be garbage. To be on the safe side, don't * use this method if the angular distance from the central meridian exceeds * (1 − 2e)90° (≈ 75° for the WGS84 ellipsoid) * * TransverseMercatorExact is an alternative implementation of the projection * using exact formulas which yield accurate (to 8 nm) results over the * entire ellipsoid. This formulation is accessible in this class by calling * the constructor with \e exact = true. * * The ellipsoid parameters and the central scale are set in the constructor. * The central meridian (which is a trivial shift of the longitude) is * specified as the \e lon0 argument of the TransverseMercator::Forward and * TransverseMercator::Reverse functions. The latitude of origin is taken to * be the equator. There is no provision in this class for specifying a * false easting or false northing or a different latitude of origin. * However these are can be simply included by the calling function. For * example, the UTMUPS class applies the false easting and false northing for * the UTM projections. A more complicated example is the British National * Grid ( * EPSG:7405) which requires the use of a latitude of origin. This is * implemented by the GeographicLib::OSGB class. * * This class also returns the meridian convergence \e gamma and scale \e k. * The meridian convergence is the bearing of grid north (the \e y axis) * measured clockwise from true north. * * See TransverseMercator.cpp for more information on the implementation. * * See \ref transversemercator for a discussion of this projection. * * Example of use: * \include example-TransverseMercator.cpp * * TransverseMercatorProj is a * command-line utility providing access to the functionality of this class. **********************************************************************/ class GEOGRAPHICLIB_EXPORT TransverseMercator { private: typedef Math::real real; static const int maxpow_ = GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER; static const int numit_ = 5; real _a, _f, _k0; bool _exact; real _e2, _es, _e2m, _c, _n; // _alp[0] and _bet[0] unused real _a1, _b1, _alp[maxpow_ + 1], _bet[maxpow_ + 1]; TransverseMercatorExact _tmexact; public: /** * Constructor for an ellipsoid with * * @param[in] a equatorial radius (meters). * @param[in] f flattening of ellipsoid. Setting \e f = 0 gives a sphere. * Negative \e f gives a prolate ellipsoid. * @param[in] k0 central scale factor. * @param[in] exact if true use exact formulation in terms of elliptic * functions instead of series expansions (default false). * @param[in] extendp use extended domain (default false); should only be * used if \e exact = true; * @exception GeographicErr if \e a, (1 − \e f) \e a, or \e k0 is * not positive. * * With \e exact = true, this class delegates the calculations to the * TransverseMercatorExact classes which compute the projection in terms of * elliptic functions. **********************************************************************/ TransverseMercator(real a, real f, real k0, bool exact = false, bool extendp = false); /** * Forward projection, from geographic to transverse Mercator. * * @param[in] lon0 central meridian of the projection (degrees). * @param[in] lat latitude of point (degrees). * @param[in] lon longitude of point (degrees). * @param[out] x easting of point (meters). * @param[out] y northing of point (meters). * @param[out] gamma meridian convergence at point (degrees). * @param[out] k scale of projection at point. * * No false easting or northing is added. \e lat should be in the range * [−90°, 90°]. **********************************************************************/ void Forward(real lon0, real lat, real lon, real& x, real& y, real& gamma, real& k) const; /** * Reverse projection, from transverse Mercator to geographic. * * @param[in] lon0 central meridian of the projection (degrees). * @param[in] x easting of point (meters). * @param[in] y northing of point (meters). * @param[out] lat latitude of point (degrees). * @param[out] lon longitude of point (degrees). * @param[out] gamma meridian convergence at point (degrees). * @param[out] k scale of projection at point. * * No false easting or northing is added. The value of \e lon returned is * in the range [−180°, 180°]. **********************************************************************/ void Reverse(real lon0, real x, real y, real& lat, real& lon, real& gamma, real& k) const; /** * TransverseMercator::Forward without returning the convergence and scale. **********************************************************************/ void Forward(real lon0, real lat, real lon, real& x, real& y) const { real gamma, k; Forward(lon0, lat, lon, x, y, gamma, k); } /** * TransverseMercator::Reverse without returning the convergence and scale. **********************************************************************/ void Reverse(real lon0, real x, real y, real& lat, real& lon) const { real gamma, k; Reverse(lon0, x, y, lat, lon, gamma, k); } /** \name Inspector functions **********************************************************************/ ///@{ /** * @return \e a the equatorial radius of the ellipsoid (meters). This is * the value used in the constructor. **********************************************************************/ Math::real EquatorialRadius() const { return _a; } /** * @return \e f the flattening of the ellipsoid. This is the value used in * the constructor. **********************************************************************/ Math::real Flattening() const { return _f; } /** * @return \e k0 central scale for the projection. This is the value of \e * k0 used in the constructor and is the scale on the central meridian. **********************************************************************/ Math::real CentralScale() const { return _k0; } /** * @return \e exact whether the exact formulation is used. This is the * value used in the constructor. **********************************************************************/ bool Exact() const { return _exact; } ///@} /** * A global instantiation of TransverseMercator with the WGS84 ellipsoid * and the UTM scale factor. However, unlike UTM, no false easting or * northing is added. **********************************************************************/ static const TransverseMercator& UTM(); }; } // namespace GeographicLib #endif // GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP geosphere/src/a_util.c0000644000176200001440000000116115147425256014455 0ustar liggesusers#include #ifndef M_PI #define M_PI (3.1415926535897932384626433) #endif #ifndef M_2PI #define M_2PI (3.1415926535897932384626433 * 2.0) #endif #ifndef M_PI_2 #define M_PI_2 (3.1415926535897932384626433 / 2) #endif 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/Config.h0000644000176200001440000000062615147425256014417 0ustar liggesusers// This will be overwritten by ./configure #define GEOGRAPHICLIB_VERSION_STRING "2.7" #define GEOGRAPHICLIB_VERSION_MAJOR 2 #define GEOGRAPHICLIB_VERSION_MINOR 7 #define GEOGRAPHICLIB_VERSION_PATCH 0 // Undefine HAVE_LONG_DOUBLE if this type is unknown to the compiler #define GEOGRAPHICLIB_HAVE_LONG_DOUBLE 1 // Define WORDS_BIGENDIAN to be 1 if your machine is big endian /* #undef WORDS_BIGENDIAN */ geosphere/src/AuxLatitude.cpp0000644000176200001440000015347415147425256016010 0ustar liggesusers/** * \file AuxLatitude.cpp * \brief Implementation for the GeographicLib::AuxLatitude class. * * This file is an implementation of the methods described in * - C. F. F. Karney, * * On auxiliary latitudes, * Survey Review 56(395), 165--180 (2024); * preprint * arXiv:2212.05818. * . * Copyright (c) Charles Karney (2022-2023) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include "AuxLatitude.h" #include "EllipticFunction.h" namespace GeographicLib { using namespace std; AuxLatitude::AuxLatitude(real a, real f) : tol_( sqrt(numeric_limits::epsilon()) ) , bmin_( log2(numeric_limits::min()) ) , bmax_( log2(numeric_limits::max()) ) , _a(a) , _b(_a * (1 - f)) , _f( f ) , _fm1( 1 - _f ) , _e2( _f * (2 - _f) ) , _e2m1( _fm1 * _fm1 ) , _e12( _e2/(1 - _e2) ) , _e12p1( 1 / _e2m1 ) , _n( _f/(2 - _f) ) , _e( sqrt(fabs(_e2)) ) , _e1( sqrt(fabs(_e12)) ) , _n2( _n * _n ) , _q( _e12p1 + (_f == 0 ? 1 : (_f > 0 ? asinh(_e1) : atan(_e)) / _e) ) { if (!(isfinite(_a) && _a > 0)) throw GeographicErr("Equatorial radius is not positive"); if (!(isfinite(_b) && _b > 0)) throw GeographicErr("Polar semiaxis is not positive"); fill(_c, _c + Lmax * AUXNUMBER * AUXNUMBER, numeric_limits::quiet_NaN()); } /// \cond SKIP AuxLatitude::AuxLatitude(const pair& axes) : tol_( sqrt(numeric_limits::epsilon()) ) , bmin_( log2(numeric_limits::min()) ) , bmax_( log2(numeric_limits::max()) ) , _a(axes.first) , _b(axes.second) , _f( (_a - _b) / _a ) , _fm1( _b / _a ) , _e2( ((_a - _b) * (_a + _b)) / (_a * _a) ) , _e2m1( (_b * _b) / (_a * _a) ) , _e12( ((_a - _b) * (_a + _b)) / (_b * _b) ) , _e12p1( (_a * _a) / (_b * _b) ) , _n( (_a - _b) / (_a + _b) ) , _e( sqrt(fabs(_a - _b) * (_a + _b)) / _a ) , _e1( sqrt(fabs(_a - _b) * (_a + _b)) / _b ) , _n2( _n * _n ) , _q( _e12p1 + (_f == 0 ? 1 : (_f > 0 ? asinh(_e1) : atan(_e)) / _e) ) { if (!(isfinite(_a) && _a > 0)) throw GeographicErr("Equatorial radius is not positive"); if (!(isfinite(_b) && _b > 0)) throw GeographicErr("Polar semiaxis is not positive"); fill(_c, _c + Lmax * AUXNUMBER * AUXNUMBER, numeric_limits::quiet_NaN()); } /// \endcond const AuxLatitude& AuxLatitude::WGS84() { static const AuxLatitude wgs84(Constants::WGS84_a(), Constants::WGS84_f()); return wgs84; } AuxAngle AuxLatitude::Parametric(const AuxAngle& phi, real* diff) const { if (diff) *diff = _fm1; return AuxAngle(phi.y() * _fm1, phi.x()); } AuxAngle AuxLatitude::Geocentric(const AuxAngle& phi, real* diff) const { if (diff) *diff = _e2m1; return AuxAngle(phi.y() * _e2m1, phi.x()); } AuxAngle AuxLatitude::Rectifying(const AuxAngle& phi, real* diff) const { AuxAngle beta(Parametric(phi).normalized()); real sbeta = fabs(beta.y()), cbeta = fabs(beta.x()); real a = 1, b = _fm1, ka = _e2, kb = -_e12, ka1 = _e2m1, kb1 = _e12p1, smu, cmu, mr; if (_f < 0) { swap(a, b); swap(ka, kb); swap(ka1, kb1); swap(sbeta, cbeta); } // now a,b = larger/smaller semiaxis // beta now measured from larger semiaxis // kb,ka = modulus-squared for distance from beta = 0,pi/2 // NB kb <= 0; 0 <= ka <= 1 // sa = b*E(beta,sqrt(kb)), sb = a*E(beta',sqrt(ka)) // 1 - ka * (1 - sb2) = 1 -ka + ka*sb2 real sb2 = sbeta * sbeta, cb2 = cbeta * cbeta, db2 = 1 - kb * sb2, da2 = ka1 + ka * sb2, // DLMF Eq. 19.25.9 sa = b * sbeta * ( EllipticFunction::RF(cb2, db2, 1) - kb * sb2 * EllipticFunction::RD(cb2, db2, 1)/3 ), // DLMF Eq. 19.25.10 with complementary angles sb = a * cbeta * ( ka1 * EllipticFunction::RF(sb2, da2, 1) + ka * ka1 * cb2 * EllipticFunction::RD(sb2, 1, da2)/3 + ka * sbeta / sqrt(da2) ); // sa + sb = 2*EllipticFunction::RG(a*a, b*b) = a*E(e) = b*E(i*e') // mr = a*E(e)*(2/pi) = b*E(i*e')*(2/pi) mr = (2 * (sa + sb)) / Math::pi(); smu = sin(sa / mr); cmu = sin(sb / mr); if (_f < 0) { swap(smu, cmu); swap(a, b); } // mu is normalized AuxAngle mu(AuxAngle(smu, cmu).copyquadrant(phi)); if (diff) { real cphi = phi.normalized().x(), tphi = phi.tan(); if (!isinf(tphi)) { cmu = mu.x(); cbeta = beta.x(); *diff = _fm1 * b/mr * Math::sq(cbeta / cmu) * (cbeta / cphi); } else *diff = _fm1 * mr/a; } return mu; } AuxAngle AuxLatitude::Conformal(const AuxAngle& phi, real* diff) const { real tphi = fabs(phi.tan()), tchi = tphi; if ( !( !isfinite(tphi) || tphi == 0 || _f == 0 ) ) { real scphi = sc(tphi), sig = sinh(_e2 * atanhee(tphi) ), scsig = sc(sig); if (_f <= 0) { tchi = tphi * scsig - sig * scphi; } else { // The general expression for tchi is // tphi * scsig - sig * scphi // This involves cancellation if f > 0, so change to // (tphi - sig) * (tphi + sig) / (tphi * scsig + sig * scphi) // To control overflow, write as (sigtphi = sig / tphi) // (tphi - sig) * (1 + sigtphi) / (scsig + sigtphi * scphi) real sigtphi = sig / tphi, tphimsig; if (sig < tphi / 2) tphimsig = tphi - sig; else { // Still have possibly dangerous cancellation in tphi - sig. // // Write tphi - sig = (1 - e) * Dg(1, e) // Dg(x, y) = (g(x) - g(y)) / (x - y) // g(x) = sinh(x * atanh(sphi * x)) // Note sinh(atanh(sphi)) = tphi // Turn the crank on divided differences, substitute // sphi = tphi/sc(tphi) // atanh(x) = asinh(x/sqrt(1-x^2)) real em1 = _e2m1 / (1 + _e), // 1 - e atanhs = asinh(tphi), // atanh(sphi) scbeta = sc(_fm1 * tphi), // sec(beta) scphibeta = sc(tphi) / scbeta, // sec(phi)/sec(beta) atanhes = asinh(_e * tphi / scbeta), // atanh(e * sphi) t1 = (atanhs - _e * atanhes)/2, t2 = asinh(em1 * (tphi * scphibeta)) / em1, Dg = cosh((atanhs + _e * atanhes)/2) * (sinh(t1) / t1) * ((atanhs + atanhes)/2 + (1 + _e)/2 * t2); tphimsig = em1 * Dg; // tphi - sig } tchi = tphimsig * (1 + sigtphi) / (scsig + sigtphi * scphi); } } AuxAngle chi(AuxAngle(tchi).copyquadrant(phi)); if (diff) { if (!isinf(tphi)) { real cchi = chi.normalized().x(), cphi = phi.normalized().x(), cbeta = Parametric(phi).normalized().x(); *diff = _e2m1 * (cbeta / cchi) * (cbeta / cphi); } else { real ss = _f > 0 ? sinh(_e * asinh(_e1)) : sinh(-_e * atan(_e)); *diff = _f > 0 ? 1/( sc(ss) + ss ) : sc(ss) - ss; } } return chi; } AuxAngle AuxLatitude::Authalic(const AuxAngle& phi, real* diff) const { real tphi = fabs(phi.tan()); AuxAngle xi(phi), phin(phi.normalized()); if ( !( !isfinite(tphi) || tphi == 0 || _f == 0 ) ) { real qv = q(tphi), Dqp = Dq(tphi), Dqm = (_q + qv) / (1 + fabs(phin.y())); // Dq(-tphi) xi = AuxAngle( copysign(qv, phi.y()), phin.x() * sqrt(Dqp * Dqm) ); } if (diff) { if (!isnan(tphi)) { real cbeta = Parametric(phi).normalized().x(), cxi = xi.normalized().x(); *diff = (2/_q) * Math::sq(cbeta / cxi) * (cbeta / cxi) * (cbeta / phin.x()); } else *diff = _e2m1 * sqrt(_q/2); } return xi; } AuxAngle AuxLatitude::ToAuxiliary(int auxout, const AuxAngle& phi, real* diff) const { switch (auxout) { case GEOGRAPHIC: if (diff) *diff = 1; return phi; break; case PARAMETRIC: return Parametric(phi, diff); break; case GEOCENTRIC: return Geocentric(phi, diff); break; case RECTIFYING: return Rectifying(phi, diff); break; case CONFORMAL : return Conformal (phi, diff); break; case AUTHALIC : return Authalic (phi, diff); break; default: if (diff) *diff = numeric_limits::quiet_NaN(); return AuxAngle::NaN(); break; } } AuxAngle AuxLatitude::FromAuxiliary(int auxin, const AuxAngle& zeta, int* niter) const { int n = 0; if (niter) *niter = n; real tphi = _fm1; switch (auxin) { case GEOGRAPHIC: return zeta; break; // case PARAMETRIC: break; case PARAMETRIC: return AuxAngle(zeta.y() / _fm1, zeta.x()); break; // case GEOCENTRIC: tphi *= _fm1 ; break; case GEOCENTRIC: return AuxAngle(zeta.y() / _e2m1, zeta.x()); break; case RECTIFYING: tphi *= sqrt(_fm1); break; case CONFORMAL : tphi *= _fm1 ; break; case AUTHALIC : tphi *= cbrt(_fm1); break; default: return AuxAngle::NaN(); break; } // Drop through to solution by Newton's method real tzeta = fabs(zeta.tan()), ltzeta = log2(tzeta); if (!isfinite(ltzeta)) return zeta; tphi = tzeta / tphi; real ltphi = log2(tphi), bmin = fmin(ltphi, bmin_), bmax = fmax(ltphi, bmax_); for (int sign = 0, osign = 0, ntrip = 0; n < numit_;) { ++n; real diff; AuxAngle zeta1(ToAuxiliary(auxin, AuxAngle(tphi), &diff)); real tzeta1 = zeta1.tan(), ltzeta1 = log2(tzeta1); // Convert derivative from dtan(zeta)/dtan(phi) to // dlog(tan(zeta))/dlog(tan(phi)) diff *= tphi/tzeta1; osign = sign; if (tzeta1 == tzeta) break; else if (tzeta1 > tzeta) { sign = 1; bmax = ltphi; } else { sign = -1; bmin = ltphi; } real dltphi = -(ltzeta1 - ltzeta) / diff; ltphi += dltphi; tphi = exp2(ltphi); if (!(fabs(dltphi) >= tol_)) { ++n; // Final Newton iteration without the logs zeta1 = ToAuxiliary(auxin, AuxAngle(tphi), &diff); tphi -= (zeta1.tan() - tzeta) / diff; break; } if ((sign * osign < 0 && n - ntrip > 2) || ltphi >= bmax || ltphi <= bmin) { sign = 0; ntrip = n; ltphi = (bmin + bmax) / 2; tphi = exp2(ltphi); } } if (niter) *niter = n; return AuxAngle(tphi).copyquadrant(zeta); } AuxAngle AuxLatitude::Convert(int auxin, int auxout, const AuxAngle& zeta, bool exact) const { int k = ind(auxout, auxin); if (k < 0) return AuxAngle::NaN(); if (auxin == auxout) return zeta; if (exact) { if (auxin < 3 && auxout < 3) // Need extra real because, since C++11, pow(float, int) returns double return AuxAngle(zeta.y() * real(pow(_fm1, auxout - auxin)), zeta.x()); else return ToAuxiliary(auxout, FromAuxiliary(auxin, zeta)); } else { if ( isnan(_c[Lmax * (k + 1) - 1]) ) fillcoeff(auxin, auxout, k); AuxAngle zetan(zeta.normalized()); real d = Clenshaw(true, zetan.y(), zetan.x(), _c + Lmax * k, Lmax); zetan += AuxAngle::radians(d); return zetan; } } Math::real AuxLatitude::Convert(int auxin, int auxout, real zeta, bool exact) const { AuxAngle zetaa(AuxAngle::degrees(zeta)); real m = round((zeta - zetaa.degrees()) / Math::td); return Math::td * m + Convert(auxin, auxout, zetaa, exact).degrees(); } Math::real AuxLatitude::RectifyingRadius(bool exact) const { if (exact) { return EllipticFunction::RG(Math::sq(_a), Math::sq(_b)) * 4 / Math::pi(); } else { // Maxima code for these coefficients: // df[i]:=if i<0 then df[i+2]/(i+2) else i!!$ // R(Lmax):=sum((df[2*j-3]/df[2*j])^2*n^(2*j),j,0,floor(Lmax/2))$ // cf(Lmax):=block([t:R(Lmax)], // t:makelist(coeff(t,n,2*(floor(Lmax/2)-j)),j,0,floor(Lmax/2)), // map(lambda([x],num(x)/ // (if denom(x) = 1 then 1 else real(denom(x)))),t))$ #if GEOGRAPHICLIB_AUXLATITUDE_ORDER == 4 static const real coeff[] = {1/real(64), 1/real(4), 1}; #elif GEOGRAPHICLIB_AUXLATITUDE_ORDER == 6 static const real coeff[] = {1/real(256), 1/real(64), 1/real(4), 1}; #elif GEOGRAPHICLIB_AUXLATITUDE_ORDER == 8 static const real coeff[] = { 25/real(16384), 1/real(256), 1/real(64), 1/real(4), 1 }; #else #error "Unsupported value for GEOGRAPHICLIB_AUXLATITUDE_ORDER" #endif int m = Lmax/2; return (_a + _b) / 2 * Math::polyval(m, coeff, _n2); } } Math::real AuxLatitude::AuthalicRadiusSquared(bool exact) const { if (exact) { return Math::sq(_b) * _q / 2; } else { // Using a * (a + b) / 2 as the multiplying factor leads to a rapidly // converging series in n. Of course, using this series isn't really // necessary, since the exact expression is simple to evaluate. However, // we do it for consistency with RectifyingRadius; and, presumably, the // roundoff error is smaller compared to that for the exact expression. // // Maxima code for these coefficients: // c2:subst(e=2*sqrt(n)/(1+n), // (atanh(e)/e * (1-n)^2 + (1+n)^2)/(2*(1+n)))$ // cf(Lmax):=block([t:expand(ratdisrep(taylor(c2,n,0,Lmax)))], // t:makelist(coeff(t,n,Lmax-j),j,0,Lmax), // map(lambda([x],num(x)/ // (if denom(x) = 1 then 1 else real(denom(x)))),t))$ // N.B. Coeff of n^j = 1 for j = 0 // -1/3 for j = 1 // 4*(2*j-5)!!/(2*j+1)!! for j > 1 #if GEOGRAPHICLIB_AUXLATITUDE_ORDER == 4 static const real coeff[] = { 4/real(315), 4/real(105), 4/real(15), -1/real(3), 1 }; #elif GEOGRAPHICLIB_AUXLATITUDE_ORDER == 6 static const real coeff[] = { 4/real(1287), 4/real(693), 4/real(315), 4/real(105), 4/real(15), -1/real(3), 1 }; #elif GEOGRAPHICLIB_AUXLATITUDE_ORDER == 8 static const real coeff[] = { 4/real(3315), 4/real(2145), 4/real(1287), 4/real(693), 4/real(315), 4/real(105), 4/real(15), -1/real(3), 1 }; #else #error "Unsupported value for GEOGRAPHICLIB_AUXLATITUDE_ORDER" #endif int m = Lmax; return _a * (_a + _b) / 2 * Math::polyval(m, coeff, _n); } } /// \cond SKIP Math::real AuxLatitude::atanhee(real tphi) const { real s = _f <= 0 ? sn(tphi) : sn(_fm1 * tphi); return _f == 0 ? s : // atanh(e * sphi) = asinh(e' * sbeta) (_f < 0 ? atan( _e * s ) : asinh( _e1 * s )) / _e; } /// \endcond Math::real AuxLatitude::q(real tphi) const { real scbeta = sc(_fm1 * tphi); return atanhee(tphi) + (tphi / scbeta) * (sc(tphi) / scbeta); } Math::real AuxLatitude::Dq(real tphi) const { real scphi = sc(tphi), sphi = sn(tphi), // d = (1 - sphi) can underflow to zero for large tphi d = tphi > 0 ? 1 / (scphi * scphi * (1 + sphi)) : 1 - sphi; if (tphi <= 0) // This branch is not reached; this case is open-coded in Authalic. return (_q - q(tphi)) / d; else if (d == 0) return 2 / Math::sq(_e2m1); else { // General expression for Dq(1, sphi) is // atanh(e * d / (1 - e2 * sphi)) / (e * d) + // (1 + e2 * sphi) / ((1 - e2 * sphi * sphi) * e2m1); // atanh( e * d / (1 - e2 * sphi)) // = atanh( e * d * scphi/(scphi - e2 * tphi)) // = real scbeta = sc(_fm1 * tphi); return (_f == 0 ? 1 : (_f > 0 ? asinh(_e1 * d * scphi / scbeta) : atan(_e * d / (1 - _e2 * sphi))) / (_e * d) ) + (_f > 0 ? ((scphi + _e2 * tphi) / (_e2m1 * scbeta)) * (scphi / scbeta) : (1 + _e2 * sphi) / ((1 - _e2 * sphi*sphi) * _e2m1) ); } } /// \cond SKIP void AuxLatitude::fillcoeff(int auxin, int auxout, int k) const { #if GEOGRAPHICLIB_AUXLATITUDE_ORDER == 4 static const real coeffs[] = { // C[phi,phi] skipped // C[phi,beta]; even coeffs only 0, 1, 0, 1/real(2), 1/real(3), 1/real(4), // C[phi,theta]; even coeffs only -2, 2, -4, 2, 8/real(3), 4, // C[phi,mu]; even coeffs only -27/real(32), 3/real(2), -55/real(32), 21/real(16), 151/real(96), 1097/real(512), // C[phi,chi] 116/real(45), -2, -2/real(3), 2, -227/real(45), -8/real(5), 7/real(3), -136/real(35), 56/real(15), 4279/real(630), // C[phi,xi] -2582/real(14175), -16/real(35), 4/real(45), 4/real(3), -11966/real(14175), 152/real(945), 46/real(45), 3802/real(14175), 3044/real(2835), 6059/real(4725), // C[beta,phi]; even coeffs only 0, -1, 0, 1/real(2), -1/real(3), 1/real(4), // C[beta,beta] skipped // C[beta,theta]; even coeffs only 0, 1, 0, 1/real(2), 1/real(3), 1/real(4), // C[beta,mu]; even coeffs only -9/real(32), 1/real(2), -37/real(96), 5/real(16), 29/real(96), 539/real(1536), // C[beta,chi] 38/real(45), -1/real(3), -2/real(3), 1, -7/real(9), -14/real(15), 5/real(6), -34/real(21), 16/real(15), 2069/real(1260), // C[beta,xi] -1082/real(14175), -46/real(315), 4/real(45), 1/real(3), -338/real(2025), 68/real(945), 17/real(90), 1102/real(14175), 461/real(2835), 3161/real(18900), // C[theta,phi]; even coeffs only 2, -2, -4, 2, -8/real(3), 4, // C[theta,beta]; even coeffs only 0, -1, 0, 1/real(2), -1/real(3), 1/real(4), // C[theta,theta] skipped // C[theta,mu]; even coeffs only -23/real(32), -1/real(2), -5/real(96), 5/real(16), 1/real(32), 283/real(1536), // C[theta,chi] 4/real(9), -2/real(3), -2/real(3), 0, -23/real(45), -4/real(15), 1/real(3), -24/real(35), 2/real(5), 83/real(126), // C[theta,xi] -2102/real(14175), -158/real(315), 4/real(45), -2/real(3), 934/real(14175), -16/real(945), 16/real(45), 922/real(14175), -232/real(2835), 719/real(4725), // C[mu,phi]; even coeffs only 9/real(16), -3/real(2), -15/real(32), 15/real(16), -35/real(48), 315/real(512), // C[mu,beta]; even coeffs only 3/real(16), -1/real(2), 1/real(32), -1/real(16), -1/real(48), -5/real(512), // C[mu,theta]; even coeffs only 13/real(16), 1/real(2), 33/real(32), -1/real(16), -5/real(16), -261/real(512), // C[mu,mu] skipped // C[mu,chi] 41/real(180), 5/real(16), -2/real(3), 1/real(2), 557/real(1440), -3/real(5), 13/real(48), -103/real(140), 61/real(240), 49561/real(161280), // C[mu,xi] -1609/real(28350), 121/real(1680), 4/real(45), -1/real(6), 16463/real(453600), 26/real(945), -29/real(720), 449/real(28350), -1003/real(45360), -40457/real(2419200), // C[chi,phi] -82/real(45), 4/real(3), 2/real(3), -2, -13/real(9), -16/real(15), 5/real(3), 34/real(21), -26/real(15), 1237/real(630), // C[chi,beta] -16/real(45), 0, 2/real(3), -1, 19/real(45), -2/real(5), 1/real(6), 16/real(105), -1/real(15), 17/real(1260), // C[chi,theta] -2/real(9), 2/real(3), 2/real(3), 0, 43/real(45), 4/real(15), -1/real(3), 2/real(105), -2/real(5), -55/real(126), // C[chi,mu] 1/real(360), -37/real(96), 2/real(3), -1/real(2), 437/real(1440), -1/real(15), -1/real(48), 37/real(840), -17/real(480), -4397/real(161280), // C[chi,chi] skipped // C[chi,xi] -2312/real(14175), -88/real(315), 34/real(45), -2/real(3), 6079/real(14175), -184/real(945), 1/real(45), 772/real(14175), -106/real(2835), -167/real(9450), // C[xi,phi] 538/real(4725), 88/real(315), -4/real(45), -4/real(3), -2482/real(14175), 8/real(105), 34/real(45), -898/real(14175), -1532/real(2835), 6007/real(14175), // C[xi,beta] 34/real(675), 32/real(315), -4/real(45), -1/real(3), 74/real(2025), -4/real(315), -7/real(90), 2/real(14175), -83/real(2835), -797/real(56700), // C[xi,theta] 778/real(4725), 62/real(105), -4/real(45), 2/real(3), 12338/real(14175), -32/real(315), 4/real(45), -1618/real(14175), -524/real(2835), -5933/real(14175), // C[xi,mu] 1297/real(18900), -817/real(10080), -4/real(45), 1/real(6), -29609/real(453600), -2/real(35), 49/real(720), -2917/real(56700), 4463/real(90720), 331799/real(7257600), // C[xi,chi] 2458/real(4725), 46/real(315), -34/real(45), 2/real(3), 3413/real(14175), -256/real(315), 19/real(45), -15958/real(14175), 248/real(567), 16049/real(28350), // C[xi,xi] skipped }; static const int ptrs[] = { 0, 0, 6, 12, 18, 28, 38, 44, 44, 50, 56, 66, 76, 82, 88, 88, 94, 104, 114, 120, 126, 132, 132, 142, 152, 162, 172, 182, 192, 192, 202, 212, 222, 232, 242, 252, 252, }; #elif GEOGRAPHICLIB_AUXLATITUDE_ORDER == 6 static const real coeffs[] = { // C[phi,phi] skipped // C[phi,beta]; even coeffs only 0, 0, 1, 0, 0, 1/real(2), 0, 1/real(3), 0, 1/real(4), 1/real(5), 1/real(6), // C[phi,theta]; even coeffs only 2, -2, 2, 6, -4, 2, -8, 8/real(3), -16, 4, 32/real(5), 32/real(3), // C[phi,mu]; even coeffs only 269/real(512), -27/real(32), 3/real(2), 6759/real(4096), -55/real(32), 21/real(16), -417/real(128), 151/real(96), -15543/real(2560), 1097/real(512), 8011/real(2560), 293393/real(61440), // C[phi,chi] -2854/real(675), 26/real(45), 116/real(45), -2, -2/real(3), 2, 2323/real(945), 2704/real(315), -227/real(45), -8/real(5), 7/real(3), 73814/real(2835), -1262/real(105), -136/real(35), 56/real(15), -399572/real(14175), -332/real(35), 4279/real(630), -144838/real(6237), 4174/real(315), 601676/real(22275), // C[phi,xi] 28112932/real(212837625), 60136/real(467775), -2582/real(14175), -16/real(35), 4/real(45), 4/real(3), 251310128/real(638512875), -21016/real(51975), -11966/real(14175), 152/real(945), 46/real(45), -8797648/real(10945935), -94388/real(66825), 3802/real(14175), 3044/real(2835), -1472637812/real(638512875), 41072/real(93555), 6059/real(4725), 455935736/real(638512875), 768272/real(467775), 4210684958LL/real(1915538625), // C[beta,phi]; even coeffs only 0, 0, -1, 0, 0, 1/real(2), 0, -1/real(3), 0, 1/real(4), -1/real(5), 1/real(6), // C[beta,beta] skipped // C[beta,theta]; even coeffs only 0, 0, 1, 0, 0, 1/real(2), 0, 1/real(3), 0, 1/real(4), 1/real(5), 1/real(6), // C[beta,mu]; even coeffs only 205/real(1536), -9/real(32), 1/real(2), 1335/real(4096), -37/real(96), 5/real(16), -75/real(128), 29/real(96), -2391/real(2560), 539/real(1536), 3467/real(7680), 38081/real(61440), // C[beta,chi] -3118/real(4725), -1/real(3), 38/real(45), -1/real(3), -2/real(3), 1, -247/real(270), 50/real(21), -7/real(9), -14/real(15), 5/real(6), 17564/real(2835), -5/real(3), -34/real(21), 16/real(15), -49877/real(14175), -28/real(9), 2069/real(1260), -28244/real(4455), 883/real(315), 797222/real(155925), // C[beta,xi] 7947332/real(212837625), 11824/real(467775), -1082/real(14175), -46/real(315), 4/real(45), 1/real(3), 39946703/real(638512875), -16672/real(155925), -338/real(2025), 68/real(945), 17/real(90), -255454/real(1563705), -101069/real(467775), 1102/real(14175), 461/real(2835), -189032762/real(638512875), 1786/real(18711), 3161/real(18900), 80274086/real(638512875), 88868/real(467775), 880980241/real(3831077250LL), // C[theta,phi]; even coeffs only -2, 2, -2, 6, -4, 2, 8, -8/real(3), -16, 4, -32/real(5), 32/real(3), // C[theta,beta]; even coeffs only 0, 0, -1, 0, 0, 1/real(2), 0, -1/real(3), 0, 1/real(4), -1/real(5), 1/real(6), // C[theta,theta] skipped // C[theta,mu]; even coeffs only 499/real(1536), -23/real(32), -1/real(2), 6565/real(12288), -5/real(96), 5/real(16), -77/real(128), 1/real(32), -4037/real(7680), 283/real(1536), 1301/real(7680), 17089/real(61440), // C[theta,chi] -3658/real(4725), 2/real(9), 4/real(9), -2/real(3), -2/real(3), 0, 61/real(135), 68/real(45), -23/real(45), -4/real(15), 1/real(3), 9446/real(2835), -46/real(35), -24/real(35), 2/real(5), -34712/real(14175), -80/real(63), 83/real(126), -2362/real(891), 52/real(45), 335882/real(155925), // C[theta,xi] 216932/real(2627625), 109042/real(467775), -2102/real(14175), -158/real(315), 4/real(45), -2/real(3), 117952358/real(638512875), -7256/real(155925), 934/real(14175), -16/real(945), 16/real(45), -7391576/real(54729675), -25286/real(66825), 922/real(14175), -232/real(2835), -67048172/real(638512875), 268/real(18711), 719/real(4725), 46774256/real(638512875), 14354/real(467775), 253129538/real(1915538625), // C[mu,phi]; even coeffs only -3/real(32), 9/real(16), -3/real(2), 135/real(2048), -15/real(32), 15/real(16), 105/real(256), -35/real(48), -189/real(512), 315/real(512), -693/real(1280), 1001/real(2048), // C[mu,beta]; even coeffs only -1/real(32), 3/real(16), -1/real(2), -9/real(2048), 1/real(32), -1/real(16), 3/real(256), -1/real(48), 3/real(512), -5/real(512), -7/real(1280), -7/real(2048), // C[mu,theta]; even coeffs only -15/real(32), 13/real(16), 1/real(2), -1673/real(2048), 33/real(32), -1/real(16), 349/real(256), -5/real(16), 963/real(512), -261/real(512), -921/real(1280), -6037/real(6144), // C[mu,mu] skipped // C[mu,chi] 7891/real(37800), -127/real(288), 41/real(180), 5/real(16), -2/real(3), 1/real(2), -1983433/real(1935360), 281/real(630), 557/real(1440), -3/real(5), 13/real(48), 167603/real(181440), 15061/real(26880), -103/real(140), 61/real(240), 6601661/real(7257600), -179/real(168), 49561/real(161280), -3418889/real(1995840), 34729/real(80640), 212378941/real(319334400), // C[mu,xi] 12674323/real(851350500), -384229/real(14968800), -1609/real(28350), 121/real(1680), 4/real(45), -1/real(6), -31621753811LL/real(1307674368000LL), -431/real(17325), 16463/real(453600), 26/real(945), -29/real(720), -32844781/real(1751349600), 3746047/real(119750400), 449/real(28350), -1003/real(45360), 10650637121LL/real(326918592000LL), 629/real(53460), -40457/real(2419200), 205072597/real(20432412000LL), -1800439/real(119750400), -59109051671LL/real(3923023104000LL), // C[chi,phi] 4642/real(4725), 32/real(45), -82/real(45), 4/real(3), 2/real(3), -2, -1522/real(945), 904/real(315), -13/real(9), -16/real(15), 5/real(3), -12686/real(2835), 8/real(5), 34/real(21), -26/real(15), -24832/real(14175), -12/real(5), 1237/real(630), 109598/real(31185), -734/real(315), 444337/real(155925), // C[chi,beta] -998/real(4725), 2/real(5), -16/real(45), 0, 2/real(3), -1, -2/real(27), -22/real(105), 19/real(45), -2/real(5), 1/real(6), 116/real(567), -22/real(105), 16/real(105), -1/real(15), 2123/real(14175), -8/real(105), 17/real(1260), 128/real(4455), -1/real(105), 149/real(311850), // C[chi,theta] 1042/real(4725), -14/real(45), -2/real(9), 2/real(3), 2/real(3), 0, -712/real(945), -4/real(45), 43/real(45), 4/real(15), -1/real(3), 274/real(2835), 124/real(105), 2/real(105), -2/real(5), 21068/real(14175), -16/real(105), -55/real(126), -9202/real(31185), -22/real(45), -90263/real(155925), // C[chi,mu] -96199/real(604800), 81/real(512), 1/real(360), -37/real(96), 2/real(3), -1/real(2), 1118711/real(3870720), -46/real(105), 437/real(1440), -1/real(15), -1/real(48), -5569/real(90720), 209/real(4480), 37/real(840), -17/real(480), 830251/real(7257600), 11/real(504), -4397/real(161280), 108847/real(3991680), -4583/real(161280), -20648693/real(638668800), // C[chi,chi] skipped // C[chi,xi] -55271278/real(212837625), 27128/real(93555), -2312/real(14175), -88/real(315), 34/real(45), -2/real(3), 106691108/real(638512875), -65864/real(155925), 6079/real(14175), -184/real(945), 1/real(45), 5921152/real(54729675), -14246/real(467775), 772/real(14175), -106/real(2835), 75594328/real(638512875), -5312/real(467775), -167/real(9450), 2837636/real(638512875), -248/real(13365), -34761247/real(1915538625), // C[xi,phi] -44732/real(2837835), 20824/real(467775), 538/real(4725), 88/real(315), -4/real(45), -4/real(3), -12467764/real(212837625), -37192/real(467775), -2482/real(14175), 8/real(105), 34/real(45), 100320856/real(1915538625), 54968/real(467775), -898/real(14175), -1532/real(2835), -5884124/real(70945875), 24496/real(467775), 6007/real(14175), -839792/real(19348875), -23356/real(66825), 570284222/real(1915538625), // C[xi,beta] -70496/real(8513505), 2476/real(467775), 34/real(675), 32/real(315), -4/real(45), -1/real(3), 53836/real(212837625), 3992/real(467775), 74/real(2025), -4/real(315), -7/real(90), -661844/real(1915538625), 7052/real(467775), 2/real(14175), -83/real(2835), 1425778/real(212837625), 934/real(467775), -797/real(56700), 390088/real(212837625), -3673/real(467775), -18623681/real(3831077250LL), // C[xi,theta] -4286228/real(42567525), -193082/real(467775), 778/real(4725), 62/real(105), -4/real(45), 2/real(3), -61623938/real(70945875), 92696/real(467775), 12338/real(14175), -32/real(315), 4/real(45), 427003576/real(1915538625), 612536/real(467775), -1618/real(14175), -524/real(2835), 427770788/real(212837625), -8324/real(66825), -5933/real(14175), -9153184/real(70945875), -320044/real(467775), -1978771378/real(1915538625), // C[xi,mu] -9292991/real(302702400), 7764059/real(239500800), 1297/real(18900), -817/real(10080), -4/real(45), 1/real(6), 36019108271LL/real(871782912000LL), 35474/real(467775), -29609/real(453600), -2/real(35), 49/real(720), 3026004511LL/real(30648618000LL), -4306823/real(59875200), -2917/real(56700), 4463/real(90720), -368661577/real(4036032000LL), -102293/real(1871100), 331799/real(7257600), -875457073/real(13621608000LL), 11744233/real(239500800), 453002260127LL/real(7846046208000LL), // C[xi,chi] 2706758/real(42567525), -55222/real(93555), 2458/real(4725), 46/real(315), -34/real(45), 2/real(3), -340492279/real(212837625), 516944/real(467775), 3413/real(14175), -256/real(315), 19/real(45), 4430783356LL/real(1915538625), 206834/real(467775), -15958/real(14175), 248/real(567), 62016436/real(70945875), -832976/real(467775), 16049/real(28350), -651151712/real(212837625), 15602/real(18711), 2561772812LL/real(1915538625), // C[xi,xi] skipped }; static const int ptrs[] = { 0, 0, 12, 24, 36, 57, 78, 90, 90, 102, 114, 135, 156, 168, 180, 180, 192, 213, 234, 246, 258, 270, 270, 291, 312, 333, 354, 375, 396, 396, 417, 438, 459, 480, 501, 522, 522, }; #elif GEOGRAPHICLIB_AUXLATITUDE_ORDER == 8 static const real coeffs[] = { // C[phi,phi] skipped // C[phi,beta]; even coeffs only 0, 0, 0, 1, 0, 0, 0, 1/real(2), 0, 0, 1/real(3), 0, 0, 1/real(4), 0, 1/real(5), 0, 1/real(6), 1/real(7), 1/real(8), // C[phi,theta]; even coeffs only -2, 2, -2, 2, -8, 6, -4, 2, 16, -8, 8/real(3), 40, -16, 4, -32, 32/real(5), -64, 32/real(3), 128/real(7), 32, // C[phi,mu]; even coeffs only -6607/real(24576), 269/real(512), -27/real(32), 3/real(2), -155113/real(122880), 6759/real(4096), -55/real(32), 21/real(16), 87963/real(20480), -417/real(128), 151/real(96), 2514467/real(245760), -15543/real(2560), 1097/real(512), -69119/real(6144), 8011/real(2560), -5962461/real(286720), 293393/real(61440), 6459601/real(860160), 332287993/real(27525120), // C[phi,chi] 189416/real(99225), 16822/real(4725), -2854/real(675), 26/real(45), 116/real(45), -2, -2/real(3), 2, 141514/real(8505), -31256/real(1575), 2323/real(945), 2704/real(315), -227/real(45), -8/real(5), 7/real(3), -2363828/real(31185), 98738/real(14175), 73814/real(2835), -1262/real(105), -136/real(35), 56/real(15), 14416399/real(935550), 11763988/real(155925), -399572/real(14175), -332/real(35), 4279/real(630), 258316372/real(1216215), -2046082/real(31185), -144838/real(6237), 4174/real(315), -2155215124LL/real(14189175), -115444544/real(2027025), 601676/real(22275), -170079376/real(1216215), 38341552/real(675675), 1383243703/real(11351340), // C[phi,xi] -1683291094/real(37574026875LL), 22947844/real(1915538625), 28112932/real(212837625), 60136/real(467775), -2582/real(14175), -16/real(35), 4/real(45), 4/real(3), -14351220203LL/real(488462349375LL), 1228352/real(3007125), 251310128/real(638512875), -21016/real(51975), -11966/real(14175), 152/real(945), 46/real(45), 505559334506LL/real(488462349375LL), 138128272/real(147349125), -8797648/real(10945935), -94388/real(66825), 3802/real(14175), 3044/real(2835), 973080708361LL/real(488462349375LL), -45079184/real(29469825), -1472637812/real(638512875), 41072/real(93555), 6059/real(4725), -1385645336626LL/real(488462349375LL), -550000184/real(147349125), 455935736/real(638512875), 768272/real(467775), -2939205114427LL/real(488462349375LL), 443810768/real(383107725), 4210684958LL/real(1915538625), 101885255158LL/real(54273594375LL), 387227992/real(127702575), 1392441148867LL/real(325641566250LL), // C[beta,phi]; even coeffs only 0, 0, 0, -1, 0, 0, 0, 1/real(2), 0, 0, -1/real(3), 0, 0, 1/real(4), 0, -1/real(5), 0, 1/real(6), -1/real(7), 1/real(8), // C[beta,beta] skipped // C[beta,theta]; even coeffs only 0, 0, 0, 1, 0, 0, 0, 1/real(2), 0, 0, 1/real(3), 0, 0, 1/real(4), 0, 1/real(5), 0, 1/real(6), 1/real(7), 1/real(8), // C[beta,mu]; even coeffs only -4879/real(73728), 205/real(1536), -9/real(32), 1/real(2), -86171/real(368640), 1335/real(4096), -37/real(96), 5/real(16), 2901/real(4096), -75/real(128), 29/real(96), 1082857/real(737280), -2391/real(2560), 539/real(1536), -28223/real(18432), 3467/real(7680), -733437/real(286720), 38081/real(61440), 459485/real(516096), 109167851/real(82575360), // C[beta,chi] -25666/real(99225), 4769/real(4725), -3118/real(4725), -1/real(3), 38/real(45), -1/real(3), -2/real(3), 1, 193931/real(42525), -14404/real(4725), -247/real(270), 50/real(21), -7/real(9), -14/real(15), 5/real(6), -1709614/real(155925), -36521/real(14175), 17564/real(2835), -5/real(3), -34/real(21), 16/real(15), -637699/real(85050), 2454416/real(155925), -49877/real(14175), -28/real(9), 2069/real(1260), 48124558/real(1216215), -20989/real(2835), -28244/real(4455), 883/real(315), -16969807/real(1091475), -2471888/real(184275), 797222/real(155925), -1238578/real(42525), 2199332/real(225225), 87600385/real(4540536), // C[beta,xi] -5946082372LL/real(488462349375LL), 9708931/real(1915538625), 7947332/real(212837625), 11824/real(467775), -1082/real(14175), -46/real(315), 4/real(45), 1/real(3), 190673521/real(69780335625LL), 164328266/real(1915538625), 39946703/real(638512875), -16672/real(155925), -338/real(2025), 68/real(945), 17/real(90), 86402898356LL/real(488462349375LL), 236067184/real(1915538625), -255454/real(1563705), -101069/real(467775), 1102/real(14175), 461/real(2835), 110123070361LL/real(488462349375LL), -98401826/real(383107725), -189032762/real(638512875), 1786/real(18711), 3161/real(18900), -200020620676LL/real(488462349375LL), -802887278/real(1915538625), 80274086/real(638512875), 88868/real(467775), -296107325077LL/real(488462349375LL), 66263486/real(383107725), 880980241/real(3831077250LL), 4433064236LL/real(18091198125LL), 37151038/real(127702575), 495248998393LL/real(1302566265000LL), // C[theta,phi]; even coeffs only 2, -2, 2, -2, -8, 6, -4, 2, -16, 8, -8/real(3), 40, -16, 4, 32, -32/real(5), -64, 32/real(3), -128/real(7), 32, // C[theta,beta]; even coeffs only 0, 0, 0, -1, 0, 0, 0, 1/real(2), 0, 0, -1/real(3), 0, 0, 1/real(4), 0, -1/real(5), 0, 1/real(6), -1/real(7), 1/real(8), // C[theta,theta] skipped // C[theta,mu]; even coeffs only -14321/real(73728), 499/real(1536), -23/real(32), -1/real(2), -201467/real(368640), 6565/real(12288), -5/real(96), 5/real(16), 2939/real(4096), -77/real(128), 1/real(32), 1155049/real(737280), -4037/real(7680), 283/real(1536), -19465/real(18432), 1301/real(7680), -442269/real(286720), 17089/real(61440), 198115/real(516096), 48689387/real(82575360), // C[theta,chi] 64424/real(99225), 76/real(225), -3658/real(4725), 2/real(9), 4/real(9), -2/real(3), -2/real(3), 0, 2146/real(1215), -2728/real(945), 61/real(135), 68/real(45), -23/real(45), -4/real(15), 1/real(3), -95948/real(10395), 428/real(945), 9446/real(2835), -46/real(35), -24/real(35), 2/real(5), 29741/real(85050), 4472/real(525), -34712/real(14175), -80/real(63), 83/real(126), 280108/real(13365), -17432/real(3465), -2362/real(891), 52/real(45), -48965632/real(4729725), -548752/real(96525), 335882/real(155925), -197456/real(15795), 51368/real(12285), 1461335/real(174636), // C[theta,xi] -230886326/real(6343666875LL), -189115382/real(1915538625), 216932/real(2627625), 109042/real(467775), -2102/real(14175), -158/real(315), 4/real(45), -2/real(3), -11696145869LL/real(69780335625LL), 288456008/real(1915538625), 117952358/real(638512875), -7256/real(155925), 934/real(14175), -16/real(945), 16/real(45), 91546732346LL/real(488462349375LL), 478700902/real(1915538625), -7391576/real(54729675), -25286/real(66825), 922/real(14175), -232/real(2835), 218929662961LL/real(488462349375LL), -67330724/real(383107725), -67048172/real(638512875), 268/real(18711), 719/real(4725), -129039188386LL/real(488462349375LL), -117954842/real(273648375), 46774256/real(638512875), 14354/real(467775), -178084928947LL/real(488462349375LL), 2114368/real(34827975), 253129538/real(1915538625), 6489189398LL/real(54273594375LL), 13805944/real(127702575), 59983985827LL/real(325641566250LL), // C[mu,phi]; even coeffs only 57/real(2048), -3/real(32), 9/real(16), -3/real(2), -105/real(4096), 135/real(2048), -15/real(32), 15/real(16), -105/real(2048), 105/real(256), -35/real(48), 693/real(16384), -189/real(512), 315/real(512), 693/real(2048), -693/real(1280), -1287/real(4096), 1001/real(2048), -6435/real(14336), 109395/real(262144), // C[mu,beta]; even coeffs only 19/real(2048), -1/real(32), 3/real(16), -1/real(2), 7/real(4096), -9/real(2048), 1/real(32), -1/real(16), -3/real(2048), 3/real(256), -1/real(48), -11/real(16384), 3/real(512), -5/real(512), 7/real(2048), -7/real(1280), 9/real(4096), -7/real(2048), -33/real(14336), -429/real(262144), // C[mu,theta]; even coeffs only 509/real(2048), -15/real(32), 13/real(16), 1/real(2), 2599/real(4096), -1673/real(2048), 33/real(32), -1/real(16), -2989/real(2048), 349/real(256), -5/real(16), -43531/real(16384), 963/real(512), -261/real(512), 5545/real(2048), -921/real(1280), 16617/real(4096), -6037/real(6144), -19279/real(14336), -490925/real(262144), // C[mu,mu] skipped // C[mu,chi] -18975107/real(50803200), 72161/real(387072), 7891/real(37800), -127/real(288), 41/real(180), 5/real(16), -2/real(3), 1/real(2), 148003883/real(174182400), 13769/real(28800), -1983433/real(1935360), 281/real(630), 557/real(1440), -3/real(5), 13/real(48), 79682431/real(79833600), -67102379/real(29030400), 167603/real(181440), 15061/real(26880), -103/real(140), 61/real(240), -40176129013LL/real(7664025600LL), 97445/real(49896), 6601661/real(7257600), -179/real(168), 49561/real(161280), 2605413599LL/real(622702080), 14644087/real(9123840), -3418889/real(1995840), 34729/real(80640), 175214326799LL/real(58118860800LL), -30705481/real(10378368), 212378941/real(319334400), -16759934899LL/real(3113510400LL), 1522256789/real(1383782400), 1424729850961LL/real(743921418240LL), // C[mu,xi] -375027460897LL/real(125046361440000LL), 7183403063LL/real(560431872000LL), 12674323/real(851350500), -384229/real(14968800), -1609/real(28350), 121/real(1680), 4/real(45), -1/real(6), 30410873385097LL/real(2000741783040000LL), 1117820213/real(122594472000LL), -31621753811LL/real(1307674368000LL), -431/real(17325), 16463/real(453600), 26/real(945), -29/real(720), 151567502183LL/real(17863765920000LL), -116359346641LL/real(3923023104000LL), -32844781/real(1751349600), 3746047/real(119750400), 449/real(28350), -1003/real(45360), -317251099510901LL/real(8002967132160000LL), -13060303/real(766215450), 10650637121LL/real(326918592000LL), 629/real(53460), -40457/real(2419200), -2105440822861LL/real(125046361440000LL), 146875240637LL/real(3923023104000LL), 205072597/real(20432412000LL), -1800439/real(119750400), 91496147778023LL/real(2000741783040000LL), 228253559/real(24518894400LL), -59109051671LL/real(3923023104000LL), 126430355893LL/real(13894040160000LL), -4255034947LL/real(261534873600LL), -791820407649841LL/real(42682491371520000LL), // C[chi,phi] 1514/real(1323), -8384/real(4725), 4642/real(4725), 32/real(45), -82/real(45), 4/real(3), 2/real(3), -2, 142607/real(42525), -2288/real(1575), -1522/real(945), 904/real(315), -13/real(9), -16/real(15), 5/real(3), 120202/real(51975), 44644/real(14175), -12686/real(2835), 8/real(5), 34/real(21), -26/real(15), -1097407/real(187110), 1077964/real(155925), -24832/real(14175), -12/real(5), 1237/real(630), -12870194/real(1216215), 1040/real(567), 109598/real(31185), -734/real(315), -126463/real(72765), -941912/real(184275), 444337/real(155925), 3463678/real(467775), -2405834/real(675675), 256663081/real(56756700), // C[chi,beta] 1384/real(11025), -34/real(4725), -998/real(4725), 2/real(5), -16/real(45), 0, 2/real(3), -1, -12616/real(42525), 1268/real(4725), -2/real(27), -22/real(105), 19/real(45), -2/real(5), 1/real(6), 1724/real(51975), -1858/real(14175), 116/real(567), -22/real(105), 16/real(105), -1/real(15), 115249/real(935550), -26836/real(155925), 2123/real(14175), -8/real(105), 17/real(1260), 140836/real(1216215), -424/real(6237), 128/real(4455), -1/real(105), 210152/real(4729725), -31232/real(2027025), 149/real(311850), 30208/real(6081075), -499/real(225225), -68251/real(113513400), // C[chi,theta] -1738/real(11025), 18/real(175), 1042/real(4725), -14/real(45), -2/real(9), 2/real(3), 2/real(3), 0, 23159/real(42525), 332/real(945), -712/real(945), -4/real(45), 43/real(45), 4/real(15), -1/real(3), 13102/real(31185), -1352/real(945), 274/real(2835), 124/real(105), 2/real(105), -2/real(5), -2414843/real(935550), 1528/real(4725), 21068/real(14175), -16/real(105), -55/real(126), 60334/real(93555), 20704/real(10395), -9202/real(31185), -22/real(45), 40458083/real(14189175), -299444/real(675675), -90263/real(155925), -3818498/real(6081075), -8962/real(12285), -4259027/real(4365900), // C[chi,mu] -7944359/real(67737600), 5406467/real(38707200), -96199/real(604800), 81/real(512), 1/real(360), -37/real(96), 2/real(3), -1/real(2), -24749483/real(348364800), -51841/real(1209600), 1118711/real(3870720), -46/real(105), 437/real(1440), -1/real(15), -1/real(48), 6457463/real(17740800), -9261899/real(58060800), -5569/real(90720), 209/real(4480), 37/real(840), -17/real(480), -324154477/real(7664025600LL), -466511/real(2494800), 830251/real(7257600), 11/real(504), -4397/real(161280), -22894433/real(124540416), 8005831/real(63866880), 108847/real(3991680), -4583/real(161280), 2204645983LL/real(12915302400LL), 16363163/real(518918400), -20648693/real(638668800), 497323811/real(12454041600LL), -219941297/real(5535129600LL), -191773887257LL/real(3719607091200LL), // C[chi,chi] skipped // C[chi,xi] -17451293242LL/real(488462349375LL), 308365186/real(1915538625), -55271278/real(212837625), 27128/real(93555), -2312/real(14175), -88/real(315), 34/real(45), -2/real(3), -101520127208LL/real(488462349375LL), 149984636/real(1915538625), 106691108/real(638512875), -65864/real(155925), 6079/real(14175), -184/real(945), 1/real(45), 10010741462LL/real(37574026875LL), -99534832/real(383107725), 5921152/real(54729675), -14246/real(467775), 772/real(14175), -106/real(2835), 1615002539/real(75148053750LL), -35573728/real(273648375), 75594328/real(638512875), -5312/real(467775), -167/real(9450), -3358119706LL/real(488462349375LL), 130601488/real(1915538625), 2837636/real(638512875), -248/real(13365), 46771947158LL/real(488462349375LL), -3196/real(3553875), -34761247/real(1915538625), -18696014/real(18091198125LL), -2530364/real(127702575), -14744861191LL/real(651283132500LL), // C[xi,phi] -88002076/real(13956067125LL), -86728/real(16372125), -44732/real(2837835), 20824/real(467775), 538/real(4725), 88/real(315), -4/real(45), -4/real(3), -2641983469LL/real(488462349375LL), -895712/real(147349125), -12467764/real(212837625), -37192/real(467775), -2482/real(14175), 8/real(105), 34/real(45), 8457703444LL/real(488462349375LL), 240616/real(4209975), 100320856/real(1915538625), 54968/real(467775), -898/real(14175), -1532/real(2835), -4910552477LL/real(97692469875LL), -4832848/real(147349125), -5884124/real(70945875), 24496/real(467775), 6007/real(14175), 9393713176LL/real(488462349375LL), 816824/real(13395375), -839792/real(19348875), -23356/real(66825), -4532926649LL/real(97692469875LL), 1980656/real(54729675), 570284222/real(1915538625), -14848113968LL/real(488462349375LL), -496894276/real(1915538625), 224557742191LL/real(976924698750LL), // C[xi,beta] 29232878/real(97692469875LL), -18484/real(4343625), -70496/real(8513505), 2476/real(467775), 34/real(675), 32/real(315), -4/real(45), -1/real(3), -324943819/real(488462349375LL), -4160804/real(1915538625), 53836/real(212837625), 3992/real(467775), 74/real(2025), -4/real(315), -7/real(90), -168643106/real(488462349375LL), 237052/real(383107725), -661844/real(1915538625), 7052/real(467775), 2/real(14175), -83/real(2835), 113042383/real(97692469875LL), -2915326/real(1915538625), 1425778/real(212837625), 934/real(467775), -797/real(56700), -558526274/real(488462349375LL), 6064888/real(1915538625), 390088/real(212837625), -3673/real(467775), 155665021/real(97692469875LL), 41288/real(29469825), -18623681/real(3831077250LL), 504234982/real(488462349375LL), -6205669/real(1915538625), -8913001661LL/real(3907698795000LL), // C[xi,theta] 182466964/real(8881133625LL), 53702182/real(212837625), -4286228/real(42567525), -193082/real(467775), 778/real(4725), 62/real(105), -4/real(45), 2/real(3), 367082779691LL/real(488462349375LL), -32500616/real(273648375), -61623938/real(70945875), 92696/real(467775), 12338/real(14175), -32/real(315), 4/real(45), -42668482796LL/real(488462349375LL), -663111728/real(383107725), 427003576/real(1915538625), 612536/real(467775), -1618/real(14175), -524/real(2835), -327791986997LL/real(97692469875LL), 421877252/real(1915538625), 427770788/real(212837625), -8324/real(66825), -5933/real(14175), 74612072536LL/real(488462349375LL), 6024982024LL/real(1915538625), -9153184/real(70945875), -320044/real(467775), 489898512247LL/real(97692469875LL), -46140784/real(383107725), -1978771378/real(1915538625), -42056042768LL/real(488462349375LL), -2926201612LL/real(1915538625), -2209250801969LL/real(976924698750LL), // C[xi,mu] 39534358147LL/real(2858202547200LL), -25359310709LL/real(1743565824000LL), -9292991/real(302702400), 7764059/real(239500800), 1297/real(18900), -817/real(10080), -4/real(45), 1/real(6), -13216941177599LL/real(571640509440000LL), -14814966289LL/real(245188944000LL), 36019108271LL/real(871782912000LL), 35474/real(467775), -29609/real(453600), -2/real(35), 49/real(720), -27782109847927LL/real(250092722880000LL), 99871724539LL/real(1569209241600LL), 3026004511LL/real(30648618000LL), -4306823/real(59875200), -2917/real(56700), 4463/real(90720), 168979300892599LL/real(1600593426432000LL), 2123926699/real(15324309000LL), -368661577/real(4036032000LL), -102293/real(1871100), 331799/real(7257600), 1959350112697LL/real(9618950880000LL), -493031379277LL/real(3923023104000LL), -875457073/real(13621608000LL), 11744233/real(239500800), -145659994071373LL/real(800296713216000LL), -793693009/real(9807557760LL), 453002260127LL/real(7846046208000LL), -53583096419057LL/real(500185445760000LL), 103558761539LL/real(1426553856000LL), real(12272105438887727LL)/real(128047474114560000LL), // C[xi,chi] -64724382148LL/real(97692469875LL), 16676974/real(30405375), 2706758/real(42567525), -55222/real(93555), 2458/real(4725), 46/real(315), -34/real(45), 2/real(3), 85904355287LL/real(37574026875LL), 158999572/real(1915538625), -340492279/real(212837625), 516944/real(467775), 3413/real(14175), -256/real(315), 19/real(45), 2986003168LL/real(37574026875LL), -7597644214LL/real(1915538625), 4430783356LL/real(1915538625), 206834/real(467775), -15958/real(14175), 248/real(567), -375566203/real(39037950), 851209552/real(174139875), 62016436/real(70945875), -832976/real(467775), 16049/real(28350), 5106181018156LL/real(488462349375LL), 3475643362LL/real(1915538625), -651151712/real(212837625), 15602/real(18711), 34581190223LL/real(8881133625LL), -10656173804LL/real(1915538625), 2561772812LL/real(1915538625), -5150169424688LL/real(488462349375LL), 873037408/real(383107725), 7939103697617LL/real(1953849397500LL), // C[xi,xi] skipped }; static const int ptrs[] = { 0, 0, 20, 40, 60, 96, 132, 152, 152, 172, 192, 228, 264, 284, 304, 304, 324, 360, 396, 416, 436, 456, 456, 492, 528, 564, 600, 636, 672, 672, 708, 744, 780, 816, 852, 888, 888, }; #else #error "Unsupported value for GEOGRAPHICLIB_AUXLATITUDE_ORDER" #endif static_assert(sizeof(ptrs) / sizeof(int) == AUXNUMBER*AUXNUMBER+1, "Mismatch in size of ptrs array"); static_assert(sizeof(coeffs) / sizeof(real) == (RECTIFYING+1)*RECTIFYING * (Lmax * (Lmax + 3) - 2*(Lmax/2))/4 // Even only arrays + (AUXNUMBER*(AUXNUMBER-1) - (RECTIFYING+1)*RECTIFYING) * (Lmax * (Lmax + 1))/2, "Mismatch in size of coeffs array"); if (k < 0) return; // auxout or auxin out of range if (auxout == auxin) fill(_c + Lmax * k, _c + Lmax * (k + 1), 0); else { int o = ptrs[k]; real d = _n; if (auxin <= RECTIFYING && auxout <= RECTIFYING) { for (int l = 0; l < Lmax; ++l) { int m = (Lmax - l - 1) / 2; // order of polynomial in n^2 _c[Lmax * k + l] = d * Math::polyval(m, coeffs + o, _n2); o += m + 1; d *= _n; } } else { for (int l = 0; l < Lmax; ++l) { int m = (Lmax - l - 1); // order of polynomial in n _c[Lmax * k + l] = d * Math::polyval(m, coeffs + o, _n); o += m + 1; d *= _n; } } // assert(o == ptrs[AUXNUMBER * auxout + auxin + 1]); } } Math::real AuxLatitude::Clenshaw(bool sinp, real szeta, real czeta, const real c[], int K) { // Evaluate // y = sum(c[k] * sin( (2*k+2) * zeta), k, 0, K-1) if sinp // y = sum(c[k] * cos( (2*k+2) * zeta), k, 0, K-1) if !sinp // Approx operation count = (K + 5) mult and (2 * K + 2) add int k = K; real u0 = 0, u1 = 0, // accumulators for sum x = 2 * (czeta - szeta) * (czeta + szeta); // 2 * cos(2*zeta) for (; k > 0;) { real t = x * u0 - u1 + c[--k]; u1 = u0; u0 = t; } // u0*f0(zeta) - u1*fm1(zeta) // f0 = sinp ? sin(2*zeta) : cos(2*zeta) // fm1 = sinp ? 0 : 1 real f0 = sinp ? 2 * szeta * czeta : x / 2, fm1 = sinp ? 0 : 1; return f0 * u0 - fm1 * u1; } /// \endcond } // namespace GeographicLib geosphere/src/kissfft.h0000644000176200001440000004214715147425256014667 0ustar liggesusers/* * Copyright (c) 2003-2010, Mark Borgerding. All rights reserved. * This file is part of KISS FFT - https://github.com/mborgerding/kissfft * * SPDX-License-Identifier: BSD-3-Clause * See COPYING file, below, for more information. * * ================ COPYING ================ * Copyright (c) 2003-2010 Mark Borgerding . All rights reserved. * * KISS FFT is provided under: * * SPDX-License-Identifier: BSD-3-Clause * * Being under the terms of the BSD 3-clause "New" or "Revised" License, * according with: * * LICENSES/BSD-3-Clause * * ================ LICENSES/BSD-3-Clause ================ * Valid-License-Identifier: BSD-3-Clause * SPDX-URL: https://spdx.org/licenses/BSD-3-Clause.html * Usage-Guide: * To use the BSD 3-clause "New" or "Revised" License put the following SPDX * tag/value pair into a comment according to the placement guidelines in * the licensing rules documentation: * SPDX-License-Identifier: BSD-3-Clause * License-Text: * * Copyright (c) . All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of the copyright holder nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef KISSFFT_CLASS_HH #define KISSFFT_CLASS_HH #include #include #include template class kissfft { public: typedef std::complex cpx_t; kissfft( const std::size_t nfft, const bool inverse ) :_nfft(nfft) ,_inverse(inverse) { using std::acos; using std::cos; using std::sin; if (_nfft == 0) return; // fill twiddle factors _twiddles.resize(_nfft); { const scalar_t s = _inverse ? 1 : -1; const scalar_t d = acos( (scalar_t) -1) / (2 * _nfft); int i = 0, N = int(_nfft); // signed ints needed for subtractions // enforce trigonometric symmetries by evaluating sin and cos // with arguments in the range [-pi/4, pi/4] for (; 8*i < N; ++i) _twiddles[i] = cpx_t(+ cos((4*i )*d), +s*sin((4*i )*d)); // pi/4*[0, 1) for (; 8*i < 3*N; ++i) _twiddles[i] = cpx_t(- sin((4*i- N)*d), +s*cos((4*i- N)*d)); // pi/4*[1, 3) for (; 8*i < 5*N; ++i) _twiddles[i] = cpx_t(- cos((4*i-2*N)*d), -s*sin((4*i-2*N)*d)); // pi/4*[3, 5) for (; 8*i < 7*N; ++i) _twiddles[i] = cpx_t(+ sin((4*i-3*N)*d), -s*cos((4*i-3*N)*d)); // pi/4*[5, 7) for (; i < N; ++i) _twiddles[i] = cpx_t(+ cos((4*i-4*N)*d), +s*sin((4*i-4*N)*d)); // pi/4*[5, 8) } //factorize //start factoring out 4's, then 2's, then 3,5,7,9,... std::size_t n= _nfft; std::size_t p=4; do { while (n % p) { switch (p) { case 4: p = 2; break; case 2: p = 3; break; default: p += 2; break; } if (p*p>n) p = n;// no more factors } n /= p; _stageRadix.push_back(p); _stageRemainder.push_back(n); }while(n>1); } /// Changes the FFT-length and/or the transform direction. /// /// @post The @c kissfft object will be in the same state as if it /// had been newly constructed with the passed arguments. /// However, the implementation may be faster than constructing a /// new fft object. void assign( const std::size_t nfft, const bool inverse ) { if ( nfft != _nfft ) { kissfft tmp( nfft, inverse ); // O(n) time. std::swap( tmp, *this ); // this is O(1) in C++11, O(n) otherwise. } else if ( inverse != _inverse ) { // conjugate the twiddle factors. for ( typename std::vector::iterator it = _twiddles.begin(); it != _twiddles.end(); ++it ) it->imag( -it->imag() ); } } /// Calculates the complex Discrete Fourier Transform. /// /// The size of the passed arrays must be passed in the constructor. /// The sum of the squares of the absolute values in the @c dst /// array will be @c N times the sum of the squares of the absolute /// values in the @c src array, where @c N is the size of the array. /// In other words, the l_2 norm of the resulting array will be /// @c sqrt(N) times as big as the l_2 norm of the input array. /// This is also the case when the inverse flag is set in the /// constructor. Hence when applying the same transform twice, but with /// the inverse flag changed the second time, then the result will /// be equal to the original input times @c N. void transform(const cpx_t * fft_in, cpx_t * fft_out, const std::size_t stage = 0, const std::size_t fstride = 1, const std::size_t in_stride = 1) const { if (_nfft == 0) return; const std::size_t p = _stageRadix[stage]; const std::size_t m = _stageRemainder[stage]; cpx_t * const Fout_beg = fft_out; cpx_t * const Fout_end = fft_out + p*m; if (m==1) { do{ *fft_out = *fft_in; fft_in += fstride*in_stride; }while(++fft_out != Fout_end ); }else{ do{ // recursive call: // DFT of size m*p performed by doing // p instances of smaller DFTs of size m, // each one takes a decimated version of the input transform(fft_in, fft_out, stage+1, fstride*p,in_stride); fft_in += fstride*in_stride; }while( (fft_out += m) != Fout_end ); } fft_out=Fout_beg; // recombine the p smaller DFTs switch (p) { case 2: kf_bfly2(fft_out,fstride,m); break; case 3: kf_bfly3(fft_out,fstride,m); break; case 4: kf_bfly4(fft_out,fstride,m); break; case 5: kf_bfly5(fft_out,fstride,m); break; default: kf_bfly_generic(fft_out,fstride,m,p); break; } } /// Calculates the Discrete Fourier Transform (DFT) of a real input /// of size @c 2*N. /// /// The 0-th and N-th value of the DFT are real numbers. These are /// stored in @c dst[0].real() and @c dst[0].imag() respectively. /// The remaining DFT values up to the index N-1 are stored in /// @c dst[1] to @c dst[N-1]. /// The other half of the DFT values can be calculated from the /// symmetry relation /// @code /// DFT(src)[2*N-k] == conj( DFT(src)[k] ); /// @endcode /// The same scaling factors as in @c transform() apply. /// /// @note For this to work, the types @c scalar_t and @c cpx_t /// must fulfill the following requirements: /// /// For any object @c z of type @c cpx_t, /// @c reinterpret_cast(z)[0] is the real part of @c z and /// @c reinterpret_cast(z)[1] is the imaginary part of @c z. /// For any pointer to an element of an array of @c cpx_t named @c p /// and any valid array index @c i, @c reinterpret_cast(p)[2*i] /// is the real part of the complex number @c p[i], and /// @c reinterpret_cast(p)[2*i+1] is the imaginary part of the /// complex number @c p[i]. /// /// Since C++11, these requirements are guaranteed to be satisfied for /// @c scalar_ts being @c float, @c double or @c long @c double /// together with @c cpx_t being @c std::complex. void transform_real( const scalar_t * const src, cpx_t * const dst ) const { using std::acos; using std::exp; const std::size_t N = _nfft; if ( N == 0 ) return; // perform complex FFT transform( reinterpret_cast(src), dst ); // post processing for k = 0 and k = N dst[0] = cpx_t( dst[0].real() + dst[0].imag(), dst[0].real() - dst[0].imag() ); // post processing for all the other k = 1, 2, ..., N-1 const scalar_t pi = acos( (scalar_t) -1); const scalar_t half_phi_inc = ( _inverse ? pi : -pi ) / N; const cpx_t twiddle_mul = exp( cpx_t(0, half_phi_inc) ); for ( std::size_t k = 1; 2*k < N; ++k ) { const cpx_t w = (scalar_t)0.5 * cpx_t( dst[k].real() + dst[N-k].real(), dst[k].imag() - dst[N-k].imag() ); const cpx_t z = (scalar_t)0.5 * cpx_t( dst[k].imag() + dst[N-k].imag(), -dst[k].real() + dst[N-k].real() ); const cpx_t twiddle = k % 2 == 0 ? _twiddles[k/2] : _twiddles[k/2] * twiddle_mul; dst[ k] = w + twiddle * z; dst[N-k] = std::conj( w - twiddle * z ); } if ( N % 2 == 0 ) dst[N/2] = std::conj( dst[N/2] ); } private: void kf_bfly2( cpx_t * Fout, const size_t fstride, const std::size_t m) const { for (std::size_t k=0;k _scratchbuf.size()) _scratchbuf.resize(p); for ( std::size_t u=0; u=_nfft) twidx-=_nfft; Fout[ k ] += _scratchbuf[q] * twiddles[twidx]; } k += m; } } } std::size_t _nfft; bool _inverse; std::vector _twiddles; std::vector _stageRadix; std::vector _stageRemainder; mutable std::vector _scratchbuf; }; #endif geosphere/src/GeodesicLineExact.cpp0000644000176200001440000002605415147425256017067 0ustar liggesusers/** * \file GeodesicLineExact.cpp * \brief Implementation for GeographicLib::GeodesicLineExact class * * Copyright (c) Charles Karney (2012-2022) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ * * This is a reformulation of the geodesic problem. The notation is as * follows: * - at a general point (no suffix or 1 or 2 as suffix) * - phi = latitude * - beta = latitude on auxiliary sphere * - omega = longitude on auxiliary sphere * - lambda = longitude * - alpha = azimuth of great circle * - sigma = arc length along great circle * - s = distance * - tau = scaled distance (= sigma at multiples of pi/2) * - at northwards equator crossing * - beta = phi = 0 * - omega = lambda = 0 * - alpha = alpha0 * - sigma = s = 0 * - a 12 suffix means a difference, e.g., s12 = s2 - s1. * - s and c prefixes mean sin and cos **********************************************************************/ #include "GeodesicLineExact.h" namespace GeographicLib { using namespace std; void GeodesicLineExact::LineInit(const GeodesicExact& g, real lat1, real lon1, real azi1, real salp1, real calp1, unsigned caps) { tiny_ = g.tiny_; _lat1 = Math::LatFix(lat1); _lon1 = lon1; _azi1 = azi1; _salp1 = salp1; _calp1 = calp1; _a = g._a; _f = g._f; _b = g._b; _c2 = g._c2; _f1 = g._f1; _e2 = g._e2; _nC4 = g._nC4; // Always allow latitude and azimuth and unrolling of longitude _caps = caps | LATITUDE | AZIMUTH | LONG_UNROLL; real cbet1, sbet1; Math::sincosd(Math::AngRound(_lat1), sbet1, cbet1); sbet1 *= _f1; // Ensure cbet1 = +epsilon at poles Math::norm(sbet1, cbet1); cbet1 = fmax(tiny_, cbet1); _dn1 = (_f >= 0 ? sqrt(1 + g._ep2 * Math::sq(sbet1)) : sqrt(1 - _e2 * Math::sq(cbet1)) / _f1); // Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0), _salp0 = _salp1 * cbet1; // alp0 in [0, pi/2 - |bet1|] // Alt: calp0 = hypot(sbet1, calp1 * cbet1). The following // is slightly better (consider the case salp1 = 0). _calp0 = hypot(_calp1, _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. _ssig1 = sbet1; _somg1 = _salp0 * sbet1; _csig1 = _comg1 = sbet1 != 0 || _calp1 != 0 ? cbet1 * _calp1 : 1; // Without normalization we have schi1 = somg1. _cchi1 = _f1 * _dn1 * _comg1; Math::norm(_ssig1, _csig1); // sig1 in (-pi, pi] // Math::norm(_somg1, _comg1); -- don't need to normalize! // Math::norm(_schi1, _cchi1); -- don't need to normalize! _k2 = Math::sq(_calp0) * g._ep2; _eE.Reset(-_k2, -g._ep2, 1 + _k2, 1 + g._ep2); if (_caps & CAP_E) { _eE0 = _eE.E() / (Math::pi() / 2); _eE1 = _eE.deltaE(_ssig1, _csig1, _dn1); real s = sin(_eE1), c = cos(_eE1); // tau1 = sig1 + B11 _stau1 = _ssig1 * c + _csig1 * s; _ctau1 = _csig1 * c - _ssig1 * s; // Not necessary because Einv inverts E // _eE1 = -_eE.deltaEinv(_stau1, _ctau1); } if (_caps & CAP_D) { _dD0 = _eE.D() / (Math::pi() / 2); _dD1 = _eE.deltaD(_ssig1, _csig1, _dn1); } if (_caps & CAP_H) { _hH0 = _eE.H() / (Math::pi() / 2); _hH1 = _eE.deltaH(_ssig1, _csig1, _dn1); } if (_caps & CAP_C4) { // Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0) _aA4 = Math::sq(_a) * _calp0 * _salp0 * _e2; if (_aA4 == 0) _bB41 = 0; else { GeodesicExact::I4Integrand i4(g._ep2, _k2); _cC4a.resize(_nC4); g._fft.transform(i4, _cC4a.data()); _bB41 = DST::integral(_ssig1, _csig1, _cC4a.data(), _nC4); } } _a13 = _s13 = Math::NaN(); } GeodesicLineExact::GeodesicLineExact(const GeodesicExact& g, real lat1, real lon1, real azi1, unsigned caps) { azi1 = Math::AngNormalize(azi1); real salp1, calp1; // Guard against underflow in salp0. Also -0 is converted to +0. Math::sincosd(Math::AngRound(azi1), salp1, calp1); LineInit(g, lat1, lon1, azi1, salp1, calp1, caps); } GeodesicLineExact::GeodesicLineExact(const GeodesicExact& g, real lat1, real lon1, real azi1, real salp1, real calp1, unsigned caps, bool arcmode, real s13_a13) { LineInit(g, lat1, lon1, azi1, salp1, calp1, caps); GenSetDistance(arcmode, s13_a13); } Math::real GeodesicLineExact::GenPosition(bool arcmode, real s12_a12, unsigned outmask, real& lat2, real& lon2, real& azi2, real& s12, real& m12, real& M12, real& M21, real& S12) const { outmask &= _caps & OUT_MASK; if (!( Init() && (arcmode || (_caps & (OUT_MASK & DISTANCE_IN))) )) // Uninitialized or impossible distance calculation requested return Math::NaN(); // Avoid warning about uninitialized B12. real sig12, ssig12, csig12, E2 = 0, AB1 = 0; if (arcmode) { // Interpret s12_a12 as spherical arc length sig12 = s12_a12 * Math::degree(); Math::sincosd(s12_a12, ssig12, csig12); } else { // Interpret s12_a12 as distance real tau12 = s12_a12 / (_b * _eE0), s = sin(tau12), c = cos(tau12); // tau2 = tau1 + tau12 E2 = - _eE.deltaEinv(_stau1 * c + _ctau1 * s, _ctau1 * c - _stau1 * s); sig12 = tau12 - (E2 - _eE1); ssig12 = sin(sig12); csig12 = cos(sig12); } real ssig2, csig2, sbet2, cbet2, salp2, calp2; // sig2 = sig1 + sig12 ssig2 = _ssig1 * csig12 + _csig1 * ssig12; csig2 = _csig1 * csig12 - _ssig1 * ssig12; real dn2 = _eE.Delta(ssig2, csig2); if (outmask & (DISTANCE | REDUCEDLENGTH | GEODESICSCALE)) { if (arcmode) { E2 = _eE.deltaE(ssig2, csig2, dn2); } AB1 = _eE0 * (E2 - _eE1); } // sin(bet2) = cos(alp0) * sin(sig2) sbet2 = _calp0 * ssig2; // Alt: cbet2 = hypot(csig2, salp0 * ssig2); cbet2 = hypot(_salp0, _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 = _salp0; calp2 = _calp0 * csig2; // No need to normalize if (outmask & DISTANCE) s12 = arcmode ? _b * (_eE0 * sig12 + AB1) : s12_a12; if (outmask & LONGITUDE) { real somg2 = _salp0 * ssig2, comg2 = csig2, // No need to normalize E = copysign(real(1), _salp0); // east-going? // Without normalization we have schi2 = somg2. real cchi2 = _f1 * dn2 * comg2; real chi12 = outmask & LONG_UNROLL ? E * (sig12 - (atan2( ssig2, csig2) - atan2( _ssig1, _csig1)) + (atan2(E * somg2, cchi2) - atan2(E * _somg1, _cchi1))) : atan2(somg2 * _cchi1 - cchi2 * _somg1, cchi2 * _cchi1 + somg2 * _somg1); real lam12 = chi12 - _e2/_f1 * _salp0 * _hH0 * (sig12 + (_eE.deltaH(ssig2, csig2, dn2) - _hH1)); real lon12 = lam12 / Math::degree(); lon2 = outmask & LONG_UNROLL ? _lon1 + lon12 : Math::AngNormalize(Math::AngNormalize(_lon1) + Math::AngNormalize(lon12)); } if (outmask & LATITUDE) lat2 = Math::atan2d(sbet2, _f1 * cbet2); if (outmask & AZIMUTH) azi2 = Math::atan2d(salp2, calp2); if (outmask & (REDUCEDLENGTH | GEODESICSCALE)) { real J12 = _k2 * _dD0 * (sig12 + (_eE.deltaD(ssig2, csig2, dn2) - _dD1)); if (outmask & REDUCEDLENGTH) // Add parens around (_csig1 * ssig2) and (_ssig1 * csig2) to ensure // accurate cancellation in the case of coincident points. m12 = _b * ((dn2 * (_csig1 * ssig2) - _dn1 * (_ssig1 * csig2)) - _csig1 * csig2 * J12); if (outmask & GEODESICSCALE) { real t = _k2 * (ssig2 - _ssig1) * (ssig2 + _ssig1) / (_dn1 + dn2); M12 = csig12 + (t * ssig2 - csig2 * J12) * _ssig1 / _dn1; M21 = csig12 - (t * _ssig1 - _csig1 * J12) * ssig2 / dn2; } } if (outmask & AREA) { real B42 = _aA4 == 0 ? 0 : DST::integral(ssig2, csig2, _cC4a.data(), _nC4); real salp12, calp12; if (_calp0 == 0 || _salp0 == 0) { // alp12 = alp2 - alp1, used in atan2 so no need to normalize salp12 = salp2 * _calp1 - calp2 * _salp1; calp12 = calp2 * _calp1 + salp2 * _salp1; // We used to include here some patch up code that purported to deal // with nearly meridional geodesics properly. However, this turned out // to be wrong once _salp1 = -0 was allowed (via // GeodesicExact::InverseLine). In fact, the calculation of {s,c}alp12 // was already correct (following the IEEE rules for handling signed // zeros). So the patch up code was unnecessary (as well as // dangerous). } 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 = _calp0 * _salp0 * (csig12 <= 0 ? _csig1 * (1 - csig12) + ssig12 * _ssig1 : ssig12 * (_csig1 * ssig12 / (1 + csig12) + _ssig1)); calp12 = Math::sq(_salp0) + Math::sq(_calp0) * _csig1 * csig2; } S12 = _c2 * atan2(salp12, calp12) + _aA4 * (B42 - _bB41); } return arcmode ? s12_a12 : sig12 / Math::degree(); } void GeodesicLineExact::SetDistance(real s13) { _s13 = s13; real t; // This will set _a13 to NaN if the GeodesicLineExact doesn't have the // DISTANCE_IN capability. _a13 = GenPosition(false, _s13, 0u, t, t, t, t, t, t, t, t); } void GeodesicLineExact::SetArc(real a13) { _a13 = a13; // In case the GeodesicLineExact doesn't have the DISTANCE capability. _s13 = Math::NaN(); real t; GenPosition(true, _a13, DISTANCE, t, t, t, _s13, t, t, t, t); } void GeodesicLineExact::GenSetDistance(bool arcmode, real s13_a13) { arcmode ? SetArc(s13_a13) : SetDistance(s13_a13); } } // namespace GeographicLib geosphere/ChangeLog0000644000176200001440000000607015147425256014023 0ustar liggesusers-- to do inconsistency reported by Ryan Case: bearing is expressed as -180 to 180 whereas bearingRhum is from 0 to 360 -- 13 October 2021, version 1.5.14 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/NAMESPACE0000644000176200001440000000014015161004741013444 0ustar liggesusersuseDynLib(geosphere, .registration = TRUE) import(methods, Rcpp) exportPattern("^[^\\.\\_]") geosphere/inst/0000755000176200001440000000000015164275510013216 5ustar liggesusersgeosphere/inst/doc/0000755000176200001440000000000015164275510013763 5ustar liggesusersgeosphere/inst/doc/geosphere.R0000644000176200001440000002031415164275510016067 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.Rnw0000644000176200001440000004033615150653427016444 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{https://www.edwilliams.org/ftp/avsig/avform.txt}, and partly on javascript implementations of these formulae by Chris Veness (\url{https://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{https://geographiclib.sourceforge.io/}). \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{https://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf} \end{hangparas} \end{document} geosphere/inst/doc/geosphere.pdf0000644000176200001440000067572315164563437016473 0ustar liggesusers%PDF-1.5 %¿÷¢þ 1 0 obj << /Type /ObjStm /Length 4417 /Filter /FlateDecode /N 84 /First 673 >> stream xœÝ\ÛnG’}߯ȷX]y­¬Á`KaËkÁ’±Þ1-²EöÅ&º›–çï÷œÌʨì/-ÊÖ4²«*oy‰)£Ze•¶­rÊš¨¼òV« :Ý«NEÓª¨bpªW}Û+Ý*­A‚*W¡xQ::|tÊ´SÚ+cº€Lel‡J2.à7*ã=ò{eºˆè¼åG­¬¶øh@„µ¨¤¬ ¨ ¢XÏxe}ïAÙÀz²Ñ‚m¦W®õ½"Ú£²VÎ8då¬G'V9ü‡Æ”ó*{åB‡Î‚r]Ào§\ôlT¹¾Å{¯|ËÌVyÍÆ´ò¤ ¬{Ž’³Ê;ÔC“Þ£žÃ°÷ |Ù¨ò1¢^T¡eù^ ¦@J0,!¶7T ŽY<:ÇЄјW¡‹è<¨Ðƒ^tÑéïQuƒ V;ƒqÆÐt&âW«ÎrÞ ~Ù‰U]³˜¸èÐnðªw̪¼Ða*-Z ˜;ÝFvƒ¡ål£Ù!¦Õ€Œ“¶ Mc‚Û0ƒŽtr ¸ r®±pÐ=Zö,whÙÇ_Ðr0( ~t˜z Ðiäòẉh9ômð‚°…Æu×ví¿ýå/jòÍõõb½RÇJmÕX©Luþñ)ýEM^,®×³kCÃü4ù~v>Ÿ>_ü†z-þ©=(úfºDI®ÒTðÇÙjq»<›­ÔPóÝ¿nf,u1Sýk¦@1}«&?ýøªäs¶ž/®ó§g—ëõÍêϓɧOŸšÙù§ùÕÕ|úqÕ,–“ë›Éô×Õüé‡Åòc³þm}‚†Õäùby>[ôéÄDzÑùåßÕä©;[ã+¦  X_¦uM‹)µÑ5®Å»öMß³øÛÛ÷ëDØëùõ?…HÝQ\|\ü:}5;e›ÍÙ¢¹ýçdu¶œß¬W“«éújq}Ñ\®?^=žëA9…HošKÀu±Á.8óOÌÊÅlq±œÞ\ÎÏ®æï›<ј…‹Y3_LO¼é †½ç"o¸K FšÈµbƒ×Ñþ+5‘ÿ’"Óä5÷#Ò—GKI›Ÿ±õ!m‡ç$iùL²ß,gog$jòæÛ—èiöÛ |Kbs½Ÿÿ뿹•›»½k}ƒUs}{uuGY›Êð¦û¸UøÅåtÉ®WÜÙ©Îß®Ïçóë îùLè|¹Z³nb÷yÞ‡ZBªö’4VÌú~º^ÎÓ&mÚÒ.ÍBýŒr¯§C{c<ùéÇY°jë’´íyõ[øy"½šΈ-“æbòŸóóõåŠÂ+î6£a›Q¿Í¨ÛdôÔ«S€F¨Óû…0w…QyÞd4ŒŒÚ'gÔ`Ôn3j¶…°ßšQC=@Stï›ÑhƒÌhyÞ`˜_ÅZjFõFÛ-FC£§œ&¤ fjF;­žbFCÜÏhè¶ ÷ìÑSL)@š*M<’Q=Îh|rF}Íè×hI¸RMŠm£ ÕÓ¶ž6 ÜÃ@áÅâ\bÓ7?_‰<ÖyúL^Æ&oO“‡ÀtEõô™Øn«/«»!§Æ¨ºˆï@p~ ÎŒjWw´Ú¥ê]ÕBvÛ ÙÞ·MZÈб^È^rxúkìX½Íh»Ãh¿Á(¬$“lœdbs…Í'ÇTß×lî_‡\{™†Ãï+òòóïÿ—{‘M¿ú1]Äáî2í^¦fg}±íu/‹PÛC,öúxÍ#YôéY´ª7Y´Ç³èŽŸÅ/É®ƒ‰~]<»eëï¿h½êÃA ¶Ýa1„mPÍØÌ¬Íãm3M6ç9ý”¨ú faûxôYýõ¬‚dXtrÍ£ýÝd×îÜèö¡Bwáþá4̇åy¿ìj<~&éE<(¢uûP½gDîèßyËéÖÍ„ûŠÔŒIëÏÔC=¦Îí0yPaØ–½npÞæ¾\æÎç1ò¹ï¾¼ì=~ ³×êà>T8ïÃûÿÕHxÚÓÕú¡¢zÇÝ)ªõCEõÂû¯gOóN¿ú¡âw—KÿÚÂ]ÌPœ}ý=¹H¦6³åZâ:e¦ˆ‘¶ê4¹`ö|ÿÒé¾>§dÍö޾ö×ÞýýcFçØÑÜ»JBJ<“ÀÀ‚ $Âú|öúàdšÍÄ0±LXñ”#$“È„«Î³†g Ïž5ƒ hDa´h3=‹ zX °ØŒ(3XkÆ£œ°G/BƒÌiÖÆ6X&N7IW©¿YÓ`tr ÛÜ5¯”cº&ÄšŸ“m¦´ôÓÂònÒè36Eß7`8؆¡Ó¡ÁÒð®ã¬·\ÐôŒŠu¦(ÍMyÝô –q.2|Nõés`N‘Ü~é3ú&Mn~k…Âò› .ó‘jÛÐ`Öêgƒº2¯ù»mbá>€Û29Uñ\SàS )OG›‰ÎÏCùÔù>|clÛ4'‰&E΋µË9Ù„ÀâÍXg¾(@"é“%+`˜lÙè>~cH‚;Þ¾EB :¯¶L[$ýCà3VÃDæ¤c$Êÿ{ûön5n„BJ³ ±êÝ…Ø~„BHD?š·u~4o!aýËÜG#,§&5 ú y‘d„BîË A‹¡WMFó´„–=}±5¼†–AKa´„–A‹XT ^ŤJðFó–ÞÞBK',/hQŒ*ÃK4‚É–á  Å¨âµ1ª°oUØ¿FŒ*â¸UÉ¿,˜ †Å¨"Ž‹QE£Š8.Fq\Œ*â¸UÄq1ª(õŨ"Ž‹QE£Š8.Fq\Œ*âx/Zžh @´5Ìže ÓeDW#Ü‹ªF¸M-°iÑ "$¤h—…‚ŽW˜D+Ðx­Xt4Ì scEC£0o+ÓÖ¶•ikÛÊ´µ¢an¬(g˜+ºžèf‘7¡Ä´E§º2m­èf˜+ºYdÓbÚò^–˜¶hMt³žzè%¼i%z u…r”…Û9ÕÞûGÌòé 8ÖK·[íaãÁDi¨¼·m“–.5m“ô­¬ å¢Ú¸ÒBì3-}×И²ŒâíuãvÛ/¹÷\Òó>KyîÙ§k³z"EÍIfïÞ ­št‹ê­ò‰\h01¥:HNi"§¹ç»ßTp”šWáªoQ=«}ÕhÆÛtCeåfÐÕ¼Wp·ÛåõßÅÇÚ±5fhÂÑÑ Ü>NmåËÅö¬|¹Ô G”»uÞ|»s„S;úr©â¾\.ÎÑ— ^måËåMÊìÐ{åËEï•/×ñg™¶òåBöŒ¾\ÍÞG_.z¨|¹è¡ò墱~ð,ÖÖ°u•#պʑj]åHµ®r¤ZW9R­h"¼?*Šˆ§\9R­¯©ÖWŽT+JH`Ž  sm@›h  Q@ˆ¢Pð‹úAñ*7¦ •Ó†ÊiEõ t̓ÒYJç ל(²)¿ˆIY8ô»ûGIÔïýâÛí:°š.Ü©'tº+¸`ÅHMT¶KÊI~‹º1¥üf]Û5Ð ,dbž÷IÆl¬¸$ E &³%ÝãÝ‘Œ®gY<ò’põÍäå+E&/ ïš(¡’6Ù1I$Ê7—5†Îh»¾¯E˜„E’wãg¯j#!ɸ13~¾À»KŽi^ä®åQågkCuò¨ÛG݆<ê6äQ·!º yÔmÈ£Z󵣿‹œQóå[‘è9VÞ(+š/†h¾˜^« +š/U@Ñ|¹«Çã^C‹ÜÛq»†®©u)ošt5½qºì—Ö<Še7ÎF…áe«‘ƒÛ0胹˜À¦Ý¿‡ÖéŽÀÚM ‡Œü¥Ði 3)ù{UD˜³TwòsÎy°Ã¾>oßpT zÏîï3døöî­›õÞõ¿[‹)Ž€úŒ»lÓ¾R’b²¥líUûpE%íÚqg¶Ÿ£­Ü£ŠôãÆÔü—ä ÈT9Î1/•ã{¢rœcµ÷µ…nûÚB·}m¡ÛÑqÎH¨Ñqª]å8ç?Ü0 ÀB[YÆNl2¬ '6׈ØdTŠÅ&ã"›Ìñ_šM­‰M†õàÄ&ë远fNå©ub“ÑE©7.4ÁK½D/ Ùƒ‚6h9ƒÚðËÞÈØ×óóqõìÛÅÙéÛõt¹>QÏnP¤Ñö„•xÙk»@nq(v¢ºúµ=Qvã ¸A” _ ¿l”±üRèHxĨ&Þ Sî†ÉvÃ4ûa‚9ÄÓj–ñšþ¤ºË>[ñ–ׯåºÌoÑ?ÜÌ®‡>WPà‡ÛõÕü:x ‚CúýâƒûÓj&ÙÃHoF½˜®§W ÙßÜ®/Kõì9ËÙ”};]Ï@úŸMkB‹¨¡:{ÚvjÛ?•r¬ózúnö³ú4__ªK´½\Î> û»Ù¿>-–:¶ ¢îkîÍ»¿ýܼ¼½ºz?½¾ž¡Ùw—ó•ÂÿßÏ¿Cû§7çØkètVÿxËjüÇÉI ý;¿=c¥\Xå§C™“n˜‚þHÌ»ùúj–Ÿ–Ó››Ù¹š¼œ^­R,Þÿ(fFÅendstream endobj 86 0 obj << /Filter /FlateDecode /Length 1894 >> stream xÚ•ËrÛ6ðž¯P}15µ(‚O©Ú$M“¶ÉLêII0 “H(B@vܯï. (GÜÑŒ€]‹}ï‚¿\=Yþš§3VÅ)+òÙÕÍpÆÊ4Î×ŬdEœ­«ÙU3û½æiY­æ ›]m¥拌e‘U~ìMÎZ¡Ì¶ZœbËk<ýe^¤oÅüï«×/]'ñº*g‹”Åk¶¢;?%Eò~^­"¡Íx‹ËÅ V˜§’Í)Š”$™‚³<.K6[dy¼‚Góº * i0õ:ƱŠ~“Ÿ7|0G¨ÎX³*Þ²8« ¢óóVËž(äD!MÒ’ŽžÉò’˜:g –­â"Yó4^'ž›/KÔsÆHÏ0=Sl¶Ž×eZ’¤ɯóÜio´wÕI¢Yt+ÛAX+J£F˜ZKÔ(ÖΙ·¾£Ál…+ÁòÜ ·š\ü1mý-“°zÚÍŸ‡”‹@9äfÛ‹pÅš#„A@g•’t×ÊšƒÒ5êL¶s©Am„Õ÷„¼Ù NƒÆƒJã$A®[Í·¬io·=r[‘å,‰þäŽOHÝÐAÒ”§¼8Âjâ™ôvõ—gUuéÝ⟠ÌôVÂÈÆöÊÖ-¢ƒ­ªèzgiUÚŸàÚ+¢Òžl+¡yïO¡ÈǯÔiþµè¹õ̇:ŒÈ^5²G8nýØ÷ñº,‚‹¢ß@\­#ç«0rœêw¼%Ä+-8;À85,€È޵ÚlwÖÓl¤±|¨=ć& µðé AÌ2—4õAÁµÚ‹“nè…àÿÈãÖv¨ñ$&vÚ—£ÀUÀD½ZœVQ«ê ±µÔuï€Àl1ÒV¿k"¬9ž‘¢ßêÏÝšEäÚUtÆ=MtÕ“ö­!Óówd»OIVHaΈ÷,ËIkdV'Nuw`Dõr@QˆF‘L@4Ž5ØÊbHU‘w”©¶ñ“^SxcjœôFÃÇpÛ¿] VC‡F¦ÁéUÉ&>­¿·Š0’bz3‚r¨û]#pi'Ä…D ~vôÊ9|}d0¨2ógpc¿ÆÇ:m+) ?ÉAHH¡R°QMO‘¥j÷õ"Að l ÊhKæÔÒ¯Ð9žH¢ÚgwT+a\$-Nà>›ŸÔ9ݤúûV M5/§ n=в!…±‹<€¼{`¼tP`j Q’ ¯ 9zC+­³·*ÈÙsÆØ•Ž:}¤Ý”n„þ³Ì׎Fž€¡daÀ[d,â ¬½«èÍÛ+ħãfÍ ­Åœ#ó|zÜU ®æ2½Ú™þžîÅ¥ý½µÜ|×f>hENÅÔrÕ!Ù ¿"b)^ LhY±„°IÕÀŽ+™_1²Jã‰\úSžÖžt²,Zñ˜,Yfe’„C'½¥Ðý>mƒ(DžSSƒéè¦DBʼs!f¬_É£Nl$x0Ì"pw˜jœ ¹‡E:¤¤<ÖÚé‚®îZì'±ù»á»3"cÑn–Ð.IãòXmšŒû\@?ÅùÚ÷ [FZN!†Ú7F byóB ákßJáÜì í¹‡¤ÿè ‹ Öm¼ s?‹Æ:²Z9wvž{Îõ9M\§‹cRFOŸc¦¡DÀV*"0_·Zãx†£®Ã{Cp câ á/iHN»y4àx”©_â’†5¡Ëè¯4[…í#…Ò*¡‰ç1„4Dý«ZáºÝí[k‡R~i_°N†¯/£àô–AÝ ‚Œ —ÔØ…#âáu€B•‰¸Å â“·ô[0¢ó꠸Ѯ@ñŒ·wþbØj;×oná!Ïœ¶Çe$¼OüÛZ*¾™³€íÅÐÚŽæ(…{>d,hm•6¾Ub¾Ñ†qì]WA,¿@Q‚QËeŽÆË¹uY3E-&ô÷yaŽa:y¥†wAN܆ºžæøµ€ßžOC€wÆ¿N©£†ÉK±xt3è;Ú?äuxQù* šxÿ ?ÂÿÎõ î÷ϳï¸9ʰ\î?ôò:†öÆÉV P@+b©–Gû?qå:ÎÊr¶¨’8ËVáƒl|òâêÉ¿‡¿Xxendstream endobj 87 0 obj << /Filter /FlateDecode /Length 1576 >> stream xÚ½XKsÛ6¾çWhr1Õš I”Øi:ÓdÒ¦ŸOrHz HXä”"U>ìèßw¿]€’,ÅŠÒN/&v±Øç· ȯnŸ½ø%šOüp¦Â8˜ÜÞ="'¾R³y¼˜ÄÑ|¨hr›O>:ÁÔõ}Ïs~muÚO]ÇNV¶Y¥±ž;yÙõié韷¿¿ø%ô'É,‰ƒ˜µïS°“„áÄ üÙÂ_ˆîÛB·ÐÅNjwdÏi¦¾3`Ñ 3/?yJ‘p= No$‡:ë˦î@ξvÖ¬7C¯íAãSË©KÇu%ø£I¡YFˆE›R v³ãø&® É÷gI!ud- #„tM«¹rH sš6×­YÞÉ·¬3JlWÖ+¡á}¥?—ìÐöP¶/¬æjÕ´e_¬þqãê݆RZfiuÂ_Ïx‹§U*1»aˆ‰È'óäŠî® xá;WoYèžsÕbëJä?y‘÷®¬ë¦ï¨Ÿ,Bâúöä{ŠŒªˆŠ™ônÅ»hõ¤u.\–·å¥Û'0©~SUå¦kÊœt©yÄ>hÉ…rÈ#µˆÉÁyEx­û‚JM–ò@›MÝhî¡|V™ Û®¢/Zmøi× kmÙf¡Ó¶/ OàËë%ëgøù€:Î ÜU±óP””>n3eMÑbÌÓ.©`äBY7;!ÊÞ| ÖòÕöÈYÍ ¶8<‘UMGÈ=÷ RÖÝÐéÛ¡/õS ô…þAÖ¨óu7T}'Ä]Û¬eÕÛý±@•³.E¹7 ʳ‹27ØàÍM+‹M›f#ßs62~6\B þ¢ €fTÎQïi¾*Òêε[:w¹µ!¯ÖبI™Á£)í„Ø Ëªì ¹G…rþ˜}˜ÉÊt'ˆèì<@{^Bó…šcXžøÐ·€},ÌåÙIä_uÓĜQ,Öé0‰8US¯t  ?ÛQî/|·x žŒØ2ÊS”òɉf2¿iuVv$LþÅ r6眨šÝÐo hŠÔH¶´‘§&“ØE™üHöórUöFÑhDPí†r>”hœÊ†vwIˆ_ÃDÀøýºA X éê'µJ™ÔÄ4“ZˆC¼#Ýri2ĈïªØ ¥)Ûé£q³5B’“1<6$ò±äF÷Ù˜ Ø1¯båtë´ª° Æ+ºÃV¾óÛð·(_3!ø7c9+¼GPJiF‰O³qÜSâ·|™b.k†*ѡӲE›9 Ç—@ÿËÚ=ÍÁ%ófކ@¯o&’¹a¾vø½Ò¦nš)„ÁÞó'CÅÁzô”™s%Ñ‘ÍÅÞ¦°cï¿ßàÈ”$ɲª†®o)»9ðí­znÆG•¦³]Ñ´(™¯v•F‰üÜäWmÉóâ,~5X_ŒG¥ $u…†™sÃ…†9Ø~ÝÈCæl‘åq&ö}EÍ— oô¡Æþ‹‚ò6Oû¾ÅnjZÒS ÅáZ•ëô‹Õút6‚“ï7`”CÃM}uôbböøH; èÎhéEºJÛ·¢RûíÌîÅ? âGÎÒ¯Äþø‰ú?ˆœª\¶i»Åü]éVå]Ä·ã‘ÊÇ%7¸°øÑ•oÆóü‡äý–ñ®…G$Ôƒµãµ#¼ï‚ËÌ"#ÿÙ‹ŒætZE å0ØïÚ3/tvmYÖ9Ø7|9÷!p™õ"½?¶þ6½×-ÏTrâbŒ×O9:qßmŽ0ÐÆ`ß¾³zÚ~½ÿ›tlÒŠÖôb}x‰4 ®«í2U7¼ªYá“gìc·ç>à¢6œ¦ziÔ{êiœ0ú‘.öüicc[•k8ò’cs}íz‘0ÖâÞÙ¿Ÿºñ‚^PŸ+(K—/Ÿß4«SÞ°æÓݤb“ß׿iôÕAˆ‘€â"Z,>¿ ’í.’/ùÅĺ¬³”fánGxè±3Ï/jƒÇP)Ø•û}¨J\tË·AeY ú"¬ü/Øåï›*Üúб Ë•ÿ¶ªËÐé·’_;'+ο/÷«~Tñ§þ›'3ÇäÌ‚‹Äþ¯ŽÎ={sûì÷#Rendstream endobj 88 0 obj << /BitsPerComponent 8 /ColorSpace [ /Indexed /DeviceRGB 42 501 0 R ] /Filter /FlateDecode /Height 600 /Subtype /Image /Type /XObject /Width 600 /Length 6676 >> stream xÚí {£8–…ÊxHÕŽ]»³vÏŽ™³U1¶ùÿ?pħm$Fðž~’®bäã£Ë¹BºÊ2f„Ûq#q€ à—ï§,K·_Yüí6€³h%ãT¼Ë²$‚à×½ÔU’¬”€\ǫǫ*ZŸ¥ÂU›.Á\úqî\5é*tWÄ+§tE’§®LþÊ8÷®šþjsÈuÕ9ØWÍG?÷®è*û"\…wY¸‚+¸ «wßæÙ„-kª…Ÿ QÂBW¯Îqr5]>¢%èJIJ}gîÇku¥ê]÷K¿z®ˆW©à!+„…®Ð•ãx%GñWäƒný•ê…›ðŸãL2÷ÃåœÛ‘çƒl1÷ƒØîÃ60÷]ù¸ 2÷]ùˆWÌý@W^Ü(s?ЕŸ|¹è ®à ®à ®à ®à ®æÛèrv»fÅ3\¡«þè|ÔWèjœ°"¸BWî‘¶Á†+tWpWpWpWpWpWpWpWpWpWpWpWpWpWpWpWpWpWpWpWpµ®ôUÀà ] j´¡ \¡«!6Uƒ+t5¤Ñ¦*`p…g¯ôUÀà Ï0Œ+}0¸Â3 Žíš*`p…gÀ‹âОaÙº½/Gž®î¡Ì9±Ý¹•òÂ3 +º"ÇÁ38ÎqJÆà Ïà0Ç,‘ãà|ä8£î‚x¸Â‹âО!X®nGmµq¸Â3 jt<’&b;\i¼(\¡+t…g%ÇAWxÇ9ήˆíî¹ÚÛÑ^Ï€®ð ë媼rÄ38Íq¶_I”]¾ŸèƒÄv·^4k—"¸BWnuuùñ)¿à Ïà.ÇÙeן't…gpÛh1I-Þ1Ïà¸Ñy'Ìãû¸'x¸Â‹âfÒèò9þÏ€g°Œí?Oe]FU‹ÎçùxtÕ[W·£ŒSyGít¬Ävtõäþ&°ÓØU©+ýÓõ¡+tõ<^iÕ§âU«Ö­+Ï€®úÙUi²:' ¡+tõ¢,Ùl´)Nªª>¥7KŸ—­«<Ç»|D#§¬áš±]æÏ…{è¸ì¹øZ,Wb¬OLW#¶;ÌqbÙGÓŽ[À¦’ÔyÉ}PÔøÍc¶VWÆõMx††®njã]޳]‰áNÝrU Ó`­g—É3Ô£|ëŽWY¼ýµ´KMnõƉ†«åëÊÆ3\÷Û/IXÚeÜ×á¯Ä=îÛ§¶ 㢦ؾßnãdòœ#ÊÖÚuSâ•¥g DZGR†ôÎÊš«™/jò èª_GU±½³Ÿ®§î‡Á3;&ókâÜÆvrçð/‹]À|ù8 +ó€Ü¹±0Üæ>¸r]ÙyâU-—]3å륫Z•Ä+rç»f[“œû ¹sl÷PXý}°‡g Çaž®Ê=L\åÝuûûÔ|Ñ÷÷÷ê;žarÏ ¼‰©ôí”ç7AyQ)ªâ;ža–^T¦Ï"o(w~øþÚxEîÜÑS¥®Âëó +[Ï@¼êÓS…®âUÇ+KÏ€®úôÔC®«ÎÒÖá¯æý…ÙhÙS kâ–žöà*´Üy¦®ÂÎѹs(\é£6ºZAîìƒ+CÔFW+È=peŠÚ™ÕWtvîìž+SÔVÚ3=¸À3ž;{ˆWú¨]„®ð £vu\Ùxteµáª—gPSRëçµÐžñ«×z©+YO¦±2gÈegV]½Ö3]ŠJÇŒ3Ì­Ñ µáÌÙvæä:j¿¯QëÃ×U8²Àöºt…gè•ãÀ±Ý=W¬áEWsmôºÖ†ÃºÂ3 +<ÃB¸¢¾(}®à ®àjí\Ùìk Wx†¾`_K╇F³¯%ºò“;ÛìQWx†þºb*<ƒ{®Ø£ Ïà%¶›÷¨‚+<^Ï0‹Ø~@Wx/}]á|xQt…gpÞèbµ\áÜÞyæ…g ¶ãОaͺ¢n-žÁC£©AGl÷ä¨A‡®|ä8¦ºµaqÕ½q žaÊxeQ·6$®4-á¦ôW6ukÃáJ·1žaâ|pAuk}êjyž/:xµ0Ï€®f⯖åÐÕŒòAjÝ[25nu }®:{àèò;è ®žÙ†ÍÈEqè ®:Rrg<ƒãF'"^1†ŒgpÍÕÛ ®ð ŽuE-V<^ÏWå$Hú žÁe£ãíW¹g€«{®vrG³„Ú;xǺºüø”_p…gpÕh1Wíúó„®ð n-&©Å;æ@ÎÙ3¼~/ÂÎ;aßÇí¬‡gðÉÕ öNÅ‹.Ï3Ìa¯gtµ<Ïž®ª…á Ëq즌†âW—Ã+.ëSV™Õ÷`b{˜þjqº²]’Žg2DW«ö èjñjyž]ÍÁ_Ypu;bº –+où ™«jÑjÚ5K ]ÁUo®%H»F¹à ®zsuÝW'¤Ñ}{ËÚä8pEôÑh¸êãÊyÊÕ×Ð\ ÈqÊ{@ç3DtW½=ÃË>¢ uWpW¯m4ã¢påË2ÖWäÎþ¸’ÅXµ¥,઻g¬O!þöyùˆt›ËÂñjÐZ€4¿Ïij’ÃUÏÀX_Œv’ ]­{¸²ö Œõ5t•ß õkLàÊÖ3¼,eŸWÛ_ûhìÖÅpUΩ².ÏþÏ0%W³Þý̓Û7ß>GvÁ tõ~÷5WÏ0W«tÎJZçYè*ŒË–sÖ{ló"Ï î_þ¸*„s~ˆOê×g¥­÷Lýë|šž?` ®ê[”ú—üþ~‡ìá”÷ŽS/b£«òj­:àÙ3øÔÕ¹þ:+•rQ¿=?(M44Øøës%ÀâÂò·¶™«æç_j@}¼J>…ˆ²ûSšgÿÝ¿H©°Bï]7ÊÖݲzáaùó þtU«†Ž²J(òçR[ê¤s[RÍÀVœpÎÌkh£S£e0rõž=ŠK~°Y%)%®ì^õ aµ_$+tÙ”æã²|íæ¥»#–ß9E÷uHëY6#4u®ä”•ŠiÈå\þr>ºÊâh,WÞtÕZEü™³®¼Å«s­…Rç;¹œKß4]%£ïƒ¾uÕ8õEºrè†úªê¿s3T5+ƒœ›ŽéuþÊ®¼ù«J‰:]M⯜y†ºjXô:Í»s˜O>h.!ýÂ|°¡°Zv¤äƒ6žÁטL=ŠÐ¼ú<&cxD3‡ñ«û|0s2@ê/¶{¹l=êYû§å PÎå²H½é*ï«ÛßÇëË–J:—þ¼€ØW!êÊäÒ·S²ýò7÷£VÕyƺ2Î]Ÿ„« teçÄÓiñ¤ÇÛ\µsöÌaÍMW±YðÎÕ0a½È_™ÔWpåmnmõüfƺ²› 㟫¡fþYføZ]ÉÉ9W±¿>xž:\ùÒÕ\M¹¼y†Í!ç*éÚ°×W3Ï-g^MÃÕ´NË“g0íS¸’ù¢©ÝFØóåj:]œT»*]Y?óš-Wèj–ñ*äËN쯬<5úÕ×r5Y>há¨9`¸²ö ¬áUDmÁ•KPs®¨ÏWáxjÀ•{Ï@Í{àjÙ—¸Ñ·ã¸™¢è ®ž‡"ÆçpÙ×o]é:^¡+§žaØeg°Õ®c®.ßOèêÕž¡µ5øù<¿à5§>ˆg¤«ªÄ}pEµX½ëªUσ>¸ åÏ3´ª,,AWøöyx†Æ’øEèÊɶáøv‡—]†¿ ¾èâ<Ã2òÁ/‹g@W‹ðíxt…g@WpWpWpWpWKâJ_1 ®ÐÕ F*¦ÁºÊŽõé*¦ÁºÊ†î}¦©˜W­NhÞ/®jª4ÓàªöKíá¯ôÓàªí¦Û/uVŸ‡åƒšŠièêÎ3Lµ_ê¼VRàEK´¶5q§+«ýRpÕZIdl?,RW­m˜œù«éöX]W ßÞÚ6Îa>8ÙëáÇ+t5Ë(tµÌu©áë*ð|p©sÕ¼ø+ž¥’zÈy–Š®|yQž¥Û}äÎ8Õ³ÔÙ•Ã"¶ûö Sh·_*\¡+¸òØhy3¹‘º‚«;¤ò‘s2îÁ3uŠàêž*•2ÿÊ6uŠÄŒ£Ë‡f†ÈJÆú~ª÷Ï|Q›>h®S$ŽÉ¥¾…/Öµç ñÊÆ‰ë]÷¹šbÏÒFWõÌ‹ù¢–º2Ô)º*ºjÚ¡¾•=ó5,³e®SçÇâ¹s?Ó`¬StÝo¿dÀJ»Œ»þ²óÛz]ͣѩ þÑ ËÎnbû@®ò´Y2Áº‰Y\v~ q†q%—Ï ç®Ÿ±VÎU>¬]Wb`Êg\Š®ä肜‰kLƒ6´sÎòjrç1w6®X®¤ÁT>T3&SŒðÕ™ÎZuU:vÝX_%:¥Áuú+™1«´Ù4Ö—ÉQ›µÉ(©hû`¥¦dÐ8Ã"òAI”š0ªéƒe¼ŠÖ>Ög¯Š>(ÖŠ¹Z‘S®{¿’ýS˜¬ÎAü•«xµ ®Ò·Ó혿ÿÛQ;Öžª,¨Ó2Ö}°<ÚY©n\¥r6Qº‰&ÿˆ‚Ô••·Pù`ç½®ÐÕÄ—©i÷ÆÕ¨1™ÅèJÙö‘•Xu—ë ƒ¯xä˜ÌBt%ž(7ÿ¯÷a‡þ—í ¨§˜§=º`Qz]YuTÆd¬zºZO¼jîdòÞÞÖdãºwÔÕúüU¸c2Í—Ô†9ÃuU÷.OºZR>(v1ù²8)Ì1™÷æ÷ÆÞqƒüUôà´z}2Ö;ËloôrçU誊AÆ <ú‡V4Ö—èæÍ¢«¬5Ê’l é aÇ¡U!Çfe ô KñWY9<ÏÒï8´]%rбé!aºr—ö2øº‡VS¯¯ì‚†4'L]Mó6í8´–9Õ´t冇à ] ½nV_OfÜÕÖ6&ðe§¾ZÖ)bL]yÐc2yšWreHÕ¼í5ÏU+çë ìô'®~L¦‡®ä*ËÆsê5Ç+3]k“Il : ¢ EQ§È&°1&cÕ…®dÙµ¯µ´Ü1ë»evûãD¼²Ý1™Ìš¦M”ek_ÃË>q}`S§(—–¨mÛ¹(]¡«7`®SW•#GWý¸¢&¹UdÿÁž±ÝÛüöEqe1&c¹!^¡«þ0T›Á_¡«¡ÂŠÐ•m>ˆ®ªÛœf¦‚ £¢«{Éèg*àÛrÙɽ¨~¦\¡«¡¹³n¦\¡«¡¹³n¦ž] ̵3кʆïGOÈ_æE7£\(ºBWOÞXvEºŠe÷}Ð>l¡+3Ôã¢ÖQ{ì„+›ûÁ¸è¢Ê˜SWŽo€«âŠ9½ÈڌϙSW>¤µªqÑ‘½|®tÙÉýãWèÊ‹®Fgƒ¬£‡+úàˆFÇäνo„ôA ªXïlß·_ITÖ‹+tåŽ+Q%&‰àÊl¯XGßGW—Ÿò ® `}>¸“µÕЕ½Å‹Z@š†«÷è /êTVõºBWNeU kÚF×»  «Ú¹/bîÇTººî7ÛßÇÐ=þ}!s?&ÒUúvJ¶_<Ç1G«¥Ç«v’£›ûWèjh’£›ûWèjp>¨™ûWè /Š®Ð\-˜«¤¬©F>ˆ®Ê*WÓå#BWÀí ÃA÷¾ãWèSÁCV ]ÇñJŽ¢+àÖ_©ìyƒ®€;”õ>Ì“!€…¢÷³ Ð@W]€®X Ķ Ñ £—ŸæÐþiŽ^“Ëá*ªò¶ªé"Ï©:d×ýó£×½§ÖÒ…âOå_ÃÕ¹R›u=y½Å;IžÎOUmµr?í5I<­Ê’ˆÇpµ@®ôoRÃÕåc§vÄ’«…;× ?÷Ê»òÃI¶ÿ€«%r•|ûs¯¹å«ÀÝñv ®UWîsYÉÕåû)†«Er%–9iªÐ\>6û¨É7¬ ô5 Š+±®ÊÕNácÉd‡£ÍUïÅÆp W’¥®êFÊ tî±±]îW‹ä*Õr¥~ßú[^ôП«DÖé·Þ®‚€z«];YôÁ!¹s3Y¨ÂUÏVß:KÖ™=à±>¸ZºjÔj’ÕênÇþ˜ùkñÑëý?ÒuOè,uµ^r]ôÐU]«©¨âÛY˜Õæ5Æó—>^=q[dÅÌŸ3]ÊKRÕÉïeÛ¿›Ô§ÄòÎ&Ë}É]i«#Å߯õ/.ªåüÿWã¥EÙñûX¼È..N¾;ÚØ/!?áE¼WE©×ü”â:í×P´'ÍÒ@’íËÇÿæwäCZœÑ·¬âhþZºR-WÁ½ü£ø¯Ç¼yZ~åE”ù’AF("i£úÙæHVXJ6QM«¿­úT+N•‡‘’^É[Y3,¹?ZýYÙüôò |÷e;Ú¯¡ê–-©»øåC2..)_ÜmU(3M]-WµÒòWÍ¥r´ü„É‹ºh~yi‘ÚŸouÊA±!oŽÏßÔ÷Sûo›ºŠ¦«8\•DŒË7#™)ve¸/˜¨.WøÓ´ÚDaW·£z y5u¨µÅƒl¹¼0'E¥`§E7Íü埲‚RÒ“¬äÕÍ•á]ÏO˜¼T¡Y½|ü,^)޾}æ-½þüçJ uXª«êp­5o‘úÇãÑò¾"$e¿T‹h­ÚQ½F•.Ô-©#…üI¨‹+NÉ_Û_©–‹6å_us‹OZÇOè¼Tå¿C½h´ì]ÑåÇŸûCe]ºjvØú°ìº‡6oEåÞM}´ä¯U‡¼8¨â}ÑŽGþêSˆ²GþÜn!hæ¯ul´¼õÞãJtÝüÌK®Ùîx%­º2WÛoÿvlõ¡÷:g)}{²9´êMË{ÿc¬ãáó~YüUíèê—íOtÊ~ùŒ¿†® ~ûS¼“š®ò|=?áñbá¯ddßË÷ÿÚeÉ_ {õÌ_•&Q¼P}8«£~ã½7wehtš–(s-? ÑŽê5ä]WüÔ~1%î{þ¦÷Wµ®j?þ^9éöXŽžŸàx)ò™H“Ê£‰Èg¯{›êsª¿m¼ýƸhyX½ ÅbõÞåQA@u´™F¦EÞST&´hGý•¦Ëkå=mþ¼æƒ‘6¬”‰X£¹òeôüÆ‹ºñîîÆ_š[ŒU§ˆ±’í¿›JÉîÆnšñVŒ©ô–‡“b „oò·QãhóÂßþ¯è—åAÁ[ÙŽökÔã4ÑÝ8M‹?ÇËfþšþªfPÝ´ªæÆÕHU7?AñÒEW”-O6{H&)j>sþ^À‹´on=Üëàÿ9X˜ü½€—ÇÛQÈðþÜ>Pþ^À ÀLñ‚0g¶endstream endobj 89 0 obj << /Filter /FlateDecode /Length 547 >> stream xÚ•TKo›@¾ó+P.^Ô°Þ¤¦‡Ên•*—*V{pzÀ°®Q¥<êøßg_8صÛX–™o¾ofX°‹ä…]L)œ…‘Kc Ü´t~;0¤aÀtÄèU»%z3¬Ò8½/±;ÎWya›Öòú£Ä—ÎôÃn ã„îrs¼s1‹à —F*Kæ®ÀrË=Ÿ"²ü QÊ^¥ÚBÁ.ï¶Æ× A“o¹tW‰@§{c^E^·"Ï&Yòn+<_d& oÍZŠÆ&¯Q‰^&Ë ç3€ûÊû±ür¢ØÇ ÆŒÉÃ8Œd£†ÀŸ“².ôƒµæã…Pºv&à ¨oóê§ 93¾Iú¢3Öï™Ï5[>Ô"ÁøÖÄ[ >m’téʤ'1ü¢ïÎ”Ž @š ðhVá „HŽ äƒç$ÙŸ–›·÷¾µämg‡âË ÷‹‘|”ªºE¶Ÿ®s©ý¢²æ‡¤SAêþ[Ú©~+¦.„!)ªžb•I2ãì¾R¬²Nñ«3Åe!#–•Ì09þë¢ççÂ-Ís‘¬ï®€™6v{ƒ~¬ÕÐ1hlÃç²Ñ‰ûP߯rÔ®·éúokßÉÃ0# ì•ö›y¾ÙðF©àæ5ïvœWgû§üo­­¹¢£”˜ïæ1»D¬@Gä‡/ôJ~ýSÉÚqÿUn5ƒ›×Aüë÷Ɔ¡> stream xÚí‹zâ¼µ†Àv¦5ówzÚ¡÷L øþ¯°–d6`k ËÒû=¿É„‘Áz³Ö§eÊ!„B!„B!„Bb*£-·Ié¸IRóÕi—¼qCV| ~‡B!„òjH¨Åh ê´[s|¸Ê¸ ÈA¼‚+ä@‡ŸÜ„oGøv„oGߎ|÷í̼BÎl;¾!„P”yð_µÿ;yIú+=ÌñWHTE’©59)w ƒÅ`9ŠXòÝ´'­H…!„BþŠý#ãÎ~2È…Øÿ !„B!„Bù¬Ó.-ó$a5=Õþýëð‘*º Wjzû¶ÌyŠƒ¥ÖãäoŸp…ĹªRa™c°¨¿ZÿÚ¤lW„Ä Vòþ…mG!¥igr£Ã‡rìªÔ€ mOëa!u$™ Mº("^!ïe6ýÀ_!ƒB¢B¡Huø¨ò ö 9ñí¬£G’¢Î€ÜŒ©‹"âÂ_!ƃŒBEjÜ™/Šäµ—*Ak,2 ~?Ã\!/¸’Y‘ Wpu¥ÃÇ®h‹­„+¸ è²®P\ãÁŸæÉ`NDp…|æªy†£”•p…Äãþ áÛ‘ÿ|Ü$ëß» ®Ñjµò«âí3_›]°à*¬ê?3s¥ÎP{lÛí³ W>aå¬Ió4WÔàJ4^¥š«=ñ ®DýU²­¸²\çWø«žñ õ:/¸b<èBp¸à ÁZJ.ßÁÍœQê xwÑ:ƒÄF2px­u^È ®N;¸‚+|øñ Wø+|;ZÂxߎðíh¦˜…oG.<û3 c yýàÊ׆+¸‚+ü\¡eŽá Á‚+P.„+ä»OØ_t Wc%ñ Á “+öÙÆ_¹ê`³CQn·à®^Jæ|g¸ \“çõ±OA‹x…^l²¦ìS„¿bPè ƒõ ð^´2©²¸7f„+¸š^ÅUžê¯¶pW‚\ÕDq ®ðW“¸ªWE™®^³þõxÝ„âêô·OâUÄr¯wiyg+\ÁÕD´Þ>ËáM“á*ð\8¡ƒ쇌wïàº.:izßy6]v­ç8È ®xî W3Å«'fÿÁþj¼¿:í3¸b<8a<Ø5¸ŠUŽ:¸x0\„«Àcëq 5¾ƒõÁ–÷'`ÁUôcÂñ¼ÿ:|¤\ÁÕ¸p•i÷Dý ®$;XŸ®ž)ÃþJ˜«*ê³ÃáŠñ œ¿ZÿÚ¤¶ÇÀUàš2LÞ¿,m;\…²¨_! ®‹!¡‹u©pWæ3èGά£‡+Ñ>í¶õ°:þJ®ƒ?M ¢.ÊxP6^eÄ+Ørà¯ôÔªÜn»m¸ <N?ÐjëZ¸ Ü»S¿Bp…à ®ðWÏ›«gö)‚+ƃÄ+PÃUà1 ® ŹKÈŘx…à Á\á¯ðWˆñ ò-¸B.RáØ<Ø®Fe¾(Ö]–+\Á\!¸Bqú+¸b<Wh¶à ¹È…p…\xwžã ù¹\Á\!Çþ ®¢>9$„+ä"dÁra±à Á –«ãÆvÏZ¸Â_õ)·ß®–<$t×Á -Ή-ùÞÛ‘W§ÂI¬ÂÕ¶,,À‚«À­ûøVÇÑ rö…+¹ñ`{Ò\Á•g Wø+¸B×ãÁ‡CBÎ1A.B\!k\ŸvçyÈœï Wâþ ®ðíH¬Î}Òyô¬ÇaH¸º°ÆwðÞ (¸Š#N¨·g%\Á\¡%puÚ¥p…UF§žÃ W8÷{CÂéçð2$d ‡,êWÈ…Å‚+ä Wj¥×ï]Wp%ÉUñö™¯¿¡Î•Wú\Å>$ X“ꢚ+ƃ¬áL8©.ª¸Ú¯àJ+U­¸Êíª£pW=ãÁ$y³›ÝW;wêWÈ…s‡+ä"Nè`åØm>Ã\]ɨ‹"Q®šy}ÔE‘BjÀ¸O犺(2Î]$^5óE©‹¢;‰pJ]TçE]‰reꢖ‹½à*®zõ+diÜË>‡WÈÚ¸÷dBÖÑ#‹uôÈ ®XÖJÀ_ÁºuXöñŠuôè‰DÈ:zäW¬£G×\õìÔ@ý Yû+ó®°o¿ WÈ…Á×ÁÇÍúþ ]qÕSi ^!‰€e篎ù†+$¯T‘á™êÕÃgÓp…¿º!æá äv2i1tŠ\¯®¥âÍî³×þxhÕ\á¯zTÜ7m®,^WÄ«\7 ñ ®\Ä«2ov›\ Wqµ*oä¸ðWç‡Óƒ®àêf<(0®ÈƒWqÈfºèù_º®:\ýñ%ó^àŠ:ƒ ÁñêÚoŸzÕýYp’oÕü«Ó‡«ÐÒàKæÉ<\´W!¥Á×ù«G‹và*¨4Ⱥ ô’4WÈE„+d®úz†+$_e˜T¿b=êrÕ³*uJ›¹/¹ÝÁKpôh}¶‘}´*KÁý¯8µƒAâr`Ú%ÏÀ_¡Õ@‘¡œ~.ÀÚná3\‘ËhEý Ù$AÎáE.<{ï#œ‰̹¨lvA^ `ŹhºeÌ‚ìߎ¦×†£\¡©Öjp(8­ƒ9€`µ*‡ W“;˜sVw-ûÔ<È<™¸cUùÀ²ÏÙÁpµT³^ï+¸B#ò_ËÔ£`5©ƒ›DHŒ-ÿ5L•‚Õ¤Þ¯¿ó´<ü`>C”ùï™`UN¬_ëï2Oá*ž’¨X5™«ÃŸ¾ô¸ ©ò2ÿ=«&u°Ú”öøó®â@jlþ›ÞÁjbû>Üé®–nÏ/:ÿg広+ã^ íf5À•·Aê ©&T­ÑÁpåQõà"HuBUã­Æ2W$¼› Õ¡k"Rpkpê°Ô¤l‘‚«¨€*¯—‘öÿwUÚ"W‘ÕâÓC”H‚«è€êãªÂ‘‚«0yêê2D]°$LÔ”~nÿv¸š «²³¹Ë5PÁÉ KÄ«`Ë=™ï%ç@ÁU ‰¯ìÊÿ®’áú÷.ƒ+?_9/P“;¸xûÌ×߃'¡ÂÕ\‰¯ûÀx5÷œ4OFÍe`>Ãìêš+xšÜÁj^ŸæŠùí³ª¡Äç‘&­wV\±äì†Ê«Äg﯒mÅUnWÆ‚+‹8åeâ&‰Ýö¢pe§|L|~t0\YÅ)ÕtÅsâ”›ñ \§äã\§t°å z¸z«…Æ)‹<ÈþW¯Ê ŒSŒ—ÿ–§àÊãü·à8eÑÁÌ“q”þBˆSÓ;˜y2®ÒßÅ ™22®˜'ã.ýÿ,ƃ̓q5ü ÿYÄ+æÉ8þ…#æÉ0üóg<È<a_µ +êW^”Â\ÍWV1ÿMï`ÎKKæ¿éÌy©r\…+æõ½ÜWÁ\9ñU«ð±â¼TÊ žø«Ãç¥â«d;¸,Êxp´­‚«p/;«­ŠÂWÁÕ é/_eÑÁ:ZÍfˆ•«ˆ4i¾hõßüóRŸóUpõdÁ ™õ¬¯ZEˆÕ„ºèO¨˜/útþ‹ÈVÙÄ«Œx…¯rà¯ôLQæ‹>°Up5a4h] ˜«(ËU¾tp4Vñ•«à [åe>Re±X7W’¬—Ï+ç^àÛûízܶjjëꂞ‰¼Oáª×®Gm«&v°.^™™}ÔEIb¬'!›™ÈpW²\™ £ÔÛáJÐ_¥õT†ã…]ëàâíó´«"Õig·Š0®°ë2\è)}E’¾ö²¤¿À¹Zöeá ®à ®âã »WØu¸"ýÁ\!¸‚+¯;Xbò;WØuœÛ/w^,W­KÇ®»è`…VŒÏ S®;xoGV²X¬Ë]«pµµzHWpu¥ÃG©òØÖ•Ëñ`»'®xj³^W<µ+ÒßBó`|ûÁ•\™;ŽAà ®:jÎ\RÊÊ»\å©þj–¿B®ãÕÝ!cÖU <ðYW<µñÊè(®?4~Åe&&Õ«s…]÷?!©Ù ëo¸Bâ¬âÍà Éwpa;WýZÔ:/ƃÄ+hÂ_yÍÙoaãA‰ÈÉk°¬ep¥êWÙ8ÃUØ\ýñ5Çeá*žñ þ ‰æA‘9Œáji—'¸"ýÁÕ2.‹]‡+¸‚+¸Bø+:®ÂUéïþWà´l®<ÝÿŠô·l®<ݧ»WpW=ö*…+$ßÁžî…¿ZzL¢:ØãË"¸"JEÆU• ׿w™\áªÂñíoŸùúÛóRTgÈôY©^œ— Wk®|ÂU@ñ*Õ\ùq^*þ*•l+®|9/•ñ`HãÁ$yûœu<NáqåÁeIpåà²Øõ@óàÌuQ¸ Ñ·Ï_…«ë ÔEñWÁqåG]”ñ`xñʧº( Ç_ÍX%L…=œ©.Š­ ™«Ù.Ë0®à ®ÆfÁ¹öÙ†«ãÕ~¾õ8ø«àóàq3GýŠñ`Ð\©“Lì„Ô¯àJª±—%JEáÛ_½O®*Šx%ròR2+ÀŠÂ_Ù£Wp5óx®"ñW¯®_á¯"áÊz4Èx®æ»,8E¯~šhå|¾(é®\»WÍ™JŽ×ãÀUœñÊõeá ß.uÙ §Ž¿ŠŒ+gëW«K°ÆÄ•³õΚ*XŠ”+wëMâ#JEêÛ]­w^µñ °¢ŒWŽÖ;×Xa×cõWŽÖ;¯V­o‡«HǃÖ;¯à*r®œ\vÕá ¬àJŽ«ö`q´rí·—ífA©oWÑü®Ázxf=\ÁÕmAé^¡,C³’ž,V1sÕœ~§.z:?<ªÊßpeÀ¢?ˆWÃñê¸ik[Å%}çÙ[Ä+¸º”yâ|Ï_M‹Wb­gÖ¥rÓùˆ£U¯£—6îÜôØ?¢®‹ gAn:!„¢‡{!4A{€BòjêWÁòß^¥Ü$/ù© ·À¾#„Š5Z¯£GèÚ·K¬£GèR2ëèoƘIbQ¾È›^ ñ¼ÌÌ2¦ Á·%ÕÖáO_bÍÕmÉÜ}™uô·¥‹ã&ŽUV5‘vÚ¹ýbÌ›Q\ 4UTí>dÞÖ&FµuÜèni®nKèîˬ£¿iRçש~OýóŠó¶Û/ƹÇïR )ó`Bæmvênç}MŒj«0å¡;­<ß\Ý–ØÝYGOµW›ìØê­T7½mçö‹Áoýg¬›*.7±·j«åÊ®­êU:ÍÜiåéæÎmIÝ}‰uô=`X>xÜ¿µíÜ~ñü{ùñ¹×\Y7•¿ÿ{£Ý…ÄÛ2E —,Ûê°ÐÛʘæ:VHèî 0“m›Îì³mçö‹…0m훪}»æÊ¾-ý›_%Uë¶.|»å[«¹ºûúwZ¸ÔjUgh×2ŠÔL¼hÊÜÕB¤ÎÐÆ+ë¶r±:CÕÐÝw1OÆ®.zÈŠÔEMeN )uÛuth«ñWÖmåruÑnì“»ûÂÎÝâ9N›¼||Ž“•2måÍ©{–mÕ¹Kä9ŽnKúî#$+æÉ 9‹y2H^NæÉ ² ƒy29˜'ƒ‹y2•æÉ „Ó~üI¤Bp…– ü|`u$²ˆW!ü‚+„ðíߎB!×xpý‹ýBE “f‰$BRÚ›ùÇf „dÔÙÜùíHJüöé‚?E=–UçÙuEyÖo .†ÅOv¶7#jÝb÷úù¸$pÜl{½O‹[ŒÞÙ#kÉë›#ÉFÝžÝÁ ƾ»‚äY®ô½Ó{p?¸Æý_làTÀÁÕ,#íôïT®L¤¹Ø‡gW7'îäªh÷¼ ® WÂUýæõ§©è¨~ñ÷õ7oV°å&O5?RÛÆ¾ÿSÿ¨Éì}]ß–¿nê—ÿÏîÜ’‰gÕßTÿ®ù¶Ë•nÁìfªò©¾Æ—N’zg·Á7Õé ÍÕ>Éêl‹ú•K;Ô6®Ì¯¹„h®šý¿Ôž fW§ê µµIû#õÉëøšÄW´Õ–Êhm/_Þ6Pï’Ø~{'ÕÿïÍæÙŠ±†söÎJýÓ\_\©>‹~S [ W&_雿oúb¯:6-;éCÚeçЬ6<¤W/o0 ¿í㪨¿5WÞÞ\ùúMuÒ°ÞÅs[_@çÕzsÆe­n7\úóAu÷»Õ\Õ”µnÅĤêÛöGš+³¯áöò†T/5×Pi¨w•l¿íWÆhÕ¿µU¤Jš]I{ßT' «ü—6«_pÞèÍñ ²­{ —«fZìWzÏ“«ß'U´¨¹ê¼¼mÀpuþ¶+M’FVçÍ ª¼«ËFÌÏ«ü÷Ï&v¹¢¼8“öëßfìv'^ufsŠÒÚÚPóâêµCñªMWW{×\é W§Ue§Ô5Lñ"ŽWgžM¼ÊÔñ&Ä+oJXoÿgö ïr¥;Z}×:ô+®ÿÛî2ÞŒ s¯nah,~mƒ.·ÎÐØµŠ Í•zŠwÞT§ÅS¡}û%W9û²ÌåÜëÑ\—+Ýf”¨]Sz¯ôë\5rgÕ+Õ¿K²Îx i æ¦ý¶Ã•>ý£ n¹ {™)–æ]uû¦®ÆƒŠÂk®Øl6ç^W‚.¸º,¥ÝcžœO–éŽbÔË›?hßsÙR’ž{8ïî8½ï%Ó¶iG]C 2×ÿ߉”·oêº~U±xÅÕâ îѧÏÞQð> stream xÚµVMoÛ8½ûWèf ˆ‘Ô'Úh»›¢‹b‘r)Ò=Ðc •E-Eo6ÿ~‡Ê–§‰ :ß̼™!Eƒ>PΣ<+^²ˆÑ4¨6³fQƳ4q“©ÛJ8s‹qáåç ~S³¿à£v1â.&Àng—× Ê¨ÌXÜÞ®šQNYÀ‹8²’:¸#×aÁ‰Òá‚sNÌZâd£cg 鵬BJšAâºn#ºÊëUjÓo0êP°äÔÜžø$ÕÏßo»ÊªGáß·\^§9xñ$cÎ݃%™De’@Œ F†ópAi“›S¢š.ä11€gq^d9Yi) N«FW­ÐÚ¹ASŒF-ÑÔMÈ gg"NÑDœÃh vªx²Æp)´D-ÍVw²ÆÕÒ‚=¢ rïIÁÕÜ~tŽÏ/@FcàµéV¸m,ÂCÈr¢žFµçŒÒ¨LS ¤G‘#½€É L‘5¿¯p¬å·˜'—6ÆzVr"º%Â㉺nl0¢õk½Ún$š>Dlºº©„‘'ˆX+ ÚѶÝŽÄäDl 2¬Õ¶­q¾…œø¬ŒÉˆÂEÕøÕUÿÖ'P@;Ÿ½vPˆ ¢IV>H¡!>7–#èµ áߦv}Qh#m0©ñ¾é`oW>n”úŽÈýÑbÔhQYìïúÅEmäàOnØ[:ŸäØ 0•ÔçCò×Þ´‰àzIOÄȲ±ä‘uX£Ã0c…)ÆúÆ. Ÿ1nšúÆ¡7®¦l*¼º»1åpØ» ;ó;Õ5t%÷ ç¦À’1WÏð’7²ìö Žb‡2JáâÞ÷FÆ 7< ¶LT÷iߨd<žÏÌÖÌj\ˆ½µƒPádóŠ*Ÿ‰­r¦ÐÙ¶ºQ¸+<ÐóLÀ®±–&dp~”(ï'?A‡s-;x;²#GáÙ(i޾þ ¢¾¼ÇñíÇê[œÆQ%ñŠà /SlѧfŽðÀ~=œÃÿ@¸$‰á¿â,ÐZaqt[Ÿu°o•ú°Ìc/mTW„M@îÈüôiÏÐ=Ë¿UuÈÖä·n[?¿¼¿™}:;€n›NdUy€ö¡¾bÒ­¡í\µç±l·ò×qÑ‘ïÄøF,Ü#aÃy=és|4B,râ×Õyd@² c=´¸qþê%4;xYŸˆþçײ>CÛÛè«õï†Jþç˜cû˜~ôûš•üïr…ÿMì±Ùï·³ÿÒ†’endstream endobj 92 0 obj << /BitsPerComponent 8 /ColorSpace [ /Indexed /DeviceRGB 63 503 0 R ] /Filter /FlateDecode /Height 600 /Subtype /Image /Type /XObject /Width 600 /Length 12046 >> stream xÚí ›¹m†¿Ý–ìµ£(J¢\Rg'ÇZ‰åTGâÿÿW™é£Š Á›¬fUx˳3]]ß@Œ¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P(Êþ”ƒË¸â«upÅA®(äŠB®È¹"WrE!WäŠ\‘+ ¹¢+rE®È…\Qȹ"WäŠB®(äj÷\ÁÉ#EäJ½˜Ü¼4çs¤²‘«é¸:³`aqAãBˆƒIŠ;ÜŽ£<6W J!4$t€3Dëѹ’Hlzn0!p¬ß»ŽÕ°äj:®|l\cwþ{ú+¯ÿ.¤x^³Ëáïžêóá¸ÂÏÌ¹Ú Å_,4XáaÉIEj–àüÆ~-ÈÕ¦n•2J 6 5‡û”èÓSnaï‹ÕCqu{ë]ÂÜ14ÕþQæ®ò±]=ÿé,1eXÝ5þñ \Ù auÇ×!uG v0òŽ»¶~ÖJ5‹WÍ]Øz®nÃ0-¶¦aÈÕWWª¼w~Ä7fïÖ±¹šIØÈ);Ö´;oùVÊØºsh\bk²ŽÌ•£ƒ¬q«1–eBŒ Ü32Öå½\äªT7Ãv¦¬HÃÂ’øk½s…R²–‰ä@rs¦ŽÊ•§ ଻Ü|uã*ŒÖ)TÁ¡‹®ì¨¯¬ûÏÎSxðñ¸ºh#g¦åÅ«­pƒkhã¹f‡® {¡-RV8Pxl}eG¦¯þ¸Ñ¦~Áèõú™Ñ\ÙŧAf¨Þ›”]"æS÷8­›e Is³´—Ø>¼êmf¸êÕy«Q”ÄÆŸ×Àu@;h~°Æ·ãµ#ñÜÊ—ú†c».h6%Q„­±úcÎ×`”ü´KRËþeFcpœ(•%ÕïŠÿg4R?‘<ž”Ž’¦æ½Ü€L纷UjbâÆyœa©Ñ!¡{j½–*e¡è+þ¸>0{Ú“˜²g<ã-RRÔ͌ģOÄJЂš\ råÛ,©r”“é6bõ¦Aam‚•Ñ“aÖÌ­8XP<1? »Ú¢˜+¹Î*2ÄdÉþ/#¢ÒÕ^Óø”…+ˆ¸J[„ÄÑ–Üx<® ÌxV7õ²¾c»¦ÈZâH&:,±Ñ5¬`ì¨@CXÆQVƆgã =¢ŠÂüɧï:îŽáŒ¼ŸY“,36g@›Ã¾å&ë{Quuéó=xLÍ:Làõ´^ȉºîT%öϧ¬ vÚ²l¬2°`Å£–èÞÈÀÑÆ";3½\žXB-#:PVŸm@܃õñÍSX!ÿ'ÛéO4!Ù‚ VQL¤tH`oDÞ¡“s%^ÒuŸ¨2ßÖ··{OÇÞõx aîAˆG"jÝvkÊŠÌ B,Ô48{Ï]Ÿß­ßŽˆ©[£Rb‘9°¿ĘÝlۧУD©Øiå˜jé;y>¶dµÝ¨9¡‰Èï+Û×ôvÒHÔÖoq´‚™—ÏGßKœabP­¬–+ cíLoì¸Õ¦»m,‹hÓ[óøí…κHGGÈ#‚¶–þZ".…3‡ò¡…å9Zq ì éÞkƒ ¾ÅsÏ‹ ©ñ†ÔÕvÂŒYrŒ™º!ï7ÜZÃö•6eq ¾;½äl vW;ƒ©õU[˜¾p/sT+BêÅõu ˜šD– „6£]¨UÿnqepÇ: {àªë„ÃMW2ÙÿñêÜÈVËB‡ŸÒ (†>ã»­ÀÙ¹2î†ÌxU|üÿ)– SpÃÝKÑ›+h\É/ëNYráJ¬S%Ó#Kƒ.Þš«²+ÆÛnW¦®2wÒ+ ÆÝ£ˆ s`eæ÷ÛEìèÀ•AžÒpòG͆¤cådÓ¨+‘à øŒØÆ!÷0̬”ÐváËÀ¹R*øÅÝu‘ë•aœj… ³Ÿ2÷“¯;ûÆFqåÑehTs܃\(¾}X2¬ÏÅÜUaåùý+#²4zøWqÞwCøé‘VÀÙ VsŒ«+ã”éË´³ ¥¿³­ã8¥ Ì8®d†ƒ£½ÂИp,Ë$^냒+9w¹O‰½:ª·;Ýú 2?‰æ‡a—sq—«£\™HŒ4gæ/H\ÀD±ƒ¶ÁœpÝ9¦7ú\¸(OëäM(E/C_eºìÁî<* ïé¸Ê+0‡ÂO’ U“éQÔÖ·îðC¡{”å‹bÔ|ЇÄÞfI£iš¯)M –€ýA´¿Ý˜LµÐ©öì-«Ñ‚ÈùA„ð=Àí-argÊs5±« ÑG11WjzAó…Gõ¢:i© U.7´¾'oËJxŽE™ÚzKàÊ­Ió¹«òØ «åPL•å|f9*óq%× 5ŒÆò¾ˆ‡6Âu@êkÆxSoÅhò@¨ÜS†t"Å´ú žÍ‘ƒP½Ò¡;™ðŠ;ä[çüsº·žàäX‰u ˜]rµØs©-¼¢N-M…Κ˜Üp¹ás.ªD€Œ‹äµ,›7~eì¢UZ=•ªÑ@€`Ç‘è8ÌîúSˆÊd)€{ œVgU(æç áÄ™J°h¡ïN/ ³¬¼((±ƒ:E±v5`EƒžÆÞZØ*¯¨ºH\˜2á*²þ9`€ïÄU`w{5W‰øŽÝ¯`B½˜íéB[íªÍF'Yì~~®”*š!o±Ò"ý"öPXjùa¿±ˆÁT“AÄC Gá*Z ¾ÖuÒ\uIIõ—–ׂKJáTþ¡’ÛA(XÅTBÛ,-´$ßGa)­…‡Éü«ÄVyÃoO: cíÕ@¤­e“%ôEwIgKç ‡àÊ)Ú,{9%sâØ®°àlŸ›RçWW‡˜æ ÓÜ97ŒP« Ykñùï L³Puñ]&Ñ*,÷2§ÎÍ«ôÜø|SÎ[³„Ѹ²3~*V®Ç6XæÎ¿Ê,òÜZÁ¾WB•ª@åSˆ\úBJàfE£+Y¡Zñ)ˆóæ3tvo+ÌUãrð²h™ïOpQ”ƒå—ãíiC» ùÇpõíýåEüþÇÊÓ–·ýkèöiaÒÔ‚Ï*óhàÙ@õid¥ hР›¯Ã|\=áÝå‡ÏxSsÚ±\Z9÷æªqVhg•x‹C*W0Åúªac¢5® ½!WßÞ/4=½ú©ì´U¥ Ðäa'‚’­úJTMƒê¡ˆdÕJ—¸!Ý0“+}¹Ûqõõí»ÛŸ–°ošoS%Ät3‰kwo“Ô@‰”äÄÝK2# êëÁUØžG_µ† ZìU´ox“¾RKy«újé´’;ò–N}EÎA±IóVþÕw.?|ù!ß¿jm¤Ø¤°ª‚EÀ»> õ'ƒi‡ë< %D$Ž_ÈU‘3üúö¢ÛÚjÄiÑkèn_]óƒ 'ßK/ê­šHŸDwÿÒª 7í7ŒrÕtéc8L_ËžKíÊ了rüvw[N,@%7Yef‚~@woHWwàÌôݽ ‡Ó²°þª¬A†GÒf¤4èbd¸LŸÿ±à¹–‹8W_ß¾9Ç®â¢ÁÊú„Ö¢¢‡‰ö¸ iDÔnƒŽÆß×½‘nÐ>áªuØõÔ‰«§×2â°šDžä8D«ÚBÚËîbn%ªÀ÷Øo¤{]Áƒ U™ƒ«+QŸKã¢Ì åÚ”þφP-æm5º ù8ÕXÕ(m%E·e¸FqõåçPCI\´‡c”›Íí>/ËTµ®ëªý.Ö 9&P¨¦Z_eÍaÕ¦Áâ®GkWßþäÃôUKm*ã‘ÐÔb7dýVˆÆ8A·èwùˆ¢\«Y­ §åê剽^<øí¦¡å ÖMf…ºøíŽZõÚ­‰œ–E^¡líy­ûu·¼i¬z:h€ŸÑúîÚװW­·i›:ØAãÏèa³"7©C ä†ýa»ÍOM‘±8nlr˜¸h%WPƒ =£aÒY‚ì`.Š=_Ù¹Oùœv€¾±ÜÛÁ¸j>F´Žî~]ëê2üCh;YK2³¹‚Éå †\™†RzÖ"§ ]íI –ìëeÔT2Û4"³¡Bþ½‹8ºgQÄÇâÊ(Žú'ûá+k5ZŽ«Š•ã–‡ >"ùÆY¹ì¿’ÿx\É~€}W0á¹oVq¸]—|ýd„23¦â;¹DØÓ ð~¹’¥øWXºÌÃê àš]¯›7ô97_ÒÉáª1Aˆ\93{tÊ­°›°÷ zuWÁ†¸‚|(䪑+ãù?Ý®F$LjT»¥'vJ(‰y,æHŒ‚DNËøÍÕ"ÈÕMUüúYú^˜Û NŽÚÚ <ñ€èÑ Ç3·K–„ƒ"Þ²Ê=u¨›Ä8Ãuø}–¾­ü+¼ª!·[LòÜFçp•L|óG*jàöWì·Äð\ý×§OŸþG濾 ú*,EW@ ´RIo6mã)­¦ßø)£Pyo¹ªäêç¶üzô½%R Û©D‹'JïB¤•F÷&£1ëøÁ¹úßOŸþñÿ\¤®N]/GYX±v Âî`{8°ÿKƺS‰Q4Mlª+§”@%W™_û»+WÿôÇ/ý~„«³tç î/í ÛÁ,/+®lL][ åúüUmr•ýµÿòé·¿3_ÿêÓ§?þùÏþâåß8W}Ør¸‚\Òõr‚ŽO¨ ô-ÆZ¿#WÅÊtX=WÁïýúìY}úͯþüÓoþèo_~üÕÏ.?pÃêò_h!=Õ”2D`¢{É`È*¶R†ÝËŠ\Õ|ï‹ÇnË¿yŸ°±²ÙjãÊ ’7’¾˜ÃHuz߃²­c­keÅÇÈUÝ÷>ºŸýá_/Pýã¿þ·ò˜¬V´ªO+“¤ÛmõRŒäZM•]Mk°­3ÂÓXrŠü-NÔϞݫOÿô»œNZ‘­=Á˜¥»ñ©L;­•AeFãíïw.›\¥ÆxõÍŸ}÷ùç"®r•Ê6-Ãijíud%ÅÃ:Á4¤t®¹V謮ŽÎÕ •1ÿþ¬¬þ7VÔM©êííÝ&„&¶º·þÜLÎÅ©¯ö°¬±rõ’\E¿Ù¦êìºÿç \ŠÓžŒÙ¤ÁBD Ú§U?IBD_BXíŒ8Ö«©)‚Qª†\E¿YPe®šêÛoÎxU\RÎ’ ç—¤ø{tDd}Y6ôÍ´ø¦t1ŸZrþæËÄNRuê.|ýöÿŠõU5X~æ)¼P$–t‘KÊ:ö¹2ՆОîj}4®.(‡ªù‹ýû÷KÄšâhUŒ4·PBIâJ‚Cì/;¶í… ã:Ž/·À¹KUE€¢‡Î‚¶m ¡ ƒ[%Á˜T;äjÛÈ@ªª>ýñÆÕºÐWBUþ_–¢õõ×ù]D]9”Vnvtf·ì «(W5±œ\´¸JÍâaйª}¢öæÓª>›FÈU¹)Kç ŒGÌ Ñ<³ÆZBðzÖ‘«\•$,e'ƒ+˜h¹>½ãy“¾ZW"1ûßÛo§®®^Vη!„B,/]f[Åk%·…dððÖ rõ<â·ýy11÷êŒËQ1Ö²¯âÅ#VÆc²:6Ðw ι:öe÷CÁsB+ÈÍÒʤÛ|-݇‘æ ž5,„P™ê«àXÛ qs-¹K† §¨¹`ŒñV#Ó8×r=ÎB®‚îôI/Ï£Çùj¸›è­ NDFáÆØëcäM%Ú…+1ÌH—2DûµÄÁJpe9WöVy$Wr=¼+"£äªØ*!êûÚ9O脲IÀ‰7J=4ÇF"†k}EîP?ÚÁ°³uÛ‚±ë 7'±EÁ eAb éoãÑrÛýœÁŠè0j@•2¾bׂ¬¾l€iOŽLÄwóN}w2xªÖ¨ÁŒÒ}€äª+¨Z껃eÕÖÏoñ-“ü<†"½VéP °Åq/®Óè°]jÏæö ^ÚÐçwbŽUá÷›F¢Y@Ê ÇCaGä }Ö2ƒþ¾¸P€~`Ù˹2ȸÄXØiMŽO×rlm*ql}u på/MÚ¬Ãtk)ÅiVÁ•^tOë&Ë•&šâ….©³ýsrœ•Š0z¯wt¿†h#Á•™pš‡p€ UDß¹j×vÏUd>?ò£/¶§HªÎ»A¹ß€_q@"‹FdR¡Æ»¢¾Š¼ ú@t°…ŽeZ¸ (¬uÅ3þUîOrt é¸*âDÀÛ÷°¹ èk £Yç‰ß!¬>àîî †ÈêOÏÐÒo¹ìâù"­+‚Má«'b*+ÍUÀ^êÏX[•£ïf bàðÌÊÚµ•_*Ãs­zlBY/F”-.\ȉ(,QX4¦Œìmùñ>…À®õU²€PWèÇÕízä¾ôàÊ÷"=!¬ÊïQ+(RÚ‘§Ê€«œêAPó‚oxË-z–1ÛJÖ Rb0±Yrï2´×®ÛpÍÌÚ¬ 6¬‘&k=BΗ+Jr•Paöv–Ãw½FÂìa£²>ûÒWY›­€Ô¼N‘×$B˜¡³FxGE?È®è÷Gñ÷šæQ¹BVÞX b_Ð öŒz/p{< ¦döYn»ñÂé:uÎF_¡+÷ G¸·Ã",…+eò 5–É #àùÞwÅÛðãÆAš+ôÀ*\çÓ^¥í²…îdùX®”©"¤Ä>àó…ØµÜžì_é¯dQ± ½ˆU¼ÓÚÖGcù»ÿ´n&´w#Æ’n*‡p!Ì5À÷;­ÿ( kPv õ'¢jHü€P³Ô uаJ­»Tü6ÿù ó4JËæq® :V¼0PÁBÈ׃ÊU8U!ùA(7 «Í“í«a;‰3 «@Å7U®›‰ˆ),ÕjÓÈu ‚)y^_9£t't®Ð€UÀ¹q_è^µêà.A§bi@Ò‘2áBÅ9 Vß%¨¨%Š«¶:ŒŠÓ /ìÐΕ\ƒvýçTôCïÝfò¸ržìÚ¹(ÑWM÷?;X¸Òv­@ :˜ú2ÖB\eFÕü€B$âtÄ!‚aêªÎÃë« ¬Âƒ¸t“tN†Ðtoka›¬KŠrÄ`Oð,œÖÂ"ñ‰öƒÍ«C ¡9¡Ÿúk'KcEDØÖºŠ+?¶•HŠ1Ñ8X( †úªÖg=ï¤ÉÑ «R_Á±ËẤ ®ÖíÁöÑäª©í²³ÅÜtÝcîWL°“± ¹²Ú[iwÛýðª\}~t®ÐÙ*®YöhÄÞaË"Cµè{ûuÏ`,:§¨+±üL}5«Å‰’5e:),™rµ‚UË‚ÁŒIï 8N0`ÈU®ìÙvºBdKpK´XiDÜ&ÎÁ쿟S‘Ûþ0óÁv¬$]© AÝ-­UΙ Ò:æ¨+¿ÊQÖz ’—…2®D_ºrUT#ë;†¦°'…@t¡ø=0&·èò¢`>W`\´'Vv`Ç ÷³l@¸X¶‰l¾É-¬‹´¾Ò›Þ·,‡â \õÄjÙ93`Aߎ:]\÷8Wá]¨™éÂzÿÂæCÓWÈ™gY_uÅJL¹ÐŸ«…‰ó>Šu=et"Ù¨Ù›¢õ¼åœÐ/T:h3ý^¸êŒ•ÌŽí)¬Õ…–Â:Aúâd8?œ˜—™Âªseo_Ó¹2äª?W&P\ôÕm­…Â@„y…û“\ô•1ãÒÝwÂÕ¬Ô¼Þ»UnÝG!Ös¼îKáp¦¦.ÓŠ%X»vŠ_dz@®zO =†–r¶¹™°ÀŠÄ»tu•ó¼BI4°SÔâ}µ\á(\Æ`e ÷¢ „{ =·e$¯sÂp 0¢\¥¼ë Wbv åŽPcaLÎæ¥=puÆ•ëÀ¬ïu‹p×zo ó¸‚à*ÙÃG«)¹²â*þ‘lQ¥ìeÇZȳ9³oõÖÎË„a®Ëlm°ƒŽ94‘TÆþC¸®†aåöÐq²•ÐÂlD¯A,•ZrB߯ªîY¥IÕöƒ¹²Þw W§G+í/UO~iæÐ䡘«øk€Ðž ¸Ê½íîúêë[¼ú‡÷o¶âj V‹{¯$F#X"4†KtÔí‰dyÕ¡Gƒ"®öÛƒ+ߨX|Æ}^Ÿ¿ûðôê§/?¼9WÁòÂM†²…Ø™«€Bów^ûp¤í®ô´!ÌG“~$ò*4sõíYS=suþß\ÅÊiÿÞ-ï n?Ýk½5WŸ!bû鉠¤xàí°Ó›§ð¯¾¾½rõýÇàÊX› ‘ó®æ~­pÍ5®ÔPCºM\ôF®bã¡—wË›JwÖW¯Ï\}ÜF_ÆJ6þê×~Ž6ÂmýÙÒ1)g]÷ëSñ†<…e›A„|;„ÃÃݹ2Ÿñ'¼ÛBMžÆs%®G ”¶xîWZ¥Ðz®| "­ Ökq¥¯Èĺù ð݇-ÌïVXé3/´N åk…Èd§Qä{ÈAO*Ôh ÷CÍ¿Ú +µ±ä’eYl•ÞÀé$wªæs…xg®ìyíœPL ÄFUˆöžë¹2¡œXx­ ŒÉÜA‚žlË%"úÔæ`!+ÜQ_Á 4UL5­/<¯ÊN°Fߟ¿åôÛÊ[:„{cJ÷ջƯ^â /²AœaCu¥-­qºÜæÙ"à½Á^§Ë@õ‘$8ýwÛ6Ž«*.ú"Ãã¢j©í¸²uH·^2—Œ+Û —5OKz2HÙb(VWÖ)y }u:m©®}eB·RK þr^;WN+Bw…#†±&.º‰µ)U_Ù5ˆ=¸:ÉšÌ&¬ÊÄ*1Û‡;}€—Ô´ºÞ1Îpž6i«ŒÓn•Ú–éבÚÊðT#Ø(ä*iÅB•¿…bHǸYãWzmýM.âÑC¦¼ô²„z³rŸ+´(µÚ—³3Õk÷Ù=yR®¤ºÚ’+ÑO ¦û¤ K¨W‡ð¸Ê8iª8œÈb·p¥TïÏÕÍ¿½O|¦Œ«-­ `§œ ?Ü—¢X᪹Z»¯–[³+àÚ4‹êÏÓè«Ï1¬–d‡‹Ÿ}Zl†U8/Tl£Ÿ b-&¸BãàZ÷Ï£»ê̦†¼ìàÇ×mµÐÊ*sµAˆ!ØÆUæ¦ä¼~sñ&®7õSs`mš@CÉ€Þ\Eâ¢_ß¾ ¨5»#hb2>Ô¹ÒÕÄýöCáÖG.ƒ«>c…e_ˆÝê«ó”pWÕúj;§~½uÄËÞ¡W`úœ1cÂ9X¥\¥Õ´·vs„Õ"Ré\^'_ß¾Ž0w šwíàÎ>»ÂUTaÝ*õh#‡%:ªU êÞ|YLÿÄ·¯Ó‡Õ‡/ —vãê6ŒF“º7WJˆXs#ˆþâæá¶³>X±ª¯¢†—9±ª+»*ˆŒtå.#·ÃN¿Ú8Ònd™°ziÈÄã:ê諯ì:X25ÚªÓ…5.¿¾]9—C®R\E,‚¹—U伋Béf£øï¤e-{ÂîÀ#¢,é^/ý¸úúR~{Wb?Ôv\eïXïà¿ãZ A›Òu³è’òc×Éq–wn%‹”T¿ºn'³qur6pnÄUör `š•I+3„+{¯ ±Êj­•³VçQkVU²©ì€ÛúÌ‹ ©ÏpÚÞ ÊìªÒj*µ“5½ŒðVÀnœÀÕ²œµD3Ô÷nXüê¦¯ÆøWA¬°ºêT¥'ãà(W9-,‹–ÒúYÆÜÜ{gÊ2–«¡~ûÒža[3X“;Ùj á¿BH|}{=.'ÞÏ£“9:ÐpÛ-Ww1„åO£É{¿GÃ\¡ïBåJë-gsS›}VºðÕß¿·0Œ¶Ÿb Oí\!³&ˆ¶çÙY©…³+ìÝB|gÐâ¢÷RW•£I_Á·„9.š5s–(]®¬(Å[ægâê>XåÇ®:ë+ã‚U¥¯Š\,d5kßÉe†ùãW÷âÊ òY´â>-5fü¯ëϼ<%¿ì¶œ7ì]ˆ«»au7®pëà_¶q)/±§¥L@¦:øó˜H°zmÛ- ‰¢;Xý¸Ê¬ì†Ý;ùNLaÕe rÓ± ;`Î-UWàê\Ù]ÊŽ â- ·m‘KNŸ…»Lí €Á£Ó Üïr¶óÛíT~ÅþŒ| XÙ@ľ/¥¼h¤¹‹¢ʯÿ–³7¬î2gwWX]úµ[\5LMkÂ&¼iKE8+õ=¬°ºpõñÕOO¯Í—_Œ«Ï€á£âªlµ Wë ˆ ý€Å"zWWšSU§èóKýö×ø |0Ö2·—! 5ýèv+“_E¯Ý †3'¬&ŒÊ¤P>Ÿn\}ùåçÿmÁÕ6ž˜›!2¾%¨–»³¡·†DÀ‡OÄ$’-ƒÔ WU“—9áx®6uàíîy\ÁtãJKkß$«ûi”îåÀÕ9 úñÍfýq6Í^¹0Ûr…k¬Á®$Ôµ6R¶+š{ñy$ãC—þì¸?Ï ›¦ƒuúj ®²7- Û ¯]äD1÷àÊêû«÷v…zñ³D‹îwÚÜùÁx®Ç÷´„&esèÖlz”,óXîZ;‚«€Âz Xú\vÖpuBÕm†è+`ÈåªsžÌý8˜€«¼ ~G¬€Û:!¼ÜÕ~e!²#-9\¥ JÍÇ0W‰F¹º  æDoÂʸBÜ ÎÆÕv3ì”L]å®n1%tŒgÊIÉlN7 q¼?WÛ¾ m\uœ »wÌö\Ù‰ (â*’‚2¡¾º³ƒ•UR´«×¾˜Ùè[Ñ&ô•EJ[ÃÄ3æÈÕ$\-3Wƒ=95Èäê²cûÔk€G÷‰Ëγ9#ʺtçê6Np{$mÁ•ëÜæq5Ÿâ@Ã…`ìEååÞ¢éjU®®- e}½áSd¨ÅÝR¯ï54Òc8ïÏÕpwáAhWEy©¶ïZ02 KݯšT×8Yù=˜™«¬ŽYY»­Ðs4—Q½sLª”î ¬|O=pUWÀÌ\å)¬ 4rho×WbßíYæ„…½—.a»Yvv®Ò¬aƒN9ÈÊIíe!wŠžN²÷ð\Uþqß\ÝãÊó€º.Zï‹Ê̸ŠVUŒ»'ùWp¦#÷¹ÂM¸ò‚~Ëf\U¶$?ìªpsë+7eân\aXur„&¡C62\—ÃôÏ;ÅQ綃áHͦr vk®œ"3BUö"²ª*N–×—Å6âjœT·!‡-p ý«$'«!Ù¸šÄoÏà Åã“Á•Å:æ -õµ²*¡Ï¦¯æáª¸ôam¨Áµ‡"”mLÿVÀ%ßÅgÏ¡r~®ðp\­`AUmãöð¯SÁ$X{Ø7±ieTÈ2*£¹rJâ]ç.Â…é£%ŠÊ&Tì΄AW«”j@ÇG?ÔÙ«wWÕ ^¯+cýp?\a« [Ë?içq%ÊY[q÷‰¸’ú(úÊlèÈ1‚*ÉÕiWõUêók*r_ªÿz*9¹ý§dF-y°bmå»ß™+xÚêˆ\m™)ãeÕa;®°îÍ•½YðÀ\E£žq†àØáJÙ¯pºå%ßûá#¹«ë°\õT#ÐÝ­Þë”®é%c®ÊêUÓ¿Šr%»Å˜1\!„®lGÑÏ…DÅ¥žÈUw®ÆÌËìÂЇ|H Ž®N÷ìÚ0íiK4;8fW Üù§ÆÕ²Ê¹*¿ê«ðtÐåjŒ¾Š²V W;àÍN[чÊWaÐö%:¥˜¨!`~¾âvÉÕØÞP*¥®F=ÑcP;?¿Ó£pµí†ºaúµJ10€…BªNx®¶SW#;Š¸Ø‚\õ& …Xrµ#uåd‡·iÜ,gCc¶Û:W˜‘« à=œ^\ÕÝ;õUâEDP‘õ} ˆž£3X¹Jè«¡íjÜ}=è;'kü§#p5k¾º‚ÁF\¥ mt$ ¹TÌþ¹šÔ  «Í_”°ß,aE®Æ¸Wã*|–õé–²=Ä:[…/@®2ÜvŒÛTVôLú¥U&€¾EbâM.{öÛg⪟-T¶—;„vò6ó“«ž\aláØâ:_½À Ô„ºrujÆŠ\ÉËêò +”TQÑ£ X@xNê%ñ‘«f%…` ìÏÁ®`›©²N]¿^h9|äªÇeAAnV¨Ð…ÀÂÊ´{A%XäªÒm‡ÁÐêÞu_Ý,õ®”¤r5€«Yª4w×YêËrþÖ’êˆá§C®â\Íz¥§™ï'«ÍtÞý“«Jÿjæiɺõ$(ã W5XÍÖ©ãW©v”›Sr5Ž«mü²^d9ßS®%W•\Í«®º‘ - ƒ+«Ãqu3ah;\»é¬4«d&¹:„Ûž@#ÿ@íÐì¸]h¹ r…-vEëÔñ˜l®h“W…œ¹ÎÌde²•÷Ù¼rÚ We\™½É)®S&Y ˱quýpµ?¬l\rÂ)òœb¯"¹Êp¯°ß{<ŤäúSQQrUƦ]qnÀ«âq$£íŒ‹f\”齪:<C®:se(I;ÛúO®\‘, Éóúr?í`¶ÅŽ\©úŠêʘÔJNT§OÅîý ý+][IrE¿½Þ©ß‹Ľ±ÈUöø¤_ê†\ÑkŸ“«oï/ƒôý;ãjT+Ɇ ’±­þò„w—>ãÍ®¸"VÔÕgøíýBÓÓ«ŸÈUqÄd*¹$=à¬_ß¾»ýø9` 1'V³p…ÙÓì“qcê+¡&qÛ§Ÿ7ܧ/ÀÓw.?|ùa_þÃW½f÷cžà×·—ù`@[ÍjÉU=Hs ðÜ\á0Ãûh—6©ßŽ]a5sÖŘùà‹WõygqÑ.â<"WO¯eÄ\—+lÇÕ•¨ÏÒsÇ"órÅ”¾™õÕ—_œC ûŠ‹†sÁ>ÐŒâêÛŸ|PôÕÔ3Ÿ+j®É¸z¢×‹¿W®&5Øk/h}÷aÍkØ W‚$b5W“ž6C_ –ˆUí’+W_í &<ÚU}ùáݾƼ1ýE®\®hüÈÕ°2£z äê1¹Z],äT~4®@®Z],àø˜0ΰ½-¤«h‘ rÅ©>ŸÈa¹"XäŠ÷C®øù@8rÅû!W|Œ| 9$HäŠB®ø¸ø ‚+F@ÉY"W|>äêq†‹šŠ\Ñ’«=pµl'$\äªï5€é£äª;V„Š\ 1ƒ‹\õÇêñ¹ÚÀ (z•ùŠô{“ÈUØ·šMÖ>bGõF¾ˆ\m`g"ëRñ H­ÿ¬=Z |<óžs¯\éÏÅÚ­¶ÓÈy'¬]Û@2«2Sv59rÕ¨­æš™f¹:ÝÐM [˜P;%ö7À VuóÒ˜µê{ÕÁ/Ë+·C®tK2¯ŽLúû_rËûE®ò¬Éö&ç 0*{Z rÕAÉß `Ý­Ûi †¿e W-¸ÝêõÝGa­­TPôvŒ¾Øâ׌\I­¿Ñö\­!¦<®Ö+Å–Ô“«*'yÒ1ÁçE Ï»Æ ¿Ä¶Õ«`\´Ê°Æ´ÇˆÝ†~5%p׈êç( Âo;©!WrâŽ~æLC¦˜÷ì>ö›¨ÔW×xÓNã’™ïÜÕ.~KÃUj]uÉâƒéÒߣjÜwc¹X!x9KíöŽû#~ßEÐ.ÚãְˉÆ,m&ÜõìrÄÉÕVS`?uÄ"h‰'; ­Ú+z€ æd”ô@ú*ê@éºÍÔÕ#ë±:¼ªJ»v‡á ÆÞJºØµÔhÇyÔ!uø7yéʼ¶–+Y¬~júÅY©¾ŽÕž¹ºa4vþnq\²JçØaÕG¦j—\•ì­Nþ¬6eÇ÷ØÉÕ X^®oƒ%XûãjT&§åM5(l…#q5p[¾ü¡¶ÜÉçx÷× WÅ!/9g\­ ßCúÅÛÓÊ1“££MsöEï‚«¡–f],õ ³„Ñòú0Z1(›$B‘ùåKàÃRµw®¬•˜a~••cåïy  ¥Gf ‚8>⨼Kkÿ‚ÜãМӕÙÀ·:WªO3–,è/§ýããÎ½Ï ƒ’l|Î¥*§ÇQXEwº;®ÆÎ Õ‡¨š»‡³EîÕN¸-œB?n•äƒøí›¨)•›–)6¹"WYŠ ª­ýøW¸ËŽqöôª‰q5¹§ú`h‘+Ê ?!×žì ‡sB¸fçªcMzÊæškb®ì™âê—|Í×ä\yiëâE®Z/„$‘«^…\Qȹ"WäŠB®(äŠ\‘+rE!WrE®ÈÕý.„²c™—+ÊÁ5¹¢+ ¹"WäŠ\QÈ…\‘+rE®(äŠB®øäɹ¢+ ¹¢+rE!W”ÇäŠòhYÇ} ôhìQñ+rE®È¹"äŠ\‘+rE®ÈÉ WäŠ\‘+rE®( …B¡P( …B¡P( …B¡P( …Bi’/¿üñù߯o_v½~þéóõÿKŽ^*;ºþ¼7©;ªíÄm÷Üö¼w#_ß~ÿrŸŸ¿ûp¨wÏ¿{]xôí ²£ëÏ»bUsTÛ‰Ûî¹íyïFžß–ó}>ÿ5æÛû×ö]ç½Tv´©>ïMêŽj;qÛ=·=ïýÁÞ\îðãëåË¿ÙG/}–ªóÚPqTÓ‰Ûî¹íyïJž.oßï=›ù7/wøî¬¬ß”½Tztýyo£RsTë‰Ûî¹íy³…ÑÉ/æÞüóÑËA¥GןwuNL•{Òrâ¶{n{Þ;ãjñe7æªú¼­\µœ¸W÷=1M¸èayŸx—§—£klÂúçíg[NÜÁ6Þ÷ÞôÕË}¾YÆ«à_*=ºþ¼Òë}×ÂUñW´ÝsÛóÞW—{þ±tÞûÔg¨>okœ¡åÄm÷Üö¼w7<û‘oŠãtOmqÑêóšÆ¨bˉÛî¹íyïÎ~|vwÞ]#wë ×£«×qjÏkÅ+WAêOÜvÏmÏ›B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( Å•¯~ÊúÌÓ›š#)ä**Ja2rE!W”{qõt©ùíý›Àù·/ÿÿ—Ï?}|õw?ßÿ͹DÙù€—¿üéËOk±I Eáêãwε¿½¿"ûøýÏÜœ¹úéE_}[¸Zþòt=ˆBѹºÐñôRvñ¬^ýt.¥xþ/—«K‘ÅóçƒÖ‚žŠäêR󙘅ž§óo>*\]þòôê§å >GJ6W—>3W·¿œkyßê-R(!®>£B_Q(9þ•íEyþÕË/ÿŠtQRóÁ×Ú¬ïÊÕùŸÏ¿xþìòÃ!‹XSZ¹ºxHo¬ø•¥:¯ãà¥Æ>ðúéú—ïÿì¿"V”rîH ¥«œ;a}æ\ÒY^l]r …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P(””ÿÍLendstream endobj 93 0 obj << /Filter /FlateDecode /Length 507 >> stream xÚ•TMÓ0½çWøFŠjïø;–Òvhµ‘Ë*ì¡›†©MJèŸØmÒHUUžqüÞ›ycy‘E7÷Š"CŒb eßÇ¢œ­¤¤&ŒK”­P¿aÉd¼Ýõëìójõ¹©êý7ðp;ï7ŸlJgÏÙ§f@˜Rb䘳©?´årÿ®j‹¦ñ¦ôdOž¯}©ê•ÛÜîæ…[aî¤S ÿ^M&ÓfV›&½vNŸ{òûÛ‡¯wÃð¬ìó&:"=jbç\øå‹ô[ÅÔ³±>·•¿º`N¿¾tú/g½FQþNyˆ›MzCÓ.ëuyà?CU#?Öa¤›ÒjQ.Ûª^®ÉK[¯S¦Á§uJaÒ$¹" Äx ›¦žaA‰7Ëý9œ®å¸ÔœÎý%ÀT[¦­.¶¥õ–“û›³#’€çDr–h3ϾCaÍ|Ä$F¼8â¹²‘Ô2–„IA1.Ü6 1„64Q ´PЪw’N»ƒOñ.x¯p×z¿ÂºäÐzg}‡¿Æ:sÄFÿáûÆÌ …#K!zÝeµâ€èá]¥ ˆ2ÛègDWRt'a÷IpÖ%aµ›7·½o¢/öhqàÅâ…{ãÅèfˆ'” ”bEûvd(ø/_Ðendstream endobj 94 0 obj << /BitsPerComponent 8 /ColorSpace [ /Indexed /DeviceRGB 29 504 0 R ] /Filter /FlateDecode /Height 600 /Subtype /Image /Type /XObject /Width 600 /Length 4167 >> stream xÚíÝ WÛHFá"†d×,ÌÚ‹cèÿÿ7W¶ !ƒ-õG½Õ÷ž³³œ3Œ¥‡RK!&%""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÒË(x\ñ­|pàŠpE¸Â®pE¸"\á W¸"\®p…+\®W¸Â®.}Irø«vú2‡+z¢‰Ã•&b}»Êzn“ H¬GWMì4p†+gœÎß•*¦ÎpUÉÓ"D}ÅtÕ…¦¹Îp•‰Ô¢×Ø å N“|áê"S8ºÀ®0U®>5…¶´]a*?®Þ]aʳ-QW˜rNKѦêØê˨êÑêÆ¦jÛêÁ¨ZЊî TB´d\¡JJ–ˆ+P5§Ðª<ÈŠæ U^hEr…*IYÎ]¡J–oW¨R•åÙªte9v…*aX~]Áʯ,]W¨Ò–åÔ¬Äaùt+uXŽ]q}ËÒs+yX]ÁJ–CW¬­Àòç V:°„\Á*,o®`–KWœ3\åu« °|¹‚UX¸¢ð®`–;Wœ,5X¸¢j WTb`yrÅò*ÎÀòæŠ3c`ኂ»â2èBèÌç)ÈÀòãŠq…«R®8K¸Â^`¹q«P W„+®p…+Âù¿!ôâ V±®W„+\á W„+®pÕЬp…+ÂáŠp…+ÂáŠp…+ªæêév9þs7~µo¸ÂUVW››ÃGw¸ÂUFW/¢v×?q…«|®¬®N\ q…«I®žÿY1¯p•ÙÕþ+ݼ®àÏt,\Aëj•6vÇÏÉàŠŸ¿"MWö®puy›qyõ|?~9®ƒ¸ÊÈj\³¯÷ ÷çû%®p•©çûqLí®VòËT\9X®X9„uš®tXù[di¹2XiÀ2WŽ–GV¾`} WZ¬\ÁÂUVž`©¹2X} ËùòÊ«äÈÕv ¬‰ã Wz¬¼ÀÒse°ò¿Ä2-W W°>e…+EV.`)º2Xy_b™š«„+XŸ³Â•(«#,\i¹Úâ*¦+c\ù¾šž«¦K†Uãõ+\i»pu™+cuå–)ºjK‰UkW W1]5„¥éª¬AËU³¥»‰ºJ ]mq5\áJÞÕ€«Ë\¬œ,“u•påÜUÂUÔU{³ !®‚«FKÜ•áÊ¥+vÕ``)²jq!<‡®Ä]mqu¹+Õ?Wg±òë*áʯ«„«\ ¸ºÌ•ÁÊÛÀ2uW W^]%\á Wm/„¸Êxôì*áʧ«À•Á W™]%\¹ƒÆ•áÊ‘+ á*áÊ—«³Yá Wº2\yqu>+ç®®¼¹J¸êƒ®&º2\ùpeq\Uƒ…«¬ã W¸êÒU-X¸Êzôï*áÊ‘«„+O®ßê¸rçÊ„]ÙÛ„]Y0WIÚ•ýª«ËX᪨+û(\ùqeŠ®ÞXzyE`Uqu!+W©–«¡ «¿¾C²Ãªæ*t¥7°Þ©z# W\%EWvâÊ‘®æ¸2-WvrA’V WÒUuõÉw‰é¹J¸jîêÓïo\yreB®¾úåÇ9aÕxC ê*År•r»rÇ WE`}ù[Ô2 âêé?«Ãÿo¾=œþ¤çûãâôäçLq¥3°Îøu J®&°*ãjcwÇv¶ÌôeËÃÂU¶EûÅ'ø×Ú·üä³^ÿÝæúg® WÓçÕgŸr{÷ëÃ݉©vù²®8¬¼®Îy5"®¬Š«³¦ZþyU~é^ÕU¾Uü1Ã$VNðÓíkòQÓÕËL{ü¾L¸*îjÁÕúúçæ&=þXaïÄ´šìÊ »p•‡Õ„õÕí2íF/£­ŠÏ¯¤V8W©’«Ç=þ7mæØÔ]ÅU`WûEùþžðSW³›Ã3‰»ÌóÊpUwÙnµ\ˆ®—'ïôŸ2^#×vóÇa†Ûаjº²œ®Ž«)'x\¸ëòOnŸïÇ1µ;Üîò=g¨âjÀU3Wg,ÁFWÇëd¾ç¢B«æóv§—ÁBÏEËÌ«ÒKw\ecUæçd ­¯j¸ªs!4‘e{-W¿žw~ñ¼}DUà~0Ð…Pdy5•ÊÏõÕUÕ•Èe0áÊ×…Ðb\ûpc`Å¿ ʹJ®jý=¯¢®æ°ÂUýŸUù™¾þ\™ûV¿G_ty5‹•ž+©Uø}?Š«„+—)çÝ™Éû>E¸ÊìJàBøÑ`Y~VN/ƒ‚®ÊÃÚæ…Uì F³ÂUAWÛ²¬p•ùË–„5x¿¢Bï†\ò28—•¤«$3°ÞÉʹåÒã*áʱ«r᪄+‘ aYVn/ƒš®ŠÃb\™%\õ8°\ø² ,Ït]¥Þ]ù^]áJõBˆ«r®:†å•¬«’°D\ù]´ãJu…å}\éºêz`¼ Zï®z¾%t?®Ô]õ9°J«Ôµ«Ò°ºW W]ºpUöË–ƒåúB(pÔv•º\a)°Â•¦«®J»ê –ĸwÕãÒ½°«„«.–ÂÍ ¾«þ–ÄêJßUoKwÕ®Ô`‰Œ«®úX*ãJßUW+,‘E;®´Ö 3®¸ê–ÿç‹äªô-áÐËUЮzXB¬B¸ê–΢WJ°ÜÿÝ®p®ºXJ««(®:ø»9Z¬p%2°\µr–«(®Š¯°†¸¬XÅrÖàü]Ôâº*%`Õ£«¤òksœ=¹ÂUÃÕ–ภä*,,½E;®–Xƒâ¸Šä*æÀªÀ W —î`•eUl\Ås –*«X®â-±TYáÊ5¬²¬pÕé•P—U4W¡` \%\9pUÖ <®Â¹Š³ÄªÂ W>bÕƒUšUÙqÔUqXCUº¬ºŠ«<«EYV¸ò«+\ù‚Uz‘U^UáE{PW©´«²°*°*>®âº’…‚ULWʰj°Zg…+_«÷¡+\u«"+\ù\º—€U‡UqÚUiX™eURU…UXWz°j±ZÔ`…«,°†\ª*±Â•wX™FV5UUí¡]¥:®^GÖ 0¬j±Šîª¬¹²*ªªÆ*²«°†éªª°ZÔbßUXSe uUÕcÚUMXS®†µUUzÄßUªéê¡5ÔWUq\wUÖYŸâúãÓuYáJéaÃDzÞéz÷okîZÍqÕ…«ª°ÞË:Ý",«ð®À:“Ö¢v5Y᪠®ûc¸Šë#]Íö£ê¢½ W©©+/UfUä?Ý.ÇîÆ×ñíÁ‰+ƒUUVå\mnÝ9“ÀZÔfUÌÕ‹¨ÝõO'® V\=þX\¸V~‘½ÃªÎª˜«çVnæU÷°,Š«ýë¸y]Á;¸ íÚUV¥NðHëj•6vçåñ®â>HjíÊ`ôÛk X‘YZ_X­·“½.Ý-’«_º»üö骫bÏ6‡ûAW˺aµbUöÏo|Ý.t««‚®Ž´\ø´ˆWei}YÐ#«†¶\µÁýશ®>^:®W„+\á W„+®p…+Âá W¸ÂáŠp…+\áŠpE¸:|Y ^`ílÅÿVpÅVpÅVpÅYÀ®Ø ®Ø ®8 ¸Â[Á[ÁÑÜvfvóÇ[_ÿœ»•Mž}™ûJ²íH–ƒ’íÕe5¾ðÇï7û½¾KO·sNæþÎÚÊÆ–ãfïËÜW’mG²”l'¨jO·Ëýqüöð|¿ßãÝÕjò†ö‡pÖVŽmö¾Ì}%Ùv$ÓAÉt‚*«_ûùø}ùúÏIßâ×ÿ=|cÍØÊã÷»ý†®Vóöeî+ɶ#YJ¶T·Í·ÿÝ®ÚÇcyüî˜r*~¬Ö‡C8k+‡É·‡y[ɰyv$ËAÉu‚j»²ñûa?b÷Wï4ùúý|¿<,Qçmå÷ÒfÎVæïC¦ÉrP2 ú®–Ça;o·7ãáËâêuµÜÚU†ÉrP2 š¢Æ–›Ãå{Üç‰cö¸•qào©gmåõ(:¸fØ‘¹åeGfž ¦ëöÃnÿ>ÓŒšý^èÞMÛ›õál¦y[™¹Ùv$ÏAÉs‚ªwÜÛ]ŽÛØõÜ[êñLÜexRá†<ÏŽd9(OPå‡Ãsþc·õÜG€¿ï¡?͵#9JÆTùJø²´iÿG¯ŽÖŽ“mG²ý9N–DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD$ó&>„+"\Q1W›ãÛú<ß/×vxW~¢ù®ÖW«Ãû¢=ßk½ ¹vu|«½ÍÕêù~?«Ö ,Êáêøþ›ãÇ·ãÄኜ»Ú®¨Ðú W”û~ð&áŠrºúýü WDDDDDDDDDDDDDDDDDDDDDDDDDDDÔGÿvßÚ¦endstream endobj 95 0 obj << /Filter /FlateDecode /Length 801 >> stream xÚ½V]o›0}ϯàmF ccäLZµUê´‡NÊ[×N‚JqÆG»þûÝk›.i£®tÓ©Ø×—sÎ=÷‚8[Íç‰ô(±·Ú<Ùz”±PŠÔ‰ c–x«Ò»"Ü("ré3JtÕø,"½0!Hn®’”U×çM¡ì.oJ{¼† %*o«fë_¯¾,Î9õ²0±0ä‡;”‘qî1 SšZês?edhŠ¾Ò `E))U×_ú±4BâÔ‰2Òª~h›Înú²ÉµöÈ)òñþŒè=Ú›“cmu‡;åRs{9•9¢è¶ÚVÍËä¦ìgEzÁX¥a–8KZ‚mà,©|JºWà ¬Q»L‰´6üÖÄÐ]ôMBm’¨v—ï]D¯Qæ]¥:eqªÆ^·J·j£ZÕØ“dŒ’Ψis¢šÈÕ!l¶ïΞHÒU=€v 3¥tÚh9f‘ׯUjª’X+†AciWÆm×·ùi‡Ã¨Úb¨óÖî\Sꇭы¡ïQÝWýÎ1Aƪò…J\GÚ¼¬†;ÉYØgÆ­g¨u³­ú¡T‹,Â…Ö7Ý¢ì;Ùä½ê@ µ”âhÞÅ0êÙ8ê µqb熭Çr¾"ìÇ9žptŒ’¥Hæ.q Ï$üýæJÒC®ÃsSG(-am Ê35=Gð‚ñ¦Ã†_Ñùµå‡° 9MPUl2|SÅ2¯._•]®Õ]@¬G' üÍSS®s`½¤ïÙ¡xGôÄñBÏ8c$E„~)Þ‘¼†Sœàdoç¤ÓëÜ×ÚRnq“Õ?àf¯–*>€º"ïNÀôLȦÒ>ÔN( ±®ôB×S4®ëAMHÝÖm©Úi<æí]ÜL'«ïË%ÿ{â·ÔŽoÆÉ’ÿì; £Û¼Ùªÿ:>ìmöÜïª^ýƒPÅÄš6L£C³Ï«c">~ÊQ&I¯¸ý˜…Þ#Üd,Íg±ÙŒW..n¹÷IϾÁo„ FÜàø ?,_ø´c )ã^š…@jû%FÁ¿Í’”Ÿendstream endobj 96 0 obj << /BitsPerComponent 8 /ColorSpace [ /Indexed /DeviceRGB 36 505 0 R ] /Filter /FlateDecode /Height 600 /Subtype /Image /Type /XObject /Width 600 /Length 11947 >> stream xÚí‹–Ü8n†ÿ™)wvcÇÞÄN¦“Œ½6ßÿÓ] $Á;)Qª笷§»Tºð‚ ` …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡PŽ' œ\v⊯Öɹ¢+ ¹"WäŠ\QÈ…\‘+rE®(äŠB®È¹"WrE!WäŠ\‘+ ¹¢«Ãs'Œ‘+õbróÒœOÌ‘ÊF®¦ãêÊ‚Àâ†Æ“wxGyn®”B4hÉÐέgçÊÆÀ¦AÒóø€ #~ïr8VÃ’«é¸ò¸Æîú÷ôWÞÿ]Hð¼,Ï.‡¿=ÕçÓq…;(ž™sµŠ¿ØÒ`…‡%'©Y‚óùZ«MÝ*e”lj÷)ѧ ¦ÜÂî‹ÕSqõxë]ÂÜ14ÕþQæ®ò‘®žÿt–˜2¬v< WR!¬îø:¤îÔFÞqwÃÖÏZ©fñ£Ù…­§àê1ŒÓbÁÖ4 ¹úêN•wâÎøÁì`›+K3Y6ö”ëGÚ·|+e¤î—Øš¬3såè 1ŽÖjŒ°LèƒqûcFƺ¼—‹\u‚êácHgJD–¬¿Ö;W(%k™Hô(7gê¬\yšÎºËÃW7®ÂhBºèÊŽúJ܇õœÑá<…Ÿ«›6rfZ^¼Z„üXCÏ5“8teØ ¥h‘²ÂÂsë+™¾ûãF›ú£×ëgFs%ŠOƒÌP½75(»Ḑ8ö8­›e`“æf1h/±<¼êmf¸êÕy«Q”ÄÆŸ×ÀuB;h~°Æ·ãµ#ñÜÊ—ú†c».h6%Q„­±úsÎ×`”ü”‹%©eÿ2£18N”Ê’êwÅÿ3©ŸHžÏÚŽ’¦æ½Ü€L纷UjbâÆyœa©Ñ!‡´Ï—óšD“€º¥Œ«‡…³'xkìÓ ?Ø«;m f #˜ºÒ¸þµÓ'tO­×Rå¹ì Ý!âë“ӞĔ=ão‘’¢žÀÒÌH…%JÅN+ÇTKßÉó±e’Õv£æ„&"|@®¤¯éí¤±Q[¿ÅÑ 22o?}/q†‰Aµ²Z®$Œµ3½‘q«MwÛ‹hÓ[óøí…κ•ŽŽGm(„þZ".…3‡ò¡…ðEœ{c‡t÷Ú ¨o±ÄÜóÁ¢Bj¼aëj™0c–…c¬LÝ÷ n­aûJ›²8†ß^òRƒíjg0µ¾*p ÓîeŽÚ†GDH½ ¾®S‚ȲÐf´ µêßW;Öa8W]'n¸’ÉndüÏŠWçF¶Z:ü”N@1ô/Øþµgçʸ{2ãUññ ü§µThœ‚î^ŠÞ\AãÊþBkÝ)+C®"\YëTÉôÈÒ ‹·æªìŠñ¶Û•©«ÌôJ‚q÷h'"èÀX™ùýv+ö tàÊ Oi8ù#ŽfCÒ±r²é Ô••à|FlcŽŠG˜fVJh»ðeà‚\)üâë•aœj-æ8eî'_wö+ŒâÊ ¢Û¡QÍqr¡øö`ÙaEx.æ¡ +Ïï_+K£‡÷èe¸–Ÿ `œ­`5Ǹº2N™¾L8 RúK0Û:ŽS*ÁÀŒãÊÎpp´WŽe™ÄË >hseÏ]ö)±WGUàv§[Dæ'Ñü0d9w¹:Ê•‰ÄHsfþ–i0Qì m0'\wŽé>n•§uò&”¢—¡¯2]ö`;JÃ{z®ò ̡ǣð“äBÕdzµõ­;üPèå`ù¢5ô!‘ÛÁL i4­Có5¥ Äp<ˆŽá·“©:ÕžƒÜ²-ˆœDßÜÙ®ÑÒ&w¦CAg÷&°Â\5./‹6°³ãý .Šr°ür¼=Ía¨`wá"ÿ®~~¾½ˆ¿þYyÚò¶ ݾ#-LšZð‰2ž TŸFVª€¶q º)ð:ÌÇÕ >Ý~ø†5§-Ë¥•so®g…2«Ä[R¹‚)ÖW ãk­qè ¹úùy¡éåÝ_e§­*M€&;”lÕWVÕ4¨Š•¬Zé7¤fr¥/×c;®~|üôøñ[ÀöMómª„˜n&Ñb`e÷6›(‘’œ¸{é@f$¡C}½3¸ {Âóè«ÖpA‹½Šö oÒWj)oU_-VRc‡BÞÒ©¯È9(6iÞÊ¿úåËí‡ïäûW­›VU¢x×D þd0íp§¡ÄƒˆÄñ ¹*Ò¡cæƒ?>Þt{@[8-c Ýí«kÞaô¤â{é­z«&Ò'ÑÝ¿´êÂÄMû £\5]úNÓײgÇRYùÝôQWŽßînˉ¨ìMV™™ €_ÐÝRÄÕîœ9`ƒ¾»ôpZÖ_•dx$!mFJƒ.Æ—éó? <×r'àêÇÇרUC\t XYŸÐZTô0ÑW!ˆÚmÐÑøûº7Ò Ú'\µ»ž:qõòÞŽ8l &‘'9‘Áª¶Ð£ö²;„X£[‰*ð=öé^Wð hUcæàêNÔ·Ò¸èsÂD¹6¥ÿs£!T‹y‹Fw!§«¥­¤è¶ ×(®¾ÿýj(‰‹öpŒr³£Ýçí2U­ëºj¿‹uCŽ ª©ÖWYsXµi°u×£5Š«Ÿÿü²ƒ¾j©Me¼ šZì†Ì ß Ñ'áý.Q”k5ÑÚpZ®ÞžØûŃßnZ¾`Ðd"ÄÐÅowÔ‚]¯]Lä´,ò‚ e±çµjì×Ýò¦±êé ~Eë—/k^Ãv\µÞ>lÛÔÁFÉŠ½Ijx 7ìƒÜm~jŠŒà¸±Éýi⢕\A 2ôŒ†ÙÎìæVñ °ç+;÷©1ŸSè˽Œ«æ#`¬ÖÑݯk]]†¿bm'kI¦q6W0¹\Á+ÓPJOŒ!r ÒÕž–Á²ûz5•LšFd6TÈÿ 7c±ŽîYñ¹¸2Š#þIã~øJ¬FÛãªbå¸å¡C†O€H>„qV.û¯ä?Wv?À¾+˜ðÜ7Qœn×%_¿!„ÌŒ©øN.+l‹éø¸\Ù¥øWXºÌCtpÍ®W‹Íúœ›/éˆäpÕ˜ D®œ™=:åVX‹MÈ}ƒ€^$ÄU°!F®`?rÕÈ•ñüŸnWc%ÇX©vKOí”PóYÌ‘>‰œÂøÍÕ"È~•!ævƒ³GmmPˆxÀêÑ Ç3—%KÂAïYåž:ÔMbœá÷ß%X}Ýu­ü+¼ª!·Ûšä¹Îá*™øæTÔÀí¯Øo‰áI¹úýw VßLVUWÀ*@(RIo6¥ñ´­¦ßø)£Pyo¹júÚß_ÁBïn"P·ÈC:u€U@Ðâd"Bé]ˆ‚´ÒèÞd4f“«U.WY¹ºÜ¥ëå( +b*d§éá@þ—Œu§£Õ4±©®œR•\Õ|íeŸ«Žp©«·0, ¶›DÄÀ•©k ´\Ÿ¿ªM®Š¿ÖeGØÁÛÓìÉ–Ãì%]/·!èø„Ú@?b¬õ;rU¬L‡¥Ñsq•ø^ ™+qpZ‰\y +Ÿ«5Ó9–­%§Š­…”!{Y‘«Êï ¡²h+gh3ÑB®ºò'û '"Õé}JZÇZ×JÄÇÈUí÷Æ Ñ±Zª>­¬`»Ý¢—b$‡P4aTvU4­ @Zg„§±ä*Êà#4²9hE¶öc–îÆW¤2í ´V•=·¿ß¹lr•ãýñÎÉU±bÉ}˜Åjл]Dëë¯ó»ˆºr(­ÜìèÌ&Ù WB*¡’q)ùrŸ«Ô,¦˜«Ú'*7Ÿ®PõÙ4r>®jüë²GY>É„ÂM‚ñˆ4šgÖXK^Ï:råúè*«Ù`)Ë8\ÁDËõéÏ›ôÕº‰(Ž]N{Ū¸Ök…JÌù6„Pˆå¥ÛÙVñZÉm¡»xxk¹º©’ÂDuT&HÔ—£bIJ¯âÅ#VÆc²:6Ðw Ή¹ZF»hÙ 5¬ 7K+“lóµtFš+xÖ°^M]GçT\‰±– qs-¹K† §UsAŒñV#Ó8×VÇV@®²Üé% “^žGóÕpem¢œˆŒÂ±×ÇÈ›J´? WÖ0#]Êí×+Á•p®äVy$Wr=¼+"£äªØ*!êûÊœ'tBÙ¤Æ?àÄ¥šc#õ¾"w¨Àí`ØÙŒºmÁÈúÂÍIlQ°EY˜BúÛx´Üv?g°"úŒ“p¥Œ¯µkÁ®¾l€iOŽLÄwóN}w2xªÖ¨ÁŒÒ}€äª+¨Z껃%jëç·ø¶“ü<†"½VéP pűW‰itØ.µgs{P/mèó;1ǪðûÍ#Ñ, e†ã¡°3r…>+Ì ¿/.Ô X²Âc9W— ;­ÉñéZŽ­M%έ¯.®ü¥‰@›u˜Ž`-¥8"-Ã*¸Ò‹îi½Âìr¥‰¦x¡KjÆìø\…g¥"ŒÞëݯ!ÁHp¥G&œæÀ!`‡*¢o ‚\µ¿k‡ç*2ƒùÑ—ÛS$UçÝ ÜoÀoq@"‹ÆÊ¤BwE} y-ôè` Ë´pPXëŠgü«Üžä è>@Óq…Ò¢{q¿éŠa@ ·³ŠÉ:Oüaõww_°0DV x†–~{Ìe·ž/Òº"ؾZq"¦²Ò\Üè¥þŒØª}7f‡gV®Ð®­üR&˜kÕcÊz1VÙâÂ…œˆÂ² ‹Æ”‘Ü–ï€QZ_% åp…~\=®ÇÞ÷€\ùB¤'„¨üµ‚VJ;òTÙp•U}H;á]\,·èYÆl+Y'H ˆÁÄdɽËÐ^»nÃ53Wh³‚Ú°Fš¬õ9ß®(ÉUB…!ØwÚMXßõi³‡­ÊúJ_e–µJÍËáôépMV3tÖï è•ýþ(þ^3À<+WhÃÊ Dì :ÁžQïnÄ”¬…}–än¼pºD³§ÑWhÀÊýè.äí°ÈKáJ™<ØË‹d†ƒð|ïÀ»âmøqã OÍz`®ó)Wi»l¡»+À•2U„-±„ø|Fg!² –ÛÃó‰ý+jÑšF® ŠwŠ-a}4–¿ûOëaB{7b\!ùpà¦rX.$€¹x¿ÓB)F[v¼^¯öaŸr­ÞÅ!ñBÍR3ÔU@Ã*µFd©øm†ÿóA¿Dåá:W+^¨`!äëAå*œªü ”›†hó$}5ŒBã q´`¨˜à¦Êu31…¥ÚC-c¹.A0%Ïë+g”îäÏΰ 87î Ý«VÜ%èT, H:R&\¨!§AôXRŠX⩸j«Ã¨8ÍðÂí\ÙkЮÿœŠ~è½ÛLWÎ3ƒ¬‹}Õ4|dzƒU+m× ´ ƒ©/£!Îâ*3ªæ"§ #+¦®ê<½¾ªÀ*<ˆK7Igàìšîm-l“uIQ®€ìá žÀi-,Ÿh?Ù|°:Äšú©ï;Y+"BZë*®üØV")ÆDã`¡l,ê«ZŸ=ôüD¼“&GËRX•ú Ž]×%MpµnŸ¶&WMm—-æ¦ës¿b‚LÆ*äJ´iwÛýðª½úüì\¡³T ])²ìÑX{‡…%D†jÑ÷öêžÁÈu*AS{ù™újV‹eה餰씫¬Z® †dLzWÀp‚!C®:p%gÛé ‘-Á,Ñd`¥Ur›8³ü~NEnûÓÌÛ±²éJ]êni­’ KÉ«ÕÑ"aD \€«äe¡Œ«'ÑW—®\•ÅÈúN§¡)䤈N"¿Æä=C^Ìç Œ‹öÄJv z?øÁ„‹e›Èæ›ÜºHë+½é}Ër(NÂUO¬–s0ôeÔéæºÇ¹ ïBÍLFÐû·l>4}…œyæ™õUW¬¬)úsµ0qÝG±®§¬‘N$• {sC´ž·='ô •ÚL®:c%ƒÙ±=…µºP(¬ l_€Î'æe¦°ê\Éík:W†\õçÊŠË¢“¾z ¢X( ô‡@8pW¸?ÉU@_3.Ýý \ÀJÍëí°[åÑ}ÖzŽ×})ÎÔÔeZ±k÷A¦øE¦äª÷´Ð3ah)g +7¬H¼KWW9Ï+”D™Ê ï«å gáê2+½m ÜSè¹-#yŸ†S€å*å]¹²f§Pî5†Æäl^:W—a\¹Ìú^·w­÷rù׫˜L®`q•ìá£U‡´¹qÿÈg¶ƒƒ¨Rö²c-äٜٷzkW¬^Á ùW±ÌÖ;è˜CIeì?„àjVn'[ -\A ú¯» ¨Ô’Òxø6VuO”&UÛo RXäJ¼ï@¯N"íwÁêÍêÓÁ6®â¯B{.à*÷¶»ë«ñîÿ>ØŠ«X-î ¼’`ÉИΕl÷L%FWûíÁ•oT,>cÈ>¯o¿|yy÷×÷?>œ„«`yá&C(a€+a½JþK¯B zJóѤ‰¼ $Í\ý|ÕT¯\]ÿ·Wc±rÚ¿wË{ƒi+g•0’¢žÜÍq>]!ÅpéW«ï\ýúç9¸2b3!rÞÕܯ]†TWW¸gºM\ôF®bã¡—wË›JwÖWï¯\}ÝF_ÆÊnüÕ¯ýL†7DБ m¢Èž*d*,iòíwçÊ|çW®^ði 5yÏ•u=j ´Ås¿ýø†ÕÅmö׉+ß‚Hk‚õB\©Å+ò±n>üòe ó»VúÌ ­SBg9G¬™ì4Š|9èI…š­“áþq¨¹ãW›a¥6–\²,«’Eé \.öNÕ|®çé ð'¨­2׊M¶þ\m‡•j” x –ð±ð{¹k,½”-ÂÔŽn°2½µ ]µí]õÕÕÞeƒùàÎ\QÛ vNhM ¬ª°þEØ{®çÊ„rbáµ.0&s z°”[Dô¥ÍÁB6VØQ_Á 4UL5Å^“ÝíN£ïÏßrúmå-½1¥ûê®ñ«·8ÛlgØP]i:BT¹3@—Û¼ZB¼7ÈuJ¡eZê“À ì/¸KÛ8¬ª¸è› ‹ª¤¶ãJên½d®ëe¶9A/1OKz2HÙb(V×®SòDúêrÙR])úJB·R7K þr^;WN+Bw…#†±&.º‰µ)U_Ù5ˆ=¸ºØ5™M0X•‰Ub¶wú/!¨iu½cœá:)lÒV§Ý+µ=„éבZdxªlr•4ƒÖB•¿…bHǸãW{½¶þ&—ëÑC¦¼ôëíîhVîs…¥±Vûrv¦zí>»ç"OÈÕß®bvâÊê§Ó}Òt¿;½:„ÇUÆISÅá¬,v³UJu®–Ðhl>øósâ3H=x¬ ­ SNÐîÇÝ…«æjí¾ZnMVÀ•4[ÕŸ§ÑWßbX-É7?û´~,Xá¾P±>úJÜÒ\¡qpÅýÀóèîц¦†¼ìà×÷mµÐÊ*Ý›«p?T™›r®rôU^ÞUNÜÔOÍØ4†’½¹ŠÄE|üPk²#húç\ijâaÈNû¡Š¸ê³1ÆQX’+Ùê«ó”pWÕúj3®œü=ëÝCðÍìðì£vÐ]Ì (9¡r%r6 f½éÙLí“úññ}„¹GÐ4¸kgo¿]á*ª°•‡šÉZïNË2À€æËÖôÏúöuÒê׆K»qõ˜F£É•ÅFO-!+ˆDÜïîÌ^ÉÊ[©áÊv¤ ·vȺön„/èÔñ«Ëeã(ƒÕC&l>Zäzw2±Á¸Ž:úê+YËNuº°Æå×·+ç`ÃÕæc•vEô½ìá¾ã­4Ôn6ŠÿÞIaÁv Ä²'d+Ê’îõÒ«ÿþ%å·7qu¹`®²w¬wðßq/Š… MéºYtIù‘urœåGÉ"%Õ¯®ÛÉl\Ý×e·æ*{¹0ÍÊ$È••Ü+hDY­µrÖêŒ&}ßbä¸hÖÌY¢t¹=PŠ·ÌÏÄÕ>XåÇ®:ë+ã‚U¥¯Š\,d5³Ö¾“Ë óǯöâÊ òY´â¾,5fü¯ëϼ<%¿ì¶=?nØ»:W»aµW·F½±òSéó•—ØÓR&`§:øó˜H°zmÛ- ‰¢;Xý¸Ê¬ì†Ý;ùNLaÕe`#ä¦cvÀœ'.Zª®NÀ՛ºèAÙQA¼e!ð±-rÉé“aP¸ËÔÑ<:} À~—³ß.JÌ\û3ò)`e˪bíûRÊ‹Fš»(*¡üú9{Ãê~ sƱ»ÂêÒ¯]pÕ05­ s˜ð¦ ,áDê{Xauáê뻿^Þ›ïWŸÃG5ÄUÙk®ÖA±&ô‹ è]u\iLU¢ooõÛßã*ðÁXËÜ^†0Ôô£;ØA®L~½vƒΜM•I¡ý|ºqõý^ÿ·WÛxbn†Èø– >XîΆÞ>“H¶ R'\U}LÞæ„ã¹ÚÔ—Üó¸‚鯕–Ö¾IV2öÓ(ÝË1€«k@ôë‡Íúãlš\¹0Ûr…{¬AVêZ)Û•M½ø<’ñ¡ŠKuÜ_ç„MÓÁ:}µWÙ›Ðí„·X¬$cöàJôýÕ{»B½øY¢Eû6w~0ž+Çñ½,¡I»9tk6=J–y„»…ÖŽ ä* °€^–~¸¬má”ÝÌÕ²Â\uΓ²p•7ÁïˆðX'„—»Ú©,DI¤%‡+Ä«)¹æà*ÑÈ¡#WÔœèM¸BWˆ[ÁÙ¸Ún†²ƒ©«ÁÕ#¦äŽñL9©3™Íé$Ž÷çjÛ´«Ž³A#{çÀlÏ•L\@W‘” õÕÎVVIÑ®^ûbRìFߊ6¦­Üh,RÚ&ž1G®&ájɘñ¸ìØSƒL®n;¶/½xtŸ¸ì<Ë‘3¢¬ËAw®ã·GÒ\¹ÎmWó)4\Æ^T^î-š®VåêV¼È©¯7|Š µ¸[êõ½‡Fz çþ\ wçôvpU”·jkð®#“°ÔýªIu‹ÈïÁÌ\euìÀøËÊÚm…ž£¹Œ¢Õ;ǤJéÂÊ÷ðÔWuÌÌUžÂÚ@c!‡öv}eíã{¼1Ëœ°°÷RÃ… lb§Vpv®Ò¬aƒN9ÈÊIíeaï½7]Dx*1~òþxl®ö¸2ä< ®Ëƒâ}Q¹‚Ù‰«hUŸ{2‘g:²Ïn•Ì€å·lÆUeKòËEV…›[_!¸)»q…aÕÉš„²‘Ắ Þ)Ž:· Gj6µ°—`·æÊ)2ƒ‘Ñ!Te/"«ªâdy}Y\a#®Æ™Aeqö°®¡•äâaY8W“øí\¡x|2¸Q¬Ëh®ÐR_+«úlúj®ŠKÖ†\{h…²éß ¸ä› øì9TÎÏžŽ«,¨ªm¼Ãþà}*˜ëû&6­Œ »ŒÊh®œ’x÷¹‹åÂô¿ÑÅe*g‹ +ƒ¨¥…ÐñÀµ¬9(øªfð~]ë‡Çá []ØZþI;o¯EJ(‡õw"î>W¶>‹¾2$úÀrŒ Ê‡Ææê2Œ«ú*õù5¹/Õ=•œÜþS2£–Tn¼ ƒ¶/(Ñ)ÅD «ðó—pH®Æn$ð†zP)u5ꉃÚùù]ž…«m7Ô «Ð¯UŠÙ,RuÁ“pµºÙQÄíÄäª7Y(ÄÊ«©+'8¼McO°œ ÙnëL\aF®6@‚wjtôpzqUwïÔW‰AEÖ÷) zŽÎ`a4Vä*¡¯†¶«q÷õ ïœ¬ýñ_ÎÀÕ ¬ùê q•*´Ñ‘,äRu1ÇçjR33¬6QÂ~O°P„¹ã^«ðYÖ§s XÊöq¶ _€\e¸í·©¬è™ôK«L}‹ÄÄ›\Žì·ÏÄU?[¨l/32„vñ6ó“«ž\aláØâ:_½À Ô„ºsuiÆŠ\Ù—ÕåV(©¢¢G°€ðœÔKâ#WÍJ ÁØŸƒ¬`›©².]¿^h9|äªÇeAAnV¨Ð…ÀÂÊ´{A%XäªÒm‡ÁÐêÞu_Ý,õ®”¤r5€«Yª4w×YêËrýÖ’êˆá§C®â\Íz¥—™ïÑf:ïþÉU¥5óŽ´Îd=z”q«¬fëÒñ«.Ú-£Üœ’«q\mã—õ"Ëùž‚p-¹ªäj^uÕ¬Xh\\Ž«‡ CÛáÚMg¥qˆ’™äên{üµC³ãv¡MDä*ȶhxØ-•­ß^¥ôsÛ,”Éí`òª3×™™,“ß~ÓÀºd鸼rÚ We\™£ÉŇë·ß\°.—KUY ˱quýpu<¬lÞÈùí·,û/ÕžSìU$WîŽ{ >+W%HÅ]'Û»'W%\aÚç2¼,®*G2ÚθhÆEÉLïãS%Ý«À”0õ8 ¹êÌ•9‰Ôc•¶ƒ±­ÿä*ÀNVÝãHrż¾\Å2;h"qÑVÿ*йRõÕy a§çQ¨®æâ {?Fb¥êïb+I®Îí·ÀãøWØ+€\eßIú¥nÈÈÕ”\ýü|¤_ÿ<W£ZIžÎó2éØVyÁ§ÛßðáP\«NêjÈ3üùy¡éåÝ_äªÇ8b²G•\’pÖ?=~ü°„˜«Y¸Âìiöɸ1õ•¥&qÛ§Ÿ7ìÓàå—/·¾ÿq,ÿŠá«^³û1OðÇÇÛ|0 ­fµƒäª¤9xn®pšá}¶K›ÔoÇ¡°š9ëbÌ|ðÍ«úv°¸èqž‘«—÷vÄ\—+lÇÕ¨o¶çŽEæå \œX_}ÿû5Ôp¬¸(`8ìÍ(®~þ󋢯¦žÉø\QsMÆÕÛ½_<ø£r5©Á~Z;xCë—/k^Ãa¸²H"VÓq5éi3ô•űªAråê«£Á„g»ªï|:ÖØ7r<°È•˹Vf`´B¯\='W«‹…œJÀÏÆÈU«‹œÆ¶·…r5-rA®8Õç9-W‹\ñ~È#ÇB®x?䊑ä9烉\QÈÔSpÅ(¹"KäŠÏ‡\=ÏpQS‘+@ru®–í„„‹\õ½F0}”\uÇŠP‘«!f`‘«þX=R WXÁE¯2_‘~o¹ ûV³)ÐÚGì¨ÞÈ‘« ŒàLdÝ*¾¡©õŸµG ”gÞsî5+ýÙa¢X»h;œwBìÚ¶PlÆ *3eW“#WÚj®™iÖ˜«Ó ݺ… µSâx bU7/Y«¾Wü²¼r;äJ·$ÓøêȤ¿ÿ%·¼_ä*Ïšlÿhr®©’Ób«JþQk´§-46þ–\µàö¨×·ÂZ[© èí}±Å¯¹²µþ:DÛsµ†˜ò¸Z¯[RO®ªœäeHÇŸmhyÞ5Nø-î´­^ã¢U~„Ó#öúÕ”À]#ªŸ# ,¿í¤†\Ùwô3/0 ™bîÙ} ì7Q©¯¯ñ¡Æ%3ïÜÕ.~KÏÃUj]uÉâƒéÒߣjì»±ƒ\YX!x9KíöŽû#¾ï¢híñhØåDc–6îú?9âäj«)°Ÿ:"ZâÉŽB«öŠž ƒ9%=‘¾Š:PúŸ3uõÈz¬N¯ªÒ®Ýi¸‚‘[I»–í˜#:¤N¿ãbâ&/ýBÙ€ÂÖr%‹ÕOM¿8‘êûäX™«6Aó'ów‹ã’U:G†UŸ™ªCrU²_´:ù³Ú”ßc?%Wƒv`y¹¾ :”`«Q™œÂ›j.4|ùSm¹?“ Îñö× ÏWÅ!/9ç\­ ßCúÅËiå˜ÉÑÙ&„9û¢ÁÕPK³. –zPÏYÂè y}­”M¡ÈüòÇ%ði©::Wb%f˜_åEåãXù{`žÈÅBE鑃 Ž8*ïRì_°÷8$4çteg6ð­ÎÀ•êÓŒ% úË)|Þá¹÷yaP’Ï™££Tåô< «èNÇÕØy¡úUs÷t6°È½:Wƒc¢…Sèç­’|¿}5¥rÓ2Å&Wä*Kq@£uÿ »ìgO¯º‘8W“{ªO†¹¢ òbpÉr8'„kv®:Ö¤§l®¹&æJμW¿äk6¸&çÊH+X/rÕz!$‰\ðB(äŠB®È¹"WrE!WäŠ\‘+ ¹¢+rE®ö»Êe^®('×`äŠB®(äŠ\‘+rE!WrE®È¹¢+ ¹â“'WäŠB®(äŠB®È…\Qž“+ʳed÷-xÒ£qDÅC®È¹"WäŠd+rE®È¹"W$ƒ\‘+rE®È¹¢P( …B¡P( …B¡P( …B¡P( ¥I¾ÿãÏ×||ÛAôþõ§o÷ÿ/9z=¨ìèúó>¤î¨¶·ÝsÛó>ŒüøøëÛ}~ûåËc >½þî}áуʎ®?ïŠUÍQm'n»ç¶ç}y}[®÷ùrýטŸŸßË»Î;z9¨ìhS}Þ‡ÔÕvâ¶{n{ÞÇ1‚|¸Ýá×÷Ë/–³^*:ú*Uç•PqTÓ‰Ûî¹íyJ^noß¿½šùowøéª¬?”½Tztýy£RsTë‰Ûî¹íyŒ««…ÓÉoæÞüëÑËA¥GןwuNL•{Òrâ¶{n{Þãjñe7æªú¼­\µœ¸W÷=1M¸éaû>ñ)O/;Gר„õ+ ÎÛ϶œ¸ƒl¼ï£é«·ûü°ŒWÁ3¾Tztýym¯÷S WÅ_ÑvÏmÏû`\ÝnìõÇÒyïK[œ¡ú¼­q†–·ÝsÛó>Ü|ðêG~(ŽÓ½´ÅE«Ïk£Š-'n»ç¶ç}8;øõÕÝùtܬ+Ü®^Ç©=¯ˆ3V®‚ÔŸ¸ížÛž7…B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P(Š+_ßý•õ™—5GRÈUT”ÂdäŠB®({qõr«ùóó‡¯Àõ·oÿÿ_¯?}}÷?¿þ÷µDÙõ€·¿üÇÛ/k±I Eáêë/_®µ~~"ûú럯Ü\¹úëM_ý\¸Zþòr?ˆBѹºÑñòVvñªÞýu-¥xý/—«[‘Åë׃ւžŠÍÕ­ç+1 =/×ß|U¸ºýååÝ_ËA|Ž”l®n}f4®¹Öò~Ô[¤PB\}C…¾¢Prü+éEyþÕÛ/ÿŠtQRóÁ÷Ú¬ïÎÕõß®¿xýìòÃ)‹XSZ¹ºyHDüÊ‹R]×qðVcxÿrÿ˯ÿùˆ_+J9w¤†ÒU®°¾q®Gé,o6Ž.9…B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P(ÊÊÿIÜß endstream endobj 97 0 obj << /Filter /FlateDecode /Length 1104 >> stream xÚµW]oÛ6}÷¯ÐCR@¤ˆú6X»ØØà=íh‰ŽµI¢¦;Ù°ÿ¾{y)׎ë$ÎRøä%uι‡—”üf1»¼Š‹‡nƾµXÝZ<Ü$N­8J\?ˆ¬Ea}d‘ípîy콸-k;àl¬m'ˆV‰¡ÆBÒH5ØÆLÐð¦“b H^vy%íß?]^…ÜÊÜ,öc;?BYZŽÏÝ”§ÄýÁN¦FÀ S– ¤36ö’"ÃZRd56ùPª¦§xYUc?tbÍ/mÇO˜¬”í§lK±AÑâO^0gÕ8ЂíZg°ÏSk<8ÊÇr¦8w³ÈØ·ïRÆJT˜x€HîdÚ/ìüÊ&¿t ©Ð˜Ï‘yý ŒÓ„éÕßîö˜ ^Nhê{ihÅúüH™ÌKLL:ÎÅ3YÄ& ÕÜhp`ƒ˜©Zk¡çØÛ­¤¥ ïdè§(v$CONi¸¶G»²Óuª¦GôN`§íª÷KÂßm»eZ¶¢5ì¢ë)B{‚½·•(;1¯ÍÌJu°ë +Ä_`1…X… ØÁjˆ6Ô½Éßã’[¬§k›üÑK R£ Å%ÉîΈÉóËÕ}<§ÅºSãÍ\È8SíPÖåßkŸ"Ûr0sÓ™À‘¯ë ô (ì- î°—C§’PЮÀsµê$õ&U4ÚØQÄD5šáýã‚Wjl Ë&ñXÓJ?UØO^ä‰C¸u,1`…àŸAéËÁ„dS˜¹Õã¹P ¨ÅØŠeR€Ž“I/Ú­nTw}@r’ É™:ˆnËø¾Ä…›–„|[èG¬®¨ýÖ¡ÊQÜ^‹}¹þþ‚‚?ÐÒŽî'g0á=á¬B_Uç¨]âiýJ‚[¨ÕA+®+£8?¡t™°›^=O’gXÚ|=÷½‰RÞÎýgêΗ%½÷qà}®.]X'ÉÉõ„ö;]iU¥¶_?twK$,ž/£['÷<¹™ð†‘ÍÓ³Ó$gáÕá1½ßL‚tÝröÏ÷.û÷ɦÂûõÔ¼p%⯠*øŽÄ²ÛˆjžãŒÃÓÉRèí¹­¿ñûnů¿½{惊Wˆaà.vÚ^©å\ÙÈÏÛ«É^¢† Ñýinç—ßêÃTE3”‡Æc¤U…6^ß„“§<Ðå¿‘S¹?Ãe±»[M»~a+Ï»¢œœ½[Ì8dáY|÷ÏóÌõ£ÀÊëÙ_37â(Ô+öºz* |=˜Z^þXGÖjö ü&XgÂuö€ßàÿÈþÈ^àò ´Ò ¾OŒ¹É$ø?¸ížgendstream endobj 98 0 obj << /Filter /FlateDecode /Length 1073 >> stream xÚ½WQ£6~ß_Á[)á°± œº•rÕmÕªWU½TU•Ûl‚D ¢tÿ}gì²»ÙDj_‚=Ï|3óÍ@>-î><¨ÀáÒõ¥Îâi´u¸ï»­WøÊY¤Î’éÉŒsÏc?ÕYÜNf¾Ö,Éë¤Èp°¼œøœµYÝdI›We3y\üòáAr'r#-´qsºC‡‘”ÎLp7ä¡uòûD„¬[ðh°Ì«žì“¤½”Êþ´Åùnk :'™Kbº¹šÌ@;#•j»Û·YÚ»2R0œ•¸XŒ‚çÆÌ¤²¿&¡V΢uf]€œ»‘¢,îp(%GÈ –ªL­ˆã²Ë,®Û•†²,!öÆÊ¿b ¸x@u\&y“TVtÈÛ½3ß6²4ÞÜ Ô¯Ãõ¨¶@¿y¾¬›–rf³ƒÍ›¬Î(é›ì™4êªiìùÊ¤ÇŠÓ í”y¹¶gpaT5¬Î¾9êŽ+º3°C3àÁë±PÒsÌî›§¼uòó)@Ä13B±ùȬ"¦| KåY™÷i°:f¡YoIt…‘¶æx:‰µqÝÚíðÖåhb䋈"`iÞæqy€¶D6,‹k›?P´ÎJd-üɪPÜÒ÷ÙA{ă…±i&Ô¢ò› ¦š HÕDYWÍ‹atŒQŠÅ†OJBh6ŸpSfÌošaÃ)máä„®;™¢^1 rÛäÃHòÒRÓÐöÆõ~‹¿4j{ÁLÕQör\6®ÕÔƒù§G÷`ôEÝèû¢~}°Ïïgö™`g\WÊ©ùHÌñÜÍžyÁ°tEV•p}~•Åu"†&M†~¤Ñeàyó/Ó.® ¶õÀö®¨°7½C]¤d¡}Þ³÷dDœY²ï^0½dźWÅ^äeÖØ#xÅ!½ˆÏ쀸®ŠkЮŠ}ö?'ˆd·O®C ÕÎÊÿ n^¶#nÁܦÖqë×9ÿíïždÓŽìW{3º*> stream xÚí {;r†?ðÙ 6ä8 Ðÿÿ‘±g¦»KRé.õm¾zže}l»[z»T*ÕÅ …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡O@9¹lÄ_­“+rE!WrE®È¹¢+ ¹"WäŠ\QÈ…\‘+rE®(äŠB®È¹"WrE!W‡ç Nü)"WêÍ䯥9¿±P6rµ;®®,,nhÜq0Iq‡és”ÇæjF)Dƒ¦‘là Ñzt®l l$=Ó/˜8âû.‡c5,¹ÚW>’w±»þ<ý'ïÿΤ/˲ËáoKõùp\áŠ·Ì¹Ú ÅØÒ`…Kn*R»ç;òµ W«šUÊ,5¬a¨ù¸O‰¾]0å+ì¶X=WÓ[ïæÎ¡©¶2?è*iêù£3ÿŠ)ÃjSÿǃp%ÂbŽ/SêÎ@ídä}î¾°õ[­Ôeñ£Ù„­‡àjšÆÀÒbÁÖ4 ¹úêN•wáÎC<1»XçæÊÒLÖš{ËŽåWÚ·üUÊHÝ9Ô/±6YgæÊÑAb­Ó±2¡Ææéëò^.rÕ ªÉÆÆ”ð4Ì,Y?­7®PJÖ¼‘hQ®ÎÔY¹ò4œs—ÉV7®ÂhÝB|tÖ•õ•xkœÑá:…>W7mäì´<µp7ø¾†6žk6qèʰçJÑ® ìx3õv¾#MSdq$fØhƒêV0Ò+Ðà–qw”•¾á½q…^Ekù³Gß5Ü…3ò~fm²Ìؘm ùÈM«ä¡êbÒç[ðØ5Wè°×ÃzaoÔu£*‘?ŸZµË–Ec•áš½hx#DéŒE¶/f÷ëเ¸Öç7Oa…ìŸl£?åЄÍ$XE>‘Ò)LDÞGwΕõ’.y¢Ê~[Oo÷FGf½ÞA‚9qOD­Ù.¶¬ÈÜ Ä\Mƒ£÷ÜóùÃÚíˆ,u‹WÊ:dä·X;j7šAÚº—(å;­œS-|'ÏÆ–AVë͚㚈Üð¹’¶¦—Ic£¶üG+Hϼ=>z.qƃje5ßIkg{#ýV«fÛˆÑ ¦·öc·ëV8:B´Pý5{\: wåS a9 ?ëíÒÝ*APO±Ä¾÷ƒE…Ô|ÃÖÕ2`ÆÌ9ÆX‘º!ë7âÜZÜö•kÊl"ützÉH ¶é:ƒ]뫳0}ã^䨽ð©çÔÏ5`j\Yk ´íL­úsÁ•Á†uŽÀU× ‡®D²éÿ³üÕ¹ž­–ƒ?¤PúŒlûZ{çʸ9 ™þªøüþÓ:*4NÁ à)"í\AãÊþƒÖ¹S–#†\E¸²Î©’á‘¥NïÌUÉŠ‰"%éJD™ç;札ÈòRÅ©ö•Ù¿Ýnù>\ä)Û/ l€ÞÔT—q¢é Ô•à|†oc!°̬”ÐvãóÄÉ I¤´ ~Î綬X¯ŒÅY¡Ö²1aŽSæ~ççÎ~…±Q\yNtɈ¦¤Þo`þì|üüePžXZ~­Éþí+cEiô°¯âýíïûæx4€Òùá¢ãr}$–º2N™¾Ì5p/Hé/ÁÞÎqœR fWw-1áøg) YO™©Vvžš>´xQwª»»óAdþ&šÂPw«£\©ºd&+½E³ H˹€ùÚ&s‡çÎ1½ÑçÆKnÚø‰Ä–Pˆ^:[Sê¬\»jÊû±ºVà ñWYæÐa(äfÎVe ®BÖq= °4çæ³1¬=ÇÉ`Ô~ð‰ômÊt0MëP Õ¨¦4_ŽÑ1ìö„zíÅÕ$hR‘³‘ƒ¸»]£…1ìܘòLM*ÃôÕÛ8¸n ƒW¹šBgù\Ù^ûI°sEåíþ0p»>Œ+5¼Î ùÆ¡­VH뤹2Tú‹ÝÚVBájçXÍ'á9+Ê®×Á@oÉf®|È­I³¹³®l_Á[aµ ì[Y/™ܶjWö9¡¢†ÑXÞW±¬­½~0橨fŒO㬃âÄhçŽP;§ é@ŠÝê+xkŽ= Õ'VžÂjªâƒåì%^v=Ác5GÓ§§pÏv»mÔªE;*°Ò¬6ÇÓÞç\RYneÂ=ì„Ï}QeEØ~‘¼–eûõ_Y´J«§R1šwÉÆ·½–Š{5÷üÀ)De²À§ÕYAŠýs…pàL1X¡(O7ö¹[&‚8W±9VÞÒ_PâuŠbí>ÊÀ®Ð0X3§`seWAÔIÚWáf ˜à¸ d·—sµx+£¦i¿îW¸m‡êÌÀò‰açX%‹ÝïŸ+¥ŠfÈZ,KlÏ”\ ÄTX‹ñ{]zÕ[–÷d¶#îj8 WÑõE%ůãªKH*Ü­‚( 8'ÂïʾŠò8²¾rÎb£æN6X!» É÷QX¾ïÝΘÅÎì«Dª<Îa·'ÌÄ*Õ¿ Æ*vÐܪ±`烻­“Ø¿o®p ®œr õ`¢¢㪟‚˕Q“w‘+‘RW§Øæ “‰U| oíÊêF­<+´+ÊmÊÿzï‰I´ ˽Í]Ç‹æUzÎâ*z+Qã­•«Û2nmFa×·qŠDdæ/U/ÛÙ°ïø«Ì"ϩ醜£_B•ª»îr+–¾¸QÑèJV¨V|Aâ~ã :»'~ù©’«ÆãàùÐæv…ÛMØ¥ÔÀw¥”lÔÄ4è¦Àë°?®žñåöÅ >Õ\¶p.çVÎ5X%C‹ÛzÑŠ¾)sú« rS¬¯æ1Ö(Zã Ñ+rõçëLÓó‡e—­*MëN›Â*Ù–¹U_ G‚Û r…Z“¸,“É•~\õ¸úýùËôåK`%lóM¿L96{Îv²+©Fon,•+;¨Ò"®ÉŒ ;¥2¹ [ÂûÑWî˜À‡“X™xLQC­„%¢y\wã꫹ÓJjîPÈ[:ô9Šmš×²¯Þ}»}ñë¯|ûªµ‘¢VW‰*¦h¿±Y2V-çP(ìpÙ§¡Ä‚ˆøñ ¹*Ò¡cöƒ¿?ßt{@[¸¬ªîžrÔ•‰­éÐ9Tt/!`@ÀšÑ¥cFÄá§ðÔÁK*ž†Òa8M_KÍÙð”ËUÀs‘,[²>Ãå¦åÄTv’Uf$àtsCЏÚ|‚3'lÐß.6®Bþ§eaý]‰I¾Å6øst)uºÈÚá€Þ²ÐÙ °“mؼŒÙ~ºú®ü¢]ÀÒ±ÊI]4Z‹ŠKôäw·"tâ±(בóN#K„°ñM5˜½põüÑö8¬ &&K˜ýÛðÂ% "ƒEm¡Gíåå¿ÄyÎDp™Q¥"“»ˆØ‡ UÙWw¢^Jý¢g0´ &ʵ)ýŸB§Hü]aÁQÈõ-e\°bÚ•Ý–éÅÕ¯\] %~Ñ»®â¾2»–É.!“«>n\- 9&P¨¦Z_eíaÕ¦ÁÖS7ÎÖ(®þüëÛúJŽVÖùMè»Vk¿f‡­“@¸”É].c2ÖK¯7£´·‡lDµO®ÞFìãlÁ¯· E Wáê9µ,¡Û*îê• {{6oä´(ò‚e‘óZ5÷K¶¼i¬z:h‚_Ñz÷m‰kX«BB3³Ÿtˆorwô7®œX>X½…=×Avˆcæ«!2‚ãÆ&÷§ñ‹:\ezDÕ±…1¦¯— ¶?íT]üÀîèê:Ôj.œé o,÷v2® Õ• †¯õuß±kÞ–5&«ç"íhâ &—+rePŠ•ë¸ŒÈð±>Ï+!\óYî<ÔsºQ!³F£‰5µ/Sýj=W¦z!”{€Â¬ÖâJ¶,¤ ÏeS–_V*Ä|F(óÈøÇŽm¹£pa<ÇQŒvT)—Ì™)ÖYÐÒ¶Ü"]°[Ô»‘æ±{E®¶ÌlUÕ§?Þ9¹*V,¹ƒY¬½Çu&Îéd¾ìï"êÊ¡´2ÙÑÙMLÑ W:W¨0„Jæ¥äû\y»xÇ3SÌUíˆÊäÓª>I#gâê>C5XÝOù& 7A·B`ì„eÖXK^Ï:reÏÐ묮²š –rŒ“ÁL´\ŸÞñ¼I_-'‘ØóoÉÕ«âZ¯¦¬KÎ_C¿à¨³…ŒÄ{*ªG¶†ŽYn'âjª8P½âfbk-Ô—£bı¯Âb•a¼¿jß@ßœSrõóUž=Rtl† V›¥•IÊÂj·tFš+x«a½šºÎÎI¸úy1×2 cî%÷Èé„ÐW²`ŒwªÙƹ«aµoä*ˆÕ+X¶‘b²"u«ï¥•+Ì_ó‰ eçÄ?ߣ¤DS‰öósõsk±IäÖ¡ý^â`%¸2ÆÊP•ý ã'9ÞžQrUÊ•½gÔ=F;W—äC"å'p‚0üºDz #ÿ­)ß üqŒr¥¦-Y_¸9ˆ-3¯ÏµÒÍΉvpÓx´Øv?f°ÂûŒâà´\ÙY vmô9¦=82áo@Öà Oü˜O_A7²QžH®òÀrÞhhÚËùaw°DmýÜßBa9~$uã°×~››lO¹ò'×ÓVšƒA]—Ú£¹°&݈‚N̲=o°UAW®³¹[á3ë«G’ñ°R:û!Ò X¢¬cW·s;-ÁñéZŽ­M%έ¯®+‘rzëMÚ¬Ãtk.Åif –ßšW_Çàpm’MñB·ÔŒÙñ¹ºNª’6¨TÄ€Ñ{½w+æbÈâJ÷L8ÍC8ÀvUDßšpùËöwíð\ݦTKsöÃ(8 l‘Tw”s¥Ãoq@"ЯФBuE}u›Ð@+g¯ƒ>ÖBÇÆ2-\ÖrâýS^Íðä$è>A»ãªlЧé r…tÅ0 Ç†Û+u®~O,„aõ7»/X"«?Ò®¶ÕW“ó(PœH™Y„~«XÚ.SØ\ÌhÌ)€hôq°ñiîZwÞXVÚÎ Õ]vÖ|hú 9ûÌ3ë+½Œg-WrË…þ\ÍL\ó(–ó”ÅÓ¨$:s";¹!ZÏÛÞú…J%Ó…«ÎXIgv,§°V …um‹°Ýù^w/™‚üÁ„ºµû)) ‹\uåÊŠË¢“¾š&QúC„¸rÌŸä‚æ* ¯Œî~®Ŭ;p~ƒ«ýW°òõ{Â0WÐÔeZ±k÷A†ø)öÈU_®eᓬX±™`Eü]â‘´rgÈØÛÍ+ß{߯ÎÂU°ö~_®¬q®Ï3wÏNî{Âp0¢\¥¬ë WÖîÊ¡f!„19ÉKGà*ØÓ¡+߀YÞë–Â=ë k¸JöðѪCÚ\ ¿ŠÿÉG^ƒBÚ¹r¢U°òlŽì[¬µë1a˜«`»g˜×hR_- CûOḠ·6jåÊé¡ãD+¡…+HDïN,•Zà™òÚA Z—O”&UÛo RXäJ¼ï@¯N"ìo‰ª¿4shóà–ɯÈk€PÎ\å>vw}õû3>üß×OkqéÄÖÌÕ\´Ö+‰Ñ–åÃÍ;êöDVµI)¬,®¶Ûƒ'ߨ8|Æ<¯—wßž?üøõק͹ê€U¬¼pÓB»…Ø•«€Bs¶ž*³*´Àêé‘Ý1a›ý&¾ŽêïMG®þ¼jªW®®ÿ[ƒ«±êÊiÿÞ-î n?Ý{½5WŸ)©±öS!™Íq=]!ÅpéW«ßŸï\½ÿû\‘Lˆœw5÷ÏZ¦¹Æ•êj€ûTù§„êBoNoK\°•>^¹ú¾Ž¾Šõ¹íÂ•Õø«_û!8ÚÓù³Ð1úx¸`Ô,.PXrÔ¹Zº(b ®Ì ¾¼rõŒ/k¨ÉËx®¬ûQ¥-–»Æ•V)´ž+ß‚Hk‚åB\©Å+ò'±n?¼û¶Æò»VúÎ ­[Bç8Gœ™H…c`e[ÈAK*ÔhÙ ÷÷CíÛÃjWÆk‡U»/„Uz—‹©šÏò,~µUæR1 i­?$WQ¬FqåF¨^ íJ.7'V(#~òD¦º2HvVÒÛì‹ ]õÕu ¼Ë ûÁ¹’.óÚ=¡µ-°Uaý /‰°W& ¯u1™$è9ÁRnÑç6 ÙXaC}ÏÑT±ÕðzNhw¢€˜ýI»XMy›2_`¬À+¸ÆU«7¥³ŸáMVð3ÄÕÕX® :È4„byOäôϲ+sÜ¿u •ANê¬Iæ¬ÚŽýw¹6Ž«Ê/ú&Ãý¢j©QXœ–GÒä1#¢Í¡9½®±ÈH‡^åP+ÜAdú µ<©¾º\ÖTWоE£Ð­”Ám% ºÇnÿkî²-ä$WN+B÷„#¦±Æ/ºŠ}• j»Ç"ï”+[]aÅUÐê§Ó}Ó„ÛJ¨W‡˜&}ÎN͸hª8œÅ.p¶J©nÏÕìíÿ|MüNWÃÕ•ÛÓO Œê¦° Ç:­rú´ŠqöNö„Uýy7úê%†Õìp³ñ³/‹l¬:dºæ­d (T ¥Îî)!¸BãäŠçgÑÝufSCÞëà÷m5ÓŠ*suÎU¸ª–›’ëúÍÅ=®îéôyqW9~S?4"i %zsñ‹þþü% ÖdGÐÄfó&Cê3\²VÁÞ‡ÎÇ€¨}/§‹(zY†D 8ÿ„㸚“ –h†úÞ ó_MújŒ}Ä CÍ«ÌN4½ìR˜W~6}ÓE}g»bM‹½w¶,c¹j·ÏíÖ5Ûkb'[WBø¯u +Íüð¿ŸÇ冱¸ šêÜÆÀp¬®YDËyvNjád…MÞ-Ä3ƒàÝJ]UF“¾‚¿Vé«òÕF7ÏÝlCÙ¥8e~O\åb5L_­ÈÕõç«ôU‘‰…Xsã·¢'Óö_m£®L~ŠB?°–¦LÁ>½yOYV ͉SòËnÛûã†ÜÕqµ•ºÚŽ+Lü¿§z°Ð –M Ôœhû˜ˆ³zmÛ齪+t«W™õ‚]·»íaêþú˜@t(àdˆ,ñ &¬v®Ì@¿h©º:W×ÊîºSvWfŽ[˜{o.e{¥î1u´ƒ@›]ÕuGÆ»n!ìÑWû²øÝÝ$ä!\‰| ˜¼£Åce—4wQTBùØL1{Ãê~ ñ¹¹öÖ «K¿vÁ•»5–ÔIF÷ïb®'Bßà « Wß?üxþh~ýc\}¬¾ÆkRåj™kC?s5nA‰yô®:®4 ¦ªNÑË[ýöø ü"Ü·½¹ 7ýèU˜+{!ÈU¬ ‰h¨l íñéÆÕ¯þ}ýß\!l^õç*ÐóyW Xnfƒ²¢Y=)6|Â'‘l¤n¸ªú˜¼í ÇsµJ=5÷bùÕc`ºq…«Q´ë)ê¹R*Söáêêýþiµþ8Þ‡s•UÓ³+W¸ûd%¡ÝãÁòýSjµf×?¤¨bt^ ÷×=aÓv°N_­ÁUvt»à½‹œD0ÔÓÙ"Õ€òŠ Ø7?bxÖÔW±r Ç çÊ1|/³kJRΊz XÂ0oíB® è5aé¸eÖN’Õ”Dˆ5&É\(àªsœÌ|쀫¼ØÑŽXÓ9!œØÕWX‡+×q•uû™ù{à*1Š«q•häБ«i‚àru÷`­ÁʸB|ÜWs¶Ò:˜ºË\M>%—«ÑÆŠ•m«HÜnàø¦\eª¶E*ãªãnÐÈÞ9vóÞu¸’ (â*‚²C}µÉ2¨ÚUø‚6Gû$g.+ƒ±»+Ë„²öÄÐ?ÈÕþ¸š#f<®oí­A&W·ŒíK¯ Ý'.3ö #ÁÊ+Œî\Mó»nVáÊ5nó¸·_îÇ²ÕÆÞT^ì-šÞ •«{ h«¾Þ½µÆbåÿwêÐáîiÎ}p >Ø@xÒ®ƒ‹¢¼U[³N¡ïž†±F»÷­¤›*’zW°{æ Ûså«ÿÞeYÕÙœgÑêc–˜†U±rVâÐu왫,…5ü JRÝ}eåñM^«yO8«°5bûB¯xfؽs•f +D$]6™;Sôr±{c°EY~l®Öó2„íØÑö•ÕØKå f#®¢Uíر}g;âÿêñH«på93`Ù-«qUÙ’ür‘Uáö­¯œŠ9êï®Í†U'Gh kÊ ¶å úï;ÅQ÷½†ƒæo®Â•}»6WN‘™Wèþ •ì¯rª*î,®/‹+¬ÄÕ¸eP9܆=mr!ÄéÊËeƒæa¸¤oegújk«=+ÏOW‹uÍZêófUBß›¾ÚWÅ¥k] îzh¹²­|É~-(ê¡nI8>Wx8®°œ* >þÉ_¼o“`!oB7Û1+$ºÆõ§$Þ}ïb™0#ê`Uÿnn%ô#å㸌AwQJs5 ãÀwµÀîÕ;‚«jï÷•q~x®VZ(ÿ¤Ý+0ˆ+«œµð»ïˆ«‹]Kâ<\ wÀÁŸrŒ Êç Ææê2Œ«ú*õÙ5ÄÕ:IåðUªžJ®à`½Ä»oÍ•C®pµNÜò‘hÖYêËrý«Èç*2:ä*ΕÙ'W]¬, +¸ÊJÜä*j_íŠ+g(:“5õ$(ãjPCŽñ\mŒÕnV_u±þV¾[\­Ìջ̋^d9§À]K®*¹ÚÓ:¨ F²b®dp…rµ&VGäjZÂЕG&b¾ß¹:²Ù~?|ÎC#Ÿ)í£Ù~»PÑιZ+ãå]ûâ*8— ¶âŸÉæêxëàÓÚ\!g¯³G°fÝséÀTþ,…{íœ+³!Wƈ+‹­Kë/ÅIî ÉUŒ«]b•’‹”ÌŸYN±Wñ \­ŽUÉ»£/¥'W>B®”ÜÊ+J®Ê¸Â¾Nœ+Ǥ¨ì1ÀAÏqÖæJFzït\3G0§äje¬–º:&W&ݯ>H¹ pE}$¹:d\ßÚXÙ=Ûö«±Ö¬†¹ ê«}/„OëG¡ºÚWØ\]À¾ZQaÕ«än¹zZ«ƒØí[¼r!£þ(ë ¶;™NG®2æïˆýR7:ÁöÍÕö`mÄÕŸ¯·Izÿ÷Á¸Ê<{t®ãÛê/ÏørûâŸÅÕA°Ú¬ô0Ã?_gšž?ü¨ºìã¶c®< yk®<’pÕߟ¿L_¾VÂr…y°¶ç ©0ûíÂT>Å.õÕ&êjq on¶cvBÑ Ž±¯Þ}»}ñë¯*ûêi“Q;Œûj»!ʇhÌþþ|Û´Uâ²Ûau®¶ ~cýÛfÄã]FiÇ÷¹C®6z—ãÁC`õ6N;Žº³|³ª^jý¢Ûqu$uõ¨\=´=Ù—ÝÊn8WW°ÉnãêNÔ‹m¹c–ýr‡«Ç²¯Þ¸úõ««¡Ü/ºÙ`M¸…ª-_Áí¸úó¯oоJ_vÃí³ÏÕþÃ6Ú:oÅÕÛ}œ-ø‚Ëné•ñ¸ö¾&>ív)4n¯h½û¶Ä5ä^v[gŸkúá¦Ö^ÁÚ—ÿjÓQºad±t„óœ}‚³+®¶}ù&uu Ã}¿ kà þúëË¡¸2ÈíTCëP\í ¨èxúÊ«øeŸ¶óî\ei¬ ½†kW\m?˜Ñʨ¼®V9’«}¼fÈ7²vó O;´±ðP—Í^ &s¥\ž\õXá¬'ruÖÇÙr%T¯M®Î¡á6´±Ô “«“<ÏV`.K®Nó<›€õD®N/€¼$¹:Ñ󬾆¯G®Îô<ë‚»¹:×ã¬VbrE#kÄ…ÈÕÙî{µ0urUvß8D©™Ñd¥/A®NÁÒº*+ãï“«S*Ö‘deýmrWU6ßÇ•ù‡ÉÕ™ÀádeÿQr¡ ÇÈM]‹¬§‚?H®"÷¬®d=ý1rÁêØP žÖ…Š\%–Á€Õ¬š¿@®ÂXá4§M¹d –ä*¼ žèOO9€ RUºŽ\…m«c;=ü:^OO)Ræk¤•\Õ.‚{"ëVñ H-ÿÀf¦f*« í‡QF®J';òµ‹¶ÓÈy'DÖ¶õz`ê0ïäKëÌ‘«¶Ú×ÎÔû2{»µ`ª¿4Jš€Vë’\í+÷fb+tß»þ±¼r;äJ_Ivc«#“þþ·Üò~‘«¼Õdý¡É¹ ¤Jn‹A®:(ù©Ö&hM—-\l0ü-¹jÁmª×·ÂZZ© èí}³Å¯¹²µþ2Eës5¡œ«–;ÅšÔ“«*#yžÒ~³×·Tc„ßR¯«WA¿h•!æ´ÇŒMS¿,%pψê÷(s¯»©!WöÆý–˜†l1·ì>«:}Õx“v̼qW»ø#=W©³ä9ЦKKŒ6¨±mb¹²°BðvæÚí= ÷5f|ÛCpœµÇÔ°ËñÆÌm&ÜórÆÉÕZ[`?tD4û“…Vm)‚92 ¢¯¢”þ£i§®~²«Ó«ª´iw®`d*é¼®¥f;fÈ£)œ]_í¸ÉK?W6๰µXÉbõSÓ/nö¨šGÇêÈ\MØ—?¿[ì—¬Ò9Ò­úÈT’«’|ÑêàÏê¥ìüû)¹”åÅú6èP‚u<®FEr kªÁ¹ð@n+œ‰«i}høãBÔùÖÁào{ úHH-uŽ8™%à{H¿x¹­³9:Û†0c¨ŽÁÕЕf9,µ ³»Áâú0Z1(I!ÏüüÃ9ða©::Wâ$f˜]åyåãXù90db¡¢ôÈ Ž8*îRä/Ø9 ͹»²3+ØVgàJµiÆ’ýå”_>îŽðÜy^dãsæè(U9=ŽÂ*zÒÃq5v_¨¢ºÜ=ÜXd^„«Á>ÑÂ-4Ïz.»}5¥rÓ²Å&Wä*Kq@£uû ›dŒ?æYMûLˆ«[ª†¹¢ ²bpiäts•PÀ¹Ü©æÚ1Wrç…¸ú%_{ƒkç\y)9ÈkùH)'äŠ$‘«Cß…\Qȹ"WäŠB®(äŠ\‘+rE!WrE®ÈÕv7B9°ì—+ÊÉ5¹¢+ ¹"WäŠ\QÈ…\‘+rE®(äŠB®8òäŠ\QÈ…\Qȹ¢+ÊcrEy´ˆ¬ó¾úiQñ+rE®È¹"äŠ\‘+rE®ÈÉ WäŠ\‘+rE®( …B¡P( …B¡P( …B¡P( …Bi’_ÿüûõßߟß2ˆ>¾~õrÿÿ’O/*ûtýu'©ûTÛ…Ûž¹m¼#¿?¿{Ηwߦ‰úòú½…Ÿž>Töéúë.XÕ|ªíÂmÏÜ6Þ‡‘×·åúœÏ×ùóõ£|ê¼OÏ*û´©¾î$uŸj»pÛ3·÷qÁ¿>ÝžðûÇùó¿ÙŸž?Tôé«T]WÞ@ŧš.ÜöÌmã}(y¾½}ÿöºÌz{Â/Weý©äÓó‡J?]ÝiVj>Õzá¶gnïƒqu]áßtòÛro üë§ç•~ºþº‹qbªÌ“– ·=sÛxŒ«Ù–]™«êë¶rÕrá\5>÷ŽiÂMÛω/yzÙùtÍš°ü‰‚ëö[[.Üal|î£é«·çü4ÏWÁß?TúéúëÚVï—®ŠÿDÛ3·÷Á¸º=Øë—¥ûÞç6?Cõu[ý -n{æ¶ñ>Ü~ðjG~*öÓ=·ùE«¯k½Š-n{æ¶ñ>Ü:øýÕÜùr÷Üœ+Ü?]}ŽS{]ág¬<©¿pÛ3·7…B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P(Š+ß?üÈúçO5Ÿ¤«¨(…ÉÈ…\Q¶âêùV7òÏ×Oßëwßþÿ¿^¿úþáþÞÿ÷µDÙõo?ù·/ž—b“ŠÂÕ÷wß®µÿ| ‘}ÿ÷+7W®~¼é«?3WóOžï¢Pt®nt<¿•]¼*¤?®¥¯ÿåru+²xýâú¡¥ '…bsu«ÀùJÌLÏóõ;ß®n?yþðcþÇ‘’ÍÕ­ÏŒÆÕô“k-ï©Þ"…âêúŠBɱ¯¤åÙWoßpì+ÒEIí?j»¾;W×o¼\¿ñú»ó§,bMiåêf!}þ+ÏKu=ÇÁ[}àãóý'ïÿsò_+J9w¤†ÒU®°^¸×£t–·5Ž&9…B¡P( …B¡P( …B¡P( …B¡P( …B¡P( …B¡P(ÊÊÿœÓãendstream endobj 100 0 obj << /Filter /FlateDecode /Length 996 >> stream xÚµVmoÜ6 þ~¿Âß&c±cI¶lë€f[í°¡ CÚŠ­ÜõÙ7Ù×ôþýHQ¾·f½\°!@,RäÇ”Èøã—2ÎUÈRÄ‚gAµšý=‹•TYê,–n+• Ó”ׯW*ø¥ŸýÜÃFnt|3Ÿ]¿Êò€§±L•æ÷'âžMVÆ"—Á¼nYFœ' ›‡¥`¶ÑÝbÓê±é»ðãüÍõ«”e\*¡Þ¡„Èeš‘àqÁ B»1mŠ‚=„QªrÖ ô€A¥˜ù¢WëÖÄaT¤û3,$3´³Ô¡ÈÙg„1Þ}ißø6*‡äÑ?$YòÛ_Wdðöåiß½=ÿ: ¨ž'Îy\fŠˆë®·"ÛÅ‚eÝXSMq@Æ8¢à€Ÿ ÉTâ¼Ì\$r÷éÃ?mkï¨ýž¶ 3BÆ%ÔûÆTz3øHS²hlýÂUÊyCâÙgÄ~X/5އ AÈ K²Kê¢ô¤À\t‡Š±Y»’RakÝNÉHfͰiÇϨtg”ɸµ[²–»wzpÏ#Ý¡ÉöÀõlF›¡éàù4DóöŠÿ >"9à“'jgDª~µÞŒ† ´¨BÎL‡©¶oj2½·ýêÄ ³¾Ý.\ÍAS›‰L;S“øÐ„h¾w;˺F¢d¾¼> ¬f.%ôÖ‚,tUm¬«©LXmõTSÜ¥;ã¦ÒíªãŒ7>“x¾9óA+ÝÑ‚î,Vúísö{Hé"…ø|.ó%ö±„æºßtµ0JM7;“àÒ3veêFãQ ö$wRê¶Ç³Å¥;g¨Ç¥ß¾s>fôD”M79À¼bÎ)ûvl*3|# ßâkënêç¦Æc•2uW³6÷zÓâñ’Î¥ çãn2.ŽS ñ‘·$ò„¾ŸVt=u49Õ 1š%ωØOØ· ,úþÑ·BzQ)c¡®H“Âà*öSM}#Y¹¨ø1èÂ=þÜØª5XÈ£-4Ún‚¢ Œ¸31²“â©1Þ½÷1¦™ùôò©1Üšd—…X·ýˆþ¶­=¸];ôD€Ü²ï¾eí¶>Ì—¶Y½ Óæ"óJqHßK[4A*ÎL$^­œÍEi¶Mg«áQª¾}4C÷8o(¾é.Èó¹Ås ÞµóßñSÿÆO>—Ÿ… ô?•¯éÆ“N©^w0–xÊœtнkºú¨õw z<]ú}©Aî^"þô@ÊV¾Û½´ »›»–}ûòÀÎA‚ë®Þ ©.¾üXœ³ÏZUÆðKoë4.Š’üKt›ý:Ÿý—ÚäÀendstream endobj 101 0 obj << /Filter /FlateDecode /Length 655 >> stream xÚ”¹nÛ@†{?»P¹Ù™½8E€¤H•BÃB‘”D0-²€DoŸ½h^’Eª °×üß\œÏË»_…N 1e²üÕß%`$ )A&’å&)ÒªÞ/rܤÕêèV‚Æ3©¸?+—ßB¹D¢D’#¢NY¹ÈZóÜp©Qb‘ )¢ìMªM8Ñ‚C1Þçî¿“è‚â€"1 °AwÆSî6@@hwî^)E¨fT· pyÄ:Ñ0"š(Â1>%£ÿZ›+Š Ä>ð—"¡[ŽîÎ!Ñ"mA<òS°ßì^ŽO?,øðs·ß8’ÛìöÇ"ƒ{,³ðÊïÙ=/í%¸oÒ @[sÐGZÉ2ºÈ0,…]²ö”·KQžk…FwÜ ŒI)¡6ae0)Å룶<*ă”Rækɀ•3\6µ1œÚö{"ÚYóÎðsÃp,8t J<×Öæ%Òv\N²¬N}ºŸËQ*ëx¾ f‰¯·û㡯îê8MÇ¿¢)Gc_óiõ¸ýt¼æ-9ø]ï¹]:…ÆÈ×uõu°£S¤ïΨéi[Uõß3ýlªì²èü> stream xÚí {ãºq…Ï.íÛ½©]ßÔm·MS·NZ¥­óÁ¨^›ÿÿ—UEŠß‰0Îyž$Êî WƒÁTEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQŸ@¹T¾ ¸âO«÷+.°pZ‡35kÿœ\)Àª ÕÆJ@i“«¨±Zÿ÷äŠ\íªÃÊ@H®ˆÕÎJ œt«¤¹*ÔaìÈ“+be_‡‹É‚ûþ|®íã×Wr¥œ+™ˆ*\ðT8â\)ÇÊÈ ßü&.:øó¹¥ép÷F®øN®Ráªwi6¶2P‘+bµÎ`ž_ÒE¶*r• W;:JF®RÇj±­å"W© ƒ[ÛÚíµµä*u¬¦ï…s}2¹Ê”«4;˜\yÃÊéñrE®¼ö¹J«y¿\Qò\¹ír•:V ©ù@®(i®*rEY`5ÕÖ W¹"W ±â8H‘+r VÓë8äŠrÀUý‡äŠXI¶5è·S¸ªà¼ÈUêX5¾&nÛ"WäÊ¢­ÛdðÃÐ]?«Ô±º¦»šÎÈW$ËW‘©srå «©Ðuÿ㊴xäÊÿ,r•VþÁ¢ßžW®ï-Ñã_Ñdyäj¶µ“‰•_¬2áŠ.–çapš¬$ã¢ËV£ÉÒ\ ”~;¹²jv·X‘«¬¸¶{‚\Ñs€Õ »ÜE¦‚pÕ ¹¯XÉ·<œ‚E®2ãª{v0Á|}+˜½êÌ‘à>úí°ª[U²ûE{1:òãËko/ H5_¹ ‚Õdû§å··C¡‡ÓläÊwÇ»)þ󹦿ë«9WÄÊ+WŽÛÛIé<ÕŽxX˜• ¹–«Ðþ±rÜà. ÿ|ni:ܽÍÏK¦/’«0ŽŽ¸>ŸšÇ™‘°=Òv½ÝyœŽXÅÏ•‰½º™­f(d@‹\­ùW_¾×Þ¿=¬?Öü¢bYýäts•ítpßÚ`°¦Â(ªn}p0VùE£ «\–.®ªà#t¤X¹'kœ9 ÷_UËj‹ŒhÓ™ ù,üú¸ª*r%Þ¬;xÚø8ÍqQ’U¸kWAž&G>å\¡"W^¹’q´uÇÛ³ û†5tPe'nÊãí­v- ›8@ \eLVá®qÆ•P©çªÊ{²ƒÖu§DWíÃæwé'òM®òàêÜŠWSP‘« ¸ò½>‡Š\¥ŽÕÔ¹"W‚VÊY¨ÈU’\ÍŽ{~ÈŠ„«|£WÅN¦'†¡zRáú ¹aÊY¨ÈUB\™ÏøÈ¹’fÊ]{®^qK®¢Âj{d ²™®²‘«h¸Úí„N^ŸJ®¼qeA‡‹^"WÑce»*ƒ l+Í\I,ôímP»¹ÒÊ•Ôâ1‚|\iÄJrC|bÕ½J™\éâJz“ |buͽO{¥B·ß·ƒSð‡UÕÞç@®4`Õälw²Ïcðéf¨Ô£Ï«zç°çß°øÀ µ~{žwâ༷µd|a”`ž\…§êÇ—WZÃ%…Ý߆‚~$W¨NX9@Á5Vrvüûñ£æ U®°y£‚aùä*¬¥ºr¨±á¬xrª`\Áaéä*8TáÌU>\!?¨Âq%ÒÚqœÇA~PÅÍUç&!Tá°"W C’+‡`í(ùãwÿûü޳çªK g¯4quüòýp÷öþí\Ù›ªk°=ÈlªæƒŸ'KuâêòŽƒ úã/¿þ‹s%³WW®¾¾’«-ã_®àÒT-ð¹Ã^Ý_¸z¡½Ú0þýùÇ¿þò÷õŸ\Á)T¢1×#žN\ðÄù ±Su²UÿvâêÏ¿½°+ánÑÐØi>|ùžRØÃµ§þ»_ZýW@®äg±äý@ŠTô§ßÿöÄÔ¯óû?û´Wphªtvdª\•³A…?ž¹ú‹×(\CÕ>Äö¾‰Ëx•‹ù`ä`-„ªNXýçï¦Àr¹SÎÆ¿ÁC$î1©#¢;+A®Ê¥øç_ùå_üß?O»íçwþi«Œ£ÎLUS0¦¸Ýg8ËIœ!^®Ö¢êú—“©úãoþf´ñ?ýSLº2äÍé0{;+hŸ×9.zÖã TˆzÝËùyÑwÞe׬ìÕ¤IÔf¯bkLÕ¥¹¯®ßØ_õ)‹¹Ã{â¢.ý«ˆ¸º&"èPÕiûÞ±ÄùZ>Á³7.je­’àêUÇ4m.¥ð]í] ajªÓÇè¿×26¬®#ÝÞRŠð/bB–'äJ®3ÎNÿmYN¡ç…Øj Íÿ[¼wÌsŽ‹¶ƒG ‘êú^nŽ«š%ÓSÑ{æh…U„\õýœQ©a5ïà7—Üo8j¿»e^îƒ+6-®õÁA3·WGZ×¶¨ôªÃWRØðÊ»›f).ÚnΪcs514Hf?ÓÌU¿ ¶¦qÁÕçí°ÎÜ.xý\M;Â9õbàª6W¶$U÷ý~áïžÖÜ0Ý\ÍMޤ5ÆUÛ)[«»çƒ Ñýö ˆši:é?#áªß-ft9éÉv‘gö”¡>®VšËINÙX¸šè—5¶ÜôäªQÓ5®þe*Ž˜«µfÛ>þÝ÷Õù Åð‹H­uGTŃÕB¯Ì5Ÿ_® êþV3/ÔU1pµ².¸ÐŽÛú±‰wžµžŸa!&|?ƒéÌÆUú¹Â†$ÿÃöÜm¯ ´‹+`™Ï–]R¥«Î óvýÉa/œÚqœ”I‚)ÇTiçjïåÍÒ‹:½»à´Ï^¹ãjÛvIÇT©æªOÜ6ôÅÝýÑ>™—³û¥‰«­¯êœ*Å\½ÛnàóC“¥…«íÛº=P¥«vSLsG—Ø2zÁßîãJ´N{Ž ø J-W·me×m¡žîñ5_}<æjßñ?TEÁ•Å3mñv)®öiòE•f®:ǘᤃGÚ ÅÕþcrþ¨Rìµwî2¬´ƒí%‚íVÇJ1WÈ‚«+U¢-ž*µQ†ÛÑÔ¹ª¤oJP`¬´Ï!q«Ž¶{âFP!9ª´Op%ê®S%]ÃRIçÅsÒ99®:ãŸTKbå,•\ ²‡§e¬"ÊO”WCO]¤Š¥¬bà*9ÿjâÆÏĨ"WÞ¹š *Ô°ÔÕkäL‰«™H•u Kbåß`iájáªÚ´ŒU ÓÁT¸Zª[U±T‡U ‹Î·ŸA+5H‰*ý\aÓÅ]J¹2ZÿÛ[IT©¶ý3„1råìµÆ*®®‹„ˆ–« [vT³TÚs1DìÂp\mÚ³¹š¥V¬âˆ^¡ŠÔ^mÝV…D¨"WNõ“ÓŠ*¦*‚#•DKóùÁ_Ñl¬b˜fÆ•éwTSÃeK";Ü#âÊèK¥r¬tƒm#qµþ-õT)¶_ÃV©îÝû-õTEÙàžWeXEpé È±‰„ü«¨R}Ò°¸'U®Ê8°Ò|ÍD»èœWˆÜX)OÌ DTþÕìô7¬t›+Íå¹ì­2¬È•ê×è£UºóŠ’«ÞˆH¬$æ‚ysUïmZáü¿eLX‘+µöª¿AQQ¥;¡Zæã`ï›%@®< r5š‚\‰Í€ÈUÇa±RØûñrU:ôÈU®\õÆ@+%îzä\5Ñ *° eX‘«VÐñ4W)q5 ¹"Wv-§J!WªFÁø¸ê+€\)´UrUÎ5È•"ª"ãja‘c3¯-®UäCU\\•«%¢wÑ8¹ EUL\­ìˆ™0PÊ V‘UqUî)QY:¸¹Ú‚Õ\‘ŠÈR1¢â8¸ «Ù"µøïJÜ+ŽƒÆ®Õj™*È*rÂ* ®Jû2E®”=¶ÜWæ¥àÃa‘VpUî,t|‡YݱJ—«²²àjLL ‘æ‹\izì¶ãÿ?`ãôÐÕÖ®"+¬”sUÚ”Š¹Ño‘,8j!r¥ç±e%ÀÕ4Y0¯á ¹Ú>ދŢ…œܴQfX)檴-›ç‚‰\)yli_.Ä^Ô~ZXä…•Z®ÊJ˜«À÷‘+-% –äÊöëäJBŸÏµüõu×c-’Z9ãÊîû¹¹WnwÀSýሇ-¥ÞGXEø>‹ßoÿ|ni:ܽm~l)öB²\Ù Ëòäêãñ©ùxœ á «®B,w\/afn¯JÁ7æÊ¢áqðv™Œ¯ L ~uøò½þðþm£%†V#W"Xu–†k&d¥ýx¬ß{ÆZÍ>¶~#-a!ASmšf›Ì7%9ý\~l)]¶ƒUØ?xå®­k³WÂëÎK«»b©Øãã  ·òÑý‡Ód¥ÂÕhü,“Ç–.ÞÉý@h²§´¨œs5ØÅèj[F`®^€‡÷_½v#k-ݼ“ëLØÚÊÕƱµq°ªç…K vâçêå䯿\lÕÑ4ÎPºz)8åÊ,³[±ì |ÏY÷Ët#9®.Vêýç W†qÑÒÙ[¡Í똸&öª¾ê§-h¢Ã’Q™Ü‹•ßRàªúüoc{%y0 ä^Æý¸ÎÕÌämp Pƒ,»6úýí‡ÆJ}<šÄEK·/†eRÌŸÜ)ÖƒkõÇžsµ!Áró¨c½¡¡Ý×°øØÒõ›ayž´³hó^+v`Õu¿®9¬;7«óƒ¥€é0Kê¶õÉ^ÆÆaëSgü‹ ¬à\••+®ú`-ð ÖnØê^­sÕÒ·ëèu¾\•.«? A’áÛR ¬À\•n«?œÂq¾:˜c¦óàÊÃå̽+¿®þŠçæ,Æ>BõoykKŸ/Ø™R!W“YnÈ•ècK¿oØý‚5ઠˆUùKßMëç–&,pï·`äÇU’&Ÿ`½¿AØm›Éså+,Ó„@\!ôñÐĹ*¿–aòVÑuÙÃÌ»'&á8ƒƒ5“7° ïcÐEäÊÁƒä2bíà Úzbïó’õ³&ëÌ€`ÌU˜ë'ÂÀäʺMÇG|-—ad®Pâ*Ð&¬„íÖÿÌ+WaÚ™\ùxˆ¯eXŒ¸ tJ¨]îIûWPÂÕ¾mÄž~[äJ,¸rÎk'W¾æƒþ Váw¦f L=~U­‚…ܸ 6iJë±+ÊÕ ÓÁp+}®†÷zÁÏX¨ˆ+¬†íä\p5X͘¸ïÒá+†çjr‘Ð9X9pUMä;p_ôÜ«\¢îÃŒ€8YYp5½¬çô¸ y½ôĵ±½ß˜ÍErÕŸ’­gœ’yG \-Žû€›FȈ«ÊsÖ±óÓ §ä påêÇ•WÕÔ.R‡U (àÊh•AøÈn¦\yZæ/:Þr®„ÉÏ—+øáªõœCre’ S¶†™qUÍe9wS¡¢?Û×ÁÕlzwr%ÁUå—«*°ÁZ?•ËqPÞÁrtYWÓ'”œM*ræÊ½É*´`Õ­—;r㪛uÖ9WzÌU+“-W>6Ì(ãê– “\9ôÜÇ\!®–ç}¹’µWj¥+£Œ6‚©È³äÊX íÕä˜ÀÊš«ÉýmH«Áu<Ã&½råÇ\UNvŠÛ&kœ?ím›¿ÏM>×ÓᯯäÊö•]Nº0{*ó@ðT8âã b®®‡š'¶:häêó¹¥ép÷–W°åjï;c ¹7ƒ ÅrÑÁOÍÇãÌHˆt©šÃJ>ñ¤¯t¼’‘öJ¼‘ Ѷvm®Öžµ-7þÕ—ïõ‡÷oiøWPȼåØÛC–›þx¬Ák•)W²z}]!¯È^©}lÀéàÞ×FX¬°eù0XÏïÞO‡«¢J†+‹ëMÜtðáT£ËœðÆ|pK… Ñæö°ôëE¹à‘«3MïßîSâʼÆQpìIÐÛ‚Üü[¸»ahgxºøî'¯\Ù½¸¬öeZÇ>:ø=ƒ•WÆU.$ˆ¢aïÏUÌ Wµ½:ÿï=¹²zsu}ç6myáªýÞ¿A3WNRï‚O•Ý"#ºèƒñŸ÷÷8é±fÃçsB\™ýûBð±¢æJ&º3ËÕèLl]ªd(„W® °ç7/CCý"M”oPïBîå£âŠöÊmÅå¸RwN½›ªsC-rç kÇ•Y`1É^¨Ù ÖϽ!w®œlY+Ì{h©bKù]𫶦ÍV¹ÇAùÊ›~üÓ“¶•Kl®ÿÀ_vWx`€ È•¸©+,Êé9'Ëûùü'–ìñµžK†\ÉÖ¿Ø[L‘+Þ•OkyU“¦`LU¨7ØÉÿP±À܇rE®È $W,\±×ȹb䊒+ö¹"W,¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢’Ôû¯.¹´Î¹–Ï)q«cóÁ®¼öƒmy£r¬ ¬ß¶¾¼C¢0ñÚ]Rç]ô$WCÏúx¼äh;àáô÷ç×x:ýÙ½myíÛòFåXxÒË ªcÝiö…UÒµ»½ùÝ›hu¬oɬk~øúúù|þplnâÙ[^ûÁ¶¼Q9ÖVÍýB/wo…õù|¾Zæ S»ý¢z¿=\²–¾;çÄ=5LÝä³;™–×)ت¼q9¶6ÖEâmÇ\IØÒ/Y _ur+¿|}­ûx|°/¯¬Myƒr ¼þü/ØÖïÞÄ ¬{C¤ý‚sUûXõ{Ü qe_Þ ›qO…Ýí‘×½yW÷•h¡¸jÝö乺úí‚\Õ®Ð×WA êÛ&cãêV¨³v7Päûìî¸<ËqpP Ð8Ø”úÜýágq°.°6€"£tûÞ/—[&£_êNlüÄ'1ÿʶ¼A96>ÑÙ›”)¬¶*§¹›\í®&J®À0\Ð^’b9¯ís%0O>ˆÇ®c×½Ø,¾µWrµ»¢iœ¡oz>®âzñ¸èåëÿE*êØøWraÌ¥Hã¢×n;ÔËuSÛ­ ¸²_‡–#°°qž½ Õ®ã]"±é:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ^Tg€Zÿ7‡‡=ߤÈÕ¢&’Ž‘+Š\Q¡¸:Ô¹?Ÿ^®é€Îÿûï§O/w8çúKú±ËÎó—´×M"IŠšäꜵìœùíó¹I2vÎA}À…«·³½úl¹jÿæpýEMsUÓq¹Íáb®iÒ/ÿoÈU>ñòáò¥[rzŠêsU§D<ÓÒS'³{™àªþ›ÃÝ[û%¶#eÌUkwŠ«æo®™-A®¨E®ŽØa¯(ÊÄ¿êzQ#ÿêüÿŠtQkóÁû©Yß•«Ë/p¹¢äú!ÊÕ”k®jé¡¿E©.ë88ߛܮóõŸšø±¢¶sGj(QµwèR”¤h.þ¦(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢²ÒÿÛtU7endstream endobj 103 0 obj << /Filter /FlateDecode /Length 687 >> stream xÚUÛjÛ@}÷WèqÖF{•¥à¤Mi ¡¿„4²´‰Ee­+É)ýûÎî¬\Ù¦vf/gΙ™•X”ÂÃ"&Ít‰‚SÎTTí?T ­¤ß13ý’Ü;Ó“ŸwYôÁ.¾ÁÃl2á&3àËõââZe“THÍ£õã™û—*(ÏD´®£{’Ç ciJ.MÙ7ÝSü°þrq-YTÐBsíQæžÃ+¤ŒÎhÎrĸ4­yN~ʼn ° ÚßS!ûaD§²»ýa +ã6u32 2–]å'%)»W7qâМŸyìí­;àîU÷dZ3L!Uz³‚7 ìKQ ƒ1Z(:n (Œ‘»8—Äö?Ðs€·wâÄzkƒfÙätÎJÉÁk1 ªKÇ£ü°=̈mº†!‚—é¼›Uˆ5NGÁz)) bŠ©›!ä“ MÞ£Cvç½ç”5]36e‹ùr“§Ÿ¶ÕMoª±±Ý1üØ3~S媾-¡C˜°(É)ËÉÁ†ö7®ür¹zUÀØ—îà³1-¤CЭ=šnäS?åÜKƒ…«¦¯Z㈠_0œuíØ•-:ŸyÔ°„^I92óˆå~ï1m  •ã° ñ¹½["B3L„ûº §æÙߌŽâ^}rËôÙI¸`ÅtÁÞljâÊõ“Þ%Á… _Ù¡é ¶¼£»tK:Ç×ôE¨sZGp¿SåsRsïœÔ={À“¢È2ÍäEmNEm°¨h‰sxùþ[ÉæÍJ´¢…È ñÖú˜aü 7yôì]V¡›YmêÓÒüƒ¦Ê¨â,„Ê0´>´*“i§¯ÀÉ™d:4ÿ°Ý³eP˜d‚æ"ÕŽƒ@>2uüЏæ¯þµ¦y¦áÏÃi^xæ¥,>®r§©endstream endobj 104 0 obj << /Filter /FlateDecode /Length 942 >> stream xÚ½Wmo£8þÞ_Á·©°ØÒeWûr{ºÓå´R"­NÙ~ à&V)Fƽlÿýyl“†mú’¬´_fžyžñŒ!–go>3”qÉ –×ÓU€)sV,ËcB³`Ù+ô6Œ2’¡þ /—½ùœûáû« "‚ãç.p…/]h”Ø"Œp’%(MbFÔ3LF¨bÂáZtUûWJt ­¿À¿ß_ŒÍ¿šdñÉ’ÆeR–™ÈœÆ4eÄ!ì/‚’¸L‰ƒ( œ$讵èÖaDCò[Bi¤UU‡4A75N'¥O `j¹¸tÀ_7•#Â$®Ýu’ñÝ}x¿ÞËå¬å¼OÕ5ûÎÊ›_v!FÀ˜0Œ$¸üçüœÛ\t¯z³(lÅ0gÉ|µ~ç ˇ­[9D•Ñ(›Âg¾­ø¬)A_ì”›ìÜU[hpj+ÃÄPŒ”¼ÓÞdz»ïvYW>ðÊ‚z§ZÞö&¢q«-ˆÖ ~ãàvIªVvëeXPÛfâo>‰AW]͈J¦rl¥i™¡ÆûNùú®«µÝ‡£¾hÖLáÜ”¼uwçý9ܤHKg˜/ÜÕj„›FkÝi„ÕVèÍËœð’Xd]ÃÛ’>‚ÇÀž¬· iLµPuËÍäQÓøÒTy»’ÃàÚê÷h~ŸŒe¬†)F:ì­Aë t¹~†?sü Þ¹ÖkEç›Pñ^ñÁÏ…oY=v¨Ýá =cé5$ÏffÕTÊ»BF™g“Bk ¯¬>¥ôqÍ(Mw¤âÊJ7îæ·Èls›$7Ÿìäï¶dÿõ7n¼gþQ‚ÏÕO3Ù 0ݯ'àW{Äl—‘ •l«ÚÆÃèûžÎ̃=:?½2Ýõz_Ÿæ{+ng5äŽ0M."–qÿð¾@Á;r‘xz”4è¡Â×µð°µlª2©s½jïøñÒÚm3#Çmlª%«®Ü¸9ð~AŤ”9ºŽ–Ð×›IÆ„üû 8ªi¾Xaˆ¿´x)šÃb±"—“§î´z­"öTGýÙÙÈ«[ÞˆJO§½?}³ì1Á9xR×ÑS'äžùâçõ¸×Ê ã¿DÙCïõû=’_8EÐfÇ ÿ^xêå1=ßOøÏÒ2‡¿"'¾û€ÞG9˜¾†À¦ŸÌôOr+rZÄåË_ôŒÅEÎLKSìÿ,`g¿/ÏþuDSÂendstream endobj 105 0 obj << /BitsPerComponent 8 /ColorSpace [ /Indexed /DeviceRGB 37 508 0 R ] /Filter /FlateDecode /Height 600 /Subtype /Image /Type /XObject /Width 600 /Length 7190 >> stream xÚí‹zÛ8’Fÿt+é±×é]{w[3»‰lãý_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ƒ«ðÍ¥ýyð¨—êÃIO븪ž<7zSò À¬¥u®>¶4~­°ÙÝ\E꼩ÊèE3 Û«ç—æãi`&œÞÏ ®ï®ûl¤(h¬‚´W½Ù‹À*w®ÌñËkõáýûÿª¯™<„ö㋯˪mË|^GVq¥Û¶â¼G°Ä³ÉUMÔi]œ¡çVdØ™ì×\Íí|kóJÁÕû2Ô°2.za©»¿} \^fÁ™/ [åêó¯×íöªû‚ªtÙæW~¼+Í›í̓­¿Å'ÔçN‚HŸN{³}ÉWZ_^/û6puuü„š¿€,O‹Á9oix ÍÆª›‘®%M© S|íòýŸåz=¸÷÷W2Wï_•«ÁéÚ×ã÷œw WÝ@{¤+"®¤ÞFkvh(®nâX ö£h¾ IKL@$\uO‹ÔbÅÕ̾³,ænB‰‡«ëïQ”`EÑà‘4CKFĕˆ¤ Öˆ±š; FÇÕí¹ ñ¬àºã!O-Á*žyÐtèÄûŒ0dºÆ#šsRKÅÈUǵŠþѳâÃjNîN£8¹2Í«ÐÑï” ñ<·)¿uV®aÅÇÕÕÆ†ØÉ ,íe®®WíqÕ݇?X …¸«ç¯;aWµ5Iœ÷Õ»üòâ:޼E·,{Ä\űdŸ}C7“º¯ØÜ@°yák›1äCžhv›‘»O=uûpÝã½°ÍïëòÖN·;‰—'s'ÊGC4`¬fš¬ÐóÖÎü>¤½Å]î«Óø®k7¬‚χ<Ï-Lþ%B¹­kêœL¸ÊàåT…€U'‹p²óà•QÎà¥gÁÕØ+‚«(ÁRX —úÒÀ*èóRÇKå“nTn*YõlP g=»Wùd,’;¬FœsK‡«œaÉVƒ6h¹¹Š—+ck®ìm—I†«M¬¬ÌÚSà*³4EVsßÏÞã>rà*7É"VÓ\µµ`>ŒŒ«\S@ÊW=5 p¥þ{dïMd›§O–±šÜ<5ŠÖp*Ò˜º‰™ÐÒe§¹’I˜+À²Õ®d’àJpåàò˜15Û\EÇU¾‰­n9›Þ<¥^kzŸ)\…ΕM[=‡«ÎcÙ«cûàŠ¹p=Wƒd.ï„-jÁU^\ÉÌ⪓“ÚtÌUëÁœÑ’g®.¹|:liu¶€:(ïÄ}ruÉG{ó^á`ü!*®ržmëÔõB®’6ô à ‹5‹«îVåk® \ÁÕ¬ksuœ]fð|5¸‚«Y\Ýí}랉½‚«µ\ÝdáÖUpXóœ#õd‰¦ÊÞùÎÆœÎïÀ©ápXš‡Úý“i-|3l®ŽÕùÎ/pµ°Á=WAõáX¢-®j¢6žGWö;a"íÕVcÛ–lqõþãµäj`&dr0`rÕ)ºôá²-®>ÿzµa¯âçêëY!5>5Hõ'ôkÿª¨ð±õàáê«ÀÚ©¦ü£û\ºšééY¨3Z_^ÍQ/®î±Ú–ö j9çjù?8JpU˜¬ÀUl\Ýeš¾Ša­ Sìí¾ÃU?WNÁZ4cê™»ØhЕó~·\-tð5ŠUðW!r¥ûm¡k˜‡«´¹Zj®ËÃ\­õÂzüòµ™Íɳ W®ö ®’æJK.7–FÓëH¸Ê†«E‘«±ìŠe¤àÊA.±V“û‘á ®–s5H׺n‡+\Y›×…;±Q=Ÿó¼0X£É„víVÁUæ\Y ÊÀU>\í˜Ó®àÊW h€á*@®¶žš-W‰dý‹+¸‚«ñ(\Á\…Rm*ɯ¬qP¤ ®¼põ ®à*@ƒ¥Ð»®ÒáJÄàj÷þ +÷ëÁ¹Úó`6ü+¸ìˆ 9Ýá ®± ¸ŠŸ«MPÀ\õvöcMdà ®zºAaÀ>?\}Û§ï¶ŸÁW¬»NÐNC!¸‚«›ƒK÷ ¸‚«ž,ý›C‚+¸Úoê’Wpµ»‘Qç·|¹bÇè¾Ýм-¸‚«=GAÆIá 0\¥À•d‡*¸Ê+>;\eÌU“qÆ[p剫oþºý.‰‘àŠ@ÃænWÈì§Zv¸oïv9éI¸Êˆ«ßgµ µ%¸‚«½°úýÛ܃Wp5¬¯³°:[,kA+¸Šš«¯ uÕÙbI¡0\9æêëf]¸r€\ÌÕ„ZˆdÇ^EgøüYe<0®¾-Dj'¯=j®Žz©>œŠcé÷«6¬ÌððîÊR/X&V®>¶4~ÁÕÈŠÐF9«5"®>ž_š§™0o®n-‡u¢&­$ö*!¬ÎƒìŠ(çhÇ¿úòZ}xÿ¾«•X®Ü•Wç™°ZX«¼¹:t¹r[µ¬i—j£ëp–Û·÷RåjÅÙx quhä+¹î=›Uâ¡e-t ÕáðÕøÁ ®R㪕ó«È¹j¼ö‘'92Ù€uÇ”{g6®Ìû÷'ö*2®üCÕÁIñσoŃÁ̹:„•'¬¬ Sa²ræ* ¦ê%xB\&ë™ruªjñä+›Ãôñœ#Wá0ešT|’ûž‹,Þ8WAAÕfx”¥¢påªPZÔre'‡èÎÃôñ¬‡ÿÿùWýX} §Iº¼9/…n8N_^¿wÀäÉU€P™K~G¹ï¶Åõ›öŠÝzÇÁ=0¹quª+®©œSeL4XU›úŒû‡Îf]\Ô»U牖ÜuØ!2¬êØ•<™«ÕqÑMÖjy°=Û¨ÆlúÅÏ ž«ªuh©â¤ê–Ó¾Š+‡>C¤T]Yõ¸ ú\ºã*Z¨Ú>ò2 ®®ó´ «]¸rÐ]_c¦ª ŽF5!½=zæÊþ×ðpˆ+ç+í>ÀGßó å;ÄO•ñòÆDô\Y5X)`%ß<øñìytA•‰\1ùW“)ià*¨äÕ½Š7~e­é‰ØªK¼®hz*TUd)žþø× üv+`RÂÊS¤®R¶U]Ï=|®šs =ùGB°2‰)¶y0„»T¥ì@§ÀU˜‰;à*n®R5V&’8ÃÇóÃÿ²OfO®Ò¥Šø•·«)cW~®’8UñpPüj‡«$\y¸JòPŲÿ*°¸è¶Ë¤oªJ¨bÙ'P\tËe™+E¶_4Œjµ +“´Õ{ÍÆ¾ü«Õ×ɪ:EC4\½=ü:>š÷>ó3l¼PT]r«Eñþ`‘§èTäoŒ•«C&X5sa<\½ÿùwùnVaeL>\Åñ¾sqŽI±&Œ”«C^X_[‘—×YDßžÆÎÇ©RúÆ|{yºƒÌ¨Š‰«Âq?¯ G–ƒ%W¥ÿõñüWyyVío1åý˜rÁj¢NVM>n!Ã)ÐËY^6¹ªãCig½›¸èÀbú±k•h NU@ÔU\´—¬|©J—+ÕÞuÈ+¸ÚŸ¬ßgåm¬BÀ*­´[g²~—Ê+¸Ú]¬LÆXÁÕ~—+;ó÷ï,WpµCOV/öþn•5W®ö»`×^Á\íï^eΕàÊXPWÀ‚*¸²–Q®XåÞeÓÁp•HµÊ,ÉÀ\ÁUÕ*w°D[dý¢pWxîpMµ+¸²æfÁ\ÁU"‹Á4çAåÈ•h\eàL&|¬´®f %ÌY€÷–8W´Hér%Ú䔫k•*WaâLæA¸‚+[u$êa9òWƒ•¤ V€ðfÅUš&K!²›WI’…WéM†¢U®«UD (¸Š’«t÷üÁ•W®®c¤+¸ÚÇ^]³4F–dé\ ¸J¤Z]q¥™“aTOàÊ3W÷^–àJ´Ë+W½oiFãWp5½ œãeÁ\-œïM–¦'°‚«\Ý¢¤{™hÀ‚«p¸ZZ;\Á• ®‹–ùªV{° pWpËDÈj®à ®¢™y WV¸rÚO‚«}þ¬Œ§†Ã\­Q{þîIO‰pårçïúÊ‹«ÏŸ-MG'çÑϺÃO“]~4—°¼¸úxn ? Ì„p5ÉUõ¤2V°ò±Wq8XÕcïÎãoÁÕÅ¿úòZ}xÿîÝ¿ŠÅÁÜQ!¸êÌ„U÷ X+?Ë«p¹jXRo"ÁUÐËöÀ„ƒ¾”F2ñÂÕ±÷ÌU€Vc±ú0^Ž\¤ÆÏ Â^…฾µ8ôó‹÷}ÌŒ«7ééýÏ¿»ý!\­³¹šøÑ WêÏòœWogý­´U'ÿq†~ƒµÕÁ’Y•dyd.œKwÞô‡²âª´Rï?J®üÇEû Ö\-¸Œz¬œn ¨Æ¦Èç=?®Ìç¿B±W}k#WZxN”ó’÷{v˜Jà Ïjgر±RÏþã¢7K{€µ˜O]’³ÎSšêÇó8+_®ÎKÁÒ_o÷5„•Ѧc™68jê™è:Ñ}Æ¸Š Ú MÚr|ŽV/,¨Q‡0iEßÁ•ßjuk#\s¥ñ ¯ã4Xrµå\q­ØáœHºØ+“ÁJ÷œ¸ ƒ¥Õ_³"“F—Šºà*Z®41Ò“øò{Ñ×KZs‡ä­õÊÕÁZÿè{Õé(³ÌÕºmípåªÚ)ƒµdÎÙçf´sŸ®‚áê,í˜k[Îï6|ƒ¥Œª½ŠÈW²Ú}œ?WFÿ­Þdé^á*¨j;Ñm7\Ù:¯®Bäjk kXÆ:WœHµÚ»!¸Ê§Ú½Á’SkWÁT+»\ ív€\Ä•ƒåÆ\Á•Çjïö0¸0XÖÌÕŒ#3àÊ/W6 –½ñ†«°æA‹\õ½‹,Ë_¸ ¤Ú¾mé{ŠÜaáÂÙsµ—ã+WN{ERè;òâjàý, ©¬æ6«pª½Écc+«Ó“‚ß(“½Ù–®ý+Ý-±p•+Wr¸uQpå±Z¥ÃUøIàÊW‚«ŒªËBËö4È<Tœa‚Ý//§o†®BäÊÄÆUø¡²­vÿglp•+WvÁºvÜá*7®41+îpW¸ ;4šWÝüeû?dsÇÕí‚3¸¤ùq%“:Wök‡«±dw°ru³§¡Œ“°XÙquå`íì£ì5X÷\us´Á•¿ê÷ö}åÎÇé=¤P£‡Á•³ê­,?\Yx8W› ÖöV9äjê´ ¸òëbíl°än\Ç'\y½ñýãÖmtÌ/W2p•Wfc¾å•aÀ¦Áܹ²ó4D‚«\¹2šãýn ®àÊB«°Wpe¥U¸ ‚ÂU0\íû\͉½ ö4ñܹºy¦§Èn®‚»óÞMbãÊ(#®ªSOçIeà4ú`¹Š+3¶yA)ru|4ÍÉôsÕë ÇÅ•²áª&êôð+&®LZ\)=®Þ¼–\ Ì„¡rµßXÈá]ŒŸÏ“WŸ½Æa¯lù¼!på,;\›d[>*®Œ¢âJ÷N¡RåªBëË«9êÅDÀ•ËWÒX)-®­¶Ÿû-p6òØ:¸‘ô(ò¸X­BâÊÊT(oC¨î«liqu<“SNÇp׃êp§ÖÉxå*Íy° éýûc4\™˜¹êÛÛî¿£mÔûùó¥tÝ~Á•íÑS_ë媎µ`…ÌÕP !®ú7`ÈeÂ$÷öªøýñr¼Ý¦ãîb÷UïúG’ à4 kþU¡÷ï š+ÙsÜp5X³ÿÜXv*=é©¶Xsu òôù¾ñ¬ïk [rÆûúZ°tï¨DÌÕ3/Á•ŸvèÞd)âûëLðp嬞LdQse®ßå—àÊX{¬0ìÕÕ3Á•¦ì»$ôœt£/ä WApµ­‰på/òWCÓDÄ\p”8\Y ®àjè%¼ˆ¹"{¢+°8Š{WÃk}+[–¿JÄ`…¶,\…ÄÕêf†¶,«°¾ÔIpåeo\NJçöà* ¹"`®¤µ ®ÂòAèíÕ©¼u¿ï®‚k×Üd®ÎÆiÅO†§œ‚Wó¸Z×R9kkýÒü0Ø«Ð<[…vwýo *°‡+ Mµ8Ýhe5×A,¸Š‰«± kÆ®bËWà ï]*MΆ.ÓøÀ• ®,·d ƒå„=Ò ôà*c®“[ ¼Z?ß»‡« ë„+iÈ$ùXOÀUÄkúµ­ñ££äÎÍ‚«x¸RŸ“uÿO¹‘è;\EÆ•Æ+‘Ùû™\¥î`ÝnæéM,¸‚«m\õ×&Bºi¸Šf"ÔÌÍ<2pWó©Ò%ÜxmóÀ² \Íi¥ÿ‰PÝí¡3ÀšÑ@«`ÁÕœ¯´Bº¿i+5kߌM°àjN3ãê¾]w«ÂYûüà*6®¶¦Ï}Î7yþªÐôv,üvŸ¡\¬–ޱÇ13vMk^ÓW98Xš•mÖî>m«®‚l¯¶Rµù ÅÕa™qåpÜçxMM—\•ÜáNYGn zê{¸²e}¶«5—è-$ͨ ®ÒäJÚ͉„á’«L¸Ú)5Ä®”ö§þÜÙ Wý`ù93®¬ ÜsÕ›'U9 °PâŠÚ&ìW^4?Íé®à ®h>\Á\Á\Á͇+¸‚+¸‚+¸¢ùÑmÓD!„B!„B!„B!„¦ôþçßÅooÒ—×âÃIÒãòòǦØÂòuñöÃÊêO+«¯›¾îÖ+m©úÜþïÕ{Y/~ª·¦ç?Šy;ÿzªnîåüwKËõt.ú¸¸|]¼ý°²ú¶ØÒòÅ­Ÿ¡Zuë͸®¯úr¿ÖV.ùþ}[õt†¼˜÷ïç~ýüùXþþÛêû;¿|uCÇ?þ^X¾.Þ~XY}[liùÒ`<p=üZQÖUŸÖWU}…öºòÏO«:Þö$øýéXŒjtª^®~]P¾ä²èÝeåÛê/×YY}]laùÆÞ¬húWëŠ_Ð^W¾iCõvtáêÜ95 Õ·`iùb2]\¾-Þásqõm±ååë‘)ÁX\ö2>üZY¼î·5·^Ýþÿ<—nÕ†êíružRžšoï’yºÃeéc-,ÍÕÊêÛbËË7ó ^V”m=ïU=w™ËÍÚòGÕSèúê­Û«â[·«Öm‹«Úo_ÍUåýñ÷ú=–s-WO•Í „«",P6©;-˜ îËWw8³|Oõ‹æÁ›òëæÁæ"oÒÃ?,ž«â•¹[3·÷ðVxhf]õ-“Á΃Mó.t,*ÿV óâò·\­ª¾-¶¼|së…k¸¦le'Î3Ñêªk³²ú W+«·ÊU»ž[¾\=Öñ«—vM¹¨ü5W+«ßg¨g³Ç• ýÖ^­®ºfaKõ§Ðâ WSÑÅᵎÁ0+›×\­¬~Kp²ü×åt².²ØøW«“ ëÊ÷ÿùó)´¸hg«–¥ÊòÇêaD5:‹Êßpµ®úMO3Šõܺº/ŽNé!­|rllÌúç8Oë‹#„B!„B!„B!„B!„B!„B!„B!„B(U ¤¦ÿÍñiMIW£êI:W®/®ŽUҞϟOouò â÷ÿ>z{øg‘èËôceâ'ÿY&Én2ý ÔËÕ[™)üéÌU“d¬Ha}TÉÕ¯Â^}¶\µ?9Ö…ê窢£ÌfY¤:©zù§[®ªì‹å‡úÄúõsUeT<ÓÒSåÂ{ëáªúÉñáW[ˆ~D³¹ª’êöqÕü¤Na)¸B£\´Â^!4Ç¿êzQwþUñ7þt¡©õàcߪ¯æª>h±ø‹òø’úCH ªQ0\UÒS'~u¥*Ÿã¨ÈŸ/=ëŸüñ_Mü ¬Ðrî íªö|]„öÔQÍ¡à!„B!„B!„B!„B!„B!„B(+ýÛèdendstream endobj 106 0 obj << /Filter /FlateDecode /Length 741 >> stream xÚVÏo›0¾ç¯à6£jl Zv˜ºJ›v™”[Ö§A#˜YÛÿ~ïaC“”®"BÉóûý¾Ï`…‹9,üHÆNpŸ3ádûÅŸ…/)Â>âhٻ€÷Ê Áxõm;7zñ.fËzC]ï¨ð—õâêVD ý ”ÜYoÏÔ—iDâó(pÖ¹³!Œºc”’›¢íÒ*S®HI:2"©5Jtù\•rïÖ߯nCæ$~"¹ì;kØ3 CÇãÌYlú¬wP9Œ(é\“GüÓÆ°=TYWè 4™\µYSÜ»(cJ¦1ç¯Ë£ÑÞØ’‡VåÆTT¶ÉÎÆä€ŠÿÀ¡'zu»´{ èµó3æ'Bšù3½¯j!“ [íN7`팖.#ÂR keá¼@Wª2žÔ–Q¶‚Þ „P x@tíÌH…Õ- ßLnëjŠ,-'ÀQ KXµ¡¶|öpg¡OäT7f=<èªóMQy²ýò¬ì|2ìüg×\þÎéWŸ<#›û¢Ê±W†Cd1]zœbŸ¥ ²>v6a1‰.…8w1jµ©$(&{;þ^ã9'É"¨+܈÷Dtùºe$¦Œ#&Ìë]¡q¡îSLPÈÖþîä]Oò$9ΕoÔ û®Ó¾·æ`§90½Õ>Ź+« ‡+öGžÊ•Þ5cKÝ~QÛ§¿ÕP‹•f=àìžkµ²¥ùQé ù0ÑpCʱïL-O§†Ç@‡gš3ÄÈ<Ðcú…™îQÏÁx_ÔŒpËdíVæº`è|³ä8ç:Ge³ î†ÛQÏBÐÀ«â"3²žæwÈÔÓ ñY,mñ) $ª0K|¢d×U£{Çcxô †÷ú²oU§š½Ê‹´ÎYïÝËâÖüzdüä9\>æ+~ÑV@“‡_„—›ÿ}}HéÇ‘¨ôñ˧ÿÌ 0oñu½ø‡9G—endstream endobj 107 0 obj << /BitsPerComponent 8 /ColorSpace [ /Indexed /DeviceRGB 41 509 0 R ] /Filter /FlateDecode /Height 600 /Subtype /Image /Type /XObject /Width 600 /Length 5181 >> stream xÚí݉zÛ6†á“6¦Û±Çã:‹Â챢ʸÿ‘Ô¾™ –s€ïž¤j›ˆðAÒ9B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!ö"$ó$rÅVæ ®®®p…+\\\á W¸ ™y]þ·}µ¬ëúW¸ò“ïuýíð®p5=‹u3µk¸p…+ùY×_Šèq5/_ëúGÓ ~aÜŽ+ÏC÷_«æê7®påyè^7m®på3ÍØª€^W¡¿çIV®>êÙ¯„+›’Îv„ßFü=\ꪉy;¾úíçÍp•±«AšáÕ¯!,³¾p5UÔÀéàn+ø¡pe•Ôð¿¶hOà,ƞƹŒKß)m\Å!Õ¤i©žÝÔÓÎg?€ºSÚ¸ŠBªÍÏõÈjz›ròIÔÒÆUSkN¿€yüHÚNiã*Š©Ã.jÌÐý•¦í”6®zÔœ…O¨ì”6®l£Ú}N]§´qu­²B¼mUú¸ï4ÒÆUTT]µçˆ>âªHT!]µ§´o•tÜ¸ŠŠ* «Í)mCB\ÅUÌÕþ)m´pu¨*ü1¹:<¥\®"6U]žÒN+ WqUruö”vÊF W±« ˆ« §´ÓÉÂUì.#„«Ë§´SÉÂUìHW×Ni§‘U¼«èÅl]TÏWÄU‚"ï*ÅܰlW)ºˆ®âÓ’]¥Ò¦qûÛ–ë*ÕLÉ›«¡oõ ë*ÙÊŽ/WÕð7Šø u•p)ÚŸ+Í_»LW)Ïyr5òmb}ó]¥=ÙïÇU5öm"}ù]%ÞBâÅU5á]¢|ÿò\¥Þ™äÃU5éMb”@i®Òï¤ôચøúÂÂ\)ØûíÅ•úr(Ë•†K ¦£ðÑ“†.‰¢\©¸Re²ŠÊËÈ?pYäJÉ•uSUT¾VWÓI‰VS]UþÎ[‡,‘"\‰žÖʃ+-x ®Ä9'™¸ò»Ë&\¡âªéspUyÞ½ V)®\®*ï›CÁ*c|¥ˆÕDWVfÉåÌ3pd s˜¢)Ä•s¸Š «˜~0WÁî )V*øå±{æÆt¸r¸Š +H‘Ïä¡{1—;\ùÒð1ÿ°BùËãVÓìí'\ùáQ…¼ðÐ;¬E¾¼ؼœ_è ã®_eâÊR•Ð^éº)ÒH¡/“ö +ÌøêÍS÷bq«a|…«ø¥¦Ì—÷Ý|ðBk…+}¬<SëW‚«øå{2Áƒ°•ÝËt”(7¡ñY+aæƒÍ¨j®e]W `s5»9\qÀÕ"±î™åV(WkQsë ö]UÑîŦÞÕâ¯v©AÁº¨äàÊ\a…rõòÏ“’öJÛ#†#‰yçH_°Â¸jf|7Û<®ì¸r¢ºÔW´Þ<íö5àj‚’È7ºË¥Ž+½®WY fý¾Ü^`á W!Š WÊ]%xŒ€ W¸  Wº]%z𮬱²áJp•µ«di®4–®4»JÆjrOˆ+\…(¸Ì]‰iW YM-¹Ü]9\%):\á*DÙáJ¯«´¬¦õ„¸ÂUˆÂîB4Xy»Ë®R³šTK™»r¸Jóc‰+­®Ò³šR~¸ÂUˆÄ®Bô„¸RêJ«ñ%˜µ+ÁUª"ÌÛ•ÃU¢2Ä•NWZXm°p…«…ˆ+•®ô°Ù`á W!JW¸ Ñ`åìJp•¬²²v嬺RÅjÔÏ'®p¢ q…+\âJ«1%‰+\á WVFî»\¥«¯œ]9£®ô±þ3Š+\…(L\á*Dƒ…+u®4²\š¸Â®pe®´¹RÊ Wc§Æ¸òXž»r¸JW ¸Â® p¥–Õ°Å®p…++#w\ér¥˜Õ "Å®p¨ÑÆ•÷jËוîpeÕ€NW¸ Qª¸Â®rw¥UÿŽW¸ Q¬¸ÂUˆ WŠ\égÕ»\su%Î`p…«b] ®p•¬dq+\áÊ ,\á W¸Â®òdÕ¯lq…+\õ½®þüóO뮤\WšY]€eƕÕ!WvXá W©:B\i_råpÅtWE»²ÄªGGˆ+\…(_\á W',¸ ZÀ™ºbØž¸q+\áÊJGˆ+\…(b\á WÙº2Ç굎W¸ QƸ®pe¥#ÌÒ•¹åvƒ¬^©Ã<]Ñ\á WV] ®p¹˜q+\á W¸ÊÝÕµrÆ®p…+\á*W‚+XE-èœ\Íëúó¿í›/ëº~Æ®üä{]kß|ýWÉ:¬\-ºfJ6 ®’Õc^㫟uýeõæ¦zA\éwõòµ®¸ûV®Rv„™Í›ðת¹ú «´™Û:ÃjÄ^7m®på3Í ƒ­^и+)ÃUÓš´wåJqÕt„ßvU¶ ®p5±¹Ú Û«£À W£‡WïÎ °*MW>°2sµêÈ×KÂÊBû…+}®Í Y\?.\ K³Üþ<à´3¸‚­4dåj}zpØ6p…¨Ëœ\-»™ l€ š” W—íÝö«õùçá3~pùê3܇<í½Ñ{)p\ Wãç'uW~ß\£ŠWàRájùß§öŸ³?>”ã \:\½®Œ>WÚ]Ù|&®´»2ùL€\‡WF®KíËà3rm®²reð™¸2àÊà3peÁÕ¥gpirìá••û~ô¢qý™‹Y‘¹ºøL€KÄ|aósµ–Ík¾ puý™}‰õÎ>$Œ^£jý9q¯Ãjžð¿×ž à®2x^ê«®šåöâ<оhWθ«WaÝ®FV÷.É Â‚ÇW¹»y×Ì› º²6Š+?°d×Õ¸g¿Õ˜+á– ¸òî U¸{Øvhëêhó:¨p5å°íè©u°Š€*µ¬Œ¸j7¯¯\ío^G®&¶Y<¨ª]/*\ù8l³xPUß×KS¨ÒÁʾ«½Íë‚*ýÍ•u†õæuPáÊëaÛÍëõ}æªLí;ÌÂU!›× Á’\‰Ü×%ÜxÁ’+gÝU3T?ܼ,\M=l;To†W¿J؃«(®6« Íæõ"vÀ˜q%v]í–ªºmë‹îAd–8›®ö×?›–êÙ¥Ø¼Ž«¬\-ªoö—pG#®Äž«“35ËíL°„Íë6`‰3ájKéÜ鿲6¯ãÊß§’î—ÍsÊž¯Ð•·O%ÎÙݧàýŠR °ÄŠ+«·ô/Ó•3âÊ9\á*ÐøÊ,¬âFîF\±µØ–+qF\S°p…+\#®WÀJR}¸Â®pe¤Ä°‚Ô®tV?®p…+\™©}ŰÄá W¸‚®pºîÕÂ\Y^ ÐëÊáʰ+µ°peš•VW‚+ãõ®–8\Ù®u\áªW‚+ó•®–8\á W°2Kp…«„‡+Õ®®p•°Ä•îêVçÊá*‹êV W™T¶.W‚« u]¹2a‰ÃU&U«R\E®iE°W¸J[k¸R_Ïz`á W‰+ WúkY ,\á*í¨W&êX,q¸Â®`e–à*`ýVEw|•áÊD»«œ]%¬Ýä°Äá*ÃÞWÙºJ;ÈI Kp•gͦvåp•gO”ôø‚«\§úI?€8\å:ÓÇU†®®Uª÷祪ƒ%¸Šß y¾³BWW)š«Ì,ÁU‚ -À•ÃU‚©X,V©` ®ò\bHüIÄá*Ï%†¤Ep•;«$F®²îq•—+Uõý€‚«õ˜ÀUe¡ªp5©ó¿šPp• uH1öŠ{Lq¸*‚UÜžPp• ÓL£ºr¸*„UÌã ®âW_U€+‡«èµ—nÁ4Ö‘EY¿Øu¥¶ŒØR*s5“‡îÅ\ª7W±`‰Såêåq«iöö“MWºYÅ%Ê\-ï6/çzB1Ï*õ6‡®”  í·WúYEø¢Í•›½yê^,nMޝz±ªôÈ„sö0¼¼ïæƒZ+å®úÔ˜‚MYa‰BWZ›«Ð°Äá*úÀEÇÒ°D_/ï›QÕÜèºèpVñ®óŠÇ[´ºšÝ®8XqU vïºÔˆ°Äétµ5?¹Ë6ù°Jì* ,ÑêjñW»Ô`m]´'+5®ÁšþsÊÕË?OgÚ+í®Æ°J9¾ KœNWMOw³Á[qUc•ߤPtºêh½yÚík0áª+eOˆËÇè—õ«Õsü§2\x‡«ÈÕijh¾üÂå®·f\™få–Ÿ5 \ ©—Ó?§d´å–8\Åm¬ô²òK®"³rgXU./X‚«èrú5­9xåí[éóÁj«J1+/°ü·-ÜÕ$V.·•wÛŠv5@•VÓa‰Ã•VÚ\MüH‚«ÈªŒ°ø¥²*×ÕTVN#«)°üîµ,ÔÕ°â·Ãj|;êy o™®|°Òêj\“å{gxæ®æuýùßöÕ²®ëçQ1V£`y¿à ÷öê{];|á¥_ÑÌj{ÿ×±äîj±n¦v W¬†6Y.Ê~|õ³®¿õ‚ÓòÕ»+ÄUwÙ»zùZ×?ä¾ÕU«!}a‹9óŸ®zÀú×ê×o¬ÿkÒë¼&7Ya®.`a5b¯›6+ +ð]z^€«å»ºé%+½®útØ¡îhPº¨¬\}|Ȫ'+Í®RµVe¸j;ÂÛP¬ÔޝÎ4‰Þ~¥Wóv|õ{X!^šXØ…uõl‘8ä]}òwµìæƒ_†cÕŸ•%W‡‹ÄAo•¿«ÕÏæv«AfÊêp‘8ì=Ȳwµh6»ßû•åÅé¹¹Ð'é~¾V?i_î%›†#Éa›’|Þ -zÀÄÊVsÕõ€Í"ñ;q¸šÞòïN¾ëòZb¬6‹Äµ8\M´ÿ>¶–u~cV5ŒUU™sµlYå5áOpØÝ®«nhÑÁw~cÖ'™°êV]žqæèrncÖ5&ö‡ì›Ü×c78âª,9ݘuµ±ÊalÕ~ñn‘WádmçÜãfˆYIËê×Ƚh¸êý£û¹ÇƬ' Õ³Ú[$ÆUСƫEœ «õ r·HŒ«sî/cTÙcÕΉqpÎýqï_ŽW´ª\X­Ht¼HŒ«0é6fÉîßW´®-’šk«ÜÙEb\j®š’^ÿ4­h]]$5¨êü"1®‚ ¯ÖsîNÖáŠÖµ3:•TeU°Wsî¦^ú¬hU†X%|Îc¹®ŽçÜ"}V´ì¨JûðÐb]›sËñŠÖÉÑŠªä¤-ÖÕÙ9÷ÉŠÖÑÑ+Ï9.ÕÕ…9w»¢µW+‡sD¬t<<»TWæÜßëõPrЬµš…¡•š'²óüÁýÌw»HÖ#”ÝQ=+Qƒ W§ãÞ.’¦¢ds¥ÁoÕªD*\tŽÇ»HDzízÀ®.æü.’îJƒ{Láj\.í"i¯4ÐWjIáê0—v‘|ß^i JêRt›ÂÕñ ýÜ.’ùÑ•i+Õ)\ÚÏ­h-Ï_i ±+X¬ˆÂÕØ9âimKhNv@ájÂñrõûàùípeeŽØÏD£þ®Ìºš~¥ôŠË-¸3G$¸ 0G$¸"¸"¸ÂÁÁÁ®®®®pEpEpEp…+‚+’¥+’yø11zT)¨ÂÅUŒ+\á WWT1®p…+\qP\QŸ"„B!„B!„B!„B|gñ÷‡ÕïËû棛իùúŸ1Žº;Xœ£FÿšëD=˜Ž,ïÿhjxþæiS«ÿv騛ƒÅ9jô¯éLGV?Im ÏÚß{y¼Ù/þ°GÝ,ÎQ£Íu¢LI'x{×õû›íØþü¨ÛƒE9ª‹ý5÷¾n¼ƒ©É¬k9þ³Ü5ßþ¡í¦îbu{°XGþ5×®"L—«¶÷oÚëf(à" Ú£në¨Ñ¿ævxåJ`m‡Ý oWÑ¿fq®fÒu‡®ä!l›}tÔˆýàîȾ&ýàWwÛ’ˆ0¾Z,ÖQ£̓qûCy®º/½zkN\½óÔÞBñå±ÄÛ’‘@®º»rΚ›D6mÕ{,âÃUw?ÎÕ‹îöœ¸"¸"Ê]ÍW$Ðø WÄ÷|ðÆáŠøtµ[¿Â!„B!„B!„B!„B!„B!„B!„BÊÈÿühåendstream endobj 108 0 obj << /Filter /FlateDecode /Length 843 >> stream xÚU]Ó:}ï¯ÈŽ´IãÄvé^øX $°}ãòàMÜ6(‹“°âß3ãqJ»pµìªR=3¶Ï9þ2øñˆEZª**ê<͹ŒšÃêÛ*U…’Â8 }—(rŸ,-×ouôÊ®>ÂØdÁM΀_lVëkYF\¤…Py´ÙÞK±‘5,\F›6úÌ8γŒ}ÚÇgó!.2v'…R¬ï3Æ_6o×ׂGuZ«\yÜó W¨…ˆ’œ§¯Àò Áò҃ɂý—Élëì²io(¸9ê¡÷”ÜáxëZʶÖQÐØÙæ “Š=s'Xü p9öÖÇœyÆ>Ó.¬0NNw;Oh¢Êÿè_ƒÎÓZ*’b‡8eÉ45ïŒkô„ÌDY±£³q"%ûjš©[Fô‘”¬‡–†ê)ôÚ1D½žºin‘0¦Gg¦ Yþ  —¼qĉÊðòY -‰¶ù6wXéa7÷éÊ2ÐUH¼T0  Ö"ßçá\”iifo‡5ð%³±"1Iã¤âŠmöæÕýô³y\º¿à> stream xÚí {云ž¿:#ù²¶W'YK›ÝlVÚÍśӱ×vÆ#üÿ_•nv“(Ü/H€ªzžs¦%u³‰â‹B¡T ÁÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂâ‘7Ìòà|Ïû >ÿ¼Ò÷¿Kþò¸ w¥Ë/ßÔW±’¡½ÁÕÉsÄÕ§×Ë‹_S¹ÊÑ^÷\Eõ·GæjÒåÓåʼn\ei¯q]L=lµ0Ww®&ëó+æŠrõþ/Kþû·«Nn˜|{ü—_ü÷ßáó«øë?\Þôw“ÖÞÿÇ#ð³ßÏf?þîòïß¼Þ®üÏ—?ÿ쟦7^>ó›?µ^XýÌí;zåê×—½¿|úÏ7®¤ª––-*#í^´7ýêgêÀÕå9_]„_:¸ºY÷˯3E»hæ|ûŧ›²~9¿þqÕ ~öh½°ú™d·)®þöÏ÷êó?N­ ªZZ¶¨Œ´{áê_`~ sÿêúXO—Æ}»ÂåàêóÄ¿_øƒø¿“#qyÿß~ûë×ë;o–üòÇËGOÓ§÷¿¿Ío|øöWû…ψïW—Oo—fœñp¾6•ªjn™Tm÷}¼~êïÿzU(\݇¥ï.®žn®ÀÓ ûûO¿ùߪ‡p{}yÿ³:ÞíÀªŸyêÚ¿z:]šxaë|·ì³ªæ–Q•‘vßµwS¢î#põcòîÿظz‹õ¾ô¦ŸîïW=Ï÷?þÃ#4®ü6>Ó±.Ÿ¿?~úçËX8qET5·ŒªŒ´û¦½ù§ûØøÜ5WÒ¿ q5½ÓÏÕ÷ß-A rÿ…ÏôÌÕ¥ÿåâ»[¸š#[Re²Ý:W¤úVEWOêû W—ß|úÍÿüÓc WægzæjšúLCàÄÕ“¦g¢2Ún«½: W7è +âHÍïÿ›š}ÓäY·WÞ ›Ÿé™««±¹´dâŠúœ÷–•Ñv/³ê_uÎ1Ö·iÛWÜ'*·×W×ùûë$çLóž%W·_¨\y/l~¦ë>zžbîWTUsˤÊh»­óÁãpu‹_Æ^ ®æ?\»ÝüþËÛ§%±‡éÿ¦uûë=~¥_ØüL×\]šwû¿lêUUsˤÊh»oÚÓâWÇáêÿ_·aþâV~úíŸ ÿêDÆoH¼}Šÿ¿_^ƒ}½ø¢ÿáoòý÷žx½ðoÿüuöí• Ÿéš«[›î®’TÕÒ2©2Òî»ö„øãšƒñseu.\öÂ[cÙ—«·«/q-³0W¥äLÆZ檘\ý†‹WõµËÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂRRÐ¥°®š×U—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¬+ÖëŠuÕíMÿøúåëªÓ¯ui‰«_?>1W=}­£<Îêpõ$Nx`®ºøÚT£GX-®„8ÃsÕÄ׿s¡O×ãê†ÖçŸÚyDkü…ãqµN¡«T媩G4·?ß=We˜"Wû°\™MO‡ë\•eê*ÃðqçÎѸ›«âLÙ©ú\ùU™ èîuU*Uµtõþr+TäðÚ·|Da]Fk»s®6¤ª’®Nxž'„Oû>¢8]Ž€«M©ª£«÷—…¦“cE QýÆž¹Ú–ªZóÁçùåyÏøÕXÁ~¹ÚÊ[ÿöj,­ûn¹Ê¢ÊWÐ3DU-ÿêÓëíÅ÷Çýü«±x¯î•«1)õ«½lû¯·sî—AƒX?Ô'Wzo¹â-*<ýI‚eX­a{qµÿ׎>Ö¥®FÝ ÝÁöŠÕË›T¼î¿ˆ£ê¸{?jðØ£®(V JfÉ0UÒ:Á4sQCàq¹ë|¶?]-ý Bš)÷ÅoX‘7#ä°ÿ~ómFF«XŠ«QÝ<ÞÔlŽ0ÿcûÚËoñ¹k}¼7®FéW¹,1bwKezõÒm„Ïß?8Wcµ tÆÕ¨ÌîìdŠ 8ìæüÃ0“qlÕ3Ìq¬ ÑXï}q5Z> Ý Íh)c¥i­&× ”½f¯ÆŠ©sÓµö~Œ*>¶!pñ£ ¸ö¶÷Ãì€YØ;>WcÍËT¹éZ{?Æûð§ äÅ<þÅ|Ç0»aˆ¼©cq5V½P›®µ–º8W³ÇDü,9ÿóÞ VšÚsÜãkûãªÒÞŹšƒw«Ãg¡jÐmÝžóÁ¾v¬{©ŽìÕ(¤×1Û+m1ùVˆ3V$Ò±#W—)á—¿¼ÏàTª ¯0VÑPUäêüéõÒÿt]¹wô´†•íruc2%÷~Œš« sý/Ìùèn\]ÍûÕ®o¹¯¯ô©¸~}†‘:UtÁY‰0ÄE8kpb/®¦ÔW®¶Û‡\«¹Ê·í£6Õ³¬$ß=®à¥ V{rõþò0qõ¶™½*½ƒ{3®NÀÃ}.õˆÆû0GcU¶ÈUDØÊ{˜¨JŽÎä_áùÂÕÉ¥,tˆU%¿ýAˆ·kæ÷—B~û(´°€Ü£gü¡Bߪç@Kwt»õÁ^¹zyž&9×®XȶË=WË tÆ¢.§ƒÈ¶_t¬êÅE¿ÿâê…Š‹ŽPG$a7UyX‰˜qâ(\•?·W¥í0’E<}B¨Q~Dç(ólëpµq~† ‡y7›ã”ö¯0Ê@ºœάÉ*ÄG>Vqiò¦8ÛægØÆ\Uêƒo¥æƒ¸ƒüHçJn^ðlÀJDqUÇoßú¼óFæªmŸa¶$ã2÷ÃòŒAVm¢¨rndGÌV†ZóÁ­ó3ld®šæj~£Ñ#€ŠS•U”!:нÚÊ\µ>Ç™žåH˜Züur1\ !£1Vñ¯6Íϰ•¹j˜+é÷ŒóÓ×öZAЀƒÿ¹Ÿ<æŽëèjËü ›™«–íÕü¼GÇONÀÏœ!ÂòfK‹ÜÍ€†uÕš¹j•«å4 AÑeòrÜÁä É\Å®:÷ÏÕvæªM®fK1{W†=sE¢îpû@CÅÌUA¬åJ¥n\AµcÚp|öE2¦Uçê­vœaCsÕ$W N9Õ†u3 ‚~(4ÓëÝ^mh®ZÔ•Œ&L?Ñ-2êŸ9,èÎXÅï¬êœ«-ÍU“\ RÀ(h:>HG Jæ+·Á ‚h ïGŸ\ =éj ~Þ½÷QŽUX Òs‡y²TÅ$«]¹:Í˨•÷·oj®äJ[¡Lö .&ÊD-Ægß—«+Mߘ«úöJ’qy1bAM@ßä®_JænˆÆ*!^CWÓ^µ[õðº\m‹U›\ÍQ†ËËqù$U‚. j»E¡~ATšã=íÕ}?Ã,檾߾ u#–¡Oæ>¦Y?¼ß—”b?®nöj:ìU•«±jvŽ3»îw÷J,;Û絛б.D[«]ÇÁeôûþæª:W3;ãÌ=:w%D‚ûƯæýÇï/ÌÕöjzÜ#Y^¶æªõM,#³ýï}Þy‹¯Ý«¶÷_©{Ó%7ô ßšqtºÿ=ý+æjs®Ä<j.½ºŽãÆ*Ökúë8›cÕf¼}±#¬ÈØoŒ`ˆ¥å¬ã¬à*kѵ9]Ñ]†>Ö¡¢·ë~WQ•·êÚWªÍ-Œ·âÍÕ¦ŽNW\¹c9Cgº’'M …@pˆKu|+åüV¯\™PÁÝùúäJ¨\ÉÍîjM8¸G±AÄr•° ô£qåþi½ru;‰C&} ~;–€ƒcü¢¬, ŒÌÕò <èþ¸"Ï\劖$?À3üë’$6픫1‹*ó°f V­ru{âãb›ôaJIKäa•š†ï£pEö¿Ùï¡c®Ä-*º tdÌšÑRKwYš¶Wi‡lúäjÌú>E7š·Ñau:±½n’ÝÊ [ yLÙbpâ¹JËs$®øBЬbÚ™¥n¹šçz%´-–üc²‚(°n¯F«ïäõ+U“EެÓC3ó$c =ŠT4Éæ ‡«eí³æ=9 Ö‰é›+,Ñ+µeTätÐwPak/>Wúæ»~”ýHzI«X¬ZãJéI£Ð¢ JÝJÚ­ƒÑóüæ~Ë@Ò\ژµ86‹ó»{äJX¸" UŽÛ€zZN®|æ(.+éa¸ZNœÀÝíÈ”[/£ø½Ý­r%æÍ¢Ò6I3at(â& ´ûž0ƒ8ºß®g· ¡e÷õ-,åÙûåJz=jÂÅí´rEÀRæ{iË8=r5šó@eœƒ'Ì`ýÓ zåjiïhFµXÂvdE&­œ+—+µ7Â~qï~É~¹"Cûh¾{Á A$peN%îVß\éa(ÇÅáq;!úåJX¸R—wì}m¢d°+ÉÍ•Ñ1!ŽÄÕh â¸/>'w¬xsÕ’® =s=¢'ô`–1H0±r‚_^õ\A]"ópµ¸`Xc®ZåjZÅQ«¿A5XF5/›¹òq¤V'é—+O52h&Yf¹jJWÊÜ£bk Ô¸Š¶žsk5lófš vÈÕ(Â\Ñ%Y% õ*sµŸ® Yy̶3^j|aI²¬Æ ç·W±uuúç B –Ì-æ.DÕWPŸèràTz—£ëd9ü<ÀA‚EÐ5W.EH÷’+ÃוX¡]ÉÄ B+Q©s’PM|juûD{•ÞþÞ¸R5p:ÊŽ+‹ç€™­Aôq†×(ÎEŽr)s;¥ Îò‰Á2ù zP€+߯˜C¡ùÆùçn¸Rf!4%5p€ú î,aPü'ˆÀ•wÇh'‡°F §Û½pE’;êµ KXŒ9Í[»8߃°‡×?.W£Ñ¹‚\Y#W˜ ÿ@—çʱg÷L}d©”Ž”Ô¿„ ]Y7¡V}rŸë.{)ÉÒctò›¦:V6Ï•so„ `i¤m\ÍI‰¬€–ò®ºæÊq)PwBX 9.Þì ÈႸr©ê¹ÇOÎ\fk68.è`9ö§O®‚Óu)Ã\ø¸cr^]s%=u¡‚ÓMÖµ>{÷ä:™’ÞìÕèÿ4-£íÁµßÄe£R¯\´Œób 5®æWCªkr°ê‘+ïzƒâ¹ûq4Wˆ¹«v¹"Õ–èÒ>ê uezû8ˆŒ;î“«@†{}ï‘Ï\шP¿\™õœ)$Ô_û¬\¹Bž«1<äCaÊÏÕpò Î\µl¯Ìýe:W³wå8W«îüöÑa±¡÷”8wiá*ò¦ZæÊò4Í¢pbZ^ŽSq¹ªã_M—jq[Ô@WMWƒ6ƒîw>8 ûÀf¹Â ª |Ísõëǧj\IÙÑ–p2w‡+õ¤$l&Êî\dbU©ž×“8á¡ø#’4iü@q$¸lŸî›+_±AH¬¨ß +ä^UãêZ#ǃÖ:®f¬´S6K \ÅcÕWÎÛ¥\ÑÙ/ /¬m{5É­’u—FiÔéÖ"]™qcû È•ã]‹ëD¹R|Qaßó+©dP•«ã È‚ªmë3~$®æ‚Ž•­’¸pGdÀ°×ÞW£tÍÉøg1Wñ£ ˆ24ÌU8+&là „ÆüX©…XÃ஺Ê3WêŽuhGœ"}ÆA¿‘ƒrE‹ª^;ô}´–“_V¬‚šè—+%—¦eFsÕ§½Z*>} zŸ49²àæ µÆÁkÔÚ¯}%Wóšž¹+"“+–+rÔbPæ5ÐOÎX™'ÁâÔ…JqqÂó{eÛAârævÕUWÔFA=Y­+ÌÈã\uÉäìl­simQhŒÚ® ÑWê$¶ý‘Q¦ç`\þ!é6ü ´^ª+ 7D(ª!ÐW£¶ƒæ.D…ƒ5¾sL®–s…,/… ݉h]ö ÁvTÕÕ›o3r.WÚ¶[Ä%ƒ«ÈÛé«Å;À@Iì‰|Cã ˆÙ#yÈ·®´ç¯îé#¡$bËzäjþÜ2Trƒ¹¹ ÑôpÜWªC¨q%5‘ÌU„§ýÏÄ­äJmêl¬œVn[—˜hÝ8ÃÇZÍÕhéQª"b/=äÜ €N¹¢yÔ„^ÚL6‡uc>­L×…½–Úb¥Ò¹B\?ì‘+i­´cðr•ÛV%‰[W\¹¢±=-Ë\  OÿJn :êo`Ý0ˆž¹²ô©ðÄj®D—\‘ÓB­ÕWvÌ®¬~]®JNÙ•bú¢sB5 {²öãr%4®+å;.ÙT{BšŽ¸‚ò„U®<§æ"¹BŒÑg¼ž– ùlíŽT»¸ªo¯.SÂ/yy*ÁÕ’—U³¶V—*‹« Y¢Õ¸hœ¹RTæî°fÜ‚«ó§×Ó—oú>™ÈƒBÆÍDªýˆu¯Ï,æ€\AعrããHÉpÖÑÅukßuO_™}}AoIü+ôb\‰=¹ŠFªØ+ÑWtF#}x(\¹ÑóùÄŽYTηÉíCXW¶[õmë3¸RkáJÏFÝ8W \A‹#aqbaôÁT¬¢Ç·jË®åʸÖÚ6Û+±ÍÈ·¼8ƒ²{Ôw%‚,’5ÚeT††¨?®ç~PÝË^e¬ ù •ó~¬°W ÿÝ¢W6^‹bùüÅ¡À°ÜBîD®lû´n²ž+èØ6ͨâãÆAý-¯_U=®ü§G²¸B,Wƒ­aК³Š+ûQ…vý+ÐYÚ(,§äaìõUe¸ÊxöÓ#»qhù`Á2Ô¶È•2 *\ÙŽ "øà‡¨ig¡I,•Ðé‘t]­ç %'¹–-‡hœ«e¾:ê~•‹+çE‡ÐøV«ÞDèôHU®ûൠsUË¿šwªyN/…¸’S`ŒÓ¢Ë tÚQÏ^ùOäq…®`IF^,“¡ªyÕÞ_BXÝ}tš¢ˆD®¬Cy^¡^ÞÚÀ鑚\ –1ÞòÀ±Òq7Jªjé:Kƒõ°Ž+éQd¸RòZŠáYuTÌ\eÎ=;«ês% ýåʸⲑ·’utQ¡¸W2 ”ªWY“Á„Sý-ø¢\© ‚(è¸Ã `Uχœûˆ–·\-¤Tœ_ —¦"+4Õ¢ØzvY® •‡{Ê,êzéXvUQ}®W³—¸Ró¶—`Y|4È•Ìþ…Ù¿‚Üßnlò8áô—»qu•[Dô´ÎÁ2¹B˜+ëñ.«+¹v ´Œƒ-Ö›19w®@¶õé³ s ©:Gbî¥Wóô¥\œ¡E®´…çr±:-+ $ŒËþRÒ.µ@÷1·R‹«yv¹¸¨ VWÞÄ¡%'„÷Í7r%Hq92oreÙAõß!¶Ïõb¯"¹rÕj±—«\7´„íÍ¥-½Mg;š”AKƒh®“Û¤…[JûW"nl:uæcXé]Yl-r¥dRZ¦ƒ3TP•ï7DyW¹ºM WY+[$3h¯G+±nâbZ`ÙqÑ&W2V…‚”gœû‡œr¬çª¢UEW1öjHé@Ù»‘±LÞMêÛäJnéÕ—à%Áó ±£`_\‰Â\å· – ¡‰ZK\á~‹#q¬í;Ø×s…ŠûdŠÇEu‡(+W¹?XŸV´k¯¦ûSϤڒëxú`\…ƒ®\i3ûŒ‘–ˆfPl+5íèš*GLg‡hsÕ[\4ÀÕOÉ!Êpu=Áû­WZßóÛ>ħ]¨î_•æŠ<Á$®ÊFF KZ±í<{uZ¿äˆÐ-·5æÃŸ&¦W?þãky¿]¸Bó·Usc”S(¬O¾|M¸‚•+¹©%¹*:‰m™+QØ^AÐjÑF&á,y[G–¿ß€ž¡·òˆ»â眕ìÕ\Wð*OEû œ=o[®¨ ,ÂÕÕ\=‹ó °‚öØäJ©8TÅ]VõöÉÌöª°ÏàåjÈ› dq¥–…DðÈW®9ìÖš÷4®–œlÂô>¢k7²Œjî¿ qåµÌ (KΫ¹úñuÙýX“+m'KPPÇIwоA$pÑW"—+ox'×o'ù4°êzµt¥þþ¶êLºÔɇ ¸Ù•j×0Ø¿ü¹Î>Ú´½¹RÏ¡·Ï®Èò¦f®àrF‡¸Æ¥tkÊ^åpå+’ºîþ´Â2 sEÏÐÏ“@é^AI&ƒ|sÕé8¸02ÆcåájåÙ £– Zåêæ7òP6ˆ· šN®BÊZ¶ýw¿RLL ®ÖÕì„áשcQƒ«%õ”¬Wtè£><ìº3X¢G®ààjÈiÁ*®@ޱ€6ír5uX“]ù‹Rsî4‰;fÓtU/.šÏ•¨Â æÍ€h”«™¡Q&\þ GBí•©Û0W¢®ß^).Z˜+¬Ú×i›«[]g@ &ì•Ò›×.7Ä{•ÇÁªóAÚŒyX‘CäÙþ©é 4Ë„ÊÔ0ƒ’UæVS/7ÄGeªŽƒ·V¥øÕÜðUæ "¾†±jŸ+,«8„+=à.¤w¥‚5$h«ò|ðšðãô0×$.Ì•XËÔ{«f„0 kš+¡E?i"’ÅÖa¯üÌ yBœî_}}šªUž*ì)ºu‰•\É ÝX—UFnÚã tø’‡Af´ªJ ‡zÕaÁ{¨ÍÕ÷_ü4ýWœ+¹BW‚N³³±R3»6k¯T®ˆs¥œÛ†A±qȇ„DÏ"YW×:&×9áV\ )÷«F±*Ô ûÇmÎgL¬\Q'Þì1ZºV¿yOM¨“®«k@ôí©`}¬QI:>ÀHBh=1ì(q‡‹#Ó(Wšóm²pEÀôð|ŠEÝ}È“ã~™ÍÏ ÄHF¯wå÷ ¦É`™«¹óÎ{.F›?O8-\ Ž‘ßípÖåªjà !/ÀâÕæ¸WÛpu-±žÏÕÒyFsئ;Ü¡Ù+[f¢6®ÐW{å”ó¤+ZgÔ¨ç_ýøúëP%Gøÿ"Ý+õÝKfBú냯/EÙ+ÔàªÂ~†({e¤»×BjY4¸½Ê\]\Uÿ¡Šˆ)°9ê/aÌn‘0s%Â\9]rºz±‚+ˆM¹ºæö …àÝ*:3V`§dp†Vœ*ß¿چ«Áç±Úgƒ ¬"\¡:W7´êZB÷`*G5Xš«ˆÁô•ÜÜÈ]]ÇæÊÑ ‰ïŽUwÕÙ„«4]éõ¨ÈP –¬ Q4¸òŬÃ`O\ ¬áŠôЕ¹üxãJýå¨FT¿ †éš°‚k.9옫!éÚþ£5+Ïj˜aïºá†¿ í`ã(ë<‘œ/R½Ï–‹úgƒã¢uêÄi4—+hÎ媈;,¾Ü^\Á2ƒrÜytŽiÖ†ìf¸®b³øü«ÔŽÕXüJSÒr‘åÌŸ ç´D ®DͺóÞng?Õ)d= ø¸R¢.Z­»6{><Á\•â ºÇRX–ìg׉P§iÙ§ 1‘KFÈÂÅl4ðnãJD,¾~D®è!rd¨Â~q]¼U¬ÕB“k%Ї#ë,‘iÊhWe7¶L玛^ÍæÁ‚8 W‰'¼P2…?õÒHa¬òóÁ¥ýÙ¿‚Lß¡€v÷Û ®T/ jÈa°ô“ƒs…x®Ì*;ÖjØk¹Z†›}í•€m'ñ}‡æ>– Ê™ç2÷ÌDf‘“à^äcØ«AdrUÒ^©Ò+øWs*£ïÿJ–4&r#hHB)¥ÿŽåäÚàˆ+”ã â B¬ ³;÷ª\…—ƒŽp–¶a)a"-”Qáê¾2˜ÊU¢¹: WeZcÚWWð=¯²˜¥ %-®î¿\—ò¤ÂO6W]sezHNÔËšàÊ!ãR‡L¦f} J¬yeЂ•£ÖP†ý9Wd^dÀêŒ+™Žˆ ˜‹g@­b€Ý`Á{ªSÆ^ )²AeÚ¤e…­;¾ù6#‡¹—x)ÉX¢s5¿ÈùÊ2:ŽÃÅáãqE³É¥f3Ú»{+HîTbéO·A®°Ð}ËR£àÆ~ûz® ¥U'ŽWŠqW ÊD¢ºçJ›¬”,kªÅPÍã Ÿ^WŒƒ‚æiÔ'+{h¨),T®P«6ýö•\•Š2AuPUW«ý+븦?å…+%5iÀ+BVGâJßß^è¡xm—+½L8,\ Püý\a)®Ä!¸‚À*Œ•œÀwÀì\Éÿ+æJ/ÿ“º´Ó£½b¯5÷Y!¢t®vÏû±†+9Mlc¼ÏÛÎÄJ€«xý'Ä^ hûÛö®,»ÜÕV FŸ „ÌUÁy ±oÁÕµ^ï_^žªq… ÁpJCuð2§ƒ ætÓ°*Ì•z5кkÕtuþôzúòMß'£¥fŠâÊ›WlÖ*Ô_ÂÉ‚‘בÔ4™Ó©1®–N]«ë־랾о¾®<ª¹‚~ÖÔ¶Ç2ÁŒ9^Ø+ˆ²\ÁÂl]®¦ÔW®û󱲺Wzª4ˆws¡'6»˜+w|Ê mE{õ0qõ–k¯ÆàŒÄ\¹¸2èÀ*¨ê#pQË^©C†¨=ãùÂÕr૬½‚ܾ<¨ŠÒ·5#° ÅCÐ86ÊUVež»+Q•«Ûaþúàå0’‡\#ÉÀÊÈà€¸ósh7ÞžÃU)ƒ WûçÙÎ÷¯æ=~ƒWðuLøô2Xr5ä\¦Ð~>[ÆÚ®¹š0hÍœ Š"P;”ë»æXÏ•Ï(ËU½uœH]­åj‰]¹WEÒ7EB=®bsä ¸ÒC»êª Wp°*fg®êÅ£Ïð–äªÔ˜n᪦½J8ïœÍäøVn,®¥ã±íÃUtÎÂ\‰²\A í««µ\ ²î‰‡+øÕ˜é Z´W·8ÃŽXÙ¸¹ªk¯ -ùKíðD{…(k…jûbsôÄU­½j ùÒÍ–A|d'ûÁ !âæƒ;$Ø7ç@A® Îêaxí(ÇÈÕUWËbÍíÔ Èée[©â€ß³½1n¥góøU.WåÚa™ó¥á-¿ ,bÎÉ@-­°4á0Œëû¶ç*¸ žÉjq…ιš?7¨7„õ\—gsCdÞ„«³;e²w>¸§{¥r…ïç3}F{.-ˆˆ_è똫€Û®%ȨÌÕ[fœa »ƒq¦BX÷³¯å U¹ŠÈò^–«œÌíqUÏ^ ‚΃ôµàx,h’«Ë”yÂ)Ó^ma®à›™“.ݽß~·V I.7WYz¤Þ[%›~]ìj˜+Õåé+í´}¬ ¬³’`¤–®®&k+®P…+#â€N¹¨G¥v'(¹\Õ¶W“ÉúÕv\­x`Έ…¾Í­Q®â†A¥qîá.µ íÀÕÅ}ÏàJ`+®\+«Î¡ R]€È9NWVj5&wêÚL®„Ø‚«,¿Y`Ûpå<ù)Wâý%T­WÆÅ`S%VØ+èÎDC\a#®¿¯£«ë1¯Í¸ Nø°"Eë~{\!Þ^UÁ\%ùž³ÒjÖŒCÝ76 æŠ |•Žg¯òò…» Í^A&%Ø1g&ô4‚™\A?cñE ØÌ•Ï>ÈGªfGßIWN›5ƃ0v-m]&b®ü®;Ô]á{êÊÁvW¥-‰®4Åb¹l· Mi«Tg? Úª½Ê«0WÆ¡¨cpK¶ûu\ ×áÖ#pUÚñÑíxC>CWƒ›2ÖƒöÍÈǰW5Ý+æé‘+çQ®"`™\5š÷£{Õ:Wˆâj0F>û‚ðz®`ó䙫(®D#\‰D®ô8…Ô”(0!šÜßžþQãÞ`bÕ WHãJ]¼)m¯,\5k¯ÒÚÊ\¸R6ÇåÊ´Wõk¯[㪭qPyhc+½úkaƒe±WhsLº«*XéaÑvæÎY\©…~*:î˜wó4ÊÚâJ4ÆB\9¶;Òý¯ó¯Œ…&MŽƒiªÜYÛ\‰d®<«vù Xæ~ y—Û›nÎÜ\5¶Fc¯lû®œOk²¨é3¦¹Úa„ã_ê`µÃ•HåJx’& »ê<,,ÁÒ–¸ŠE«VpØ-9ynGW¬h¬| Xg¯Ì•ñfýöøŠ(|?N®š™;«-‰«BçP3½È¶Q‡µ)®b‘AaÒÜ\µâ3¨Â4{»3›×eH¹O(¬‰½µr…†¹qp)\‰Ü³‘:W§ÅÛå*îÞêDôô q…®à)þ–Äz[ÐÍr%óM!Tû¼Æ}Áöè„«Áée{T‰Ì£‰ —@k“+D¯‚øp\©5O¸*=#TR<@ €tÁUáÆýsE'\c,VŸ5ß¿²qÕj\tб}D®ƒ5Fcåï¡y\î!D/\ß¼ W-í“YÁ•×UÍ´ž:ÔlÌU‡\‰\®<Ã`¾%Ód†Ê­¶Æ•5½l®ì“î£påK‚œ{_Xð:W•¶ÚÁ1kŒ«å)ŽñX¹Óó­Ú+CL!bFÜ}¹R½@[(¦Ž é„+8¸rÔ¾jßð2½*÷ÉÕ2´×á â¨\¹5Û6Ð0#" p¥g…–³e’«À¶åê„gñýøôšÄÕ­ù«°’5ÜóÇ-5.Ú!W ­Ç6$LX}þI|ÿùëµNÎs¢µš+uBî(H„¡®T#ErÏ/\‰põãë…¦·©òÒùË·§hRÄ® h:÷U»Üµòs-s¥‡o•{–÷\½¿ý9i&¬¹qP¿9XÚŽ’Ç&öáêZp’‡T]…¹’i6¦@&#µaËãàæ\I¨¶ç*WW1\9'74º€5C,?¡m¿ÝHURÑ^T-é…+¡r5¤\ÄLcÍ„PÏS$„šŽ_Ù¸u¸’ùÀ¶çêýÅ[Þ·OájHR÷â^AÆG‘Ý'5¢/{e»Û¢\‰]¸:ÍÕÏxJæJDreSÜ’ø¶^œ÷0á+h×WÖ4ŸUü+o†Š\ÝcWaiq†é±\Ùv”Z-¬ÞÒ ”âsÌq7]ƒAE®¦xûÝ`%ÅEu®w2€Œ€á D,WXjz5Ì•áÚ¸*íÊ^!ž+Ã`‘zÅžæâ\A0Wûr%Ns8ôûc²EìÕ 2¹BA®ÈnËv¹²L®Jv ˆ=¸ºŒ„·§ë°Vu¸Â¢Ï²•-É亮lÅJ¦H…ÓͨÊU¾®’¸Ò’ )AÇ•¥ ™Á˜«¨ 2Ô».¬=-{Ú^4ö];¸*›«+®°ÒOÍ•Lu~Þ:WÂmè•UÜ©êéêÍé\•ãJkEIêCÃç¼váÊՇĕĪXþ%è“xtÀ¼+¸f÷Œ°u®†”ŽCzèj ”5²pßrüJXâ¶Î pµñ9¯9Ît'—«pL%õ!’Íí )üšçÊo¯ ¬½¸Ê¶WËt0+ï òun=•Ó>WÂÜÒÀ\åsQ–+XF–n¸Bˆ«B“Zxji£e®2°*Ε 1QÑü|Ш¾âpFËúíØœ«<]!+xgÖ™~»ÉUë磸Š*‚p'óm™«!ã2ź¢1²RW«g®Êµž]ÿ•¹ºL ¿üåå©.WžéP® :âÊzv"Ⱦ#'Wuëy?½ž¾|Ó÷É—Þý«!«bOQ÷H±ì>mž«à,¦Ü¢}¸ºní»îéKÝ×wã*Ë\•æ Úo_Ô£ˆ2j¸²„•tõãë«Ä}È™\´%ê>Ð_µÍ•ˆ±We¼+?W5ç8ï/Woéç&Æ]Í•ÊÇU UAìÆ•8ãùÂÕrà«:W¥> ¸WÊÂãA¸*4 *)k6äê¶D˜µ>¸¯¹R6©ŽUç\a].”h®Ðbî®_ÄÒfÐ<-´Î•6Ûpi©È"ˆ¾¸72W΂ãîÓ3Wª¯]”+óüJ­¹s~~† W؆«è8ÃÒÛçJø¸‚&‹Û+sE%]­ÈÏc¯V¤Oó`]}s™c`mC ®Ì8]­9ïœ_,©T˜Á²í´àŠíž\¡ÐE/W…|8ûT0??C~õÜ2 j@”,<õ>³¹;qµÊ^åV£,êaa95 ™ü ®\ã–œU\w Wf–ß:þU~~†mí•ï ™°Ö×=\Í^ŠœVòr…ªsçüü Y`•çJÛ…Uq޳fîìu5¡©‡ôu]dG®VõÁ}ã ‚Ôá¶ù\-ͽ] ÊLP1gë¢$3¾­]®’›]œ+óB5®Öù¢¾7ؼ)•˜Ê<;X¾í@\•¿7èöK´—Û0‹«2a†½¹zËÒÊ1Z€+´šÛ0‡+”YÆ qÕä'q\Û€+ÔÓÕª¹³ïÝ6®D±í¢v¿ ¢e®R§Ö5nMsÛëùíëæÎQö –9ȇä*É`¡ì ™cDå3&%håJhƒz5«.W×Íí·ÒK¹1™„IK©Ó¨ÂrãǶ\!«dF€+”(Ȳ+WSýA2ÛIëƒÑ~ Û/›ã‰ª{ŠN— OZ:•˜Ú /4OqíZ'\CTçêNÔ9sŽý ß?l#1*îý¸ÕÂ~|(Ï•ådd{zåj*¾"&³Ä¼ýxÕqÚ õ惷Êê×B «¹B€+Š_uq… ¸zÿû×5öêÞ§òkºçênׯ`­ä V{ep¬ô±\¡æƒ‘3ç‡ÅƒÏçÊýflÈUÍøÕÍ^M.ËŒƒ6O¶é6ºãê†Ö§Wá<>˜Æ•ýÌR©¿½WÔÕLÓ÷G±W®àä ¹[pµÞ݆ƒ+,TU™ûÞ¡º¢®æ} ï/…íÙÐnë“ùý²s®`LÅ’6|ñèËϱ٠[LWŽG* |ꞈ?WÐ Ôå.@õ¨‹Ý:ª…äʶv€9Í(òëÉöÎŒàˆI*Wc](f{ãÊû#R¨ócq%„y:Þêã ÇäJU#ÍÑ€\ýõî_m\c»ÔX¯Î•õô-|îäáíÕÖ5Öw¨…]ƒ«ðfW¬zþsµuÍb8ï¬c®B³¾Ç•¥â ×MþëåñÚÃQ¸2vËÔ­ ñ¹Ì•5QpÇènµKsåÜf°æê°õïN¹ Õ>C¹©Ø±FU®°p…¢÷Ñ;WûÔ¨B‚Kß(W2ÚÚОq”ÎmµYW݇«ˆZB(\K¨—U1\í9Ää F¢«ú:¯ùRƒ«¹O"äaåä±ë«Ýj¾lZ›£WäÌ< ?gн]÷ªq]ÅÕæè¼†B®åÊó ‘§*躱lš+m"â 3'yB³ Js¥ê\û©k®HÚÏ~sGwÄT®<¡¯³á°Ä¶È.|†°×¸ò>œýè‘+_.V9>Ï™y(®PÀ¿‚+è[ʼn¸²äÌÝáŽõ]Ä–ÛPÿÖΕ8WöBÞô©à܆±\ù*ã}X®lOZ1](z?.ƒß!WU’„ã°öÊ8 P%iæ!¸Â²šSìòGáÊš{ªû¡%æJÏcÐ#WËbXI®`t7èÏ©m]Áj2`›£ÕÉ‘ôÏU`“ZW°r…~¸²,ßÙðõµSañìúåjIÇ€‚ö ¶G²¼z<®Ø—¥ª¥òV1®Ä‡à ™$]o9Ÿ_vox}])ÝÃrÖ’”sc®üþP®Œ( fo}.ÕØWÄe°oÍÈó³ÍUá›ws%l«‡më êøŽ°·ŸÁ82W·<)v¡NÑÕ ˜ÅMøG;¤õ<]®Ð+Wfd+¹"®;lÚéjïÇâ¯÷ÖÊn‡cs¥Yd »U5eÀ]gö'ÌOoÕÒ£áÄ¥‚`bœAÏR ˆÎû „%TGêÌÞ¦Âk+{ »ÖUëºÚ°ßb7“ÚÜä°¡O0WÌsÅ\1WÌsÅ\1WÌsÅ\1WÌsÅ\1WÌsÅÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂRO¾ÿâ§ë?gÊ‹üøŠû[£?r—Ô÷Wk´Ú ÷~¼¯zŽþíª¾§k¾ùñõóOS›ž//È‹0Ÿ^gÅÄ~$ïýÕ­6#t§?¾~ùßF媾KÍ_.ÿýñ `]úÈUÅï/7e,/Â=ÝŸMÂG²Þ_­Ñj3y›Rïô-厕«Ú[¬}ǯO®»ép||šZrù÷öÓò"üÙ·‡å±ÉzµF«Í¸<ÓË8ôDŸ¹r§i7üö`o±û;öìh5äÎÕód韖fçW7ÅdÖrÚû«5Zm†8]ì ÏüÌɾ¥XyUµÅžï8}þ·¯ò¯n*>ãÖº‡åE„òp³âñ‘…ØÙÁ’\-͸=îËn.7ðé•ÞiÚý.WU[ìûŽÓåù‘ËÕâŸöÍ•lÆ4ÝÌÇÝ–Ð;=e SóÐ&µëùŽÓdÞz ¯ãüÍN§ƒò³“ZúµF«¬Ÿ@b æ8ø9Ô”£¶Ø÷7pÏ ±Œ.ü«›÷ø¼¼ˆ7>©I}ÿ&ö ÏŠ¥P}êçLó*¹º_Ç÷ç#r•g¸qùtqÊÕÒŒÛVn‹Üib7X®ª^Ç÷÷¿#ΰ4>=.:)äýå©Ç¸¨2œ›qOi·%ï4±È«ª×ñ}ÇõžäGÂUÎjÂÛì)ô·Ž#;iÆÉ¼­åN“Ýöùªçûÿçëx¾ãLB,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,JLާë{NO9Ÿda®¼bI‰Æ\±0W,{quOýþòôL¿½þû¯—Wo_þô|þ?S:°é׿ü×ë‹çÙYä4%ºbm¨\½ÝÓA¿¿, Á>ÿtáfâêÛU_ï WË_hé/Wý°׸º§ƒ¾f…œ Ò—oS^Ãé'«[ÆÃéÅê%¬—ó§ÿöóWVƒÂÕ’z¡ç–®îÍÂÕí/§/ß”Ò,÷à•äj2C'Wó_”Ò,Êl\˜«‹bÒíËâ`]·E½(ÿºþB󯘮yBøùßx:hŸ>Øf}w®¦_œ§_\Þ»¼Ø9}v;òãëór±¯v5q¯Â±Ä¯Œ(Õ´Žƒk5àátÿËçœãWŒ•ì¢*¢TYY¬'–ò“žá°wC§by¬–&äÿ’Æhæendstream endobj 110 0 obj << /Filter /FlateDecode /Length 873 >> stream xÚÅ–_sÓ8Àßó)üVå¨Ë–dû†òG˜9þæ­ð ÈJb°-#ËSrŸž•¥§”»s†öAZíj÷·òn¤ÇëÅê’æA,aÁz{*8M£Œå£Y”¤4X—ÁºÂ–!M(Š£¦ñ»Ës§Þø±¼ÐjhK«+õ Ç1̰Sýáüçqõ;0‹‚…²SqŠ¢7•‹p}'ž·FZ,ÝȲâFž¨_¾¶ñN„ NOƒsm}5[­®/„ aE|žX/³<•Üp»÷Z×å<„Z™ãFŸ„9tcºÞI2qr…Îîp}…ê¶>Ì—ºj.„bŸãxrŽÐ£ÓóbªmxÕÎ{úy¨ô˜’0¼Ý 5×3vÏ:κjeo™;ía…ªg°ã¦äÏÃc?À÷ÅÓ²üU‡w,âFjq¯"¶_Sš“,)¼cl㧸 ®tÿ3™`)ÉnUBcûçÝ&^¼ÕsSýNŠõëûÀ~né ˜ë‹ ù¼âûÉñÅýï×+‹§ëÌ8À7÷p‚iÄ ™E³ø¼ˆXÊ(-&ÓQEÒdŽ#,®ž78þR‹7ðô‡ÏÇGA`¥ÇWÁT¼ÁÁye8u'ˆ[¸qŒžì¹æÂH]ýSµ»e˜2†:0Rõa§ÚÞ¥MNž SɆ*ß 9Îûõ™¤9Ü–b™äèÓ’RÄwKŒüúž÷n²Za*gr£PM7olœ· q-9|Uˆe¿€ÝH€÷‹B¶6šÑª*ýoËï3€£ôÐÓª:ë;ÞžAîAjkG`vbßí!”àµ]pw@Ñ2d ¼j¥Óñ®ÓÊe½w>lNVs““ §ÞOÉûAËÞYW½7Pwpßêˆ5ÎÐG) ìÊwTv2EìÝÒû8%㓨7M ŒžI=š§èÚòú­%\¼ÂÔ'}£3p߸å ï¡QÆ©jòÛ!ýÜ_mB9<]V-<ÎìÇÇd|HÕªÝUf(¥[Z¹¡æf\ômMR‚ä!;cÕmáGq´»]`w½¯ŽÚV>–O«tÒÆZîàÆŒÁ»™a Ljozlù¯ª]ØÒendstream endobj 111 0 obj << /Filter /FlateDecode /Length 1055 >> stream xÚµWMoã6½çWè¡T×RMê¨{(Ð ÈÁØKºF¢mîÊ”@ÑMüïËáP‰ìØË‹\,rÈ™yóf†¤ÿXÝýúWBgeTf,›­Ödzã(ÏŠY–æ‹ÓÙªž=N·A˜f䫨Œ (QAHÉ&ã%f+pPsÃaĈi–ùG芛V£øÈZ‹æ`׿‹tÁU›¤ XNþ XA„îEs8£«6'~´ƒ/«¿OBZÌBJ£2õÁôûÆXW4 „ædÊ,ed½W]«P°ãßœû{ømH¥ê…6=L(áu-m Š7¸èñY ¿â(#°ÎQØw[¡e…Z6(ûq6Öõø+0¹µJ¥åzË ŽºV\áàÑ~r"pÒ5­1¢Æ ÝáªÞò®G)_¡‡ q¢{gð í ”ŽFܽkµ@iÕjmw9º•GÂ߬k¸•8'Ÿƒ"y%2¦–jpL€¨ç0ÍÈ“¥Ò¯(aw÷\‚"&n9%ÀŽSÇO\‹JB|@HkÙ®ªÁ¹+ CI\QQPeAdßVaü…Ë€õ§ø«¤K¹¯[ƒqî½ò“4[5\o„·Œu$t8Ô˜xÆ•¼×†ÄB{ú>ee Z»Øú;ádNÓª4ûZ@zÆ8&‡\ì- ׉V∲•›-JnœZ¡ìè”ÉN<2ë‘æèñw[\,%]Ûàà·¿úQªªà'¤ [ÌC¶ðÐ`®‹yz*\øÉ¹ý‰#ifo—({qá üM0§ù÷ðm…ò{ßÅÖ¶ë°¶y5‘c>Ƴ> 4ø@¿ É$*qžæ ~¢ñÕÄÇÄÚÓf'lø®·gÜâ*Ò¡TBÝÊÙ(×!±×QÊè±ÉˆŽ³<Ò{kaJãd=йÂ-'Y b%¶R`RX e™ÜáO}Ç•O¾¯+{Ž,ÁðŽ?Oª(e¿ÎÝ<0[âÇ^Kâ:…’Û»Â(\Çðžþ¸ôúl¤ÿ`]ü|Æîèˆ8§uAÇ;;\rvÉ•=U ÖÛ¼UâyÉü¸yª—ñKÈr·ôí֓ᬘÞöT¢KOº©·˜Ÿ)qn´8LØ~Äל[„ÓR®íe9™~ œÝÕÕ>U‡w0_ÀðØìÅÇ@ÎN®-©ŒÃ ‡@~=àšÑíÒUÛ)ð¹­Úã[\sý Um) õQµhß-fàJ» àˆ«ÐßÜ,ò×ù¹ÀÎy(Ϊ«YX7‰ÀgIHý3Â߉»=Ɖ àùËõ¤¤_¿wøÇá.Ü‰Ä aK:n’ùûŒ} Â2I WŒSù˜zàL+”K‡ÃÅö1aŸ¹˜ÒÊÝð*tÚ‡NÜTšßûמeQ‘gö=Ââˆf1²O3P¼ûsu÷?<ÌòBendstream endobj 112 0 obj << /BitsPerComponent 8 /ColorSpace [ /Indexed /DeviceRGB 89 511 0 R ] /Filter /FlateDecode /Height 600 /Subtype /Image /Type /XObject /Width 600 /Length 9713 >> stream xÚíÝ {ë¸u`v®æÞ$îžzÒ´uws—q'éM¢¤[¦íQº_ªNjãÿÿ‘’Iq@ÄrH~çIf<–hI䫃C„@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Äö¢ØOPõ?OµûöOMüѺ7Fª÷GãGÏÉäj?_Dõ?åÐìQ«?aýÔÄŸº÷Eó6zÇí)óÞ“«z—“މMÃê­ÀUîÃà‹˜~mFÀàŠ‰+VùŠx$SW©aY¤­¾8ã ®¶åêVœ±ve®ið?¸JæÊD†„¾„aô™¬\u9®B|š[‡+r®ò™ÂjQ5ÿ„«P¬$,]O‚;,Z,°hTÂU@URY"­+âˆK‹æÝÝp‚U÷ò‰eW²Ÿ•XêN ið¶á*¸«ÁOùj~¾NìzÖ¼ò"¸ ÄJþÂóC³+Uo0\­u5ú÷fPÌ®‡ 2ÛSBÙ\k?¡ ãêtZãŠH튬‘+¢a¨<Ç…« ®N§–¯«Á7Ÿ›˜œ°&Hßâ¡ áêÔÄŠvt "¯–p InWêöÚT#«Á]1‚EŠs âu€wÕÏд2i•>®Hè]±ê#uèTƒ«Õ®ZVÍK°Tõ9 þ)8',äpµú£T˜ÚË8M[XÚ¹š²Ñ¹b:Ú®bG]Võ×X¥Í^öÿºh±6†«»jÏ»îÑ¥”EÃZÝΕ€«ã¹j‹«›†“9eiûÓçÝ 4)êáêP®fn$¬ÒÇ•"aÁÕ]®Ú¶P-K{wËüš\ÖÕŒUk@KçŠ4³æWÉY‘Â*õ¬tãIÑ0\ÉÕœÕMÀI-ËÕßìá*%+=l†Wpes*8½|Ö q˜ÊÒ ÖUt› ®çJW³a5)«\n G®Ú‘s ËÀUÎâʲhÑÕpÇkÏp•˜•*­Èq¤,Òµ}b8÷Çü \ÅU©`¥l®N}Ê*§®TX¤fWÇpUZ¦«qÊ’©ˆ ®ô³;\íß•’•u!&;°˜s®vìJÊôOïRV9œWq*gG¬à*Tqe'aµ¡Šqê5ä«Ý»R·‚æ Ä-¬¾1tM@ÈW»w¥gµ«KY¥ûÐb¸Ú¥+²¬ÙM³ª S–3+¸jâíYÞIðîë½¹Ò°Z¼âB·”%ʲ,YÁU—âIþp-öáŠÌ5ûèîÒÍE4‚U•{¶ê5]ÞÚU}¥KW‹“„Ò¨|wKYÌ&ïËæêõñ©ûñ:n ‹ÌË=­LVzVšQųߜ|dÑa!_Ù¸"7VЉ H¨`•–¬\5š>û(x¹ßA}Õ#±feœw¥‡e+k8-úÁÏ_ek§ÉV›sÕ°(u5»Õµ¾1¬,kÖ®¸¾ì Y‚ôéÊ-a aYÈ¢Á!Û©³àÊ®À"'VKM`•–ùŠ”£þàj«®ÌÅ•æôϸ"ïÖRÊ¢ñpäd,¸²£eb¥éV0Θx²•ukünó\íÄ•¡fÚ…®Ì}ZSX¥>[M=m Ì‚+[V¡]`éR V„ÎòÎÞæC¶red¥]˜oáâÎiYV?$~|*ˆ|µ W ¬´%úâÊ‚3X¥®ÂšNaÄ\­-®Uºò–%„,McH¤ºW®¶îª\JW‚T¢õàŒCþN˲ºË8[bWXM{«¦s{˜×@ÚNA£ºY•˜7…pµžÕä>õäþË÷TèS–Ê%ñ–WK¬ÊeVã%Z‚·ÐjÎ …:‹\mÓ•EºúÛãm\)SÖÒÕèár uÁUVª]\Ma-s É;WreËjé~œåɲO޲Hðîv€«¬¬&aWÁ*­]qƒWkköA«Db…+ç”Å\™Yqe»fÄ–“,¸ÚŒ+ûV0Œ+5¬r,‚«í²´|½å>­‘Å)cÁUVK³~¸ŒÃ›Á›„Wkkv»fÐþÏaYË‚«b ¬\ gñ_{´Oê”Un \­fÕg+ u¬ýSÁÕNŠ+¡Z’rí‘>ùÊ‚«ý°2v¶ûh ,‹»îáj5ûÿ£¬€e™²XЂ«•ÅU,WʶPØÎ@W;`Ç•>em¡Ì‚«õ¬b¹òOYpÅ•peeÇ–ÕÜFpÅÍ•`“®tm¡EcHpµyVQ]y¦,¸Ú|q³Ô§¬YpµVÆ+Î`96†pµVBPܣ뜲àjã§‚ÆîèªaéeÁÕÆkvÓ ypOú”UÂgW«X9/€9ee¿’Wë‹+ ¢Ð‡öä" ®öÁ*+cÊ*ኣ«U5»æHF8´'kYpŇWÚ”5k áŠÃnÀ*IChHYY«_›8ºr^ß™6Ï*ÙTFXå®û6¶¾s€â*¡+«”µKW[/µ “®R5„&X½¬]ºÒ¯ïÌÑU(V ]éË÷®1D¾Ê]c•–^ÖNÇ‹z¬ïœm‰ªp¬’º2¤,ÇùضÔϰõ²Jìj!e•{tåñ²¹²UŒUjWY”Ö±]êaÐ÷4,M<åo }§ Ù ýXJ\¿SþÆ“«Ô•{hVÚÁ}³5“(*,bP¿Çé¿*ú÷_Ý~o{X¶ÄJíŠ&‹.þ¤3YÄàÌ0J¾z{Ö^dÔgeu¿…ÿMaƒ3ÃX×ïØ»ª÷wXV6÷{Å©ãG²hÖç°ŸúêZê8rÝî÷7bÉÚu¾ÊÉjvœyºÒ÷”êC:¸«¼¬œ`ete–W|jvÍ0w4Ðê‚Vlí*ëЮ²³r¾5›+­,ï3ÃýºbÀÊu®ÊÆÊ, ®˜±šÏ°Í×U'ëDÖ^]1aå6§hfWº¤åÓîÔVNSkçweW¬X¹,1ÁÁ•¦9t•µSWŒX¹,]B\©“–cc¸KW¬X9-µD<\)“–¬=ºbÆÊemK6®”IËAÖ]qcÕÞÒÙUŒËø³¤eßîÏ?Ví­ò´9W Z¶°b­?¨Z-5‰+†¬Ú™ù¢ºŠ¼‚ô`§ÚÉŠr€/Ýêƒ×â!µ+ެì+w†®fI˪1Œq€ßž{M—÷ŸÒºbÉj뮦´,dÅY7¼_hâªi ¿l¿9OV֮ؕWºöpK¹ü.òU¿È=SV»p5¡ÕËêw~‚úê³ò‡—ûõUÑWV{q5¢%Ãbñ ×GùJšlôeûÄ—•5,þ®´N5¬~ç'q•ò4´ÿDÕ'- ήŒ3Êñêm·³UËš†¸³â ËèªÙNr5J[*XqŽÃ¥zæœðý|pÀª[tu»pH›r5;GŒïªÖôrgtEa]Éï oW‹¸ÓÆX y®ÔŠîêíù©©Ý«ª}âJ}îÆU)¶ïжçJ4—Î’¸jûEkXÉÚÁº„ܤ« «ófbuÛù óUýï»$®ÚŽöæ¤WÀUZWE—¯œvš^î‹ø×qzXMo \™Ï bÀjê«$ý Ý8†·ç4®ŠÚU‘f¥uÿ#¿<-Åa7a• V{××_Ãá K›°¶íJHW©®ã$uÕʪ>à Kç*Ä"õ”õ“•¥ªC:¢«—û§D®DÑ™-¬»R^?Û‡+ÑŸír…µ[Wš‰6÷æ*ö:ëpµ)WÄcXCW´#Wº v”¯Ä`øõV\‘Ø+‘ÖUºóÁ‰+†°hôÏv\Ì|æG¿¹ )'+±W´Ö[X4ÍZDº®Rg[yӕؾ£›'¹ºêÔvÁ»IÉÎêH®¸ÁR¸2 õÛ|ºÚ›+®°n®HUryR¡ü¬áJLæ>áçjP;懴vµzÎ÷ã¹ò]í…%,ÃXcOW”ÛTÏ*˜«×ÇâýÿõUñT¹ê§äcçŠ#¬…UrfLÈpO=åäJNÓÍDÄÍ•P­ÁÁÇY·kĸ °:%?À1\‘‡+°hñý[ÃâÁj)]íožíP Åpe^1Õ +VÁ\uó¥çÐNãŠìV~XVKäØŒñcÂ*´«:dèe]1Mê*fïÊbL2qKWá\Õý u¤îg X‚,Ë5ié¦úͤ+¿~Ñ:˜ö‹j?mVXÖk[š;P™¥« ®rå«• a^XA\¿tÐU;§ßúJû5Ê+T¾ÚLºòî]•­¢»âËÇY|Ø‘«÷eu8,rf¥hõø±:ž+f°Ü]‘Ø€«¸ïe{>húÈÑ`QWÄŠU`W]õ¾ŠU6WÑ`ÆUו8ß±vµ+í!²-ÛÇÕy¶ƒVQ\]8·ƒ¦ïR†ËÝ•rŒqbeNWt•Y€«ª|çܪ’4åƒåœ¯Ô³°/Va]-.-È•âÛDù`‘#«m¸Ê{€³¹:YÔ°rÕÝ¡™4’±bìŠ"Ãl`‘ƒ êW#díêÚÕë T·çt•v)¹«`9úÊ>]åtwOÁrwÅs°h4WoÏ·ñí,çg°OX ÛBÛÞöÿýðáÃ_êŸË‰U¼|eåO›Ó’¸âË6]õ®˜ÞŠ3JW§ ‰£¿úªËj)N]¥‚eëêçßýð¶wº¤«HëZöšt³Îðp•–…«ÿû$]}³Nðô_Gsõúøþ¿—ÇÉ´ëð6 +þúƒ+Â4°lÊ«Ÿ|ø½¯R»úÅ_I]¼Y8_Ù$¬°,ÒU%êÇ_ù‹ï}øÕ¿ÿÝ}õ¾át©¾ênªÐÎê—È X®êŠ}¿Î›U WVýW‹ÓtóÛ¸Š˦lÿÅßýiê¿ÿ·ŸØ¹*Y¸Á_6^ŠËötðucøÍ¿þľh·Ù¯ûíµNXI`Y¸øI“­~™¥«ñ²Ø­qúEå¹ aö5V®bòsõ³*YýÃw?|øµOÜÓUWVq®ÒÙËw¾ö8drÅ–•«ºtÿתhç–®b¸êjrC}UÏÝpnrÕu\¹ßZQ‘ –ÈËÆÕÏe¦ú×ï5¼|šQVéÊÃU…ær'^¾øhWe)ù„œý¢. +&,«ºýí{M¯ýËo~øÕL·'V¬â¸ªç)ª³ÐåÎìJ¼ýç<_%we°"²<ü·?hžö³ßšî1 á8~W½\Õ¥Sý]ô}ÝdY9]e‡åÐŽ) Rî Š<Ò•ß:&õ9¡ÉU=Ç{ãK;É{ºáÏÖ®bôsÔwùöì¹UÕ!ÛÁóÊ|¸»j’Ñùéú8kV$Xö®^¿Ý5|“úJät5cÇUý «sBÖó3ø%¬8m¡}3Ø»šNXÄÌUæürÿ´5W1`Í\]ºþ⋼jQUçúRêË}ÝysþÖsõ0µUœ~$¨~ø«\®¦{®œÂ(°¦®êÁ͉MýC=àãí¹*CëûÇ›|u–œ~I>&Ο¢/«g_ &®Npå“°ÂÚ¸j& hNªå<øï¾~{®É4ÕEíª&W=F^åꟛý˜«ôKW1×›àã*+¬‰«~¯\›Æ°úO9ÃtíêZ?õcÔ<õüù~Ø<ñ²gW›ÌWŽ +,•«Kûý4»úòóÉÞÀL®æ¬²»bó²§¼°È”¯D7#þÌ• º°v•3_y¦«C¸rMXaѼ¾ª)Éúª¤pÕje WÍc/¿QýþËvhÈ5Ëù`éÛ Õs kÖÑ0쿺´ƒâ‡uÿ•ôS?V÷’~Ùœ+VgIßÏãÊwGÅUFXöîdlA°‚«µ + ,W³¥-Y dpù~ÂUtXÞ®6œ®Žã*,‡q2$àj[®|V X¶³_±kU¬à*@ kW®\HXÖ°HÅbµ+n¬à*T²Bj¼¯ÁÞ•`îêW¡V€±Éþ®6œ®åê乃Ëõ¬àj·®<ÖZX®&u:?Vp2a­ƒåæjx+ΖÓÕ‘\y'¬U°Ê«Q*qcWÁÖX.®ºK>Üîœ÷Ø{Gr埰üa¹”íæ~°M¥«£¹JË)]qYÃy}º:–« Ë–£+ALY¹îº£¹J k‹®J¸J˜°ü`mÓÕúoäá\¥…Eb{®”ŸÒu¿ÌÕª„å ®ã*),gW¼V¯ôßmGsµ.a9Ã"w+ÄÓ•€«ˆ ËÖö\…IWÇsµ2a9 ´ýæÒÕ!]­†UºÙ’+õgƒ«ø ËÖN\à*A²n »Q r5ý`òxì°ºZ°la‘”}4ƒu•Öö\éXÁ'X>®v’®Žé*@Kh‹<°ì$]ÖU X®ö’®"ànhí\Ü™]…HX˰¶æJóyø¸ê×ñº\]%€åîŠgºââª^J®–{]˘ Ë–í]Yyî©x°Zxîuxã&¬%X.®ÜÚ0]6_…IX °,F_±@:]Eª¯º¥äÜ÷L]Ňeq‡ˆ8 Ò²båª_ŸI;çx~W––•+Á#´éŠ“+®/!a™`YŒ¾"&°§«»JËfTß;œWí£˜øª_¢ƒ«P-¡Öv\…NWw\E©ÚçWrn¿{ƒUz•íìY±ÊW/÷ 'îù*\K¨†µWÌ èfUõ-¸:…;4åf›ÁÅtå~Òë×)‹¿«p Kk®¼ßf¼|.~{ ®âÁ²»i‚8³òß9ðë#W1a™\ña¡º:t¿hð–pËèJÊbÑÛ#]Å<Àruþ®bÁ2»Úï%¸ ž°F°–\1 íU(¸â“°†°š0ÄÝU¥„«˜°š¦Ž9¬8é ®B·„7Xí=Þ® ¬¸ºÚÆù`ð„ÕÃj—QÚ¬+W,a‘ìM0œî7]ÁU„–°…%ó•ñî»Z½Gà*BÂ’°ˆL}TD‚ø²‚+– «†%AC¾âìêW,V›± xöÍ ®"Â"£bíJÀ_X¥1_í¸º‚«x%•Ýi!SV1›A¸Š—°¨+²˜®à*RÂ’Õ“l ˜®à*^¢¾z?^º‚«h°dg»fÊž/áÀUTXíE5¬=wµÃUTXÝÅAíÐûMWp«v§nÆ4ÒݱºçtW‘õ®T°,¶7]ÁUœÝÚ‘‘ÿVß±ºçtW‘öëmð•¢Æ"άàŠ{K8¸Ók|c!cW®X·„·±¢#XD¼[A¸Ú¬Û0ö~Ð;ƒˆŸ®à*,š°º zçÍ ®˜×î};HÃsû£¤+¸ŠóµÜBOƒãY%]ÁU°¥+¸ŠV»Ó­ÒšÜ’«Ð·OÂU´K­òf¬Té ®âÁ"íÜi”+c%cWq`õ×qtwfUFœè®RÀºÝ5¡|0S•.]ñqU0ˆ`{ü†Š´¥WzXÉŠöh®ÞžU«¥š]åONE°¯ò|ôÕ¼¢O+aºŠs8/E;sûµ^ÞrÛ®¼vºr4ƒ˜ž!&†•2]E9œoϽ¦ËûO[wåËÎUbX)ÓU¤uÃû…&tK¦nÉ•êŠìNÐ6Î ùÊÊÕÉÇÕ2«¤°Òõ1Ä«¯>û(x¹ß~}å«¿ÙyUBXiÓU¤Ãùú(Ï5Ùjk®œ÷}»„‰…«dCHã,—Ø•ÇËÚ¼Ó aó¤ùp_8î}íR^ê‹Ðe>VqZÁ»z} éÊi–š Í1/³¹:mÈ•<¤×ðý¢]¹7W `¥NWñ\]îÆ=î®^ÿ¼*Ó—¢ù¡r%O ^«¿~®ê·×\ûhuzîKº—ûJõ÷»'Ïÿ”û¾8¹È²-ÛSÁJ®¢¹jE]Ç•»áRœÊUñ$Ï(Ï•ú‡Ê•<üV¿8WÉðR3ê}{®žßˆëÞDÿäÛŸº´OöØ.°Tõ¦üˆ +9«h®^¾hºÖô‹J"—w_K•ˆº<×R«4mâÛsýCûhýB>Þ%ÍîÉÓ?¥~W‹ûÂþ0(ëv2ù2‹+±1WoóQ‘¯]=Élsmš³&Y=UeÛSóˆl+3ý£oÏwbâª{òüOùí Ûã 'Z8ôåŽÒU$WuKwg*ž\O#Wµž:ßÈœs1»êžÜÿ©KÛ {»²†5OX$rÁÒü刬bõ3T´ªÃ})ž„•¯*Mž¹¼ûéóƒ˜æ«êQ…«îÉ“?å¿/,k¬nœÌ°¢¢å£_¦NWbk®Bô_u2ÆõU•™þ¬®ÝTõÕÜUûäÉŸÒè²Ù¶Åûü!‰L°Ê 銷«êð7#¸äß][e_Âä|ðN¨\µOÿ©þœÑk_Øg,WW‘`å`Ó•©ÓÎÕïÜ·•ЭÿJ6yB’)Þ5꿺ª~[W`òÉ“?u·j_ØÅxQZêïŠ+G+ÈÜ•ºèö]œïÞ„|²]ç»í¾°€Õ¯EO6u{WåSŒ ³¤« ºjGw5‰èZ,\ØiŸÖ•Å1¡aÎf$-ÃvÂ÷à°ò°Úœ«êDó®kçŠÂtv7|r`W6°ìOoO5,,ØUlVœ]18™ð?-¼õ4,6„Ýó(Fñ®MWb³®Öžrvµ‹ˆFyHwjëm˜Ú‚ÂÊ”®àÊû-˜Í<])ÇùÝ´˜GúåbWþoaÖ( š_/T”úÁa)ÿNVpµâ-œ–RVJ¨eôPFc%°‚«5oÁk8¤Á0WC\XÙÒ\­{ FXm»i®†¸°ò±‚«•oÁ²nýÝLî©a©þBVpµö-haѰ«aZ™'•‘\­ šCÕ÷]©:’ÀR»påN·­Ü'½¬þtPÖíIaåLWpâ-h`µåU‘ÆÙÕ*Xªm“±‚«0oA-‹úÞÑnŒ_BXYYíÁUÓiãê,§ܤÚþFœ¿õl±f_(aÝ.ö+›D…5¾”“[W¥)¦®Ú›N»Û 룷›T»ßT¾bî ­¬ÛØ÷Î׌uò5ßìWfV3WýM§òŽúçþ&Õþ7Í€ø˜ûB K e YްÚÿ+ÓUŠ#K;jÛ›¸$¡z.æÚÕm°»üÍmä{´ï˜JÖ­K ÆŽFl u®NpååJÞ^x® ]†®ºß$pÕÀ:é]ÆŽÚãrÍXͨӜÅÕþò•œØ{èªÿM WÊ”Eãª{ìC7…³ ³Ú‡«þ¦SyËýÛóÐU÷›4®T²n½îÃÂ:fwCvVûpÕÞtÚÔíwòÎÁÞUÿ›T® ]D~¬œaMŸœÕ>\µ7ÊéfŠâý¿oªï~“Ì•>e‘OÖíyC¬öÓ²Ú'u™%ü’•3¬É33°‚«Hûâ¤ís+dù²‚«½¸ÒËÑaŸ–CÆ_Å| Á…¬Yºpµ+WšœÖè9“7@pµ‹ïØ)°, X&VpµŸÜVÖ2¬‰«]íK¸Š&k ÖðaUo\y‡ìU„²gô6Ê4Þ¾)Ë køèé”-]Ë•2R¸ ZhaY)ž@W;rR–“lÅ×ÕÉ“MÛ•ÃúqîoÏßznǶw«,ɱíçv–[9ʽ÷žÊUÀæPëö@VUl]\ÉU(êEpÚqî·±íý*Krl{íªþU³VE7î=¡«`IK‹ «=´ƒÝüÈý8÷ÁØö~L_óœn&¹ÖW;î=©«þVÿ[óD7peW ÉY‘ûq£ã1}ým:ƒÛ(º:¬n?» DK ˆ\9ÔéÍJJý8÷ÞÕm•%…«nÜ{zWAÚC¬îW¹Áhû²9Òá×á5¾à“._Ýz®†®úqïY\ÈZsXí/N XÅÙ—ý:^×â!«º±ëǹÆ ÷‹«v®šúª~B?î=—«Ûɉ?¬Rájy¦æ­ºjyh„­X×Òºn¯…\êÅvÛqîƒ{¼ºU–zWÍùàµ]©©÷žÏÕZ[X=«…Í6ëj°ZøšuxÒcÓ%Õsܓڭ²tsÕ÷_uãÞóºö©ø¶…íŠÙÍÏÚÀä«ç~û"²­V{rŠU¤úª«—u+¿ÃU([¬ÞUaµñ–ûä Ïíµ¸ò°e‹«¨aI`ʼnM¶Âø+foalË‚I§JéŠO²‚+Ž®f¸ `dXÁªUŠ‚ ¬8ûòÒ\6¬W>ºæÄêóÀ¦x—¬ø|‚8uû»¯ÅËM¿ã\Eò5÷¶wWMÿ•\yù:®Ü‹>à*01q WÝ*Ì)úEåJÌÛAåìq_ž+SU¾‚«ð® ެâìË×Ç÷Ÿš„uÕîpµ&H«Ø¿+yñ­½4gëŠAl…Õ`^šþ}3{ÿRÃc0Ö…é÷®Øæ$—‹]¶ønLËÕÀÕb>²ïçØ†ÃÕŠó \!à Wpµê<®p>Up…B®Ž•¬à ®‚“Ú—ª|®· ¢’µ·µàŦ_~ão¿Øoâ„+¸Â+¸ÂÛ‡+¸‚+¸‚+¼}¸‚+¸Â+@ @ @ @ ØÅËwº)“åbnWÓü‘úí»á\·o7¿zn¾vÛÛûî¹6.¡Þ>«x}ì¦â¾6Ë4]›•šï\·¿Õ¦wÎÛ·›÷[¹¾üÊm›í«Ý¬²é¹½ïžëYùí¹ÙÇg×~è×ÇzïÈ5)µó(ë¶—¬_ƒ×zûvó~+×—õ¶Íj™^ÛÊÏýàõÖ‡ÁgÏõß­zyïw·¼¸´®.ï¿j¾¸°n¡n{9'Ò¥^ýÔeûÛæíVŽ/?rå±­Ïí=÷Ümxí¹á.ô{×±£uõòÅÇs³wž„ÛR‚—Û’çnµf‡í,«­Ü_¾kº¥îWA¼¼û§Ç¦@ñÜÞÏ 4=7t¹zíÇX®êeê½s-žúäìêJV ŽÛ7›÷[¹¿|³k‹âA¯mëw]%¬º5ñÜÞÏMk,¯í×¼lWõBÐ+]õÅgbWçÆÅ»¯½]=ÈÖÐw{ï=7°q'vâª>¹mvhÛիʹdóÉöýñ±Ü~úò^í ü#²´ðiCåör1ìêð¸nß¾¼ëž›ï§=·­vð"'·¹UO®ùê,™8o?ªÛŸÜ_¾ýÂV ™Ç¶·º½qå³ýŠ=×å[Ï=7®ÛŸXºê{÷ÜO[Ûv´xò;í½¬ígèó•ç·Üþº¢ŸÁwÏu0=÷ç~†™+÷n¶AÂñ馻¬îíê+ïŽÉjS¹ú™wãÙ¿_Ôϱî¹r¾,0nG·o_~͵”úÅ×\H¹vµ^Žë8þ{nøöù±B @ @ @ @ @ @ @ Á-æé©çO¸<¨~‹@ø»Ê™Çà Wˆ\®.r¾¡·ç‡s;qQýï7óþÇ}Q¼ûi3Yé~ä«f‚în’"B骞_­ž¥ìí¹›iìüîëÊœW¶ÎWo½«þ‘K»¡v%u4ëN4 ©Ð½ù¯©+Ùl6?´‹M`"Ô®ä›Õ½9ÓñYáJ>ryÿ©ß»aíj83ýØU÷H; cW£«kᑯ›újXEÍê«ú“ú ºKçƒwª³¾ÖUó‹f±Àú¹ýg©F°qu뿚õR5×qŠzêÿ¢¸»´¼û~×Vç8C "h4+ç\q®‡—v!@ @ @ @ @ @ Äñâÿ2ú9Äendstream endobj 113 0 obj << /Filter /FlateDecode /Length 732 >> stream xÚUKs›0¾ûWp‹˜ !$ààúÈLzkë[Úƒld›©,ˆºþ÷]=ˆ'mŠÇí®v¿ÝývepÀ˜8gE@Ê4N1 ÖûÙã,f„ÑÌzœ‰ö*#©UÆŒóû=ÆÁÇfö~ØãF#pt†ü~9›ßÑ<ÀYL2–ËÍ…z*‡–qš“`Y“0Â8IÐ7¾oe­¶áåçù]†ƒ2.YÊ,ιfË, ¢Ç.ÊW®ªfFi™¡¦sg'¶ƒä^éGtç²q§lÔ¶ÖC%æ’k+8û¯RÄeˆÑÕ!Bon(j”óÐ;ïº•Í ¤y] Qõ/{Î|ÙÇ%e®lݘЭÕו0µæ%`síì. >K¼^÷îìÛèê5—qe)C˧к¿5%¨Þ8Ã1„ðfpÊ!„Š›AV>ÿžÀ;Ó3‡ž•¯`nmMm/ \¿Öf⤮ÁF†stâ7ÃòŒis°™…r~Q™8ê|/ ùˆY 3Ÿq€oâââ,@QFÍo¶R ˜‘6 Ç0"Û%2çÈ‹2w@Š5Û†`£> Ï(»z»3³6²ÜKvÖgxRôãWu6«ùhÆ4pÝtf C÷ÞÖ*z»1Ýñ^„´ÔZ×° ÒÝtö]}°k «ª×¢¿q·§1zþÂÛ^Ùu9 ê„:åì£ÿ±FîEBïLãt eŸ¨<:ËŠK®Ö¢Š{öÂ.ÑAKý+|F4¥¨•þžÐäÐÉêÖ™ô±¦‹…‡LÏ@ÐÍËD`•|}šu#§dØvâ8Áz¯\\PìIàîX¸c¨›¼ai8¢I2 ¶…ç¡m$¿ªgȼ’ƒ˜Nm»Þ-ÒdÌ)~/’˜Nª|õœ÷MñŒØÿIϹ’Õµ|t¢ºŽŽ Q¿¯Z³}»‹‹œ') ‚ù¯7ÎMàìÓrö> stream xÚí {7’ži‡’½‘’h×›h¢Ä–¿íd˜ÄÞ±w823ºÑÇÿÿåܺ€Â­O÷9UÏ®†&»Ñ¼]( Uƨ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¬O®.Knÿñýã…=ò‰¸º¬Ïèãí§KSÊÕ ²¹ýU¹R®ZËã»Û;åJ¹j-÷w·?+WÊU[yØŽ‚›;åJ¹jlµ¿ß …Ÿ”+åJE¹RQ®”«õÊõµr¥¢\©è8¨\©(W*Ê•Šr¥\©(WÍÛÿ³E)R®XN8Ih$§(WÈÕž ‹BLRÜa8Oå²¹Q ÑÀi$  œQ´.+Š¥Á¦g8À„À±~ïrØWÃ*W‹ãÊÀæÀìöO7yüw$Ut'ò•P͘lÿäêóâ¸Âo˜sµ²&LÊUê`é,ÁùýY(W³šUL/UŒa(9ݧ„Ÿ.˜üö´X]WÃWïæö¡)¶„'ºÊÇ6õFÕcò°:©ÿãB¸²ÂdŽO]êö@igÈÎ;líF+vX<ÂhNÂÖEp5tc`h!°UuƒT_©ò.Üô¡¸%­\µô'Ëð»•LÙ1Ro¼ÉG)cëή~‰¹É:g®dõ#Y±F&´Á8Ãü1=}]ÞÇ¥\5‚j°1lcÊò4Œ,‘¿–WÈ%kœHv´(ggj\I\‰ž&€³î2ØêÆUµS¨ŒSG]ÙP_YÏay?F;«rŒ¿p®ÚÈ™iyþjËÝàûjTd–óŠx¿Ú1ì¹R8O™Øú/ºÃsmÏôÑ7ÜÔ/轞ŽéÍ•ÝUȾ „®zojw‹XZŸæ²n|”%Íbà>bûô¨ç™á²wç­FBzcÝŸ—Àu~vû`8ü`òoÇjGâ½å¡U²ªXfå„â¹11=ÉcKu¾ê+Ç(&«µÞøA ¯&Aw?Q*J¬ÝÿϨ ¤|"y~ã 5”85ïÅëÖöUîœ!»aÁHâŠ.‡bIeer•=hç=^â ’Ï$”>¶>®²RxÊÅ ¶|ŸÄý@Wwễ`êNãú—†Oð–Z«¥Ê³âʀіÿq×0¼iObÊ.xÇs„¤° š HÞˆ 6¸çÈUÝlÉÙhc+§W“§ÛÕ› …5 V††™"·â`±Äü0ìâýŒ¹¢ë¬$‚L–¶tP{+¢²V_ƒ§­ˆ_%Ã,ò¼\ÎøPܸ.®Cã¸fon>˜]‡^Øq5yãS£X2Ðaôˆõö0°nc{ [?˜pW”Z‹á*µWAdr‘á¾}×pwÎÈ÷)šd™¾1Üö#W^°U'“~ÿÖEMbÑ\¡Ážë¨óFUbÿ|jä.›•,Ôè=@9¸ìTpǕ包سøqp|c µŒhGY|öâžÌ÷¯La…ì±ÑŸrh‚²¬,ŸH®+ ööHÈN]8WĤœö‰2óm~{»÷vì]/€·†à„¸'¢Ôl·¦¬éœí†Œ~é½ç®Ï¯ÖngWY1êÆ¸A ¡ý-Ã!{ Õf°m ÞKéóqPŽ•0>jÿ*¼Õò#AÝâ‘^ Ú+–įµ"Y¾}e@fÕ-ÆÁ˜Ò0¶»ÄN8°ÆV0›c\]'MŸp \ RüG°´ukÀ‰[¥¨žM;Žö Cc¾,“ø¬)Wtîrš{eTwq냮Œ\1a¶N:w¹:Ê•‰øH%3b@çä;¨¹îÓeã ‹ IOë8äM(DO ¯„&{Ð…Qš¼¥»Ä¿a¬$þJ”`®v>èt$ÍZ„WUæˆc³­êT\­-^½æƒ>$öv0 k«Œº4ž×ó%¬`üóM„5ØíÆÕB£Üs°–áâ ‘#N„0W¡i%ƒä¡æ_ö Ìv\S«ŠCF7}Å|qtå7ÀUA€¦ÏÕ1œ˜øVdÏtj®Ü: ÑW±`®Øð:ƒhÜ¿ýÝ<Üþœ?¼ºû¾à·4f†ÊèhЛÚwÍ!üŠá*Í«äñd’߯•pŠßÒ¢ÇÁ@mÉH'<¾ûd>¾Ï7ÛÜœÔlKn`T<¾û€}SîÝ#w(y<é=åµdŸÎKã[ZWtQÃNFÚ½›·¿l¿Ÿ\®È\ÿ¨—ü–ŠsÆlþöo‡¦èJ ½b$lWðxÒ{[¥˜&¶ Ô²÷´X}g5e¿óÖqÿºð²ùeÿ*ª}GJ˜Ôh,;Í£7²¶²äbìÆ…Â qhƒX…uj®n®^~Ø\=+¹lf_Ž¥œ[såwcÖ°bG•x;×X® æU8LýñÞD­CdÆS"ñ»Ãäq%ØÛ öópž4/G_Õº j,÷hÝð*ûЦò Õ!ÁMTâæã¿N§ä䤨¤y.ûê³—‡~ûBn_UÎiꜣENˆ,à]ü“ÎõŽºPDB! õ0ª¹ÊÒ¡}æƒÏóÁ€¶êqY¦æsES'4¿¯)^fºÐà}µoÖM 8qe2*çqXã§“à s¦\¥žÊû{é8’“®Pn€)Ù„½opü‘p¿î%)èÚ‡+З²8ÅÑ+ûwí¸2žýÓLK‘à{Æ5zÆX52ôa…e¬Å¢‰iÞÓªkuã`T‡rTµ °Öíù%쉟õkæl«F/ËÜNYvŠx¥{jPXý ¨$3Ça€ ‡|ˆ †e˜Á·ò‘ö4 ¹ºõk-å ìëm2duHB+”Ô=×6X £¦_ø©§ŒBå}•.ž+פiÊ»E¶Q<-C¢½ŸÇÉÑñr bŽ/ˆ£Ž¥KkÊÕ„Qó|RàV¬¨°+ØΈдun&FR4±*¯“ÕÔi+åÊáÊôâ î/í Û¥.±|àÌÆÔqóXñÎIª;%\©}Uiiuà tI׋m>¡2Ѓµ|G®ÕqÿrÕ ¬Â— ÑTÓÒ8W»µÁ1Ò9Ö².Z”HÙ³«Üö<®‚ârÅωÄÖ¤êÊŸìï»1®,Õ©Ija/#¡ø»D®òR‰Ó²g³Ò jv[µ#1„VFf?_ÕÚìÑái¬ŽƒÆ1½p%6S"\‘tÂÔ§1fÑ P•7¦SÑ>ÿMÁÏ,ÙÀÔ<3®L“¤2Î+7-³\Á)j­udÅO鳎^§b®ì¢º^öÀ žú¾‚+SÃUüfüMëî¬0´º7ýÜHÎѨ/¶°¬±tõR¹jf¹WªþÀ@HcÓaU0ž¡u am´7ÔàŒ^UE “%ðŒÇÁÀŽB'ÌíM¨cPü=:ij>.úÃ4íøªp1ŸZåªWão;Õ¦ñ#Oá¹"1†»X‚PÔ±ÏU^œ¬÷ÈdÏdäË1Μ+±žéÇ8³`\IäN‚]ì/;2Em$\9 ºÕ‚ÜF.š+Sá&ìr7̶-„œn–„W~"Pñ¢@UU“˜ŽµÅ! Ê|,‰+DóëO󻈺r(EYUg61DO´‰ê8C®Ê‚‘QaLäp•šÅÃds•ÿ9ÑLßc(ª½ÅMíöª§li°˜+ ƒ†³Ì*¸š”V¤ˆhæû8C® ÀêU§” =pM×ÇW<¯0°Ç œ‰‰³rU£®ê] ®L2.F[Ås%GÌ$ –õ°ïz*å£ã hV¬­J– Ù—£bÆMêàê¾!–Æc¥CyÛ-8çÏ•É[6CDçT™Yüöª1¸ØNàG-ovœÛBy0Õ¶ê«ØXѨˆ~p³íƒñ{Ú c¼UEGy9„`J¹o; {š¾®îßþnn6…Ž™Ñãl…WN7tûtàTEÉšÐ{÷Ûû¿ýŽ×?ü5êÝ'çÚ7¸=XY(¿ÃÝx-~ä?¯™«ÇwŸÌÇ÷‚¦¬Ò`¶8æ×`h ‘^9yÜÀÅt áÊ2®ÿ|»=îÍû?&Wr þ=¥é*câM‹G^Á8¸yûËöë09Z\Ñôø˜Ž³ ú!ÐoÒ+  có´A‡Êýq^*wölð/þì ö$Ì]ZFÜæí¿ýûï‚qPÜ) ¶¯>Þ~’5Æx+`ÛãöÛu§ü 6é•ÇE¹:ôi0â’úxûÌ;+œLT8èÅ r‹9‰'™H|“õÈ«æjsû«¬1þ@²kaOÒö¸)whŒ+é•ãÇY³4z`Ø%µ¹ý‘¨ÃGàír¿¾þæö¿sÎ /×Ñ7±;ÜûBòM“G^Wïnïþ‹¤­ÝL7ÁMãúíá8çà ,·Aé…ÉìljÙ90¨°¶Çýô'ã:üý2×ÿajŒzñí÷±'±¸ª{äUqu÷ð‡?KÚÚÈNe\ÃýOÛãÀ$Ö†°Áø…I$HÃNƒA®¶ÇM³<~D?l5Èd"þûþ§> È»©x׋押¼‡­ÂÝH¾ ï@Ën9îG³Ùªƒ$WÒ+;Ç “;Ã#ß`ˆ«ýq?ý É[|=6軦àxìßÜ Ì«‡~DÁ#¯Q_í¦³»imRžÿ?çÀ+gibÛ ¿ÿ3ÃäWÞ]ƒ=î¸7žì t qµ?îû,WDϾäj…Y\ïùÛï?¥ÕÕÎiA%àKwÊøÛ#süªŸ0ÉQ¦ê¢ž‹!©—½Ñ üÊ “I”+ ;ÔŸG¨5?¹ér:x—µ:Ü£D`)2E¾úxì Nà$qˆ¥~Ä0ååS`Ž §\¹²<=^ ¾KÑz×í¦„d”«€ÂšV<ãM¹9Ó\q¯å츪ïbÂÒÃìx§F;iÔ¹Ó(â* aõww_°æ+\9à †ûËÑWÞûEZWXSdž\ANsóÏX[•£ßftŒ…ïál¹j”˜ŸËÁÃë«–ÖÔŸ¶K[8†I,SFö¶üX^c4ÚÜ|qúJÂúrøsei¡q圧Öÿa/Ij]WA_“ƒ'ú…W_ ËÈåÊvˆMŽýXî“d¦dpŸ]³ÑcÉ\¡š+¯[#EÖÒ\…­L®* ÁºÓnÀrjÚ˜õ°ÅqºËò¤æåpê‹ä\"”ƒË8ÁÆà½L9\Ñ¢MÆž&Ô/xWJF;¹¿p®ªU–ÓˆŒ/­^³ ß †õžWüŠÍ wã…Su€©‚"Ãæl¸j35 s5fæ,…V» Äûéb=OfØÞóæ+$›“L‹Ç²UžÂ5pÕ  . Â\$œF#®¼*¬L-T8µ‡j8‘t£œ« ‰YˆPË­áyÁöÂù†«¸‚•¼ÓÚÖàMÌî?{Ý’Ñk0N¤1$³~S>ÜP ¥XaZ Wãë¨ìhôr¶I×ÊÚJ±*–*PW ËäÁ°Hº‰Ï—+:ko °8W-WžùL”Ùz`¹ &€¤ºaŸè®pE0£ïçËU£ïŠ×WnefC؇ –hæ­…¸bjć¶Sûuåüa!û‚]'È™®ÄU×ãlgzt«\u¡‘æ87zƒ†ó$ )3•åM|rSY{«îÀ ä¤ù7cý7”«DGSeÀs;ôáÊЀŒ%ã FÈյÕ;×  - \@ó>W•]ÌíZçt0åi4\ ½j¾Ca{ ~”«É¬–˜±ƒ×3]wâXMÒé8Ø"’¶ ¿ZCuO‚+ {ür˜J < ^ ÿªfNéR¦T6&àj¸ 8r¸ò|[Ahäj¤–=•àJõU[ Lðë -/›B¾‚3.‡ó’&¸š¶OËG+WÍÀB:H$+ghŠ«¸}e•·ÂîÞ6æ»Wéês®x·L®Ð,Iµ¼›ó?ÅU$zÖ^T$+J 21p–Ÿ/«B§Iê Ðêj¼yQ\‰ l(_)W:C“Þ p `È;ëxU{öã`š«X¹ i¶}Œ hÇq¬ƒÃùF#]XÄ9à×s‚@]µ™#ž¡}%$/N¿‚+Ëg1þuEï®=$ZÇCR›A•äùÓ¯ø‚ìvÃÌÆ¢ë6™†»SÐÔÙhYÕ#{´-Õá@æó¹B©©\ßX:-†œ+òšÙ^&•oæ9ª¦Œ+ë·V‹n‹n› áJTô+íý„´IGÛ 6·½P‡¨Óƒ›Lé¶‘x8­cï9Îwç‹ÂüÎ.Nf®ì)ª¹b´ÅÕä.°Ò¼ Y¨âÍ ÑútNHÒP$¢G•«"=W(kÙ)ùMmqÔ̆°ò\ÙÛ×À?rÕËÊŠn´/- â)÷ê6»‰@ÊcäÖÍ‘qåÄØ²úJ–rU8`vŠTº[ÅêP;D0e*Ì8u™V,ðñvœXþZ{¿}—È•íi;„É3<S°Sl•%fo³åÁ£sÛ y5XwnƶR®p‰\å ¾mÀÝ“i¹™a[3¡,2 J¬ë Wdv:Ô®ôæ.¤mÙ„G²yi\µJæ0Óª\Í1:A\±{Mƒ\p…Ô²—’reùUü3³¹:ëq°WÎ 1¦DžU;¿ìâNܶyj_Å"[­•ŒƒÎph"¡Œ¥³žp_\ò|Э¡ãD+U´VýË å7¼‘çOHã\yvïn`7“Õæýò— ”+kè³6®ˆ&ö¢Ù Ô4\jæá[‡$~&½B¡=p%}ìxÞŒ‚~x~õäÿ~õ츓Öz)1*Á"®1?°Ç” àr.¤çŒ,WÛí vy°R­;xóÙË›'ßýöų¶\õÛ’ ùôÂU!l Ťˆ'û þK¯<ƒszÚæ£I;² $Õ\=n5Õ–«ýÿŸW´ü;uYWXî =íoÝsV #!êÉÝŒ“Ë“õ¯¾;¼&HÙ\=X÷°[ü¼•}uõbËÕÍÕ‹³°ÛJ¥¡üè"¿ôäp¹â2…ʹ VÛ ÕÖ@ ¥ß¤V#·ÁÌ 9-çƒWWŸ½ì5<¡þÕÖåt·úæäqÄÕDÂ(ØXw W!K*Thš ‡{ëRY\ÍA˜iàe‰Ò&'Åt½“‘+ƒÅã É7€‚Ù-'«’ù£ô}ÇÞËü¢órå&F(ÞRO3¹ìó!´#³ÜÇ]Cˆ¾$ Wú`öÙ/ MõÕ~<Ê|óÁYÇAÃ$‹, µ¶ùƒÈ¿LPL5Wû±—·è½ÒÆw W<¢7uÖUQ‡Ï­¯@MÙzÓËåãÔÀäp3“ÔÛŠíÆ‚!Û¦áWµÞ”Æ~†Ìèg8W°*ÈD¹ŠÂÆåÀvòÕN|¨·££&? Çþˆ»=6f×oéÑÁ;¿èNæð‹2îl\Ù:$61,QbSŸ#àôæiã¤2|æÎHŠIø\9û6ÁUw}e=Ål.굃ˆG¼Ú¥á¶Æ ¤Î0,L7àÊ)Eè®°7KyY7 m®úÚW§ð_q\1b£» §¤òíút¯Ç3À>À[/ÛÖmâ•|Ký¢Uڪ̾ê Øò °tH[®H¨C2¹JMIéB•›)ÃýKÔ³FÿUÛšÞɾyõ !/­FB»XyŒ+˜}e¦„©îÜ IÝ]œWóXíCLúÑ{„ÚWšH¼9)v¯ˆ™Ç•FnR¾®Ó¡.ÆýÞ æƒ¿èãW‰c p¾û»y¸ý¹ÇAî¶âÝ›þrÐ_p—\Ï—,®v½ÞÄ•û*¿œgOvOÜ¿ý ^ÿð×àZŽìr‡–þ‰9¨T_mbXÁ_ÌUô«y|÷É||Ÿš­ 9^µx-ñ¯¾ä¦hÂû 7ï£V}àrnzzHññàÇwÌ›¿[ÛV©Ö9üWòé<¨x|õ4¢­FšBQ¥|¼h<Úióö—í÷“â=ÈQÕÛƒþýwÆN'½ä´°­åÞ]•sS1®¸ËÁK{C²ëÖ¡ßl/÷Kq\%Ÿn6{P1W¿èÃóµ6­.Êg{Ó#¼ý”¾/ö ·ñ7·¼Þ í#-Ñ”Žþõ®¯cÓŠ©)êE=èõB ÐR¢ ½s8 küýîrV©/^¿ò\é«p<çô±Þþ* ÷%掛ÛàÊRXöåÚJu<*ΕÝT0Aññ 8W»ƒü­øåÀ}5ؾCjÆr³^ÿ•ÓJ_…ÅôK)WÏŸF˜œ¦Á];\YÆÅí]ò¾ŽÅÛôÓŸ¼žq^=¹ÜyÈËšsSöeìíGßßT*MþåèôojýÛý; ) àFU0—ó•%{OÅóÁ¨c4yà²÷wÉ©Ðî ÿüÁA?x3=w?º}¹©œ·Ë•𦆃0MÎ]®îïþõ‡Ÿ©Âе$ºœÍݪíåþðg;+õtgÛõsÊÇÞÓrýW.W[m»I}¬ÎA¼Úr[+FÚŽuç ©ÌxõMM,zÐfó3.×^ŽäÁuóö |~÷§)5åä—Ÿ¾®×?¤/þžÖ³~7—ÝÍi£(:ñ\¹-M•H-ûÕ9|ìeü¦Ž—÷®Ç3ßÿÑ|ûý§¸KTðØË’ƒd?syo°ó5mCÔÛ4ÝS+þžòÇÁÿô2e·WrUÆ%÷8ääJÏÉÞ²È^*^$©XÆ;O޳¼3¤,ç(.©°@®ú/Ûø\‰—k€ú[ reºpeïU6W“ñÈ+JÙ”ÇÕ°>³“ÆùN'(YDÍ7د€ðVÀêG4$YÄÄ•M ^`¿ÿÝuëàA_õ³¯ØÑ££¤•hZÝø+!u’‹²\ýzÑŽ5i¸Ø{gÊ’Q²@»}îÀ¾²ØÉÚ‘ˆ6‰ÒKòoK²eƒDÃài©Šsáê$¡ý>e¯¯*Ï;´ED!÷m®¸Úr6Wû]dEÑg¹ûŸüŸç§Ø?ˆ¾\ž«`­ÃK¸‚0'·çÙIÖgWØ!í®íž`7Üãrõ•´ì:²Î«âŠË“›€ŸlËY¢t¹²j ð·Ù/¥\É}W2®DÄ2{z(Ö"ÄÐIrÊj?²u@âÖã¿êPâÕ´)¼ çÊݱ©2´÷qɹ‚WÅÕO»Mm?nïªðzÊUk®2ÎäB$XY"!8´Ø©Hd#ïÜxðáÚôPÛÁKò‹¶,“€Æ\Av*œÜìm’|Ƕ°ZA פ@ºí½¦WÑ]­ôÕÉí«3àêvÃzCÑi•tXÜÇ!â˜íÍ®Qxð.¯ôJ¤‚Va·ã·S6¢ÍWΧ…ŽÏº»ÐAÿýþ¾/&½h¤¸K }5ÆìÍÏÀOÿ ¿è ?úô\ULMKÜtXôæŽfª‚}¯sJžäsõêÉw7OÍo_öË…o>ÊUÞk®ü(ûŽŠ áÏÓ«ªsL‚Ü«]ž¢Í.ûÓYì+xQ—3Uô£ù€äÊȳèÕˆáÈ {ÂJÔœÐú+âê·øzÿÿspI”מ«@Íçæ\±³@wgCk ‰€ ŸðIx%ƒD³¤¢:&»9aO®Ü®v¾—<ʸq ^˜V\ W˜cþ÷%5ÜV,=Q…}µsˆ¾zÖ¼>Ž€ƒD´F˜ž®D9=hKøD{§ÐÍ9§ÆÎ´­@•aôø¶†ûvNX5]͸Êìæ T‹$-ǦpeÕýåk»¢'WýW§ÇŽN;]Ñ«)Ÿžqê¨VGÓ#g™Ç2·ª¡•«€ÂJ,´¢1WÆ®?á}ø¹…Ná´öþÈ!Aw®¥Ø¢ƒ»¬;c\±º~èLQÍ¡‚Qp4ò໳0Wdþ*vi¸èes,ƒ+.êºAeBŸ+{òÀÄ`Ž77IE²ˆjœïeq5ß ;5òJiz—¸}JèèÏ”“mÆäV}^,W]>МpÊ4W}fƒUݸ Í@ìJÔÓ²ÍÙpÕEäÖø™a®uqÐI`»dÌሷ>’=ñpo©÷zî\å÷õâ¸êlÐŒ¡¤oî9m¹ê]'NgÙA}!ƒ«J°ÿ}®lgeë*”T7à”Xžâ¸ªè¨Ê…¹0_ðÍ ö& æÊ*ÆcÝLï)2Wò2ýù"Y²&®º›ó#XÉy_“qT°#é\ÈÑ3‹Ý¯j2¸bëÉ.‡+QÅŽÞ3ncûü"¯¶²ZHø’¥0@·Ë/'/ÑÌÕ„Ϧ´úrÖqPøšúŸ=(AÚK¹:žº‹@(j´7Wae{Ù+â IÖ`zsEÐL¶KõæÄÕÔ'4O厖(ÉŸã|¹:…»’7ßtyÐ ”3!'œ¡5WÑJ÷IódAöœéH›.Ìí‹Y¸òœˆüWeÀs©ºJ¸Ü±}…à¦LœŒ«¬˜U\…ªx•¸ë쇪ˈËxÛ]ò8öÔÌ:B‚.ÁÎÍ•ñ¦ŠÈ»~V&üq’Yñvð‰¸2R®0Wý†Afq"®ÚgIÎ>¢ÉÄÂôÕìvW¨×¦|ÿ\†ª–\ [*òób…ñíXW›M®cŒgY¹æXñ ®››ƒ€ßŬŸ+,+Ñþ¹¤Õá*¸7¨a Š:®ÌzÖ³_:r…Xa‰¦\9)ñèÜ4GñEç¯i?æ k,ߎ «ÍTEÔ+Ö+Ó„+¬ž«HBç¯|JÿĽ¾VQÒW`|ݸªtF¬Í¾ ‘øtø”Á>Bªrãž¹œÞ\Á”ÄgÏ0 ÍÎÕŒf»¯¨²ÒõsÅUG¬2[,SÏ«ÛïŒÎÀùµ©¶Êº'Wƒkü¬0ýÁZí>zn~ÕÆ¯„DßwáŠß¯媘¶Ü×TÖj¸’Ö"iÊ•[0­åMƒž¹‚’ O‘rÕŸ+Ó‰+Z-Ætã*„n%÷ü í9s5mW]æeÓŠŠ]WýŸ¹5I”«Â÷†++%ºìб¸Šwyi}z\S®æó3˜0W=¦ûnöÎÓ]1W:V(ýr7ƒqJÇ íÈÄx§²LŸò»¨7Ü“×^%W=·ÿ2]í9Þ»q•õhÊUó˶¬¹Ä˜í|µªöë)è¶–ÞØ+“ï`Y,W÷o7·?§Sdy8PÚ`Z]Ý¿ý§këÀ Wô^xaþÀã¦WÛ¸Ú÷º¸A¦çCÇ!·AdvÊ‚¹z|÷É||Ï~ôwÇ¥ ¦Õ•s`P]I/̸ßFEmöíq˜Ž‹t^õ#ù•Tƒp\U\½×ÍÛ_¶_‡@ɇ4ÙÇí‡Ar`dGzáÐnNlþfS µìr•j|ƒ‘[\ Wþ=~¼ý$kLz ä¸ý‡h ¸Öwè.Ù˜73=2òDà¸urµ¹ýUÖ˜ô@Áq|¬¹r5ã­ÖÞ¡—±¶ÿ#‡jìE´¶ J/¼Ü}^ïnïDmI”·Çg<ð`[#ÄUõº+FßöäWñ'®Ä¼\?Ãýh²%?PrÜŸñÀƒmíVákw‡n›ÿ2×##¯ÁiBüÈ‹åêa«p7’oCz è¸>äÀ¡ò$£zø@ÚêëùÙyœ‡~Ä7wI® î”årµ›ÎÍ·Ë÷Ü>A£=Ú á*| Ë9`@ /lÌ›ÝßH&û²ìTo¢û8(™u48EŽb\5¹\t’Öïqõy‚™NPpͳãª6ؾ½Õ/£Í\y¾"“ŸjÚl—<»x†º´uàJ“—mpÎä s>¾UdÞ/„¨\µü¬÷:'WC‘A; «Náæ:­ ®\uÒn WMöù„zh5Ÿ¡'¹úö+«%E˃5MÔnqsÙ"Kš å*×¼ªkíö|:’Ã)õz\õè4šb»’«^6༟Y<* 籎å*·ÙR©V¤÷¥k«Ã;¸8®ªû1ÁÕénl=ã ";JÔ¾ p…V#\ WíYô[L^Hr¥ñ¢’·Mj¶5ãªü¾Z^§„«Á¾ ÅN¹bõUaCë»;í:¼ W0ëà §~$j—ÅÀ¾ÒQR¹*±Û/4Ϩ_Ë8ˆSc(WR¬Î ^ê Óýëk‹+œÓ"N'ò)¸züêj/Ÿ½®ö/VÆUa)ÉEë¯7‡¤o«Kß\½8ü°¹z¶®2ìv˜³âªÃL¿¦üøÕHÓÍ“ï–ìghÅUsËâ*å2íÒÁÏ_ ?n#áÕ2±Z WXz˜}rýTõÑ 1Û?o8M]€›Ï^~øí‹%ØW~†ej‡¥p³í›xx~˜´ÕRÇÁ•sÕg3‰¤etð²¹Z‹÷ §âÊ(WùÓÁõD¶cv;LŒcŸùàΪÚ,Æ/šk^)W æêæ)õ8ÌÇU¡ŠŸ«Š!ÈM/¸y#æãêHÔ†ZîW£,—«îu¼¿Æq¤ ›1öâê·/÷®†uùEÑ$I­œ‘–,Ì[=ád\=þóKF_-™+ãs…厈K÷æáj7Ò=-øµr—¾ëyaþ-ZŸ½œâÊ•ÞNHR¬ÇÕB/›äÊ1Ûqê{ZîÀ å*ÇpÇÒBR²:x9[Çþí‹-.;ß»ÚcÕ±Îé¬håJ¹Rûj®æ …ŽÑ›ÊÕùrO|ˆ-A&àKã ÊUé° xÞU?êgh6žv¯\WÁN¹R®tªêY¶rÕOÃ-™åj_+fë7¦á%ŽÐkæªü}žWj_-…+å*Kîßþnnž½%,ñ¦J[Êû^ù–ÎŒ«ÇwŸÌÇ÷-t^^KhzS'n)+¾¥s³Û7oÙ~?ò÷>Æn©ÒÏÀ5U6ˆçÜÔI[:»ùàÇÛOù]ÇiµÔ𦪸º¾nwS}[:;®6·¿6šp-aÆ›bï³UKíî‰oéܸz|w{×±¥²ˆ÷Î7µÄ–Ϋû»6ó%«¥úÝnjé-W[•¼¹kØ–xS+hé̸ÚMxw߯jéû˸©E´˜ið-éºsøíÑð²½û¹»þ•«ŒÛ ¡\å?½rËÀ@÷Ò¯ªƒ¯–ÿ1*TÊU®Æ}9 –rÕÖºº<¤ \u6E!¨Õ±&` z í¾$åÊm«¥)ÐRÝã¨^Ø®\Í>.‰¬CÆ7 5ý3Öhá«sÉžYz—Ä•Ôs—C•Uv’oÂÚµMP(c°23‰³É)W¥\-OWYd$u° SÝÄ„Ü%±¶\ötÞíeaåÞLl´j{×ÁÆDWQ®#ÉÉoÃØ%ôË Êy šïKíö¨’8WÈÐ>ȶ§³¦8§ý…rUòû)Nd¹—…€'Ãn§ (íªê+‡ªC¾¾}uú“ñžìÆ+ó:*Wä~fÊÕúSgÍÏÕäb’©‡éN1'õÊU‘‘”+Áë¢!*¡š`ê1gõ1w: ­7Q¨¯*»lÐNè6X…<íÌw¿%ý¯\Q…sÖLVuÕ×ö ešïɕؼ®¢ëõ°ý4M ÷9ÌžÓ.6AÇÁQ{ »oÌXfÂ]ÿÇ*{\¹šk 쇎XþdG¡[EÁœô’ž‘¾ŠPüŸ†™:{f9Vg¯ªÒE„Ά+{+é8®¥z;fÈ£ © Â:÷ºâDõçäj*ÀéJÔÏh½gôýêkVÄUîM¬:þJ:î™H ž¿›í—,Ú?o»UW#ÞV¸ÖÌUÎ~ÑâàÏbÓû Œ«Ä¸³äªÓ,/Ö·B‡ž| :¥a¥\õŠ=·âR*œ †ÀEq%\äZW·õ¡¢ñ‹ÚrNã`pŽ7ÿûšeà[޼‰ã™Xò']4Wnw¯¸KkÿÝãМ‹K;3ƒmu\±6M_²Àœö—;#<ï}^}üW¾òt«œ.Gae=éê¸ê;/d_";Ü]ܘe^­„«Î>ѼOò‚ÓoŸ‰Ý>‹šb¹©™b+WÊ•HqåWº˜-|뱯p’ãg»VS$!é‰qµpKõÂDåJ¥“ƒkMã vçáZ:W sÒ«Ì®¹Ì•=óB\ý*_Kƒká\yq ëÅK¹*ãJIR®úr¥¢\)WÊ•r¥¢\©(WÊ•r¥\©(W+•û·¿›‡ÛŸ•+媩<¾ûd>¾W}¥\5–ÍÛ_¶*K¹: Wç,on?œõó-˜«³–Íí¯fÉ+W³X·wÊ•rÕ|BxwÞÓAåê$ò°7wÊ•rÕVv>†¯A¹R®T”+åJ¹R®”+åJE¹R®”+åJE¹RQ®T”+åJe \©œ¹\ÐWp¡g_­Qñ(WÊ•r¥\)WJ†r¥\)WÊ•r¥\)Ê•r¥\)WÊ•r¥¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢R%¿ýÃ×Ûžïv=Ýþ´9þoÎÙÓIyg—_w²³ê.\÷Ìuï{5òðüóÝsn>{9tÔ‹íïžfž=œ”wvùu'¬JΪ»pÝ3×½ïÕÈökÙ?çÍþ_c¿zj?µììñ¤¼³Mñu);«îÂuÏ\÷¾×3~ñìð„¯žŽ¿ÿŸ=ž”uö^Š®kß@ÁYU®{æº÷½*¹9|}ÿq;Ì?Û=ዽ²~–söxRîÙå×z¥ä¬Ú ×=sÝû^Wû~§“wýÉð÷g'åž]~ÝÉ81EæIÍ…ëž¹î}¯Œ«Ñ–™«âëÖrUsá\U>÷‚iº:èaúœW/dzÙ9»dL˜šÈ¸n»q°æÂ ÆÁÊç^›¾Ú=ç³±¿2Þññ¤Ü³Ë¯K­Þ5\e7Q÷Ìuï{e\lûcî¼÷¦ÎÏP|ÝZ?CÍ…ëž¹î}¯n>¸·#Ÿeûénêü¢Å×5•^Åš ×=sÝû^Ý8øjkî¼8zî2ÖŽg¯ã”^×ò3®‚”_¸î™ëÞ·ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ+¯ž|':ææYÉ™*ÊUT˜ÄdÊ•Šr¥r*®ny#¿zöêêjÿÛÝÿþíO¯žüï/®®>ÿŸûeûvù¯»n¦d“** W¯>{¹Ï½øøÕˆìÕç_o¹ÙsõÝN_=Ž\¹9ž¤¢Âsu ãf—vq¯ž|·O¥¸ÿ/—«C’Åýû“¦„ž**”«CÎ-1#=7ûß¼b¸:üåæÉwãIúUÄ\êÌp\ Ùçòò-ª¨„¸Ú\è+‰}e[Qž}µû…c_)]*©ùàSnÖwäjÿ‹ÍþÛcÇÎ2‰µJ-W é™å¿ò¼Tûuœ«]Žý««§7Ç¿|þßÿ•b¥’ÏR£ÒTö•°6:×Si,»1NMr• ”ÿ%ïLendstream endobj 115 0 obj << /Filter /FlateDecode /Length 790 >> stream xÚÍWßo›0~Ï_úRÐ µ1°){˜²J›ö2)/SÖ'8)›]JÔñßïÎ6-m’®,«TEбÏ÷ÝÝw?H¨GàC=ÇQ*2/ÎYÄhâ-Ö£_£HÄ"áæFïшxÌ̦[áðüÓš2oR¾Â‡:ܰ{Ȧ£ó‹$õ(b.˜7]>ÚÞ»“äKcoZx3Ÿò ¤”"ƒ˜ú­VÕª¹ .§ŸÏ/8õò(L°þasνÑ(£™…úd±_oƒÃº•{¨_¯¯·²ûB,µv®–ù=–‹E½)Êj…[†§ æž¯œê²Þ¬Qy«¥•Ì ”^÷ëÍ *¶N…ùªƒ×ÑnL@¤ ƒÒ(O„ ã;IÍóVa* 6D¶¨8÷!0p­rb¢±ÔK{h­ÃA‹þ) @n¬± 1 ,+”6(^)'Ÿ!ÀÓð}‹_J¹ÛÔ^Ua÷P9ïà)ïùe—Ó‰lÔéž`‰ 3±aÖ`+þ… 2t;†Äƒ¬‹Gð¼Kø{@`‰/o"´‰±eäÌžÕ›!We5v¨¬‡3óOwmÁ)#$) c:@ ódIÖ÷¼¿»ó<µžÏè¥õó„JB‡è-£'ÇS@S†X†n’CýòÕñíçAÉõ®$¼Í»J(d«ÔÌ”iÙŒûòºSôÝí[m*g=^ 3Æ{¦½VCˆÔî:¿µœï5NíWü"›²Ùj­ÝÓGýùÚ9… jùsz"q¶šæëæøð×rX©ZshʨÏ[»jä@^l‹àäráfÄÒe\Áx쨾-Æì¾æŸ¢Ò§.+u³[è¥~ª:3‚WîªÃ+ _NzM« NòW$MMç÷zm1,¹ު— P< P­TUt³¡7jͼÔ¸ô:ö9w3òBÀønöBèhn Ã÷”#kcÖËóAî&[.~¤±þ_ÚÅÁ~ üP¦#•¬åóÙƒ VGé1ƒÑͨ¿ÿt"ÊRá… ‡ßîÜý ÈPoôq:úcªÀendstream endobj 116 0 obj << /BitsPerComponent 8 /ColorSpace [ /Indexed /DeviceRGB 62 513 0 R ] /Filter /FlateDecode /Height 600 /Subtype /Image /Type /XObject /Width 600 /Length 5053 >> stream xÚíÝ‹šâ¶†a ›P–Mšf¡IHÓ¤‡mp’6Åeîÿ²jI–-ƒÍY¶ßÿ<Ù!Œ±lëI`„B!„B!„B!„B!„B!„B!„B!„B!„B!„Bž˜µPyùòCç"û¥m®[ÛîµÊ—Õq!Ý+hY»\‹yZ­ñ4¯s1ÞÞ¸«§¯¹q-¿.Ô37¸'îq•‰É\©µ”Oë5úáªØ¤s‡‰´ºê®ú«]í¦ÏpU®åäñà®î)3aW ÁÏS!f¸ºf÷È ®äA“‡øç¯Š–ë‹UuÄó‚[Yó¿/zo¶ú5ýûT|ògå¢xúË_åâºé›¨_ÿ ħ+ÛÕr±mc½ W¦à²¨§­5®ªz•þîŸz=õ6•©Vsº‘æ5e±Ö3m;ÝXã'²³16H½¤µòÿò•­w¥«7¯ÆZåóò‡þUQ«2c}„?7C²Wy Å'Ó†«ãÛºîj­õÚ®ì‚Ï»*ªT˜-±¶I§^Ms#­×T-UõLëN›5þP-f»j,imE³üƦ%êÊ*D&ÿ‹ƒ5+ÿ.UË>~RŸÅ!}دÕãbáÉöãÒT³î墙õG_<3._`­×re\®¥Â\÷¬úT{U ½Mf]ÕjN6R¿¦:7°×Ò²Ó5ÔbËÿfmXÕ'Ú‡§ÜŠ“òÿ>àÊü‘ªã§Q^­ÑFHýlqÈõb²Ë\-šµ Ÿ1µ`Ö{2¾Ò/9ïª\\uÛö6ŒƒN7²ìê­B­gŽwºqxc ÎkŒÖVTåÏ_Uö??º]PCq<ÕQÍ…Ý—UUVþmë-­‹=n×µS¯·éª*ø¼+»À¼åT¶ZM×FÚã#óLËN7öYÙßM¬É³ds+ŽÊOÞUY_ 3ІÅa5UÜtÕZÍ—\éõzmWÍ‚ïve­¦k#O]µîô±«IÃU½¤½'ås>(»„â@½|ù_LeŽ‹G‹ÚÕQçp“«º7©×k¹² ¾ÉÕìxÞ ZÍÕ®ÚwúR{U/imÅiù©»úø•<:úåú¬'/¿­û¯S&gÆW§®ªñ•µ^Ë•]p§+õë£ñUsBÉ^Mǘìt|Õ¾ÓÕríã+kIëéÓò™o/‡ úänbNÅ'Ö›øVžõLZNÏ>Î/ºªÎÍêõ6]U·¸ª ™4N@ím2õZ­æt#OÎõ3í;}á|°yxÌVœ–«Æ<ÏÄüjq°ªØ eN§“Ôü•9Ô­ýàçõ8Ȭ·ÙVëµèBË5–e‹Üñü•=Ìn_5^c½×§ŸißéÓù«ãùöjÉz+NËOÝÕËûÿÊîðÓå0;/ëÁšo—Sæ‡Óéï÷¿ê±îÿ =ïÛÇíå|ûÁZ¯Ý%Ù«µ”…ê5ÊñðËû_ê¿°æÛÍj¶ÿd#¿8™o/ŸiÝéz¾ýëâÏæÛ–÷qê%ë­8)Ÿ´¾ví Œ}õÌõú¼Ó^ï†Ç)Ǭ—ۻɶ1¹þœõz½ÓÞ9Àv%¿ô)›;×ëõN{¾¾»zÍ›¦rüQ ~¶Ï^¯×;í÷nB!„B!„B!„B!„B!„B!„B!„BHÀ$ò äŠ?­È\\\á W¸"¸"¸Â®pEpEp…+\áŠàŠà W¸ÂÁ1y3HüuåÇQåµ+Úǧ¸¢Ô·oq…+\á W¸Â®p…+\á W ²òÞÕZÏ5]w+ïõ ÷üÆUÚ®Ô]¼wÓknl½›.h¯puƒ«C.® “¿¬p…«[\í—ã­î‹Ÿ™òó:7mX¦;Êò·ò‰zÌt¢æ·ëß,…ú5®p¥® ûå¤èïfvë´.¨§ªgê2ó;óÚÂ׌ö W–+=|ÊJ`úŸ ‘T÷ƒfòw×–+LÄÕ@¬‚j¯dw(Dñ@޶^ç {T%áÔ®Ìõïª×Ž¸Â•é% ÙæÈ-3íN›+³@V~$fQ¿W¸ª]É1x.ÊNMþóãrÖ8 ”-”u>X.P=S¿W¸jÎ3($û¥|b7ýÃ;c¨m|e¨ðõkq…«ÊU.&åäh&Ôkax˜óÁIsþª\@þN¶uõkq5+/ßÇYèFKˆñOU·WÅÌQÙ®Ìòwûµ¸ÂU÷¹µß½@®<êCpµ_^xùâ¸ÂÕq^çâüÛÐÀ®ú+W¸Â®p…+\Á W¸Â®p…+\á W¸Â®p+\á W½¸Ú}¶Á®žíêu>®ží*"uW~±òØÕ W¡ÝMg®pu«¯nŒ+\¹·§îj8V¸Â®p…+\¥Ì W¸Â®p…«”YÅíêæòp…+\á W‰±Â®p…+\á*eV¸Â®nK^^¨¯~«YEìJ_Á}b=ÀÕ°¬¢p¥ï§“½¬Ô½KZïÈ„+\UÛÛWúJÛúßd\yÙ ::àò6"2oÚ]võözWe÷'ï#¯‹ü:ÇUœ®2saì¼ë–¦O·ï¦êâÛúzÛm,«ð]Y×'Îê+ú;t%o ï/«¨]Uwßê¾²úS]éUÑý%ØÎ*âöJ7SÅÉ ·/pçøªy/ÓÞÚ«ôæ†gÕëùàë\Ÿv´V®ÆWéÍ‹&æêbž|>˜ɽã+/\ù&<ï;ãêªöC ž³>Γuå«^Çí…&usI\áê™ó z©ñà*vVýÏ‹JX¸rÉ*1Wº½R3•¸Š½¹ê{|%³› \EΪ×óAó95YÙ‹+u=dù±†òÆãYs"KDÈÊçæ*Âë!ëó…vnÁŠÑÕW®]Ù×C–oêè÷r¬Á€®nï­ë!«7¡õG²ú h\áª@t¦ûTá°®©u¼í•7¬‚sõæ>WÖ§2ëCÐ"6V¸êç|иªû¾<âóAX¥âjm>ò•5¾²!`…«\UÝàºùM +\õìÊ|¶½ú¦Y„®¼b•ˆ«ò³í'Ÿ«ËÕW=»*‡í™~?'Êù+¿XÅîêæòèq…+oYá V¸ÂUƒ+\Á W¸ ¦Ä¬úd…+Xá*iW^²Â¬p…«PXá V‰ºrX%êŠ„È W°Â …®`…+b«ò™®`Õ'+\Ñâ V¸ÂUì} ®`…+Jˆ+XኄÒâ V¸"‡`TáŠÆ W°:à W «êf…+Xá U¸ÂUü¬pÅì®h¬p…«”Yá U¸JU ¬p…*\¥¦*àíÇãª^Yá U¸‚®p»*\Á Wœâ W÷ªŠ‚®h«pŸ W¸JX®Wá U¸ÂU¨βª‚qõ:ŸÿæBˆÑ&uWÑ¢ÊU6QI»ŠYÕ0®JQùx›¬«¸Q äj÷n¥\uô„U¸ºÇÕþ»UÂíU¨q%ïø7©Fð©¹JCÕ ó ­—Õ!‹äÎSAu`þ U±»Šå¾¸Ý¤’AE{Õ'ª„Te…+z¿`\éóAøç¯ÒD5H{µ_v¾1›«dU Òî—“ø]%8¤ºš•« Î;g®"qõ&qU¹Š|Üž8)\ÑûáŠÞ/V¸¢÷ý®"rEïׇ«ýòìLzt® u«;*xý¨ \ÑNõçªó# ‘¹zCï‡+ªà]]|ë/|W˜z˜Õ¼›.âuEC5ˆ«+>Y¬«7Œ¨žÇŠù+HÝà W¢¹ºã|ð÷ê‹Ì‡,‚~R®X¥ì RÞ¸2ïáÈ<4%| *g¬îo¯B_1 r?hOlÜ©ÞXÝó>NÕ.Âq©~YÝQÁ¹Yeb±›ÎBp©XÝÿþàz¼Í:.šæ+H ÅêþÏ3d£ÍS RAªz묂íöÊOWžÕ#ã«G>1# ³ª»*XŽ6ûåýÃ+® åÕM¬¢˜¿‚”oª‚w)Q‚þž¤¼Uê÷¼ Õ©»Pü>=_¤îV–+HAê¾ æ{^ ‡Ô G.úýž¤úÒô$R÷öƒý}Ï R=@z:©§ð»(Rîü¸Óäµ+H=MwUô„ãÿ.g.ŠœÔÛ^3è®Þ1nYeãí#m-Ö"õ–øÆÍ<Ãì ?(úÀ‡EϸBC$¹k^T¹zòù ˆùÞ„éå®yQéjýäö \i»’ó¢…«ì±ÙÑsÅ‚+IWzfôeå¶Xp%窿bÅQ¨.\=­XpáÊm±àŠÕ•×핳b±…+gÅ‚+&Wò]ç­7œéãi¯²¢¥õTàŠ¥”´&Þ¸W<ã«õc²Õ=¸‚v•©‹@æÂ»ëÉ€+\W»©i©|¾®¸‚;¬ÞröÙ¸Â_…S,¸p®t]™÷û?¸|v%/X;9ìÞ­¡¹—×ãöÙ!—ß›˜„骋ú÷ÊÕî³ú/XW.øáJ~PÞÓ+|WVŸˆƒáÇWrÖj={ú÷Rn¥>ÏP Ü‹sÂÇ®2êW%‚ËWWu–æ"<¬?pyïªúÒjÞu·^_«\ÊKŸëÛ×1ê…y]kÈêßÕZ7EÙ¹Û†¿Î«ïØç=¡ÿu†¬>]åæÃ »é"ÚöŠf«oWÖE¶×gæÛ³Z_`ã+F[ƒ¸²n pöÃWæ½éÎaX@õ.\ 4½AŸ˜¨«°ÿô¡E{å¸O®èpuÍõd®X*ðjÖ Ç~y©1 ¾N臨à‹7“‹¡:Õ_º™\4•-¯*8¢š GÄ="®èq…+zD\Ñ#âŠW¸B® …+dá Wвp-\á*mY¸‚®…+\¥L WÈ´p…«”eáj8Z¸Â²p,\á Y¸¢3IJ®p…,\1βp…+Fð¸¢É²p…+:C\Ñdá Y¸Â!®h²p…,\á X¸ C®pE“…+`á Y¸Â°p…,\ W¸z¾,\áŠ& WÀÂ}!®p•:,\ WÀ®R†…+`á X¸ÂUʰp,\‘P`á X¸"¡À°pEB…+`ኄ WÀ©aá WéÁÂ=!®H(°p,\‘P†X.6íu>+þÍ‹¿§ÑWiÂræ*›¨G \%ÙºrUŠÊÇ[\¥Ë•«Ý»•rÕì ELÄݺrµÿnE{•0,7®d‹4©Fð¸J¯'t´U­—Õ! ÎÓl°˜¿®®p•2,\1tÇ ¥Á°pEBé qEƒ…+ ,\á W$X¸Â®H(°p…+\‘P`á W¸"¡À®pEB…+\ኄ W¸ÂÁ®R†…+\ኄ W¸ÂÁ®R†…+\áŠà W)îpEp…«”aá W¸"¸Â®p,\\á W¸®®p…+\á WÄOX¸Â®®p…+\á WW¸J®p…+‚+\á W¸ÂÁ®p…+`áŠà W¸Â®pEp…+\á W¸"¾Á®pEp…+\á W¸"¸Â®p,\\á WÏÈ~)TF\áêiÉÄB?ÈÅ W¸zZkUiÊÆ[\ äªÏôRÁ¯ó…y˜7{Â3BpE{E_½¬ôƒÝ”ñ®žÙêæ±£µÂ®¢*–àŠà WWWW¸"¸"¸"¸ÂÁÁÁ®p5D±$ò$œ"ìM¨\q¸(W+ŠÀ‡‹"pE¸¢\q¸(‚B!„B!„B!„B‰2¹bânõ™Y½ÓrÖêjªîŠÈÝïEÞËê‘Õâð:Ÿ¸c5+Š˜8.'WWéuWD^¬~7uºÕšWHOÙ/åäæâÜÏŽ>@Ùh㴜׹t守×ùÌõ^ì—ò/#{Y9®¾¢¯òÞy­÷ÇW/oQ.§ådã?ªÅUyóšø.Ѝ\9®þ\-ª?HgY6.ËÙ½[­•+WEd£ÍÕ˜Çá^èîo¼í¥Bú^÷çzŒå¬yëéÊ]™(,ÙA¹_v[ÎÚí¼h6Úè;;º+ÂŒ¯"™uü¶AÕIEð>ÎÌíÑÊ̽ýâx‡B!„B!„B!„B!„B!„B!„B!„B!ÞE_ ÁN6ÓÏf³ËËr¥+se²–+”áŠàŠøáj­®÷#¯;ڬǿȟ?ªk•©EŠßª‹r«ËÍ8näJWæÊ}ª*þGþÜW®Ö£M!JŽº^Vá_$ô檼ÁhÓêJÿV=(ï Á‘#WޝöKÙ¶ºÒ6ÎÆ[}ýÎà¯Kúë%ª®öJ7P…«òú”Wä*W¹˜éÚ+B®u%ÁÈë Ÿ¸’w6:_¡‹\=nŸÈ9„¦+u¨îQ(¯f]=ˆájÖı+=^š©«T*Ôdjþj«~Ê¡ü$+ç¯F2óW°"„B!„B!„B!„B!„B!„B!„BHlù?‚íüÄendstream endobj 117 0 obj << /Filter /FlateDecode /Length 699 >> stream xÚ…T]oÛ }ϯð#–jbŒqÞÖµU[­Ò–xíC;MžMT©qåß/·ÙV­²d.—{ç. (5Šư$4ÂU3TDífò2“"w'¦[Êqæ&ãhœÓ› ÂÑ…š|3 ¸Éœœ Ÿ×“éUQF(‡8'YT/ÿš¾Ñ)*˜•8ª»è "NJS0gKÖ3Ù2ÿ¨o§W9Š*X‘Œ8¤Ó™ádRD=ÄUL1P½>kv'8#à~†Á¼„·ÐZ9˜Ÿ9Þ¾íÇõ9\„õÅЬEð^߃ÅÞy»‘]‚wcJg¬Uœ˜A‰§çLtUUÿ-&Ê*H©UÁª ¾†O&¥¬ÀÆ"•À샋ÞݪͶé¹VÒÏ—ª÷Fרý‚ÉÕ°ö®F‡1„îd;ð1QÌ¥7E3ða×±íj{C áËwè§yá™ÑM0Æ&Ç0·¤›Þ¨“ç¸l•P+ÞZŸ­çà.È—+ŸGÓ-“÷¥JþÐ*ì¸àRªa8óésø,TÑ<ì|ÏûaÇ´÷«¥_™^7–êÞÊzÍ%sYæ4Ÿ>À«aèÖ1ÍL·jëÎ8 ú”if~hæsQQ}¬Õ=7ý-í¾ƒWÙ4—!Ÿ jÇ™"J£DR’\𞵃w;FÖà.}ï´î5óN­ÄβöS[°WlT[óv\“~tbXƒ Á·Zñî£N 5¸í´¼4*m·‚·ï.ëpû–L¬ó>ö²sÚE ‹]o›Û‹ô1s¶çìàs3l•E% Ú–æ–QšTþGÞ×K„….h¸h~‰pZkó°Ì|zAOÒ]¯¬‡a«gÓéáp€r¥¡T–`ÓÀ•ÚO¿~?_üürs>årϬßh·ÝòÃ7 aÍý7Kqž*äšdrYO~`e endstream endobj 118 0 obj << /Filter /FlateDecode /Length 119 >> stream xÚ31Ö3µT0P02Q02W06U05RH1ä*ä24PA#S¨Tr.—“'—~¸‚¡—¾PœKßÓW¡¤¨4•Kß)ÀYÁKßE!ÚPÁ –ËÓEŸÁ¾Ô¨o€B¬Â@ø €a—«'W $o&|endstream endobj 119 0 obj << /Filter /FlateDecode /Length 218 >> stream xÚeαJA àÿØb Í>Âä Ü]vÏÃjá<Á-­,ÄJ--mo|±é|y§¼bœ˜áÄC®ÈB†þdyÆ-Ÿj /;~ìè…ú•æ¶Ä2xx¦õDÍ-÷+j.µKÍtÅo¯ïOÔ¬¯ÏYó†ï:nïiÚ0Ùýêñs ü’#ŸV¾œH€ˆø…|ˆ¯Ä›œ¯Foý;sŠ+lqÎ…¤à÷Ƕ÷d,²6ª‚ɺY'=alp µ¾Œ+ù–‰Êè%ÐÅD7ôpëendstream endobj 120 0 obj << /Filter /FlateDecode /Length 196 >> stream xÚmŽ= Â@…'X¦Ù#ìœÀMX£XüSZYˆ•ZZ(Úêm’#X¦Œo[±Øf–÷æùa5•B&x#/~,§’¯ì+ÌEÓÇñ³†ÝN|Ån…-»f-÷ÛãÌn¶™KÉn!ûRŠ7 !ÒH”ë›ÈꇨÖ+UÊ4jôdcÞ‘‰æM¦µ-å­@l_ Ϥô"j‰~Ð' f& Ê”Ö74˜.WHÁe °Ê4ù½’©A— où \s`¸endstream endobj 121 0 obj << /Filter /FlateDecode /Length 181 >> stream xÚuα Â0à+ ·ôzO`RL'¡V0ƒ “ƒ8iGE7±}4¥Ð±C1Þ…:”ün83d3Òdäf”¥tJñ‚F“Žòq> stream xÚmαNÃ0à‹2XºÅà{H¬¦.X*E"L0"‚5)oÖG1o`‰Åƒ©¹saAõð ¾ÿt7;ž/¨%KGvAÝ)ÍNèÁâ v=ÿ¶4ïG÷O¸°YS×csÉÿØ WôöúþˆÍòúœ,6+ºµÔÞá°"à§<€ .L)'¨rfë¢Îù;‰î“õÚGpåŸaF¨Ù]1Píõ¢.š­ä;Á´a?2ÈyWL ǹGõ•9^ÖþÄjoÉó.G¥ò¤8Œ¸2T‰Já‘=ã"b<èXL’á-Ϋ(UM+®eÊýw1•ëÒEK[¼ðÙzAendstream endobj 123 0 obj << /Filter /FlateDecode /Length 194 >> stream xÚ}Î1 Â@ЋÀ4Á9IH,¬„Á-­,ÄJ--mÝMoð¦L2ÎL‚ö±vY~ Gc 0äG8 q bÉD9ìŽðׇàÏy ¾Yàå|=€Ÿ,§È9Å ¿Ü‚Iѱ…ËÊ_­êª½ÆâŸ^cÞÖfì“8y/âû>Éß_[;b¥–â Psõ®fm]vÒ¨íº”¾V½i».¥o­VÚ·¥¥Ü[e¤Ú2‡™¼ ¹t6endstream endobj 124 0 obj << /Filter /FlateDecode /Length 156 >> stream xÚ31Ö3µT0P0bcKS#…C®B.cC ßÄI$çr9yré‡+ré{E¹ô=}JŠJS¹ôœ€¢. Ñ@-±\ž. ì ò€øƒ=2>çgÀÿÿg`†àñzÑp=×aÁÿ€ø&fᘘ„?Àqýÿÿþÿÿÿ†A|.WO®@.ïûJÏendstream endobj 125 0 obj << /Filter /FlateDecode /Length 205 >> stream xÚб‚0à# $·øÜ hA%1!ALd0ÑÉÁ8©£ƒFWáÑxÁ‘ÁXâ`›|Ã]ÚûÛ‘5°]2hH}sB–Kö&žÑr¸jиjíOè‡(6d9(\G.éz¹Qø«™(Úšdì0 Ô„é¥9Fÿ"­ºZ ,EÊÔIIQã«Úx Ð%ª¹ÿàUóì¢4d]Ô†G­ mQþMSÐÏáež[ò©p )yX$³>ïñ“Aã&à<Ä5¾NÇXêendstream endobj 126 0 obj << /Filter /FlateDecode /Length 230 >> stream xÚ}ͱJ1à9®X˜&yw×Ýl œ'¸…pVb¥–ŠvbÖ7[ñEâ(6W77V8±0/™É̤möf‡Rɾíö@fµÜÔ|Ïmcq…×w<︼¶áòÔ²\vgòøðtËå|y,/䲖ꊻ…PLdK?ÿ³“ìt4ýg1:üVuÈ&*Þ Ëw×#ïú¦ºÞ%è{"ßo¬×OÖpº‚($BòÁJ(D|p¤0hÚùÊðŽ®øšÍs^>Û¹3˜k¸•ý ÝðcÔ¤RýP5¿²¸y>éøœ·ZsYendstream endobj 127 0 obj << /Filter /FlateDecode /Length 154 >> stream xÚuɱ 1 €áŠƒÅG0O`¯\opÎì èä Nêè èjûh÷(÷ŽblÂ-ò…?ñå´šaUŸ—Óƒ+”>·$?Ž¨Ø–ì*_Á†5Þo3Øz³ÀÜ î šH1D¯>‘1Cf$t c¡U˜Ia.…È<5¾ÌGa ¼ûD"JLKLü“`` ?:•RŽendstream endobj 128 0 obj << /Filter /FlateDecode /Length 194 >> stream xÚuÊÁ ‚@`Ń0Áy‚Vq :f‡ N¢SuìPÔY£Ó7|;µÁâ4kuh¾ýçgd4ˆGôOÆ q¤ì^Í·=@’X¡” fÜ‚Èæx>]ö ’ÅC)®C 6¥èh¿[®¦Š —¨¡’}PíOmåwjØŠnì•ÖîØÎÖ¬¶ÕGe·¿rÛºµInùOsá•&yÅ?Í…_˜ä[ßæ*o©&+jIÓÓhò»‡iKx—‚»endstream endobj 129 0 obj << /Filter /FlateDecode /Length 180 >> stream xÚmÊ1 Â@Ð )ÓxçnBVÁJˆÜBÐÊB¬ÔÒBÑÖÍÑ"^doà–)BÆÙÕBÁbÿFåƒáSÌøTŽù÷œ@ùžúêÃî…¹F•œó R/ðr¾@Ë)òZâ†?· KŒ¨6•ˆéA–}’c‰Eî-Û ol¼}´Á:X}±“·"jþ³&x±ûoÂvÁV$öGCÖëˆ* š~‡™†¼êõfendstream endobj 130 0 obj << /Filter /FlateDecode /Length 198 >> stream xÚmŽ1jÃ@E¿p!˜f°s‚¬ÄZ1®d¢"W.B*'e »öh{A¥ ¡É(&E óàÿaøíª-¼Ñ]{öü^Ò™|¥ºXär8}RÝ’;²¯È=©K®}æëåöA®~ÙqI®á×’‹7j$¹ô€•2©%32É« ]Ì„hzØdL²¦úsÇ×_Lÿä_ØÄY£t:wÌjh^Hù;„F´U.Úo%m¥Z”ö-è/LRzendstream endobj 131 0 obj << /Filter /FlateDecode /Length 230 >> stream xÚuνNÃ0ð«:Dº%à{â„:&Km‘È€bj@°’¾y?BFiŽ>@U¥JÖOöÝùîÜò¢¸‘L—²È¯Å9Y^É.çwv™î/·}ãUÉöI\Áö ¶å½|~|½²]=¬%g»‘ç\².7B>š@TÅ*ƒvPU‰<ÜÓL_Ã: ØÑ¼¡y;§3‹ýóÄd4œÑÅ0 ½ã1õ¤iÈï{±•‰˜O¦K[¨lû£5LQB}!ѿՑßgìŽlO­4 b ó¦ûçÛ’ùÜv›endstream endobj 132 0 obj << /Filter /FlateDecode /Length 228 >> stream xÚuαJÄ@à )¦É#d^@7!¹;­îN0… •…X©¥…r׺ë›åQro°`³à‘ßY#\qØ|,ÿìðOÛœÏ/¥’…œÕÒ¶Ò,乿7n–šV2oÿFO¯¼êØÜK³ds­9›îF¶ï»6«ÛµÔl6òPKõÈÝFˆ@fØ*ñÉá;€á!É…Y$ ‡rHôT Ö'Hq‰Ä˜8(ý)坨 Ýp^wáeðÖç ÛÐ *ô ½LÉ1j ¢~-SÑ‘1qø‡ì—x 0hãD˜^)㫎ïø Zz endstream endobj 133 0 obj << /Filter /FlateDecode /Length 179 >> stream xÚ}Í1 Â@Ð]R¦Éœ¸‰VBŒà‚Vb¥–ŠÖÉÑö(9BʈÁqvE‹y0ÿ3LªûÃÆ8àI3Ôî8BªyÝêŠírj…©5ã”™ãùtÙƒÊL@¸N0Þ€)PR+IÔFdêÆÞ’jIW¢ZÈE,×Î&´¬ *>¨„`…óîí¼íÛ°ù°þmôÔþ³÷´ú²$j¼üŒ¼åKÎaj` ¿†Uàendstream endobj 134 0 obj << /Filter /FlateDecode /Length 206 >> stream xÚU1jÃ@E¿q!˜foÍ ¼Rd\ l¬Â`W)Bª$eŠ„\v¶Gä)U8ÿM—b3ûàí¼™µK­tÁ™ßk³Ð×Z>¤iyWùÌâå]V½øGmZñ[¾Šïwúõy|¿Ú¯µ¿Ñ§Z«gé7Љ}'8³„Îl€"M !#ÊT ‰pˆp‘›P\‰©`‰~ÀԅƲꌀE¢Œw€KÕ¸r40À€0æïâ‚ß=æO%›òÐËAnªRZAendstream endobj 135 0 obj << /Filter /FlateDecode /Length 176 >> stream xÚuϽ Â@ à”nYúæ ¼Ö«¢ µ‚7:9ˆ“::(ºÖ>šâ#tìP“C…îãòÑKm8¡˜ÆrÒ¥#:&xAk%5ÕÆáŒ™C³%kÑ,¥ŠÆ­èv½ŸÐdë9%hrÚ%ïÑåHD¥ÐëbæfþRú›¯A¡#´JÓAà©;=L•â—Vi„@ …&ª!`®”ÈnOY—õoò .nð îRðendstream endobj 136 0 obj << /Filter /FlateDecode /Length 178 >> stream xÚm̱ Â0àH†À-}„Þ˜–´ŠS¡V0ƒ “ƒ8©£ƒ¢«Í£Å7é#t¬P<“àRt¸ûïŽËÔ8Ÿa‚SW™B5Ác P¹Ë‰~q8C©AnQå —n R¯ðv½Ÿ@–ë9¦ +Ü¥˜ìAWX·œ µÂÑ ²0ã-‹‡FV°_j,{üáÍâ€aý€Ñ—ÂðÞÿé\wî¸v‘ðpzQÃèI6ð&‹]+endstream endobj 137 0 obj << /Filter /FlateDecode /Length 176 >> stream xÚ=Ë=‚@à!$Óxæ.dÑ@ bâ&ZY+µ´Ðh‡Á£qް%gù+æËÌ›¼@.Wyò!É5Ý||¢4™gNó¸>0U(N$#;NQ¨=½_Ÿ;Šô°!EFgŸ¼ ªŒŠÖêš®³Ú~ë3§˜œ ⻂|¦ž°4Øš±4#\YüÀª¨]˜ˆgr¦1äõÄWOÕLÉ$ÓÇ­Â#þbVO˜endstream endobj 138 0 obj << /Filter /FlateDecode /Length 197 >> stream xÚ5Í; Â` à€ƒ%7°9‹õm`A'qRGE¡C¡GàEz”¡c±æokB>òbwÚÝ!›Ü—²ÜéñÞÂÚ&ë”QvGû¨Öl›¨æ²Eå/ør¾P—¶PMyc±¹EÊQÑ·( ˆ5Ò•;Š¡‘iÒ?Í’ä•Ä5™Ó-7€î- ÇÇ«y¾! ^P+Ì<§$r4¡+n ”„¬"©ID>8óq…?áUÑendstream endobj 139 0 obj << /Filter /FlateDecode /Length 216 >> stream xÚEαnÂ@ PGNò’OÀ_ÐKH@b!¥`b@L´#ˆnˆ¤vý“Hý¶Þ0öe`¸'Ûwg»ÈßFJ)—SŒ)Óg†G,†’§šêÅþ€³ 톊!Ú…TÑVK:Ÿ¾¿ÐÎVÓ6£t‡Õœbö%71w%;Ã]Í®û:$δ &À´ƒ nKoW1ò]Ћp¿©uû²tÁF@ˆƒu¨°ÞFÿjü§ïM0ùÕ>ÉŸÔ)è” èÄN¼6ª²#0˾¢ jÜ×ñ£Â5>Ý[¦endstream endobj 140 0 obj << /Filter /FlateDecode /Length 224 >> stream xÚMαŠÂ@à )„iòBæÎÍâ´‰ày` A«++µ¼âŽ®ˆè£åQò)·®;»Áló±ü3ìüj:™-(#IorNjNÓœNPå6Íh¦úÑñW%ŠOR9ŠÍQ”[úû½œQ¬vï$Q¬éKRvÀrM`ºØèÈ> stream xÚmŽ= 1F'XÓxçf× Vº‚[ZYˆ•ZZ( vz4²G°L±¿‰?•ä13yLâ²Þ`(‰d8.—,—mÊv}ô‰¶z±ÙsQ±]Šë³bʶšÉéxÞ±-æcIÙ–²J%YsU äf”÷7[qòáƒ(hžÊV£ì ¨©[“©it'äzS¤í•ˆÈ[Œ vý».Qô*šFEŠññQ¯"xÅ¿ ?>â¤&žT¼àwse–endstream endobj 142 0 obj << /Filter /FlateDecode /Length 203 >> stream xÚ}Ï¿ Â0ð”…[ú½д´Õtj3:9ˆ“::(ºÚ> stream xÚuн‚0ð’[xî´‚âD‚˜ØÁD'㤎]…GãQxFBí¥1èòKû¿~\Šq4CCM1Åx à"Ö¡“¨«ÎJà[1ð¥ŽËÞ®÷ðt=Çx†»ý=È ™W3ƼV“¨‚¨ôTQ˜ÎScýÃ6ÔCC5Ä5”ŸQ·˜š±•>ÕRÍ›p(s©Ú5MÛ’‚`_ä=´=ÍËÐ?Í¥ËèGrú¥J‚"Z–S°°òZ¨endstream endobj 144 0 obj << /Filter /FlateDecode /Length 137 >> stream xÚ31Ö3µT0P04S02W01V05RH1ä*ä22Š(™B¥’s¹œ<¹ôÌ̸ô=€â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. ò ü ö ò ö öêQqC=C=2Ãp\ÆàÀñ†   \®ž\\Õ8æendstream endobj 145 0 obj << /Filter /FlateDecode /Length 205 >> stream xÚmÏÁjƒ@à_<sè>‚óQ‰iZ &…z(¤§BNMŽ9´$7ÍGÙGØã$f–+–ù`f`ù'ϯó³TºäE‡„~(Ù=iÝâûDEIѧ1Eï2¥¨üàóïåHQ±]³ôÞ%ï©Ü0ð TžÓù‚õõÏ‚ Ú¾QmÐ÷} WG?p…j2ü6µ€êNŽÈ`ÇÔž}Å}gvÀä‚öµjèPhCLQmŽQ€ÿ +àI.½•ôI7y-q¡endstream endobj 146 0 obj << /Filter /FlateDecode /Length 273 >> stream xÚu±NÃ0†Ïòtyß @¥!°ÔR)`b@LÀÈ‚ 5ÞúXñ dcÄ£‘¢çÒÒ‰ÁŸìÿ¬ûî&å~uD9Õ´WÓ¤¢ên |À²–0§ƒê·rs³³K*kÌN%Ƭ9£§Çç;ÌfçÇT`6§«‚òklæ :Aò¬P<Ê‹ÙaîÀ2÷Ð~½z`³ôj0:hoTн Y¡“,ílR7Ý"fSíÒ®_‹øÇ¢‡Åâ¯á°®@œ¾c9´ò1XÊ·£¼ôtíX Žu¿Æ(c¹Ar³°ˆâ6yÀ.ߟ!nÕC½Iœ@­ŒqqHÝf Ø`Wž4x?lÿ„endstream endobj 147 0 obj << /Filter /FlateDecode /Length 199 >> stream xÚ¥=‚@…‡PLÜ è²ÈŸ bâ&ZY+µ´Ðh«£xJ Îd)è-¾bß›yó6šÏâ¤3šf%gtÖxÃ0e5 $¬Ó ƒjOaŠjÍ:*³¡ÇýyAUl—¤Q•tÐÑ”àÔîÀg&Ì›ß}NÇr à5ƒÅr^± ÅaÛý2󆿶ã“Ê®ä`‘Õ׉iÿ`œ•»r_zHé&=¥¯| z)3”óWwøFHH—endstream endobj 148 0 obj << /Filter /FlateDecode /Length 203 >> stream xÚu1‚@EÇPLÃLœ è‚ÁÊ1‘ÂD+ c¥–&j´ŽÆQ8%…gd•B-^6™ÿgþß‘;ðÆd“Oý€\¼€öžqðÇ~£ìŽƨÖ4 PÍyŒ*^Ðõr;  —SrPE´qÈÞbt ÇLR~3&0 £è> stream xÚmË¿JAðOS¬Ls/ î<{ÇÞù§ñ FðŠ€©,ÄJS¦P´ ¹€/¶²Â6å‰G>÷ÄÎ Ìæ›™ÒŸV—šë…žkYjéõ¹ñUÊrõg¿‹§…Œq÷ê+q·)×Lõíõ}.n|w­…¸‰>š?J3Qà©®V{X‡‰u¶îGÁ†>‹vÛ×Ñv£Ý}1’‘=@nšȘ^í@›Æ2"Ýu)âõ÷'Ñn6?"±2±ÅÒÄÀÄ£ü‘…ÿ˜ÔrÓÈL~‰Qendstream endobj 150 0 obj << /Filter /FlateDecode /Length 151 >> stream xÚ31Ö3µT0P0W0S01U01QH1ä*ä26Š([€%’s¹œ<¹ôÌ͹ô=€¢\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. | @ …°v¸ˆ:QƒAØÿÿÿÿA=øñN€¹ ?@J@#˜ø€ƒ`pì`ÖÑÀÀÀåêÉÈ\z> stream xÚ=É1 Â@EÑR~“-¼ èäg”`£#8… •…¤RK EÁJ³4—âRZ„ŒÓ(œêÞ‘Ž'̨–Íi•ª<¨œE‹3æö÷ö')˜-µ³ CŒ[ñz¹Å”ë9ULÅ2«ÅUD‹¸CÒ#õMx‘fÀx¢ñi‹çþß î€,œlä õ‡* endstream endobj 152 0 obj << /Filter /FlateDecode /Length 102 >> stream xÚ31Ö3µT0P0"3#C…C®B.#¨‚)T&9—ËÉ“K?\ÁÈ’KßCÁ”KßÓW¡¤¨4•Kß)ÀYÁKßE!ÚPÁ –ËÓE¡þÿÿÿÿÿÿà >—«'W ²©$Ìendstream endobj 153 0 obj << /Filter /FlateDecode /Length 99 >> stream xÚ31Ö3µT0P04F– †† )†\…\@Ú$l‘IÎåròäÒ pé{€IO_…’¢ÒT.}§g ßE!¨'–ËÓEŸÁþ@ýúÿ!Äncàrõä 䄬eendstream endobj 154 0 obj << /Filter /FlateDecode /Length 179 >> stream xÚ31Ö3µT0P0QÐ5W0±P0µPH1ä*ä21 (˜™Bd’s¹œ<¹ôÃLŒ¹ô=€Â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. @ÀxD2?@ì,Î&å¤=ˆ`¨C"ÿ€ù ™? ÆaÄdÃjðÆŽa¦›ìÐÝ„lÔMð¹Iž$bº‰¿Ÿ‘ÜÄ6†¡Lr¹zrrШAendstream endobj 155 0 obj << /Filter /FlateDecode /Length 221 >> stream xÚuÏ1nƒ@Ð(VšfÀ\À^Ù’¥PXJªQ*;eŠDv m²G tØ Æ.’æ­4#ý¿J—Ù†c^ó"áUÆÙŸú¦4—aÌY:mŽ_´­È¼qš“y–1™êÀçŸË'™íËŽ2%¿'PU2µ|„þ (ßÚ2w(Ú¦E-zD6¸BÛðFå”{ íDØIÚ3ê?¯”ûmgDíŒj #’× Arf#érµÑNN,t']´÷cÉá^Þal о¢Wúqái7endstream endobj 156 0 obj << /Filter /FlateDecode /Length 170 >> stream xÚeÊ1Â0 PW"y€#Ô' MKU˜J‘È€CÅŒ X)GëQz„Ž U‚ƒ€ Ïòÿö8eSŠIÅ<Ò e ž1ÉÉ5ß—ý rKIŽrÉ5J½¢ëåvDY¬ç¤P–T)Šw¨K@ô1c5³ ™0|2 GÂÞAô¼w=ÿý œ§/t:ŸpZßÐi|‘óø©­m¬µí—˸иÁI Ptendstream endobj 157 0 obj << /Filter /FlateDecode /Length 229 >> stream xÚmбN„@àCA2 À<ÀÉ™X‘œg"…‰WY«ÓÒB£­ðh<Ê>%aœ™K¼Kî6ðegçß]B}}µ¾å’k{ox½â·Š>©®´.­´Æþƒ6-Ï\WT<è*í#ý¼S±yºc]Ýò‹ny¥vË@6CG'=D"ŠŒº,2ùdíf‹Fzìé-måý©É™Áé1º:šƒð;Ý_w1Â|4™Ìt4³hæn7˜öµ¾)ñxæñÜãM> stream xÚUпJÄ@ðYR,L“Gȼ€nb.r6¸?` A+ ±RK Eá*ï-’GH¹EØq¾‹‚²ð[˜Ýý†ÙE}Þ\I)—rVÉ¢‘æBž+~ãziÅRšz>yzåuÇá^ê%‡k+sènäãýó…Ãúv#‡­r·¢69MD^õH…jO­ê@‡±IÉGJä¢3&ƒþ`ËM´·S¢™ øñ—|0ÚÞ8‘oæFˆ ¡¦xoÍí2(ð"~øB³9~…ÚÐò}B@BTB_Cm˵c1a´H9æó˜Ôzã x×ñ‡kendstream endobj 159 0 obj << /Filter /FlateDecode /Length 214 >> stream xÚeÏ1jÃ@Ð[¦Ñ4'ðJ–T¨±@±!* q•"¤JR¦°±» ë¹’n+¨s«.*„70‚,̃ýË0³i²Èr‰$C¥™dKyyωf‘^õáí“ËŠí³$9ÛG¤l«­§¶åÓƒÄl×òKôÊÕZˆ¨hÁYqžb~ÁOC~O¨•xCH7Lü-…VhPjeÞLã hAØ€‚&j¢Ψ\ïœ5Ó™ØÖëÿcîtsŒÃ·|纚ñ¦âÿþ*fëendstream endobj 160 0 obj << /Filter /FlateDecode /Length 224 >> stream xÚuϱnÂ0à‹2Xº%{â˜D,Q*5C%˜ªNÀÈ@Õ®uÍâGˆÔÅC”ë™vaˆ‡O§³ìûoQÏšGªhI† 5†N¯X¯¤YQ3ÿ»9^pÓ¢>P½Bý"mÔí+}~|QovOdPoéÍPõŽí–À2GpÌÃ=¾AΘ&ÈnÄ òè<ä?ÜCžþÆ Þuj„Ò«…W=AP!÷BzÙO²P½ÿSÜðBé%­í$”ë¤bpR«l°J–,³Laî ã´œ•øÜâ¼p.endstream endobj 161 0 obj << /Filter /FlateDecode /Length 247 >> stream xÚm1NÅ@ D'JÉMŽ_òC~Q­ôùH¤@‚ŠQ%Z6Tƒ«ä({„-SD1³Q ѼÂcg¶íqwªíõ¨Ñm§Ý‰>4ò,mÏáF»öG¹’Ý õ¶½ÔK=\êëËÛ£Ô»«3m¤Þëm£›;ö d ´ p³ˆÜlFaùŒr&ª@¸©˜áGÂPÌÙŠÂ>pßO¼ôcÝÂëÿ(Ã{zóU­àA¬L/”˜»Œ.²³°ßÄÞ©8óð’Éå|kùØës†endstream endobj 162 0 obj << /Filter /FlateDecode /Length 202 >> stream xÚ]; Â@†GR¦É2ÐÍšD„€p A+ ±RK EÁB–£ìRZ㬺†8Åóø¿‰ÂN< €¤¤¶¤¨Oq—vöxP~WÛŽŠ…=3ž£Ps:Ÿ.{£Å˜$Š ­%TWRU•ÎE:å]þÈî7€ ®ÐâœÒàÁp †§~nµ(->ºGCW;]Ý@ýâõGÏÀ5vœ*\â jwR]endstream endobj 163 0 obj << /Filter /FlateDecode /Length 251 >> stream xÚU±NÃ0„/òÉ‹Áÿ @ÒTêd©‰ H01 NÀÈ‚µÍ£åQü=X1ç¶bùdßoßݿꯇ´²–«NVknä­ÓŸº/b+Cž¼~èí¨›gé7º¹§¬›ñA¾¿~Þu³}¼•N7;yé¤Ýëq'€‰rTÎLÎ6çlÄqª#¨T%T©âÓ¤ˆE… µ§öjU$Tä;øÍxØ™VÌpya"ÝQ1ì|r9±@Åæ¡°“™afË6ÞM¨½q¸@…R¹þƒñÅ{æÔ¸éúÑ ÃÍŠ¢Ie¿€º,yZ¥,[è»Q?é_Wuçendstream endobj 164 0 obj << /Filter /FlateDecode /Length 241 >> stream xÚuϱN„@ÐK¦˜ä5ü€ ï”E–+’uM¤0ÑÊbc¥–­¡ó·ø”élé¤ <ï°ÆÎæîÀ÷¶åYu¡­õ´Ðm¥Õ¹>ò*eÍp£Uy> stream xÚ31Ö3µT0P04ÆÆ Æf )†\…\†¦@¾ˆ –IÎåròäÒW04åÒ÷ sé{ú*”•¦ré;8+ré»(D*Äryº(0|`þÃþ‡ý?‚Ø?0àü öêÔ?ø vƒ—«'W Èa*‰endstream endobj 166 0 obj << /Filter /FlateDecode /Length 187 >> stream xÚUޱ Â0ES:Þ¢Ð÷¦µ±ÐI©Ì èä Nêè è&´ŸÖOé'8:knh †ä@Î}7D%“YÆg¬X¥Øç˜n”¤ÆE¬¦68])×$÷œ¤$ׯ’Ô~ÜŸ’ùvÉ1É‚1GGÒ ³æxos «ï*!‚¯¹…ø¦÷~‡ÑÖù²ŽZoŸ(kÌ ‡²B" PõÑðqã>´.îÛ¶ø{€°xcA+M;úç–=Äendstream endobj 167 0 obj << /Filter /FlateDecode /Length 118 >> stream xÚ31Ö3µT0P0S04S01S06QH1ä*ä2 (Z@d’s¹œ<¹ôÃŒ-¹ô=€Â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. òÿÿÿÿc$þ!°‘ ¨øÿÿ Àb\®ž\\ÏŠ>Ãendstream endobj 168 0 obj << /Filter /FlateDecode /Length 187 >> stream xÚU޽ Â@ ÇO YúÍx­w8jotr'utPÜê£õQúŠ5I-Ôåù$±f2›cŒ-ZƒÖá)+GZŒv*Æñ™½Cã@¯Hí×x¿=Π³ÍÐ9îŒàsT/¥Ô¨"ŒkFÃ㇠ZFQ"¶Ã7!Ø\LÅ®{»kwÅ; #e´%ç(𮈻iõÓÇÜ›^/ªaTtY!ŸÉ)yçÉ@,=lá M>kendstream endobj 169 0 obj << /Filter /FlateDecode /Length 188 >> stream xÚUÌ=‚@`6$Ópæ.?’`# bâ&ZY+µ´Ðh+œL9 G ¤Ø°Î nñ¾ÌÌKfÍâúQæ!Æ!^¸C”ÐîëUçdø£ø†®ÀÅŸ×x¶[a<Çc€þ DŽ–eI ëÛÄ™p?šïˆ×“éÄR󞬱§öÊ?ÜjÄ+ R¥ I}ëi*»qúèÔD!™jUÇ”T­¡©¿ÁZÀ~'dØendstream endobj 170 0 obj << /Filter /FlateDecode /Length 222 >> stream xÚmбnƒ@ à1Dò’GˆŸ @ C§“ÒT*C¥dÊPeJ;vhÕ®GãQxF„kû²D‰d>á;Ýñãòñ¡zâœ×ú”WôM¥õ¹µörú¢MMÙË5e¯ºJYýÆ¿?Ÿ”mvϬý–ß ÎToHˆÈèNî [`ÑCZ,{µÃª3ïVÜZµwŒ¼ ³™LæR¿D·Ã%Ú»º{F:™ÉlZY<ÀߨFãåÉxmãžÝéhÒÁîW£ÿõÞÆ IÄÇÓxLz©iOÿ¸Çñendstream endobj 171 0 obj << /Filter /FlateDecode /Length 237 >> stream xÚ¥Ð=NÃ@à¹Xiš=‚çà˜ØB‘,… á * D)S€ µ÷&\Å7ÁGHéÂòð6.‚DIói5û3o¶X—k]꥞åZ¬µ¼Ð×\Þ¤ÈY\j¹šw^ö²©%{Ô"—ì–eÉê;ýxÿÜI¶¹¿VV·úÄ;ÏRoðƒÐN>`aö˜}x3 H‡”V½£mH¨ñâbŒ&oÃNúhà»h:€+T¨p²=Úüq::þϤ‹º>¾F›_²/C2ã1eÂyaÜ:ÄùÜèã#fœÃÉ`ÖÅèx–!7µ<È=cendstream endobj 172 0 obj << /Filter /FlateDecode /Length 208 >> stream xÚuн‚0ðkšÜâ#xO `âD‚˜È`¢“ƒqRG®À£ñ(}FB½ЄĤý¥ÿ~¦øópE.-¸K =ºzøÀÀçìšh.wŒStŽøèlytG¯çû†N¼_ç„N¹gL‚\kÐZ—ÖÊZƒ™o¤’-ÀT c Úš[£âçìÛº8RõòfÉÂ_yOwyö_¾ªµ6ƒ|pd‚mAÔ&²Â:©­•QV&òƒ£Ò˜¬ÐöëíP€®$> stream xÚuÎÁ ‚@àÂ\z'HÅ Á òÔ©CtªŽŠºEúh>Šàуh³kˆeͰü³°;ÂûSrÈã#&ä»ttñ‚Bpvd”‡3†1Ú[í%OÑŽWt»ÞOh‡ë9qŽhç’³Ç8"h¸re¡)¡¯‘ƒQÀ¨5“ñŸVzV \¿4Ù ¤0°i:“·uç“ûÓl3%üRk-Le00½µÏöåøãæËJÍKÀEŒ|ñ}xBendstream endobj 174 0 obj << /Filter /FlateDecode /Length 186 >> stream xÚ}Ê1‚@Ð!$Óp™èBBE‚˜Ha¢•…±RK ¶.Gã(’‚¸Î.ZHÄIæ%ÿψÙ$ŒÉ§)¯ˆ) èàEÄÙ×QgLsô¶$"ô–Ü¢—¯èv½ŸÐK×sâœÑ. yF •R 0ªýRG5X-ØXÍ NPƒSÏnil¡Ó•b“EOþÒ&¬4>ÀíØ=ŸÆöŸVgÓWªÊX³Ê(ßê9nðón endstream endobj 175 0 obj << /Filter /FlateDecode /Length 232 >> stream xÚ]Ð=NÄ0่4MŽà¹8!U¤e‘H¢b·¤D±Â9Ú%Gpé²!±4_ñžfü³jO»K®ù‚O^swÆÛ†^©í%¬¹k—æù…Ö#™n{27“oùýícGf}wÅ ™ ?6\?Ѹa@Ï=ü*Å€2¥€*£ :À¢ ˆ(}!½Wj¡t™Y¨W=-ó0ð‹Í|3á?*¹|ÿ—Ÿ z†clÞbó¾´`Q$9R “Š2S ³Ž¨œù}Q:¡Hq/“þ3@×#ÝÓ7çp@endstream endobj 176 0 obj << /Filter /FlateDecode /Length 193 >> stream xÚmÐA ‚@à'.„·é¾4ZŠ´Ì Yµj­ªe‹¢¶i7ó(Á¥ qš§ 3üo~f‚ù4\G3½C½|:ûxà ҹ|pºb"Qì)ˆP¬õ…ÜÐãþ¼ H¶KÒ9¥ƒOÞeJ5 jPÊRÍÈnî|À-`ÒY€››s.°9Ä`6.°¯?•¾ðgÖ[÷êÂ@KÛ´Ö`UfíŠ lviÖ)¹À–üÊ¡™‚öÞJìæ¸’¸Ã/V±endstream endobj 177 0 obj << /Filter /FlateDecode /Length 156 >> stream xÚ31Ö3µT0P0b3SC…C®B.c ßÄI$çr9yré‡+[pé{E¹ô=}JŠJS¹ôœ€|…hCƒX.O†úÿÿ0üÿÿÿcà?ÀÀÀ &pö`‚Q"êpÿ@Ä#˜øƒ`pì`â2Qì¿pOþaàrõä äIVRendstream endobj 178 0 obj << /Filter /FlateDecode /Length 163 >> stream xÚ31Ö3µT0P0bcSC…C®B.c˜ˆ ’HÎåròäÒW0¶äÒ÷Šré{ú*”•¦ré;8+ù. ц ±\ž. õÿ00üÿÿ™‹1 ì`â‚LÀAȃ‰„=˜`ÀAÔƒˆ:\Ä?ñ‡ÁDÔ¡ÿÁÄ Qÿÿÿÿ?ÿQˆ ±\®ž\\Á˜[Éendstream endobj 179 0 obj << /Filter /FlateDecode /Length 242 >> stream xÚmбNÃ0à?Ê`é–¼Aì' ¤ª¢X*E"LSadÈ`µy^ÉoÀ+dc$¢–sŒT@•|Ÿôßù»89šžª‰:æšòÉÕ]NTÌ8ÑV4¯)[ªbFÙw)«/ÕóÓË=eó«3Åy¡nr5¹¥z¡°é ìzÈí^½ÅÆAHœ¿ ^Ù_öŸÑk¢O mb¶2ñ{Ë o)Þ¼IP¶X—’5•”`ÓÑj´5Ò†uiSyû½² ®9iÙ^ZÃ&­WÀ‹ÄÁŽW9ˆ õ+¿å§ûo w }:¯éš¾ˆ¢{{endstream endobj 180 0 obj << /Filter /FlateDecode /Length 221 >> stream xÚmÏAJÃ@à¿tx›9BÞ šFSŠ›j³tåB\U—.”ºjir½‰ä(s„én„¡ãË š…ÿ}ðÿ³šâ|2»à)ŸÉÍ$9?åôJÅ\z¨ÝÃú…–e÷\Ì)»–•²ê†7oïÏ”-o/YúŠrž>RµbÔµƒ·ðGx×+£$qP-Tô ªú8aÚ ý ¦Hñ«Ú”@\¨fñgm£{`Ü%íNGõP¸ iÛk,FÓû=pk0Žjluo-9¢Ôðþ¿m·Ë骢;ú[Ê|endstream endobj 181 0 obj << /Filter /FlateDecode /Length 194 >> stream xÚ}ν Â0à+„[ú½'°ÿ‚S¡V°ƒ “ƒ8©£ƒ¢sóh}”>BÇ¥ñ.EÁ†ËÇý$$q4MæäSÄ;žQÐ)À+Æ!×¾”28^0+ÐÛQ¢·â.zÅšî·Ç½l³ ®sÚä°È ´Ö Ä,¶5yoÔ“ÚfJN©Ñ­>¾ãÕTåHA¶±-£ÝIÓå?”ò±6*‘°<”+¼º1­ÁvL{°ùµÔ¢yõˡ˷øäjÒendstream endobj 182 0 obj << /Filter /FlateDecode /Length 244 >> stream xÚmÐ1NÄ0Ð¥ˆ4¹8I±U¤e‘H¢Z()XA»ö 8W‰DAÉr„”)¢5c‡H€ÖÅ“5¶ü¿\Ö+.¸äÃU͵áCÏT•2,¸.ç“í­[Ò·\•¤/eLº½â—Ýë#éõõ9Ò¾3\ÜS»aXà½wÑ>:@æ~²^M€ê¹¤:ÌÚ_6‹ù¬;â~±qá…ÉLÇ ‚VrﻘëðÓJöX&{بäÈ#’‰Iz³c&ñ4ÃÍÿ~¸àg'ò¯.¿ýÑz¨w'©ÊÏÊ—¸ì EJsY#袥ú´}×endstream endobj 183 0 obj << /Filter /FlateDecode /Length 245 >> stream xÚmÏ1JÄPàYR¦É |sÍÆ}!°®` A+ ±RK EÁÊ—£å^a2Å’ñŸ‰‹6É̼yÿ‹«£úT–å°’x"õ±ƒ‰pÂ,ÑÎ\@Ç_³Ùès/*g.ù ù)¨&éÖL“ÙøOPëãv˜Y´µ‡ùÏì`nî ÿ,ß{à·ùOÄ›Mx±[l)õz»i²ç&µ$©vªX?zÎÌòEË7ü }„t£endstream endobj 184 0 obj << /Filter /FlateDecode /Length 163 >> stream xÚ31Ö3µT0PaS 2TH1ä*ä21PA $‘œËåäÉ¥®`bÀ¥ïåÒ÷ôU()*MåÒw pVò]¢  b¹<]ìÿÿÿÿ¯HüG#êìêÿ1Ô3Ôÿa¨c¨ÃFT0üc°a`øÃÀ€•`?pÌ`â‚L<ÀAðƒ‰8y0Ñ€LðÿÿdüÿL€Å¸\=¹¹7X^´endstream endobj 185 0 obj << /Filter /FlateDecode /Length 207 >> stream xÚmÏ= Â@à‘irçºY“€V þ€)­,ÄJ--mMŽ–£ä–â8“mR,„Þì›d“gãbF)Mid©˜Paélñ†y&ÃT'ÝÉéŠóÍžò ÍZÆhÊ =îÏ šùvAÍ’–Ò#–Kª¸vÜ07·}ý> stream xÚU̱ Â@ à”B–>‚y½;m§B­`A'qRGE7iûh}”>BÅA‡âyM½ŠIøù!þxLH’’4PðìžÐ—Ôt0úF»#F Š5ùÅÜÜQ$ ºœ¯ÑrJ ELEr‹ILY Ù[¿A3š7¾yx…¥Ïä–ZJÈÒ–^ µÅyY\¦²˜ü‹Ç-nÕÏ-!ü‘vÜjËýÕQ8¥áÉÍäÿ€)Æ|œ%¸Â\0okendstream endobj 187 0 obj << /Filter /FlateDecode /Length 196 >> stream xÚ}Í1 ÂP à_ Yz„¾Øëàb¡V°ƒ “ƒ8©£ƒ¢›´=ZÒ#tìðè3É$‚BøHþGò’éd67‘‰#fKcºQ"³&úrºRVP¸7IDášc ‹yÜŸ ³íÒðœ›Cl¢#¹©,ªÁ pŠÓN3¿EÐxLíuH… ã%Æ=ÁbÔË=ÓÖSZ`ð T‚šI™4³JáÅVè^…¯´Bó¹ùùç ÏñeßõŸhF«‚vôý}Zendstream endobj 188 0 obj << /Filter /FlateDecode /Length 167 >> stream xÚ31Ö3µT0P04SÐ5W05P0µPH1ä*ä26Š(˜™B¥’s¹œ<¹ôÃŒ¹ô=€â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. òÿÿ30Øÿÿ߀JÅ€ NÔa!þÁ‰?˜#‚øI0#ˆ˜;‚x€Ið#ˆ˜„<‚hÀ$ì&ß»ÿÿÿÿ‰z—«'W !èVŽendstream endobj 189 0 obj << /Filter /FlateDecode /Length 172 >> stream xÚuÐ1AÆñ…ä5Ž0ߘ]cÕ&k%¦P)D…RAh­£íQA©;Cñš_ñ½êÿºº  ƒV:FÔÇ:¤i]âèyYm)5¤æÐšÔ¸šI™ ûã†T:"$•a"X’É ¤µB$Öž?!ä›Ä#rlj£tÜjžCÝsehx. MOÁ ‹¯¾ßÒÿ¹¹{•}R¾ÈmU@#C3zäTñendstream endobj 190 0 obj << /Filter /FlateDecode /Length 197 >> stream xÚUÌ; Â@à?¤¦ñ™¸ ‰«` A+ ±RK E[7GËQr„”)–Œ³Øh1Ìë/òÉtÎ)—ZEÁyÉ—Œî”Ï´OCç-*2Îgd6:%Smùùx]É,vKÎȬø˜qz¢jÅH€HƒH¤C,â10êã\ÀÖq‡¤ŽEÏÿqRc,ŠS4EB€è¨µH<,l«)®o ÿËðe@ä¡ß®±ú¨)]¢ôšîúX¼í!í¸£uE{ú³/^qendstream endobj 191 0 obj << /Filter /FlateDecode /Length 212 >> stream xÚuϱJÄ@à_R¦ÙGÈ> stream xÚ•Ž1 ÂP †q(d°Gx9¯¥OA ZÁ‚N⤎Š®mÖ£x„ŽÒ˜Á!$!ù¿'3NØ*Φ|IéNYÐ>±Öç-KòÎùNÉ—[~>^WòËÝŠSòSNNT ȈD'Ò i!Š4y;ì‘·ÑGwp{c×ȃjCeè ß s»]Ø—ÊžZž†º.þ"US³“‚9©-­KÚÓ¦IÆendstream endobj 193 0 obj << /Filter /FlateDecode /Length 193 >> stream xڕα‚@ à’.<} L— &Þ`¢“ƒqRG®â›á£øŒ—;[pqÓᾤ½´ý 5)+ÊHñ+•9ís<¡’^&¥|ìŽXLפ*LçÜÅÔ,èr¾0­—S⺡MNÙMC±€Ä  ÿ$z1Ú1Þwxï!"Ëûâ>ô<æôZ™iá&³N°?â>cíH ãRa¸ÊÉHŽ'c Ë:ÇÑ´m™¸O,Î ®ð —ºYKendstream endobj 194 0 obj << /Filter /FlateDecode /Length 201 >> stream xÚmޱŠÂPEï’âÁ4ù„ÌìKˆ¬® ›BÐÊB¬Ôr‹mM>í}ÊûËâì}VÌ™;ܹ“ú³™i©“Ô¥ÖS=Tò'uÃù9&aÿ+óNüFëFü·â»¥žO—£øùêK+ñ ÝVZî¤[(²€ÂÐÛ f#2³;܃J>ÂPD´Cˆv@Z }•ˆ„‹÷c½C  ¤7¸¾Ð'Ð* 4u‘ö.æ7ú¹mp Ìb2ræcÀòÝÉZþI÷_þendstream endobj 195 0 obj << /Filter /FlateDecode /Length 154 >> stream xÚ31Ö3µT0P0asSC…C®B.cßÄ1’s¹œ<¹ôÃŒ¹ô=€¢\úž¾ %E¥©\úNÎ @¾‹B´¡‚A,—§‹ÿû@âÿÆÿÿ˜AûŸz ñHð?°*;&põÿÿÿš4A€Åðk£aÿÿÿ[~ `1.WO®@.òÅ^£endstream endobj 196 0 obj << /Filter /FlateDecode /Length 253 >> stream xÚ}±JÄ@†ÿ#E`š}!óšÄä”k.pž` A+ ±RK E»#›ÎÇðUò(y„”[,g‚²ìǰóÿÿÌÖÕÉzßòq¹áºâꜟJz¥º`;볟Öã íZÊï¸.(¿ÒwÊÛk~ûx¦|wsÁ%å{¾/¹x vÏ’€4¸ˆlnfxYé•DdöItÁ§S¶n\Å#7@efd=º`’El6X4jB*²`„éá¾fÀ}E_éh0‡íb•ôj“1SLÍ€,xÝ>v*‹Å!*:MÃö–Æ¢ó½:²?-y‰%Û§F‚Í@—-ÝÒ7ãè‚>endstream endobj 197 0 obj << /Filter /FlateDecode /Length 161 >> stream xÚ31Ö3µT0P0bcSC…C®B.ßÄ1’s¹œ<¹ôÃL ¹ô=€¢\úž¾ %E¥©\úNÎ @¾‹B4Pe,—§‹Bý øÿ¬“Œ‘ò@dý ùóÿ? ùûÿ ùB~°o’äAdƒü ÉÀ$ÿÉ?Häz“õÿøÿÿÇÿÿIˆ8—«'W ƒzúendstream endobj 198 0 obj << /Filter /FlateDecode /Length 132 >> stream xÚ31Ö3µT0P0bcKS#…C®B.cC ßÄI$çr9yré‡+ré{E¹ô=}JŠJS¹ôœ€¢. Ñ@-±\ž. ì ò ØþÃÄ@òx@ýÿ@ü€á?×C1;}pýÿÿþÿÿÿ†A|.WO®@.üØO)endstream endobj 199 0 obj << /Filter /FlateDecode /Length 198 >> stream xÚÌ;‚@à%$Ópçò.¨H)L´²0Vji¡ÑV¸‰Wá(xŒ…[Æ_­Å~Éü³ó‡Á0ŠÑEŸ_ècäáÆƒ=’¹2Êb½ƒ4gA ΄Spò)§-8él„ôŒs˜ÃQ¹yÀendstream endobj 200 0 obj << /Filter /FlateDecode /Length 115 >> stream xÚ31Ö3µT0P0b e¨bÈUÈel䃹 ‰ä\.'O.ýpc.} (—¾§¯BIQi*—¾S€³ï¢m¨`Ëåé¢PÿÿÃÿÿ‰zÁÀ<Œˆúÿÿÿ7ñÿ,ÆåêÉÈî{\Wendstream endobj 201 0 obj << /Filter /FlateDecode /Length 171 >> stream xÚ½Š= Â@…·[˜&GÈ\@7!Q°1#¸… •…X©¥…¢õ^,7ðæ[n±ì8šÎȃ÷WÃÑ3ä‚r„Å9œAl&’ø]ö'¨-˜\À,¤c—x½ÜŽ`êÕ s0 nå¹Û =œî=Cê¿bq䙣Ò1 S¥e¬”ö‰K•vI'ì’ö‡mrÿ/)Tžòì8R`ßû¾‡¹…5¼ízfÊendstream endobj 202 0 obj << /Filter /FlateDecode /Length 155 >> stream xÚ31Ö3µT0P0bcc3…C®B.ßÄ1’s¹œ<¹ôÃL ¹ô=€¢\úž¾ %E¥©\úNÎ @Q…h ÊX.O…úòþÿ¨ÿ$þÿ$ÿÿÏÀPÿD2þÿ`ß$ȃÈù@’Hþ“Èô&ëÿ?:ñÿÿÿÿ7 “q.WO®@.‹£llendstream endobj 203 0 obj << /Filter /FlateDecode /Length 183 >> stream xÚ}Ž=‚@…‡XLÃvNàBL¬H·0ÑÊÂX©¥…F[Ù£íQ8¥…a†‚Îb^2ï}¹™KJ)*%³ K†w4÷Ò‹ó +‹ú@¦@½á)j»¥çãuE]íV”¡®é˜QzB[Ä_P¥ ¢:˜…ðá9o’.êAµ@9(¡dq%Ÿ»7@â'a¸ý/=ßµÓGÃ.^¬ÄTyhÆ ‰”pÁ A!\\[Üã>P:endstream endobj 204 0 obj << /Filter /FlateDecode /Length 200 >> stream xÚ¥= Â@…g°¦ñ™ èfI"¦üSZYˆ•ZZ(ښͣä[.(w“€–‚S|Åæ½7q4HRYs_8Ö ù éL‘WCNâvµ?Ñ$#µá(%µp:©lÉ×ËíHj²š²&5ã­æpGÙŒs” V,ÈS*7;(& A‰]ƒt,¾à -À•ÇýGTÎÀµ@Û8×=ÓF–>¼®á ¡¯†¾$Úñ¼Ë_È¥÷ªùF­Ñ<£5½Þ¯ìendstream endobj 205 0 obj << /Filter /FlateDecode /Length 158 >> stream xÚ­É1 Â@ПJø—ðŸÀÝu£Äj!Fp A+ ±RKAEëõh9J¼AÊÁqc!Ú[̃™Ií`4-ØԈËÞð™m»îjw쎜{Vk±«y\Yù…\/·«|9ê½e_Hx’+5ÐCôÑ8´äÂ#‚$ÒRC®¡¹šˆ\õ¡ì¸ÿBÿ"¨¿xo<ó¼âõõIwendstream endobj 206 0 obj << /Filter /FlateDecode /Length 185 >> stream xÚMË1 Â@ЋÀ4!s7q5Æ@T0… •…X©¥EÁÊÍÑrr‹ñ,,Þ2³óÿÔŽg©D’€MÅ&rŽùÆv‚=ê×þpºr^°Ù‹°Yã—M±‘Çýya“o³YÊ!–èÈÅRÈùr¨êGB®ù7 }Kïÿ´D#"×eZS¨¡W¡ÿ!§ˆ("P÷B Ca÷£}­¢9ª6A«ª=> stream xÚ31Ö3µT0P0bc 3…C®B.cS ßÄI$çr9yré‡+›ré{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]ä€Àž¢þÿÿÿ @ü¿A€ÅH2…‚ù`€hàÀ ß €AþAý~ [@óÿ Œÿ€LxÀÀåêÉÈþ:B„endstream endobj 208 0 obj << /Filter /FlateDecode /Length 148 >> stream xÚ31Ö3µT0P0bcc3…C®B.ßÄ1’s¹œ<¹ôÃL ¹ô=€¢\úž¾ %E¥©\úNÎ @Q…h ÊX.O…úÌÿþÿ`ÿ…¬ÿÁ $0ð()DÚÉ? õþÜÆðêdƒ=˜”ÿH2ÿcÿÏÀåêÉÈÄ£d>endstream endobj 209 0 obj << /Filter /FlateDecode /Length 186 >> stream xÚ5Í= Â0ÀñW:oéúN`ú¥ÐÅB­`A'qRGE7©…^Ì­×è êØ¡4¾Ø”É? ‰Âé,&žQ@áœÎ>Þ0ÔÍÓ[}pºb*Qì)ŒQ¬¹¢zÜŸévI>ŠŒ>yG”½•¥:ÅôJ•^ý›]ƒS |Á-,ZHZX:È^<rœ[CÂ×Á准’qÊz¤b&Õg¤aì¦QŒ¥À½†¿À•Äþ$›Lãendstream endobj 210 0 obj << /Filter /FlateDecode /Length 174 >> stream xÚ31Ö3µT0P0bcc3…C®B.ßÄ1’s¹œ<¹ôÃL ¹ô=€¢\úž¾ %E¥©\úNÎ @Q…h ÊX.O…úÿ `Ôðÿ?ÃÙaCÄÙ00~ @2?ÀDv`²N2~¨+þߎ ¿#Èß``’ ?Ÿ‡“¿¿G#«¾g``¨?øA6 Hû†@Rž¡†ËÕ“+ Ém¢endstream endobj 211 0 obj << /Filter /FlateDecode /Length 202 >> stream xÚEŒ; ÂPEoH!Lãœø£‚UÀ˜BÐÊB¬ÔÒBÑN!…Û²³t î@Ë!ãL@,ÞaæÌ»·µ{¸£¯Ûá¨ÏÛ™ lµÃfOÄܒ£¹©ZrÉŒOÇóŽÜp>âܘW!kJÆ‹/ŸLnRüQ;”H¡(Ô+€Øû­Üp{Íçh¼¯€/ O ¨.†êçê«oŸk> ¹¶´¬4¶ú…¥4Wè¬&F&ž”™äRŠ¢ª§ÚÑ$¡}¨xY&endstream endobj 212 0 obj << /Filter /FlateDecode /Length 237 >> stream xÚEαjÃ@ àßdˆ‚ÁzöìØ)ÍCšB=Ò©CÉ”dÌÐÒnÆvÈÐ×jé‹:tÍ&É=Žûîî$%ñÍpÄ!ø:ºãdÀñ-¯"z¥X£!—Znh’‘yæxDæQâd²¿¿}¬ÉLæ÷‘™òKÄႲ)—Ö³µ[{²v§È­õöð+ïðOPy5À‘ Æ@®²äÌ©¤äUíð·-Gÿ[ùÙ;z¿Êßàµ[*ö‚l”ãŽBÉ;¥v\ɼHer”;åSú¾H‹R §Z88 ¾~íKôÑßÍa{endstream endobj 213 0 obj << /Filter /FlateDecode /Length 117 >> stream xÚ31Ö3µT0P°T02W06U05RH1ä*ä22 ()°Lr.—“'—~8P€KßLzú*”•¦ré;8+ré»(D*Äryº(Ø0È1Ôá†úl¸ž;¬c°ÇŠí Èl ärõä äÇ\+ßendstream endobj 214 0 obj << /Filter /FlateDecode /Length 116 >> stream xÚ31Ö3µT0P0V0S01T01QH1ä*ä26ŠE-Àɹ\Nž\úá Ææ\ú@Q.}O_…’¢ÒT.}§gC.}…hCƒX.O† øA-Âþÿÿÿ€øÿ4‚Šv@  Ã¹\=¹¹emH™endstream endobj 215 0 obj << /Filter /FlateDecode /Length 136 >> stream xÚ31Ö3µT0P04UÐ54R0² R ¹ ¹ M€Â FÆ0¹ä\.'O.ýpC.} —¾§¯BIQi*—¾S€³‚!—¾‹B´¡‚A,—§‹ƒüûõ?€ðÚÿ‘ÿÃÿ‡áÆŒ?˜?°PààP—«'W ŸÒ,5endstream endobj 216 0 obj << /Filter /FlateDecode /Length 103 >> stream xÚ31Ö3µT0P0W04S06W02TH1ä*ä2 (˜B$’s¹œ<¹ôÃŒ,¹ô=L¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]êÿÿÿðÿÿÿ0 âs¹zrrå$~endstream endobj 217 0 obj << /Filter /FlateDecode /Length 99 >> stream xÚ31Ö3µT0P04F †† )†\…\@Ú$l‘IÎåròäÒ pé{€IO_…’¢ÒT.}§g ßE!¨'–ËÓEAžÁ¾¡þÀÿ0XÀ¾AžËÕ“+ ‰;“endstream endobj 218 0 obj << /Filter /FlateDecode /Length 157 >> stream xÚ31Ö3µT0P0UÐ5W0¶T0µPH1ä*ä26 (˜™Bd’s¹œ<¹ôÃŒ¹ô=€Â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. ì@ÌÀß#äÁHÌD؈:Q'þ€ˆ@Ì&> f0ñd˜82î>3Ñ dfâ ¸™¢Dp¹zrr@Ä:Õendstream endobj 219 0 obj << /Filter /FlateDecode /Length 203 >> stream xÚ= Â@…_°L“#8ÐMLRØðL!he!Vji¡h'š£å({„”!qœ-–6ß²ó`ö}›ÄÃtÌ!'<ˆ8 9ñ1¢ Å© å»äp¦iNfËqJf)c2ùŠo×û‰Ìt=ãˆÌœw‡{ÊçŒÞ@в¶^m ´­…ו„û•W÷¨”x:ô däTLdOñ”€_Öû'¤X`–*ºw]!WÒ¢qµ½z¨‘º9KõUóïÐ"§ }}dÃendstream endobj 220 0 obj << /Filter /FlateDecode /Length 141 >> stream xÚ31Ö3µT0Pac S#…C®B.# ßÄI$çr9yré‡+Ypé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]Øø XŠí¸ˆÿ7001;×ñ¾Äójä‘Ô®ÿÿÿÁÿÿÿ?À0ˆÏåêÉÈÅFJÜendstream endobj 221 0 obj << /Filter /FlateDecode /Length 222 >> stream xÚe1N1Eÿ*…¥i|„Ì ð.›-V Ab $¨(U ¤A›Ý£ù(>BÊÑóÓ„,?kÆÿWíEw¥µ®¸kí.õµ‘i;¯O%/¶ï²$=iÛIºó®¤á^¿>¿ß$­n´‘´ÑçFë6Šx0ڄʬ ˜íÍŽX⌾T†~ÂèËϰœfGvÄlŽâgØ×ÎOÈ —˜À<|žðHTGÇ‚+î©¥µ§Ë‡D5ÿWôTŒL3ü*Ù¡¸=·‡2šÿÐþ‚½,·ƒ<Ê8hñendstream endobj 222 0 obj << /Filter /FlateDecode /Length 226 >> stream xÚEнNÄ0 ðÿé†J^òñ @ZÚHH•îC¢L ˆ @°Ò>ZåáÆ§úl·ÀŸDZãTåe}Í9W|Qp•s}ů}PYkP·å|òòN›–Ò#—5¥[ SjïøëóûÒæ~Ë¥?œ?S»c„€Nz¬DÈDF‘â˜Mˆ&4=:4§WâLì• «hLºVÆÚšÄQ—5Aýâ1;Í,òw×Ki üs°Ä™ãÇ…à Îdw;«Ò-¯—y"ŸÍ§\Û¼>¹ÿí[z 3áVc4endstream endobj 223 0 obj << /Filter /FlateDecode /Length 181 >> stream xÚ•Ï=‚@à!$Ópæ.¿ bâ&ZY+µ´Ðh £pJŠëL±hë$ó%ó^5YºÌ Š(áÍʺÄxÇT²HN)Î7¬4ª¥ª §¨ô–ž×Uµ[QŒª¦cLÑ uMþÁÄ„B9ÓÌÆ›‹‘ñGÐ3aç(if ãMŽÅ( Œ/½#ì˜`Ëc„÷—V2öOZË¿Z;ý®5îñÜþtýendstream endobj 224 0 obj << /Filter /FlateDecode /Length 207 >> stream xÚ¥Î= Â@à‹À4{„Ìt³&)!à˜BÐÊB¬ÔÒBÑÖ,x¯’£xË’qFEÐÖæƒÙ}o“¸v)¢„ZŽ’ˆRGk‡;ŒSʱóÚ¬¶ØÏÑÎ)NÑŽeŒ6ŸÐaÜ íOäÐiá(Zb>$Ã\CÈÌßÈÌüǹ.ì5ïªTʺ)ñ7¢ ½œùPÐ €ù\è)'…ߘ'å-,e›ù$9óÒ‘• i«ÌŒþ `¾AƒYÒ Öš G9Îð-²c—endstream endobj 225 0 obj << /Filter /FlateDecode /Length 241 >> stream xÚmŽ1NÄ0E”"Ò4¹ž @’T––E"Th+ ¤Ø´±æ£ø)S„ ãÍ“ü=3ÿuíEÅ5w|ÞpWsÉ/ ©í5ÔgûýóüF»ªGn{ªn5¦j¸ã÷ÓÇ+U»ûkn¨ÚóSÃõ†=6™Ì@! `dÕHpÑë³Îç³¢˜¢¢Œ°0g0º°¿p ã†\ÏF<'Ÿ"D´MÖbLz[‚Îë€õZj6]*7DEñã?°?(£j”A…LP5ãË GÕÔ¡˜µ(O•Y*GÒ@BRƒæ ›è þ5pIendstream endobj 226 0 obj << /Filter /FlateDecode /Length 183 >> stream xڕͽ Â0à+Â-¾Þ hÓ NB­`A'qRGEÁÉöÑú(}„ޤzW©Eqñ _Èå~3°#ò) ¾¦À';¤Æ#ËI~š×Ïö€¡Cµ"cQÍ8ÊÍé|ºìQ…‹ iT­5ùt]ãÁ‘ Ù'é`œ010%p1ßà ­‚içBÆt*R¦—€t 2;nB)¼û½¢¦•×4㪙_T+~Ѭý‹.œ:\âãM†endstream endobj 227 0 obj << /Filter /FlateDecode /Length 213 >> stream xÚ}O» Â@œ`q°M>!ûz‰I «€0… •…X©¥…¢­É§åSü„”Áõ²W؈p w»3s3Y:Ê'sÆÃ„³˜ó1ºPš»¡{¦~s8Ó´$»å4'»tc²åŠo×û‰ìt=ã„ìœw Ç{*ç Ó(¤Džˆ¼`D:„y#jAÔ BQ»SQ]9h@ø”¢9…׆mðÆ 3/"-PIÿoÓ™n•§ ÕªË×ÙñÍó?|ÉR3{¿¾‡6ÒnÚRûúæ}Z”´¡ëånendstream endobj 228 0 obj << /Filter /FlateDecode /Length 245 >> stream xÚm1NÄ@ EmÉÍa|HB’b«‘–E"Tˆj¡¤`í&G›ŽkøéHÅü 4ÒÓØ£ñnêóv+¥4rVISJ{!O¿rÝ¢‰²þ~9¼ð®ãâ^ê–‹k´¹ènäíøþÌÅîöR*.öòPIùÈÝ^(Ÿ‰(`)3SÚ˜èç¹1›É+-:%ô8p'?, ó\üú‡%ᔀ^Ê‚úH½"È4Ÿ)ÂM¡ñ©úP¨9%7¹Hiè/üŠ!©¯ Gó«dLºâ!n&{„ÁÈë•|ÚÒöÍ J™MøÞc_u|Ç_ž!r·endstream endobj 229 0 obj << /Filter /FlateDecode /Length 107 >> stream xÚ31Ö3µT0P04F Æf )†\…\††@¾ˆ –IÎåròäÒW04äÒ÷ sé{ú*”•¦ré;8+E]¢zb¹<]äìêüƒõìäðì:¸\=¹¹{-=endstream endobj 230 0 obj << /Filter /FlateDecode /Length 184 >> stream xÚmÉ=‚` à’.žÀ߉1‘ÁD'㤎]…Ä‹‘8p n #¡~ $(}úö­ëL<ŸL²å¸6y6í-<¡Óvf{¶ÝÃÅšÅ\¶(â]Î׊p9% ED‹Ì-Æ4 ð•Óžgö&ëÉ{ô¼øâ!1îå¥qƒú?µ\ÀÜ P˜ùCÁµ#ýA“dZz–4Àu ×,iºÔu8‹q…/ÂaoMendstream endobj 231 0 obj << /Filter /FlateDecode /Length 190 >> stream xÚ}±‚0†K:˜ÜÂ#pO`iÀ‰1±ƒ‰NÆI4º æ£ðõ®ØîKÿëÝùÓd¹Ê0FM•j\i¼jx@½˜%\îPPGL2P[ê‚2;|=ß7PÅ~¤K<ÑäL‰•s ´Â9×óËy|¥9#l K#‚vÓœ_ó[¹Z²½äC„N Ò_‹¦C£•èFôŒÏ,úa8è—‘[NÔøXT®®þQ­€ü÷âŠÝendstream endobj 232 0 obj << /Filter /FlateDecode /Length 147 >> stream xÚ31Ö3µT0P0b#SC…C®B.c˜ˆ ’HÎåròäÒW0¶äÒ÷Šré{ú*”•¦ré;8+ù. ц ±\ž. õÿÿÿÿÄÿ Øæ Œ„ † ‚ƒ`|$€lthv›bˆ)ØŒ‡6 ¢Žä£ÿQ Ø.WO®@.ÌŒ‡rendstream endobj 233 0 obj << /Filter /FlateDecode /Length 145 >> stream xÚ31Ö3µT0P0bCSC…C®B.c ßÄI$çr9yré‡+[pé{E¹ô=}JŠJS¹ôœ€|…hCƒX.O…úÿÿÿÿâÿHìó"ˆ Á€ƒø$`@±ØCLÁmQDýÿ ÿ!Ä( ,ÆåêÉÈæxôendstream endobj 234 0 obj << /Filter /FlateDecode /Length 108 >> stream xÚ31Ö3µT0P0bc SC…C®B.crAɹ\Nž\úá Æ\ú@Q.}O_…’¢ÒT.}§g ßE!ÚPÁ –ËÓE¡þÿÿÿÿÿÿà >ÿ†Áޱ¹›ËÕ“+ H¨X~endstream endobj 235 0 obj << /Filter /FlateDecode /Length 123 >> stream xÚ31Ö3µT0P0bCSC…C®B.cs ßÄI$çr9yré‡+›sé{E¹ô=}JŠJS¹ôœ€|…hCƒX.O…úÿþÿÿ€L€Å˜ŒÁN|Œ?ˆ êÿÿÿÿã?*ûÀåêÉÈé f’endstream endobj 236 0 obj << /Filter /FlateDecode /Length 174 >> stream xÚ31Ö3µT0P0bSC…C®B.cs ÌI$çr9yré‡+›sé{E¹ô=}JŠJS¹ôœ€|…hCƒX.O…úÿÿ0üÿÿÿˆø"þ3Åþ70`øH؃þ@‚ýŒ`?€#^¬„ùŠ^°Q`Cƃ-YÉ ²œä fƒ€² Ô$êÿ700€ F"Àb\®ž\\æ„wNendstream endobj 237 0 obj << /Filter /FlateDecode /Length 197 >> stream xڕСÂ0à›jrfÐ{Ø::"#a‚‚ ‰€€îÞ e0‰XvtmC‚ùÄßöîOõh˜Ž)¦„Š´¦TÑ^á µ²aLiâOvGÌ ŒÖ¤FscT,èr¾0Ê–S²iNûf‹EN†`æÒY9†»Q‰¶3p‚qNÊNÙ3¼ÿ¶ßO0ïÉn‹ßè¶ ×ÄZ¿’J4½&}þ5tÊò›¦y+™A²ý ½-ؼ+Ô€³Wø2>z endstream endobj 238 0 obj << /Filter /FlateDecode /Length 236 >> stream xÚu1NÄ@ E½Ú"’›a|˜„$ÕHË"‘ * D”H»$*â£å\!GØ2HQÌw€‰æÉãÿmÿ©«ãæT ©å¨”ºæDJÞsÕ ‰gõ­Ü?ñ¦åx#UÃñmŽí¥¼<¿>rÜ\IÉq+·¥wÜn…˜™åº2ûÐÌÌ4w„C0Mý€¤LúNÔéL”túAø ¨9ÁçÒ„Éa=tC¹6”8y€ÇF¢Ì›Ôa¥OÚ2éý/òaÁ<Ãô&ÄØùE>oùš¿åxvendstream endobj 239 0 obj << /Filter /FlateDecode /Length 124 >> stream xÚ31Ö3µT0P0b#SC…C®B.c˜ˆ ’HÎåròäÒW0¶äÒ÷Šré{ú*”•¦ré;8+ù. ц ±\ž. õÿÿÿÿÄÿÿ¡êêð@†H0 zÂþÿ(Qÿÿ—ËÕ“+ +òT¬endstream endobj 240 0 obj << /Filter /FlateDecode /Length 167 >> stream xÚÕË1‚@…áG(L¦áÌtYY +ÄD ­,Œ•ZZh´†£qŽ@IaGhôf'_ñϬ‹gÉ‚#}SËÎqbùléF.b27§+e™=»˜ÌZ3™bÃûóB&Û.Ù’Éù`9:R‘s)U*µH]JóíØý^‡¿w˜ŸøÂ¤Ôè¨%ÂH«´RQCôª/ê‰~ú´*hGo8‚˜endstream endobj 241 0 obj << /Filter /FlateDecode /Length 114 >> stream xÚ31Ö3µT0P04WÐ5W01T0µPH1ä*ä22Š(˜™B¥’s¹œ<¹ôÃŒŒ¹ô=€â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. õÿÿüÿÿ†þüa`üè?’›îçrõä ä—5ezendstream endobj 242 0 obj << /Filter /FlateDecode /Length 116 >> stream xÚ31Ö3µT0P0VÐ5W02W0µPH1ä*ä22 (˜™Bd’s¹œ<¹ôÃŒŒ¹ô=€Â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. õÿÿüÿÿ‚êÿÿc`¨ü¨æ`°›ÿp¹zrrléIendstream endobj 243 0 obj << /Filter /FlateDecode /Length 104 >> stream xÚ31Ö3µT0P0UеP0¶TÐ5RH1ä*ä26 (˜A$’s¹œ<¹ôÃŒ¹ô≠ô=}JŠJS¹ôœ ¹ô]¢  b¹<]êÿÿÿÏÄÿа—«'W *›endstream endobj 244 0 obj << /Filter /FlateDecode /Length 191 >> stream xÚmÌ= Â@à Óx„¸ ‰‚Õ‚?` A+ ±RK E[“›™£ä)S,;Îh%Xìûfæùh<¥” }å:exÅ\³T¿:8^pV¢ÝQ>E»’m¹¦ûíqF;ÛÌ)C» }FéËEÜ$ s­´àXBט^H”ȃ©ÁÃ@ž?|be¨®ŸàzY©E—ƒâÿðTZ_Õq×-`öRÅ!a~…ˆƒ„®K<.KÜâj/\endstream endobj 245 0 obj << /Filter /FlateDecode /Length 187 >> stream xÚŽ= Â@…g°¦ñ™˜„Ä"•#¸… •…X©¥…¢­ÉÑr”aË€!ãN;±˜æï½GÓY‡®âg!ŸBºR¤³@[]/”òw%ä¯Ü”|³æûíq&?Ý,ØõïÝåLƹ©¿+ðx•ƒ“À—´€"Ò¡@±y‰Rx Œ-¶0ª±éþ~Ð*ž?¢uîmÖ½rç!0±ƒe¥æ] ÔEÓ`ç%ÐÒЖÞ*Åszendstream endobj 246 0 obj << /Filter /FlateDecode /Length 182 >> stream xÚŽ1 Â@E¿¤¦Ik—9›°° Än!he!Vji¡h›äh%G°L2ΦÐÖ…}ðgÙ?of§óÇœêÅlS>'t#k5Ñ?œ®”;2{¶–ÌZ§d܆÷ç…L¾]rB¦àCÂñ‘\Á¤"iJzŒDˆÆ=á[5/”ÈjLAOåQ~Ñý‰ß¡@«B_ÕZ¯h4èÊJ—â5¡Î«µ^RMuZ9ÚѲuEJendstream endobj 247 0 obj << /Filter /FlateDecode /Length 198 >> stream xÚ31Ó34V0P0VÐ5T01Q0µPH1ä*ä21PASKˆLr.—“'—~¸‚‰—¾P˜KßÓW¡¤¨4•Kß)ÀYÁKßE!ÚPÁ –ËÓEÿó‚ÁþT‚zó !ÿHÔ±÷`øÁøþó†ú쀶¤ „|P±=˜i«‡u âÉDª)öph‘<„ÚkrF=ÈAï?0þ`<ÿŸ¡†½ÿ?ƒü?þÿ ì@‡s¹zrroXhIendstream endobj 248 0 obj << /Filter /FlateDecode /Length 189 >> stream xÚ]Î1 Â@Ð\˜B/ 8ÐM²(ÚЦ´²+µT´“èÑr”!åbI qáÁ23ü;èö9änÀ¶ÏvÈû€ÎdC)úlGUgw¤IBfÍ6$3—2™dÁ×Ëí@f²œr@&æm)‰Ú¸·2Ï©\^¡sϵ2¸Î÷¯HÅøQ‰RñþQÖOþø—Ö5ÉQÑJrµìhè M£íÂá„TårL¼@³„Vô½£@ endstream endobj 249 0 obj << /Filter /FlateDecode /Length 141 >> stream xÚ32Õ36W0P0bcSK…C®B.# ÌI$çr9yré‡+Ypé{E¹ô=}JŠJS¹ôœ ¹ô]¢*c¹<]ê˜ÿ70ð|À ßþ€ÁžÿCÿ`ÆÌ00ŠÿÿÿÇäè§3ÿa`¨ÿÿ޹\=¹¹¢&[endstream endobj 250 0 obj << /Filter /FlateDecode /Length 237 >> stream xÚ¿J1Æ¿00…ñ v^@³9ïäŠÃ…ó·´²+µT´[¸}´> stream xÚ31Ó34V0P0bS …C®B.C ßÄI$çr9yré‡+˜ré{E¹ô=}JŠJS¹ôœ€¢. Ñ@-±\ž. Ì€à?É&™iN‚ìaþ`ÿD~°’È700nà?ÀÀüDþ“ØÀÈä‡$Ù€‚ëÿÿƒÿÿ7 “\®ž\\yendstream endobj 252 0 obj << /Filter /FlateDecode /Length 122 >> stream xÚ32Ö30W0P0aCS3…C®B.C ßÄI$çr9yré‡+Zpé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]˜ø0È@A@ 8~Àüá? ±q©ŽØ0üÿ‚¸\=¹¹(CE`endstream endobj 253 0 obj << /Filter /FlateDecode /Length 150 >> stream xÚ32Õ36W0PÐ5QÐ54W0´P05SH1ä*ä22 (˜Ãä’s¹œ<¹ôÃŒ ¹ô=€\úž¾ %E¥©\úNÎ @Q…h ®X.OÆ ìø   P?`üÁð†Ø€¸ôE6Œ?êügüðŸ‚üc?PÃ~À†Ÿÿó.WO®@.ÿ§Wõendstream endobj 254 0 obj << /Filter /FlateDecode /Length 196 >> stream xÚµÍ1 Â@Еir3'p.#˜BÐÊB¬ÔRPQ°ÍÑr±0EÈ:? êdÙ³3ó7èuÂ.{Œô¸òʧãH‰ÆrCqJzÆGz$¯¤Ó1öÇ5éx2`ŸtÂsŸ½¥ […RÊüâë?´LõºæÝ3Ø‚ærÁÊkm‚¨„;xÔÂ3êH†Kv¤Ø@%¯â.êýoÔ nn—**ŒÉù@Ô¦ôDrendstream endobj 255 0 obj << /Filter /FlateDecode /Length 108 >> stream xÚ32Ö30W0P0aCS …C®B.C ßÄI$çr9yré‡+Zpé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]˜?0ü‡!þ ̃±ÿ`øÿÿq¹zrrÆ‚Q.endstream endobj 256 0 obj << /Filter /FlateDecode /Length 177 >> stream xÚ3³Ô3R0Pa3scs…C®B.3 ßÄI$çr9yré‡+˜™pé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]˜?ð`Àðÿƒý†ú@úƒ=ãƒ:†ÿÈ77Ø3ðnà?Î ßÀüÿˆþÇÀDÿa`ÿÁÀNÿ``ÿ€þÀÀþ`Ð O€âÿÿƒÿÿ7ÿÿNs¹zrr#߈endstream endobj 257 0 obj << /Filter /FlateDecode /Length 147 >> stream xÚ31Ó34V0P0bcs…C®B.C ßÄI$çr9yré‡+˜ré{E¹ô=}JŠJS¹ôœ€¢. Ñ@-±\ž. Ìø?00üÿ`ÿD~°’È70ðnà?ÀÀüDþ“ØÀÈä‡$Ù0½ñÿÿÁÿÿI.WO®@.‡e%endstream endobj 258 0 obj << /Filter /FlateDecode /Length 188 >> stream xÚŽ1‚@E¿¡ ™†#0Ðeƒ6 &na¢•…±RK v9Gá”Tâd)H¬ÌN^fþîþù‘žÌ¦ð”Çš£€Ã9Ÿ5Ý(ŒE”qÑßœ®”R{cRk‘I™ ?îÏ ©l»dM*çƒæàH&g8^W‰S­œQƒdHàVðá•R¾ ò!J*¨- Ài~ nNû/†ooñkg»Íîõ$AéÖHåŠ> éáwlzZÚÑIKÚendstream endobj 259 0 obj << /Filter /FlateDecode /Length 196 >> stream xÚα Â@ àH†B¡y½ž­uj;:9ˆ“::(ºÚ>Z¥p"ØŠç]qÐQ |CB’?Šû2ä€Ü“1G!‡#ÞI:R°«aøm”d$V$f¶O"›óùtÙ“H–$R^K6”¥ŒÊ¯À¨\ƒ¹UW0÷Â/¼º%>Á«°T¨5*è´4hy~“ÿÌ÷ö²¥ý¦Ýß> stream xÚ31Ö³0R0P0VÐ54S01Q06WH1ä*ä21PASc¨Tr.—“'—~¸‚‰—¾PœKßÓW¡¤¨4•Kß)ÀYÁKßE!ÚPÁ –ËÓEùÃùŒêØ0üa<|€ùÃãìÊð?`0?À€Áþ€> stream xÚ36Ò35R0PacCcs…C®B.# ßÄI$çr9yré‡+Ypé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]ØÈ3üPàÿÃÇþ?nÿÀÿœýó3 ~Äo˜0ÿah`þÁÀ€‚?P³Íüÿÿs¹zrrjÙF„endstream endobj 262 0 obj << /Filter /FlateDecode /Length 195 >> stream xÚ=αJÄ@à¶X˜fßÀÌ x{›`TñSwÕ‡•Z * Wî£í£ÄÊ6`“"8Î%GŠ™ùÿfŠ|q~ÆK.ø4p¡ó‚½R^j¨çåÔ<> stream xÚ36Ò3²T0P0TÐ5T0²P05TH1ä*ä22 (˜Ad’s¹œ<¹ôÌ̸ô=€Â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž.  Ø W á Œ@Ì Äì@,ÿÿ?Ã(f„ÊQ „þ0‚pC sC3ƒ=;ÿ?°f.WO®@.uH–endstream endobj 264 0 obj << /Filter /FlateDecode /Length 153 >> stream xÚ31Ó34V0P0RÐ5T01Q06WH1ä*ä21 ([@d’s¹œ<¹ôÃL ¹ô=€Â\úž¾ %E¥©\úNÎ @Q…h žX.Oæ ìþ`üJò`À‘p’ƒºBþ`°ÀÀðƒ¡üÆçÿì™Iùÿí@’ùÐ.WO®@.1cendstream endobj 265 0 obj << /Filter /FlateDecode /Length 183 >> stream xÚU̱ ‚PÆñ#‘k[çêªWJ'Á rjjˆ ¨Æ†¢¶ˆûh>Š`›Ph—º—jù ÿ¾@ BŸ\ò©ïQà“ÒÎÃ#ŠHE—Äè³l˜dÈ—$"äS•‘g3:Ÿ.{äÉ|Lò”V¹kÌRj×_œ œÒ.Á.X ,g0i)à <¡¥©¡pƒ¶&†®A†=éjœ|c(v‘kØ]þb=ÀÐ(Ô¿áúO¨ÁI† |F£?êendstream endobj 266 0 obj << /Filter /FlateDecode /Length 233 >> stream xÚUÎ=KÃPÅñs Xx³v(æùzËíËb ­`A' ÖQ|A7©‘|±€Ð~Lïx‡`¼7UÓN?8gù«áá°Ï!ñAÄjÀÝÏ"z$¥ìr·¿~nîh”¼d¥HžÚ™drÆÏO/·$GçcŽHNø*âðš’ WUPñ÷6¾Aß´4æðŠ5¹§q ‘þ" bxØ%âtÇq¿Á_ù®cùGˆÅ²h;²š÷L€ Ëtè5Â<þfúOk…2·|âµÁ+ñ–ZlECÝdÑ ±ï(°ç˜ÂÑIBô¥Y_™endstream endobj 267 0 obj << /Filter /FlateDecode /Length 210 >> stream xÚMν Â@ ð)(¡«ƒÐ> stream xÚUÎÁjÂ@àYi® Î èn²Zõ$¨sÚSE¨GÁ½‰æÑöQ|„x ‰³²Iéå;üÃüü=ÝF¤(¢N8 ^DúÖ!þ qª¨¯ÝiµÅIŒò‹ôåœs”ñ‚ö¿‡ ÊÉÇ”B”3úI-1žQY¦ãâàAægà//7ˆœŽ4gËZŽvª*Ì 0‰Ã¿˜Š+ã]S‡¸CEÉ@QsüϰFÕì,IqSn/¼'¶’gCþbŸ^m‘mjg`ç1øã'>ÚŸKøendstream endobj 269 0 obj << /Filter /FlateDecode /Length 183 >> stream xÚ%Î1 Â@„á‘@„‡$|'0‰+AA¢‚)­,D¨¥ ¢æQ<‚eŠ`œÅ_ìì·°&î# µÇL_M¬‡H.bìÚ£½ØŸ$I%ب‰$Xp• ]êíz?J¬¦Êu¦[>ÙI:ÓIU•uO§Ã)Fh~ðß!;£ó:còÌÛዬQÖ‘‚ôŸÿ)HÿåpIëH]R·YÀ#õH[¤mé(œ²âl2Oe-?uàC endstream endobj 270 0 obj << /Filter /FlateDecode /Length 175 >> stream xÚ3±Ð31Q0P0bScSK…C®B.SßÄ1’s¹œ<¹ôÃL ¹ô=€¢\úž¾ %E¥©\úNÎ @Q…h ÊX.Oþ êÿ³ÿg``üÁ~¿ùûÆÿüäØÿÉ?`°gàÿ¤êàÔ õN}`o`üÁÀþ¤›™ÚÔøFÑ¢¢˜ÿ0°ÿÿƒÿÿ? Q\®ž\\à  endstream endobj 271 0 obj << /Filter /FlateDecode /Length 172 >> stream xÚ31Ó34V0P0bSK…C®B.# ßÄI$çr9yré‡+˜qé{E¹ô=}JŠJS¹ôœ ¹ô]¢*c¹<]ø0Aý? Áøƒ½ýãù† ö@CÿùA2þ€’@5@’±D‚!™dþÀðPI¸ùÌCdþÃÀþƒ¡þÿƒÿÿ “\®ž\\^åˆÓendstream endobj 272 0 obj << /Filter /FlateDecode /Length 154 >> stream xÚ31Ó34V0P0bSK…C®B.# ßÄI$çr9yré‡+˜qé{E¹ô=}JŠJS¹ôœ ¹ô]¢*c¹<]øÿ0AýÿÆÌذIù~ iÏ"ëÈ?P¨†ñ3õÈÿ@€JR×|Z“ÌÀ0ù Çÿÿ@&¹\=¹¹)“ endstream endobj 273 0 obj << /Filter /FlateDecode /Length 109 >> stream xÚ32Ö30W0PaCs3…C®B.K ×ĉ'çr9yré‡+Xré{¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]dêþ7 ÂzlÐ+”Á Ѫ-õ@>—«'W Êî/äendstream endobj 274 0 obj << /Filter /FlateDecode /Length 122 >> stream xÚ31Ô35R0P°T0²T06V0µTH1ä*ä22 (Ce’s¹œ<¹ôÃŒŒ¹ô=€Â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. 5 5ÿþýg„" Õ1ü*Êl*,,0‘ƒ—«'W /¨67endstream endobj 275 0 obj << /Filter /FlateDecode /Length 130 >> stream xÚ-ɱ Â0…á gð 2œ'0¹-¥™k3:9ˆ TGAEçæÑòfÚ¢|Ûÿ—ÕÒ7ôlXUÔÀ:ð¢x@='eý;ý m„;P=ÜfÌpqË×ó}…kw+*\Ç£ÒŸ;Zä“Fy2d›åÏd“L*R!s™ÉB¬¹ËY°ŽØã ,P#Œendstream endobj 276 0 obj << /Filter /FlateDecode /Length 189 >> stream xÚ1 Â@E°L¡70sÝì ’@°ˆÜBÐÊB„€ZZ( 9ZŽ’#XZ:IV›t«þ 3ïOÌØÄrÄ#²‰xjø¨éBºN%7nt8SjImYǤ–’“²+¾]ï'RézΚTÆ;ÍážlÆ@TðJô ø@ ðhxÁ«jze/¨ š]aöåÙáýÝ;¿íÇÎAdDÉ/ak+ÚÎ?i¶¥”T“‚RSÊ"§…¥ }G«@endstream endobj 277 0 obj << /Filter /FlateDecode /Length 188 >> stream xÚ1 Â@E¿¤L/ :ÐÍ®A"ˆEŒà‚Vb¥–‚Š‚…EŽ–£äÁÍ$±ÐNxÕÌgæý¡˜1‡qß„l">hº.§!Ǧ^íO”XRÖcR 7'e—|»Þ¤’ÕŒ5©”·šÃÙ”s Î@ t€h~//i¹ÝKxO`L®Ð“tIVãçßxÅ?üÞù¼¨>ö‡©(=C±uÚ•¿/ñ@ªÅRÓr•iniMoEËBsendstream endobj 278 0 obj << /Filter /FlateDecode /Length 105 >> stream xÚ33Ñ3µP0P0UÐ5S03P0±PH1ä*ä25 …M 2ɹ\Nž\úá@.}0éé«PRTšÊ¥ïà¬`È¥ï¢m¨`Ëåé¢ÀÀÀ`ÀC‰ú ÔÐô—«'W —á)Ðendstream endobj 279 0 obj << /Filter /FlateDecode /Length 131 >> stream xÚ-É1 Â@EÑ?^á ¦xЙ‰‰mŒà‚V"ÑRPÑ:³´Ù™&Nwo¾\ø’ž%红V\ó¦xA=y1žö:À¨n×w¸°ççý½ÃÕ‡ ®áYé/ ­tò‹½4è’M22ÉD³˜ÉT&2+•<å*ØñBÛ#´endstream endobj 280 0 obj << /Filter /FlateDecode /Length 94 >> stream xÚMÉ=@PEáþ®â®À¼™x¨ý$^!¡Rˆ ¥‚°{ äTß±4J2:*5¡Å4嬨`ö¢£ÿÆ´"žfšû¹@ò¶ BJJ7"”¼ï몀Ði ‹endstream endobj 281 0 obj << /Filter /FlateDecode /Length 94 >> stream xÚ32Ö30W0PaCsK…C®B.K Ïȉ&çr9yré‡+Xré{€O_…’¢ÒT.}§gC.}…hCƒX.O†z†ÿ 0XÏ ÃÀåêÉÈ[\wendstream endobj 282 0 obj << /Filter /FlateDecode /Length 153 >> stream xڅ̽AÅñ ɉ¨ŠóÌ—eëµSH¨"‘ ” ôÍ£xw³ÓN¦ø5çæþgvZ8œ8K¿àÜñbñ€·²–>žÎ7TzOo¡×²C‡ _Ï÷ºÚ.)k̓<j*¥zÑP ¢±‰R˜è.NÑO|[ƧÕmÈÜÏdSéL6•Îeé\6•NdV;üxÔ*Æendstream endobj 283 0 obj << /Filter /FlateDecode /Length 188 >> stream xÚµ1 Â@EH!L“#d. ›ÍºˆBŒ` A+ ±RK EÁBb޶GÉR¦R×l´6¯˜˜ÿþPtÌ+îǬƬ5$Ii;ŒXÜf¢$#±a¥I,ì˜D¶äëåv$‘¬f,I¤¼•í(K~ |[äj¿„W¢‚opGÏà ÀÄ!´—S‹¢E¦ /‹òèzù´ÌO¾6x+Ó¸YÛ~åÕÎÜuдñí…æ­éÂÕ`úendstream endobj 284 0 obj << /Filter /FlateDecode /Length 121 >> stream xÚ31Ô35R0P0bc3SS…C®B.# ßÄI$çr9yré‡+Ypé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]0001;Ëñÿ ÿaX*6T°ý†úÿÿ?À0—«'W ¾NÚendstream endobj 285 0 obj << /Filter /FlateDecode /Length 228 >> stream xÚmαJÄ@ÆñoÙ"0M^ป'p÷WóSZYˆ ¨¥ ¢`eòh>JáÊ+ŽŒóé5‚E~°;ÿY²¬šc­té_^iÓèC-/’³Ÿ+9¸’u'éZs–tî·’º }{}”´¾<ÕZÒFoj­n¥Û(Ê-€~‚Ù€8¶#J^ÎQì0CÜc…0áùîÈDÌ_úŸžÓÁïø:ßsöNüaçü™r$_΂[-> ³À,°ˆ, %‡s„'äƒlÏ"³ÈÌñ¥™aAZÒ›M°¿ÈY'Wò TŸc|endstream endobj 286 0 obj << /Filter /FlateDecode /Length 235 >> stream xÚuÐ1NÄ0ЉRXšß`3', ZiY$R AE¨€ ´ØGóQr„”[¬0¼„‰"OÊŒóÇ“ãîÈ/¥•^—ÒŸ‰÷òØñ+÷ÅVüɾóðÌëÝ­ôžÝ%Êì†+yûxb·¾>—ŽÝFî:iïyØ™-­2È9QµµÕ EëPõE6‚f¤LÍôV»&‘ÆàðÌÔb&e6‚€§Ñf“õÕŽó‘òY (yâ/ifU ý°Å_ cBüÔ¨M>Õ‹ý‚¸Ÿ™°y¥ÿ€‚޵¸2_ |ÃßÇ›jhendstream endobj 287 0 obj << /Filter /FlateDecode /Length 188 >> stream xڕν Â@ ð+ At-(˜'ð®¶µkotr¡P?ÁQðÅ_ÄÇè èý‹­³ù‘äIàõÃ+FŠÃ!¯=Ú“™º,ñ‘o)Ñ$ìG$'¦KROùt8oH&³{$S^z¬V¤SBĢ⊠ØÀ©iƒèA«äf°1ë€h‚.p;»Áö`¯Z  \2ðoóŠß›ÿÂy™³54Ö4§òý`öendstream endobj 288 0 obj << /Filter /FlateDecode /Length 226 >> stream xÚ•Ï¿jAðïnaÜ ˆÎ ˜½s=b!j W¦J!‚`R ìnÍG¹G°´8ÜÌœEH:›_1;ödÏyŸSp¯ÏnÈyΟíÉ9)¦œ¿Ü_6[šd?Ø9²oR&[Ìùð}ü";YL9#;ãeÆéŠŠÇÀŒÇæÒºÂ„ÐpQ*Å+j .+xsº7á”xÄ•‘Íç–Üð‘\ƒ }µrÓþ† ”¿ø´•R þ/:tK­¬uéîNTc¨'Û¼‰Ä'ò¡jìiT”2ƒ®D¥×‚Þé+XÑendstream endobj 289 0 obj << /Filter /FlateDecode /Length 243 >> stream xÚm½JÄ@…OØ"p›¼ÁÎ}d³ƒÚXW0… •… j)¨hëäÑò(ó)S„ÏD…m>†{çüÜuuìVZj­G+­ÏÔ9}ªäMjÇa©îägóø"›VìÖNìÇbÛkýxÿ|»¹¹ÐJìVï+-¤Ý*Ðô@ P„sŽºø‚&¾³¾[ D>#E@ƒ¢Ç†r˜Iõ~2û> stream xڕα Â@ àHÁB}Ѽ€Þ]õ¤“…ª`A'uª(¸ÙGóQî|ƒšTZèàà‘û†?$w#3°i²ÔhdÈŽéhð‚CË!Çá·s8cœ ÚÐТZpŒ*YÒíz?¡ŠWS2¨f´5¤w˜ÌHŸP˜Qžç®ÎëY’ 4aÐ:B@à ¸Ç8 ‚—1¾ìn -¡SQ¼üRá-8­ð d“_Ñ®Ó+ÈJ¢_<ÿ!’¯tùâ<Á5~lúQ-endstream endobj 291 0 obj << /Filter /FlateDecode /Length 265 >> stream xÚMÁJÃ@Eo˜ÅÀ[8мÐ$A„ÒB­`B]¹WêÒ…¢ÐEÁù´ù” ;#Ç›*ÖÍyóî{wæÎquÔLµÔZ§ZŸjÓè}%OR7KmN~&w²l¥¸Öº‘₲í¥¾<¿>H±\Ÿi%ÅJo*-o¥])L OÄ[ À`;d1ëa¶°3X`LpÀM6{ä{xÖSÏœ˜°Hpžî|tO¥0£1l¹6Ì ùi4ÈþÓ,ìÀe3zŸÓáw™gRÒô¦SÅß@v伕+ùÿcåendstream endobj 292 0 obj << /Filter /FlateDecode /Length 237 >> stream xÚuÏ1NÄ0бRDšÆ@ò\œlÖBT––E"Tˆ ¶¤AKr®â›ì!eŠ3³ ˆšgiÿ_×'aE5t¼¢æŒB ÇŸ± 2¬(œÎ_žpÓ¢¿¥& ¿”1úöŠ^_Þvè7×çT£ßÒ]MÕ=¶[‚b—….'0SÉ2*(ÙŒ`&p ÞÁõBì!Ît ç¼àÒð_èÝ_èR¥c§Ø™%Éž 6{6Cñ!I¬cˆ“Ä)A×ô?€Ö«ÌÁ“ôXZ1IÁØËN+éOVë”ùÀäqY‰-Þàú m9endstream endobj 293 0 obj << /Filter /FlateDecode /Length 101 >> stream xÚ32Ö30W0PaCsc3…C®B.K ×ĉ'çr9yré‡+Xré{¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]dêþ7À`=ƒ 1S—«'W fp"¸endstream endobj 294 0 obj << /Filter /FlateDecode /Length 140 >> stream xÚ32Ö30W0P0WÐ54S0´P06SH1ä*ä24PAS#¨Tr.—“'—~¸‚¡—¾PœKßÓW¡¤¨4•Kß)ÀYÁKßE!ÚPÁ –ËÓEA†¡žá Ö3È0຀`ý™ PÈx€±±¹™¨Ò‚¡€!ËÕ“+ &,•endstream endobj 295 0 obj << /Filter /FlateDecode /Length 107 >> stream xÚ33Ñ3µP0P0U04T03P06TH1ä*ä25 (Ae’s¹œ<¹ôÃLM¸ô=€Â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. õÿAà˜üÿ‡Îj-Ô\®ž\\~,Üendstream endobj 296 0 obj << /Filter /FlateDecode /Length 185 >> stream xÚÌ1 Â@…á· LàœÀMŒÀBŒà‚Vb¥–‚Šv¢9ZŽ’#¤L!êÄ‚ºËWÌü0aÔíìs_„D¼hO¡Ïõ—±«-%–ôœCŸôX¶¤í„‡Ó†t2r@:å…œY’M¦€zÜáæ&óÐÎc¸¥§ÜÁ©ÎPÕêöøp±t¼¸e£] 0.â,$+IJ’“‹¬áâ­õ§_ÏFn_óoõ^:,Íè Àv;rendstream endobj 297 0 obj << /Filter /FlateDecode /Length 235 >> stream xÚmÐÁj1à é^=;OÐd-‘õ$¨…îAhO=”‚ÐöX¨ÒÞ„Í£í£ø{ô°˜N"¸Q6>fB&?™Nî'izàmf4Õô™ãáZûÒ||ã¢DõJÆ zâ.ªrM¿»¿/T‹ç%å¨Vô–“~ÇrEP@X×ìû8õ \²²IU{ó˜»ùÁ3ÌbÆYã¥1Ezôè$æ'i=SË©†LÂB„p6Pu Ž–8ç:R†£ ²Ž÷›[4ß9Þ²áéí…ÃŽ&ÎÈ&üZÚú'­ãXήÁÇ_ð%°m¼endstream endobj 298 0 obj << /Filter /FlateDecode /Length 209 >> stream xÚ•±‚0†0Üâ#pO`Amd3ALd0ÑÉÁ8©£ƒFgúh< ÀÈ@¨…«Ú´_®íÝýýe4fÐÜ,¹ ¹¤kˆ”µÓ„íÅåŽqŠâH2@±5§(Ò½žïŠx¿¦EB§‚3¦ i3 €5C8ZA–›À/:LÊ^ÕÁ­ûpšôXpžÛôkÚF¶­±bIF°Ü2ÕéqžËUœNÐC¨™E>ª_…ñ÷c‹ð+v·d¯ó¯åínÔâ&Å~VŸPendstream endobj 299 0 obj << /Filter /FlateDecode /Length 260 >> stream xڭѱJÄ@à? LaZ áæ4‰Üª[-œ'˜BÐÊB¬ÔRPÑÖÌ›ø*¾‰yË+Äuv²g!–Bà#“ÍÌî¿ÎïúnÙñÎ;ÇÎóMG4÷Zly¿›¾\ßÑ¢§æ‚çžš-SÓŸòÓãó-5‹³#Ö÷%_vÜ^Q¿d ˆRPDZT†¸R´öR ÊOÔµ þ@ù*˜(ÞAWEÁ],øR‚º˜IµRê5ú7P­Ñ&?”2oÆ(~#FLØàgÈü5=dF#ïzv¢L;mf–Ä&,—mXJ[°Ìa Þ#å }Rº:%e-vÁvS½•Ô=U:î霾šes–endstream endobj 300 0 obj << /Filter /FlateDecode /Length 194 >> stream xÚ33Ö31V0PaS Ss…C®B.S ßÄI$çr9yré‡+˜špé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]þÁõBýc``üßD@.ƒý0ÅÿL1ÿSŒÀÃ?UBÙ7@¨`JJ=SüPêŠýê (<ö¡9ÅñP¯@=ómrüC%h˜ACž  !@ y`> stream xÚuб Â0Ð  ·ô¼/0­ µ‚Dª£ƒ¢³ý4?Å/iLsqˆð’»INÍÆª œ&vª)©9 ¼¢‹åý¶O4¬4Ê©åÊFQê5Ýo3Êj³ ­ioK¨k2ýè D˜ÒÀ€§dFLƤ1’(­C8^Qˆ€„ÉÆDð¹ïɰ|pÃ1ÆÛ½Ó.þ"bøÿyÒ€Œ)™gëºk¸×¿àRã?UŸ’~endstream endobj 302 0 obj << /Filter /FlateDecode /Length 166 >> stream xÚ35Ñ3R0P0bSCSs…C®B.s ßÄI$çr9yré‡+˜˜sé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]þƒÀd’ñƒü†ÿ Œ`’ᘬ“6`R‰äÁAòI68ÉØ€L2`%™‘Hv0)"ÿÿG'!âP5Ⱥ‰ A€J$ãÿ `G@%¹\=¹¹Mÿx×endstream endobj 303 0 obj << /Filter /FlateDecode /Length 254 >> stream xڭѱJÄ@à?l˜&yM"&`µpž` A+ ±:--­7`ákMgé+ä ¼òŠãÖÙÍ& XšæKf’Íì¿]{Üt\ó)p×p{Æ =SŠu¨ÄÎæ‰V=U·ÜvT]j™ªþŠ__Þ©Z]Ÿ³>¯ù®áúžú5ð(ü6S¬ßü`À쑊-Ì— oÕ¶¸áÖë¥d‡ˆ¾¯ I¾Sòý03a‘™LlB".€¿Ñ!1ÍúOx½&ÂpcÄJÂ&ÆHù‹¸£…¸Û…˜„rI)¥ÌÜ” _ò,v0Ÿšõù{lØtéT–‰é¢§úî”Ûendstream endobj 304 0 obj << /Filter /FlateDecode /Length 125 >> stream xÚ33Ò3²P0P0bSKSs…C®B.SS ßÄI$çr9yré‡+˜šré{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]þÿÿÏøÿÿ?TŠñó bü78) À¤¯s‘)hèb y.WO®@.!»¥7endstream endobj 305 0 obj << /Filter /FlateDecode /Length 106 >> stream xÚ3²Ô³´T0P0aKSs…C®B.#3 ßÄI$çr9yré‡+™qé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]þÿÿ†€ˆ¡¾aècWüÅåêÉÈ3v\‚endstream endobj 306 0 obj << /Filter /FlateDecode /Length 165 >> stream xÚ31Ò33W0P0VÐ5R0¶T05WH1ä*ä26 (˜ZBd’s¹œ<¹ôÃŒM¹ô=€Â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. öÿÿ?@"äÿ000°ÿâ„=ˆ¨oÿ`#ø?0üoõ ü ä0X0È`a°o`àŠ2°7Ãñÿ qõ \®ž\\ŸÎ`¬endstream endobj 307 0 obj << /Filter /FlateDecode /Length 243 >> stream xÚ]ÑÍJÃ@ðYrÌ¡¾@ û&A[sjsìɃxj= QôjöÑò(y„=HÇíÌÿДeöDzÌÌ~,¯/•/üUŒeé7~_òG‹8"ÇÝ;¯Οãšó›GÿõùýÆùúéΗœoüKé‹Wn6^DÈÅ8×I êF"!¢:˜+2oa[8˜®7“`¦dÎ`+ØÂÁÔôhLM‹fp ˜&byiguf0«­~5Õ¿jŸþ©RrÀyd* îÕõSkÜ_ Ÿ¨ NÔÇ÷9LÕxoéá ÿádÔÿ™‹„sù¾á-ÿ5Š•Pendstream endobj 308 0 obj << /Filter /FlateDecode /Length 140 >> stream xÚ35Ô³T0P0bKSs…C®B.S ßÄI$çr9yré‡+˜˜ré{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]þÿÿÿ€™dü€þ3 eR/i& 0È ò‚d“Ì`’LÊ?`üßÀðÿÁ@!¹\=¹¹Afl÷endstream endobj 309 0 obj << /Filter /FlateDecode /Length 244 >> stream xÚuÑ?kÂPð{<0p² Þ'ð%œÿ€ ur(Ávt°ÔÙ€«ê•]ÝÌGÈè|½¨X#yîøÝ=8. [~›< 8¢€:½û¸Ä°ËµW”ÅÇ|ýÕ”Â.ª1wQÅÏôõ¹ú@ÕjH¯>yoÉà瘣1 ýƒ¸ 8hFãx‡]Ê*ñ›1æ•øá8§¾yºØTBŸ¤,a P³ —À“M õ2Ü< œ fepÒˆ\$ÀIÂÖ5+zÛG4÷V¸Y5D NZ@fWðí¤'c´ÔÒÇýoÊÀQŒü¦Â!endstream endobj 310 0 obj << /Filter /FlateDecode /Length 243 >> stream xÚUпJÄ@ð/.0…ûfŸÀMNÖ?óSge!Vji¡hkRù\AKÁTÖ©$EØuwöŠM1üøf`Šï`¹·<’…Üw£¥>”w%=’Ö.>úÃí­jRWRkRçnKª¾ÏO/÷¤V›SY’ZËëR7T¯¥µ@fµm óÀ¦‡í¼ÅÏ0 à{d¾¦˜üۘÎ=õ4]LÕ3ùȦ€aÒ@b·´liº@ÏT|`Ä“MLjbËÀ¾Å4ŸLõ“ÿ1ÂÄdtFÀœW$®Gœ á*Ã.|ר™±ÕtIÿ6D†cendstream endobj 311 0 obj << /Filter /FlateDecode /Length 239 >> stream xÚ­‘±‚0†Ï8˜ÜÂ#ô^@D'ÔDŒ“::htGáxWÚœmš~éÝßöú_LÂyÒxJsNgoô(ò»ÌéŠIŠîžÂÝ5‡ÑM7ô¸?/è&Ûñ~IŸ¼#¦K¶ Cµ¥ Ô¼*x1F%¨À)dBœÃè ñ‘Š…¬ªA«ÑŸ8çEÅjGîU…Ò(ßNk¼ûÈ4ª,— ~ÐjÔ…}Á<ÛC¿2[|Žþfa?­-ÈÖžÆ3ë ñ“­oŒ×œÈ¾}°]Ñ=ÂUŠ;ü”K‰Éendstream endobj 312 0 obj << /Filter /FlateDecode /Length 167 >> stream xÚ35Ó35T0P0bS#Ss…C®B.K ßÄI$çr9yré‡+˜Xré{E¹ô=}JŠJS¹ôœ ¹ô]¢ÆÄryº(ü‚ ê„úÏÀÀø¿,ÊÀ ÿLñSÌ? Ô0Åø™adªT Y;ªÑPû ¶CÝuP7ÈÙÿÀÔˆ ƒ™….ĵ˜—«'W ŽK€¿endstream endobj 313 0 obj << /Filter /FlateDecode /Length 221 >> stream xڕѽ Â0ð–‚ì#x/ i*Uœ ~€ÄIí£ù(}„ŽJãÙK Í"&…äHrÿt¢F*ÄÇ8 q¢0šâYÁ È€f4ãÊé óäžê ×´ 2Ùàãþ¼€œo¨@.ñ 08B²D­uåÐ uf,HW§‚ ô¥lüfëç¬(ºz¥eõ§Ö~ûüæÞ¦Øô§¹_Qš@™ñÍëõ6Ò+L®6ŸñeålóZ¹šÿ«›v,X¿ÕKéP~ï‡ÞEÔºe¯Ö©úN=â’¹«vð™<›Âendstream endobj 314 0 obj << /Filter /FlateDecode /Length 256 >> stream xÚUϱNÄ0 à¿Ê)K¡~h{=îÄB¤ãè€Ó ˆ @°!ZÞ̉èF%Psw ²|Jì8¶ç‹Ãª¦’æt0£ùŒŽŽé®r®^j°¤EµËÜ>¸U㊠ÕKWœkØÍ=?½Ü»buyJz_ÓuEåkÖ?€ÆŒ!òÎf°l#>Ù3ZÎ;@Î'€ç7Àîx ïÉ&Œ&È–Nm9ƒR0—!¡G/aEïFD+E$½ÑŒµ²MX‰¿„^É>a‡-úÆü‘Mˆÿèû=¦×:upÇ´–¤-µiÞ}õèGŒˆA§Š^{s¦ywÖ¸+÷=Ÿ†#endstream endobj 315 0 obj << /Filter /FlateDecode /Length 150 >> stream xÚ3µÔ³4W0P0bSsJ1ä*ä2ñÁ" Fr.—“'—~¸‚©1—¾P”KßÓW¡¤¨4•Kß)ÀYÁKßE!ÚPÁ –ËÓEÁþ?<@£0ÿg`ÇÀøùA ˆbüP¢>€©T*L`¥€)‹`J+ŦF Åþ¿Hʃ‚ârõä äWÎr°endstream endobj 316 0 obj << /Filter /FlateDecode /Length 240 >> stream xÚmÐ1jÃ0Æñg1> stream xÚuÑ1KÄ0àW „ãºv8ÈûÚôÎb ç vtrá@ÿ…?'â)ΤC¹ø’£âMHøH^ÂK^Yì/Pá÷æX.°8ÄÛ\<ˆR¡ëÅÑvçæ^,k‘]b©DvJË"«ÏðéñùNdËócÌE¶Â«Õµ¨WhíÀ­í"kÿ·ä@öŒæ¤àmDâ$f~¤#; Hl ¿¥½8@£ÁŠwdFUšì¨%[pù¤^q(é`J7)¯Iˆ’›ÑMk¯T¢äRÙñRI JN%}¤½Ö<=“Dt2l¥IÜ©yÑÑ&ôFš:Uï; ôAš9ÉOŠ} ô5*¡¿­ºÿÄÿ‰°­ ÄœŒE'"'íEÑ<´¾¦®_g'µ¸ßÑÆ©Ñendstream endobj 318 0 obj << /Filter /FlateDecode /Length 231 >> stream xÚÍαJAàYÈÁL›"y÷.p1©b¯L•BAS¦P´Î=’p²2EÈ8»n@ô,†ofgÙ§“ËÉŒK®´¦×WüRÑ+ÕsË8ÆÅó– ¹5×sr·zJ®¹ã÷· ¹Åý5Wä–ü 7©Y²È ð~k%…öÒvìT²Z^{ÓcÝÙ³ ÷ÃâôU«o²CÕ0Ë–*¤ÅSTB¶‹ú`ζÑñÞ&‡í%‹ãE¶Ÿ´§QÒÈ0›b4è3¾Ýe}÷¿Íÿô"Ý_馡}Èl®endstream endobj 319 0 obj << /Filter /FlateDecode /Length 104 >> stream xÚ32Ö30W0P0WÐ52T02R03RH1ä*ä24Š(XC¥’s¹œ<¹ôà M¸ô=€â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. ÿÿüÿó‡a0C ¹\=¹¹¶ hendstream endobj 320 0 obj << /Filter /FlateDecode /Length 102 >> stream xÚÍŽ;@PÕggÜwAí“x…„J!*” Âî%>‰EÈt3ÍØ00 •¾UjÌØrR¬Ð豆iø¥qAæ 5‚T‡¸šûv̬ɩ‚½Ò p¯ó:½_ó¢thq_þhendstream endobj 321 0 obj << /Filter /FlateDecode /Length 204 >> stream xÚmÌ; Â@à . ´Vf. ›´1àL!he!Vji¡(X›£å({„”Á8ë£—åø‡ùÝéÅQ—Úš’˜º}Úi<"ÏÈŃ÷f{ÀQ†jÅ{T3ŽQes:Ÿ.{T£Å˜4ª ­5EÌ&¡€º6äü¥…°%/_x÷/PAP02gøýÁ0Ò¦–yp&îî¬dBw›:Œ+0ðÁüâ}¨AT¾yóMÞ6Ó¢5lö–¢.Ë5²Ài†K|¤øT£endstream endobj 322 0 obj << /Filter /FlateDecode /Length 198 >> stream xÚ31Ó34V0P0RÐ5T01V0µPH1ä*ä21PASKˆLr.—“'—~¸‚‰—¾P˜KßÓW¡¤¨4•Kß)ÀYÁKßE!ÚPÁ –ËÓEùÃT‚D0S$ê00|`ÇÀü¹A¾ù;ÿæ ì˜ÿå˜00þ* àÄ?8Q"êI&êPMÊøbÛ½`Ëßœq ä ã ò Ìê˜þÿ:]þ—«'W ÈckAendstream endobj 323 0 obj << /Filter /FlateDecode /Length 182 >> stream xÚÎA ‚`à'?( ‘œ ”ýüºÌ A­ZD«jXÔ.Ì£yàÒ…Tcu€ßæ 7f: 5ÙðP³™° ø éL¦ %¿—ý‰â”ü MþBbòÓ%_/·#ùñjÆ’&¼•ÎŽÒ„¡ZÀ{ÈUe5ÈTÆ©¬Ö-Õ‡W¨6êÀj@-ÐÉÅóOù¯Ó‰;*`{ú^‰ž[bàTd7“ý w§”§ÍSZÓ»=endstream endobj 324 0 obj << /Filter /FlateDecode /Length 253 >> stream xÚÕÒ½NÃ0ðT"ÝâGȽu¢~n–ú!‘ &ÄŒ ˜Ý7è+õQúíØ!ÊŸ³¯ñ‚ŠÄ„ˆdå—‹³ÿÊl4¬æ\ñ˜¯jžU<ñsMo4HQÇúæé• Ù{žNÈ^K™lsÃïŸ/d·K®É®ø¡æê‘šgáʱ‰wƒ_ s=Ìÿ‡$ p8E €.¢° (±s‡×…¢ÀŸÂ4Ž2ì¥*ȱÓ| ]¹Ñ6&âÜ´LèÎpßàÚ‹À_à‡ýøËÇIHGN!ÄXÊ>±] ³7ž#†Ýfæýß".ŒÎF«?«Ç^Q 3Ò™Ö Ýщb=endstream endobj 325 0 obj << /Filter /FlateDecode /Length 244 >> stream xÚ…¿J1‡gÙ"0M!óº·`D«Ày‚[ZYˆ•ZZ(Úºy´}”<•aÇ™¹ãôP1|ðå—?üâéáIO :¢ƒžâ1ÅH=>cT¹Pc;÷O¸°»¡Øcw!»á’^_Þ±[^‘ØÝÊ™;Và8ƒŒ‘?dm˜gPÇj·\R…q :“dÄ„*Á |…Vbn¶;ƒg³Eó çd˜ö1Öo( Ø÷aãhDBÿcü³!ýD[Áo˜¬1¿En¥ ¹±¦ä%iêÝînª6N:ó\ÒZÛ` æ]H›_ÙI<ð?yë­œendstream endobj 326 0 obj << /Filter /FlateDecode /Length 175 >> stream xÚÕн Â0àá–>Bï L*)¸j3:9ˆ“vtPtnÍGé#8fœ—:èÒM‡|ä~àŽ3z> stream xÚ¥‘?JÅ@Æ'¤XØ&GÈ\@“HòBª…çL!he!¯RK EëÍÑÖ›ä¦L2Î쮂°áÇîüû¾É®9o[,±Æ³‹w565>UúU7¿–Øv1ôø¢÷½.î±étqÍïºèoðýíãYûÛK¬tqÀ‡ Ë£î¯|¢QÑÑ’“CD–F°³"RcB|&;¦Jª ÀÌÆeÂ%w¹pU¾ëö3Bú?OûþÄÂ|€ G(ú‚^±'€f ‰]âTH¿Ø¯ð“|X9éʶÌÜ/O8E.‘> stream xÚ37Ö3°P0P0bsC c…C®B.33 ßÄI$çr9yré‡+˜™qé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]ì0€Áÿÿ$0˜a †aÃÿeüÿßf0ÿÿÿÌà‡xûÿùõÀŒ:û`PÛãçã?Hÿÿß  e00°ÿ?€Ìø‡ÁøCãÇ(ÎøŒv q€—«'W lù2 endstream endobj 329 0 obj << /Filter /FlateDecode /Length 138 >> stream xÚ36Ó35Q0Pacc …C®B.# ßÄI$çr9yré‡+Ypé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]ìþ``üÿ€ùÿ0fÿÿ+†ÉƒÔ‚ô€õ’ ä0üÿ‰˜aˆàÿÿÿ@Ç\®ž\\ÍÙ¥;endstream endobj 330 0 obj << /Filter /FlateDecode /Length 243 >> stream xÚÕѱJÄ@à)ÓänžÀMˆD­ç ¦´²«ÓÒBÑzïÍôQ|„-#†wæ_ñ°ñZË·“eþþäà°ã†uõG|Üñ]KÔkÝh©›Í­Fr×ÜwäÎÓ[rã??½Ü“[]žrKnÍ7-7·4®¹¦B‘ý,³Å?¶ ûXø€¾á ú-ä,fXN°pùµMõùÞËV´¶¤µ%‡\{œ`rùô‰Ä_ |•­¹»7fçZlžP‰Íð \X°~r„þ[ƒ'-pG NZpZ¸£ÛYÌŠŽê4ú_ÒÙHWôn¬$endstream endobj 331 0 obj << /Filter /FlateDecode /Length 107 >> stream xÚ36Ó35Q0Pac c…C®B.#K ßÄI$çr9yré‡+Yré{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]ì0üÿ‰™˜aãÄÿ„޹\=¹¹µ‰Ãendstream endobj 332 0 obj << /Filter /FlateDecode /Length 232 >> stream xÚíÒ½jAð WÓÜ#Ü>·ÔŒ‚WZ¥©LÊ+³vrp!E¶›üçT°+‹ ó›Ý-ÆÙÇvïÞXÓÅqöÁt;æÍñ';ë±j-->x˜súŒÇéiNó©Y-×ïœgOÙ‘yÁÌ+ç#CYEI ºO$RáxŠ%4ˆDJʤnï«Ò 󢣨Ò×®U¶¤ Hª@Yûƒ$߸»Np·â§¤D@¥(€þ¿ØAx^ƒæ §¨å9ìÅE…ÿÇÍÛ„ÂÆip xœóœÿvÚiCendstream endobj 333 0 obj << /Filter /FlateDecode /Length 184 >> stream xÚíѱ‚@ à& &]xúÞÜHLtr0Nêè ÑUy´{ጃ „zwÀ¡Í×6ÿÔd4”’™JBG´ñ„qlfiG{Ø1+P¬)ŽQÌÍE± Ëùz@‘-§¢Èi’Üb‘¤‚˜µ©ÒÁc®|æÚ!P÷Æái à±®!`{èø.ÿT¼ÊV6ß¡ýAÓõ_°yÍÀ4Õ8+p…o âøšendstream endobj 334 0 obj << /Filter /FlateDecode /Length 231 >> stream xÚµ‘±‚0†kHná¼Ђ±0’ &2˜èä`œÔÑA£3<šÂ#02Î^KL%!_sý{½þ¬æI‚!.qa¼@¥ðÁCT±Ý9ß +@P% 7º ²Øâóñº‚Ìv+Œ@æxŒ0> stream xÚÍ’¿NÃ@ Æ]u¨ä…G¨_.!MB§H¥•š ¦02€èœ<’GÈx•ªÛ¹F:¡.§Ÿ¾óùÏçË“«è†"Jèò:¡lN錞c|Ã,5¢<WO¯¸(Ñm(KÑ­EGWÞÑÇûîÝâþ–btKÚÆ=b¹$(“#ýÑÃ!@5@÷Šøo˜J ÿ§4ö{®aäÁ³ÅŒòßëŽfJ®`o}4¼‘.lO­%Þw£‹m_…mt§¢e4](z†`_ëTÀU‰øµ` endstream endobj 336 0 obj << /Filter /FlateDecode /Length 169 >> stream xÚÕÏ;Â0 ÐtõÒ#Ô' ’VbªTŠD$˜02€`nÆQz„T d¨jœ20õXö“üYœé™žcŠš+ã4xRp“s?¶aq¼@iAîÐä W<i×x¿=Î ËÍÈ ÷ ÓØ Eá¢^¹˜6¡–­É±Câ‰:_øˆ:WóÑ«}ßÍO_ /h‰ Æmƒú ýIž™–¶ðj^¤ïendstream endobj 337 0 obj << /Filter /FlateDecode /Length 259 >> stream xÚ]Ð1NÃ@Ð¥°4¾;ÛŠBƒ¥$\ ‘ŠQ%Ú¬æ£ì\¦°v˜Y)¢yÒî·çÝT—ëk.¹æ‹Šë57 ¿UôIõJ/Kn®æäõƒ6O\¯¨¸×k*ºþþúy§bóxË[~®¸|¡nËXÊp8™ÎÙë…HDÑFä#ò°Ô々Ú~Àþ¨¨7ö'ÉQÈ”´^;LKZ+45qj@.dêtÜÇv“ù!¤¸Ç"iíÐÄÌôehÖ”ôÁjÛ]ˆÿdVçµ³½ÍSuž‡è ±ýõ?h©›ÓêgåcfKxýºëhG¿Á•¡Zendstream endobj 338 0 obj << /Filter /FlateDecode /Length 186 >> stream xÚ35Ô34S0P0RÐ5T01Q07SH1ä*ä21 (˜›Cd’s¹œ<¹ôÃL ¹ô=€Â\úž¾ %E¥©\úNÎ @Q…h žX.O†ÀOþÁN2bÌH$;É&åÁ¤=˜¬“ÿA$3˜äÿÿÿÿ?†ÿ8H¨úANò7PJÊÃç‚”ÿÇ`$ÿƒHþÿ ÀØ`ÿð(Èþßÿ ýß E` q¹zrr:é“pendstream endobj 339 0 obj << /Filter /FlateDecode /Length 187 >> stream xÚíÑ1 Â@Ð  Óä™ èfÑlì1‚[ZYˆ•ZZ(ZÇÎkÙyÛt¦Ž»‰… а{üáÃÀ»°O!õ¨­(Võh¥p‹ZÛ0¤(j.Ë ¦匴F9²1J3¦ýî°F™N¤Pf4W.ÐdI àñ˜Kü#ZX€ƒøã+üÏÞ8ä¯È’ àö„wåÂ6î .n ŸÁÉÁNÃõ<sUÃv‹öÁ848Å”Ìðnendstream endobj 340 0 obj << /Filter /FlateDecode /Length 270 >> stream xÚ…±N…@E‡PLÃ'ì~ >ÄX‘<Ÿ‰&ZY+µ´Ðh+ü™| Ÿ€ÝK$\gfÑX)Éæ°{÷žúä ÚøÂʪýÑÆß—üÄu%ûB·úáî‘·-‡k_WÎeÊ¡½ð/ϯ¶—§¾ä°ó7¥/n¹ÝySÌÿ‘º…Èí‰壼£'7¬ìe†"Ê0Ò›0ÅDr„ì“92•ãD˜ÓIÙ-Ù¨l‘ÎèðÞ+s@!ËÊÙ˜Âb4ÐHëÜþfƒoöqŽ!þÿC»?ù„õI?b`6ÅÀ|ŒtC t} lL™D2r1uIU'‘TuIk*’ÖT%5P%5°­!Ä.ƒ>“ÏZ¾â/1¢¸¾endstream endobj 341 0 obj << /Filter /FlateDecode /Length 310 >> stream xÚ…Ð1NÃ@б\XÚÆGð\œ8ÁM,… á * D” è"ÖT¹–o+ølé"ò0³³DQXOš]yþþòôx:ÁNð¨˜bYâÉÆæÙ”OG8›…£û'³¨M~ƒeaò ž›¼¾Ä×—·G“/®Îplò%ÞŽqtgê%Qmÿ3¢ "Vì–åÏŠ<³Ÿ³•èXú1f3j îÔ„MÅVl!e±y‹ ºo+ =̃ï¬Zy·Çê½ÃÎÈ[‘ÄcoFG\{SZ·êƛЦQ?ƒä‰`߈†µ™=mÿ»•;4ëMÛ?l½þœ};Y«íTj¶Ä­õj´Ó©Ú õIP×Z§ël§klku釾2#}UJ.´Ò†RÌym®Íaɽïendstream endobj 342 0 obj << /Filter /FlateDecode /Length 232 >> stream xÚmÐ1jÃ@…á*ÓøÚx-"cUZpˆŠ@R¥©—)bì.X:šŽâ#¸T!vóÞRYHì ~†Y7ËzãV®Æ·¾ãûYé·Ö ÎvÃ_ºíÔ¿ººQÿˆ[õÝ“;N{õÛç{W©ß¹·Ê­ÞµÛ¹ðÄ[J–æ0Á)\$‡£éx " ³LãY$¤áß> LQ~à 3ó afˈLÀŒXF,@'˜› ”œ.Lè™ h¥”™Ö2­Î2#Ñæˆœ#‹Ìä‘‚rîm\É-õ¡Óýjh¦pendstream endobj 343 0 obj << /Filter /FlateDecode /Length 223 >> stream xÚíÓ±nÂ0`#†H·ärOP'€ [%R3T‚‰u‚ŽZµsx´ð&y„ŽTŠü÷¿ Á†XjÉÒw>ßÙ<?LFšê3k>Òm&ï’§Zbó&ÓRüJóø'®Š/ŸõóãëUüt1ÓL|¡ëLÓ) uUpµ)v ¾š -‘?@øË׌ö8õ€;n=pOkì£q11»EœcfØÕ˜À³1>†KZ³*t’¼³}–­w{¢»7¢á:Þïƒþy+Ø÷€}¬k(óR–ò éQtnendstream endobj 344 0 obj << /Filter /FlateDecode /Length 95 >> stream xÚ31Ö³0U0P0T02T06W06RH1ä*ä2 … !2ɹ\Nž\úá Æ¦\ú@a.}O_…’¢ÒT.}§g ßE!ÚPÁ –ËÓEá?< àrõä äìWGzendstream endobj 345 0 obj << /Filter /FlateDecode /Length 229 >> stream xÚÍ’1 Â@EG,„i<‚sÝl±F«@T0… •…X©¥…¢ur4â,-‚ëw3)–.düfÉÿ3tƒ8–Hœô­ ­Ä#Ù[>±s#‰ÇUewä4c³çØÌ!³Ér9_lÒåD,›©l¬D[ΦBÔöá$þ‰»å½:À¨ë[þŽRI9Šùƒz%”î 7t„ø | t}º½€GIÀ³¦ã%EPþðú_üþ+µM_*|u°69X~o ©hFš˜æW§©ÙjÒš»nîDµ!<ËxÅo†sendstream endobj 346 0 obj << /Filter /FlateDecode /Length 137 >> stream xÚ33Õ37W0P04¦æ æ )†\…\&f  ,“œËåäÉ¥®`bÆ¥ïæÒ÷ôU()*MåÒw pV0äÒwQˆ6T0ˆåòtQ```c;0ùD0ƒI~0Y"ÙÿIæÿ ò?&ù¤æDå(I²ôÿÿà"¹\=¹¹VI¢”endstream endobj 347 0 obj << /Filter /FlateDecode /Length 301 >> stream xÚ}ÑMJÅ0à)Y²é’Ø–G_]x>Á.]¹WêÒ…¢ëôh=JŽe¥ãüˆ? Ú¯if¦“tߟ ChÞ¯6 §á±s/®ßÑ\¦¼ððì£knC¿sÍ%½uÍxÞ^ߟ\s¸>kŽá® í½Ào@£B,D¸'€DdZš"-š,-ÚB/6¨3"x‰š¢äç”™œ®—ÓÊ®k‰í ƒËpÞ7q|Ì$pãFúæš¿È »ùdíL™@ÚAvüZ´H¥ÙFÓ¬¦YM«5Þk|,ZdÖìI³eb4Ðj`Môä³g!@Tt¶«`[ÈBÍ».àA8ã²EþõËwÌ•b«ÔŠW¢’üÉü'îbt7î}tû”endstream endobj 348 0 obj << /Filter /FlateDecode /Length 305 >> stream xÚ‘½N„@LJlA² À¼€ÅgErž‰&ZY+µ´ÐhÍ=Ú> @IA烋 á·ì|ýgf.ëK xQá®Âz¯•ÿð!ðe‰õ•Y^Þý¡õÅ#†à‹[¾öE{‡_Ÿßo¾8Ü_cå‹#>UX>ûöˆ)Eà§£‰¿ŽˆN£ÈGG#›"ˆqhfHøÔ8¾ÏéäfEÊAEIÅÈ=¿ÿ„Å-ˆÎ’%$©#쵂H\ÀÕWèfä¹  Íhg™…™cgݺi†¹8iZþG«`©s+´¤É,25×ô\iÜ`2[Ì[¸¨ÈE3)Dä/ˆþbZÁ1.8Gƒ ƒ•I¬³éUuužR¯áÍ:îXÔ&¼oÝ´í]Ö¯"MºÎÝß´þÁÿéýëoendstream endobj 349 0 obj << /Filter /FlateDecode /Length 225 >> stream xڽнjÃ0ð ‚[ôº'ˆìPÛt±!têP2µ;´4›qüh~?‚G‚$ÎýÅC»õ@ú¡Bw—&ó,㈮+]pöÈo1}R2æ¢ñ8^¼~в$ÿÌIF~{Í’/wüýu|'¿Ü¯8&¿æ—˜£•kžnûLMÔÐ@;ÑÁž&žEõD-twñ>‡5 pU/jh:ØŠ¶,PW+D5À^Ôh ma#:ôYÀVpÔ=ìDÓŠºb~9¬a€g‰æ/ÌÿŸuøÿwiSÒ]]Óqendstream endobj 350 0 obj << /Filter /FlateDecode /Length 285 >> stream xڭѽJÄ@ðY l“Gȼ€&áH¢ ç ¦´²+µ´P´N-²°`“b¹u>r‡"X?²ÙLæ¿Ó6']‡¶x\c[awŠOµ}µÍšéñLß<¾ØMoË;lÖ¶¼¢e[ö×øþöñlËÍÍÖ¶Üâ}Õƒí·hF8ˆs0;àÛ¤Ž¡+*³¯Lʨ€•Yñ ‘ iþŸŒk›àäï!%Nó¹4tíaà(.JÚ‚bÒî> stream xÚ’=NÄ0…'ÚÂ’›!sHRd ‘–E"Tˆ ()@ Qa-GÙ#¤Lyxcó´‘•Oòóx~ž×ÍaÛrÅ Ô¼®¹=âûÚ>Ù¦ÁfÅíqRîí¦·å57-ϱmËþ‚_ž_l¹¹<åÚ–[¾©¹ºµý–‰ÈÒOdÀ%2…È ¸9SQväTòÔy2ÙSÁ Tà» 2NXFvY òŒø_ȹèíC!š‹"Þˆº%R­î/ºQ‘‰(Œ¶"!×V$ÞMÀ x#$“0"»W ­ ÎˆPrÂ(¨ì$Ó7´Ày?â Âîßèö"^Ò\æ%òˆI‘Éd¾«^EÀ€AíÈRɯiP7ë@tÊê4F¦¾Ã}œÒ·  CÔGƒÉžõöÊ~†\öendstream endobj 352 0 obj << /Filter /FlateDecode /Length 239 >> stream xÚ­Ò±jÃ0`™[ü¾he…ÚÎTAš@=š)Cé”dÌÐnÁò£ùQü5˜8²þ@mp CoÐ'¸ÓJ“§,ã˜3~Tœ>óLñVÑ’Ô%cžMq³ÙÓ<'¹æ$%ùæÒ$ówþ>þìHÎ?^Y‘\ð§âø‹òGÂGT‚ ´%ð1Šîs °à< (G˜®Ï‹(ºnhÄÉõ<œA홀°OîÐÂS€ÆiüX+ÒÃé"¬]ö1¨Õö n\PrÀ䚇cDôÆÞ§ý+Á"ZlÎ`eºúý1´ÌiEWÂÁLendstream endobj 353 0 obj << /Filter /FlateDecode /Length 339 >> stream xÚU‘1NÄ0E'JÉMŽ`_²)²ÊÒ²H¤@‚ŠQ-” ¨£…›øéHayøcARäIñÿù?ûî¼ïÍÎtæ¬5ûÖôæ¹UoªëðqgúË|rzU‡A5¦ëTsƒÏªnÍÇûç‹jwW¦UÍÑ<¶f÷¤†£!*y"<–Þ3Dà‰ê@¼àȓơ©ŠD,#DQÄc!C<– S 1¹©úŸ`}½EØ fðŠQæjÙÀM5ÏA°˜øcÁ²¦Ç.%ó‚Í€€ %‚Æ ç œ9æd’QÿÅœrè™’t‘pI#xÙï$u_"E`—-5KˆfXÊz‘ qv, /&Áy¹6:)z…‹©veÒuFµA¹EøÅ”àVxXVˆ;Õ³]äß‘^KFƒùa9 ÔjcªG²ëÜY•ëAEJ˜¨ëAÝ«D©endstream endobj 354 0 obj << /Filter /FlateDecode /Length 312 >> stream xÚ’±JÄ@E_H10Íüy? ÙÙ(uSZY,Vji¡hý´|J>!eŠa®ïÍàÅsàN2sß½Y×'MÃ+®ù¸âuÅÍ)?VöÅÖµˆ+nÎÒÎóÝt¶¼ãº¶å•ȶì®ùíõýÉ–›› ®l¹å]Å«{Ûm™È`Oòô˜eÍ€@ªAÕ"dek¦v"ÂDÅLª8O92!~l@Ncï@ŠzÐÐ.1öaiÂŒßáÿðBÿÚ v?Qàƒàt>—p„ C 4‚s9¿ŸH]¶>Ÿ0BÁ/@ IL}~¦-&¾ÃÇ\²^+—™˜îèävq°€ÑÈpÚƒ Ä:ŠTNëµ&­ÐøXaž*ÌE——3ìµq}µˆNd”!ýÑ«ÌId/;{k?žnfendstream endobj 355 0 obj << /Filter /FlateDecode /Length 267 >> stream xÚµ“=nƒ@…Ç¢@šfà9Al%"’C$SX²+V*;eŠDI£pJ ÄzÖ°òÚîÌŠÕ·üì›y^çOÏ‘=“Jftˆñ“ˆìॽ±ÿÂEŽzKI„zÉWQç+úýùûD½X¿QŒ:£]LÑæ™óÑ@G¦j…ÌQ¨P¦˜ÚϘº§‰iz‚ÿVÈ8Jy›Ž¦<_’â­oSÈr¡ûºãJ^CoC¿âÁàK(®¥vR“ਾB,á|.ÅÝÚWK¥uÅÉ¡Ë`DuO6®KNý™‡‘¯6‘_i JGãT+É­”´ ç¤KP±„û²¡J¨ðÿ~ ßsÜà uÍyëendstream endobj 356 0 obj << /Filter /FlateDecode /Length 338 >> stream xÚÍ“?N…@ÆgC±É6½€QãÚ¸Éó™Ha¢•…±RK vF8Þä%^€’‚0Îì ‘¼Z ø-;;3|óqvrX”ºÐ§ú ÔÆhs¤ŸJõªL¡ù6Ç~çñEm*•ßiS¨üŠ^«¼ºÖïoÏ*ßÜ\èRå[}O‰TµÕ@W‚€dªR‰ˆ;Ȉ,Q–ˆG¨9ÛCi ì7rXKËä0—Aà@$ˆs;’²º:ñ>GOÔ11PV¨GG’ª à{ ré(µëÜ‘  J}1*7S(»$;SheIÙLõ>âoúCø¨^¥f­i0Ó¤ÚÙIñ™Î§ÉÌô¬ð§ Cœ4ôqú¢ŽHºèG®¹‹nJÛè°¬‰®³œcÔC +{ç7ZÛÎÛ¶>»ƒ Úà¿¢‹*E!¼Õe¥nÕ/ÙÏíãendstream endobj 357 0 obj << /Filter /FlateDecode /Length 258 >> stream xÚÕÓ1nƒ0`£ ‘ÞÂx'¨¡b€ ‰¦R"5S†ªSÛ±C¢d†£õ(9BF†ˆcWæGµR¦Z}lÀþ_ÇYÂ1§æÈSÎù#¡=e¹éÇ}·¿ñþEeEzÇYNzm®’®6|<œ>I—/Oœ^ñ«™æª‹kªo?nÁ‚>ƒíCK¹(Iç¸ÖªoïÐv^سs`'rVr\wƒ Iã‚—ý˼ÏÞ‹‘/ÞÁÈí¤íýênp=g¹ÇÍ?ôÿ;³†¸ÎØ—¹=Å  13èr…Ù‹ “E7™ÛòŒ™ÇZ€1µÓŒk kmªgjÖ.=W´¥€Ms³endstream endobj 358 0 obj << /Filter /FlateDecode /Length 349 >> stream xÚÕ“±NÄ0 †]u¨”¥P¿´U‘®"‡D$˜02€`ny³ãMNâ¸ñ†ªÆIÜ»´EÀJ÷“ã8vâ?ÏŠã¢Â x”cµÀ²Àû\=©Ò83,OÜÊÝ£ZÖ*½Æ²Ré9»UZ_àËóëƒJ——§˜«t…79f·ª^!ðÒ û5D±Åˆˆ6XÖÌ;Ж©‡Æí¤uH@†cýN.|ÍŽrá.m@µÎ³Û¯F|Ž=›Mb¶š Ö´`]ƒÃœb{)Ð$èÀU2¤ئç¿ô' ÄcW˜¾|–rƬÇ,eŽ9sóýÃôOx^cf¥u=þÌzÆ.‡–{6œü‡·›òðÖS–1´Œ¸;ôAýe&oVýögÛ›ù`¦_#œˆ7ÄŸ¢)ÒNG¼¼ èöÝYmv¢M£Ù­è×Üf !ˆ&\oê¬VWê ?¦!endstream endobj 359 0 obj << /Filter /FlateDecode /Length 105 >> stream xÚ3±Ð31Q0P0bS #…C®B.C ßÄI$çr9yré‡+˜ré{E¹ô=}JŠJS¹ôœ€¢. Ñ@-±\ž. ÿA ÉÀþÿÃ(9THü±ÉåêÉÈ’:Õ°endstream endobj 360 0 obj << /Filter /FlateDecode /Length 311 >> stream xÚÔ±N„0Àñ’oé#´O ”\<'HÎ3‘ÁD'㤎ÝHàÉ ÆÁÑGð‘áBýú•Iû%)ð+,ÿ¦`ÊÕÑz­ ½ÂaJ£OJ}oà Œ9Æ™ÂÙ=º{„MùµÆyÈÏqòæB¿<¿>@¾¹<Õò­¾1º¸…f«­µ£ #q·8&ÏtáÞ3ûŸxž=%Ýüæ·õT]ˆ_¶'V1ü´± òÃîˆSï>8ƒ|º‹bGýx ²¦~Ù‡©¨_‰(Jê¯fÔß2L©Šcâ–# ןî8º~w‰¢[ÙstýJptýU,Ýr´,]ÿÄû±ž#öc},»=Ö3Ö³Tëc)íÛfôÑrLi‡G’vKA;+DEï ñß1¥]þ*Y÷‡¨ÄB8kà ~oˆ§Lendstream endobj 361 0 obj << /Filter /FlateDecode /Length 209 >> stream xÚ³°Ô³0U0P0b c #…C®B.s ßÄI$çr9yré‡+˜[pé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]þƒÁëÿ8ëœõ¿ÎJóƒûÿ ,fn0‹¤ªÿcÙ5CXòÿ@Y ÂbGb}ÀÂúe1ceý¡ Ÿ½ìH,ln~÷å Ÿ#BBðPŒº`pÎb€±~ÀY 0SFYä± I—«'W TÛ4#endstream endobj 362 0 obj << /Filter /FlateDecode /Length 290 >> stream xÚµÓ±NÄ `H‡&ÿÒGèÿJk×NMÎ3±ƒ‰NÆIMÔèÜ{4¥ÀØá"R ÜßÈ%)ù ~ø¡Ùœo®°ÀK<+±©±¾À×>¡©Lcuåz^ÞaÛxĦqkšAtwøýõób{%ˆ>•X> stream xÚ}ѱJÄ@à?¤l“v_@“pÞ] !pž` A+ ±RK E;!÷hñMÎ7H¹à’qfwO ¦ù`vv23»œ•µ)ÍÒVf±0õÌÜWêIÍ%Xšú8œÜ=ªU«Šk3¯UqÎaU´æåùõA«ËSS©bmn*SÞªvm€| 82"‡7@бï, }8$´þtHIR2>JØÜJ =°MT;4[6ÿ±ùR׳éÄÄ~“û íD©Ï}~k£.:Âíì£6ʃH«¬Ï±¥DÎJ†wðkñ©8ÊÌ1ÁÛ‡=Iszÿ‚‰6üÑWÎBðJIľ7ìl¢:šÇa²hJ½Ý7ùCÞ¦ûßÍ8‘ÂýðˆþÝÆðâÞ5,φýkV›Ôqœ<ò Òöè÷Ã/™„µXY×dã|…ËvRJµêJ}áI±endstream endobj 364 0 obj << /Filter /FlateDecode /Length 176 >> stream xÚ³4Ô31W0P0b 3 C…C®B. rAɹ\Nž\úá \ú@Q.}O_…’¢ÒT.}§g ßE!ÚPÁ –ËÓEÁþ?ü!žu€¡þ?3õ‡Äb°ÿSÿÂâÿWÿÂbÿWÂbþWßa1þ«g€°Xu0V6V ŒeG,ëŒeÿÆ’'Åc1Œ²†%‹’œÍârõä äãCì> stream xÚ•‘±JÄ@†'¤Ls°óšL® œ'˜BÐÊB¬> stream xÚÝ‘=NÃ@FÇJišÁsX[NŒ©"åGÂTPR€ ¶;®•ä 9BJGZí0;Þ J¨Øêifw<~ßEqžU”QAg9•—Tô˜ã –)fTûÎÃ3Îj4wTNÐ\IM}Mo¯ïOhf7sÊÑ,h•Svõ‚`Úæ_À ühv= ™{H™× ³ïñž¡±ÁBÊ [rë¡%k‰TïË3¶ü·š.‚ 0=€;  ý Ú¿€“ûv>ò;ö»ÕbC _Æ\”Éõ¶Aøf #àc§ƒ—è,'·4/+;h‚¼q1h¸¬ñ?7p%endstream endobj 367 0 obj << /Filter /FlateDecode /Length 243 >> stream xÚµ±NÃ0†/ê`é?BîÀ‰dSº`©‰ HeꀘhÇ XI-Â#dÌ`å¸s‚ºtÅËgý÷Û¿î·×~Iyºª)x ö5¾£_‰XQ¸™&oG\7èväWèEF×<ÑçÇ×Ýz{O5º ½ÔT½b³!€ÿ€œÈ£‚™Oª±ª–!2J`@;€÷PŽPÈ<²;…‘GgÈ3E9c̈¹*lÊ0´9Útüø / Îà Ýìi†Õnʲm'¾©¿;)¤ø–),åˆbÈߘ^‹ìJq™©Ý‚§®£zµlÑð¡ÁgüÍF‹¾endstream endobj 368 0 obj << /Filter /FlateDecode /Length 210 >> stream xÚuÏ1jÃ0àg<þÅ7ˆÿ 4²‘ã1'…z(¤S‡$ MH×XGÓQ|„ŒJÝW\(TˆôúŸ 7uN3uúk‘i1Ó}.Gq%CËáf÷&u#öU])ö‰±ØæYϧƒØzµÐ\ìR×¹fi–Šè €éÆWà‚Op_ÝPIÓ!õ I@Ò*¤#f %×#ý¸~á,üK{ÇT#ç¼³¶,„ΰq`É(°nìYÜsLøâ¾Þ–ÇF^䃷V2endstream endobj 369 0 obj << /Filter /FlateDecode /Length 125 >> stream xÚ32×3°P0P0b#S3s…C®B.#C ßÄI$çr9yré‡+ré{E¹ô=}JŠJS¹ôœ€¢. Ñ@-±\ž. ŒØ€ÿ‚ˆ¥ˆŒþÃûæ? : æ ÿÿÿ€ .WO®@.»P endstream endobj 370 0 obj << /Filter /FlateDecode /Length 161 >> stream xÚ3²Ô3·T0PÐ5UÐ52P02T03WH1ä*ä22 (X˜Ãä’s¹œ<¹ôÃŒL¹ô=€\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. 6 ÿ!˜ñ †‰ƒÕêìÿ#0Åì‡$¶âz þ$!¸Šÿ0Ô3ü`°aüÀ Çü€|ÿ¸\=¹¹¾[3endstream endobj 371 0 obj << /Filter /FlateDecode /Length 110 >> stream xÚ32×3°P0P0b#S3K…C®B.#C ßÄI$çr9yré‡+ré{E¹ô=}JŠJS¹ôœ€¢. Ñ@-±\ž. ŒþÃûæ? ŒC 1ÿcøÿÿq¹zrrp^Úendstream endobj 372 0 obj << /Filter /FlateDecode /Length 203 >> stream xÚåÐ=ªÂ@ðH˜Â\@ÈœÀMü BÀ0… •…X©¥ ¢­ÉÑö({Ë«ãî+¾¼b†ßü§˜aÖé8åž«|Äý>2ºPî³Ô~±?Ѥ$µá|@jáRRå’o×û‘Ôd5åŒÔŒ·§;*gX@l$Æu¯8lSyÕEÈžñn!Ñ­Á£X#xiTCÄÆ©F•þHjODO' 0¿ôvÒÊÝö§þ³B÷J#n Ò$"¡ˆù&š—´¦ݤ›endstream endobj 373 0 obj << /Filter /FlateDecode /Length 159 >> stream xÚ35Ñ34W0P0bSC…C®B.˜ˆ ’HÎåròäÒW01çÒ÷Šré{ú*”•¦ré;8+ré»(D*Äryº(0þaüÇÀðÿûÿ@RŽý´`üÁÀþ§€ñóŸ ÿ`ø$@äÿ†z É€ ÿa/É òmÃÿÿ?ìÿÿC&¹\=¹¹?qjSendstream endobj 374 0 obj << /Filter /FlateDecode /Length 209 >> stream xÚ= Â@…GR¦É2ÐMtý©bSZYˆ•ZZ(Ú‰ÉÑr2EH|›((vÂðí̛ݷ«Ga_<éIÛ=Ý—½Ï'Ö]ˆžQêÎîÈAÄj-ºËj™U´Ëùz`,§â³ eã‹·å(¢8!"«Ê@'-À1¹à4r²Sjed=L A Ñ‹]l»ÓŒßÄñ V0ùee˜þǯÛ̬äsnãÄ…«òíž ²Áœ¬Ì”/óÍKÝ´í*ëßàYÄ+~PûZ>endstream endobj 375 0 obj << /Filter /FlateDecode /Length 218 >> stream xڭнŽÂ0 p[*yé#à€4"€øè€t7Ýpº ‘Á }4¥Ð±CHpH'n¼[~ƒ­8{`zzÄ9÷¹«Ç<Ðl o5É„jÎÃ~ÛÚìiVúb3"µ’:©bÍçÓeGjö1gMjÁßšó*Œ6±Þf¾'i%°ôQ|”p”Þ´Dй£+”7Y´¦Ñ&˜Dí»èþêï™ñÇÖºÍã^ÙÜ+­džF˰ÅU6ºƒ´uÒˆ“¬;Ò‰wþÛĽoÞ¤eAŸô$”Ššendstream endobj 376 0 obj << /Filter /FlateDecode /Length 144 >> stream xÚ36׳4R0P0a3…C®B.c˜ˆ ’HÎåròäÒW06âÒ÷Šré{ú*”•¦ré;8+ré»(D*Äryº(0ÿ`þðÿ‡üŸÿ?lìþÿ(¨gÿñà?óÏÿ6ügü  u@lÃøŸñþC{Ì ´÷ÿÿpÌåêÉÈÈöPêendstream endobj 377 0 obj << /Filter /FlateDecode /Length 213 >> stream xÚMͱNÃ@б\DÚæÚTdëä""R.HE¨€’’‹ˆøÓü)÷ ‡h®°¼Œ!Åkfg´¾:[œë\½ž–ê—ºXêS)¯âK†såí÷òø"›ZŠ;õ¥׌¥¨oôýíãYŠÍí¥2Ýê=7Roë0ͬ¯&aÖ8äéYZi4 % :šŽú£¬1X[ÀÌz83L̺ܘE†œ[yß!8}†?£øË+–÷ÔðO2dñ»ÍÃWtm8 è\„\Õ²“uYÛendstream endobj 378 0 obj << /Filter /FlateDecode /Length 160 >> stream xÚ36׳4R0P0RÐ5T06V03TH1ä*ä26PA3#ˆLr.—“'—~¸‚±—¾P˜KßÓW¡¤¨4•Kß)ÀYÁKßE!ÚPÁ –ËÓEó¡a9$lÄuPüˆÙXþÿÿÿ¡$N#ÌC®ca¨gc{ ùù ì00þ?À”àrõä äùJmendstream endobj 379 0 obj << /Filter /FlateDecode /Length 136 >> stream xÚ32×3°P0P°PÐ5´T02P04PH1ä*ä24Š(YB¥’s¹œ<¹ôà ¹ô=€â\úž¾ %E¥©\úNÎ @Q…h ¦X.O9†ú†ÿ ÿᬠ—Àƒ€ ãÆæfv6> † $—«'W ÷ '®endstream endobj 380 0 obj << /Filter /FlateDecode /Length 95 >> stream xÚ32×3°P0PaCKC…C®B. ‚†‰ä\.'O.ýp ŸKßLzú*”•¦ré;8+ré»(D*Äryº(È1Ô7Ô7ü? ¶—«'W Ëendstream endobj 381 0 obj << /Filter /FlateDecode /Length 207 >> stream xÚ½½ ÂP F¿Ò¡¥Ð¼€ÞVn«“‚?`A'qRGE7Áúf}”>BÇÅšÞ‚Šè*3$|9º×î†ì³æV‡uÈQÄÛ€¤}®+ê5“Íž†1©%kŸÔTڤ⟎ç©á|Ä©1¯öר8Ux·èã”À*à%V7±38©“ÂÎ \Aî&°rOP ådeyÜ¿¡>Xý ?c\%éý#øë£æË'q¶(I£©fÔ‰µNšÄ´ ƒ…)endstream endobj 382 0 obj << /Filter /FlateDecode /Length 259 >> stream xÚ]ÐÁJ…@ÆñOf!"·."ç åÚÍE0p»A.‚Zµˆ ¨vµ ôÑ|Á¥‹ËÎgH0?˜ñ?p´¬NÎNmn¹ÊÒ®×ö¹wYUºÏ¹å‹§7ÙÔâîìªw¥§âêkûùñõ"nssa q[{_ØüAê­…ÙÈB´aD4%;˜>Ú#îp¨§Ýà{%*eÌdl”鈧W”]èHÿ‹ùOË·ž¦…dfä 3Âױt¢KÒ‡óF¼oæû¼³MØfl=³oÂ,"†EÌ"pLΉ~WІh–Fš¥F³*Ö4×€& !Œ3ž´DWþËZnåÎvjendstream endobj 383 0 obj << /Filter /FlateDecode /Length 206 >> stream xÚ¥ÐÍjÂ@Àñ„@CÐkBç º·‚Ð õäA ¶GAEÏæÍÌ£äMbö/hèµûƒÙf–Éf¯Ó±Zµ'›èdª?©$¶¹u©{øÞÉ<³Ñl(æ½½“èéxþ3ÿ\h*f©ÛTí—äKõ> stream xÚuпJÄ@ðoÙ"0…y!óšDr1•óSZ)ˆ ¨¥ ¢­É£åQò[¦X2ÎæN¼²ð[˜ý÷ÍÕñéŠ3.øè„‹—%?çôNEÆa”Õvåé•Ö ¥·\d”^j™ÒæŠ??¾^(]_ŸsNé†ïsΨÙ0yµ("=¬·¢I 5p‡oI—àu·ë~ѽvŒ§ œÚ§î´„©5âÐF‡à rˆ¤“ q/ošAz½ ¹FÅÌxé¶`Úcο¤ý=!õ‚)Ùa¦$¼ï°ãÜ ¹Ðï íkÙkRý—:ô5±Œ€•ðš†.º¡Ö̈%endstream endobj 385 0 obj << /Filter /FlateDecode /Length 257 >> stream xÚuбjÃ0à‚Ž€Ödò=A-pèHR¨‡B;u(…@›1–²9æGñ#dô`ìžd •|' óŸ–‹;}Oš¼–üåô™ã÷¶5\—˜½RQ`öÈ»˜•Oôó}Úc¶~Þ÷[zËI¿c¹%àªa,ÑD!¯Q$mª‹bÞG¡‡Çá2bW…h*—¾^õjL/.i éÕA˜€j’S]3}`ðqdØô;€ÊÇç¸<ƒÆz¼ì<ÊÃÄ uH> stream xÚ37Ö3°T0P0b3K3 …C®B.3ßÄ1’s¹œ<¹ôÃÌL¸ô=€¢\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. ÿÿÿ?Àü PhÆÿØÿ70Ô7000þc~4È«Øèáê_ì4,žq¥.WO®@.þ†Ãendstream endobj 387 0 obj << /Filter /FlateDecode /Length 171 >> stream xÚåÌ1 Â@Ð [~¡ò/ »1F“JˆL!he!Vj§ ¢uöh%G°L²î‚……7pŠWÌÀÄj RVsÈ£˜Ç BºRäJœϲ?SVÜp”’\Øšd±äûíq$™­f’Ìy²ÚQ‘3ºÆ´_@ x6ÿÂÔQj‹yþÂka´–Dƒ D~ü:èVðhˆªt—%¨š´¦7¥Tmendstream endobj 388 0 obj << /Filter /FlateDecode /Length 252 >> stream xÚ¥Ò½jÃ0p †[ò¹hd‡`e3$)ÔC ™2”@ íØ!!Gó£è­ ©ï3üU?&Æ ûw†ã0ÿ ó,N=jÂô7˜>ÌFTÒ¿ž¸‘Ux4·ÙF=„E_¹%¸\áµ€=Ü/ɸhendstream endobj 389 0 obj << /Filter /FlateDecode /Length 229 >> stream xÚuϱJAà¹ba ï ¼yÝÙhº…Á+­RˆPK E;1 ¾Øt¾Æ½±»âp½‹ S|Å?;?¬ŸÏxžjösö3¾­éüTCÆÍÍ=-r+öSrg“kÎùéñùŽÜââ„krK¾ªyrMÍ’a{è„Õ®lBŠ-`a:`Ðu)xªu‹w­äG½W‹˜ÕùÇ2©&e˯œɦá¶ÏÚnh›‡Î ÙÍhüuð‡aǨ‡k}ÿ¡ Þ[ bÔªµoŸb»ý"E“z“†O¾€Nº¤oÉŒlaendstream endobj 390 0 obj << /Filter /FlateDecode /Length 213 >> stream xÚÅѱ Â0à; ·ø½Ð4X-‚P¨ vtr'uTt•7)7´&/¡Â“²‰Ž hÀ4³“"¯rM¾ò¨Ó˜îzd‡Úendstream endobj 391 0 obj << /Filter /FlateDecode /Length 290 >> stream xÚåѽJÄ@ðYR¦É˜yM̲pž` A+ ±º³´P´”äÞ,÷&ñ ´ËAȸ³›„ÃÃΰ¿Ý%“ͦ‡GÇ”RFûš¦štšÒRãN2»šÚ¹ö{‹{œå˜\Ó$Ãä\Ö1É/èéñù“Ùå)Ùùœn4¥·˜Ï ܵç0Cþ v þ-¸ôˆ¸ñ0ÜypiV‚ …p-P¯‚¸ØLð"(J€Ëv×W—ÀU+ov®Œ‡-ã“ßúcDâõg˜Uâ7({ð_`üú7'4»¨¿ ÁlÃ…éâm¶sކH/@×b€±'Û¸^U Þ¶b°æÊUŒVlÿA1J·1×vÏÞ€g9^á[9×^endstream endobj 392 0 obj << /Filter /FlateDecode /Length 267 >> stream xÚ‘±J1†'lq0…ûÞ¼€f̰pžà‚Vb¥–Š‚]òhy”}„-¯86ÎL¢œ‡• Ù/Ìü;“üq«Ó5äè¤%×QwFO-¾¢kHfçræñ×Ú;r Ú+£®éýíãíúæ‚Z´ºo©yÀaCÕ 2–i¤´å¯™5º˜À€z„>‚¬%k<&rš¥,«¶`vŒìd+q3Ëß’1«^+ü ô\úoxE<@ØG*Ðqˆ ÷ù/|AüýoŒÙ¸=˜¨×,¨¢8U(`‡Ø´ fA-©‘pœûžçÚŸ¹Ú¤Pjí"ê{mœ¤ÔIš€‘ƒã倷øYRŽendstream endobj 393 0 obj << /Filter /FlateDecode /Length 351 >> stream xÚ­‘ÍJÄ0ǧäÈ¥¼€¶‹µ‹§Âº‚=zò ‚ =øu“mÁë£ärì!4ÎLRuD¶„™ÉÌüg¦^îW¦4•Ù;(M}hêÊÜ-Ô£ªKCÿQ•\·jÕªâÒÔ¥*NÑ®Šö̼<½Þ«bu~lªX›«…)¯U»6À_‡GzahBŸ ‚Õï„—ã›t ]æ2 º‡¦G6Da)…Æh˜rûÅÌcf÷EA¿1-Û?pλëÛÕ³«÷³î I}Òˆš6Ä¥£P€gOén Àâܘ’ÝÙ'û+ít‰c¢„036u! è’¡AÒMÄ"9Ñ%ûÈ} |H³=¤X9ÑZ±H v¹÷]Ͻãm³E=L‰QVþgÎq)Ïœ¯ïRþT7éØD]àãn²¤Çó cˆ»Æ’|´M É'bÛ<Î%øªNZu¡>ÚvÔendstream endobj 394 0 obj << /Filter /FlateDecode /Length 219 >> stream xÚ37ѳ°T0P0bsCC…C®B.33 €˜’JÎåròäÒW03ãÒ÷ sé{ú*”•¦ré;8+ré»(D*Äryº(00`öÿPÆ"Œ0C=Ã~d3ê@Ìÿÿ@üÿÿCö àP³?PÁ ÿÌøÀÀÿÄ8x€ýˆq¸¤Íþ83˜qÈøe0‚w`Œ0H+Èû¸p3Œ2¨ÆÅ>ãÿ òÌÀøþÿÿÿf qƒËÕ“+ ‡ÞPendstream endobj 395 0 obj << /Filter /FlateDecode /Length 142 >> stream xÚ36×31R0P0bcCKS…C®B.#ßÄ1’s¹œ<¹ôÃŒL¹ô=€¢\úž¾ %E¥©\úNÎ †\ú. ц ±\ž.  Œÿ˜ÿ30°ÿoÀŠAr 5 µTì ü@;þ£af f€áú!Žÿ``üÿè¯ÿ ȘËÕ“+ > stream xÚåÑ=JÄ@ð )¯É2'p2°Dl ¬+˜BÐÊB¬\K E;qÒy­ˆ…å^aŽ2EÈ33ïŸÂEô„ßdȼ¯Ú»Ò¥Ou¤mYê­¥ªÂAßÃîöžÖ ™+]­Èœ…c2͹~z|¾#³¾8Ñ–ÌF_[]ÞP³ÑIÚ%ae,ò*˜¸=ëÿcÊ<üæ<¬6êF¹ç<ì â½Âö¢òÈÓ‰Y+æÈ _à ª^L½˜ubÞŠ¬qîð‹ï,÷?vïóMÜectJ§è¨ÄAq´O8Öç‡:ê®ÑG±ˆþò}-¢ÿ˜ ô¿È˜KHçÖ~Ÿc¹‹½DÇ='ùù0t[°gž7×ÒiC—ôÍâÞÏendstream endobj 397 0 obj << /Filter /FlateDecode /Length 207 >> stream xÚíÑ¡Â0à[*–œÙ#pO@·@ ¨%0&H@! $¸ñh%Ø#L"Çu€…D´ùþ¶—KzzµÙ¢ê²™Í"\¢1’CÝÅtíõˆŒAÝ“SÔiŸÖ«Íu{СuBãˆÂ ¦ ²åà³U|0Û€ù‰Ø–ØB%/Q@Px¼·à_åQvØïʲ#€rˆO‚û ^‰Ëç7\©ëŸ‘†ýãgpÓ÷x'A~^ɼ™¹P²Ù/ÀnŠC|U¸ýendstream endobj 398 0 obj << /Filter /FlateDecode /Length 249 >> stream xÚ­‘±NÃ@ †}êÉK!~¸5Ç©©*ÁÔ1#æÜ£õQú3T9l× êÈÝIßɾü±‡Ûë5•TÓUEá†Âš^+üÀ:p°¤PŸ3/ï¸éÐï©è·Fßíèëóû ýæáŽ*ô-=UT>c×€Kxåiôi$Þ«Š@v”#W@Áø!ç'=rå4à8 E\)™æGCÎ †B1Š:‹6ŠÓ½bê¥:wZ¹KÿŠ??²"XÖi=Ì1w«½fùbpêYœ4?Í]óšeä[›ƒã©ÄßÙÄt~xßá#þ°´”ðendstream endobj 399 0 obj << /Filter /FlateDecode /Length 288 >> stream xÚÕѱNÃ0Ы2Dº¥ŸûHmÚN–J‘È€SÄÔ22€`%ù4£Œýƒ*Ÿà1CÔÃg[!uBbˆòîbŸ»Éèt:£ŒFtr6¥IFÅ9­s|Âbl³ÍòðiõˆóÓ%cL¯lÓòš^ž_0ß\t—Svå‚ ÒPiˆYÇÜY0ë„Ù£Ö-$F°i nüQC$««­ö‚l±réÚ¢•ÈîWFÐ$\E‡aë×}!î~"Ú÷bÀÇ ö€?ÄqëÿÁ®·®Q®uæ{3}>t^ ãuCaÊΟ jëeG)…Am´«êÝø¢J¿IãŠe­Å[W.Üç¿¢jØ„7ý¼,ñ?n·Ùeendstream endobj 400 0 obj << /Filter /FlateDecode /Length 185 >> stream xÚÝÏ? ÂP ð¯,d°«ƒÐœÀ×ÚVt*øì èä ‚ Ž‚ŠÎ¯GëQzÇNÆ÷:ˆƒx‡üÈ—@ i¿—Drj*ñ æCDJb“Cíb¢qNjÍILjn¦¤òß®÷#©ñr©)oÌ™-åS†¯†/ž–ÂX¥ˆSeF·Ô•+^¡+ˆkÛª»d%ôA¢è3ðv×X}Xþ´øÅ~äÈö"õ7i–ÓŠ^¤Ds.endstream endobj 401 0 obj << /Filter /FlateDecode /Length 281 >> stream xÚuÐ1NÄ0Ð¥ˆäÆGð\’o$"-‹D $¨(PR€ [mr®â›#¸Lv˜q v š'Ù3þ3Éêì´n¨"O'5ùsj<=׿Íx/—5«¥òôjÖ)ïÉ{S^˵)»úxÿ|1åúö’jSn衦êÑt8ä€å©zÞ[dŒö yDñbDΰƒtÁ‰=Z¨b‹è°M΢ýÇûyqPû¡©“Újë•e^Œ5X*³>ìYëŽYžÌ:#•õB´IjÆ!¥MlGÕ-ƨéÉâH]$?r>Pçäcš6òŸA§Ù ÓìÖ~¢þ¥I"v˜¶ÈfD7¸ˆ(Ÿ0æºl@/]æª3wæׄŒœendstream endobj 402 0 obj << /Filter /FlateDecode /Length 191 >> stream xÚ35Ò31T0P0RÐ5T01U°°PH1ä*ä21 (XXBd’s¹œ<¹ôÃLŒ¸ô=€Â\úž¾ %E¥©\úNÎ †\ú. Ñ@ƒb¹<] @€ò>’ƒdF"Ù‘H~$RLÚƒÉz0ùD2ƒIþÿ@ÀðƒD1aˆ’Œ¨L²ÿ``n@'Ù˜ÿ0°3€H~`¼ücà1ƒ(¸l@Aÿà(ÀáÍþÿ8¸\=¹¹~@‡Øendstream endobj 403 0 obj << /Filter /FlateDecode /Length 203 >> stream xÚíÒ¿Aðïr Éî$7/ÀÞÆeQIüI\!¡Rˆ ¥¡æÑîQ<‚ReÌž V÷Ûùv¶ù¶™Ö[mN8åšå¦e×॥-9§Ã„]úHkêfd¦ì™¡ŽÉd#Þï+2Ýq-™>Ï,'sÊúŒ0eQĈ"”ïüå²ÇÜŸÞÑñþñ3‚Ï?£(%V” œÊUè… Ð’“n(6áÁY4nú+|×<>èÈ­h‘\Ð ºEƒŒ&tj8­Úendstream endobj 404 0 obj << /Filter /FlateDecode /Length 152 >> stream xÚ33×3Q0P04U05P05R040RH1ä*ä26 C„Àrɹ\Nž\úá Æf\ú@q.}O_…’¢ÒT.}§gC.}…hCƒX.Oyþû öê0Ô?ÿÄlB Vh Vl> stream xÚ½’±nÂ@ †2Dò@Þ€øÚp\hT$ R3 µbFª"1Ti-rÀ˜UµƒO9$f†oñý¿í³=<æ†úd,=Ø'ʇdúÏ´1¸G+q~É­]ïpR`¶ k0{“ÌŠ9}}¶˜MÞ§Äá-Ù·ÂbFÐez̈92'€Žˆ*€˜I~R¿(ßLÍ¥Kc§R/WËX-¥ÚÎ:uKtj‰]Kâ4’VšV‡h©Ÿ”w ¬w«ßkØø¯´ºþwâ®çÎ+œ£Ÿm3çRç.…d’Xö’èJ›DÆ\«ÑïXLb±Ü܃ÜEs#½—.¾øÿl«xnendstream endobj 406 0 obj << /Filter /FlateDecode /Length 257 >> stream xÚ½’=jÃ@…W¸0L£ØsDZ¯˜¬ÂT)Œ+'¥ ›Rˆ £é(:‚J&x†Ý‘ì:Å×ì¾y;óv&£Ç±Ågøà¦èžÐ¦3ü°pÇÇ)Ú± —û,rHÞÑYHÖ|I¾Á¯Ó÷'$‹×¤ã%n©lùkcLCüsb@ÄD¿$*cz$ˆXpÄ3‘C“0®¼¸_û‚^ã‹")º„Âß@¦–lÔR{ÖÆ·œ;"ár‹Ñüýê½{ýH¯º=Ï©çæt.:/£d[„ç%±K±*ýÿeá?‹î#‘W~â°ó°'¼¼7°Êá ®†„ƒendstream endobj 407 0 obj << /Filter /FlateDecode /Length 97 >> stream xÚ31ѳ4R0P0T02W0¶P06QH1ä*ä26 (˜C$’s¹œ<¹ôÌ͸ô=̹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]þÁü—«'W ‘›44endstream endobj 408 0 obj << /Filter /FlateDecode /Length 96 >> stream xÚ36×31R0P0F¦ :Å« Ì ƒYɹ\Nž\úá@—¾˜ôôU()*MåÒw pV0äÒwQˆ6T0ˆåòtQàg°?Pÿàÿ¬`€ŸËÕ“+ è±"gendstream endobj 409 0 obj << /Filter /FlateDecode /Length 147 >> stream xÚ33×3Q0P04¦æ –& )†\…\& ¾ˆ –IÎåròäÒW01æÒ÷ sé{ú*”•¦ré;8+ré»(D*Äryº(000`f0É&ùÁ¤=˜¬‘ŒÿA$?˜ü"ÿCÈ ÙÿÀ$Då(9„Éÿà$ûÿ?àXþÿÿ&ÉåêÉÈie£\endstream endobj 410 0 obj << /Filter /FlateDecode /Length 348 >> stream xÚÒ½JÄ@à A"Ûì#d_@“È]äªÀy‚)­,ÄJ--í„ÝG[¹ÂÎÚÂ"2EÈ83»ÂqœbùÂþÌÎîl}|83¥©ÍÁ‘©+³˜™»J=ª97–fQ‡žÛµlUqeæ3UœQ³*Úsóüôr¯Šåʼn©T±2ו)oT»2MÀOƒžAìé›"Ž„îl:hë@;AS$ÔŸzH€=Y/£tG£:È ¤9>à &A¢[ϱhX:J"‘lØDGz!ß­ÿ+”Ô¾ ¤˜ñö¬Ï™WÎÑúžÇ·ŽwƒkÙ®çƒï”+~PŒˆü’3‡ŸŒÇA•CÌ#ý݃ w2J)¶±ÿ'Diþ ëm!y:¤É"ac‘TðR*ë’@(ª¼\X*8w4r‚{)%ÝŽK¿|;Ò)A'—¥Jré@ËyAÂmê´U—ê|Aæ endstream endobj 411 0 obj << /Filter /FlateDecode /Length 380 >> stream xÚ’¿NÃ0ÆÏò`ÉK!~HƒÚ N‘J‘È€bF¬M-’GðèÁÄÜw.*$D駞Ͼᄏæôxé®qG'®©ÝzéjûlW.ܺÉ'÷OvÓÙêÆ­–¶ºà°­ºK÷úòöh«ÍÕ™«mµu·µ[ÜÙnëˆt"üÊä”"!–5Q¥‘&|ÔdÑŽ9‡?5“â1p·'ÍYœf€r0#0@ñ…˜JÀüñS¾'KŸ ß(‡b΀ò–L ɤ ’5º‹¤¸;–¬ÒLÚ£Y‚Ö>‰º6MÜ"v(™Þ÷Nì}N~˜U¤ÿÍù •UTã[¤²Tä°ðµåçfñ‹SUÄ•AT §H#ä°dÈQ)÷ž¼Ò{ˆ£6´R2ô"@¤òX:î!rTŒ¿Aÿ\§ü¦ú„ÔS^ªë¬EŽj,òp ŸÇdØïŠtÌS‘Ž'BZIÌÊë¦òò±â®,¦=ïìµýÖYÙáendstream endobj 412 0 obj << /Filter /FlateDecode /Length 118 >> stream xÚ3±Ð33T0P0b#K …C®B.c ßÄI$çr9yré‡+›pé{E¹ô=}JŠJS¹ôœ ¹ô]¢ÆÄryº(ü‚hCýÿù üF‰¡C€£ yØb•ËÕ“+ À¹——endstream endobj 413 0 obj << /Filter /FlateDecode /Length 374 >> stream xÚÓ1KÃ@Àñ 7´_ Øûš¤CI P¨Ì èÔAœÔQ¨¢s#~±lý·¹IÆ !ÏÜ»{w5‰Ö Ç—„ð?.qŸEs‰™8‰4i"bþÌS5ŒD™[÷O|•ñp#Ò9/Õœ‡Ù•x}y{äáêú\Ä<\‹ÛXDw<[ ¨™ºvÿ1ÈÑc(Ù²A2¿-õ#ÌkgSrí̪öC›wYÉX@–­ÁÙ7öŠ®skÏØÏ».БÕÒy§=ê¹DŸ¨e©=AW=/Ô2ÕNе³ ÞöÜPºÇ¯›ø{Ro0åR¼¶öó¾ J7ñÞ=Œ7ÆàÑ€KgŒŸW/´1>1®1x;à†ÒM¼4†Ÿö$.ÊÕñd¬s».(ãM.Æ[·Á£A—ÎmüdÐ¥c|b];·ÁÛA7”ŽñÒíYû@¹ÊïÖ|äÃÞ[3Ø3çOçÝ×/nœéþËæØ÷<.;Çí=ó‹ŒßðoZÎ)endstream endobj 414 0 obj << /Filter /FlateDecode /Length 287 >> stream xڕѽNÃ0à‹> stream xÚµ‘±JÄ@†ÿ%ÅÂ4yƒË¼€nnàà pž` A+ ¹J--îP¸B¸«Ø×\_ðSE;ò%ë_ûtòøBë–Ü=û’ܵl“koøuÿöLn}{ɹ ?T\n©Ý0`Bùòð¡h§"à(»Ù vì3…,r£Vˆç ½(R0§(™ºZ1̾‘?¡^3šAÑï RàWÄ^þS…ãML j×3ô)0}1Fè3‘õ¹fšÅš l—iX6e–§©î*y’›XˆÞ i}l±éæM‹ó£«–îè S-zYendstream endobj 416 0 obj << /Type /ObjStm /Length 1401 /Filter /FlateDecode /N 84 /First 734 >> stream xœXÁnÜ6½÷+xÌ^Ö"9Ã!À@Ñ¢½iÐæÐ´ÈÁµ×ÅŽØë¢ýû¾áJ»¤(ÉV¶¸#jö½7Ã'.ÉŠé Ùh¼^’6ä:c½àjMWgœÓ«7.D\Éx"\1×ëü`(èU [‹k4õùdBÄ=¤«Wk$ w&zäñÞ¤€ùžLJ6ç²~±ÆZë1c룃œ+$uÈB@É@Nä0 x ¤ ‚̢̄ ™%è™c‡„„Ì1jBdNƒ™é@ù'À`Ðdf(`•:ª³jƒ¯Jç’>%Æy•£qªqÂ@…Ã;ÖÇÁÚe„Ã…¬Ÿj+x* ³PÌŠº¨02GÑ2'§k¹:°&ßA’ü#°õVÅF.Ÿ«'Þx§e”Í½ÅÆ{«·“*ª,ð5^É‘ 3%dŽÈœ1Gdæ¨d^#ÈD#È, ,"³¨P(•V#ÈY#Èœ: sÒ2%dN ­}f¡p»¨¨fFðÁ*BËi•SÐSÕZ„RT­V¸ð¬Ò$o¿{ûÖ\ühÞ<í®û‡û­Ý˜‹ßÌÅÏÌåe÷Oã°~5¿úC[k+P—;Ù&àþùîÎ|&¯XŽ“ßïþ=ä‘?}¸zÜÝ2Èüùãþp·ËëH?êÓ·»ÛÛ®å.ìºNcÄ‚Ž8øc<¤>¾»ãwÓøL%dk!LCE. È4»²TthLGz ßáãc¦¢4ò=_çä{=EèÚ£$y7”ýLÉ|K=¹õh¹–2—”½]¢<$(Çeîúꔕô=µÛc,WJ#¾¡N3ÔWU;UÔy‘ºTÔ½{õL©¤·XÝóüž)erçüAIxF’´Bï+IÒ’$C¯ ’„ñ¸éaÇöM¿–ozj×gy²,ÃZ§B޲kì·tO#S˜–ÉOݼL•ÑÑŒÑõ2Õ¶Gí}‹O]–ˆ;vU˜´ÊÉ$32Єwˆlñ†oe Ê.iÑ.}m—4¶K¦¢Á‡E }GŒ:eæ g(M,€yJ•ò¢Rm‡4¶CzýÚMÓЫ·¯ð6`7×B¯ìŒíŒj;ã±iSæÆ¢Bõ¾"§uŽî¦xgÛ¾Yÿj(Ún†ãÔÛj®<\ù/ú×þÄ?½ÂŽsü¶öø£+%õÝ9èÓúÙXQ˜ærK»ò›°è7\ûMû k™âÙŠõ s²ãIϰ3{¬¾ó+*H‰6(a¨L#,šצš=–?r9­0[øŸW\µ-Ü”QýÒÎl¶xâ½1Û¾¡rYt—P»Kh6[¾ç{Ós)ë×:ŒÙ1ñÕÅȢńÚb¤±˜~É–¦¯÷bËaf‹Ã»¾Y²¸z¤6 ›žŠûñÊ9ý|úiˆ—Ÿ¸Œ]:Þ6Ðs6»f²_3™×L^…9­˜\ïÂ^šLk&¯Akt¦5:×®ÿÒä¸b2wk&¯Ñ™×è̯íž±ü,ëâx|:œP¿»z*Ìåã_wæâ—çÃÝþ~÷4<ünÿexÂ×½ùzõ÷.›[?ÂN íýÕ—]}[OV4a“èK ›|ÖRDd“]ŠHÜäÓ—"’6ùF#ŸgÀ¹›L@ÃM=V:gô›|¼tdì%R…K Š<–8xô‹ À¤z­7À”j¤"©2Ç¢”gFz:Zǰϣ¾eªMùÕA%ÜÎòÍ[þî/¡–sô(°Î¯ÒI7 ª|2‚§@œ«cšÑ2jBß½˜7ÕÆ~ ¯‚ð#ZF?’H+I#`ZÓâpì$0ˆendstream endobj 501 0 obj << /Filter /FlateDecode /Length 76 >> stream xÚQQAåHi”¹a¬·ÆÃ `"   ACsøè²~úôF$ZS¢Ô„¹ {+û!fš´g^tÉðõ®ín¢íë>O£> endstream endobj 502 0 obj << /Filter /FlateDecode /Length 73 >> stream xÚ‰ 0 ÂÐ… ô 3Ã9YXh…€€‚†váG$D‰>}MáÙJ”š0iÊ‚MûœU#¤I/í™]ïÚ¹¡½™­Å£>endstream endobj 503 0 obj << /Filter /FlateDecode /Length 121 >> stream xÚMQA"ÈC‰k°c‚kpŸ~m„MÀs࣠À€€€€† çßÞ) qàæ¹ªèƒ6˜CZ°é¿p§„2ëA-ÔF¥+i³ºï¾Ódž> stream xÚ‹AA ¢ AèÁÄY¨™Šáºü’ pŠ‚G%,[Y¿&O#"Åd;f:Ón´mïüqö¸}úÜC*9endstream endobj 505 0 obj << /Filter /FlateDecode /Length 71 >> stream xÚŠAA ÂÐ…ž›š¹jj1,å @C`€(|]{õ‰a#Ï8*HÅÙÁŠobÑ>æØI]Q‚¶Ê‚ ¼5´endstream endobj 506 0 obj << /Filter /FlateDecode /Length 66 >> stream xÚÌQ PP¹’Gš[FÏóc;6ÀB@@AC÷û qqôgêjÂÁ÷„3¯¹6fò-MÚîî4mÿ8x•Æ3Æendstream endobj 507 0 obj << /Filter /FlateDecode /Length 113 >> stream xÚŽQ ACŸ”ÓQA˜™ŒˆM°0 £¡Ç^Ó)M‚£$júç/ ‰Ð ;^‡¢¼`‰¤†ÊröÞ°Åvòˆ§¨ Rå.ûˆ“œæk:ÕÝn×”¶or‹Û\Ïq> stream xÚŒA A Ñ…žKõ 3ˆáX„Ì4¾M¿ù(‰ã¢Ü»à¹"4p†ëƒE×nÜFL”tf•¶ûë›hŸø:9Jendstream endobj 509 0 obj << /Filter /FlateDecode /Length 74 >> stream xÚŒ A G‚ЃššY1\{¤ ,†¢à9>IÂZäùlyˆöVëÀ˜i¼èµý'Š+ªÔô:jÜ+¸—N/zßÒÎ<Ñendstream endobj 510 0 obj << /Filter /FlateDecode /Length 102 >> stream xÚ-Ž E1BÍe ó˜Æ27Œß=¾az& h(|íîzÝ“¨ÙÜäùôÞ¬}Ä·XŽrJM˜´`Ñnç|ñ-!b<+¹Ü²iÒK{æE|êÆe»/FG|àcWÿÊeáendstream endobj 511 0 obj << /Filter /FlateDecode /Length 182 >> stream xÚO± Ã0 ã?þ@7ô ƒ‹×` CWíó@—pô 9@ø U-AP€HPh€mÀè†NÐAá90 “˜ŽC•n½‚g{½íwiZ¡ÃH›°Ió°ƒvÈ®xü«Yf§Ñ•¼Å;Ç«Ïù~À­hNø„»ùé;ÏÑεDÈMtQ7µ];”R–æ:ÇúŒµ*¸Â-®"CŒêˆŒ]¢š‘™õ¤˜73> stream xÚ-N± Ä@ó>·3Ü4äZvÈ”î¿OG‘>uz?÷z$ÂÆ6Ðe€ð´}2ƒ[W”oØé§( Ñ #¢)J ¡fdXªRâšä"O’Ÿc|ÈkââºÈÚfUaÝýZª’î{÷Éx_Œ÷8µ3Ž%LÁ…Ð8d…æÒ?i˸2ÔÆj¹ßÖã >Üv=endstream endobj 513 0 obj << /Filter /FlateDecode /Length 98 >> stream xÚ-‹ QBÉE ò†2†ñãí9O " `A‚ չ຦ºæÔÃTzto®–-GeM¸œ`Ѧ3žxº7BĸV24Üd'»cNô³§mÙ5»ýܸÄÛìÄHbÂendstream endobj 514 0 obj << /Type /XRef /Length 772 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 85 0 R /Root 84 0 R /Size 515 /ID [<95f0364f12dcc295aaf35852b2913cd6><05affe8b7ce94335507c0cc8ca1d6d7c>] >> stream xœí–ÉoQ†ï½ŒUE)MÛˆ™ÐÖÐÔPóC$b!!±±h$* B,;QSÌSbjƒbŒyž‚RSUïsÄ÷þ,ø-ž¼9ßý{î9çžï .þ‚w.¾w!üþC¬sY‡vÖ놻cõÓDæ^‹L™ÙfedêäÈ¢K؇Ef5B—GÎL[ÏÊŠzú>ËÑ=Ys#²`ú3öšÈ¼›XzEf;ìk#¼Bïƒøïr€•¢çÒNèü«éOÁ0þ€“`ø¶†…ð‘<­…™‘Áž¿ÿÛÀ/ð›èf°=ìÂV°%¼,ûNÇsY“ ïsûî ©…ß!»w† óý`Þlß!²ãp8VCËÒIÑi° ,m%þ<£Kö^Õe¯ –59°~¨ˆ{‡åS’·‡²K ©ËHø^LªãŽ¡?ÂÇþñYð™ø´§w’ùÉ’ú<Žg:Üï‘ü?•J]“ŒõË‘l[$ùœŽl8º×û$þ6¼³[3©oµäíh§ß+•²jÖ%ùñémI’w}fÈî_%ª4yjYº ›&]êÊI{Kwûg©µUóÄp^â´¹ïþkªÐU²—­9 íVö;µƒ${Säì»’Süª½ÌC;8A:ÙjúŽ‚çà~ø’Ì”‰¥Z½¸aŒä¼?\‹¤Žvß³¥‚u¿ûßü;òVHůȾv®bé4ó?òfã]r ÌÃ4ì‹å¿]áhsÆf×BVV »ÃÙX–Ê©7bY‚žŠÞ€‡®’*W&™¼eü&øE¢+§Ë•*Ø48 ¹•î9ë­Ž6ÿy³Øô/XsIÎe·•l›êc…Ö™6[FHò%Z;ÝVéùëpfâ? E—'ýægA};<`åÙ}ÑšgîcØ m0½ƒÍð9è‰õ_nµëðìþú·ÄþI֥̯Œ_nޝ&¿2!Ý2ô*4_bþÚÖ¬‘™csæ.O·»Ÿ(­©< endstream endobj startxref 227258 %%EOF geosphere/build/0000755000176200001440000000000015164275510013340 5ustar liggesusersgeosphere/build/vignette.rds0000644000176200001440000000033415164275510015677 0ustar liggesusers‹uQÍ‚0 *^`¯<!1^ ñàu DÜȘ!Þ|r±(™Ú¤]·~_û5;x„“ØŽEL S+À0C_¡Ä&.ž~¢© &¼ÕŠë WRd—T•‚S%¨*€¾ ´fé‰åð¿cµâòcŠ ž¥Í6? ggh4þ<‚xÖ?ßóN£,¶pm…9ÌlÀØqYÁ8w_ª÷ÅÚEñ‰®á«ÿD¿+EŽ;øýWÜ0thú¢iÅ}Q/cŠ…G‰ü^÷¦c¦Ìgeosphere/build/partial.rdb0000644000176200001440000000007515164275457015501 0ustar liggesusers‹‹àb```b`aef`b1…À€… H02°0piÖ¼ÄÜÔb C"Éð+ƒ[7geosphere/man/0000755000176200001440000000000015147425256013021 5ustar liggesusersgeosphere/man/gcIntersect.Rd0000644000176200001440000000171015147425256015561 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/alongTrackDistance.Rd0000644000176200001440000000171415147425256017053 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/man/refEllipsoids.Rd0000644000176200001440000000117515147425256016120 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/gcMaxLat.Rd0000644000176200001440000000231715147425256015013 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/distMeeus.Rd0000644000176200001440000000546615147425256015265 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/centroid.Rd0000644000176200001440000000255215150650127015112 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/distCosine.Rd0000644000176200001440000000211515147425256015413 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/intermediate.Rd0000644000176200001440000000322215153104006015741 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, output=NULL, sepNA=FALSE, ...) } \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 spatial points object from terra (SpatVector) of sf} \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{output}{character. One of "list", "matrix", "sv" (SpatVector), "sf" or "sp". If \code{NULL}, the output is as in previous versions of this package for backwards compatibility} \item{sepNA}{logical. Separate matrix values for different points by a row of NA values? (e.g., for use in 'plot')} \item{...}{used for backwards compatibility, to pass arguments from previous versions of geosphere} } \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/perimeter.Rd0000644000176200001440000000321115147425256015301 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/dist2gc.Rd0000644000176200001440000000267015147425256014654 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/bearing.Rd0000644000176200001440000000300615147425256014716 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/greatCircle.Rd0000644000176200001440000000163115147425256015535 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/destPointRhumb.Rd0000644000176200001440000000214615147425256016262 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/geodesic.Rd0000644000176200001440000000663115147425256015100 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/makepoly.Rd0000644000176200001440000000221715147425256015133 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/mercator.Rd0000644000176200001440000000151215147425256015123 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/randomCoordinates.Rd0000644000176200001440000000211315147425256016760 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/geosphere-package.Rd0000644000176200001440000000443115147425256016664 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, South = 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/gcLat.Rd0000644000176200001440000000142115147425256014340 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/plotArrows.Rd0000644000176200001440000000211515147425256015463 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/distm.Rd0000644000176200001440000000200015147425256014420 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/onGreatCircle.Rd0000644000176200001440000000160615147425256016034 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/gcLon.Rd0000644000176200001440000000143415147425256014354 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/antipode.Rd0000644000176200001440000000222715147425256015116 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/bearingRhumb.Rd0000644000176200001440000000217015147425256015715 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/geomean.Rd0000644000176200001440000000141315147425256014722 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/horizon.Rd0000644000176200001440000000137515147425256015006 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/midPoint.Rd0000644000176200001440000000137015147425256015074 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/OSGB.Rd0000644000176200001440000000231015147425256014036 0ustar liggesusers\name{OSGB} \alias{OSGB} \title{ Ordnance Survey for Great Britain grid reference system } \description{ Convert coordinates to the grid reference system used by the Ordnance Survey for Great Britain. Or do the inverse operation to get coordinates for a grid code. } \usage{ OSGB(xy, precision, geo=FALSE, inverse=FALSE) } \arguments{ \item{xy}{x coordinate pairs (vector, matrix, data.frame}; or grid codes if \code{inverse=TRUE}. \item{precision}{character. One of "1m", "5m", "10m", "50m", "100m", "500m", "1km", "5km", "10km", "50km", "100km", "500km"} \item{geo}{If \code{TRUE} the input coordinates are in longitude/latitude (on the airy ellipsoid!). If \code{FALSE} they must be in the "OSGB36 / British National Grid" coordinate reference system ("EPSG:27700" or "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +units=m")} \item{inverse}{If \code{TRUE}, coordinates are computed for the grid codes in \code{x}} } \value{ character } \examples{ pnts <- rbind(cbind(93555 , 256188), cbind(210637, 349798), cbind(696457, 481704)) g <- OSGB(pnts, "1km", geo=FALSE) g OSGB(g, inverse=TRUE) } \keyword{ spatial } geosphere/man/distVincentyEllipsoid.Rd0000644000176200001440000000701615147425256017644 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/gcIntersectBearing.Rd0000644000176200001440000000231415147425256017052 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/distGeo.Rd0000644000176200001440000000551615147425256014715 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/distVincentySphere.Rd0000644000176200001440000000241515147425256017144 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/data.Rd0000644000176200001440000000053615147425256014225 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/greatCircleBearing.Rd0000644000176200001440000000152115147425256017023 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/span.Rd0000644000176200001440000000335715150634003014243 0ustar liggesusers\name{span} \alias{span} \alias{span,SpatialPolygons-method} \alias{span,SpatVector-method} \alias{span,sf-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 SpatVector, sf, or 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{ \donttest{ 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/destPoint.Rd0000644000176200001440000000354215147425256015265 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/distHaversine.Rd0000644000176200001440000000342115147425256016120 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/daylength.Rd0000644000176200001440000000172115147425256015270 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}{integer, day of the year (1..365) for common (non-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/finalDirection.Rd0000644000176200001440000000261715147425256016250 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/lengthLine.Rd0000644000176200001440000000112415147425256015377 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/dist2line.Rd0000644000176200001440000000340615147425256015210 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/distRhumb.Rd0000644000176200001440000000272115147425256015253 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/area.Rd0000644000176200001440000000420315147425256014217 0ustar liggesusers\name{areaPolygon} \Rdversion{1.1} \alias{areaPolygon} \alias{areaPolygon,matrix-method} \alias{areaPolygon,data.frame-method} \alias{areaPolygon,SpatVector-method} \alias{areaPolygon,sf-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 SpatVector, sf, or 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/DESCRIPTION0000644000176200001440000000172415164563437013763 0ustar liggesusersPackage: geosphere Type: Package Title: Spherical Trigonometry Version: 1.6-8 Date: 2026-04-04 LinkingTo: Rcpp Imports: Rcpp Depends: R (>= 3.0.0), methods Suggests: terra, sf, sp 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: 2026-04-04 20:57:44 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: 2026-04-05 22:50:07 UTC