rdbnomics/ 0000755 0001762 0000144 00000000000 13745355632 012247 5 ustar ligges users rdbnomics/NAMESPACE 0000644 0001762 0000144 00000000473 13745341126 013463 0 ustar ligges users # Generated by roxygen2: do not edit by hand
export(dbnomics)
export(rdb)
export(rdb_by_api_link)
export(rdb_datasets)
export(rdb_dimensions)
export(rdb_last_updates)
export(rdb_providers)
export(rdb_rename_xts)
export(rdb_series)
export(rdb_to_xts)
import(curl)
import(data.table)
import(jsonlite)
rdbnomics/README.md 0000644 0001762 0000144 00000004743 13732216355 013530 0 ustar ligges users # rdbnomics
[](https://cran.r-project.org/package=rdbnomics)
[](https://cran.r-project.org/package=rdbnomics)
[](https://git.nomics.world/dbnomics/rdbnomics/commits/master)
[](https://CRAN.R-project.org/package=rdbnomics)
## DBnomics R client
This package provides you access to DBnomics data series. DBnomics is an open-source project with the goal of aggregating the world's economic data in one location, free of charge to the public. DBnomics covers hundreds of millions of series from international and national institutions (Eurostat, World Bank, IMF, ECB, ...).
To use this package, you have to provide the codes of the provider, dataset and series you want. You can retrieve them directly on the website. You have access to the API through this link and the documentation is here.
DBnomics is hosted on its own gitlab platform. However, in order to install the package more easily, we created a mirror of this package on github.
To install `rdbnomics` from CRAN:
```r
install.packages("rdbnomics")
library(rdbnomics)
```
To install `rdbnomics` from github:
```r
remotes::install_github("dbnomics/rdbnomics", build_vignettes = TRUE, force = TRUE)
library(rdbnomics)
```
After installation, a vignette is available to the user with:
* many examples,
* how to configure a proxy,
* how to use default R internet connection,
* transform time series with filters,
* ...
Just follow the link rdbnomics or run:
```r
vignette("rdbnomics")
```
A lot of examples are available in the functions' documentations:
```r
?rdb
?rdb_datasets
?rdb_dimensions
?rdb_series
?rdb_providers
?rdb_last_updates
?rdb_to_xts
?rdb_rename_xts
```
## P.S.
Visit https://db.nomics.world/ !
rdbnomics/man/ 0000755 0001762 0000144 00000000000 13744116260 013011 5 ustar ligges users rdbnomics/man/rdb_to_xts.Rd 0000644 0001762 0000144 00000002320 13732202726 015444 0 ustar ligges users % Generated by roxygen2: do not edit by hand
% Please edit documentation in R/rdb_to_xts.R
\name{rdb_to_xts}
\alias{rdb_to_xts}
\title{Transform the data.table object into a xts object}
\usage{
rdb_to_xts(
x,
needed_columns = c("period", "series_code", "series_name", "value"),
series_columns = c("series_code", "series_name")
)
}
\arguments{
\item{x}{\code{data.table}. The \code{data.table} returned by the \code{rdb}
function.}
\item{needed_columns}{Vector of character strings (default
\code{c("period", "series_code", "series_name", "value")}). Vector of column
names which are needed to transform the \code{data.table} into a \code{xts}
object.}
\item{series_columns}{Vector of character strings (default
\code{c("series_code", "series_name")}). Vector of series column
names.}
}
\value{
A \code{xts} object.
}
\description{
For some analysis, it is more convenient to have a \code{xts} object
instead of a \code{data.table} object.
}
\examples{
\dontrun{
library(xts)
library(data.table)
library(rdbnomics)
df <- rdb("IMF", "BOP", mask = "A.FR+ES.BCA_BP6_EUR")
rdb_to_xts(df)
}
}
\seealso{
\code{\link{rdb}}, \code{\link{rdb_rename_xts}}
}
\author{
Sebastien Galais
}
rdbnomics/man/rdbnomics.Rd 0000644 0001762 0000144 00000000362 13732202726 015261 0 ustar ligges users % Generated by roxygen2: do not edit by hand
% Please edit documentation in R/rdbnomics.R
\docType{package}
\name{rdbnomics}
\alias{rdbnomics}
\title{Package rdbnomics}
\description{
DBnomics R client ().
}
rdbnomics/man/rdb_dimensions.Rd 0000644 0001762 0000144 00000006464 13744120107 016304 0 ustar ligges users % Generated by roxygen2: do not edit by hand
% Please edit documentation in R/rdb_dimensions.R
\name{rdb_dimensions}
\alias{rdb_dimensions}
\title{Download list of dimensions for datasets of DBnomics providers.}
\usage{
rdb_dimensions(
provider_code = NULL,
dataset_code = NULL,
use_readLines = getOption("rdbnomics.use_readLines"),
curl_config = getOption("rdbnomics.curl_config"),
simplify = FALSE,
...
)
}
\arguments{
\item{provider_code}{Character string (default \code{NULL}). DBnomics code
of one or multiple providers. If \code{NULL}, the providers are firstly
dowloaded with the function \code{\link{rdb_providers}} and then the
datasets are requested.}
\item{dataset_code}{Character string (default \code{NULL}). DBnomics code
of one or multiple datasets of a provider. If \code{NULL}, the datasets
codes are dowloaded with the function \code{\link{rdb_datasets}} and then
the dimensions are requested.}
\item{use_readLines}{Logical (default \code{FALSE}). If \code{TRUE}, then
the data are requested and read with the base function \code{readLines} i.e.
through the default R internet connection. This can be used to get round the
error \code{Could not resolve host: api.db.nomics.world}.}
\item{curl_config}{Named list (default \code{NULL}). If not
\code{NULL}, it is used to configure a proxy connection. This
configuration is passed to the function \code{curl_fetch_memory} of the package
\pkg{curl}. A temporary \code{curl_handle} object is created internally
with arguments equal to the provided list in \code{curl_config}.\cr
For \code{curl_fetch_memory} arguments see \code{\link[curl]{curl_fetch}}.
For available curl options see \code{\link[curl]{curl_options}},
\code{names(curl_options())} and
\href{https://curl.haxx.se/libcurl/c/curl_easy_setopt.html}{libcurl}.}
\item{simplify}{Logical (default \code{FALSE}). If \code{TRUE}, when the
dimensions are requested for only one provider and one dataset then a
named list of \code{data.table}s is returned, not a nested named list of
\code{data.table}s.}
\item{...}{Additionals arguments.}
}
\value{
A nested named list of \code{data.table}s or a named list of
\code{data.table}s.
}
\description{
\code{rdb_dimensions} downloads the list of dimensions (if they exist) for
available datasets of a selection of providers from
\href{https://db.nomics.world/}{DBnomics}.
}
\details{
By default, the function returns a nested named list of \code{data.table}s
containing the dimensions of datasets for providers from
\href{https://db.nomics.world/}{DBnomics}.
}
\examples{
\dontrun{
rdb_dimensions(provider_code = "IMF", dataset_code = "WEO:2019-10")
rdb_dimensions(provider_code = "IMF", dataset_code = "WEO:2019-10", simplify = TRUE)
rdb_dimensions(provider_code = "IMF")
# /!\ It is very long !
options(rdbnomics.progress_bar_dimensions = TRUE)
rdb_dimensions()
options(rdbnomics.progress_bar_dimensions = FALSE)
rdb_dimensions(
provider_code = "IMF", dataset_code = "WEO:2019-10",
use_readLines = TRUE
)
rdb_dimensions(
provider_code = "IMF", dataset_code = "WEO:2019-10",
curl_config = list(proxy = "", proxyport = )
)
}
}
\seealso{
\code{\link{rdb_providers}}, \code{\link{rdb_last_updates}},
\code{\link{rdb_datasets}}, \code{\link{rdb_series}}
}
\author{
Sebastien Galais
}
rdbnomics/man/rdb_by_api_link.Rd 0000644 0001762 0000144 00000012304 13744120107 016402 0 ustar ligges users % Generated by roxygen2: do not edit by hand
% Please edit documentation in R/rdb_by_api_link.R
\name{rdb_by_api_link}
\alias{rdb_by_api_link}
\title{Download DBnomics data using API link (deprecated).}
\usage{
rdb_by_api_link(
api_link,
use_readLines = getOption("rdbnomics.use_readLines"),
curl_config = getOption("rdbnomics.curl_config"),
filters = getOption("rdbnomics.filters")
)
}
\arguments{
\item{api_link}{Character string. DBnomics API link of the search.}
\item{use_readLines}{Logical (default \code{FALSE}). If \code{TRUE}, then
the data are requested and read with the base function \code{readLines} i.e.
through the default R internet connection. This can be used to get round the
error \code{Could not resolve host: api.db.nomics.world}.}
\item{curl_config}{Named list (default \code{NULL}). If not
\code{NULL}, it is used to configure a proxy connection. This
configuration is passed to the function \code{curl_fetch_memory} of the package
\pkg{curl}. A temporary \code{curl_handle} object is created internally
with arguments equal to the provided list in \code{curl_config}.\cr
For \code{curl_fetch_memory} arguments see \code{\link[curl]{curl_fetch}}.
For available curl options see \code{\link[curl]{curl_options}},
\code{names(curl_options())} and
\href{https://curl.haxx.se/libcurl/c/curl_easy_setopt.html}{libcurl}.}
\item{filters}{List (default \code{NULL}). This argument must be a named
list for one filter because the function \code{toJSON} of the package \pkg{jsonlite}
is used before sending the request to the server. For multiple filters,
you have to provide a list of valid filters (see examples).\cr
A valid filter is a named list with an element \code{code} which is a character string,
and an element \code{parameters} which is a named list with elements \code{frequency}
and \code{method} or a NULL.}
}
\value{
A \code{data.table}.
}
\description{
\code{rdb_by_api_link} downloads data series from
\href{https://db.nomics.world/}{DBnomics}.
}
\details{
This function gives you access to hundreds of millions data series from
\href{https://api.db.nomics.world/}{DBnomics API} (documentation about
the API can be found \href{https://api.db.nomics.world/v22/apidocs}{here}).
The API link is given on the
\href{https://db.nomics.world/}{DBnomics website}.
}
\examples{
\dontrun{
# Fetch two series from different datasets of different providers :
df1 <- rdb_by_api_link(
paste0(
"https://api.db.nomics.world/v22/",
"series?observations=1&series_ids=AMECO/ZUTN/EA19.1.0.0.0.ZUTN,IMF/CPI/A.AT.PCPIT_IX"
)
)
# Fetch one series from the dataset 'Doing Business' of WB provider :
df2 <- rdb_by_api_link(
paste0(
"https://api.db.nomics.world/v22/series/WB/DB?dimensions=\%7B\%22",
"indicator\%22\%3A\%5B\%22IC.REG.PROC.FE.NO\%22\%5D\%7D&q=Doing\%20Business",
"&observations=1&format=json&align_periods=1&offset=0&facets=0"
)
)
## Use a specific proxy to fetch the data
# Fetch one series from the dataset 'Doing Business' of WB provider :
h <- list(
proxy = "",
proxyport = ,
proxyusername = "",
proxypassword = ""
)
options(rdbnomics.curl_config = h)
df2 <- rdb_by_api_link(
paste0(
"https://api.db.nomics.world/v22/series/WB/DB?dimensions=\%7B\%22",
"indicator\%22\%3A\%5B\%22IC.REG.PROC.FE.NO\%22\%5D\%7D&q=Doing\%20Business",
"&observations=1&format=json&align_periods=1&offset=0&facets=0"
)
)
# or to use once
df2 <- rdb_by_api_link(
paste0(
"https://api.db.nomics.world/v22/series/WB/DB?dimensions=\%7B\%22",
"indicator\%22\%3A\%5B\%22IC.REG.PROC.FE.NO\%22\%5D\%7D&q=Doing\%20Business",
"&observations=1&format=json&align_periods=1&offset=0&facets=0"
),
curl_config = h
)
## Use R default connection to avoid a proxy failure (in some cases)
# Fetch one series from the dataset 'Doing Business' of WB provider :
options(rdbnomics.use_readLines = TRUE)
df2 <- rdb_by_api_link(
paste0(
"https://api.db.nomics.world/v22/series/WB/DB?dimensions=\%7B\%22",
"indicator\%22\%3A\%5B\%22IC.REG.PROC.FE.NO\%22\%5D\%7D&q=Doing\%20Business",
"&observations=1&format=json&align_periods=1&offset=0&facets=0"
)
)
# or to use once
df2 <- rdb_by_api_link(
paste0(
"https://api.db.nomics.world/v22/series/WB/DB?dimensions=\%7B\%22",
"indicator\%22\%3A\%5B\%22IC.REG.PROC.FE.NO\%22\%5D\%7D&q=Doing\%20Business",
"&observations=1&format=json&align_periods=1&offset=0&facets=0"
),
use_readLines = TRUE
)
## Apply filter(s) to the series
# One filter
df3 <- rdb_by_api_link(
"https://api.db.nomics.world/v22/series/IMF/WEO:2019-10/ABW.BCA?observations=1",
filters = list(
code = "interpolate",
parameters = list(frequency = "daily", method = "spline")
)
)
# Two filters
df3 <- rdb_by_api_link(
"https://api.db.nomics.world/v22/series/IMF/WEO:2019-10/ABW.BCA?observations=1",
filters = list(
list(
code = "interpolate",
parameters = list(frequency = "quarterly", method = "spline")
),
list(
code = "aggregate",
parameters = list(frequency = "annual", method = "average")
)
)
)
}
}
\seealso{
\code{\link{rdb}}
}
\author{
Sebastien Galais
}
rdbnomics/man/rdb.Rd 0000644 0001762 0000144 00000021644 13744122031 014047 0 ustar ligges users % Generated by roxygen2: do not edit by hand
% Please edit documentation in R/rdb.R
\name{rdb}
\alias{rdb}
\title{Download DBnomics data.}
\usage{
rdb(
provider_code = NULL,
dataset_code = NULL,
ids = NULL,
dimensions = NULL,
mask = NULL,
query = NULL,
api_link = NULL,
filters = getOption("rdbnomics.filters"),
use_readLines = getOption("rdbnomics.use_readLines"),
curl_config = getOption("rdbnomics.curl_config"),
verbose = getOption("rdbnomics.verbose_warning"),
...
)
}
\arguments{
\item{provider_code}{Character string (default \code{NULL}). DBnomics code
of the provider.}
\item{dataset_code}{Character string (default \code{NULL}). DBnomics code
of the dataset.}
\item{ids}{Character string (default \code{NULL}). DBnomics code of one or
several series.}
\item{dimensions}{List or character string (single quoted) (default \code{NULL}).
DBnomics code of one or several dimensions in the specified provider and dataset.
If it is a named list, then the function \code{toJSON} (from the
package \pkg{jsonlite}) is applied to generate the json object.}
\item{mask}{Character string (default \code{NULL}). DBnomics code of one or
several masks in the specified provider and dataset.}
\item{query}{Character string (default \code{NULL}). A query to
filter/select series from a provider's dataset.}
\item{api_link}{Character string. DBnomics API link of the search. It should
starts with \code{http://} or \code{https://}.}
\item{filters}{List (default \code{NULL}). This argument must be a named
list for one filter because the function \code{toJSON} of the package \pkg{jsonlite}
is used before sending the request to the server. For multiple filters,
you have to provide a list of valid filters (see examples).\cr
A valid filter is a named list with an element \code{code} which is a character string,
and an element \code{parameters} which is a named list with elements \code{frequency}
and \code{method} or a NULL.}
\item{use_readLines}{Logical (default \code{FALSE}). If \code{TRUE}, then
the data are requested and read with the base function \code{readLines} i.e.
through the default R internet connection. This can be used to get round the
error \code{Could not resolve host: api.db.nomics.world}.}
\item{curl_config}{Named list (default \code{NULL}). If not
\code{NULL}, it is used to configure a proxy connection. This
configuration is passed to the function \code{curl_fetch_memory} of the package
\pkg{curl}. A temporary \code{curl_handle} object is created internally
with arguments equal to the provided list in \code{curl_config}.\cr
For \code{curl_fetch_memory} arguments see \code{\link[curl]{curl_fetch}}.
For available curl options see \code{\link[curl]{curl_options}},
\code{names(curl_options())} and
\href{https://curl.haxx.se/libcurl/c/curl_easy_setopt.html}{libcurl}.}
\item{verbose}{Logical (default \code{FALSE}). Show warnings of the function.}
\item{...}{Arguments to be passed to the internal function \code{.rdb}.}
}
\value{
A \code{data.table}.
}
\description{
\code{rdb} downloads data series from
\href{https://db.nomics.world/}{DBnomics} using shortcuts like \code{ids},
\code{dimensions}, \code{mask}, \code{query} or using an \code{api_link}.
}
\details{
This function gives you access to hundreds of millions data series from
\href{https://api.db.nomics.world/}{DBnomics API} (documentation about
the API can be found \href{https://api.db.nomics.world/v22/apidocs}{here}).
The code of each series is given on the
\href{https://db.nomics.world/}{DBnomics website}. \cr\cr
In the event that only the argument \code{ids} is provided (and those in the
ellipsis \code{...}), the argument name can be dropped. The character string
vector is directly passed to \code{ids}. \cr
If only the argument \code{api_link} is provided (and those in the
ellipsis \code{...}), then the argument name can be dropped. The character string
vector is directly passed to \code{api_link}. \cr
In the same way, if only \code{provider_code}, \code{dataset_code} and
\code{mask} are provided then the arguments names can be dropped. The
last character string is automatically passed to \code{mask}.
}
\examples{
\dontrun{
## By ids
# Fetch one series from dataset 'Unemployment rate' (ZUTN) of AMECO provider:
df1 <- rdb(ids = "AMECO/ZUTN/EA19.1.0.0.0.ZUTN")
# or when no argument names are given (provider_code -> ids)
df1 <- rdb("AMECO/ZUTN/EA19.1.0.0.0.ZUTN")
# Fetch two series from dataset 'Unemployment rate' (ZUTN) of AMECO provider:
df2 <- rdb(ids = c("AMECO/ZUTN/EA19.1.0.0.0.ZUTN", "AMECO/ZUTN/DNK.1.0.0.0.ZUTN"))
# Fetch two series from different datasets of different providers:
df3 <- rdb(ids = c("AMECO/ZUTN/EA19.1.0.0.0.ZUTN", "IMF/BOP/A.FR.BCA_BP6_EUR"))
## By dimensions
# Fetch one value of one dimension from dataset 'Unemployment rate' (ZUTN) of AMECO provider:
df1 <- rdb("AMECO", "ZUTN", dimensions = list(geo = "ea12"))
# or
df1 <- rdb("AMECO", "ZUTN", dimensions = '{"geo":["ea12"]}')
# Fetch two values of one dimension from dataset 'Unemployment rate' (ZUTN) of AMECO provider:
df2 <- rdb("AMECO", "ZUTN", dimensions = list(geo = c("ea12", "dnk")))
# or
df2 <- rdb("AMECO", "ZUTN", dimensions = '{"geo":["ea12","dnk"]}')
# Fetch several values of several dimensions from dataset 'Doing business' (DB) of World Bank:
dim <- list(
country = c("DZ", "PE"),
indicator = c("ENF.CONT.COEN.COST.ZS", "IC.REG.COST.PC.FE.ZS")
)
df3 <- rdb("WB", "DB", dimensions = dim)
# or
dim <- paste0(
'{"country":["DZ","PE"],',
'"indicator":["ENF.CONT.COEN.COST.ZS","IC.REG.COST.PC.FE.ZS"]}'
)
df3 <- rdb("WB", "DB", dimensions = dim)
## By mask
# Fetch one series from dataset 'Balance of Payments' (BOP) of IMF:
df1 <- rdb("IMF", "BOP", mask = "A.FR.BCA_BP6_EUR")
# or when no argument names are given except provider_code and dataset_code (ids -> mask)
df1 <- rdb("IMF", "BOP", "A.FR.BCA_BP6_EUR")
# Fetch two series from dataset 'Balance of Payments' (BOP) of IMF:
df2 <- rdb("IMF", "BOP", mask = "A.FR+ES.BCA_BP6_EUR")
# Fetch all series along one dimension from dataset 'Balance of Payments' (BOP) of IMF:
df3 <- rdb("IMF", "BOP", mask = "A..BCA_BP6_EUR")
# Fetch series along multiple dimensions from dataset 'Balance of Payments' (BOP) of IMF:
df4 <- rdb("IMF", "BOP", mask = "A.FR.BCA_BP6_EUR+IA_BP6_EUR")
## By query
# Fetch one series from dataset 'WEO by countries (2019-10 release)' (WEO:2019-10) from IMF :
df1 <- rdb("IMF", "WEO:2019-10", query = "France current account balance percent")
# Fetch series from dataset 'WEO by countries (2019-10 release)' (WEO:2019-10) from IMF :
df2 <- rdb("IMF", "WEO:2019-10", query = "current account balance percent")
## By api_link
# Fetch two series from different datasets of different providers :
df1 <- rdb(
api_link = paste0(
"https://api.db.nomics.world/v22/",
"series?observations=1&series_ids=AMECO/ZUTN/EA19.1.0.0.0.ZUTN,IMF/CPI/A.AT.PCPIT_IX"
)
)
# Fetch one series from the dataset 'Doing Business' of WB provider :
df2 <- rdb(
api_link = paste0(
"https://api.db.nomics.world/v22/series/WB/DB?dimensions=\%7B\%22",
"indicator\%22\%3A\%5B\%22IC.REG.PROC.FE.NO\%22\%5D\%7D&q=Doing\%20Business",
"&observations=1&format=json&align_periods=1&offset=0&facets=0"
)
)
# or when no argument names are given (provider_code -> api_link)
df1 <- rdb(
paste0(
"https://api.db.nomics.world/v22/",
"series?observations=1&series_ids=AMECO/ZUTN/EA19.1.0.0.0.ZUTN,IMF/CPI/A.AT.PCPIT_IX"
)
)
## Use a specific proxy to fetch the data
# Fetch one series from dataset 'Unemployment rate' (ZUTN) of AMECO provider :
h <- list(
proxy = "",
proxyport = ,
proxyusername = "",
proxypassword = ""
)
options(rdbnomics.curl_config = h)
df1 <- rdb(ids = "AMECO/ZUTN/EA19.1.0.0.0.ZUTN")
# or to use once
options(rdbnomics.curl_config = NULL)
df1 <- rdb(ids = "AMECO/ZUTN/EA19.1.0.0.0.ZUTN", curl_config = h)
## Use R default connection to avoid a proxy failure (in some cases)
# Fetch one series from dataset 'Unemployment rate' (ZUTN) of AMECO provider :
options(rdbnomics.use_readLines = TRUE)
df1 <- rdb(ids = "AMECO/ZUTN/EA19.1.0.0.0.ZUTN")
# or to use once
df1 <- rdb(ids = "AMECO/ZUTN/EA19.1.0.0.0.ZUTN", use_readLines = TRUE)
## Apply filter(s) to the series
# One filter
df1 <- rdb(
ids = c("IMF/WEO:2019-10/ABW.BCA.us_dollars", "IMF/WEO:2019-10/ABW.BCA_NGDPD.pcent_gdp"),
filters = list(
code = "interpolate",
parameters = list(frequency = "daily", method = "spline")
)
)
# Two filters
df1 <- rdb(
ids = c("IMF/WEO:2019-10/ABW.BCA.us_dollars", "IMF/WEO:2019-10/ABW.BCA_NGDPD.pcent_gdp"),
filters = list(
list(
code = "interpolate",
parameters = list(frequency = "quarterly", method = "spline")
),
list(
code = "aggregate",
parameters = list(frequency = "annual", method = "average")
)
)
)
}
}
\author{
Sebastien Galais
}
rdbnomics/man/figures/ 0000755 0001762 0000144 00000000000 13744116260 014455 5 ustar ligges users rdbnomics/man/figures/logo.png 0000644 0001762 0000144 00000075440 13371134545 016137 0 ustar ligges users PNG
IHDR sRGB gAMA a pHYs &? zIDATx^kՙ?/&fb3q]TA\;(A@䦀"((" (>\џcTbjRIa̔5J%T*Ij|_uڬ{g_ߪOW^g=W*zlLSs[G?3Rt̔w:ɜ^ |?DU;RZRI8cesb+3&@J`\Xλʜ6]eZL3SA칀IB:'yl*1!iZ&݈W|Zr?UZʔZMIjt̻|e! jșt"E4l2h9cWzWz%pCL.ؗ$=\DΜ-5 fF-VŶA_A#<06&;&=G'˜FcHLpCmͦdl{͘ņhkٿA3g3}vۘ=c,6lG͜?mLvM\0BFo^SfX3g~
K`+27|<ɚ7n Fn;[NϻvlدM=}e`Ǘ_fG:ͶH9kq帿fQw'D?306t=ImÎ~'?o2J%|)MzxFΜ2վ"e^af^ikmC3 qJVLeZI&jeWpi-`Lң=XpeZȤUfy?%#œ=70I^\3{)ISLTJTg*$3ysqf=s;qt§#g&S
iNS]8]dpDƥC2TJTҸ3IH^IDƵIR|0W`WlD{x"V&݃kFܑ3I2Llxxsb$Nڝҁ3W0s
3W0sJ̹ap'}G2W.3v7|hg_Ȇueۃ[s6-g後t촗M{߭!7=n65˰3FPi,m ~bqDܦd ˜
*茀`q_hlŕX
ٗ a^66`=+%3g_zȿazyI7ޡ_`or
cm8so_Wxmm&d
79Glx3z:7m{mNG_7G<һWw7J,(Ǟ{YV!j;¬ڼu\+͝+X Rfr""=*&{f
6]&)~h#NTMl:I^2r#N&Mrґ{")!I`o,K!gr0tIy qI`Օ/lVBg*(7ARwwsj+SAIp3Qզ2^'PiAx-pg*(7nO2<;1A_n&&.ljQn/ NuU*u:yc9Bh@bH{5
oKǩ+_Ԣѕi]*H@:7^4ɣ\I7w&T.`|rHWKHiLҔA]ʓnh ewƥwe)ږx eR9bxx\p+eTFX;cugRBDBxt5'v #ѹv}
2gVc"EẂrN@ǭS-$EJǭS-$EJǭS-$EJǭS-$EJǭS-$EJǭS-$EJǭS-$EJǭS-$EJǭS-$EJǭS-$EZ.R\v
w[=EYܣR:0RZAR"U6nj)-`]~A"]k"Upº۰n}nwݰkqx-V~7<ea܃BRa+"Hqr%.p>
ߐ-ASgv_1`ce L{P0BΖC%En j)-`Tqvw2Hq2|X=%ZºJ܊ VnYj)-`:u`܃HIu`܃HIu`܃lDv oKw_
<2 O;FMR8M˳6ۣցrB$Hm/a,Y^g̛y_I7|WU3ћ_Suc]I}|<_knk`_٠?|}ZCW:/{uX,ȇæo2Zǂ~z{ }y~ąJM.}=<,iūv |Q]6g?L{#;?{Co ?whI7omFbIO`zL=r[x'2}=# VK
}>|T}Uz߬]Q(8=Sfd07_rg])s_X!{y$E8r1$:RPNGCRϸv9w)'}$1HͿI RZZbm-qe{ucVoI;|# j;-BF&L@x-^c`_؋'N{l5Sd`BL)W.[I~"[L
xTS0 ~`NO%JV5,cw*Jqp1*J >]!|]`:J(UNE739oLQT:p;bɭ,,mP"U)IϺBTR/~s8UmI9׀OMTTڊ3EB:%]mVrLR<uSQIH*O=!VJTTATR&D\:G?NCo
S*$XC&=dD
m/ͼM/QAI,pFJ0ITW;¬6RZZ2Io>SX n(wxAѳ&+!0C*ZmԸ2
BUQ&].eT*zAʏ^U̝-D%,ey;xA^)ڗHʀFCwM?:|ֻXJU3ب%jnʹuj&XZP&